From c42514820f1fb83608f45494c4cf7423b9349f45 Mon Sep 17 00:00:00 2001 From: Eric Guo Date: Sun, 23 Apr 2023 11:37:38 -0400 Subject: [PATCH] Integration -- now at issue with requests through website --- Ball-101/bin/activate | 76 ------ Ball-101/bin/activate.csh | 37 --- Ball-101/bin/activate.fish | 75 ------ Ball-101/bin/convert-caffe2-to-onnx | 10 - Ball-101/bin/convert-onnx-to-caffe2 | 10 - Ball-101/bin/dotenv | 10 - Ball-101/bin/epylint | 8 - Ball-101/bin/f2py | 10 - Ball-101/bin/f2py3 | 10 - Ball-101/bin/f2py3.7 | 10 - Ball-101/bin/fonttools | 10 - Ball-101/bin/get_objgraph | 54 ----- Ball-101/bin/google-oauthlib-tool | 8 - Ball-101/bin/iptest | 10 - Ball-101/bin/iptest3 | 10 - Ball-101/bin/ipython | 10 - Ball-101/bin/ipython3 | 10 - Ball-101/bin/isort | 8 - Ball-101/bin/isort-identify-imports | 8 - Ball-101/bin/jsonschema | 10 - Ball-101/bin/markdown-it | 10 - Ball-101/bin/markdown_py | 8 - Ball-101/bin/normalizer | 10 - Ball-101/bin/pip | 10 - Ball-101/bin/pip3 | 10 - Ball-101/bin/pip3.7 | 10 - Ball-101/bin/plasma_store | 10 - Ball-101/bin/pyftmerge | 10 - Ball-101/bin/pyftsubset | 10 - Ball-101/bin/pygmentize | 10 - Ball-101/bin/pylint | 8 - Ball-101/bin/pylint-config | 8 - Ball-101/bin/pyreverse | 8 - Ball-101/bin/pyrsa-decrypt | 10 - Ball-101/bin/pyrsa-encrypt | 10 - Ball-101/bin/pyrsa-keygen | 10 - Ball-101/bin/pyrsa-priv2pub | 10 - Ball-101/bin/pyrsa-sign | 10 - Ball-101/bin/pyrsa-verify | 10 - Ball-101/bin/pysemver | 10 - Ball-101/bin/python | 1 - Ball-101/bin/python3 | 1 - Ball-101/bin/streamlit | 10 - Ball-101/bin/streamlit.cmd | 16 -- Ball-101/bin/symilar | 8 - Ball-101/bin/tensorboard | 8 - Ball-101/bin/torchrun | 10 - Ball-101/bin/tqdm | 10 - Ball-101/bin/ttx | 10 - Ball-101/bin/undill | 22 -- Ball-101/bin/uvicorn | 10 - Ball-101/bin/watchfiles | 10 - Ball-101/bin/wheel | 10 - .../jupyter/nbconfig/notebook.d/pydeck.json | 5 - Ball-101/pyvenv.cfg | 3 - .../nbextensions/pydeck/extensionRequires.js | 15 -- .../jupyter/nbextensions/pydeck/index.js | 26 -- .../jupyter/nbextensions/pydeck/index.js.map | 1 - Ball-101/share/man/man1/ipython.1.gz | Bin 1039 -> 0 bytes Ball-101/share/man/man1/ttx.1 | 225 ------------------ model/StrongSORT-YOLO/testing.jpg | Bin 131803 -> 518031 bytes model/StrongSORT-YOLO/yolov5/utils/plots.py | 2 +- 62 files changed, 1 insertion(+), 988 deletions(-) delete mode 100755 Ball-101/bin/activate delete mode 100755 Ball-101/bin/activate.csh delete mode 100755 Ball-101/bin/activate.fish delete mode 100755 Ball-101/bin/convert-caffe2-to-onnx delete mode 100755 Ball-101/bin/convert-onnx-to-caffe2 delete mode 100755 Ball-101/bin/dotenv delete mode 100755 Ball-101/bin/epylint delete mode 100755 Ball-101/bin/f2py delete mode 100755 Ball-101/bin/f2py3 delete mode 100755 Ball-101/bin/f2py3.7 delete mode 100755 Ball-101/bin/fonttools delete mode 100755 Ball-101/bin/get_objgraph delete mode 100755 Ball-101/bin/google-oauthlib-tool delete mode 100755 Ball-101/bin/iptest delete mode 100755 Ball-101/bin/iptest3 delete mode 100755 Ball-101/bin/ipython delete mode 100755 Ball-101/bin/ipython3 delete mode 100755 Ball-101/bin/isort delete mode 100755 Ball-101/bin/isort-identify-imports delete mode 100755 Ball-101/bin/jsonschema delete mode 100755 Ball-101/bin/markdown-it delete mode 100755 Ball-101/bin/markdown_py delete mode 100755 Ball-101/bin/normalizer delete mode 100755 Ball-101/bin/pip delete mode 100755 Ball-101/bin/pip3 delete mode 100755 Ball-101/bin/pip3.7 delete mode 100755 Ball-101/bin/plasma_store delete mode 100755 Ball-101/bin/pyftmerge delete mode 100755 Ball-101/bin/pyftsubset delete mode 100755 Ball-101/bin/pygmentize delete mode 100755 Ball-101/bin/pylint delete mode 100755 Ball-101/bin/pylint-config delete mode 100755 Ball-101/bin/pyreverse delete mode 100755 Ball-101/bin/pyrsa-decrypt delete mode 100755 Ball-101/bin/pyrsa-encrypt delete mode 100755 Ball-101/bin/pyrsa-keygen delete mode 100755 Ball-101/bin/pyrsa-priv2pub delete mode 100755 Ball-101/bin/pyrsa-sign delete mode 100755 Ball-101/bin/pyrsa-verify delete mode 100755 Ball-101/bin/pysemver delete mode 120000 Ball-101/bin/python delete mode 120000 Ball-101/bin/python3 delete mode 100755 Ball-101/bin/streamlit delete mode 100755 Ball-101/bin/streamlit.cmd delete mode 100755 Ball-101/bin/symilar delete mode 100755 Ball-101/bin/tensorboard delete mode 100755 Ball-101/bin/torchrun delete mode 100755 Ball-101/bin/tqdm delete mode 100755 Ball-101/bin/ttx delete mode 100755 Ball-101/bin/undill delete mode 100755 Ball-101/bin/uvicorn delete mode 100755 Ball-101/bin/watchfiles delete mode 100755 Ball-101/bin/wheel delete mode 100755 Ball-101/etc/jupyter/nbconfig/notebook.d/pydeck.json delete mode 100755 Ball-101/pyvenv.cfg delete mode 100755 Ball-101/share/jupyter/nbextensions/pydeck/extensionRequires.js delete mode 100755 Ball-101/share/jupyter/nbextensions/pydeck/index.js delete mode 100755 Ball-101/share/jupyter/nbextensions/pydeck/index.js.map delete mode 100755 Ball-101/share/man/man1/ipython.1.gz delete mode 100755 Ball-101/share/man/man1/ttx.1 diff --git a/Ball-101/bin/activate b/Ball-101/bin/activate deleted file mode 100755 index 66f9d58d..00000000 --- a/Ball-101/bin/activate +++ /dev/null @@ -1,76 +0,0 @@ -# This file must be used with "source bin/activate" *from bash* -# you cannot run it directly - -deactivate () { - # reset old environment variables - if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then - PATH="${_OLD_VIRTUAL_PATH:-}" - export PATH - unset _OLD_VIRTUAL_PATH - fi - if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then - PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" - export PYTHONHOME - unset _OLD_VIRTUAL_PYTHONHOME - fi - - # This should detect bash and zsh, which have a hash command that must - # be called to get it to forget past commands. Without forgetting - # past commands the $PATH changes we made may not be respected - if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then - hash -r - fi - - if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then - PS1="${_OLD_VIRTUAL_PS1:-}" - export PS1 - unset _OLD_VIRTUAL_PS1 - fi - - unset VIRTUAL_ENV - if [ ! "${1:-}" = "nondestructive" ] ; then - # Self destruct! - unset -f deactivate - fi -} - -# unset irrelevant variables -deactivate nondestructive - -VIRTUAL_ENV="/Users/ericguo/CDS/Ball-101/Ball-101" -export VIRTUAL_ENV - -_OLD_VIRTUAL_PATH="$PATH" -PATH="$VIRTUAL_ENV/bin:$PATH" -export PATH - -# unset PYTHONHOME if set -# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) -# could use `if (set -u; : $PYTHONHOME) ;` in bash -if [ -n "${PYTHONHOME:-}" ] ; then - _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" - unset PYTHONHOME -fi - -if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then - _OLD_VIRTUAL_PS1="${PS1:-}" - if [ "x(Ball-101) " != x ] ; then - PS1="(Ball-101) ${PS1:-}" - else - if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then - # special case for Aspen magic directories - # see http://www.zetadev.com/software/aspen/ - PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" - else - PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" - fi - fi - export PS1 -fi - -# This should detect bash and zsh, which have a hash command that must -# be called to get it to forget past commands. Without forgetting -# past commands the $PATH changes we made may not be respected -if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then - hash -r -fi diff --git a/Ball-101/bin/activate.csh b/Ball-101/bin/activate.csh deleted file mode 100755 index c2c813d5..00000000 --- a/Ball-101/bin/activate.csh +++ /dev/null @@ -1,37 +0,0 @@ -# This file must be used with "source bin/activate.csh" *from csh*. -# You cannot run it directly. -# Created by Davide Di Blasi . -# Ported to Python 3.3 venv by Andrew Svetlov - -alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate' - -# Unset irrelevant variables. -deactivate nondestructive - -setenv VIRTUAL_ENV "/Users/ericguo/CDS/Ball-101/Ball-101" - -set _OLD_VIRTUAL_PATH="$PATH" -setenv PATH "$VIRTUAL_ENV/bin:$PATH" - - -set _OLD_VIRTUAL_PROMPT="$prompt" - -if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then - if ("Ball-101" != "") then - set env_name = "Ball-101" - else - if (`basename "VIRTUAL_ENV"` == "__") then - # special case for Aspen magic directories - # see http://www.zetadev.com/software/aspen/ - set env_name = `basename \`dirname "$VIRTUAL_ENV"\`` - else - set env_name = `basename "$VIRTUAL_ENV"` - endif - endif - set prompt = "[$env_name] $prompt" - unset env_name -endif - -alias pydoc python -m pydoc - -rehash diff --git a/Ball-101/bin/activate.fish b/Ball-101/bin/activate.fish deleted file mode 100755 index be21e6cd..00000000 --- a/Ball-101/bin/activate.fish +++ /dev/null @@ -1,75 +0,0 @@ -# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org) -# you cannot run it directly - -function deactivate -d "Exit virtualenv and return to normal shell environment" - # reset old environment variables - if test -n "$_OLD_VIRTUAL_PATH" - set -gx PATH $_OLD_VIRTUAL_PATH - set -e _OLD_VIRTUAL_PATH - end - if test -n "$_OLD_VIRTUAL_PYTHONHOME" - set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME - set -e _OLD_VIRTUAL_PYTHONHOME - end - - if test -n "$_OLD_FISH_PROMPT_OVERRIDE" - functions -e fish_prompt - set -e _OLD_FISH_PROMPT_OVERRIDE - functions -c _old_fish_prompt fish_prompt - functions -e _old_fish_prompt - end - - set -e VIRTUAL_ENV - if test "$argv[1]" != "nondestructive" - # Self destruct! - functions -e deactivate - end -end - -# unset irrelevant variables -deactivate nondestructive - -set -gx VIRTUAL_ENV "/Users/ericguo/CDS/Ball-101/Ball-101" - -set -gx _OLD_VIRTUAL_PATH $PATH -set -gx PATH "$VIRTUAL_ENV/bin" $PATH - -# unset PYTHONHOME if set -if set -q PYTHONHOME - set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME - set -e PYTHONHOME -end - -if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" - # fish uses a function instead of an env var to generate the prompt. - - # save the current fish_prompt function as the function _old_fish_prompt - functions -c fish_prompt _old_fish_prompt - - # with the original prompt function renamed, we can override with our own. - function fish_prompt - # Save the return status of the last command - set -l old_status $status - - # Prompt override? - if test -n "(Ball-101) " - printf "%s%s" "(Ball-101) " (set_color normal) - else - # ...Otherwise, prepend env - set -l _checkbase (basename "$VIRTUAL_ENV") - if test $_checkbase = "__" - # special case for Aspen magic directories - # see http://www.zetadev.com/software/aspen/ - printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) - else - printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) - end - end - - # Restore the return status of the previous command. - echo "exit $old_status" | . - _old_fish_prompt - end - - set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" -end diff --git a/Ball-101/bin/convert-caffe2-to-onnx b/Ball-101/bin/convert-caffe2-to-onnx deleted file mode 100755 index bb12cfd9..00000000 --- a/Ball-101/bin/convert-caffe2-to-onnx +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from caffe2.python.onnx.bin.conversion import caffe2_to_onnx - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(caffe2_to_onnx()) diff --git a/Ball-101/bin/convert-onnx-to-caffe2 b/Ball-101/bin/convert-onnx-to-caffe2 deleted file mode 100755 index d03f7166..00000000 --- a/Ball-101/bin/convert-onnx-to-caffe2 +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from caffe2.python.onnx.bin.conversion import onnx_to_caffe2 - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(onnx_to_caffe2()) diff --git a/Ball-101/bin/dotenv b/Ball-101/bin/dotenv deleted file mode 100755 index 7de13b11..00000000 --- a/Ball-101/bin/dotenv +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from dotenv.__main__ import cli - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(cli()) diff --git a/Ball-101/bin/epylint b/Ball-101/bin/epylint deleted file mode 100755 index 3ee8a74c..00000000 --- a/Ball-101/bin/epylint +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from pylint import run_epylint -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(run_epylint()) diff --git a/Ball-101/bin/f2py b/Ball-101/bin/f2py deleted file mode 100755 index 1c51a85d..00000000 --- a/Ball-101/bin/f2py +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from numpy.f2py.f2py2e import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/f2py3 b/Ball-101/bin/f2py3 deleted file mode 100755 index 1c51a85d..00000000 --- a/Ball-101/bin/f2py3 +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from numpy.f2py.f2py2e import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/f2py3.7 b/Ball-101/bin/f2py3.7 deleted file mode 100755 index 1c51a85d..00000000 --- a/Ball-101/bin/f2py3.7 +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from numpy.f2py.f2py2e import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/fonttools b/Ball-101/bin/fonttools deleted file mode 100755 index d1eb56df..00000000 --- a/Ball-101/bin/fonttools +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from fontTools.__main__ import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/get_objgraph b/Ball-101/bin/get_objgraph deleted file mode 100755 index 05db7d17..00000000 --- a/Ball-101/bin/get_objgraph +++ /dev/null @@ -1,54 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -# Author: Mike McKerns (mmckerns @caltech and @uqfoundation) -# Copyright (c) 2008-2016 California Institute of Technology. -# Copyright (c) 2016-2022 The Uncertainty Quantification Foundation. -# License: 3-clause BSD. The full license text is available at: -# - https://github.com/uqfoundation/dill/blob/master/LICENSE -""" -display the reference paths for objects in ``dill.types`` or a .pkl file - -Notes: - the generated image is useful in showing the pointer references in - objects that are or can be pickled. Any object in ``dill.objects`` - listed in ``dill.load_types(picklable=True, unpicklable=True)`` works. - -Examples:: - - $ get_objgraph FrameType - Image generated as FrameType.png -""" - -import dill as pickle -#pickle.debug.trace(True) -#import pickle - -# get all objects for testing -from dill import load_types -load_types(pickleable=True,unpickleable=True) -from dill import objects - -if __name__ == "__main__": - import sys - if len(sys.argv) != 2: - print ("Please provide exactly one file or type name (e.g. 'IntType')") - msg = "\n" - for objtype in list(objects.keys())[:40]: - msg += objtype + ', ' - print (msg + "...") - else: - objtype = str(sys.argv[-1]) - try: - obj = objects[objtype] - except KeyError: - obj = pickle.load(open(objtype,'rb')) - import os - objtype = os.path.splitext(objtype)[0] - try: - import objgraph - objgraph.show_refs(obj, filename=objtype+'.png') - except ImportError: - print ("Please install 'objgraph' to view object graphs") - - -# EOF diff --git a/Ball-101/bin/google-oauthlib-tool b/Ball-101/bin/google-oauthlib-tool deleted file mode 100755 index 3626a61b..00000000 --- a/Ball-101/bin/google-oauthlib-tool +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from google_auth_oauthlib.tool.__main__ import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/iptest b/Ball-101/bin/iptest deleted file mode 100755 index dc6c659d..00000000 --- a/Ball-101/bin/iptest +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from IPython.testing.iptestcontroller import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/iptest3 b/Ball-101/bin/iptest3 deleted file mode 100755 index dc6c659d..00000000 --- a/Ball-101/bin/iptest3 +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from IPython.testing.iptestcontroller import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/ipython b/Ball-101/bin/ipython deleted file mode 100755 index 6ce7b29a..00000000 --- a/Ball-101/bin/ipython +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from IPython import start_ipython - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(start_ipython()) diff --git a/Ball-101/bin/ipython3 b/Ball-101/bin/ipython3 deleted file mode 100755 index 6ce7b29a..00000000 --- a/Ball-101/bin/ipython3 +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from IPython import start_ipython - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(start_ipython()) diff --git a/Ball-101/bin/isort b/Ball-101/bin/isort deleted file mode 100755 index 0316972f..00000000 --- a/Ball-101/bin/isort +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from isort.main import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/isort-identify-imports b/Ball-101/bin/isort-identify-imports deleted file mode 100755 index df67a0f8..00000000 --- a/Ball-101/bin/isort-identify-imports +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from isort.main import identify_imports_main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(identify_imports_main()) diff --git a/Ball-101/bin/jsonschema b/Ball-101/bin/jsonschema deleted file mode 100755 index 9fe59e9c..00000000 --- a/Ball-101/bin/jsonschema +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from jsonschema.cli import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/markdown-it b/Ball-101/bin/markdown-it deleted file mode 100755 index 808b04eb..00000000 --- a/Ball-101/bin/markdown-it +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from markdown_it.cli.parse import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/markdown_py b/Ball-101/bin/markdown_py deleted file mode 100755 index 3b301964..00000000 --- a/Ball-101/bin/markdown_py +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from markdown.__main__ import run -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(run()) diff --git a/Ball-101/bin/normalizer b/Ball-101/bin/normalizer deleted file mode 100755 index 81289af3..00000000 --- a/Ball-101/bin/normalizer +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from charset_normalizer.cli.normalizer import cli_detect - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(cli_detect()) diff --git a/Ball-101/bin/pip b/Ball-101/bin/pip deleted file mode 100755 index 3a49b7f9..00000000 --- a/Ball-101/bin/pip +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from pip._internal.cli.main import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/pip3 b/Ball-101/bin/pip3 deleted file mode 100755 index 3a49b7f9..00000000 --- a/Ball-101/bin/pip3 +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from pip._internal.cli.main import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/pip3.7 b/Ball-101/bin/pip3.7 deleted file mode 100755 index 3a49b7f9..00000000 --- a/Ball-101/bin/pip3.7 +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from pip._internal.cli.main import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/plasma_store b/Ball-101/bin/plasma_store deleted file mode 100755 index b886f461..00000000 --- a/Ball-101/bin/plasma_store +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from pyarrow import _plasma_store_entry_point - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(_plasma_store_entry_point()) diff --git a/Ball-101/bin/pyftmerge b/Ball-101/bin/pyftmerge deleted file mode 100755 index e91fd726..00000000 --- a/Ball-101/bin/pyftmerge +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from fontTools.merge import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/pyftsubset b/Ball-101/bin/pyftsubset deleted file mode 100755 index 5a03a8e6..00000000 --- a/Ball-101/bin/pyftsubset +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from fontTools.subset import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/pygmentize b/Ball-101/bin/pygmentize deleted file mode 100755 index a0316224..00000000 --- a/Ball-101/bin/pygmentize +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from pygments.cmdline import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/pylint b/Ball-101/bin/pylint deleted file mode 100755 index 1cc834b0..00000000 --- a/Ball-101/bin/pylint +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from pylint import run_pylint -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(run_pylint()) diff --git a/Ball-101/bin/pylint-config b/Ball-101/bin/pylint-config deleted file mode 100755 index 171bda3c..00000000 --- a/Ball-101/bin/pylint-config +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from pylint import _run_pylint_config -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(_run_pylint_config()) diff --git a/Ball-101/bin/pyreverse b/Ball-101/bin/pyreverse deleted file mode 100755 index f649667f..00000000 --- a/Ball-101/bin/pyreverse +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from pylint import run_pyreverse -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(run_pyreverse()) diff --git a/Ball-101/bin/pyrsa-decrypt b/Ball-101/bin/pyrsa-decrypt deleted file mode 100755 index 4d2e5a17..00000000 --- a/Ball-101/bin/pyrsa-decrypt +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from rsa.cli import decrypt - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(decrypt()) diff --git a/Ball-101/bin/pyrsa-encrypt b/Ball-101/bin/pyrsa-encrypt deleted file mode 100755 index 3b8126b1..00000000 --- a/Ball-101/bin/pyrsa-encrypt +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from rsa.cli import encrypt - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(encrypt()) diff --git a/Ball-101/bin/pyrsa-keygen b/Ball-101/bin/pyrsa-keygen deleted file mode 100755 index fb36bab1..00000000 --- a/Ball-101/bin/pyrsa-keygen +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from rsa.cli import keygen - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(keygen()) diff --git a/Ball-101/bin/pyrsa-priv2pub b/Ball-101/bin/pyrsa-priv2pub deleted file mode 100755 index c875c6c9..00000000 --- a/Ball-101/bin/pyrsa-priv2pub +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from rsa.util import private_to_public - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(private_to_public()) diff --git a/Ball-101/bin/pyrsa-sign b/Ball-101/bin/pyrsa-sign deleted file mode 100755 index aa3a1fdc..00000000 --- a/Ball-101/bin/pyrsa-sign +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from rsa.cli import sign - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(sign()) diff --git a/Ball-101/bin/pyrsa-verify b/Ball-101/bin/pyrsa-verify deleted file mode 100755 index 9652021c..00000000 --- a/Ball-101/bin/pyrsa-verify +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from rsa.cli import verify - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(verify()) diff --git a/Ball-101/bin/pysemver b/Ball-101/bin/pysemver deleted file mode 100755 index edb2a5b8..00000000 --- a/Ball-101/bin/pysemver +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from semver import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/python b/Ball-101/bin/python deleted file mode 120000 index aad06a08..00000000 --- a/Ball-101/bin/python +++ /dev/null @@ -1 +0,0 @@ -/Users/ericguo/opt/anaconda3/bin/python \ No newline at end of file diff --git a/Ball-101/bin/python3 b/Ball-101/bin/python3 deleted file mode 120000 index d8654aa0..00000000 --- a/Ball-101/bin/python3 +++ /dev/null @@ -1 +0,0 @@ -python \ No newline at end of file diff --git a/Ball-101/bin/streamlit b/Ball-101/bin/streamlit deleted file mode 100755 index 29330147..00000000 --- a/Ball-101/bin/streamlit +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from streamlit.web.cli import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/streamlit.cmd b/Ball-101/bin/streamlit.cmd deleted file mode 100755 index 16cef3d1..00000000 --- a/Ball-101/bin/streamlit.cmd +++ /dev/null @@ -1,16 +0,0 @@ -rem Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022) -rem -rem Licensed under the Apache License, Version 2.0 (the "License"); -rem you may not use this file except in compliance with the License. -rem You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. - -@echo OFF -python -m streamlit %* diff --git a/Ball-101/bin/symilar b/Ball-101/bin/symilar deleted file mode 100755 index 4a53cd6f..00000000 --- a/Ball-101/bin/symilar +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from pylint import run_symilar -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(run_symilar()) diff --git a/Ball-101/bin/tensorboard b/Ball-101/bin/tensorboard deleted file mode 100755 index 2b7fa480..00000000 --- a/Ball-101/bin/tensorboard +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from tensorboard.main import run_main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(run_main()) diff --git a/Ball-101/bin/torchrun b/Ball-101/bin/torchrun deleted file mode 100755 index cc05265d..00000000 --- a/Ball-101/bin/torchrun +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from torch.distributed.run import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/tqdm b/Ball-101/bin/tqdm deleted file mode 100755 index ce700d4e..00000000 --- a/Ball-101/bin/tqdm +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from tqdm.cli import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/ttx b/Ball-101/bin/ttx deleted file mode 100755 index b768be5a..00000000 --- a/Ball-101/bin/ttx +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from fontTools.ttx import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/undill b/Ball-101/bin/undill deleted file mode 100755 index 51191ee5..00000000 --- a/Ball-101/bin/undill +++ /dev/null @@ -1,22 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -# Author: Mike McKerns (mmckerns @caltech and @uqfoundation) -# Copyright (c) 2008-2016 California Institute of Technology. -# Copyright (c) 2016-2022 The Uncertainty Quantification Foundation. -# License: 3-clause BSD. The full license text is available at: -# - https://github.com/uqfoundation/dill/blob/master/LICENSE -""" -unpickle the contents of a pickled object file - -Examples:: - - $ undill hello.pkl - ['hello', 'world'] -""" - -if __name__ == '__main__': - import sys - import dill - for file in sys.argv[1:]: - print (dill.load(open(file,'rb'))) - diff --git a/Ball-101/bin/uvicorn b/Ball-101/bin/uvicorn deleted file mode 100755 index bc55cf78..00000000 --- a/Ball-101/bin/uvicorn +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from uvicorn.main import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/bin/watchfiles b/Ball-101/bin/watchfiles deleted file mode 100755 index f5e272ae..00000000 --- a/Ball-101/bin/watchfiles +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from watchfiles.cli import cli - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(cli()) diff --git a/Ball-101/bin/wheel b/Ball-101/bin/wheel deleted file mode 100755 index 36e663dd..00000000 --- a/Ball-101/bin/wheel +++ /dev/null @@ -1,10 +0,0 @@ -#!/Users/ericguo/CDS/Ball-101/Ball-101/bin/python -# -*- coding: utf-8 -*- -import re -import sys - -from wheel.cli import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/Ball-101/etc/jupyter/nbconfig/notebook.d/pydeck.json b/Ball-101/etc/jupyter/nbconfig/notebook.d/pydeck.json deleted file mode 100755 index 143b42ae..00000000 --- a/Ball-101/etc/jupyter/nbconfig/notebook.d/pydeck.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "load_extensions": { - "pydeck/extension": true - } -} diff --git a/Ball-101/pyvenv.cfg b/Ball-101/pyvenv.cfg deleted file mode 100755 index 2598a432..00000000 --- a/Ball-101/pyvenv.cfg +++ /dev/null @@ -1,3 +0,0 @@ -home = /Users/ericguo/opt/anaconda3/bin -include-system-site-packages = false -version = 3.7.6 diff --git a/Ball-101/share/jupyter/nbextensions/pydeck/extensionRequires.js b/Ball-101/share/jupyter/nbextensions/pydeck/extensionRequires.js deleted file mode 100755 index f663cc19..00000000 --- a/Ball-101/share/jupyter/nbextensions/pydeck/extensionRequires.js +++ /dev/null @@ -1,15 +0,0 @@ -/* eslint-disable */ -define(function() { - 'use strict'; - requirejs.config({ - map: { - '*': { - '@deck.gl/jupyter-widget': 'nbextensions/pydeck/index' - } - } - }); - // Export the required load_ipython_extension function - return { - load_ipython_extension: function() {} - }; -}); diff --git a/Ball-101/share/jupyter/nbextensions/pydeck/index.js b/Ball-101/share/jupyter/nbextensions/pydeck/index.js deleted file mode 100755 index 0f9390a7..00000000 --- a/Ball-101/share/jupyter/nbextensions/pydeck/index.js +++ /dev/null @@ -1,26 +0,0 @@ -!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("@jupyter-widgets/base"));else if("function"==typeof define&&define.amd)define(["@jupyter-widgets/base"],e);else{var n="object"==typeof exports?e(require("@jupyter-widgets/base")):e(t["@jupyter-widgets/base"]);for(var r in n)("object"==typeof exports?exports:t)[r]=n[r]}}(window,(function(t){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=243)}([function(t,e){t.exports=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}},function(t,e,n){"use strict";function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.d(e,"a",(function(){return r}))},function(t,e){function n(e){return t.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},n(e)}t.exports=n},function(t,e){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},function(t,e){function n(t,e){for(var n=0;n{var t;t="OESVertexArrayObject emulation library context restored",globalThis.console&&globalThis.console.log&&globalThis.console.log(t),e.reset_()},!0),this.reset_()};p.prototype.VERTEX_ARRAY_BINDING_OES=34229,p.prototype.reset_=function(){if(void 0!==this.vertexArrayObjects)for(let t=0;ta(t)?void 0:0,A={3074:t=>a(t)?void 0:36064,35723:t=>a(t)?void 0:4352,35977:d,32937:d,36795:(t,e)=>{const n=a(t)?t.getExtension("EXT_disjoint_timer_query_webgl2"):t.getExtension("EXT_disjoint_timer_query");return n&&n.GPU_DISJOINT_EXT?e(n.GPU_DISJOINT_EXT):0},37445:(t,e)=>{const n=t.getExtension("WEBGL_debug_renderer_info");return e(n&&n.UNMASKED_VENDOR_WEBGL||7936)},37446:(t,e)=>{const n=t.getExtension("WEBGL_debug_renderer_info");return e(n&&n.UNMASKED_RENDERER_WEBGL||7937)},34047:(t,e)=>{const n=t.luma.extensions.EXT_texture_filter_anisotropic;return n?e(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):1},32883:d,35071:d,37447:d,36063:(t,e)=>{if(!a(t)){const n=t.getExtension("WEBGL_draw_buffers");return n?e(n.MAX_COLOR_ATTACHMENTS_WEBGL):0}},35379:d,35374:d,35377:d,34852:t=>{if(!a(t)){const e=t.getExtension("WEBGL_draw_buffers");return e?e.MAX_DRAW_BUFFERS_WEBGL:0}},36203:t=>t.getExtension("OES_element_index")?2147483647:65535,33001:t=>t.getExtension("OES_element_index")?16777216:65535,33e3:t=>16777216,37157:d,35373:d,35657:d,36183:d,37137:d,34045:d,35978:d,35979:d,35968:d,35376:d,35375:d,35659:d,37154:d,35371:d,35658:d,35076:d,35077:d,35380:d};const g={OES_vertex_array_object:{meta:{suffix:"OES"},createVertexArray:()=>{i(!1,"VertexArray requires WebGL2 or OES_vertex_array_object extension")},deleteVertexArray:()=>{},bindVertexArray:()=>{},isVertexArray:()=>!1},ANGLE_instanced_arrays:{meta:{suffix:"ANGLE"},vertexAttribDivisor(t,e){i(0===e,"WebGL instanced rendering not supported")},drawElementsInstanced:()=>{},drawArraysInstanced:()=>{}},WEBGL_draw_buffers:{meta:{suffix:"WEBGL"},drawBuffers:()=>{i(!1)}},EXT_disjoint_timer_query:{meta:{suffix:"EXT"},createQuery:()=>{i(!1)},deleteQuery:()=>{i(!1)},beginQuery:()=>{i(!1)},endQuery:()=>{},getQuery(t,e){return this.getQueryObject(t,e)},getQueryParameter(t,e){return this.getQueryObject(t,e)},getQueryObject:()=>{}}},m={readBuffer:(t,e,n)=>{a(t)&&e(n)},getVertexAttrib:(t,e,n,r)=>{const{webgl2:i,ext:o}=function(t,e){return{webgl2:a(t),ext:t.getExtension(e)}}(t,"ANGLE_instanced_arrays");let s;switch(r){case 35069:s=!!i&&void 0;break;case 35070:s=i||o?void 0:0}return void 0!==s?s:e(n,r)},getProgramParameter:(t,e,n,r)=>{if(!a(t))switch(r){case 35967:return 35981;case 35971:case 35382:return 0}return e(n,r)},getInternalformatParameter:(t,e,n,r,i)=>{if(!a(t))switch(i){case 32937:return new Int32Array([0])}return t.getInternalformatParameter(n,r,i)},getTexParameter(t,e,n,r){switch(r){case 34046:const{extensions:e}=t.luma,n=e.EXT_texture_filter_anisotropic;r=n&&n.TEXTURE_MAX_ANISOTROPY_EXT||34046}return e(n,r)},getParameter:function(t,e,n){const r=A[n],i="function"==typeof r?r(t,e,n):r;return void 0!==i?i:e(n)},hint:(t,e,n,r)=>e(n,r)};function y(t,e){let{extension:n,target:r,target2:o}=e;const a=g[n];i(a);const{meta:s={}}=a,{suffix:u=""}=s,c=t.getExtension(n);for(const e of Object.keys(a)){const n="".concat(e).concat(u);let i=null;"meta"===e||"function"==typeof t[e]||(c&&"function"==typeof c[n]?i=function(){return c[n](...arguments)}:"function"==typeof a[e]&&(i=a[e].bind(r))),i&&(r[e]=i,o[e]=i)}}globalThis.polyfillContext=function(t){t.luma=t.luma||{};const{luma:e}=t;return e.polyfilled||(!function(t){if("function"==typeof t.createVertexArray)return;const e=t.getSupportedExtensions;t.getSupportedExtensions=function(){const t=e.call(this)||[];return t.indexOf("OES_vertex_array_object")<0&&t.push("OES_vertex_array_object"),t};const n=t.getExtension;t.getExtension=function(e){const r=n.call(this,e);return r||("OES_vertex_array_object"!==e?null:(t.__OESVertexArrayObject||(this.__OESVertexArrayObject=new p(this)),this.__OESVertexArrayObject))}}(t),function(t){t.luma.extensions={};const e=t.getSupportedExtensions()||[];for(const n of e)t.luma[n]=t.getExtension(n)}(t),function(t,e){for(const n of Object.getOwnPropertyNames(e))"overrides"!==n&&y(t,{extension:n,target:t.luma,target2:t})}(t,g),function(t,e){let{target:n,target2:r}=e;Object.keys(m).forEach(e=>{if("function"==typeof m[e]){const i=t[e]?t[e].bind(t):()=>{},o=m[e].bind(null,t,i);n[e]=o,r[e]=o}})}(t,{target:e,target2:t}),e.polyfilled=!0),t};const v={3042:!1,32773:new Float32Array([0,0,0,0]),32777:32774,34877:32774,32969:1,32968:0,32971:1,32970:0,3106:new Float32Array([0,0,0,0]),3107:[!0,!0,!0,!0],2884:!1,2885:1029,2929:!1,2931:1,2932:513,2928:new Float32Array([0,1]),2930:!0,3024:!0,36006:null,2886:2305,33170:4352,2849:1,32823:!1,32824:0,10752:0,32938:1,32939:!1,3089:!1,3088:new Int32Array([0,0,1024,1024]),2960:!1,2961:0,2968:4294967295,36005:4294967295,2962:519,2967:0,2963:4294967295,34816:519,36003:0,36004:4294967295,2964:7680,2965:7680,2966:7680,34817:7680,34818:7680,34819:7680,2978:[0,0,1024,1024],3333:4,3317:4,37440:!1,37441:!1,37443:37444,35723:4352,36010:null,35977:!1,3330:0,3332:0,3331:0,3314:0,32878:0,3316:0,3315:0,32877:0},_=(t,e,n)=>e?t.enable(n):t.disable(n),b=(t,e,n)=>t.hint(n,e),x=(t,e,n)=>t.pixelStorei(n,e);function w(t){return Array.isArray(t)||ArrayBuffer.isView(t)}const E={3042:_,32773:(t,e)=>t.blendColor(...e),32777:"blendEquation",34877:"blendEquation",32969:"blendFunc",32968:"blendFunc",32971:"blendFunc",32970:"blendFunc",3106:(t,e)=>t.clearColor(...e),3107:(t,e)=>t.colorMask(...e),2884:_,2885:(t,e)=>t.cullFace(e),2929:_,2931:(t,e)=>t.clearDepth(e),2932:(t,e)=>t.depthFunc(e),2928:(t,e)=>t.depthRange(...e),2930:(t,e)=>t.depthMask(e),3024:_,35723:b,36006:(t,e)=>{const n=a(t)?36009:36160;return t.bindFramebuffer(n,e)},2886:(t,e)=>t.frontFace(e),33170:b,2849:(t,e)=>t.lineWidth(e),32823:_,32824:"polygonOffset",10752:"polygonOffset",35977:_,32938:"sampleCoverage",32939:"sampleCoverage",3089:_,3088:(t,e)=>t.scissor(...e),2960:_,2961:(t,e)=>t.clearStencil(e),2968:(t,e)=>t.stencilMaskSeparate(1028,e),36005:(t,e)=>t.stencilMaskSeparate(1029,e),2962:"stencilFuncFront",2967:"stencilFuncFront",2963:"stencilFuncFront",34816:"stencilFuncBack",36003:"stencilFuncBack",36004:"stencilFuncBack",2964:"stencilOpFront",2965:"stencilOpFront",2966:"stencilOpFront",34817:"stencilOpBack",34818:"stencilOpBack",34819:"stencilOpBack",2978:(t,e)=>t.viewport(...e),3333:x,3317:x,37440:x,37441:x,37443:x,3330:x,3332:x,3331:x,36010:(t,e)=>t.bindFramebuffer(36008,e),3314:x,32878:x,3316:x,3315:x,32877:x,framebuffer:(t,e)=>{const n=e&&"handle"in e?e.handle:e;return t.bindFramebuffer(36160,n)},blend:(t,e)=>e?t.enable(3042):t.disable(3042),blendColor:(t,e)=>t.blendColor(...e),blendEquation:(t,e)=>{e=w(e)?e:[e,e],t.blendEquationSeparate(...e)},blendFunc:(t,e)=>{e=w(e)&&2===e.length?[...e,...e]:e,t.blendFuncSeparate(...e)},clearColor:(t,e)=>t.clearColor(...e),clearDepth:(t,e)=>t.clearDepth(e),clearStencil:(t,e)=>t.clearStencil(e),colorMask:(t,e)=>t.colorMask(...e),cull:(t,e)=>e?t.enable(2884):t.disable(2884),cullFace:(t,e)=>t.cullFace(e),depthTest:(t,e)=>e?t.enable(2929):t.disable(2929),depthFunc:(t,e)=>t.depthFunc(e),depthMask:(t,e)=>t.depthMask(e),depthRange:(t,e)=>t.depthRange(...e),dither:(t,e)=>e?t.enable(3024):t.disable(3024),derivativeHint:(t,e)=>{t.hint(35723,e)},frontFace:(t,e)=>t.frontFace(e),mipmapHint:(t,e)=>t.hint(33170,e),lineWidth:(t,e)=>t.lineWidth(e),polygonOffsetFill:(t,e)=>e?t.enable(32823):t.disable(32823),polygonOffset:(t,e)=>t.polygonOffset(...e),sampleCoverage:(t,e)=>t.sampleCoverage(...e),scissorTest:(t,e)=>e?t.enable(3089):t.disable(3089),scissor:(t,e)=>t.scissor(...e),stencilTest:(t,e)=>e?t.enable(2960):t.disable(2960),stencilMask:(t,e)=>{e=w(e)?e:[e,e];const[n,r]=e;t.stencilMaskSeparate(1028,n),t.stencilMaskSeparate(1029,r)},stencilFunc:(t,e)=>{e=w(e)&&3===e.length?[...e,...e]:e;const[n,r,i,o,a,s]=e;t.stencilFuncSeparate(1028,n,r,i),t.stencilFuncSeparate(1029,o,a,s)},stencilOp:(t,e)=>{e=w(e)&&3===e.length?[...e,...e]:e;const[n,r,i,o,a,s]=e;t.stencilOpSeparate(1028,n,r,i),t.stencilOpSeparate(1029,o,a,s)},viewport:(t,e)=>t.viewport(...e)};function O(t,e,n){return void 0!==e[t]?e[t]:n[t]}const S={blendEquation:(t,e,n)=>t.blendEquationSeparate(O(32777,e,n),O(34877,e,n)),blendFunc:(t,e,n)=>t.blendFuncSeparate(O(32969,e,n),O(32968,e,n),O(32971,e,n),O(32970,e,n)),polygonOffset:(t,e,n)=>t.polygonOffset(O(32824,e,n),O(10752,e,n)),sampleCoverage:(t,e,n)=>t.sampleCoverage(O(32938,e,n),O(32939,e,n)),stencilFuncFront:(t,e,n)=>t.stencilFuncSeparate(1028,O(2962,e,n),O(2967,e,n),O(2963,e,n)),stencilFuncBack:(t,e,n)=>t.stencilFuncSeparate(1029,O(34816,e,n),O(36003,e,n),O(36004,e,n)),stencilOpFront:(t,e,n)=>t.stencilOpSeparate(1028,O(2964,e,n),O(2965,e,n),O(2966,e,n)),stencilOpBack:(t,e,n)=>t.stencilOpSeparate(1029,O(34817,e,n),O(34818,e,n),O(34819,e,n))},T={enable:(t,e)=>t({[e]:!0}),disable:(t,e)=>t({[e]:!1}),pixelStorei:(t,e,n)=>t({[e]:n}),hint:(t,e,n)=>t({[e]:n}),bindFramebuffer:(t,e,n)=>{switch(e){case 36160:return t({36006:n,36010:n});case 36009:return t({36006:n});case 36008:return t({36010:n});default:return null}},blendColor:(t,e,n,r,i)=>t({32773:new Float32Array([e,n,r,i])}),blendEquation:(t,e)=>t({32777:e,34877:e}),blendEquationSeparate:(t,e,n)=>t({32777:e,34877:n}),blendFunc:(t,e,n)=>t({32969:e,32968:n,32971:e,32970:n}),blendFuncSeparate:(t,e,n,r,i)=>t({32969:e,32968:n,32971:r,32970:i}),clearColor:(t,e,n,r,i)=>t({3106:new Float32Array([e,n,r,i])}),clearDepth:(t,e)=>t({2931:e}),clearStencil:(t,e)=>t({2961:e}),colorMask:(t,e,n,r,i)=>t({3107:[e,n,r,i]}),cullFace:(t,e)=>t({2885:e}),depthFunc:(t,e)=>t({2932:e}),depthRange:(t,e,n)=>t({2928:new Float32Array([e,n])}),depthMask:(t,e)=>t({2930:e}),frontFace:(t,e)=>t({2886:e}),lineWidth:(t,e)=>t({2849:e}),polygonOffset:(t,e,n)=>t({32824:e,10752:n}),sampleCoverage:(t,e,n)=>t({32938:e,32939:n}),scissor:(t,e,n,r,i)=>t({3088:new Int32Array([e,n,r,i])}),stencilMask:(t,e)=>t({2968:e,36005:e}),stencilMaskSeparate:(t,e,n)=>t({[1028===e?2968:36005]:n}),stencilFunc:(t,e,n,r)=>t({2962:e,2967:n,2963:r,34816:e,36003:n,36004:r}),stencilFuncSeparate:(t,e,n,r,i)=>t({[1028===e?2962:34816]:n,[1028===e?2967:36003]:r,[1028===e?2963:36004]:i}),stencilOp:(t,e,n,r)=>t({2964:e,2965:n,2966:r,34817:e,34818:n,34819:r}),stencilOpSeparate:(t,e,n,r,i)=>t({[1028===e?2964:34817]:n,[1028===e?2965:34818]:r,[1028===e?2966:34819]:i}),viewport:(t,e,n,r,i)=>t({2978:[e,n,r,i]})},C=(t,e)=>t.isEnabled(e),P={3042:C,2884:C,2929:C,3024:C,32823:C,32926:C,32928:C,3089:C,2960:C,35977:C};function M(t){for(const e in t)return!1;return!0}function I(t,e){if(t===e)return!0;const n=Array.isArray(t)||ArrayBuffer.isView(t),r=Array.isArray(e)||ArrayBuffer.isView(e);if(n&&r&&t.length===e.length){for(let n=0;n{})}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.gl=t,this.program=null,this.stateStack=[],this.enable=!0,this.cache=e?z(t):Object.assign({},v),this.log=n,this._updateCache=this._updateCache.bind(this),Object.seal(this)}push(){this.stateStack.push({})}pop(){i(this.stateStack.length>0);const t=this.stateStack[this.stateStack.length-1];F(this.gl,t),this.stateStack.pop()}_updateCache(t){let e,n=!1;const r=this.stateStack.length>0&&this.stateStack[this.stateStack.length-1];for(const o in t){i(void 0!==o);const a=t[o],s=this.cache[o];I(a,s)||(n=!0,e=s,r&&!(o in r)&&(r[o]=s),this.cache[o]=a)}return{valueChanged:n,oldValue:e}}}function D(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{enable:n=!0,copyState:r}=e;if(i(void 0!==r),!t.state){const{polyfillContext:e}=globalThis;e&&e(t),t.state=new L(t,{copyState:r}),k(t);for(const e in T){R(t,e,T[e])}B(t,"getParameter"),B(t,"isEnabled")}return t.state.enable=n,t}function j(t){i(t.state),t.state.pop()}function F(t,e){if(i(o(t),"setParameters requires a WebGL context"),M(e))return;const n={};for(const r in e){const i=Number(r),o=E[r];o&&("string"==typeof o?n[o]=!0:o(t,e[r],i))}const r=t.state&&t.state.cache;if(r)for(const i in n){(0,S[i])(t,e,r)}}function z(t,e){if("number"==typeof(e=e||v)){const n=e,r=P[n];return r?r(t,n):t.getParameter(n)}const n=Array.isArray(e)?e:Object.keys(e),r={};for(const e of n){const n=P[e];r[e]=n?n(t,Number(e)):t.getParameter(Number(e))}return r}function U(t){F(t,v)}function N(t,e,n){if(M(e))return n(t);const{nocatch:r=!0}=e;let i;if(function(t){t.state||D(t,{copyState:!1}),t.state.push()}(t),F(t,e),r)i=n(t),j(t);else try{i=n(t)}finally{j(t)}return i}var G=n(134);function V(t){const{luma:e}=t;if(t.canvas&&e){const{clientWidth:n}=e.canvasSizeInfo;return n?t.drawingBufferWidth/n:1}return 1}function H(t,e){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const r=V(t),i=t.drawingBufferWidth,o=t.drawingBufferHeight;return q(e,r,i,o,n)}function W(t){const e="undefined"==typeof window?1:window.devicePixelRatio||1;return Number.isFinite(t)?t<=0?1:t:t?e:1}function q(t,e,n,r,i){const o=X(t[0],e,n);let a=J(t[1],e,r,i),s=X(t[0]+1,e,n);const u=s===n-1?s:s-1;let c;return s=J(t[1]+1,e,r,i),i?(s=0===s?s:s+1,c=a,a=s):c=s===r-1?s:s-1,{x:o,y:a,width:Math.max(u-o+1,1),height:Math.max(c-a+1,1)}}function X(t,e,n){return Math.min(Math.round(t*e),n-1)}function J(t,e,n,r){return r?Math.max(0,n-1-Math.round(t*e)):Math.min(Math.round(t*e),n-1)}const Z=Object(G.a)(),Q=Z&&"undefined"!=typeof document,K={webgl2:!0,webgl1:!0,throwOnError:!0,manageState:!0,canvas:null,debug:!1,width:800,height:600};function Y(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(Z,"createGLContext only available in the browser.\nCreate your own headless context or use 'createHeadlessContext' from @luma.gl/test-utils"),t=Object.assign({},K,t);const{width:e,height:n}=t;function r(e){if(t.throwOnError)throw new Error(e);return console.error(e),null}let o;t.onError=r;const{canvas:a}=t,s=nt({canvas:a,width:e,height:n,onError:r});return o=et(s,t),o?(o=$(o,t),rt(o),o):null}function $(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||t._instrumented)return t;t._version=t._version||it(t),t.luma=t.luma||{},t.luma.canvasSizeInfo=t.luma.canvasSizeInfo||{},e=Object.assign({},K,e);const{manageState:n,debug:i}=e;return n&&D(t,{copyState:!1,log:function(){for(var t=arguments.length,e=new Array(t),n=0;n1&&void 0!==arguments[1]?arguments[1]:{};if(t.canvas){return void ot(t,W(e.useDevicePixels),e)}const n=t.getExtension("STACKGL_resize_drawingbuffer");n&&"width"in e&&"height"in e&&n.resize(e.width,e.height)}function et(t,e){const{onError:n}=e;let r=null;const i=t=>r=t.statusMessage||r;t.addEventListener("webglcontextcreationerror",i,!1);const{webgl1:o=!0,webgl2:a=!0}=e;let s=null;return a&&(s=s||t.getContext("webgl2",e),s=s||t.getContext("experimental-webgl2",e)),o&&(s=s||t.getContext("webgl",e),s=s||t.getContext("experimental-webgl",e)),t.removeEventListener("webglcontextcreationerror",i,!1),s?(e.onContextLost&&t.addEventListener("webglcontextlost",e.onContextLost,!1),e.onContextRestored&&t.addEventListener("webglcontextrestored",e.onContextRestored,!1),s):n("Failed to create ".concat(a&&!o?"WebGL2":"WebGL"," context: ").concat(r||"Unknown error"))}function nt(t){let e,{canvas:n,width:r=800,height:i=600,onError:o}=t;if("string"==typeof n){Q&&"complete"===document.readyState||o("createGLContext called on canvas '".concat(n,"' before page was loaded")),e=document.getElementById(n)}else n?e=n:(e=document.createElement("canvas"),e.id="lumagl-canvas",e.style.width=Number.isFinite(r)?"".concat(r,"px"):"100%",e.style.height=Number.isFinite(i)?"".concat(i,"px"):"100%",document.body.insertBefore(e,document.body.firstChild));return e}function rt(t){const e=a(t)?"WebGL2":"WebGL1",n=function(t){const e=t.getParameter(7936),n=t.getParameter(7937),r=t.getExtension("WEBGL_debug_renderer_info");return{vendor:r&&t.getParameter(r.UNMASKED_VENDOR_WEBGL||7936)||e,renderer:r&&t.getParameter(r.UNMASKED_RENDERER_WEBGL||7937)||n,vendorMasked:e,rendererMasked:n,version:t.getParameter(7938),shadingLanguageVersion:t.getParameter(35724)}}(t),i=n?"(".concat(n.vendor,",").concat(n.renderer,")"):"",o=t.debug?" debug":"";r.info(1,"".concat(e).concat(o," context ").concat(i))()}function it(t){return"undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext?2:1}function ot(t,e,n){let i="width"in n?n.width:t.canvas.clientWidth,o="height"in n?n.height:t.canvas.clientHeight;i&&o||(r.log(1,"Canvas clientWidth/clientHeight is 0")(),e=1,i=t.canvas.width||1,o=t.canvas.height||1),t.luma=t.luma||{},t.luma.canvasSizeInfo=t.luma.canvasSizeInfo||{};const a=t.luma.canvasSizeInfo;if(a.clientWidth!==i||a.clientHeight!==o||a.devicePixelRatio!==e){let n=e;const a=Math.floor(i*n),s=Math.floor(o*n);t.canvas.width=a,t.canvas.height=s,t.drawingBufferWidth===a&&t.drawingBufferHeight===s||(r.warn("Device pixel ratio clamped")(),n=Math.min(t.drawingBufferWidth/i,t.drawingBufferHeight/o),t.canvas.width=Math.floor(i*n),t.canvas.height=Math.floor(o*n)),Object.assign(t.luma.canvasSizeInfo,{clientWidth:i,clientHeight:o,devicePixelRatio:e})}}n.d(e,"k",(function(){return r})),n.d(e,"i",(function(){return o})),n.d(e,"j",(function(){return a})),n.d(e,"g",(function(){return s})),n.d(e,"b",(function(){return u})),n.d(e,"a",(function(){return c})),n.d(e,"f",(function(){return z})),n.d(e,"n",(function(){return F})),n.d(e,"l",(function(){return U})),n.d(e,"o",(function(){return N})),n.d(e,"c",(function(){return Y})),n.d(e,"m",(function(){return tt})),n.d(e,"h",(function(){return $})),n.d(e,"e",(function(){return V})),n.d(e,"d",(function(){return H}))},function(t,e,n){var r=n(252),i=n(253),o=n(254);t.exports=function(t,e){return r(t)||i(t,e)||o()}},function(t,e,n){"use strict";function r(t,e){if(!t)throw new Error(e||"luma.gl: assertion failed.")}n.d(e,"a",(function(){return r}))},function(t,e,n){"use strict";n.d(e,"b",(function(){return r})),n.d(e,"a",(function(){return i})),n.d(e,"c",(function(){return o}));var r=1e-6,i="undefined"!=typeof Float32Array?Float32Array:Array,o=Math.random;Math.PI;Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)})},function(t,e,n){"use strict";n.d(e,"a",(function(){return i})),n.d(e,"d",(function(){return o})),n.d(e,"e",(function(){return a})),n.d(e,"b",(function(){return s})),n.d(e,"c",(function(){return u}));var r=n(20),i={DEFAULT:-1,LNGLAT:1,METER_OFFSETS:2,LNGLAT_OFFSETS:3,CARTESIAN:0};Object.defineProperty(i,"IDENTITY",{get:function(){return r.a.deprecated("COORDINATE_SYSTEM.IDENTITY","COORDINATE_SYSTEM.CARTESIAN")(),0}});var o={WEB_MERCATOR:1,GLOBE:2,WEB_MERCATOR_AUTO_OFFSET:4,IDENTITY:0},a={common:0,meters:1,pixels:2},s={click:{handler:"onClick"},panstart:{handler:"onDragStart"},panmove:{handler:"onDrag"},panend:{handler:"onDragEnd"}},u={DRAW:"draw",MASK:"mask"}},function(t,e,n){"use strict";n.d(e,"b",(function(){return o})),n.d(e,"e",(function(){return a})),n.d(e,"f",(function(){return s})),n.d(e,"j",(function(){return u})),n.d(e,"i",(function(){return c})),n.d(e,"h",(function(){return l})),n.d(e,"c",(function(){return h})),n.d(e,"a",(function(){return f})),n.d(e,"g",(function(){return p})),n.d(e,"d",(function(){return d}));n(136);const r=1/Math.PI*180,i=1/180*Math.PI,o={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0};function a(t,{precision:e=o.precision}={}){return t=function(t){return Math.round(t/o.EPSILON)*o.EPSILON}(t),"".concat(parseFloat(t.toPrecision(e)))}function s(t){return Array.isArray(t)||ArrayBuffer.isView(t)&&!(t instanceof DataView)}function u(t){return l(t)}function c(t){return h(t)}function l(t,e){return A(t,t=>t*i,e)}function h(t,e){return A(t,t=>t*r,e)}function f(t,e,n){return A(t,t=>Math.max(e,Math.min(n,t)))}function p(t,e,n){return s(t)?t.map((t,r)=>p(t,e[r],n)):n*e+(1-n)*t}function d(t,e,n){const r=o.EPSILON;n&&(o.EPSILON=n);try{if(t===e)return!0;if(s(t)&&s(e)){if(t.length!==e.length)return!1;for(let n=0;n0&&void 0!==arguments[0]?arguments[0]:{};u()(this,t),f()(this,"type","point");var n=e.color,r=void 0===n?g:n,i=e.intensity,o=void 0===i?1:i,a=e.position,s=void 0===a?y:a;this.id=e.id||"point-".concat(v++),this.color=r,this.intensity=o,this.type="point",this.position=s,this.attenuation=b(e),this.projectedLight=A({},this)}return l()(t,[{key:"getProjectedLight",value:function(t){var e=t.layer,n=this.projectedLight,i=e.context.viewport,o=e.props,a=o.coordinateSystem,s=o.coordinateOrigin,u=Object(p.b)(this.position,{viewport:i,coordinateSystem:a,coordinateOrigin:s,fromCoordinateSystem:i.isGeospatial?r.a.LNGLAT:r.a.CARTESIAN,fromCoordinateOrigin:[0,0,0]});return n.color=this.color,n.intensity=this.intensity,n.position=u,n}}]),t}();function b(t){return t.attenuation?t.attenuation:"intensity"in t?[0,0,t.intensity||0]:m}var x=n(5),w=n.n(x),E=n(6),O=n.n(E),S=n(2),T=n.n(S),C=n(117);function P(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=T()(t);if(e){var i=T()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return O()(this,n)}}var M=function(t){w()(n,t);var e=P(n);function n(){return u()(this,n),e.apply(this,arguments)}return l()(n,[{key:"getProjectedLight",value:function(t){var e=t.layer,n=this.projectedLight,r=e.context.viewport,i=e.props,o=i.coordinateSystem,a=i.coordinateOrigin,s=i.modelMatrix,u=Object(C.b)({viewport:r,modelMatrix:s,coordinateSystem:o,coordinateOrigin:a}).project_uCameraPosition;return n.color=this.color,n.intensity=this.intensity,n.position=u,n}}]),n}(_),I=n(9),B=n.n(I);const R=Math.PI/180,k=23.4397*R;function L(t,e,n){const r=R*-n,i=R*e,o=function(t){return function(t){return("number"==typeof t?t:t.getTime())/864e5-.5+2440588}(t)-2451545}(t),a=function(t){const e=function(t){const e=t,n=R*(1.9148*Math.sin(e)+.02*Math.sin(2*e)+3e-4*Math.sin(3*e));return e+n+102.9372*R+Math.PI}((n=t,R*(357.5291+.98560028*n)));var n;return{declination:F(e,0),rightAscension:j(e,0)}}(o),s=function(t,e){return R*(280.147+360.9856235*t)-e}(o,r)-a.rightAscension;return{azimuth:z(s,i,a.declination),altitude:U(s,i,a.declination)}}function D(t,e,n){const{azimuth:r,altitude:i}=L(t,e,n);return[Math.sin(r)*Math.cos(i),Math.cos(r)*Math.cos(i),-Math.sin(i)]}function j(t,e){const n=t;return Math.atan2(Math.sin(n)*Math.cos(k)-Math.tan(e)*Math.sin(k),Math.cos(n))}function F(t,e){const n=t;return Math.asin(Math.sin(e)*Math.cos(k)+Math.cos(e)*Math.sin(k)*Math.sin(n))}function z(t,e,n){const r=t,i=e,o=n;return Math.atan2(Math.sin(r),Math.cos(r)*Math.sin(i)-Math.tan(o)*Math.cos(i))}function U(t,e,n){const r=t,i=e,o=n;return Math.asin(Math.sin(i)*Math.sin(o)+Math.cos(i)*Math.cos(o)*Math.cos(r))}function N(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=T()(t);if(e){var i=T()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return O()(this,n)}}var G=function(t){w()(n,t);var e=N(n);function n(t){var r;return u()(this,n),(r=e.call(this,t)).timestamp=t.timestamp,r}return l()(n,[{key:"getProjectedLight",value:function(t){var e=t.layer.context.viewport;if(e.resolution&&e.resolution>0){var n=D(this.timestamp,0,0),r=B()(n,3),i=r[0],o=r[1],a=r[2];this.direction=[i,-a,o]}else{var s=e.latitude,u=e.longitude;this.direction=D(this.timestamp,s,u)}return this}}]),n}(a.a),V=n(178),H=n(58);const W=[-1,-1,1,-1,-1,1,1,1];class q extends V.a{constructor(t,e){const n=W.map(t=>-1===t?0:t);super(t,Object.assign({},e,{vs:"attribute vec2 aClipSpacePosition;\nattribute vec2 aTexCoord;\nattribute vec2 aCoordinate;\n\nvarying vec2 position;\nvarying vec2 coordinate;\nvarying vec2 uv;\n\nvoid main(void) {\n gl_Position = vec4(aClipSpacePosition, 0., 1.);\n position = aClipSpacePosition;\n coordinate = aCoordinate;\n uv = aTexCoord;\n}\n",geometry:new H.a({drawMode:5,vertexCount:4,attributes:{aClipSpacePosition:{size:2,value:new Float32Array(W)},aTexCoord:{size:2,value:new Float32Array(n)},aCoordinate:{size:2,value:new Float32Array(n)}}})})),this.setVertexCount(4)}}var X=n(8),J=n(180);function Z(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=T()(t);if(e){var i=T()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return O()(this,n)}}var Q=function(t){w()(n,t);var e=Z(n);function n(t,r){var i;u()(this,n),i=e.call(this,t,r);var o=r.module,a=r.fs,s=r.id;return i.model=new q(t,{id:s,fs:a,modules:[o]}),i}return l()(n,[{key:"render",value:function(t){var e=this,n=this.gl;Object(X.n)(n,{viewport:[0,0,n.drawingBufferWidth,n.drawingBufferHeight]}),Object(X.o)(n,{framebuffer:t.outputBuffer,clearColor:[0,0,0,0]},(function(){return e._renderPass(n,t)}))}},{key:"delete",value:function(){this.model.delete(),this.model=null}},{key:"_renderPass",value:function(t,e){var n=e.inputBuffer;Object(J.a)(t,{color:!0}),this.model.draw({moduleSettings:this.props.moduleSettings,uniforms:{texture:n,texSize:[n.width,n.height]},parameters:{depthWrite:!1,depthTest:!1}})}}]),n}(n(170).a),K=n(196);function Y(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return $(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return $(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function $(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:{};u()(this,t),this.id="".concat(e.name,"-pass"),this.props=n,Object(K.b)(e),this.module=e}return l()(t,[{key:"preRender",value:function(){}},{key:"postRender",value:function(t,e){var n=this.passes||function(t,e,n,r){if(!e.passes){var i=rt(e);return[new Q(t,{id:n,module:e,fs:i,moduleSettings:r})]}return e.passes.map((function(i,o){var a=rt(e,i),s="".concat(n,"-").concat(o);return new Q(t,{id:s,module:e,fs:a,moduleSettings:r})}))}(t,this.module,this.id,this.props);this.passes=n;for(var r=e.target,i=e.inputBuffer,o=e.swapBuffer,a=0;a1&&void 0!==arguments[1]?arguments[1]:t;if(e.filter){var n="string"==typeof e.filter?e.filter:"".concat(t.name,"_filterColor");return et(n)}if(e.sampler){var r="string"==typeof e.sampler?e.sampler:"".concat(t.name,"_sampleColor");return nt(r)}return null}var it=n(70),ot=n(190),at=n(163),st=n(158),ut=n(157),ct=n(189),lt=n(165),ht=n(41),ft=n(84),pt=n(156),dt=n(75),At=n(18);function gt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function mt(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},n=e.topLeft,r=void 0===n||n,i=B()(t,3),o=i[0],a=i[1],s=i[2],u=void 0===s?this.projectedCenter[2]:s,c=r?a:this.height-a,l=Object(At.n)([o,c,u],this.pixelUnprojectionMatrix),h=B()(l,3),f=h[0],p=h[1],d=h[2];return[f,p,d]}},{key:"panByPosition",value:function(t,e){var n=this.project(t),r=[this.width/2+n[0]-e[0],this.height/2+n[1]-e[1],this.projectedCenter[2]];return{target:this.unproject(r)}}}]),n}(ht.a),xt=n(152);function wt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var Et=n(81),Ot=n(13),St=n(24);class Tt{constructor({phi:t=0,theta:e=0,radius:n=1,bearing:r,pitch:i,altitude:o,radiusScale:a=6371e3}={}){wt(this,"phi",void 0),wt(this,"theta",void 0),wt(this,"radius",void 0),wt(this,"radiusScale",void 0),this.phi=t,this.theta=e,this.radius=n||o||1,this.radiusScale=a||1,void 0!==r&&(this.bearing=r),void 0!==i&&(this.pitch=i),this.check()}toString(){return this.formatString(Ot.b)}formatString({printTypes:t=!1}){const e=Ot.e;return"".concat(t?"Spherical":"","[rho:").concat(e(this.radius),",theta:").concat(e(this.theta),",phi:").concat(e(this.phi),"]")}equals(t){return Object(Ot.d)(this.radius,t.radius)&&Object(Ot.d)(this.theta,t.theta)&&Object(Ot.d)(this.phi,t.phi)}exactEquals(t){return this.radius===t.radius&&this.theta===t.theta&&this.phi===t.phi}get bearing(){return 180-Object(Ot.c)(this.phi)}set bearing(t){this.phi=Math.PI-Object(Ot.h)(t)}get pitch(){return Object(Ot.c)(this.theta)}set pitch(t){this.theta=Object(Ot.h)(t)}get longitude(){return Object(Ot.c)(this.phi)}get latitude(){return Object(Ot.c)(this.theta)}get lng(){return Object(Ot.c)(this.phi)}get lat(){return Object(Ot.c)(this.theta)}get z(){return(this.radius-1)*this.radiusScale}set(t,e,n){return this.radius=t,this.phi=e,this.theta=n,this.check()}clone(){return(new Tt).copy(this)}copy(t){return this.radius=t.radius,this.phi=t.phi,this.theta=t.theta,this.check()}fromLngLatZ([t,e,n]){return this.radius=1+n/this.radiusScale,this.phi=Object(Ot.h)(e),this.theta=Object(Ot.h)(t),this.check()}fromVector3(t){return this.radius=St.h(t),this.radius>0&&(this.theta=Math.atan2(t[0],t[1]),this.phi=Math.acos(Object(Ot.a)(t[2]/this.radius,-1,1))),this.check()}toVector3(){return new Et.a(0,0,this.radius).rotateX({radians:this.theta}).rotateZ({radians:this.phi})}makeSafe(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this}check(){if(!(Number.isFinite(this.phi)&&Number.isFinite(this.theta)&&this.radius>0))throw new Error("SphericalCoordinates: some fields set to invalid numbers");return this}}function Ct(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Pt(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:20,e=this.getDirection(!0);return this._move(e.rotateZ({radians:Math.PI/2}),t)}},{key:"moveRight",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,e=this.getDirection(!0);return this._move(e.rotateZ({radians:-Math.PI/2}),t)}},{key:"moveUp",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,e=this.getDirection(!0);return this._move(e,t)}},{key:"moveDown",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,e=this.getDirection(!0);return this._move(e.negate(),t)}},{key:"rotateLeft",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:15;return this._getUpdatedState({bearing:this.getViewportProps().bearing-t})}},{key:"rotateRight",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:15;return this._getUpdatedState({bearing:this.getViewportProps().bearing+t})}},{key:"rotateUp",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this._getUpdatedState({pitch:this.getViewportProps().pitch+t})}},{key:"rotateDown",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this._getUpdatedState({pitch:this.getViewportProps().pitch-t})}},{key:"zoomIn",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:2;return this.zoom({scale:t})}},{key:"zoomOut",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:2;return this.zoom({scale:1/t})}},{key:"shortestPathFrom",value:function(t){var e=t.getViewportProps(),n=qt({},this.getViewportProps()),r=n.bearing,i=n.longitude;return Math.abs(r-e.bearing)>180&&(n.bearing=r<0?r+360:r-360),null!==i&&null!==e.longitude&&Math.abs(i-e.longitude)>180&&(n.longitude=i<0?i+360:i-360),n}},{key:"_move",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.getViewportProps().position,r=t.scale(e);return this._getUpdatedState({position:new Et.a(n).add(r)})}},{key:"getDirection",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=new Tt({bearing:this.getViewportProps().bearing,pitch:t?90:90+this.getViewportProps().pitch}),n=e.toVector3().normalize();return n}},{key:"_getUpdatedState",value:function(t){return new n(qt(qt(qt({},this.getViewportProps()),this.getState()),t))}},{key:"applyConstraints",value:function(t){var e=t.pitch,n=t.maxPitch,r=t.minPitch,i=t.longitude,o=t.bearing;return t.pitch=Object(Ot.a)(e,r,n),null!==i&&(i<-180||i>180)&&(t.longitude=Object(Vt.e)(i+180,360)-180),(o<-180||o>180)&&(t.bearing=Object(Vt.e)(o+180,360)-180),t}}]),n}(Gt.a),Zt=function(t){w()(n,t);var e=Xt(n);function n(){var t;u()(this,n);for(var r=arguments.length,i=new Array(r),o=0;o0&&void 0!==arguments[0]?arguments[0]:{};return u()(this,n),(t=e.call(this,r)).props.orbitAxis=r.orbitAxis||"Z",t}return l()(n,[{key:"ViewportType",get:function(){return bt}},{key:"ControllerType",get:function(){return Yt.b}}]),n}(jt.a);f()(te,"displayName","OrbitView");var ee=n(151),ne=n(7),re=n.n(ne),ie=n(108);function oe(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=T()(t);if(e){var i=T()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return O()(this,n)}}var ae=function(t){w()(n,t);var e=oe(n);function n(){return u()(this,n),e.apply(this,arguments)}return l()(n,[{key:"applyConstraints",value:function(t){var e=t.maxZoom,n=t.minZoom,r=t.zoom;t.zoom=Object(Ot.a)(r,n,e);var i=t.longitude,o=t.latitude;return(i<-180||i>180)&&(t.longitude=Object(Vt.e)(i+180,360)-180),t.latitude=Object(Ot.a)(o,-89,89),t}}]),n}(ie.a),se=function(t){w()(n,t);var e=oe(n);function n(){var t;u()(this,n);for(var r=arguments.length,i=new Array(r),o=0;o=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function Ae(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{};return u()(this,n),(t=e.call(this,{compare:["longitude","latitude","zoom","bearing","pitch"],extract:["width","height","longitude","latitude","zoom","bearing","pitch"],required:["width","height","latitude","longitude","zoom"]})).opts=me(me({},_e),r),t}return l()(n,[{key:"interpolateProps",value:function(t,e,n){var r,i=Object(At.d)(t,e,n,this.opts),o=de(ve);try{for(o.s();!(r=o.n()).done;){var a=r.value;i[a]=Object(Ot.g)(t[a]||0,e[a]||0,n)}}catch(t){o.e(t)}finally{o.f()}return i}},{key:"getDuration",value:function(t,e){var n=e.transitionDuration;return"auto"===n&&(n=Object(At.h)(t,e,this.opts)),n}}]),n}(pe.a),xe=n(20),we=n(28),Ee=n(50),Oe=n(206),Se=n(65),Te=n(154),Ce=n(77),Pe=n(155),Me=n(131);n.d(e,"COORDINATE_SYSTEM",(function(){return r.a})),n.d(e,"OPERATION",(function(){return r.c})),n.d(e,"UNIT",(function(){return r.e})),n.d(e,"LightingEffect",(function(){return i.a})),n.d(e,"AmbientLight",(function(){return o.a})),n.d(e,"DirectionalLight",(function(){return a.a})),n.d(e,"PointLight",(function(){return _})),n.d(e,"_CameraLight",(function(){return M})),n.d(e,"_SunLight",(function(){return G})),n.d(e,"PostProcessEffect",(function(){return tt})),n.d(e,"_LayersPass",(function(){return it.a})),n.d(e,"Deck",(function(){return ot.a})),n.d(e,"LayerManager",(function(){return at.a})),n.d(e,"AttributeManager",(function(){return st.a})),n.d(e,"Layer",(function(){return ut.a})),n.d(e,"CompositeLayer",(function(){return ct.a})),n.d(e,"DeckRenderer",(function(){return lt.a})),n.d(e,"Viewport",(function(){return ht.a})),n.d(e,"WebMercatorViewport",(function(){return ft.a})),n.d(e,"_GlobeViewport",(function(){return pt.a})),n.d(e,"OrbitViewport",(function(){return bt})),n.d(e,"OrthographicViewport",(function(){return xt.a})),n.d(e,"FirstPersonViewport",(function(){return It})),n.d(e,"picking",(function(){return Bt.a})),n.d(e,"project",(function(){return Rt.a})),n.d(e,"project32",(function(){return kt.a})),n.d(e,"gouraudLighting",(function(){return Lt.a})),n.d(e,"phongLighting",(function(){return Lt.b})),n.d(e,"shadow",(function(){return Dt.a})),n.d(e,"View",(function(){return jt.a})),n.d(e,"MapView",(function(){return Ft.a})),n.d(e,"FirstPersonView",(function(){return Kt})),n.d(e,"OrbitView",(function(){return te})),n.d(e,"OrthographicView",(function(){return ee.a})),n.d(e,"_GlobeView",(function(){return ce})),n.d(e,"Controller",(function(){return Nt.a})),n.d(e,"MapController",(function(){return ie.b})),n.d(e,"_GlobeController",(function(){return se})),n.d(e,"FirstPersonController",(function(){return Zt})),n.d(e,"OrbitController",(function(){return Yt.b})),n.d(e,"OrthographicController",(function(){return le.a})),n.d(e,"LayerExtension",(function(){return he.a})),n.d(e,"TRANSITION_EVENTS",(function(){return fe.a})),n.d(e,"TransitionInterpolator",(function(){return pe.a})),n.d(e,"LinearInterpolator",(function(){return Ht.a})),n.d(e,"FlyToInterpolator",(function(){return be})),n.d(e,"log",(function(){return xe.a})),n.d(e,"assert",(function(){return we.a})),n.d(e,"createIterable",(function(){return Ee.a})),n.d(e,"fp64LowPart",(function(){return Vt.b})),n.d(e,"Tesselator",(function(){return Oe.a})),n.d(e,"_fillArray",(function(){return Se.a})),n.d(e,"_flatten",(function(){return Se.b})),n.d(e,"_count",(function(){return Te.a})),n.d(e,"_memoize",(function(){return Ce.a})),n.d(e,"_mergeShaders",(function(){return Pe.a})),n.d(e,"_compareProps",(function(){return Me.a}))},,function(t,e,n){"use strict";var r=n(35);function i(t,e){const n=Object(r.n)([],e,t);return Object(r.k)(n,n,1/n[3]),n}function o(t,e){const n=t%e;return n<0?e+n:n}function a(t,e,n){return tn?n:t}const s=Math.log2||function(t){return Math.log(t)*Math.LOG2E};var u=n(25),c=n(33),l=n(24);function h(t,e){if(!t)throw new Error(e||"@math.gl/web-mercator: assertion failed.")}const f=Math.PI,p=f/4,d=f/180,A=180/f,g=1.5;function m(t){return Math.pow(2,t)}function y(t){return s(t)}function v(t){const[e,n]=t;h(Number.isFinite(e)),h(Number.isFinite(n)&&n>=-90&&n<=90,"invalid latitude");const r=n*d;return[512*(e*d+f)/(2*f),512*(f+Math.log(Math.tan(p+.5*r)))/(2*f)]}function _(t){const[e,n]=t,r=e/512*(2*f)-f,i=2*(Math.atan(Math.exp(n/512*(2*f)-f))-p);return[r*A,i*A]}function b(t){const{latitude:e}=t;h(Number.isFinite(e));return y(4003e4*Math.cos(e*d))-9}function x(t){return 512/4003e4/Math.cos(t*d)}function w(t){const{latitude:e,longitude:n,highPrecision:r=!1}=t;h(Number.isFinite(e)&&Number.isFinite(n));const i=Math.cos(e*d),o=512/360/i,a=512/4003e4/i,s={unitsPerMeter:[a,a,a],metersPerUnit:[1/a,1/a,1/a],unitsPerDegree:[512/360,o,a],degreesPerUnit:[.703125,1/o,1/a]};if(r){const t=d*Math.tan(e*d)/i,n=512/360*t/2,r=512/4003e4*t,u=r/o*a;s.unitsPerDegree2=[0,n,r],s.unitsPerMeter2=[u,0,u]}return s}function E(t,e){const[n,r,i]=t,[o,a,s]=e,{unitsPerMeter:u,unitsPerMeter2:c}=w({longitude:n,latitude:r,highPrecision:!0}),l=v(t);l[0]+=o*(u[0]+c[0]*a),l[1]+=a*(u[1]+c[1]*a);const h=_(l),f=(i||0)+(s||0);return Number.isFinite(i)||Number.isFinite(s)?[h[0],h[1],f]:h}function O(t){const{height:e,pitch:n,bearing:r,altitude:i,scale:o,center:a}=t,s=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];u.p(s,s,[0,0,-i]),u.l(s,s,-n*d),u.n(s,s,r*d);const c=o/e;return u.o(s,s,[c,c,c]),a&&u.p(s,s,l.j([],a)),s}function S(t){const{width:e,height:n,altitude:r,pitch:i=0,offset:o,center:s,scale:u,nearZMultiplier:c=1,farZMultiplier:l=1}=t;let{fovy:h=T(g)}=t;void 0!==r&&(h=T(r));const f=h*d,p=i*d,A=C(h);let m=A;s&&(m+=s[2]*u/Math.cos(p)/n);const y=f*(.5+(o?o[1]:0)/n),v=Math.sin(y)*m/Math.sin(a(Math.PI/2-p-y,.01,Math.PI-.01)),_=Math.sin(p)*v+m,b=10*m;return{fov:f,aspect:e/n,focalDistance:A,near:c,far:Math.min(_*l,b)}}function T(t){return 2*Math.atan(.5/t)*A}function C(t){return.5/Math.tan(.5*t*d)}function P(t,e){const[n,r,o=0]=t;return h(Number.isFinite(n)&&Number.isFinite(r)&&Number.isFinite(o)),i(e,[n,r,o,1])}function M(t,e,n=0){const[r,o,a]=t;if(h(Number.isFinite(r)&&Number.isFinite(o),"invalid pixel coordinate"),Number.isFinite(a)){return i(e,[r,o,a,1])}const s=i(e,[r,o,0,1]),u=i(e,[r,o,1,1]),l=s[2],f=u[2],p=l===f?0:((n||0)-l)/(f-l);return c.c([],s,u,p)}function I(t){const{width:e,height:n,bounds:r,minExtent:i=0,maxZoom:o=24,offset:u=[0,0]}=t,[[c,l],[f,p]]=r,d=function(t=0){if("number"==typeof t)return{top:t,bottom:t,left:t,right:t};return h(Number.isFinite(t.top)&&Number.isFinite(t.bottom)&&Number.isFinite(t.left)&&Number.isFinite(t.right)),t}(t.padding),A=v([c,a(p,-85.051129,85.051129)]),g=v([f,a(l,-85.051129,85.051129)]),m=[Math.max(Math.abs(g[0]-A[0]),i),Math.max(Math.abs(g[1]-A[1]),i)],y=[e-d.left-d.right-2*Math.abs(u[0]),n-d.top-d.bottom-2*Math.abs(u[1])];h(y[0]>0&&y[1]>0);const b=y[0]/m[0],x=y[1]/m[1],w=(d.right-d.left)/2/b,E=(d.bottom-d.top)/2/x,O=_([(g[0]+A[0])/2+w,(g[1]+A[1])/2+E]),S=Math.min(o,s(Math.abs(Math.min(b,x))));return h(Number.isFinite(S)),{longitude:O[0],latitude:O[1],zoom:S}}const B=Math.PI/180;function R(t,e=0){const{width:n,height:r,unproject:i}=t,o={targetZ:e},a=i([0,r],o),s=i([n,r],o);let u,c;return(t.fovy?.5*t.fovy*B:Math.atan(.5/t.altitude))>(90-t.pitch)*B-.01?(u=k(t,0,e),c=k(t,n,e)):(u=i([0,0],o),c=i([n,0],o)),[a,s,c,u]}function k(t,e,n){const{pixelUnprojectionMatrix:r}=t,o=i(r,[e,0,1,1]),a=i(r,[e,t.height,1,1]),s=(n*t.distanceScales.unitsPerMeter[2]-o[2])/(a[2]-o[2]),u=_(c.c([],o,a,s));return u.push(n),u}function L(t){const{width:e,height:n,pitch:r=0}=t;let{longitude:i,latitude:a,zoom:u,bearing:c=0}=t;(i<-180||i>180)&&(i=o(i+180,360)-180),(c<-180||c>180)&&(c=o(c+180,360)-180);const l=s(n/512);if(u<=l)u=l,a=0;else{const t=n/2/Math.pow(2,u),e=_([0,t])[1];if(ae&&(a=e)}}return{width:e,height:n,longitude:i,latitude:a,zoom:u,pitch:r,bearing:c}}const D=["longitude","latitude","zoom"],j={curve:1.414,speed:1.2};function F(t,e,n,r){const{startZoom:i,startCenterXY:o,uDelta:a,w0:s,u1:u,S:l,rho:h,rho2:f,r0:p}=U(t,e,r);if(u<.01){const r={};for(const i of D){const o=t[i],a=e[i];r[i]=(d=n)*a+(1-d)*o}return r}var d;const A=n*l,g=Math.cosh(p)/Math.cosh(p+h*A),m=s*((Math.cosh(p)*Math.tanh(p+h*A)-Math.sinh(p))/f)/u,v=i+y(1/g),b=c.e([],a,m);c.a(b,b,o);const x=_(b);return{longitude:x[0],latitude:x[1],zoom:v}}function z(t,e,n){const r={...j,...n},{screenSpeed:i,speed:o,maxDuration:a}=r,{S:s,rho:u}=U(t,e,r),c=1e3*s;let l;return l=Number.isFinite(i)?c/(i/u):c/o,Number.isFinite(a)&&l>a?0:l}function U(t,e,n){const r=(n=Object.assign({},j,n)).curve,i=t.zoom,o=[t.longitude,t.latitude],a=m(i),s=e.zoom,u=[e.longitude,e.latitude],l=m(s-i),h=v(o),f=v(u),p=c.f([],f,h),d=Math.max(t.width,t.height),A=d/l,g=c.b(p)*a,y=Math.max(g,.01),_=r*r,b=(A*A-d*d+_*_*y*y)/(2*d*_*y),x=(A*A-d*d-_*_*y*y)/(2*A*_*y),w=Math.log(Math.sqrt(b*b+1)-b),E=Math.log(Math.sqrt(x*x+1)-x);return{startZoom:i,startCenterXY:h,uDelta:p,w0:d,u1:g,S:(E-w)/r,rho:r,rho2:_,r0:w,r1:E}}n.d(e,"f",(function(){return R})),n.d(e,"c",(function(){return I})),n.d(e,"m",(function(){return L})),n.d(e,"d",(function(){return F})),n.d(e,"h",(function(){return z})),n.d(e,"l",(function(){return v})),n.d(e,"p",(function(){return _})),n.d(e,"q",(function(){return P})),n.d(e,"n",(function(){return M})),n.d(e,"b",(function(){return T})),n.d(e,"e",(function(){return C})),n.d(e,"i",(function(){return b})),n.d(e,"o",(function(){return x})),n.d(e,"g",(function(){return w})),n.d(e,"a",(function(){return E})),n.d(e,"k",(function(){return O})),n.d(e,"j",(function(){return S}))},function(t,e,n){"use strict";var r={};function i(t){const e=t&&t.lastIndexOf("/");return e>=0?t.substr(e+1):""}function o(t){const e=t&&t.lastIndexOf("/");return e>=0?t.substr(0,e):""}function a(...t){return(t=t.map((e,n)=>(n&&(e=e.replace(new RegExp("^".concat("/")),"")),n!==t.length-1&&(e=e.replace(new RegExp("".concat("/","$")),"")),e))).join("/")}n.r(r),n.d(r,"filename",(function(){return i})),n.d(r,"dirname",(function(){return o})),n.d(r,"join",(function(){return a}));n(142);var s=n(203);n.d(e,"b",(function(){return r})),n.d(e,"a",(function(){return s}))},function(t,e,n){"use strict";var r=n(273);e.a=new r.a({id:"deck"})},function(t,e,n){"use strict";n.d(e,"f",(function(){return o})),n.d(e,"h",(function(){return a})),n.d(e,"g",(function(){return s})),n.d(e,"d",(function(){return u})),n.d(e,"a",(function(){return c})),n.d(e,"e",(function(){return l})),n.d(e,"j",(function(){return h})),n.d(e,"b",(function(){return f})),n.d(e,"c",(function(){return p})),n.d(e,"i",(function(){return d})),n.d(e,"k",(function(){return A}));const r=t=>"boolean"==typeof t,i=t=>"function"==typeof t,o=t=>null!==t&&"object"==typeof t,a=t=>o(t)&&t.constructor==={}.constructor,s=t=>o(t)&&i(t.then),u=t=>t&&"function"==typeof t[Symbol.iterator],c=t=>t&&"function"==typeof t[Symbol.asyncIterator],l=t=>t&&i(t.next),h=t=>"undefined"!=typeof Response&&t instanceof Response||t&&t.arrayBuffer&&t.text&&t.json,f=t=>"undefined"!=typeof Blob&&t instanceof Blob,p=t=>t&&"object"==typeof t&&t.isBuffer,d=t=>(t=>"undefined"!=typeof ReadableStream&&t instanceof ReadableStream||o(t)&&i(t.tee)&&i(t.cancel)&&i(t.getReader))(t)||(t=>o(t)&&i(t.read)&&i(t.pipe)&&r(t.readable))(t),A=t=>(t=>o(t)&&i(t.abort)&&i(t.getWriter))(t)||(t=>o(t)&&i(t.end)&&i(t.write)&&r(t.writable))(t)},function(t,e,n){"use strict";n.d(e,"a",(function(){return i})),n.d(e,"b",(function(){return o}));var r=n(13);function i(t){if(!Number.isFinite(t))throw new Error("Invalid number ".concat(t));return t}function o(t,e,n=""){if(r.b.debug&&!function(t,e){if(t.length!==e)return!1;for(let e=0;e0&&(o=1/Math.sqrt(o)),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t}function l(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function h(t,e,n){var r=e[0],i=e[1],o=e[2],a=n[0],s=n[1],u=n[2];return t[0]=i*u-o*s,t[1]=o*a-r*u,t[2]=r*s-i*a,t}function f(t,e,n){var r=e[0],i=e[1],o=e[2],a=n[3]*r+n[7]*i+n[11]*o+n[15];return a=a||1,t[0]=(n[0]*r+n[4]*i+n[8]*o+n[12])/a,t[1]=(n[1]*r+n[5]*i+n[9]*o+n[13])/a,t[2]=(n[2]*r+n[6]*i+n[10]*o+n[14])/a,t}function p(t,e,n){var r=e[0],i=e[1],o=e[2];return t[0]=r*n[0]+i*n[3]+o*n[6],t[1]=r*n[1]+i*n[4]+o*n[7],t[2]=r*n[2]+i*n[5]+o*n[8],t}function d(t,e,n){var r=n[0],i=n[1],o=n[2],a=n[3],s=e[0],u=e[1],c=e[2],l=i*c-o*u,h=o*s-r*c,f=r*u-i*s,p=i*f-o*h,d=o*l-r*f,A=r*h-i*l,g=2*a;return l*=g,h*=g,f*=g,p*=2,d*=2,A*=2,t[0]=s+l+p,t[1]=u+h+d,t[2]=c+f+A,t}function A(t,e,n,r){var i=[],o=[];return i[0]=e[0]-n[0],i[1]=e[1]-n[1],i[2]=e[2]-n[2],o[0]=i[0],o[1]=i[1]*Math.cos(r)-i[2]*Math.sin(r),o[2]=i[1]*Math.sin(r)+i[2]*Math.cos(r),t[0]=o[0]+n[0],t[1]=o[1]+n[1],t[2]=o[2]+n[2],t}function g(t,e,n,r){var i=[],o=[];return i[0]=e[0]-n[0],i[1]=e[1]-n[1],i[2]=e[2]-n[2],o[0]=i[2]*Math.sin(r)+i[0]*Math.cos(r),o[1]=i[1],o[2]=i[2]*Math.cos(r)-i[0]*Math.sin(r),t[0]=o[0]+n[0],t[1]=o[1]+n[1],t[2]=o[2]+n[2],t}function m(t,e,n,r){var i=[],o=[];return i[0]=e[0]-n[0],i[1]=e[1]-n[1],i[2]=e[2]-n[2],o[0]=i[0]*Math.cos(r)-i[1]*Math.sin(r),o[1]=i[0]*Math.sin(r)+i[1]*Math.cos(r),o[2]=i[2],t[0]=o[0]+n[0],t[1]=o[1]+n[1],t[2]=o[2]+n[2],t}function y(t,e){var n=t[0],r=t[1],i=t[2],o=e[0],a=e[1],s=e[2],u=Math.sqrt(n*n+r*r+i*i)*Math.sqrt(o*o+a*a+s*s),c=u&&l(t,e)/u;return Math.acos(Math.min(Math.max(c,-1),1))}var v,_=function(t,e,n){return t[0]=e[0]*n[0],t[1]=e[1]*n[1],t[2]=e[2]*n[2],t},b=o;v=i()},function(t,e,n){"use strict";n.d(e,"q",(function(){return i})),n.d(e,"f",(function(){return o})),n.d(e,"a",(function(){return a})),n.d(e,"h",(function(){return s})),n.d(e,"p",(function(){return u})),n.d(e,"o",(function(){return c})),n.d(e,"k",(function(){return l})),n.d(e,"l",(function(){return h})),n.d(e,"m",(function(){return f})),n.d(e,"n",(function(){return p})),n.d(e,"e",(function(){return d})),n.d(e,"c",(function(){return A})),n.d(e,"d",(function(){return g})),n.d(e,"j",(function(){return m})),n.d(e,"i",(function(){return y})),n.d(e,"g",(function(){return v})),n.d(e,"b",(function(){return _}));var r=n(11);function i(t,e){if(t===e){var n=e[1],r=e[2],i=e[3],o=e[6],a=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=n,t[6]=e[9],t[7]=e[13],t[8]=r,t[9]=o,t[11]=e[14],t[12]=i,t[13]=a,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}function o(t,e){var n=e[0],r=e[1],i=e[2],o=e[3],a=e[4],s=e[5],u=e[6],c=e[7],l=e[8],h=e[9],f=e[10],p=e[11],d=e[12],A=e[13],g=e[14],m=e[15],y=n*s-r*a,v=n*u-i*a,_=n*c-o*a,b=r*u-i*s,x=r*c-o*s,w=i*c-o*u,E=l*A-h*d,O=l*g-f*d,S=l*m-p*d,T=h*g-f*A,C=h*m-p*A,P=f*m-p*g,M=y*P-v*C+_*T+b*S-x*O+w*E;return M?(M=1/M,t[0]=(s*P-u*C+c*T)*M,t[1]=(i*C-r*P-o*T)*M,t[2]=(A*w-g*x+m*b)*M,t[3]=(f*x-h*w-p*b)*M,t[4]=(u*S-a*P-c*O)*M,t[5]=(n*P-i*S+o*O)*M,t[6]=(g*_-d*w-m*v)*M,t[7]=(l*w-f*_+p*v)*M,t[8]=(a*C-s*S+c*E)*M,t[9]=(r*S-n*C-o*E)*M,t[10]=(d*x-A*_+m*y)*M,t[11]=(h*_-l*x-p*y)*M,t[12]=(s*O-a*T-u*E)*M,t[13]=(n*T-r*O+i*E)*M,t[14]=(A*v-d*b-g*y)*M,t[15]=(l*b-h*v+f*y)*M,t):null}function a(t){var e=t[0],n=t[1],r=t[2],i=t[3],o=t[4],a=t[5],s=t[6],u=t[7],c=t[8],l=t[9],h=t[10],f=t[11],p=t[12],d=t[13],A=t[14],g=t[15];return(e*a-n*o)*(h*g-f*A)-(e*s-r*o)*(l*g-f*d)+(e*u-i*o)*(l*A-h*d)+(n*s-r*a)*(c*g-f*p)-(n*u-i*a)*(c*A-h*p)+(r*u-i*s)*(c*d-l*p)}function s(t,e,n){var r=e[0],i=e[1],o=e[2],a=e[3],s=e[4],u=e[5],c=e[6],l=e[7],h=e[8],f=e[9],p=e[10],d=e[11],A=e[12],g=e[13],m=e[14],y=e[15],v=n[0],_=n[1],b=n[2],x=n[3];return t[0]=v*r+_*s+b*h+x*A,t[1]=v*i+_*u+b*f+x*g,t[2]=v*o+_*c+b*p+x*m,t[3]=v*a+_*l+b*d+x*y,v=n[4],_=n[5],b=n[6],x=n[7],t[4]=v*r+_*s+b*h+x*A,t[5]=v*i+_*u+b*f+x*g,t[6]=v*o+_*c+b*p+x*m,t[7]=v*a+_*l+b*d+x*y,v=n[8],_=n[9],b=n[10],x=n[11],t[8]=v*r+_*s+b*h+x*A,t[9]=v*i+_*u+b*f+x*g,t[10]=v*o+_*c+b*p+x*m,t[11]=v*a+_*l+b*d+x*y,v=n[12],_=n[13],b=n[14],x=n[15],t[12]=v*r+_*s+b*h+x*A,t[13]=v*i+_*u+b*f+x*g,t[14]=v*o+_*c+b*p+x*m,t[15]=v*a+_*l+b*d+x*y,t}function u(t,e,n){var r,i,o,a,s,u,c,l,h,f,p,d,A=n[0],g=n[1],m=n[2];return e===t?(t[12]=e[0]*A+e[4]*g+e[8]*m+e[12],t[13]=e[1]*A+e[5]*g+e[9]*m+e[13],t[14]=e[2]*A+e[6]*g+e[10]*m+e[14],t[15]=e[3]*A+e[7]*g+e[11]*m+e[15]):(r=e[0],i=e[1],o=e[2],a=e[3],s=e[4],u=e[5],c=e[6],l=e[7],h=e[8],f=e[9],p=e[10],d=e[11],t[0]=r,t[1]=i,t[2]=o,t[3]=a,t[4]=s,t[5]=u,t[6]=c,t[7]=l,t[8]=h,t[9]=f,t[10]=p,t[11]=d,t[12]=r*A+s*g+h*m+e[12],t[13]=i*A+u*g+f*m+e[13],t[14]=o*A+c*g+p*m+e[14],t[15]=a*A+l*g+d*m+e[15]),t}function c(t,e,n){var r=n[0],i=n[1],o=n[2];return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*o,t[9]=e[9]*o,t[10]=e[10]*o,t[11]=e[11]*o,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function l(t,e,n,i){var o,a,s,u,c,l,h,f,p,d,A,g,m,y,v,_,b,x,w,E,O,S,T,C,P=i[0],M=i[1],I=i[2],B=Math.hypot(P,M,I);return B0&&i[t]&&i[t].call(null,e,n,o)}},function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var r=n(38),i=n(61),o=n(51),a=n(8),s=n(10),u=n(135);const c={offset:"accessor.offset",stride:"accessor.stride",type:"accessor.type",size:"accessor.size",divisor:"accessor.divisor",normalized:"accessor.normalized",integer:"accessor.integer",instanced:"accessor.divisor",isInstanced:"accessor.divisor"},l={removedProps:{},replacedProps:{bytes:"byteLength"},deprecatedProps:c},h={removedProps:c};class f extends r.a{get[Symbol.toStringTag](){return"Buffer"}constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(t,e),this.stubRemovedMethods("Buffer","v6.0",["layout","setLayout","getIndexedParameter"]),this.target=e.target||(this.gl.webgl2?36662:34962),this.initialize(e),Object.seal(this)}getElementCount(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.accessor;return Math.round(this.byteLength/i.a.getBytesPerElement(t))}getVertexCount(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.accessor;return Math.round(this.byteLength/i.a.getBytesPerVertex(t))}initialize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return ArrayBuffer.isView(t)&&(t={data:t}),Number.isFinite(t)&&(t={byteLength:t}),t=Object(u.a)("Buffer",t,l),this.usage=t.usage||35044,this.debugData=null,this.setAccessor(Object.assign({},t,t.accessor)),t.data?this._setData(t.data,t.offset,t.byteLength):this._setByteLength(t.byteLength||0),this}setProps(t){return"accessor"in(t=Object(u.a)("Buffer",t,h))&&this.setAccessor(t.accessor),this}setAccessor(t){return delete(t=Object.assign({},t)).buffer,this.accessor=new i.a(t),this}reallocate(t){return t>this.byteLength?(this._setByteLength(t),!0):(this.bytesUsed=t,!1)}setData(t){return this.initialize(t)}subData(t){ArrayBuffer.isView(t)&&(t={data:t});const{data:e,offset:n=0,srcOffset:r=0}=t,i=t.byteLength||t.length;Object(s.a)(e);const o=this.gl.webgl2?36663:this.target;return this.gl.bindBuffer(o,this.handle),0!==r||void 0!==i?(Object(a.a)(this.gl),this.gl.bufferSubData(this.target,n,e,r,i)):this.gl.bufferSubData(o,n,e),this.gl.bindBuffer(o,null),this.debugData=null,this._inferType(e),this}copyData(t){let{sourceBuffer:e,readOffset:n=0,writeOffset:r=0,size:i}=t;const{gl:o}=this;return Object(a.a)(o),o.bindBuffer(36662,e.handle),o.bindBuffer(36663,this.handle),o.copyBufferSubData(36662,36663,n,r,i),o.bindBuffer(36662,null),o.bindBuffer(36663,null),this.debugData=null,this}getData(){let{dstData:t=null,srcByteOffset:e=0,dstOffset:n=0,length:r=0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};Object(a.a)(this.gl);const i=Object(o.c)(this.accessor.type||5126,{clamped:!1}),u=this._getAvailableElementCount(e),c=n;let l,h;t?(h=t.length,l=h-c):(l=Math.min(u,r||u),h=c+l);const f=Math.min(u,l);return r=r||f,Object(s.a)(r<=f),t=t||new i(h),this.gl.bindBuffer(36662,this.handle),this.gl.getBufferSubData(36662,e,t,n,r),this.gl.bindBuffer(36662,null),t}bind(){let{target:t=this.target,index:e=this.accessor&&this.accessor.index,offset:n=0,size:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return 35345===t||35982===t?void 0!==r?this.gl.bindBufferRange(t,e,this.handle,n,r):(Object(s.a)(0===n),this.gl.bindBufferBase(t,e,this.handle)):this.gl.bindBuffer(t,this.handle),this}unbind(){let{target:t=this.target,index:e=this.accessor&&this.accessor.index}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return 35345===t||35982===t?this.gl.bindBufferBase(t,e,null):this.gl.bindBuffer(t,null),this}getDebugData(){return this.debugData?{data:this.debugData,changed:!1}:(this.debugData=this.getData({length:Math.min(10,this.byteLength)}),{data:this.debugData,changed:!0})}invalidateDebugData(){this.debugData=null}_setData(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.byteLength+e;Object(s.a)(ArrayBuffer.isView(t)),this._trackDeallocatedMemory();const r=this._getTarget();this.gl.bindBuffer(r,this.handle),this.gl.bufferData(r,n,this.usage),this.gl.bufferSubData(r,e,t),this.gl.bindBuffer(r,null),this.debugData=t.slice(0,10),this.bytesUsed=n,this._trackAllocatedMemory(n);const a=Object(o.b)(t);return Object(s.a)(a),this.setAccessor(new i.a(this.accessor,{type:a})),this}_setByteLength(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.usage;Object(s.a)(t>=0),this._trackDeallocatedMemory();let n=t;0===t&&(n=new Float32Array(0));const r=this._getTarget();return this.gl.bindBuffer(r,this.handle),this.gl.bufferData(r,n,e),this.gl.bindBuffer(r,null),this.usage=e,this.debugData=null,this.bytesUsed=t,this._trackAllocatedMemory(t),this}_getTarget(){return this.gl.webgl2?36663:this.target}_getAvailableElementCount(t){const e=t/Object(o.c)(this.accessor.type||5126,{clamped:!1}).BYTES_PER_ELEMENT;return this.getElementCount()-e}_inferType(t){this.accessor.type||this.setAccessor(new i.a(this.accessor,{type:Object(o.b)(t)}))}_createHandle(){return this.gl.createBuffer()}_deleteHandle(){this.gl.deleteBuffer(this.handle),this._trackDeallocatedMemory()}_getParameter(t){this.gl.bindBuffer(this.target,this.handle);const e=this.gl.getBufferParameter(this.target,t);return this.gl.bindBuffer(this.target,null),e}get type(){return a.k.deprecated("Buffer.type","Buffer.accessor.type")(),this.accessor.type}get bytes(){return a.k.deprecated("Buffer.bytes","Buffer.byteLength")(),this.byteLength}setByteLength(t){return a.k.deprecated("setByteLength","reallocate")(),this.reallocate(t)}updateAccessor(t){return a.k.deprecated("updateAccessor(...)","setAccessor(new Accessor(buffer.accessor, ...)")(),this.accessor=new i.a(this.accessor,t),this}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return i})),n.d(e,"e",(function(){return o})),n.d(e,"b",(function(){return a})),n.d(e,"d",(function(){return s})),n.d(e,"c",(function(){return u})),n.d(e,"g",(function(){return c})),n.d(e,"h",(function(){return l})),n.d(e,"i",(function(){return h})),n.d(e,"j",(function(){return f})),n.d(e,"f",(function(){return A}));var r=n(11);function i(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t}function o(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t}function a(t){var e=t[0],n=t[1];return Math.hypot(e,n)}function s(t,e){return t[0]=-e[0],t[1]=-e[1],t}function u(t,e,n,r){var i=e[0],o=e[1];return t[0]=i+r*(n[0]-i),t[1]=o+r*(n[1]-o),t}function c(t,e,n){var r=e[0],i=e[1];return t[0]=n[0]*r+n[2]*i,t[1]=n[1]*r+n[3]*i,t}function l(t,e,n){var r=e[0],i=e[1];return t[0]=n[0]*r+n[2]*i+n[4],t[1]=n[1]*r+n[3]*i+n[5],t}function h(t,e,n){var r=e[0],i=e[1];return t[0]=n[0]*r+n[3]*i+n[6],t[1]=n[1]*r+n[4]*i+n[7],t}function f(t,e,n){var r=e[0],i=e[1];return t[0]=n[0]*r+n[4]*i+n[12],t[1]=n[1]*r+n[5]*i+n[13],t}var p,d,A=function(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t};p=new r.a(2),r.a!=Float32Array&&(p[0]=0,p[1]=0),d=p},function(t,e,n){"use strict";n.d(e,"a",(function(){return o})),n.d(e,"e",(function(){return a})),n.d(e,"c",(function(){return s})),n.d(e,"d",(function(){return u})),n.d(e,"b",(function(){return f})),n.d(e,"f",(function(){return p}));var r=n(66),i=n(81);function o(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function a(t,e){var n=t%e;return n<0?e+n:n}function s(t){return[t[12],t[13],t[14]]}function u(t){return{left:h(t[3]+t[0],t[7]+t[4],t[11]+t[8],t[15]+t[12]),right:h(t[3]-t[0],t[7]-t[4],t[11]-t[8],t[15]-t[12]),bottom:h(t[3]+t[1],t[7]+t[5],t[11]+t[9],t[15]+t[13]),top:h(t[3]-t[1],t[7]-t[5],t[11]-t[9],t[15]-t[13]),near:h(t[3]+t[2],t[7]+t[6],t[11]+t[10],t[15]+t[14]),far:h(t[3]-t[2],t[7]-t[6],t[11]-t[10],t[15]-t[14])}}var c,l=new i.a;function h(t,e,n,r){l.set(t,e,n);var o=l.len();return{distance:r/o,normal:new i.a(-t/o,-e/o,-n/o)}}function f(t){return t-Math.fround(t)}function p(t,e){var n=e.size,i=void 0===n?1:n,o=e.startIndex,a=void 0===o?0:o,s=void 0!==e.endIndex?e.endIndex:t.length,u=(s-a)/i;c=r.a.allocate(c,u,{type:Float32Array,size:2*i});for(var l=a,h=0;l0&&(a=1/Math.sqrt(a)),t[0]=n*a,t[1]=r*a,t[2]=i*a,t[3]=o*a,t}function p(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function d(t,e,n,r){var i=e[0],o=e[1],a=e[2],s=e[3];return t[0]=i+r*(n[0]-i),t[1]=o+r*(n[1]-o),t[2]=a+r*(n[2]-a),t[3]=s+r*(n[3]-s),t}function A(t,e,n){var r=e[0],i=e[1],o=e[2],a=e[3];return t[0]=n[0]*r+n[4]*i+n[8]*o+n[12]*a,t[1]=n[1]*r+n[5]*i+n[9]*o+n[13]*a,t[2]=n[2]*r+n[6]*i+n[10]*o+n[14]*a,t[3]=n[3]*r+n[7]*i+n[11]*o+n[15]*a,t}function g(t,e,n){var r=e[0],i=e[1],o=e[2],a=n[0],s=n[1],u=n[2],c=n[3],l=c*r+s*o-u*i,h=c*i+u*r-a*o,f=c*o+a*i-s*r,p=-a*r-s*i-u*o;return t[0]=l*c+p*-a+h*-u-f*-s,t[1]=h*c+p*-s+f*-a-l*-u,t[2]=f*c+p*-u+l*-s-h*-a,t[3]=e[3],t}function m(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]}function y(t,e){var n=t[0],i=t[1],o=t[2],a=t[3],s=e[0],u=e[1],c=e[2],l=e[3];return Math.abs(n-s)<=r.b*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(i-u)<=r.b*Math.max(1,Math.abs(i),Math.abs(u))&&Math.abs(o-c)<=r.b*Math.max(1,Math.abs(o),Math.abs(c))&&Math.abs(a-l)<=r.b*Math.max(1,Math.abs(a),Math.abs(l))}var v,_;v=new r.a(4),r.a!=Float32Array&&(v[0]=0,v[1]=0,v[2]=0,v[3]=0),_=v},function(t,e,n){"use strict";n(1),n(13);const r={CLOCKWISE:1,COUNTER_CLOCKWISE:-1};function i(t,e,n={}){return function(t,e={}){return Math.sign(o(t,e))}(t,n)!==e&&(function(t,e){const{start:n=0,end:r=t.length,size:i=2}=e,o=(r-n)/i,a=Math.floor(o/2);for(let e=0;e80*n){g=f=t[0],m=p=t[1];for(let e=n;ef&&(f=v),_>p&&(p=_);h=Math.max(f-g,p-m),h=0!==h?1/h:0}return c(a,l,n,g,m,h),l}function s(t,e,n,r,i,a){let s,u;if(void 0===a&&(a=o(t,{start:e,end:n,size:r})),i===a<0)for(s=e;s=e;s-=r)u=C(s,t[s],t[s+1],u);return u&&x(u,u.next)&&(P(u),u=u.next),u}function u(t,e){if(!t)return t;e||(e=t);let n,r=t;do{if(n=!1,r.steiner||!x(r,r.next)&&0!==b(r.prev,r,r.next))r=r.next;else{if(P(r),r=e=r.prev,r===r.next)break;n=!0}}while(n||r!==e);return e}function c(t,e,n,r,i,o,a){if(!t)return;!a&&o&&function(t,e,n,r){let i=t;do{null===i.z&&(i.z=m(i.x,i.y,e,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){let e,n,r,i,o,a,s,u,c=1;do{for(i=t,t=null,u=null,r=0;i;){for(r++,a=i,o=0,n=0;n0||s>0&&a;)0!==o&&(0===s||!a||i.z<=a.z)?(e=i,i=i.nextZ,o--):(e=a,a=a.nextZ,s--),u?u.nextZ=e:t=e,e.prevZ=u,u=e;i=a}u.nextZ=null,c*=2}while(r>1)}(i)}(t,r,i,o);let s,d,A=t;for(;t.prev!==t.next;)if(s=t.prev,d=t.next,o?h(t,r,i,o):l(t))e.push(s.i/n),e.push(t.i/n),e.push(d.i/n),P(t),t=d.next,A=d.next;else if((t=d)===A){a?1===a?c(t=f(u(t),e,n),e,n,r,i,o,2):2===a&&p(t,e,n,r,i,o):c(u(t),e,n,r,i,o,1);break}}function l(t){const e=t.prev,n=t,r=t.next;if(b(e,n,r)>=0)return!1;let i=t.next.next;for(;i!==t.prev;){if(v(e.x,e.y,n.x,n.y,r.x,r.y,i.x,i.y)&&b(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function h(t,e,n,r){const i=t.prev,o=t,a=t.next;if(b(i,o,a)>=0)return!1;const s=i.xo.x?i.x>a.x?i.x:a.x:o.x>a.x?o.x:a.x,l=i.y>o.y?i.y>a.y?i.y:a.y:o.y>a.y?o.y:a.y,h=m(s,u,e,n,r),f=m(c,l,e,n,r);let p=t.prevZ,d=t.nextZ;for(;p&&p.z>=h&&d&&d.z<=f;){if(p!==t.prev&&p!==t.next&&v(i.x,i.y,o.x,o.y,a.x,a.y,p.x,p.y)&&b(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,d!==t.prev&&d!==t.next&&v(i.x,i.y,o.x,o.y,a.x,a.y,d.x,d.y)&&b(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&v(i.x,i.y,o.x,o.y,a.x,a.y,p.x,p.y)&&b(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;d&&d.z<=f;){if(d!==t.prev&&d!==t.next&&v(i.x,i.y,o.x,o.y,a.x,a.y,d.x,d.y)&&b(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function f(t,e,n){let r=t;do{const i=r.prev,o=r.next.next;!x(i,o)&&w(i,r,r.next,o)&&S(i,o)&&S(o,i)&&(e.push(i.i/n),e.push(r.i/n),e.push(o.i/n),P(r),P(r.next),r=t=o),r=r.next}while(r!==t);return u(r)}function p(t,e,n,r,i,o){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&_(a,t)){let s=T(a,t);return a=u(a,a.next),s=u(s,s.next),c(a,e,n,r,i,o),void c(s,e,n,r,i,o)}t=t.next}a=a.next}while(a!==t)}function d(t,e){return t.x-e.x}function A(t,e){if(e=function(t,e){let n=e;const r=t.x,i=t.y;let o,a=-1/0;do{if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){const t=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=r&&t>a){if(a=t,t===r){if(i===n.y)return n;if(i===n.next.y)return n.next}o=n.x=n.x&&n.x>=u&&r!==n.x&&v(io.x||n.x===o.x&&g(o,n)))&&(o=n,h=l)),n=n.next}while(n!==s);return o}(t,e)){const n=T(e,t);u(e,e.next),u(n,n.next)}}function g(t,e){return b(t.prev,t,e.prev)<0&&b(e.next,t,t.next)<0}function m(t,e,n,r,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-r)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function y(t){let e=t,n=t;do{(e.x=0&&(t-a)*(r-s)-(n-a)*(e-s)>=0&&(n-a)*(o-s)-(i-a)*(r-s)>=0}function _(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&w(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(S(t,e)&&S(e,t)&&function(t,e){let n=t,r=!1;const i=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&i<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==t);return r}(t,e)&&(b(t.prev,t,e.prev)||b(t,e.prev,e))||x(t,e)&&b(t.prev,t,t.next)>0&&b(e.prev,e,e.next)>0)}function b(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function x(t,e){return t.x===e.x&&t.y===e.y}function w(t,e,n,r){const i=O(b(t,e,n)),o=O(b(t,e,r)),a=O(b(n,r,t)),s=O(b(n,r,e));return i!==o&&a!==s||(!(0!==i||!E(t,n,e))||(!(0!==o||!E(t,r,e))||(!(0!==a||!E(n,t,r))||!(0!==s||!E(n,e,r)))))}function E(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function O(t){return t>0?1:t<0?-1:0}function S(t,e){return b(t.prev,t,t.next)<0?b(t,e,t.next)>=0&&b(t,t.prev,e)>=0:b(t,e,t.prev)<0||b(t,t.next,e)<0}function T(t,e){const n=new M(t.i,t.x,t.y),r=new M(e.i,e.x,e.y),i=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=i,i.prev=n,r.next=n,n.prev=r,o.next=r,r.prev=o,r}function C(t,e,n,r){const i=new M(t,e,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function P(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function M(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function I(t,e){const n=e.length,r=t.length;if(r>0){let i=!0;for(let o=0;oe[2]&&(n|=2),t[1]e[3]&&(n|=8),n}function D(t,e){const{size:n=2,broken:r=!1,gridResolution:i=10,gridOffset:o=[0,0],startIndex:a=0,endIndex:s=t.length}=e||{},u=(s-a)/n;let c=[];const l=[c],h=R(t,0,n,a);let f,p;const d=U(h,i,o,[]),A=[];I(c,h);for(let e=1;en&&(c=[],l.push(c),I(c,h)),p=L(f,d)}I(c,f),B(h,f)}return r?l:l[0]}function j(t,e){for(let n=0;n=0?(I(c,p)&&h.push(A),_+=d):h.length&&(h[h.length-1]=0),B(g,p),m=d,y=A;return[v?{pos:u,types:e&&l}:null,_?{pos:c,types:e&&h}:null]}function U(t,e,n,r){const i=Math.floor((t[0]-n[0])/e)*e+n[0],o=Math.floor((t[1]-n[1])/e)*e+n[1];return r[0]=i,r[1]=o,r[2]=i+e,r[3]=o+e,r}function N(t,e,n){8&n?(t[1]+=e,t[3]+=e):4&n?(t[1]-=e,t[3]-=e):2&n?(t[0]+=e,t[2]+=e):1&n&&(t[0]-=e,t[2]-=e)}function G(t,e,n,r){let i=1/0,o=-1/0,a=1/0,s=-1/0;for(let r=0;ro?e:o,a=ns?n:s}return r[0][0]=i,r[0][1]=a,r[1][0]=o,r[1][1]=s,r}function V(t,e){const{size:n=2,startIndex:r=0,endIndex:i=t.length,normalize:o=!0}=e||{},a=t.slice(r,i);X(a,n,0,i-r);const s=D(a,{size:n,broken:!0,gridResolution:360,gridOffset:[-180,-180]});if(o)for(const t of s)J(t,n);return s}function H(t,e=null,n){const{size:r=2,normalize:i=!0,edgeTypes:o=!1}=n||{};e=e||[];const a=[],s=[];let u=0,c=0;for(let i=0;i<=e.length;i++){const o=e[i]||t.length,l=c,h=W(t,r,u,o);for(let e=h;ei&&(i=e,o=a-1)}return o}function q(t,e,n,r,i=85.051129){const o=t[n],a=t[r-e];if(Math.abs(o-a)>180){const r=R(t,0,e,n);r[0]+=360*Math.round((a-o)/360),I(t,r),r[1]=Math.sign(r[1])*i,I(t,r),r[0]=o,I(t,r)}}function X(t,e,n,r){let i,o=t[0];for(let a=n;a180||e<-180)&&(i-=360*Math.round(e/360)),t[a]=o=i}}function J(t,e){let n;const r=t.length/e;for(let i=0;i1&&void 0!==arguments[1]?arguments[1]:{};Object(r.b)(t);const{id:n,userData:i={}}=e;this.gl=t,this.gl2=t,this.id=n||Object(s.c)(this[Symbol.toStringTag]),this.userData=i,this._bound=!1,this._handle=e.handle,void 0===this._handle&&(this._handle=this._createHandle()),this.byteLength=0,this._initStats(),this._addStats()}toString(){return"".concat(this[Symbol.toStringTag]||this.constructor.name,"(").concat(this.id,")")}get handle(){return this._handle}delete(){let{deleteChildren:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=this._handle&&this._deleteHandle(this._handle);return this._handle&&this._removeStats(),this._handle=null,e&&t&&e.filter(Boolean).forEach(t=>t.delete()),this}bind(){let t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.handle;return"function"!=typeof e?(this._bindHandle(e),this):(this._bound?t=e():(this._bindHandle(this.handle),this._bound=!0,t=e(),this._bound=!1,this._bindHandle(null)),t)}unbind(){this.bind(null)}getParameter(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t=Object(o.b)(this.gl,t),Object(a.a)(t);const n=(this.constructor.PARAMETERS||{})[t];if(n){const t=Object(r.j)(this.gl);if(!((!("webgl2"in n)||t)&&(!("extension"in n)||this.gl.getExtension(n.extension)))){const e=n.webgl1,r="webgl2"in n?n.webgl2:n.webgl1;return t?r:e}}return this._getParameter(t,e)}getParameters(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{parameters:e,keys:n}=t,i=this.constructor.PARAMETERS||{},a=Object(r.j)(this.gl),s={},u=e||Object.keys(i);for(const e of u){const r=i[e];if(r&&(!("webgl2"in r)||a)&&(!("extension"in r)||this.gl.getExtension(r.extension))){const i=n?Object(o.a)(this.gl,e):e;s[i]=this.getParameter(e,t),n&&"GLenum"===r.type&&(s[i]=Object(o.a)(this.gl,s[i]))}}return s}setParameter(t,e){t=Object(o.b)(this.gl,t),Object(a.a)(t);const n=(this.constructor.PARAMETERS||{})[t];if(n){const t=Object(r.j)(this.gl);if(!((!("webgl2"in n)||t)&&(!("extension"in n)||this.gl.getExtension(n.extension))))throw new Error("Parameter not available on this platform");"GLenum"===n.type&&(e=Object(o.b)(e))}return this._setParameter(t,e),this}setParameters(t){for(const e in t)this.setParameter(e,t[e]);return this}stubRemovedMethods(t,e,n){return Object(u.a)(this,t,e,n)}initialize(t){}_createHandle(){throw new Error(c)}_deleteHandle(){throw new Error(c)}_bindHandle(t){throw new Error(c)}_getOptsFromHandle(){throw new Error(c)}_getParameter(t,e){throw new Error(c)}_setParameter(t,e){throw new Error(c)}_context(){return this.gl.luma=this.gl.luma||{},this.gl.luma}_initStats(){this.gl.stats=this.gl.stats||new i.a}_addStats(){const t=this[Symbol.toStringTag],e=i.b.get("Resource Counts");e.get("Resources Created").incrementCount(),e.get("".concat(t,"s Created")).incrementCount(),e.get("".concat(t,"s Active")).incrementCount()}_removeStats(){const t=this[Symbol.toStringTag];i.b.get("Resource Counts").get("".concat(t,"s Active")).decrementCount()}_trackAllocatedMemory(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this[Symbol.toStringTag];this._doTrackAllocatedMemory(t,e),this._doTrackAllocatedMemory(t,e,this.gl.stats.get("Memory Usage"))}_doTrackAllocatedMemory(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this[Symbol.toStringTag],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.b.get("Memory Usage");n.get("GPU Memory").addCount(t),n.get("".concat(e," Memory")).addCount(t),this.byteLength=t}_trackDeallocatedMemory(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this[Symbol.toStringTag];this._doTrackDeallocatedMemory(t),this._doTrackDeallocatedMemory(t,this.gl.stats.get("Memory Usage"))}_doTrackDeallocatedMemory(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this[Symbol.toStringTag],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.b.get("Memory Usage");e.get("GPU Memory").subtractCount(this.byteLength),e.get("".concat(t," Memory")).subtractCount(this.byteLength),this.byteLength=0}}},function(t,e,n){t.exports=n(256)},function(t,e,n){var r=n(247);Object.assign(r,n(64),n(267),n(266),n(144),n(269),n(187)),t.exports=r},function(t,e,n){"use strict";n.d(e,"a",(function(){return w}));var r=n(9),i=n.n(r),o=n(3),a=n.n(o),s=n(4),u=n.n(s),c=n(0),l=n.n(c),h=n(20),f=n(34),p=n(75),d=n(13),A=n(81),g=n(68),m=n(18),y=n(12),v=Math.PI/180,_=Object(f.a)(),b=[0,0,0],x={unitsPerMeter:[1,1,1],metersPerUnit:[1,1,1]};var w=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a()(this,t),l()(this,"_frustumPlanes",{}),this.id=e.id||this.constructor.displayName||"viewport",this.x=e.x||0,this.y=e.y||0,this.width=e.width||1,this.height=e.height||1,this.zoom=e.zoom||0,this.distanceScales=e.distanceScales||x,this.focalDistance=e.focalDistance||1,this.position=e.position||b,this.modelMatrix=e.modelMatrix||null;var n=e.longitude,r=e.latitude;this.isGeospatial=Number.isFinite(r)&&Number.isFinite(n),this._initProps(e),this._initMatrices(e),this.equals=this.equals.bind(this),this.project=this.project.bind(this),this.unproject=this.unproject.bind(this),this.projectPosition=this.projectPosition.bind(this),this.unprojectPosition=this.unprojectPosition.bind(this),this.projectFlat=this.projectFlat.bind(this),this.unprojectFlat=this.unprojectFlat.bind(this)}return u()(t,[{key:"metersPerPixel",get:function(){return this.distanceScales.metersPerUnit[2]/this.scale}},{key:"projectionMode",get:function(){return this.isGeospatial?this.zoom<12?y.d.WEB_MERCATOR:y.d.WEB_MERCATOR_AUTO_OFFSET:y.d.IDENTITY}},{key:"equals",value:function(e){return e instanceof t&&(this===e||e.width===this.width&&e.height===this.height&&e.scale===this.scale&&Object(d.d)(e.projectionMatrix,this.projectionMatrix)&&Object(d.d)(e.viewMatrix,this.viewMatrix))}},{key:"project",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.topLeft,r=void 0===n||n,o=this.projectPosition(t),a=Object(m.q)(o,this.pixelProjectionMatrix),s=i()(a,2),u=s[0],c=s[1],l=r?c:this.height-c;return 2===t.length?[u,l]:[u,l,a[2]]}},{key:"unproject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.topLeft,r=void 0===n||n,o=e.targetZ,a=i()(t,3),s=a[0],u=a[1],c=a[2],l=r?u:this.height-u,h=o&&o*this.distanceScales.unitsPerMeter[2],f=Object(m.n)([s,l,c],this.pixelUnprojectionMatrix,h),p=this.unprojectPosition(f),d=i()(p,3),A=d[0],g=d[1],y=d[2];return Number.isFinite(c)?[A,g,y]:Number.isFinite(o)?[A,g,o]:[A,g]}},{key:"projectPosition",value:function(t){var e=this.projectFlat(t),n=i()(e,2);return[n[0],n[1],(t[2]||0)*this.distanceScales.unitsPerMeter[2]]}},{key:"unprojectPosition",value:function(t){var e=this.unprojectFlat(t),n=i()(e,2);return[n[0],n[1],(t[2]||0)*this.distanceScales.metersPerUnit[2]]}},{key:"projectFlat",value:function(t){if(this.isGeospatial){var e=Object(m.l)(t);return e[1]=Object(d.a)(e[1],-318,830),e}return t}},{key:"unprojectFlat",value:function(t){return this.isGeospatial?Object(m.p)(t):t}},{key:"getBounds",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e={targetZ:t.z||0},n=this.unproject([0,0],e),r=this.unproject([this.width,0],e),i=this.unproject([0,this.height],e),o=this.unproject([this.width,this.height],e);return[Math.min(n[0],r[0],i[0],o[0]),Math.min(n[1],r[1],i[1],o[1]),Math.max(n[0],r[0],i[0],o[0]),Math.max(n[1],r[1],i[1],o[1])]}},{key:"getDistanceScales",value:function(t){return t?Object(m.g)({longitude:t[0],latitude:t[1],highPrecision:!0}):this.distanceScales}},{key:"containsPixel",value:function(t){var e=t.x,n=t.y,r=t.width,i=void 0===r?1:r,o=t.height,a=void 0===o?1:o;return ec)n.set(e.subarray(0,c),i);else if(n.set(e,i),a)for(var l=u;l=A)){var m=g?r.value:r.getBuffer().getData({srcByteOffset:h});if(r.settings.normalized&&!g){var y=u;u=function(t,e){return r.normalizeConstant(y(t,e))}}var v=g?function(t,e){return u(m,e)}:function(t,e){return u(m.subarray(t,t+l),e)},_=e.getData({length:i}),b=new Float32Array(A);!function(t){var e=t.source,n=t.target,r=t.size,i=t.getData,a=t.sourceStartIndices,s=t.targetStartIndices;if(!Array.isArray(s))return o({source:e,target:n,size:r,getData:i}),n;for(var u=0,c=0,l=i&&function(t,e){return i(t+c,e)},h=Math.min(a.length,s.length),f=1;fr&&(n=Math.min(n,r/t.width));const o=t.width*n,a=t.height*n,s=["font-size:1px;","padding:".concat(Math.floor(a/2),"px ").concat(Math.floor(o/2),"px;"),"line-height:".concat(a,"px;"),"background:url(".concat(i,");"),"background-size:".concat(o,"px ").concat(a,"px;"),"color:transparent;"].join("");return["".concat(e," %c+"),s]}const l={BLACK:30,RED:31,GREEN:32,YELLOW:33,BLUE:34,MAGENTA:35,CYAN:36,WHITE:37,BRIGHT_BLACK:90,BRIGHT_RED:91,BRIGHT_GREEN:92,BRIGHT_YELLOW:93,BRIGHT_BLUE:94,BRIGHT_MAGENTA:95,BRIGHT_CYAN:96,BRIGHT_WHITE:97};function h(t){return"string"==typeof t?l[t.toUpperCase()]||l.WHITE:t}function f(t,e){if(!t)throw new Error(e||"Assertion failed")}var p=n(94);function d(){let t;if(s&&p.b.performance)t=p.b.performance.now();else if(p.a.hrtime){const e=p.a.hrtime();t=1e3*e[0]+e[1]/1e6}else t=Date.now();return t}const A={debug:s&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},g={enabled:!0,level:0};function m(){}const y={},v={once:!0};function _(t){for(const e in t)for(const n in t[e])return n||"untitled";return"empty"}class b{constructor({id:t}={id:""}){this.id=t,this.VERSION="8.9.0-alpha.5",this._startTs=d(),this._deltaTs=d(),this.LOG_THROTTLE_TIMEOUT=0,this._storage=new u("__probe-".concat(this.id,"__"),g),this.userData={},this.timeStamp("".concat(this.id," started")),function(t,e=["constructor"]){const n=Object.getPrototypeOf(t),r=Object.getOwnPropertyNames(n);for(const n of r)"function"==typeof t[n]&&(e.find(t=>n===t)||(t[n]=t[n].bind(t)))}(this),Object.seal(this)}set level(t){this.setLevel(t)}get level(){return this.getLevel()}isEnabled(){return this._storage.config.enabled}getLevel(){return this._storage.config.level}getTotal(){return Number((d()-this._startTs).toPrecision(10))}getDelta(){return Number((d()-this._deltaTs).toPrecision(10))}set priority(t){this.level=t}get priority(){return this.level}getPriority(){return this.level}enable(t=!0){return this._storage.updateConfiguration({enabled:t}),this}setLevel(t){return this._storage.updateConfiguration({level:t}),this}assert(t,e){f(t,e)}warn(t){return this._getLogFunction(0,t,A.warn,arguments,v)}error(t){return this._getLogFunction(0,t,A.error,arguments)}deprecated(t,e){return this.warn("`".concat(t,"` is deprecated and will be removed in a later version. Use `").concat(e,"` instead"))}removed(t,e){return this.error("`".concat(t,"` has been removed. Use `").concat(e,"` instead"))}probe(t,e){return this._getLogFunction(t,e,A.log,arguments,{time:!0,once:!0})}log(t,e){return this._getLogFunction(t,e,A.debug,arguments)}info(t,e){return this._getLogFunction(t,e,console.info,arguments)}once(t,e){return this._getLogFunction(t,e,A.debug||A.info,arguments,v)}table(t,e,n){return e?this._getLogFunction(t,e,console.table||m,n&&[n],{tag:_(e)}):m}image({logLevel:t,priority:e,image:r,message:i="",scale:o=1}){return this._shouldLog(t||e)?s?function({image:t,message:e="",scale:n=1}){if("string"==typeof t){const r=new Image;return r.onload=()=>{const t=c(r,e,n);console.log(...t)},r.src=t,m}const r=t.nodeName||"";if("img"===r.toLowerCase())return console.log(...c(t,e,n)),m;if("canvas"===r.toLowerCase()){const r=new Image;return r.onload=()=>console.log(...c(r,e,n)),r.src=t.toDataURL(),m}return m}({image:r,message:i,scale:o}):function({image:t,message:e="",scale:r=1}){let i=null;try{i=n(255)}catch(t){}if(i)return()=>i(t,{fit:"box",width:"".concat(Math.round(80*r),"%")}).then(t=>console.log(t));return m}({image:r,message:i,scale:o}):m}settings(){console.table?console.table(this._storage.config):console.log(this._storage.config)}get(t){return this._storage.config[t]}set(t,e){this._storage.updateConfiguration({[t]:e})}time(t,e){return this._getLogFunction(t,e,console.time?console.time:console.info)}timeEnd(t,e){return this._getLogFunction(t,e,console.timeEnd?console.timeEnd:console.info)}timeStamp(t,e){return this._getLogFunction(t,e,console.timeStamp||m)}group(t,e,n={collapsed:!1}){n=w({logLevel:t,message:e,opts:n});const{collapsed:r}=n;return n.method=(r?console.groupCollapsed:console.group)||console.info,this._getLogFunction(n)}groupCollapsed(t,e,n={}){return this.group(t,e,Object.assign({},n,{collapsed:!0}))}groupEnd(t){return this._getLogFunction(t,"",console.groupEnd||m)}withGroup(t,e,n){this.group(t,e)();try{n()}finally{this.groupEnd(t)()}}trace(){console.trace&&console.trace()}_shouldLog(t){return this.isEnabled()&&this.getLevel()>=x(t)}_getLogFunction(t,e,n,r=[],i){if(this._shouldLog(t)){i=w({logLevel:t,message:e,args:r,opts:i}),f(n=n||i.method),i.total=this.getTotal(),i.delta=this.getDelta(),this._deltaTs=d();const o=i.tag||i.message;if(i.once){if(y[o])return m;y[o]=d()}return e=function(t,e,n){if("string"==typeof e){const a=n.time?function(t,e=8){const n=Math.max(e-t.length,0);return"".concat(" ".repeat(n)).concat(t)}(function(t){let e;return e=t<10?"".concat(t.toFixed(2),"ms"):t<100?"".concat(t.toFixed(1),"ms"):t<1e3?"".concat(t.toFixed(0),"ms"):"".concat((t/1e3).toFixed(2),"s"),e}(n.total)):"";e=n.time?"".concat(t,": ").concat(a," ").concat(e):"".concat(t,": ").concat(e),r=e,i=n.color,o=n.background,s||"string"!=typeof r||(i&&(i=h(i),r="[".concat(i,"m").concat(r,"")),o&&(i=h(o),r="[".concat(o+10,"m").concat(r,""))),e=r}var r,i,o;return e}(this.id,i.message,i),n.bind(console,e,...i.args)}return m}}function x(t){if(!t)return 0;let e;switch(typeof t){case"number":e=t;break;case"object":e=t.logLevel||t.priority||0;break;default:return 0}return f(Number.isFinite(e)&&e>=0),e}function w(t){const{logLevel:e,message:n}=t;t.logLevel=x(e);const r=t.args?Array.from(t.args):[];for(;r.length&&r.shift()!==n;);switch(t.args=r,typeof e){case"string":case"function":void 0!==n&&r.unshift(n),t.message=e;break;case"object":Object.assign(t,e)}"function"==typeof t.message&&(t.message=t.message());const i=typeof t.message;return f("string"===i||"object"===i),Object.assign(t,t.opts)}b.VERSION="8.9.0-alpha.5";const E=new b({id:"loaders.gl"});class O{log(){return()=>{}}info(){return()=>{}}warn(){return()=>{}}error(){return()=>{}}}var S=n(69);const T={fetch:null,mimeType:void 0,nothrow:!1,log:new class{constructor(){Object(o.a)(this,"console",void 0),this.console=console}log(...t){return this.console.log.bind(this.console,...t)}info(...t){return this.console.info.bind(this.console,...t)}warn(...t){return this.console.warn.bind(this.console,...t)}error(...t){return this.console.error.bind(this.console,...t)}},CDN:"https://unpkg.com/@loaders.gl",worker:!0,maxConcurrency:3,maxMobileConcurrency:1,reuseWorkers:S.c,_nodeWorkers:!1,_workerType:"",limit:0,_limitMB:0,batchSize:"auto",batchDebounceMs:0,metadata:!1,transforms:[]},C={throws:"nothrow",dataType:"(no longer used)",uri:"baseUri",method:"fetch.method",headers:"fetch.headers",body:"fetch.body",mode:"fetch.mode",credentials:"fetch.credentials",cache:"fetch.cache",redirect:"fetch.redirect",referrer:"fetch.referrer",referrerPolicy:"fetch.referrerPolicy",integrity:"fetch.integrity",keepalive:"fetch.keepalive",signal:"fetch.signal"};function P(){globalThis.loaders=globalThis.loaders||{};const{loaders:t}=globalThis;return t._state=t._state||{},t._state}n.d(e,"c",(function(){return P})),n.d(e,"b",(function(){return M})),n.d(e,"e",(function(){return I})),n.d(e,"d",(function(){return B})),n.d(e,"a",(function(){return R}));const M=()=>{const t=P();return t.globalOptions=t.globalOptions||{...T},t.globalOptions};function I(t){const e=P(),n=M();e.globalOptions=D(n,t)}function B(t,e,n,r){return n=n||[],function(t,e){k(t,null,T,C,e);for(const n of e){const r=t&&t[n.id]||{},i=n.options&&n.options[n.id]||{},o=n.deprecatedOptions&&n.deprecatedOptions[n.id]||{};k(r,n.id,i,o,e)}}(t,n=Array.isArray(n)?n:[n]),D(e,t,r)}function R(t,e){const n=M(),o=t||n;return"function"==typeof o.fetch?o.fetch:Object(r.f)(o.fetch)?t=>Object(i.a)(t,o):null!=e&&e.fetch?null==e?void 0:e.fetch:i.a}function k(t,e,n,i,o){const a=e||"Top level",s=e?"".concat(e,"."):"";for(const u in t){const c=!e&&Object(r.f)(t[u]),l="baseUri"===u&&!e,h="workerUrl"===u&&e;if(!(u in n)&&!l&&!h)if(u in i)E.warn("".concat(a," loader option '").concat(s).concat(u,"' no longer supported, use '").concat(i[u],"'"))();else if(!c){const t=L(u,o);E.warn("".concat(a," loader option '").concat(s).concat(u,"' not recognized. ").concat(t))()}}}function L(t,e){const n=t.toLowerCase();let r="";for(const i of e)for(const e in i.options){if(t===e)return"Did you mean '".concat(i.id,".").concat(e,"'?");const o=e.toLowerCase();(n.startsWith(o)||o.startsWith(n))&&(r=r||"Did you mean '".concat(i.id,".").concat(e,"'?"))}return r}function D(t,e,n){const r={...t.options||{}};return function(t,e){e&&!("baseUri"in t)&&(t.baseUri=e)}(r,n),null===r.log&&(r.log=new O),j(r,M()),j(r,e),r}function j(t,e){for(const n in e)if(n in e){const i=e[n];Object(r.h)(i)&&Object(r.h)(t[n])?t[n]={...t[n],...e[n]}:t[n]=e[n]}}},function(t,e,n){"use strict";n.d(e,"c",(function(){return o})),n.d(e,"b",(function(){return a})),n.d(e,"a",(function(){return s}));var r=n(10);const i={};function o(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"id";i[t]=i[t]||1;const e=i[t]++;return"".concat(t,"-").concat(e)}function a(t){return Object(r.a)("number"==typeof t,"Input must be a number"),t&&0==(t&t-1)}function s(t){let e=!0;for(const n in t){e=!1;break}return e}},function(t,e,n){"use strict";n.d(e,"b",(function(){return i})),n.d(e,"a",(function(){return o}));var r=n(10);function i(t,e){if("string"!=typeof e)return e;const n=Number(e);if(!isNaN(n))return n;const i=t[e=e.replace(/^.*\./,"")];return Object(r.a)(void 0!==i,"Accessing undefined constant GL.".concat(e)),i}function o(t,e){e=Number(e);for(const n in t)if(t[n]===e)return"GL.".concat(n);return String(e)}},function(t,e,n){"use strict";(function(t,r){n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return a})),n.d(e,"d",(function(){return s})),n.d(e,"c",(function(){return u}));const i={self:"undefined"!=typeof self&&self,window:"undefined"!=typeof window&&window,global:void 0!==t&&t,document:"undefined"!=typeof document&&document},o=i.global||i.self||i.window||{},a="object"!=typeof r||"[object process]"!==String(r)||r.browser,s="function"==typeof importScripts,u="undefined"!=typeof window&&void 0!==window.orientation,c=void 0!==r&&r.version&&/v([0-9]*)/.exec(r.version);c&&parseFloat(c[1])}).call(this,n(82),n(63))},function(t,e,n){"use strict";n.d(e,"a",(function(){return S}));var r=n(0),i=n.n(r),o=n(3),a=n.n(o),s=n(4),u=n.n(s),c=n(7),l=n.n(c),h=n(5),f=n.n(h),p=n(6),d=n.n(p),A=n(2),g=n.n(A),m=n(109),y=n(13);function v(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function _(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function x(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{};a()(this,n);var i=Array.isArray(r)?r:r.transitionProps,o=Array.isArray(r)?{}:r;return o.transitionProps=Array.isArray(i)?{compare:i,required:i}:i||{compare:E,required:O},(t=e.call(this,o.transitionProps)).opts=o,t}return u()(n,[{key:"initializeProps",value:function(t,e){var r=l()(g()(n.prototype),"initializeProps",this).call(this,t,e),i=this.opts,o=i.makeViewport,a=i.around;if(o&&a){var s=o(t),u=o(e),c=s.unproject(a);r.start.around=a,Object.assign(r.end,{around:u.project(c),aroundPosition:c,width:e.width,height:e.height})}return r}},{key:"interpolateProps",value:function(t,e,n){var r,i={},o=b(this._propsToExtract);try{for(o.s();!(r=o.n()).done;){var a=r.value;i[a]=Object(y.g)(t[a]||0,e[a]||0,n)}}catch(t){o.e(t)}finally{o.f()}if(e.aroundPosition&&this.opts.makeViewport){var s=this.opts.makeViewport(_(_({},e),i));Object.assign(i,s.panByPosition(e.aroundPosition,Object(y.g)(t.around,e.around,n)))}return i}}]),n}(m.a)},function(t,e,n){"use strict";function r(t,e){if(!t)throw new Error(e||"loaders.gl assertion failed.")}n.d(e,"a",(function(){return r}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return o})),n.d(e,"c",(function(){return a})),n.d(e,"b",(function(){return s}));var r=[],i=[];function o(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1/0,o=r,a={index:-1,data:t,target:[]};return t?"function"==typeof t[Symbol.iterator]?o=t:t.length>0&&(i.length=t.length,o=i):o=r,(e>0||Number.isFinite(n))&&(o=(Array.isArray(o)?o:Array.from(o)).slice(e,n),a.index=e-1),{iterable:o,objectInfo:a}}function a(t){return t&&t[Symbol.asyncIterator]}function s(t,e){var n=e.size,r=e.stride,i=e.offset,o=e.startIndices,a=e.nested,s=t.BYTES_PER_ELEMENT,u=r?r/s:n,c=i?i/s:0,l=Math.floor((t.length-c)/u);return function(e,r){var i=r.index,s=r.target;if(!o){for(var h=i*u+c,f=0;f1&&void 0!==arguments[1]?arguments[1]:{};switch(t){case 5126:return Float32Array;case 5123:case 33635:case 32819:case 32820:return Uint16Array;case 5125:return Uint32Array;case 5121:return e?Uint8ClampedArray:Uint8Array;case 5120:return Int8Array;case 5122:return Int16Array;case 5124:return Int32Array;default:throw new Error("Failed to deduce typed array type from GL constant")}}function o(t){let{data:e,width:n,height:r,bytesPerPixel:i=4,temp:o}=t;const a=n*i;o=o||new Uint8Array(a);for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:{};const{format:n,linearFiltering:r}=e;let i=!0;return n&&(i=i&&Object(a.d)(t,n),i=i&&(!r||Object(a.e)(t,n))),i}constructor(t,e){const{id:n=Object(u.c)("texture"),handle:r,target:i}=e;super(t,{id:n,handle:r}),this.target=i,this.textureUnit=void 0,this.loaded=!1,this.width=void 0,this.height=void 0,this.depth=void 0,this.format=void 0,this.type=void 0,this.dataFormat=void 0,this.border=void 0,this.textureUnit=void 0,this.mipmaps=void 0}toString(){return"Texture(".concat(this.id,",").concat(this.width,"x").concat(this.height,")")}initialize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.data;if(e instanceof Promise)return e.then(e=>this.initialize(Object.assign({},t,{pixels:e,data:e}))),this;const n="undefined"!=typeof HTMLVideoElement&&e instanceof HTMLVideoElement;if(n&&e.readyStatethis.initialize(t)),this;const{pixels:i=null,format:o=6408,border:a=0,recreate:s=!1,parameters:u={},pixelStore:c={},textureUnit:l}=t;e||(e=i);let{width:h,height:f,dataFormat:p,type:d,compressed:A=!1,mipmaps:g=!0}=t;const{depth:m=0}=t;return({width:h,height:f,compressed:A,dataFormat:p,type:d}=this._deduceParameters({format:o,type:d,dataFormat:p,compressed:A,data:e,width:h,height:f})),this.width=h,this.height=f,this.depth=m,this.format=o,this.type=d,this.dataFormat=p,this.border=a,this.textureUnit=l,Number.isFinite(this.textureUnit)&&(this.gl.activeTexture(33984+this.textureUnit),this.gl.bindTexture(this.target,this.handle)),g&&this._isNPOT()&&(r.k.warn("texture: ".concat(this," is Non-Power-Of-Two, disabling mipmaping"))(),g=!1,this._updateForNPOT(u)),this.mipmaps=g,this.setImageData({data:e,width:h,height:f,depth:m,format:o,type:d,dataFormat:p,border:a,mipmaps:g,parameters:c,compressed:A}),g&&this.generateMipmap(),this.setParameters(u),s&&(this.data=e),n&&(this._video={video:e,parameters:u,lastTime:e.readyState>=HTMLVideoElement.HAVE_CURRENT_DATA?e.currentTime:-1}),this}update(){if(this._video){const{video:t,parameters:e,lastTime:n}=this._video;if(n===t.currentTime||t.readyState0&&void 0!==arguments[0]?arguments[0]:{};return this._isNPOT()?(r.k.warn("texture: ".concat(this," is Non-Power-Of-Two, disabling mipmaping"))(),this):(this.mipmaps=!0,this.gl.bindTexture(this.target,this.handle),Object(r.o)(this.gl,t,()=>{this.gl.generateMipmap(this.target)}),this.gl.bindTexture(this.target,null),this)}setImageData(t){this._trackDeallocatedMemory("Texture");const{target:e=this.target,pixels:n=null,level:i=0,format:o=this.format,border:u=this.border,offset:c=0,parameters:l={}}=t;let{data:h=null,type:f=this.type,width:p=this.width,height:d=this.height,dataFormat:A=this.dataFormat,compressed:g=!1}=t;h||(h=n),({type:f,dataFormat:A,compressed:g,width:p,height:d}=this._deduceParameters({format:o,type:f,dataFormat:A,compressed:g,data:h,width:p,height:d}));const{gl:m}=this;m.bindTexture(this.target,this.handle);let y,v=null;({data:h,dataType:v}=this._getDataType({data:h,compressed:g}));let _=0;if(Object(r.o)(this.gl,l,()=>{switch(v){case"null":m.texImage2D(e,i,o,p,d,u,A,f,h);break;case"typed-array":m.texImage2D(e,i,o,p,d,u,A,f,h,c);break;case"buffer":y=Object(r.a)(m),y.bindBuffer(35052,h.handle||h),y.texImage2D(e,i,o,p,d,u,A,f,c),y.bindBuffer(35052,null);break;case"browser-object":Object(r.j)(m)?m.texImage2D(e,i,o,p,d,u,A,f,h):m.texImage2D(e,i,o,A,f,h);break;case"compressed":for(const[t,n]of h.entries())m.compressedTexImage2D(e,t,n.format,n.width,n.height,u,n.data),_+=n.levelSize;break;default:Object(s.a)(!1,"Unknown image data type")}}),"compressed"===v)this._trackAllocatedMemory(_,"Texture");else if(h&&h.byteLength)this._trackAllocatedMemory(h.byteLength,"Texture");else{const t=a.a[this.dataFormat]||4,e=a.c[this.type]||1;this._trackAllocatedMemory(this.width*this.height*t*e,"Texture")}return this.loaded=!0,this}setSubImageData(t){let{target:e=this.target,pixels:n=null,data:i=null,x:a=0,y:u=0,width:c=this.width,height:h=this.height,level:f=0,format:p=this.format,type:d=this.type,dataFormat:A=this.dataFormat,compressed:g=!1,offset:m=0,border:y=this.border,parameters:v={}}=t;if(({type:d,dataFormat:A,compressed:g,width:c,height:h}=this._deduceParameters({format:p,type:d,dataFormat:A,compressed:g,data:i,width:c,height:h})),Object(s.a)(0===this.depth,"texSubImage not supported for 3D textures"),i||(i=n),i&&i.data){const t=i;i=t.data,c=t.shape[0],h=t.shape[1]}i instanceof o.a&&(i=i.handle),this.gl.bindTexture(this.target,this.handle),Object(r.o)(this.gl,v,()=>{if(g)this.gl.compressedTexSubImage2D(e,f,a,u,c,h,p,i);else if(null===i)this.gl.texSubImage2D(e,f,a,u,c,h,A,d,null);else if(ArrayBuffer.isView(i))this.gl.texSubImage2D(e,f,a,u,c,h,A,d,i,m);else if(i instanceof l){const t=Object(r.a)(this.gl);t.bindBuffer(35052,i),t.texSubImage2D(e,f,a,u,c,h,A,d,m),t.bindBuffer(35052,null)}else if(Object(r.j)(this.gl)){Object(r.a)(this.gl).texSubImage2D(e,f,a,u,c,h,A,d,i)}else this.gl.texSubImage2D(e,f,a,u,A,d,i)}),this.gl.bindTexture(this.target,null)}copyFramebuffer(){return r.k.error("Texture.copyFramebuffer({...}) is no logner supported, use copyToTexture(source, target, opts})")(),null}getActiveUnit(){return this.gl.getParameter(34016)-33984}bind(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.textureUnit;const{gl:e}=this;return void 0!==t&&(this.textureUnit=t,e.activeTexture(33984+t)),e.bindTexture(this.target,this.handle),t}unbind(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.textureUnit;const{gl:e}=this;return void 0!==t&&(this.textureUnit=t,e.activeTexture(33984+t)),e.bindTexture(this.target,null),t}_getDataType(t){let{data:e,compressed:n=!1}=t;return n?{data:e,dataType:"compressed"}:null===e?{data:e,dataType:"null"}:ArrayBuffer.isView(e)?{data:e,dataType:"typed-array"}:e instanceof o.a?{data:e.handle,dataType:"buffer"}:e instanceof l?{data:e,dataType:"buffer"}:{data:e,dataType:"browser-object"}}_deduceParameters(t){const{format:e,data:n}=t;let{width:r,height:i,dataFormat:o,type:s,compressed:u}=t;const c=a.b[e];return o=o||c&&c.dataFormat,s=s||c&&c.types[0],u=u||c&&c.compressed,({width:r,height:i}=this._deduceImageSize(n,r,i)),{dataFormat:o,type:s,compressed:u,width:r,height:i,format:e,data:n}}_deduceImageSize(t,e,n){let r;return r="undefined"!=typeof ImageData&&t instanceof ImageData?{width:t.width,height:t.height}:"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement?{width:t.naturalWidth,height:t.naturalHeight}:"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?{width:t.width,height:t.height}:"undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement?{width:t.videoWidth,height:t.videoHeight}:t?{width:e,height:n}:{width:e>=0?e:1,height:n>=0?n:1},Object(s.a)(r,"Could not deduced texture size"),Object(s.a)(void 0===e||r.width===e,"Deduced texture width does not match supplied width"),Object(s.a)(void 0===n||r.height===n,"Deduced texture height does not match supplied height"),r}_createHandle(){return this.gl.createTexture()}_deleteHandle(){this.gl.deleteTexture(this.handle),this._trackDeallocatedMemory("Texture")}_getParameter(t){switch(t){case 4096:return this.width;case 4097:return this.height;default:this.gl.bindTexture(this.target,this.handle);const e=this.gl.getTexParameter(this.target,t);return this.gl.bindTexture(this.target,null),e}}_setParameter(t,e){switch(this.gl.bindTexture(this.target,this.handle),e=this._getNPOTParam(t,e),t){case 33082:case 33083:this.gl.texParameterf(this.handle,t,e);break;case 4096:case 4097:Object(s.a)(!1);break;default:this.gl.texParameteri(this.target,t,e)}return this.gl.bindTexture(this.target,null),this}_isNPOT(){return!Object(r.j)(this.gl)&&(!(!this.width||!this.height)&&(!Object(u.b)(this.width)||!Object(u.b)(this.height)))}_updateForNPOT(t){void 0===t[this.gl.TEXTURE_MIN_FILTER]&&(t[this.gl.TEXTURE_MIN_FILTER]=this.gl.LINEAR),void 0===t[this.gl.TEXTURE_WRAP_S]&&(t[this.gl.TEXTURE_WRAP_S]=this.gl.CLAMP_TO_EDGE),void 0===t[this.gl.TEXTURE_WRAP_T]&&(t[this.gl.TEXTURE_WRAP_T]=this.gl.CLAMP_TO_EDGE)}_getNPOTParam(t,e){if(this._isNPOT())switch(t){case 10241:-1===c.indexOf(e)&&(e=9729);break;case 10242:case 10243:33071!==e&&(e=33071)}return e}}},function(t,e,n){"use strict";function r(t,e,n){const r=e[0],i=e[1],o=n[3]*r+n[7]*i||1;return t[0]=(n[0]*r+n[4]*i)/o,t[1]=(n[1]*r+n[5]*i)/o,t}function i(t,e,n){const r=e[0],i=e[1],o=e[2],a=n[3]*r+n[7]*i+n[11]*o||1;return t[0]=(n[0]*r+n[4]*i+n[8]*o)/a,t[1]=(n[1]*r+n[5]*i+n[9]*o)/a,t[2]=(n[2]*r+n[6]*i+n[10]*o)/a,t}function o(t,e,n){const r=e[0],i=e[1];return t[0]=n[0]*r+n[2]*i,t[1]=n[1]*r+n[3]*i,t[2]=e[2],t}function a(t,e,n){const r=e[0],i=e[1];return t[0]=n[0]*r+n[2]*i,t[1]=n[1]*r+n[3]*i,t[2]=e[2],t[3]=e[3],t}function s(t,e,n){const r=e[0],i=e[1],o=e[2];return t[0]=n[0]*r+n[3]*i+n[6]*o,t[1]=n[1]*r+n[4]*i+n[7]*o,t[2]=n[2]*r+n[5]*i+n[8]*o,t[3]=e[3],t}n.d(e,"a",(function(){return r})),n.d(e,"c",(function(){return i})),n.d(e,"b",(function(){return o})),n.d(e,"d",(function(){return a})),n.d(e,"e",(function(){return s}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return i})),n.d(e,"i",(function(){return o})),n.d(e,"d",(function(){return a})),n.d(e,"b",(function(){return s})),n.d(e,"e",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return h})),n.d(e,"c",(function(){return f}));var r=n(11);function i(){var t=new r.a(9);return r.a!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}function o(t,e){if(t===e){var n=e[1],r=e[2],i=e[5];t[1]=e[3],t[2]=e[6],t[3]=n,t[5]=e[7],t[6]=r,t[7]=i}else t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8];return t}function a(t,e){var n=e[0],r=e[1],i=e[2],o=e[3],a=e[4],s=e[5],u=e[6],c=e[7],l=e[8],h=l*a-s*c,f=-l*o+s*u,p=c*o-a*u,d=n*h+r*f+i*p;return d?(d=1/d,t[0]=h*d,t[1]=(-l*r+i*c)*d,t[2]=(s*r-i*a)*d,t[3]=f*d,t[4]=(l*n-i*u)*d,t[5]=(-s*n+i*o)*d,t[6]=p*d,t[7]=(-c*n+r*u)*d,t[8]=(a*n-r*o)*d,t):null}function s(t){var e=t[0],n=t[1],r=t[2],i=t[3],o=t[4],a=t[5],s=t[6],u=t[7],c=t[8];return e*(c*o-a*u)+n*(-c*i+a*s)+r*(u*i-o*s)}function u(t,e,n){var r=e[0],i=e[1],o=e[2],a=e[3],s=e[4],u=e[5],c=e[6],l=e[7],h=e[8],f=n[0],p=n[1],d=n[2],A=n[3],g=n[4],m=n[5],y=n[6],v=n[7],_=n[8];return t[0]=f*r+p*a+d*c,t[1]=f*i+p*s+d*l,t[2]=f*o+p*u+d*h,t[3]=A*r+g*a+m*c,t[4]=A*i+g*s+m*l,t[5]=A*o+g*u+m*h,t[6]=y*r+v*a+_*c,t[7]=y*i+v*s+_*l,t[8]=y*o+v*u+_*h,t}function c(t,e,n){var r=e[0],i=e[1],o=e[2],a=e[3],s=e[4],u=e[5],c=e[6],l=e[7],h=e[8],f=n[0],p=n[1];return t[0]=r,t[1]=i,t[2]=o,t[3]=a,t[4]=s,t[5]=u,t[6]=f*r+p*a+c,t[7]=f*i+p*s+l,t[8]=f*o+p*u+h,t}function l(t,e,n){var r=e[0],i=e[1],o=e[2],a=e[3],s=e[4],u=e[5],c=e[6],l=e[7],h=e[8],f=Math.sin(n),p=Math.cos(n);return t[0]=p*r+f*a,t[1]=p*i+f*s,t[2]=p*o+f*u,t[3]=p*a-f*r,t[4]=p*s-f*i,t[5]=p*u-f*o,t[6]=c,t[7]=l,t[8]=h,t}function h(t,e,n){var r=n[0],i=n[1];return t[0]=r*e[0],t[1]=r*e[1],t[2]=r*e[2],t[3]=i*e[3],t[4]=i*e[4],t[5]=i*e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function f(t,e){var n=e[0],r=e[1],i=e[2],o=e[3],a=n+n,s=r+r,u=i+i,c=n*a,l=r*a,h=r*s,f=i*a,p=i*s,d=i*u,A=o*a,g=o*s,m=o*u;return t[0]=1-h-d,t[3]=l-m,t[6]=f+g,t[1]=l+m,t[4]=1-c-d,t[7]=p-A,t[2]=f-g,t[5]=p+A,t[8]=1-c-h,t}},function(t,e,n){"use strict";n.r(e);var r=n(98),i=n(19);async function o(t,e,n){if("number"==typeof t)return await i.a._readToArrayBuffer(t,e,n);t instanceof Blob||(t=new Blob([t]));const r=t.slice(e,e+n);return await async function(t){return await new Promise((e,n)=>{const r=new FileReader;r.onload=t=>{var n;return e(null==t||null===(n=t.target)||void 0===n?void 0:n.result)},r.onerror=t=>n(t),r.readAsArrayBuffer(t)})}(r)}var a=n(95),s=n(69),u=n(83),c=n(101);function l(t,e={}){if(t=Object(a.b)(t),!s.c){const n=i.a.readFileSync(t,e);return"string"!=typeof n?Object(u.d)(n):n}return e.nothrow||Object(c.a)(!1),null}var h=n(96);async function f(t,e,n){t=Object(a.b)(t),s.c||await i.a.writeFile(t,Object(h.c)(e),{flag:"w"}),Object(c.a)(!1)}function p(t,e,n){t=Object(a.b)(t),s.c||i.a.writeFileSync(t,Object(h.c)(e),{flag:"w"}),Object(c.a)(!1)}var d=n(44),A=n(107),g=n(76),m=n(100),y=n(43),v=n(119),_=n(87),b=n(60);function x(t,e,n,r){Object(c.a)(!r||"object"==typeof r),Array.isArray(e)||Object(y.a)(e)||(r=void 0,n=e,e=void 0),n=n||{};const i=e,o=Object(_.b)(i,r),a=Object(g.b)(t,o,n);if(!a)return null;n=Object(d.d)(n,a,o);const{url:s}=Object(b.b)(t);return function(t,e,n,r){if(e=Object(v.b)(e,t,n),t.parseTextSync&&"string"==typeof e)return t.parseTextSync(e,n);if(t.parseSync&&e instanceof ArrayBuffer)return t.parseSync(e,n,r);throw new Error("".concat(t.name," loader: 'parseSync' not supported by this loader, use 'parse' instead. ").concat(r.url||""))}(a,t,n,r=Object(_.a)({url:s,parseSync:x,parse:()=>{throw new Error("parseSync called parse")},loaders:e},n))}var w=n(149);async function E(t,e,n,r){Object(c.a)(!r||"object"==typeof r),Array.isArray(e)||Object(y.a)(e)||(r=void 0,n=e,e=void 0),t=await t,n=n||{};const{url:i}=Object(b.b)(t),o=await Object(g.a)(t,e,n);return o?(n=Object(d.d)(n,o,e,i),r=Object(_.a)({url:i,parseInBatches:E,parse:m.a,loaders:e},n,r),await async function(t,e,n,r){const i=await async function(t,e,n,r){const i=await Object(v.c)(e,n),o=await async function(t,e=[]){let n=t;for await(const t of e)n=t(n);return n}(i,(null==n?void 0:n.transforms)||[]);if(t.parseInBatches)return t.parseInBatches(o,n,r);return async function*(){const e=await Object(w.a)(o),i=await Object(m.a)(e,t,{...n,mimeType:t.mimeTypes[0]},r),a={mimeType:t.mimeTypes[0],shape:Array.isArray(i)?"row-table":"unknown",batchType:"data",data:i,length:Array.isArray(i)?i.length:1};yield a}()}(t,e,n,r);if(!n.metadata)return i;const o={batchType:"metadata",metadata:{_loader:t,_context:r},data:[],bytesUsed:0};return async function*(t){yield o,yield*t}(i)}(o,t,n,r)):null}var O=n(202);function S(t,e,n,r){Array.isArray(e)||Object(y.a)(e)||(void 0,n=e,e=null);const i=Object(d.a)(n||{});if(!Array.isArray(t))return T(t,e,n,i);return t.map(t=>T(t,e,n,i))}async function T(t,e,n,r){if("string"==typeof t){const i=t,o=await r(i);return await E(o,e,n)}return await E(t,e,n)}var C=n(207),P=n(127),M=n(182),I=n(171);async function B(t,e,n={},r={}){const i=Object(M.a)(t),o=P.a.getWorkerFarm(n),{source:a}=n,s={name:i,source:a};a||(s.url=Object(M.b)(t,n));const u=o.getWorkerPool(s),c=n.jobName||t.name,l=await u.startJob(c,R.bind(null,r)),h=Object(I.b)(n);l.postMessage("process",{input:e,options:h});return(await l.result).result}async function R(t,e,n,r){switch(n){case"done":e.done(r);break;case"error":e.error(new Error(r.error));break;case"process":const{id:i,input:o,options:a}=r;try{if(!t.process)return void e.postMessage("error",{id:i,error:"Worker not set up to process on main thread"});const n=await t.process(o,a);e.postMessage("done",{id:i,result:n})}catch(t){const n=t instanceof Error?t.message:"unknown error";e.postMessage("error",{id:i,error:n})}break;default:console.warn("process-on-worker: unknown message ".concat(n))}}async function k(t,e,n){if(n={...Object(d.b)(),...n},Object(C.a)(e,n))return await B(e,t,n);if(e.encode)return await e.encode(t,n);if(e.encodeSync)return e.encodeSync(t,n);if(e.encodeText)return(new TextEncoder).encode(await e.encodeText(t,n));if(e.encodeInBatches){const r=j(t,e,n),i=[];for await(const t of r)i.push(t);return Object(u.b)(...i)}if(!s.c&&e.encodeURLtoURL){const i=z("input");await f(i,t);const o=z("output"),a=await F(i,o,e,n);return(await Object(r.a)(a)).arrayBuffer()}throw new Error("Writer could not encode data")}function L(t,e,n){if(e.encodeSync)return e.encodeSync(t,n);throw new Error("Writer could not synchronously encode data")}async function D(t,e,n){if(e.text&&e.encodeText)return await e.encodeText(t,n);if(e.text&&(e.encode||e.encodeInBatches)){const r=await k(t,e,n);return(new TextDecoder).decode(r)}throw new Error("Writer could not encode data as text")}function j(t,e,n){if(e.encodeInBatches){const r=function(t){return[{table:t,start:0,end:t.length}]}(t);return e.encodeInBatches(r,n)}throw new Error("Writer could not encode data in batches")}async function F(t,e,n,r){if(t=Object(a.b)(t),e=Object(a.b)(e),s.c||!n.encodeURLtoURL)throw new Error;return await n.encodeURLtoURL(t,e,r)}function z(t){return"/tmp/".concat(t)}async function U(t,e,n,r){const i=await k(t,n,r);return await f(e,i)}function N(t,e,n,r){return p(e,L(t,n,r))}var G=n(208),V=n(120);function H(t,e){const n=t[Symbol.asyncIterator]?t[Symbol.asyncIterator]():t[Symbol.iterator]();return new ReadableStream({type:"bytes",async pull(t){try{const{done:e,value:r}=await n.next();e?t.close():t.enqueue(new Uint8Array(r))}catch(e){t.error(e)}},async cancel(){var t;await(null==n||null===(t=n.return)||void 0===t?void 0:t.call(n))}},{highWaterMark:2**24,...e})}const W={name:"Null loader",id:"null",module:"core",version:"3.2.10",worker:!0,mimeTypes:["application/x.empty"],extensions:["null"],tests:[()=>!1],options:{null:{}}};function q(t,e,n){return e.null.echoParameters?{arrayBuffer:t,options:e,context:n=n&&JSON.parse(JSON.stringify(n))}:null}const X={name:"Null loader",id:"null",module:"core",version:"3.2.10",mimeTypes:["application/x.empty"],extensions:["null"],parse:async(t,e,n)=>q(t,e,n),parseSync:q,parseInBatches:async function*(t,e,n){for await(const r of t)yield q(r,e,n)},tests:[()=>!1],options:{null:{echoParameters:!1}}};var J=n(209);async function Z(t,e,n=(()=>{}),r=(()=>{})){if(!(t=await t).ok)return t;const i=t.body;if(!i)return t;const o=t.headers.get("content-length")||0,a=o&&parseInt(o);if(!(o>0))return t;if("undefined"==typeof ReadableStream||!i.getReader)return t;const s=new ReadableStream({async start(t){const o=i.getReader();await async function t(e,n,r,i,o,a,s){try{const{done:u,value:c}=await n.read();if(u)return a(),void e.close();r+=c.byteLength;const l=Math.round(r/i*100);o(l,{loadedBytes:r,totalBytes:i}),e.enqueue(c),await t(e,n,r,i,o,a,s)}catch(t){e.error(t),s(t)}}(t,o,0,a,e,n,r)}});return new Response(s)}var Q=n(1);class K{constructor(t,e){Object(Q.a)(this,"_fetch",void 0),Object(Q.a)(this,"files",{}),Object(Q.a)(this,"lowerCaseFiles",{}),Object(Q.a)(this,"usedFiles",{}),this._fetch=(null==e?void 0:e.fetch)||fetch;for(let e=0;e=0&&t[0]<=r&&t[1]>=0&&t[1]<=i;return o&&e&&e.stopPropagation(),o}},{key:"isFunctionKeyPressed",value:function(t){var e=t.srcEvent;return Boolean(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}},{key:"isDragging",value:function(){return this._interactionState.isDragging||!1}},{key:"blockEvents",value:function(t){var e=this,n=setTimeout((function(){e._eventStartBlocked===n&&(e._eventStartBlocked=null)}),t);this._eventStartBlocked=n}},{key:"setProps",value:function(t){t.dragMode&&(this.dragMode=t.dragMode),this.props=t,"transitionInterpolator"in t||(t.transitionInterpolator=this._getTransitionProps().transitionInterpolator),this.transitionManager.processViewStateChange(t);var e=t.inertia;this.inertia=Number.isFinite(e)?e:!0===e?300:0;var n=t.scrollZoom,r=void 0===n||n,i=t.dragPan,o=void 0===i||i,a=t.dragRotate,s=void 0===a||a,u=t.doubleClickZoom,c=void 0===u||u,l=t.touchZoom,h=void 0===l||l,f=t.touchRotate,p=void 0!==f&&f,d=t.keyboard,b=void 0===d||d,x=Boolean(this.onViewStateChange);this.toggleEvents(A,x&&r),this.toggleEvents(g,x&&(o||s)),this.toggleEvents(m,x&&(h||p)),this.toggleEvents(y,x&&p),this.toggleEvents(v,x&&c),this.toggleEvents(_,x&&b),this.scrollZoom=r,this.dragPan=o,this.dragRotate=s,this.doubleClickZoom=c,this.touchZoom=h,this.touchRotate=p,this.keyboard=b}},{key:"updateTransition",value:function(){this.transitionManager.updateTransition()}},{key:"toggleEvents",value:function(t,e){var n=this;this.eventManager&&t.forEach((function(t){n._events[t]!==e&&(n._events[t]=e,e?n.eventManager.on(t,n.handleEvent):n.eventManager.off(t,n.handleEvent))}))}},{key:"updateViewport",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=f(f({},t.getViewportProps()),e),i=this.controllerState!==t;if(this.state=t.getState(),this._setInteractionState(n),i){var o=this.controllerState&&this.controllerState.getViewportProps();this.onViewStateChange&&this.onViewStateChange({viewState:r,interactionState:this._interactionState,oldViewState:o})}}},{key:"_onTransition",value:function(t){this.onViewStateChange(f(f({},t),{},{interactionState:this._interactionState}))}},{key:"_setInteractionState",value:function(t){Object.assign(this._interactionState,t),this.onStateChange(this._interactionState)}},{key:"_onPanStart",value:function(t){var e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;var n=this.isFunctionKeyPressed(t)||t.rightButton||!1;(this.invertPan||"pan"===this.dragMode)&&(n=!n);var r=this.controllerState[n?"panStart":"rotateStart"]({pos:e});return this._panMove=n,this.updateViewport(r,p,{isDragging:!0}),!0}},{key:"_onPan",value:function(t){return!!this.isDragging()&&(this._panMove?this._onPanMove(t):this._onPanRotate(t))}},{key:"_onPanEnd",value:function(t){return!!this.isDragging()&&(this._panMove?this._onPanMoveEnd(t):this._onPanRotateEnd(t))}},{key:"_onPanMove",value:function(t){if(!this.dragPan)return!1;var e=this.getCenter(t),n=this.controllerState.pan({pos:e});return this.updateViewport(n,p,{isDragging:!0,isPanning:!0}),!0}},{key:"_onPanMoveEnd",value:function(t){var e=this.inertia;if(this.dragPan&&e&&t.velocity){var n=this.getCenter(t),r=[n[0]+t.velocityX*e/2,n[1]+t.velocityY*e/2],i=this.controllerState.pan({pos:r}).panEnd();this.updateViewport(i,f(f({},this._getTransitionProps()),{},{transitionDuration:e,transitionEasing:d}),{isDragging:!1,isPanning:!0})}else{var o=this.controllerState.panEnd();this.updateViewport(o,null,{isDragging:!1,isPanning:!1})}return!0}},{key:"_onPanRotate",value:function(t){if(!this.dragRotate)return!1;var e=this.getCenter(t),n=this.controllerState.rotate({pos:e});return this.updateViewport(n,p,{isDragging:!0,isRotating:!0}),!0}},{key:"_onPanRotateEnd",value:function(t){var e=this.inertia;if(this.dragRotate&&e&&t.velocity){var n=this.getCenter(t),r=[n[0]+t.velocityX*e/2,n[1]+t.velocityY*e/2],i=this.controllerState.rotate({pos:r}).rotateEnd();this.updateViewport(i,f(f({},this._getTransitionProps()),{},{transitionDuration:e,transitionEasing:d}),{isDragging:!1,isRotating:!0})}else{var o=this.controllerState.rotateEnd();this.updateViewport(o,null,{isDragging:!1,isRotating:!1})}return!0}},{key:"_onWheel",value:function(t){if(!this.scrollZoom)return!1;t.srcEvent.preventDefault();var e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;var n=!0===this.scrollZoom?{}:this.scrollZoom,r=n.speed,i=void 0===r?.01:r,o=n.smooth,a=void 0!==o&&o,s=t.delta,u=2/(1+Math.exp(-Math.abs(s*i)));s<0&&0!==u&&(u=1/u);var c=this.controllerState.zoom({pos:e,scale:u});return this.updateViewport(c,f(f({},this._getTransitionProps({around:e})),{},{transitionDuration:a?250:1}),{isZooming:!0,isPanning:!0}),!0}},{key:"_onTriplePanStart",value:function(t){var e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;var n=this.controllerState.rotateStart({pos:e});return this.updateViewport(n,p,{isDragging:!0}),!0}},{key:"_onTriplePan",value:function(t){if(!this.touchRotate)return!1;if(!this.isDragging())return!1;var e=this.getCenter(t);e[0]-=t.deltaX;var n=this.controllerState.rotate({pos:e});return this.updateViewport(n,p,{isDragging:!0,isRotating:!0}),!0}},{key:"_onTriplePanEnd",value:function(t){if(!this.isDragging())return!1;var e=this.inertia;if(this.touchRotate&&e&&t.velocityY){var n=this.getCenter(t),r=[n[0],n[1]+=t.velocityY*e/2],i=this.controllerState.rotate({pos:r});this.updateViewport(i,f(f({},this._getTransitionProps()),{},{transitionDuration:e,transitionEasing:d}),{isDragging:!1,isRotating:!0}),this.blockEvents(e)}else{var o=this.controllerState.rotateEnd();this.updateViewport(o,null,{isDragging:!1,isRotating:!1})}return!0}},{key:"_onPinchStart",value:function(t){var e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;var n=this.controllerState.zoomStart({pos:e}).rotateStart({pos:e});return b._startPinchRotation=t.rotation,b._lastPinchEvent=t,this.updateViewport(n,p,{isDragging:!0}),!0}},{key:"_onPinch",value:function(t){if(!this.touchZoom&&!this.touchRotate)return!1;if(!this.isDragging())return!1;var e=this.controllerState;if(this.touchZoom){var n=t.scale,r=this.getCenter(t);e=e.zoom({pos:r,scale:n})}if(this.touchRotate){var i=t.rotation;e=e.rotate({deltaAngleX:b._startPinchRotation-i})}return this.updateViewport(e,p,{isDragging:!0,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:this.touchRotate}),b._lastPinchEvent=t,!0}},{key:"_onPinchEnd",value:function(t){if(!this.isDragging())return!1;var e=this.inertia,n=b._lastPinchEvent;if(this.touchZoom&&e&&n&&t.scale!==n.scale){var r=this.getCenter(t),i=this.controllerState.rotateEnd(),o=Math.log2(t.scale),a=(o-Math.log2(n.scale))/(t.deltaTime-n.deltaTime),s=Math.pow(2,o+a*e/2);i=i.zoom({pos:r,scale:s}).zoomEnd(),this.updateViewport(i,f(f({},this._getTransitionProps({around:r})),{},{transitionDuration:e,transitionEasing:d}),{isDragging:!1,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:!1}),this.blockEvents(e)}else{var u=this.controllerState.zoomEnd().rotateEnd();this.updateViewport(u,null,{isDragging:!1,isPanning:!1,isZooming:!1,isRotating:!1})}return b._startPinchRotation=null,b._lastPinchEvent=null,!0}},{key:"_onDoubleTap",value:function(t){if(!this.doubleClickZoom)return!1;var e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;var n=this.isFunctionKeyPressed(t),r=this.controllerState.zoom({pos:e,scale:n?.5:2});return this.updateViewport(r,this._getTransitionProps({around:e}),{isZooming:!0,isPanning:!0}),this.blockEvents(100),!0}},{key:"_onKeyDown",value:function(t){if(!this.keyboard)return!1;var e,n=this.isFunctionKeyPressed(t),r=!0===this.keyboard?{}:this.keyboard,i=r.zoomSpeed,o=r.moveSpeed,a=r.rotateSpeedX,s=r.rotateSpeedY,u=this.controllerState,c={};switch(t.srcEvent.code){case"Minus":e=n?u.zoomOut(i).zoomOut(i):u.zoomOut(i),c.isZooming=!0;break;case"Equal":e=n?u.zoomIn(i).zoomIn(i):u.zoomIn(i),c.isZooming=!0;break;case"ArrowLeft":n?(e=u.rotateLeft(a),c.isRotating=!0):(e=u.moveLeft(o),c.isPanning=!0);break;case"ArrowRight":n?(e=u.rotateRight(a),c.isRotating=!0):(e=u.moveRight(o),c.isPanning=!0);break;case"ArrowUp":n?(e=u.rotateUp(s),c.isRotating=!0):(e=u.moveUp(o),c.isPanning=!0);break;case"ArrowDown":n?(e=u.rotateDown(s),c.isRotating=!0):(e=u.moveDown(o),c.isPanning=!0);break;default:return!1}return this.updateViewport(e,this._getTransitionProps(),c),!0}},{key:"_getTransitionProps",value:function(t){var e=this.transition;return e&&e.transitionInterpolator?t?f(f({},e),{},{transitionInterpolator:new l.a(f(f(f({},t),e.transitionInterpolator.opts),{},{makeViewport:this.controllerState.makeViewport}))}):e:p}}]),t}()},function(t,e,n){"use strict";var r=n(27),i=n.n(r),o=n(0),a=n.n(o),s=n(3),u=n.n(s),c=n(4),l=n.n(c),h=n(41),f=/([0-9]+\.?[0-9]*)(%|px)/;function p(t){switch(i()(t)){case"number":return{position:t,relative:!1};case"string":var e=f.exec(t);if(e&&e.length>=3){var n="%"===e[2],r=parseFloat(e[1]);return{position:n?r/100:r,relative:n}}default:throw new Error("Could not parse position string ".concat(t))}}function d(t,e){return t.relative?Math.round(t.position*e):t.position}var A=n(59),g=n(28);function m(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function y(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};const{id:e=Object(r.c)("geometry"),drawMode:n=o.TRIANGLES,attributes:i={},indices:a=null,vertexCount:s=null}=t;this.id=e,this.drawMode=0|n,this.attributes={},this.userData={},this._setAttributes(i,a),this.vertexCount=s||this._calculateVertexCount(this.attributes,this.indices)}get mode(){return this.drawMode}getVertexCount(){return this.vertexCount}getAttributes(){return this.indices?{indices:this.indices,...this.attributes}:this.attributes}_print(t){return"Geometry ".concat(this.id," attribute ").concat(t)}_setAttributes(t,e){e&&(this.indices=ArrayBuffer.isView(e)?{value:e,size:1}:e);for(const e in t){let n=t[e];n=ArrayBuffer.isView(n)?{value:n}:n,Object(i.a)(ArrayBuffer.isView(n.value),"".concat(this._print(e),": must be typed array or object with value as typed array")),"POSITION"!==e&&"positions"!==e||n.size||(n.size=3),"indices"===e?(Object(i.a)(!this.indices),this.indices=n):this.attributes[e]=n}return this.indices&&void 0!==this.indices.isIndexed&&(this.indices=Object.assign({},this.indices),delete this.indices.isIndexed),this}_calculateVertexCount(t,e){if(e)return e.value.length;let n=1/0;for(const e in t){const r=t[e],{value:i,size:o,constant:a}=r;!a&&i&&o>=1&&(n=Math.min(n,i.length/o))}return Object(i.a)(Number.isFinite(n)),n}}},function(t,e,n){"use strict";function r(t,e){if(t===e)return!0;if(!t||!e)return!1;for(var n in t){var i=t[n],o=e[n];if(!(i===o||Array.isArray(i)&&Array.isArray(o)&&r(i,o)))return!1}return!0}n.d(e,"a",(function(){return r}))},function(t,e,n){"use strict";var r=n(21);const i=/^data:([-\w.]+\/[-\w.+]+)(;|,)/,o=/^([-\w.]+\/[-\w.+]+)/;function a(t){const e=o.exec(t);return e?e[1]:t}function s(t){const e=i.exec(t);return e?e[1]:""}n.d(e,"b",(function(){return c})),n.d(e,"a",(function(){return l}));const u=/\?.*/;function c(t){if(Object(r.j)(t)){const e=h(t.url||"");return{url:e,type:a(t.headers.get("content-type")||"")||s(e)}}return Object(r.b)(t)?{url:h(t.name||""),type:t.type||""}:"string"==typeof t?{url:h(t),type:s(t)}:{url:"",type:""}}function l(t){return Object(r.j)(t)?t.headers["content-length"]||-1:Object(r.b)(t)?t.size:"string"==typeof t?t.length:t instanceof ArrayBuffer||ArrayBuffer.isView(t)?t.byteLength:-1}function h(t){return t.replace(u,"")}},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(51),i=n(10),o=n(135);const a={offset:0,stride:0,type:5126,size:1,divisor:0,normalized:!1,integer:!1},s={deprecatedProps:{instanced:"divisor",isInstanced:"divisor"}};class u{static getBytesPerElement(t){return Object(r.c)(t.type||5126).BYTES_PER_ELEMENT}static getBytesPerVertex(t){Object(i.a)(t.size);return Object(r.c)(t.type||5126).BYTES_PER_ELEMENT*t.size}static resolve(){for(var t=arguments.length,e=new Array(t),n=0;nthis._assign(t)),Object.freeze(this)}toString(){return JSON.stringify(this)}get BYTES_PER_ELEMENT(){return u.getBytesPerElement(this)}get BYTES_PER_VERTEX(){return u.getBytesPerVertex(this)}_assign(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t=Object(o.a)("Accessor",t,s),void 0!==t.type&&(this.type=t.type,5124!==t.type&&5125!==t.type||(this.integer=!0)),void 0!==t.size&&(this.size=t.size),void 0!==t.offset&&(this.offset=t.offset),void 0!==t.stride&&(this.stride=t.stride),void 0!==t.normalized&&(this.normalized=t.normalized),void 0!==t.integer&&(this.integer=t.integer),void 0!==t.divisor&&(this.divisor=t.divisor),void 0!==t.buffer&&(this.buffer=t.buffer),void 0!==t.index&&("boolean"==typeof t.index?this.index=t.index?1:0:this.index=t.index),void 0!==t.instanced&&(this.divisor=t.instanced?1:0),void 0!==t.isInstanced&&(this.divisor=t.isInstanced?1:0),this}}},function(t,e,n){"use strict";n.d(e,"b",(function(){return p})),n.d(e,"a",(function(){return d})),n.d(e,"d",(function(){return y})),n.d(e,"c",(function(){return b}));var r=n(9),i=n.n(r),o=n(231),a=n.n(o),s=n(36);function u(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return c(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n4&&void 0!==arguments[4]?arguments[4]:0,o=arguments.length>5?arguments[5]:void 0,a=arguments.length>6?arguments[6]:void 0,u=(o=o||n.length)-i;if(u<=0)return e;for(var c=e,l=0;l=1&&t[0].length>=2&&Number.isFinite(t[0][0])}(t)){var p,d=0,A=u(t.entries());try{for(A.s();!(p=A.n()).done;){var y=i()(p.value,2),v=y[0];d=g(n,d,y[1],e,0===v?l:h),r.push(d)}}catch(t){A.e(t)}finally{A.f()}return r.pop(),{positions:n,holeIndices:r}}return g(n,0,t,e,l),n}function v(t,e,n){for(var r=t.length/3,i=0,o=0;oA&&f>g||(A>g?(n||(o=o.slice()),_(o,0,2,1)):(n||(o=o.slice()),_(o,1,2,0)))}return a()(o,i,e)}},function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(t){r=a}}();var u,c=[],l=!1,h=-1;function f(){l&&u&&(l=!1,u.length?c=u.concat(c):h=-1,c.length&&p())}function p(){if(!l){var t=s(f);l=!0;for(var e=c.length;e;){for(u=c,c=[];++h1)for(var n=1;n0&&d>0&&(s[h++]=l-o,s[h++]=l-o-1,s[h++]=l-1,s[h++]=l-o,s[h++]=l-1,s[h++]=l),l++}return{vertexCount:a,positions:c,indices:s,texCoords:u}}function I(t,e,n){return Object(T.g)(Object(T.g)(t[0],t[1],n),Object(T.g)(t[3],t[2],n),e)}var B="\n#define SHADER_NAME bitmap-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D bitmapTexture;\n\nvarying vec2 vTexCoord;\nvarying vec2 vTexPos;\n\nuniform float desaturate;\nuniform vec4 transparentColor;\nuniform vec3 tintColor;\nuniform float opacity;\n\nuniform float coordinateConversion;\nuniform vec4 bounds;\n\n/* projection utils */\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / PI / 2.0;\n\n// from degrees to Web Mercator\nvec2 lnglat_to_mercator(vec2 lnglat) {\n float x = lnglat.x;\n float y = clamp(lnglat.y, -89.9, 89.9);\n return vec2(\n radians(x) + PI,\n PI + log(tan(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\n// from Web Mercator to degrees\nvec2 mercator_to_lnglat(vec2 xy) {\n xy /= WORLD_SCALE;\n return degrees(vec2(\n xy.x - PI,\n atan(exp(xy.y - PI)) * 2.0 - PI * 0.5\n ));\n}\n/* End projection utils */\n\n// apply desaturation\nvec3 color_desaturate(vec3 color) {\n float luminance = (color.r + color.g + color.b) * 0.333333333;\n return mix(color, vec3(luminance), desaturate);\n}\n\n// apply tint\nvec3 color_tint(vec3 color) {\n return color * tintColor;\n}\n\n// blend with background color\nvec4 apply_opacity(vec3 color, float alpha) {\n return mix(transparentColor, vec4(color, 1.0), alpha);\n}\n\nvec2 getUV(vec2 pos) {\n return vec2(\n (pos.x - bounds[0]) / (bounds[2] - bounds[0]),\n (pos.y - bounds[3]) / (bounds[1] - bounds[3])\n );\n}\n\n".concat("\nvec3 packUVsIntoRGB(vec2 uv) {\n // Extract the top 8 bits. We want values to be truncated down so we can add a fraction\n vec2 uv8bit = floor(uv * 256.);\n\n // Calculate the normalized remainders of u and v parts that do not fit into 8 bits\n // Scale and clamp to 0-1 range\n vec2 uvFraction = fract(uv * 256.);\n vec2 uvFraction4bit = floor(uvFraction * 16.);\n\n // Remainder can be encoded in blue channel, encode as 4 bits for pixel coordinates\n float fractions = uvFraction4bit.x + uvFraction4bit.y * 16.;\n\n return vec3(uv8bit, fractions) / 255.;\n}\n","\n\nvoid main(void) {\n vec2 uv = vTexCoord;\n if (coordinateConversion < -0.5) {\n vec2 lnglat = mercator_to_lnglat(vTexPos);\n uv = getUV(lnglat);\n } else if (coordinateConversion > 0.5) {\n vec2 commonPos = lnglat_to_mercator(vTexPos);\n uv = getUV(commonPos);\n }\n vec4 bitmapColor = texture2D(bitmapTexture, uv);\n\n gl_FragColor = apply_opacity(color_tint(color_desaturate(bitmapColor.rgb)), bitmapColor.a * opacity);\n\n geometry.uv = uv;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n\n if (picking_uActive) {\n // Since instance information is not used, we can use picking color for pixel index\n gl_FragColor.rgb = packUVsIntoRGB(uv);\n }\n}\n");function R(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function k(t){for(var e=1;e 0.5) {\n vTexPos = geometry.worldPosition.xy;\n }\n\n vec4 color = vec4(0.0);\n DECKGL_FILTER_COLOR(color, geometry);\n}\n",fs:B,modules:[b.a,x.a]})}},{key:"initializeState",value:function(){var t=this,e=this.getAttributeManager();e.remove(["instancePickingColors"]);e.add({indices:{size:1,isIndexed:!0,update:function(e){return e.value=t.state.mesh.indices},noAlloc:!0},positions:{size:3,type:5130,fp64:this.use64bitPositions(),update:function(e){return e.value=t.state.mesh.positions},noAlloc:!0},texCoords:{size:2,update:function(e){return e.value=t.state.mesh.texCoords},noAlloc:!0}})}},{key:"updateState",value:function(t){var e=t.props,n=t.oldProps,r=t.changeFlags,i=this.getAttributeManager();if(r.extensionsChanged){var o,a=this.context.gl;null===(o=this.state.model)||void 0===o||o.delete(),this.state.model=this._getModel(a),i.invalidateAll()}if(e.bounds!==n.bounds){var s=this.state.mesh,u=this._createMesh();for(var c in this.state.model.setVertexCount(u.vertexCount),u)s&&s[c]!==u[c]&&i.invalidate(c);this.setState(k({mesh:u},this._getCoordinateUniforms()))}else e._imageCoordinateSystem!==n._imageCoordinateSystem&&this.setState(this._getCoordinateUniforms())}},{key:"getPickingInfo",value:function(t){var e=this.props.image,n=t.info;if(!n.color||!e)return n.bitmap=null,n;var r=e,i=r.width,a=r.height;n.index=0;var s,u,c,l,h,f=(s=n.color,u=o()(s,3),c=u[0],l=u[1],h=u[2],[(c+(15&h)/16)/256,(l+(240&h)/256)/256]),p=[Math.floor(f[0]*i),Math.floor(f[1]*a)];return n.bitmap={size:{width:i,height:a},uv:f,pixel:p},n}},{key:"disablePickingIndex",value:function(){this.setState({disablePicking:!0})}},{key:"restorePickingColors",value:function(){this.setState({disablePicking:!1})}},{key:"_updateAutoHighlight",value:function(t){h()(m()(n.prototype),"_updateAutoHighlight",this).call(this,k(k({},t),{},{color:this.encodePickingColor(0)}))}},{key:"_createMesh",value:function(){var t=this.props.bounds,e=t;return F(t)&&(e=[[t[0],t[1]],[t[0],t[3]],[t[2],t[3]],[t[2],t[1]]]),M(e,this.context.viewport.resolution)}},{key:"_getModel",value:function(t){return t?new E.a(t,k(k({},this.getShaders()),{},{id:this.props.id,geometry:new O.a({drawMode:4,vertexCount:6}),isInstanced:!1})):null}},{key:"draw",value:function(t){var e=t.uniforms,n=t.moduleParameters,r=this.state,i=r.model,o=r.coordinateConversion,a=r.bounds,s=r.disablePicking,u=this.props,c=u.image,l=u.desaturate,h=u.transparentColor,f=u.tintColor;n.pickingActive&&s||c&&i&&i.setUniforms(e).setUniforms({bitmapTexture:c,desaturate:l,transparentColor:h.map((function(t){return t/255})),tintColor:f.slice(0,3).map((function(t){return t/255})),coordinateConversion:o,bounds:a}).draw()}},{key:"_getCoordinateUniforms",value:function(){var t=_.a.LNGLAT,e=_.a.CARTESIAN,n=_.a.DEFAULT,r=this.props._imageCoordinateSystem;if(r!==n){var i=this.props.bounds;if(!F(i))throw new Error("_imageCoordinateSystem only supports rectangular bounds");var o=this.context.viewport.resolution?t:e;if((r=r===t?t:e)===t&&o===e)return{coordinateConversion:-1,bounds:i};if(r===e&&o===t){var a=Object(S.l)([i[0],i[1]]),s=Object(S.l)([i[2],i[3]]);return{coordinateConversion:1,bounds:[a[0],a[1],s[0],s[1]]}}}return{coordinateConversion:0,bounds:[0,0,0,0]}}}]),n}(w.a);function F(t){return Number.isFinite(t[0])}v()(j,"layerName","BitmapLayer"),v()(j,"defaultProps",D);var z=n(113),U=n(217),N=n(218),G=n(161),V=n(160),H=n(210),W=n(112),q=n(211),X=n(215),J=n(159),Z=n(111),Q=n(164),K=n(162);n.d(e,"ArcLayer",(function(){return r.a})),n.d(e,"BitmapLayer",(function(){return j})),n.d(e,"IconLayer",(function(){return z.a})),n.d(e,"LineLayer",(function(){return U.a})),n.d(e,"PointCloudLayer",(function(){return N.a})),n.d(e,"ScatterplotLayer",(function(){return G.a})),n.d(e,"ColumnLayer",(function(){return V.a})),n.d(e,"GridCellLayer",(function(){return H.a})),n.d(e,"PathLayer",(function(){return W.a})),n.d(e,"PolygonLayer",(function(){return q.a})),n.d(e,"GeoJsonLayer",(function(){return X.a})),n.d(e,"TextLayer",(function(){return J.a})),n.d(e,"SolidPolygonLayer",(function(){return Z.a})),n.d(e,"_MultiIconLayer",(function(){return Q.a})),n.d(e,"_TextBackgroundLayer",(function(){return K.a}))},function(t,e,n){"use strict";function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0};return Array.isArray(t)?i(t,e,[]):e(t)?[t]:[]}function i(t,e,n){for(var r=-1;++r0&&void 0!==arguments[0]?arguments[0]:{};i()(this,t),u()(this,"_pool",[]),u()(this,"opts",{overAlloc:2,poolSize:100}),this.setOptions(e)}return a()(t,[{key:"setOptions",value:function(t){Object.assign(this.opts,t)}},{key:"allocate",value:function(t,e,n){var r=n.size,i=void 0===r?1:r,o=n.type,a=n.padding,s=void 0===a?0:a,u=n.copy,c=void 0!==u&&u,l=n.initialize,h=void 0!==l&&l,f=n.maxCount,p=o||t&&t.constructor||Float32Array,d=e*i+s;if(ArrayBuffer.isView(t)){if(d<=t.length)return t;if(d*t.BYTES_PER_ELEMENT<=t.buffer.byteLength)return new p(t.buffer,0,d)}var A=1/0;f&&(A=f*i+s);var g=this._allocate(p,d,h,A);return t&&c?g.set(t):h||g.fill(0,0,4),this._release(t),g}},{key:"release",value:function(t){this._release(t)}},{key:"_allocate",value:function(t,e,n,r){var i=Math.max(Math.ceil(e*this.opts.overAlloc),1);i>r&&(i=r);var o=this._pool,a=t.BYTES_PER_ELEMENT*i,s=o.findIndex((function(t){return t.byteLength>=a}));if(s>=0){var u=new t(o.splice(s,1)[0],0,i);return n&&u.fill(0),u}return new t(i)}},{key:"_release",value:function(t){if(ArrayBuffer.isView(t)){var e=this._pool,n=t.buffer,r=n.byteLength,i=e.findIndex((function(t){return t.byteLength>=r}));i<0?e.push(n):(i>0||e.lengththis.opts.poolSize&&e.shift()}}}]),t}();e.a=new c},function(t,e){function n(t,e,n,r,i,o,a){try{var s=t[o](a),u=s.value}catch(t){return void n(t)}s.done?e(u):Promise.resolve(u).then(r,i)}t.exports=function(t){return function(){var e=this,r=arguments;return new Promise((function(i,o){var a=t.apply(e,r);function s(t){n(a,i,o,s,u,"next",t)}function u(t){n(a,i,o,s,u,"throw",t)}s(void 0)}))}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return i})),n.d(e,"d",(function(){return o})),n.d(e,"c",(function(){return a}));n(15);function r(t,e){var n=e[0],r=e[1],i=e[2],o=e[3],a=e[4],s=e[5],u=e[6],c=e[7],l=e[8],h=e[9],f=e[10],p=e[11],d=e[12],A=e[13],g=e[14],m=e[15],y=n*s-r*a,v=n*u-i*a,_=n*c-o*a,b=r*u-i*s,x=r*c-o*s,w=i*c-o*u,E=l*A-h*d,O=l*g-f*d,S=l*m-p*d,T=h*g-f*A,C=h*m-p*A,P=f*m-p*g,M=y*P-v*C+_*T+b*S-x*O+w*E;return M?(M=1/M,t[0]=(s*P-u*C+c*T)*M,t[1]=(i*C-r*P-o*T)*M,t[2]=(A*w-g*x+m*b)*M,t[3]=(f*x-h*w-p*b)*M,t[4]=(u*S-a*P-c*O)*M,t[5]=(n*P-i*S+o*O)*M,t[6]=(g*_-d*w-m*v)*M,t[7]=(l*w-f*_+p*v)*M,t[8]=(a*C-s*S+c*E)*M,t[9]=(r*S-n*C-o*E)*M,t[10]=(d*x-A*_+m*y)*M,t[11]=(h*_-l*x-p*y)*M,t[12]=(s*O-a*T-u*E)*M,t[13]=(n*T-r*O+i*E)*M,t[14]=(A*v-d*b-g*y)*M,t[15]=(l*b-h*v+f*y)*M,t):null}function i(t,e,n){var r=e[0],i=e[1],o=e[2],a=e[3],s=e[4],u=e[5],c=e[6],l=e[7],h=e[8],f=e[9],p=e[10],d=e[11],A=e[12],g=e[13],m=e[14],y=e[15],v=n[0],_=n[1],b=n[2],x=n[3];return t[0]=v*r+_*s+b*h+x*A,t[1]=v*i+_*u+b*f+x*g,t[2]=v*o+_*c+b*p+x*m,t[3]=v*a+_*l+b*d+x*y,v=n[4],_=n[5],b=n[6],x=n[7],t[4]=v*r+_*s+b*h+x*A,t[5]=v*i+_*u+b*f+x*g,t[6]=v*o+_*c+b*p+x*m,t[7]=v*a+_*l+b*d+x*y,v=n[8],_=n[9],b=n[10],x=n[11],t[8]=v*r+_*s+b*h+x*A,t[9]=v*i+_*u+b*f+x*g,t[10]=v*o+_*c+b*p+x*m,t[11]=v*a+_*l+b*d+x*y,v=n[12],_=n[13],b=n[14],x=n[15],t[12]=v*r+_*s+b*h+x*A,t[13]=v*i+_*u+b*f+x*g,t[14]=v*o+_*c+b*p+x*m,t[15]=v*a+_*l+b*d+x*y,t}function o(t,e,n){var r,i,o,a,s,u,c,l,h,f,p,d,A=n[0],g=n[1],m=n[2];return e===t?(t[12]=e[0]*A+e[4]*g+e[8]*m+e[12],t[13]=e[1]*A+e[5]*g+e[9]*m+e[13],t[14]=e[2]*A+e[6]*g+e[10]*m+e[14],t[15]=e[3]*A+e[7]*g+e[11]*m+e[15]):(r=e[0],i=e[1],o=e[2],a=e[3],s=e[4],u=e[5],c=e[6],l=e[7],h=e[8],f=e[9],p=e[10],d=e[11],t[0]=r,t[1]=i,t[2]=o,t[3]=a,t[4]=s,t[5]=u,t[6]=c,t[7]=l,t[8]=h,t[9]=f,t[10]=p,t[11]=d,t[12]=r*A+s*g+h*m+e[12],t[13]=i*A+u*g+f*m+e[13],t[14]=o*A+c*g+p*m+e[14],t[15]=a*A+l*g+d*m+e[15]),t}function a(t,e,n){var r=n[0],i=n[1],o=n[2];return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*o,t[9]=e[9]*o,t[10]=e[10]*o,t[11]=e[11]*o,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},function(t,e,n){"use strict";(function(t,r){n.d(e,"e",(function(){return o})),n.d(e,"f",(function(){return a})),n.d(e,"b",(function(){return s})),n.d(e,"a",(function(){return u})),n.d(e,"c",(function(){return c})),n.d(e,"d",(function(){return l}));const i={self:"undefined"!=typeof self&&self,window:"undefined"!=typeof window&&window,global:void 0!==t&&t,document:"undefined"!=typeof document&&document},o=i.self||i.window||i.global||{},a=i.window||i.self||i.global||{},s=i.global||i.self||i.window||{},u=i.document||{},c=Boolean("object"!=typeof r||"[object process]"!==String(r)||r.browser),l="function"==typeof importScripts,h=void 0!==r&&r.version&&/v([0-9]*)/.exec(r.version);h&&parseFloat(h[1])}).call(this,n(82),n(63))},function(t,e,n){"use strict";n.d(e,"a",(function(){return w}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(26),u=n.n(s),c=n(5),l=n.n(c),h=n(6),f=n.n(h),p=n(2),d=n.n(p),A=n(0),g=n.n(A),m=n(170),y=n(8),v=n(180);function _(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return b(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return b(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function b(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r={},i=function i(o,a){var s,u=o.props._offset,c=o.id,l=o.parent&&o.parent.id;if(l&&!(l in n)&&i(o.parent,!1),l in r){var h=r[l]=r[l]||t(n[l],n);s=h(o,a),r[c]=h}else Number.isFinite(u)?(s=u+(n[l]||0),r[c]=null):s=e;return a&&s>=e&&(e=s+1),n[c]=s,s};return i}(this._lastRenderIndex+1),l={layer:n[0],viewport:t,isPicking:r.startsWith("picking"),renderPass:r,cullRect:o},h={},f=0;f1&&void 0!==arguments[1]?arguments[1]:{};const{colorBufferFloat:n,colorBufferHalfFloat:r}=e;let i=!0;return n&&(i=Boolean(t.getExtension("EXT_color_buffer_float")||t.getExtension("WEBGL_color_buffer_float")||t.getExtension("OES_texture_float"))),r&&(i=i&&Boolean(t.getExtension("EXT_color_buffer_float")||t.getExtension("EXT_color_buffer_half_float"))),i}static getDefaultFramebuffer(t){return t.luma=t.luma||{},t.luma.defaultFramebuffer=t.luma.defaultFramebuffer||new f(t,{id:"default-framebuffer",handle:null,attachments:{}}),t.luma.defaultFramebuffer}get MAX_COLOR_ATTACHMENTS(){const t=Object(r.a)(this.gl);return t.getParameter(t.MAX_COLOR_ATTACHMENTS)}get MAX_DRAW_BUFFERS(){const t=Object(r.a)(this.gl);return t.getParameter(t.MAX_DRAW_BUFFERS)}constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(t,e),this.width=null,this.height=null,this.attachments={},this.readBuffer=36064,this.drawBuffers=[36064],this.ownResources=[],this.initialize(e),Object.seal(this)}get color(){return this.attachments[36064]||null}get texture(){return this.attachments[36064]||null}get depth(){return this.attachments[36096]||this.attachments[33306]||null}get stencil(){return this.attachments[36128]||this.attachments[33306]||null}initialize(t){let{width:e=1,height:n=1,attachments:r=null,color:i=!0,depth:o=!0,stencil:a=!1,check:s=!0,readBuffer:u,drawBuffers:c}=t;if(Object(h.a)(e>=0&&n>=0,"Width and height need to be integers"),this.width=e,this.height=n,r)for(const t in r){const i=r[t];(Array.isArray(i)?i[0]:i).resize({width:e,height:n})}else r=this._createDefaultAttachments(i,o,a,e,n);this.update({clearAttachments:!0,attachments:r,readBuffer:u,drawBuffers:c}),r&&s&&this.checkStatus()}delete(){for(const t of this.ownResources)t.delete();return super.delete(),this}update(t){let{attachments:e={},readBuffer:n,drawBuffers:r,clearAttachments:i=!1,resizeAttachments:o=!0}=t;this.attach(e,{clearAttachments:i,resizeAttachments:o});const{gl:a}=this,s=a.bindFramebuffer(36160,this.handle);return n&&this._setReadBuffer(n),r&&this._setDrawBuffers(r),a.bindFramebuffer(36160,s||null),this}resize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{width:e,height:n}=t;if(null===this.handle)return Object(h.a)(void 0===e&&void 0===n),this.width=this.gl.drawingBufferWidth,this.height=this.gl.drawingBufferHeight,this;void 0===e&&(e=this.gl.drawingBufferWidth),void 0===n&&(n=this.gl.drawingBufferHeight),e!==this.width&&n!==this.height&&r.k.log(2,"Resizing framebuffer ".concat(this.id," to ").concat(e,"x").concat(n))();for(const t in this.attachments)this.attachments[t].resize({width:e,height:n});return this.width=e,this.height=n,this}attach(t){let{clearAttachments:e=!1,resizeAttachments:n=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r={};e&&Object.keys(this.attachments).forEach(t=>{r[t]=null}),Object.assign(r,t);const i=this.gl.bindFramebuffer(36160,this.handle);for(const t in r){Object(h.a)(void 0!==t,"Misspelled framebuffer binding point?");const e=Number(t),i=r[e];let o=i;if(o)if(o instanceof a.a)this._attachRenderbuffer({attachment:e,renderbuffer:o});else if(Array.isArray(i)){const[t,n=0,r=0]=i;o=t,this._attachTexture({attachment:e,texture:t,layer:n,level:r})}else this._attachTexture({attachment:e,texture:o,layer:0,level:0});else this._unattach(e);n&&o&&o.resize({width:this.width,height:this.height})}this.gl.bindFramebuffer(36160,i||null),Object.assign(this.attachments,t),Object.keys(this.attachments).filter(t=>!this.attachments[t]).forEach(t=>{delete this.attachments[t]})}checkStatus(){const{gl:t}=this,e=this.getStatus();if(36053!==e)throw new Error(function(t){return(f.STATUS||{})[t]||"Framebuffer error ".concat(t)}(e));return this}getStatus(){const{gl:t}=this,e=t.bindFramebuffer(36160,this.handle),n=t.checkFramebufferStatus(36160);return t.bindFramebuffer(36160,e||null),n}clear(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{color:e,depth:n,stencil:r,drawBuffers:i=[]}=t,o=this.gl.bindFramebuffer(36160,this.handle);return(e||n||r)&&Object(s.a)(this.gl,{color:e,depth:n,stencil:r}),i.forEach((t,e)=>{Object(s.b)(this.gl,{drawBuffer:e,value:t})}),this.gl.bindFramebuffer(36160,o||null),this}readPixels(){return r.k.error("Framebuffer.readPixels() is no logner supported, use readPixelsToArray(framebuffer)")(),null}readPixelsToBuffer(){return r.k.error("Framebuffer.readPixelsToBuffer()is no logner supported, use readPixelsToBuffer(framebuffer)")(),null}copyToDataUrl(){return r.k.error("Framebuffer.copyToDataUrl() is no logner supported, use copyToDataUrl(framebuffer)")(),null}copyToImage(){return r.k.error("Framebuffer.copyToImage() is no logner supported, use copyToImage(framebuffer)")(),null}copyToTexture(){return r.k.error("Framebuffer.copyToTexture({...}) is no logner supported, use copyToTexture(source, target, opts})")(),null}blit(){return r.k.error("Framebuffer.blit({...}) is no logner supported, use blit(source, target, opts)")(),null}invalidate(t){let{attachments:e=[],x:n=0,y:i=0,width:o,height:a}=t;const s=Object(r.a)(this.gl),u=s.bindFramebuffer(36008,this.handle);return 0===n&&0===i&&void 0===o&&void 0===a?s.invalidateFramebuffer(36008,e):s.invalidateFramebuffer(36008,e,n,i,o,a),s.bindFramebuffer(36008,u),this}getAttachmentParameter(t,e,n){let r=this._getAttachmentParameterFallback(e);return null===r&&(this.gl.bindFramebuffer(36160,this.handle),r=this.gl.getFramebufferAttachmentParameter(36160,t,e),this.gl.bindFramebuffer(36160,null)),n&&r>1e3&&(r=Object(l.a)(this.gl,r)),r}getAttachmentParameters(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:36064,e=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.constructor.ATTACHMENT_PARAMETERS||[];const r={};for(const i of n){r[e?Object(l.a)(this.gl,i):i]=this.getAttachmentParameter(t,i,e)}return r}getParameters(){let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];const e=Object.keys(this.attachments),n={};for(const r of e){const e=Number(r);n[t?Object(l.a)(this.gl,e):e]=this.getAttachmentParameters(e,t)}return n}show(){return"undefined"!=typeof window&&window.open(Object(u.a)(this),"luma-debug-texture"),this}log(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(t>r.k.level||"undefined"==typeof window)return this;e=e||"Framebuffer ".concat(this.id);const n=Object(u.a)(this,{targetMaxHeight:100});return r.k.image({logLevel:t,message:e,image:n},e)(),this}bind(){let{target:t=36160}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.gl.bindFramebuffer(t,this.handle),this}unbind(){let{target:t=36160}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.gl.bindFramebuffer(t,null),this}_createDefaultAttachments(t,e,n,r,i){let s=null;return t&&(s=s||{},s[36064]=new o.a(this.gl,{id:"".concat(this.id,"-color0"),pixels:null,format:6408,type:5121,width:r,height:i,mipmaps:!1,parameters:{10241:9729,10240:9729,10242:33071,10243:33071}}),this.ownResources.push(s[36064])),e&&n?(s=s||{},s[33306]=new a.a(this.gl,{id:"".concat(this.id,"-depth-stencil"),format:35056,width:r,height:111}),this.ownResources.push(s[33306])):e?(s=s||{},s[36096]=new a.a(this.gl,{id:"".concat(this.id,"-depth"),format:33189,width:r,height:i}),this.ownResources.push(s[36096])):n&&Object(h.a)(!1),s}_unattach(t){const e=this.attachments[t];e&&(e instanceof a.a?this.gl.framebufferRenderbuffer(36160,t,36161,null):this.gl.framebufferTexture2D(36160,t,3553,null,0),delete this.attachments[t])}_attachRenderbuffer(t){let{attachment:e=36064,renderbuffer:n}=t;const{gl:r}=this;r.framebufferRenderbuffer(36160,e,36161,n.handle),this.attachments[e]=n}_attachTexture(t){let{attachment:e=36064,texture:n,layer:i,level:o}=t;const{gl:a}=this;switch(a.bindTexture(n.target,n.handle),n.target){case 35866:case 32879:Object(r.a)(a).framebufferTextureLayer(36160,e,n.target,o,i);break;case 34067:const t=function(t){return t<34069?t+34069:t}(i);a.framebufferTexture2D(36160,e,t,n.handle,o);break;case 3553:a.framebufferTexture2D(36160,e,3553,n.handle,o);break;default:Object(h.a)(!1,"Illegal texture type")}a.bindTexture(n.target,null),this.attachments[e]=n}_setReadBuffer(t){const e=Object(r.g)(this.gl);e?e.readBuffer(t):Object(h.a)(36064===t||1029===t,"Multiple render targets not supported"),this.readBuffer=t}_setDrawBuffers(t){const{gl:e}=this,n=Object(r.a)(e);if(n)n.drawBuffers(t);else{const n=e.getExtension("WEBGL_draw_buffers");n?n.drawBuffersWEBGL(t):Object(h.a)(1===t.length&&(36064===t[0]||1029===t[0]),"Multiple render targets not supported")}this.drawBuffers=t}_getAttachmentParameterFallback(t){const e=Object(c.a)(this.gl);switch(t){case 36052:return e.WEBGL2?null:0;case 33298:case 33299:case 33300:case 33301:case 33302:case 33303:return e.WEBGL2?null:8;case 33297:return e.WEBGL2?null:5125;case 33296:return e.WEBGL2||e.EXT_sRGB?null:9729;default:return null}}_createHandle(){return this.gl.createFramebuffer()}_deleteHandle(){this.gl.deleteFramebuffer(this.handle)}_bindHandle(t){return this.gl.bindFramebuffer(36160,t)}}f.ATTACHMENT_PARAMETERS=[36049,36048,33296,33298,33299,33300,33301,33302,33303]},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=function(){function t(e){i()(this,t),this._inProgress=!1,this._handle=null,this._timeline=e,this.time=0,this.settings={duration:0}}return a()(t,[{key:"inProgress",get:function(){return this._inProgress}},{key:"start",value:function(t){var e,n;this.cancel(),this.settings=t,this._inProgress=!0,null===(e=(n=this.settings).onStart)||void 0===e||e.call(n,this)}},{key:"end",value:function(){var t,e;this._inProgress&&(this._timeline.removeChannel(this._handle),this._handle=null,this._inProgress=!1,null===(t=(e=this.settings).onEnd)||void 0===t||t.call(e,this))}},{key:"cancel",value:function(){var t,e;this._inProgress&&(null===(t=(e=this.settings).onInterrupt)||void 0===t||t.call(e,this),this._timeline.removeChannel(this._handle),this._handle=null,this._inProgress=!1)}},{key:"update",value:function(){var t,e;if(!this._inProgress)return!1;if(null===this._handle){var n=this._timeline,r=this.settings;this._handle=n.addChannel({delay:n.getTime(),duration:r.duration})}return this.time=this._timeline.getTime(this._handle),this._onUpdate(),null===(t=(e=this.settings).onUpdate)||void 0===t||t.call(e,this),this._timeline.isFinished(this._handle)&&this.end(),!0}},{key:"_onUpdate",value:function(){}}]),t}()},function(t,e,n){"use strict";var r=n(1),i=n(130);class o{constructor(t,e){Object(r.a)(this,"name",void 0),Object(r.a)(this,"type",void 0),Object(r.a)(this,"sampleSize",1),Object(r.a)(this,"time",void 0),Object(r.a)(this,"count",void 0),Object(r.a)(this,"samples",void 0),Object(r.a)(this,"lastTiming",void 0),Object(r.a)(this,"lastSampleTime",void 0),Object(r.a)(this,"lastSampleCount",void 0),Object(r.a)(this,"_count",0),Object(r.a)(this,"_time",0),Object(r.a)(this,"_samples",0),Object(r.a)(this,"_startTime",0),Object(r.a)(this,"_timerPending",!1),this.name=t,this.type=e,this.reset()}setSampleSize(t){return this.sampleSize=t,this}incrementCount(){return this.addCount(1),this}decrementCount(){return this.subtractCount(1),this}addCount(t){return this._count+=t,this._samples++,this._checkSampling(),this}subtractCount(t){return this._count-=t,this._samples++,this._checkSampling(),this}addTime(t){return this._time+=t,this.lastTiming=t,this._samples++,this._checkSampling(),this}timeStart(){return this._startTime=Object(i.a)(),this._timerPending=!0,this}timeEnd(){return this._timerPending?(this.addTime(Object(i.a)()-this._startTime),this._timerPending=!1,this._checkSampling(),this):this}getSampleAverageCount(){return this.sampleSize>0?this.lastSampleCount/this.sampleSize:0}getSampleAverageTime(){return this.sampleSize>0?this.lastSampleTime/this.sampleSize:0}getSampleHz(){return this.lastSampleTime>0?this.sampleSize/(this.lastSampleTime/1e3):0}getAverageCount(){return this.samples>0?this.count/this.samples:0}getAverageTime(){return this.samples>0?this.time/this.samples:0}getHz(){return this.time>0?this.samples/(this.time/1e3):0}reset(){return this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this}_checkSampling(){this._samples===this.sampleSize&&(this.lastSampleTime=this._time,this.lastSampleCount=this._count,this.count+=this._count,this.time+=this._time,this.samples+=this._samples,this._time=0,this._count=0,this._samples=0)}}class a{constructor(t){Object(r.a)(this,"id",void 0),Object(r.a)(this,"stats",{}),this.id=t.id,this.stats={},this._initializeStats(t.stats),Object.seal(this)}get(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"count";return this._getOrCreate({name:t,type:e})}get size(){return Object.keys(this.stats).length}reset(){for(const t in this.stats)this.stats[t].reset();return this}forEach(t){for(const e in this.stats)t(this.stats[e])}getTable(){const t={};return this.forEach(e=>{t[e.name]={time:e.time||0,count:e.count||0,average:e.getAverageTime()||0,hz:e.getHz()||0}}),t}_initializeStats(){(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach(t=>this._getOrCreate(t))}_getOrCreate(t){if(!t||!t.name)return null;const{name:e,type:n}=t;return this.stats[e]||(this.stats[e]=t instanceof o?t:new o(e,n)),this.stats[e]}}n.d(e,"a",(function(){return a}))},function(t,e,n){"use strict";n.d(e,"b",(function(){return r})),n.d(e,"a",(function(){return i}));const r="vs",i="fs"},function(t,e,n){"use strict";n.d(e,"a",(function(){return g}));var r,i=n(169),o=n(22),a=n(53),s=n(25),u=n(33),c=n(24),l=n(35);!function(t){t[t.COL0ROW0=0]="COL0ROW0",t[t.COL0ROW1=1]="COL0ROW1",t[t.COL0ROW2=2]="COL0ROW2",t[t.COL0ROW3=3]="COL0ROW3",t[t.COL1ROW0=4]="COL1ROW0",t[t.COL1ROW1=5]="COL1ROW1",t[t.COL1ROW2=6]="COL1ROW2",t[t.COL1ROW3=7]="COL1ROW3",t[t.COL2ROW0=8]="COL2ROW0",t[t.COL2ROW1=9]="COL2ROW1",t[t.COL2ROW2=10]="COL2ROW2",t[t.COL2ROW3=11]="COL2ROW3",t[t.COL3ROW0=12]="COL3ROW0",t[t.COL3ROW1=13]="COL3ROW1",t[t.COL3ROW2=14]="COL3ROW2",t[t.COL3ROW3=15]="COL3ROW3"}(r||(r={}));const h=45*Math.PI/180,f=1,p=.1,d=500,A=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);class g extends i.a{static get IDENTITY(){return function(){y||(y=new g,Object.freeze(y));return y}()}static get ZERO(){return function(){m||(m=new g([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(m));return m}()}get ELEMENTS(){return 16}get RANK(){return 4}get INDICES(){return r}constructor(t){super(-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0),1===arguments.length&&Array.isArray(t)?this.copy(t):this.identity()}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this[4]=t[4],this[5]=t[5],this[6]=t[6],this[7]=t[7],this[8]=t[8],this[9]=t[9],this[10]=t[10],this[11]=t[11],this[12]=t[12],this[13]=t[13],this[14]=t[14],this[15]=t[15],this.check()}set(t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,A){return this[0]=t,this[1]=e,this[2]=n,this[3]=r,this[4]=i,this[5]=o,this[6]=a,this[7]=s,this[8]=u,this[9]=c,this[10]=l,this[11]=h,this[12]=f,this[13]=p,this[14]=d,this[15]=A,this.check()}setRowMajor(t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,A){return this[0]=t,this[1]=i,this[2]=u,this[3]=f,this[4]=e,this[5]=o,this[6]=c,this[7]=p,this[8]=n,this[9]=a,this[10]=l,this[11]=d,this[12]=r,this[13]=s,this[14]=h,this[15]=A,this.check()}toRowMajor(t){return t[0]=this[0],t[1]=this[4],t[2]=this[8],t[3]=this[12],t[4]=this[1],t[5]=this[5],t[6]=this[9],t[7]=this[13],t[8]=this[2],t[9]=this[6],t[10]=this[10],t[11]=this[14],t[12]=this[3],t[13]=this[7],t[14]=this[11],t[15]=this[15],t}identity(){return this.copy(A)}fromObject(t){return this.check()}fromQuaternion(t){return s.c(this,t),this.check()}frustum(t){const{left:e,right:n,bottom:r,top:i,near:o=p,far:a=d}=t;return a===1/0?function(t,e,n,r,i,o){const a=2*o/(n-e),s=2*o/(i-r),u=(n+e)/(n-e),c=(i+r)/(i-r),l=-2*o;t[0]=a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s,t[6]=0,t[7]=0,t[8]=u,t[9]=c,t[10]=-1,t[11]=-1,t[12]=0,t[13]=0,t[14]=l,t[15]=0}(this,e,n,r,i,o):s.d(this,e,n,r,i,o,a),this.check()}lookAt(t){const{eye:e,center:n=[0,0,0],up:r=[0,1,0]}=t;return s.g(this,e,n,r),this.check()}ortho(t){const{left:e,right:n,bottom:r,top:i,near:o=p,far:a=d}=t;return s.i(this,e,n,r,i,o,a),this.check()}orthographic(t){const{fovy:e=h,aspect:n=f,focalDistance:r=1,near:i=p,far:o=d}=t;v(e);const a=e/2,s=r*Math.tan(a),u=s*n;return this.ortho({left:-u,right:u,bottom:-s,top:s,near:i,far:o})}perspective(t){const{fovy:e=45*Math.PI/180,aspect:n=1,near:r=.1,far:i=500}=t;return v(e),s.j(this,e,n,r,i),this.check()}determinant(){return s.a(this)}getScale(t=[-0,-0,-0]){return t[0]=Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2]),t[1]=Math.sqrt(this[4]*this[4]+this[5]*this[5]+this[6]*this[6]),t[2]=Math.sqrt(this[8]*this[8]+this[9]*this[9]+this[10]*this[10]),t}getTranslation(t=[-0,-0,-0]){return t[0]=this[12],t[1]=this[13],t[2]=this[14],t}getRotation(t,e){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0],e=e||[-0,-0,-0];const n=this.getScale(e),r=1/n[0],i=1/n[1],o=1/n[2];return t[0]=this[0]*r,t[1]=this[1]*i,t[2]=this[2]*o,t[3]=0,t[4]=this[4]*r,t[5]=this[5]*i,t[6]=this[6]*o,t[7]=0,t[8]=this[8]*r,t[9]=this[9]*i,t[10]=this[10]*o,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}getRotationMatrix3(t,e){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0],e=e||[-0,-0,-0];const n=this.getScale(e),r=1/n[0],i=1/n[1],o=1/n[2];return t[0]=this[0]*r,t[1]=this[1]*i,t[2]=this[2]*o,t[3]=this[4]*r,t[4]=this[5]*i,t[5]=this[6]*o,t[6]=this[8]*r,t[7]=this[9]*i,t[8]=this[10]*o,t}transpose(){return s.q(this,this),this.check()}invert(){return s.f(this,this),this.check()}multiplyLeft(t){return s.h(this,t,this),this.check()}multiplyRight(t){return s.h(this,this,t),this.check()}rotateX(t){return s.l(this,this,t),this.check()}rotateY(t){return s.m(this,this,t),this.check()}rotateZ(t){return s.n(this,this,t),this.check()}rotateXYZ(t){return this.rotateX(t[0]).rotateY(t[1]).rotateZ(t[2])}rotateAxis(t,e){return s.k(this,this,t,e),this.check()}scale(t){return s.o(this,this,Array.isArray(t)?t:[t,t,t]),this.check()}translate(t){return s.p(this,this,t),this.check()}transform(t,e){return 4===t.length?(e=l.n(e||[-0,-0,-0,-0],t,this),Object(o.b)(e,4),e):this.transformAsPoint(t,e)}transformAsPoint(t,e){const{length:n}=t;let r;switch(n){case 2:r=u.j(e||[-0,-0],t,this);break;case 3:r=c.p(e||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return Object(o.b)(r,t.length),r}transformAsVector(t,e){let n;switch(t.length){case 2:n=Object(a.a)(e||[-0,-0],t,this);break;case 3:n=Object(a.c)(e||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return Object(o.b)(n,t.length),n}transformPoint(t,e){return this.transformAsPoint(t,e)}transformVector(t,e){return this.transformAsPoint(t,e)}transformDirection(t,e){return this.transformAsVector(t,e)}makeRotationX(t){return this.identity().rotateX(t)}makeTranslation(t,e,n){return this.identity().translate([t,e,n])}}let m,y;function v(t){if(t>2*Math.PI)throw Error("expected radians")}},function(t,e,n){"use strict";var r=n(19),i=n(83),o=n(43);const a=new(n(273).a)({id:"loaders.gl"});var s=n(60),u=n(107),c=n(21);n.d(e,"a",(function(){return h})),n.d(e,"b",(function(){return f}));const l=/\.([^.]+)$/;async function h(t,e=[],n,r){if(!p(t))return null;let i=f(t,e,{...n,nothrow:!0},r);if(i)return i;if(Object(c.b)(t)&&(i=f(t=await t.slice(0,10).arrayBuffer(),e,n,r)),!(i||null!=n&&n.nothrow))throw new Error(d(t));return i}function f(t,e=[],n,r){if(!p(t))return null;if(e&&!Array.isArray(e))return Object(o.b)(e);let i=[];e&&(i=i.concat(e)),null!=n&&n.ignoreRegisteredLoaders||i.push(...Object(u.b)()),function(t){for(const e of t)Object(o.b)(e)}(i);const c=function(t,e,n,r){const{url:i,type:o}=Object(s.b)(t),u=i||(null==r?void 0:r.url);let c=null,h="";null!=n&&n.mimeType&&(c=A(e,null==n?void 0:n.mimeType),h="match forced by supplied MIME type ".concat(null==n?void 0:n.mimeType));var f;c=c||function(t,e){const n=e&&l.exec(e),r=n&&n[1];return r?function(t,e){e=e.toLowerCase();for(const n of t)for(const t of n.extensions)if(t.toLowerCase()===e)return n;return null}(t,r):null}(e,u),h=h||(c?"matched url ".concat(u):""),c=c||A(e,o),h=h||(c?"matched MIME type ".concat(o):""),c=c||function(t,e){if(!e)return null;for(const n of t)if("string"==typeof e){if(g(e,n))return n}else if(ArrayBuffer.isView(e)){if(m(e.buffer,e.byteOffset,n))return n}else if(e instanceof ArrayBuffer){if(m(e,0,n))return n}return null}(e,t),h=h||(c?"matched initial data ".concat(y(t)):""),c=c||A(e,null==n?void 0:n.fallbackMimeType),h=h||(c?"matched fallback MIME type ".concat(o):""),h&&a.log(1,"selectLoader selected ".concat(null===(f=c)||void 0===f?void 0:f.name,": ").concat(h,"."));return c}(t,i,n,r);if(!(c||null!=n&&n.nothrow))throw new Error(d(t));return c}function p(t){return!(t instanceof Response&&204===t.status)}function d(t){const{url:e,type:n}=Object(s.b)(t);let i="No valid loader found (";i+=e?"".concat(r.b.filename(e),", "):"no url provided, ",i+="MIME type: ".concat(n?'"'.concat(n,'"'):"not provided",", ");const o=t?y(t):"";return i+=o?' first bytes: "'.concat(o,'"'):"first bytes: not available",i+=")",i}function A(t,e){for(const n of t){if(n.mimeTypes&&n.mimeTypes.includes(e))return n;if(e==="application/x.".concat(n.id))return n}return null}function g(t,e){if(e.testText)return e.testText(t);return(Array.isArray(e.tests)?e.tests:[e.tests]).some(e=>t.startsWith(e))}function m(t,e,n){return(Array.isArray(n.tests)?n.tests:[n.tests]).some(r=>function(t,e,n,r){if(r instanceof ArrayBuffer)return Object(i.a)(r,t,r.byteLength);switch(typeof r){case"function":return r(t,n);case"string":const i=v(t,e,r.length);return r===i;default:return!1}}(t,e,n,r))}function y(t,e=5){if("string"==typeof t)return t.slice(0,e);if(ArrayBuffer.isView(t))return v(t.buffer,t.byteOffset,e);if(t instanceof ArrayBuffer){return v(t,0,e)}return""}function v(t,e,n){if(t.byteLengtht instanceof ArrayBuffer?new Uint8Array(t):t),n=e.reduce((t,e)=>t+e.byteLength,0),r=new Uint8Array(n);let i=0;for(const t of e)r.set(t,i),i+=t.byteLength;return r.buffer}function s(t,e,n){const r=void 0!==n?new Uint8Array(t).subarray(e,e+n):new Uint8Array(t).subarray(e);return new Uint8Array(r).buffer}},function(t,e,n){"use strict";n.d(e,"a",(function(){return P}));var r=n(9),i=n.n(r),o=n(3),a=n.n(o),s=n(4),u=n.n(s),c=n(26),l=n.n(c),h=n(7),f=n.n(h),p=n(5),d=n.n(p),A=n(6),g=n.n(A),m=n(2),y=n.n(m),v=n(0),_=n.n(v),b=n(41),x=n(18),w=n(88),E=n(13),O=n(75);function S(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function T(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};a()(this,n);var i,o=r.latitude,s=void 0===o?0:o,u=r.longitude,c=void 0===u?0:u,h=r.zoom,f=void 0===h?0:h,p=r.pitch,d=void 0===p?0:p,A=r.bearing,g=void 0===A?0:A,m=r.nearZMultiplier,y=void 0===m?.1:m,v=r.farZMultiplier,_=void 0===v?1.01:v,b=r.orthographic,w=void 0!==b&&b,S=r.projectionMatrix,C=r.repeat,P=void 0!==C&&C,M=r.worldOffset,I=void 0===M?0:M,B=r.position,R=r.padding,k=r.legacyMeterSizes,L=void 0!==k&&k,D=r.width,j=r.height,F=r.altitude,z=void 0===F?1.5:F,U=Math.pow(2,f);D=D||1,j=j||1;var N=null;if(S)z=S[5]/2,i=Object(x.b)(z);else{var G;if(r.fovy?(i=r.fovy,z=Object(x.e)(i)):i=Object(x.b)(z),R){var V=R.top,H=void 0===V?0:V,W=R.bottom,q=void 0===W?0:W;G=[0,Object(E.a)((H+j-q)/2,0,j)-j/2]}N=Object(x.j)({width:D,height:j,scale:U,center:B&&[0,0,B[2]*Object(x.o)(s)],offset:G,pitch:d,fovy:i,nearZMultiplier:y,farZMultiplier:_})}var X=Object(x.k)({height:j,pitch:d,bearing:g,scale:U,altitude:z});if(I){var J=(new O.a).translate([512*I,0,0]);X=J.multiplyLeft(X)}return(t=e.call(this,T(T(T({},r),{},{width:D,height:j,viewMatrix:X,longitude:c,latitude:s,zoom:f},N),{},{fovy:i,focalDistance:z}))).latitude=s,t.longitude=c,t.zoom=f,t.pitch=d,t.bearing=g,t.altitude=z,t.fovy=i,t.orthographic=w,t._subViewports=P?[]:null,t._pseudoMeters=L,Object.freeze(l()(t)),t}return u()(n,[{key:"subViewports",get:function(){if(this._subViewports&&!this._subViewports.length)for(var t=this.getBounds(),e=Math.floor((t[0]+180)/360),r=Math.ceil((t[2]-180)/360),i=e;i<=r;i++){var o=i?new n(T(T({},this),{},{worldOffset:i})):this;this._subViewports.push(o)}return this._subViewports}},{key:"projectPosition",value:function(t){if(this._pseudoMeters)return f()(y()(n.prototype),"projectPosition",this).call(this,t);var e=this.projectFlat(t),r=i()(e,2);return[r[0],r[1],(t[2]||0)*Object(x.o)(t[1])]}},{key:"unprojectPosition",value:function(t){if(this._pseudoMeters)return f()(y()(n.prototype),"unprojectPosition",this).call(this,t);var e=this.unprojectFlat(t),r=i()(e,2),o=r[0],a=r[1];return[o,a,(t[2]||0)/Object(x.o)(a)]}},{key:"addMetersToLngLat",value:function(t,e){return Object(x.a)(t,e)}},{key:"panByPosition",value:function(t,e){var n=Object(x.n)(e,this.pixelUnprojectionMatrix),r=this.projectFlat(t),o=w.a([],r,w.b([],n)),a=w.a([],this.center,o),s=this.unprojectFlat(a),u=i()(s,2);return{longitude:u[0],latitude:u[1]}}},{key:"getBounds",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=Object(x.f)(this,t.z||0);return[Math.min(e[0][0],e[1][0],e[2][0],e[3][0]),Math.min(e[0][1],e[1][1],e[2][1],e[3][1]),Math.max(e[0][0],e[1][0],e[2][0],e[3][0]),Math.max(e[0][1],e[1][1],e[2][1],e[3][1])]}},{key:"fitBounds",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=this.width,i=this.height,o=Object(x.c)(T({width:r,height:i,bounds:t},e)),a=o.longitude,s=o.latitude,u=o.zoom;return new n({width:r,height:i,longitude:a,latitude:s,zoom:u})}}]),n}(b.a);_()(P,"displayName","WebMercatorViewport")},function(t,e,n){"use strict";n.r(e);var r=n(0),i=n.n(r);function o(t,e){if(!t)throw new Error("null row");if(!e)throw new Error("no headers");const n={};for(let r=0;r0;)this._settlers.dequeue().resolve({done:!0});this._closed=!0}[u](){return this}enqueue(t){if(this._closed)throw new Error("Closed");if(this._settlers.length>0){if(this._values.length>0)throw new Error("Illegal internal state");const e=this._settlers.dequeue();t instanceof Error?e.reject(t):e.resolve({value:t})}else this._values.enqueue(t)}next(){if(this._values.length>0){const t=this._values.dequeue();return t instanceof Error?Promise.reject(t):Promise.resolve({value:t})}if(this._closed){if(this._settlers.length>0)throw new Error("Illegal internal state");return Promise.resolve({done:!0})}return new Promise((t,e)=>{this._settlers.enqueue({resolve:t,reject:e})})}}class h{constructor(t,e){if(Object(s.a)(this,"schema",void 0),Object(s.a)(this,"options",void 0),Object(s.a)(this,"length",0),Object(s.a)(this,"rows",null),Object(s.a)(this,"cursor",0),Object(s.a)(this,"_headers",[]),this.options=e,this.schema=t,!Array.isArray(t)){this._headers=[];for(const e in t)this._headers[t[e].index]=t[e].name}}rowCount(){return this.length}addArrayRow(t,e){Number.isFinite(e)&&(this.cursor=e),this.rows=this.rows||new Array(100),this.rows[this.length]=t,this.length++}addObjectRow(t,e){Number.isFinite(e)&&(this.cursor=e),this.rows=this.rows||new Array(100),this.rows[this.length]=t,this.length++}getBatch(){let t=this.rows;if(!t)return null;t=t.slice(0,this.length),this.rows=null;return{shape:this.options.shape,batchType:"data",data:t,length:this.length,schema:this.schema,cursor:this.cursor}}}class f{constructor(t,e){if(Object(s.a)(this,"schema",void 0),Object(s.a)(this,"options",void 0),Object(s.a)(this,"length",0),Object(s.a)(this,"objectRows",null),Object(s.a)(this,"arrayRows",null),Object(s.a)(this,"cursor",0),Object(s.a)(this,"_headers",[]),this.options=e,this.schema=t,!Array.isArray(t)){this._headers=[];for(const e in t)this._headers[t[e].index]=t[e].name}}rowCount(){return this.length}addArrayRow(t,e){switch(Number.isFinite(e)&&(this.cursor=e),this.options.shape){case"object-row-table":const n=o(t,this._headers);this.addObjectRow(n,e);break;case"array-row-table":this.arrayRows=this.arrayRows||new Array(100),this.arrayRows[this.length]=t,this.length++}}addObjectRow(t,e){switch(Number.isFinite(e)&&(this.cursor=e),this.options.shape){case"array-row-table":const n=a(t,this._headers);this.addArrayRow(n,e);break;case"object-row-table":this.objectRows=this.objectRows||new Array(100),this.objectRows[this.length]=t,this.length++}}getBatch(){let t=this.arrayRows||this.objectRows;return t?(t=t.slice(0,this.length),this.arrayRows=null,this.objectRows=null,{shape:this.options.shape,batchType:"data",data:t,length:this.length,schema:this.schema,cursor:this.cursor}):null}}class p{constructor(t,e){Object(s.a)(this,"schema",void 0),Object(s.a)(this,"length",0),Object(s.a)(this,"allocated",0),Object(s.a)(this,"columns",{}),this.schema=t,this._reallocateColumns()}rowCount(){return this.length}addArrayRow(t){this._reallocateColumns();let e=0;for(const n in this.columns)this.columns[n][this.length]=t[e++];this.length++}addObjectRow(t){this._reallocateColumns();for(const e in t)this.columns[e][this.length]=t[e];this.length++}getBatch(){this._pruneColumns();const t=Array.isArray(this.schema)?this.columns:{};if(!Array.isArray(this.schema))for(const e in this.schema){const n=this.schema[e];t[n.name]=this.columns[n.index]}this.columns={};return{shape:"columnar-table",batchType:"data",data:t,schema:this.schema,length:this.length}}_reallocateColumns(){if(!(this.length0?this.allocated*=2:100,this.columns={};for(const t in this.schema){const e=this.schema[t],n=e.type||Float32Array,r=this.columns[e.index];if(r&&ArrayBuffer.isView(r)){const t=new n(this.allocated);t.set(r),this.columns[e.index]=t}else r?(r.length=this.allocated,this.columns[e.index]=r):this.columns[e.index]=new n(this.allocated)}}}_pruneColumns(){for(const[t,e]of Object.entries(this.columns))this.columns[t]=e.slice(0,this.length)}}const d={shape:"array-row-table",batchSize:"auto",batchDebounceMs:0,limit:0,_limitMB:0};class A{constructor(t,e){Object(s.a)(this,"schema",void 0),Object(s.a)(this,"options",void 0),Object(s.a)(this,"aggregator",null),Object(s.a)(this,"batchCount",0),Object(s.a)(this,"bytesUsed",0),Object(s.a)(this,"isChunkComplete",!1),Object(s.a)(this,"lastBatchEmittedMs",Date.now()),Object(s.a)(this,"totalLength",0),Object(s.a)(this,"totalBytes",0),Object(s.a)(this,"rowBytes",0),this.schema=t,this.options={...d,...e}}limitReached(){var t,e;return!!(Boolean(null===(t=this.options)||void 0===t?void 0:t.limit)&&this.totalLength>=this.options.limit)||!!(Boolean(null===(e=this.options)||void 0===e?void 0:e._limitMB)&&this.totalBytes/1e6>=this.options._limitMB)}addRow(t){this.limitReached()||(this.totalLength++,this.rowBytes=this.rowBytes||this._estimateRowMB(t),this.totalBytes+=this.rowBytes,Array.isArray(t)?this.addArrayRow(t):this.addObjectRow(t))}addArrayRow(t){if(!this.aggregator){const t=this._getTableBatchType();this.aggregator=new t(this.schema,this.options)}this.aggregator.addArrayRow(t)}addObjectRow(t){if(!this.aggregator){const t=this._getTableBatchType();this.aggregator=new t(this.schema,this.options)}this.aggregator.addObjectRow(t)}chunkComplete(t){t instanceof ArrayBuffer&&(this.bytesUsed+=t.byteLength),"string"==typeof t&&(this.bytesUsed+=t.length),this.isChunkComplete=!0}getFullBatch(t){return this._isFull()?this._getBatch(t):null}getFinalBatch(t){return this._getBatch(t)}_estimateRowMB(t){return Array.isArray(t)?8*t.length:8*Object.keys(t).length}_isFull(){if(!this.aggregator||0===this.aggregator.rowCount())return!1;if("auto"===this.options.batchSize){if(!this.isChunkComplete)return!1}else if(this.options.batchSize>this.aggregator.rowCount())return!1;return!(this.options.batchDebounceMs>Date.now()-this.lastBatchEmittedMs)&&(this.isChunkComplete=!1,this.lastBatchEmittedMs=Date.now(),!0)}_getBatch(t){if(!this.aggregator)return null;null!=t&&t.bytesUsed&&(this.bytesUsed=t.bytesUsed);const e=this.aggregator.getBatch();return e.count=this.batchCount,e.bytesUsed=this.bytesUsed,Object.assign(e,t),this.batchCount++,this.aggregator=null,e}_getTableBatchType(){switch(this.options.shape){case"row-table":return h;case"array-row-table":case"object-row-table":return f;case"columnar-table":return p;case"arrow-table":if(!A.ArrowBatch)throw new Error("TableBatchBuilder");return A.ArrowBatch;default:throw new Error("TableBatchBuilder")}}}Object(s.a)(A,"ArrowBatch",void 0); -/* @license -Papa Parse -v5.0.0-beta.0 -https://github.com/mholt/PapaParse -License: MIT -*/ -const g={parse:function(t,e,n){var r=(e=e||{}).dynamicTyping||!1;E(r)&&(e.dynamicTypingFunction=r,r={});if(e.dynamicTyping=r,e.transform=!!E(e.transform)&&e.transform,e.worker&&g.WORKERS_SUPPORTED){var i=newWorker();return i.userStep=e.step,i.userChunk=e.chunk,i.userComplete=e.complete,i.userError=e.error,e.step=E(e.step),e.chunk=E(e.chunk),e.complete=E(e.complete),e.error=E(e.error),delete e.worker,void i.postMessage({input:t,config:e,workerId:i.id})}var o=null;"string"==typeof t&&(o=new v(e));o||(o=new n(e));return o.stream(t)},unparse:function(t,e){var n=!1,r=!0,i=",",o="\r\n",a='"',s=a+a,u=!1,c=null;!function(){if("object"!=typeof e)return;"string"!=typeof e.delimiter||g.BAD_DELIMITERS.filter((function(t){return-1!==e.delimiter.indexOf(t)})).length||(i=e.delimiter);("boolean"==typeof e.quotes||Array.isArray(e.quotes))&&(n=e.quotes);"boolean"!=typeof e.skipEmptyLines&&"string"!=typeof e.skipEmptyLines||(u=e.skipEmptyLines);"string"==typeof e.newline&&(o=e.newline);"string"==typeof e.quoteChar&&(a=e.quoteChar);"boolean"==typeof e.header&&(r=e.header);if(Array.isArray(e.columns)){if(0===e.columns.length)throw new Error("Option columns is empty");c=e.columns}void 0!==e.escapeChar&&(s=e.escapeChar+a)}();var l=new RegExp(b(a),"g");"string"==typeof t&&(t=JSON.parse(t));if(Array.isArray(t)){if(!t.length||Array.isArray(t[0]))return f(null,t,u);if("object"==typeof t[0])return f(c||h(t[0]),t,u)}else if("object"==typeof t)return"string"==typeof t.data&&(t.data=JSON.parse(t.data)),Array.isArray(t.data)&&(t.fields||(t.fields=t.meta&&t.meta.fields),t.fields||(t.fields=Array.isArray(t.data[0])?t.fields:h(t.data[0])),Array.isArray(t.data[0])||"object"==typeof t.data[0]||(t.data=[t.data])),f(t.fields||[],t.data||[],u);throw new Error("Unable to serialize unrecognized input");function h(t){if("object"!=typeof t)return[];var e=[];for(var n in t)e.push(n);return e}function f(t,e,n){var a="";"string"==typeof t&&(t=JSON.parse(t)),"string"==typeof e&&(e=JSON.parse(e));var s=Array.isArray(t)&&t.length>0,u=!Array.isArray(e[0]);if(s&&r){for(var c=0;c0&&(a+=i),a+=p(t[c],c);e.length>0&&(a+=o)}for(var l=0;l0&&!d&&(a+=i);var v=s&&u?t[y]:y;a+=p(e[l][v],y)}l0&&!d)&&(a+=o)}}return a}function p(t,e){return null==t?"":t.constructor===Date?JSON.stringify(t).slice(1,25):(t=t.toString().replace(l,s),"boolean"==typeof n&&n||Array.isArray(n)&&n[e]||function(t,e){for(var n=0;n-1)return!0;return!1}(t,g.BAD_DELIMITERS)||t.indexOf(i)>-1||" "===t.charAt(0)||" "===t.charAt(t.length-1)?a+t+a:t)}},RECORD_SEP:String.fromCharCode(30),UNIT_SEP:String.fromCharCode(31),BYTE_ORDER_MARK:"\ufeff",BAD_DELIMITERS:["\r","\n",'"',"\ufeff"],WORKERS_SUPPORTED:!1,NODE_STREAM_INPUT:1,LocalChunkSize:10485760,RemoteChunkSize:5242880,DefaultDelimiter:",",Parser:x,ParserHandle:_,ChunkStreamer:y,StringStreamer:v};var m=g;function y(t){this._handle=null,this._finished=!1,this._completed=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(t){var e=w(t);e.chunkSize=parseInt(e.chunkSize),t.step||t.chunk||(e.chunkSize=null);this._handle=new _(e),this._handle.streamer=this,this._config=e}.call(this,t),this.parseChunk=function(t,e){if(this.isFirstChunk&&E(this._config.beforeFirstChunk)){var n=this._config.beforeFirstChunk(t);void 0!==n&&(t=n)}this.isFirstChunk=!1;var r=this._partialLine+t;this._partialLine="";var i=this._handle.parse(r,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var o=i.meta.cursor;this._finished||(this._partialLine=r.substring(o-this._baseIndex),this._baseIndex=o),i&&i.data&&(this._rowCount+=i.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(E(this._config.chunk)&&!e){if(this._config.chunk(i,this._handle),this._handle.paused()||this._handle.aborted())return;i=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(i.data),this._completeResults.errors=this._completeResults.errors.concat(i.errors),this._completeResults.meta=i.meta),this._completed||!a||!E(this._config.complete)||i&&i.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||i&&i.meta.paused||this._nextChunk(),i}},this._sendError=function(t){E(this._config.error)&&this._config.error(t)}}function v(t){var e;t=t||{},y.call(this,t),this.stream=function(t){return e=t,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var t=this._config.chunkSize,n=t?e.substr(0,t):e;return e=t?e.substr(t):"",this._finished=!e,this.parseChunk(n)}}}function _(t){var e,n,r,i=/^\s*-?(\d*\.?\d+|\d+\.?\d*)(e[-+]?\d+)?\s*$/i,o=/(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/,a=this,s=0,u=0,c=!1,l=!1,h=[],f={data:[],errors:[],meta:{}};if(E(t.step)){var p=t.step;t.step=function(e){if(f=e,m())A();else{if(A(),!f.data||0===f.data.length)return;s+=e.data.length,t.preview&&s>t.preview?n.abort():p(f,a)}}}function d(e){return"greedy"===t.skipEmptyLines?""===e.join("").trim():1===e.length&&0===e[0].length}function A(){if(f&&r&&(v("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+g.DefaultDelimiter+"'"),r=!1),t.skipEmptyLines)for(var e=0;e=h.length?"__parsed_extra":h[r]),t.transform&&(a=t.transform(a,o)),a=y(o,a),"__parsed_extra"===o?(i[o]=i[o]||[],i[o].push(a)):i[o]=a}return t.header&&(r>h.length?v("FieldMismatch","TooManyFields","Too many fields: expected "+h.length+" fields but parsed "+r,u+n):r1&&i[0].length=r.length/2?"\r\n":"\r"}(i,s)),r=!1,t.delimiter)E(t.delimiter)&&(t.delimiter=t.delimiter(i),f.meta.delimiter=t.delimiter);else{var u=function(e,n,r,i,o){var a,s,u;o=o||[",","\t","|",";",g.RECORD_SEP,g.UNIT_SEP];for(var c=0;c1&&(h+=Math.abs(y-u),u=y):u=0}A.data.length>0&&(f/=A.data.length-p),(void 0===s||h>s)&&f>1.99&&(s=h,a=l)}return t.delimiter=a,{successful:!!a,bestDelimiter:a}}(i,t.newline,t.skipEmptyLines,t.comments,t.delimitersToGuess);u.successful?t.delimiter=u.bestDelimiter:(r=!0,t.delimiter=g.DefaultDelimiter),f.meta.delimiter=t.delimiter}var l=w(t);return t.preview&&t.header&&l.preview++,e=i,n=new x(l),f=n.parse(e,o,a),A(),c?{meta:{paused:!0}}:f||{meta:{paused:!1}}},this.paused=function(){return c},this.pause=function(){c=!0,n.abort(),e=e.substr(n.getCharIndex())},this.resume=function(){c=!1,a.streamer.parseChunk(e,!0)},this.aborted=function(){return l},this.abort=function(){l=!0,n.abort(),f.meta.aborted=!0,E(t.complete)&&t.complete(f),e=""}}function b(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function x(t){var e,n=(t=t||{}).delimiter,r=t.newline,i=t.comments,o=t.step,a=t.preview,s=t.fastMode,u=e=void 0===t.quoteChar?'"':t.quoteChar;if(void 0!==t.escapeChar&&(u=t.escapeChar),("string"!=typeof n||g.BAD_DELIMITERS.indexOf(n)>-1)&&(n=","),i===n)throw new Error("Comment character same as delimiter");!0===i?i="#":("string"!=typeof i||g.BAD_DELIMITERS.indexOf(i)>-1)&&(i=!1),"\n"!==r&&"\r"!==r&&"\r\n"!==r&&(r="\n");var c=0,l=!1;this.parse=function(t,h,f){if("string"!=typeof t)throw new Error("Input must be a string");var p=t.length,d=n.length,A=r.length,g=i.length,m=E(o);c=0;var y=[],v=[],_=[],x=0;if(!t)return D();if(s||!1!==s&&-1===t.indexOf(e)){for(var w=t.split(r),O=0;O=a)return y=y.slice(0,a),D(!0)}}return D()}for(var S,T=t.indexOf(n,c),C=t.indexOf(r,c),P=new RegExp(b(u)+b(e),"g");;)if(t[c]!==e)if(i&&0===_.length&&t.substr(c,g)===i){if(-1===C)return D();c=C+A,C=t.indexOf(r,c),T=t.indexOf(n,c)}else if(-1!==T&&(T=a)return D(!0)}else{for(S=c,c++;;){if(-1===(S=t.indexOf(e,S+1)))return f||v.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:y.length,index:c}),k();if(S===p-1)return k(t.substring(c,S).replace(P,e));if(e!==u||t[S+1]!==u){if(e===u||0===S||t[S-1]!==u){var M=R(-1===C?T:Math.min(T,C));if(t[S+1+M]===n){if(_.push(t.substring(c,S).replace(P,e)),c=S+1+M+d,T=t.indexOf(n,c),C=t.indexOf(r,c),m&&(j(),l))return D();if(a&&y.length>=a)return D(!0);break}var I=R(C);if(t.substr(S+1+I,A)===r){if(_.push(t.substring(c,S).replace(P,e)),L(S+1+I+A),T=t.indexOf(n,c),m&&(j(),l))return D();if(a&&y.length>=a)return D(!0);break}v.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:y.length,index:c}),S++}}else S++}if(m&&(j(),l))return D();if(a&&y.length>=a)return D(!0)}return k();function B(t){y.push(t),x=c}function R(e){var n=0;if(-1!==e){var r=t.substring(S+1,e);r&&""===r.trim()&&(n=r.length)}return n}function k(e){return f||(void 0===e&&(e=t.substr(c)),_.push(e),c=p,B(_),m&&j()),D()}function L(e){c=e,B(_),_=[],C=t.indexOf(r,c)}function D(t,e){return{data:e||!1?y[0]:y,errors:v,meta:{delimiter:n,linebreak:r,aborted:l,truncated:!!t,cursor:x+(h||0)}}}function j(){o(D(void 0,!0)),y=[],v=[]}},this.abort=function(){l=!0},this.getCharIndex=function(){return c}}function w(t){if("object"!=typeof t||null===t)return t;var e=Array.isArray(t)?[]:{};for(var n in t)e[n]=w(t[n]);return e}function E(t){return"function"==typeof t}v.prototype=Object.create(v.prototype),v.prototype.constructor=v;const{ChunkStreamer:O}=m;function S(t){t=t||{},O.call(this,t),this.textDecoder=new TextDecoder(this._config.encoding),this.stream=async function(t){this._input=t;try{for await(const e of t)this.parseChunk(this.getStringChunk(e));this._finished=!0,this.parseChunk("")}catch(t){this._sendError(t)}},this._nextChunk=function(){},this.getStringChunk=function(t){return"string"==typeof t?t:this.textDecoder.decode(t,{stream:!0})}}S.prototype=Object.create(O.prototype),S.prototype.constructor=S;const T={csv:{shape:"object-row-table",optimizeMemoryUsage:!1,header:"auto",columnPrefix:"column",quoteChar:'"',escapeChar:'"',dynamicTyping:!0,comments:!1,skipEmptyLines:!0,delimitersToGuess:[",","\t","|",";"]}},C={id:"csv",module:"csv",name:"CSV",version:"3.2.10",extensions:["csv","tsv","dsv"],mimeTypes:["text/csv","text/tab-separated-values","text/dsv"],category:"table",parse:async(t,e)=>P((new TextDecoder).decode(t),e),parseText:(t,e)=>P(t,e),parseInBatches:function(t,e){var n;"auto"===(e={...e}).batchSize&&(e.batchSize=4e3);const r={...T.csv,...null===(n=e)||void 0===n?void 0:n.csv},i=new l;let o=!0,a=null,s=null,u=null;const c={...r,header:!1,download:!1,chunkSize:5242880,skipEmptyLines:!1,step(t){let n=t.data;if(r.skipEmptyLines){if(""===n.flat().join("").trim())return}const c=t.meta.cursor;if(o&&!a){if("auto"===r.header?M(n):Boolean(r.header))return void(a=n.map(I()))}o&&(o=!1,a||(a=B(r.columnPrefix,n.length)),u=function(t,e){const n=e?{}:[];for(let r=0;r{throw new Error(t)}},u=m.parse(t,s);let{data:c}=u;const l=u.meta.fields||B(n.columnPrefix,r.length);switch(n.shape){case"object-row-table":c=c.map(t=>Array.isArray(t)?o(t,l):t);break;case"array-row-table":c=c.map(t=>Array.isArray(t)?t:a(t,l))}return c}function M(t){return t&&t.every(t=>"string"==typeof t)}function I(){const t=new Set;return e=>{let n=e,r=1;for(;t.has(n);)n="".concat(e,".").concat(r),r++;return t.add(n),n}}function B(t,e=0){const n=[];for(let r=0;r=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function z(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n4)e="Array<".concat(t.length,">");else if("string"==typeof t)e=t;else if("number"==typeof t)e=String(t);else try{e=JSON.stringify(t)}catch(t){e=""}return e.length>50&&(e=e.slice(0,50)),e}function X(t,e){var n,r,i=t,o=F(j()(new Set(t.match(/{[^}]*}/g).map((function(t){return t.replace(/[{}]/g,"")})))));try{for(o.s();!(r=o.n()).done;){var a=r.value;if(a.includes(".")){n=e;var s,u=F(a.split("."));try{for(u.s();!(s=u.n()).done;){var c=s.value;if(!n.hasOwnProperty(c)){n=void 0;break}n=n[c]}}catch(t){u.e(t)}finally{u.f()}}else n=e.hasOwnProperty(a)?e[a]:e.properties&&e.properties.hasOwnProperty(a)?e.properties[a]:void 0;i=i.replaceAll("{".concat(a,"}"),n)}}catch(t){o.e(t)}finally{o.f()}return i}var J=n(124),Z={};var Q=n(40);var K=n(3),Y=n.n(K),$=n(4),tt=n.n($),et={position:"absolute",top:"0px",left:"0px",width:344,padding:"12px 24px",margin:24,overflowX:"hidden",overflowY:"overlay",outline:"none",maxHeight:"94%",boxSizing:"border-box",backgroundColor:"rgb(255, 255, 255)",fontFamily:'"Fira Sans", sans-serif',zIndex:1},nt=function(){function t(e){var n=e.container,r=e.props;Y()(this,t);var i=r.description,o=document.createElement("div");o.className="deck-json-description-box",Object.assign(o.style,et),this.el=o;var a=document.createElement("div");a.innerHTML=i,o.appendChild(a),n.append(o)}return tt()(t,[{key:"remove",value:function(){this.el.remove(),this.description=null}}],[{key:"stringName",get:function(){return"description"}}]),t}();function rt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function it(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function at(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r={},i=Object.keys(e).filter(n),o=ot(i);try{for(o.s();!(t=o.n()).done;){var a=t.value;r[a]=e[a]}}catch(t){o.e(t)}finally{o.f()}return r}var lt={classes:ct(Q,st),enumerations:{COORDINATE_SYSTEM:Q.COORDINATE_SYSTEM,GL:{DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,FUNC_ADD:32774,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,BLEND_COLOR:32773,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,VENDOR:7936,RENDERER:7937,VERSION:7938,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,BROWSER_DEFAULT_WEBGL:37444,STATIC_DRAW:35044,STREAM_DRAW:35040,DYNAMIC_DRAW:35048,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,CULL_FACE:2884,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,BLEND:3042,DEPTH_TEST:2929,DITHER:3024,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,SCISSOR_TEST:3089,STENCIL_TEST:2960,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CONTEXT_LOST_WEBGL:37442,CW:2304,CCW:2305,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DOUBLE:5130,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,COMPILE_STATUS:35713,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_ATTRIBUTES:35721,ACTIVE_UNIFORMS:35718,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,ALWAYS:519,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,GEQUAL:518,NOTEQUAL:517,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,TEXTURE_WIDTH:4096,TEXTURE_HEIGHT:4097,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,MAX_3D_TEXTURE_SIZE:32883,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,MAX_TEXTURE_LOD_BIAS:34045,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,RASTERIZER_DISCARD:35977,VERTEX_ARRAY_BINDING:34229,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,MAX_ELEMENT_INDEX:36203,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,RGB9_E5:35901,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,RGB10_A2UI:36975,TEXTURE_IMMUTABLE_FORMAT:37167,TEXTURE_IMMUTABLE_LEVELS:33503,UNSIGNED_INT_2_10_10_10_REV:33640,UNSIGNED_INT_10F_11F_11F_REV:35899,UNSIGNED_INT_5_9_9_9_REV:35902,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,UNSIGNED_INT_24_8:34042,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,INT_2_10_10_10_REV:36255,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,MAX_SAMPLES:36183,SAMPLER_BINDING:35097,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,UNSIGNED_NORMALIZED:35863,SIGNED_NORMALIZED:36764,VERTEX_ATTRIB_ARRAY_INTEGER:35069,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,DEPTH24_STENCIL8:35056,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,COLOR:6144,DEPTH:6145,STENCIL:6146,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,INVALID_INDEX:4294967295,TIMEOUT_IGNORED:-1,MAX_CLIENT_WAIT_TIMEOUT_WEBGL:37447,VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:35070,UNMASKED_VENDOR_WEBGL:37445,UNMASKED_RENDERER_WEBGL:37446,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047,TEXTURE_MAX_ANISOTROPY_EXT:34046,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_RGBA8_ETC2_EAC:37493,COMPRESSED_SRGB8_ETC2:37494,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37495,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37496,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37497,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGB_ATC_WEBGL:35986,COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL:35986,COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL:34798,UNSIGNED_INT_24_8_WEBGL:34042,HALF_FLOAT_OES:36193,RGBA32F_EXT:34836,RGB32F_EXT:34837,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT:33297,UNSIGNED_NORMALIZED_EXT:35863,MIN_EXT:32775,MAX_EXT:32776,SRGB_EXT:35904,SRGB_ALPHA_EXT:35906,SRGB8_ALPHA8_EXT:35907,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT:33296,FRAGMENT_SHADER_DERIVATIVE_HINT_OES:35723,COLOR_ATTACHMENT0_WEBGL:36064,COLOR_ATTACHMENT1_WEBGL:36065,COLOR_ATTACHMENT2_WEBGL:36066,COLOR_ATTACHMENT3_WEBGL:36067,COLOR_ATTACHMENT4_WEBGL:36068,COLOR_ATTACHMENT5_WEBGL:36069,COLOR_ATTACHMENT6_WEBGL:36070,COLOR_ATTACHMENT7_WEBGL:36071,COLOR_ATTACHMENT8_WEBGL:36072,COLOR_ATTACHMENT9_WEBGL:36073,COLOR_ATTACHMENT10_WEBGL:36074,COLOR_ATTACHMENT11_WEBGL:36075,COLOR_ATTACHMENT12_WEBGL:36076,COLOR_ATTACHMENT13_WEBGL:36077,COLOR_ATTACHMENT14_WEBGL:36078,COLOR_ATTACHMENT15_WEBGL:36079,DRAW_BUFFER0_WEBGL:34853,DRAW_BUFFER1_WEBGL:34854,DRAW_BUFFER2_WEBGL:34855,DRAW_BUFFER3_WEBGL:34856,DRAW_BUFFER4_WEBGL:34857,DRAW_BUFFER5_WEBGL:34858,DRAW_BUFFER6_WEBGL:34859,DRAW_BUFFER7_WEBGL:34860,DRAW_BUFFER8_WEBGL:34861,DRAW_BUFFER9_WEBGL:34862,DRAW_BUFFER10_WEBGL:34863,DRAW_BUFFER11_WEBGL:34864,DRAW_BUFFER12_WEBGL:34865,DRAW_BUFFER13_WEBGL:34866,DRAW_BUFFER14_WEBGL:34867,DRAW_BUFFER15_WEBGL:34868,MAX_COLOR_ATTACHMENTS_WEBGL:36063,MAX_DRAW_BUFFERS_WEBGL:34852,VERTEX_ARRAY_BINDING_OES:34229,QUERY_COUNTER_BITS_EXT:34916,CURRENT_QUERY_EXT:34917,QUERY_RESULT_EXT:34918,QUERY_RESULT_AVAILABLE_EXT:34919,TIME_ELAPSED_EXT:35007,TIMESTAMP_EXT:36392,GPU_DISJOINT_EXT:36795}}};Object(L.c)([C]);var ht=new Q.JSONConverter({configuration:lt});function ft(t,e){if(t){var n={};t.forEach((function(t){var e=t.libraryName,i=t.resourceUri;n[e]=!1,e in window?r(e,window[e]):(Object.defineProperty(window,e,{set:function(t){return r(e,t)},get:function(){return n[e]}}),function(t){if(!Z[t]){var e=document.createElement("script");e.type="text/javascript",e.src=t,document.querySelector("head").appendChild(e),Z[t]=new Promise((function(t){e.onload=t}))}Z[t]}(i))}))}function r(t,r){!function(t,e){var n={classes:ct(t,st),functions:ct(t,ut)};e.mergeConfiguration(n)}(r,ht),n[t]=r,Object.values(n).every((function(t){return t}))&&"function"==typeof e&&e()}}function pt(t,e){var n=ht.convert(t);e.setProps(n)}function dt(t){var e=t.mapProvider,n=t.props,r=t.mapboxApiKey,i=t.googleMapsKey,o=t.handleEvent,a=t.getTooltip,s=t.container,u=it(it({},o?{onClick:function(t){return o("deck-click-event",t)},onHover:function(t){return o("deck-hover-event",t)},onResize:function(t){return o("deck-resize-event",t)},onViewStateChange:function(t){var e=t.viewState,n=(t.interactionState,t.oldViewState,new Q.WebMercatorViewport(e));e.nw=n.unproject([0,0]),e.se=n.unproject([n.width,n.height]),o("deck-view-state-change-event",e)},onDragStart:function(t){return o("deck-drag-start-event",t)},onDrag:function(t){return o("deck-drag-event",t)},onDragEnd:function(t){return o("deck-drag-end-event",t)}}:null),{},{getTooltip:a,container:s});switch(e){case"mapbox":return Q.log.info("Using Mapbox base maps")(),new Q.DeckGL(it(it(it({},u),n),{},{map:J.a,mapboxApiAccessToken:r,onLoad:J.c}));case"carto":return Q.log.info("Using Carto base maps")(),new Q.DeckGL(it(it({map:J.a},u),n));case"google_maps":return Q.log.info("Using Google Maps base maps")(),function(t){var e=t.container,n=(t.onClick,t.onComplete,t.getTooltip,t.googleMapsKey),r=t.layers,i=t.mapStyle,o=void 0===i?"satellite":i,a=t.initialViewState,s=void 0===a?{latitude:0,longitude:0,zoom:1}:a;if(!n)return Q.log.warn("No Google Maps API key set")(),null;var u=new Q.GoogleMapsOverlay({layers:r}),c={center:{lat:s.latitude,lng:s.longitude},mapTypeId:o,zoom:s.zoom},l=new window.google.maps.Map(e,c);return u.setMap(l),u}(it(it(it({},u),n),{},{googleMapsKey:i}));default:return Q.log.info("No recognized map provider specified")(),new Q.DeckGL(it(it(it({},u),n),{},{map:null,mapboxApiAccessToken:null}))}}function At(t){var e,n=t.mapboxApiKey,r=t.googleMapsKey,i=t.container,o=t.jsonInput,a=t.tooltip,s=t.handleEvent,u=t.customLibraries,c=t.configuration;try{c&&ht.mergeConfiguration(c);var l=o.layers||[],h=ht.convert(o);!function(t,e){var n=document.createElement("div");n.className="deckgl-ui-elements-overlay",n.style.zIndex=1,t.insertAdjacentElement("beforebegin",n);for(var r=[],i=0,o=Object.keys(e);if.length&&e.setProps({layers:t})}}))}catch(t){console.error(t)}return e}},function(t,e,n){"use strict";n.d(e,"a",(function(){return i})),n.d(e,"b",(function(){return o}));var r=n(15);function i(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t}function o(t,e,n){var r=e[0],i=e[1],o=e[2],a=e[3];return t[0]=n[0]*r+n[4]*i+n[8]*o+n[12]*a,t[1]=n[1]*r+n[5]*i+n[9]*o+n[13]*a,t[2]=n[2]*r+n[6]*i+n[10]*o+n[14]*a,t[3]=n[3]*r+n[7]*i+n[11]*o+n[15]*a,t}var a,s;a=new r.a(4),r.a!=Float32Array&&(a[0]=0,a[1]=0,a[2]=0,a[3]=0),s=a},function(t,e,n){"use strict";n.d(e,"a",(function(){return i})),n.d(e,"b",(function(){return o}));var r=n(44);function i(t,e,n=null){if(n)return n;const i={fetch:Object(r.a)(e,t),...t};return Array.isArray(i.loaders)||(i.loaders=null),i}function o(t,e){if(!e&&t&&!Array.isArray(t))return t;let n;if(t&&(n=Array.isArray(t)?t:[t]),e&&e.loaders){const t=Array.isArray(e.loaders)?e.loaders:[e.loaders];n=n?[...n,...t]:t}return n&&n.length?n:null}},function(t,e,n){"use strict";n.d(e,"a",(function(){return i})),n.d(e,"b",(function(){return o}));var r=n(15);function i(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t}function o(t,e){return t[0]=-e[0],t[1]=-e[1],t}var a,s;a=new r.a(2),r.a!=Float32Array&&(a[0]=0,a[1]=0),s=a},,,,,function(t,e,n){"use strict";(function(t,r){n.d(e,"b",(function(){return o})),n.d(e,"a",(function(){return a}));const i={self:"undefined"!=typeof self&&self,window:"undefined"!=typeof window&&window,global:void 0!==t&&t,document:"undefined"!=typeof document&&document,process:"object"==typeof r&&r},o=(globalThis,i.window||i.self||i.global),a=i.process||{};console}).call(this,n(82),n(63))},function(t,e,n){"use strict";(function(t,r){n.d(e,"b",(function(){return o})),n.d(e,"a",(function(){return a}));const i={self:"undefined"!=typeof self&&self,window:"undefined"!=typeof window&&window,global:void 0!==t&&t,document:"undefined"!=typeof document&&document,process:"object"==typeof r&&r},o=i.window||i.self||i.global,a=i.process||{};console}).call(this,n(82),n(63))},function(t,e,n){"use strict";n.d(e,"c",(function(){return o})),n.d(e,"a",(function(){return a})),n.d(e,"b",(function(){return s}));let r="";const i={};function o(t){r=t}function a(){return r}function s(t){for(const e in i)if(t.startsWith(e)){const n=i[e];t=t.replace(e,n)}return t.startsWith("http://")||t.startsWith("https://")||(t="".concat(r).concat(t)),t}},function(t,e,n){"use strict";n.d(e,"b",(function(){return i})),n.d(e,"c",(function(){return o})),n.d(e,"a",(function(){return a}));var r=n(192);function i(t){return t&&"object"==typeof t&&t.isBuffer}function o(t){return r.toBuffer?r.toBuffer(t):t}function a(t){if(i(t)){return new Uint8Array(t.buffer,t.byteOffset,t.length).slice().buffer}return t}},function(t,e,n){"use strict";n.d(e,"a",(function(){return p}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(0),u=n.n(s),c=n(81),l=[255,255,255],h=[0,0,-1],f=0,p=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i()(this,t),u()(this,"type","directional");var n=e.color,r=void 0===n?l:n,o=e.intensity,a=void 0===o?1:o,s=e.direction,p=void 0===s?h:s,d=e._shadow,A=void 0!==d&&d;this.id=e.id||"directional-".concat(f++),this.color=r,this.intensity=a,this.type="directional",this.direction=new c.a(p).normalize().toArray(),this.shadow=A}return a()(t,[{key:"getProjectedLight",value:function(t){return this}}]),t}()},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(95),i=n(103);async function o(t,e){if("string"==typeof t){t=Object(r.b)(t);let n=e;return null!=e&&e.fetch&&"function"!=typeof(null==e?void 0:e.fetch)&&(n=e.fetch),await fetch(t,n)}return await Object(i.b)(t)}},function(t,e,n){"use strict";const r={name:"fp32",vs:"#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\nconst float TWO_PI = 6.2831854820251465;\nconst float PI_2 = 1.5707963705062866;\nconst float PI_16 = 0.1963495463132858;\n\nconst float SIN_TABLE_0 = 0.19509032368659973;\nconst float SIN_TABLE_1 = 0.3826834261417389;\nconst float SIN_TABLE_2 = 0.5555702447891235;\nconst float SIN_TABLE_3 = 0.7071067690849304;\n\nconst float COS_TABLE_0 = 0.9807852506637573;\nconst float COS_TABLE_1 = 0.9238795042037964;\nconst float COS_TABLE_2 = 0.8314695954322815;\nconst float COS_TABLE_3 = 0.7071067690849304;\n\nconst float INVERSE_FACTORIAL_3 = 1.666666716337204e-01;\nconst float INVERSE_FACTORIAL_5 = 8.333333767950535e-03;\nconst float INVERSE_FACTORIAL_7 = 1.9841270113829523e-04;\nconst float INVERSE_FACTORIAL_9 = 2.75573188446287533e-06;\n\nfloat sin_taylor_fp32(float a) {\n float r, s, t, x;\n\n if (a == 0.0) {\n return 0.0;\n }\n\n x = -a * a;\n s = a;\n r = a;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_3;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_5;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_7;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_9;\n s = s + t;\n\n return s;\n}\n\nvoid sincos_taylor_fp32(float a, out float sin_t, out float cos_t) {\n if (a == 0.0) {\n sin_t = 0.0;\n cos_t = 1.0;\n }\n sin_t = sin_taylor_fp32(a);\n cos_t = sqrt(1.0 - sin_t * sin_t);\n}\n\nfloat tan_taylor_fp32(float a) {\n float sin_a;\n float cos_a;\n\n if (a == 0.0) {\n return 0.0;\n }\n float z = floor(a / TWO_PI);\n float r = a - TWO_PI * z;\n\n float t;\n float q = floor(r / PI_2 + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return 1.0 / 0.0;\n }\n\n t = r - PI_2 * q;\n\n q = floor(t / PI_16 + 0.5);\n int k = int(q);\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return 1.0 / 0.0;\n } else {\n t = t - PI_16 * q;\n }\n\n float u = 0.0;\n float v = 0.0;\n\n float sin_t, cos_t;\n float s, c;\n sincos_taylor_fp32(t, sin_t, cos_t);\n\n if (k == 0) {\n s = sin_t;\n c = cos_t;\n } else {\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0;\n v = SIN_TABLE_0;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1;\n v = SIN_TABLE_1;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2;\n v = SIN_TABLE_2;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3;\n v = SIN_TABLE_3;\n }\n if (k > 0) {\n s = u * sin_t + v * cos_t;\n c = u * cos_t - v * sin_t;\n } else {\n s = u * sin_t - v * cos_t;\n c = u * cos_t + v * sin_t;\n }\n }\n\n if (j == 0) {\n sin_a = s;\n cos_a = c;\n } else if (j == 1) {\n sin_a = c;\n cos_a = -s;\n } else if (j == -1) {\n sin_a = -c;\n cos_a = s;\n } else {\n sin_a = -s;\n cos_a = -c;\n }\n return sin_a / cos_a;\n}\n#endif\n\nfloat tan_fp32(float a) {\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\n return tan_taylor_fp32(a);\n#else\n return tan(a);\n#endif\n}\n",fs:null};var i="#define SMOOTH_EDGE_RADIUS 0.5",o={name:"geometry",vs:"\n".concat(i,"\n\nstruct VertexGeometry {\n vec4 position;\n vec3 worldPosition;\n vec3 worldPositionAlt;\n vec3 normal;\n vec2 uv;\n vec3 pickingColor;\n} geometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0),\n vec3(0.0),\n vec3(0.0),\n vec2(0.0),\n vec3(0.0)\n);\n"),fs:"\n".concat(i,"\n\nstruct FragmentGeometry {\n vec2 uv;\n} geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n")},a=n(12),s=Object.keys(a.a).map((function(t){return"const int COORDINATE_SYSTEM_".concat(t," = ").concat(a.a[t],";")})).join(""),u=Object.keys(a.d).map((function(t){return"const int PROJECTION_MODE_".concat(t," = ").concat(a.d[t],";")})).join(""),c=Object.keys(a.e).map((function(t){return"const int UNIT_".concat(t.toUpperCase()," = ").concat(a.e[t],";")})).join(""),l="".concat(s,"\n").concat(u,"\n").concat(c,'\n\nuniform int project_uCoordinateSystem;\nuniform int project_uProjectionMode;\nuniform float project_uScale;\nuniform bool project_uWrapLongitude;\nuniform vec3 project_uCommonUnitsPerMeter;\nuniform vec3 project_uCommonUnitsPerWorldUnit;\nuniform vec3 project_uCommonUnitsPerWorldUnit2;\nuniform vec4 project_uCenter;\nuniform mat4 project_uModelMatrix;\nuniform mat4 project_uViewProjectionMatrix;\nuniform vec2 project_uViewportSize;\nuniform float project_uDevicePixelRatio;\nuniform float project_uFocalDistance;\nuniform vec3 project_uCameraPosition;\nuniform vec3 project_uCoordinateOrigin;\nuniform vec3 project_uCommonOrigin;\nuniform bool project_uPseudoMeters;\n\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / (PI * 2.0);\nconst vec3 ZERO_64_LOW = vec3(0.0);\nconst float EARTH_RADIUS = 6370972.0; // meters\nconst float GLOBE_RADIUS = 256.0;\n\n// returns an adjustment factor for uCommonUnitsPerMeter\nfloat project_size_at_latitude(float lat) {\n float y = clamp(lat, -89.9, 89.9);\n return 1.0 / cos(radians(y));\n}\n\nfloat project_size() {\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR &&\n project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT &&\n project_uPseudoMeters == false) {\n\n // uCommonUnitsPerMeter in low-zoom Web Mercator is non-linear\n // Adjust by 1 / cos(latitude)\n // If geometry.position (vertex in common space) is populated, use it\n // Otherwise use geometry.worldPosition (anchor in world space)\n \n if (geometry.position.w == 0.0) {\n return project_size_at_latitude(geometry.worldPosition.y);\n }\n\n // latitude from common y: 2.0 * (atan(exp(y / TILE_SIZE * 2.0 * PI - PI)) - PI / 4.0)\n // Taylor series of 1 / cos(latitude)\n // Max error < 0.003\n \n float y = geometry.position.y / TILE_SIZE * 2.0 - 1.0;\n float y2 = y * y;\n float y4 = y2 * y2;\n float y6 = y4 * y2;\n return 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;\n }\n return 1.0;\n}\n\nfloat project_size_at_latitude(float meters, float lat) {\n return meters * project_uCommonUnitsPerMeter.z * project_size_at_latitude(lat);\n}\n\n//\n// Scaling offsets - scales meters to "world distance"\n// Note the scalar version of project_size is for scaling the z component only\n//\nfloat project_size(float meters) {\n return meters * project_uCommonUnitsPerMeter.z * project_size();\n}\n\nvec2 project_size(vec2 meters) {\n return meters * project_uCommonUnitsPerMeter.xy * project_size();\n}\n\nvec3 project_size(vec3 meters) {\n return meters * project_uCommonUnitsPerMeter * project_size();\n}\n\nvec4 project_size(vec4 meters) {\n return vec4(meters.xyz * project_uCommonUnitsPerMeter, meters.w);\n}\n\n// Get rotation matrix that aligns the z axis with the given up vector\n// Find 3 unit vectors ux, uy, uz that are perpendicular to each other and uz == up\nmat3 project_get_orientation_matrix(vec3 up) {\n vec3 uz = normalize(up);\n // Tangent on XY plane\n vec3 ux = abs(uz.z) == 1.0 ? vec3(1.0, 0.0, 0.0) : normalize(vec3(uz.y, -uz.x, 0));\n vec3 uy = cross(uz, ux);\n return mat3(ux, uy, uz);\n}\n\nbool project_needs_rotation(vec3 commonPosition, out mat3 transform) {\n if (project_uProjectionMode == PROJECTION_MODE_GLOBE) {\n transform = project_get_orientation_matrix(commonPosition);\n return true;\n }\n return false;\n}\n\n//\n// Projecting normal - transform deltas from current coordinate system to\n// normals in the worldspace\n//\nvec3 project_normal(vec3 vector) {\n // Apply model matrix\n vec4 normal_modelspace = project_uModelMatrix * vec4(vector, 0.0);\n vec3 n = normalize(normal_modelspace.xyz * project_uCommonUnitsPerMeter);\n mat3 rotation;\n if (project_needs_rotation(geometry.position.xyz, rotation)) {\n n = rotation * n;\n }\n return n;\n}\n\nvec4 project_offset_(vec4 offset) {\n float dy = offset.y;\n vec3 commonUnitsPerWorldUnit = project_uCommonUnitsPerWorldUnit + project_uCommonUnitsPerWorldUnit2 * dy;\n return vec4(offset.xyz * commonUnitsPerWorldUnit, offset.w);\n}\n\n//\n// Projecting positions - non-linear projection: lnglats => unit tile [0-1, 0-1]\n//\nvec2 project_mercator_(vec2 lnglat) {\n float x = lnglat.x;\n if (project_uWrapLongitude) {\n x = mod(x + 180., 360.0) - 180.;\n }\n float y = clamp(lnglat.y, -89.9, 89.9);\n return vec2(\n radians(x) + PI,\n PI + log(tan_fp32(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\nvec3 project_globe_(vec3 lnglatz) {\n float lambda = radians(lnglatz.x);\n float phi = radians(lnglatz.y);\n float cosPhi = cos(phi);\n float D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;\n\n return vec3(\n sin(lambda) * cosPhi,\n -cos(lambda) * cosPhi,\n sin(phi)\n ) * D;\n}\n\n//\n// Projects positions (defined by project_uCoordinateSystem) to common space (defined by project_uProjectionMode)\n//\nvec4 project_position(vec4 position, vec3 position64Low) {\n vec4 position_world = project_uModelMatrix * position;\n\n // Work around for a Mac+NVIDIA bug https://github.com/visgl/deck.gl/issues/4145\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4(\n project_mercator_(position_world.xy),\n project_size_at_latitude(position_world.z, position_world.y),\n position_world.w\n );\n }\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {\n position_world.xyz += project_uCoordinateOrigin;\n }\n }\n if (project_uProjectionMode == PROJECTION_MODE_GLOBE) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4(\n project_globe_(position_world.xyz),\n position_world.w\n );\n }\n }\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n if (abs(position_world.y - project_uCoordinateOrigin.y) > 0.25) {\n // Too far from the projection center for offset mode to be accurate\n // Only use high parts\n return vec4(\n project_mercator_(position_world.xy) - project_uCommonOrigin.xy,\n project_size(position_world.z),\n position_world.w\n );\n }\n }\n }\n if (project_uProjectionMode == PROJECTION_MODE_IDENTITY ||\n (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&\n (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n project_uCoordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {\n // Subtract high part of 64 bit value. Convert remainder to float32, preserving precision.\n position_world.xyz -= project_uCoordinateOrigin;\n }\n\n // Translation is already added to the high parts\n return project_offset_(position_world + project_uModelMatrix * vec4(position64Low, 0.0));\n}\n\nvec4 project_position(vec4 position) {\n return project_position(position, ZERO_64_LOW);\n}\n\nvec3 project_position(vec3 position, vec3 position64Low) {\n vec4 projected_position = project_position(vec4(position, 1.0), position64Low);\n return projected_position.xyz;\n}\n\nvec3 project_position(vec3 position) {\n vec4 projected_position = project_position(vec4(position, 1.0), ZERO_64_LOW);\n return projected_position.xyz;\n}\n\nvec2 project_position(vec2 position) {\n vec4 projected_position = project_position(vec4(position, 0.0, 1.0), ZERO_64_LOW);\n return projected_position.xy;\n}\n\nvec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatrix, vec4 center) {\n return viewProjectionMatrix * position + center;\n}\n\n//\n// Projects from common space coordinates to clip space.\n// Uses project_uViewProjectionMatrix\n//\nvec4 project_common_position_to_clipspace(vec4 position) {\n return project_common_position_to_clipspace(position, project_uViewProjectionMatrix, project_uCenter);\n}\n\n// Returns a clip space offset that corresponds to a given number of screen pixels\nvec2 project_pixel_size_to_clipspace(vec2 pixels) {\n vec2 offset = pixels / project_uViewportSize * project_uDevicePixelRatio * 2.0;\n return offset * project_uFocalDistance;\n}\n\nfloat project_size_to_pixel(float meters) {\n return project_size(meters) * project_uScale;\n}\nfloat project_size_to_pixel(float size, int unit) {\n if (unit == UNIT_METERS) return project_size_to_pixel(size);\n if (unit == UNIT_COMMON) return size * project_uScale;\n // UNIT_PIXELS\n return size;\n}\nfloat project_pixel_size(float pixels) {\n return pixels / project_uScale;\n}\nvec2 project_pixel_size(vec2 pixels) {\n return pixels / project_uScale;\n}\n'),h=n(117),f={};e.a={name:"project",dependencies:[r,o],vs:l,getUniforms:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;return"viewport"in t?Object(h.b)(t):{}}}},function(t,e,n){"use strict";var r=n(49),i=n(148);var o=n(186),a=n(43),s=n(21),u=n(44),c=n(119),l=n(87),h=n(60),f=n(76);async function p(t,e,n,d){Object(r.a)(!d||"object"==typeof d),!e||Array.isArray(e)||Object(a.a)(e)||(d=void 0,n=e,e=void 0),t=await t,n=n||{};const{url:A}=Object(h.b)(t),g=e,m=Object(l.b)(g,d),y=await Object(f.a)(t,m,n);return y?(n=Object(u.d)(n,y,m,A),d=Object(l.a)({url:A,parse:p,loaders:m},n,d),await async function(t,e,n,a){if(function(t,e=i.a){Object(r.a)(t,"no worker provided");const n=t.version}(t),Object(s.j)(e)){const t=e,{ok:n,redirected:r,status:i,statusText:o,type:s,url:u}=t,c=Object.fromEntries(t.headers.entries());a.response={headers:c,ok:n,redirected:r,status:i,statusText:o,type:s,url:u}}if(e=await Object(c.a)(e,t,n),t.parseTextSync&&"string"==typeof e)return n.dataType="text",t.parseTextSync(e,n,a,t);if(Object(o.a)(t,n))return await Object(o.b)(t,e,n,a,p);if(t.parseText&&"string"==typeof e)return await t.parseText(e,n,a,t);if(t.parse)return await t.parse(e,n,a,t);throw Object(r.a)(!t.parseSync),new Error("".concat(t.id," loader - no parser found and worker is disabled"))}(y,t,n,d)):null}n.d(e,"a",(function(){return p}))},function(t,e,n){"use strict";function r(t,e){if(!t)throw new Error(e||"loader assertion failed.")}n.d(e,"a",(function(){return r}))},function(t,e,n){"use strict";var r=n(8),i=n(52),o=n(10);let a="";n.d(e,"a",(function(){return s}));class s extends i.a{get[Symbol.toStringTag](){return"Texture2D"}static isSupported(t,e){return i.a.isSupported(t,e)}constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};var n,i;Object(r.b)(t),(e instanceof Promise||"string"==typeof e)&&(e={data:e}),"string"==typeof e.data&&(e=Object.assign({},e,{data:(n=e.data,Object(o.a)("string"==typeof n),n=a+n,new Promise((t,e)=>{try{const r=new Image;r.onload=()=>t(r),r.onerror=()=>e(new Error("Could not load image ".concat(n,"."))),r.crossOrigin=i&&i.crossOrigin||"anonymous",r.src=n}catch(t){e(t)}}))})),super(t,Object.assign({},e,{target:3553})),this.initialize(e),Object.seal(this)}}},function(t,e,n){"use strict";n.d(e,"b",(function(){return o})),n.d(e,"a",(function(){return a}));var r=n(21),i=n(60);async function o(t){if(Object(r.j)(t))return t;const e={},n=Object(i.a)(t);n>=0&&(e["content-length"]=String(n));const{url:o,type:a}=Object(i.b)(t);a&&(e["content-type"]=a);const s=await async function(t){if("string"==typeof t)return"data:,".concat(t.slice(0,5));if(t instanceof Blob){const e=t.slice(0,5);return await new Promise(t=>{const n=new FileReader;n.onload=e=>{var n;return t(null==e||null===(n=e.target)||void 0===n?void 0:n.result)},n.readAsDataURL(e)})}if(t instanceof ArrayBuffer){const e=function(t){let e="";const n=new Uint8Array(t);for(let t=0;t60?"".concat(e.slice(0,60),"..."):e}catch(t){}return e}(t);throw new Error(e)}}},function(t,e,n){"use strict";var r=n(38);const i="EXT_color_buffer_float";var o={33189:{bpp:2},33190:{gl2:!0,bpp:3},36012:{gl2:!0,bpp:4},36168:{bpp:1},34041:{bpp:4},35056:{gl2:!0,bpp:4},36013:{gl2:!0,bpp:5},32854:{bpp:2},36194:{bpp:2},32855:{bpp:2},33321:{gl2:!0,bpp:1},33330:{gl2:!0,bpp:1},33329:{gl2:!0,bpp:1},33332:{gl2:!0,bpp:2},33331:{gl2:!0,bpp:2},33334:{gl2:!0,bpp:4},33333:{gl2:!0,bpp:4},33323:{gl2:!0,bpp:2},33336:{gl2:!0,bpp:2},33335:{gl2:!0,bpp:2},33338:{gl2:!0,bpp:4},33337:{gl2:!0,bpp:4},33340:{gl2:!0,bpp:8},33339:{gl2:!0,bpp:8},32849:{gl2:!0,bpp:3},32856:{gl2:!0,bpp:4},32857:{gl2:!0,bpp:4},36220:{gl2:!0,bpp:4},36238:{gl2:!0,bpp:4},36975:{gl2:!0,bpp:4},36214:{gl2:!0,bpp:8},36232:{gl2:!0,bpp:8},36226:{gl2:!0,bpp:16},36208:{gl2:!0,bpp:16},33325:{gl2:i,bpp:2},33327:{gl2:i,bpp:4},34842:{gl2:i,bpp:8},33326:{gl2:i,bpp:4},33328:{gl2:i,bpp:8},34836:{gl2:i,bpp:16},35898:{gl2:i,bpp:4}},a=n(8),s=n(10);n.d(e,"a",(function(){return u}));class u extends r.a{get[Symbol.toStringTag](){return"Renderbuffer"}static isSupported(t){let{format:e}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{format:null};return!e||function(t,e,n){const r=n[e];if(!r)return!1;const i=Object(a.j)(t)&&r.gl2||r.gl1;return"string"==typeof i?t.getExtension(i):i}(t,e,o)}static getSamplesForFormat(t,e){let{format:n}=e;return t.getInternalformatParameter(36161,n,32937)}constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(t,e),this.initialize(e),Object.seal(this)}initialize(t){let{format:e,width:n=1,height:r=1,samples:i=0}=t;return Object(s.a)(e,"Needs format"),this._trackDeallocatedMemory(),this.gl.bindRenderbuffer(36161,this.handle),0!==i&&Object(a.j)(this.gl)?this.gl.renderbufferStorageMultisample(36161,i,e,n,r):this.gl.renderbufferStorage(36161,e,n,r),this.format=e,this.width=n,this.height=r,this.samples=i,this._trackAllocatedMemory(this.width*this.height*(this.samples||1)*o[this.format].bpp),this}resize(t){let{width:e,height:n}=t;return e!==this.width||n!==this.height?this.initialize({width:e,height:n,format:this.format,samples:this.samples}):this}_createHandle(){return this.gl.createRenderbuffer()}_deleteHandle(){this.gl.deleteRenderbuffer(this.handle),this._trackDeallocatedMemory()}_bindHandle(t){this.gl.bindRenderbuffer(36161,t)}_syncHandle(t){this.format=this.getParameter(36164),this.width=this.getParameter(36162),this.height=this.getParameter(36163),this.samples=this.getParameter(36011)}_getParameter(t){this.gl.bindRenderbuffer(36161,this.handle);return this.gl.getRenderbufferParameter(36161,t)}}},function(t,e,n){"use strict";(function(t){n.d(e,"b",(function(){return r})),n.d(e,"c",(function(){return i})),n.d(e,"a",(function(){return o}));const r="undefined"!=typeof navigator&&navigator.userAgent?navigator.userAgent.toLowerCase():"",i="undefined"!=typeof window?window:t;void 0!==t||window,"undefined"!=typeof document&&document;let o=!1;try{const t={get passive(){return o=!0,!0}};i.addEventListener("test",null,t),i.removeEventListener("test",null)}catch(t){o=!1}}).call(this,n(82))},function(t,e,n){"use strict";(function(t){n.d(e,"a",(function(){return r}));"undefined"!=typeof window&&window,void 0!==t||window;var r="undefined"!=typeof document?document:{}}).call(this,n(82))},function(t,e,n){"use strict";n.d(e,"c",(function(){return a})),n.d(e,"b",(function(){return s})),n.d(e,"a",(function(){return u}));var r=n(43),i=n(44);const o=()=>{const t=Object(i.c)();return t.loaderRegistry=t.loaderRegistry||[],t.loaderRegistry};function a(t){const e=o();t=Array.isArray(t)?t:[t];for(const n of t){const t=Object(r.b)(n);e.find(e=>t===e)||e.unshift(t)}}function s(){return o()}function u(){Object(i.c)().loaderRegistry=[]}},function(t,e,n){"use strict";n.d(e,"a",(function(){return C})),n.d(e,"b",(function(){return P}));var r=n(26),i=n.n(r),o=n(7),a=n.n(o),s=n(0),u=n.n(s),c=n(3),l=n.n(c),h=n(4),f=n.n(h),p=n(5),d=n.n(p),A=n(6),g=n.n(A),m=n(2),y=n.n(m),v=n(13),_=n(56),b=n(118),x=n(18),w=n(28),E=n(48);function O(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function S(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:2;return this._zoomFromCenter(t)}},{key:"zoomOut",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:2;return this._zoomFromCenter(1/t)}},{key:"moveLeft",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;return this._panFromCenter([t,0])}},{key:"moveRight",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;return this._panFromCenter([-t,0])}},{key:"moveUp",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;return this._panFromCenter([0,t])}},{key:"moveDown",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;return this._panFromCenter([0,-t])}},{key:"rotateLeft",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:15;return this._getUpdatedState({bearing:this.getViewportProps().bearing-t})}},{key:"rotateRight",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:15;return this._getUpdatedState({bearing:this.getViewportProps().bearing+t})}},{key:"rotateUp",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this._getUpdatedState({pitch:this.getViewportProps().pitch+t})}},{key:"rotateDown",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this._getUpdatedState({pitch:this.getViewportProps().pitch-t})}},{key:"shortestPathFrom",value:function(t){var e=t.getViewportProps(),n=S({},this.getViewportProps()),r=n.bearing,i=n.longitude;return Math.abs(r-e.bearing)>180&&(n.bearing=r<0?r+360:r-360),Math.abs(i-e.longitude)>180&&(n.longitude=i<0?i+360:i-360),n}},{key:"applyConstraints",value:function(t){var e=t.maxZoom,n=t.minZoom,r=t.zoom;t.zoom=Object(v.a)(r,n,e);var i=t.maxPitch,o=t.minPitch,a=t.pitch;t.pitch=Object(v.a)(a,o,i);var s=t.normalize;return(void 0===s||s)&&Object.assign(t,Object(x.m)(t)),t}},{key:"_zoomFromCenter",value:function(t){var e=this.getViewportProps(),n=e.width,r=e.height;return this.zoom({pos:[n/2,r/2],scale:t})}},{key:"_panFromCenter",value:function(t){var e=this.getViewportProps(),n=e.width,r=e.height;return this.pan({startPos:[n/2,r/2],pos:[n/2+t[0],r/2+t[1]]})}},{key:"_getUpdatedState",value:function(t){return new this.constructor(S(S(S({makeViewport:this.makeViewport},this.getViewportProps()),this.getState()),t))}},{key:"_unproject",value:function(t){var e=this.makeViewport(this.getViewportProps());return t&&e.unproject(t)}},{key:"_getNewRotation",value:function(t,e,n,r){var i=t[0]-e[0],o=t[1]-e[1],a=t[1],s=e[1],u=this.getViewportProps(),c=u.width,l=u.height,h=i/c,f=0;o>0?Math.abs(l-s)>5&&(f=o/(s-l)*1.2):o<0&&s>5&&(f=1-a/s),f=Object(v.a)(f,-1,1);var p=this.getViewportProps(),d=p.minPitch,A=p.maxPitch,g=n;return f>0?g=n+f*(A-n):f<0&&(g=n-f*(d-n)),{pitch:g,bearing:r+180*h}}}]),n}(b.a),P=function(t){d()(n,t);var e=T(n);function n(){var t;l()(this,n);for(var r=arguments.length,o=new Array(r),a=0;a=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n90)&&(d*=-1),e={rotationX:c+180*((n[1]-u[1])/p),rotationOrbit:l+180*d}}else e={rotationX:c+a,rotationOrbit:l+i};return this._getUpdatedState(e)}},{key:"rotateEnd",value:function(){return this._getUpdatedState({startRotationX:null,startRotationOrbit:null})}},{key:"shortestPathFrom",value:function(t){var e=t.getViewportProps(),n=w({},this.getViewportProps()),r=n.rotationOrbit;return Math.abs(r-e.rotationOrbit)>180&&(n.rotationOrbit=r<0?r+360:r-360),n}},{key:"zoomStart",value:function(t){var e=t.pos;return this._getUpdatedState({startZoomPosition:this._unproject(e),startZoom:this.getViewportProps().zoom})}},{key:"zoom",value:function(t){var e=t.pos,n=t.startPos,r=t.scale,i=this.getState(),o=i.startZoom,a=i.startZoomPosition;if(a||(o=this.getViewportProps().zoom,a=this._unproject(n)||this._unproject(e)),!a)return this;var s=this._calculateNewZoom({scale:r,startZoom:o}),u=this.makeViewport(w(w({},this.getViewportProps()),{},{zoom:s}));return this._getUpdatedState(w({zoom:s},u.panByPosition(a,e)))}},{key:"zoomEnd",value:function(){return this._getUpdatedState({startZoomPosition:null,startZoom:null})}},{key:"zoomIn",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:2;return this._getUpdatedState({zoom:this._calculateNewZoom({scale:t})})}},{key:"zoomOut",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:2;return this._getUpdatedState({zoom:this._calculateNewZoom({scale:1/t})})}},{key:"moveLeft",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:50;return this._panFromCenter([-t,0])}},{key:"moveRight",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:50;return this._panFromCenter([t,0])}},{key:"moveUp",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:50;return this._panFromCenter([0,-t])}},{key:"moveDown",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:50;return this._panFromCenter([0,t])}},{key:"rotateLeft",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:15;return this._getUpdatedState({rotationOrbit:this.getViewportProps().rotationOrbit-t})}},{key:"rotateRight",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:15;return this._getUpdatedState({rotationOrbit:this.getViewportProps().rotationOrbit+t})}},{key:"rotateUp",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this._getUpdatedState({rotationX:this.getViewportProps().rotationX-t})}},{key:"rotateDown",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this._getUpdatedState({rotationX:this.getViewportProps().rotationX+t})}},{key:"_unproject",value:function(t){var e=this.makeViewport(this.getViewportProps());return t&&e.unproject(t)}},{key:"_calculateNewZoom",value:function(t){var e=t.scale,n=t.startZoom,r=this.getViewportProps(),i=r.maxZoom,o=r.minZoom;void 0===n&&(n=this.getViewportProps().zoom);var a=n+Math.log2(e);return Object(m.a)(a,o,i)}},{key:"_panFromCenter",value:function(t){var e=this.getViewportProps(),n=e.width,r=e.height,i=e.target;return this.pan({startPosition:i,pos:[n/2+t[0],r/2+t[1]]})}},{key:"_getUpdatedState",value:function(t){return new this.constructor(w(w(w({makeViewport:this.makeViewport},this.getViewportProps()),this.getState()),t))}},{key:"applyConstraints",value:function(t){var e=t.maxZoom,n=t.minZoom,r=t.zoom,i=t.maxRotationX,o=t.minRotationX,a=t.rotationOrbit;return t.zoom=Array.isArray(r)?[Object(m.a)(r[0],n,e),Object(m.a)(r[1],n,e)]:Object(m.a)(r,n,e),t.rotationX=Object(m.a)(t.rotationX,o,i),(a<-180||a>180)&&(t.rotationOrbit=Object(_.e)(a+180,360)-180),t}}]),n}(v.a),S=function(t){f()(n,t);var e=E(n);function n(){var t;u()(this,n);for(var r=arguments.length,o=new Array(r),s=0;s=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function M(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n2?a[u*o+2]:0;i[3*s]=c,i[3*s+1]=l,i[3*s+2]=h}}},{key:"_updateVertexValid",value:function(t,e){var n=e.vertexStart,r=e.geometrySize,i=this.positionSize,o=this.attributes.vertexValid,a=t&&S.a(t);if(t&&t.edgeTypes?o.set(t.edgeTypes,n):o.fill(1,n,n+r),a)for(var s=0;s0&&!Number.isFinite(t[0])}var D="\nattribute vec2 vertexPositions;\nattribute float vertexValid;\n\nuniform bool extruded;\nuniform bool isWireframe;\nuniform float elevationScale;\nuniform float opacity;\n\nvarying vec4 vColor;\n\nstruct PolygonProps {\n vec4 fillColors;\n vec4 lineColors;\n vec3 positions;\n vec3 nextPositions;\n vec3 pickingColors;\n vec3 positions64Low;\n vec3 nextPositions64Low;\n float elevations;\n};\n\nvec3 project_offset_normal(vec3 vector) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS) {\n // normals generated by the polygon tesselator are in lnglat offsets instead of meters\n return normalize(vector * project_uCommonUnitsPerWorldUnit);\n }\n return project_normal(vector);\n}\n\nvoid calculatePosition(PolygonProps props) {\n#ifdef IS_SIDE_VERTEX\n if(vertexValid < 0.5){\n gl_Position = vec4(0.);\n return;\n }\n#endif\n\n vec3 pos;\n vec3 pos64Low;\n vec3 normal;\n vec4 colors = isWireframe ? props.lineColors : props.fillColors;\n\n geometry.worldPosition = props.positions;\n geometry.worldPositionAlt = props.nextPositions;\n geometry.pickingColor = props.pickingColors;\n\n#ifdef IS_SIDE_VERTEX\n pos = mix(props.positions, props.nextPositions, vertexPositions.x);\n pos64Low = mix(props.positions64Low, props.nextPositions64Low, vertexPositions.x);\n#else\n pos = props.positions;\n pos64Low = props.positions64Low;\n#endif\n\n if (extruded) {\n pos.z += props.elevations * vertexPositions.y * elevationScale;\n }\n gl_Position = project_position_to_clipspace(pos, pos64Low, vec3(0.), geometry.position);\n\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n if (extruded) {\n #ifdef IS_SIDE_VERTEX\n normal = vec3(\n props.positions.y - props.nextPositions.y + (props.positions64Low.y - props.nextPositions64Low.y),\n props.nextPositions.x - props.positions.x + (props.nextPositions64Low.x - props.positions64Low.x),\n 0.0);\n normal = project_offset_normal(normal);\n #else\n normal = project_normal(vec3(0.0, 0.0, 1.0));\n #endif\n geometry.normal = normal;\n vec3 lightColor = lighting_getLightColor(colors.rgb, project_uCameraPosition, geometry.position.xyz, normal);\n vColor = vec4(lightColor, colors.a * opacity);\n } else {\n vColor = vec4(colors.rgb, colors.a * opacity);\n }\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n",j="#define SHADER_NAME solid-polygon-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 positions64Low;\nattribute float elevations;\nattribute vec4 fillColors;\nattribute vec4 lineColors;\nattribute vec3 pickingColors;\n\n".concat(D,"\n\nvoid main(void) {\n PolygonProps props;\n\n props.positions = positions;\n props.positions64Low = positions64Low;\n props.elevations = elevations;\n props.fillColors = fillColors;\n props.lineColors = lineColors;\n props.pickingColors = pickingColors;\n\n calculatePosition(props);\n}\n"),F="#define SHADER_NAME solid-polygon-layer-vertex-shader-side\n#define IS_SIDE_VERTEX\n\n\nattribute vec3 instancePositions;\nattribute vec3 nextPositions;\nattribute vec3 instancePositions64Low;\nattribute vec3 nextPositions64Low;\nattribute float instanceElevations;\nattribute vec4 instanceFillColors;\nattribute vec4 instanceLineColors;\nattribute vec3 instancePickingColors;\n\n".concat(D,"\n\nvoid main(void) {\n PolygonProps props;\n\n #if RING_WINDING_ORDER_CW == 1\n props.positions = instancePositions;\n props.positions64Low = instancePositions64Low;\n props.nextPositions = nextPositions;\n props.nextPositions64Low = nextPositions64Low;\n #else\n props.positions = nextPositions;\n props.positions64Low = nextPositions64Low;\n props.nextPositions = instancePositions;\n props.nextPositions64Low = instancePositions64Low;\n #endif\n props.elevations = instanceElevations;\n props.fillColors = instanceFillColors;\n props.lineColors = instanceLineColors;\n props.pickingColors = instancePickingColors;\n\n calculatePosition(props);\n}\n");function z(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function U(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function S(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n2&&void 0!==arguments[2]?arguments[2]:[],r=this.positionSize;e*r>=t.length&&(e+=1-t.length/r);var i=e*r;return n[0]=t[i],n[1]=t[i+1],n[2]=3===r&&t[i+2]||0,n}},{key:"isClosed",value:function(t){if(!this.normalize)return Boolean(this.opts.loop);var e=this.positionSize,n=t.length-e;return t[0]===t[n]&&t[1]===t[n+1]&&(2===e||t[2]===t[n+2])}}]),n}(w.a);function I(t){return Array.isArray(t[0])}function B(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function R(t){for(var e=1;e 0.0;\n // side of the segment - -1: left, 0: center, 1: right\n float sideOfPath = positions.y;\n float isJoint = float(sideOfPath == 0.0);\n\n vec3 deltaA3 = (currPoint - prevPoint);\n vec3 deltaB3 = (nextPoint - currPoint);\n\n mat3 rotationMatrix;\n bool needsRotation = !billboard && project_needs_rotation(currPoint, rotationMatrix);\n if (needsRotation) {\n deltaA3 = deltaA3 * rotationMatrix;\n deltaB3 = deltaB3 * rotationMatrix;\n }\n vec2 deltaA = deltaA3.xy / width;\n vec2 deltaB = deltaB3.xy / width;\n\n float lenA = length(deltaA);\n float lenB = length(deltaB);\n\n vec2 dirA = lenA > 0. ? normalize(deltaA) : vec2(0.0, 0.0);\n vec2 dirB = lenB > 0. ? normalize(deltaB) : vec2(0.0, 0.0);\n\n vec2 perpA = vec2(-dirA.y, dirA.x);\n vec2 perpB = vec2(-dirB.y, dirB.x);\n\n // tangent of the corner\n vec2 tangent = dirA + dirB;\n tangent = length(tangent) > 0. ? normalize(tangent) : perpA;\n // direction of the corner\n vec2 miterVec = vec2(-tangent.y, tangent.x);\n // direction of the segment\n vec2 dir = isEnd ? dirA : dirB;\n // direction of the extrusion\n vec2 perp = isEnd ? perpA : perpB;\n // length of the segment\n float L = isEnd ? lenA : lenB;\n\n // A = angle of the corner\n float sinHalfA = abs(dot(miterVec, perp));\n float cosHalfA = abs(dot(dirA, miterVec));\n\n // -1: right, 1: left\n float turnDirection = flipIfTrue(dirA.x * dirB.y >= dirA.y * dirB.x);\n\n // relative position to the corner:\n // -1: inside (smaller side of the angle)\n // 0: center\n // 1: outside (bigger side of the angle)\n float cornerPosition = sideOfPath * turnDirection;\n\n float miterSize = 1.0 / max(sinHalfA, EPSILON);\n // trim if inside corner extends further than the line segment\n miterSize = mix(\n min(miterSize, max(lenA, lenB) / max(cosHalfA, EPSILON)),\n miterSize,\n step(0.0, cornerPosition)\n );\n\n vec2 offsetVec = mix(miterVec * miterSize, perp, step(0.5, cornerPosition))\n * (sideOfPath + isJoint * turnDirection);\n\n // special treatment for start cap and end cap\n bool isStartCap = lenA == 0.0 || (!isEnd && (instanceTypes == 1.0 || instanceTypes == 3.0));\n bool isEndCap = lenB == 0.0 || (isEnd && (instanceTypes == 2.0 || instanceTypes == 3.0));\n bool isCap = isStartCap || isEndCap;\n\n // extend out a triangle to envelope the round cap\n if (isCap) {\n offsetVec = mix(perp * sideOfPath, dir * capType * 4.0 * flipIfTrue(isStartCap), isJoint);\n vJointType = capType;\n } else {\n vJointType = jointType;\n }\n\n // Generate variables for fragment shader\n vPathLength = L;\n vCornerOffset = offsetVec;\n vMiterLength = dot(vCornerOffset, miterVec * turnDirection);\n vMiterLength = isCap ? isJoint : vMiterLength;\n\n vec2 offsetFromStartOfPath = vCornerOffset + deltaA * float(isEnd);\n vPathPosition = vec2(\n dot(offsetFromStartOfPath, perp),\n dot(offsetFromStartOfPath, dir)\n );\n geometry.uv = vPathPosition;\n\n float isValid = step(instanceTypes, 3.5);\n vec3 offset = vec3(offsetVec * width * isValid, 0.0);\n\n if (needsRotation) {\n offset = rotationMatrix * offset;\n }\n return currPoint + offset;\n}\n\n// In clipspace extrusion, if a line extends behind the camera, clip it to avoid visual artifacts\nvoid clipLine(inout vec4 position, vec4 refPosition) {\n if (position.w < EPSILON) {\n float r = (EPSILON - refPosition.w) / (position.w - refPosition.w);\n position = refPosition + (position - refPosition) * r;\n }\n}\n\nvoid main() {\n geometry.pickingColor = instancePickingColors;\n\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity);\n\n float isEnd = positions.x;\n\n vec3 prevPosition = mix(instanceLeftPositions, instanceStartPositions, isEnd);\n vec3 prevPosition64Low = mix(instanceLeftPositions64Low, instanceStartPositions64Low, isEnd);\n\n vec3 currPosition = mix(instanceStartPositions, instanceEndPositions, isEnd);\n vec3 currPosition64Low = mix(instanceStartPositions64Low, instanceEndPositions64Low, isEnd);\n\n vec3 nextPosition = mix(instanceEndPositions, instanceRightPositions, isEnd);\n vec3 nextPosition64Low = mix(instanceEndPositions64Low, instanceRightPositions64Low, isEnd);\n\n geometry.worldPosition = currPosition;\n vec2 widthPixels = vec2(clamp(\n project_size_to_pixel(instanceStrokeWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels) / 2.0);\n vec3 width;\n\n if (billboard) {\n // Extrude in clipspace\n vec4 prevPositionScreen = project_position_to_clipspace(prevPosition, prevPosition64Low, ZERO_OFFSET);\n vec4 currPositionScreen = project_position_to_clipspace(currPosition, currPosition64Low, ZERO_OFFSET, geometry.position);\n vec4 nextPositionScreen = project_position_to_clipspace(nextPosition, nextPosition64Low, ZERO_OFFSET);\n\n clipLine(prevPositionScreen, currPositionScreen);\n clipLine(nextPositionScreen, currPositionScreen);\n clipLine(currPositionScreen, mix(nextPositionScreen, prevPositionScreen, isEnd));\n\n width = vec3(widthPixels, 0.0);\n DECKGL_FILTER_SIZE(width, geometry);\n\n vec3 pos = lineJoin(\n prevPositionScreen.xyz / prevPositionScreen.w,\n currPositionScreen.xyz / currPositionScreen.w,\n nextPositionScreen.xyz / nextPositionScreen.w,\n project_pixel_size_to_clipspace(width.xy)\n );\n\n gl_Position = vec4(pos * currPositionScreen.w, currPositionScreen.w);\n } else {\n // Extrude in commonspace\n prevPosition = project_position(prevPosition, prevPosition64Low);\n currPosition = project_position(currPosition, currPosition64Low);\n nextPosition = project_position(nextPosition, nextPosition64Low);\n\n width = vec3(project_pixel_size(widthPixels), 0.0);\n DECKGL_FILTER_SIZE(width, geometry);\n\n vec4 pos = vec4(\n lineJoin(prevPosition, currPosition, nextPosition, width.xy),\n 1.0);\n geometry.position = pos;\n gl_Position = project_common_position_to_clipspace(pos);\n }\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n",fs:"#define SHADER_NAME path-layer-fragment-shader\n\nprecision highp float;\n\nuniform float miterLimit;\n\nvarying vec4 vColor;\nvarying vec2 vCornerOffset;\nvarying float vMiterLength;\n/*\n * vPathPosition represents the relative coordinates of the current fragment on the path segment.\n * vPathPosition.x - position along the width of the path, between [-1, 1]. 0 is the center line.\n * vPathPosition.y - position along the length of the path, between [0, L / width].\n */\nvarying vec2 vPathPosition;\nvarying float vPathLength;\nvarying float vJointType;\n\nvoid main(void) {\n geometry.uv = vPathPosition;\n\n if (vPathPosition.y < 0.0 || vPathPosition.y > vPathLength) {\n // if joint is rounded, test distance from the corner\n if (vJointType > 0.5 && length(vCornerOffset) > 1.0) {\n discard;\n }\n // trim miter\n if (vJointType < 0.5 && vMiterLength > miterLimit + 1.0) {\n discard;\n }\n }\n gl_FragColor = vColor;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n",modules:[m.a,y.a]})}},{key:"wrapLongitude",get:function(){return!1}},{key:"initializeState",value:function(){var t=this;this.getAttributeManager().addInstanced({positions:{size:3,vertexOffset:1,type:5130,fp64:this.use64bitPositions(),transition:j,accessor:"getPath",update:this.calculatePositions,noAlloc:!0,shaderAttributes:{instanceLeftPositions:{vertexOffset:0},instanceStartPositions:{vertexOffset:1},instanceEndPositions:{vertexOffset:2},instanceRightPositions:{vertexOffset:3}}},instanceTypes:{size:1,type:5121,update:this.calculateSegmentTypes,noAlloc:!0},instanceStrokeWidths:{size:1,accessor:"getWidth",transition:j,defaultValue:1},instanceColors:{size:this.props.colorFormat.length,type:5121,normalized:!0,accessor:"getColor",transition:j,defaultValue:L},instancePickingColors:{size:3,type:5121,accessor:function(e,n){var r=n.index,i=n.target;return t.encodePickingColor(e&&e.__source?e.__source.index:r,i)}}}),this.setState({pathTesselator:new M({fp64:this.use64bitPositions()})})}},{key:"updateState",value:function(t){u()(d()(n.prototype),"updateState",this).call(this,t);var e=t.props,r=t.changeFlags,i=this.getAttributeManager();if(r.dataChanged||r.updateTriggersChanged&&(r.updateTriggersChanged.all||r.updateTriggersChanged.getPath)){var o=this.state.pathTesselator,a=e.data.attributes||{};o.updateGeometry({data:e.data,geometryBuffer:a.getPath,buffers:a,normalize:!e._pathType,loop:"loop"===e._pathType,getGeometry:e.getPath,positionFormat:e.positionFormat,wrapLongitude:e.wrapLongitude,resolution:this.context.viewport.resolution,dataChanged:r.dataChanged}),this.setState({numInstances:o.instanceCount,startIndices:o.vertexStarts}),r.dataChanged||i.invalidateAll()}if(r.extensionsChanged){var s,c=this.context.gl;null===(s=this.state.model)||void 0===s||s.delete(),this.state.model=this._getModel(c),i.invalidateAll()}}},{key:"getPickingInfo",value:function(t){var e=u()(d()(n.prototype),"getPickingInfo",this).call(this,t),r=e.index,i=this.props.data;return i[0]&&i[0].__source&&(e.object=i.find((function(t){return t.__source.index===r}))),e}},{key:"disablePickingIndex",value:function(t){var e=this.props.data;if(e[0]&&e[0].__source)for(var n=0;n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function I(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0){var l=function(t){for(var e,n=t.icons,r=t.buffer,i=t.mapping,o=void 0===i?{}:i,a=t.xOffset,s=void 0===a?0:a,u=t.yOffset,c=void 0===u?0:u,l=t.rowHeight,h=void 0===l?0:l,f=t.canvasWidth,p=[],d=0;df&&(j(o,p,c),s=0,c=h+c+r,h=0,p=[]),p.push({icon:A,xOffset:s}),s=s+m+r,h=Math.max(h,g)}}return p.length>0&&j(o,p,c),{mapping:o,rowHeight:h,xOffset:s,yOffset:c,canvasWidth:f,canvasHeight:(e=h+c+r,Math.pow(2,Math.ceil(Math.log2(e))))}}({icons:c,buffer:this._buffer,canvasWidth:this._canvasWidth,mapping:this._mapping,rowHeight:this._rowHeight,xOffset:this._xOffset,yOffset:this._yOffset}),h=l.mapping,f=l.xOffset,p=l.yOffset,d=l.rowHeight,A=l.canvasHeight;this._rowHeight=d,this._mapping=h,this._xOffset=f,this._yOffset=p,this._canvasHeight=A,this._texture||(this._texture=new O.a(this.gl,{width:this._canvasWidth,height:this._canvasHeight,parameters:this._textureParameters||L})),this._texture.height!==this._canvasHeight&&(this._texture=(n=this._texture,r=this._canvasWidth,i=this._canvasHeight,o=this._textureParameters||L,a=n.width,s=n.height,u=new O.a(n.gl,{width:r,height:i,parameters:o}),Object(S.b)(n,u,{targetY:0,width:a,height:s}),n.delete(),u)),this.onUpdate(),this._canvas=this._canvas||document.createElement("canvas"),this._loadIcons(c)}}}},{key:"_loadIcons",value:function(t){var e,n=this,r=this._canvas.getContext("2d"),i=M(t);try{var o=function(){var t=e.value;n._pendingCount++,Object(C.a)(t.url,T.a,n._loadOptions).then((function(e){var i=D(t),o=n._mapping[i],a=o.x,s=o.y,u=o.width,c=o.height,l=function(t,e,n,r){return n===e.width&&r===e.height?e:(t.canvas.height=r,t.canvas.width=n,t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(e,0,0,e.width,e.height,0,0,n,r),t.canvas)}(r,e,u,c);n._texture.setSubImageData({data:l,x:a,y:s,width:u,height:c}),n._texture.generateMipmap(),n.onUpdate()})).catch((function(e){n.onError({url:t.url,source:t.source,sourceIndex:t.sourceIndex,loadOptions:n._loadOptions,error:e})})).finally((function(){n._pendingCount--}))};for(i.s();!(e=i.n()).done;)o()}catch(t){i.e(t)}finally{i.f()}}}]),t}();function z(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function U(t){for(var e=1;e=0&&t=0&&t0?", ":"")+Object(r.e)(this[n],t);return"".concat(t.printTypes?this.constructor.name:"","[").concat(e,"]")}equals(t){if(!t||this.length!==t.length)return!1;for(let e=0;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0,shadow_uColor:t.shadowColor||m,shadow_uLightId:t.shadowLightId||0,shadow_uLightCount:t.shadowMatrices.length},i=A({viewport:t.viewport,center:e.project_uCenter}),o=[],a=g({shadowMatrices:t.shadowMatrices,viewport:t.viewport}).slice(),u=0;u0?r["shadow_uShadowMap".concat(f)]=t.shadowMaps[f]:r["shadow_uShadowMap".concat(f)]=t.dummyShadowMap;return r}e.a={name:"shadow",dependencies:[u.a],vs:"\nconst int max_lights = 2;\nuniform mat4 shadow_uViewProjectionMatrices[max_lights];\nuniform vec4 shadow_uProjectCenters[max_lights];\nuniform bool shadow_uDrawShadowMap;\nuniform bool shadow_uUseShadowMap;\nuniform int shadow_uLightId;\nuniform float shadow_uLightCount;\n\nvarying vec3 shadow_vPosition[max_lights];\n\nvec4 shadow_setVertexPosition(vec4 position_commonspace) {\n if (shadow_uDrawShadowMap) {\n return project_common_position_to_clipspace(position_commonspace, shadow_uViewProjectionMatrices[shadow_uLightId], shadow_uProjectCenters[shadow_uLightId]);\n }\n if (shadow_uUseShadowMap) {\n for (int i = 0; i < max_lights; i++) {\n if(i < int(shadow_uLightCount)) {\n vec4 shadowMap_position = project_common_position_to_clipspace(position_commonspace, shadow_uViewProjectionMatrices[i], shadow_uProjectCenters[i]);\n shadow_vPosition[i] = (shadowMap_position.xyz / shadowMap_position.w + 1.0) / 2.0;\n }\n }\n }\n return gl_Position;\n}\n",fs:"\nconst int max_lights = 2;\nuniform bool shadow_uDrawShadowMap;\nuniform bool shadow_uUseShadowMap;\nuniform sampler2D shadow_uShadowMap0;\nuniform sampler2D shadow_uShadowMap1;\nuniform vec4 shadow_uColor;\nuniform float shadow_uLightCount;\n\nvarying vec3 shadow_vPosition[max_lights];\n\nconst vec4 bitPackShift = vec4(1.0, 255.0, 65025.0, 16581375.0);\nconst vec4 bitUnpackShift = 1.0 / bitPackShift;\nconst vec4 bitMask = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n\nfloat shadow_getShadowWeight(vec3 position, sampler2D shadowMap) {\n vec4 rgbaDepth = texture2D(shadowMap, position.xy);\n\n float z = dot(rgbaDepth, bitUnpackShift);\n return smoothstep(0.001, 0.01, position.z - z);\n}\n\nvec4 shadow_filterShadowColor(vec4 color) {\n if (shadow_uDrawShadowMap) {\n vec4 rgbaDepth = fract(gl_FragCoord.z * bitPackShift);\n rgbaDepth -= rgbaDepth.gbaa * bitMask;\n return rgbaDepth;\n }\n if (shadow_uUseShadowMap) {\n float shadowAlpha = 0.0;\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[0], shadow_uShadowMap0);\n if(shadow_uLightCount > 1.0) {\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[1], shadow_uShadowMap1);\n }\n shadowAlpha *= shadow_uColor.a / shadow_uLightCount;\n float blendedAlpha = shadowAlpha + color.a * (1.0 - shadowAlpha);\n\n return vec4(\n mix(color.rgb, shadow_uColor.rgb, shadowAlpha / blendedAlpha),\n blendedAlpha\n );\n }\n return color;\n}\n",inject:{"vs:DECKGL_FILTER_GL_POSITION":"\n position = shadow_setVertexPosition(geometry.position);\n ","fs:DECKGL_FILTER_COLOR":"\n color = shadow_filterShadowColor(color);\n "},getUniforms:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"viewport"in t&&(t.drawToShadowMap||t.shadowMaps&&t.shadowMaps.length>0)?v(t,e):{}}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return p})),n.d(e,"b",(function(){return d}));var r=n(68),i=n(86),o=n(12),a=n(77),s=[0,0,0,0],u=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0],c=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],l=[0,0,0],h=[0,0,0],f=Object(a.a)((function(t){var e=t.viewport,n=t.devicePixelRatio,a=t.coordinateSystem,h=t.coordinateOrigin,f=function(t,e,n){var o=t.viewMatrixUncentered,a=t.projectionMatrix,c=t.viewMatrix,l=t.viewProjectionMatrix,h=s,f=s,d=t.cameraPosition,A=p(t,e,n),g=A.geospatialOrigin,m=A.shaderCoordinateOrigin;A.offsetMode&&(f=t.projectPosition(g||m),d=[d[0]-f[0],d[1]-f[1],d[2]-f[2]],f[3]=1,h=i.b([],f,l),c=o||c,l=r.b([],a,c),l=r.b([],l,u));return{viewMatrix:c,viewProjectionMatrix:l,projectionCenter:h,originCommon:f,cameraPosCommon:d,shaderCoordinateOrigin:m,geospatialOrigin:g}}(e,a,h),d=f.projectionCenter,A=f.viewProjectionMatrix,g=f.originCommon,m=f.cameraPosCommon,y=f.shaderCoordinateOrigin,v=f.geospatialOrigin,_=e.getDistanceScales(),b=[e.width*n,e.height*n],x=i.b([],[0,0,-e.focalDistance,1],e.projectionMatrix)[3]||1,w={project_uCoordinateSystem:a,project_uProjectionMode:e.projectionMode,project_uCoordinateOrigin:y,project_uCommonOrigin:g.slice(0,3),project_uCenter:d,project_uPseudoMeters:Boolean(e._pseudoMeters),project_uViewportSize:b,project_uDevicePixelRatio:n,project_uFocalDistance:x,project_uCommonUnitsPerMeter:_.unitsPerMeter,project_uCommonUnitsPerWorldUnit:_.unitsPerMeter,project_uCommonUnitsPerWorldUnit2:l,project_uScale:e.scale,project_uWrapLongitude:!1,project_uViewProjectionMatrix:A,project_uModelMatrix:c,project_uCameraPosition:m};if(v){var E=e.getDistanceScales(v);switch(a){case o.a.METER_OFFSETS:w.project_uCommonUnitsPerWorldUnit=E.unitsPerMeter,w.project_uCommonUnitsPerWorldUnit2=E.unitsPerMeter2;break;case o.a.LNGLAT:case o.a.LNGLAT_OFFSETS:e._pseudoMeters||(w.project_uCommonUnitsPerMeter=E.unitsPerMeter),w.project_uCommonUnitsPerWorldUnit=E.unitsPerDegree,w.project_uCommonUnitsPerWorldUnit2=E.unitsPerDegree2;break;case o.a.CARTESIAN:w.project_uCommonUnitsPerWorldUnit=[1,1,E.unitsPerMeter[2]],w.project_uCommonUnitsPerWorldUnit2=[0,0,E.unitsPerMeter2[2]]}}return w}));function p(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h;n.length<3&&(n=[n[0],n[1],0]);var r,i=n,a=!0;switch(r=e===o.a.LNGLAT_OFFSETS||e===o.a.METER_OFFSETS?n:t.isGeospatial?[Math.fround(t.longitude),Math.fround(t.latitude),0]:null,t.projectionMode){case o.d.WEB_MERCATOR:e!==o.a.LNGLAT&&e!==o.a.CARTESIAN||(r=[0,0,0],a=!1);break;case o.d.WEB_MERCATOR_AUTO_OFFSET:e===o.a.LNGLAT?i=r:e===o.a.CARTESIAN&&(i=[Math.fround(t.center[0]),Math.fround(t.center[1]),0],r=t.unprojectPosition(i),i[0]-=n[0],i[1]-=n[1],i[2]-=n[2]);break;case o.d.IDENTITY:(i=t.position.map(Math.fround))[2]=i[2]||0;break;case o.d.GLOBE:a=!1,r=null;break;default:a=!1}return{geospatialOrigin:r,shaderCoordinateOrigin:i,offsetMode:a}}function d(t){var e=t.viewport,n=t.devicePixelRatio,r=void 0===n?1:n,i=t.modelMatrix,a=void 0===i?null:i,s=t.coordinateSystem,u=void 0===s?o.a.DEFAULT:s,l=t.coordinateOrigin,p=void 0===l?h:l,d=t.autoWrapLongitude,A=void 0!==d&&d;u===o.a.DEFAULT&&(u=e.isGeospatial?o.a.LNGLAT:o.a.CARTESIAN);var g=f({viewport:e,devicePixelRatio:r,coordinateSystem:u,coordinateOrigin:p});return g.project_uWrapLongitude=A,g.project_uModelMatrix=a||c,g}},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=function(){function t(e,n){i()(this,t),this._viewportProps=this.applyConstraints(e),this._state=n}return a()(t,[{key:"getViewportProps",value:function(){return this._viewportProps}},{key:"getState",value:function(){return this._state}}]),t}()},function(t,e,n){"use strict";n.d(e,"b",(function(){return u})),n.d(e,"a",(function(){return c})),n.d(e,"c",(function(){return l}));var r=n(149),i=n(21),o=n(120),a=n(103);const s="Cannot convert supplied data type";function u(t,e,n){if(e.text&&"string"==typeof t)return t;if(Object(i.c)(t)&&(t=t.buffer),t instanceof ArrayBuffer){const n=t;if(e.text&&!e.binary){return new TextDecoder("utf8").decode(n)}return n}if(ArrayBuffer.isView(t)){if(e.text&&!e.binary){return new TextDecoder("utf8").decode(t)}let n=t.buffer;const r=t.byteLength||t.length;return 0===t.byteOffset&&r===n.byteLength||(n=n.slice(t.byteOffset,t.byteOffset+r)),n}throw new Error(s)}async function c(t,e,n){const c=t instanceof ArrayBuffer||ArrayBuffer.isView(t);if("string"==typeof t||c)return u(t,e);if(Object(i.b)(t)&&(t=await Object(a.b)(t)),Object(i.j)(t)){const n=t;return await Object(a.a)(n),e.binary?await n.arrayBuffer():await n.text()}if(Object(i.i)(t)&&(t=Object(o.a)(t,n)),Object(i.d)(t)||Object(i.a)(t))return Object(r.a)(t);throw new Error(s)}async function l(t,e){if(Object(i.e)(t))return t;if(Object(i.j)(t)){const n=t;await Object(a.a)(n);const r=await n.body;return Object(o.a)(r,e)}return Object(i.b)(t)||Object(i.i)(t)?Object(o.a)(t,e):Object(i.a)(t)?t[Symbol.asyncIterator]():function(t){if(ArrayBuffer.isView(t))return function*(){yield t.buffer}();if(t instanceof ArrayBuffer)return function*(){yield t}();if(Object(i.e)(t))return t;if(Object(i.d)(t))return t[Symbol.iterator]();throw new Error(s)}(t)}},function(t,e,n){"use strict";const r=262144;var i=n(69),o=n(83);function a(t,e){return i.c?async function*(t,e){const n=t.getReader();let r;try{for(;;){const t=r||n.read();null!=e&&e._streamReadAhead&&(r=n.read());const{done:i,value:a}=await t;if(i)return;yield Object(o.d)(a)}}catch(t){n.releaseLock()}}(t,e):async function*(t,e){for await(const e of t)yield Object(o.d)(e)}(t)}var s=n(21);function u(t,e){if("string"==typeof t)return function*(t,e){const n=(null==e?void 0:e.chunkSize)||262144;let r=0;const i=new TextEncoder;for(;r - * Released under the Apache License, Version 2.0 - * see: https://github.com/dcodeIO/long.js for details - */i=[],void 0===(o="function"==typeof(r=function(){"use strict";function t(t,e,n){this.low=0|t,this.high=0|e,this.unsigned=!!n}function e(t){return!0===(t&&t.__isLong__)}t.prototype.__isLong__,Object.defineProperty(t.prototype,"__isLong__",{value:!0,enumerable:!1,configurable:!1}),t.isLong=e;var n={},r={};function i(t,e){var i,o,s;return e?(s=0<=(t>>>=0)&&t<256)&&(o=r[t])?o:(i=a(t,(0|t)<0?-1:0,!0),s&&(r[t]=i),i):(s=-128<=(t|=0)&&t<128)&&(o=n[t])?o:(i=a(t,t<0?-1:0,!1),s&&(n[t]=i),i)}function o(t,e){if(isNaN(t)||!isFinite(t))return e?A:d;if(e){if(t<0)return A;if(t>=h)return _}else{if(t<=-f)return b;if(t+1>=f)return v}return t<0?o(-t,e).neg():a(t%l|0,t/l|0,e)}function a(e,n,r){return new t(e,n,r)}t.fromInt=i,t.fromNumber=o,t.fromBits=a;var s=Math.pow;function u(t,e,n){if(0===t.length)throw Error("empty string");if("NaN"===t||"Infinity"===t||"+Infinity"===t||"-Infinity"===t)return d;if("number"==typeof e?(n=e,e=!1):e=!!e,(n=n||10)<2||360)throw Error("interior hyphen");if(0===r)return u(t.substring(1),e,n).neg();for(var i=o(s(n,8)),a=d,c=0;c>>0:this.low},x.toNumber=function(){return this.unsigned?(this.high>>>0)*l+(this.low>>>0):this.high*l+(this.low>>>0)},x.toString=function(t){if((t=t||10)<2||36>>0).toString(t);if((a=c).isZero())return l+u;for(;l.length<6;)l="0"+l;u=""+l+u}},x.getHighBits=function(){return this.high},x.getHighBitsUnsigned=function(){return this.high>>>0},x.getLowBits=function(){return this.low},x.getLowBitsUnsigned=function(){return this.low>>>0},x.getNumBitsAbs=function(){if(this.isNegative())return this.eq(b)?64:this.neg().getNumBitsAbs();for(var t=0!=this.high?this.high:this.low,e=31;e>0&&0==(t&1<=0},x.isOdd=function(){return 1==(1&this.low)},x.isEven=function(){return 0==(1&this.low)},x.equals=function(t){return e(t)||(t=c(t)),(this.unsigned===t.unsigned||this.high>>>31!=1||t.high>>>31!=1)&&this.high===t.high&&this.low===t.low},x.eq=x.equals,x.notEquals=function(t){return!this.eq(t)},x.neq=x.notEquals,x.lessThan=function(t){return this.comp(t)<0},x.lt=x.lessThan,x.lessThanOrEqual=function(t){return this.comp(t)<=0},x.lte=x.lessThanOrEqual,x.greaterThan=function(t){return this.comp(t)>0},x.gt=x.greaterThan,x.greaterThanOrEqual=function(t){return this.comp(t)>=0},x.gte=x.greaterThanOrEqual,x.compare=function(t){if(e(t)||(t=c(t)),this.eq(t))return 0;var n=this.isNegative(),r=t.isNegative();return n&&!r?-1:!n&&r?1:this.unsigned?t.high>>>0>this.high>>>0||t.high===this.high&&t.low>>>0>this.low>>>0?-1:1:this.sub(t).isNegative()?-1:1},x.comp=x.compare,x.negate=function(){return!this.unsigned&&this.eq(b)?b:this.not().add(g)},x.neg=x.negate,x.add=function(t){e(t)||(t=c(t));var n=this.high>>>16,r=65535&this.high,i=this.low>>>16,o=65535&this.low,s=t.high>>>16,u=65535&t.high,l=t.low>>>16,h=0,f=0,p=0,d=0;return p+=(d+=o+(65535&t.low))>>>16,f+=(p+=i+l)>>>16,h+=(f+=r+u)>>>16,h+=n+s,a((p&=65535)<<16|(d&=65535),(h&=65535)<<16|(f&=65535),this.unsigned)},x.subtract=function(t){return e(t)||(t=c(t)),this.add(t.neg())},x.sub=x.subtract,x.multiply=function(t){if(this.isZero())return d;if(e(t)||(t=c(t)),t.isZero())return d;if(this.eq(b))return t.isOdd()?b:d;if(t.eq(b))return this.isOdd()?b:d;if(this.isNegative())return t.isNegative()?this.neg().mul(t.neg()):this.neg().mul(t).neg();if(t.isNegative())return this.mul(t.neg()).neg();if(this.lt(p)&&t.lt(p))return o(this.toNumber()*t.toNumber(),this.unsigned);var n=this.high>>>16,r=65535&this.high,i=this.low>>>16,s=65535&this.low,u=t.high>>>16,l=65535&t.high,h=t.low>>>16,f=65535&t.low,A=0,g=0,m=0,y=0;return m+=(y+=s*f)>>>16,g+=(m+=i*f)>>>16,m&=65535,g+=(m+=s*h)>>>16,A+=(g+=r*f)>>>16,g&=65535,A+=(g+=i*h)>>>16,g&=65535,A+=(g+=s*l)>>>16,A+=n*f+r*h+i*l+s*u,a((m&=65535)<<16|(y&=65535),(A&=65535)<<16|(g&=65535),this.unsigned)},x.mul=x.multiply,x.divide=function(t){if(e(t)||(t=c(t)),t.isZero())throw Error("division by zero");if(this.isZero())return this.unsigned?A:d;var n,r,i;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return A;if(t.gt(this.shru(1)))return m;i=A}else{if(this.eq(b))return t.eq(g)||t.eq(y)?b:t.eq(b)?g:(n=this.shr(1).div(t).shl(1)).eq(d)?t.isNegative()?g:y:(r=this.sub(t.mul(n)),i=n.add(r.div(t)));if(t.eq(b))return this.unsigned?A:d;if(this.isNegative())return t.isNegative()?this.neg().div(t.neg()):this.neg().div(t).neg();if(t.isNegative())return this.div(t.neg()).neg();i=d}for(r=this;r.gte(t);){n=Math.max(1,Math.floor(r.toNumber()/t.toNumber()));for(var a=Math.ceil(Math.log(n)/Math.LN2),u=a<=48?1:s(2,a-48),l=o(n),h=l.mul(t);h.isNegative()||h.gt(r);)h=(l=o(n-=u,this.unsigned)).mul(t);l.isZero()&&(l=g),i=i.add(l),r=r.sub(h)}return i},x.div=x.divide,x.modulo=function(t){return e(t)||(t=c(t)),this.sub(this.div(t).mul(t))},x.mod=x.modulo,x.not=function(){return a(~this.low,~this.high,this.unsigned)},x.and=function(t){return e(t)||(t=c(t)),a(this.low&t.low,this.high&t.high,this.unsigned)},x.or=function(t){return e(t)||(t=c(t)),a(this.low|t.low,this.high|t.high,this.unsigned)},x.xor=function(t){return e(t)||(t=c(t)),a(this.low^t.low,this.high^t.high,this.unsigned)},x.shiftLeft=function(t){return e(t)&&(t=t.toInt()),0==(t&=63)?this:t<32?a(this.low<>>32-t,this.unsigned):a(0,this.low<>>t|this.high<<32-t,this.high>>t,this.unsigned):a(this.high>>t-32,this.high>=0?0:-1,this.unsigned)},x.shr=x.shiftRight,x.shiftRightUnsigned=function(t){if(e(t)&&(t=t.toInt()),0==(t&=63))return this;var n=this.high;return t<32?a(this.low>>>t|n<<32-t,n>>>t,this.unsigned):a(32===t?n:n>>>t-32,0,this.unsigned)},x.shru=x.shiftRightUnsigned,x.toSigned=function(){return this.unsigned?a(this.low,this.high,!1):this},x.toUnsigned=function(){return this.unsigned?this:a(this.low,this.high,!0)},x.toBytes=function(t){return t?this.toBytesLE():this.toBytesBE()},x.toBytesLE=function(){var t=this.high,e=this.low;return[255&e,e>>>8&255,e>>>16&255,e>>>24&255,255&t,t>>>8&255,t>>>16&255,t>>>24&255]},x.toBytesBE=function(){var t=this.high,e=this.low;return[t>>>24&255,t>>>16&255,t>>>8&255,255&t,e>>>24&255,e>>>16&255,e>>>8&255,255&e]},t})?r.apply(e,i):r)||(t.exports=o)},function(t,e,n){"use strict";n.d(e,"a",(function(){return f})),n.d(e,"b",(function(){return p}));var r=n(50),i=n(12);function o(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return a(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,u=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){u=!0,o=t},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw o}}}}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:o;Object(i.b)(t)}function s(){for(var t=0,e=["mapboxgl-missing-css"];t{};class f{static isSupported(){return"undefined"!=typeof Worker&&i.b||void 0!==o&&!i.b}constructor(t){Object(r.a)(this,"name",void 0),Object(r.a)(this,"source",void 0),Object(r.a)(this,"url",void 0),Object(r.a)(this,"terminated",!1),Object(r.a)(this,"worker",void 0),Object(r.a)(this,"onMessage",void 0),Object(r.a)(this,"onError",void 0),Object(r.a)(this,"_loadableURL","");const{name:e,source:n,url:o}=t;Object(a.a)(n||o),this.name=e,this.source=n,this.url=o,this.onMessage=h,this.onError=t=>console.log(t),this.worker=i.b?this._createBrowserWorker():this._createNodeWorker()}destroy(){this.onMessage=h,this.onError=h,this.worker.terminate(),this.terminated=!0}get isRunning(){return Boolean(this.onMessage)}postMessage(t,e){e=e||Object(l.a)(t),this.worker.postMessage(t,e)}_getErrorFromErrorEvent(t){let e="Failed to load ";return e+="worker ".concat(this.name," from ").concat(this.url,". "),t.message&&(e+="".concat(t.message," in ")),t.lineno&&(e+=":".concat(t.lineno,":").concat(t.colno)),new Error(e)}_createBrowserWorker(){this._loadableURL=u({source:this.source,url:this.url});const t=new Worker(this._loadableURL,{name:this.name});return t.onmessage=t=>{t.data?this.onMessage(t.data):this.onError(new Error("No data received"))},t.onerror=t=>{this.onError(this._getErrorFromErrorEvent(t)),this.terminated=!0},t.onmessageerror=t=>console.error(t),t}_createNodeWorker(){let t;if(this.url){const e=this.url.includes(":/")||this.url.startsWith("/")?this.url:"./".concat(this.url);t=new o(e,{eval:!1})}else{if(!this.source)throw new Error("no worker");t=new o(this.source,{eval:!0})}return t.on("message",t=>{this.onMessage(t)}),t.on("error",t=>{this.onError(t)}),t.on("exit",t=>{}),t}}class p{constructor(t,e){Object(r.a)(this,"name",void 0),Object(r.a)(this,"workerThread",void 0),Object(r.a)(this,"isRunning",!0),Object(r.a)(this,"result",void 0),Object(r.a)(this,"_resolve",()=>{}),Object(r.a)(this,"_reject",()=>{}),this.name=t,this.workerThread=e,this.result=new Promise((t,e)=>{this._resolve=t,this._reject=e})}postMessage(t,e){this.workerThread.postMessage({source:"loaders.gl",type:t,payload:e})}done(t){Object(a.a)(this.isRunning),this.isRunning=!1,this._resolve(t)}error(t){Object(a.a)(this.isRunning),this.isRunning=!1,this._reject(t)}}class d{static isSupported(){return f.isSupported()}constructor(t){Object(r.a)(this,"name","unnamed"),Object(r.a)(this,"source",void 0),Object(r.a)(this,"url",void 0),Object(r.a)(this,"maxConcurrency",1),Object(r.a)(this,"maxMobileConcurrency",1),Object(r.a)(this,"onDebug",()=>{}),Object(r.a)(this,"reuseWorkers",!0),Object(r.a)(this,"props",{}),Object(r.a)(this,"jobQueue",[]),Object(r.a)(this,"idleQueue",[]),Object(r.a)(this,"count",0),Object(r.a)(this,"isDestroyed",!1),this.source=t.source,this.url=t.url,this.setProps(t)}destroy(){this.idleQueue.forEach(t=>t.destroy()),this.isDestroyed=!0}setProps(t){this.props={...this.props,...t},void 0!==t.name&&(this.name=t.name),void 0!==t.maxConcurrency&&(this.maxConcurrency=t.maxConcurrency),void 0!==t.maxMobileConcurrency&&(this.maxMobileConcurrency=t.maxMobileConcurrency),void 0!==t.reuseWorkers&&(this.reuseWorkers=t.reuseWorkers),void 0!==t.onDebug&&(this.onDebug=t.onDebug)}async startJob(t,e=((t,e,n)=>t.done(n)),n=((t,e)=>t.error(e))){const r=new Promise(r=>(this.jobQueue.push({name:t,onMessage:e,onError:n,onStart:r}),this));return this._startQueuedJob(),await r}async _startQueuedJob(){if(!this.jobQueue.length)return;const t=this._getAvailableWorker();if(!t)return;const e=this.jobQueue.shift();if(e){this.onDebug({message:"Starting job",name:e.name,workerThread:t,backlog:this.jobQueue.length});const n=new p(e.name,t);t.onMessage=t=>e.onMessage(n,t.type,t.payload),t.onError=t=>e.onError(n,t),e.onStart(n);try{await n.result}finally{this.returnWorkerToQueue(t)}}}returnWorkerToQueue(t){this.isDestroyed||!this.reuseWorkers||this.count>this._getMaxConcurrency()?(t.destroy(),this.count--):this.idleQueue.push(t),this.isDestroyed||this._startQueuedJob()}_getAvailableWorker(){if(this.idleQueue.length>0)return this.idleQueue.shift()||null;if(this.count{}};class g{static isSupported(){return f.isSupported()}static getWorkerFarm(t={}){return g._workerFarm=g._workerFarm||new g({}),g._workerFarm.setProps(t),g._workerFarm}constructor(t){Object(r.a)(this,"props",void 0),Object(r.a)(this,"workerPools",new Map),this.props={...A},this.setProps(t),this.workerPools=new Map}destroy(){for(const t of this.workerPools.values())t.destroy();this.workerPools=new Map}setProps(t){this.props={...this.props,...t};for(const t of this.workerPools.values())t.setProps(this._getWorkerPoolProps())}getWorkerPool(t){const{name:e,source:n,url:r}=t;let i=this.workerPools.get(e);return i||(i=new d({name:e,source:n,url:r}),i.setProps(this._getWorkerPoolProps()),this.workerPools.set(e,i)),i}_getWorkerPoolProps(){return{maxConcurrency:this.props.maxConcurrency,maxMobileConcurrency:this.props.maxMobileConcurrency,reuseWorkers:this.props.reuseWorkers,onDebug:this.props.onDebug}}}Object(r.a)(g,"_workerFarm",void 0)},function(t,e,n){"use strict";async function*r(t,e={}){const n=new TextDecoder(void 0,e);for await(const e of t)yield"string"==typeof e?e:n.decode(e,{stream:!0})}async function*i(t){const e=new TextEncoder;for await(const n of t)yield"string"==typeof n?e.encode(n):n}async function*o(t){let e="";for await(const n of t){let t;for(e+=n;(t=e.indexOf("\n"))>=0;){const n=e.slice(0,t+1);e=e.slice(t+1),yield n}}e.length>0&&(yield e)}async function*a(t){let e=1;for await(const n of t)yield{counter:e,line:n},e++}n.d(e,"c",(function(){return r})),n.d(e,"d",(function(){return i})),n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return a}))},function(t,e,n){"use strict";function r(t,e=5){if("string"==typeof t)return t.slice(0,e);if(ArrayBuffer.isView(t))return i(t.buffer,t.byteOffset,e);if(t instanceof ArrayBuffer){return i(t,0,e)}return""}function i(t,e,n){if(t.byteLength<=e+n)return"";const r=new DataView(t);let i="";for(let t=0;t=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function R(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{};for(var n in i()(this,t),u()(this,"id","lighting-effect"),u()(this,"props",null),u()(this,"shadowColor",D),u()(this,"ambientLight",null),u()(this,"directionalLights",[]),u()(this,"pointLights",[]),u()(this,"shadowPasses",[]),u()(this,"shadowMaps",[]),u()(this,"dummyShadowMap",null),e){var r=e[n];switch(r.type){case"ambient":this.ambientLight=r;break;case"directional":this.directionalLights.push(r);break;case"point":this.pointLights.push(r)}}this._applyDefaultLights(),this.shadow=this.directionalLights.some((function(t){return t.shadow}))}return a()(t,[{key:"preRender",value:function(t,e){var n=e.layers,r=e.layerFilter,i=e.viewports,o=e.onViewportActive,a=e.views;if(this.shadow){this.shadowMatrices=this._calculateMatrices(),0===this.shadowPasses.length&&this._createShadowPasses(t),this.programManager||(this.programManager=c.a.getDefaultProgramManager(t),I.a&&this.programManager.addDefaultModule(I.a)),this.dummyShadowMap||(this.dummyShadowMap=new l.a(t,{width:1,height:1}));for(var s=0;s2&&void 0!==arguments[2]&&arguments[2],r=e.projectPosition(t);if(n&&e instanceof s.a){var o=i()(t,3),a=o[0],u=o[1],c=o[2],l=void 0===c?0:c,h=e.getDistanceScales([a,u]);r[2]=l*h.unitsPerMeter[2]}return r}function f(t,e){var n=e.viewport,r=e.modelMatrix,a=e.coordinateSystem,s=e.coordinateOrigin,c=e.offsetMode,f=i()(t,3),p=f[0],d=f[1],A=f[2],g=void 0===A?0:A;if(r){var m=u.b([],[p,d,g,1],r),y=i()(m,3);p=y[0],d=y[1],g=y[2]}switch(a){case o.a.LNGLAT:return h([p,d,g],n,c);case o.a.LNGLAT_OFFSETS:return h([p+s[0],d+s[1],g+(s[2]||0)],n,c);case o.a.METER_OFFSETS:return h(Object(l.a)(s,[p,d,g]),n,c);case o.a.CARTESIAN:default:return n.isGeospatial?[p+s[0],d+s[1],g+s[2]]:n.projectPosition([p,d,g])}}function p(t,e){var n=function(t){var e=t.viewport,n=t.modelMatrix,r=t.coordinateOrigin,i=t.coordinateSystem,a=t.fromCoordinateSystem,s=t.fromCoordinateOrigin;return i===o.a.DEFAULT&&(i=e.isGeospatial?o.a.LNGLAT:o.a.CARTESIAN),void 0===a&&(a=i),void 0===s&&(s=r),{viewport:e,coordinateSystem:i,coordinateOrigin:r,modelMatrix:n,fromCoordinateSystem:a,fromCoordinateOrigin:s}}(e),r=n.viewport,i=n.coordinateSystem,s=n.coordinateOrigin,u=n.modelMatrix,l=n.fromCoordinateSystem,h=n.fromCoordinateOrigin,p=Object(a.a)(r,i,s),d=p.geospatialOrigin,A=p.shaderCoordinateOrigin,g=p.offsetMode,m=f(t,{viewport:r,modelMatrix:u,coordinateSystem:l,coordinateOrigin:h,offsetMode:g});if(g){var y=r.projectPosition(d||A);c.d(m,m,y)}return m}},function(t,e,n){"use strict";var r="#if (defined(SHADER_TYPE_FRAGMENT) && defined(LIGHTING_FRAGMENT)) || (defined(SHADER_TYPE_VERTEX) && defined(LIGHTING_VERTEX))\n\nstruct AmbientLight {\n vec3 color;\n};\n\nstruct PointLight {\n vec3 color;\n vec3 position;\n vec3 attenuation;\n};\n\nstruct DirectionalLight {\n vec3 color;\n vec3 direction;\n};\n\nuniform AmbientLight lighting_uAmbientLight;\nuniform PointLight lighting_uPointLight[MAX_LIGHTS];\nuniform DirectionalLight lighting_uDirectionalLight[MAX_LIGHTS];\nuniform int lighting_uPointLightCount;\nuniform int lighting_uDirectionalLightCount;\n\nuniform bool lighting_uEnabled;\n\nfloat getPointLightAttenuation(PointLight pointLight, float distance) {\n return pointLight.attenuation.x\n + pointLight.attenuation.y * distance\n + pointLight.attenuation.z * distance * distance;\n}\n\n#endif\n";n.d(e,"a",(function(){return s}));const i={lightSources:{}};function o(){let{color:t=[0,0,0],intensity:e=1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t.map(t=>t*e/255)}function a(t){let{ambientLight:e,pointLights:n=[],directionalLights:r=[]}=t;const i={};return i["lighting_uAmbientLight.color"]=e?o(e):[0,0,0],n.forEach((t,e)=>{i["lighting_uPointLight[".concat(e,"].color")]=o(t),i["lighting_uPointLight[".concat(e,"].position")]=t.position,i["lighting_uPointLight[".concat(e,"].attenuation")]=t.attenuation||[1,0,0]}),i.lighting_uPointLightCount=n.length,r.forEach((t,e)=>{i["lighting_uDirectionalLight[".concat(e,"].color")]=o(t),i["lighting_uDirectionalLight[".concat(e,"].direction")]=t.direction}),i.lighting_uDirectionalLightCount=r.length,i}const s={name:"lights",vs:r,fs:r,getUniforms:function t(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i;if("lightSources"in e){const{ambientLight:t,pointLights:n,directionalLights:r}=e.lightSources||{};return t||n&&n.length>0||r&&r.length>0?Object.assign({},a({ambientLight:t,pointLights:n,directionalLights:r}),{lighting_uEnabled:!0}):{lighting_uEnabled:!1}}if("lights"in e){const n={pointLights:[],directionalLights:[]};for(const t of e.lights||[])switch(t.type){case"ambient":n.ambientLight=t;break;case"directional":n.directionalLights.push(t);break;case"point":n.pointLights.push(t)}return t({lightSources:n})}return{}},defines:{MAX_LIGHTS:3}}},function(t,e,n){var r; -/*! Hammer.JS - v2.0.7 - 2016-04-22 - * http://hammerjs.github.io/ - * - * Copyright (c) 2016 Jorik Tangelder; - * Licensed under the MIT license */!function(i,o,a,s){"use strict";var u,c=["","webkit","Moz","MS","ms","o"],l=o.createElement("div"),h=Math.round,f=Math.abs,p=Date.now;function d(t,e,n){return setTimeout(b(t,n),e)}function A(t,e,n){return!!Array.isArray(t)&&(g(t,n[e],n),!0)}function g(t,e,n){var r;if(t)if(t.forEach)t.forEach(e,n);else if(void 0!==t.length)for(r=0;r\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",o=i.console&&(i.console.warn||i.console.log);return o&&o.call(i.console,r,n),t.apply(this,arguments)}}u="function"!=typeof Object.assign?function(t){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n-1}function C(t){return t.trim().split(/\s+/g)}function P(t,e,n){if(t.indexOf&&!n)return t.indexOf(e);for(var r=0;rn[e]})):r.sort()),r}function B(t,e){for(var n,r,i=e[0].toUpperCase()+e.slice(1),o=0;o1&&!n.firstMultiple?n.firstMultiple=G(e):1===i&&(n.firstMultiple=!1);var o=n.firstInput,a=n.firstMultiple,s=a?a.center:o.center,u=e.center=V(r);e.timeStamp=p(),e.deltaTime=e.timeStamp-o.timeStamp,e.angle=X(s,u),e.distance=q(s,u),function(t,e){var n=e.center,r=t.offsetDelta||{},i=t.prevDelta||{},o=t.prevInput||{};1!==e.eventType&&4!==o.eventType||(i=t.prevDelta={x:o.deltaX||0,y:o.deltaY||0},r=t.offsetDelta={x:n.x,y:n.y});e.deltaX=i.x+(n.x-r.x),e.deltaY=i.y+(n.y-r.y)}(n,e),e.offsetDirection=W(e.deltaX,e.deltaY);var c=H(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=f(c.x)>f(c.y)?c.x:c.y,e.scale=a?(l=a.pointers,h=r,q(h[0],h[1],z)/q(l[0],l[1],z)):1,e.rotation=a?function(t,e){return X(e[1],e[0],z)+X(t[1],t[0],z)}(a.pointers,r):0,e.maxPointers=n.prevInput?e.pointers.length>n.prevInput.maxPointers?e.pointers.length:n.prevInput.maxPointers:e.pointers.length,function(t,e){var n,r,i,o,a=t.lastInterval||e,s=e.timeStamp-a.timeStamp;if(8!=e.eventType&&(s>25||void 0===a.velocity)){var u=e.deltaX-a.deltaX,c=e.deltaY-a.deltaY,l=H(s,u,c);r=l.x,i=l.y,n=f(l.x)>f(l.y)?l.x:l.y,o=W(u,c),t.lastInterval=e}else n=a.velocity,r=a.velocityX,i=a.velocityY,o=a.direction;e.velocity=n,e.velocityX=r,e.velocityY=i,e.direction=o}(n,e);var l,h;var d=t.element;S(e.srcEvent.target,d)&&(d=e.srcEvent.target);e.target=d}(t,n),t.emit("hammer.input",n),t.recognize(n),t.session.prevInput=n}function G(t){for(var e=[],n=0;n=f(e)?t<0?2:4:e<0?8:16}function q(t,e,n){n||(n=F);var r=e[n[0]]-t[n[0]],i=e[n[1]]-t[n[1]];return Math.sqrt(r*r+i*i)}function X(t,e,n){n||(n=F);var r=e[n[0]]-t[n[0]],i=e[n[1]]-t[n[1]];return 180*Math.atan2(i,r)/Math.PI}U.prototype={handler:function(){},init:function(){this.evEl&&E(this.element,this.evEl,this.domHandler),this.evTarget&&E(this.target,this.evTarget,this.domHandler),this.evWin&&E(k(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&O(this.element,this.evEl,this.domHandler),this.evTarget&&O(this.target,this.evTarget,this.domHandler),this.evWin&&O(k(this.element),this.evWin,this.domHandler)}};var J={mousedown:1,mousemove:2,mouseup:4};function Z(){this.evEl="mousedown",this.evWin="mousemove mouseup",this.pressed=!1,U.apply(this,arguments)}_(Z,U,{handler:function(t){var e=J[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:"mouse",srcEvent:t}))}});var Q={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},K={2:"touch",3:"pen",4:"mouse",5:"kinect"},Y="pointerdown",$="pointermove pointerup pointercancel";function tt(){this.evEl=Y,this.evWin=$,U.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}i.MSPointerEvent&&!i.PointerEvent&&(Y="MSPointerDown",$="MSPointerMove MSPointerUp MSPointerCancel"),_(tt,U,{handler:function(t){var e=this.store,n=!1,r=t.type.toLowerCase().replace("ms",""),i=Q[r],o=K[t.pointerType]||t.pointerType,a="touch"==o,s=P(e,t.pointerId,"pointerId");1&i&&(0===t.button||a)?s<0&&(e.push(t),s=e.length-1):12&i&&(n=!0),s<0||(e[s]=t,this.callback(this.manager,i,{pointers:e,changedPointers:[t],pointerType:o,srcEvent:t}),n&&e.splice(s,1))}});var et={touchstart:1,touchmove:2,touchend:4,touchcancel:8};function nt(){this.evTarget="touchstart",this.evWin="touchstart touchmove touchend touchcancel",this.started=!1,U.apply(this,arguments)}function rt(t,e){var n=M(t.touches),r=M(t.changedTouches);return 12&e&&(n=I(n.concat(r),"identifier",!0)),[n,r]}_(nt,U,{handler:function(t){var e=et[t.type];if(1===e&&(this.started=!0),this.started){var n=rt.call(this,t,e);12&e&&n[0].length-n[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:n[0],changedPointers:n[1],pointerType:"touch",srcEvent:t})}}});var it={touchstart:1,touchmove:2,touchend:4,touchcancel:8};function ot(){this.evTarget="touchstart touchmove touchend touchcancel",this.targetIds={},U.apply(this,arguments)}function at(t,e){var n=M(t.touches),r=this.targetIds;if(3&e&&1===n.length)return r[n[0].identifier]=!0,[n,n];var i,o,a=M(t.changedTouches),s=[],u=this.target;if(o=n.filter((function(t){return S(t.target,u)})),1===e)for(i=0;i-1&&r.splice(t,1)}),2500)}}function lt(t){for(var e=t.srcEvent.clientX,n=t.srcEvent.clientY,r=0;r-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){var e=this,n=this.state;function r(n){e.manager.emit(n,t)}n<8&&r(e.options.event+gt(n)),r(e.options.event),t.additionalEvent&&r(t.additionalEvent),n>=8&&r(e.options.event+gt(n))},tryEmit:function(t){if(this.canEmit())return this.emit(t);this.state=32},canEmit:function(){for(var t=0;te.threshold&&i&e.direction},attrTest:function(t){return vt.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=mt(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),_(bt,vt,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return["none"]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||2&this.state)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),_(xt,At,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return["auto"]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,r=t.distancee.time;if(this._input=t,!r||!n||12&t.eventType&&!i)this.reset();else if(1&t.eventType)this.reset(),this._timer=d((function(){this.state=8,this.tryEmit()}),e.time,this);else if(4&t.eventType)return 8;return 32},reset:function(){clearTimeout(this._timer)},emit:function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=p(),this.manager.emit(this.options.event,this._input)))}}),_(wt,vt,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return["none"]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||2&this.state)}}),_(Et,vt,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:30,pointers:1},getTouchAction:function(){return _t.prototype.getTouchAction.call(this)},attrTest:function(t){var e,n=this.options.direction;return 30&n?e=t.overallVelocity:6&n?e=t.overallVelocityX:24&n&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&n&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&f(e)>this.options.velocity&&4&t.eventType},emit:function(t){var e=mt(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),_(Ot,At,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return["manipulation"]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,r=t.distance=0),Object(r.a)(e>0),t+(e-1)&~(e-1)}function o(t,e,n){let r;if(t instanceof ArrayBuffer)r=new Uint8Array(t);else{const e=t.byteOffset,n=t.byteLength;r=new Uint8Array(t.buffer||t.arrayBuffer,e,n)}return e.set(r,n),n+i(r.byteLength,4)}},function(t,e,n){"use strict";n.r(e);var r=n(219);n.d(e,"SimpleMeshLayer",(function(){return r.a}));var i=n(214);n.d(e,"ScenegraphLayer",(function(){return i.a}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return c}));var r=n(3),i=n.n(r),o=n(0),a=n.n(o),s=[255,255,255],u=0,c=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i()(this,t),a()(this,"type","ambient");var n=e.color,r=void 0===n?s:n,o=e.intensity,c=void 0===o?1:o;this.id=e.id||"ambient-".concat(u++),this.color=r,this.intensity=c}},function(t,e,n){"use strict";n.d(e,"a",(function(){return v}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(5),u=n.n(s),c=n(6),l=n.n(c),h=n(2),f=n.n(h),p=n(0),d=n.n(p),A=n(57),g=n(84),m=n(108);function y(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=f()(t);if(e){var i=f()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return l()(this,n)}}var v=function(t){u()(n,t);var e=y(n);function n(){return i()(this,n),e.apply(this,arguments)}return a()(n,[{key:"ViewportType",get:function(){return g.a}},{key:"ControllerType",get:function(){return m.b}}]),n}(A.a);d()(v,"displayName","MapView")},function(t,e,n){"use strict";n.d(e,"a",(function(){return p})),n.d(e,"b",(function(){return g}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(0),u=n.n(s),c=n(72);function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function h(t){for(var e=1;e0||"auto"===e)&&Boolean(n)}},{key:"_isUpdateDueToCurrentTransition",value:function(t){return!(!this.transition.inProgress||!this.propsInTransition)&&this.transition.settings.interpolator.arePropsEqual(t,this.propsInTransition)}},{key:"_shouldIgnoreViewportChange",value:function(t,e){return this.transition.inProgress?this.transition.settings.interruption===p.IGNORE||this._isUpdateDueToCurrentTransition(e):!this._isTransitionEnabled(e)||e.transitionInterpolator.arePropsEqual(t,e)}},{key:"_triggerTransition",value:function(t,e){var n=this.getControllerState(t),r=this.getControllerState(e).shortestPathFrom(n),i=e.transitionInterpolator,o=i.getDuration?i.getDuration(t,e):e.transitionDuration;if(0!==o){var a=i.initializeProps(t,r);this.propsInTransition={};var s={duration:o,easing:e.transitionEasing||d,interpolator:i,interruption:e.transitionInterruption||A,startProps:a.start,endProps:a.end,onStart:e.onTransitionStart,onUpdate:this._onTransitionUpdate,onInterrupt:this._onTransitionEnd(e.onTransitionInterrupt),onEnd:this._onTransitionEnd(e.onTransitionEnd)};this.transition.start(s),this.onStateChange({inTransition:!0}),this.updateTransition()}}},{key:"_onTransitionEnd",value:function(t){var e=this;return function(n){e.propsInTransition=null,e.onStateChange({inTransition:!1,isZooming:!1,isPanning:!1,isRotating:!1}),null==t||t(n)}}}]),t}()},function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));const r="3.2.10"},function(t,e,n){"use strict";n.d(e,"b",(function(){return i})),n.d(e,"a",(function(){return o}));var r=n(83);async function i(t,e){for(;;){const{done:n,value:r}=await t.next();if(n)return void t.return();if(e(r))return}}async function o(t){const e=[];for await(const n of t)e.push(n);return Object(r.b)(...e)}},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(195);function i(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return o(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){u=!0,a=t},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw a}}}}function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);ni&&(a+=i-f),l+=a,h+=a}return[l,h]}return Object(v.a)(n+a,o,i)}}]),n}(b.a),O=function(t){d()(n,t);var e=w(n);function n(){var t;l()(this,n);for(var r=arguments.length,o=new Array(r),s=0;s=0&&n.modules.splice(r,1)}if("inject"in e)if(t.inject){var i=a({},t.inject);for(var o in e.inject)i[o]=(i[o]||"")+e.inject[o];n.inject=i}else n.inject=e.inject;return n}},function(t,e,n){"use strict";n.d(e,"a",(function(){return C}));var r=n(9),i=n.n(r),o=n(0),a=n.n(o),s=n(3),u=n.n(s),c=n(4),l=n.n(c),h=n(5),f=n.n(h),p=n(6),d=n.n(p),A=n(2),g=n.n(A),m=n(75),y=n(41),v=n(12),_=n(80),b=n(86);function x(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function w(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};u()(this,n);var i=r.latitude,o=void 0===i?0:i,a=r.longitude,s=void 0===a?0:a,c=r.zoom,l=void 0===c?0:c,h=r.nearZMultiplier,f=void 0===h?.1:h,p=r.farZMultiplier,d=void 0===p?2:p,A=r.resolution,g=void 0===A?10:A,y=r.height,v=r.altitude,_=void 0===v?1.5:v;y=y||1,_=Math.max(.75,_);var b=(new m.a).lookAt({eye:[0,-_,0],up:[0,0,1]}),x=Math.pow(2,l);b.rotateX(o*O),b.rotateZ(-s*O),b.scale(x/y);var E=Math.atan(.5/_),S=512*x/y;return(t=e.call(this,w(w({},r),{},{height:y,viewMatrix:b,longitude:s,latitude:o,zoom:l,distanceScales:T(),fovyRadians:2*E,focalDistance:_,near:f,far:Math.min(2,1/S+1)*_*d}))).latitude=o,t.longitude=s,t.resolution=g,t}return l()(n,[{key:"projectionMode",get:function(){return v.d.GLOBE}},{key:"getDistanceScales",value:function(){return this.distanceScales}},{key:"getBounds",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e={targetZ:t.z||0},n=this.unproject([0,this.height/2],e),r=this.unproject([this.width/2,0],e),i=this.unproject([this.width,this.height/2],e),o=this.unproject([this.width/2,this.height],e);return i[0]this.longitude&&(n[0]-=360),[Math.min(n[0],i[0],r[0],o[0]),Math.min(n[1],i[1],r[1],o[1]),Math.max(n[0],i[0],r[0],o[0]),Math.max(n[1],i[1],r[1],o[1])]}},{key:"unproject",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.topLeft,o=void 0===r||r,a=n.targetZ,s=i()(t,3),u=s[0],c=s[1],l=s[2],h=o?c:this.height-c,f=this.pixelUnprojectionMatrix;if(Number.isFinite(l))e=P(f,[u,h,l,1]);else{var p=P(f,[u,h,-1,1]),d=P(f,[u,h,1,1]),A=256*((a||0)/6370972+1),g=_.c(_.d([],p,d)),m=_.c(p),y=_.c(d),v=(4*m*y-Math.pow(g-m-y,2))/16,b=4*v/g,x=Math.sqrt(m-b),w=Math.sqrt(Math.max(0,A*A-b)),E=(x-w)/Math.sqrt(g);e=_.b([],p,d,E)}var O=this.unprojectPosition(e),S=i()(O,3),T=S[0],C=S[1],M=S[2];return Number.isFinite(l)?[T,C,M]:Number.isFinite(a)?[T,C,a]:[T,C]}},{key:"projectPosition",value:function(t){var e=i()(t,3),n=e[0],r=e[1],o=e[2],a=void 0===o?0:o,s=n*O,u=r*O,c=Math.cos(u),l=256*(a/6370972+1);return[Math.sin(s)*c*l,-Math.cos(s)*c*l,Math.sin(u)*l]}},{key:"unprojectPosition",value:function(t){var e=i()(t,3),n=e[0],r=e[1],o=e[2],a=_.a(t),s=Math.asin(o/a);return[Math.atan2(n,-r)*S,s*S,6370972*(a/256-1)]}},{key:"projectFlat",value:function(t){return t}},{key:"unprojectFlat",value:function(t){return t}},{key:"panByPosition",value:function(t,e){var n=this.unproject(e);return{longitude:t[0]-n[0]+this.longitude,latitude:t[1]-n[1]+this.latitude}}}]),n}(y.a);function P(t,e){var n=b.b([],e,t);return b.a(n,n,1/n[3]),n}},function(t,e,n){"use strict";var r=n(9),i=n.n(r),o=n(3),a=n.n(o),s=n(4),u=n.n(s),c=n(26),l=n.n(c),h=n(5),f=n.n(h),p=n(6),d=n.n(p),A=n(2),g=n.n(A),m=n(0),y=n.n(m),v=n(12),_=n(158),b=n(42),x=n(13),w=n(72);function E(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=g()(t);if(e){var i=g()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return d()(this,n)}}var O=function(t){f()(n,t);var e=E(n);function n(){return a()(this,n),e.apply(this,arguments)}return u()(n,[{key:"value",get:function(){return this._value}},{key:"_onUpdate",value:function(){var t=this.time,e=this.settings,n=e.fromValue,r=e.toValue,i=e.duration,o=(0,e.easing)(t/i);this._value=Object(x.g)(n,r,o)}}]),n}(w.a);function S(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=g()(t);if(e){var i=g()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return d()(this,n)}}function T(t,e,n,r,i){var o=e-t;return(n-e)*i+-o*r+o+e}function C(t,e){if(Array.isArray(t)){for(var n=0,r=0;r=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function B(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0}},{key:"add",value:function(t,e,n,r){var i=this.transitions;if(i.has(t)){var o=i.get(t),a=o.value;e=void 0===a?o.settings.fromValue:a,this.remove(t)}if(r=Object(b.e)(r)){var s=D[r.type];if(s){var u=new s(this.timeline);u.start(k(k({},r),{},{fromValue:e,toValue:n})),i.set(t,u)}else M.a.error("unsupported transition type '".concat(r.type,"'"))()}}},{key:"remove",value:function(t){var e=this.transitions;e.has(t)&&(e.get(t).cancel(),e.delete(t))}},{key:"update",value:function(){var t,e={},n=I(this.transitions);try{for(n.s();!(t=n.n()).done;){var r=i()(t.value,2),o=r[0],a=r[1];a.update(),e[o]=a.value,a.inProgress||this.remove(o)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:"clear",value:function(){var t,e=I(this.transitions.keys());try{for(e.s();!(t=e.n()).done;){var n=t.value;this.remove(n)}}catch(t){e.e(t)}finally{e.f()}}}]),t}(),F=n(131),z=n(23),U=n(154),N=n(31),G=n(8),V=n(28),H=n(77),W=n(155),q=n(137),X=n(66),J=n(50),Z=n(27),Q=n.n(Z),K=n(102);function Y(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function $(t){for(var e=1;e=e.min)}},color:{validate:function(t,e){return e.optional&&!t||ct(t)&&(3===t.length||4===t.length)},equal:function(t,e,n){return at(t,e)}},accessor:{validate:function(t,e){var n=lt(t);return"function"===n||n===lt(e.value)},equal:function(t,e,n){return"function"==typeof e||at(t,e)}},array:{validate:function(t,e){return e.optional&&!t||ct(t)},equal:function(t,e,n){return n.compare?at(t,e):t===e}},object:{equal:function(t,e,n){return n.compare?Object(nt.a)(t,e):t===e}},function:{validate:function(t,e){return e.optional&&!t||"function"==typeof t},equal:function(t,e,n){return!n.compare||t===e}},data:{transform:function(t,e,n){var r=n.props.dataTransform;return r&&t?r(t):t}},image:{transform:function(t,e,n){return function(t,e){var n=t.context&&t.context.gl;if(!n||!e)return null;if(e instanceof K.a)return e;e.constructor&&"Object"!==e.constructor.name&&(e={data:e});var r=null;e.compressed&&(r=y()({},10241,e.data.length>1?9985:9729));var i=new K.a(n,$($({},e),{},{parameters:$($($({},tt),r),t.props.textureParameters)}));return et[i.id]=!0,i}(n,t)},release:function(t){var e;(e=t)&&e instanceof K.a&&et[e.id]&&(e.delete(),delete et[e.id])}}};function at(t,e){if(t===e)return!0;if(!ct(t)||!ct(e))return!1;var n=t.length;if(n!==e.length)return!1;for(var r=0;r=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function ft(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&e.pendingLoadCount!==e.resolvedLoadCount)}for(var n in this.asyncProps)if(this.isAsyncPropLoading(n))return!0;return!1}},{key:"reloadAsyncProp",value:function(t,e){this._watchPromise(t,Promise.resolve(e))}},{key:"setAsyncProps",value:function(t){var e=t[z.c]||{},n=t[z.b]||t,r=t[z.a]||{};for(var i in e){var o=e[i];this._createAsyncPropData(i,r[i]),this._updateAsyncProp(i,o),e[i]=this.getAsyncProp(i)}for(var a in n){var s=n[a];this._createAsyncPropData(a,r[a]),this._updateAsyncProp(a,s)}}},{key:"_fetch",value:function(t,e){return null}},{key:"_onResolve",value:function(t,e){}},{key:"_onError",value:function(t,e){}},{key:"_updateAsyncProp",value:function(t,e){this._didAsyncInputValueChange(t,e)&&("string"==typeof e&&(e=this._fetch(t,e)),e instanceof Promise?this._watchPromise(t,e):Object(J.c)(e)?this._resolveAsyncIterable(t,e):this._setPropValue(t,e))}},{key:"_freezeAsyncOldProps",value:function(){if(!this.oldAsyncProps&&this.oldProps)for(var t in this.oldAsyncProps=Object.create(this.oldProps),this.asyncProps)Object.defineProperty(this.oldAsyncProps,t,{enumerable:!0,value:this.oldProps[t]})}},{key:"_didAsyncInputValueChange",value:function(t,e){var n=this.asyncProps[t];return e!==n.resolvedValue&&e!==n.lastValue&&(n.lastValue=e,!0)}},{key:"_setPropValue",value:function(t,e){this._freezeAsyncOldProps();var n=this.asyncProps[t];n&&(e=this._postProcessValue(n,e),n.resolvedValue=e,n.pendingLoadCount++,n.resolvedLoadCount=n.pendingLoadCount)}},{key:"_setAsyncPropValue",value:function(t,e,n){var r=this.asyncProps[t];r&&n>=r.resolvedLoadCount&&void 0!==e&&(this._freezeAsyncOldProps(),r.resolvedValue=e,r.resolvedLoadCount=n,this.onAsyncPropUpdated(t,e))}},{key:"_watchPromise",value:function(t,e){var n=this,r=this.asyncProps[t];if(r){r.pendingLoadCount++;var i=r.pendingLoadCount;e.then((function(e){e=n._postProcessValue(r,e),n._setAsyncPropValue(t,e,i),n._onResolve(t,e)})).catch((function(e){n._onError(t,e)}))}}},{key:"_resolveAsyncIterable",value:(e=Tt()(It.a.mark((function t(e,n){var r,i,o,a,s,u,c,l,h,f,p;return It.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if("data"===e){t.next=3;break}return this._setPropValue(e,n),t.abrupt("return");case 3:if(r=this.asyncProps[e]){t.next=6;break}return t.abrupt("return");case 6:r.pendingLoadCount++,i=r.pendingLoadCount,o=[],a=0,s=!1,u=!1,t.prev=12,l=Pt()(n);case 14:return t.next=16,l.next();case 16:if(!(s=!(h=t.sent).done)){t.next=26;break}f=h.value,p=this.component.props.dataTransform,o=p?p(f,o):o.concat(f),Object.defineProperty(o,"__diff",{enumerable:!1,value:[{startRow:a,endRow:o.length}]}),a=o.length,this._setAsyncPropValue(e,o,i);case 23:s=!1,t.next=14;break;case 26:t.next=32;break;case 28:t.prev=28,t.t0=t.catch(12),u=!0,c=t.t0;case 32:if(t.prev=32,t.prev=33,!s||null==l.return){t.next=37;break}return t.next=37,l.return();case 37:if(t.prev=37,!u){t.next=40;break}throw c;case 40:return t.finish(37);case 41:return t.finish(32);case 42:this._onResolve(e,o);case 43:case"end":return t.stop()}}),t,this,[[12,28,32,42],[33,,37,41]])}))),function(t,n){return e.apply(this,arguments)})},{key:"_postProcessValue",value:function(t,e){var n=t.type;return n&&(n.release&&n.release(t.resolvedValue,n,this.component),n.transform)?n.transform(e,n,this.component):e}},{key:"_createAsyncPropData",value:function(t,e){if(!this.asyncProps[t]){var n=this.component&&this.component.constructor._propTypes;this.asyncProps[t]={type:n&&n[t],lastValue:null,resolvedValue:e,pendingLoadCount:0,resolvedLoadCount:0}}}}]),t}()),Lt=n(18),Dt=n(202);function jt(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return Ft(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ft(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function Ft(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:[];return e[0]=t+1&255,e[1]=t+1>>8&255,e[2]=t+1>>8>>8&255,e}},{key:"decodePickingColor",value:function(t){Object(V.a)(t instanceof Uint8Array);var e=i()(t,3);return e[0]+256*e[1]+65536*e[2]-1}},{key:"getNumInstances",value:function(){return Number.isFinite(this.props.numInstances)?this.props.numInstances:this.state&&void 0!==this.state.numInstances?this.state.numInstances:Object(U.a)(this.props.data)}},{key:"getStartIndices",value:function(){return this.props.startIndices?this.props.startIndices:this.state&&this.state.startIndices?this.state.startIndices:null}},{key:"getBounds",value:function(){var t,e=this.getAttributeManager();if(!e)return null;var n=e.attributes,r=n.positions,i=n.instancePositions;return null===(t=r||i)||void 0===t?void 0:t.getBounds()}},{key:"getShaders",value:function(t){var e,n=jt(this.props.extensions);try{for(n.s();!(e=n.n()).done;){var r=e.value;t=Object(W.a)(t,r.getShaders.call(this,r))}}catch(t){n.e(t)}finally{n.f()}return t}},{key:"shouldUpdateState",value:function(t){return t.changeFlags.propsOrDataChanged}},{key:"updateState",value:function(t){var e=this.getAttributeManager(),n=t.changeFlags.dataChanged;if(n&&e)if(Array.isArray(n)){var r,i=jt(n);try{for(i.s();!(r=i.n()).done;){var o=r.value;e.invalidateAll(o)}}catch(t){i.e(t)}finally{i.f()}}else e.invalidateAll();var a=t.props,s=t.oldProps,u=Number.isInteger(s.highlightedObjectIndex)||s.pickable,c=Number.isInteger(a.highlightedObjectIndex)||a.pickable;if(u!==c&&e){var l=e.attributes,h=l.pickingColors,f=l.instancePickingColors,p=h||f;p&&(c&&p.constant&&(p.constant=!1,e.invalidate(p.id)),p.value||c||(p.constant=!0,p.value=[0,0,0]))}}},{key:"finalizeState",value:function(t){var e,n=jt(this.getModels());try{for(n.s();!(e=n.n()).done;){e.value.delete()}}catch(t){n.e(t)}finally{n.f()}var r=this.getAttributeManager();r&&r.finalize(),this.context&&this.context.resourceManager.unsubscribe({consumerId:this.id}),this.internalState&&(this.internalState.uniformTransitions.clear(),this.internalState.finalize())}},{key:"draw",value:function(t){var e,n=jt(this.getModels());try{for(n.s();!(e=n.n()).done;){e.value.draw(t)}}catch(t){n.e(t)}finally{n.f()}}},{key:"getPickingInfo",value:function(t){var e=t.info,n=(t.mode,t.sourceLayer,e.index);return n>=0&&Array.isArray(this.props.data)&&(e.object=this.props.data[n]),e}},{key:"raiseError",value:function(t,e){var n,r,i,o;(e&&(t.message="".concat(e,": ").concat(t.message)),null!==(n=(r=this.props).onError)&&void 0!==n&&n.call(r,t))||(null===(i=this.context)||void 0===i||null===(o=i.onError)||void 0===o||o.call(i,t,this))}},{key:"getNeedsRedraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{clearRedrawFlags:!1};return this._getNeedsRedraw(t)}},{key:"needsUpdate",value:function(){return!!this.internalState&&(this.internalState.needsUpdate||this.hasUniformTransition()||this.shouldUpdateState(this._getUpdateParams()))}},{key:"hasUniformTransition",value:function(){var t;return(null===(t=this.internalState)||void 0===t?void 0:t.uniformTransitions.active)||!1}},{key:"activateViewport",value:function(t){if(this.internalState){var e=this.internalState.viewport;this.internalState.viewport=t,e&&Ht({oldViewport:e,viewport:t})||(this.setChangeFlags({viewportChanged:!0}),this.isComposite?this.needsUpdate()&&this.setNeedsUpdate():this._update())}}},{key:"invalidateAttribute",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"all",e=this.getAttributeManager();e&&("all"===t?e.invalidateAll():e.invalidate(t))}},{key:"updateAttributes",value:function(t){var e,n=jt(this.getModels());try{for(n.s();!(e=n.n()).done;){var r=e.value;this._setModelAttributes(r,t)}}catch(t){n.e(t)}finally{n.f()}}},{key:"_updateAttributes",value:function(){var t=this.getAttributeManager();if(t){var e=this.props,n=this.getNumInstances(),r=this.getStartIndices();t.update({data:e.data,numInstances:n,startIndices:r,props:e,transitions:e.transitions,buffers:e.data.attributes,context:this});var i=t.getChangedAttributes({clearChangedFlags:!0});this.updateAttributes(i)}}},{key:"_updateAttributeTransition",value:function(){var t=this.getAttributeManager();t&&t.updateTransition()}},{key:"_updateUniformTransition",value:function(){var t=this.internalState.uniformTransitions;if(t.active){var e=t.update(),n=Object.create(this.props);for(var r in e)Object.defineProperty(n,r,{value:e[r]});return n}return this.props}},{key:"calculateInstancePickingColors",value:function(t,e){var n=e.numInstances;if(!t.constant){var r=Math.floor(Wt.length/3);if(this.internalState.usesPickingColorCache=!0,rGt&&M.a.warn("Layer has too many data objects. Picking might not be able to distinguish all objects.")(),Wt=X.a.allocate(Wt,n,{size:3,copy:!0,maxCount:Math.max(n,Gt)});for(var i=Math.floor(Wt.length/3),o=[],a=r;a=0?this.encodePickingColor(a):null),this.setModuleParameters(u)}}},{key:"_getUpdateParams",value:function(){return{props:this.props,oldProps:this.internalState.getOldProps(),context:this.context,changeFlags:this.internalState.changeFlags}}},{key:"_getNeedsRedraw",value:function(t){if(!this.internalState)return!1;var e=!1;e=e||this.internalState.needsRedraw&&this.id,this.internalState.needsRedraw=this.internalState.needsRedraw&&!t.clearRedrawFlags;var n=this.getAttributeManager(),r=!!n&&n.getNeedsRedraw(t);return e=e||r}},{key:"_onAsyncPropUpdated",value:function(){this._diffProps(this.props,this.internalState.getOldProps()),this.setNeedsUpdate()}}]),n}(wt);y()(Xt,"defaultProps",qt),y()(Xt,"layerName","Layer")},function(t,e,n){"use strict";var r=n(0),i=n.n(r),o=n(3),a=n.n(o),s=n(4),u=n.n(s),c=n(9),l=n.n(c),h=n(26),f=n.n(h),p=n(7),d=n.n(p),A=n(5),g=n.n(A),m=n(6),y=n.n(m),v=n(2),_=n.n(v),b=n(234),x=n(181),w=n(32);function E(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function O(t){for(var e=1;e=o){for(var a=new Array(i).fill(1/0),s=new Array(i).fill(-1/0),u=0;us[c]&&(s[c]=l)}t=[a,s]}}return this.state.bounds=t,t}},{key:"setData",value:function(t){var e,n=this.state;e=ArrayBuffer.isView(t)?{value:t}:t instanceof w.a?{buffer:t}:t;var r=I(I({},this.settings),e);if(n.bufferAccessor=r,n.bounds=null,e.constant){var i=e.value;if(i=this._normalizeValue(i,[],0),this.settings.normalized&&(i=this.normalizeConstant(i)),!(!n.constant||!this._areValuesEqual(i,this.value)))return!1;n.externalBuffer=null,n.constant=!0,this.value=i}else if(e.buffer){var o=e.buffer;n.externalBuffer=o,n.constant=!1,this.value=e.value||null;var a=e.value instanceof Float64Array;r.type=e.type||o.accessor.type,r.bytesPerElement=o.accessor.BYTES_PER_ELEMENT*(a?2:1),r.stride=B(r)}else if(e.value){this._checkExternalBuffer(e);var s=e.value;n.externalBuffer=null,n.constant=!1,this.value=s,r.bytesPerElement=s.BYTES_PER_ELEMENT,r.stride=B(r);var u=this.buffer,c=this.byteOffset;this.doublePrecision&&s instanceof Float64Array&&(s=Object(C.f)(s,r));var l=s.byteLength+c+2*r.stride;u.byteLength0&&void 0!==arguments[0]?arguments[0]:{};this.state.bounds=null;var e=this.value,n=t.startOffset,r=void 0===n?0:n,i=t.endOffset;this.buffer.subData({data:this.doublePrecision&&e instanceof Float64Array?Object(C.f)(e,{size:this.size,startIndex:r,endIndex:i}):e.subarray(r,i),offset:r*e.BYTES_PER_ELEMENT+this.byteOffset})}},{key:"allocate",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.state,r=n.allocatedValue,i=T.a.allocate(r,t+1,{size:this.size,type:this.settings.defaultType,copy:e});this.value=i;var o=this.buffer,a=this.byteOffset;return o.byteLength=0;)e[n+a]=Number.isFinite(t[a])?t[a]:i[a]}return e}},{key:"_areValuesEqual",value:function(t,e){if(!t||!e)return!1;for(var n=this.size,r=0;r=e[1])return t;for(var n=[],r=t.length,i=0,o=0;oe[1]?n.push(a):e=[Math.min(a[0],e[0]),Math.max(a[1],e[1])]}return n.splice(i,0,e),n}var N=n(42);function G(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return V(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return V(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function V(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{},e=t.clearChangedFlags,n=void 0!==e&&e,r=this.state.needsRedraw;return this.state.needsRedraw=r&&!n,r}},{key:"getUpdateTriggers",value:function(){var t=this.settings.accessor;return[this.id].concat("function"!=typeof t&&t||[])}},{key:"supportsTransition",value:function(){return Boolean(this.settings.transition)}},{key:"getTransitionSetting",value:function(t){if(!t||!this.supportsTransition())return null;var e=this.settings.accessor,n=this.settings.transition,r=Array.isArray(e)?t[e.find((function(e){return t[e]}))]:t[e];return Object(N.e)(r,n)}},{key:"setNeedsUpdate",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.id,e=arguments.length>1?arguments[1]:void 0;if(this.state.needsUpdate=this.state.needsUpdate||t,this.setNeedsRedraw(t),e){var n=e.startRow,r=void 0===n?0:n,i=e.endRow,o=void 0===i?1/0:i;this.state.updateRanges=U(this.state.updateRanges,[r,o])}else this.state.updateRanges=z}},{key:"clearNeedsUpdate",value:function(){this.state.needsUpdate=!1,this.state.updateRanges=F}},{key:"setNeedsRedraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.id;this.state.needsRedraw=this.state.needsRedraw||t}},{key:"allocate",value:function(t){var e=this.state,r=this.settings;return!r.noAlloc&&(!!r.update&&(d()(_()(n.prototype),"allocate",this).call(this,t,e.updateRanges!==z),!0))}},{key:"updateBuffer",value:function(t){var e=t.numInstances,r=t.data,i=t.props,o=t.context;if(!this.needsUpdate())return!1;var a=this.state.updateRanges,s=this.settings,u=s.update,c=s.noAlloc,h=!0;if(u){var f,p=G(a);try{for(p.s();!(f=p.n()).done;){var A=l()(f.value,2),g=A[0],m=A[1];u.call(o,this,{data:r,startRow:g,endRow:m,props:i,numInstances:e})}}catch(t){p.e(t)}finally{p.f()}if(this.value)if(this.constant||this.buffer.byteLength1&&void 0!==arguments[1]?arguments[1]:null,n=this.state,r=this.settings;if(!t)return n.binaryValue=null,n.binaryAccessor=null,!1;if(r.noAlloc)return!1;if(n.binaryValue===t)return this.clearNeedsUpdate(),!0;n.binaryValue=t,this.setNeedsRedraw();var i=r.transform||e!==this.startIndices;if(i){ArrayBuffer.isView(t)&&(t={value:t});var o=t;Object(L.a)(ArrayBuffer.isView(o.value),"invalid ".concat(r.accessor));var a=Boolean(o.size)&&o.size!==this.size;return n.binaryAccessor=Object(D.b)(o.value,{size:o.size||this.size,stride:o.stride,offset:o.offset,startIndices:e,nested:a}),!1}return this.clearNeedsUpdate(),this.setData(t),!0}},{key:"getVertexOffset",value:function(t){var e=this.startIndices;return(e?e[t]:t)*this.size}},{key:"getShaderAttributes",value:function(){var t=this.settings.shaderAttributes||i()({},this.id,null),e={};for(var r in t)Object.assign(e,d()(_()(n.prototype),"getShaderAttributes",this).call(this,r,t[r]));return e}},{key:"_autoUpdater",value:function(t,e){var n=e.data,r=e.startRow,i=e.endRow,o=e.props,a=e.numInstances;if(!t.constant){var s=t.settings,u=t.state,c=t.value,l=t.size,h=t.startIndices,f=s.accessor,p=s.transform,d=u.binaryAccessor||("function"==typeof f?f:o[f]);Object(L.a)("function"==typeof d,'accessor "'.concat(f,'" is not a function'));var A,g=t.getVertexOffset(r),m=Object(D.a)(n,r,i),y=m.iterable,v=m.objectInfo,_=G(y);try{for(_.s();!(A=_.n()).done;){var b=A.value;v.index++;var x=d(b,v);if(p&&(x=p.call(this,x)),h){var w=(v.indexl?c.set(x,g):(t._normalizeValue(x,v.target,0),Object(j.a)({target:c,source:v.target,start:g,count:w}));g+=w*l}else t._normalizeValue(x,c,g),g+=l}}catch(t){_.e(t)}finally{_.f()}}}},{key:"_validateAttributeUpdaters",value:function(){var t=this.settings;if(!(t.noAlloc||"function"==typeof t.update))throw new Error("Attribute ".concat(this.id," missing update or accessor"))}},{key:"_checkAttributeArray",value:function(){var t=this.value,e=Math.min(4,this.size);if(t&&t.length>=e){var n=!0;switch(e){case 4:n=n&&Number.isFinite(t[3]);case 3:n=n&&Number.isFinite(t[2]);case 2:n=n&&Number.isFinite(t[1]);case 1:n=n&&Number.isFinite(t[0]);break;default:n=!1}if(!n)throw new Error("Illegal attribute generated for ".concat(this.id))}}}]),n}(k),q=n(31),X=n(293),J=n(72);function Z(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Q(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function Y(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function it(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n EPSILON || length(aTo - aCur) > EPSILON;\n vIsTransitioningFlag = isTransitioning ? 1.0 : 0.0;\n\n vNext = getNextValue(aCur, aPrev, aTo);\n gl_Position = vec4(0, 0, 0, 1);\n gl_PointSize = 100.0;\n}\n",fs:"\n#define SHADER_NAME spring-transition-is-transitioning-fragment-shader\n\nvarying float vIsTransitioningFlag;\n\nvoid main(void) {\n if (vIsTransitioningFlag == 0.0) {\n discard;\n }\n gl_FragColor = vec4(1.0);\n}",defines:{ATTRIBUTE_TYPE:r},varyings:["vNext"]})}(n,r,this.framebuffer);var s={byteLength:0,usage:35050};this.buffers=[new w.a(n,s),new w.a(n,s),new w.a(n,s)]}return u()(t,[{key:"inProgress",get:function(){return this.transition.inProgress}},{key:"start",value:function(t,e){var n,r=this.gl,i=this.buffers,o=this.attribute,a={numInstances:e,attribute:o,fromLength:this.currentLength,fromStartIndices:this.currentStartIndices,getData:t.enter},s=rt(i);try{for(s.s();!(n=s.n()).done;){var u=n.value;Object(N.f)(at({buffer:u},a))}}catch(t){s.e(t)}finally{s.f()}this.settings=t,this.currentStartIndices=o.startIndices,this.currentLength=Object(N.b)(o,e),this.attributeInTransition.setData({buffer:i[1],value:o.value}),this.transition.start(at(at({},t),{},{duration:1/0})),this.transform.update({elementCount:Math.floor(this.currentLength/o.size),sourceBuffers:{aTo:Object(N.d)(r,o)}})}},{key:"update",value:function(){var t=this.buffers,e=this.transform,n=this.framebuffer,r=this.transition;if(!r.update())return!1;var i=this.settings;return e.update({sourceBuffers:{aPrev:t[0],aCur:t[1]},feedbackBuffers:{vNext:t[2]}}),e.run({framebuffer:n,discard:!1,clearRenderTarget:!0,uniforms:{stiffness:i.stiffness,damping:i.damping},parameters:{depthTest:!1,blend:!0,viewport:[0,0,1,1],blendFunc:[1,1],blendEquation:[32776,32776]}}),Object(N.a)(t),this.attributeInTransition.setData({buffer:t[1],value:this.attribute.value}),Object(tt.c)(n)[0]>0||r.end(),!0}},{key:"cancel",value:function(){this.transition.cancel(),this.transform.delete();var t,e=rt(this.buffers);try{for(e.s();!(t=e.n()).done;){t.value.delete()}}catch(t){e.e(t)}finally{e.f()}this.buffers.length=0,this.texture.delete(),this.framebuffer.delete()}}]),t}()},ut=function(){function t(e,n){var r=n.id,i=n.timeline;a()(this,t),this.id=r,this.gl=e,this.timeline=i,this.transitions={},this.needsRedraw=!1,this.numInstances=1,this.isSupported=X.a.isSupported(e)}return u()(t,[{key:"finalize",value:function(){for(var t in this.transitions)this._removeTransition(t)}},{key:"update",value:function(t){var e=t.attributes,n=t.transitions,r=t.numInstances;for(var i in this.numInstances=r||1,e){var o=e[i],a=o.getTransitionSetting(n);a&&this._updateAttribute(i,o,a)}for(var s in this.transitions){var u=e[s];u&&u.getTransitionSetting(n)||this._removeTransition(s)}}},{key:"hasAttribute",value:function(t){var e=this.transitions[t];return e&&e.inProgress}},{key:"getAttributes",value:function(){var t={};for(var e in this.transitions){var n=this.transitions[e];n.inProgress&&(t[e]=n.attributeInTransition)}return t}},{key:"run",value:function(){if(!this.isSupported||0===this.numInstances)return!1;for(var t in this.transitions){this.transitions[t].update()&&(this.needsRedraw=!0)}var e=this.needsRedraw;return this.needsRedraw=!1,e}},{key:"_removeTransition",value:function(t){this.transitions[t].cancel(),delete this.transitions[t]}},{key:"_updateAttribute",value:function(t,e,n){var r=this.transitions[t],i=!r||r.type!==n.type;if(i){if(!this.isSupported)return void P.a.warn("WebGL2 not supported by this browser. Transition for ".concat(t," is disabled."))();r&&this._removeTransition(t);var o=st[n.type];o?this.transitions[t]=new o({attribute:e,timeline:this.timeline,gl:this.gl}):(P.a.error("unsupported transition type '".concat(n.type,"'"))(),i=!1)}(i||e.needsRedraw())&&(this.needsRedraw=!0,this.transitions[t].start(n,this.numInstances))}}]),t}();function ct(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function lt(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function ft(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:{},r=n.id,i=void 0===r?"attribute-manager":r,o=n.stats,s=n.timeline;a()(this,t),this.id=i,this.gl=e,this.attributes={},this.updateTriggers={},this.needsRedraw=!0,this.userData={},this.stats=o,this.attributeTransitionManager=new ut(e,{id:"".concat(i,"-transitions"),timeline:s}),Object.seal(this)}return u()(t,[{key:"finalize",value:function(){for(var t in this.attributes)this.attributes[t].delete();this.attributeTransitionManager.finalize()}},{key:"getNeedsRedraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{clearRedrawFlags:!1},e=this.needsRedraw;return this.needsRedraw=this.needsRedraw&&!t.clearRedrawFlags,e&&this.id}},{key:"setNeedsRedraw",value:function(){this.needsRedraw=!0}},{key:"add",value:function(t){this._add(t)}},{key:"addInstanced",value:function(t){this._add(t,{instanced:1})}},{key:"remove",value:function(t){var e,n=ht(t);try{for(n.s();!(e=n.n()).done;){var r=e.value;void 0!==this.attributes[r]&&(this.attributes[r].delete(),delete this.attributes[r])}}catch(t){n.e(t)}finally{n.f()}}},{key:"invalidate",value:function(t,e){var n=this._invalidateTrigger(t,e);Object(q.a)("attributeManager.invalidate",this,t,n)}},{key:"invalidateAll",value:function(t){for(var e in this.attributes)this.attributes[e].setNeedsUpdate(e,t);Object(q.a)("attributeManager.invalidate",this,"all")}},{key:"update",value:function(t){var e=t.data,n=t.numInstances,r=t.startIndices,i=void 0===r?null:r,o=t.transitions,a=t.props,s=void 0===a?{}:a,u=t.buffers,c=void 0===u?{}:u,l=t.context,h=void 0===l?{}:l,f=!1;for(var p in Object(q.a)("attributeManager.updateStart",this),this.stats&&this.stats.get("Update Attributes").timeStart(),this.attributes){var d=this.attributes[p],A=d.settings.accessor;d.startIndices=i,d.numInstances=n,s[p]&&P.a.removed("props.".concat(p),"data.attributes.".concat(p))(),d.setExternalBuffer(c[p])||d.setBinaryValue("string"==typeof A?c[A]:void 0,e.startIndices)||"string"==typeof A&&!c[A]&&d.setConstantValue(s[A])||d.needsUpdate()&&(f=!0,this._updateAttribute({attribute:d,numInstances:n,data:e,props:s,context:h})),this.needsRedraw=this.needsRedraw||d.needsRedraw()}f&&Object(q.a)("attributeManager.updateEnd",this,n),this.stats&&this.stats.get("Update Attributes").timeEnd(),this.attributeTransitionManager.update({attributes:this.attributes,numInstances:n,transitions:o})}},{key:"updateTransition",value:function(){var t=this.attributeTransitionManager.run();return this.needsRedraw=this.needsRedraw||t,t}},{key:"getAttributes",value:function(){return this.attributes}},{key:"getChangedAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{clearChangedFlags:!1},e=this.attributes,n=this.attributeTransitionManager,r=lt({},n.getAttributes());for(var i in e){var o=e[i];o.needsRedraw(t)&&!n.hasAttribute(i)&&(r[i]=o)}return r}},{key:"getShaderAttributes",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t||(t=this.getAttributes());var n={};for(var r in t)e[r]||Object.assign(n,t[r].getShaderAttributes());return n}},{key:"_add",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(var n in t){var r=t[n];this.attributes[n]=this._createAttribute(n,r,e)}this._mapUpdateTriggersToAttributes()}},{key:"_createAttribute",value:function(t,e,n){var r=lt(lt({},e),{},{id:t,size:(e.isIndexed?1:e.size)||1,divisor:n.instanced?1:e.divisor||0});return new W(this.gl,r)}},{key:"_mapUpdateTriggersToAttributes",value:function(){var t=this,e={},n=function(n){t.attributes[n].getUpdateTriggers().forEach((function(t){e[t]||(e[t]=[]),e[t].push(n)}))};for(var r in this.attributes)n(r);this.updateTriggers=e}},{key:"_invalidateTrigger",value:function(t,e){var n=this.attributes,r=this.updateTriggers[t];return r&&r.forEach((function(t){var r=n[t];r&&r.setNeedsUpdate(r.id,e)})),r}},{key:"_updateAttribute",value:function(t){var e=t.attribute,n=t.numInstances;(Object(q.a)("attribute.updateStart",e),e.constant)?e.setConstantValue(e.value):(e.allocate(n)&&Object(q.a)("attribute.allocate",e,n),e.updateBuffer(t)&&(this.needsRedraw=!0,Object(q.a)("attribute.updateEnd",e,n)))}}]),t}()},function(t,e,n){"use strict";var r=n(9),i=n.n(r),o=n(3),a=n.n(o),s=n(4),u=n.n(s),c=n(26),l=n.n(c),h=n(5),f=n.n(h),p=n(6),d=n.n(p),A=n(2),g=n.n(A),m=n(0),y=n.n(m),v=n(50),_=n(189),b=n(164);const x=1e20;class w{constructor({fontSize:t=24,buffer:e=3,radius:n=8,cutoff:r=.25,fontFamily:i="sans-serif",fontWeight:o="normal",fontStyle:a="normal"}={}){this.buffer=e,this.cutoff=r,this.radius=n;const s=this.size=t+4*e,u=this._createCanvas(s),c=this.ctx=u.getContext("2d",{willReadFrequently:!0});c.font=`${a} ${o} ${t}px ${i}`,c.textBaseline="alphabetic",c.textAlign="left",c.fillStyle="black",this.gridOuter=new Float64Array(s*s),this.gridInner=new Float64Array(s*s),this.f=new Float64Array(s),this.z=new Float64Array(s+1),this.v=new Uint16Array(s)}_createCanvas(t){const e=document.createElement("canvas");return e.width=e.height=t,e}draw(t){const{width:e,actualBoundingBoxAscent:n,actualBoundingBoxDescent:r,actualBoundingBoxLeft:i,actualBoundingBoxRight:o}=this.ctx.measureText(t),a=Math.ceil(n),s=Math.min(this.size-this.buffer,Math.ceil(o-i)),u=Math.min(this.size-this.buffer,a+Math.ceil(r)),c=s+2*this.buffer,l=u+2*this.buffer,h=Math.max(c*l,0),f=new Uint8ClampedArray(h),p={data:f,width:c,height:l,glyphWidth:s,glyphHeight:u,glyphTop:a,glyphLeft:0,glyphAdvance:e};if(0===s||0===u)return p;const{ctx:d,buffer:A,gridInner:g,gridOuter:m}=this;d.clearRect(A,A,s,u),d.fillText(t,A,A+a);const y=d.getImageData(A,A,s,u);m.fill(x,0,h),g.fill(0,0,h);for(let t=0;t0?t*t:0,g[r]=t<0?t*t:0}}E(m,0,0,c,l,c,this.f,this.v,this.z),E(g,A,A,s,u,c,this.f,this.v,this.z);for(let t=0;t-1);u++,o[u]=s,a[u]=c,a[u+1]=x}for(let s=0,u=0;s=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function C(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);nr&&(as){var h=M(t,s,u,i);c+h>r&&(ar&&(h=I(t,s,u,r,i,o),a=o[o.length-1])),s=u,c+=h}return c}function R(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments.length>5?arguments[5]:void 0;void 0===o&&(o=t.length);var a=[];return"break-all"===e?I(t,i,o,n,r,a):B(t,i,o,n,r,a),a}function k(t,e,n,r,i,o){for(var a=0,s=0,u=e;u0,h=[0,0],f=[0,0],p=0,d=0,A=0,g=0;g<=a;g++){var m=o[g];if("\n"!==m&&g!==a||(A=g),A>d){for(var y=l?R(o,n,r,i,d,A):P,v=0;v<=y.length;v++){var _=0===v?d:y[v-1],b=v0&&void 0!==arguments[0]?arguments[0]:5;a()(this,t),y()(this,"_cache",{}),y()(this,"_order",[]),this.limit=e}return u()(t,[{key:"get",value:function(t){var e=this._cache[t];return e&&(this._deleteOrder(t),this._appendOrder(t)),e}},{key:"set",value:function(t,e){this._cache[t]?(this.delete(t),this._cache[t]=e,this._appendOrder(t)):(Object.keys(this._cache).length===this.limit&&this.delete(this._order[0]),this._cache[t]=e,this._appendOrder(t))}},{key:"delete",value:function(t){this._cache[t]&&(delete this._cache[t],this._deleteOrder(t))}},{key:"_deleteOrder",value:function(t){var e=this._order.indexOf(t);e>=0&&this._order.splice(e,1)}},{key:"_appendOrder",value:function(t){this._order.push(t)}}]),t}();function j(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return F(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return F(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function F(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{};Object.assign(this.props,t),this._key=this._getKey();var e=V(this._key,this.props.characterSet),n=G.get(this._key);if(n&&0===e.size)this._atlas!==n&&(this._atlas=n);else{var r=this._generateFontAtlas(e,n);this._atlas=r,G.set(this._key,r)}}},{key:"_generateFontAtlas",value:function(t,e){var n=this.props,r=n.fontFamily,i=n.fontWeight,o=n.fontSize,a=n.buffer,s=n.sdf,u=n.radius,c=n.cutoff,l=e&&e.data;l||((l=document.createElement("canvas")).width=1024);var h=l.getContext("2d");W(h,r,o,i);var f=function(t){var e,n,r=t.characterSet,i=t.getFontWidth,o=t.fontHeight,a=t.buffer,s=t.maxCanvasWidth,u=t.mapping,c=void 0===u?{}:u,l=t.xOffset,h=void 0===l?0:l,f=t.yOffset,p=void 0===f?0:f,d=0,A=h,g=o+2*a,m=T(r);try{for(m.s();!(e=m.n()).done;){var y=e.value;if(!c[y]){var v=i(y);A+v+2*a>s&&(A=0,d++),c[y]={x:A+a,y:p+d*g+a,width:v,height:g,layoutWidth:v,layoutHeight:o},A+=v+2*a}}}catch(t){m.e(t)}finally{m.f()}return{mapping:c,xOffset:A,yOffset:p+d*g,canvasHeight:(n=p+(d+1)*g,Math.pow(2,Math.ceil(Math.log2(n))))}}(U({getFontWidth:function(t){return h.measureText(t).width},fontHeight:1.2*o,buffer:a,characterSet:t,maxCanvasWidth:1024},e&&{mapping:e.mapping,xOffset:e.xOffset,yOffset:e.yOffset})),p=f.mapping,d=f.canvasHeight,A=f.xOffset,g=f.yOffset;if(l.height!==d){var m=h.getImageData(0,0,l.width,l.height);l.height=d,h.putImageData(m,0,0)}if(W(h,r,o,i),s){var y,v=new w({fontSize:o,buffer:a,radius:u,cutoff:c,fontFamily:r,fontWeight:"".concat(i)}),_=j(t);try{for(_.s();!(y=_.n()).done;){var b=y.value,x=v.draw(b),E=x.data,O=x.width,S=x.height,C=x.glyphTop;p[b].width=O,p[b].layoutOffsetY=.9*o-C;var P=h.createImageData(O,S);H(E,P),h.putImageData(P,p[b].x,p[b].y)}}catch(t){_.e(t)}finally{_.f()}}else{var M,I=j(t);try{for(I.s();!(M=I.n()).done;){var B=M.value;h.fillText(B,p[B].x,p[B].y+a+.9*o)}}catch(t){I.e(t)}finally{I.f()}}return{xOffset:A,yOffset:g,mapping:p,data:l,width:l.width,height:l.height}}},{key:"_getKey",value:function(){var t=this.props,e=t.fontFamily,n=t.fontWeight,r=t.fontSize,i=t.buffer,o=t.sdf,a=t.radius,s=t.cutoff;return o?"".concat(e," ").concat(n," ").concat(r," ").concat(i," ").concat(a," ").concat(s):"".concat(e," ").concat(n," ").concat(r," ").concat(i)}}]),t}(),X=n(162);function J(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return Z(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Z(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function Z(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0?this.props.data[e.index]:null,e}},{key:"_updateFontAtlas",value:function(){var t=this.props,e=t.fontSettings,n=t.fontFamily,r=t.fontWeight,i=this.state,o=i.fontAtlasManager,a=i.characterSet,s=K(K({},e),{},{characterSet:a,fontFamily:n,fontWeight:r});if(!o.mapping)return o.setProps(s),!0;for(var u in s)if(s[u]!==o.props[u])return o.setProps(s),!0;return!1}},{key:"_updateText",value:function(){var t,e,n=this.props,r=n.data,i=n.characterSet,o=null===(t=r.attributes)||void 0===t?void 0:t.getText,a=this.props.getText,s=r.startIndices,u="auto"===i&&new Set;if(o&&s){var c=function(t){var e=t.value,n=t.length,r=t.stride,i=t.offset,o=t.startIndices,a=t.characterSet,s=e.BYTES_PER_ELEMENT,u=r?r/s:1,c=i?i/s:0,l=o[n]||Math.ceil((e.length-c)/u),h=a&&new Set,f=new Array(n),p=e;if(u>1||c>0){p=new(0,e.constructor)(l);for(var d=0;d=3,"Invalid cache limit"),G=new D(t)}(t)}}]),n}(_.a);y()(rt,"defaultProps",nt),y()(rt,"layerName","TextLayer")},function(t,e,n){"use strict";var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(7),u=n.n(s),c=n(5),l=n.n(c),h=n(6),f=n.n(h),p=n(2),d=n.n(p),A=n(0),g=n.n(A),m=n(204),y=n(221),v=n(220),_=n(12),b=n(157),x=n(8),w=n(234),E=n(181),O=n(178),S=n(20),T=n(45),C=n(58),P=n(36);function M(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function I(t){for(var e=1;e=o),a=a.flatMap((function(t){return[t[0],t[1]]})),Object(P.h)(a,P.a.COUNTER_CLOCKWISE));var s=r>0,u=o+1,c=s?3*u+1:o,l=2*Math.PI/o,h=new Uint16Array(s?3*o*2:0),f=new Float32Array(3*c),p=new Float32Array(3*c),d=0;if(s){for(var A=0;A 0.0 && instanceElevations >= 0.0);\n float dotRadius = radius * coverage * shouldRender;\n\n geometry.pickingColor = instancePickingColors;\n\n // project center of column\n vec3 centroidPosition = vec3(instancePositions.xy, instancePositions.z + elevation);\n vec3 centroidPosition64Low = instancePositions64Low;\n vec2 offset = (rotationMatrix * positions.xy * strokeOffsetRatio + offset) * dotRadius;\n if (radiusUnits == UNIT_METERS) {\n offset = project_size(offset);\n }\n vec3 pos = vec3(offset, 0.);\n DECKGL_FILTER_SIZE(pos, geometry);\n\n gl_Position = project_position_to_clipspace(centroidPosition, centroidPosition64Low, pos, geometry.position);\n geometry.normal = project_normal(vec3(rotationMatrix * normals.xy, normals.z));\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Light calculations\n if (extruded && !isStroke) {\n#ifdef FLAT_SHADING\n position_commonspace = geometry.position;\n vColor = vec4(color.rgb, color.a * opacity);\n#else\n vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal);\n vColor = vec4(lightColor, color.a * opacity);\n#endif\n } else {\n vColor = vec4(color.rgb, color.a * opacity);\n }\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n",fs:"#version 300 es\n#define SHADER_NAME column-layer-fragment-shader\n\nprecision highp float;\n\nuniform vec3 project_uCameraPosition;\nuniform bool extruded;\nuniform bool isStroke;\n\nout vec4 fragColor;\n\nin vec4 vColor;\n#ifdef FLAT_SHADING\nin vec4 position_commonspace;\n#endif\n\nvoid main(void) {\n fragColor = vColor;\n#ifdef FLAT_SHADING\n if (extruded && !isStroke && !picking_uActive) {\n vec3 normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n fragColor.rgb = lighting_getLightColor(vColor.rgb, project_uCameraPosition, position_commonspace.xyz, normal);\n }\n#endif\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n",defines:r,transpileToGLSL100:e,modules:[m.a,i?y.b:y.a,v.a]})}},{key:"initializeState",value:function(){this.getAttributeManager().addInstanced({instancePositions:{size:3,type:5130,fp64:this.use64bitPositions(),transition:!0,accessor:"getPosition"},instanceElevations:{size:1,transition:!0,accessor:"getElevation"},instanceFillColors:{size:this.props.colorFormat.length,type:5121,normalized:!0,transition:!0,accessor:"getFillColor",defaultValue:j},instanceLineColors:{size:this.props.colorFormat.length,type:5121,normalized:!0,transition:!0,accessor:"getLineColor",defaultValue:j},instanceStrokeWidths:{size:1,accessor:"getLineWidth",transition:!0}})}},{key:"updateState",value:function(t){u()(d()(n.prototype),"updateState",this).call(this,t);var e=t.props,r=t.oldProps,i=t.changeFlags.extensionsChanged||e.flatShading!==r.flatShading;if(i){var o,a=this.context.gl;null===(o=this.state.model)||void 0===o||o.delete(),this.state.model=this._getModel(a),this.getAttributeManager().invalidateAll()}(i||e.diskResolution!==r.diskResolution||e.vertices!==r.vertices||(e.extruded||e.stroked)!==(r.extruded||r.stroked))&&this._updateGeometry(e)}},{key:"getGeometry",value:function(t,e,n){var r=new R({radius:1,height:n?2:0,vertices:e,nradial:t}),i=0;if(e)for(var o=0;o 0.5) {\n float isLine = antialiasing ? \n smoothedge(innerUnitRadius * outerRadiusPixels, distToCenter) :\n step(innerUnitRadius * outerRadiusPixels, distToCenter);\n\n if (filled) {\n gl_FragColor = mix(vFillColor, vLineColor, isLine);\n } else {\n if (isLine == 0.0) {\n discard;\n }\n gl_FragColor = vec4(vLineColor.rgb, vLineColor.a * isLine);\n }\n } else if (filled) {\n gl_FragColor = vFillColor;\n } else {\n discard;\n }\n\n gl_FragColor.a *= inCircle;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n",modules:[m.a,y.a]})}},{key:"initializeState",value:function(){this.getAttributeManager().addInstanced({instancePositions:{size:3,type:5130,fp64:this.use64bitPositions(),transition:!0,accessor:"getPosition"},instanceRadius:{size:1,transition:!0,accessor:"getRadius",defaultValue:1},instanceFillColors:{size:this.props.colorFormat.length,transition:!0,normalized:!0,type:5121,accessor:"getFillColor",defaultValue:[0,0,0,255]},instanceLineColors:{size:this.props.colorFormat.length,transition:!0,normalized:!0,type:5121,accessor:"getLineColor",defaultValue:[0,0,0,255]},instanceLineWidths:{size:1,transition:!0,accessor:"getLineWidth",defaultValue:1}})}},{key:"updateState",value:function(t){if(u()(d()(n.prototype),"updateState",this).call(this,t),t.changeFlags.extensionsChanged){var e,r=this.context.gl;null===(e=this.state.model)||void 0===e||e.delete(),this.state.model=this._getModel(r),this.getAttributeManager().invalidateAll()}}},{key:"draw",value:function(t){var e=t.uniforms,n=this.props,r=n.radiusUnits,i=n.radiusScale,o=n.radiusMinPixels,a=n.radiusMaxPixels,s=n.stroked,u=n.filled,c=n.billboard,l=n.antialiasing,h=n.lineWidthUnits,f=n.lineWidthScale,p=n.lineWidthMinPixels,d=n.lineWidthMaxPixels;this.state.model.setUniforms(e).setUniforms({stroked:s?1:0,filled:u,billboard:c,antialiasing:l,radiusUnits:v.e[r],radiusScale:i,radiusMinPixels:o,radiusMaxPixels:a,lineWidthUnits:v.e[h],lineWidthScale:f,lineWidthMinPixels:p,lineWidthMaxPixels:d}).draw()}},{key:"_getModel",value:function(t){return new b.a(t,E(E({},this.getShaders()),{},{id:this.props.id,geometry:new x.a({drawMode:6,vertexCount:4,attributes:{positions:{size:3,value:new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0])}}}),isInstanced:!0}))}}]),n}(_.a);g()(C,"defaultProps",T),g()(C,"layerName","ScatterplotLayer")},function(t,e,n){"use strict";var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(7),u=n.n(s),c=n(5),l=n.n(c),h=n(6),f=n.n(h),p=n(2),d=n.n(p),A=n(0),g=n.n(A),m=n(204),y=n(220),v=n(12),_=n(157),b=n(178),x=n(58);function w(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function E(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function m(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0}},{key:"delete",value:function(){}},{key:"getData",value:function(){var t=this;return this.isLoaded?this._error?Promise.reject(this._error):this._content:this._loader.then((function(){return t.getData()}))}},{key:"setData",value:function(t,e){var n=this;if(t!==this._data||e){this._data=t;var r=++this._loadCount,i=t;"string"==typeof t&&(i=Object(A.a)(t)),i instanceof Promise?(this.isLoaded=!1,this._loader=i.then((function(t){n._loadCount===r&&(n.isLoaded=!0,n._error=void 0,n._content=t)})).catch((function(t){n._loadCount===r&&(n.isLoaded=!0,n._error=t||!0)}))):(this.isLoaded=!0,this._error=void 0,this._content=t);var o,a=g(this._subscribers);try{for(a.s();!(o=a.n()).done;){o.value.onChange(this.getData())}}catch(t){a.e(t)}finally{a.f()}}}}]),t}(),v=function(){function t(e){var n=e.gl,r=e.protocol;i()(this,t),this.protocol=r||"resource://",this._context={gl:n,resourceManager:this},this._resources={},this._consumers={},this._pruneRequest=null}return a()(t,[{key:"contains",value:function(t){return!!t.startsWith(this.protocol)||t in this._resources}},{key:"add",value:function(t){var e=t.resourceId,n=t.data,r=t.forceUpdate,i=void 0!==r&&r,o=t.persistent,a=void 0===o||o,s=this._resources[e];s?s.setData(n,i):(s=new y(e,n,this._context),this._resources[e]=s),s.persistent=a}},{key:"remove",value:function(t){var e=this._resources[t];e&&(e.delete(),delete this._resources[t])}},{key:"unsubscribe",value:function(t){var e=t.consumerId,n=this._consumers[e];if(n){for(var r in n){var i=n[r],o=this._resources[i.resourceId];o&&o.unsubscribe(i)}delete this._consumers[e],this.prune()}}},{key:"subscribe",value:function(t){var e=t.resourceId,n=t.onChange,r=t.consumerId,i=t.requestId,o=void 0===i?"default":i,a=this._resources,s=this.protocol;e.startsWith(s)&&(a[e=e.replace(s,"")]||this.add({resourceId:e,data:null,persistent:!1}));var u=a[e];if(this._track(r,o,u,n),u)return u.getData()}},{key:"prune",value:function(){var t=this;this._pruneRequest||(this._pruneRequest=setTimeout((function(){return t._prune()}),0))}},{key:"finalize",value:function(){for(var t in this._resources)this._resources[t].delete()}},{key:"_track",value:function(t,e,n,r){var i=this._consumers,o=i[t]=i[t]||{},a=o[e]||{},s=a.resourceId&&this._resources[a.resourceId];s&&(s.unsubscribe(a),this.prune()),n&&(o[e]=a,a.onChange=r,a.resourceId=n.id,n.subscribe(a))}},{key:"_prune",value:function(){this._pruneRequest=null;for(var t=0,e=Object.keys(this._resources);t=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function w(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:{},o=r.deck,a=r.stats,s=r.viewport,l=r.timeline;i()(this,t),u()(this,"_lastRenderedLayers",[]),u()(this,"_needsRedraw",!1),u()(this,"_needsUpdate",!1),u()(this,"_nextLayers",null),u()(this,"_debug",!1),u()(this,"activateViewport",(function(t){Object(f.a)("layerManager.activateViewport",n,t),t&&(n.context.viewport=t)})),this.layers=[],this.resourceManager=new v({gl:e,protocol:"deck://"}),this.context={mousePosition:null,userData:{},layerManager:this,gl:e,deck:o,programManager:e&&Object(b.a)(e),stats:a||new d.a({id:"deck.gl"}),viewport:s||new _.a({id:"DEFAULT-INITIAL-VIEWPORT"}),timeline:l||new c.a,resourceManager:this.resourceManager,onError:void 0},Object.seal(this)}return a()(t,[{key:"finalize",value:function(){this.resourceManager.finalize();var t,e=x(this.layers);try{for(e.s();!(t=e.n()).done;){var n=t.value;this._finalizeLayer(n)}}catch(t){e.e(t)}finally{e.f()}}},{key:"needsRedraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{clearRedrawFlags:!1},e=this._needsRedraw;t.clearRedrawFlags&&(this._needsRedraw=!1);var n,r=x(this.layers);try{for(r.s();!(n=r.n()).done;){var i=n.value,o=i.getNeedsRedraw(t);e=e||o}}catch(t){r.e(t)}finally{r.f()}return e}},{key:"needsUpdate",value:function(){return this._nextLayers&&this._nextLayers!==this._lastRenderedLayers?"layers changed":this._needsUpdate}},{key:"setNeedsRedraw",value:function(t){this._needsRedraw=this._needsRedraw||t}},{key:"setNeedsUpdate",value:function(t){this._needsUpdate=this._needsUpdate||t}},{key:"getLayers",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.layerIds;return e?this.layers.filter((function(t){return e.find((function(e){return 0===t.id.indexOf(e)}))})):this.layers}},{key:"setProps",value:function(t){"debug"in t&&(this._debug=t.debug),"userData"in t&&(this.context.userData=t.userData),"layers"in t&&(this._nextLayers=t.layers),"onError"in t&&(this.context.onError=t.onError)}},{key:"setLayers",value:function(t,e){Object(f.a)("layerManager.setLayers",this,e,t),this._lastRenderedLayers=t;var n,r=Object(p.b)(t,Boolean),i=x(r);try{for(i.s();!(n=i.n()).done;){n.value.context=this.context}}catch(t){i.e(t)}finally{i.f()}this._updateLayers(this.layers,r)}},{key:"updateLayers",value:function(){var t=this.needsUpdate();t&&(this.setNeedsRedraw("updating layers: ".concat(t)),this.setLayers(this._nextLayers||this._lastRenderedLayers,t)),this._nextLayers=null}},{key:"_handleError",value:function(t,e,n){n.raiseError(e,"".concat(t," of ").concat(n))}},{key:"_updateLayers",value:function(t,e){var n,r={},i=x(t);try{for(i.s();!(n=i.n()).done;){var o=n.value;r[o.id]?h.a.warn("Multiple old layers with same id ".concat(o.id))():r[o.id]=o}}catch(t){i.e(t)}finally{i.f()}var a=[];this._updateSublayersRecursively(e,r,a),this._finalizeOldLayers(r);for(var s=!1,u=0,c=a;u 0.0) {\n float inFill = alpha;\n float inBorder = smoothstep(outlineBuffer - gamma, outlineBuffer + gamma, distance);\n color = mix(outlineColor, vColor, inFill);\n alpha = inBorder;\n }\n }\n\n // Take the global opacity and the alpha from color into account for the alpha component\n float a = alpha * color.a;\n \n if (a < alphaCutoff) {\n discard;\n }\n\n gl_FragColor = vec4(color.rgb, a * opacity);\n }\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n"})}},{key:"initializeState",value:function(){var t=this;u()(d()(n.prototype),"initializeState",this).call(this),this.getAttributeManager().addInstanced({instanceOffsets:{size:2,accessor:"getIconOffsets"},instancePickingColors:{type:5121,size:3,accessor:function(e,n){var r=n.index,i=n.target;return t.encodePickingColor(r,i)}}})}},{key:"updateState",value:function(t){u()(d()(n.prototype),"updateState",this).call(this,t);var e=t.props,r=t.oldProps,i=e.outlineColor;i!==r.outlineColor&&((i=i.map((function(t){return t/255})))[3]=Number.isFinite(i[3])?i[3]:1,this.setState({outlineColor:i})),!e.sdf&&e.outlineWidth&&m.a.warn("".concat(this.id,": fontSettings.sdf is required to render outline"))()}},{key:"draw",value:function(t){var e=this.props,r=e.sdf,i=e.smoothing,o=e.outlineWidth,a=this.state.outlineColor,s=o?Math.max(i,.75*(1-o)):-1;(t.uniforms=_(_({},t.uniforms),{},{buffer:.75,outlineBuffer:s,gamma:i,sdf:Boolean(r),outlineColor:a}),u()(d()(n.prototype),"draw",this).call(this,t),r&&o)&&(this.state.iconManager.getTexture()&&this.state.model.draw({uniforms:{outlineBuffer:.75}}))}},{key:"getInstanceOffset",value:function(t){var e=this;return t?Array.from(t).flatMap((function(t){return u()(d()(n.prototype),"getInstanceOffset",e).call(e,t)})):x}},{key:"getInstanceColorMode",value:function(t){return 1}},{key:"getInstanceIconFrame",value:function(t){var e=this;return t?Array.from(t).flatMap((function(t){return u()(d()(n.prototype),"getInstanceIconFrame",e).call(e,t)})):x}}]),n}(y.a);g()(w,"defaultProps",{getIconOffsets:{type:"accessor",value:function(t){return t.offsets}},alphaCutoff:.001,smoothing:.1,outlineWidth:0,outlineColor:{type:"color",value:[0,0,0,255]}}),g()(w,"layerName","MultiIconLayer")},function(t,e,n){"use strict";var r=n(0),i=n.n(r),o=n(3),a=n.n(o),s=n(4),u=n.n(s),c=n(31),l=n(5),h=n.n(l),f=n(6),p=n.n(f),d=n(2),A=n.n(d),g=n(12);function m(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=A()(t);if(e){var i=A()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return p()(this,n)}}var y=function(t){h()(n,t);var e=m(n);function n(){return a()(this,n),e.apply(this,arguments)}return u()(n,[{key:"shouldDrawLayer",value:function(t){return t.props.operation===g.c.DRAW}}]),n}(n(70).a),v=n(172),_=n(71);function b(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return x(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return x(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function x(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{clearRedrawFlags:!1},e=this._needsRedraw;return t.clearRedrawFlags&&(this._needsRedraw=!1),e}},{key:"finalize",value:function(){var t,e=this.renderBuffers,n=b(e);try{for(n.s();!(t=n.n()).done;){t.value.delete()}}catch(t){n.e(t)}finally{n.f()}e.length=0}},{key:"_preRender",value:function(t,e){var n,r=null,i=b(t);try{for(i.s();!(n=i.n()).done;){var o=n.value;o.preRender(this.gl,e),o.postRender&&(r=o)}}catch(t){i.e(t)}finally{i.f()}r&&this._resizeRenderBuffers(),this.lastPostProcessEffect=r}},{key:"_resizeRenderBuffers",value:function(){var t=this.renderBuffers;0===t.length&&t.push(new _.a(this.gl),new _.a(this.gl));var e,n=b(t);try{for(n.s();!(e=n.n()).done;){e.value.resize()}}catch(t){n.e(t)}finally{n.f()}}},{key:"_postRender",value:function(t,e){var n,r=this.renderBuffers,i={inputBuffer:r[0],swapBuffer:r[1],target:null},o=b(t);try{for(o.s();!(n=o.n()).done;){var a=n.value;if(a.postRender){if(a===this.lastPostProcessEffect){i.target=e.target,a.postRender(this.gl,i);break}var s=a.postRender(this.gl,i);i.inputBuffer=s,i.swapBuffer=s===r[0]?r[1]:r[0]}}}catch(t){o.e(t)}finally{o.f()}}}]),t}()},function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var r=n(27),i=n.n(r),o=n(0),a=n.n(o),s=n(3),u=n.n(s),c=n(4),l=n.n(c);function h(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function f(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"Transport";u()(this,t),this.name=e,this._messageQueue=[],this.userData={}}return l()(t,[{key:"getRootDOMElement",value:function(){return"undefined"!=typeof document?document.body:null}},{key:"sendJSONMessage",value:function(){console.error("Back-channel not implemented for this transport")}},{key:"sendBinaryMessage",value:function(){console.error("Back-channel not implemented for this transport")}},{key:"_initialize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=f({transport:this},t);p.onInitialize(e)}},{key:"_finalize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=f({transport:this},t);p.onFinalize(e),this._destroyed=!0}},{key:"_messageReceived",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=f({transport:this},t),console.debug("Delivering transport message",t),p.onMessage(t)}}],[{key:"setCallbacks",value:function(t){var e=t.onInitialize,n=t.onFinalize,r=t.onMessage;e&&(p.onInitialize=e),n&&(p.onFinalize=n),r&&(p.onMessage=r)}},{key:"_stringifyJSONSafe",value:function(t){var e=new Set;return JSON.stringify(t,(function(t,n){if("object"===i()(n)&&null!==n){if(e.has(n))try{return JSON.parse(JSON.stringify(n))}catch(t){return}e.add(n)}return n}))}}]),t}()},function(t,e,n){"use strict";(function(t){function r(e){if("undefined"!=typeof window&&"object"==typeof window.process&&"renderer"===window.process.type)return!0;if(void 0!==t&&"object"==typeof t.versions&&Boolean(t.versions.electron))return!0;const n="object"==typeof navigator&&"string"==typeof navigator.userAgent&&navigator.userAgent,r=e||n;return!!(r&&r.indexOf("Electron")>=0)}n.d(e,"a",(function(){return r}))}).call(this,n(63))},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(8);function i(t,e,n,i){const o="See luma.gl ".concat(n," Upgrade Guide at https://luma.gl/docs/upgrade-guide"),a=Object.getPrototypeOf(t);i.forEach(t=>{a.methodName||(a[t]=()=>{throw r.k.removed("Calling removed method ".concat(e,".").concat(t,": "),o)(),new Error(t)})})}},function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var r=n(115),i=n(22),o=n(13);class a extends r.a{toString(){let t="[";if(o.b.printRowMajor){t+="row-major:";for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:{id:"pass"};a()(this,t);var r=n.id;this.id=r,this.gl=e,this.props=l({},n)}return u()(t,[{key:"setProps",value:function(t){Object.assign(this.props,t)}},{key:"render",value:function(t){}},{key:"cleanup",value:function(){}}]),t}()},function(t,e,n){"use strict";function r(t,e=!0,n){const o=n||new Set;if(t){if(i(t))o.add(t);else if(i(t.buffer))o.add(t.buffer);else if(ArrayBuffer.isView(t));else if(e&&"object"==typeof t)for(const n in t)r(t[n],e,o)}else;return void 0===n?Array.from(o):[]}function i(t){return!!t&&(t instanceof ArrayBuffer||("undefined"!=typeof MessagePort&&t instanceof MessagePort||("undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas)))}function o(t){if(null===t)return{};const e=Object.assign({},t);return Object.keys(e).forEach(n=>{"object"!=typeof t[n]||ArrayBuffer.isView(t[n])?"function"==typeof e[n]||e[n]instanceof RegExp?e[n]={}:e[n]=t[n]:e[n]=o(t[n])}),e}n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return o}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return T}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(26),u=n.n(s),c=n(7),l=n.n(c),h=n(5),f=n.n(h),p=n(6),d=n.n(p),A=n(2),g=n.n(A),m=n(0),y=n.n(m),v=n(70),_=n(8),b=n(12),x=n(20);function w(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function E(t){for(var e=1;e=24&&2303741511===e.getUint32(0,!1)))return null;return{mimeType:"image/png",width:e.getUint32(16,!1),height:e.getUint32(20,!1)}}(e)||function(t){const e=i(t);if(!(e.byteLength>=3&&65496===e.getUint16(0,!1)&&255===e.getUint8(2)))return null;const{tableMarkers:n,sofMarkers:r}=function(){const t=new Set([65499,65476,65484,65501,65534]);for(let e=65504;e<65520;++e)t.add(e);const e=new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502]);return{tableMarkers:t,sofMarkers:e}}();let o=2;for(;o+9=10&&1195984440===e.getUint32(0,!1)))return null;return{mimeType:"image/gif",width:e.getUint16(6,!0),height:e.getUint16(8,!0)}}(e)||function(t){const e=i(t);if(!(e.byteLength>=14&&16973===e.getUint16(0,!1)&&e.getUint32(2,!0)===e.byteLength))return null;return{mimeType:"image/bmp",width:e.getUint32(18,!0),height:e.getUint32(22,!0)}}(e)}function i(t){if(t instanceof DataView)return t;if(ArrayBuffer.isView(t))return new DataView(t.buffer);if(t instanceof ArrayBuffer)return new DataView(t);throw new Error("toDataView")}},function(t,e,n){"use strict";function r(t){for(var e=t.data,n=t.getIndex,r=t.dataRange,i=t.replace,o=r.startRow,a=void 0===o?0:o,s=r.endRow,u=void 0===s?1/0:s,c=e.length,l=c,h=c,f=0;ff&&p>=a&&(l=f),p>=u){h=f;break}}for(var d=l,A=h-l!==i.length?e.slice(h):void 0,g=0;g=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}},function(t,e,n){"use strict";function r(t){var e=document.createElement("link");e.type="text/css",e.rel="stylesheet",e.href=t,document.getElementsByTagName("head")[0].appendChild(e)}function i(t,e){var n=document.createElement("div");return n.style.width=Number.isFinite(t)?"".concat(t,"px"):t,n.style.height="".concat(e,"px"),n.style.position="relative",n}n.d(e,"b",(function(){return r})),n.d(e,"a",(function(){return i}))},function(t,e,n){"use strict";const r={name:"Draco",id:"draco",module:"draco",shapes:["mesh"],version:"3.2.10",worker:!0,extensions:["drc"],mimeTypes:["application/octet-stream"],binary:!0,tests:["DRACO"],options:{draco:{decoderType:"object"==typeof WebAssembly?"wasm":"js",libraryPath:"libs/",extraAttributes:{},attributeNameEntry:void 0}}};var i=n(1);class o{constructor(t,e){Object(i.a)(this,"fields",void 0),Object(i.a)(this,"metadata",void 0),function(t,e){if(!t)throw new Error(e||"loader assertion failed.")}(Array.isArray(t)),function(t){const e={};for(const n of t)e[n.name]&&console.warn("Schema: duplicated field name",n.name,n),e[n.name]=!0}(t),this.fields=t,this.metadata=e||new Map}compareTo(t){if(this.metadata!==t.metadata)return!1;if(this.fields.length!==t.fields.length)return!1;for(let e=0;ee[t.name]);return new o(n,this.metadata)}selectAt(...t){const e=t.map(t=>this.fields[t]).filter(Boolean);return new o(e,this.metadata)}assign(t){let e,n=this.metadata;if(t instanceof o){const r=t;e=r.fields,n=a(a(new Map,this.metadata),r.metadata)}else e=t;const r=Object.create(null);for(const t of this.fields)r[t.name]=t;for(const t of e)r[t.name]=t;const i=Object.values(r);return new o(i,n)}}function a(t,e){return new Map([...t||new Map,...e||new Map])}class s{constructor(t,e,n=!1,r=new Map){Object(i.a)(this,"name",void 0),Object(i.a)(this,"type",void 0),Object(i.a)(this,"nullable",void 0),Object(i.a)(this,"metadata",void 0),this.name=t,this.type=e,this.nullable=n,this.metadata=r}get typeId(){return this.type&&this.type.typeId}clone(){return new s(this.name,this.type,this.nullable,this.metadata)}compareTo(t){return this.name===t.name&&this.type===t.type&&this.nullable===t.nullable&&this.metadata===t.metadata}toString(){return"".concat(this.type).concat(this.nullable?", nullable":"").concat(this.metadata?", metadata: ".concat(this.metadata):"")}}let u,c,l,h,f,p,d,A,g;!function(t){t[t.NONE=0]="NONE",t[t.Null=1]="Null",t[t.Int=2]="Int",t[t.Float=3]="Float",t[t.Binary=4]="Binary",t[t.Utf8=5]="Utf8",t[t.Bool=6]="Bool",t[t.Decimal=7]="Decimal",t[t.Date=8]="Date",t[t.Time=9]="Time",t[t.Timestamp=10]="Timestamp",t[t.Interval=11]="Interval",t[t.List=12]="List",t[t.Struct=13]="Struct",t[t.Union=14]="Union",t[t.FixedSizeBinary=15]="FixedSizeBinary",t[t.FixedSizeList=16]="FixedSizeList",t[t.Map=17]="Map",t[t.Dictionary=-1]="Dictionary",t[t.Int8=-2]="Int8",t[t.Int16=-3]="Int16",t[t.Int32=-4]="Int32",t[t.Int64=-5]="Int64",t[t.Uint8=-6]="Uint8",t[t.Uint16=-7]="Uint16",t[t.Uint32=-8]="Uint32",t[t.Uint64=-9]="Uint64",t[t.Float16=-10]="Float16",t[t.Float32=-11]="Float32",t[t.Float64=-12]="Float64",t[t.DateDay=-13]="DateDay",t[t.DateMillisecond=-14]="DateMillisecond",t[t.TimestampSecond=-15]="TimestampSecond",t[t.TimestampMillisecond=-16]="TimestampMillisecond",t[t.TimestampMicrosecond=-17]="TimestampMicrosecond",t[t.TimestampNanosecond=-18]="TimestampNanosecond",t[t.TimeSecond=-19]="TimeSecond",t[t.TimeMillisecond=-20]="TimeMillisecond",t[t.TimeMicrosecond=-21]="TimeMicrosecond",t[t.TimeNanosecond=-22]="TimeNanosecond",t[t.DenseUnion=-23]="DenseUnion",t[t.SparseUnion=-24]="SparseUnion",t[t.IntervalDayTime=-25]="IntervalDayTime",t[t.IntervalYearMonth=-26]="IntervalYearMonth"}(u||(u={}));class m{static isNull(t){return t&&t.typeId===u.Null}static isInt(t){return t&&t.typeId===u.Int}static isFloat(t){return t&&t.typeId===u.Float}static isBinary(t){return t&&t.typeId===u.Binary}static isUtf8(t){return t&&t.typeId===u.Utf8}static isBool(t){return t&&t.typeId===u.Bool}static isDecimal(t){return t&&t.typeId===u.Decimal}static isDate(t){return t&&t.typeId===u.Date}static isTime(t){return t&&t.typeId===u.Time}static isTimestamp(t){return t&&t.typeId===u.Timestamp}static isInterval(t){return t&&t.typeId===u.Interval}static isList(t){return t&&t.typeId===u.List}static isStruct(t){return t&&t.typeId===u.Struct}static isUnion(t){return t&&t.typeId===u.Union}static isFixedSizeBinary(t){return t&&t.typeId===u.FixedSizeBinary}static isFixedSizeList(t){return t&&t.typeId===u.FixedSizeList}static isMap(t){return t&&t.typeId===u.Map}static isDictionary(t){return t&&t.typeId===u.Dictionary}get typeId(){return u.NONE}compareTo(t){return this===t}}Symbol.toStringTag;Symbol.toStringTag;c=Symbol.toStringTag;class y extends m{constructor(t,e){super(),Object(i.a)(this,"isSigned",void 0),Object(i.a)(this,"bitWidth",void 0),this.isSigned=t,this.bitWidth=e}get typeId(){return u.Int}get[c](){return"Int"}toString(){return"".concat(this.isSigned?"I":"Ui","nt").concat(this.bitWidth)}}class v extends y{constructor(){super(!0,8)}}class _ extends y{constructor(){super(!0,16)}}class b extends y{constructor(){super(!0,32)}}class x extends y{constructor(){super(!1,8)}}class w extends y{constructor(){super(!1,16)}}class E extends y{constructor(){super(!1,32)}}const O=32,S=64;l=Symbol.toStringTag;class T extends m{constructor(t){super(),Object(i.a)(this,"precision",void 0),this.precision=t}get typeId(){return u.Float}get[l](){return"Float"}toString(){return"Float".concat(this.precision)}}class C extends T{constructor(){super(O)}}class P extends T{constructor(){super(S)}}Symbol.toStringTag;Symbol.toStringTag;h=Symbol.toStringTag;f=Symbol.toStringTag;p=Symbol.toStringTag;d=Symbol.toStringTag;A=Symbol.toStringTag;class M extends m{constructor(t,e){super(),Object(i.a)(this,"listSize",void 0),Object(i.a)(this,"children",void 0),this.listSize=t,this.children=[e]}get typeId(){return u.FixedSizeList}get valueType(){return this.children[0].type}get valueField(){return this.children[0]}get[A](){return"FixedSizeList"}toString(){return"FixedSizeList[".concat(this.listSize,"]<").concat(this.valueType,">")}}g=Symbol.toStringTag;function I(t,e,n){const r=function(t){switch(t.constructor){case Int8Array:return new v;case Uint8Array:return new x;case Int16Array:return new _;case Uint16Array:return new w;case Int32Array:return new b;case Uint32Array:return new E;case Float32Array:return new C;case Float64Array:return new P;default:throw new Error("array type not supported")}}(e.value),i=n||function(t){const e=new Map;"byteOffset"in t&&e.set("byteOffset",t.byteOffset.toString(10));"byteStride"in t&&e.set("byteStride",t.byteStride.toString(10));"normalized"in t&&e.set("normalized",t.normalized.toString());return e}(e);return new s(t,new M(e.size,new s("value",r)),!1,i)}function B(t,e,n){return I(t,e,n?R(n.metadata):void 0)}function R(t){const e=new Map;for(const n in t)e.set("".concat(n,".string"),JSON.stringify(t[n]));return e}const k={POSITION:"POSITION",NORMAL:"NORMAL",COLOR:"COLOR_0",TEX_COORD:"TEXCOORD_0"},L={1:Int8Array,2:Uint8Array,3:Int16Array,4:Uint16Array,5:Int32Array,6:Uint32Array,9:Float32Array};class D{constructor(t){Object(i.a)(this,"draco",void 0),Object(i.a)(this,"decoder",void 0),Object(i.a)(this,"metadataQuerier",void 0),this.draco=t,this.decoder=new this.draco.Decoder,this.metadataQuerier=new this.draco.MetadataQuerier}destroy(){this.draco.destroy(this.decoder),this.draco.destroy(this.metadataQuerier)}parseSync(t,e={}){const n=new this.draco.DecoderBuffer;n.Init(new Int8Array(t),t.byteLength),this._disableAttributeTransforms(e);const r=this.decoder.GetEncodedGeometryType(n),i=r===this.draco.TRIANGULAR_MESH?new this.draco.Mesh:new this.draco.PointCloud;try{let t;switch(r){case this.draco.TRIANGULAR_MESH:t=this.decoder.DecodeBufferToMesh(n,i);break;case this.draco.POINT_CLOUD:t=this.decoder.DecodeBufferToPointCloud(n,i);break;default:throw new Error("DRACO: Unknown geometry type.")}if(!t.ok()||!i.ptr){const e="DRACO decompression failed: ".concat(t.error_msg());throw new Error(e)}const a=this._getDracoLoaderData(i,r,e),s=this._getMeshData(i,a,e),u=function(t){let e=1/0,n=1/0,r=1/0,i=-1/0,o=-1/0,a=-1/0;const s=t.POSITION?t.POSITION.value:[],u=s&&s.length;for(let t=0;ti?u:i,o=c>o?c:o,a=l>a?l:a}return[[e,n,r],[i,o,a]]}(s.attributes),c=function(t,e,n){const r=R(e.metadata),i=[],a=function(t){const e={};for(const n in t){const r=t[n];e[r.name||"undefined"]=r}return e}(e.attributes);for(const e in t){const n=B(e,t[e],a[e]);i.push(n)}if(n){const t=B("indices",n);i.push(t)}return new o(i,r)}(s.attributes,a,s.indices);return{loader:"draco",loaderData:a,header:{vertexCount:i.num_points(),boundingBox:u},...s,schema:c}}finally{this.draco.destroy(n),i&&this.draco.destroy(i)}}_getDracoLoaderData(t,e,n){const r=this._getTopLevelMetadata(t),i=this._getDracoAttributes(t,n);return{geometry_type:e,num_attributes:t.num_attributes(),num_points:t.num_points(),num_faces:t instanceof this.draco.Mesh?t.num_faces():0,metadata:r,attributes:i}}_getDracoAttributes(t,e){const n={};for(let r=0;rthis.decoder[t]).includes(r)){const e=new this.draco.AttributeQuantizationTransform;try{if(e.InitFromAttribute(t))return{quantization_bits:e.quantization_bits(),range:e.range(),min_values:new Float32Array([1,2,3]).map(t=>e.min_value(t))}}finally{this.draco.destroy(e)}}return null}_getOctahedronTransform(t,e){const{octahedronAttributes:n=[]}=e,r=t.attribute_type();if(n.map(t=>this.decoder[t]).includes(r)){const e=new this.draco.AttributeQuantizationTransform;try{if(e.InitFromAttribute(t))return{quantization_bits:e.quantization_bits()}}finally{this.draco.destroy(e)}}return null}}var j=n(289);const F="https://www.gstatic.com/draco/versioned/decoders/".concat("1.4.1","/draco_decoder.js"),z="https://www.gstatic.com/draco/versioned/decoders/".concat("1.4.1","/draco_wasm_wrapper.js"),U="https://www.gstatic.com/draco/versioned/decoders/".concat("1.4.1","/draco_decoder.wasm");"https://raw.githubusercontent.com/google/draco/".concat("1.4.1","/javascript/draco_encoder.js");let N;async function G(t){const e=t.modules||{};return N=e.draco3d?N||e.draco3d.createDecoderModule({}).then(t=>({draco:t})):N||async function(t){let e,n;switch(t.draco&&t.draco.decoderType){case"js":e=await Object(j.a)(F,"draco",t);break;case"wasm":default:[e,n]=await Promise.all([await Object(j.a)(z,"draco",t),await Object(j.a)(U,"draco",t)])}return e=e||globalThis.DracoDecoderModule,await function(t,e){const n={};e&&(n.wasmBinary=e);return new Promise(e=>{t({...n,onModuleLoaded:t=>e({draco:t})})})}(e,n)}(t),await N}var V=n(47);n.d(e,"a",(function(){return H}));V.b;const H={...r,parse:async function(t,e){const{draco:n}=await G(e),r=new D(n);try{return r.parseSync(t,null==e?void 0:e.draco)}finally{r.destroy()}}}},function(t,e,n){"use strict";var r=n(8),i=n(195),o=n(45),a=n(10),s=n(180),u=n(292),c=n(61),l=n(32),h=n(38);let f=null;function p(t,e){var n;return new t((n=t.BYTES_PER_ELEMENT*e,(!f||f.byteLength1&&void 0!==arguments[1]?arguments[1]:{}).constantAttributeZero||(Object(r.j)(t)||"Chrome"===Object(d.a)())}static getDefaultArray(t){return t.luma=t.luma||{},t.luma.defaultVertexArray||(t.luma.defaultVertexArray=new A(t,{handle:null,isDefaultArray:!0})),t.luma.defaultVertexArray}static getMaxAttributes(t){return A.MAX_ATTRIBUTES=A.MAX_ATTRIBUTES||t.getParameter(34921),A.MAX_ATTRIBUTES}static setConstant(t,e,n){switch(n.constructor){case Float32Array:A._setConstantFloatArray(t,e,n);break;case Int32Array:A._setConstantIntArray(t,e,n);break;case Uint32Array:A._setConstantUintArray(t,e,n);break;default:Object(a.a)(!1)}}constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=e.id||e.program&&e.program.id;super(t,Object.assign({},e,{id:n})),this.buffer=null,this.bufferValue=null,this.isDefaultArray=e.isDefaultArray||!1,this.gl2=t,this.initialize(e),Object.seal(this)}delete(){return super.delete(),this.buffer&&this.buffer.delete(),this}get MAX_ATTRIBUTES(){return A.getMaxAttributes(this.gl)}initialize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.setProps(t)}setProps(t){return this}setElementBuffer(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return Object(a.a)(!t||34963===t.target,"elements must be GL.ELEMENT_ARRAY_BUFFER"),this.bind(()=>{this.gl.bindBuffer(34963,t?t.handle:null)}),this}setBuffer(t,e,n){if(34963===e.target)return this.setElementBuffer(e,n);const{size:i,type:o,stride:s,offset:u,normalized:c,integer:l,divisor:h}=n,{gl:f,gl2:p}=this;return t=Number(t),this.bind(()=>{f.bindBuffer(34962,e.handle),l?(Object(a.a)(Object(r.j)(f)),p.vertexAttribIPointer(t,i,o,s,u)):f.vertexAttribPointer(t,i,o,c,s,u),f.enableVertexAttribArray(t),p.vertexAttribDivisor(t,h||0)}),this}enable(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!e&&0===t&&!A.isSupported(this.gl,{constantAttributeZero:!0})||(t=Number(t),this.bind(()=>e?this.gl.enableVertexAttribArray(t):this.gl.disableVertexAttribArray(t))),this}getConstantBuffer(t,e){const n=this._normalizeConstantArrayValue(e),r=n.byteLength*t,i=n.length*t;let o=!this.buffer;if(this.buffer=this.buffer||new l.a(this.gl,r),o=o||this.buffer.reallocate(r),o=o||!this._compareConstantArrayValues(n,this.bufferValue),o){const t=p(e.constructor,i);!function(t){let{target:e,source:n,start:r=0,count:i=1}=t;const o=n.length,a=i*o;let s=0;for(let t=r;s{switch(t){case 34373:return this.gl.getVertexAttribOffset(n,t);default:return this.gl.getVertexAttrib(n,t)}})}}var g=n(168);const m=/^(.+)__LOCATION_([0-9]+)$/,y=["setBuffers","setGeneric","clearBindings","setLocations","setGenericValues","setDivisor","enable","disable"];class v{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=e.id||e.program&&e.program.id;this.id=n,this.gl=t,this.configuration=null,this.elements=null,this.elementsAccessor=null,this.values=null,this.accessors=null,this.unused=null,this.drawParams=null,this.buffer=null,this.attributes={},this.vertexArrayObject=new A(t),Object(g.a)(this,"VertexArray","v6.0",y),this.initialize(e),Object.seal(this)}delete(){this.buffer&&this.buffer.delete(),this.vertexArrayObject.delete()}initialize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.reset(),this.configuration=null,this.bindOnUse=!1,this.setProps(t)}reset(){this.elements=null,this.elementsAccessor=null;const{MAX_ATTRIBUTES:t}=this.vertexArrayObject;return this.values=new Array(t).fill(null),this.accessors=new Array(t).fill(null),this.unused={},this.drawParams=null,this}setProps(t){return"program"in t&&(this.configuration=t.program&&t.program.configuration),"configuration"in t&&(this.configuration=t.configuration),"attributes"in t&&this.setAttributes(t.attributes),"elements"in t&&this.setElementBuffer(t.elements),"bindOnUse"in t&&(t=t.bindOnUse),this}clearDrawParams(){this.drawParams=null}getDrawParams(){return this.drawParams=this.drawParams||this._updateDrawParams(),this.drawParams}setAttributes(t){return Object.assign(this.attributes,t),this.vertexArrayObject.bind(()=>{for(const e in t){const n=t[e];this._setAttribute(e,n)}this.gl.bindBuffer(34962,null)}),this}setElementBuffer(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.elements=t,this.elementsAccessor=e,this.clearDrawParams(),this.vertexArrayObject.setElementBuffer(t,e),this}setBuffer(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(34963===e.target)return this.setElementBuffer(e,n);const{location:r,accessor:i}=this._resolveLocationAndAccessor(t,e,e.accessor,n);return r>=0&&(this.values[r]=e,this.accessors[r]=i,this.clearDrawParams(),this.vertexArrayObject.setBuffer(r,e,i)),this}setConstant(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{location:r,accessor:i}=this._resolveLocationAndAccessor(t,e,Object.assign({size:e.length},n));return r>=0&&(e=this.vertexArrayObject._normalizeConstantArrayValue(e),this.values[r]=e,this.accessors[r]=i,this.clearDrawParams(),this.vertexArrayObject.enable(r,!1)),this}unbindBuffers(){return this.vertexArrayObject.bind(()=>{this.elements&&this.vertexArrayObject.setElementBuffer(null),this.buffer=this.buffer||new l.a(this.gl,{accessor:{size:4}});for(let t=0;t{this.elements&&this.setElementBuffer(this.elements);for(let t=0;t{this._setConstantAttributes(t,e),r=n()}),r}_resolveLocationAndAccessor(t,e,n,i){const o={location:-1,accessor:null},{location:s,name:u}=this._getAttributeIndex(t);if(!Number.isFinite(s)||s<0)return this.unused[t]=e,r.k.once(3,()=>"unused value ".concat(t," in ").concat(this.id))(),o;const l=this._getAttributeInfo(u||s);if(!l)return o;const h=this.accessors[s]||{},f=c.a.resolve(l.accessor,h,n,i),{size:p,type:d}=f;return Object(a.a)(Number.isFinite(p)&&Number.isFinite(d)),{location:s,accessor:f}}_getAttributeInfo(t){return this.configuration&&this.configuration.getAttributeInfo(t)}_getAttributeIndex(t){const e=Number(t);if(Number.isFinite(e))return{location:e};const n=m.exec(t),r=n?n[1]:t,i=n?Number(n[2]):0;return this.configuration?{location:this.configuration.getAttributeLocation(r)+i,name:r}:{location:-1}}_setAttribute(t,e){if(e instanceof l.a)this.setBuffer(t,e);else if(Array.isArray(e)&&e.length&&e[0]instanceof l.a){const n=e[0],r=e[1];this.setBuffer(t,n,r)}else if(ArrayBuffer.isView(e)||Array.isArray(e)){const n=e;this.setConstant(t,n)}else{if(!(e.buffer instanceof l.a))throw new Error("VertexArray: attributes must be Buffers or constants (i.e. typed array)");{const n=e;this.setBuffer(t,n.buffer,n)}}}_setConstantAttributes(t,e){const n=Math.max(0|t,0|e);let r=this.values[0];ArrayBuffer.isView(r)&&this._setConstantAttributeZero(r,n);for(let t=1;t0;if(t.isInstanced=t.isInstanced||o,n instanceof l.a){const e=n;if(o){const n=e.getVertexCount(r);t.instanceCount=Math.min(t.instanceCount,n)}else{const n=e.getVertexCount(r);t.vertexCount=Math.min(t.vertexCount,n)}}}setElements(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return r.k.deprecated("setElements","setElementBuffer")(),this.setElementBuffer(t,e)}}var _=n(286),b=n(46),x=n(78);function w(t,e){const{maxElts:n=16,size:r=1}=e;let i="[";for(let o=0;o0&&(i+=",".concat(o%r==0?" ":"")),i+=E(t[o],e);const o=t.length>n?"...":"]";return"".concat(i).concat(o)}function E(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=1e-16,{isInteger:r=!1}=e;if(Array.isArray(t)||ArrayBuffer.isView(t))return w(t,e);if(!Number.isFinite(t))return String(t);if(Math.abs(t)100&&Math.abs(t)<1e4)return t.toFixed(0);const i=t.toPrecision(2),o=i.indexOf(".0");return o===i.length-2?i.slice(0,-1):i}function O(t,e,n,r){const{gl:i}=t;if(!e)return{[r]:"null","Format ":"N/A"};let o,a,s,u="NOT PROVIDED",c=1,h=0,f=0;if(n&&(u=n.type,c=n.size,u=String(u).replace("Array",""),o=-1!==u.indexOf("nt")),e instanceof l.a){const t=e,{data:l,changed:p}=t.getDebugData();let d;if(a=p?"*":"",s=l,f=t.byteLength,h=f/l.BYTES_PER_ELEMENT/c,n){const t=n.divisor>0;d="".concat(t?"I ":"P "," ").concat(h," (x").concat(c,"=").concat(f," bytes ").concat(Object(b.a)(i,u),")")}else o=!0,d="".concat(f," bytes");return{[r]:"".concat(a).concat(E(s,{size:c,isInteger:o})),"Format ":d}}return s=e,c=e.length,u=String(e.constructor.name).replace("Array",""),o=-1!==u.indexOf("nt"),{[r]:"".concat(E(s,{size:c,isInteger:o})," (constant)"),"Format ":"".concat(c,"x").concat(u," (constant)")}}function S(t,e){const{type:n,size:r}=e,i=Object(x.b)(n,r);return i?"".concat(t," (").concat(i.name,")"):t}function T(t){let{header:e="Uniforms",program:n,uniforms:r,undefinedOnly:i=!1}=t;Object(a.a)(n);const o=n._uniformSetters,s={},u=Object.keys(o).sort();let c=0;for(const t of u)t.match(".*_.*")||t.match(".*Matrix")||C({table:s,header:e,uniforms:r,uniformName:t,undefinedOnly:i})&&c++;for(const t of u)t.match(".*Matrix")&&C({table:s,header:e,uniforms:r,uniformName:t,undefinedOnly:i})&&c++;for(const t of u)s[t]||C({table:s,header:e,uniforms:r,uniformName:t,undefinedOnly:i})&&c++;let l=0;const h={};if(!i)for(const t in r){const n=r[t];s[t]||(l++,h[t]={Type:"NOT USED: ".concat(n),[e]:E(n)})}return{table:s,count:c,unusedTable:h,unusedCount:l}}function C(t){let{table:e,header:n,uniforms:r,uniformName:i,undefinedOnly:o}=t;const a=r[i],s=function(t){return null!=t}(a);return(!o||!s)&&(e[i]={[n]:s?E(a):"N/A","Uniform Type":s?a:"NOT PROVIDED"},!0)}function P(t){const{type:e,size:n}=t.accessor,r=Object(x.b)(e,n);return r?"".concat(r.name," ").concat(t.name):t.name}const M={POSITION:"positions",NORMAL:"normals",COLOR_0:"colors",TEXCOORD_0:"texCoords",TEXCOORD_1:"texCoords1",TEXCOORD_2:"texCoords2"};function I(t,e){const{attributeMap:n=M}=e||{};return n&&n[t]||t}function B(t,e){let n;switch(t){case"texCoords":case"texCoord1":case"texCoord2":case"texCoord3":n="uvs";break;case"vertices":case"positions":case"normals":case"pickingColors":n="vectors"}switch(n){case"vectors":e.size=e.size||3;break;case"uvs":e.size=e.size||2}Object(a.a)(Number.isFinite(e.size),"attribute ".concat(t," needs size"))}n.d(e,"a",(function(){return L}));const R=()=>{},k={};class L{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{id:n=Object(o.c)("model")}=e;Object(a.a)(Object(r.i)(t)),this.id=n,this.gl=t,this.id=e.id||Object(o.c)("Model"),this.lastLogTime=0,this.animated=!1,this.initialize(e)}initialize(t){this.props={},this.programManager=t.programManager||i.a.getDefaultProgramManager(this.gl),this._programManagerState=-1,this._managedProgram=!1;const{program:e=null,vs:n,fs:r,modules:o,defines:s,inject:u,varyings:c,bufferMode:l,transpileToGLSL100:h}=t;this.programProps={program:e,vs:n,fs:r,modules:o,defines:s,inject:u,varyings:c,bufferMode:l,transpileToGLSL100:h},this.program=null,this.vertexArray=null,this._programDirty=!0,this.userData={},this.needsRedraw=!0,this._attributes={},this.attributes={},this.uniforms={},this.pickable=!0,this._checkProgram(),this.setUniforms(Object.assign({},this.getModuleUniforms(t.moduleSettings))),this.drawMode=void 0!==t.drawMode?t.drawMode:4,this.vertexCount=t.vertexCount||0,this.geometryBuffers={},this.isInstanced=t.isInstanced||t.instanced||t.instanceCount>0,this._setModelProps(t),this.geometry={},Object(a.a)(void 0!==this.drawMode&&Number.isFinite(this.vertexCount),"Model needs drawMode and vertexCount")}setProps(t){this._setModelProps(t)}delete(){for(const t in this._attributes)this._attributes[t]!==this.attributes[t]&&this._attributes[t].delete();this._managedProgram&&(this.programManager.release(this.program),this._managedProgram=!1),this.vertexArray.delete(),this._deleteGeometryBuffers()}getDrawMode(){return this.drawMode}getVertexCount(){return this.vertexCount}getInstanceCount(){return this.instanceCount}getAttributes(){return this.attributes}getProgram(){return this.program}setProgram(t){const{program:e,vs:n,fs:r,modules:i,defines:o,inject:a,varyings:s,bufferMode:u,transpileToGLSL100:c}=t;this.programProps={program:e,vs:n,fs:r,modules:i,defines:o,inject:a,varyings:s,bufferMode:u,transpileToGLSL100:c},this._programDirty=!0}getUniforms(){return this.uniforms}setDrawMode(t){return this.drawMode=t,this}setVertexCount(t){return Object(a.a)(Number.isFinite(t)),this.vertexCount=t,this}setInstanceCount(t){return Object(a.a)(Number.isFinite(t)),this.instanceCount=t,this}setGeometry(t){return this.drawMode=t.drawMode,this.vertexCount=t.getVertexCount(),this._deleteGeometryBuffers(),this.geometryBuffers=function(t,e,n){const r={};let i=e.indices;for(const o in e.attributes){const a=e.attributes[o],s=I(o,n);if("indices"===o)i=a;else if(a.constant)r[s]=a.value;else{const e=a.value,n={...a};delete n.value,r[s]=[new l.a(t,e),n],B(o,n)}}if(i){const e=i.value||i;Object(a.a)(e instanceof Uint16Array||e instanceof Uint32Array,'attribute array for "indices" must be of integer type');const n={size:1,isIndexed:void 0===i.isIndexed||i.isIndexed};r.indices=[new l.a(t,{data:e,target:34963}),n]}return r}(this.gl,t),this.vertexArray.setAttributes(this.geometryBuffers),this}setAttributes(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(Object(o.a)(t))return this;const e={};for(const n in t){const r=t[n];e[n]=r.getValue?r.getValue():r}return this.vertexArray.setAttributes(e),this}setUniforms(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.assign(this.uniforms,t),this}getModuleUniforms(t){this._checkProgram();const e=this.programManager.getUniforms(this.program);return e?e(t):{}}updateModuleSettings(t){const e=this.getModuleUniforms(t||{});return this.setUniforms(e)}clear(t){return Object(s.a)(this.program.gl,t),this}draw(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._checkProgram();const{moduleSettings:e=null,framebuffer:n,uniforms:i={},attributes:o={},transformFeedback:a=this.transformFeedback,parameters:s={},vertexArray:u=this.vertexArray}=t;let c;this.setAttributes(o),this.updateModuleSettings(e),this.setUniforms(i),r.k.priority>=2&&(c=this._logDrawCallStart(2));const l=this.vertexArray.getDrawParams(),{isIndexed:h=l.isIndexed,indexType:f=l.indexType,indexOffset:p=l.indexOffset,vertexArrayInstanced:d=l.isInstanced}=this.props;d&&!this.isInstanced&&r.k.warn("Found instanced attributes on non-instanced model",this.id)();const{isInstanced:A,instanceCount:g}=this,{onBeforeRender:m=R,onAfterRender:y=R}=this.props;m(),this.program.setUniforms(this.uniforms);const v=this.program.draw(Object.assign(k,t,{logPriority:c,uniforms:null,framebuffer:n,parameters:s,drawMode:this.getDrawMode(),vertexCount:this.getVertexCount(),vertexArray:u,transformFeedback:a,isIndexed:h,indexType:f,isInstanced:A,instanceCount:g,offset:h?p:0}));return y(),r.k.priority>=2&&this._logDrawCallEnd(c,u,n),v}transform(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{discard:e=!0,feedbackBuffers:n,unbindModels:r=[]}=t;let{parameters:i}=t;n&&this._setFeedbackBuffers(n),e&&(i=Object.assign({},i,{35977:e})),r.forEach(t=>t.vertexArray.unbindBuffers());try{this.draw(Object.assign({},t,{parameters:i}))}finally{r.forEach(t=>t.vertexArray.bindBuffers())}return this}render(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r.k.warn("Model.render() is deprecated. Use Model.setUniforms() and Model.draw()")(),this.setUniforms(t).draw()}_setModelProps(t){Object.assign(this.props,t),"uniforms"in t&&this.setUniforms(t.uniforms),"pickable"in t&&(this.pickable=t.pickable),"instanceCount"in t&&(this.instanceCount=t.instanceCount),"geometry"in t&&this.setGeometry(t.geometry),"attributes"in t&&this.setAttributes(t.attributes),"_feedbackBuffers"in t&&this._setFeedbackBuffers(t._feedbackBuffers)}_checkProgram(){if(!(this._programDirty||this.programManager.stateHash!==this._programManagerState))return;let{program:t}=this.programProps;if(t)this._managedProgram=!1;else{const{vs:e,fs:n,modules:r,inject:i,defines:o,varyings:a,bufferMode:s,transpileToGLSL100:u}=this.programProps;t=this.programManager.get({vs:e,fs:n,modules:r,inject:i,defines:o,varyings:a,bufferMode:s,transpileToGLSL100:u}),this.program&&this._managedProgram&&this.programManager.release(this.program),this._programManagerState=this.programManager.stateHash,this._managedProgram=!0}Object(a.a)(t instanceof u.a,"Model needs a program"),this._programDirty=!1,t!==this.program&&(this.program=t,this.vertexArray?this.vertexArray.setProps({program:this.program,attributes:this.vertexArray.attributes}):this.vertexArray=new v(this.gl,{program:this.program}),this.setUniforms(Object.assign({},this.getModuleUniforms())))}_deleteGeometryBuffers(){for(const t in this.geometryBuffers){const e=this.geometryBuffers[t][0]||this.geometryBuffers[t];e instanceof l.a&&e.delete()}}_setAnimationProps(t){this.animated&&Object(a.a)(t,"Model.draw(): animated uniforms but no animationProps")}_setFeedbackBuffers(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(Object(o.a)(t))return this;const{gl:e}=this.program;return this.transformFeedback=this.transformFeedback||new _.a(e,{program:this.program}),this.transformFeedback.setBuffers(t),this}_logDrawCallStart(t){const e=t>3?0:1e4;if(!(Date.now()-this.lastLogTime>> DRAWING MODEL ".concat(this.id),{collapsed:r.k.level<=2})(),t}_logDrawCallEnd(t,e,n,i){if(void 0===t)return;const o=function(t){let{vertexArray:e,header:n="Attributes"}=t;if(!e.configuration)return{};const r={};e.elements&&(r.ELEMENT_ARRAY_BUFFER=O(e,e.elements,null,n));const i=e.values;for(const t in i){const o=e._getAttributeInfo(t);if(o){let a="".concat(t,": ").concat(o.name);const s=e.accessors[o.location];s&&(a="".concat(t,": ").concat(S(o.name,s))),r[a]=O(e,i[t],s,n)}}return r}({vertexArray:e,header:"".concat(this.id," attributes"),attributes:this._attributes}),{table:a,unusedTable:s,unusedCount:u}=T({header:"".concat(this.id," uniforms"),program:this.program,uniforms:Object.assign({},this.program.uniforms,n)}),{table:c,count:l}=T({header:"".concat(this.id," uniforms"),program:this.program,uniforms:Object.assign({},this.program.uniforms,n),undefinedOnly:!0});l>0&&r.k.log("MISSING UNIFORMS",Object.keys(c))(),u>0&&r.k.log("UNUSED UNIFORMS",Object.keys(s))();const h=function(t){const e={},n="Accessors for ".concat(t.id);for(const r of t.attributeInfos)if(r){const t=P(r);e["in ".concat(t)]={[n]:JSON.stringify(r.accessor)}}for(const r of t.varyingInfos)if(r){const t=P(r);e["out ".concat(t)]={[n]:JSON.stringify(r.accessor)}}return e}(this.vertexArray.configuration);r.k.table(t,o)(),r.k.table(t,a)(),r.k.table(t+1,h)(),i&&i.log({logLevel:2,message:"Rendered to ".concat(i.id)}),r.k.groupEnd(2)()}}},function(t,e,n){"use strict";function r(t,e){if(!t)throw new Error(e||"shadertools: assertion failed.")}n.d(e,"a",(function(){return r}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n.d(e,"b",(function(){return s}));var r=n(8),i=n(10);const o=6144;function a(t){let{framebuffer:e=null,color:n=null,depth:o=null,stencil:a=null}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s={};e&&(s.framebuffer=e);let u=0;n&&(u|=16384,!0!==n&&(s.clearColor=n)),o&&(u|=256,!0!==o&&(s.clearDepth=o)),a&&(u|=1024,!0!==o&&(s.clearStencil=o)),Object(i.a)(0!==u,"clear: bad arguments"),Object(r.o)(t,s,()=>{t.clear(u)})}function s(t){let{framebuffer:e=null,buffer:n=o,drawBuffer:a=0,value:s=[0,0,0,0]}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Object(r.a)(t),Object(r.o)(t,{framebuffer:e},()=>{switch(n){case o:switch(s.constructor){case Int32Array:t.clearBufferiv(n,a,s);break;case Uint32Array:t.clearBufferuiv(n,a,s);break;case Float32Array:default:t.clearBufferfv(n,a,s)}break;case 6145:t.clearBufferfv(6145,0,[s]);break;case 6146:t.clearBufferiv(6146,0,[s]);break;case 34041:const[e,r]=s;t.clearBufferfi(34041,0,e,r);break;default:Object(i.a)(!1,"clear: bad arguments")}})}},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(71),i=n(102);const o={WEBGL2:"WEBGL2",VERTEX_ARRAY_OBJECT:"VERTEX_ARRAY_OBJECT",TIMER_QUERY:"TIMER_QUERY",INSTANCED_RENDERING:"INSTANCED_RENDERING",MULTIPLE_RENDER_TARGETS:"MULTIPLE_RENDER_TARGETS",ELEMENT_INDEX_UINT32:"ELEMENT_INDEX_UINT32",BLEND_EQUATION_MINMAX:"BLEND_EQUATION_MINMAX",FLOAT_BLEND:"FLOAT_BLEND",COLOR_ENCODING_SRGB:"COLOR_ENCODING_SRGB",TEXTURE_DEPTH:"TEXTURE_DEPTH",TEXTURE_FLOAT:"TEXTURE_FLOAT",TEXTURE_HALF_FLOAT:"TEXTURE_HALF_FLOAT",TEXTURE_FILTER_LINEAR_FLOAT:"TEXTURE_FILTER_LINEAR_FLOAT",TEXTURE_FILTER_LINEAR_HALF_FLOAT:"TEXTURE_FILTER_LINEAR_HALF_FLOAT",TEXTURE_FILTER_ANISOTROPIC:"TEXTURE_FILTER_ANISOTROPIC",COLOR_ATTACHMENT_RGBA32F:"COLOR_ATTACHMENT_RGBA32F",COLOR_ATTACHMENT_FLOAT:"COLOR_ATTACHMENT_FLOAT",COLOR_ATTACHMENT_HALF_FLOAT:"COLOR_ATTACHMENT_HALF_FLOAT",GLSL_FRAG_DATA:"GLSL_FRAG_DATA",GLSL_FRAG_DEPTH:"GLSL_FRAG_DEPTH",GLSL_DERIVATIVES:"GLSL_DERIVATIVES",GLSL_TEXTURE_LOD:"GLSL_TEXTURE_LOD"};e.b={[o.WEBGL2]:[!1,!0],[o.VERTEX_ARRAY_OBJECT]:["OES_vertex_array_object",!0],[o.TIMER_QUERY]:["EXT_disjoint_timer_query","EXT_disjoint_timer_query_webgl2"],[o.INSTANCED_RENDERING]:["ANGLE_instanced_arrays",!0],[o.MULTIPLE_RENDER_TARGETS]:["WEBGL_draw_buffers",!0],[o.ELEMENT_INDEX_UINT32]:["OES_element_index_uint",!0],[o.BLEND_EQUATION_MINMAX]:["EXT_blend_minmax",!0],[o.FLOAT_BLEND]:["EXT_float_blend"],[o.COLOR_ENCODING_SRGB]:["EXT_sRGB",!0],[o.TEXTURE_DEPTH]:["WEBGL_depth_texture",!0],[o.TEXTURE_FLOAT]:["OES_texture_float",!0],[o.TEXTURE_HALF_FLOAT]:["OES_texture_half_float",!0],[o.TEXTURE_FILTER_LINEAR_FLOAT]:["OES_texture_float_linear"],[o.TEXTURE_FILTER_LINEAR_HALF_FLOAT]:["OES_texture_half_float_linear"],[o.TEXTURE_FILTER_ANISOTROPIC]:["EXT_texture_filter_anisotropic"],[o.COLOR_ATTACHMENT_RGBA32F]:[function(t){const e=new i.a(t,{format:6408,type:5126,dataFormat:6408}),n=new r.a(t,{id:"test-framebuffer",check:!1,attachments:{36064:e}}),o=n.getStatus();return e.delete(),n.delete(),36053===o},"EXT_color_buffer_float"],[o.COLOR_ATTACHMENT_FLOAT]:[!1,"EXT_color_buffer_float"],[o.COLOR_ATTACHMENT_HALF_FLOAT]:["EXT_color_buffer_half_float"],[o.GLSL_FRAG_DATA]:["WEBGL_draw_buffers",!0],[o.GLSL_FRAG_DEPTH]:["EXT_frag_depth",!0],[o.GLSL_DERIVATIVES]:["OES_standard_derivatives",!0],[o.GLSL_TEXTURE_LOD]:["EXT_shader_texture_lod",!0]}},function(t,e,n){"use strict";n.d(e,"a",(function(){return i})),n.d(e,"b",(function(){return o}));var r=n(49);function i(t){const e="3.2.10"!==t.version?" (worker-utils@".concat("3.2.10",")"):"";return"".concat(t.name,"@").concat(t.version).concat(e)}function o(t,e={}){const n=e[t.id]||{},i="".concat(t.id,"-worker.js");let o=n.workerUrl;if(o||"compression"!==t.id||(o=e.workerUrl),"test"===e._workerType&&(o="modules/".concat(t.module,"/dist/").concat(i)),!o){let e=t.version;"latest"===e&&(e="latest");const n=e?"@".concat(e):"";o="https://unpkg.com/@loaders.gl/".concat(t.module).concat(n,"/dist/").concat(i)}return Object(r.a)(o),o}},function(t,e,n){"use strict";var r=n(74),i=n(179);n.d(e,"a",(function(){return a})),n.d(e,"c",(function(){return l})),n.d(e,"b",(function(){return h}));const o={[r.b]:"#ifdef MODULE_LOGDEPTH\n logdepth_adjustPosition(gl_Position);\n#endif\n",[r.a]:"#ifdef MODULE_MATERIAL\n gl_FragColor = material_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_LIGHTING\n gl_FragColor = lighting_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_FOG\n gl_FragColor = fog_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_PICKING\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_LOGDEPTH\n logdepth_setFragDepth();\n#endif\n"},a="__LUMA_INJECT_DECLARATIONS__",s=/void\s+main\s*\([^)]*\)\s*\{\n?/,u=/}\n?[^{}]*$/,c=[];function l(t,e,n){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const l=e===r.b;for(const e in n){const r=n[e];r.sort((t,e)=>t.order-e.order),c.length=r.length;for(let t=0,e=r.length;tt+i));break;case"vs:#main-end":l&&(t=t.replace(u,t=>i+t));break;case"fs:#decl":l||(t=t.replace(a,i));break;case"fs:#main-start":l||(t=t.replace(s,t=>t+i));break;case"fs:#main-end":l||(t=t.replace(u,t=>i+t));break;default:t=t.replace(e,t=>t+i)}}return t=t.replace(a,""),i&&(t=t.replace(/\}\s*$/,t=>t+o[e])),t}function h(t){const e={};return Object(i.a)(Array.isArray(t)&&t.length>1),t.forEach(t=>{for(const n in t)e[n]=e[n]?"".concat(e[n],"\n").concat(t[n]):t[n]}),e}},,,function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n.d(e,"b",(function(){return s}));var r=n(47),i=n(127),o=n(182);function a(t,e){return!!i.a.isSupported()&&(!!(r.b||null!=e&&e._nodeWorkers)&&(t.worker&&(null==e?void 0:e.worker)))}async function s(t,e,n,r,a){const s=t.id,c=Object(o.b)(t,n),l=i.a.getWorkerFarm(n).getWorkerPool({name:s,url:c});n=JSON.parse(JSON.stringify(n)),r=JSON.parse(JSON.stringify(r||{}));const h=await l.startJob("process-on-worker",u.bind(null,a));h.postMessage("process",{input:e,options:n,context:r});const f=await h.result;return await f.result}async function u(t,e,n,r){switch(n){case"done":e.done(r);break;case"error":e.error(new Error(r.error));break;case"process":const{id:i,input:o,options:a}=r;try{const n=await t(o,a);e.postMessage("done",{id:i,result:n})}catch(t){const n=t instanceof Error?t.message:"unknown error";e.postMessage("error",{id:i,error:n})}break;default:console.warn("parse-with-worker unknown message ".concat(n))}}},function(t,e,n){"use strict";n.r(e);var r=n(9),i=n.n(r),o=n(0),a=n.n(o),s=n(3),u=n.n(s),c=n(4),l=n.n(c),h=n(27),f=n.n(h);function p(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(!t)throw new Error("JSON conversion error ".concat(e))}function d(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return A(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return A(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function A(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n Jupyter Kernel)")).jupyterModel=null,t.jupyterView=null,t}return a()(n,[{key:"getRootDOMElement",value:function(){return this.jupyterView.el}},{key:"sendJSONMessage",value:function(t,e){var n=p.a._stringifyJSONSafe({type:t,data:e});this.jupyterModel.send(n)}}]),n}(p.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return O}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(7),u=n.n(s),c=n(5),l=n.n(c),h=n(6),f=n.n(h),p=n(2),d=n.n(p),A=n(0),g=n.n(A),m=n(157),y=n(31),v=n(65);function _(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return b(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return b(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function b(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{},n=this.props,r=n.opacity,i=n.pickable,o=n.visible,a=n.parameters,s=n.getPolygonOffset,u=n.highlightedObjectIndex,c=n.autoHighlight,l=n.highlightColor,h=n.coordinateSystem,f=n.coordinateOrigin,p=n.wrapLongitude,d=n.positionFormat,A=n.modelMatrix,g=n.extensions,m=n.fetch,y=n.operation,v=n._subLayerProps,b={id:"",updateTriggers:{},opacity:r,pickable:i,visible:o,parameters:a,getPolygonOffset:s,highlightedObjectIndex:u,autoHighlight:c,highlightColor:l,coordinateSystem:h,coordinateOrigin:f,wrapLongitude:p,positionFormat:d,modelMatrix:A,extensions:g,fetch:m,operation:y},x=v&&e.id&&v[e.id],E=x&&x.updateTriggers,O=e.id||"sublayer";if(x){var S=this.constructor._propTypes,T=e.type?e.type._propTypes:{};for(var C in x){var P=T[C]||S[C];P&&"accessor"===P.type&&(x[C]=this.getSubLayerAccessor(x[C]))}}Object.assign(b,e,x),b.id="".concat(this.props.id,"-").concat(O),b.updateTriggers=w(w({all:null===(t=this.props.updateTriggers)||void 0===t?void 0:t.all},e.updateTriggers),E);var M,I=_(g);try{for(I.s();!(M=I.n()).done;){var B=M.value,R=B.getSubLayerProps.call(this,B);R&&Object.assign(b,R,{updateTriggers:Object.assign(b.updateTriggers,R.updateTriggers)})}}catch(t){I.e(t)}finally{I.f()}return b}},{key:"_updateAutoHighlight",value:function(t){var e,n=_(this.getSubLayers());try{for(n.s();!(e=n.n()).done;){e.value.updateAutoHighlight(t)}}catch(t){n.e(t)}finally{n.f()}}},{key:"_getAttributeManager",value:function(){return null}},{key:"_postUpdate",value:function(t,e){var n=this.internalState.subLayers,r=!n||this.needsUpdate();if(r){var i=this.renderLayers();n=Object(v.b)(i,Boolean),this.internalState.subLayers=n}Object(y.a)("compositeLayer.renderLayers",this,r,n);var o,a=_(n);try{for(a.s();!(o=a.n()).done;){o.value.parent=this}}catch(t){a.e(t)}finally{a.f()}}}]),n}(m.a);g()(O,"layerName","CompositeLayer")},function(t,e,n){"use strict";var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(0),u=n.n(s),c=n(163),l=n(59),h=n(20),f=n(65);function p(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function d(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{clearRedrawFlags:!1},e=this._needsRedraw;return t.clearRedrawFlags&&(this._needsRedraw=!1),e}},{key:"setNeedsUpdate",value:function(t){this._needsUpdate=this._needsUpdate||t,this._needsRedraw=this._needsRedraw||t}},{key:"updateViewStates",value:function(){for(var t in this.controllers){var e=this.controllers[t];e&&e.updateTransition()}}},{key:"getViewports",value:function(t){return t?this._viewports.filter((function(e){return e.containsPixel(t)})):this._viewports}},{key:"getViews",value:function(){var t={};return this.views.forEach((function(e){t[e.id]=e})),t}},{key:"getView",value:function(t){return this.views.find((function(e){return e.id===t}))}},{key:"getViewState",value:function(t){var e="string"==typeof t?this.getView(t):t,n=e&&this.viewState[e.getViewStateId()]||this.viewState;return e?e.filterViewState(n):n}},{key:"getViewport",value:function(t){return this._viewportMap[t]}},{key:"unproject",value:function(t,e){for(var n=this.getViewports(),r={x:t[0],y:t[1]},i=n.length-1;i>=0;--i){var o=n[i];if(o.containsPixel(r)){var a=t.slice();return a[0]-=o.x,a[1]-=o.y,o.unproject(a,e)}}return null}},{key:"setProps",value:function(t){t.views&&this._setViews(t.views),t.viewState&&this._setViewState(t.viewState),("width"in t||"height"in t)&&this._setSize(t.width,t.height),this._isUpdating||this._update()}},{key:"_update",value:function(){this._isUpdating=!0,this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports()),this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports()),this._isUpdating=!1}},{key:"_setSize",value:function(t,e){t===this.width&&e===this.height||(this.width=t,this.height=e,this.setNeedsUpdate("Size changed"))}},{key:"_setViews",value:function(t){t=Object(f.b)(t,Boolean),this._diffViews(t,this.views)&&this.setNeedsUpdate("views changed"),this.views=t}},{key:"_setViewState",value:function(t){t?(!Object(l.a)(t,this.viewState)&&this.setNeedsUpdate("viewState changed"),this.viewState=t):h.a.warn("missing `viewState` or `initialViewState`")()}},{key:"_onViewStateChange",value:function(t,e){this._eventCallbacks.onViewStateChange&&this._eventCallbacks.onViewStateChange(d(d({},e),{},{viewId:t}))}},{key:"_createController",value:function(t,e){var n=this;return new(0,e.type)({timeline:this.timeline,eventManager:this._eventManager,onViewStateChange:this._onViewStateChange.bind(this,e.id),onStateChange:this._eventCallbacks.onInteractionStateChange,makeViewport:function(e){var r;return null===(r=n.getView(t.id))||void 0===r?void 0:r.makeViewport({viewState:e,width:n.width,height:n.height})}})}},{key:"_updateController",value:function(t,e,n,r){var i=t.controller;if(i){var o=d(d(d({},e),i),{},{id:t.id,x:n.x,y:n.y,width:n.width,height:n.height});return r||(r=this._createController(t,o)),r&&r.setProps(o),r}return null}},{key:"_rebuildViewports",value:function(){var t=this.views,e=this.controllers;this._viewports=[],this.controllers={};for(var n=!1,r=t.length;r--;){var i=t[r],o=this.getViewState(i),a=i.makeViewport({viewState:o,width:this.width,height:this.height}),s=e[i.id],u=Boolean(i.controller);u&&!s&&(n=!0),!n&&u||!s||(s.finalize(),s=null),this.controllers[i.id]=this._updateController(i,o,a,s),this._viewports.unshift(a)}for(var c in e){var l=e[c];l&&!this.controllers[c]&&l.finalize()}this._buildViewportMap()}},{key:"_buildViewportMap",value:function(){var t=this;this._viewportMap={},this._viewports.forEach((function(e){e.id&&(t._viewportMap[e.id]=t._viewportMap[e.id]||e)}))}},{key:"_diffViews",value:function(t,e){return t.length!==e.length||t.some((function(n,r){return!t[r].equals(e[r])}))}}]),t}(),g=n(146),m=n(132),y=n(102),v=n(13),_=n(7),b=n.n(_),x=n(5),w=n.n(x),E=n(6),O=n.n(E),S=n(2),T=n.n(S),C=n(71),P=n(8),M=n(12);function I(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function B(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function z(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function N(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n4)return h.a.warn("Too many mask layers. The max supported is 4")(),"continue";a={id:o,index:n.channels.findIndex((function(t){return(null==t?void 0:t.id)===o})),layers:[],layerBounds:[],coordinateOrigin:t.root.props.coordinateOrigin,coordinateSystem:t.root.props.coordinateSystem},r[o]=a}a.layers.push(t),a.layerBounds.push(t.getBounds())};for(o.s();!(e=o.n()).done;)a()}catch(t){o.e(t)}finally{o.f()}for(var s=0;s<4;s++){var u=this.channels[s];u&&u.id in r||(this.channels[s]=null)}for(var c in r){var l=r[c];l.index<0&&(l.index=this.channels.findIndex((function(t){return!t})),this.channels[l.index]=l)}return r}},{key:"getModuleParameters",value:function(){return{maskMap:this.masks?this.maskMap:this.dummyMaskMap,maskChannels:this.masks}}},{key:"cleanup",value:function(){this.dummyMaskMap&&(this.dummyMaskMap.delete(),this.dummyMaskMap=void 0),this.maskPass&&(this.maskPass.delete(),this.maskPass=void 0,this.maskMap=void 0),this.lastViewport=void 0,this.masks=null,this.channels.length=0}}]),t}();function V(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return H(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return H(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function H(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{clearRedrawFlags:!1},e=this._needsRedraw;return t.clearRedrawFlags&&(this._needsRedraw=!1),e}},{key:"getEffects",value:function(){return this._internalEffects}},{key:"finalize",value:function(){this.cleanup()}},{key:"setEffects",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.cleanup(),this.effects=t,this._internalEffects=t.slice(),this._internalEffects.push(new G),t.some((function(t){return t instanceof m.a}))||this._internalEffects.push(W)}},{key:"cleanup",value:function(){var t,e=V(this.effects);try{for(e.s();!(t=e.n()).done;){t.value.cleanup()}}catch(t){e.e(t)}finally{e.f()}var n,r=V(this._internalEffects);try{for(r.s();!(n=r.n()).done;){n.value.cleanup()}}catch(t){r.e(t)}finally{r.f()}this.effects.length=0,this._internalEffects.length=0}}]),t}(),X=n(165),J=n(197),Z=n(172);function Q(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function K(t){for(var e=1;ef)d+=4*c;else for(var y=0;y=0){var v=y+s-r,_=v*v+m;_<=f&&(f=_,p=d)}d+=4}}if(p>=0){var b=e.slice(p,p+4),x=n(b);if(x){var w=Math.floor(p/4/c),E=p/4-w*c;return K(K({},x),{},{pickedColor:b,pickedX:s+E,pickedY:u+w})}h.a.error("Picked non-existent layer. Is picking buffer corrupt?")()}return Y}function tt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function et(t){var e,n=t.pickInfo,r=t.viewports,i=t.pixelRatio,o=t.x,a=t.y,s=t.z,u=r[0];if(r.length>1&&(u=function(t,e){for(var n=t.length-1;n>=0;n--){var r=t[n];if(r.containsPixel(e))return r}return t[0]}((null==n?void 0:n.pickedViewports)||r,{x:o,y:a})),u){var c=[o-u.x,a-u.y];void 0!==s&&(c[2]=s),e=u.unproject(c)}return{color:null,layer:null,viewport:u,index:-1,picked:!1,x:o,y:a,pixel:[o,a],coordinate:e,devicePixel:n&&"pickedX"in n?[n.pickedX,n.pickedY]:void 0,pixelRatio:i}}function nt(t){var e=t.pickInfo,n=t.lastPickedInfo,r=t.mode,i=t.layers,o=e.pickedColor,a=e.pickedLayer,s=e.pickedObjectIndex,c=a?[a]:[];if("hover"===r){var l=n.index,h=n.layerId,f=a?a.props.id:null;if(f!==h||s!==l){if(f!==h){var p=i.find((function(t){return t.props.id===h}));p&&c.unshift(p)}n.layerId=f,n.index=s,n.info=null}}var d=et(t),A=new Map;return A.set(null,d),c.forEach((function(t){var e=function(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function ot(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:this.lastPickedInfo.info,a=o&&o.layer&&o.layer.id,s=o&&o.viewport&&o.viewport.id,u=a?r.find((function(t){return t.id===a})):null,c=s&&i.find((function(t){return t.id===s}))||i[0],l=c&&c.unproject([e-c.x,n-c.y]),h={x:e,y:n,viewport:c,coordinate:l,layer:u};return st(st({},o),h)}},{key:"_resizeBuffer",value:function(){var t,e,n=this.gl;if(!this.pickingFBO&&(this.pickingFBO=new C.a(n),C.a.isSupported(n,{colorBufferFloat:!0}))){var r=new C.a(n);r.attach(u()({},36064,new y.a(n,{format:Object(P.j)(n)?34836:6408,type:5126}))),this.depthFBO=r}null===(t=this.pickingFBO)||void 0===t||t.resize({width:n.canvas.width,height:n.canvas.height}),null===(e=this.depthFBO)||void 0===e||e.resize({width:n.canvas.width,height:n.canvas.height})}},{key:"_getPickable",value:function(t){if(!1===this._pickable)return null;var e=t.filter((function(t){return t.isPickable()&&!t.isComposite}));return e.length?e:null}},{key:"_pickClosestObject",value:function(t){var e=t.layers,n=t.views,r=t.viewports,i=t.x,o=t.y,a=t.radius,s=void 0===a?0:a,u=t.depth,c=void 0===u?1:u,l=t.mode,h=void 0===l?"query":l,f=t.unproject3D,p=t.onViewportActive,d=t.effects,A=this._getPickable(e),g=Object(P.e)(this.gl);if(!A)return{result:[],emptyInfo:et({viewports:r,x:i,y:o,pixelRatio:g})};this._resizeBuffer();for(var m,y=Object(P.d)(this.gl,[i,o],!0),v=[y.x+Math.floor(y.width/2),y.y+Math.floor(y.height/2)],_=Math.round(s*g),b=this.pickingFBO,x=b.width,w=b.height,E=this._getPickingRect({deviceX:v[0],deviceY:v[1],deviceRadius:_,deviceWidth:x,deviceHeight:w}),O={x:i-s,y:o-s,width:2*s+1,height:2*s+1},S=[],T=new Set,C=0;C=0){var o=e.slice(i,i+4),a=o.join(",");if(!r.has(a)){var s=n(o);s?r.set(a,K(K({},s),{},{color:o})):h.a.error("Picked non-existent layer. Is picking buffer corrupt?")()}}}return Array.from(r.values())}(this._drawAndSample({layers:m,views:n,viewports:r,onViewportActive:A,deviceRect:O,cullRect:{x:i,y:o,width:s,height:c},effects:g,pass:"picking:".concat(f)})),T=new Map,C=Number.isFinite(d),M=0;M=d);M++){var I=S[M],B={color:I.pickedColor,layer:null,index:I.pickedObjectIndex,picked:!0,x:i,y:o,pixelRatio:y};B=rt({layer:I.pickedLayer,info:B,mode:f}),T.has(B.object)||T.set(B.object,B)}return Array.from(T.values())}},{key:"_drawAndSample",value:function(t){var e=t.layers,n=t.views,r=t.viewports,i=t.onViewportActive,o=t.deviceRect,a=t.cullRect,s=t.effects,u=t.pass,c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],l=c?this.depthFBO:this.pickingFBO,h=this.pickLayersPass.render({layers:e,layerFilter:this.layerFilter,views:n,viewports:r,onViewportActive:i,pickingFBO:l,deviceRect:o,cullRect:a,effects:s,pass:u,pickZ:c}),f=h.decodePickingColor,p=o.x,d=o.y,A=o.width,g=o.height,m=new(c?Float32Array:Uint8Array)(A*g*4);return Object(J.c)(l,{sourceX:p,sourceY:d,sourceWidth:A,sourceHeight:g,target:m}),{pickedColors:m,decodePickingColor:f}}},{key:"_getPickingRect",value:function(t){var e=t.deviceX,n=t.deviceY,r=t.deviceRadius,i=t.deviceWidth,o=t.deviceHeight,a=Math.max(0,e-r),s=Math.max(0,n-r),u=Math.min(i,e+r+1)-a,c=Math.min(o,n+r+1)-s;return u<=0||c<=0?null:{x:a,y:s,width:u,height:c}}}]),t}(),ct={zIndex:"1",position:"absolute",pointerEvents:"none",color:"#a0a7b4",backgroundColor:"#29323c",padding:"10px",top:"0",left:"0",display:"none"},lt=function(){function t(e){i()(this,t),u()(this,"el",null),u()(this,"isVisible",!1);var n=e.parentElement;n&&(this.el=document.createElement("div"),this.el.className="deck-tooltip",Object.assign(this.el.style,ct),n.appendChild(this.el))}return a()(t,[{key:"setTooltip",value:function(t,e,n){var r=this.el;if(r){if("string"==typeof t)r.innerText=t;else{if(!t)return this.isVisible=!1,void(r.style.display="none");t.text&&(r.innerText=t.text),t.html&&(r.innerHTML=t.html),t.className&&(r.className=t.className),Object.assign(r.style,t.style)}this.isVisible=!0,r.style.display="block",r.style.transform="translate(".concat(e,"px, ").concat(n,"px)")}}},{key:"remove",value:function(){this.el&&(this.el.remove(),this.el=null)}}]),t}(),ht=n(66),ft=n(191),pt=n(285),dt=n(125),At=n(10),gt=n(38),mt=n(234),yt=n(181);class vt extends gt.a{get[Symbol.toStringTag](){return"Query"}static isSupported(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const n=Object(P.j)(t),r=Object(mt.c)(t,yt.a.TIMER_QUERY);let i=n||r;for(const t of e)switch(t){case"queries":i=i&&n;break;case"timers":i=i&&r;break;default:Object(At.a)(!1)}return i}constructor(t){super(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}),this.target=null,this._queryPending=!1,this._pollingPromise=null,Object.seal(this)}beginTimeElapsedQuery(){return this.begin(35007)}beginOcclusionQuery(){let{conservative:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.begin(t?36202:35887)}beginTransformFeedbackQuery(){return this.begin(35976)}begin(t){return this._queryPending||(this.target=t,this.gl2.beginQuery(this.target,this.handle)),this}end(){return this._queryPending||this.target&&(this.gl2.endQuery(this.target),this.target=null,this._queryPending=!0),this}isResultAvailable(){if(!this._queryPending)return!1;const t=this.gl2.getQueryParameter(this.handle,34919);return t&&(this._queryPending=!1),t}isTimerDisjoint(){return this.gl2.getParameter(36795)}getResult(){return this.gl2.getQueryParameter(this.handle,34918)}getTimerMilliseconds(){return this.getResult()/1e6}createPoll(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Number.POSITIVE_INFINITY;if(this._pollingPromise)return this._pollingPromise;let e=0;return this._pollingPromise=new Promise((n,r)=>{const i=()=>{this.isResultAvailable()?(n(this.getResult()),this._pollingPromise=null):e++>t?(r("Timed out"),this._pollingPromise=null):requestAnimationFrame(i)};requestAnimationFrame(i)}),this._pollingPromise}_createHandle(){return vt.isSupported(this.gl)?this.gl2.createQuery():null}_deleteHandle(){this.gl2.deleteQuery(this.handle)}}var _t=n(134);const bt=Object(_t.a)()&&"undefined"!=typeof document;let xt=0;class wt{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{onCreateContext:e=(t=>Object(P.c)(t)),onAddHTML:n=null,onInitialize:r=(()=>{}),onRender:i=(()=>{}),onFinalize:o=(()=>{}),onError:a,gl:s=null,glOptions:u={},debug:c=!1,createFramebuffer:l=!1,autoResizeViewport:h=!0,autoResizeDrawingBuffer:f=!0,stats:p=dt.b.get("animation-loop-".concat(xt++))}=t;let{useDevicePixels:d=!0}=t;"useDevicePixelRatio"in t&&(P.k.deprecated("useDevicePixelRatio","useDevicePixels")(),d=t.useDevicePixelRatio),this.props={onCreateContext:e,onAddHTML:n,onInitialize:r,onRender:i,onFinalize:o,onError:a,gl:s,glOptions:u,debug:c,createFramebuffer:l},this.gl=s,this.needsRedraw=null,this.timeline=null,this.stats=p,this.cpuTime=this.stats.get("CPU Time"),this.gpuTime=this.stats.get("GPU Time"),this.frameRate=this.stats.get("Frame Rate"),this._initialized=!1,this._running=!1,this._animationFrameId=null,this._nextFramePromise=null,this._resolveNextFrame=null,this._cpuStartTime=0,this.setProps({autoResizeViewport:h,autoResizeDrawingBuffer:f,useDevicePixels:d}),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this._pageLoadPromise=null,this._onMousemove=this._onMousemove.bind(this),this._onMouseleave=this._onMouseleave.bind(this)}delete(){this.stop(),this._setDisplay(null)}setNeedsRedraw(t){return Object(At.a)("string"==typeof t),this.needsRedraw=this.needsRedraw||t,this}setProps(t){return"autoResizeViewport"in t&&(this.autoResizeViewport=t.autoResizeViewport),"autoResizeDrawingBuffer"in t&&(this.autoResizeDrawingBuffer=t.autoResizeDrawingBuffer),"useDevicePixels"in t&&(this.useDevicePixels=t.useDevicePixels),this}start(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this._running)return this;this._running=!0;const e=this._getPageLoadPromise().then(()=>!this._running||this._initialized?null:(this._createWebGLContext(t),this._createFramebuffer(),this._startEventHandling(),this._initializeCallbackData(),this._updateCallbackData(),this._resizeCanvasDrawingBuffer(),this._resizeViewport(),this._gpuTimeQuery=vt.isSupported(this.gl,["timers"])?new vt(this.gl):null,this._initialized=!0,this.onInitialize(this.animationProps))).then(t=>{this._running&&(this._addCallbackData(t||{}),!1!==t&&this._startLoop())});return this.props.onError&&e.catch(this.props.onError),this}redraw(){return this.isContextLost()||(this._beginTimers(),this._setupFrame(),this._updateCallbackData(),this._renderFrame(this.animationProps),this._clearNeedsRedraw(),this.offScreen&&this.gl.commit&&this.gl.commit(),this._resolveNextFrame&&(this._resolveNextFrame(this),this._nextFramePromise=null,this._resolveNextFrame=null),this._endTimers()),this}stop(){return this._running&&(this._finalizeCallbackData(),this._cancelAnimationFrame(this._animationFrameId),this._nextFramePromise=null,this._resolveNextFrame=null,this._animationFrameId=null,this._running=!1),this}attachTimeline(t){return this.timeline=t,this.timeline}detachTimeline(){this.timeline=null}waitForRender(){return this.setNeedsRedraw("waitForRender"),this._nextFramePromise||(this._nextFramePromise=new Promise(t=>{this._resolveNextFrame=t})),this._nextFramePromise}async toDataURL(){return this.setNeedsRedraw("toDataURL"),await this.waitForRender(),this.gl.canvas.toDataURL()}isContextLost(){return this.gl.isContextLost()}onCreateContext(){return this.props.onCreateContext(...arguments)}onInitialize(){return this.props.onInitialize(...arguments)}onRender(){return this.props.onRender(...arguments)}onFinalize(){return this.props.onFinalize(...arguments)}getHTMLControlValue(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const n=document.getElementById(t);return n?Number(n.value):e}setViewParameters(){return P.k.removed("AnimationLoop.setViewParameters","AnimationLoop.setProps")(),this}_startLoop(){const t=()=>{this._running&&(this.redraw(),this._animationFrameId=this._requestAnimationFrame(t))};this._cancelAnimationFrame(this._animationFrameId),this._animationFrameId=this._requestAnimationFrame(t)}_getPageLoadPromise(){return this._pageLoadPromise||(this._pageLoadPromise=bt?new Promise((t,e)=>{bt&&"complete"===document.readyState?t(document):window.addEventListener("load",()=>{t(document)})}):Promise.resolve({})),this._pageLoadPromise}_setDisplay(t){this.display&&(this.display.delete(),this.display.animationLoop=null),t&&(t.animationLoop=this),this.display=t}_cancelAnimationFrame(t){return this.display&&this.display.cancelAnimationFrame?this.display.cancelAnimationFrame(t):(e=t,"undefined"!=typeof window&&window.cancelAnimationFrame?window.cancelAnimationFrame(e):clearTimeout(e));var e}_requestAnimationFrame(t){if(this._running)return this.display&&this.display.requestAnimationFrame?this.display.requestAnimationFrame(t):(e=t,"undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1e3/60));var e}_renderFrame(){this.display?this.display._renderFrame(...arguments):this.onRender(...arguments)}_clearNeedsRedraw(){this.needsRedraw=null}_setupFrame(){this._resizeCanvasDrawingBuffer(),this._resizeViewport(),this._resizeFramebuffer()}_initializeCallbackData(){this.animationProps={gl:this.gl,stop:this.stop,canvas:this.gl.canvas,framebuffer:this.framebuffer,useDevicePixels:this.useDevicePixels,needsRedraw:null,startTime:Date.now(),engineTime:0,tick:0,tock:0,time:0,_timeline:this.timeline,_loop:this,_animationLoop:this,_mousePosition:null}}_updateCallbackData(){const{width:t,height:e,aspect:n}=this._getSizeAndAspect();t===this.animationProps.width&&e===this.animationProps.height||this.setNeedsRedraw("drawing buffer resized"),n!==this.animationProps.aspect&&this.setNeedsRedraw("drawing buffer aspect changed"),this.animationProps.width=t,this.animationProps.height=e,this.animationProps.aspect=n,this.animationProps.needsRedraw=this.needsRedraw,this.animationProps.engineTime=Date.now()-this.animationProps.startTime,this.timeline&&this.timeline.update(this.animationProps.engineTime),this.animationProps.tick=Math.floor(this.animationProps.time/1e3*60),this.animationProps.tock++,this.animationProps.time=this.timeline?this.timeline.getTime():this.animationProps.engineTime,this.animationProps._offScreen=this.offScreen}_finalizeCallbackData(){this.onFinalize(this.animationProps)}_addCallbackData(t){"object"==typeof t&&null!==t&&(this.animationProps=Object.assign({},this.animationProps,t))}_createWebGLContext(t){if(this.offScreen=t.canvas&&"undefined"!=typeof OffscreenCanvas&&t.canvas instanceof OffscreenCanvas,t=Object.assign({},t,this.props.glOptions),this.gl=this.props.gl?Object(P.h)(this.props.gl,t):this.onCreateContext(t),!Object(P.i)(this.gl))throw new Error("AnimationLoop.onCreateContext - illegal context returned");Object(P.l)(this.gl),this._createInfoDiv()}_createInfoDiv(){if(this.gl.canvas&&this.props.onAddHTML){const t=document.createElement("div");document.body.appendChild(t),t.style.position="relative";const e=document.createElement("div");e.style.position="absolute",e.style.left="10px",e.style.bottom="10px",e.style.width="300px",e.style.background="white",t.appendChild(this.gl.canvas),t.appendChild(e);const n=this.props.onAddHTML(e);n&&(e.innerHTML=n)}}_getSizeAndAspect(){const t=this.gl.drawingBufferWidth,e=this.gl.drawingBufferHeight;let n=1;const{canvas:r}=this.gl;return r&&r.clientHeight?n=r.clientWidth/r.clientHeight:t>0&&e>0&&(n=t/e),{width:t,height:e,aspect:n}}_resizeViewport(){this.autoResizeViewport&&this.gl.viewport(0,0,this.gl.drawingBufferWidth,this.gl.drawingBufferHeight)}_resizeCanvasDrawingBuffer(){this.autoResizeDrawingBuffer&&Object(P.m)(this.gl,{useDevicePixels:this.useDevicePixels})}_createFramebuffer(){this.props.createFramebuffer&&(this.framebuffer=new C.a(this.gl))}_resizeFramebuffer(){this.framebuffer&&this.framebuffer.resize({width:this.gl.drawingBufferWidth,height:this.gl.drawingBufferHeight})}_beginTimers(){this.frameRate.timeEnd(),this.frameRate.timeStart(),this._gpuTimeQuery&&this._gpuTimeQuery.isResultAvailable()&&!this._gpuTimeQuery.isTimerDisjoint()&&this.stats.get("GPU Time").addTime(this._gpuTimeQuery.getTimerMilliseconds()),this._gpuTimeQuery&&this._gpuTimeQuery.beginTimeElapsedQuery(),this.cpuTime.timeStart()}_endTimers(){this.cpuTime.timeEnd(),this._gpuTimeQuery&&this._gpuTimeQuery.end()}_startEventHandling(){const{canvas:t}=this.gl;t&&(t.addEventListener("mousemove",this._onMousemove),t.addEventListener("mouseleave",this._onMouseleave))}_onMousemove(t){this.animationProps._mousePosition=[t.offsetX,t.offsetY]}_onMouseleave(t){this.animationProps._mousePosition=null}}var Et=n(287),Ot=n(73),St=n(139),Tt=n.n(St);const Ct={mousedown:1,mousemove:2,mouseup:4};!function(t){const e=t.prototype.handler;t.prototype.handler=function(t){const n=this.store;t.button>0&&"pointerdown"===t.type&&(function(t,e){for(let n=0;ne.pointerId===t.pointerId)||n.push(t)),e.call(this,t)}}(Tt.a.PointerEventInput),Tt.a.MouseInput.prototype.handler=function(t){let e=Ct[t.type];1&e&&t.button>=0&&(this.pressed=!0),2&e&&0===t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:"mouse",srcEvent:t}))};const Pt=Tt.a.Manager;var Mt=Tt.a;class It{constructor(t,e,n){this.element=t,this.callback=e,this.options={enable:!0,...n}}}const Bt=Mt?[[Mt.Pan,{event:"tripan",pointers:3,threshold:0,enable:!1}],[Mt.Rotate,{enable:!1}],[Mt.Pinch,{enable:!1}],[Mt.Swipe,{enable:!1}],[Mt.Pan,{threshold:0,enable:!1}],[Mt.Press,{enable:!1}],[Mt.Tap,{event:"doubletap",taps:2,enable:!1}],[Mt.Tap,{event:"anytap",enable:!1}],[Mt.Tap,{enable:!1}]]:null,Rt={tripan:["rotate","pinch","pan"],rotate:["pinch"],pinch:["pan"],pan:["press","doubletap","anytap","tap"],doubletap:["anytap"],anytap:["tap"]},kt={doubletap:["tap"]},Lt={pointerdown:"pointerdown",pointermove:"pointermove",pointerup:"pointerup",touchstart:"pointerdown",touchmove:"pointermove",touchend:"pointerup",mousedown:"pointerdown",mousemove:"pointermove",mouseup:"pointerup"},Dt={KEY_EVENTS:["keydown","keyup"],MOUSE_EVENTS:["mousedown","mousemove","mouseup","mouseover","mouseout","mouseleave"],WHEEL_EVENTS:["wheel","mousewheel"]},jt={tap:"tap",anytap:"anytap",doubletap:"doubletap",press:"press",pinch:"pinch",pinchin:"pinch",pinchout:"pinch",pinchstart:"pinch",pinchmove:"pinch",pinchend:"pinch",pinchcancel:"pinch",rotate:"rotate",rotatestart:"rotate",rotatemove:"rotate",rotateend:"rotate",rotatecancel:"rotate",tripan:"tripan",tripanstart:"tripan",tripanmove:"tripan",tripanup:"tripan",tripandown:"tripan",tripanleft:"tripan",tripanright:"tripan",tripanend:"tripan",tripancancel:"tripan",pan:"pan",panstart:"pan",panmove:"pan",panup:"pan",pandown:"pan",panleft:"pan",panright:"pan",panend:"pan",pancancel:"pan",swipe:"swipe",swipeleft:"swipe",swiperight:"swipe",swipeup:"swipe",swipedown:"swipe"},Ft={click:"tap",anyclick:"anytap",dblclick:"doubletap",mousedown:"pointerdown",mousemove:"pointermove",mouseup:"pointerup",mouseover:"pointerover",mouseout:"pointerout",mouseleave:"pointerleave"};var zt=n(105);const Ut=-1!==zt.b.indexOf("firefox"),{WHEEL_EVENTS:Nt}=Dt;class Gt extends It{constructor(t,e,n){super(t,e,n),this.handleEvent=t=>{if(!this.options.enable)return;let e=t.deltaY;zt.c.WheelEvent&&(Ut&&t.deltaMode===zt.c.WheelEvent.DOM_DELTA_PIXEL&&(e/=zt.c.devicePixelRatio),t.deltaMode===zt.c.WheelEvent.DOM_DELTA_LINE&&(e*=40)),0!==e&&e%4.000244140625==0&&(e=Math.floor(e/4.000244140625)),t.shiftKey&&e&&(e*=.25),this.callback({type:"wheel",center:{x:t.clientX,y:t.clientY},delta:-e,srcEvent:t,pointerType:"mouse",target:t.target})},this.events=(this.options.events||[]).concat(Nt),this.events.forEach(e=>t.addEventListener(e,this.handleEvent,!!zt.a&&{passive:!1}))}destroy(){this.events.forEach(t=>this.element.removeEventListener(t,this.handleEvent))}enableEventType(t,e){"wheel"===t&&(this.options.enable=e)}}const{MOUSE_EVENTS:Vt}=Dt;class Ht extends It{constructor(t,e,n){super(t,e,n),this.handleEvent=t=>{this.handleOverEvent(t),this.handleOutEvent(t),this.handleEnterEvent(t),this.handleLeaveEvent(t),this.handleMoveEvent(t)},this.pressed=!1;const{enable:r}=this.options;this.enableMoveEvent=r,this.enableLeaveEvent=r,this.enableEnterEvent=r,this.enableOutEvent=r,this.enableOverEvent=r,this.events=(this.options.events||[]).concat(Vt),this.events.forEach(e=>t.addEventListener(e,this.handleEvent))}destroy(){this.events.forEach(t=>this.element.removeEventListener(t,this.handleEvent))}enableEventType(t,e){"pointermove"===t&&(this.enableMoveEvent=e),"pointerover"===t&&(this.enableOverEvent=e),"pointerout"===t&&(this.enableOutEvent=e),"pointerenter"===t&&(this.enableEnterEvent=e),"pointerleave"===t&&(this.enableLeaveEvent=e)}handleOverEvent(t){this.enableOverEvent&&"mouseover"===t.type&&this._emit("pointerover",t)}handleOutEvent(t){this.enableOutEvent&&"mouseout"===t.type&&this._emit("pointerout",t)}handleEnterEvent(t){this.enableEnterEvent&&"mouseenter"===t.type&&this._emit("pointerenter",t)}handleLeaveEvent(t){this.enableLeaveEvent&&"mouseleave"===t.type&&this._emit("pointerleave",t)}handleMoveEvent(t){if(this.enableMoveEvent)switch(t.type){case"mousedown":t.button>=0&&(this.pressed=!0);break;case"mousemove":0===t.which&&(this.pressed=!1),this.pressed||this._emit("pointermove",t);break;case"mouseup":this.pressed=!1}}_emit(t,e){this.callback({type:t,center:{x:e.clientX,y:e.clientY},srcEvent:e,pointerType:"mouse",target:e.target})}}const{KEY_EVENTS:Wt}=Dt;class qt extends It{constructor(t,e,n){super(t,e,n),this.handleEvent=t=>{const e=t.target||t.srcElement;"INPUT"===e.tagName&&"text"===e.type||"TEXTAREA"===e.tagName||(this.enableDownEvent&&"keydown"===t.type&&this.callback({type:"keydown",srcEvent:t,key:t.key,target:t.target}),this.enableUpEvent&&"keyup"===t.type&&this.callback({type:"keyup",srcEvent:t,key:t.key,target:t.target}))},this.enableDownEvent=this.options.enable,this.enableUpEvent=this.options.enable,this.events=(this.options.events||[]).concat(Wt),t.tabIndex=this.options.tabIndex||0,t.style.outline="none",this.events.forEach(e=>t.addEventListener(e,this.handleEvent))}destroy(){this.events.forEach(t=>this.element.removeEventListener(t,this.handleEvent))}enableEventType(t,e){"keydown"===t&&(this.enableDownEvent=e),"keyup"===t&&(this.enableUpEvent=e)}}class Xt extends It{constructor(t,e,n){super(t,e,n),this.handleEvent=t=>{this.options.enable&&this.callback({type:"contextmenu",center:{x:t.clientX,y:t.clientY},srcEvent:t,pointerType:"mouse",target:t.target})},t.addEventListener("contextmenu",this.handleEvent)}destroy(){this.element.removeEventListener("contextmenu",this.handleEvent)}enableEventType(t,e){"contextmenu"===t&&(this.options.enable=e)}}const Jt={pointerdown:1,pointermove:2,pointerup:4,mousedown:1,mousemove:2,mouseup:4};function Zt(t){const e=Jt[t.srcEvent.type];if(!e)return null;const{buttons:n,button:r,which:i}=t.srcEvent;let o=!1,a=!1,s=!1;return 4===e||2===e&&!Number.isFinite(n)?(o=1===i,a=2===i,s=3===i):2===e?(o=Boolean(1&n),a=Boolean(4&n),s=Boolean(2&n)):1===e&&(o=0===r,a=1===r,s=2===r),{leftButton:o,middleButton:a,rightButton:s}}function Qt(t,e){const n=t.center;if(!n)return null;const r=e.getBoundingClientRect(),i=r.width/e.offsetWidth||1,o=r.height/e.offsetHeight||1;return{center:n,offsetCenter:{x:(n.x-r.left-e.clientLeft)/i,y:(n.y-r.top-e.clientTop)/o}}}const Kt={srcElement:"root",priority:0};class Yt{constructor(t){this.handleEvent=t=>{if(this.isEmpty())return;const e=this._normalizeEvent(t);let n=t.srcEvent.target;for(;n&&n!==e.rootElement;){if(this._emit(e,n),e.handled)return;n=n.parentNode}this._emit(e,"root")},this.eventManager=t,this.handlers=[],this.handlersByElement=new Map,this._active=!1}isEmpty(){return!this._active}add(t,e,n,r=!1,i=!1){const{handlers:o,handlersByElement:a}=this;let s=Kt;"string"==typeof n||n&&n.addEventListener?s={...Kt,srcElement:n}:n&&(s={...Kt,...n});let u=a.get(s.srcElement);u||(u=[],a.set(s.srcElement,u));const c={type:t,handler:e,srcElement:s.srcElement,priority:s.priority};r&&(c.once=!0),i&&(c.passive=!0),o.push(c),this._active=this._active||!c.passive;let l=u.length-1;for(;l>=0&&!(u[l].priority>=c.priority);)l--;u.splice(l+1,0,c)}remove(t,e){const{handlers:n,handlersByElement:r}=this;for(let i=n.length-1;i>=0;i--){const o=n[i];if(o.type===t&&o.handler===e){n.splice(i,1);const t=r.get(o.srcElement);t.splice(t.indexOf(o),1),0===t.length&&r.delete(o.srcElement)}}this._active=n.some(t=>!t.passive)}_emit(t,e){const n=this.handlersByElement.get(e);if(n){let e=!1;const r=()=>{t.handled=!0},i=()=>{t.handled=!0,e=!0},o=[];for(let a=0;a{t.srcEvent.preventDefault()},stopImmediatePropagation:null,stopPropagation:null,handled:!1,rootElement:e}}}const $t={events:null,recognizers:null,recognizerOptions:{},Manager:Pt,touchAction:"none",tabIndex:0};class te{constructor(t=null,e){this._onBasicInput=t=>{const{srcEvent:e}=t,n=Lt[e.type];n&&this.manager.emit(n,t)},this._onOtherEvent=t=>{this.manager.emit(t.type,t)},this.options={...$t,...e},this.events=new Map,this.setElement(t);const{events:n}=this.options;n&&this.on(n)}getElement(){return this.element}setElement(t){if(this.element&&this.destroy(),this.element=t,!t)return;const{options:e}=this,n=e.Manager;this.manager=new n(t,{touchAction:e.touchAction,recognizers:e.recognizers||Bt}).on("hammer.input",this._onBasicInput),e.recognizers||Object.keys(Rt).forEach(t=>{const e=this.manager.get(t);e&&Rt[t].forEach(t=>{e.recognizeWith(t)})});for(const t in e.recognizerOptions){const n=this.manager.get(t);if(n){const r=e.recognizerOptions[t];delete r.enable,n.set(r)}}this.wheelInput=new Gt(t,this._onOtherEvent,{enable:!1}),this.moveInput=new Ht(t,this._onOtherEvent,{enable:!1}),this.keyInput=new qt(t,this._onOtherEvent,{enable:!1,tabIndex:e.tabIndex}),this.contextmenuInput=new Xt(t,this._onOtherEvent,{enable:!1});for(const[t,e]of this.events)e.isEmpty()||(this._toggleRecognizer(e.recognizerName,!0),this.manager.on(t,e.handleEvent))}destroy(){this.element&&(this.wheelInput.destroy(),this.moveInput.destroy(),this.keyInput.destroy(),this.contextmenuInput.destroy(),this.manager.destroy(),this.wheelInput=null,this.moveInput=null,this.keyInput=null,this.contextmenuInput=null,this.manager=null,this.element=null)}on(t,e,n){this._addEventHandler(t,e,n,!1)}once(t,e,n){this._addEventHandler(t,e,n,!0)}watch(t,e,n){this._addEventHandler(t,e,n,!1,!0)}off(t,e){this._removeEventHandler(t,e)}_toggleRecognizer(t,e){const{manager:n}=this;if(!n)return;const r=n.get(t);if(r&&r.options.enable!==e){r.set({enable:e});const i=kt[t];i&&!this.options.recognizers&&i.forEach(i=>{const o=n.get(i);e?(o.requireFailure(t),r.dropRequireFailure(i)):o.dropRequireFailure(t)})}this.wheelInput.enableEventType(t,e),this.moveInput.enableEventType(t,e),this.keyInput.enableEventType(t,e),this.contextmenuInput.enableEventType(t,e)}_addEventHandler(t,e,n,r,i){if("string"!=typeof t){n=e;for(const e in t)this._addEventHandler(e,t[e],n,r,i);return}const{manager:o,events:a}=this,s=Ft[t]||t;let u=a.get(s);u||(u=new Yt(this),a.set(s,u),u.recognizerName=jt[s]||s,o&&o.on(s,u.handleEvent)),u.add(t,e,n,r,i),u.isEmpty()||this._toggleRecognizer(u.recognizerName,!0)}_removeEventHandler(t,e){if("string"!=typeof t){for(const e in t)this._removeEventHandler(e,t[e]);return}const{events:n}=this,r=Ft[t]||t,i=n.get(r);if(i&&(i.remove(t,e),i.isEmpty())){const{recognizerName:t}=i;let e=!1;for(const r of n.values())if(r.recognizerName===t&&!r.isEmpty()){e=!0;break}e||this._toggleRecognizer(t,!1)}}}var ee=n(28);function ne(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return re(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return re(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function re(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{clearRedrawFlags:!1};if(!this.layerManager)return!1;if(this.props._animate)return"Deck._animate";var e=this._needsRedraw;t.clearRedrawFlags&&(this._needsRedraw=!1);var n=this.viewManager.needsRedraw(t),r=this.layerManager.needsRedraw(t),i=this.effectManager.needsRedraw(t),o=this.deckRenderer.needsRedraw(t);return e=e||n||r||i||o}},{key:"redraw",value:function(t){if(this.layerManager){var e=this.needsRedraw({clearRedrawFlags:!0});(e=t||e)&&(this.stats.get("Redraw Count").incrementCount(),this.props._customRender?this.props._customRender(e):this._drawLayers(e))}}},{key:"isInitialized",get:function(){return null!==this.viewManager}},{key:"getViews",value:function(){return Object(ee.a)(this.viewManager),this.viewManager.views}},{key:"getViewports",value:function(t){return Object(ee.a)(this.viewManager),this.viewManager.getViewports(t)}},{key:"pickObject",value:function(t){var e=this._pick("pickObject","pickObject Time",t).result;return e.length?e[0]:null}},{key:"pickMultipleObjects",value:function(t){return t.depth=t.depth||10,this._pick("pickObject","pickMultipleObjects Time",t).result}},{key:"pickObjects",value:function(t){return this._pick("pickObjects","pickObjects Time",t)}},{key:"_addResources",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];for(var n in t)this.layerManager.resourceManager.add({resourceId:n,data:t[n],forceUpdate:e})}},{key:"_removeResources",value:function(t){var e,n=ne(t);try{for(n.s();!(e=n.n()).done;){var r=e.value;this.layerManager.resourceManager.remove(r)}}catch(t){n.e(t)}finally{n.f()}}},{key:"_pick",value:function(t,e,n){Object(ee.a)(this.deckPicker);var r=this.stats;r.get("Pick Count").incrementCount(),r.get(e).timeStart();var i=this.deckPicker[t](oe({layers:this.layerManager.getLayers(n),views:this.viewManager.getViews(),viewports:this.getViewports(n),onViewportActive:this.layerManager.activateViewport,effects:this.effectManager.getEffects()},n));return r.get(e).timeEnd(),i}},{key:"_createCanvas",value:function(t){var e=t.canvas;("string"==typeof e&&(e=document.getElementById(e),Object(ee.a)(e)),e)||((e=document.createElement("canvas")).id=t.id||"deckgl-overlay",(t.parent||document.body).appendChild(e));return Object.assign(e.style,t.style),e}},{key:"_setCanvasSize",value:function(t){if(this.canvas){var e=t.width,n=t.height;if(e||0===e){var r=Number.isFinite(e)?"".concat(e,"px"):e;this.canvas.style.width=r}if(n||0===n){var i,o=Number.isFinite(n)?"".concat(n,"px"):n;this.canvas.style.position=(null===(i=t.style)||void 0===i?void 0:i.position)||"absolute",this.canvas.style.height=o}}}},{key:"_updateCanvasSize",value:function(){var t=this.canvas;if(t){var e,n=t.clientWidth||t.width,r=t.clientHeight||t.height;if(n!==this.width||r!==this.height)this.width=n,this.height=r,null===(e=this.viewManager)||void 0===e||e.setProps({width:n,height:r}),this.props.onResize({width:n,height:r})}}},{key:"_createAnimationLoop",value:function(t){var e=this,n=t.width,r=t.height,i=t.gl,o=t.glOptions,a=t.debug,s=t.onError,u=t.onBeforeRender,c=t.onAfterRender,l=t.useDevicePixels;return new wt({width:n,height:r,useDevicePixels:l,autoResizeViewport:!1,gl:i,onCreateContext:function(t){return Object(P.c)(oe(oe(oe({},o),t),{},{canvas:e.canvas,debug:a,onContextLost:function(){return e._onContextLost()}}))},onInitialize:function(t){return e._setGLContext(t.gl)},onRender:this._onRenderFrame.bind(this),onBeforeRender:u,onAfterRender:c,onError:s})}},{key:"_getViewState",value:function(){return this.props.viewState||this.viewState}},{key:"_getViews",value:function(){var t=this.props.views||[new g.a({id:"default-view"})];return(t=Array.isArray(t)?t:[t]).length&&this.props.controller&&(t[0].props.controller=this.props.controller),t}},{key:"_onContextLost",value:function(){var t=this.props.onError;this.animationLoop&&t&&t(new Error("WebGL context is lost"))}},{key:"_pickAndCallback",value:function(){var t=this._pickRequest;if(t.event){var e=this._pick("pickObject","pickObject Time",t),n=e.result,r=e.emptyInfo;this.cursorState.isHovering=n.length>0;var i,o=r,a=!1,s=ne(n);try{for(s.s();!(i=s.n()).done;){var u,c=i.value;o=c,a=(null===(u=c.layer)||void 0===u?void 0:u.onHover(c,t.event))||a}}catch(t){s.e(t)}finally{s.f()}if(!a&&this.props.onHover&&this.props.onHover(o,t.event),this.props.getTooltip&&this.tooltip){var l=this.props.getTooltip(o);this.tooltip.setTooltip(l,o.x,o.y)}t.event=null}}},{key:"_updateCursor",value:function(){var t=this.props.parent||this.canvas;t&&(t.style.cursor=this.props.getCursor(this.cursorState))}},{key:"_setGLContext",value:function(t){if(!this.layerManager){this.canvas||(this.canvas=t.canvas,Object(P.h)(t,{enable:!0,copyState:!0})),this.tooltip=new lt(this.canvas),Object(P.n)(t,{blend:!0,blendFunc:[770,771,1,771],polygonOffsetFill:!0,depthTest:!0,depthFunc:515}),this.props.onWebGLInitialized(t);var e=new Et.a;for(var n in e.play(),this.animationLoop.attachTimeline(e),this.eventManager=new te(this.props.parent||t.canvas,{touchAction:this.props.touchAction,recognizerOptions:this.props.eventRecognizerOptions,events:{pointerdown:this._onPointerDown,pointermove:this._onPointerMove,pointerleave:this._onPointerMove}}),M.b)this.eventManager.on(n,this._onEvent);this.viewManager=new A({timeline:e,eventManager:this.eventManager,onViewStateChange:this._onViewStateChange.bind(this),onInteractionStateChange:this._onInteractionStateChange.bind(this),views:this._getViews(),viewState:this._getViewState(),width:this.width,height:this.height});var r=this.viewManager.getViewports()[0];this.layerManager=new c.a(t,{deck:this,stats:this.stats,viewport:r,timeline:e}),this.effectManager=new q,this.deckRenderer=new X.a(t),this.deckPicker=new ut(t),this.setProps(this.props),this._updateCanvasSize(),this.props.onLoad()}}},{key:"_drawLayers",value:function(t,e){var n=this.layerManager.context.gl;Object(P.n)(n,this.props.parameters),this.props.onBeforeRender({gl:n}),this.deckRenderer.renderLayers(oe({target:this.props._framebuffer,layers:this.layerManager.getLayers(),viewports:this.viewManager.getViewports(),onViewportActive:this.layerManager.activateViewport,views:this.viewManager.getViews(),pass:"screen",redrawReason:t,effects:this.effectManager.getEffects()},e)),this.props.onAfterRender({gl:n})}},{key:"_onRenderFrame",value:function(t){this._getFrameStats(),this._metricsCounter++%60==0&&(this._getMetrics(),this.stats.reset(),h.a.table(4,this.metrics)(),this.props._onMetrics&&this.props._onMetrics(this.metrics)),this._updateCanvasSize(),this._updateCursor(),this.tooltip.isVisible&&this.viewManager.needsRedraw()&&this.tooltip.setTooltip(null),this.layerManager.updateLayers(),this._pickAndCallback(),this.redraw(),this.viewManager&&this.viewManager.updateViewStates()}},{key:"_onViewStateChange",value:function(t){var e=this.props.onViewStateChange(t)||t.viewState;this.viewState&&(this.viewState=oe(oe({},this.viewState),{},u()({},t.viewId,e)),this.props.viewState||this.viewManager&&this.viewManager.setProps({viewState:this.viewState}))}},{key:"_onInteractionStateChange",value:function(t){this.cursorState.isDragging=t.isDragging||!1,this.props.onInteractionStateChange(t)}},{key:"_getFrameStats",value:function(){var t=this.stats;t.get("frameRate").timeEnd(),t.get("frameRate").timeStart();var e=this.animationLoop.stats;t.get("GPU Time").addTime(e.get("GPU Time").lastTiming),t.get("CPU Time").addTime(e.get("CPU Time").lastTiming)}},{key:"_getMetrics",value:function(){var t=this.metrics,e=this.stats;t.fps=e.get("frameRate").getHz(),t.setPropsTime=e.get("setProps Time").time,t.updateAttributesTime=e.get("Update Attributes").time,t.framesRedrawn=e.get("Redraw Count").count,t.pickTime=e.get("pickObject Time").time+e.get("pickMultipleObjects Time").time+e.get("pickObjects Time").time,t.pickCount=e.get("Pick Count").count,t.gpuTime=e.get("GPU Time").time,t.cpuTime=e.get("CPU Time").time,t.gpuTimePerFrame=e.get("GPU Time").getAverageTime(),t.cpuTimePerFrame=e.get("CPU Time").getAverageTime();var n=dt.b.get("Memory Usage");t.bufferMemory=n.get("Buffer Memory").count,t.textureMemory=n.get("Texture Memory").count,t.renderbufferMemory=n.get("Renderbuffer Memory").count,t.gpuMemory=n.get("GPU Memory").count}}]),t}();u()(ue,"defaultProps",se),u()(ue,"VERSION",ft.a.VERSION)},function(t,e,n){"use strict";var r=n(0),i=n.n(r),o=n(107),a=n(291),s=n(20),u=n(31);var c={id:"JSON",name:"JSON",module:"",version:"",options:{},extensions:["json","geojson"],mimeTypes:["application/json","application/geo+json"],testText:function(t){var e=t[0],n=t[t.length-1];return"{"===e&&"}"===n||"["===e&&"]"===n},parseTextSync:JSON.parse};function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function h(t){for(var e=1;e>>0):4294967296*(e>>>0)+(t>>>0)}function u(t,e,n){var r=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));n.realloc(r);for(var i=n.pos-1;i>=t;i--)n.buf[i+r]=n.buf[i]}function c(t,e){for(var n=0;n>>8,t[n+2]=e>>>16,t[n+3]=e>>>24}function _(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}i.prototype={destroy:function(){this.buf=null},readFields:function(t,e,n){for(n=n||this.length;this.pos>3,o=this.pos;this.type=7&r,t(i,e,this),this.pos===o&&this.skip(r)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=y(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=_(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=y(this.buf,this.pos)+4294967296*y(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=y(this.buf,this.pos)+4294967296*_(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=r.read(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=r.read(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,n,r=this.buf;return e=127&(n=r[this.pos++]),n<128?e:(e|=(127&(n=r[this.pos++]))<<7,n<128?e:(e|=(127&(n=r[this.pos++]))<<14,n<128?e:(e|=(127&(n=r[this.pos++]))<<21,n<128?e:function(t,e,n){var r,i,o=n.buf;if(i=o[n.pos++],r=(112&i)>>4,i<128)return s(t,r,e);if(i=o[n.pos++],r|=(127&i)<<3,i<128)return s(t,r,e);if(i=o[n.pos++],r|=(127&i)<<10,i<128)return s(t,r,e);if(i=o[n.pos++],r|=(127&i)<<17,i<128)return s(t,r,e);if(i=o[n.pos++],r|=(127&i)<<24,i<128)return s(t,r,e);if(i=o[n.pos++],r|=(1&i)<<31,i<128)return s(t,r,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(n=r[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&o?function(t,e,n){return o.decode(t.subarray(e,n))}(this.buf,e,t):function(t,e,n){var r="",i=e;for(;i239?4:u>223?3:u>191?2:1;if(i+l>n)break;1===l?u<128&&(c=u):2===l?128==(192&(o=t[i+1]))&&(c=(31&u)<<6|63&o)<=127&&(c=null):3===l?(o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&((c=(15&u)<<12|(63&o)<<6|63&a)<=2047||c>=55296&&c<=57343)&&(c=null)):4===l&&(o=t[i+1],a=t[i+2],s=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&((c=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s)<=65535||c>=1114112)&&(c=null)),null===c?(c=65533,l=1):c>65535&&(c-=65536,r+=String.fromCharCode(c>>>10&1023|55296),c=56320|1023&c),r+=String.fromCharCode(c),i+=l}return r}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==i.Bytes)return t.push(this.readVarint(e));var n=a(this);for(t=t||[];this.pos127;);else if(e===i.Bytes)this.pos=this.readVarint()+this.pos;else if(e===i.Fixed32)this.pos+=4;else{if(e!==i.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e268435455||t<0?function(t,e){var n,r;t>=0?(n=t%4294967296|0,r=t/4294967296|0):(r=~(-t/4294967296),4294967295^(n=~(-t%4294967296))?n=n+1|0:(n=0,r=r+1|0));if(t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,n){n.buf[n.pos++]=127&t|128,t>>>=7,n.buf[n.pos++]=127&t|128,t>>>=7,n.buf[n.pos++]=127&t|128,t>>>=7,n.buf[n.pos++]=127&t|128,t>>>=7,n.buf[n.pos]=127&t}(n,0,e),function(t,e){var n=(7&t)<<4;if(e.buf[e.pos++]|=n|((t>>>=3)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;e.buf[e.pos++]=127&t}(r,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,n){for(var r,i,o=0;o55295&&r<57344){if(!i){r>56319||o+1===e.length?(t[n++]=239,t[n++]=191,t[n++]=189):i=r;continue}if(r<56320){t[n++]=239,t[n++]=191,t[n++]=189,i=r;continue}r=i-55296<<10|r-56320|65536,i=null}else i&&(t[n++]=239,t[n++]=191,t[n++]=189,i=null);r<128?t[n++]=r:(r<2048?t[n++]=r>>6|192:(r<65536?t[n++]=r>>12|224:(t[n++]=r>>18|240,t[n++]=r>>12&63|128),t[n++]=r>>6&63|128),t[n++]=63&r|128)}return n}(this.buf,t,this.pos);var n=this.pos-e;n>=128&&u(e,n,this),this.pos=e-1,this.writeVarint(n),this.pos+=n},writeFloat:function(t){this.realloc(4),r.write(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),r.write(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var n=0;n=128&&u(n,r,this),this.pos=n-1,this.writeVarint(r),this.pos+=r},writeMessage:function(t,e,n){this.writeTag(t,i.Bytes),this.writeRawMessage(e,n)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,c,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,l,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,p,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,h,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,f,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,d,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,A,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,g,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,m,e)},writeBytesField:function(t,e){this.writeTag(t,i.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,i.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,i.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,i.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,i.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,i.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,i.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,i.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,i.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,i.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}}},function(t,e,n){const r=n(264),i={"||":function(t,e){return t||e},"&&":function(t,e){return t&&e},"|":function(t,e){return t|e},"^":function(t,e){return t^e},"&":function(t,e){return t&e},"==":function(t,e){return t==e},"!=":function(t,e){return t!=e},"===":function(t,e){return t===e},"!==":function(t,e){return t!==e},"<":function(t,e){return t":function(t,e){return t>e},"<=":function(t,e){return t<=e},">=":function(t,e){return t>=e},"<<":function(t,e){return t<>":function(t,e){return t>>e},">>>":function(t,e){return t>>>e},"+":function(t,e){return t+e},"-":function(t,e){return t-e},"*":function(t,e){return t*e},"/":function(t,e){return t/e},"%":function(t,e){return t%e}},o={"-":function(t){return-t},"+":function(t){return+t},"~":function(t){return~t},"!":function(t){return!t}};function a(t,e){return t.map((function(t){return l(t,e)}))}async function s(t,e){return await Promise.all(t.map(t=>h(t,e)))}function u(t,e){const n=l(t.object,e);return t.computed?[n,n[l(t.property,e)]]:[n,n[t.property.name]]}async function c(t,e){const n=await h(t.object,e);return t.computed?[n,n[await h(t.property,e)]]:[n,n[t.property.name]]}function l(t,e){switch(t.type){case"ArrayExpression":return a(t.elements,e);case"BinaryExpression":return i[t.operator](l(t.left,e),l(t.right,e));case"CallExpression":let n,r,s;if("MemberExpression"===t.callee.type?(s=u(t.callee,e),n=s[0],r=s[1]):r=l(t.callee,e),"function"!=typeof r)return;return r.apply(n,a(t.arguments,e));case"ConditionalExpression":return l(t.test,e)?l(t.consequent,e):l(t.alternate,e);case"Identifier":return e[t.name];case"Literal":return t.value;case"LogicalExpression":return"||"===t.operator?l(t.left,e)||l(t.right,e):"&&"===t.operator?l(t.left,e)&&l(t.right,e):i[t.operator](l(t.left,e),l(t.right,e));case"MemberExpression":return u(t,e)[1];case"ThisExpression":return e;case"UnaryExpression":return o[t.operator](l(t.argument,e));default:return}}async function h(t,e){switch(t.type){case"ArrayExpression":return await s(t.elements,e);case"BinaryExpression":{const[n,r]=await Promise.all([h(t.left,e),h(t.right,e)]);return i[t.operator](n,r)}case"CallExpression":let n,r,a;if("MemberExpression"===t.callee.type?(a=await c(t.callee,e),n=a[0],r=a[1]):r=await h(t.callee,e),"function"!=typeof r)return;return await r.apply(n,await s(t.arguments,e));case"ConditionalExpression":return await h(t.test,e)?await h(t.consequent,e):await h(t.alternate,e);case"Identifier":return e[t.name];case"Literal":return t.value;case"LogicalExpression":{if("||"===t.operator)return await h(t.left,e)||await h(t.right,e);if("&&"===t.operator)return await h(t.left,e)&&await h(t.right,e);const[n,r]=await Promise.all([h(t.left,e),h(t.right,e)]);return i[t.operator](n,r)}case"MemberExpression":return(await c(t,e))[1];case"ThisExpression":return e;case"UnaryExpression":return o[t.operator](await h(t.argument,e));default:return}}t.exports={parse:r,eval:l,evalAsync:h,compile:function(t){return l.bind(null,r(t))},compileAsync:function(t){return h.bind(null,r(t))}}},function(t,e,n){"use strict";var r=n(74),i=n(196),o=n(179);function a(t){return s(function t(e,n){return e.map(e=>(e instanceof i.a||(Object(o.a)("string"!=typeof e,"Shader module use by name is deprecated. Import shader module '".concat(e,"' and use it directly.")),Object(o.a)(e.name,"shader module has no name"),(e=new i.a(e)).dependencies=t(e.dependencies)),e))}(t))}function s(t){const e={},n={};return u({modules:t,level:0,moduleMap:e,moduleDepth:n}),Object.keys(n).sort((t,e)=>n[e]-n[t]).map(t=>e[t])}function u(t){let{modules:e,level:n,moduleMap:r,moduleDepth:i}=t;if(n>=5)throw new Error("Possible loop in shader dependency graph");for(const t of e)r[t.name]=t,(void 0===i[t.name]||i[t.name]0&&void 0!==arguments[0]?arguments[0]:{};const e="undefined"!=typeof window&&window.navigator||{},n=t.userAgent||e.userAgent||"",r=-1!==n.indexOf("MSIE "),i=-1!==n.indexOf("Trident/");return r||i}const l={GLSL_FRAG_DATA:["WEBGL_draw_buffers",!0],GLSL_FRAG_DEPTH:["EXT_frag_depth",!0],GLSL_DERIVATIVES:["OES_standard_derivatives",!0],GLSL_TEXTURE_LOD:["EXT_shader_texture_lod",!0]},h={};Object.keys(l).forEach(t=>{h[t]=t});const f={};function p(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=l[e];if(Object(o.a)(r,e),!c(n))return!0;if(e in f)return f[e];const i=r[0],a=n.behavior||"enable",s="#extension GL_".concat(i," : ").concat(a,"\nvoid main(void) {}"),u=t.createShader(35633);t.shaderSource(u,s),t.compileShader(u);const h=t.getShaderParameter(u,35713);return t.deleteShader(u),f[e]=h,h}function d(t,e){const n=l[e];Object(o.a)(n,e);const r=function(t){return"undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||Boolean(t&&2===t._version)}(t)&&n[1]||n[0],i="string"==typeof r?Boolean(t.getExtension(r)):r;return Object(o.a)(!1===i||!0===i),i}function A(t,e){return(e=Array.isArray(e)?e:[e]).every(e=>d(t,e))}var g=n(183);function m(t){return new RegExp("\\b".concat(t,"[ \\t]+(\\w+[ \\t]+\\w+(\\[\\w+\\])?;)"),"g")}const y=[[/^(#version[ \t]+(100|300[ \t]+es))?[ \t]*\n/,"#version 300 es\n"],[/\btexture(2D|2DProj|Cube)Lod(EXT)?\(/g,"textureLod("],[/\btexture(2D|2DProj|Cube)(EXT)?\(/g,"texture("]],v=[...y,[m("attribute"),"in $1"],[m("varying"),"out $1"]],_=[...y,[m("varying"),"in $1"]],b=[[/^#version[ \t]+300[ \t]+es/,"#version 100"],[/\btexture(2D|2DProj|Cube)Lod\(/g,"texture$1LodEXT("],[/\btexture\(/g,"texture2D("],[/\btextureLod\(/g,"texture2DLodEXT("]],x=[...b,[m("in"),"attribute $1"],[m("out"),"varying $1"]],w=[...b,[m("in"),"varying $1"]],E=/\bout[ \t]+vec4[ \t]+(\w+)[ \t]*;\n?/,O=/void\s+main\s*\([^)]*\)\s*\{\n?/;function S(t,e,n){switch(e){case 300:return n?T(t,v):function(t){const e=(t=T(t,_)).match(E);if(e){const n=e[1];t=t.replace(new RegExp("\\b".concat("gl_FragColor","\\b"),"g"),n)}else{const e="fragmentColor";t=t.replace(O,t=>"out vec4 ".concat(e,";\n").concat(t)).replace(new RegExp("\\b".concat("gl_FragColor","\\b"),"g"),e)}return t}(t);case 100:return n?T(t,x):function(t){const e=(t=T(t,w)).match(E);if(e){const n=e[1];t=t.replace(E,"").replace(new RegExp("\\b".concat(n,"\\b"),"g"),"gl_FragColor")}return t}(t);default:throw new Error("unknown GLSL version ".concat(e))}}function T(t,e){for(const[n,r]of e)t=t.replace(n,r);return t}const C="\n\n".concat(g.a,"\n\n"),P={[r.b]:"vertex",[r.a]:"fragment"};function M(t,e){let{id:n,source:i,type:a,modules:s,defines:u={},hookFunctions:c=[],inject:l={},transpileToGLSL100:f=!1,prologue:d=!0,log:m}=e;Object(o.a)("string"==typeof i,"shader source must be a string");const y=a===r.b,v=i.split("\n");let _=100,b="",x=i;0===v[0].indexOf("#version ")?(_=300,b=v[0],x=v.slice(1).join("\n")):b="#version ".concat(_);const w={};s.forEach(t=>{Object.assign(w,t.getDefines())}),Object.assign(w,u);let E=d?"".concat(b,"\n").concat(function(t){let{id:e,source:n,type:r}=t;return e&&"string"==typeof e&&-1===n.indexOf("SHADER_NAME")?"\n#define SHADER_NAME ".concat(e,"_").concat(P[r],"\n\n"):""}({id:n,source:i,type:a}),"\n").concat(function(t){let{type:e}=t;return"\n#define SHADER_TYPE_".concat(P[e].toUpperCase(),"\n")}({type:a}),"\n").concat(function(t){switch(function(t){const e=t.getExtension("WEBGL_debug_renderer_info"),n=t.getParameter(e&&e.UNMASKED_VENDOR_WEBGL||7936),r=t.getParameter(e&&e.UNMASKED_RENDERER_WEBGL||7937);return{gpuVendor:function(t,e){if(t.match(/NVIDIA/i)||e.match(/NVIDIA/i))return"NVIDIA";if(t.match(/INTEL/i)||e.match(/INTEL/i))return"INTEL";if(t.match(/AMD/i)||e.match(/AMD/i)||t.match(/ATI/i)||e.match(/ATI/i))return"AMD";return"UNKNOWN GPU"}(n,r),vendor:n,renderer:r,version:t.getParameter(7938),shadingLanguageVersion:t.getParameter(35724)}}(t).gpuVendor.toLowerCase()){case"nvidia":return"#define NVIDIA_GPU\n// Nvidia optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n";case"intel":return"#define INTEL_GPU\n// Intel optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n";case"amd":return"#define AMD_GPU\n";default:return"#define DEFAULT_GPU\n// Prevent driver from optimizing away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n"}}(t),"\n").concat(function(t,e,n){let r="#if (__VERSION__ > 120)\n\n# define FEATURE_GLSL_DERIVATIVES\n# define FEATURE_GLSL_DRAW_BUFFERS\n# define FEATURE_GLSL_FRAG_DEPTH\n# define FEATURE_GLSL_TEXTURE_LOD\n\n// DEPRECATED FLAGS, remove in v9\n# define FRAG_DEPTH\n# define DERIVATIVES\n# define DRAW_BUFFERS\n# define TEXTURE_LOD\n\n#endif // __VERSION\n";return A(t,h.GLSL_FRAG_DEPTH)&&(r+="\n// FRAG_DEPTH => gl_FragDepth is available\n#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n# define FEATURE_GLSL_FRAG_DEPTH\n# define FRAG_DEPTH\n# define gl_FragDepth gl_FragDepthEXT\n#endif\n"),A(t,h.GLSL_DERIVATIVES)&&p(t,h.GLSL_DERIVATIVES)&&(r+="\n// DERIVATIVES => dxdF, dxdY and fwidth are available\n#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n# define FEATURE_GLSL_DERIVATIVES\n# define DERIVATIVES\n#endif\n"),A(t,h.GLSL_FRAG_DATA)&&p(t,h.GLSL_FRAG_DATA,{behavior:"require"})&&(r+="\n// DRAW_BUFFERS => gl_FragData[] is available\n#ifdef GL_EXT_draw_buffers\n#extension GL_EXT_draw_buffers : require\n#define FEATURE_GLSL_DRAW_BUFFERS\n#define DRAW_BUFFERS\n#endif\n"),A(t,h.GLSL_TEXTURE_LOD)&&(r+="// TEXTURE_LOD => texture2DLod etc are available\n#ifdef GL_EXT_shader_texture_lod\n#extension GL_EXT_shader_texture_lod : enable\n\n# define FEATURE_GLSL_TEXTURE_LOD\n# define TEXTURE_LOD\n\n#endif\n"),r}(t),"\n").concat(function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=0,n="";for(const r in t){0===e&&(n+="\n// APPLICATION DEFINES\n"),e++;const i=t[r];(i||Number.isFinite(i))&&(n+="#define ".concat(r.toUpperCase()," ").concat(t[r],"\n"))}0===e&&(n+="\n");return n}(w),"\n").concat(y?"":"precision highp float;\n\n","\n"):"".concat(b,"\n");const O=function(t){const e={vs:{},fs:{}};return t.forEach(t=>{let n;"string"!=typeof t?(n=t,t=n.hook):n={},t=t.trim();const[r,i]=t.split(":"),o=t.replace(/\(.+/,"");e[r][o]=Object.assign(n,{signature:i})}),e}(c),T={},M={},I={};for(const t in l){const e="string"==typeof l[t]?{injection:l[t],order:0}:l[t],n=t.match(/^(v|f)s:(#)?([\w-]+)$/);if(n){const r=n[2],i=n[3];r?"decl"===i?M[t]=[e]:I[t]=[e]:T[t]=[e]}else I[t]=[e]}for(const t of s){m&&t.checkDeprecations(x,m);E+=t.getModuleSource(a,_);const e=t.injections[a];for(const t in e){const n=t.match(/^(v|f)s:#([\w-]+)$/);if(n){const r="decl"===n[2]?M:I;r[t]=r[t]||[],r[t].push(e[t])}else T[t]=T[t]||[],T[t].push(e[t])}}return E+=C,E=Object(g.c)(E,a,M),E+=function(t,e){let n="";for(const r in t){const i=t[r];if(n+="void ".concat(i.signature," {\n"),i.header&&(n+=" ".concat(i.header)),e[r]){const t=e[r];t.sort((t,e)=>t.order-e.order);for(const e of t)n+=" ".concat(e.injection,"\n")}i.footer&&(n+=" ".concat(i.footer)),n+="}\n"}return n}(O[a],T),E+=x,E=Object(g.c)(E,a,I),E=S(E,f?100:_,y),E}function I(t){return function(e){const n={};for(const r of t){const t=r.getUniforms(e,n);Object.assign(n,t)}return n}}var B=n(292);n.d(e,"a",(function(){return R}));class R{static getDefaultProgramManager(t){return t.luma=t.luma||{},t.luma.defaultProgramManager=t.luma.defaultProgramManager||new R(t),t.luma.defaultProgramManager}constructor(t){this.gl=t,this._programCache={},this._getUniforms={},this._registeredModules={},this._hookFunctions=[],this._defaultModules=[],this._hashes={},this._hashCounter=0,this.stateHash=0,this._useCounts={}}addDefaultModule(t){this._defaultModules.find(e=>e.name===t.name)||this._defaultModules.push(t),this.stateHash++}removeDefaultModule(t){const e="string"==typeof t?t:t.name;this._defaultModules=this._defaultModules.filter(t=>t.name!==e),this.stateHash++}addShaderHook(t,e){e&&(t=Object.assign(e,{hook:t})),this._hookFunctions.push(t),this.stateHash++}get(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{vs:e="",fs:n="",defines:i={},inject:o={},varyings:s=[],bufferMode:u=35981,transpileToGLSL100:c=!1}=t,l=this._getModuleList(t.modules),h=this._getHash(e),f=this._getHash(n),p=l.map(t=>this._getHash(t.name)).sort(),d=s.map(t=>this._getHash(t)),A=Object.keys(i).sort(),g=Object.keys(o).sort(),m=[],y=[];for(const t of A)m.push(this._getHash(t)),m.push(this._getHash(i[t]));for(const t of g)y.push(this._getHash(t)),y.push(this._getHash(o[t]));const v="".concat(h,"/").concat(f,"D").concat(m.join("/"),"M").concat(p.join("/"),"I").concat(y.join("/"),"V").concat(d.join("/"),"H").concat(this.stateHash,"B").concat(u).concat(c?"T":"");if(!this._programCache[v]){const t=function(t,e){const{vs:n,fs:i}=e,o=a(e.modules||[]);return{gl:t,vs:M(t,Object.assign({},e,{source:n,type:r.b,modules:o})),fs:M(t,Object.assign({},e,{source:i,type:r.a,modules:o})),getUniforms:I(o)}}(this.gl,{vs:e,fs:n,modules:l,inject:o,defines:i,hookFunctions:this._hookFunctions,transpileToGLSL100:c});this._programCache[v]=new B.a(this.gl,{hash:v,vs:t.vs,fs:t.fs,varyings:s,bufferMode:u}),this._getUniforms[v]=t.getUniforms||(t=>{}),this._useCounts[v]=0}return this._useCounts[v]++,this._programCache[v]}getUniforms(t){return this._getUniforms[t.hash]||null}release(t){const e=t.hash;this._useCounts[e]--,0===this._useCounts[e]&&(this._programCache[e].delete(),delete this._programCache[e],delete this._getUniforms[e],delete this._useCounts[e])}_getHash(t){return void 0===this._hashes[t]&&(this._hashes[t]=this._hashCounter++),this._hashes[t]}_getModuleList(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];const e=new Array(this._defaultModules.length+t.length),n={};let r=0;for(let t=0,i=this._defaultModules.length;tNumber.isFinite(t)&&(!("max"in e)||t<=e.max)&&(!("min"in e)||t>=e.min)},array:{validate:(t,e)=>Array.isArray(t)||ArrayBuffer.isView(t)}};function o(t){let e=a(t);return"object"===e?t?"type"in t?Object.assign({},t,i[t.type]):"value"in t?(e=a(t.value),Object.assign({type:e},t,i[e])):{type:"object",value:t}:{type:"object",value:null}:Object.assign({type:e,value:t},i[e])}function a(t){return Array.isArray(t)||ArrayBuffer.isView(t)?"array":typeof t}n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return u}));class s{constructor(t){let{name:e,vs:n,fs:i,dependencies:a=[],uniforms:s,getUniforms:u,deprecations:c=[],defines:l={},inject:h={},vertexShader:f,fragmentShader:p}=t;Object(r.a)("string"==typeof e),this.name=e,this.vs=n||f,this.fs=i||p,this.getModuleUniforms=u,this.dependencies=a,this.deprecations=this._parseDeprecationDefinitions(c),this.defines=l,this.injections=function(t){const e={vs:{},fs:{}};for(const n in t){let r=t[n];const i=n.slice(0,2);"string"==typeof r&&(r={order:0,injection:r}),e[i][n]=r}return e}(h),s&&(this.uniforms=function(t){const e={};for(const n in t){const r=o(t[n]);e[n]=r}return e}(s))}getModuleSource(t){let e;switch(t){case"vs":e=this.vs||"";break;case"fs":e=this.fs||"";break;default:Object(r.a)(!1)}return"#define MODULE_".concat(this.name.toUpperCase().replace(/[^0-9a-z]/gi,"_"),"\n").concat(e,"// END MODULE_").concat(this.name,"\n\n")}getUniforms(t,e){return this.getModuleUniforms?this.getModuleUniforms(t,e):this.uniforms?this._defaultGetUniforms(t):{}}getDefines(){return this.defines}checkDeprecations(t,e){this.deprecations.forEach(n=>{n.regex.test(t)&&(n.deprecated?e.deprecated(n.old,n.new)():e.removed(n.old,n.new)())})}_parseDeprecationDefinitions(t){return t.forEach(t=>{switch(t.type){case"function":t.regex=new RegExp("\\b".concat(t.old,"\\("));break;default:t.regex=new RegExp("".concat(t.type," ").concat(t.old,";"))}}),t}_defaultGetUniforms(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e={},n=this.uniforms;for(const i in n){const o=n[i];i in t&&!o.private?(o.validate&&Object(r.a)(o.validate(t[i],o),"".concat(this.name,": invalid ").concat(i)),e[i]=t[i]):e[i]=o.value}return e}}function u(t){if(!t.normalized&&(t.normalized=!0,t.uniforms&&!t.getUniforms)){const e=new s(t);t.getUniforms=e.getUniforms.bind(e)}return t}},function(t,e,n){"use strict";var r=n(32),i=n(71),o=n(52),a=n(8),s=n(51),u=n(10);function c(t){switch(t){case 6406:case 33326:case 6403:return 1;case 33328:case 33319:return 2;case 6407:case 34837:return 3;case 6408:case 34836:return 4;default:return Object(u.a)(!1),0}}var l=n(222);function h(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{sourceX:n=0,sourceY:r=0,sourceFormat:i=6408}=e;let{sourceAttachment:o=36064,target:a=null,sourceWidth:c,sourceHeight:l,sourceType:h}=e;const{framebuffer:f,deleteFramebuffer:p}=A(t);Object(u.a)(f);const{gl:d,handle:m,attachments:y}=f;c=c||f.width,l=l||f.height,36064===o&&null===m&&(o=1028),Object(u.a)(y[o]),h=h||y[o].type,a=g(a,h,i,c,l),h=h||Object(s.b)(a);const v=d.bindFramebuffer(36160,m);return d.readPixels(n,r,c,l,i,h,a),d.bindFramebuffer(36160,v||null),p&&f.delete(),a}function f(t,e){let{sourceX:n=0,sourceY:i=0,sourceFormat:o=6408,target:s=null,targetByteOffset:l=0,sourceWidth:h,sourceHeight:f,sourceType:p}=e;const{framebuffer:d,deleteFramebuffer:g}=A(t);Object(u.a)(d),h=h||d.width,f=f||d.height;const m=Object(a.a)(d.gl);if(p=p||(s?s.type:5121),!s){const t=c(o),e=function(t){switch(t){case 5121:return 1;case 33635:case 32819:case 32820:return 2;case 5126:return 4;default:return Object(u.a)(!1),0}}(p),n=l+h*f*t*e;s=new r.a(m,{byteLength:n,accessor:{type:p,size:t}})}return s.bind({target:35051}),Object(a.o)(m,{framebuffer:d},()=>{m.readPixels(n,i,h,f,o,p,l)}),s.unbind({target:35051}),g&&d.delete(),s}function p(t){let{sourceAttachment:e=36064,targetMaxHeight:n=Number.MAX_SAFE_INTEGER}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=h(t,{sourceAttachment:e}),{width:i,height:o}=t;for(;o>n;)({data:r,width:i,height:o}=Object(s.d)({data:r,width:i,height:o}));Object(s.a)({data:r,width:i,height:o});const a=document.createElement("canvas");a.width=i,a.height=o;const u=a.getContext("2d"),c=u.createImageData(i,o);return c.data.set(r),u.putImageData(c,0,0),a.toDataURL()}function d(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{sourceX:r=0,sourceY:i=0,targetMipmaplevel:s=0,targetInternalFormat:c=6408}=n;let{targetX:l,targetY:h,targetZ:f,width:p,height:d}=n;const{framebuffer:g,deleteFramebuffer:m}=A(t);Object(u.a)(g);const{gl:y,handle:v}=g,_=void 0!==l||void 0!==h||void 0!==f;l=l||0,h=h||0,f=f||0;const b=y.bindFramebuffer(36160,v);Object(u.a)(e);let x=null;if(e instanceof o.a&&(x=e,p=Number.isFinite(p)?p:x.width,d=Number.isFinite(d)?d:x.height,x.bind(0),e=x.target),_)switch(e){case 3553:case 34067:y.copyTexSubImage2D(e,s,l,h,r,i,p,d);break;case 35866:case 32879:Object(a.a)(y).copyTexSubImage3D(e,s,l,h,f,r,i,p,d)}else y.copyTexImage2D(e,s,c,r,i,p,d,0);return x&&x.unbind(),y.bindFramebuffer(36160,b||null),m&&g.delete(),x}function A(t){return t instanceof i.a?{framebuffer:t,deleteFramebuffer:!1}:{framebuffer:Object(l.b)(t),deleteFramebuffer:!0}}function g(t,e,n,r,i){if(t)return t;e=e||5121;return new(Object(s.c)(e,{clamped:!1}))(r*i*c(n))}n.d(e,"c",(function(){return h})),n.d(e,"d",(function(){return f})),n.d(e,"a",(function(){return p})),n.d(e,"b",(function(){return d}))},,,,,function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(21),i=n(43),o=n(44),a=n(100);async function s(t,e,n,s){Array.isArray(e)||Object(i.a)(e)||(void 0,n=e,e=void 0);const u=Object(o.a)(n);let c=t;return"string"==typeof t&&(c=await u(t)),Object(r.b)(t)&&(c=await u(t)),await Object(a.a)(c,e,n)}},function(t,e){},function(t,e,n){"use strict";var r=n(99);e.a={name:"project32",dependencies:[r.a],vs:"\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64Low, vec3 offset, out vec4 commonPosition\n) {\n vec3 projectedPosition = project_position(position, position64Low);\n mat3 rotation;\n if (project_needs_rotation(projectedPosition, rotation)) {\n // offset is specified as ENU\n // when in globe projection, rotate offset so that the ground alighs with the surface of the globe\n offset = rotation * offset;\n }\n commonPosition = vec4(projectedPosition + offset, 1.0);\n return project_common_position_to_clipspace(commonPosition);\n}\n\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64Low, vec3 offset\n) {\n vec4 commonPosition;\n return project_position_to_clipspace(position, position64Low, offset, commonPosition);\n}\n"}},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(0),u=n.n(s),c=n(59),l=function(){function t(e){i()(this,t),e&&(this.opts=e)}return a()(t,[{key:"equals",value:function(t){return this===t||this.constructor===t.constructor&&Object(c.a)(this.opts,t.opts)}},{key:"getShaders",value:function(t){return null}},{key:"getSubLayerProps",value:function(t){var e=t.constructor.defaultProps,n={updateTriggers:{}};for(var r in e)if(r in this.props){var i=e[r],o=this.props[r];n[r]=o,i&&"accessor"===i.type&&(n.updateTriggers[r]=this.props.updateTriggers[r],"function"==typeof o&&(n[r]=this.getSubLayerAccessor(o)))}return n}},{key:"initializeState",value:function(t,e){}},{key:"updateState",value:function(t,e){}},{key:"draw",value:function(t,e){}},{key:"finalizeState",value:function(t,e){}}]),t}();u()(l,"defaultProps",{})},function(t,e,n){"use strict";n.d(e,"a",(function(){return A}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(0),u=n.n(s),c=n(50),l=n(66),h=n(28),f=n(32);function p(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return d(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return d(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0)){if(!this.props.throttleRequests)return Promise.resolve({done:()=>{}});if(this.requestMap.has(t))return this.requestMap.get(t);const n={handle:t,priority:0,getPriority:e},r=new Promise(t=>(n.resolve=t,n));return this.requestQueue.push(n),this.requestMap.set(t,r),this._issueNewRequests(),r}_issueRequest(t){const{handle:e,resolve:n}=t;let r=!1;const i=()=>{r||(r=!0,this.requestMap.delete(e),this.activeRequestCount--,this._issueNewRequests())};return this.activeRequestCount++,n?n({done:i}):Promise.resolve({done:i})}_issueNewRequests(){this.deferredUpdate||(this.deferredUpdate=setTimeout(()=>this._issueNewRequestsAsync(),0))}_issueNewRequestsAsync(){this.deferredUpdate=null;const t=Math.max(this.props.maxRequests-this.activeRequestCount,0);if(0!==t){this._updateAllRequests();for(let e=0;et.priority-e.priority)}_updateRequest(t){return t.priority=t.getPriority(t.handle),!(t.priority<0)||(t.resolve(null),!1)}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));const r={name:"JSON",id:"json",module:"json",version:"3.2.10",extensions:["json","geojson"],mimeTypes:["application/json"],category:"json",text:!0,parseTextSync:i,parse:async t=>i((new TextDecoder).decode(t)),options:{}};function i(t){return JSON.parse(t)}},function(t,e,n){"use strict";n.d(e,"a",(function(){return y}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(5),u=n.n(s),c=n(6),l=n.n(c),h=n(2),f=n.n(h),p=n(0),d=n.n(p),A=n(272),g=n(12);function m(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=f()(t);if(e){var i=f()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return l()(this,n)}}var y=function(t){u()(n,t);var e=m(n);function n(){return i()(this,n),e.apply(this,arguments)}return a()(n,[{key:"getGeometry",value:function(t){return new A.a}},{key:"draw",value:function(t){var e=t.uniforms,n=this.props,r=n.elevationScale,i=n.extruded,o=n.offset,a=n.coverage,s=n.cellSize,u=n.angle,c=n.radiusUnits;this.state.model.setUniforms(e).setUniforms({radius:s/2,radiusUnits:g.e[c],angle:u,offset:o,extruded:i,coverage:a,elevationScale:r,edgeDistance:1,isWireframe:!1}).draw()}}]),n}(n(160).a);d()(y,"layerName","GridCellLayer"),d()(y,"defaultProps",{cellSize:{type:"number",min:0,value:1e3},offset:{type:"array",value:[1,1]}})},function(t,e,n){"use strict";n.d(e,"a",(function(){return T}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(5),u=n.n(s),c=n(6),l=n.n(c),h=n(2),f=n.n(h),p=n(0),d=n.n(p),A=n(20),g=n(50),m=n(189),y=n(111),v=n(112),_=n(62),b=n(174);function x(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return w(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return w(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function w(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{},n=this.props,r=n.data,i=n.getPolygon,o=n.positionFormat,a=n._normalize,s=[],u="XY"===o?2:3,c=e.startRow,l=e.endRow,h=Object(g.a)(r,c,l),f=h.iterable,p=h.objectInfo,d=x(f);try{for(d.s();!(t=d.n()).done;){var A=t.value;p.index++;var m=i(A,p);a&&(m=_.d(m,u));var y=m,v=y.holeIndices,b=m.positions||m;if(v)for(var w=0;w<=v.length;w++){var E=b.slice(v[w-1]||0,v[w]||b.length);s.push(this.getSubLayerRow({path:E},A,p.index))}else s.push(this.getSubLayerRow({path:b},A,p.index))}}catch(t){d.e(t)}finally{d.f()}return s}},{key:"renderLayers",value:function(){var t=this.props,e=t.data,n=t._dataDiff,r=t.stroked,i=t.filled,o=t.extruded,a=t.wireframe,s=t._normalize,u=t._windingOrder,c=t.elevationScale,l=t.transitions,h=t.positionFormat,f=this.props,p=f.lineWidthUnits,d=f.lineWidthScale,A=f.lineWidthMinPixels,g=f.lineWidthMaxPixels,m=f.lineJointRounded,_=f.lineMiterLimit,b=f.lineDashJustified,x=this.props,w=x.getFillColor,E=x.getLineColor,S=x.getLineWidth,T=x.getLineDashArray,C=x.getElevation,P=x.getPolygon,M=x.updateTriggers,I=x.material,B=this.state,R=B.paths,k=B.pathsDiff,L=this.getSubLayerClass("fill",y.a),D=this.getSubLayerClass("stroke",v.a),j=this.shouldRenderSubLayer("fill",R)&&new L({_dataDiff:n,extruded:o,elevationScale:c,filled:i,wireframe:a,_normalize:s,_windingOrder:u,getElevation:C,getFillColor:w,getLineColor:o&&a?E:O,material:I,transitions:l},this.getSubLayerProps({id:"fill",updateTriggers:M&&{getPolygon:M.getPolygon,getElevation:M.getElevation,getFillColor:M.getFillColor,lineColors:o&&a,getLineColor:M.getLineColor}}),{data:e,positionFormat:h,getPolygon:P});return[!o&&j,!o&&r&&this.shouldRenderSubLayer("stroke",R)&&new D({_dataDiff:k&&function(){return k},widthUnits:p,widthScale:d,widthMinPixels:A,widthMaxPixels:g,jointRounded:m,miterLimit:_,dashJustified:b,_pathType:"loop",transitions:l&&{getWidth:l.getLineWidth,getColor:l.getLineColor,getPath:l.getPolygon},getColor:this.getSubLayerAccessor(E),getWidth:this.getSubLayerAccessor(S),getDashArray:this.getSubLayerAccessor(T)},this.getSubLayerProps({id:"stroke",updateTriggers:M&&{getWidth:M.getLineWidth,getColor:M.getLineColor,getDashArray:M.getLineDashArray}}),{data:R,positionFormat:h,getPath:function(t){return t.path}}),o&&j]}}]),n}(m.a);d()(T,"layerName","PolygonLayer"),d()(T,"defaultProps",S)},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(129);function i(t){try{return JSON.parse(t)}catch(e){throw new Error('Failed to parse JSON from data starting with "'.concat(Object(r.a)(t),'"'))}}},function(t,e){e.read=function(t,e,n,r,i){var o,a,s=8*i-r-1,u=(1<>1,l=-7,h=n?i-1:0,f=n?-1:1,p=t[e+h];for(h+=f,o=p&(1<<-l)-1,p>>=-l,l+=s;l>0;o=256*o+t[e+h],h+=f,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=r;l>0;a=256*a+t[e+h],h+=f,l-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),o-=c}return(p?-1:1)*a*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var a,s,u,c=8*o-i-1,l=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:o-1,d=r?1:-1,A=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),(e+=a+h>=1?f/u:f*Math.pow(2,1-h))*u>=2&&(a++,u/=2),a+h>=l?(s=0,a=l):a+h>=1?(s=(e*u-1)*Math.pow(2,i),a+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;t[n+p]=255&s,p+=d,s/=256,i-=8);for(a=a<0;t[n+p]=255&a,p+=d,a/=256,c-=8);t[n+p-d]|=128*A}},function(t,e,n){"use strict";var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(7),u=n.n(s),c=n(5),l=n.n(c),h=n(6),f=n.n(h),p=n(2),d=n.n(p),A=n(0),g=n.n(A),m=n(27),y=n.n(m),v=n(204),_=n(220),b=n(20),x=n(157),w=n(8),E=n(295),O=n(81),S=n(75),T=n(45),C=n(10);class P{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:e}=t;this.id=e||Object(T.c)(this.constructor.name),this.display=!0,this.position=new O.a,this.rotation=new O.a,this.scale=new O.a(1,1,1),this.matrix=new S.a,this.userData={},this.props={},this._setScenegraphNodeProps(t)}delete(){}setProps(t){return this._setScenegraphNodeProps(t),this}toString(){return"{type: ScenegraphNode, id: ".concat(this.id,")}")}setPosition(t){return Object(C.a)(3===t.length,"setPosition requires vector argument"),this.position=t,this}setRotation(t){return Object(C.a)(3===t.length,"setRotation requires vector argument"),this.rotation=t,this}setScale(t){return Object(C.a)(3===t.length,"setScale requires vector argument"),this.scale=t,this}setMatrix(t){!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?this.matrix.copy(t):this.matrix=t}setMatrixComponents(t){let{position:e,rotation:n,scale:r,update:i=!0}=t;return e&&this.setPosition(e),n&&this.setRotation(n),r&&this.setScale(r),i&&this.updateMatrix(),this}updateMatrix(){const t=this.position,e=this.rotation,n=this.scale;return this.matrix.identity(),this.matrix.translate(t),this.matrix.rotateXYZ(e),this.matrix.scale(n),this}update(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{position:e,rotation:n,scale:r}=t;return e&&this.setPosition(e),n&&this.setRotation(n),r&&this.setScale(r),this.updateMatrix(),this}getCoordinateUniforms(t,e){Object(C.a)(t),e=e||this.matrix;const n=new S.a(t).multiplyRight(e),r=n.invert(),i=r.transpose();return{viewMatrix:t,modelMatrix:e,objectMatrix:e,worldMatrix:n,worldInverseMatrix:r,worldInverseTransposeMatrix:i}}_setScenegraphNodeProps(t){"display"in t&&(this.display=t.display),"position"in t&&this.setPosition(t.position),"rotation"in t&&this.setRotation(t.rotation),"scale"in t&&this.setScale(t.scale),"matrix"in t&&this.setMatrix(t.matrix),Object.assign(this.props,t)}}var M=n(32),I=n(61);class B extends P{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=Array.isArray(t)?{children:t}:t;const{children:e=[]}=t;w.k.assert(e.every(t=>t instanceof P),"every child must an instance of ScenegraphNode"),super(t),this.children=e}add(){for(var t=arguments.length,e=new Array(t),n=0;n-1&&e.splice(n,1),this}removeAll(){return this.children=[],this}delete(){this.children.forEach(t=>t.delete()),this.removeAll(),super.delete()}traverse(t){let{worldMatrix:e=new S.a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=new S.a(e).multiplyRight(this.matrix);for(const e of this.children)e instanceof B?e.traverse(t,{worldMatrix:n}):t(e,{worldMatrix:n})}}var R=n(294);const k={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},L={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};function D(t){if(!t._animation){const e=L[t.componentType],n=k[t.type],r=n*t.count,{buffer:i,byteOffset:o}=t.bufferView.data,a=new e(i,o+(t.byteOffset||0),r);if(1===n)t._animation=Array.from(a);else{const e=[];for(let t=0;tt>=s),c=Math.max(0,u-1);if(!Array.isArray(n[r]))switch(r){case"translation":n[r]=[0,0,0];break;case"rotation":n[r]=[0,0,0,1];break;case"scale":n[r]=[1,1,1];break;default:w.k.warn("Bad animation path ".concat(r))()}Object(C.a)(n[r].length===a[c].length);const l=i[c],h=i[u];switch(o){case"STEP":!function(t,e,n){for(let r=0;rl){const t=(s-l)/(h-l);!function(t,e,n,r,i){if("rotation"===e){F.slerp({start:n,target:r,ratio:i});for(let n=0;nl){const t=(s-l)/(h-l),e=h-l;!function(t,e,n){let{p0:r,outTangent0:i,inTangent1:o,p1:a,tDiff:s,ratio:u}=n;for(let n=0;n{let{sampler:n,target:r,path:i}=t;z(e,n,r,i),function(t,e){if(e.matrix.identity(),t.translation&&e.matrix.translate(t.translation),t.rotation){const n=j.fromQuaternion(t.rotation);e.matrix.multiplyRight(n)}t.scale&&e.matrix.scale(t.scale)}(r,r._node)})}}class N{constructor(t){this.animations=t.animations.map((e,n)=>{const r=e.name||"Animation-".concat(n),i=e.samplers.map(e=>{let{input:n,interpolation:r="LINEAR",output:i}=e;return{input:D(t.accessors[n]),interpolation:r,output:D(t.accessors[i])}}),o=e.channels.map(e=>{let{sampler:n,target:r}=e;return{sampler:i[n],target:t.nodes[r.node],path:r.path}});return new U({name:r,channels:o})})}animate(t){this.setTime(t)}setTime(t){this.animations.forEach(e=>e.animate(t))}getAnimations(){return this.animations}}var G=n(178);class V extends P{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(e),this.onBeforeRender=null,this.AfterRender=null,t instanceof G.a?(this.model=t,this._setModelNodeProps(e)):this.model=new G.a(t,e),this.managedResources=e.managedResources||[]}setProps(t){return super.setProps(t),this._setModelNodeProps(t),this}delete(){this.model&&(this.model.delete(),this.model=null),this.managedResources.forEach(t=>t.delete()),this.managedResources=[]}draw(){return this.model.draw(...arguments)}setUniforms(){return this.model.setUniforms(...arguments),this}setAttributes(){return this.model.setAttributes(...arguments),this}updateModuleSettings(){return this.model.updateModuleSettings(...arguments),this}_setModelNodeProps(t){this.model.setProps(t)}}var H=n(233);function W(t,e){return Object(w.j)(t)?"#version 300 es\n".concat(e):e}const q={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},X={modelOptions:{},pbrDebug:!1,imageBasedLightingEnvironment:null,lights:!0,useTangents:!1};class J{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.gl=t,this.options=Object.assign({},X,e)}instantiate(t){this.gltf=t;return(t.scenes||[]).map(t=>this.createScene(t))}createAnimator(){return Array.isArray(this.gltf.animations)?new N(this.gltf):null}createScene(t){const e=(t.nodes||[]).map(t=>this.createNode(t));return new B({id:t.name||t.id,children:e})}createNode(t){if(!t._node){const e=(t.children||[]).map(t=>this.createNode(t));t.mesh&&e.push(this.createMesh(t.mesh));const n=new B({id:t.name||t.id,children:e});if(t.matrix)n.setMatrix(t.matrix);else{if(n.matrix.identity(),t.translation&&n.matrix.translate(t.translation),t.rotation){const e=(new S.a).fromQuaternion(t.rotation);n.matrix.multiplyRight(e)}t.scale&&n.matrix.scale(t.scale)}t._node=n}return t._node}createMesh(t){if(!t._mesh){const e=(t.primitives||[]).map((e,n)=>this.createPrimitive(e,n,t)),n=new B({id:t.name||t.id,children:e});t._mesh=n}return t._mesh}getVertexCount(t){w.k.warn("getVertexCount() not found")()}createPrimitive(t,e,n){return function(t,e){const{id:n,drawMode:r,vertexCount:i,attributes:o,modelOptions:a}=e,s=new H.a(t,e);w.k.info(4,"createGLTFModel defines: ",s.defines)();const u=[];u.push(...s.generatedTextures),u.push(...Object.values(o).map(t=>t.buffer));const c=new V(t,Object.assign({id:n,drawMode:r,vertexCount:i,modules:[E.a],defines:s.defines,parameters:s.parameters,vs:W(t,"\n#if (__VERSION__ < 300)\n #define _attr attribute\n#else\n #define _attr in\n#endif\n\n _attr vec4 POSITION;\n\n #ifdef HAS_NORMALS\n _attr vec4 NORMAL;\n #endif\n\n #ifdef HAS_TANGENTS\n _attr vec4 TANGENT;\n #endif\n\n #ifdef HAS_UV\n _attr vec2 TEXCOORD_0;\n #endif\n\n void main(void) {\n vec4 _NORMAL = vec4(0.);\n vec4 _TANGENT = vec4(0.);\n vec2 _TEXCOORD_0 = vec2(0.);\n\n #ifdef HAS_NORMALS\n _NORMAL = NORMAL;\n #endif\n\n #ifdef HAS_TANGENTS\n _TANGENT = TANGENT;\n #endif\n\n #ifdef HAS_UV\n _TEXCOORD_0 = TEXCOORD_0;\n #endif\n\n pbr_setPositionNormalTangentUV(POSITION, _NORMAL, _TANGENT, _TEXCOORD_0);\n gl_Position = u_MVPMatrix * POSITION;\n }\n"),fs:W(t,"\n#if (__VERSION__ < 300)\n #define fragmentColor gl_FragColor\n#else\n out vec4 fragmentColor;\n#endif\n\n void main(void) {\n fragmentColor = pbr_filterColor(vec4(0));\n }\n"),managedResources:u},a));return c.setProps({attributes:o}),c.setUniforms(s.uniforms),c}(this.gl,Object.assign({id:t.name||"".concat(n.name||n.id,"-primitive-").concat(e),drawMode:t.mode||4,vertexCount:t.indices?t.indices.count:this.getVertexCount(t.attributes),attributes:this.createAttributes(t.attributes,t.indices),material:t.material},this.options))}createAttributes(t,e){const n={};return Object.keys(t).forEach(e=>{n[e]=this.createAccessor(t[e],this.createBuffer(t[e],this.gl.ARRAY_BUFFER))}),e&&(n.indices=this.createAccessor(e,this.createBuffer(e,this.gl.ELEMENT_ARRAY_BUFFER))),w.k.info(4,"glTF Attributes",{attributes:t,indices:e,generated:n})(),n}createBuffer(t,e){t.bufferView||(t.bufferView={});const{bufferView:n}=t;return n.lumaBuffers||(n.lumaBuffers={}),n.lumaBuffers[e]||(n.lumaBuffers[e]=new M.a(this.gl,{id:"from-".concat(n.id),data:n.data||t.value,target:e})),n.lumaBuffers[e]}createAccessor(t,e){return new I.a({buffer:e,offset:t.byteOffset||0,stride:t.bufferView.byteStride||0,type:t.componentType,size:q[t.type]})}createSampler(t){return t}needsPOT(){return!1}}var Z=n(290),Q=n(67),K=n.n(Q),Y=n(39),$=n.n(Y);function tt(){return(tt=K()($.a.mark((function t(e){var n;return $.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=[],e.scenes.forEach((function(t){t.traverse((function(t){Object.values(t.model.getUniforms()).forEach((function(t){!1===t.loaded&&n.push(t)}))}))})),t.next=4,et((function(){return n.some((function(t){return!t.loaded}))}));case 4:return t.abrupt("return",t.sent);case 5:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function et(t){return nt.apply(this,arguments)}function nt(){return(nt=K()($.a.mark((function t(e){return $.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e()){t.next=5;break}return t.next=3,new Promise((function(t){return requestAnimationFrame(t)}));case 3:t.next=0;break;case 5:case"end":return t.stop()}}),t)})))).apply(this,arguments)}var rt=n(123);function it(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function ot(t){for(var e=1;e=0&&i2&&void 0!==arguments[2]?arguments[2]:{},r={pointFeatures:[],lineFeatures:[],polygonFeatures:[],polygonOutlineFeatures:[]},i=n.startRow,o=void 0===i?0:i,a=n.endRow,s=void 0===a?t.length:a,u=o;u0;)e=e[0];return e&&Number.isFinite(e[0])}(o,a))switch(o){case"Point":s.push(n({geometry:t},r,i));break;case"MultiPoint":a.forEach((function(t){s.push(n({geometry:{type:"Point",coordinates:t}},r,i))}));break;case"LineString":u.push(n({geometry:t},r,i));break;case"MultiLineString":a.forEach((function(t){u.push(n({geometry:{type:"LineString",coordinates:t}},r,i))}));break;case"Polygon":c.push(n({geometry:t},r,i)),a.forEach((function(t){l.push(n({geometry:{type:"LineString",coordinates:t}},r,i))}));break;case"MultiPolygon":a.forEach((function(t){c.push(n({geometry:{type:"Polygon",coordinates:t}},r,i)),t.forEach((function(t){l.push(n({geometry:{type:"LineString",coordinates:t}},r,i))}))}))}else k.a.warn("".concat(o," coordinates are malformed"))()}var j={Point:1,MultiPoint:2,LineString:2,MultiLineString:3,Polygon:3,MultiPolygon:4};function F(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function z(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function H(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0&&o.id.startsWith("".concat(this.id,"-points-text"))&&this.state.binary&&(r.index=this.props.data.points.globalFeatureIds.value[i]),r}},{key:"_updateAutoHighlight",value:function(t){var e,n="".concat(this.id,"-points-"),r="points"===t.featureType,i=V(this.getSubLayers());try{for(i.s();!(e=i.n()).done;){var o=e.value;o.id.startsWith(n)===r&&o.updateAutoHighlight(t)}}catch(t){i.e(t)}finally{i.f()}}},{key:"_renderPolygonLayer",value:function(){var t=this.props,e=t.extruded,n=t.wireframe,r=this.state.layerProps,i="polygons-fill",o=this.shouldRenderSubLayer(i,r.polygons.data)&&this.getSubLayerClass(i,I.type);if(o){var a=R(this,I.props),s=e&&n;return s||delete a.getLineColor,a.updateTriggers.lineColors=s,new o(a,this.getSubLayerProps({id:i,updateTriggers:a.updateTriggers}),r.polygons)}return null}},{key:"_renderLineLayers",value:function(){var t=this.props,e=t.extruded,n=t.stroked,r=this.state.layerProps,i=!e&&n&&this.shouldRenderSubLayer("polygons-stroke",r.polygonsOutline.data)&&this.getSubLayerClass("polygons-stroke",M.type),o=this.shouldRenderSubLayer("linestrings",r.lines.data)&&this.getSubLayerClass("linestrings",M.type);if(i||o){var a=R(this,M.props);return[i&&new i(a,this.getSubLayerProps({id:"polygons-stroke",updateTriggers:a.updateTriggers}),r.polygonsOutline),o&&new o(a,this.getSubLayerProps({id:"linestrings",updateTriggers:a.updateTriggers}),r.lines)]}return null}},{key:"_renderPointLayers",value:function(){var t=this.props.pointType,e=this.state,n=e.layerProps,r=e.binary,o=this.props.highlightedObjectIndex;!r&&Number.isFinite(o)&&(o=n.points.data.findIndex((function(t){return t.__source.index===o})));var a,s=[],u=V(new Set(t.split("+")));try{for(u.s();!(a=u.n()).done;){var c=a.value,l="points-".concat(c),h=P[c],f=h&&this.shouldRenderSubLayer(l,n.points.data)&&this.getSubLayerClass(l,h.type);if(f){var p=R(this,h.props),d=n.points;if("text"===c&&r){var A=d.data.attributes,g=(A.instancePickingColors,i()(A,G));d=X(X({},d),{},{data:X(X({},d.data),{},{attributes:g})})}s.push(new f(p,this.getSubLayerProps({id:l,updateTriggers:p.updateTriggers,highlightedObjectIndex:o}),d))}}}catch(t){u.e(t)}finally{u.f()}return s}},{key:"renderLayers",value:function(){var t=this.props.extruded,e=this._renderPolygonLayer();return[!t&&e,this._renderLineLayers(),this._renderPointLayers(),t&&e]}},{key:"getSubLayerAccessor",value:function(t){return this.state.binary&&"function"==typeof t?function(e,n){var r=w(n.data,n.index);return t(r,n)}:l()(g()(n.prototype),"getSubLayerAccessor",this).call(this,t)}}]),n}(v.a);y()(Q,"layerName","GeoJsonLayer"),y()(Q,"defaultProps",Z)},function(t,e,n){"use strict";var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(7),u=n.n(s),c=n(5),l=n.n(c),h=n(6),f=n.n(h),p=n(2),d=n.n(p),A=n(0),g=n.n(A),m=n(204),y=n(220),v=n(12),_=n(157),b=n(178),x=n(58);function w(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function E(t){for(var e=1;e 180.0) {\n indexDir = -1.0;\n isValid = 0.0;\n } else if (abs(currPos.x - nextPos.x) > 180.0) {\n indexDir = 1.0;\n isValid = 0.0;\n }\n nextPos = indexDir < 0.0 ? prevPos : nextPos;\n nextSegmentRatio = indexDir < 0.0 ? prevSegmentRatio : nextSegmentRatio;\n\n if (isValid == 0.0) {\n // split at the 180th meridian\n nextPos.x += nextPos.x > 0.0 ? -360.0 : 360.0;\n float t = ((currPos.x > 0.0 ? 180.0 : -180.0) - currPos.x) / (nextPos.x - currPos.x);\n currPos = mix(currPos, nextPos, t);\n segmentRatio = mix(segmentRatio, nextSegmentRatio, t);\n }\n\n vec3 currPos64Low = mix(instanceSourcePositions64Low, instanceTargetPositions64Low, segmentRatio);\n vec3 nextPos64Low = mix(instanceSourcePositions64Low, instanceTargetPositions64Low, nextSegmentRatio);\n \n curr = project_position_to_clipspace(currPos, currPos64Low, vec3(0.0), geometry.position);\n next = project_position_to_clipspace(nextPos, nextPos64Low, vec3(0.0));\n \n } else {\n vec3 source_world = instanceSourcePositions;\n vec3 target_world = instanceTargetPositions;\n if (useShortestPath) {\n source_world.x = mod(source_world.x + 180., 360.0) - 180.;\n target_world.x = mod(target_world.x + 180., 360.0) - 180.;\n\n float deltaLng = target_world.x - source_world.x;\n if (deltaLng > 180.) target_world.x -= 360.;\n if (deltaLng < -180.) source_world.x -= 360.;\n }\n source = project_position(source_world, instanceSourcePositions64Low);\n target = project_position(target_world, instanceTargetPositions64Low);\n\n // common x at longitude=-180\n float antiMeridianX = 0.0;\n\n if (useShortestPath) {\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\n antiMeridianX = -(project_uCoordinateOrigin.x + 180.) / 360. * TILE_SIZE;\n }\n float thresholdRatio = (antiMeridianX - source.x) / (target.x - source.x);\n\n if (prevSegmentRatio <= thresholdRatio && nextSegmentRatio > thresholdRatio) {\n isValid = 0.0;\n indexDir = sign(segmentRatio - thresholdRatio);\n segmentRatio = thresholdRatio;\n }\n }\n\n nextSegmentRatio = indexDir < 0.0 ? prevSegmentRatio : nextSegmentRatio;\n vec3 currPos = interpolateFlat(source, target, segmentRatio);\n vec3 nextPos = interpolateFlat(source, target, nextSegmentRatio);\n\n if (useShortestPath) {\n if (nextPos.x < antiMeridianX) {\n currPos.x += TILE_SIZE;\n nextPos.x += TILE_SIZE;\n }\n }\n\n curr = project_common_position_to_clipspace(vec4(currPos, 1.0));\n next = project_common_position_to_clipspace(vec4(nextPos, 1.0));\n geometry.position = vec4(currPos, 1.0);\n }\n\n // Multiply out width and clamp to limits\n // mercator pixels are interpreted as screen pixels\n float widthPixels = clamp(\n project_size_to_pixel(instanceWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels\n );\n\n // extrude\n vec3 offset = vec3(\n getExtrusionOffset((next.xy - curr.xy) * indexDir, positions.y, widthPixels),\n 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position = curr + vec4(project_pixel_size_to_clipspace(offset.xy), 0.0, 0.0);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vec4 color = mix(instanceSourceColors, instanceTargetColors, segmentRatio);\n vColor = vec4(color.rgb, color.a * opacity);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n",fs:"#define SHADER_NAME arc-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying vec2 uv;\nvarying float isValid;\n\nvoid main(void) {\n if (isValid == 0.0) {\n discard;\n }\n\n gl_FragColor = vColor;\n geometry.uv = uv;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n",modules:[m.a,y.a]})}},{key:"wrapLongitude",get:function(){return!1}},{key:"initializeState",value:function(){this.getAttributeManager().addInstanced({instanceSourcePositions:{size:3,type:5130,fp64:this.use64bitPositions(),transition:!0,accessor:"getSourcePosition"},instanceTargetPositions:{size:3,type:5130,fp64:this.use64bitPositions(),transition:!0,accessor:"getTargetPosition"},instanceSourceColors:{size:this.props.colorFormat.length,type:5121,normalized:!0,transition:!0,accessor:"getSourceColor",defaultValue:S},instanceTargetColors:{size:this.props.colorFormat.length,type:5121,normalized:!0,transition:!0,accessor:"getTargetColor",defaultValue:S},instanceWidths:{size:1,transition:!0,accessor:"getWidth",defaultValue:1},instanceHeights:{size:1,transition:!0,accessor:"getHeight",defaultValue:1},instanceTilts:{size:1,transition:!0,accessor:"getTilt",defaultValue:0}})}},{key:"updateState",value:function(t){if(u()(d()(n.prototype),"updateState",this).call(this,t),t.changeFlags.extensionsChanged){var e,r=this.context.gl;null===(e=this.state.model)||void 0===e||e.delete(),this.state.model=this._getModel(r),this.getAttributeManager().invalidateAll()}}},{key:"draw",value:function(t){var e=t.uniforms,n=this.props,r=n.widthUnits,i=n.widthScale,o=n.widthMinPixels,a=n.widthMaxPixels,s=n.greatCircle,u=n.wrapLongitude;this.state.model.setUniforms(e).setUniforms({greatCircle:s,widthUnits:v.e[r],widthScale:i,widthMinPixels:o,widthMaxPixels:a,useShortestPath:u}).draw()}},{key:"_getModel",value:function(t){for(var e=[],n=0;n<50;n++)e=e.concat([n,1,0,n,-1,0]);var r=new b.a(t,E(E({},this.getShaders()),{},{id:this.props.id,geometry:new x.a({drawMode:5,attributes:{positions:new Float32Array(e)}}),isInstanced:!0}));return r.setUniforms({numSegments:50}),r}}]),n}(_.a);g()(C,"layerName","ArcLayer"),g()(C,"defaultProps",T)},function(t,e,n){"use strict";var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(7),u=n.n(s),c=n(5),l=n.n(c),h=n(6),f=n.n(h),p=n(2),d=n.n(p),A=n(0),g=n.n(A),m=n(204),y=n(220),v=n(12),_=n(157),b=n(178),x=n(58);function w(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function E(t){for(var e=1;e 0.5 || useShortestPath < -0.5) {\n source_world.x = mod(source_world.x + 180., 360.0) - 180.;\n target_world.x = mod(target_world.x + 180., 360.0) - 180.;\n float deltaLng = target_world.x - source_world.x;\n\n if (deltaLng * useShortestPath > 180.) {\n source_world.x += 360. * useShortestPath;\n source_world = splitLine(source_world, target_world, 180. * useShortestPath);\n source_world_64low = vec3(0.0);\n } else if (deltaLng * useShortestPath < -180.) {\n target_world.x += 360. * useShortestPath;\n target_world = splitLine(source_world, target_world, 180. * useShortestPath);\n target_world_64low = vec3(0.0);\n } else if (useShortestPath < 0.) {\n // Line is not split, abort\n gl_Position = vec4(0.);\n return;\n }\n }\n\n // Position\n vec4 source_commonspace;\n vec4 target_commonspace;\n vec4 source = project_position_to_clipspace(source_world, source_world_64low, vec3(0.), source_commonspace);\n vec4 target = project_position_to_clipspace(target_world, target_world_64low, vec3(0.), target_commonspace);\n \n // linear interpolation of source & target to pick right coord\n float segmentIndex = positions.x;\n vec4 p = mix(source, target, segmentIndex);\n geometry.position = mix(source_commonspace, target_commonspace, segmentIndex);\n uv = positions.xy;\n geometry.uv = uv;\n geometry.pickingColor = instancePickingColors;\n\n // Multiply out width and clamp to limits\n float widthPixels = clamp(\n project_size_to_pixel(instanceWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels\n );\n\n // extrude\n vec3 offset = vec3(\n getExtrusionOffset(target.xy - source.xy, positions.y, widthPixels),\n 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position = p + vec4(project_pixel_size_to_clipspace(offset.xy), 0.0, 0.0);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Color\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n",fs:"#define SHADER_NAME line-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying vec2 uv;\n\nvoid main(void) {\n geometry.uv = uv;\n\n gl_FragColor = vColor;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n",modules:[m.a,y.a]})}},{key:"wrapLongitude",get:function(){return!1}},{key:"initializeState",value:function(){this.getAttributeManager().addInstanced({instanceSourcePositions:{size:3,type:5130,fp64:this.use64bitPositions(),transition:!0,accessor:"getSourcePosition"},instanceTargetPositions:{size:3,type:5130,fp64:this.use64bitPositions(),transition:!0,accessor:"getTargetPosition"},instanceColors:{size:this.props.colorFormat.length,type:5121,normalized:!0,transition:!0,accessor:"getColor",defaultValue:[0,0,0,255]},instanceWidths:{size:1,transition:!0,accessor:"getWidth",defaultValue:1}})}},{key:"updateState",value:function(t){if(u()(d()(n.prototype),"updateState",this).call(this,t),t.changeFlags.extensionsChanged){var e,r=this.context.gl;null===(e=this.state.model)||void 0===e||e.delete(),this.state.model=this._getModel(r),this.getAttributeManager().invalidateAll()}}},{key:"draw",value:function(t){var e=t.uniforms,n=this.props,r=n.widthUnits,i=n.widthScale,o=n.widthMinPixels,a=n.widthMaxPixels,s=n.wrapLongitude;this.state.model.setUniforms(e).setUniforms({widthUnits:v.e[r],widthScale:i,widthMinPixels:o,widthMaxPixels:a,useShortestPath:s?1:0}).draw(),s&&this.state.model.setUniforms({useShortestPath:-1}).draw()}},{key:"_getModel",value:function(t){return new b.a(t,E(E({},this.getShaders()),{},{id:this.props.id,geometry:new x.a({drawMode:5,attributes:{positions:new Float32Array([0,-1,0,0,1,0,1,-1,0,1,1,0])}}),isInstanced:!0}))}}]),n}(_.a);g()(T,"layerName","LineLayer"),g()(T,"defaultProps",S)},function(t,e,n){"use strict";var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(7),u=n.n(s),c=n(5),l=n.n(c),h=n(6),f=n.n(h),p=n(2),d=n.n(p),A=n(0),g=n.n(A),m=n(204),y=n(221),v=n(220),_=n(12),b=n(157),x=n(178),w=n(58);function E(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function O(t){for(var e=1;e 1.0) {\n discard;\n }\n\n gl_FragColor = vColor;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n",modules:[m.a,y.a,v.a]})}},{key:"initializeState",value:function(){this.getAttributeManager().addInstanced({instancePositions:{size:3,type:5130,fp64:this.use64bitPositions(),transition:!0,accessor:"getPosition"},instanceNormals:{size:3,transition:!0,accessor:"getNormal",defaultValue:C},instanceColors:{size:this.props.colorFormat.length,type:5121,normalized:!0,transition:!0,accessor:"getColor",defaultValue:T}})}},{key:"updateState",value:function(t){var e,r,i,o=t.changeFlags,a=t.props;if(u()(d()(n.prototype),"updateState",this).call(this,t),o.extensionsChanged){var s,c=this.context.gl;null===(s=this.state.model)||void 0===s||s.delete(),this.state.model=this._getModel(c),this.getAttributeManager().invalidateAll()}o.dataChanged&&(e=a.data,r=e.header,i=e.attributes,r&&i&&(e.length=r.vertexCount,i.POSITION&&(i.instancePositions=i.POSITION),i.NORMAL&&(i.instanceNormals=i.NORMAL),i.COLOR_0&&(i.instanceColors=i.COLOR_0)))}},{key:"draw",value:function(t){var e=t.uniforms,n=this.props,r=n.pointSize,i=n.sizeUnits;this.state.model.setUniforms(e).setUniforms({sizeUnits:_.e[i],radiusPixels:r}).draw()}},{key:"_getModel",value:function(t){for(var e=[],n=0;n<3;n++){var r=n/3*Math.PI*2;e.push(2*Math.cos(r),2*Math.sin(r),0)}return new x.a(t,O(O({},this.getShaders()),{},{id:this.props.id,geometry:new w.a({drawMode:4,attributes:{positions:new Float32Array(e)}}),isInstanced:!0}))}}]),n}(b.a);g()(M,"layerName","PointCloudLayer"),g()(M,"defaultProps",P)},function(t,e,n){"use strict";var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(7),u=n.n(s),c=n(5),l=n.n(c),h=n(6),f=n.n(h),p=n(2),d=n.n(p),A=n(0),g=n.n(A),m=n(20),y=n(204),v=n(221),_=n(220),b=n(157),x=n(58),w=n(8),E=n(102),O=n(178),S=n(234),T=n(181),C=n(123);function P(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function M(t){for(var e=1;e 0.001;\n}\n\nbool isVertexPicked(vec3 vertexColor) {\n return\n picking_uSelectedColorValid &&\n !picking_isColorValid(abs(vertexColor - picking_uSelectedColor));\n}\n\nvoid picking_setPickingColor(vec3 pickingColor) {\n if (picking_uActive) {\n picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));\n\n if (!picking_uAttribute) {\n picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;\n }\n } else {\n picking_vRGBcolor_Avalid.a = float(isVertexPicked(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\nvoid picking_setPickingAttribute(vec2 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\nvoid picking_setPickingAttribute(vec3 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n",fs:"uniform bool picking_uActive;\nuniform vec3 picking_uSelectedColor;\nuniform vec4 picking_uHighlightColor;\n\nin vec4 picking_vRGBcolor_Avalid;\nvec4 picking_filterHighlightColor(vec4 color) {\n if (picking_uActive) {\n return color;\n }\n bool selected = bool(picking_vRGBcolor_Avalid.a);\n\n if (selected) {\n float highLightAlpha = picking_uHighlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking_uHighlightColor.rgb, highLightRatio);\n return vec4(blendedRGB, blendedAlpha);\n } else {\n return color;\n }\n}\nvec4 picking_filterPickingColor(vec4 color) {\n if (picking_uActive) {\n if (picking_vRGBcolor_Avalid.a == 0.0) {\n discard;\n }\n return picking_vRGBcolor_Avalid;\n }\n return color;\n}\nvec4 picking_filterColor(vec4 color) {\n vec4 highightColor = picking_filterHighlightColor(color);\n return picking_filterPickingColor(highightColor);\n}\n\n",getUniforms:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o;const e={};if(void 0!==t.pickingSelectedColor)if(t.pickingSelectedColor){const n=t.pickingSelectedColor.slice(0,3);e.picking_uSelectedColorValid=1,e.picking_uSelectedColor=n}else e.picking_uSelectedColorValid=0;if(t.pickingHighlightColor){const n=Array.from(t.pickingHighlightColor,t=>t/255);Number.isFinite(n[3])||(n[3]=1),e.picking_uHighlightColor=n}return void 0!==t.pickingActive&&(e.picking_uActive=Boolean(t.pickingActive),e.picking_uAttribute=Boolean(t.pickingAttribute)),e}};function s(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}e.a=function(t){for(var e=1;e 0.0) {\n float specular_angle = max(dot(normal_worldspace, halfway_direction), 0.0);\n specular = pow(specular_angle, lighting_uShininess);\n }\n lambertian = max(lambertian, 0.0);\n return (lambertian * lighting_uDiffuse * surfaceColor + specular * lighting_uSpecularColor) * color;\n}\n\nvec3 lighting_getLightColor(vec3 surfaceColor, vec3 cameraPosition, vec3 position_worldspace, vec3 normal_worldspace) {\n vec3 lightColor = surfaceColor;\n\n if (lighting_uEnabled) {\n vec3 view_direction = normalize(cameraPosition - position_worldspace);\n lightColor = lighting_uAmbient * surfaceColor * lighting_uAmbientLight.color;\n\n for (int i = 0; i < MAX_LIGHTS; i++) {\n if (i >= lighting_uPointLightCount) {\n break;\n }\n PointLight pointLight = lighting_uPointLight[i];\n vec3 light_position_worldspace = pointLight.position;\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color);\n }\n\n for (int i = 0; i < MAX_LIGHTS; i++) {\n if (i >= lighting_uDirectionalLightCount) {\n break;\n }\n DirectionalLight directionalLight = lighting_uDirectionalLight[i];\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\n }\n }\n return lightColor;\n}\n\nvec3 lighting_getSpecularLightColor(vec3 cameraPosition, vec3 position_worldspace, vec3 normal_worldspace) {\n vec3 lightColor = vec3(0, 0, 0);\n vec3 surfaceColor = vec3(0, 0, 0);\n\n if (lighting_uEnabled) {\n vec3 view_direction = normalize(cameraPosition - position_worldspace);\n\n for (int i = 0; i < MAX_LIGHTS; i++) {\n if (i >= lighting_uPointLightCount) {\n break;\n }\n PointLight pointLight = lighting_uPointLight[i];\n vec3 light_position_worldspace = pointLight.position;\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color);\n }\n\n for (int i = 0; i < MAX_LIGHTS; i++) {\n if (i >= lighting_uDirectionalLightCount) {\n break;\n }\n DirectionalLight directionalLight = lighting_uDirectionalLight[i];\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\n }\n }\n return lightColor;\n}\n";n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return c}));const o={};function a(t){const{ambient:e=.35,diffuse:n=.6,shininess:r=32,specularColor:i=[30,30,30]}=t;return{lighting_uAmbient:e,lighting_uDiffuse:n,lighting_uShininess:r,lighting_uSpecularColor:i.map(t=>t/255)}}function s(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o;if(!("material"in t))return{};const{material:e}=t;return e?a(e):{lighting_uEnabled:!1}}const u={name:"gouraud-lighting",dependencies:[r.a],vs:i,defines:{LIGHTING_VERTEX:1},getUniforms:s},c={name:"phong-lighting",dependencies:[r.a],fs:i,defines:{LIGHTING_FRAGMENT:1},getUniforms:s}},function(t,e,n){"use strict";n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return c}));var r=n(102),i=n(223),o=n(224),a=n(71),s=n(10);function u(t,e){Object(s.a)(t instanceof r.a||t instanceof i.a||t instanceof o.a);const n=t.constructor,{gl:a,width:u,height:c,format:l,type:h,dataFormat:f,border:p,mipmaps:d}=t;return new n(a,Object.assign({width:u,height:c,format:l,type:h,dataFormat:f,border:p,mipmaps:d},e))}function c(t,e){const{gl:n,width:r,height:i,id:o}=t;return new a.a(n,Object.assign({},e,{id:"framebuffer-for-".concat(o),width:r,height:i,attachments:{36064:t}}))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var r=n(8),i=n(52);const o=[34069,34070,34071,34072,34073,34074];class a extends i.a{get[Symbol.toStringTag](){return"TextureCube"}constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Object(r.b)(t),super(t,Object.assign({},e,{target:34067})),this.initialize(e),Object.seal(this)}initialize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{mipmaps:e=!0,parameters:n={}}=t;return this.opts=t,this.setCubeMapImageData(t).then(()=>{this.loaded=!0,e&&this.generateMipmap(t),this.setParameters(n)}),this}subImage(t){let{face:e,data:n,x:r=0,y:i=0,mipmapLevel:o=0}=t;return this._subImage({target:e,data:n,x:r,y:i,mipmapLevel:o})}async setCubeMapImageData(t){let{width:e,height:n,pixels:i,data:a,border:s=0,format:u=6408,type:c=5121}=t;const{gl:l}=this,h=i||a,f=await Promise.all(o.map(t=>{const e=h[t];return Promise.all(Array.isArray(e)?e:[e])}));this.bind(),o.forEach((t,i)=>{f[i].length>1&&!1!==this.opts.mipmaps&&r.k.warn("".concat(this.id," has mipmap and multiple LODs."))(),f[i].forEach((r,i)=>{e&&n?l.texImage2D(t,i,u,e,n,s,u,c,r):l.texImage2D(t,i,u,u,c,r)})}),this.unbind()}setImageDataForFace(t){const{face:e,width:n,height:r,pixels:i,data:o,border:a=0,format:s=6408,type:u=5121}=t,{gl:c}=this,l=i||o;return this.bind(),l instanceof Promise?l.then(n=>this.setImageDataForFace(Object.assign({},t,{face:e,data:n,pixels:n}))):this.width||this.height?c.texImage2D(e,0,s,n,r,a,s,u,l):c.texImage2D(e,0,s,s,u,l),this}}a.FACES=o},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(8),i=n(52),o=n(79),a=n(32);class s extends i.a{get[Symbol.toStringTag](){return"Texture3D"}static isSupported(t){return Object(r.j)(t)}constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Object(r.a)(t),e=Object.assign({depth:1},e,{target:32879,unpackFlipY:!1}),super(t,e),this.initialize(e),Object.seal(this)}setImageData(t){let{level:e=0,dataFormat:n=6408,width:i,height:s,depth:u=1,border:c=0,format:l,type:h=5121,offset:f=0,data:p,parameters:d={}}=t;if(this._trackDeallocatedMemory("Texture"),this.gl.bindTexture(this.target,this.handle),Object(r.o)(this.gl,d,()=>{ArrayBuffer.isView(p)&&this.gl.texImage3D(this.target,e,n,i,s,u,c,l,h,p),p instanceof a.a&&(this.gl.bindBuffer(35052,p.handle),this.gl.texImage3D(this.target,e,n,i,s,u,c,l,h,f))}),p&&p.byteLength)this._trackAllocatedMemory(p.byteLength,"Texture");else{const t=o.a[this.dataFormat]||4,e=o.c[this.type]||1;this._trackAllocatedMemory(this.width*this.height*this.depth*t*e,"Texture")}return this.loaded=!0,this}}},function(t,e,n){"use strict";(function(t){n.d(e,"a",(function(){return i}));var r=n(226);function i(){return!("object"==typeof t&&"[object process]"===String(t)&&!t.browser)||Object(r.a)()}}).call(this,n(63))},function(t,e,n){"use strict";(function(t){function r(e){if("undefined"!=typeof window&&"object"==typeof window.process&&"renderer"===window.process.type)return!0;if(void 0!==t&&"object"==typeof t.versions&&Boolean(t.versions.electron))return!0;const n="object"==typeof navigator&&"string"==typeof navigator.userAgent&&navigator.userAgent,r=e||n;return!!(r&&r.indexOf("Electron")>=0)}n.d(e,"a",(function(){return r}))}).call(this,n(63))},function(t,e){t.exports=function(t){var e;if("undefined"!=typeof Symbol){if(Symbol.asyncIterator&&null!=(e=t[Symbol.asyncIterator]))return e.call(t);if(Symbol.iterator&&null!=(e=t[Symbol.iterator]))return e.call(t)}throw new TypeError("Object is not async iterable")}},function(t,e,n){"use strict";(function(t){n.d(e,"a",(function(){return f}));var r=n(229),i=n(230),o=n(1),a=n(29),s=n.n(a),u=n(106);var c={container:s.a.object,gl:s.a.object,mapboxApiAccessToken:s.a.string,mapboxApiUrl:s.a.string,attributionControl:s.a.bool,preserveDrawingBuffer:s.a.bool,reuseMaps:s.a.bool,transformRequest:s.a.func,mapOptions:s.a.object,mapStyle:s.a.oneOfType([s.a.string,s.a.object]),visible:s.a.bool,asyncRender:s.a.bool,onLoad:s.a.func,onError:s.a.func,width:s.a.number,height:s.a.number,viewState:s.a.object,longitude:s.a.number,latitude:s.a.number,zoom:s.a.number,bearing:s.a.number,pitch:s.a.number,altitude:s.a.number},l={container:u.a.body,mapboxApiAccessToken:function(){var e=null;if("undefined"!=typeof window&&window.location){var n=window.location.search.match(/access_token=([^&\/]*)/);e=n&&n[1]}e||void 0===t||(e=e||t.env.MapboxAccessToken||t.env.REACT_APP_MAPBOX_ACCESS_TOKEN);return e||"no-token"}(),mapboxApiUrl:"https://api.mapbox.com",preserveDrawingBuffer:!1,attributionControl:!0,reuseMaps:!1,mapOptions:{},mapStyle:"mapbox://styles/mapbox/light-v8",visible:!0,asyncRender:!1,onLoad:function(){},onError:function(t){t&&console.error(t.error)},width:0,height:0,longitude:0,latitude:0,zoom:0,bearing:0,pitch:0,altitude:1.5};function h(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"component";t.debug&&s.a.checkPropTypes(c,t,"prop",e)}var f=function(){function t(e){var n=this;if(Object(r.a)(this,t),Object(o.a)(this,"mapboxgl",void 0),Object(o.a)(this,"props",l),Object(o.a)(this,"_map",null),Object(o.a)(this,"width",0),Object(o.a)(this,"height",0),Object(o.a)(this,"_fireLoadEvent",(function(){n.props.onLoad({type:"load",target:n._map})})),!e.mapboxgl)throw new Error("Mapbox not available");this.mapboxgl=e.mapboxgl,t.initialized||(t.initialized=!0,this._checkStyleSheet(this.mapboxgl.version)),this._initialize(e)}return Object(i.a)(t,[{key:"finalize",value:function(){return this._destroy(),this}},{key:"setProps",value:function(t){return this._update(this.props,t),this}},{key:"resize",value:function(){return this._map.resize(),this}},{key:"redraw",value:function(){var t=this._map;t.style&&(t._frame&&(t._frame.cancel(),t._frame=null),t._render())}},{key:"getMap",value:function(){return this._map}},{key:"_reuse",value:function(e){this._map=t.savedMap;var n=this._map.getContainer(),r=e.container;for(r.classList.add("mapboxgl-map");n.childNodes.length>0;)r.appendChild(n.childNodes[0]);this._map._container=r,t.savedMap=null,e.mapStyle&&this._map.setStyle(e.mapStyle,{diff:!1}),this._map.isStyleLoaded()?this._fireLoadEvent():this._map.once("styledata",this._fireLoadEvent)}},{key:"_create",value:function(e){if(e.reuseMaps&&t.savedMap)this._reuse(e);else{if(e.gl){var n=HTMLCanvasElement.prototype.getContext;HTMLCanvasElement.prototype.getContext=function(){return HTMLCanvasElement.prototype.getContext=n,e.gl}}var r={container:e.container,center:[0,0],zoom:8,pitch:0,bearing:0,maxZoom:24,style:e.mapStyle,interactive:!1,trackResize:!1,attributionControl:e.attributionControl,preserveDrawingBuffer:e.preserveDrawingBuffer};e.transformRequest&&(r.transformRequest=e.transformRequest),this._map=new this.mapboxgl.Map(Object.assign({},r,e.mapOptions)),this._map.once("load",e.onLoad),this._map.on("error",e.onError)}return this}},{key:"_destroy",value:function(){this._map&&(t.savedMap?this._map.remove():(t.savedMap=this._map,this._map.off("load",this.props.onLoad),this._map.off("error",this.props.onError),this._map.off("styledata",this._fireLoadEvent)),this._map=null)}},{key:"_initialize",value:function(t){var e=this;h(t=Object.assign({},l,t),"Mapbox"),this.mapboxgl.accessToken=t.mapboxApiAccessToken||l.mapboxApiAccessToken,this.mapboxgl.baseApiUrl=t.mapboxApiUrl,this._create(t);var n=t.container;Object.defineProperty(n,"offsetWidth",{get:function(){return e.width}}),Object.defineProperty(n,"clientWidth",{get:function(){return e.width}}),Object.defineProperty(n,"offsetHeight",{get:function(){return e.height}}),Object.defineProperty(n,"clientHeight",{get:function(){return e.height}});var r=this._map.getCanvas();r&&(r.style.outline="none"),this._updateMapViewport({},t),this._updateMapSize({},t),this.props=t}},{key:"_update",value:function(t,e){if(this._map){h(e=Object.assign({},this.props,e),"Mapbox");var n=this._updateMapViewport(t,e),r=this._updateMapSize(t,e);e.asyncRender||!n&&!r||this.redraw(),this.props=e}}},{key:"_updateMapSize",value:function(t,e){var n=t.width!==e.width||t.height!==e.height;return n&&(this.width=e.width,this.height=e.height,this.resize()),n}},{key:"_updateMapViewport",value:function(t,e){var n=this._getViewState(t),r=this._getViewState(e),i=r.latitude!==n.latitude||r.longitude!==n.longitude||r.zoom!==n.zoom||r.pitch!==n.pitch||r.bearing!==n.bearing||r.altitude!==n.altitude;return i&&(this._map.jumpTo(this._viewStateToMapboxProps(r)),r.altitude!==n.altitude&&(this._map.transform.altitude=r.altitude)),i}},{key:"_getViewState",value:function(t){var e=t.viewState||t,n=e.longitude,r=e.latitude,i=e.zoom,o=e.pitch,a=void 0===o?0:o,s=e.bearing,u=void 0===s?0:s,c=e.altitude;return{longitude:n,latitude:r,zoom:i,pitch:a,bearing:u,altitude:void 0===c?1.5:c}}},{key:"_checkStyleSheet",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"0.47.0";if(void 0!==u.a)try{var e=u.a.createElement("div");e.className="mapboxgl-map",e.style.display="none",u.a.body.append(e);var n="static"!==window.getComputedStyle(e).position;if(!n){var r=u.a.createElement("link");r.setAttribute("rel","stylesheet"),r.setAttribute("type","text/css"),r.setAttribute("href","https://api.tiles.mapbox.com/mapbox-gl-js/v".concat(t,"/mapbox-gl.css")),u.a.head.append(r)}}catch(t){}}},{key:"_viewStateToMapboxProps",value:function(t){return{center:[t.longitude,t.latitude],zoom:t.zoom,bearing:t.bearing,pitch:t.pitch}}}]),t}();Object(o.a)(f,"initialized",!1),Object(o.a)(f,"propTypes",c),Object(o.a)(f,"defaultProps",l),Object(o.a)(f,"savedMap",null)}).call(this,n(63))},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}n.d(e,"a",(function(){return r}))},function(t,e,n){"use strict";function r(t,e){for(var n=0;n80*n){r=s=t[0],o=u=t[1];for(var v=n;vs&&(s=c),l>u&&(u=l);p=0!==(p=Math.max(s-r,u-o))?32767/p:0}return a(m,y,n,r,o,p,0),y}function i(t,e,n,r,i){var o,a;if(i===C(t,e,n,r)>0)for(o=e;o=e;o-=r)a=O(o,t[o],t[o+1],a);return a&&v(a,a.next)&&(S(a),a=a.next),a}function o(t,e){if(!t)return t;e||(e=t);var n,r=t;do{if(n=!1,r.steiner||!v(r,r.next)&&0!==y(r.prev,r,r.next))r=r.next;else{if(S(r),(r=e=r.prev)===r.next)break;n=!0}}while(n||r!==e);return e}function a(t,e,n,r,i,h,f){if(t){!f&&h&&function(t,e,n,r){var i=t;do{0===i.z&&(i.z=d(i.x,i.y,e,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,n,r,i,o,a,s,u,c=1;do{for(n=t,t=null,o=null,a=0;n;){for(a++,r=n,s=0,e=0;e0||u>0&&r;)0!==s&&(0===u||!r||n.z<=r.z)?(i=n,n=n.nextZ,s--):(i=r,r=r.nextZ,u--),o?o.nextZ=i:t=i,i.prevZ=o,o=i;n=r}o.nextZ=null,c*=2}while(a>1)}(i)}(t,r,i,h);for(var p,A,g=t;t.prev!==t.next;)if(p=t.prev,A=t.next,h?u(t,r,i,h):s(t))e.push(p.i/n|0),e.push(t.i/n|0),e.push(A.i/n|0),S(t),t=A.next,g=A.next;else if((t=A)===g){f?1===f?a(t=c(o(t),e,n),e,n,r,i,h,2):2===f&&l(t,e,n,r,i,h):a(o(t),e,n,r,i,h,1);break}}}function s(t){var e=t.prev,n=t,r=t.next;if(y(e,n,r)>=0)return!1;for(var i=e.x,o=n.x,a=r.x,s=e.y,u=n.y,c=r.y,l=io?i>a?i:a:o>a?o:a,p=s>u?s>c?s:c:u>c?u:c,d=r.next;d!==e;){if(d.x>=l&&d.x<=f&&d.y>=h&&d.y<=p&&g(i,s,o,u,a,c,d.x,d.y)&&y(d.prev,d,d.next)>=0)return!1;d=d.next}return!0}function u(t,e,n,r){var i=t.prev,o=t,a=t.next;if(y(i,o,a)>=0)return!1;for(var s=i.x,u=o.x,c=a.x,l=i.y,h=o.y,f=a.y,p=su?s>c?s:c:u>c?u:c,v=l>h?l>f?l:f:h>f?h:f,_=d(p,A,e,n,r),b=d(m,v,e,n,r),x=t.prevZ,w=t.nextZ;x&&x.z>=_&&w&&w.z<=b;){if(x.x>=p&&x.x<=m&&x.y>=A&&x.y<=v&&x!==i&&x!==a&&g(s,l,u,h,c,f,x.x,x.y)&&y(x.prev,x,x.next)>=0)return!1;if(x=x.prevZ,w.x>=p&&w.x<=m&&w.y>=A&&w.y<=v&&w!==i&&w!==a&&g(s,l,u,h,c,f,w.x,w.y)&&y(w.prev,w,w.next)>=0)return!1;w=w.nextZ}for(;x&&x.z>=_;){if(x.x>=p&&x.x<=m&&x.y>=A&&x.y<=v&&x!==i&&x!==a&&g(s,l,u,h,c,f,x.x,x.y)&&y(x.prev,x,x.next)>=0)return!1;x=x.prevZ}for(;w&&w.z<=b;){if(w.x>=p&&w.x<=m&&w.y>=A&&w.y<=v&&w!==i&&w!==a&&g(s,l,u,h,c,f,w.x,w.y)&&y(w.prev,w,w.next)>=0)return!1;w=w.nextZ}return!0}function c(t,e,n){var r=t;do{var i=r.prev,a=r.next.next;!v(i,a)&&_(i,r,r.next,a)&&w(i,a)&&w(a,i)&&(e.push(i.i/n|0),e.push(r.i/n|0),e.push(a.i/n|0),S(r),S(r.next),r=t=a),r=r.next}while(r!==t);return o(r)}function l(t,e,n,r,i,s){var u=t;do{for(var c=u.next.next;c!==u.prev;){if(u.i!==c.i&&m(u,c)){var l=E(u,c);return u=o(u,u.next),l=o(l,l.next),a(u,e,n,r,i,s,0),void a(l,e,n,r,i,s,0)}c=c.next}u=u.next}while(u!==t)}function h(t,e){return t.x-e.x}function f(t,e){var n=function(t,e){var n,r=e,i=t.x,o=t.y,a=-1/0;do{if(o<=r.y&&o>=r.next.y&&r.next.y!==r.y){var s=r.x+(o-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=i&&s>a&&(a=s,n=r.x=r.x&&r.x>=l&&i!==r.x&&g(on.x||r.x===n.x&&p(n,r)))&&(n=r,f=u)),r=r.next}while(r!==c);return n}(t,e);if(!n)return e;var r=E(n,t);return o(r,r.next),o(n,n.next)}function p(t,e){return y(t.prev,t,e.prev)<0&&y(e.next,t,t.next)<0}function d(t,e,n,r,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-n)*i|0)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-r)*i|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function A(t){var e=t,n=t;do{(e.x=(t-a)*(o-s)&&(t-a)*(r-s)>=(n-a)*(e-s)&&(n-a)*(o-s)>=(i-a)*(r-s)}function m(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&_(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(w(t,e)&&w(e,t)&&function(t,e){var n=t,r=!1,i=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&i<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==t);return r}(t,e)&&(y(t.prev,t,e.prev)||y(t,e.prev,e))||v(t,e)&&y(t.prev,t,t.next)>0&&y(e.prev,e,e.next)>0)}function y(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function v(t,e){return t.x===e.x&&t.y===e.y}function _(t,e,n,r){var i=x(y(t,e,n)),o=x(y(t,e,r)),a=x(y(n,r,t)),s=x(y(n,r,e));return i!==o&&a!==s||(!(0!==i||!b(t,n,e))||(!(0!==o||!b(t,r,e))||(!(0!==a||!b(n,t,r))||!(0!==s||!b(n,e,r)))))}function b(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function x(t){return t>0?1:t<0?-1:0}function w(t,e){return y(t.prev,t,t.next)<0?y(t,e,t.next)>=0&&y(t,t.prev,e)>=0:y(t,e,t.prev)<0||y(t,t.next,e)<0}function E(t,e){var n=new T(t.i,t.x,t.y),r=new T(e.i,e.x,e.y),i=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=i,i.prev=n,r.next=n,n.prev=r,o.next=r,r.prev=o,r}function O(t,e,n,r){var i=new T(t,e,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function S(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function T(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function C(t,e,n,r){for(var i=0,o=e,a=n-r;o0&&(r+=t[i-1].length,n.holes.push(r))}return n}},function(t,e,n){"use strict";(function(t){n.d(e,"a",(function(){return A}));new Uint8Array([0]);const r=[171,75,84,88,32,50,48,187,13,10,26,10];var i,o,a,s,u,c,l,h;!function(t){t[t.NONE=0]="NONE",t[t.BASISLZ=1]="BASISLZ",t[t.ZSTD=2]="ZSTD",t[t.ZLIB=3]="ZLIB"}(i||(i={})),function(t){t[t.BASICFORMAT=0]="BASICFORMAT"}(o||(o={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.ETC1S=163]="ETC1S",t[t.UASTC=166]="UASTC"}(a||(a={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.SRGB=1]="SRGB"}(s||(s={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.LINEAR=1]="LINEAR",t[t.SRGB=2]="SRGB",t[t.ITU=3]="ITU",t[t.NTSC=4]="NTSC",t[t.SLOG=5]="SLOG",t[t.SLOG2=6]="SLOG2"}(u||(u={})),function(t){t[t.ALPHA_STRAIGHT=0]="ALPHA_STRAIGHT",t[t.ALPHA_PREMULTIPLIED=1]="ALPHA_PREMULTIPLIED"}(c||(c={})),function(t){t[t.RGB=0]="RGB",t[t.RRR=3]="RRR",t[t.GGG=4]="GGG",t[t.AAA=15]="AAA"}(l||(l={})),function(t){t[t.RGB=0]="RGB",t[t.RGBA=3]="RGBA",t[t.RRR=4]="RRR",t[t.RRRG=5]="RRRG"}(h||(h={}));class f{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=i.NONE,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:o.BASICFORMAT,versionNumber:2,descriptorBlockSize:40,colorModel:a.UNSPECIFIED,colorPrimaries:s.SRGB,transferFunction:s.SRGB,flags:c.ALPHA_STRAIGHT,texelBlockDimension:{x:4,y:4,z:1,w:1},bytesPlane:[],samples:[]}],this.keyValue={},this.globalData=null}}class p{constructor(t,e,n,r){this._dataView=new DataView(t.buffer,t.byteOffset+e,n),this._littleEndian=r,this._offset=0}_nextUint8(){const t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){const t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){const t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){const t=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,t}_skip(t){return this._offset+=t,this}_scan(t,e=0){const n=this._offset;let r=0;for(;this._dataView.getUint8(this._offset)!==e&&r2&&void 0!==arguments[2]?arguments[2]:null;const r=t.texture&&t.texture.sampler&&t.texture.sampler.parameters||{},i=t.texture.source.image;let a,s={};i.compressed?(a=i,s={[this.gl.TEXTURE_MIN_FILTER]:i.data.length>1?this.gl.LINEAR_MIPMAP_NEAREST:this.gl.LINEAR}):a={data:i};const u=new o.a(this.gl,{id:t.name||t.id,parameters:{...r,...s},pixelStore:{[this.gl.UNPACK_FLIP_Y_WEBGL]:!1},...a});this.uniforms[e]=u,this.defineIfPresent(n,n),this.generatedTextures.push(u)}parsePbrMetallicRoughness(t){t.baseColorTexture&&this.parseTexture(t.baseColorTexture,"u_BaseColorSampler","HAS_BASECOLORMAP"),this.uniforms.u_BaseColorFactor=t.baseColorFactor||[1,1,1,1],t.metallicRoughnessTexture&&this.parseTexture(t.metallicRoughnessTexture,"u_MetallicRoughnessSampler","HAS_METALROUGHNESSMAP");const{metallicFactor:e=1,roughnessFactor:n=1}=t;this.uniforms.u_MetallicRoughnessValues=[e,n]}parseMaterial(t){if(this.uniforms.pbr_uUnlit=Boolean(t.unlit),t.pbrMetallicRoughness&&this.parsePbrMetallicRoughness(t.pbrMetallicRoughness),t.normalTexture){this.parseTexture(t.normalTexture,"u_NormalSampler","HAS_NORMALMAP");const{scale:e=1}=t.normalTexture;this.uniforms.u_NormalScale=e}if(t.occlusionTexture){this.parseTexture(t.occlusionTexture,"u_OcclusionSampler","HAS_OCCLUSIONMAP");const{strength:e=1}=t.occlusionTexture;this.uniforms.u_OcclusionStrength=e}if(t.emissiveTexture&&(this.parseTexture(t.emissiveTexture,"u_EmissiveSampler","HAS_EMISSIVEMAP"),this.uniforms.u_EmissiveFactor=t.emissiveFactor||[0,0,0]),"MASK"===t.alphaMode){const{alphaCutoff:e=.5}=t;this.defines.ALPHA_CUTOFF=1,this.uniforms.u_AlphaCutoff=e}else"BLEND"===t.alphaMode&&(a.k.warn("BLEND alphaMode might not work well because it requires mesh sorting")(),Object.assign(this.parameters,{blend:!0,blendEquation:this.gl.FUNC_ADD,blendFunc:[this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA,this.gl.ONE,this.gl.ONE_MINUS_SRC_ALPHA]}))}delete(){this.generatedTextures.forEach(t=>t.delete())}}},function(t,e,n){"use strict";n.d(e,"b",(function(){return a})),n.d(e,"c",(function(){return s})),n.d(e,"a",(function(){return u}));var r=n(181),i=n(8),o=n(10);function a(t,e){return s(t,e)}function s(t,e){return(e=Array.isArray(e)?e:[e]).every(e=>c(t,e))}function u(t){t.luma=t.luma||{},t.luma.caps=t.luma.caps||{};for(const e in r.b)void 0===t.luma.caps[e]&&(t.luma.caps[e]=c(t,e));return t.luma.caps}function c(t,e){return t.luma=t.luma||{},t.luma.caps=t.luma.caps||{},void 0===t.luma.caps[e]&&(t.luma.caps[e]=function(t,e){const n=r.b[e];let a;Object(o.a)(n,e);const s=Object(i.j)(t)&&n[1]||n[0];if("function"==typeof s)a=s(t);else if(Array.isArray(s)){a=!0;for(const e of s)a=a&&Boolean(t.getExtension(e))}else"string"==typeof s?a=Boolean(t.getExtension(s)):"boolean"==typeof s?a=s:Object(o.a)(!1);return a}(t,e)),t.luma.caps[e]||i.k.log(2,"Feature: ".concat(e," not supported"))(),t.luma.caps[e]}},,,,,,,,,function(t,e,n){var r=document.body&&document.body.getAttribute("data-base-url");r&&(window.__webpack_public_path__="".concat(r,"nbextensions/pydeck/nb_extension"));var i=n(188).default.jupyterTransport,o=null,a=null;try{o=n(270).default,a=n(246).default}catch(t){}var s=n(121),u=s.MODULE_VERSION,c=s.MODULE_NAME,l=n(85),h=l.createDeck,f=l.updateDeck,p=n(271).initPlayground;p(),t.exports={jupyterTransport:i,MODULE_VERSION:u,MODULE_NAME:c,JupyterTransportModel:o,JupyterTransportView:a,initPlayground:p,createDeck:h,updateDeck:f}},function(t,e){function n(e,r){return t.exports=n=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},n(e,r)}t.exports=n},function(t,e,n){var r=n(2);t.exports=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=r(t)););return t}},function(t,e,n){"use strict";n.r(e),n.d(e,"default",(function(){return y}));var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(7),u=n.n(s),c=n(5),l=n.n(c),h=n(6),f=n.n(h),p=n(2),d=n.n(p),A=n(133),g=n(188);function m(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=d()(t);if(e){var i=d()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return f()(this,n)}}var y=function(t){l()(n,t);var e=m(n);function n(){return i()(this,n),e.apply(this,arguments)}return a()(n,[{key:"initialize",value:function(){this.listenTo(this.model,"destroy",this.remove),this.transport=new g.default,this.transport.jupyterModel=this.model,this.transport.jupyterView=this,this.transport._initialize(),u()(d()(n.prototype),"initialize",this).apply(this,arguments)}},{key:"remove",value:function(){this.transport&&(this.transport._finalize(),this.transport.jupyterModel=null,this.transport.jupyterView=null,this.transport=null)}},{key:"render",value:function(){u()(d()(n.prototype),"render",this).call(this),this.model.on("change:json_input",this.onJsonChanged.bind(this)),this.model.on("change:data_buffer",this.onDataBufferChanged.bind(this)),this.onDataBufferChanged()}},{key:"onJsonChanged",value:function(){var t=JSON.parse(this.model.get("json_input"));this.transport._messageReceived({type:"json",json:t})}},{key:"onDataBufferChanged",value:function(){var t=this.model.get("json_input"),e=this.model.get("data_buffer");t&&e?this.transport._messageReceived({type:"json-with-binary",json:t,binary:e}):this.transport._messageReceived({type:"json",json:t})}}]),n}(A.DOMWidgetView)},function(t,e,n){(function(e){const r=n(268),i=n(16),o=n(257).default,{registerLoaders:a,load:s,parse:u,fetchFile:c}=n(55),l="undefined"==typeof window?e:window;l.deck=l.deck||{},l.luma=l.luma||{},l.loaders=l.loaders||{},Object.assign(l.deck,i,{DeckGL:o}),Object.assign(l.luma,r),Object.assign(l.loaders,{registerLoaders:a,load:s,parse:u,fetchFile:c}),t.exports=l.deck}).call(this,n(82))},function(t,e){},function(t,e){t.exports=function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e=0;--i){var o=this.tryEntries[i],a=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var s=n.call(o,"catchLoc"),u=n.call(o,"finallyLoc");if(s&&u){if(this.prev=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),b(n),c}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;b(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:w(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},t}(t.exports);try{regeneratorRuntime=r}catch(t){Function("r","regeneratorRuntime = r")(r)}},function(t,e,n){"use strict";n.r(e),n.d(e,"default",(function(){return a}));var r=n(228),i=n(190);const o={position:"absolute",left:0,top:0,width:"100%",height:"100%"};class a extends i.a{constructor(t={}){if("undefined"==typeof document)throw Error("Deck can only be used in the browser");const{mapCanvas:e,deckCanvas:n}=function(t){let{container:e=document.body}=t;if("string"==typeof e&&(e=document.getElementById(e)),!e)throw Error("Deck: container not found");"static"===window.getComputedStyle(e).position&&(e.style.position="relative");const n=document.createElement("div");e.appendChild(n),Object.assign(n.style,o);const r=document.createElement("canvas");return e.appendChild(r),Object.assign(r.style,o),{container:e,mapCanvas:n,deckCanvas:r}}(t),i=t.viewState||t.initialViewState,a=Number.isFinite(i&&i.latitude),{map:s=window.mapboxgl}=t;super({canvas:n,...t}),s&&s.Map?this._map=a&&new r.a({...t,viewState:i,container:e,mapboxgl:s}):this._map=s,this._onBeforeRender=t=>{if(this.onBeforeRender(t),this._map){const t=this.getViewports()[0];this._map.setProps({width:t.width,height:t.height,viewState:t})}}}getMapboxMap(){return this._map&&this._map.getMap()}finalize(){this._map&&this._map.finalize(),super.finalize()}setProps(t){"onBeforeRender"in t&&this._onBeforeRender&&t.onBeforeRender!==this._onBeforeRender&&(this.onBeforeRender=t.onBeforeRender,t.onBeforeRender=this._onBeforeRender),"mapStyle"in t&&this._map&&this._map._map.setStyle(t.mapStyle),super.setProps(t)}}},function(t,e,n){"use strict";var r=n(259);function i(){}function o(){}o.resetWarningCache=i,t.exports=function(){function t(t,e,n,i,o,a){if(a!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function e(){return t}t.isRequired=t;var n={array:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:o,resetWarningCache:i};return n.PropTypes=n,n}},function(t,e,n){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(t,e){t.exports=function(t,e){if(null==t)return{};var n,r,i={},o=Object.keys(t);for(r=0;r=0||(i[n]=t[n]);return i}},function(t,e,n){"use strict";(function(t){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -var r=n(262),i=n(213),o=n(263);function a(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(t,e){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|t}function d(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return U(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return N(t).length;default:if(r)return U(t).length;e=(""+e).toLowerCase(),r=!0}}function A(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return P(this,e,n);case"utf8":case"utf-8":return S(this,e,n);case"ascii":return T(this,e,n);case"latin1":case"binary":return C(this,e,n);case"base64":return O(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function g(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function m(t,e,n,r,i){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=u.from(e,r)),u.isBuffer(e))return 0===e.length?-1:y(t,e,n,r,i);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):y(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function y(t,e,n,r,i){var o,a=1,s=t.length,u=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,n/=2}function c(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){var l=-1;for(o=n;os&&(n=s-u),o=n;o>=0;o--){for(var h=!0,f=0;fi&&(r=i):r=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;a>8,i=n%256,o.push(i),o.push(r);return o}(e,t.length-n),t,n,r)}function O(t,e,n){return 0===e&&n===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(e,n))}function S(t,e,n){n=Math.min(t.length,n);for(var r=[],i=e;i239?4:c>223?3:c>191?2:1;if(i+h<=n)switch(h){case 1:c<128&&(l=c);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&c)<<6|63&o)>127&&(l=u);break;case 3:o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&(u=(15&c)<<12|(63&o)<<6|63&a)>2047&&(u<55296||u>57343)&&(l=u);break;case 4:o=t[i+1],a=t[i+2],s=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&(u=(15&c)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&u<1114112&&(l=u)}null===l?(l=65533,h=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),i+=h}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);var n="",r=0;for(;r0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},u.prototype.compare=function(t,e,n,r,i){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(r>>>=0),a=(n>>>=0)-(e>>>=0),s=Math.min(o,a),c=this.slice(r,i),l=t.slice(e,n),h=0;hi)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return v(this,t,e,n);case"utf8":case"utf-8":return _(this,t,e,n);case"ascii":return b(this,t,e,n);case"latin1":case"binary":return x(this,t,e,n);case"base64":return w(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;ir)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function B(t,e,n,r,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function R(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i>>8*(r?i:1-i)}function k(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i>>8*(r?i:3-i)&255}function L(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function D(t,e,n,r,o){return o||L(t,0,n,4),i.write(t,e,n,r,23,4),n+4}function j(t,e,n,r,o){return o||L(t,0,n,8),i.write(t,e,n,r,52,8),n+8}u.prototype.slice=function(t,e){var n,r=this.length;if((t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(i*=256);)r+=this[t+--e]*i;return r},u.prototype.readUInt8=function(t,e){return e||I(t,1,this.length),this[t]},u.prototype.readUInt16LE=function(t,e){return e||I(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUInt16BE=function(t,e){return e||I(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUInt32LE=function(t,e){return e||I(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUInt32BE=function(t,e){return e||I(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||I(t,e,this.length);for(var r=this[t],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*e)),r},u.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||I(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},u.prototype.readInt8=function(t,e){return e||I(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){e||I(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function(t,e){e||I(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function(t,e){return e||I(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return e||I(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readFloatLE=function(t,e){return e||I(t,4,this.length),i.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return e||I(t,4,this.length),i.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return e||I(t,8,this.length),i.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return e||I(t,8,this.length),i.read(this,t,!1,52,8)},u.prototype.writeUIntLE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||B(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+n},u.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,1,255,0),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},u.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):R(this,t,e,!0),e+2},u.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):R(this,t,e,!1),e+2},u.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):k(this,t,e,!0),e+4},u.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):k(this,t,e,!1),e+4},u.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);B(this,t,e,n,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+n},u.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);B(this,t,e,n,i-1,-i)}var o=n-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+n},u.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,1,127,-128),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):R(this,t,e,!0),e+2},u.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):R(this,t,e,!1),e+2},u.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):k(this,t,e,!0),e+4},u.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):k(this,t,e,!1),e+4},u.prototype.writeFloatLE=function(t,e,n){return D(this,t,e,!0,n)},u.prototype.writeFloatBE=function(t,e,n){return D(this,t,e,!1,n)},u.prototype.writeDoubleLE=function(t,e,n){return j(this,t,e,!0,n)},u.prototype.writeDoubleBE=function(t,e,n){return j(this,t,e,!1,n)},u.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--i)t[i+e]=this[i+n];else if(o<1e3||!u.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function N(t){return r.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(F,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function G(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}}).call(this,n(82))},function(t,e,n){"use strict";e.byteLength=function(t){var e=c(t),n=e[0],r=e[1];return 3*(n+r)/4-r},e.toByteArray=function(t){var e,n,r=c(t),a=r[0],s=r[1],u=new o(function(t,e,n){return 3*(e+n)/4-n}(0,a,s)),l=0,h=s>0?a-4:a;for(n=0;n>16&255,u[l++]=e>>8&255,u[l++]=255&e;2===s&&(e=i[t.charCodeAt(n)]<<2|i[t.charCodeAt(n+1)]>>4,u[l++]=255&e);1===s&&(e=i[t.charCodeAt(n)]<<10|i[t.charCodeAt(n+1)]<<4|i[t.charCodeAt(n+2)]>>2,u[l++]=e>>8&255,u[l++]=255&e);return u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],a=0,s=n-i;as?s:a+16383));1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"="));return o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,u=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function l(t,e,n){for(var i,o,a=[],s=e;s>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return a.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){!function(n){"use strict";var r=function(t,e){var n=new Error(t+" at character "+e);throw n.index=e,n.description=t,n},i={"-":!0,"!":!0,"~":!0,"+":!0},o={"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},a=function(t){var e,n=0;for(var r in t)(e=r.length)>n&&t.hasOwnProperty(r)&&(n=e);return n},s=a(i),u=a(o),c={true:!0,false:!1,null:null},l=function(t){return o[t]||0},h=function(t,e,n){return{type:"||"===t||"&&"===t?"LogicalExpression":"BinaryExpression",operator:t,left:e,right:n}},f=function(t){return t>=48&&t<=57},p=function(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||t>=128&&!o[String.fromCharCode(t)]},d=function(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t>=128&&!o[String.fromCharCode(t)]},A=function(t){for(var e,n,a=0,A=t.charAt,g=t.charCodeAt,m=function(e){return A.call(t,e)},y=function(e){return g.call(t,e)},v=t.length,_=function(){for(var t=y(a);32===t||9===t||10===t||13===t;)t=y(++a)},b=function(){var t,e,n=w();return _(),63!==y(a)?n:(a++,(t=b())||r("Expected expression",a),_(),58===y(a)?(a++,(e=b())||r("Expected expression",a),{type:"ConditionalExpression",test:n,consequent:t,alternate:e}):void r("Expected :",a))},x=function(){_();for(var e=t.substr(a,u),n=e.length;n>0;){if(o.hasOwnProperty(e)&&(!p(y(a))||a+e.length2&&n<=i[i.length-2].prec;)u=i.pop(),e=i.pop().value,s=i.pop(),t=h(e,s,u),i.push(t);(t=E())||r("Expected expression after "+e,a),i.push(o,t)}for(t=i[c=i.length-1];c>1;)t=h(i[c-1].value,i[c-2],t),c-=2;return t},E=function(){var e,n,r;if(_(),e=y(a),f(e)||46===e)return O();if(39===e||34===e)return S();if(91===e)return I();for(r=(n=t.substr(a,s)).length;r>0;){if(i.hasOwnProperty(n)&&(!p(y(a))||a+n.length(r=1))return r;for(;no?n=i:r=i,i=.5*(r-n)+n}return i},r.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var i=o;function o(t,e){this.x=t,this.y=e}function a(t,e){if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(var n=0;n0;)e[n]=arguments[n+1];for(var r=0,i=e;r>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function A(t){return!!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function g(t,e){t.forEach((function(t){e[t]&&(e[t]=e[t].bind(e))}))}function m(t,e){return-1!==t.indexOf(e,t.length-e.length)}function y(t,e,n){var r={};for(var i in t)r[i]=e.call(n||this,t[i],i,t);return r}function v(t,e,n){var r={};for(var i in t)e.call(n||this,t[i],i,t)&&(r[i]=t[i]);return r}function _(t){return Array.isArray(t)?t.map(_):"object"==typeof t&&t?y(t,_):t}var b={};function x(t){b[t]||("undefined"!=typeof console&&console.warn(t),b[t]=!0)}function w(t,e,n){return(n.y-t.y)*(e.x-t.x)>(e.y-t.y)*(n.x-t.x)}function E(t){for(var e=0,n=0,r=t.length,i=r-1,o=void 0,a=void 0;n@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,(function(t,n,r,i){var o=r||i;return e[n]=!o||o.toLowerCase(),""})),e["max-age"]){var n=parseInt(e["max-age"],10);isNaN(n)?delete e["max-age"]:e["max-age"]=n}return e}var T=null;function C(t){if(null==T){var e=t.navigator?t.navigator.userAgent:null;T=!!t.safari||!(!e||!(/\b(iPad|iPhone|iPod)\b/.test(e)||e.match("Safari")&&!e.match("Chrome")))}return T}function P(t){try{var e=self[t];return e.setItem("_mapbox_test_",1),e.removeItem("_mapbox_test_"),!0}catch(t){return!1}}var M,I,B,R,k=self.performance&&self.performance.now?self.performance.now.bind(self.performance):Date.now.bind(Date),L=self.requestAnimationFrame||self.mozRequestAnimationFrame||self.webkitRequestAnimationFrame||self.msRequestAnimationFrame,D=self.cancelAnimationFrame||self.mozCancelAnimationFrame||self.webkitCancelAnimationFrame||self.msCancelAnimationFrame,j={now:k,frame:function(t){var e=L(t);return{cancel:function(){return D(e)}}},getImageData:function(t,e){void 0===e&&(e=0);var n=self.document.createElement("canvas"),r=n.getContext("2d");if(!r)throw new Error("failed to create canvas 2d context");return n.width=t.width,n.height=t.height,r.drawImage(t,0,0,t.width,t.height),r.getImageData(-e,-e,t.width+2*e,t.height+2*e)},resolveURL:function(t){return M||(M=self.document.createElement("a")),M.href=t,M.href},hardwareConcurrency:self.navigator.hardwareConcurrency||4,get devicePixelRatio(){return self.devicePixelRatio},get prefersReducedMotion(){return!!self.matchMedia&&(null==I&&(I=self.matchMedia("(prefers-reduced-motion: reduce)")),I.matches)}},F={API_URL:"https://api.mapbox.com",get EVENTS_URL(){return this.API_URL?0===this.API_URL.indexOf("https://api.mapbox.cn")?"https://events.mapbox.cn/events/v2":0===this.API_URL.indexOf("https://api.mapbox.com")?"https://events.mapbox.com/events/v2":null:null},FEEDBACK_URL:"https://apps.mapbox.com/feedback",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},z={supported:!1,testSupport:function(t){!U&&R&&(N?G(t):B=t)}},U=!1,N=!1;function G(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,R),t.isContextLost())return;z.supported=!0}catch(t){}t.deleteTexture(e),U=!0}self.document&&((R=self.document.createElement("img")).onload=function(){B&&G(B),B=null,N=!0},R.onerror=function(){U=!0,B=null},R.src="data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=");var V="01",H=function(t,e){this._transformRequestFn=t,this._customAccessToken=e,this._createSkuToken()};function W(t){return 0===t.indexOf("mapbox:")}H.prototype._createSkuToken=function(){var t=function(){for(var t="",e=0;e<10;e++)t+="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[Math.floor(62*Math.random())];return{token:["1",V,t].join(""),tokenExpiresAt:Date.now()+432e5}}();this._skuToken=t.token,this._skuTokenExpiresAt=t.tokenExpiresAt},H.prototype._isSkuTokenExpired=function(){return Date.now()>this._skuTokenExpiresAt},H.prototype.transformRequest=function(t,e){return this._transformRequestFn&&this._transformRequestFn(t,e)||{url:t}},H.prototype.normalizeStyleURL=function(t,e){if(!W(t))return t;var n=Z(t);return n.path="/styles/v1"+n.path,this._makeAPIURL(n,this._customAccessToken||e)},H.prototype.normalizeGlyphsURL=function(t,e){if(!W(t))return t;var n=Z(t);return n.path="/fonts/v1"+n.path,this._makeAPIURL(n,this._customAccessToken||e)},H.prototype.normalizeSourceURL=function(t,e){if(!W(t))return t;var n=Z(t);return n.path="/v4/"+n.authority+".json",n.params.push("secure"),this._makeAPIURL(n,this._customAccessToken||e)},H.prototype.normalizeSpriteURL=function(t,e,n,r){var i=Z(t);return W(t)?(i.path="/styles/v1"+i.path+"/sprite"+e+n,this._makeAPIURL(i,this._customAccessToken||r)):(i.path+=""+e+n,Q(i))},H.prototype.normalizeTileURL=function(t,e,n){if(this._isSkuTokenExpired()&&this._createSkuToken(),!e||!W(e))return t;var r=Z(t),i=j.devicePixelRatio>=2||512===n?"@2x":"",o=z.supported?".webp":"$1";return r.path=r.path.replace(/(\.(png|jpg)\d*)(?=$)/,""+i+o),r.path=r.path.replace(/^.+\/v4\//,"/"),r.path="/v4"+r.path,F.REQUIRE_ACCESS_TOKEN&&(F.ACCESS_TOKEN||this._customAccessToken)&&this._skuToken&&r.params.push("sku="+this._skuToken),this._makeAPIURL(r,this._customAccessToken)},H.prototype.canonicalizeTileURL=function(t){var e=Z(t);if(!e.path.match(/(^\/v4\/)/)||!e.path.match(/\.[\w]+$/))return t;var n="mapbox://tiles/";n+=e.path.replace("/v4/","");var r=e.params.filter((function(t){return!t.match(/^access_token=/)}));return r.length&&(n+="?"+r.join("&")),n},H.prototype.canonicalizeTileset=function(t,e){if(!W(e))return t.tiles||[];for(var n=[],r=0,i=t.tiles;r=1&&self.localStorage.setItem(e,JSON.stringify(this.eventData))}catch(t){x("Unable to write to LocalStorage")}},Y.prototype.processRequests=function(t){},Y.prototype.postEvent=function(t,e,n,r){var i=this;if(F.EVENTS_URL){var o=Z(F.EVENTS_URL);o.params.push("access_token="+(r||F.ACCESS_TOKEN||""));var a={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:"mapbox-gl-js",sdkVersion:"1.6.1",skuId:V,userId:this.anonId},s=e?h(a,e):a,u={url:Q(o),headers:{"Content-Type":"text/plain"},body:JSON.stringify([s])};this.pendingRequest=_t(u,(function(t){i.pendingRequest=null,n(t),i.saveEventData(),i.processRequests(r)}))}},Y.prototype.queueRequest=function(t,e){this.queue.push(t),this.processRequests(e)};var $,tt,et=function(t){function e(){t.call(this,"map.load"),this.success={},this.skuToken=""}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postMapLoadEvent=function(t,e,n,r){this.skuToken=n,(F.EVENTS_URL&&r||F.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return W(t)||X(t)})))&&this.queueRequest({id:e,timestamp:Date.now()},r)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){var n=this.queue.shift(),r=n.id,i=n.timestamp;r&&this.success[r]||(this.anonId||this.fetchEventData(),A(this.anonId)||(this.anonId=d()),this.postEvent(i,{skuToken:this.skuToken},(function(t){t||r&&(e.success[r]=!0)}),t))}},e}(Y),nt=new(function(t){function e(e){t.call(this,"appUserTurnstile"),this._customAccessToken=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postTurnstileEvent=function(t,e){F.EVENTS_URL&&F.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return W(t)||X(t)}))&&this.queueRequest(Date.now(),e)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){this.anonId&&this.eventData.lastSuccess&&this.eventData.tokenU||this.fetchEventData();var n=K(F.ACCESS_TOKEN),r=n?n.u:F.ACCESS_TOKEN,i=r!==this.eventData.tokenU;A(this.anonId)||(this.anonId=d(),i=!0);var o=this.queue.shift();if(this.eventData.lastSuccess){var a=new Date(this.eventData.lastSuccess),s=new Date(o),u=(o-this.eventData.lastSuccess)/864e5;i=i||u>=1||u<-1||a.getDate()!==s.getDate()}else i=!0;if(!i)return this.processRequests();this.postEvent(o,{"enabled.telemetry":!1},(function(t){t||(e.eventData.lastSuccess=o,e.eventData.tokenU=r)}),t)}},e}(Y)),rt=nt.postTurnstileEvent.bind(nt),it=new et,ot=it.postMapLoadEvent.bind(it),at="mapbox-tiles",st=500,ut=50;function ct(){self.caches&&!$&&($=self.caches.open(at))}function lt(t){var e=t.indexOf("?");return e<0?t:t.slice(0,e)}var ht=1/0,ft={Unknown:"Unknown",Style:"Style",Source:"Source",Tile:"Tile",Glyphs:"Glyphs",SpriteImage:"SpriteImage",SpriteJSON:"SpriteJSON",Image:"Image"};"function"==typeof Object.freeze&&Object.freeze(ft);var pt=function(t){function e(e,n,r){401===n&&X(r)&&(e+=": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes"),t.call(this,e),this.status=n,this.url=r,this.name=this.constructor.name,this.message=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toString=function(){return this.name+": "+this.message+" ("+this.status+"): "+this.url},e}(Error),dt=O()?function(){return self.worker&&self.worker.referrer}:function(){return("blob:"===self.location.protocol?self.parent:self).location.href};function At(t,e){var n,r=new self.AbortController,i=new self.Request(t.url,{method:t.method||"GET",body:t.body,credentials:t.credentials,headers:t.headers,referrer:dt(),signal:r.signal}),o=!1,a=!1,s=(n=i.url).indexOf("sku=")>0&&X(n);"json"===t.type&&i.headers.set("Accept","application/json");var u=function(n,r,o){if(!a){if(n&&"SecurityError"!==n.message&&x(n),r&&o)return c(r);var u=Date.now();self.fetch(i).then((function(n){if(n.ok){var r=s?n.clone():null;return c(n,r,u)}return e(new pt(n.statusText,n.status,t.url))})).catch((function(t){20!==t.code&&e(new Error(t.message))}))}},c=function(n,r,s){("arrayBuffer"===t.type?n.arrayBuffer():"json"===t.type?n.json():n.text()).then((function(t){a||(r&&s&&function(t,e,n){if(ct(),$){var r={status:e.status,statusText:e.statusText,headers:new self.Headers};e.headers.forEach((function(t,e){return r.headers.set(e,t)}));var i=S(e.headers.get("Cache-Control")||"");i["no-store"]||(i["max-age"]&&r.headers.set("Expires",new Date(n+1e3*i["max-age"]).toUTCString()),new Date(r.headers.get("Expires")).getTime()-n<42e4||function(t,e){if(void 0===tt)try{new Response(new ReadableStream),tt=!0}catch(t){tt=!1}tt?e(t.body):t.blob().then(e)}(e,(function(e){var n=new self.Response(e,r);ct(),$&&$.then((function(e){return e.put(lt(t.url),n)})).catch((function(t){return x(t.message)}))})))}}(i,r,s),o=!0,e(null,t,n.headers.get("Cache-Control"),n.headers.get("Expires")))})).catch((function(t){a||e(new Error(t.message))}))};return s?function(t,e){if(ct(),!$)return e(null);var n=lt(t.url);$.then((function(t){t.match(n).then((function(r){var i=function(t){if(!t)return!1;var e=new Date(t.headers.get("Expires")||0),n=S(t.headers.get("Cache-Control")||"");return e>Date.now()&&!n["no-cache"]}(r);t.delete(n),i&&t.put(n,r.clone()),e(null,r,i)})).catch(e)})).catch(e)}(i,u):u(null,null),{cancel:function(){a=!0,o||r.abort()}}}var gt,mt,yt=function(t,e){if(n=t.url,!(/^file:/.test(n)||/^file:/.test(dt())&&!/^\w+:/.test(n))){if(self.fetch&&self.Request&&self.AbortController&&self.Request.prototype.hasOwnProperty("signal"))return At(t,e);if(O()&&self.worker&&self.worker.actor)return self.worker.actor.send("getResource",t,e,void 0,!0)}var n;return function(t,e){var n=new self.XMLHttpRequest;for(var r in n.open(t.method||"GET",t.url,!0),"arrayBuffer"===t.type&&(n.responseType="arraybuffer"),t.headers)n.setRequestHeader(r,t.headers[r]);return"json"===t.type&&(n.responseType="text",n.setRequestHeader("Accept","application/json")),n.withCredentials="include"===t.credentials,n.onerror=function(){e(new Error(n.statusText))},n.onload=function(){if((n.status>=200&&n.status<300||0===n.status)&&null!==n.response){var r=n.response;if("json"===t.type)try{r=JSON.parse(n.response)}catch(t){return e(t)}e(null,r,n.getResponseHeader("Cache-Control"),n.getResponseHeader("Expires"))}else e(new pt(n.statusText,n.status,t.url))},n.send(t.body),{cancel:function(){return n.abort()}}}(t,e)},vt=function(t,e){return yt(h(t,{type:"arrayBuffer"}),e)},_t=function(t,e){return yt(h(t,{method:"POST"}),e)};gt=[],mt=0;var bt=function(t,e){if(z.supported&&(t.headers||(t.headers={}),t.headers.accept="image/webp,*/*"),mt>=F.MAX_PARALLEL_IMAGE_REQUESTS){var n={requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled=!0}};return gt.push(n),n}mt++;var r=!1,i=function(){if(!r)for(r=!0,mt--;gt.length&&mt0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},St.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var Tt={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"resolvedImage",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:24,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},in:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},image:{group:"Types"},"number-format":{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Zoom"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},accumulated:{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!0,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"line-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-dasharray"},{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"cross-faded":{type:"property-type"},"cross-faded-data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}}},Ct=function(t,e,n,r){this.message=(t?t+": ":"")+n,r&&(this.identifier=r),null!=e&&e.__line__&&(this.line=e.__line__)};function Pt(t){var e=t.key,n=t.value;return n?[new Ct(e,n,"constants have been deprecated as of v8")]:[]}function Mt(t){for(var e=[],n=arguments.length-1;n-- >0;)e[n]=arguments[n+1];for(var r=0,i=e;r":"value"===t.itemType.kind?"array":"array<"+e+">"}return t.kind}var Xt=[Lt,Dt,jt,Ft,zt,Vt,Ut,Wt(Nt),Ht];function Jt(t,e){if("error"===e.kind)return null;if("array"===t.kind){if("array"===e.kind&&(0===e.N&&"value"===e.itemType.kind||!Jt(t.itemType,e.itemType))&&("number"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if("value"===t.kind)for(var n=0,r=Xt;n255?255:t}function i(t){return t<0?0:t>1?1:t}function o(t){return"%"===t[t.length-1]?r(parseFloat(t)/100*255):r(parseInt(t))}function a(t){return"%"===t[t.length-1]?i(parseFloat(t)/100):i(parseFloat(t))}function s(t,e,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?t+(e-t)*n*6:2*n<1?e:3*n<2?t+(e-t)*(2/3-n)*6:t}try{e.parseCSSColor=function(t){var e,i=t.replace(/ /g,"").toLowerCase();if(i in n)return n[i].slice();if("#"===i[0])return 4===i.length?(e=parseInt(i.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===i.length&&(e=parseInt(i.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var u=i.indexOf("("),c=i.indexOf(")");if(-1!==u&&c+1===i.length){var l=i.substr(0,u),h=i.substr(u+1,c-(u+1)).split(","),f=1;switch(l){case"rgba":if(4!==h.length)return null;f=a(h.pop());case"rgb":return 3!==h.length?null:[o(h[0]),o(h[1]),o(h[2]),f];case"hsla":if(4!==h.length)return null;f=a(h.pop());case"hsl":if(3!==h.length)return null;var p=(parseFloat(h[0])%360+360)%360/360,d=a(h[1]),A=a(h[2]),g=A<=.5?A*(d+1):A+d-A*d,m=2*A-g;return[r(255*s(m,g,p+1/3)),r(255*s(m,g,p)),r(255*s(m,g,p-1/3)),f];default:return null}}return null}}catch(t){}})).parseCSSColor,Qt=function(t,e,n,r){void 0===r&&(r=1),this.r=t,this.g=e,this.b=n,this.a=r};Qt.parse=function(t){if(t){if(t instanceof Qt)return t;if("string"==typeof t){var e=Zt(t);if(e)return new Qt(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},Qt.prototype.toString=function(){var t=this.toArray(),e=t[0],n=t[1],r=t[2],i=t[3];return"rgba("+Math.round(e)+","+Math.round(n)+","+Math.round(r)+","+i+")"},Qt.prototype.toArray=function(){var t=this.r,e=this.g,n=this.b,r=this.a;return 0===r?[0,0,0,0]:[255*t/r,255*e/r,255*n/r,r]},Qt.black=new Qt(0,0,0,1),Qt.white=new Qt(1,1,1,1),Qt.transparent=new Qt(0,0,0,0),Qt.red=new Qt(1,0,0,1);var Kt=function(t,e,n){this.sensitivity=t?e?"variant":"case":e?"accent":"base",this.locale=n,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})};Kt.prototype.compare=function(t,e){return this.collator.compare(t,e)},Kt.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var Yt=function(t,e,n,r,i){this.text=t,this.image=e,this.scale=n,this.fontStack=r,this.textColor=i},$t=function(t){this.sections=t};$t.fromString=function(t){return new $t([new Yt(t,null,null,null,null)])},$t.prototype.isEmpty=function(){return 0===this.sections.length||!this.sections.some((function(t){return 0!==t.text.length||t.image&&0!==t.image.name.length}))},$t.factory=function(t){return t instanceof $t?t:$t.fromString(t)},$t.prototype.toString=function(){return 0===this.sections.length?"":this.sections.map((function(t){return t.text})).join("")},$t.prototype.serialize=function(){for(var t=["format"],e=0,n=this.sections;e=0&&t<=255&&"number"==typeof e&&e>=0&&e<=255&&"number"==typeof n&&n>=0&&n<=255?void 0===r||"number"==typeof r&&r>=0&&r<=1?null:"Invalid rgba value ["+[t,e,n,r].join(", ")+"]: 'a' must be between 0 and 1.":"Invalid rgba value ["+("number"==typeof r?[t,e,n,r]:[t,e,n]).join(", ")+"]: 'r', 'g', and 'b' must be between 0 and 255."}function ne(t){if(null===t)return Lt;if("string"==typeof t)return jt;if("boolean"==typeof t)return Ft;if("number"==typeof t)return Dt;if(t instanceof Qt)return zt;if(t instanceof Kt)return Gt;if(t instanceof $t)return Vt;if(t instanceof te)return Ht;if(Array.isArray(t)){for(var e,n=t.length,r=0,i=t;r2){var s=t[1];if("string"!=typeof s||!(s in ae)||"object"===s)return e.error('The item type argument of "array" must be one of string, number, boolean',1);o=ae[s],r++}else o=Nt;if(t.length>3){if(null!==t[2]&&("number"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to "array" must be a positive integer literal',2);a=t[2],r++}n=Wt(o,a)}else n=ae[i];for(var u=[];r1)&&e.push(r)}}return e.concat(this.args.map((function(t){return t.serialize()})))};var ue=function(t){this.type=Vt,this.sections=t};ue.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");var n=t[1];if(!Array.isArray(n)&&"object"==typeof n)return e.error("First argument must be an image or text section.");for(var r=[],i=!1,o=1;o<=t.length-1;++o){var a=t[o];if(i&&"object"==typeof a&&!Array.isArray(a)){i=!1;var s=null;if(a["font-scale"]&&!(s=e.parse(a["font-scale"],1,Dt)))return null;var u=null;if(a["text-font"]&&!(u=e.parse(a["text-font"],1,Wt(jt))))return null;var c=null;if(a["text-color"]&&!(c=e.parse(a["text-color"],1,zt)))return null;var l=r[r.length-1];l.scale=s,l.font=u,l.textColor=c}else{var h=e.parse(t[o],1,Nt);if(!h)return null;var f=h.type.kind;if("string"!==f&&"value"!==f&&"null"!==f&&"resolvedImage"!==f)return e.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");i=!0,r.push({content:h,scale:null,font:null,textColor:null})}}return new ue(r)},ue.prototype.evaluate=function(t){return new $t(this.sections.map((function(e){var n=e.content.evaluate(t);return ne(n)===Ht?new Yt("",n,null,null,null):new Yt(re(n),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(","):null,e.textColor?e.textColor.evaluate(t):null)})))},ue.prototype.eachChild=function(t){for(var e=0,n=this.sections;e-1&&(n=!0),new te({name:e,available:n})},ce.prototype.eachChild=function(t){t(this.input)},ce.prototype.possibleOutputs=function(){return[void 0]},ce.prototype.serialize=function(){return["image",this.input.serialize()]};var le={"to-boolean":Ft,"to-color":zt,"to-number":Dt,"to-string":jt},he=function(t,e){this.type=t,this.args=e};he.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");var n=t[0];if(("to-boolean"===n||"to-string"===n)&&2!==t.length)return e.error("Expected one argument.");for(var r=le[n],i=[],o=1;o4?"Invalid rbga value "+JSON.stringify(e)+": expected an array containing either three or four numeric values.":ee(e[0],e[1],e[2],e[3])))return new Qt(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new oe(n||"Could not parse color from value '"+("string"==typeof e?e:String(JSON.stringify(e)))+"'")}if("number"===this.type.kind){for(var a=null,s=0,u=this.args;s=0)return!1;var n=!0;return t.eachChild((function(t){n&&!ye(t,e)&&(n=!1)})),n}Ae.parse=function(t,e){if(2!==t.length)return e.error("Expected one argument.");var n=t[1];if("object"!=typeof n||Array.isArray(n))return e.error("Collator options argument must be an object.");var r=e.parse(void 0!==n["case-sensitive"]&&n["case-sensitive"],1,Ft);if(!r)return null;var i=e.parse(void 0!==n["diacritic-sensitive"]&&n["diacritic-sensitive"],1,Ft);if(!i)return null;var o=null;return n.locale&&!(o=e.parse(n.locale,1,jt))?null:new Ae(r,i,o)},Ae.prototype.evaluate=function(t){return new Kt(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},Ae.prototype.eachChild=function(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale&&t(this.locale)},Ae.prototype.possibleOutputs=function(){return[void 0]},Ae.prototype.serialize=function(){var t={};return t["case-sensitive"]=this.caseSensitive.serialize(),t["diacritic-sensitive"]=this.diacriticSensitive.serialize(),this.locale&&(t.locale=this.locale.serialize()),["collator",t]};var ve=function(t,e){this.type=e.type,this.name=t,this.boundExpression=e};ve.parse=function(t,e){if(2!==t.length||"string"!=typeof t[1])return e.error("'var' expression requires exactly one string literal argument.");var n=t[1];return e.scope.has(n)?new ve(n,e.scope.get(n)):e.error('Unknown variable "'+n+'". Make sure "'+n+'" has been bound in an enclosing "let" expression before using it.',1)},ve.prototype.evaluate=function(t){return this.boundExpression.evaluate(t)},ve.prototype.eachChild=function(){},ve.prototype.possibleOutputs=function(){return[void 0]},ve.prototype.serialize=function(){return["var",this.name]};var _e=function(t,e,n,r,i){void 0===e&&(e=[]),void 0===r&&(r=new kt),void 0===i&&(i=[]),this.registry=t,this.path=e,this.key=e.map((function(t){return"["+t+"]"})).join(""),this.scope=r,this.errors=i,this.expectedType=n};function be(t,e){for(var n,r,i=t.length-1,o=0,a=i,s=0;o<=a;)if(n=t[s=Math.floor((o+a)/2)],r=t[s+1],n<=e){if(s===i||ee))throw new oe("Input is not a number.");a=s-1}return 0}_e.prototype.parse=function(t,e,n,r,i){return void 0===i&&(i={}),e?this.concat(e,n,r)._parse(t,i):this._parse(t,i)},_e.prototype._parse=function(t,e){function n(t,e,n){return"assert"===n?new se(e,[t]):"coerce"===n?new he(e,[t]):t}if(null!==t&&"string"!=typeof t&&"boolean"!=typeof t&&"number"!=typeof t||(t=["literal",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');var r=t[0];if("string"!=typeof r)return this.error("Expression name must be a string, but found "+typeof r+' instead. If you wanted a literal array, use ["literal", [...]].',0),null;var i=this.registry[r];if(i){var o=i.parse(t,this);if(!o)return null;if(this.expectedType){var a=this.expectedType,s=o.type;if("string"!==a.kind&&"number"!==a.kind&&"boolean"!==a.kind&&"object"!==a.kind&&"array"!==a.kind||"value"!==s.kind)if("color"!==a.kind&&"formatted"!==a.kind&&"resolvedImage"!==a.kind||"value"!==s.kind&&"string"!==s.kind){if(this.checkSubtype(a,s))return null}else o=n(o,a,e.typeAnnotation||"coerce");else o=n(o,a,e.typeAnnotation||"assert")}if(!(o instanceof ie)&&"resolvedImage"!==o.type.kind&&function t(e){if(e instanceof ve)return t(e.boundExpression);if(e instanceof de&&"error"===e.name)return!1;if(e instanceof Ae)return!1;var n=e instanceof he||e instanceof se,r=!0;return e.eachChild((function(e){r=n?r&&t(e):r&&e instanceof ie})),!!r&&ge(e)&&ye(e,["zoom","heatmap-density","line-progress","accumulated","is-supported-script"])}(o)){var u=new pe;try{o=new ie(o.type,o.evaluate(u))}catch(t){return this.error(t.message),null}}return o}return this.error('Unknown expression "'+r+'". If you wanted a literal array, use ["literal", [...]].',0)}return void 0===t?this.error("'undefined' value invalid. Use null instead."):"object"==typeof t?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error("Expected an array, but found "+typeof t+" instead.")},_e.prototype.concat=function(t,e,n){var r="number"==typeof t?this.path.concat(t):this.path,i=n?this.scope.concat(n):this.scope;return new _e(this.registry,r,e||null,i,this.errors)},_e.prototype.error=function(t){for(var e=[],n=arguments.length-1;n-- >0;)e[n]=arguments[n+1];var r=""+this.key+e.map((function(t){return"["+t+"]"})).join("");this.errors.push(new Rt(r,t))},_e.prototype.checkSubtype=function(t,e){var n=Jt(t,e);return n&&this.error(n),n};var xe=function(t,e,n){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var r=0,i=n;r=a)return e.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',u);var l=e.parse(s,c,i);if(!l)return null;i=i||l.type,r.push([a,l])}return new xe(i,n,r)},xe.prototype.evaluate=function(t){var e=this.labels,n=this.outputs;if(1===e.length)return n[0].evaluate(t);var r=this.input.evaluate(t);if(r<=e[0])return n[0].evaluate(t);var i=e.length;return r>=e[i-1]?n[i-1].evaluate(t):n[be(e,r)].evaluate(t)},xe.prototype.eachChild=function(t){t(this.input);for(var e=0,n=this.outputs;e0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var Ee=Object.freeze({__proto__:null,number:we,color:function(t,e,n){return new Qt(we(t.r,e.r,n),we(t.g,e.g,n),we(t.b,e.b,n),we(t.a,e.a,n))},array:function(t,e,n){return t.map((function(t,r){return we(t,e[r],n)}))}}),Oe=6/29,Se=3*Oe*Oe,Te=Math.PI/180,Ce=180/Math.PI;function Pe(t){return t>.008856451679035631?Math.pow(t,1/3):t/Se+4/29}function Me(t){return t>Oe?t*t*t:Se*(t-4/29)}function Ie(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Be(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Re(t){var e=Be(t.r),n=Be(t.g),r=Be(t.b),i=Pe((.4124564*e+.3575761*n+.1804375*r)/.95047),o=Pe((.2126729*e+.7151522*n+.072175*r)/1);return{l:116*o-16,a:500*(i-o),b:200*(o-Pe((.0193339*e+.119192*n+.9503041*r)/1.08883)),alpha:t.a}}function ke(t){var e=(t.l+16)/116,n=isNaN(t.a)?e:e+t.a/500,r=isNaN(t.b)?e:e-t.b/200;return e=1*Me(e),n=.95047*Me(n),r=1.08883*Me(r),new Qt(Ie(3.2404542*n-1.5371385*e-.4985314*r),Ie(-.969266*n+1.8760108*e+.041556*r),Ie(.0556434*n-.2040259*e+1.0572252*r),t.alpha)}function Le(t,e,n){var r=e-t;return t+n*(r>180||r<-180?r-360*Math.round(r/360):r)}var De={forward:Re,reverse:ke,interpolate:function(t,e,n){return{l:we(t.l,e.l,n),a:we(t.a,e.a,n),b:we(t.b,e.b,n),alpha:we(t.alpha,e.alpha,n)}}},je={forward:function(t){var e=Re(t),n=e.l,r=e.a,i=e.b,o=Math.atan2(i,r)*Ce;return{h:o<0?o+360:o,c:Math.sqrt(r*r+i*i),l:n,alpha:t.a}},reverse:function(t){var e=t.h*Te,n=t.c;return ke({l:t.l,a:Math.cos(e)*n,b:Math.sin(e)*n,alpha:t.alpha})},interpolate:function(t,e,n){return{h:Le(t.h,e.h,n),c:we(t.c,e.c,n),l:we(t.l,e.l,n),alpha:we(t.alpha,e.alpha,n)}}},Fe=Object.freeze({__proto__:null,lab:De,hcl:je}),ze=function(t,e,n,r,i){this.type=t,this.operator=e,this.interpolation=n,this.input=r,this.labels=[],this.outputs=[];for(var o=0,a=i;o1})))return e.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);r={name:"cubic-bezier",controlPoints:s}}if(t.length-1<4)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");if(!(i=e.parse(i,2,Dt)))return null;var u=[],c=null;"interpolate-hcl"===n||"interpolate-lab"===n?c=zt:e.expectedType&&"value"!==e.expectedType.kind&&(c=e.expectedType);for(var l=0;l=h)return e.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',p);var A=e.parse(f,d,c);if(!A)return null;c=c||A.type,u.push([h,A])}return"number"===c.kind||"color"===c.kind||"array"===c.kind&&"number"===c.itemType.kind&&"number"==typeof c.N?new ze(c,n,r,i,u):e.error("Type "+qt(c)+" is not interpolatable.")},ze.prototype.evaluate=function(t){var e=this.labels,n=this.outputs;if(1===e.length)return n[0].evaluate(t);var r=this.input.evaluate(t);if(r<=e[0])return n[0].evaluate(t);var i=e.length;if(r>=e[i-1])return n[i-1].evaluate(t);var o=be(e,r),a=e[o],s=e[o+1],u=ze.interpolationFactor(this.interpolation,r,a,s),c=n[o].evaluate(t),l=n[o+1].evaluate(t);return"interpolate"===this.operator?Ee[this.type.kind.toLowerCase()](c,l,u):"interpolate-hcl"===this.operator?je.reverse(je.interpolate(je.forward(c),je.forward(l),u)):De.reverse(De.interpolate(De.forward(c),De.forward(l),u))},ze.prototype.eachChild=function(t){t(this.input);for(var e=0,n=this.outputs;e=n.length)throw new oe("Array index out of bounds: "+e+" > "+(n.length-1)+".");if(e!==Math.floor(e))throw new oe("Array index must be an integer, but found "+e+" instead.");return n[e]},Ve.prototype.eachChild=function(t){t(this.index),t(this.input)},Ve.prototype.possibleOutputs=function(){return[void 0]},Ve.prototype.serialize=function(){return["at",this.index.serialize(),this.input.serialize()]};var He=function(t,e){this.type=Ft,this.needle=t,this.haystack=e};He.parse=function(t,e){if(3!==t.length)return e.error("Expected 2 arguments, but found "+(t.length-1)+" instead.");var n,r=e.parse(t[1],1,Nt),i=e.parse(t[2],2,Nt);return r&&i?"boolean"!==(n=r.type).kind&&"string"!==n.kind&&"number"!==n.kind&&"null"!==n.kind&&"value"!==n.kind?e.error("Expected first argument to be of type boolean, string, number or null, but found "+qt(r.type)+" instead"):new He(r,i):null},He.prototype.evaluate=function(t){var e=this.needle.evaluate(t),n=this.haystack.evaluate(t);if(!e||!n)return!1;if(!function(t){return"boolean"==typeof t||"string"==typeof t||"number"==typeof t}(e))throw new oe("Expected first argument to be of type boolean, string or number, but found "+qt(ne(e))+" instead.");if(!function(t){return Array.isArray(t)||"string"==typeof t}(n))throw new oe("Expected second argument to be of type array or string, but found "+qt(ne(n))+" instead.");return n.indexOf(e)>=0},He.prototype.eachChild=function(t){t(this.needle),t(this.haystack)},He.prototype.possibleOutputs=function(){return[!0,!1]},He.prototype.serialize=function(){return["in",this.needle.serialize(),this.haystack.serialize()]};var We=function(t,e,n,r,i,o){this.inputType=t,this.type=e,this.input=n,this.cases=r,this.outputs=i,this.otherwise=o};We.parse=function(t,e){if(t.length<5)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if(t.length%2!=1)return e.error("Expected an even number of arguments.");var n,r;e.expectedType&&"value"!==e.expectedType.kind&&(r=e.expectedType);for(var i={},o=[],a=2;aNumber.MAX_SAFE_INTEGER)return c.error("Branch labels must be integers no larger than "+Number.MAX_SAFE_INTEGER+".");if("number"==typeof f&&Math.floor(f)!==f)return c.error("Numeric branch labels must be integer values.");if(n){if(c.checkSubtype(n,ne(f)))return null}else n=ne(f);if(void 0!==i[String(f)])return c.error("Branch labels must be unique.");i[String(f)]=o.length}var p=e.parse(u,a,r);if(!p)return null;r=r||p.type,o.push(p)}var d=e.parse(t[1],1,Nt);if(!d)return null;var A=e.parse(t[t.length-1],t.length-1,r);return A?"value"!==d.type.kind&&e.concat(1).checkSubtype(n,d.type)?null:new We(n,r,d,i,o,A):null},We.prototype.evaluate=function(t){var e=this.input.evaluate(t);return(ne(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},We.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)},We.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.outputs.map((function(t){return t.possibleOutputs()}))).concat(this.otherwise.possibleOutputs())},We.prototype.serialize=function(){for(var t=this,e=["match",this.input.serialize()],n=[],r={},i=0,o=Object.keys(this.cases).sort();i",(function(t,e,n){return e>n}),(function(t,e,n,r){return r.compare(e,n)>0})),tn=Ze("<=",(function(t,e,n){return e<=n}),(function(t,e,n,r){return r.compare(e,n)<=0})),en=Ze(">=",(function(t,e,n){return e>=n}),(function(t,e,n,r){return r.compare(e,n)>=0})),nn=function(t,e,n,r,i){this.type=jt,this.number=t,this.locale=e,this.currency=n,this.minFractionDigits=r,this.maxFractionDigits=i};nn.parse=function(t,e){if(3!==t.length)return e.error("Expected two arguments.");var n=e.parse(t[1],1,Dt);if(!n)return null;var r=t[2];if("object"!=typeof r||Array.isArray(r))return e.error("NumberFormat options argument must be an object.");var i=null;if(r.locale&&!(i=e.parse(r.locale,1,jt)))return null;var o=null;if(r.currency&&!(o=e.parse(r.currency,1,jt)))return null;var a=null;if(r["min-fraction-digits"]&&!(a=e.parse(r["min-fraction-digits"],1,Dt)))return null;var s=null;return r["max-fraction-digits"]&&!(s=e.parse(r["max-fraction-digits"],1,Dt))?null:new nn(n,i,o,a,s)},nn.prototype.evaluate=function(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?"currency":"decimal",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},nn.prototype.eachChild=function(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits)},nn.prototype.possibleOutputs=function(){return[void 0]},nn.prototype.serialize=function(){var t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.minFractionDigits&&(t["min-fraction-digits"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t["max-fraction-digits"]=this.maxFractionDigits.serialize()),["number-format",this.number.serialize(),t]};var rn=function(t){this.type=Dt,this.input=t};rn.parse=function(t,e){if(2!==t.length)return e.error("Expected 1 argument, but found "+(t.length-1)+" instead.");var n=e.parse(t[1],1);return n?"array"!==n.type.kind&&"string"!==n.type.kind&&"value"!==n.type.kind?e.error("Expected argument of type string or array, but found "+qt(n.type)+" instead."):new rn(n):null},rn.prototype.evaluate=function(t){var e=this.input.evaluate(t);if("string"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new oe("Expected value to be of type string or array, but found "+qt(ne(e))+" instead.")},rn.prototype.eachChild=function(t){t(this.input)},rn.prototype.possibleOutputs=function(){return[void 0]},rn.prototype.serialize=function(){var t=["length"];return this.eachChild((function(e){t.push(e.serialize())})),t};var on={"==":Qe,"!=":Ke,">":$e,"<":Ye,">=":en,"<=":tn,array:se,at:Ve,boolean:se,case:qe,coalesce:Ne,collator:Ae,format:ue,image:ce,in:He,interpolate:ze,"interpolate-hcl":ze,"interpolate-lab":ze,length:rn,let:Ge,literal:ie,match:We,number:se,"number-format":nn,object:se,step:xe,string:se,"to-boolean":he,"to-color":he,"to-number":he,"to-string":he,var:ve};function an(t,e){var n=e[0],r=e[1],i=e[2],o=e[3];n=n.evaluate(t),r=r.evaluate(t),i=i.evaluate(t);var a=o?o.evaluate(t):1,s=ee(n,r,i,a);if(s)throw new oe(s);return new Qt(n/255*a,r/255*a,i/255*a,a)}function sn(t,e){return t in e}function un(t,e){var n=e[t];return void 0===n?null:n}function cn(t){return{type:t}}function ln(t){return{result:"success",value:t}}function hn(t){return{result:"error",value:t}}function fn(t){return"data-driven"===t["property-type"]||"cross-faded-data-driven"===t["property-type"]}function pn(t){return!!t.expression&&t.expression.parameters.indexOf("zoom")>-1}function dn(t){return!!t.expression&&t.expression.interpolated}function An(t){return t instanceof Number?"number":t instanceof String?"string":t instanceof Boolean?"boolean":Array.isArray(t)?"array":null===t?"null":typeof t}function gn(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function mn(t){return t}function yn(t,e,n){return void 0!==t?t:void 0!==e?e:void 0!==n?n:void 0}function vn(t,e,n,r,i){return yn(typeof n===i?r[n]:void 0,t.default,e.default)}function _n(t,e,n){if("number"!==An(n))return yn(t.default,e.default);var r=t.stops.length;if(1===r)return t.stops[0][1];if(n<=t.stops[0][0])return t.stops[0][1];if(n>=t.stops[r-1][0])return t.stops[r-1][1];var i=be(t.stops.map((function(t){return t[0]})),n);return t.stops[i][1]}function bn(t,e,n){var r=void 0!==t.base?t.base:1;if("number"!==An(n))return yn(t.default,e.default);var i=t.stops.length;if(1===i)return t.stops[0][1];if(n<=t.stops[0][0])return t.stops[0][1];if(n>=t.stops[i-1][0])return t.stops[i-1][1];var o=be(t.stops.map((function(t){return t[0]})),n),a=function(t,e,n,r){var i=r-n,o=t-n;return 0===i?0:1===e?o/i:(Math.pow(e,o)-1)/(Math.pow(e,i)-1)}(n,r,t.stops[o][0],t.stops[o+1][0]),s=t.stops[o][1],u=t.stops[o+1][1],c=Ee[e.type]||mn;if(t.colorSpace&&"rgb"!==t.colorSpace){var l=Fe[t.colorSpace];c=function(t,e){return l.reverse(l.interpolate(l.forward(t),l.forward(e),a))}}return"function"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var n=s.evaluate.apply(void 0,t),r=u.evaluate.apply(void 0,t);if(void 0!==n&&void 0!==r)return c(n,r,a)}}:c(s,u,a)}function xn(t,e,n){return"color"===e.type?n=Qt.parse(n):"formatted"===e.type?n=$t.fromString(n.toString()):"resolvedImage"===e.type?n=te.fromString(n.toString()):An(n)===e.type||"enum"===e.type&&e.values[n]||(n=void 0),yn(n,t.default,e.default)}de.register(on,{error:[{kind:"error"},[jt],function(t,e){var n=e[0];throw new oe(n.evaluate(t))}],typeof:[jt,[Nt],function(t,e){return qt(ne(e[0].evaluate(t)))}],"to-rgba":[Wt(Dt,4),[zt],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[zt,[Dt,Dt,Dt],an],rgba:[zt,[Dt,Dt,Dt,Dt],an],has:{type:Ft,overloads:[[[jt],function(t,e){return sn(e[0].evaluate(t),t.properties())}],[[jt,Ut],function(t,e){var n=e[0],r=e[1];return sn(n.evaluate(t),r.evaluate(t))}]]},get:{type:Nt,overloads:[[[jt],function(t,e){return un(e[0].evaluate(t),t.properties())}],[[jt,Ut],function(t,e){var n=e[0],r=e[1];return un(n.evaluate(t),r.evaluate(t))}]]},"feature-state":[Nt,[jt],function(t,e){return un(e[0].evaluate(t),t.featureState||{})}],properties:[Ut,[],function(t){return t.properties()}],"geometry-type":[jt,[],function(t){return t.geometryType()}],id:[Nt,[],function(t){return t.id()}],zoom:[Dt,[],function(t){return t.globals.zoom}],"heatmap-density":[Dt,[],function(t){return t.globals.heatmapDensity||0}],"line-progress":[Dt,[],function(t){return t.globals.lineProgress||0}],accumulated:[Nt,[],function(t){return void 0===t.globals.accumulated?null:t.globals.accumulated}],"+":[Dt,cn(Dt),function(t,e){for(var n=0,r=0,i=e;r":[Ft,[jt,Nt],function(t,e){var n=e[0],r=e[1],i=t.properties()[n.value],o=r.value;return typeof i==typeof o&&i>o}],"filter-id->":[Ft,[Nt],function(t,e){var n=e[0],r=t.id(),i=n.value;return typeof r==typeof i&&r>i}],"filter-<=":[Ft,[jt,Nt],function(t,e){var n=e[0],r=e[1],i=t.properties()[n.value],o=r.value;return typeof i==typeof o&&i<=o}],"filter-id-<=":[Ft,[Nt],function(t,e){var n=e[0],r=t.id(),i=n.value;return typeof r==typeof i&&r<=i}],"filter->=":[Ft,[jt,Nt],function(t,e){var n=e[0],r=e[1],i=t.properties()[n.value],o=r.value;return typeof i==typeof o&&i>=o}],"filter-id->=":[Ft,[Nt],function(t,e){var n=e[0],r=t.id(),i=n.value;return typeof r==typeof i&&r>=i}],"filter-has":[Ft,[Nt],function(t,e){return e[0].value in t.properties()}],"filter-has-id":[Ft,[],function(t){return null!==t.id()}],"filter-type-in":[Ft,[Wt(jt)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],"filter-id-in":[Ft,[Wt(Nt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],"filter-in-small":[Ft,[jt,Wt(Nt)],function(t,e){var n=e[0];return e[1].value.indexOf(t.properties()[n.value])>=0}],"filter-in-large":[Ft,[jt,Wt(Nt)],function(t,e){var n=e[0],r=e[1];return function(t,e,n,r){for(;n<=r;){var i=n+r>>1;if(e[i]===t)return!0;e[i]>t?r=i-1:n=i+1}return!1}(t.properties()[n.value],r.value,0,r.value.length-1)}],all:{type:Ft,overloads:[[[Ft,Ft],function(t,e){var n=e[0],r=e[1];return n.evaluate(t)&&r.evaluate(t)}],[cn(Ft),function(t,e){for(var n=0,r=e;n0&&"string"==typeof t[0]&&t[0]in on}function On(t,e){var n=new _e(on,[],e?function(t){var e={color:zt,string:jt,number:Dt,enum:jt,boolean:Ft,formatted:Vt,resolvedImage:Ht};return"array"===t.type?Wt(e[t.value]||Nt,t.length):e[t.type]}(e):void 0),r=n.parse(t,void 0,void 0,void 0,e&&"string"===e.type?{typeAnnotation:"coerce"}:void 0);return r?ln(new wn(r,e)):hn(n.errors)}wn.prototype.evaluateWithoutErrorHandling=function(t,e,n,r,i){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=n,this._evaluator.availableImages=r||null,this._evaluator.formattedSection=i,this.expression.evaluate(this._evaluator)},wn.prototype.evaluate=function(t,e,n,r,i){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=n||null,this._evaluator.availableImages=r||null,this._evaluator.formattedSection=i||null;try{var o=this.expression.evaluate(this._evaluator);if(null==o||"number"==typeof o&&o!=o)return this._defaultValue;if(this._enumValues&&!(o in this._enumValues))throw new oe("Expected value to be one of "+Object.keys(this._enumValues).map((function(t){return JSON.stringify(t)})).join(", ")+", but found "+JSON.stringify(o)+" instead.");return o}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,"undefined"!=typeof console&&console.warn(t.message)),this._defaultValue}};var Sn=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent="constant"!==t&&!me(e.expression)};Sn.prototype.evaluateWithoutErrorHandling=function(t,e,n,r,i){return this._styleExpression.evaluateWithoutErrorHandling(t,e,n,r,i)},Sn.prototype.evaluate=function(t,e,n,r,i){return this._styleExpression.evaluate(t,e,n,r,i)};var Tn=function(t,e,n,r){this.kind=t,this.zoomStops=n,this._styleExpression=e,this.isStateDependent="camera"!==t&&!me(e.expression),this.interpolationType=r};function Cn(t,e){if("error"===(t=On(t,e)).result)return t;var n=t.value.expression,r=ge(n);if(!r&&!fn(e))return hn([new Rt("","data expressions not supported")]);var i=ye(n,["zoom"]);if(!i&&!pn(e))return hn([new Rt("","zoom expressions not supported")]);var o=function t(e){var n=null;if(e instanceof Ge)n=t(e.result);else if(e instanceof Ne)for(var r=0,i=e.args;rr.maximum?[new Ct(e,n,n+" is greater than the maximum value "+r.maximum)]:[]}function Rn(t){var e,n,r,i=t.valueSpec,o=It(t.value.type),a={},s="categorical"!==o&&void 0===t.value.property,u=!s,c="array"===An(t.value.stops)&&"array"===An(t.value.stops[0])&&"object"===An(t.value.stops[0][0]),l=Mn({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if("identity"===o)return[new Ct(t.key,t.value,'identity function may not have a "stops" property')];var e=[],n=t.value;return e=e.concat(In({key:t.key,value:n,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:h})),"array"===An(n)&&0===n.length&&e.push(new Ct(t.key,n,"array must have at least one stop")),e},default:function(t){return tr({key:t.key,value:t.value,valueSpec:i,style:t.style,styleSpec:t.styleSpec})}}});return"identity"===o&&s&&l.push(new Ct(t.key,t.value,'missing required property "property"')),"identity"===o||t.value.stops||l.push(new Ct(t.key,t.value,'missing required property "stops"')),"exponential"===o&&t.valueSpec.expression&&!dn(t.valueSpec)&&l.push(new Ct(t.key,t.value,"exponential functions not supported")),t.styleSpec.$version>=8&&(u&&!fn(t.valueSpec)?l.push(new Ct(t.key,t.value,"property functions not supported")):s&&!pn(t.valueSpec)&&l.push(new Ct(t.key,t.value,"zoom functions not supported"))),"categorical"!==o&&!c||void 0!==t.value.property||l.push(new Ct(t.key,t.value,'"property" property is required')),l;function h(t){var e=[],o=t.value,s=t.key;if("array"!==An(o))return[new Ct(s,o,"array expected, "+An(o)+" found")];if(2!==o.length)return[new Ct(s,o,"array length 2 expected, length "+o.length+" found")];if(c){if("object"!==An(o[0]))return[new Ct(s,o,"object expected, "+An(o[0])+" found")];if(void 0===o[0].zoom)return[new Ct(s,o,"object stop key must have zoom")];if(void 0===o[0].value)return[new Ct(s,o,"object stop key must have value")];if(r&&r>It(o[0].zoom))return[new Ct(s,o[0].zoom,"stop zoom values must appear in ascending order")];It(o[0].zoom)!==r&&(r=It(o[0].zoom),n=void 0,a={}),e=e.concat(Mn({key:s+"[0]",value:o[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:Bn,value:f}}))}else e=e.concat(f({key:s+"[0]",value:o[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},o));return En(Bt(o[1]))?e.concat([new Ct(s+"[1]",o[1],"expressions are not allowed in function stops.")]):e.concat(tr({key:s+"[1]",value:o[1],valueSpec:i,style:t.style,styleSpec:t.styleSpec}))}function f(t,r){var s=An(t.value),u=It(t.value),c=null!==t.value?t.value:r;if(e){if(s!==e)return[new Ct(t.key,c,s+" stop domain type must match previous stop domain type "+e)]}else e=s;if("number"!==s&&"string"!==s&&"boolean"!==s)return[new Ct(t.key,c,"stop domain value must be a number, string, or boolean")];if("number"!==s&&"categorical"!==o){var l="number expected, "+s+" found";return fn(i)&&void 0===o&&(l+='\nIf you intended to use a categorical function, specify `"type": "categorical"`.'),[new Ct(t.key,c,l)]}return"categorical"!==o||"number"!==s||isFinite(u)&&Math.floor(u)===u?"categorical"!==o&&"number"===s&&void 0!==n&&u=2&&"$id"!==t[1]&&"$type"!==t[1];case"in":return t.length>=3&&Array.isArray(t[2]);case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case"any":case"all":for(var e=0,n=t.slice(1);ee?1:0}function Un(t){if(!t)return!0;var e,n=t[0];return t.length<=1?"any"!==n:"=="===n?Nn(t[1],t[2],"=="):"!="===n?Hn(Nn(t[1],t[2],"==")):"<"===n||">"===n||"<="===n||">="===n?Nn(t[1],t[2],n):"any"===n?(e=t.slice(1),["any"].concat(e.map(Un))):"all"===n?["all"].concat(t.slice(1).map(Un)):"none"===n?["all"].concat(t.slice(1).map(Un).map(Hn)):"in"===n?Gn(t[1],t.slice(2)):"!in"===n?Hn(Gn(t[1],t.slice(2))):"has"===n?Vn(t[1]):"!has"!==n||Hn(Vn(t[1]))}function Nn(t,e,n){switch(t){case"$type":return["filter-type-"+n,e];case"$id":return["filter-id-"+n,e];default:return["filter-"+n,t,e]}}function Gn(t,e){if(0===e.length)return!1;switch(t){case"$type":return["filter-type-in",["literal",e]];case"$id":return["filter-id-in",["literal",e]];default:return e.length>200&&!e.some((function(t){return typeof t!=typeof e[0]}))?["filter-in-large",t,["literal",e.sort(zn)]]:["filter-in-small",t,["literal",e]]}}function Vn(t){switch(t){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",t]}}function Hn(t){return["!",t]}function Wn(t){return Dn(Bt(t.value))?kn(Mt({},t,{expressionContext:"filter",valueSpec:{value:"boolean"}})):function t(e){var n=e.value,r=e.key;if("array"!==An(n))return[new Ct(r,n,"array expected, "+An(n)+" found")];var i,o=e.styleSpec,a=[];if(n.length<1)return[new Ct(r,n,"filter array must have at least 1 element")];switch(a=a.concat(Ln({key:r+"[0]",value:n[0],valueSpec:o.filter_operator,style:e.style,styleSpec:e.styleSpec})),It(n[0])){case"<":case"<=":case">":case">=":n.length>=2&&"$type"===It(n[1])&&a.push(new Ct(r,n,'"$type" cannot be use with operator "'+n[0]+'"'));case"==":case"!=":3!==n.length&&a.push(new Ct(r,n,'filter array for operator "'+n[0]+'" must have 3 elements'));case"in":case"!in":n.length>=2&&"string"!==(i=An(n[1]))&&a.push(new Ct(r+"[1]",n[1],"string expected, "+i+" found"));for(var s=2;s=l[p+0]&&r>=l[p+1])?(a[f]=!0,o.push(c[f])):a[f]=!1}}},hr.prototype._forEachCell=function(t,e,n,r,i,o,a,s){for(var u=this._convertToCellCoord(t),c=this._convertToCellCoord(e),l=this._convertToCellCoord(n),h=this._convertToCellCoord(r),f=u;f<=l;f++)for(var p=c;p<=h;p++){var d=this.d*p+f;if((!s||s(this._convertFromCellCoord(f),this._convertFromCellCoord(p),this._convertFromCellCoord(f+1),this._convertFromCellCoord(p+1)))&&i.call(this,t,e,n,r,d,o,a,s))return}},hr.prototype._convertFromCellCoord=function(t){return(t-this.padding)/this.scale},hr.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},hr.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=3+this.cells.length+1+1,n=0,r=0;r=0)){var h=t[l];c[l]=pr[u].shallow.indexOf(l)>=0?h:mr(h,e)}t instanceof Error&&(c.message=t.message)}if(c.$name)throw new Error("$name property is reserved for worker serialization logic.");return"Object"!==u&&(c.$name=u),c}throw new Error("can't serialize object of type "+typeof t)}function yr(t){if(null==t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||gr(t)||ArrayBuffer.isView(t)||t instanceof fr)return t;if(Array.isArray(t))return t.map(yr);if("object"==typeof t){var e=t.$name||"Object",n=pr[e].klass;if(!n)throw new Error("can't deserialize unregistered class "+e);if(n.deserialize)return n.deserialize(t);for(var r=Object.create(n.prototype),i=0,o=Object.keys(t);i=0?s:yr(s)}}return r}throw new Error("can't deserialize object of type "+typeof t)}var vr=function(){this.first=!0};vr.prototype.update=function(t,e){var n=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=n,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=n,!0):(this.lastFloorZoom>n?(this.lastIntegerZoom=n+1,this.lastIntegerZoomTime=e):this.lastFloorZoom=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},"Arabic Supplement":function(t){return t>=1872&&t<=1919},"Arabic Extended-A":function(t){return t>=2208&&t<=2303},"Hangul Jamo":function(t){return t>=4352&&t<=4607},"Unified Canadian Aboriginal Syllabics":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},"Unified Canadian Aboriginal Syllabics Extended":function(t){return t>=6320&&t<=6399},"General Punctuation":function(t){return t>=8192&&t<=8303},"Letterlike Symbols":function(t){return t>=8448&&t<=8527},"Number Forms":function(t){return t>=8528&&t<=8591},"Miscellaneous Technical":function(t){return t>=8960&&t<=9215},"Control Pictures":function(t){return t>=9216&&t<=9279},"Optical Character Recognition":function(t){return t>=9280&&t<=9311},"Enclosed Alphanumerics":function(t){return t>=9312&&t<=9471},"Geometric Shapes":function(t){return t>=9632&&t<=9727},"Miscellaneous Symbols":function(t){return t>=9728&&t<=9983},"Miscellaneous Symbols and Arrows":function(t){return t>=11008&&t<=11263},"CJK Radicals Supplement":function(t){return t>=11904&&t<=12031},"Kangxi Radicals":function(t){return t>=12032&&t<=12255},"Ideographic Description Characters":function(t){return t>=12272&&t<=12287},"CJK Symbols and Punctuation":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},"Hangul Compatibility Jamo":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},"Bopomofo Extended":function(t){return t>=12704&&t<=12735},"CJK Strokes":function(t){return t>=12736&&t<=12783},"Katakana Phonetic Extensions":function(t){return t>=12784&&t<=12799},"Enclosed CJK Letters and Months":function(t){return t>=12800&&t<=13055},"CJK Compatibility":function(t){return t>=13056&&t<=13311},"CJK Unified Ideographs Extension A":function(t){return t>=13312&&t<=19903},"Yijing Hexagram Symbols":function(t){return t>=19904&&t<=19967},"CJK Unified Ideographs":function(t){return t>=19968&&t<=40959},"Yi Syllables":function(t){return t>=40960&&t<=42127},"Yi Radicals":function(t){return t>=42128&&t<=42191},"Hangul Jamo Extended-A":function(t){return t>=43360&&t<=43391},"Hangul Syllables":function(t){return t>=44032&&t<=55215},"Hangul Jamo Extended-B":function(t){return t>=55216&&t<=55295},"Private Use Area":function(t){return t>=57344&&t<=63743},"CJK Compatibility Ideographs":function(t){return t>=63744&&t<=64255},"Arabic Presentation Forms-A":function(t){return t>=64336&&t<=65023},"Vertical Forms":function(t){return t>=65040&&t<=65055},"CJK Compatibility Forms":function(t){return t>=65072&&t<=65103},"Small Form Variants":function(t){return t>=65104&&t<=65135},"Arabic Presentation Forms-B":function(t){return t>=65136&&t<=65279},"Halfwidth and Fullwidth Forms":function(t){return t>=65280&&t<=65519}};function br(t){for(var e=0,n=t;e=65097&&t<=65103)||_r["CJK Compatibility Ideographs"](t)||_r["CJK Compatibility"](t)||_r["CJK Radicals Supplement"](t)||_r["CJK Strokes"](t)||!(!_r["CJK Symbols and Punctuation"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||_r["CJK Unified Ideographs Extension A"](t)||_r["CJK Unified Ideographs"](t)||_r["Enclosed CJK Letters and Months"](t)||_r["Hangul Compatibility Jamo"](t)||_r["Hangul Jamo Extended-A"](t)||_r["Hangul Jamo Extended-B"](t)||_r["Hangul Jamo"](t)||_r["Hangul Syllables"](t)||_r.Hiragana(t)||_r["Ideographic Description Characters"](t)||_r.Kanbun(t)||_r["Kangxi Radicals"](t)||_r["Katakana Phonetic Extensions"](t)||_r.Katakana(t)&&12540!==t||!(!_r["Halfwidth and Fullwidth Forms"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!_r["Small Form Variants"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||_r["Unified Canadian Aboriginal Syllabics"](t)||_r["Unified Canadian Aboriginal Syllabics Extended"](t)||_r["Vertical Forms"](t)||_r["Yijing Hexagram Symbols"](t)||_r["Yi Syllables"](t)||_r["Yi Radicals"](t))))}function Er(t){return!(wr(t)||function(t){return!!(_r["Latin-1 Supplement"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||_r["General Punctuation"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||_r["Letterlike Symbols"](t)||_r["Number Forms"](t)||_r["Miscellaneous Technical"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||_r["Control Pictures"](t)&&9251!==t||_r["Optical Character Recognition"](t)||_r["Enclosed Alphanumerics"](t)||_r["Geometric Shapes"](t)||_r["Miscellaneous Symbols"](t)&&!(t>=9754&&t<=9759)||_r["Miscellaneous Symbols and Arrows"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||_r["CJK Symbols and Punctuation"](t)||_r.Katakana(t)||_r["Private Use Area"](t)||_r["CJK Compatibility Forms"](t)||_r["Small Form Variants"](t)||_r["Halfwidth and Fullwidth Forms"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function Or(t){return t>=1424&&t<=2303||_r["Arabic Presentation Forms-A"](t)||_r["Arabic Presentation Forms-B"](t)}function Sr(t,e){return!(!e&&Or(t)||t>=2304&&t<=3583||t>=3840&&t<=4255||_r.Khmer(t))}function Tr(t){for(var e=0,n=t;ethis.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*n}:{fromScale:.5,toScale:1,t:1-(1-n)*e}};var Nr=function(t,e){this.property=t,this.value=e,this.expression=function(t,e){if(gn(t))return new Pn(t,e);if(En(t)){var n=Cn(t,e);if("error"===n.result)throw new Error(n.value.map((function(t){return t.key+": "+t.message})).join(", "));return n.value}var r=t;return"string"==typeof t&&"color"===e.type&&(r=Qt.parse(t)),{kind:"constant",evaluate:function(){return r}}}(void 0===e?t.specification.default:e,t.specification)};Nr.prototype.isDataDriven=function(){return"source"===this.expression.kind||"composite"===this.expression.kind},Nr.prototype.possiblyEvaluate=function(t,e){return this.property.possiblyEvaluate(this,t,e)};var Gr=function(t){this.property=t,this.value=new Nr(t,void 0)};Gr.prototype.transitioned=function(t,e){return new Hr(this.property,this.value,e,h({},t.transition,this.transition),t.now)},Gr.prototype.untransitioned=function(){return new Hr(this.property,this.value,null,{},0)};var Vr=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues)};Vr.prototype.getValue=function(t){return _(this._values[t].value.value)},Vr.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new Gr(this._values[t].property)),this._values[t].value=new Nr(this._values[t].property,null===e?void 0:_(e))},Vr.prototype.getTransition=function(t){return _(this._values[t].transition)},Vr.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new Gr(this._values[t].property)),this._values[t].transition=_(e)||void 0},Vr.prototype.serialize=function(){for(var t={},e=0,n=Object.keys(this._values);ethis.end)return this.prior=null,r;if(this.value.isDataDriven())return this.prior=null,r;if(n=1)return 1;var e=t*t,n=e*t;return 4*(t<.5?n:3*(t-e)+n-.75)}(o))}return r};var Wr=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues)};Wr.prototype.possiblyEvaluate=function(t,e){for(var n=new Jr(this._properties),r=0,i=Object.keys(this._values);rr.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:n,to:e}},e.prototype.interpolate=function(t){return t},e}(Qr),Yr=function(t){this.specification=t};Yr.prototype.possiblyEvaluate=function(t,e,n){if(void 0!==t.value){if("constant"===t.expression.kind){var r=t.expression.evaluate(e,null,{},n);return this._calculate(r,r,r,e)}return this._calculate(t.expression.evaluate(new Ur(Math.floor(e.zoom-1),e)),t.expression.evaluate(new Ur(Math.floor(e.zoom),e)),t.expression.evaluate(new Ur(Math.floor(e.zoom+1),e)),e)}},Yr.prototype._calculate=function(t,e,n,r){return r.zoom>r.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:n,to:e}},Yr.prototype.interpolate=function(t){return t};var $r=function(t){this.specification=t};$r.prototype.possiblyEvaluate=function(t,e,n){return!!t.expression.evaluate(e,null,{},n)},$r.prototype.interpolate=function(){return!1};var ti=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[],t){var n=t[e];n.specification.overridable&&this.overridableProperties.push(e);var r=this.defaultPropertyValues[e]=new Nr(n,void 0),i=this.defaultTransitionablePropertyValues[e]=new Gr(n);this.defaultTransitioningPropertyValues[e]=i.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=r.possiblyEvaluate({})}};dr("DataDrivenProperty",Qr),dr("DataConstantProperty",Zr),dr("CrossFadedDataDrivenProperty",Kr),dr("CrossFadedProperty",Yr),dr("ColorRampProperty",$r);var ei=function(t){function e(e,n){if(t.call(this),this.id=e.id,this.type=e.type,this._featureFilter=function(){return!0},"custom"!==e.type&&(e=e,this.metadata=e.metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,"background"!==e.type&&(this.source=e.source,this.sourceLayer=e["source-layer"],this.filter=e.filter),n.layout&&(this._unevaluatedLayout=new qr(n.layout)),n.paint)){for(var r in this._transitionablePaint=new Vr(n.paint),e.paint)this.setPaintProperty(r,e.paint[r],{validate:!1});for(var i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned()}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return"visibility"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,n){if(void 0===n&&(n={}),null!=e){var r="layers."+this.id+".layout."+t;if(this._validate(ur,r,t,e,n))return}"visibility"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility=e},e.prototype.getPaintProperty=function(t){return m(t,"-transition")?this._transitionablePaint.getTransition(t.slice(0,-"-transition".length)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,n){if(void 0===n&&(n={}),null!=e){var r="layers."+this.id+".paint."+t;if(this._validate(sr,r,t,e,n))return!1}if(m(t,"-transition"))return this._transitionablePaint.setTransition(t.slice(0,-"-transition".length),e||void 0),!1;var i=this._transitionablePaint._values[t],o="cross-faded-data-driven"===i.property.specification["property-type"],a=i.value.isDataDriven(),s=i.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);var u=this._transitionablePaint._values[t].value;return u.isDataDriven()||a||o||this._handleOverridablePaintPropertyUpdate(t,s,u)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype._handleOverridablePaintPropertyUpdate=function(t,e,n){return!1},e.prototype.isHidden=function(t){return!!(this.minzoom&&t=this.maxzoom)||"none"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint)},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t,e){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t,e)),this.paint=this._transitioningPaint.possiblyEvaluate(t,e)},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,"source-layer":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return this.visibility&&(t.layout=t.layout||{},t.layout.visibility=this.visibility),v(t,(function(t,e){return!(void 0===t||"layout"===e&&!Object.keys(t).length||"paint"===e&&!Object.keys(t).length)}))},e.prototype._validate=function(t,e,n,r,i){return void 0===i&&(i={}),(!i||!1!==i.validate)&&cr(this,t.call(or,{key:e,layerType:this.type,objectKey:n,value:r,styleSpec:Tt,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D=function(){return!1},e.prototype.isTileClipped=function(){return!1},e.prototype.hasOffscreenPass=function(){return!1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof Xr&&fn(e.property.specification)&&("source"===e.value.kind||"composite"===e.value.kind)&&e.value.isStateDependent)return!0}return!1},e}(St),ni={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},ri=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8},ii=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0)};function oi(t,e){void 0===e&&(e=1);var n=0,r=0;return{members:t.map((function(t){var i,o=(i=t.type,ni[i].BYTES_PER_ELEMENT),a=n=ai(n,Math.max(e,o)),s=t.components||1;return r=Math.max(r,o),n+=o*s,{name:t.name,type:t.type,components:s,offset:a}})),size:ai(n,Math.max(r,e)),alignment:e}}function ai(t,e){return Math.ceil(t/e)*e}ii.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},ii.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},ii.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},ii.prototype.clear=function(){this.length=0},ii.prototype.resize=function(t){this.reserve(t),this.length=t},ii.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}},ii.prototype._refreshViews=function(){throw new Error("_refreshViews() must be implemented by each concrete StructArray layout")};var si=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var n=this.length;return this.resize(n+1),this.emplace(n,t,e)},e.prototype.emplace=function(t,e,n){var r=2*t;return this.int16[r+0]=e,this.int16[r+1]=n,t},e}(ii);si.prototype.bytesPerElement=4,dr("StructArrayLayout2i4",si);var ui=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,n,r)},e.prototype.emplace=function(t,e,n,r,i){var o=4*t;return this.int16[o+0]=e,this.int16[o+1]=n,this.int16[o+2]=r,this.int16[o+3]=i,t},e}(ii);ui.prototype.bytesPerElement=8,dr("StructArrayLayout4i8",ui);var ci=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,o){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,n,r,i,o)},e.prototype.emplace=function(t,e,n,r,i,o,a){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=n,this.int16[s+2]=r,this.int16[s+3]=i,this.int16[s+4]=o,this.int16[s+5]=a,t},e}(ii);ci.prototype.bytesPerElement=12,dr("StructArrayLayout2i4i12",ci);var li=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,o){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,n,r,i,o)},e.prototype.emplace=function(t,e,n,r,i,o,a){var s=4*t,u=8*t;return this.int16[s+0]=e,this.int16[s+1]=n,this.uint8[u+4]=r,this.uint8[u+5]=i,this.uint8[u+6]=o,this.uint8[u+7]=a,t},e}(ii);li.prototype.bytesPerElement=8,dr("StructArrayLayout2i4ub8",li);var hi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,o,a,s){var u=this.length;return this.resize(u+1),this.emplace(u,t,e,n,r,i,o,a,s)},e.prototype.emplace=function(t,e,n,r,i,o,a,s,u){var c=8*t;return this.uint16[c+0]=e,this.uint16[c+1]=n,this.uint16[c+2]=r,this.uint16[c+3]=i,this.uint16[c+4]=o,this.uint16[c+5]=a,this.uint16[c+6]=s,this.uint16[c+7]=u,t},e}(ii);hi.prototype.bytesPerElement=16,dr("StructArrayLayout8ui16",hi);var fi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,o,a,s,u,c,l,h){var f=this.length;return this.resize(f+1),this.emplace(f,t,e,n,r,i,o,a,s,u,c,l,h)},e.prototype.emplace=function(t,e,n,r,i,o,a,s,u,c,l,h,f){var p=12*t;return this.int16[p+0]=e,this.int16[p+1]=n,this.int16[p+2]=r,this.int16[p+3]=i,this.uint16[p+4]=o,this.uint16[p+5]=a,this.uint16[p+6]=s,this.uint16[p+7]=u,this.int16[p+8]=c,this.int16[p+9]=l,this.int16[p+10]=h,this.int16[p+11]=f,t},e}(ii);fi.prototype.bytesPerElement=24,dr("StructArrayLayout4i4ui4i24",fi);var pi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n){var r=this.length;return this.resize(r+1),this.emplace(r,t,e,n)},e.prototype.emplace=function(t,e,n,r){var i=3*t;return this.float32[i+0]=e,this.float32[i+1]=n,this.float32[i+2]=r,t},e}(ii);pi.prototype.bytesPerElement=12,dr("StructArrayLayout3f12",pi);var di=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var n=1*t;return this.uint32[n+0]=e,t},e}(ii);di.prototype.bytesPerElement=4,dr("StructArrayLayout1ul4",di);var Ai=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,o,a,s,u,c,l){var h=this.length;return this.resize(h+1),this.emplace(h,t,e,n,r,i,o,a,s,u,c,l)},e.prototype.emplace=function(t,e,n,r,i,o,a,s,u,c,l,h){var f=12*t,p=6*t;return this.int16[f+0]=e,this.int16[f+1]=n,this.int16[f+2]=r,this.int16[f+3]=i,this.int16[f+4]=o,this.int16[f+5]=a,this.uint32[p+3]=s,this.uint16[f+8]=u,this.uint16[f+9]=c,this.int16[f+10]=l,this.int16[f+11]=h,t},e}(ii);Ai.prototype.bytesPerElement=24,dr("StructArrayLayout6i1ul2ui2i24",Ai);var gi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,o){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,n,r,i,o)},e.prototype.emplace=function(t,e,n,r,i,o,a){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=n,this.int16[s+2]=r,this.int16[s+3]=i,this.int16[s+4]=o,this.int16[s+5]=a,t},e}(ii);gi.prototype.bytesPerElement=12,dr("StructArrayLayout2i2i2i12",gi);var mi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,n,r)},e.prototype.emplace=function(t,e,n,r,i){var o=12*t,a=3*t;return this.uint8[o+0]=e,this.uint8[o+1]=n,this.float32[a+1]=r,this.float32[a+2]=i,t},e}(ii);mi.prototype.bytesPerElement=12,dr("StructArrayLayout2ub2f12",mi);var yi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,A,g){var m=this.length;return this.resize(m+1),this.emplace(m,t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,A,g)},e.prototype.emplace=function(t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,A,g,m){var y=24*t,v=12*t,_=48*t;return this.int16[y+0]=e,this.int16[y+1]=n,this.uint16[y+2]=r,this.uint16[y+3]=i,this.uint32[v+2]=o,this.uint32[v+3]=a,this.uint32[v+4]=s,this.uint16[y+10]=u,this.uint16[y+11]=c,this.uint16[y+12]=l,this.float32[v+7]=h,this.float32[v+8]=f,this.uint8[_+36]=p,this.uint8[_+37]=d,this.uint8[_+38]=A,this.uint32[v+10]=g,this.int16[y+22]=m,t},e}(ii);yi.prototype.bytesPerElement=48,dr("StructArrayLayout2i2ui3ul3ui2f3ub1ul1i48",yi);var vi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,A,g,m,y,v,_,b,x,w,E,O){var S=this.length;return this.resize(S+1),this.emplace(S,t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,A,g,m,y,v,_,b,x,w,E,O)},e.prototype.emplace=function(t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,A,g,m,y,v,_,b,x,w,E,O,S){var T=30*t,C=15*t;return this.int16[T+0]=e,this.int16[T+1]=n,this.int16[T+2]=r,this.int16[T+3]=i,this.int16[T+4]=o,this.int16[T+5]=a,this.int16[T+6]=s,this.int16[T+7]=u,this.uint16[T+8]=c,this.uint16[T+9]=l,this.uint16[T+10]=h,this.uint16[T+11]=f,this.uint16[T+12]=p,this.uint16[T+13]=d,this.uint16[T+14]=A,this.uint16[T+15]=g,this.uint16[T+16]=m,this.uint16[T+17]=y,this.uint16[T+18]=v,this.uint16[T+19]=_,this.uint16[T+20]=b,this.uint16[T+21]=x,this.uint32[C+11]=w,this.float32[C+12]=E,this.float32[C+13]=O,this.float32[C+14]=S,t},e}(ii);vi.prototype.bytesPerElement=60,dr("StructArrayLayout8i14ui1ul3f60",vi);var _i=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var n=1*t;return this.float32[n+0]=e,t},e}(ii);_i.prototype.bytesPerElement=4,dr("StructArrayLayout1f4",_i);var bi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n){var r=this.length;return this.resize(r+1),this.emplace(r,t,e,n)},e.prototype.emplace=function(t,e,n,r){var i=3*t;return this.int16[i+0]=e,this.int16[i+1]=n,this.int16[i+2]=r,t},e}(ii);bi.prototype.bytesPerElement=6,dr("StructArrayLayout3i6",bi);var xi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n){var r=this.length;return this.resize(r+1),this.emplace(r,t,e,n)},e.prototype.emplace=function(t,e,n,r){var i=2*t,o=4*t;return this.uint32[i+0]=e,this.uint16[o+2]=n,this.uint16[o+3]=r,t},e}(ii);xi.prototype.bytesPerElement=8,dr("StructArrayLayout1ul2ui8",xi);var wi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n){var r=this.length;return this.resize(r+1),this.emplace(r,t,e,n)},e.prototype.emplace=function(t,e,n,r){var i=3*t;return this.uint16[i+0]=e,this.uint16[i+1]=n,this.uint16[i+2]=r,t},e}(ii);wi.prototype.bytesPerElement=6,dr("StructArrayLayout3ui6",wi);var Ei=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var n=this.length;return this.resize(n+1),this.emplace(n,t,e)},e.prototype.emplace=function(t,e,n){var r=2*t;return this.uint16[r+0]=e,this.uint16[r+1]=n,t},e}(ii);Ei.prototype.bytesPerElement=4,dr("StructArrayLayout2ui4",Ei);var Oi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var n=1*t;return this.uint16[n+0]=e,t},e}(ii);Oi.prototype.bytesPerElement=2,dr("StructArrayLayout1ui2",Oi);var Si=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var n=this.length;return this.resize(n+1),this.emplace(n,t,e)},e.prototype.emplace=function(t,e,n){var r=2*t;return this.float32[r+0]=e,this.float32[r+1]=n,t},e}(ii);Si.prototype.bytesPerElement=8,dr("StructArrayLayout2f8",Si);var Ti=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,n,r)},e.prototype.emplace=function(t,e,n,r,i){var o=4*t;return this.float32[o+0]=e,this.float32[o+1]=n,this.float32[o+2]=r,this.float32[o+3]=i,t},e}(ii);Ti.prototype.bytesPerElement=16,dr("StructArrayLayout4f16",Ti);var Ci=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},radius:{configurable:!0},signedDistanceFromAnchor:{configurable:!0},anchorPoint:{configurable:!0}};return n.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},n.anchorPointX.set=function(t){this._structArray.int16[this._pos2+0]=t},n.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},n.anchorPointY.set=function(t){this._structArray.int16[this._pos2+1]=t},n.x1.get=function(){return this._structArray.int16[this._pos2+2]},n.x1.set=function(t){this._structArray.int16[this._pos2+2]=t},n.y1.get=function(){return this._structArray.int16[this._pos2+3]},n.y1.set=function(t){this._structArray.int16[this._pos2+3]=t},n.x2.get=function(){return this._structArray.int16[this._pos2+4]},n.x2.set=function(t){this._structArray.int16[this._pos2+4]=t},n.y2.get=function(){return this._structArray.int16[this._pos2+5]},n.y2.set=function(t){this._structArray.int16[this._pos2+5]=t},n.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},n.featureIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},n.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},n.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+8]=t},n.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},n.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t},n.radius.get=function(){return this._structArray.int16[this._pos2+10]},n.radius.set=function(t){this._structArray.int16[this._pos2+10]=t},n.signedDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+11]},n.signedDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+11]=t},n.anchorPoint.get=function(){return new i(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,n),e}(ri);Ci.prototype.size=24;var Pi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Ci(this,t)},e}(Ai);dr("CollisionBoxArray",Pi);var Mi=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},placedOrientation:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0},associatedIconIndex:{configurable:!0}};return n.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},n.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t},n.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},n.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t},n.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},n.glyphStartIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},n.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},n.numGlyphs.set=function(t){this._structArray.uint16[this._pos2+3]=t},n.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},n.vertexStartIndex.set=function(t){this._structArray.uint32[this._pos4+2]=t},n.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},n.lineStartIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},n.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},n.lineLength.set=function(t){this._structArray.uint32[this._pos4+4]=t},n.segment.get=function(){return this._structArray.uint16[this._pos2+10]},n.segment.set=function(t){this._structArray.uint16[this._pos2+10]=t},n.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},n.lowerSize.set=function(t){this._structArray.uint16[this._pos2+11]=t},n.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},n.upperSize.set=function(t){this._structArray.uint16[this._pos2+12]=t},n.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},n.lineOffsetX.set=function(t){this._structArray.float32[this._pos4+7]=t},n.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},n.lineOffsetY.set=function(t){this._structArray.float32[this._pos4+8]=t},n.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},n.writingMode.set=function(t){this._structArray.uint8[this._pos1+36]=t},n.placedOrientation.get=function(){return this._structArray.uint8[this._pos1+37]},n.placedOrientation.set=function(t){this._structArray.uint8[this._pos1+37]=t},n.hidden.get=function(){return this._structArray.uint8[this._pos1+38]},n.hidden.set=function(t){this._structArray.uint8[this._pos1+38]=t},n.crossTileID.get=function(){return this._structArray.uint32[this._pos4+10]},n.crossTileID.set=function(t){this._structArray.uint32[this._pos4+10]=t},n.associatedIconIndex.get=function(){return this._structArray.int16[this._pos2+22]},n.associatedIconIndex.set=function(t){this._structArray.int16[this._pos2+22]=t},Object.defineProperties(e.prototype,n),e}(ri);Mi.prototype.size=48;var Ii=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Mi(this,t)},e}(yi);dr("PlacedSymbolArray",Ii);var Bi=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},placedIconSymbolIndex:{configurable:!0},verticalPlacedIconSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},verticalTextBoxStartIndex:{configurable:!0},verticalTextBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},verticalIconBoxStartIndex:{configurable:!0},verticalIconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},numVerticalIconVertices:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},textOffset0:{configurable:!0},textOffset1:{configurable:!0}};return n.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},n.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t},n.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},n.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t},n.rightJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},n.rightJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+2]=t},n.centerJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},n.centerJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+3]=t},n.leftJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+4]},n.leftJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+4]=t},n.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+5]},n.verticalPlacedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+5]=t},n.placedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+6]},n.placedIconSymbolIndex.set=function(t){this._structArray.int16[this._pos2+6]=t},n.verticalPlacedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+7]},n.verticalPlacedIconSymbolIndex.set=function(t){this._structArray.int16[this._pos2+7]=t},n.key.get=function(){return this._structArray.uint16[this._pos2+8]},n.key.set=function(t){this._structArray.uint16[this._pos2+8]=t},n.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+9]},n.textBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t},n.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+10]},n.textBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+10]=t},n.verticalTextBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+11]},n.verticalTextBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+11]=t},n.verticalTextBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+12]},n.verticalTextBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+12]=t},n.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+13]},n.iconBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+13]=t},n.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+14]},n.iconBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+14]=t},n.verticalIconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+15]},n.verticalIconBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+15]=t},n.verticalIconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+16]},n.verticalIconBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+16]=t},n.featureIndex.get=function(){return this._structArray.uint16[this._pos2+17]},n.featureIndex.set=function(t){this._structArray.uint16[this._pos2+17]=t},n.numHorizontalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+18]},n.numHorizontalGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+18]=t},n.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+19]},n.numVerticalGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+19]=t},n.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+20]},n.numIconVertices.set=function(t){this._structArray.uint16[this._pos2+20]=t},n.numVerticalIconVertices.get=function(){return this._structArray.uint16[this._pos2+21]},n.numVerticalIconVertices.set=function(t){this._structArray.uint16[this._pos2+21]=t},n.crossTileID.get=function(){return this._structArray.uint32[this._pos4+11]},n.crossTileID.set=function(t){this._structArray.uint32[this._pos4+11]=t},n.textBoxScale.get=function(){return this._structArray.float32[this._pos4+12]},n.textBoxScale.set=function(t){this._structArray.float32[this._pos4+12]=t},n.textOffset0.get=function(){return this._structArray.float32[this._pos4+13]},n.textOffset0.set=function(t){this._structArray.float32[this._pos4+13]=t},n.textOffset1.get=function(){return this._structArray.float32[this._pos4+14]},n.textOffset1.set=function(t){this._structArray.float32[this._pos4+14]=t},Object.defineProperties(e.prototype,n),e}(ri);Bi.prototype.size=60;var Ri=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Bi(this,t)},e}(vi);dr("SymbolInstanceArray",Ri);var ki=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={offsetX:{configurable:!0}};return n.offsetX.get=function(){return this._structArray.float32[this._pos4+0]},n.offsetX.set=function(t){this._structArray.float32[this._pos4+0]=t},Object.defineProperties(e.prototype,n),e}(ri);ki.prototype.size=4;var Li=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e.prototype.get=function(t){return new ki(this,t)},e}(_i);dr("GlyphOffsetArray",Li);var Di=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={x:{configurable:!0},y:{configurable:!0},tileUnitDistanceFromAnchor:{configurable:!0}};return n.x.get=function(){return this._structArray.int16[this._pos2+0]},n.x.set=function(t){this._structArray.int16[this._pos2+0]=t},n.y.get=function(){return this._structArray.int16[this._pos2+1]},n.y.set=function(t){this._structArray.int16[this._pos2+1]=t},n.tileUnitDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+2]},n.tileUnitDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+2]=t},Object.defineProperties(e.prototype,n),e}(ri);Di.prototype.size=6;var ji=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e.prototype.get=function(t){return new Di(this,t)},e}(bi);dr("SymbolLineVertexArray",ji);var Fi=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return n.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},n.featureIndex.set=function(t){this._structArray.uint32[this._pos4+0]=t},n.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},n.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},n.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},n.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+3]=t},Object.defineProperties(e.prototype,n),e}(ri);Fi.prototype.size=8;var zi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Fi(this,t)},e}(xi);dr("FeatureIndexArray",zi);var Ui=oi([{name:"a_pos",components:2,type:"Int16"}],4).members,Ni=function(t){void 0===t&&(t=[]),this.segments=t};function Gi(t,e){return 256*(t=c(Math.floor(t),0,255))+c(Math.floor(e),0,255)}Ni.prototype.prepareSegment=function(t,e,n,r){var i=this.segments[this.segments.length-1];return t>Ni.MAX_VERTEX_ARRAY_LENGTH&&x("Max vertices per segment is "+Ni.MAX_VERTEX_ARRAY_LENGTH+": bucket requested "+t),(!i||i.vertexLength+t>Ni.MAX_VERTEX_ARRAY_LENGTH||i.sortKey!==r)&&(i={vertexOffset:e.length,primitiveOffset:n.length,vertexLength:0,primitiveLength:0},void 0!==r&&(i.sortKey=r),this.segments.push(i)),i},Ni.prototype.get=function(){return this.segments},Ni.prototype.destroy=function(){for(var t=0,e=this.segments;t>1;this.ids[r]>=t?n=r:e=r+1}for(var i=[];this.ids[e]===t;){var o=this.positions[3*e],a=this.positions[3*e+1],s=this.positions[3*e+2];i.push({index:o,start:a,end:s}),e++}return i},Vi.serialize=function(t,e){var n=new Float64Array(t.ids),r=new Uint32Array(t.positions);return function t(e,n,r,i){if(!(r>=i)){for(var o=e[r+i>>1],a=r-1,s=i+1;;){do{a++}while(e[a]o);if(a>=s)break;Hi(e,a,s),Hi(n,3*a,3*s),Hi(n,3*a+1,3*s+1),Hi(n,3*a+2,3*s+2)}t(e,n,r,s),t(e,n,s+1,i)}}(n,r,0,n.length-1),e&&e.push(n.buffer,r.buffer),{ids:n,positions:r}},Vi.deserialize=function(t){var e=new Vi;return e.ids=t.ids,e.positions=t.positions,e.indexed=!0,e},dr("FeaturePositionMap",Vi);var Wi=function(t,e){this.gl=t.gl,this.location=e},qi=function(t){function e(e,n){t.call(this,e,n),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1i(this.location,t))},e}(Wi),Xi=function(t){function e(e,n){t.call(this,e,n),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t))},e}(Wi),Ji=function(t){function e(e,n){t.call(this,e,n),this.current=[0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]||(this.current=t,this.gl.uniform2f(this.location,t[0],t[1]))},e}(Wi),Zi=function(t){function e(e,n){t.call(this,e,n),this.current=[0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]||(this.current=t,this.gl.uniform3f(this.location,t[0],t[1],t[2]))},e}(Wi),Qi=function(t){function e(e,n){t.call(this,e,n),this.current=[0,0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]&&t[3]===this.current[3]||(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]))},e}(Wi),Ki=function(t){function e(e,n){t.call(this,e,n),this.current=Qt.transparent}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t.r===this.current.r&&t.g===this.current.g&&t.b===this.current.b&&t.a===this.current.a||(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a))},e}(Wi),Yi=new Float32Array(16),$i=function(t){function e(e,n){t.call(this,e,n),this.current=Yi}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t[12]!==this.current[12]||t[0]!==this.current[0])return this.current=t,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e=1;e<16;e++)if(t[e]!==this.current[e]){this.current=t,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(Wi);function to(t){return[Gi(255*t.r,255*t.g),Gi(255*t.b,255*t.a)]}var eo=function(t,e,n){this.value=t,this.names=e,this.uniformNames=this.names.map((function(t){return"u_"+t})),this.type=n,this.maxValue=-1/0};eo.prototype.defines=function(){return this.names.map((function(t){return"#define HAS_UNIFORM_u_"+t}))},eo.prototype.setConstantPatternPositions=function(){},eo.prototype.populatePaintArray=function(){},eo.prototype.updatePaintArray=function(){},eo.prototype.upload=function(){},eo.prototype.destroy=function(){},eo.prototype.setUniforms=function(t,e,n,r){e.set(r.constantOr(this.value))},eo.prototype.getBinding=function(t,e){return"color"===this.type?new Ki(t,e):new Xi(t,e)},eo.serialize=function(t){var e=t.value,n=t.names,r=t.type;return{value:mr(e),names:n,type:r}},eo.deserialize=function(t){var e=t.value,n=t.names,r=t.type;return new eo(yr(e),n,r)};var no=function(t,e,n){this.value=t,this.names=e,this.uniformNames=this.names.map((function(t){return"u_"+t})),this.type=n,this.maxValue=-1/0,this.patternPositions={patternTo:null,patternFrom:null}};no.prototype.defines=function(){return this.names.map((function(t){return"#define HAS_UNIFORM_u_"+t}))},no.prototype.populatePaintArray=function(){},no.prototype.updatePaintArray=function(){},no.prototype.upload=function(){},no.prototype.destroy=function(){},no.prototype.setConstantPatternPositions=function(t,e){this.patternPositions.patternTo=t.tlbr,this.patternPositions.patternFrom=e.tlbr},no.prototype.setUniforms=function(t,e,n,r,i){var o=this.patternPositions;"u_pattern_to"===i&&o.patternTo&&e.set(o.patternTo),"u_pattern_from"===i&&o.patternFrom&&e.set(o.patternFrom)},no.prototype.getBinding=function(t,e){return new Qi(t,e)};var ro=function(t,e,n,r){this.expression=t,this.names=e,this.type=n,this.uniformNames=this.names.map((function(t){return"a_"+t})),this.maxValue=-1/0,this.paintVertexAttributes=e.map((function(t){return{name:"a_"+t,type:"Float32",components:"color"===n?2:1,offset:0}})),this.paintVertexArray=new r};ro.prototype.defines=function(){return[]},ro.prototype.setConstantPatternPositions=function(){},ro.prototype.populatePaintArray=function(t,e,n,r){var i=this.paintVertexArray,o=i.length;i.reserve(t);var a=this.expression.evaluate(new Ur(0),e,{},[],r);if("color"===this.type)for(var s=to(a),u=o;uho.max||a.yho.max)&&(x("Geometry exceeds allowed extent, reduce your vector tile buffer size"),a.x=c(a.x,ho.min,ho.max),a.y=c(a.y,ho.min,ho.max))}return n}function po(t,e,n,r,i){t.emplaceBack(2*e+(r+1)/2,2*n+(i+1)/2)}var Ao=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new si,this.indexArray=new wi,this.segments=new Ni,this.programConfigurations=new so(Ui,t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function go(t,e){for(var n=0;n1){if(_o(t,e))return!0;for(var r=0;r1?t.distSqr(n):t.distSqr(n.sub(e)._mult(i)._add(e))}function Eo(t,e){for(var n,r,i,o=!1,a=0;ae.y!=i.y>e.y&&e.x<(i.x-r.x)*(e.y-r.y)/(i.y-r.y)+r.x&&(o=!o);return o}function Oo(t,e){for(var n=!1,r=0,i=t.length-1;re.y!=a.y>e.y&&e.x<(a.x-o.x)*(e.y-o.y)/(a.y-o.y)+o.x&&(n=!n)}return n}function So(t,e,n){var r=n[0],i=n[2];if(t.xi.x&&e.x>i.x||t.yi.y&&e.y>i.y)return!1;var o=w(t,e,n[0]);return o!==w(t,e,n[1])||o!==w(t,e,n[2])||o!==w(t,e,n[3])}function To(t,e,n){var r=e.paint.get(t).value;return"constant"===r.kind?r.value:n.programConfigurations.get(e.id).binders[t].maxValue}function Co(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function Po(t,e,n,r,o){if(!e[0]&&!e[1])return t;var a=i.convert(e)._mult(o);"viewport"===n&&a._rotate(-r);for(var s=[],u=0;u=lo||c<0||c>=lo)){var l=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray,t.sortKey),h=l.vertexLength;po(this.layoutVertexArray,u,c,-1,-1),po(this.layoutVertexArray,u,c,1,-1),po(this.layoutVertexArray,u,c,1,1),po(this.layoutVertexArray,u,c,-1,1),this.indexArray.emplaceBack(h,h+1,h+2),this.indexArray.emplaceBack(h,h+3,h+2),l.vertexLength+=4,l.primitiveLength+=2}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,n,{})},dr("CircleBucket",Ao,{omit:["layers"]});var Mo,Io=new ti({"circle-sort-key":new Qr(Tt.layout_circle["circle-sort-key"])}),Bo={paint:new ti({"circle-radius":new Qr(Tt.paint_circle["circle-radius"]),"circle-color":new Qr(Tt.paint_circle["circle-color"]),"circle-blur":new Qr(Tt.paint_circle["circle-blur"]),"circle-opacity":new Qr(Tt.paint_circle["circle-opacity"]),"circle-translate":new Zr(Tt.paint_circle["circle-translate"]),"circle-translate-anchor":new Zr(Tt.paint_circle["circle-translate-anchor"]),"circle-pitch-scale":new Zr(Tt.paint_circle["circle-pitch-scale"]),"circle-pitch-alignment":new Zr(Tt.paint_circle["circle-pitch-alignment"]),"circle-stroke-width":new Qr(Tt.paint_circle["circle-stroke-width"]),"circle-stroke-color":new Qr(Tt.paint_circle["circle-stroke-color"]),"circle-stroke-opacity":new Qr(Tt.paint_circle["circle-stroke-opacity"])}),layout:Io},Ro="undefined"!=typeof Float32Array?Float32Array:Array;function ko(t,e,n){var r=e[0],i=e[1],o=e[2],a=e[3];return t[0]=n[0]*r+n[4]*i+n[8]*o+n[12]*a,t[1]=n[1]*r+n[5]*i+n[9]*o+n[13]*a,t[2]=n[2]*r+n[6]*i+n[10]*o+n[14]*a,t[3]=n[3]*r+n[7]*i+n[11]*o+n[15]*a,t}Math.hypot||(Math.hypot=function(){for(var t=arguments,e=0,n=arguments.length;n--;)e+=t[n]*t[n];return Math.sqrt(e)}),Mo=new Ro(3),Ro!=Float32Array&&(Mo[0]=0,Mo[1]=0,Mo[2]=0),function(){var t=new Ro(4);Ro!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0)}();var Lo=function(t){function e(e){t.call(this,e,Bo)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Ao(t)},e.prototype.queryRadius=function(t){var e=t;return To("circle-radius",this,e)+To("circle-stroke-width",this,e)+Co(this.paint.get("circle-translate"))},e.prototype.queryIntersectsFeature=function(t,e,n,r,i,o,a,s){for(var u=Po(t,this.paint.get("circle-translate"),this.paint.get("circle-translate-anchor"),o.angle,a),c=this.paint.get("circle-radius").evaluate(e,n)+this.paint.get("circle-stroke-width").evaluate(e,n),l="map"===this.paint.get("circle-pitch-alignment"),h=l?u:function(t,e){return t.map((function(t){return Do(t,e)}))}(u,s),f=l?c*a:c,p=0,d=r;pt.width||i.height>t.height||n.x>t.width-i.width||n.y>t.height-i.height)throw new RangeError("out of range source coordinates for image copy");if(i.width>e.width||i.height>e.height||r.x>e.width-i.width||r.y>e.height-i.height)throw new RangeError("out of range destination coordinates for image copy");for(var a=t.data,s=e.data,u=0;u80*n){r=o=t[0],i=a=t[1];for(var d=n;do&&(o=s),u>a&&(a=u);c=0!==(c=Math.max(o-r,a-i))?1/c:0}return ta(f,p,n,r,i,c),p}function Yo(t,e,n,r,i){var o,a;if(i===xa(t,e,n,r)>0)for(o=e;o=e;o-=r)a=va(o,t[o],t[o+1],a);return a&&pa(a,a.next)&&(_a(a),a=a.next),a}function $o(t,e){if(!t)return t;e||(e=t);var n,r=t;do{if(n=!1,r.steiner||!pa(r,r.next)&&0!==fa(r.prev,r,r.next))r=r.next;else{if(_a(r),(r=e=r.prev)===r.next)break;n=!0}}while(n||r!==e);return e}function ta(t,e,n,r,i,o,a){if(t){!a&&o&&function(t,e,n,r){var i=t;do{null===i.z&&(i.z=ua(i.x,i.y,e,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,n,r,i,o,a,s,u,c=1;do{for(n=t,t=null,o=null,a=0;n;){for(a++,r=n,s=0,e=0;e0||u>0&&r;)0!==s&&(0===u||!r||n.z<=r.z)?(i=n,n=n.nextZ,s--):(i=r,r=r.nextZ,u--),o?o.nextZ=i:t=i,i.prevZ=o,o=i;n=r}o.nextZ=null,c*=2}while(a>1)}(i)}(t,r,i,o);for(var s,u,c=t;t.prev!==t.next;)if(s=t.prev,u=t.next,o?na(t,r,i,o):ea(t))e.push(s.i/n),e.push(t.i/n),e.push(u.i/n),_a(t),t=u.next,c=u.next;else if((t=u)===c){a?1===a?ta(t=ra($o(t),e,n),e,n,r,i,o,2):2===a&&ia(t,e,n,r,i,o):ta($o(t),e,n,r,i,o,1);break}}}function ea(t){var e=t.prev,n=t,r=t.next;if(fa(e,n,r)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(la(e.x,e.y,n.x,n.y,r.x,r.y,i.x,i.y)&&fa(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function na(t,e,n,r){var i=t.prev,o=t,a=t.next;if(fa(i,o,a)>=0)return!1;for(var s=i.xo.x?i.x>a.x?i.x:a.x:o.x>a.x?o.x:a.x,l=i.y>o.y?i.y>a.y?i.y:a.y:o.y>a.y?o.y:a.y,h=ua(s,u,e,n,r),f=ua(c,l,e,n,r),p=t.prevZ,d=t.nextZ;p&&p.z>=h&&d&&d.z<=f;){if(p!==t.prev&&p!==t.next&&la(i.x,i.y,o.x,o.y,a.x,a.y,p.x,p.y)&&fa(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,d!==t.prev&&d!==t.next&&la(i.x,i.y,o.x,o.y,a.x,a.y,d.x,d.y)&&fa(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&la(i.x,i.y,o.x,o.y,a.x,a.y,p.x,p.y)&&fa(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;d&&d.z<=f;){if(d!==t.prev&&d!==t.next&&la(i.x,i.y,o.x,o.y,a.x,a.y,d.x,d.y)&&fa(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function ra(t,e,n){var r=t;do{var i=r.prev,o=r.next.next;!pa(i,o)&&da(i,r,r.next,o)&&ma(i,o)&&ma(o,i)&&(e.push(i.i/n),e.push(r.i/n),e.push(o.i/n),_a(r),_a(r.next),r=t=o),r=r.next}while(r!==t);return $o(r)}function ia(t,e,n,r,i,o){var a=t;do{for(var s=a.next.next;s!==a.prev;){if(a.i!==s.i&&ha(a,s)){var u=ya(a,s);return a=$o(a,a.next),u=$o(u,u.next),ta(a,e,n,r,i,o),void ta(u,e,n,r,i,o)}s=s.next}a=a.next}while(a!==t)}function oa(t,e){return t.x-e.x}function aa(t,e){if(e=function(t,e){var n,r=e,i=t.x,o=t.y,a=-1/0;do{if(o<=r.y&&o>=r.next.y&&r.next.y!==r.y){var s=r.x+(o-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=i&&s>a){if(a=s,s===i){if(o===r.y)return r;if(o===r.next.y)return r.next}n=r.x=r.x&&r.x>=l&&i!==r.x&&la(on.x||r.x===n.x&&sa(n,r)))&&(n=r,f=u)),r=r.next}while(r!==c);return n}(t,e)){var n=ya(e,t);$o(n,n.next)}}function sa(t,e){return fa(t.prev,t,e.prev)<0&&fa(e.next,t,t.next)<0}function ua(t,e,n,r,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-r)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function ca(t){var e=t,n=t;do{(e.x=0&&(t-a)*(r-s)-(n-a)*(e-s)>=0&&(n-a)*(o-s)-(i-a)*(r-s)>=0}function ha(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&da(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(ma(t,e)&&ma(e,t)&&function(t,e){var n=t,r=!1,i=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&i<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==t);return r}(t,e)&&(fa(t.prev,t,e.prev)||fa(t,e.prev,e))||pa(t,e)&&fa(t.prev,t,t.next)>0&&fa(e.prev,e,e.next)>0)}function fa(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function pa(t,e){return t.x===e.x&&t.y===e.y}function da(t,e,n,r){var i=ga(fa(t,e,n)),o=ga(fa(t,e,r)),a=ga(fa(n,r,t)),s=ga(fa(n,r,e));return i!==o&&a!==s||!(0!==i||!Aa(t,n,e))||!(0!==o||!Aa(t,r,e))||!(0!==a||!Aa(n,t,r))||!(0!==s||!Aa(n,e,r))}function Aa(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function ga(t){return t>0?1:t<0?-1:0}function ma(t,e){return fa(t.prev,t,t.next)<0?fa(t,e,t.next)>=0&&fa(t,t.prev,e)>=0:fa(t,e,t.prev)<0||fa(t,t.next,e)<0}function ya(t,e){var n=new ba(t.i,t.x,t.y),r=new ba(e.i,e.x,e.y),i=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=i,i.prev=n,r.next=n,n.prev=r,o.next=r,r.prev=o,r}function va(t,e,n,r){var i=new ba(t,e,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function _a(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function ba(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function xa(t,e,n,r){for(var i=0,o=e,a=n-r;or;){if(i-r>600){var a=i-r+1,s=n-r+1,u=Math.log(a),c=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*c*(a-c)/a)*(s-a/2<0?-1:1);t(e,n,Math.max(r,Math.floor(n-s*c/a+l)),Math.min(i,Math.floor(n+(a-s)*c/a+l)),o)}var h=e[n],f=r,p=i;for(Ea(e,r,n),o(e[i],h)>0&&Ea(e,r,i);f0;)p--}0===o(e[r],h)?Ea(e,r,p):Ea(e,++p,i),p<=n&&(r=p+1),n<=p&&(i=p-1)}}(t,e,n||0,r||t.length-1,i||Oa)}function Ea(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function Oa(t,e){return te?1:0}function Sa(t,e){var n=t.length;if(n<=1)return[t];for(var r,i,o=[],a=0;a1)for(var u=0;u0&&(r+=t[i-1].length,n.holes.push(r))}return n},Zo.default=Qo;var Ma=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new si,this.indexArray=new wi,this.indexArray2=new Ei,this.programConfigurations=new so(Jo,t.layers,t.zoom),this.segments=new Ni,this.segments2=new Ni,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};Ma.prototype.populate=function(t,e){this.hasPattern=Ca("fill",this.layers,e);for(var n=this.layers[0].layout.get("fill-sort-key"),r=[],i=0,o=t;i>3}if(o--,1===r||2===r)a+=t.readSVarint(),s+=t.readSVarint(),1===r&&(e&&u.push(e),e=[]),e.push(new i(a,s));else{if(7!==r)throw new Error("unknown command "+r);e&&e.push(e[0].clone())}}return e&&u.push(e),u},Da.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,n=1,r=0,i=0,o=0,a=1/0,s=-1/0,u=1/0,c=-1/0;t.pos>3}if(r--,1===n||2===n)(i+=t.readSVarint())s&&(s=i),(o+=t.readSVarint())c&&(c=o);else if(7!==n)throw new Error("unknown command "+n)}return[a,u,s,c]},Da.prototype.toGeoJSON=function(t,e,n){var r,i,o=this.extent*Math.pow(2,n),a=this.extent*t,s=this.extent*e,u=this.loadGeometry(),c=Da.types[this.type];function l(t){for(var e=0;e>3;e=1===r?t.readString():2===r?t.readFloat():3===r?t.readDouble():4===r?t.readVarint64():5===r?t.readVarint():6===r?t.readSVarint():7===r?t.readBoolean():null}return e}(n))}function Ga(t,e,n){if(3===t){var r=new za(n,n.readVarint()+n.pos);r.length&&(e[r.name]=r)}}Ua.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new La(this._pbf,e,this.extent,this._keys,this._values)};var Va={VectorTile:function(t,e){this.layers=t.readFields(Ga,{},e)},VectorTileFeature:La,VectorTileLayer:za},Ha=Va.VectorTileFeature.types,Wa=Math.pow(2,13);function qa(t,e,n,r,i,o,a,s){t.emplaceBack(e,n,2*Math.floor(r*Wa)+a,i*Wa*2,o*Wa*2,Math.round(s))}var Xa=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new ci,this.indexArray=new wi,this.programConfigurations=new so(ka,t.layers,t.zoom),this.segments=new Ni,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function Ja(t,e){return t.x===e.x&&(t.x<0||t.x>lo)||t.y===e.y&&(t.y<0||t.y>lo)}function Za(t){return t.every((function(t){return t.x<0}))||t.every((function(t){return t.x>lo}))||t.every((function(t){return t.y<0}))||t.every((function(t){return t.y>lo}))}Xa.prototype.populate=function(t,e){this.features=[],this.hasPattern=Ca("fill-extrusion",this.layers,e);for(var n=0,r=t;n=1){var m=p[A-1];if(!Ja(g,m)){l.vertexLength+4>Ni.MAX_VERTEX_ARRAY_LENGTH&&(l=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var y=g.sub(m)._perp()._unit(),v=m.dist(g);d+v>32768&&(d=0),qa(this.layoutVertexArray,g.x,g.y,y.x,y.y,0,0,d),qa(this.layoutVertexArray,g.x,g.y,y.x,y.y,0,1,d),d+=v,qa(this.layoutVertexArray,m.x,m.y,y.x,y.y,0,0,d),qa(this.layoutVertexArray,m.x,m.y,y.x,y.y,0,1,d);var _=l.vertexLength;this.indexArray.emplaceBack(_,_+2,_+1),this.indexArray.emplaceBack(_+1,_+2,_+3),l.vertexLength+=4,l.primitiveLength+=2}}}}if(l.vertexLength+s>Ni.MAX_VERTEX_ARRAY_LENGTH&&(l=this.segments.prepareSegment(s,this.layoutVertexArray,this.indexArray)),"Polygon"===Ha[t.type]){for(var b=[],x=[],w=l.vertexLength,E=0,O=a;E=2&&t[l-1].equals(t[l-2]);)l--;for(var h=0;h0;if(O&&v>h){var T=f.dist(A);if(T>2*p){var C=f.sub(f.sub(A)._mult(p/T)._round());this.updateDistance(A,C),this.addCurrentVertex(C,m,0,0,d),A=C}}var P=A&&g,M=P?n:c?"butt":r;if(P&&"round"===M&&(wi&&(M="bevel"),"bevel"===M&&(w>2&&(M="flipbevel"),w100)_=y.mult(-1);else{var I=w*m.add(y).mag()/m.sub(y).mag();_._perp()._mult(I*(S?-1:1))}this.addCurrentVertex(f,_,0,0,d),this.addCurrentVertex(f,_.mult(-1),0,0,d)}else if("bevel"===M||"fakeround"===M){var B=-Math.sqrt(w*w-1),R=S?B:0,k=S?0:B;if(A&&this.addCurrentVertex(f,m,R,k,d),"fakeround"===M)for(var L=Math.round(180*E/Math.PI/20),D=1;D2*p){var G=f.add(g.sub(f)._mult(p/N)._round());this.updateDistance(f,G),this.addCurrentVertex(G,y,0,0,d),f=G}}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,a,s)}},is.prototype.addCurrentVertex=function(t,e,n,r,i,o){void 0===o&&(o=!1);var a=e.x+e.y*n,s=e.y-e.x*n,u=-e.x+e.y*r,c=-e.y-e.x*r;this.addHalfVertex(t,a,s,o,!1,n,i),this.addHalfVertex(t,u,c,o,!0,-r,i),this.distance>rs/2&&0===this.totalDistance&&(this.distance=0,this.addCurrentVertex(t,e,n,r,i,o))},is.prototype.addHalfVertex=function(t,e,n,r,i,o,a){var s=t.x,u=t.y,c=.5*this.scaledDistance;this.layoutVertexArray.emplaceBack((s<<1)+(r?1:0),(u<<1)+(i?1:0),Math.round(63*e)+128,Math.round(63*n)+128,1+(0===o?0:o<0?-1:1)|(63&c)<<2,c>>6);var l=a.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,this.e2,l),a.primitiveLength++),i?this.e2=l:this.e1=l},is.prototype.updateDistance=function(t,e){this.distance+=t.dist(e),this.scaledDistance=this.totalDistance>0?(this.clipStart+(this.clipEnd-this.clipStart)*this.distance/this.totalDistance)*(rs-1):this.distance},dr("LineBucket",is,{omit:["layers","patternFeatures"]});var os=new ti({"line-cap":new Zr(Tt.layout_line["line-cap"]),"line-join":new Qr(Tt.layout_line["line-join"]),"line-miter-limit":new Zr(Tt.layout_line["line-miter-limit"]),"line-round-limit":new Zr(Tt.layout_line["line-round-limit"]),"line-sort-key":new Qr(Tt.layout_line["line-sort-key"])}),as={paint:new ti({"line-opacity":new Qr(Tt.paint_line["line-opacity"]),"line-color":new Qr(Tt.paint_line["line-color"]),"line-translate":new Zr(Tt.paint_line["line-translate"]),"line-translate-anchor":new Zr(Tt.paint_line["line-translate-anchor"]),"line-width":new Qr(Tt.paint_line["line-width"]),"line-gap-width":new Qr(Tt.paint_line["line-gap-width"]),"line-offset":new Qr(Tt.paint_line["line-offset"]),"line-blur":new Qr(Tt.paint_line["line-blur"]),"line-dasharray":new Yr(Tt.paint_line["line-dasharray"]),"line-pattern":new Kr(Tt.paint_line["line-pattern"]),"line-gradient":new $r(Tt.paint_line["line-gradient"])}),layout:os},ss=new(function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(e,n){return n=new Ur(Math.floor(n.zoom),{now:n.now,fadeDuration:n.fadeDuration,zoomHistory:n.zoomHistory,transition:n.transition}),t.prototype.possiblyEvaluate.call(this,e,n)},e.prototype.evaluate=function(e,n,r,i){return n=h({},n,{zoom:Math.floor(n.zoom)}),t.prototype.evaluate.call(this,e,n,r,i)},e}(Qr))(as.paint.properties["line-width"].specification);ss.useIntegerZoom=!0;var us=function(t){function e(e){t.call(this,e,as)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){"line-gradient"===t&&this._updateGradient()},e.prototype._updateGradient=function(){var t=this._transitionablePaint._values["line-gradient"].value.expression;this.gradient=Ho(t,"lineProgress"),this.gradientTexture=null},e.prototype.recalculate=function(e,n){t.prototype.recalculate.call(this,e,n),this.paint._values["line-floorwidth"]=ss.possiblyEvaluate(this._transitioningPaint._values["line-width"].value,e)},e.prototype.createBucket=function(t){return new is(t)},e.prototype.queryRadius=function(t){var e=t,n=cs(To("line-width",this,e),To("line-gap-width",this,e)),r=To("line-offset",this,e);return n/2+Math.abs(r)+Co(this.paint.get("line-translate"))},e.prototype.queryIntersectsFeature=function(t,e,n,r,o,a,s){var u=Po(t,this.paint.get("line-translate"),this.paint.get("line-translate-anchor"),a.angle,s),c=s/2*cs(this.paint.get("line-width").evaluate(e,n),this.paint.get("line-gap-width").evaluate(e,n)),l=this.paint.get("line-offset").evaluate(e,n);return l&&(r=function(t,e){for(var n=[],r=new i(0,0),o=0;o=3)for(var o=0;o0?e+2*t:t}var ls=oi([{name:"a_pos_offset",components:4,type:"Int16"},{name:"a_data",components:4,type:"Uint16"},{name:"a_pixeloffset",components:4,type:"Int16"}],4),hs=oi([{name:"a_projected_pos",components:3,type:"Float32"}],4),fs=(oi([{name:"a_fade_opacity",components:1,type:"Uint32"}],4),oi([{name:"a_placed",components:2,type:"Uint8"},{name:"a_shift",components:2,type:"Float32"}])),ps=(oi([{type:"Int16",name:"anchorPointX"},{type:"Int16",name:"anchorPointY"},{type:"Int16",name:"x1"},{type:"Int16",name:"y1"},{type:"Int16",name:"x2"},{type:"Int16",name:"y2"},{type:"Uint32",name:"featureIndex"},{type:"Uint16",name:"sourceLayerIndex"},{type:"Uint16",name:"bucketIndex"},{type:"Int16",name:"radius"},{type:"Int16",name:"signedDistanceFromAnchor"}]),oi([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4)),ds=oi([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4);function As(t,e,n){return t.sections.forEach((function(t){t.text=function(t,e,n){var r=e.layout.get("text-transform").evaluate(n,{});return"uppercase"===r?t=t.toLocaleUpperCase():"lowercase"===r&&(t=t.toLocaleLowerCase()),zr.applyArabicShaping&&(t=zr.applyArabicShaping(t)),t}(t.text,e,n)})),t}oi([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Uint16",name:"glyphStartIndex"},{type:"Uint16",name:"numGlyphs"},{type:"Uint32",name:"vertexStartIndex"},{type:"Uint32",name:"lineStartIndex"},{type:"Uint32",name:"lineLength"},{type:"Uint16",name:"segment"},{type:"Uint16",name:"lowerSize"},{type:"Uint16",name:"upperSize"},{type:"Float32",name:"lineOffsetX"},{type:"Float32",name:"lineOffsetY"},{type:"Uint8",name:"writingMode"},{type:"Uint8",name:"placedOrientation"},{type:"Uint8",name:"hidden"},{type:"Uint32",name:"crossTileID"},{type:"Int16",name:"associatedIconIndex"}]),oi([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Int16",name:"rightJustifiedTextSymbolIndex"},{type:"Int16",name:"centerJustifiedTextSymbolIndex"},{type:"Int16",name:"leftJustifiedTextSymbolIndex"},{type:"Int16",name:"verticalPlacedTextSymbolIndex"},{type:"Int16",name:"placedIconSymbolIndex"},{type:"Int16",name:"verticalPlacedIconSymbolIndex"},{type:"Uint16",name:"key"},{type:"Uint16",name:"textBoxStartIndex"},{type:"Uint16",name:"textBoxEndIndex"},{type:"Uint16",name:"verticalTextBoxStartIndex"},{type:"Uint16",name:"verticalTextBoxEndIndex"},{type:"Uint16",name:"iconBoxStartIndex"},{type:"Uint16",name:"iconBoxEndIndex"},{type:"Uint16",name:"verticalIconBoxStartIndex"},{type:"Uint16",name:"verticalIconBoxEndIndex"},{type:"Uint16",name:"featureIndex"},{type:"Uint16",name:"numHorizontalGlyphVertices"},{type:"Uint16",name:"numVerticalGlyphVertices"},{type:"Uint16",name:"numIconVertices"},{type:"Uint16",name:"numVerticalIconVertices"},{type:"Uint32",name:"crossTileID"},{type:"Float32",name:"textBoxScale"},{type:"Float32",components:2,name:"textOffset"}]),oi([{type:"Float32",name:"offsetX"}]),oi([{type:"Int16",name:"x"},{type:"Int16",name:"y"},{type:"Int16",name:"tileUnitDistanceFromAnchor"}]);var gs={"!":"︕","#":"#",$:"$","%":"%","&":"&","(":"︵",")":"︶","*":"*","+":"+",",":"︐","-":"︲",".":"・","/":"/",":":"︓",";":"︔","<":"︿","=":"=",">":"﹀","?":"︖","@":"@","[":"﹇","\\":"\","]":"﹈","^":"^",_:"︳","`":"`","{":"︷","|":"―","}":"︸","~":"~","¢":"¢","£":"£","¥":"¥","¦":"¦","¬":"¬","¯":" ̄","–":"︲","—":"︱","‘":"﹃","’":"﹄","“":"﹁","”":"﹂","…":"︙","‧":"・","₩":"₩","、":"︑","。":"︒","〈":"︿","〉":"﹀","《":"︽","》":"︾","「":"﹁","」":"﹂","『":"﹃","』":"﹄","【":"︻","】":"︼","〔":"︹","〕":"︺","〖":"︗","〗":"︘","!":"︕","(":"︵",")":"︶",",":"︐","-":"︲",".":"・",":":"︓",";":"︔","<":"︿",">":"﹀","?":"︖","[":"﹇","]":"﹈","_":"︳","{":"︷","|":"―","}":"︸","⦅":"︵","⦆":"︶","。":"︒","「":"﹁","」":"﹂"},ms=function(t,e,n,r,i){var o,a,s=8*i-r-1,u=(1<>1,l=-7,h=n?i-1:0,f=n?-1:1,p=t[e+h];for(h+=f,o=p&(1<<-l)-1,p>>=-l,l+=s;l>0;o=256*o+t[e+h],h+=f,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=r;l>0;a=256*a+t[e+h],h+=f,l-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),o-=c}return(p?-1:1)*a*Math.pow(2,o-r)},ys=function(t,e,n,r,i,o){var a,s,u,c=8*o-i-1,l=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:o-1,d=r?1:-1,A=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),(e+=a+h>=1?f/u:f*Math.pow(2,1-h))*u>=2&&(a++,u/=2),a+h>=l?(s=0,a=l):a+h>=1?(s=(e*u-1)*Math.pow(2,i),a+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;t[n+p]=255&s,p+=d,s/=256,i-=8);for(a=a<0;t[n+p]=255&a,p+=d,a/=256,c-=8);t[n+p-d]|=128*A},vs=_s;function _s(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}_s.Varint=0,_s.Fixed64=1,_s.Bytes=2,_s.Fixed32=5;var bs="undefined"==typeof TextDecoder?null:new TextDecoder("utf8");function xs(t){return t.type===_s.Bytes?t.readVarint()+t.pos:t.pos+1}function ws(t,e,n){return n?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function Es(t,e,n){var r=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));n.realloc(r);for(var i=n.pos-1;i>=t;i--)n.buf[i+r]=n.buf[i]}function Os(t,e){for(var n=0;n>>8,t[n+2]=e>>>16,t[n+3]=e>>>24}function Ds(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}function js(t,e,n){1===t&&n.readMessage(Fs,e)}function Fs(t,e,n){if(3===t){var r=n.readMessage(zs,{}),i=r.id,o=r.bitmap,a=r.width,s=r.height,u=r.left,c=r.top,l=r.advance;e.push({id:i,bitmap:new No({width:a+6,height:s+6},o),metrics:{width:a,height:s,left:u,top:c,advance:l}})}}function zs(t,e,n){1===t?e.id=n.readVarint():2===t?e.bitmap=n.readBytes():3===t?e.width=n.readVarint():4===t?e.height=n.readVarint():5===t?e.left=n.readSVarint():6===t?e.top=n.readSVarint():7===t&&(e.advance=n.readVarint())}function Us(t){for(var e=0,n=0,r=0,i=t;r=0;f--){var p=a[f];if(!(h.w>p.w||h.h>p.h)){if(h.x=p.x,h.y=p.y,u=Math.max(u,h.y+h.h),s=Math.max(s,h.x+h.w),h.w===p.w&&h.h===p.h){var d=a.pop();f>3,o=this.pos;this.type=7&r,t(i,e,this),this.pos===o&&this.skip(r)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=ks(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=Ds(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=ks(this.buf,this.pos)+4294967296*ks(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=ks(this.buf,this.pos)+4294967296*Ds(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=ms(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=ms(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,n,r=this.buf;return e=127&(n=r[this.pos++]),n<128?e:(e|=(127&(n=r[this.pos++]))<<7,n<128?e:(e|=(127&(n=r[this.pos++]))<<14,n<128?e:(e|=(127&(n=r[this.pos++]))<<21,n<128?e:function(t,e,n){var r,i,o=n.buf;if(r=(112&(i=o[n.pos++]))>>4,i<128)return ws(t,r,e);if(r|=(127&(i=o[n.pos++]))<<3,i<128)return ws(t,r,e);if(r|=(127&(i=o[n.pos++]))<<10,i<128)return ws(t,r,e);if(r|=(127&(i=o[n.pos++]))<<17,i<128)return ws(t,r,e);if(r|=(127&(i=o[n.pos++]))<<24,i<128)return ws(t,r,e);if(r|=(1&(i=o[n.pos++]))<<31,i<128)return ws(t,r,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(n=r[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&bs?function(t,e,n){return bs.decode(t.subarray(e,n))}(this.buf,e,t):function(t,e,n){for(var r="",i=e;i239?4:u>223?3:u>191?2:1;if(i+l>n)break;1===l?u<128&&(c=u):2===l?128==(192&(o=t[i+1]))&&(c=(31&u)<<6|63&o)<=127&&(c=null):3===l?(o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&((c=(15&u)<<12|(63&o)<<6|63&a)<=2047||c>=55296&&c<=57343)&&(c=null)):4===l&&(o=t[i+1],a=t[i+2],s=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&((c=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s)<=65535||c>=1114112)&&(c=null)),null===c?(c=65533,l=1):c>65535&&(c-=65536,r+=String.fromCharCode(c>>>10&1023|55296),c=56320|1023&c),r+=String.fromCharCode(c),i+=l}return r}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==_s.Bytes)return t.push(this.readVarint(e));var n=xs(this);for(t=t||[];this.pos127;);else if(e===_s.Bytes)this.pos=this.readVarint()+this.pos;else if(e===_s.Fixed32)this.pos+=4;else{if(e!==_s.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e268435455||t<0?function(t,e){var n,r;if(t>=0?(n=t%4294967296|0,r=t/4294967296|0):(r=~(-t/4294967296),4294967295^(n=~(-t%4294967296))?n=n+1|0:(n=0,r=r+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,n){n.buf[n.pos++]=127&t|128,t>>>=7,n.buf[n.pos++]=127&t|128,t>>>=7,n.buf[n.pos++]=127&t|128,t>>>=7,n.buf[n.pos++]=127&t|128,t>>>=7,n.buf[n.pos]=127&t}(n,0,e),function(t,e){var n=(7&t)<<4;e.buf[e.pos++]|=n|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}(r,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,n){for(var r,i,o=0;o55295&&r<57344){if(!i){r>56319||o+1===e.length?(t[n++]=239,t[n++]=191,t[n++]=189):i=r;continue}if(r<56320){t[n++]=239,t[n++]=191,t[n++]=189,i=r;continue}r=i-55296<<10|r-56320|65536,i=null}else i&&(t[n++]=239,t[n++]=191,t[n++]=189,i=null);r<128?t[n++]=r:(r<2048?t[n++]=r>>6|192:(r<65536?t[n++]=r>>12|224:(t[n++]=r>>18|240,t[n++]=r>>12&63|128),t[n++]=r>>6&63|128),t[n++]=63&r|128)}return n}(this.buf,t,this.pos);var n=this.pos-e;n>=128&&Es(e,n,this),this.pos=e-1,this.writeVarint(n),this.pos+=n},writeFloat:function(t){this.realloc(4),ys(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),ys(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var n=0;n=128&&Es(n,r,this),this.pos=n-1,this.writeVarint(r),this.pos+=r},writeMessage:function(t,e,n){this.writeTag(t,_s.Bytes),this.writeRawMessage(e,n)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,Os,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,Ss,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,Ps,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,Ts,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,Cs,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,Ms,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,Is,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,Bs,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,Rs,e)},writeBytesField:function(t,e){this.writeTag(t,_s.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,_s.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,_s.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,_s.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,_s.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,_s.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,_s.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,_s.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,_s.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,_s.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var Ns=function(t,e){var n=e.pixelRatio,r=e.version,i=e.stretchX,o=e.stretchY,a=e.content;this.paddedRect=t,this.pixelRatio=n,this.stretchX=i,this.stretchY=o,this.content=a,this.version=r},Gs={tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};Gs.tl.get=function(){return[this.paddedRect.x+1,this.paddedRect.y+1]},Gs.br.get=function(){return[this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]},Gs.tlbr.get=function(){return this.tl.concat(this.br)},Gs.displaySize.get=function(){return[(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]},Object.defineProperties(Ns.prototype,Gs);var Vs=function(t,e){var n={},r={};this.haveRenderCallbacks=[];var i=[];this.addImages(t,n,i),this.addImages(e,r,i);var o=Us(i),a=o.w,s=o.h,u=new Go({width:a||1,height:s||1});for(var c in t){var l=t[c],h=n[c].paddedRect;Go.copy(l.data,u,{x:0,y:0},{x:h.x+1,y:h.y+1},l.data)}for(var f in e){var p=e[f],d=r[f].paddedRect,A=d.x+1,g=d.y+1,m=p.data.width,y=p.data.height;Go.copy(p.data,u,{x:0,y:0},{x:A,y:g},p.data),Go.copy(p.data,u,{x:0,y:y-1},{x:A,y:g-1},{width:m,height:1}),Go.copy(p.data,u,{x:0,y:0},{x:A,y:g+y},{width:m,height:1}),Go.copy(p.data,u,{x:m-1,y:0},{x:A-1,y:g},{width:1,height:y}),Go.copy(p.data,u,{x:0,y:0},{x:A+m,y:g},{width:1,height:y})}this.image=u,this.iconPositions=n,this.patternPositions=r};Vs.prototype.addImages=function(t,e,n){for(var r in t){var i=t[r],o={x:0,y:0,w:i.data.width+2,h:i.data.height+2};n.push(o),e[r]=new Ns(o,i),i.hasRenderCallback&&this.haveRenderCallbacks.push(r)}},Vs.prototype.patchUpdatedImages=function(t,e){for(var n in t.dispatchRenderCallbacks(this.haveRenderCallbacks),t.updatedImages)this.patchUpdatedImage(this.iconPositions[n],t.getImage(n),e),this.patchUpdatedImage(this.patternPositions[n],t.getImage(n),e)},Vs.prototype.patchUpdatedImage=function(t,e,n){if(t&&e&&t.version!==e.version){t.version=e.version;var r=t.tl,i=r[0],o=r[1];n.update(e.data,void 0,{x:i,y:o})}},dr("ImagePosition",Ns),dr("ImageAtlas",Vs);var Hs={horizontal:1,vertical:2,horizontalOnly:3},Ws=function(){this.scale=1,this.fontStack="",this.imageName=null};Ws.forText=function(t,e){var n=new Ws;return n.scale=t||1,n.fontStack=e,n},Ws.forImage=function(t){var e=new Ws;return e.imageName=t,e};var qs=function(){this.text="",this.sectionIndex=[],this.sections=[],this.imageSectionID=null};function Xs(t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,A){var g,m=qs.fromFeature(t,i);h===Hs.vertical&&m.verticalizePunctuation();var y=zr.processBidirectionalText,v=zr.processStyledBidirectionalText;if(y&&1===m.sections.length){g=[];for(var _=0,b=y(m.toString(),tu(m,c,o,e,r,p,d));_0&&F>O&&(O=F)}else{var z=n[T.fontStack],U=z&&z[P];if(U&&U.rect)B=U.rect,I=U.metrics;else{var N=e[T.fontStack],G=N&&N[P];if(!G)continue;I=G.metrics}M=24*(b-T.scale)}L?(t.verticalizable=!0,E.push({glyph:P,imageName:R,x:f,y:p+M,vertical:L,scale:T.scale,fontStack:T.fontStack,sectionIndex:C,metrics:I,rect:B}),f+=k*T.scale+c):(E.push({glyph:P,imageName:R,x:f,y:p+M,vertical:L,scale:T.scale,fontStack:T.fontStack,sectionIndex:C,metrics:I,rect:B}),f+=I.advance*T.scale+c)}if(0!==E.length){var V=f-c;d=Math.max(V,d),nu(E,0,E.length-1,g,O)}f=0;var H=o*b+O;w.lineOffset=Math.max(O,x),p+=H,A=Math.max(H,A),++m}else p+=o,++m}var W,q=p- -17,X=eu(a),J=X.horizontalAlign,Z=X.verticalAlign;(function(t,e,n,r,i,o,a,s,u){var c,l=(e-n)*i;c=o!==a?-s*r- -17:(-r*u+.5)*a;for(var h=0,f=t;h=0&&r>=t&&Js[this.text.charCodeAt(r)];r--)n--;this.text=this.text.substring(t,n),this.sectionIndex=this.sectionIndex.slice(t,n)},qs.prototype.substring=function(t,e){var n=new qs;return n.text=this.text.substring(t,e),n.sectionIndex=this.sectionIndex.slice(t,e),n.sections=this.sections,n},qs.prototype.toString=function(){return this.text},qs.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce((function(e,n){return Math.max(e,t.sections[n].scale)}),0)},qs.prototype.addTextSection=function(t,e){this.text+=t.text,this.sections.push(Ws.forText(t.scale,t.fontStack||e));for(var n=this.sections.length-1,r=0;r=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID)};var Js={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},Zs={};function Qs(t,e,n,r,i,o){if(e.imageName){var a=r[e.imageName];return a?a.displaySize[0]*e.scale*24/o+i:0}var s=n[e.fontStack],u=s&&s[t];return u?u.metrics.advance*e.scale+i:0}function Ks(t,e,n,r){var i=Math.pow(t-e,2);return r?t=0,h=0,f=0;f-n/2;){if(--a<0)return!1;s-=t[a].dist(o),o=t[a]}s+=t[a].dist(t[a+1]),a++;for(var u=[],c=0;sr;)c-=u.shift().angleDelta;if(c>i)return!1;a++,s+=h.dist(f)}return!0}function hu(t){for(var e=0,n=0;nc){var d=(c-u)/p,A=we(h.x,f.x,d),g=we(h.y,f.y,d),m=new iu(A,g,f.angleTo(h),l);return m._round(),!a||lu(t,m,s,a,e)?m:void 0}u+=p}}function Au(t,e,n,r,i,o,a,s,u){var c=fu(r,o,a),l=pu(r,i),h=l*a,f=0===t[0].x||t[0].x===u||0===t[0].y||t[0].y===u;return e-h=0&&b=0&&x=0&&p+l<=h){var w=new iu(b,x,v,A);w._round(),i&&!lu(e,w,a,i,o)||d.push(w)}}f+=y}return u||d.length||s||(d=t(e,f/2,r,i,o,a,s,!0,c)),d}(t,f?e/2*s%e:(l/2+2*o)*a*s%e,e,c,n,h,f,!1,u)}function gu(t,e,n,r){var o=[],a=t.image,s=a.pixelRatio,u=a.paddedRect.w-2,c=a.paddedRect.h-2,l=t.right-t.left,h=t.bottom-t.top,f=a.stretchX||[[0,u]],p=a.stretchY||[[0,c]],d=function(t,e){return t+e[1]-e[0]},A=f.reduce(d,0),g=p.reduce(d,0),m=u-A,y=c-g,v=0,_=A,b=0,x=g,w=0,E=m,O=0,S=y;if(a.content&&r){var T=a.content;v=mu(f,0,T[0]),b=mu(p,0,T[1]),_=mu(f,T[0],T[2]),x=mu(p,T[1],T[3]),w=T[0]-v,O=T[1]-b,E=T[2]-T[0]-_,S=T[3]-T[1]-x}var C=function(r,o,u,c){var f=vu(r.stretch-v,_,l,t.left),p=_u(r.fixed-w,E,r.stretch,A),d=vu(o.stretch-b,x,h,t.top),m=_u(o.fixed-O,S,o.stretch,g),y=vu(u.stretch-v,_,l,t.left),T=_u(u.fixed-w,E,u.stretch,A),C=vu(c.stretch-b,x,h,t.top),P=_u(c.fixed-O,S,c.stretch,g),M=new i(f,d),I=new i(y,d),B=new i(y,C),R=new i(f,C),k=new i(p/s,m/s),L=new i(T/s,P/s),D=e*Math.PI/180;if(D){var j=Math.sin(D),F=Math.cos(D),z=[F,-j,j,F];M._matMult(z),I._matMult(z),R._matMult(z),B._matMult(z)}var U=r.stretch+r.fixed,N=u.stretch+u.fixed,G=o.stretch+o.fixed,V=c.stretch+c.fixed;return{tl:M,tr:I,bl:R,br:B,tex:{x:a.paddedRect.x+1+U,y:a.paddedRect.y+1+G,w:N-U,h:V-G},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:k,pixelOffsetBR:L,minFontScaleX:E/s/l,minFontScaleY:S/s/h,isSDF:n}};if(r&&(a.stretchX||a.stretchY))for(var P=yu(f,m,A),M=yu(p,y,g),I=0;I0&&(y=Math.max(10*u,y),this._addLineCollisionCircles(t,e,n,n.segment,v,y,r,o,a,h))}else{if(f){var _=new i(A,p),b=new i(g,p),x=new i(A,d),w=new i(g,d),E=f*Math.PI/180;_._rotate(E),b._rotate(E),x._rotate(E),w._rotate(E),A=Math.min(_.x,b.x,x.x,w.x),g=Math.max(_.x,b.x,x.x,w.x),p=Math.min(_.y,b.y,x.y,w.y),d=Math.max(_.y,b.y,x.y,w.y)}t.emplaceBack(n.x,n.y,A,p,g,d,r,o,a,0,0)}this.boxEndIndex=t.length};bu.prototype._addLineCollisionCircles=function(t,e,n,r,i,o,a,s,u,c){var l=o/2,h=Math.floor(i/l)||1,f=1+.4*Math.log(c)/Math.LN2,p=Math.floor(h*f/2),d=-o/2,A=n,g=r+1,m=d,y=-i/2,v=y-i/4;do{if(--g<0){if(m>y)return;g=0;break}m-=e[g].dist(A),A=e[g]}while(m>v);for(var _=e[g].dist(e[g+1]),b=-p;bi&&(w+=x-i),!(w=e.length)return;_=e[g].dist(e[g+1])}var E=w-m,O=e[g],S=e[g+1].sub(O)._unit()._mult(E)._add(O)._round(),T=Math.abs(w-d)0)for(var n=(this.length>>1)-1;n>=0;n--)this._down(n)};function wu(t,e){return te?1:0}function Eu(t,e,n){void 0===e&&(e=1),void 0===n&&(n=!1);for(var r=1/0,o=1/0,a=-1/0,s=-1/0,u=t[0],c=0;ca)&&(a=l.x),(!c||l.y>s)&&(s=l.y)}var h=a-r,f=s-o,p=Math.min(h,f),d=p/2,A=new xu([],Ou);if(0===p)return new i(r,o);for(var g=r;gy.d||!y.d)&&(y=_,n&&console.log("found best %d after %d probes",Math.round(1e4*_.d)/1e4,v)),_.max-y.d<=e||(d=_.h/2,A.push(new Su(_.p.x-d,_.p.y-d,d,t)),A.push(new Su(_.p.x+d,_.p.y-d,d,t)),A.push(new Su(_.p.x-d,_.p.y+d,d,t)),A.push(new Su(_.p.x+d,_.p.y+d,d,t)),v+=4)}return n&&(console.log("num probes: "+v),console.log("best distance: "+y.d)),y.p}function Ou(t,e){return e.max-t.max}function Su(t,e,n,r){this.p=new i(t,e),this.h=n,this.d=function(t,e){for(var n=!1,r=1/0,i=0;it.y!=l.y>t.y&&t.x<(l.x-c.x)*(t.y-c.y)/(l.y-c.y)+c.x&&(n=!n),r=Math.min(r,wo(t,c,l))}return(n?1:-1)*Math.sqrt(r)}(this.p,r),this.max=this.d+this.h*Math.SQRT2}xu.prototype.push=function(t){this.data.push(t),this.length++,this._up(this.length-1)},xu.prototype.pop=function(){if(0!==this.length){var t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}},xu.prototype.peek=function(){return this.data[0]},xu.prototype._up=function(t){for(var e=this.data,n=this.compare,r=e[t];t>0;){var i=t-1>>1,o=e[i];if(n(r,o)>=0)break;e[t]=o,t=i}e[t]=r},xu.prototype._down=function(t){for(var e=this.data,n=this.compare,r=this.length>>1,i=e[t];t=0)break;e[t]=a,t=o}e[t]=i};var Tu=e((function(t){t.exports=function(t,e){var n,r,i,o,a,s,u,c;for(n=3&t.length,r=t.length-n,i=e,a=3432918353,s=461845907,c=0;c>>16)*a&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295)<<13|i>>>19))+((5*(i>>>16)&65535)<<16)&4294967295))+((58964+(o>>>16)&65535)<<16);switch(u=0,n){case 3:u^=(255&t.charCodeAt(c+2))<<16;case 2:u^=(255&t.charCodeAt(c+1))<<8;case 1:i^=u=(65535&(u=(u=(65535&(u^=255&t.charCodeAt(c)))*a+(((u>>>16)*a&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295}return i^=t.length,i=2246822507*(65535&(i^=i>>>16))+((2246822507*(i>>>16)&65535)<<16)&4294967295,i=3266489909*(65535&(i^=i>>>13))+((3266489909*(i>>>16)&65535)<<16)&4294967295,(i^=i>>>16)>>>0}})),Cu=e((function(t){t.exports=function(t,e){for(var n,r=t.length,i=e^r,o=0;r>=4;)n=1540483477*(65535&(n=255&t.charCodeAt(o)|(255&t.charCodeAt(++o))<<8|(255&t.charCodeAt(++o))<<16|(255&t.charCodeAt(++o))<<24))+((1540483477*(n>>>16)&65535)<<16),i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16)^(n=1540483477*(65535&(n^=n>>>24))+((1540483477*(n>>>16)&65535)<<16)),r-=4,++o;switch(r){case 3:i^=(255&t.charCodeAt(o+2))<<16;case 2:i^=(255&t.charCodeAt(o+1))<<8;case 1:i=1540483477*(65535&(i^=255&t.charCodeAt(o)))+((1540483477*(i>>>16)&65535)<<16)}return i=1540483477*(65535&(i^=i>>>13))+((1540483477*(i>>>16)&65535)<<16),(i^=i>>>15)>>>0}})),Pu=Tu,Mu=Tu,Iu=Cu;Pu.murmur3=Mu,Pu.murmur2=Iu;var Bu=Number.POSITIVE_INFINITY;function Ru(t,e){return e[1]!==Bu?function(t,e,n){var r=0,i=0;switch(e=Math.abs(e),n=Math.abs(n),t){case"top-right":case"top-left":case"top":i=n-7;break;case"bottom-right":case"bottom-left":case"bottom":i=7-n}switch(t){case"top-right":case"bottom-right":case"right":r=-e;break;case"top-left":case"bottom-left":case"left":r=e}return[r,i]}(t,e[0],e[1]):function(t,e){var n=0,r=0;e<0&&(e=0);var i=e/Math.sqrt(2);switch(t){case"top-right":case"top-left":r=i-7;break;case"bottom-right":case"bottom-left":r=7-i;break;case"bottom":r=7-e;break;case"top":r=e-7}switch(t){case"top-right":case"bottom-right":n=-i;break;case"top-left":case"bottom-left":n=i;break;case"left":n=e;break;case"right":n=-e}return[n,r]}(t,e[0])}function ku(t){switch(t){case"right":case"top-right":case"bottom-right":return"right";case"left":case"top-left":case"bottom-left":return"left"}return"center"}var Lu=32640;function Du(t,e,n,r,o,a,s,u,c,l,h,f,p,d){var A=function(t,e,n,r,o,a,s,u){for(var c=r.layout.get("text-rotate").evaluate(a,{})*Math.PI/180,l=[],h=0,f=e.positionedLines;hLu&&x(t.layerIds[0]+': Value for "text-size" is >= 255. Reduce your "text-size".'):"composite"===g.kind&&((m=[ou*d.compositeTextSizes[0].evaluate(s,{}),ou*d.compositeTextSizes[1].evaluate(s,{})])[0]>Lu||m[1]>Lu)&&x(t.layerIds[0]+': Value for "text-size" is >= 255. Reduce your "text-size".'),t.addSymbols(t.text,A,m,u,a,s,l,e,c.lineStartIndex,c.lineLength,p);for(var y=0,v=h;y=0;a--)if(r.dist(o[a])0)&&("constant"!==i.value.kind||i.value.value.length>0),u=("constant"!==a.value.kind||!!a.value.value)&&Object.keys(a.parameters).length>0,c=r.get("symbol-sort-key");if(this.features=[],s||u){for(var l=e.iconDependencies,h=e.glyphDependencies,f=e.availableImages,p=new Ur(this.zoom),d=0,A=t;d=0;for(var P=0,M=_.sections;P=0;s--)o[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s>0&&(i+=e[s-1].dist(e[s]));for(var u=0;u0;this.addCollisionDebugVertices(a,s,u,c,l?r?this.textCollisionCircle:this.iconCollisionCircle:r?this.textCollisionBox:this.iconCollisionBox,o.anchorPoint,n,l)}},qu.prototype.generateCollisionDebugBuffers=function(){for(var t=0;t0},qu.prototype.hasIconData=function(){return this.icon.segments.get().length>0},qu.prototype.hasTextCollisionBoxData=function(){return this.textCollisionBox.segments.get().length>0},qu.prototype.hasIconCollisionBoxData=function(){return this.iconCollisionBox.segments.get().length>0},qu.prototype.hasTextCollisionCircleData=function(){return this.textCollisionCircle.segments.get().length>0},qu.prototype.hasIconCollisionCircleData=function(){return this.iconCollisionCircle.segments.get().length>0},qu.prototype.addIndicesForPlacedSymbol=function(t,e){for(var n=t.placedSymbolArray.get(e),r=n.vertexStartIndex+4*n.numGlyphs,i=n.vertexStartIndex;i1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var n=0,r=this.symbolInstanceIndexes;n=0&&r.indexOf(t)===n&&e.addIndicesForPlacedSymbol(e.text,t)})),o.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,o.verticalPlacedTextSymbolIndex),o.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,o.placedIconSymbolIndex),o.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,o.verticalPlacedIconSymbolIndex)}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}},dr("SymbolBucket",qu,{omit:["layers","collisionBoxArray","features","compareText"]}),qu.MAX_GLYPHS=65535,qu.addDynamicAttributes=Gu;var Xu=new ti({"symbol-placement":new Zr(Tt.layout_symbol["symbol-placement"]),"symbol-spacing":new Zr(Tt.layout_symbol["symbol-spacing"]),"symbol-avoid-edges":new Zr(Tt.layout_symbol["symbol-avoid-edges"]),"symbol-sort-key":new Qr(Tt.layout_symbol["symbol-sort-key"]),"symbol-z-order":new Zr(Tt.layout_symbol["symbol-z-order"]),"icon-allow-overlap":new Zr(Tt.layout_symbol["icon-allow-overlap"]),"icon-ignore-placement":new Zr(Tt.layout_symbol["icon-ignore-placement"]),"icon-optional":new Zr(Tt.layout_symbol["icon-optional"]),"icon-rotation-alignment":new Zr(Tt.layout_symbol["icon-rotation-alignment"]),"icon-size":new Qr(Tt.layout_symbol["icon-size"]),"icon-text-fit":new Zr(Tt.layout_symbol["icon-text-fit"]),"icon-text-fit-padding":new Zr(Tt.layout_symbol["icon-text-fit-padding"]),"icon-image":new Qr(Tt.layout_symbol["icon-image"]),"icon-rotate":new Qr(Tt.layout_symbol["icon-rotate"]),"icon-padding":new Zr(Tt.layout_symbol["icon-padding"]),"icon-keep-upright":new Zr(Tt.layout_symbol["icon-keep-upright"]),"icon-offset":new Qr(Tt.layout_symbol["icon-offset"]),"icon-anchor":new Qr(Tt.layout_symbol["icon-anchor"]),"icon-pitch-alignment":new Zr(Tt.layout_symbol["icon-pitch-alignment"]),"text-pitch-alignment":new Zr(Tt.layout_symbol["text-pitch-alignment"]),"text-rotation-alignment":new Zr(Tt.layout_symbol["text-rotation-alignment"]),"text-field":new Qr(Tt.layout_symbol["text-field"]),"text-font":new Qr(Tt.layout_symbol["text-font"]),"text-size":new Qr(Tt.layout_symbol["text-size"]),"text-max-width":new Qr(Tt.layout_symbol["text-max-width"]),"text-line-height":new Zr(Tt.layout_symbol["text-line-height"]),"text-letter-spacing":new Qr(Tt.layout_symbol["text-letter-spacing"]),"text-justify":new Qr(Tt.layout_symbol["text-justify"]),"text-radial-offset":new Qr(Tt.layout_symbol["text-radial-offset"]),"text-variable-anchor":new Zr(Tt.layout_symbol["text-variable-anchor"]),"text-anchor":new Qr(Tt.layout_symbol["text-anchor"]),"text-max-angle":new Zr(Tt.layout_symbol["text-max-angle"]),"text-writing-mode":new Zr(Tt.layout_symbol["text-writing-mode"]),"text-rotate":new Qr(Tt.layout_symbol["text-rotate"]),"text-padding":new Zr(Tt.layout_symbol["text-padding"]),"text-keep-upright":new Zr(Tt.layout_symbol["text-keep-upright"]),"text-transform":new Qr(Tt.layout_symbol["text-transform"]),"text-offset":new Qr(Tt.layout_symbol["text-offset"]),"text-allow-overlap":new Zr(Tt.layout_symbol["text-allow-overlap"]),"text-ignore-placement":new Zr(Tt.layout_symbol["text-ignore-placement"]),"text-optional":new Zr(Tt.layout_symbol["text-optional"])}),Ju={paint:new ti({"icon-opacity":new Qr(Tt.paint_symbol["icon-opacity"]),"icon-color":new Qr(Tt.paint_symbol["icon-color"]),"icon-halo-color":new Qr(Tt.paint_symbol["icon-halo-color"]),"icon-halo-width":new Qr(Tt.paint_symbol["icon-halo-width"]),"icon-halo-blur":new Qr(Tt.paint_symbol["icon-halo-blur"]),"icon-translate":new Zr(Tt.paint_symbol["icon-translate"]),"icon-translate-anchor":new Zr(Tt.paint_symbol["icon-translate-anchor"]),"text-opacity":new Qr(Tt.paint_symbol["text-opacity"]),"text-color":new Qr(Tt.paint_symbol["text-color"],{runtimeType:zt,getOverride:function(t){return t.textColor},hasOverride:function(t){return!!t.textColor}}),"text-halo-color":new Qr(Tt.paint_symbol["text-halo-color"]),"text-halo-width":new Qr(Tt.paint_symbol["text-halo-width"]),"text-halo-blur":new Qr(Tt.paint_symbol["text-halo-blur"]),"text-translate":new Zr(Tt.paint_symbol["text-translate"]),"text-translate-anchor":new Zr(Tt.paint_symbol["text-translate-anchor"])}),layout:Xu},Zu=function(t){this.type=t.property.overrides?t.property.overrides.runtimeType:Lt,this.defaultValue=t};Zu.prototype.evaluate=function(t){if(t.formattedSection){var e=this.defaultValue.property.overrides;if(e&&e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default},Zu.prototype.eachChild=function(t){this.defaultValue.isConstant()||t(this.defaultValue.value._styleExpression.expression)},Zu.prototype.possibleOutputs=function(){return[void 0]},Zu.prototype.serialize=function(){return null},dr("FormatSectionOverride",Zu,{omit:["defaultValue"]});var Qu=function(t){function e(e){t.call(this,e,Ju)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e,n){if(t.prototype.recalculate.call(this,e,n),"auto"===this.layout.get("icon-rotation-alignment")&&("point"!==this.layout.get("symbol-placement")?this.layout._values["icon-rotation-alignment"]="map":this.layout._values["icon-rotation-alignment"]="viewport"),"auto"===this.layout.get("text-rotation-alignment")&&("point"!==this.layout.get("symbol-placement")?this.layout._values["text-rotation-alignment"]="map":this.layout._values["text-rotation-alignment"]="viewport"),"auto"===this.layout.get("text-pitch-alignment")&&(this.layout._values["text-pitch-alignment"]=this.layout.get("text-rotation-alignment")),"auto"===this.layout.get("icon-pitch-alignment")&&(this.layout._values["icon-pitch-alignment"]=this.layout.get("icon-rotation-alignment")),"point"===this.layout.get("symbol-placement")){var r=this.layout.get("text-writing-mode");if(r){for(var i=[],o=0,a=r;o",targetMapId:r,sourceMapId:o.mapId})}}},cc.prototype.receive=function(t){var e=t.data,n=e.id;if(n&&(!e.targetMapId||this.mapId===e.targetMapId))if(""===e.type){delete this.tasks[n];var r=this.cancelCallbacks[n];delete this.cancelCallbacks[n],r&&r()}else O()||e.mustQueue?(this.tasks[n]=e,this.taskQueue.push(n),this.invoker.trigger()):this.processTask(n,e)},cc.prototype.process=function(){if(this.taskQueue.length){var t=this.taskQueue.shift(),e=this.tasks[t];delete this.tasks[t],this.taskQueue.length&&this.invoker.trigger(),e&&this.processTask(t,e)}},cc.prototype.processTask=function(t,e){var n=this;if(""===e.type){var r=this.callbacks[t];delete this.callbacks[t],r&&(e.error?r(yr(e.error)):r(null,yr(e.data)))}else{var i=!1,o=C(this.globalScope)?void 0:[],a=e.hasCallback?function(e,r){i=!0,delete n.cancelCallbacks[t],n.target.postMessage({id:t,type:"",sourceMapId:n.mapId,error:e?mr(e):null,data:mr(r,o)},o)}:function(t){i=!0},s=null,u=yr(e.data);if(this.parent[e.type])s=this.parent[e.type](e.sourceMapId,u,a);else if(this.parent.getWorkerSource){var c=e.type.split(".");s=this.parent.getWorkerSource(e.sourceMapId,c[0],u.source)[c[1]](u,a)}else a(new Error("Could not find function "+e.type));!i&&s&&s.cancel&&(this.cancelCallbacks[t]=s.cancel)}},cc.prototype.remove=function(){this.invoker.remove(),this.target.removeEventListener("message",this.receive,!1)};var hc=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]))};hc.prototype.setNorthEast=function(t){return this._ne=t instanceof fc?new fc(t.lng,t.lat):fc.convert(t),this},hc.prototype.setSouthWest=function(t){return this._sw=t instanceof fc?new fc(t.lng,t.lat):fc.convert(t),this},hc.prototype.extend=function(t){var e,n,r=this._sw,i=this._ne;if(t instanceof fc)e=t,n=t;else{if(!(t instanceof hc))return Array.isArray(t)?t.every(Array.isArray)?this.extend(hc.convert(t)):this.extend(fc.convert(t)):this;if(e=t._sw,n=t._ne,!e||!n)return this}return r||i?(r.lng=Math.min(e.lng,r.lng),r.lat=Math.min(e.lat,r.lat),i.lng=Math.max(n.lng,i.lng),i.lat=Math.max(n.lat,i.lat)):(this._sw=new fc(e.lng,e.lat),this._ne=new fc(n.lng,n.lat)),this},hc.prototype.getCenter=function(){return new fc((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},hc.prototype.getSouthWest=function(){return this._sw},hc.prototype.getNorthEast=function(){return this._ne},hc.prototype.getNorthWest=function(){return new fc(this.getWest(),this.getNorth())},hc.prototype.getSouthEast=function(){return new fc(this.getEast(),this.getSouth())},hc.prototype.getWest=function(){return this._sw.lng},hc.prototype.getSouth=function(){return this._sw.lat},hc.prototype.getEast=function(){return this._ne.lng},hc.prototype.getNorth=function(){return this._ne.lat},hc.prototype.toArray=function(){return[this._sw.toArray(),this._ne.toArray()]},hc.prototype.toString=function(){return"LngLatBounds("+this._sw.toString()+", "+this._ne.toString()+")"},hc.prototype.isEmpty=function(){return!(this._sw&&this._ne)},hc.prototype.contains=function(t){var e=fc.convert(t),n=e.lng,r=e.lat,i=this._sw.lat<=r&&r<=this._ne.lat,o=this._sw.lng<=n&&n<=this._ne.lng;return this._sw.lng>this._ne.lng&&(o=this._sw.lng>=n&&n>=this._ne.lng),i&&o},hc.convert=function(t){return!t||t instanceof hc?t:new hc(t)};var fc=function(t,e){if(isNaN(t)||isNaN(e))throw new Error("Invalid LngLat object: ("+t+", "+e+")");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error("Invalid LngLat latitude value: must be between -90 and 90")};fc.prototype.wrap=function(){return new fc(l(this.lng,-180,180),this.lat)},fc.prototype.toArray=function(){return[this.lng,this.lat]},fc.prototype.toString=function(){return"LngLat("+this.lng+", "+this.lat+")"},fc.prototype.toBounds=function(t){void 0===t&&(t=0);var e=360*t/40075017,n=e/Math.cos(Math.PI/180*this.lat);return new hc(new fc(this.lng-n,this.lat-e),new fc(this.lng+n,this.lat+e))},fc.convert=function(t){if(t instanceof fc)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new fc(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&"object"==typeof t&&null!==t)return new fc(Number("lng"in t?t.lng:t.lon),Number(t.lat));throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, an object {lon: , lat: }, or an array of [, ]")};var pc=2*Math.PI*6378137;function dc(t){return pc*Math.cos(t*Math.PI/180)}function Ac(t){return(180+t)/360}function gc(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function mc(t,e){return t/dc(e)}function yc(t){var e=180-360*t;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}var vc=function(t,e,n){void 0===n&&(n=0),this.x=+t,this.y=+e,this.z=+n};vc.fromLngLat=function(t,e){void 0===e&&(e=0);var n=fc.convert(t);return new vc(Ac(n.lng),gc(n.lat),mc(e,n.lat))},vc.prototype.toLngLat=function(){return new fc(360*this.x-180,yc(this.y))},vc.prototype.toAltitude=function(){return this.z*dc(yc(this.y))},vc.prototype.meterInMercatorCoordinateUnits=function(){return 1/pc*(t=yc(this.y),1/Math.cos(t*Math.PI/180));var t};var _c=function(t,e,n){this.z=t,this.x=e,this.y=n,this.key=wc(0,t,e,n)};_c.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},_c.prototype.url=function(t,e){var n,r,i,o,a,s=(n=this.x,r=this.y,i=this.z,o=lc(256*n,256*(r=Math.pow(2,i)-r-1),i),a=lc(256*(n+1),256*(r+1),i),o[0]+","+o[1]+","+a[0]+","+a[1]),u=function(t,e,n){for(var r,i="",o=t;o>0;o--)i+=(e&(r=1<this.canonical.z?new xc(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new xc(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},xc.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return!1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ>e&&t.canonical.y===this.canonical.y>>e},xc.prototype.children=function(t){if(this.overscaledZ>=t)return[new xc(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,n=2*this.canonical.x,r=2*this.canonical.y;return[new xc(e,this.wrap,e,n,r),new xc(e,this.wrap,e,n+1,r),new xc(e,this.wrap,e,n,r+1),new xc(e,this.wrap,e,n+1,r+1)]},xc.prototype.isLessThan=function(t){return this.wrapt.wrap)&&(this.overscaledZt.overscaledZ)&&(this.canonical.xt.canonical.x)&&this.canonical.y=this.dim+1||e<-1||e>=this.dim+1)throw new RangeError("out of range source coordinates for DEM data");return(e+1)*this.stride+(t+1)},Ec.prototype._unpackMapbox=function(t,e,n){return(256*t*256+256*e+n)/10-1e4},Ec.prototype._unpackTerrarium=function(t,e,n){return 256*t+e+n/256-32768},Ec.prototype.getPixels=function(){return new Go({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},Ec.prototype.backfillBorder=function(t,e,n){if(this.dim!==t.dim)throw new Error("dem dimension mismatch");var r=e*this.dim,i=e*this.dim+this.dim,o=n*this.dim,a=n*this.dim+this.dim;switch(e){case-1:r=i-1;break;case 1:i=r+1}switch(n){case-1:o=a-1;break;case 1:a=o+1}for(var s=-e*this.dim,u=-n*this.dim,c=o;c=0)null!==this.deletedStates[t][r]&&(this.deletedStates[t][r]=this.deletedStates[t][r]||{},this.deletedStates[t][r][n]=null);else if(void 0!==e&&e>=0)if(this.stateChanges[t]&&this.stateChanges[t][r])for(n in this.deletedStates[t][r]={},this.stateChanges[t][r])this.deletedStates[t][r][n]=null;else this.deletedStates[t][r]=null;else this.deletedStates[t]=null}},Pc.prototype.getState=function(t,e){var n=String(e),r=this.state[t]||{},i=this.stateChanges[t]||{},o=h({},r[n],i[n]);if(null===this.deletedStates[t])return{};if(this.deletedStates[t]){var a=this.deletedStates[t][e];if(null===a)return{};for(var s in a)delete o[s]}return o},Pc.prototype.initializeTileState=function(t,e){t.setFeatureState(this.state,e)},Pc.prototype.coalesceChanges=function(t,e){var n={};for(var r in this.stateChanges){this.state[r]=this.state[r]||{};var i={};for(var o in this.stateChanges[r])this.state[r][o]||(this.state[r][o]={}),h(this.state[r][o],this.stateChanges[r][o]),i[o]=this.state[r][o];n[r]=i}for(var a in this.deletedStates){this.state[a]=this.state[a]||{};var s={};if(null===this.deletedStates[a])for(var u in this.state[a])s[u]={},this.state[a][u]={};else for(var c in this.deletedStates[a]){if(null===this.deletedStates[a][c])this.state[a][c]={};else for(var l=0,f=Object.keys(this.deletedStates[a][c]);l=0&&l[3]>=0&&s.insert(a,l[0],l[1],l[2],l[3])}},Mc.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new Va.VectorTile(new vs(this.rawTileData)).layers,this.sourceLayerCoder=new Sc(this.vtLayers?Object.keys(this.vtLayers).sort():["_geojsonTileLayer"])),this.vtLayers},Mc.prototype.query=function(t,e,n){var r=this;this.loadVTLayers();for(var o=t.params||{},a=lo/t.tileSize/t.scale,s=Fn(o.filter),u=t.queryGeometry,c=t.queryPadding*a,l=Ic(u),h=this.grid.query(l.minX-c,l.minY-c,l.maxX+c,l.maxY+c),f=Ic(t.cameraQueryGeometry),p=0,d=this.grid3D.query(f.minX-c,f.minY-c,f.maxX+c,f.maxY+c,(function(e,n,r,o){return function(t,e,n,r,o){for(var a=0,s=t;a=u.x&&o>=u.y)return!0}var c=[new i(e,n),new i(e,o),new i(r,o),new i(r,n)];if(t.length>2)for(var l=0,h=c;l=0)return!0;return!1}(o,u)){var c=this.sourceLayerCoder.decode(n),l=this.vtLayers[c].feature(r);if(i(new Ur(this.tileID.overscaledZ),l))for(var h=0;h>u.z,l=new i(u.x*c,u.y*c),h=new i(l.x+c,l.y+c),f=this.segments.prepareSegment(4,n,r);n.emplaceBack(l.x,l.y,l.x,l.y),n.emplaceBack(h.x,l.y,h.x,l.y),n.emplaceBack(l.x,h.y,l.x,h.y),n.emplaceBack(h.x,h.y,h.x,h.y);var p=f.vertexLength;r.emplaceBack(p,p+1,p+2),r.emplaceBack(p+1,p+2,p+3),f.vertexLength+=4,f.primitiveLength+=2}this.maskedBoundsBuffer=e.createVertexBuffer(n,Oc.members),this.maskedIndexBuffer=e.createIndexBuffer(r)}},Rc.prototype.hasData=function(){return"loaded"===this.state||"reloading"===this.state||"expired"===this.state},Rc.prototype.patternsLoaded=function(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length},Rc.prototype.setExpiryData=function(t){var e=this.expirationTime;if(t.cacheControl){var n=S(t.cacheControl);n["max-age"]&&(this.expirationTime=Date.now()+1e3*n["max-age"])}else t.expires&&(this.expirationTime=new Date(t.expires).getTime());if(this.expirationTime){var r=Date.now(),i=!1;if(this.expirationTime>r)i=!1;else if(e)if(this.expirationTimeut&&(t.getActor().send("enforceCacheSizeLimit",st),ht=0)},t.clamp=c,t.clearTileCache=function(t){var e=self.caches.delete(at);t&&e.catch(t).then((function(){return t()}))},t.clone=function(t){var e=new Ro(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},t.clone$1=_,t.config=F,t.create=function(){var t=new Ro(16);return Ro!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},t.create$1=function(){var t=new Ro(9);return Ro!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t},t.create$2=function(){var t=new Ro(4);return Ro!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},t.createCommonjsModule=e,t.createExpression=On,t.createLayout=oi,t.createStyleLayer=function(t){return"custom"===t.type?new ec(t):new nc[t.type](t)},t.deepEqual=a,t.ease=u,t.emitValidationErrors=cr,t.endsWith=m,t.enforceCacheSizeLimit=function(t){ct(),$&&$.then((function(e){e.keys().then((function(n){for(var r=0;r=lo||s.y<0||s.y>=lo||function(t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,A,g,m,y,v,_,b,w){var E,O,S,T,C,P=t.addToLineVertexArray(e,n),M=0,I=0,B=0,R=0,k=-1,L=-1,D={},j=Pu(""),F=0,z=0;if(void 0===s._unevaluatedLayout.getValue("text-radial-offset")?(F=(E=s.layout.get("text-offset").evaluate(_,{}).map((function(t){return 24*t})))[0],z=E[1]):(F=24*s.layout.get("text-radial-offset").evaluate(_,{}),z=Bu),t.allowVerticalPlacement&&r.vertical){var U=s.layout.get("text-rotate").evaluate(_,{})+90,N=r.vertical;T=new bu(u,n,e,c,l,h,N,f,p,d,t.overscaling,U),a&&(C=new bu(u,n,e,c,l,h,a,g,m,d,t.overscaling,U))}if(i){var G=s.layout.get("icon-rotate").evaluate(_,{}),V="none"!==s.layout.get("icon-text-fit"),H=gu(i,G,w,V),W=a?gu(a,G,w,V):void 0;S=new bu(u,n,e,c,l,h,i,g,m,!1,t.overscaling,G),M=4*H.length;var q=t.iconSizeData,X=null;"source"===q.kind?(X=[ou*s.layout.get("icon-size").evaluate(_,{})])[0]>Lu&&x(t.layerIds[0]+': Value for "icon-size" is >= 255. Reduce your "icon-size".'):"composite"===q.kind&&((X=[ou*b.compositeIconSizes[0].evaluate(_,{}),ou*b.compositeIconSizes[1].evaluate(_,{})])[0]>Lu||X[1]>Lu)&&x(t.layerIds[0]+': Value for "icon-size" is >= 255. Reduce your "icon-size".'),t.addSymbols(t.icon,H,X,v,y,_,!1,e,P.lineStartIndex,P.lineLength,-1),k=t.icon.placedSymbolArray.length-1,W&&(I=4*W.length,t.addSymbols(t.icon,W,X,v,y,_,Hs.vertical,e,P.lineStartIndex,P.lineLength,-1),L=t.icon.placedSymbolArray.length-1)}for(var J in r.horizontal){var Z=r.horizontal[J];if(!O){j=Pu(Z.text);var Q=s.layout.get("text-rotate").evaluate(_,{});O=new bu(u,n,e,c,l,h,Z,f,p,d,t.overscaling,Q)}var K=1===Z.positionedLines.length;if(B+=Du(t,e,Z,o,s,d,_,A,P,r.vertical?Hs.horizontal:Hs.horizontalOnly,K?Object.keys(r.horizontal):[J],D,k,b),K)break}r.vertical&&(R+=Du(t,e,r.vertical,o,s,d,_,A,P,Hs.vertical,["vertical"],D,L,b));var Y=O?O.boxStartIndex:t.collisionBoxArray.length,$=O?O.boxEndIndex:t.collisionBoxArray.length,tt=T?T.boxStartIndex:t.collisionBoxArray.length,et=T?T.boxEndIndex:t.collisionBoxArray.length,nt=S?S.boxStartIndex:t.collisionBoxArray.length,rt=S?S.boxEndIndex:t.collisionBoxArray.length,it=C?C.boxStartIndex:t.collisionBoxArray.length,ot=C?C.boxEndIndex:t.collisionBoxArray.length;t.glyphOffsetArray.length>=qu.MAX_GLYPHS&&x("Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"),t.symbolInstances.emplaceBack(e.x,e.y,D.right>=0?D.right:-1,D.center>=0?D.center:-1,D.left>=0?D.left:-1,D.vertical||-1,k,L,j,Y,$,tt,et,nt,rt,it,ot,c,B,R,M,I,0,f,F,z)}(t,s,i,n,r,o,f,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,m,b,O,c,v,w,S,d,e,a,l)};if("line"===T)for(var I=0,B=function(t,e,n,r,o){for(var a=[],s=0;s=r&&f.x>=r||(h.x>=r?h=new i(r,h.y+(f.y-h.y)*((r-h.x)/(f.x-h.x)))._round():f.x>=r&&(f=new i(r,h.y+(f.y-h.y)*((r-h.x)/(f.x-h.x)))._round()),h.y>=o&&f.y>=o||(h.y>=o?h=new i(h.x+(f.x-h.x)*((o-h.y)/(f.y-h.y)),o)._round():f.y>=o&&(f=new i(h.x+(f.x-h.x)*((o-h.y)/(f.y-h.y)),o)._round()),c&&h.equals(c[c.length-1])||(c=[h],a.push(c)),c.push(f)))))}return a}(e.geometry,0,0,lo,lo);I1){var U=du(z,E,n.vertical||A,r,24,y);U&&M(z,U)}}else if("Polygon"===e.type)for(var N=0,G=Sa(e.geometry,0);N=T.maxzoom||"none"!==T.visibility&&(a(S,this.zoom,r),(A[T.id]=T.createBucket({index:l.bucketLayerIDs.length,layers:S,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:_,sourceID:this.source})).populate(b,g),l.bucketLayerIDs.push(S.map((function(t){return t.id}))))}}}var C=t.mapObject(g.glyphDependencies,(function(t){return Object.keys(t).map(Number)}));Object.keys(C).length?o.send("getGlyphs",{uid:this.uid,stacks:C},(function(t,e){h||(h=t,f=e,I.call(u))})):f={};var P=Object.keys(g.iconDependencies);P.length?o.send("getImages",{icons:P,source:this.source,tileID:this.tileID,type:"icons"},(function(t,e){h||(h=t,p=e,I.call(u))})):p={};var M=Object.keys(g.patternDependencies);function I(){if(h)return s(h);if(f&&p&&d){var e=new i(f),n=new t.ImageAtlas(p,d);for(var o in A){var u=A[o];u instanceof t.SymbolBucket?(a(u.layers,this.zoom,r),t.performSymbolLayout(u,f,e.positions,p,n.iconPositions,this.showCollisionBoxes)):u.hasPattern&&(u instanceof t.LineBucket||u instanceof t.FillBucket||u instanceof t.FillExtrusionBucket)&&(a(u.layers,this.zoom,r),u.addFeatures(g,n.patternPositions))}this.status="done",s(null,{buckets:t.values(A).filter((function(t){return!t.isEmpty()})),featureIndex:l,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:e.image,imageAtlas:n,glyphMap:this.returnDependencies?f:null,iconMap:this.returnDependencies?p:null,glyphPositions:this.returnDependencies?e.positions:null})}}M.length?o.send("getImages",{icons:M,source:this.source,tileID:this.tileID,type:"patterns"},(function(t,e){h||(h=t,d=e,I.call(u))})):d={},I.call(this)};var s="undefined"!=typeof performance,u={getEntriesByName:function(t){return!!(s&&performance&&performance.getEntriesByName)&&performance.getEntriesByName(t)},mark:function(t){return!!(s&&performance&&performance.mark)&&performance.mark(t)},measure:function(t,e,n){return!!(s&&performance&&performance.measure)&&performance.measure(t,e,n)},clearMarks:function(t){return!!(s&&performance&&performance.clearMarks)&&performance.clearMarks(t)},clearMeasures:function(t){return!!(s&&performance&&performance.clearMeasures)&&performance.clearMeasures(t)}},c=function(t){this._marks={start:[t.url,"start"].join("#"),end:[t.url,"end"].join("#"),measure:t.url.toString()},u.mark(this._marks.start)};function l(e,n){var r=t.getArrayBuffer(e.request,(function(e,r,i,o){e?n(e):r&&n(null,{vectorTile:new t.vectorTile.VectorTile(new t.pbf(r)),rawData:r,cacheControl:i,expires:o})}));return function(){r.cancel(),n()}}c.prototype.finish=function(){u.mark(this._marks.end);var t=u.getEntriesByName(this._marks.measure);return 0===t.length&&(u.measure(this._marks.measure,this._marks.start,this._marks.end),t=u.getEntriesByName(this._marks.measure),u.clearMarks(this._marks.start),u.clearMarks(this._marks.end),u.clearMeasures(this._marks.measure)),t},u.Performance=c;var h=function(t,e,n,r){this.actor=t,this.layerIndex=e,this.availableImages=n,this.loadVectorData=r||l,this.loading={},this.loaded={}};h.prototype.loadTile=function(e,n){var r=this,i=e.uid;this.loading||(this.loading={});var a=!!(e&&e.request&&e.request.collectResourceTiming)&&new u.Performance(e.request),s=this.loading[i]=new o(e);s.abort=this.loadVectorData(e,(function(e,o){if(delete r.loading[i],e||!o)return s.status="done",r.loaded[i]=s,n(e);var u=o.rawData,c={};o.expires&&(c.expires=o.expires),o.cacheControl&&(c.cacheControl=o.cacheControl);var l={};if(a){var h=a.finish();h&&(l.resourceTiming=JSON.parse(JSON.stringify(h)))}s.vectorTile=o.vectorTile,s.parse(o.vectorTile,r.layerIndex,r.availableImages,r.actor,(function(e,r){if(e||!r)return n(e);n(null,t.extend({rawTileData:u.slice(0)},r,c,l))})),r.loaded=r.loaded||{},r.loaded[i]=s}))},h.prototype.reloadTile=function(t,e){var n=this,r=this.loaded,i=t.uid,o=this;if(r&&r[i]){var a=r[i];a.showCollisionBoxes=t.showCollisionBoxes;var s=function(t,r){var i=a.reloadCallback;i&&(delete a.reloadCallback,a.parse(a.vectorTile,o.layerIndex,n.availableImages,o.actor,i)),e(t,r)};"parsing"===a.status?a.reloadCallback=s:"done"===a.status&&(a.vectorTile?a.parse(a.vectorTile,this.layerIndex,this.availableImages,this.actor,s):s())}},h.prototype.abortTile=function(t,e){var n=this.loading,r=t.uid;n&&n[r]&&n[r].abort&&(n[r].abort(),delete n[r]),e()},h.prototype.removeTile=function(t,e){var n=this.loaded,r=t.uid;n&&n[r]&&delete n[r],e()};var f=function(){this.loaded={}};f.prototype.loadTile=function(e,n){var r=e.uid,i=e.encoding,o=e.rawImageData,a=new t.DEMData(r,o,i);this.loaded=this.loaded||{},this.loaded[r]=a,n(null,a)},f.prototype.removeTile=function(t){var e=this.loaded,n=t.uid;e&&e[n]&&delete e[n]};var p=6378137;function d(t){var e=0;if(t&&t.length>0){e+=Math.abs(A(t[0]));for(var n=1;n2){for(a=0;a=0}(t)===e?t:t.reverse()}var b=t.vectorTile.VectorTileFeature.prototype.toGeoJSON,x=function(e){this._feature=e,this.extent=t.EXTENT,this.type=e.type,this.properties=e.tags,"id"in e&&!isNaN(e.id)&&(this.id=parseInt(e.id,10))};x.prototype.loadGeometry=function(){if(1===this._feature.type){for(var e=[],n=0,r=this._feature.geometry;n>31}function j(t,e){for(var n=t.loadGeometry(),r=t.type,i=0,o=0,a=n.length,s=0;s>1;!function t(e,n,r,i,o,a){for(;o>i;){if(o-i>600){var s=o-i+1,u=r-i+1,c=Math.log(s),l=.5*Math.exp(2*c/3),h=.5*Math.sqrt(c*l*(s-l)/s)*(u-s/2<0?-1:1);t(e,n,r,Math.max(i,Math.floor(r-u*l/s+h)),Math.min(o,Math.floor(r+(s-u)*l/s+h)),a)}var f=n[2*r+a],p=i,d=o;for(z(e,n,i,r),n[2*o+a]>f&&z(e,n,i,o);pf;)d--}n[2*i+a]===f?z(e,n,i,d):z(e,n,++d,o),d<=r&&(i=d+1),r<=d&&(o=d-1)}}(e,n,s,i,o,a%2),t(e,n,r,i,s-1,a+1),t(e,n,r,s+1,o,a+1)}}(a,s,r,0,a.length-1,0)};H.prototype.range=function(t,e,n,r){return function(t,e,n,r,i,o,a){for(var s,u,c=[0,t.length-1,0],l=[];c.length;){var h=c.pop(),f=c.pop(),p=c.pop();if(f-p<=a)for(var d=p;d<=f;d++)s=e[2*d],u=e[2*d+1],s>=n&&s<=i&&u>=r&&u<=o&&l.push(t[d]);else{var A=Math.floor((p+f)/2);s=e[2*A],u=e[2*A+1],s>=n&&s<=i&&u>=r&&u<=o&&l.push(t[A]);var g=(h+1)%2;(0===h?n<=s:r<=u)&&(c.push(p),c.push(A-1),c.push(g)),(0===h?i>=s:o>=u)&&(c.push(A+1),c.push(f),c.push(g))}}return l}(this.ids,this.coords,t,e,n,r,this.nodeSize)},H.prototype.within=function(t,e,n){return function(t,e,n,r,i,o){for(var a=[0,t.length-1,0],s=[],u=i*i;a.length;){var c=a.pop(),l=a.pop(),h=a.pop();if(l-h<=o)for(var f=h;f<=l;f++)N(e[2*f],e[2*f+1],n,r)<=u&&s.push(t[f]);else{var p=Math.floor((h+l)/2),d=e[2*p],A=e[2*p+1];N(d,A,n,r)<=u&&s.push(t[p]);var g=(c+1)%2;(0===c?n-i<=d:r-i<=A)&&(a.push(h),a.push(p-1),a.push(g)),(0===c?n+i>=d:r+i>=A)&&(a.push(p+1),a.push(l),a.push(g))}}return s}(this.ids,this.coords,t,e,n,this.nodeSize)};var W={minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:function(t){return t}},q=function(t){this.options=$(Object.create(W),t),this.trees=new Array(this.options.maxZoom+1)};function X(t,e,n,r,i){return{x:t,y:e,zoom:1/0,id:n,parentId:-1,numPoints:r,properties:i}}function J(t,e){var n=t.geometry.coordinates,r=n[0],i=n[1];return{x:K(r),y:Y(i),zoom:1/0,index:e,parentId:-1}}function Z(t){return{type:"Feature",id:t.id,properties:Q(t),geometry:{type:"Point",coordinates:[(r=t.x,360*(r-.5)),(e=t.y,n=(180-360*e)*Math.PI/180,360*Math.atan(Math.exp(n))/Math.PI-90)]}};var e,n,r}function Q(t){var e=t.numPoints,n=e>=1e4?Math.round(e/1e3)+"k":e>=1e3?Math.round(e/100)/10+"k":e;return $($({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:n})}function K(t){return t/360+.5}function Y(t){var e=Math.sin(t*Math.PI/180),n=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return n<0?0:n>1?1:n}function $(t,e){for(var n in e)t[n]=e[n];return t}function tt(t){return t.x}function et(t){return t.y}function nt(t,e,n,r,i,o){var a=i-n,s=o-r;if(0!==a||0!==s){var u=((t-n)*a+(e-r)*s)/(a*a+s*s);u>1?(n=i,r=o):u>0&&(n+=a*u,r+=s*u)}return(a=t-n)*a+(s=e-r)*s}function rt(t,e,n,r){var i={id:void 0===t?null:t,type:e,geometry:n,tags:r,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(t){var e=t.geometry,n=t.type;if("Point"===n||"MultiPoint"===n||"LineString"===n)it(t,e);else if("Polygon"===n||"MultiLineString"===n)for(var r=0;r0&&(a+=r?(i*c-u*o)/2:Math.sqrt(Math.pow(u-i,2)+Math.pow(c-o,2))),i=u,o=c}var l=e.length-3;e[2]=1,function t(e,n,r,i){for(var o,a=i,s=r-n>>1,u=r-n,c=e[n],l=e[n+1],h=e[r],f=e[r+1],p=n+3;pa)o=p,a=d;else if(d===a){var A=Math.abs(p-s);Ai&&(o-n>3&&t(e,n,o,i),e[o+2]=a,r-o>3&&t(e,o,r,i))}(e,0,l,n),e[l+2]=1,e.size=Math.abs(a),e.start=0,e.end=e.size}function ut(t,e,n,r){for(var i=0;i1?1:n}function ht(t,e,n,r,i,o,a,s){if(r/=e,o>=(n/=e)&&a=r)return null;for(var u=[],c=0;c=n&&d=r)){var A=[];if("Point"===f||"MultiPoint"===f)ft(h,A,n,r,i);else if("LineString"===f)pt(h,A,n,r,i,!1,s.lineMetrics);else if("MultiLineString"===f)At(h,A,n,r,i,!1);else if("Polygon"===f)At(h,A,n,r,i,!0);else if("MultiPolygon"===f)for(var g=0;g=n&&a<=r&&(e.push(t[o]),e.push(t[o+1]),e.push(t[o+2]))}}function pt(t,e,n,r,i,o,a){for(var s,u,c=dt(t),l=0===i?mt:yt,h=t.start,f=0;fn&&(u=l(c,p,d,g,m,n),a&&(c.start=h+s*u)):y>r?v=n&&(u=l(c,p,d,g,m,n),_=!0),v>r&&y<=r&&(u=l(c,p,d,g,m,r),_=!0),!o&&_&&(a&&(c.end=h+s*u),e.push(c),c=dt(t)),a&&(h+=s)}var b=t.length-3;p=t[b],d=t[b+1],A=t[b+2],(y=0===i?p:d)>=n&&y<=r&>(c,p,d,A),b=c.length-3,o&&b>=3&&(c[b]!==c[0]||c[b+1]!==c[1])&>(c,c[0],c[1],c[2]),c.length&&e.push(c)}function dt(t){var e=[];return e.size=t.size,e.start=t.start,e.end=t.end,e}function At(t,e,n,r,i,o){for(var a=0;aa.maxX&&(a.maxX=l),h>a.maxY&&(a.maxY=h)}return a}function Et(t,e,n,r){var i=e.geometry,o=e.type,a=[];if("Point"===o||"MultiPoint"===o)for(var s=0;s0&&e.size<(i?a:r))n.numPoints+=e.length/3;else{for(var s=[],u=0;ua)&&(n.numSimplified++,s.push(e[u]),s.push(e[u+1])),n.numPoints++;i&&function(t,e){for(var n=0,r=0,i=t.length,o=i-2;r0===e)for(r=0,i=t.length;r24)throw new Error("maxZoom should be in the 0-24 range");if(e.promoteId&&e.generateId)throw new Error("promoteId and generateId cannot be used together.");var r=function(t,e){var n=[];if("FeatureCollection"===t.type)for(var r=0;r=r;c--){var l=+Date.now();s=this._cluster(s,c),this.trees[c]=new H(s,tt,et,o,Float32Array),n&&console.log("z%d: %d clusters in %dms",c,s.length,+Date.now()-l)}return n&&console.timeEnd("total time"),this},q.prototype.getClusters=function(t,e){var n=((t[0]+180)%360+360)%360-180,r=Math.max(-90,Math.min(90,t[1])),i=180===t[2]?180:((t[2]+180)%360+360)%360-180,o=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)n=-180,i=180;else if(n>i){var a=this.getClusters([n,r,180,o],e),s=this.getClusters([-180,r,i,o],e);return a.concat(s)}for(var u=this.trees[this._limitZoom(e)],c=[],l=0,h=u.range(K(n),Y(o),K(i),Y(r));l1?this._map(c,!0):null,g=(u<<5)+(e+1)+this.points.length,m=0,y=h;m>5},q.prototype._getOriginZoom=function(t){return(t-this.points.length)%32},q.prototype._map=function(t,e){if(t.numPoints)return e?$({},t.properties):t.properties;var n=this.points[t.index].properties,r=this.options.map(n);return e&&r===n?$({},r):r},St.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},St.prototype.splitTile=function(t,e,n,r,i,o,a){for(var s=[t,e,n,r],u=this.options,c=u.debug;s.length;){r=s.pop(),n=s.pop(),e=s.pop(),t=s.pop();var l=1<1&&console.time("creation"),f=this.tiles[h]=wt(t,e,n,r,u),this.tileCoords.push({z:e,x:n,y:r}),c)){c>1&&(console.log("tile z%d-%d-%d (features: %d, points: %d, simplified: %d)",e,n,r,f.numFeatures,f.numPoints,f.numSimplified),console.timeEnd("creation"));var p="z"+e;this.stats[p]=(this.stats[p]||0)+1,this.total++}if(f.source=t,i){if(e===u.maxZoom||e===i)continue;var d=1<1&&console.time("clipping");var A,g,m,y,v,_,b=.5*u.buffer/u.extent,x=.5-b,w=.5+b,E=1+b;A=g=m=y=null,v=ht(t,l,n-b,n+w,0,f.minX,f.maxX,u),_=ht(t,l,n+x,n+E,0,f.minX,f.maxX,u),t=null,v&&(A=ht(v,l,r-b,r+w,1,f.minY,f.maxY,u),g=ht(v,l,r+x,r+E,1,f.minY,f.maxY,u),v=null),_&&(m=ht(_,l,r-b,r+w,1,f.minY,f.maxY,u),y=ht(_,l,r+x,r+E,1,f.minY,f.maxY,u),_=null),c>1&&console.timeEnd("clipping"),s.push(A||[],e+1,2*n,2*r),s.push(g||[],e+1,2*n,2*r+1),s.push(m||[],e+1,2*n+1,2*r),s.push(y||[],e+1,2*n+1,2*r+1)}}},St.prototype.getTile=function(t,e,n){var r=this.options,i=r.extent,o=r.debug;if(t<0||t>24)return null;var a=1<1&&console.log("drilling down to z%d-%d-%d",t,e,n);for(var u,c=t,l=e,h=n;!u&&c>0;)c--,l=Math.floor(l/2),h=Math.floor(h/2),u=this.tiles[Tt(c,l,h)];return u&&u.source?(o>1&&console.log("found parent tile z%d-%d-%d",c,l,h),o>1&&console.time("drilling down"),this.splitTile(u.source,c,l,h,t,e,n),o>1&&console.timeEnd("drilling down"),this.tiles[s]?bt(this.tiles[s],i):null):null};var Pt=function(e){function n(t,n,r,i){e.call(this,t,n,r,Ct),i&&(this.loadGeoJSON=i)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.loadData=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=e,this._pendingLoadDataParams=t,this._state&&"Idle"!==this._state?this._state="NeedsLoadData":(this._state="Coalescing",this._loadData())},n.prototype._loadData=function(){var e=this;if(this._pendingCallback&&this._pendingLoadDataParams){var n=this._pendingCallback,r=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var i=!!(r&&r.request&&r.request.collectResourceTiming)&&new u.Performance(r.request);this.loadGeoJSON(r,(function(o,a){if(o||!a)return n(o);if("object"!=typeof a)return n(new Error("Input data given to '"+r.source+"' is not a valid GeoJSON object."));!function t(e,n){switch(e&&e.type||null){case"FeatureCollection":return e.features=e.features.map(y(t,n)),e;case"GeometryCollection":return e.geometries=e.geometries.map(y(t,n)),e;case"Feature":return e.geometry=t(e.geometry,n),e;case"Polygon":case"MultiPolygon":return function(t,e){return"Polygon"===t.type?t.coordinates=v(t.coordinates,e):"MultiPolygon"===t.type&&(t.coordinates=t.coordinates.map(y(v,e))),t}(e,n);default:return e}}(a,!0);try{e._geoJSONIndex=r.cluster?new q(function(e){var n=e.superclusterOptions,r=e.clusterProperties;if(!r||!n)return n;for(var i={},o={},a={accumulated:null,zoom:0},s={properties:null},u=Object.keys(r),c=0,l=u;c=0?0:e.button},n.remove=function(t){t.parentNode&&t.parentNode.removeChild(t)};var f=function(e){function n(){e.call(this),this.images={},this.updatedImages={},this.callbackDispatchedThisFrame={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.isLoaded=function(){return this.loaded},n.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,n=this.requestors;e=0?1.2:1))}function m(t,e,n,r,i,o,a){for(var s=0;s65535)e(new Error("glyphs > 65535 not supported"));else{var u=o.requests[s];u||(u=o.requests[s]=[],v.loadGlyphRange(n,s,r.url,r.requestManager,(function(t,e){if(e)for(var n in e)r._doesCharSupportLocalGlyph(+n)||(o.glyphs[+n]=e[+n]);for(var i=0,a=u;ithis.height)return t.warnOnce("LineAtlas out of space"),null;for(var o=0,a=0;a=r&&e.x=i&&e.y0&&(u[new t.OverscaledTileID(e.overscaledZ,o,n.z,i,n.y-1).key]={backfilled:!1},u[new t.OverscaledTileID(e.overscaledZ,e.wrap,n.z,n.x,n.y-1).key]={backfilled:!1},u[new t.OverscaledTileID(e.overscaledZ,s,n.z,a,n.y-1).key]={backfilled:!1}),n.y+10&&(r.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event("data",r))}}))},n.prototype.onAdd=function(t){this.map=t,this.load()},n.prototype.setData=function(e){var n=this;return this._data=e,this.fire(new t.Event("dataloading",{dataType:"source"})),this._updateWorkerData((function(e){if(e)n.fire(new t.ErrorEvent(e));else{var r={dataType:"source",sourceDataType:"content"};n._collectResourceTiming&&n._resourceTiming&&n._resourceTiming.length>0&&(r.resourceTiming=n._resourceTiming,n._resourceTiming=[]),n.fire(new t.Event("data",r))}})),this},n.prototype.getClusterExpansionZoom=function(t,e){return this.actor.send("geojson.getClusterExpansionZoom",{clusterId:t,source:this.id},e),this},n.prototype.getClusterChildren=function(t,e){return this.actor.send("geojson.getClusterChildren",{clusterId:t,source:this.id},e),this},n.prototype.getClusterLeaves=function(t,e,n,r){return this.actor.send("geojson.getClusterLeaves",{source:this.id,clusterId:t,limit:e,offset:n},r),this},n.prototype._updateWorkerData=function(e){var n=this;this._loaded=!1;var r=t.extend({},this.workerOptions),i=this._data;"string"==typeof i?(r.request=this.map._requestManager.transformRequest(t.browser.resolveURL(i),t.ResourceType.Source),r.request.collectResourceTiming=this._collectResourceTiming):r.data=JSON.stringify(i),this.actor.send(this.type+".loadData",r,(function(t,i){n._removed||i&&i.abandoned||(n._loaded=!0,i&&i.resourceTiming&&i.resourceTiming[n.id]&&(n._resourceTiming=i.resourceTiming[n.id].slice(0)),n.actor.send(n.type+".coalesce",{source:r.source},null),e(t))}))},n.prototype.loaded=function(){return this._loaded},n.prototype.loadTile=function(e,n){var r=this,i=e.actor?"reloadTile":"loadTile";e.actor=this.actor;var o={type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes};e.request=this.actor.send(i,o,(function(t,o){return delete e.request,e.unloadVectorData(),e.aborted?n(null):t?n(t):(e.loadVectorData(o,r.map.painter,"reloadTile"===i),n(null))}))},n.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.aborted=!0},n.prototype.unloadTile=function(t){t.unloadVectorData(),t.clearMask(),this.actor.send("removeTile",{uid:t.uid,type:this.type,source:this.id})},n.prototype.onRemove=function(){this._removed=!0,this.actor.send("removeSource",{type:this.type,source:this.id})},n.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},n.prototype.hasTransition=function(){return!1},n}(t.Evented),I=function(e){function n(t,n,r,i){e.call(this),this.id=t,this.dispatcher=r,this.coordinates=n.coordinates,this.type="image",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this._loaded=!1,this.setEventedParent(i),this.options=n}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.load=function(e,n){var r=this;this._loaded=!1,this.fire(new t.Event("dataloading",{dataType:"source"})),this.url=this.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),(function(i,o){r._loaded=!0,i?r.fire(new t.ErrorEvent(i)):o&&(r.image=o,e&&(r.coordinates=e),n&&n(),r._finishLoading())}))},n.prototype.loaded=function(){return this._loaded},n.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,(function(){e.texture=null})),this):this},n.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})))},n.prototype.onAdd=function(t){this.map=t,this.load()},n.prototype.setCoordinates=function(e){var n=this;this.coordinates=e;var r=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var n=1/0,r=1/0,i=-1/0,o=-1/0,a=0,s=e;an.end(0)?this.fire(new t.ErrorEvent(new t.ValidationError("sources."+this.id,null,"Playback for this video can be set only between the "+n.start(0)+" and "+n.end(0)+"-second mark."))):this.video.currentTime=e}},n.prototype.getVideo=function(){return this.video},n.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))},n.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,n=e.gl;for(var r in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(n.LINEAR,n.CLAMP_TO_EDGE),n.texSubImage2D(n.TEXTURE_2D,0,0,0,n.RGBA,n.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,n.RGBA),this.texture.bind(n.LINEAR,n.CLAMP_TO_EDGE)),this.tiles){var i=this.tiles[r];"loaded"!==i.state&&(i.state="loaded",i.texture=this.texture)}}},n.prototype.serialize=function(){return{type:"video",urls:this.urls,coordinates:this.coordinates}},n.prototype.hasTransition=function(){return this.video&&!this.video.paused},n}(I),R=function(e){function n(n,r,i,o){e.call(this,n,r,i,o),r.coordinates?Array.isArray(r.coordinates)&&4===r.coordinates.length&&!r.coordinates.some((function(t){return!Array.isArray(t)||2!==t.length||t.some((function(t){return"number"!=typeof t}))}))||this.fire(new t.ErrorEvent(new t.ValidationError("sources."+n,null,'"coordinates" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError("sources."+n,null,'missing required property "coordinates"'))),r.animate&&"boolean"!=typeof r.animate&&this.fire(new t.ErrorEvent(new t.ValidationError("sources."+n,null,'optional "animate" property must be a boolean value'))),r.canvas?"string"==typeof r.canvas||r.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError("sources."+n,null,'"canvas" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError("sources."+n,null,'missing required property "canvas"'))),this.options=r,this.animate=void 0===r.animate||r.animate}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.load=function(){this._loaded=!0,this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error("Canvas dimensions cannot be less than or equal to zero."))):(this.play=function(){this._playing=!0,this.map.triggerRepaint()},this.pause=function(){this._playing&&(this.prepare(),this._playing=!1)},this._finishLoading())},n.prototype.getCanvas=function(){return this.canvas},n.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play()},n.prototype.onRemove=function(){this.pause()},n.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var n=this.map.painter.context,r=n.gl;for(var i in this.boundsBuffer||(this.boundsBuffer=n.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(n,this.canvas,r.RGBA,{premultiply:!0}),this.tiles){var o=this.tiles[i];"loaded"!==o.state&&(o.state="loaded",o.texture=this.texture)}}},n.prototype.serialize=function(){return{type:"canvas",coordinates:this.coordinates}},n.prototype.hasTransition=function(){return this._playing},n.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];tthis.max){var a=this._getAndRemoveByKey(this.order[0]);a&&this.onRemove(a)}return this},F.prototype.has=function(t){return t.wrapped().key in this.data},F.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},F.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},F.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},F.prototype.remove=function(t,e){if(!this.has(t))return this;var n=t.wrapped().key,r=void 0===e?0:this.data[n].indexOf(e),i=this.data[n][r];return this.data[n].splice(r,1),i.timeout&&clearTimeout(i.timeout),0===this.data[n].length&&delete this.data[n],this.onRemove(i.value),this.order.splice(this.order.indexOf(n),1),this},F.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this},F.prototype.filter=function(t){var e=[];for(var n in this.data)for(var r=0,i=this.data[n];r1||(Math.abs(n)>1&&(1===Math.abs(n+i)?n+=i:1===Math.abs(n-i)&&(n-=i)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,n,r),t.neighboringTiles&&t.neighboringTiles[o]&&(t.neighboringTiles[o].backfilled=!0)))}},n.prototype.getTile=function(t){return this.getTileByID(t.key)},n.prototype.getTileByID=function(t){return this._tiles[t]},n.prototype._retainLoadedChildren=function(t,e,n,r){for(var i in this._tiles){var o=this._tiles[i];if(!(r[i]||!o.hasData()||o.tileID.overscaledZ<=e||o.tileID.overscaledZ>n)){for(var a=o.tileID;o&&o.tileID.overscaledZ>e+1;){var s=o.tileID.scaledTo(o.tileID.overscaledZ-1);(o=this._tiles[s.key])&&o.hasData()&&(a=s)}for(var u=a;u.overscaledZ>e;)if(t[(u=u.scaledTo(u.overscaledZ-1)).key]){r[a.key]=a;break}}}},n.prototype.findLoadedParent=function(t,e){for(var n=t.overscaledZ-1;n>=e;n--){var r=t.scaledTo(n);if(!r)return;var i=String(r.key),o=this._tiles[i];if(o&&o.hasData())return o;if(this._cache.has(r))return this._cache.get(r)}},n.prototype.updateCacheSize=function(t){var e=(Math.ceil(t.width/this._source.tileSize)+1)*(Math.ceil(t.height/this._source.tileSize)+1),n=Math.floor(5*e),r="number"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,n):n;this._cache.setMaxSize(r)},n.prototype.handleWrapJump=function(t){var e=(t-(void 0===this._prevLng?t:this._prevLng))/360,n=Math.round(e);if(this._prevLng=t,n){var r={};for(var i in this._tiles){var o=this._tiles[i];o.tileID=o.tileID.unwrapTo(o.tileID.wrap+n),r[o.tileID.key]=o}for(var a in this._tiles=r,this._timers)clearTimeout(this._timers[a]),delete this._timers[a];for(var s in this._tiles){var u=this._tiles[s];this._setTileReloadTimer(s,u)}}},n.prototype.update=function(e){var r=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var i;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?i=e.getVisibleUnwrappedCoordinates(this._source.tileID).map((function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)})):(i=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(i=i.filter((function(t){return r._source.hasTile(t)})))):i=[];var o=e.coveringZoomLevel(this._source),a=Math.max(o-n.maxOverzooming,this._source.minzoom),s=Math.max(o+n.maxUnderzooming,this._source.minzoom),u=this._updateRetainedTiles(i,o);if(It(this._source.type)){for(var c={},l={},h=0,f=Object.keys(u);hthis._source.maxzoom){var g=d.children(this._source.maxzoom)[0],m=this.getTile(g);if(m&&m.hasData()){r[g.key]=g;continue}}else{var y=d.children(this._source.maxzoom);if(r[y[0].key]&&r[y[1].key]&&r[y[2].key]&&r[y[3].key])continue}for(var v=A.wasRequested(),_=d.overscaledZ-1;_>=o;--_){var b=d.scaledTo(_);if(i[b.key])break;if(i[b.key]=!0,!(A=this.getTile(b))&&v&&(A=this._addTile(b)),A&&(r[b.key]=b,v=A.wasRequested(),A.hasData()))break}}}return r},n.prototype._addTile=function(e){var n=this._tiles[e.key];if(n)return n;(n=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,n),n.tileID=e,this._state.initializeTileState(n,this.map?this.map.painter:null),this._cacheTimers[e.key]&&(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,n)));var r=Boolean(n);return r||(n=new t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(n,this._tileLoaded.bind(this,n,e.key,n.state))),n?(n.uses++,this._tiles[e.key]=n,r||this._source.fire(new t.Event("dataloading",{tile:n,coord:n.tileID,dataType:"source"})),n):null},n.prototype._setTileReloadTimer=function(t,e){var n=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var r=e.getExpiryTimeout();r&&(this._timers[t]=setTimeout((function(){n._reloadTile(t,"expired"),delete n._timers[t]}),r))},n.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()&&"reloading"!==e.state?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))))},n.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset()},n.prototype.tilesIn=function(e,n,r){var i=this,o=[],a=this.transform;if(!a)return o;for(var s=r?a.getCameraQueryGeometry(e):e,u=e.map((function(t){return a.pointCoordinate(t)})),c=s.map((function(t){return a.pointCoordinate(t)})),l=this.getIds(),h=1/0,f=1/0,p=-1/0,d=-1/0,A=0,g=c;A=0&&m[1].y+g>=0){var y=u.map((function(t){return s.getTilePoint(t)})),v=c.map((function(t){return s.getTilePoint(t)}));o.push({tile:r,tileID:s,queryGeometry:y,cameraQueryGeometry:v,scale:A})}}},v=0;v=t.browser.now())return!0}return!1},n.prototype.setFeatureState=function(t,e,n){t=t||"_geojsonTileLayer",this._state.updateState(t,e,n)},n.prototype.removeFeatureState=function(t,e,n){t=t||"_geojsonTileLayer",this._state.removeFeatureState(t,e,n)},n.prototype.getFeatureState=function(t,e){return t=t||"_geojsonTileLayer",this._state.getState(t,e)},n.prototype.setDependencies=function(t,e,n){var r=this._tiles[t];r&&r.setDependencies(e,n)},n.prototype.reloadTilesForDependencies=function(t,e){for(var n in this._tiles)this._tiles[n].hasDependency(t,e)&&this._reloadTile(n,"reloading");this._cache.filter((function(n){return!n.hasDependency(t,e)}))},n}(t.Evented);function Mt(t,e){return t%32-e%32||e-t}function It(t){return"raster"===t||"image"===t||"video"===t}function Bt(){return new t.window.Worker(ni.workerUrl)}Pt.maxOverzooming=10,Pt.maxUnderzooming=3;var Rt=function(){this.active={}};Rt.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length=-e[0]&&n<=e[0]&&r>=-e[1]&&r<=e[1]}function Kt(e,n,r,i,o,a,s,u){var c=i?e.textSizeData:e.iconSizeData,l=t.evaluateSizeForZoom(c,r.transform.zoom),h=[256/r.width*2+1,256/r.height*2+1],f=i?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;f.clear();for(var p=e.lineVertexArray,d=i?e.text.placedSymbolArray:e.icon.placedSymbolArray,A=r.transform.width/r.transform.height,g=!1,m=0;mMath.abs(r.x-n.x)*i?{useVertical:!0}:(e===t.WritingMode.vertical?n.yr.x)?{needsFlipping:!0}:null}function te(e,n,r,i,o,a,s,u,c,l,h,f,p,d){var A,g=n/24,m=e.lineOffsetX*g,y=e.lineOffsetY*g;if(e.numGlyphs>1){var v=e.glyphStartIndex+e.numGlyphs,_=e.lineStartIndex,b=e.lineStartIndex+e.lineLength,x=Yt(g,u,m,y,r,h,f,e,c,a,p,!1);if(!x)return{notEnoughRoom:!0};var w=Zt(x.first.point,s).point,E=Zt(x.last.point,s).point;if(i&&!r){var O=$t(e.writingMode,w,E,d);if(O)return O}A=[x.first];for(var S=e.glyphStartIndex+1;S0?M.point:ee(f,P,T,1,o),B=$t(e.writingMode,T,I,d);if(B)return B}var R=ne(g*u.getoffsetX(e.glyphStartIndex),m,y,r,h,f,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,c,a,p,!1);if(!R)return{notEnoughRoom:!0};A=[R]}for(var k=0,L=A;k0?1:-1,g=0;i&&(A*=-1,g=Math.PI),A<0&&(g+=Math.PI);for(var m=A>0?u+s:u+s+1,y=m,v=o,_=o,b=0,x=0,w=Math.abs(d);b+x<=w;){if((m+=A)=c)return null;if(_=v,void 0===(v=f[m])){var E=new t.Point(l.getx(m),l.gety(m)),O=Zt(E,h);if(O.signedDistanceFromCamera>0)v=f[m]=O.point;else{var S=m-A;v=ee(0===b?a:new t.Point(l.getx(S),l.gety(S)),E,_,w-b+1,h)}}b+=x,x=_.dist(v)}var T=(w-b)/x,C=v.sub(_),P=C.mult(T)._add(_);return P._add(C._unit()._perp()._mult(r*A)),{point:P,angle:g+Math.atan2(v.y-_.y,v.x-_.x),tileDistance:p?{prevTileDistance:m-A===y?0:l.gettileUnitDistanceFromAnchor(m-A),lastSegmentViewportDistance:w-b}:null}}qt.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},qt.prototype.insert=function(t,e,n,r,i){this._forEachCell(e,n,r,i,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(n),this.bboxes.push(r),this.bboxes.push(i)},qt.prototype.insertCircle=function(t,e,n,r){this._forEachCell(e-r,n-r,e+r,n+r,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(n),this.circles.push(r)},qt.prototype._insertBoxCell=function(t,e,n,r,i,o){this.boxCells[i].push(o)},qt.prototype._insertCircleCell=function(t,e,n,r,i,o){this.circleCells[i].push(o)},qt.prototype._query=function(t,e,n,r,i,o){if(n<0||t>this.width||r<0||e>this.height)return!i&&[];var a=[];if(t<=0&&e<=0&&this.width<=n&&this.height<=r){if(i)return!0;for(var s=0;s0:a},qt.prototype._queryCircle=function(t,e,n,r,i){var o=t-n,a=t+n,s=e-n,u=e+n;if(a<0||o>this.width||u<0||s>this.height)return!r&&[];var c=[],l={hitTest:r,circle:{x:t,y:e,radius:n},seenUids:{box:{},circle:{}}};return this._forEachCell(o,s,a,u,this._queryCellCircle,c,l,i),r?c.length>0:c},qt.prototype.query=function(t,e,n,r,i){return this._query(t,e,n,r,!1,i)},qt.prototype.hitTest=function(t,e,n,r,i){return this._query(t,e,n,r,!0,i)},qt.prototype.hitTestCircle=function(t,e,n,r){return this._queryCircle(t,e,n,!0,r)},qt.prototype._queryCell=function(t,e,n,r,i,o,a,s){var u=a.seenUids,c=this.boxCells[i];if(null!==c)for(var l=this.bboxes,h=0,f=c;h=l[d+0]&&r>=l[d+1]&&(!s||s(this.boxKeys[p]))){if(a.hitTest)return o.push(!0),!0;o.push({key:this.boxKeys[p],x1:l[d],y1:l[d+1],x2:l[d+2],y2:l[d+3]})}}}var A=this.circleCells[i];if(null!==A)for(var g=this.circles,m=0,y=A;ma*a+s*s},qt.prototype._circleAndRectCollide=function(t,e,n,r,i,o,a){var s=(o-r)/2,u=Math.abs(t-(r+s));if(u>s+n)return!1;var c=(a-i)/2,l=Math.abs(e-(i+c));if(l>c+n)return!1;if(u<=s||l<=c)return!0;var h=u-s,f=l-c;return h*h+f*f<=n*n};var re=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function ie(t,e){for(var n=0;nT)se(e,C,!1);else{var R=this.projectPoint(c,P,M),k=I*E;if(d.length>0){var L=R.x-d[d.length-4],D=R.y-d[d.length-3];if(k*k*2>L*L+D*D&&C+8-S&&j=this.screenRightBoundary||r<100||e>this.screenBottomBoundary},ae.prototype.isInsideGrid=function(t,e,n,r){return n>=0&&t=0&&e0?(this.prevPlacement&&this.prevPlacement.variableOffsets[h.crossTileID]&&this.prevPlacement.placements[h.crossTileID]&&this.prevPlacement.placements[h.crossTileID].text&&(A=this.prevPlacement.variableOffsets[h.crossTileID].anchor),this.variableOffsets[h.crossTileID]={textOffset:g,width:n,height:r,anchor:t,textBoxScale:i,prevAnchor:A},this.markUsedJustification(f,t,h,p),f.allowVerticalPlacement&&(this.markUsedOrientation(f,p,h),this.placedOrientations[h.crossTileID]=p),{shift:m,placedGlyphBoxes:y}):void 0},ge.prototype.placeLayerBucket=function(e,n,r,i,o,a,s,u,c,l){var h=this,f=e.layers[0].layout,p=t.evaluateSizeForZoom(e.textSizeData,this.transform.zoom),d=f.get("text-optional"),A=f.get("icon-optional"),g=f.get("text-allow-overlap"),m=f.get("icon-allow-overlap"),y=g&&(m||!e.hasIconData()||A),v=m&&(g||!e.hasTextData()||d),_=this.collisionGroups.get(e.sourceID),b="map"===f.get("text-rotation-alignment"),x="map"===f.get("text-pitch-alignment"),w="none"!==f.get("icon-text-fit"),E="viewport-y"===f.get("symbol-z-order");!e.collisionArrays&&l&&e.deserializeCollisionBoxes(l);var O=function(i,l){if(!c[i.crossTileID])if(u)h.placements[i.crossTileID]=new he(!1,!1,!1);else{var E,O=!1,S=!1,T=!0,C=null,P={box:null,offscreen:null},M={box:null,offscreen:null},I=null,B=null,R=0,k=0,L=0;l.textFeatureIndex&&(R=l.textFeatureIndex),l.verticalTextFeatureIndex&&(k=l.verticalTextFeatureIndex);var D=l.textBox;if(D){var j=function(n){var r=t.WritingMode.horizontal;if(e.allowVerticalPlacement&&!n&&h.prevPlacement){var o=h.prevPlacement.placedOrientations[i.crossTileID];o&&(h.placedOrientations[i.crossTileID]=o,r=o,h.markUsedOrientation(e,r,i))}return r},F=function(n,r){if(e.allowVerticalPlacement&&i.numVerticalGlyphVertices>0&&l.verticalTextBox)for(var o=0,a=e.writingModes;o0&&(z=z.filter((function(t){return t!==U.anchor}))).unshift(U.anchor)}var N=function(t,r,o){for(var s=t.x2-t.x1,u=t.y2-t.y1,c=i.textBoxScale,l=w&&!m?r:null,f={box:[],offscreen:!1},p=g?2*z.length:z.length,d=0;d=z.length,v=h.attemptAnchorPlacement(A,t,s,u,c,b,x,a,n,_,y,i,e,o,l);if(v&&(f=v.placedGlyphBoxes)&&f.box&&f.box.length){O=!0,C=v.shift;break}}return f};F((function(){return N(D,l.iconBox,t.WritingMode.horizontal)}),(function(){var n=l.verticalTextBox,r=P&&P.box&&P.box.length;return e.allowVerticalPlacement&&!r&&i.numVerticalGlyphVertices>0&&n?N(n,l.verticalIconBox,t.WritingMode.vertical):{box:null,offscreen:null}})),P&&(O=P.box,T=P.offscreen);var G=j(P&&P.box);if(!O&&h.prevPlacement){var V=h.prevPlacement.variableOffsets[i.crossTileID];V&&(h.variableOffsets[i.crossTileID]=V,h.markUsedJustification(e,V.anchor,i,G))}}else{var H=function(t,r){var o=h.collisionIndex.placeCollisionBox(t,f.get("text-allow-overlap"),a,n,_.predicate);return o&&o.box&&o.box.length&&(h.markUsedOrientation(e,r,i),h.placedOrientations[i.crossTileID]=r),o};F((function(){return H(D,t.WritingMode.horizontal)}),(function(){var n=l.verticalTextBox;return e.allowVerticalPlacement&&i.numVerticalGlyphVertices>0&&n?H(n,t.WritingMode.vertical):{box:null,offscreen:null}})),j(P&&P.box&&P.box.length)}}O=(E=P)&&E.box&&E.box.length>0,T=E&&E.offscreen;var W=l.textCircles;if(W){var q=e.text.placedSymbolArray.get(i.centerJustifiedTextSymbolIndex),X=t.evaluateSizeForFeature(e.textSizeData,p,q);I=h.collisionIndex.placeCollisionCircles(W,f.get("text-allow-overlap"),o,a,q,e.lineVertexArray,e.glyphOffsetArray,X,n,r,s,x,_.predicate),O=f.get("text-allow-overlap")||I.circles.length>0,T=T&&I.offscreen}if(l.iconFeatureIndex&&(L=l.iconFeatureIndex),l.iconBox){var J=function(t){var e=w&&C?Ae(t,C.x,C.y,b,x,h.transform.angle):t;return h.collisionIndex.placeCollisionBox(e,f.get("icon-allow-overlap"),a,n,_.predicate)};S=M&&M.box&&M.box.length&&l.verticalIconBox?(B=J(l.verticalIconBox)).box.length>0:(B=J(l.iconBox)).box.length>0,T=T&&B.offscreen}var Z=d||0===i.numHorizontalGlyphVertices&&0===i.numVerticalGlyphVertices,Q=A||0===i.numIconVertices;Z||Q?Q?Z||(S=S&&O):O=S&&O:S=O=S&&O,O&&E&&E.box&&(M&&M.box&&k?h.collisionIndex.insertCollisionBox(E.box,f.get("text-ignore-placement"),e.bucketInstanceId,k,_.ID):h.collisionIndex.insertCollisionBox(E.box,f.get("text-ignore-placement"),e.bucketInstanceId,R,_.ID)),S&&B&&h.collisionIndex.insertCollisionBox(B.box,f.get("icon-ignore-placement"),e.bucketInstanceId,L,_.ID),O&&I&&h.collisionIndex.insertCollisionCircles(I.circles,f.get("text-ignore-placement"),e.bucketInstanceId,R,_.ID),h.placements[i.crossTileID]=new he(O||y,S||v,T||e.justReloaded),c[i.crossTileID]=!0}};if(E)for(var S=e.getSortedSymbolIndexes(this.transform.angle),T=S.length-1;T>=0;--T){var C=S[T];O(e.symbolInstances.get(C),e.collisionArrays[C])}else for(var P=0;P=0&&(e.text.placedSymbolArray.get(c).crossTileID=o>=0&&c!==o?0:r.crossTileID)}},ge.prototype.markUsedOrientation=function(e,n,r){for(var i=n===t.WritingMode.horizontal||n===t.WritingMode.horizontalOnly?n:0,o=n===t.WritingMode.vertical?n:0,a=0,s=[r.leftJustifiedTextSymbolIndex,r.centerJustifiedTextSymbolIndex,r.rightJustifiedTextSymbolIndex];a0||u>0,v=o.numIconVertices>0,_=i.placedOrientations[o.crossTileID],b=_===t.WritingMode.vertical,x=_===t.WritingMode.horizontal||_===t.WritingMode.horizontalOnly;if(y){var w=Oe(m.text),E=b?Se:w;d(e.text,s,E);var O=x?Se:w;d(e.text,u,O);var S=m.text.isHidden();[o.rightJustifiedTextSymbolIndex,o.centerJustifiedTextSymbolIndex,o.leftJustifiedTextSymbolIndex].forEach((function(t){t>=0&&(e.text.placedSymbolArray.get(t).hidden=S||b?1:0)})),o.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(o.verticalPlacedTextSymbolIndex).hidden=S||x?1:0);var T=i.variableOffsets[o.crossTileID];T&&i.markUsedJustification(e,T.anchor,o,_);var C=i.placedOrientations[o.crossTileID];C&&(i.markUsedJustification(e,"left",o,C),i.markUsedOrientation(e,C,o))}if(v){var P=Oe(m.icon),M=!(f&&o.verticalPlacedIconSymbolIndex&&b);if(o.placedIconSymbolIndex>=0){var I=M?P:Se;d(e.icon,o.numIconVertices,I),e.icon.placedSymbolArray.get(o.placedIconSymbolIndex).hidden=m.icon.isHidden()}if(o.verticalPlacedIconSymbolIndex>=0){var B=M?Se:P;d(e.icon,o.numVerticalIconVertices,B),e.icon.placedSymbolArray.get(o.verticalPlacedIconSymbolIndex).hidden=m.icon.isHidden()}}if(e.hasIconCollisionBoxData()||e.hasIconCollisionCircleData()||e.hasTextCollisionBoxData()||e.hasTextCollisionCircleData()){var R=e.collisionArrays[r];if(R){var k=new t.Point(0,0);if(R.textBox||R.verticalTextBox){var L=!0;if(c){var D=i.variableOffsets[A];D?(k=de(D.anchor,D.width,D.height,D.textOffset,D.textBoxScale),l&&k._rotate(h?i.transform.angle:-i.transform.angle)):L=!1}R.textBox&&me(e.textCollisionBox.collisionVertexArray,m.text.placed,!L||b,k.x,k.y),R.verticalTextBox&&me(e.textCollisionBox.collisionVertexArray,m.text.placed,!L||x,k.x,k.y)}var j=Boolean(!x&&R.verticalIconBox);R.iconBox&&me(e.iconCollisionBox.collisionVertexArray,m.icon.placed,j,f?k.x:0,f?k.y:0),R.verticalIconBox&&me(e.iconCollisionBox.collisionVertexArray,m.icon.placed,!j,f?k.x:0,f?k.y:0);var F=R.textCircles;if(F&&e.hasTextCollisionCircleData())for(var z=0;zt},ge.prototype.setStale=function(){this.stale=!0};var ye=Math.pow(2,25),ve=Math.pow(2,24),_e=Math.pow(2,17),be=Math.pow(2,16),xe=Math.pow(2,9),we=Math.pow(2,8),Ee=Math.pow(2,1);function Oe(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,n=Math.floor(127*t.opacity);return n*ye+e*ve+n*_e+e*be+n*xe+e*we+n*Ee+e}var Se=0,Te=function(){this._currentTileIndex=0,this._seenCrossTileIDs={}};Te.prototype.continuePlacement=function(t,e,n,r,i){for(;this._currentTileIndex2};this._currentPlacementIndex>=0;){var s=n[e[this._currentPlacementIndex]],u=this.placement.collisionIndex.transform.zoom;if("symbol"===s.type&&(!s.minzoom||s.minzoom<=u)&&(!s.maxzoom||s.maxzoom>u)){if(this._inProgressLayer||(this._inProgressLayer=new Te),this._inProgressLayer.continuePlacement(r[s.source],this.placement,this._showCollisionBoxes,s,a))return;delete this._inProgressLayer}this._currentPlacementIndex--}this._done=!0},Ce.prototype.commit=function(t){return this.placement.commit(t),this.placement};var Pe=512/t.EXTENT/2,Me=function(t,e,n){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=n;for(var r=0;rt.overscaledZ)for(var s in a){var u=a[s];u.tileID.isChildOf(t)&&u.findMatches(e.symbolInstances,t,i)}else{var c=a[t.scaledTo(Number(o)).key];c&&c.findMatches(e.symbolInstances,t,i)}}for(var l=0;l1?"@2x":"",u=t.getJSON(n.transformRequest(n.normalizeSpriteURL(e,s,".json"),t.ResourceType.SpriteJSON),(function(t,e){u=null,a||(a=t,i=e,l())})),c=t.getImage(n.transformRequest(n.normalizeSpriteURL(e,s,".png"),t.ResourceType.SpriteImage),(function(t,e){c=null,a||(a=t,o=e,l())}));function l(){if(a)r(a);else if(i&&o){var e=t.browser.getImageData(o),n={};for(var s in i){var u=i[s],c=u.width,l=u.height,h=u.x,f=u.y,p=u.sdf,d=u.pixelRatio,A=u.stretchX,g=u.stretchY,m=u.content,y=new t.RGBAImage({width:c,height:l});t.RGBAImage.copy(e,y,{x:h,y:f},{x:0,y:0},{width:c,height:l}),n[s]={data:y,pixelRatio:d,sdf:p,stretchX:A,stretchY:g,content:m}}r(null,n)}}return{cancel:function(){u&&(u.cancel(),u=null),c&&(c.cancel(),c=null)}}}(e.sprite,this.map._requestManager,(function(e,n){if(r._spriteRequest=null,e)r.fire(new t.ErrorEvent(e));else if(n)for(var i in n)r.imageManager.addImage(i,n[i]);r.imageManager.setLoaded(!0),r.dispatcher.broadcast("setImages",r.imageManager.listImages()),r.fire(new t.Event("data",{dataType:"style"}))})):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var o=jt(this.stylesheet.layers);this._order=o.map((function(t){return t.id})),this._layers={};for(var a=0,s=o;a0)throw new Error("Unimplemented: "+i.map((function(t){return t.command})).join(", ")+".");return r.forEach((function(t){"setTransition"!==t.command&&n[t.command].apply(n,t.args)})),this.stylesheet=e,!0},n.prototype.addImage=function(e,n){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error("An image with this name already exists.")));this.imageManager.addImage(e,n),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event("data",{dataType:"style"}))},n.prototype.updateImage=function(t,e){this.imageManager.updateImage(t,e)},n.prototype.getImage=function(t){return this.imageManager.getImage(t)},n.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error("No image with this name exists.")));this.imageManager.removeImage(e),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event("data",{dataType:"style"}))},n.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},n.prototype.addSource=function(e,n,r){var i=this;if(void 0===r&&(r={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error("There is already a source with this ID");if(!n.type)throw new Error("The type property must be defined, but the only the following properties were given: "+Object.keys(n).join(", ")+".");if(!(["vector","raster","geojson","video","image"].indexOf(n.type)>=0&&this._validate(t.validateStyle.source,"sources."+e,n,null,r))){this.map&&this.map._collectResourceTiming&&(n.collectResourceTiming=!0);var o=this.sourceCaches[e]=new Pt(e,n,this.dispatcher);o.style=this,o.setEventedParent(this,(function(){return{isSourceLoaded:i.loaded(),source:o.serialize(),sourceId:e}})),o.onAdd(this.map),this._changed=!0}},n.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error("There is no source with this ID");for(var n in this._layers)if(this._layers[n].source===e)return this.fire(new t.ErrorEvent(new Error('Source "'+e+'" cannot be removed while layer "'+n+'" is using it.')));var r=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],r.fire(new t.Event("data",{sourceDataType:"metadata",dataType:"source",sourceId:e})),r.setEventedParent(null),r.clearTiles(),r.onRemove&&r.onRemove(this.map),this._changed=!0},n.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0},n.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},n.prototype.addLayer=function(e,n,r){void 0===r&&(r={}),this._checkLoaded();var i=e.id;if(this.getLayer(i))this.fire(new t.ErrorEvent(new Error('Layer with id "'+i+'" already exists on this map')));else{var o;if("custom"===e.type){if(ke(this,t.validateCustomStyleLayer(e)))return;o=t.createStyleLayer(e)}else{if("object"==typeof e.source&&(this.addSource(i,e.source),e=t.clone$1(e),e=t.extend(e,{source:i})),this._validate(t.validateStyle.layer,"layers."+i,e,{arrayIndex:-1},r))return;o=t.createStyleLayer(e),this._validateLayer(o),o.setEventedParent(this,{layer:{id:i}})}var a=n?this._order.indexOf(n):this._order.length;if(n&&-1===a)this.fire(new t.ErrorEvent(new Error('Layer with id "'+n+'" does not exist on this map.')));else{if(this._order.splice(a,0,i),this._layerOrderChanged=!0,this._layers[i]=o,this._removedLayers[i]&&o.source&&"custom"!==o.type){var s=this._removedLayers[i];delete this._removedLayers[i],s.type!==o.type?this._updatedSources[o.source]="clear":(this._updatedSources[o.source]="reload",this.sourceCaches[o.source].pause())}this._updateLayer(o),o.onAdd&&o.onAdd(this.map)}}},n.prototype.moveLayer=function(e,n){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==n){var r=this._order.indexOf(e);this._order.splice(r,1);var i=n?this._order.indexOf(n):this._order.length;n&&-1===i?this.fire(new t.ErrorEvent(new Error('Layer with id "'+n+'" does not exist on this map.'))):(this._order.splice(i,0,e),this._layerOrderChanged=!0)}}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be moved.")))},n.prototype.removeLayer=function(e){this._checkLoaded();var n=this._layers[e];if(n){n.setEventedParent(null);var r=this._order.indexOf(e);this._order.splice(r,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=n,delete this._layers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],n.onRemove&&n.onRemove(this.map)}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be removed.")))},n.prototype.getLayer=function(t){return this._layers[t]},n.prototype.setLayerZoomRange=function(e,n,r){this._checkLoaded();var i=this.getLayer(e);i?i.minzoom===n&&i.maxzoom===r||(null!=n&&(i.minzoom=n),null!=r&&(i.maxzoom=r),this._updateLayer(i)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot have zoom extent.")))},n.prototype.setFilter=function(e,n,r){void 0===r&&(r={}),this._checkLoaded();var i=this.getLayer(e);if(i){if(!t.deepEqual(i.filter,n))return null==n?(i.filter=void 0,void this._updateLayer(i)):void(this._validate(t.validateStyle.filter,"layers."+i.id+".filter",n,null,r)||(i.filter=t.clone$1(n),this._updateLayer(i)))}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be filtered.")))},n.prototype.getFilter=function(e){return t.clone$1(this.getLayer(e).filter)},n.prototype.setLayoutProperty=function(e,n,r,i){void 0===i&&(i={}),this._checkLoaded();var o=this.getLayer(e);o?t.deepEqual(o.getLayoutProperty(n),r)||(o.setLayoutProperty(n,r,i),this._updateLayer(o)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},n.prototype.getLayoutProperty=function(e,n){var r=this.getLayer(e);if(r)return r.getLayoutProperty(n);this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style.")))},n.prototype.setPaintProperty=function(e,n,r,i){void 0===i&&(i={}),this._checkLoaded();var o=this.getLayer(e);o?t.deepEqual(o.getPaintProperty(n),r)||(o.setPaintProperty(n,r,i)&&this._updateLayer(o),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},n.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},n.prototype.setFeatureState=function(e,n){this._checkLoaded();var r=e.source,i=e.sourceLayer,o=this.sourceCaches[r],a=parseInt(e.id,10);if(void 0!==o){var s=o.getSource().type;"geojson"===s&&i?this.fire(new t.ErrorEvent(new Error("GeoJSON sources cannot have a sourceLayer parameter."))):"vector"!==s||i?isNaN(a)||a<0?this.fire(new t.ErrorEvent(new Error("The feature id parameter must be provided and non-negative."))):o.setFeatureState(i,a,n):this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")))}else this.fire(new t.ErrorEvent(new Error("The source '"+r+"' does not exist in the map's style.")))},n.prototype.removeFeatureState=function(e,n){this._checkLoaded();var r=e.source,i=this.sourceCaches[r];if(void 0!==i){var o=i.getSource().type,a="vector"===o?e.sourceLayer:void 0,s=parseInt(e.id,10);"vector"!==o||a?void 0!==e.id&&isNaN(s)||s<0?this.fire(new t.ErrorEvent(new Error("The feature id parameter must be non-negative."))):n&&"string"!=typeof e.id&&"number"!=typeof e.id?this.fire(new t.ErrorEvent(new Error("A feature id is requred to remove its specific state property."))):i.removeFeatureState(a,s,n):this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")))}else this.fire(new t.ErrorEvent(new Error("The source '"+r+"' does not exist in the map's style.")))},n.prototype.getFeatureState=function(e){this._checkLoaded();var n=e.source,r=e.sourceLayer,i=this.sourceCaches[n],o=parseInt(e.id,10);if(void 0!==i)if("vector"!==i.getSource().type||r){if(!(isNaN(o)||o<0))return i.getFeatureState(r,o);this.fire(new t.ErrorEvent(new Error("The feature id parameter must be provided and non-negative.")))}else this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")));else this.fire(new t.ErrorEvent(new Error("The source '"+n+"' does not exist in the map's style.")))},n.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},n.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,(function(t){return t.serialize()})),layers:this._serializeLayers(this._order)},(function(t){return void 0!==t}))},n.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&"raster"!==this.sourceCaches[t.source].getSource().type&&(this._updatedSources[t.source]="reload",this.sourceCaches[t.source].pause()),this._changed=!0},n.prototype._flattenAndSortRenderedFeatures=function(t){for(var e=this,n=function(t){return"fill-extrusion"===e._layers[t].type},r={},i=[],o=this._order.length-1;o>=0;o--){var a=this._order[o];if(n(a)){r[a]=o;for(var s=0,u=t;s=0;d--){var A=this._order[d];if(n(A))for(var g=i.length-1;g>=0;g--){var m=i[g].feature;if(r[m.layer.id] 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}","attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}"),Xe=fn("uniform float u_overscale_factor;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {float alpha=0.5;vec4 color=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {color=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {color*=.2;}float extrude_scale_length=length(v_extrude_scale);float extrude_length=length(v_extrude)*extrude_scale_length;float stroke_width=15.0*extrude_scale_length/u_overscale_factor;float radius=v_radius*extrude_scale_length;float distance_to_edge=abs(extrude_length-radius);float opacity_t=smoothstep(-stroke_width,0.0,-distance_to_edge);gl_FragColor=opacity_t*color;}","attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);highp float padding_factor=1.2;gl_Position.xy+=a_extrude*u_extrude_scale*padding_factor*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;v_radius=abs(a_extrude.y);v_extrude=a_extrude*padding_factor;v_extrude_scale=u_extrude_scale*u_camera_to_center_distance*collision_perspective_ratio;}"),Je=fn("uniform highp vec4 u_color;void main() {gl_FragColor=u_color;}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),Ze=fn("#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\ngl_FragColor=color*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);}"),Qe=fn("varying vec2 v_pos;\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}"),Ke=fn("uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}"),Ye=fn("uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}"),$e=fn("varying vec4 v_color;void main() {gl_FragColor=v_color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\n#pragma mapbox: define highp float base\n#pragma mapbox: define highp float height\n#pragma mapbox: define highp vec4 color\nvoid main() {\n#pragma mapbox: initialize highp float base\n#pragma mapbox: initialize highp float height\n#pragma mapbox: initialize highp vec4 color\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}"),tn=fn("uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec4 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\n? a_pos\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}"),en=fn("#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform float u_maxzoom;uniform vec4 u_unpack;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;data.a=-1.0;return dot(data,u_unpack)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggeration=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/ pow(2.0,(u_zoom-u_maxzoom)*exaggeration+19.2562-u_zoom);gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}"),nn=fn("uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\n#define PI 3.141592653589793\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}"),rn=fn("uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}"),on=fn("uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp float v_lineprogress;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,vec2(v_lineprogress,0.5));gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define MAX_LINE_DISTANCE 32767.0\n#define scale 0.015873016\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_lineprogress;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_lineprogress=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0/MAX_LINE_DISTANCE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}"),an=fn("uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec4 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x,1.0);float x_b=mod(v_linesofar/pattern_size_b.x,1.0);float y_a=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_a.y+2.0)/2.0)/pattern_size_a.y);float y_b=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_b.y+2.0)/2.0)/pattern_size_b.y);vec2 pos_a=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,vec2(x_a,y_a));vec2 pos_b=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,vec2(x_b,y_b));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\n#define LINE_DISTANCE_SCALE 2.0\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);}"),sn=fn("uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\n#define LINE_DISTANCE_SCALE 2.0\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}"),un=fn("uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}"),cn=fn("uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_minFontScale=a_pixeloffset.zw/256.0;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset/16.0),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}"),ln=fn("#define SDF_PX 8.0\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale+a_pxoffset),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=a_tex/u_texsize;v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}"),hn=fn("#define SDF_PX 8.0\n#define SDF 1.0\n#define ICON 0.0\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;varying vec4 v_data0;varying vec4 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nfloat fade_opacity=v_data1[2];if (v_data1.w==ICON) {vec2 tex_icon=v_data0.zw;lowp float alpha=opacity*fade_opacity;gl_FragColor=texture2D(u_texture_icon,tex_icon)*alpha;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\nreturn;}vec2 tex=v_data0.xy;float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_data1.x;float size=v_data1.y;float fontScale=size/24.0;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec2 u_texsize_icon;varying vec4 v_data0;varying vec4 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);float is_sdf=a_size[0]-2.0*a_size_min;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=size/24.0;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0.xy=a_tex/u_texsize;v_data0.zw=a_tex/u_texsize_icon;v_data1=vec4(gamma_scale,size,interpolated_fade_opacity,is_sdf);}");function fn(t,e){var n=/#pragma mapbox: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g,r={};return{fragmentSource:t=t.replace(n,(function(t,e,n,i,o){return r[o]=!0,"define"===e?"\n#ifndef HAS_UNIFORM_u_"+o+"\nvarying "+n+" "+i+" "+o+";\n#else\nuniform "+n+" "+i+" u_"+o+";\n#endif\n":"\n#ifdef HAS_UNIFORM_u_"+o+"\n "+n+" "+i+" "+o+" = u_"+o+";\n#endif\n"})),vertexSource:e=e.replace(n,(function(t,e,n,i,o){var a="float"===i?"vec2":"vec4",s=o.match(/color/)?"color":a;return r[o]?"define"===e?"\n#ifndef HAS_UNIFORM_u_"+o+"\nuniform lowp float u_"+o+"_t;\nattribute "+n+" "+a+" a_"+o+";\nvarying "+n+" "+i+" "+o+";\n#else\nuniform "+n+" "+i+" u_"+o+";\n#endif\n":"vec4"===s?"\n#ifndef HAS_UNIFORM_u_"+o+"\n "+o+" = a_"+o+";\n#else\n "+n+" "+i+" "+o+" = u_"+o+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+o+"\n "+o+" = unpack_mix_"+s+"(a_"+o+", u_"+o+"_t);\n#else\n "+n+" "+i+" "+o+" = u_"+o+";\n#endif\n":"define"===e?"\n#ifndef HAS_UNIFORM_u_"+o+"\nuniform lowp float u_"+o+"_t;\nattribute "+n+" "+a+" a_"+o+";\n#else\nuniform "+n+" "+i+" u_"+o+";\n#endif\n":"vec4"===s?"\n#ifndef HAS_UNIFORM_u_"+o+"\n "+n+" "+i+" "+o+" = a_"+o+";\n#else\n "+n+" "+i+" "+o+" = u_"+o+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+o+"\n "+n+" "+i+" "+o+" = unpack_mix_"+s+"(a_"+o+", u_"+o+"_t);\n#else\n "+n+" "+i+" "+o+" = u_"+o+";\n#endif\n"}))}}var pn=Object.freeze({__proto__:null,prelude:ze,background:Ue,backgroundPattern:Ne,circle:Ge,clippingMask:Ve,heatmap:He,heatmapTexture:We,collisionBox:qe,collisionCircle:Xe,debug:Je,fill:Ze,fillOutline:Qe,fillOutlinePattern:Ke,fillPattern:Ye,fillExtrusion:$e,fillExtrusionPattern:tn,hillshadePrepare:en,hillshade:nn,line:rn,lineGradient:on,linePattern:an,lineSDF:sn,raster:un,symbolIcon:cn,symbolSDF:ln,symbolTextAndIcon:hn}),dn=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null};dn.prototype.bind=function(t,e,n,r,i,o,a,s){this.context=t;for(var u=this.boundPaintVertexBuffers.length!==r.length,c=0;!u&&c>16,u>>16],u_pixel_coord_lower:[65535&s,65535&u]}}An.prototype.draw=function(t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,A){var g,m=t.gl;if(!this.failedToCreate){for(var y in t.program.set(this.program),t.setDepthMode(n),t.setStencilMode(r),t.setColorMode(i),t.setCullFace(o),this.fixedUniforms)this.fixedUniforms[y].set(a[y]);p&&p.setUniforms(t,this.binderUniforms,h,{zoom:f});for(var v=(g={},g[m.LINES]=2,g[m.TRIANGLES]=3,g[m.LINE_STRIP]=1,g)[e],_=0,b=l.get();_0?1-1/(1.001-a):-a),u_contrast_factor:(o=i.paint.get("raster-contrast"),o>0?1/(1-o):1+o),u_spin_weights:jn(i.paint.get("raster-hue-rotate"))};var o,a};function jn(t){t*=Math.PI/180;var e=Math.sin(t),n=Math.cos(t);return[(2*n+1)/3,(-Math.sqrt(3)*e-n+1)/3,(Math.sqrt(3)*e-n+1)/3]}var Fn=function(t,e,n,r,i,o,a,s,u,c){var l=i.transform;return{u_is_size_zoom_constant:+("constant"===t||"source"===t),u_is_size_feature_constant:+("constant"===t||"camera"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:l.cameraToCenterDistance,u_pitch:l.pitch/360*2*Math.PI,u_rotate_symbol:+n,u_aspect_ratio:l.width/l.height,u_fade_change:i.options.fadeDuration?i.symbolFadeChange:1,u_matrix:o,u_label_plane_matrix:a,u_coord_matrix:s,u_is_text:+u,u_pitch_with_map:+r,u_texsize:c,u_texture:0}},zn=function(e,n,r,i,o,a,s,u,c,l,h){var f=o.transform;return t.extend(Fn(e,n,r,i,o,a,s,u,c,l),{u_gamma_scale:i?Math.cos(f._pitch)*f.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+h})},Un=function(e,n,r,i,o,a,s,u,c,l){return t.extend(zn(e,n,r,i,o,a,s,u,!0,c,!0),{u_texsize_icon:l,u_texture_icon:1})},Nn=function(t,e,n){return{u_matrix:t,u_opacity:e,u_color:n}},Gn=function(e,n,r,i,o,a){return t.extend(function(t,e,n,r){var i=n.imageManager.getPattern(t.from.toString()),o=n.imageManager.getPattern(t.to.toString()),a=n.imageManager.getPixelSize(),s=a.width,u=a.height,c=Math.pow(2,r.tileID.overscaledZ),l=r.tileSize*Math.pow(2,n.transform.tileZoom)/c,h=l*(r.tileID.canonical.x+r.tileID.wrap*c),f=l*r.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:i.tl,u_pattern_br_a:i.br,u_pattern_tl_b:o.tl,u_pattern_br_b:o.br,u_texsize:[s,u],u_mix:e.t,u_pattern_size_a:i.displaySize,u_pattern_size_b:o.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/ue(r,1,n.transform.tileZoom),u_pixel_coord_upper:[h>>16,f>>16],u_pixel_coord_lower:[65535&h,65535&f]}}(i,a,r,o),{u_matrix:e,u_opacity:n})},Vn={fillExtrusion:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_lightpos:new t.Uniform3f(e,n.u_lightpos),u_lightintensity:new t.Uniform1f(e,n.u_lightintensity),u_lightcolor:new t.Uniform3f(e,n.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,n.u_vertical_gradient),u_opacity:new t.Uniform1f(e,n.u_opacity)}},fillExtrusionPattern:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_lightpos:new t.Uniform3f(e,n.u_lightpos),u_lightintensity:new t.Uniform1f(e,n.u_lightintensity),u_lightcolor:new t.Uniform3f(e,n.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,n.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,n.u_height_factor),u_image:new t.Uniform1i(e,n.u_image),u_texsize:new t.Uniform2f(e,n.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,n.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,n.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,n.u_scale),u_fade:new t.Uniform1f(e,n.u_fade),u_opacity:new t.Uniform1f(e,n.u_opacity)}},fill:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix)}},fillPattern:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_image:new t.Uniform1i(e,n.u_image),u_texsize:new t.Uniform2f(e,n.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,n.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,n.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,n.u_scale),u_fade:new t.Uniform1f(e,n.u_fade)}},fillOutline:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_world:new t.Uniform2f(e,n.u_world)}},fillOutlinePattern:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_world:new t.Uniform2f(e,n.u_world),u_image:new t.Uniform1i(e,n.u_image),u_texsize:new t.Uniform2f(e,n.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,n.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,n.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,n.u_scale),u_fade:new t.Uniform1f(e,n.u_fade)}},circle:function(e,n){return{u_camera_to_center_distance:new t.Uniform1f(e,n.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,n.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,n.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,n.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,n.u_matrix)}},collisionBox:En,collisionCircle:En,debug:function(e,n){return{u_color:new t.UniformColor(e,n.u_color),u_matrix:new t.UniformMatrix4f(e,n.u_matrix)}},clippingMask:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix)}},heatmap:function(e,n){return{u_extrude_scale:new t.Uniform1f(e,n.u_extrude_scale),u_intensity:new t.Uniform1f(e,n.u_intensity),u_matrix:new t.UniformMatrix4f(e,n.u_matrix)}},heatmapTexture:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_world:new t.Uniform2f(e,n.u_world),u_image:new t.Uniform1i(e,n.u_image),u_color_ramp:new t.Uniform1i(e,n.u_color_ramp),u_opacity:new t.Uniform1f(e,n.u_opacity)}},hillshade:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_image:new t.Uniform1i(e,n.u_image),u_latrange:new t.Uniform2f(e,n.u_latrange),u_light:new t.Uniform2f(e,n.u_light),u_shadow:new t.UniformColor(e,n.u_shadow),u_highlight:new t.UniformColor(e,n.u_highlight),u_accent:new t.UniformColor(e,n.u_accent)}},hillshadePrepare:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_image:new t.Uniform1i(e,n.u_image),u_dimension:new t.Uniform2f(e,n.u_dimension),u_zoom:new t.Uniform1f(e,n.u_zoom),u_maxzoom:new t.Uniform1f(e,n.u_maxzoom),u_unpack:new t.Uniform4f(e,n.u_unpack)}},line:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_ratio:new t.Uniform1f(e,n.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,n.u_units_to_pixels)}},lineGradient:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_ratio:new t.Uniform1f(e,n.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,n.u_units_to_pixels),u_image:new t.Uniform1i(e,n.u_image)}},linePattern:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_texsize:new t.Uniform2f(e,n.u_texsize),u_ratio:new t.Uniform1f(e,n.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_image:new t.Uniform1i(e,n.u_image),u_units_to_pixels:new t.Uniform2f(e,n.u_units_to_pixels),u_scale:new t.Uniform4f(e,n.u_scale),u_fade:new t.Uniform1f(e,n.u_fade)}},lineSDF:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_ratio:new t.Uniform1f(e,n.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,n.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,n.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,n.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,n.u_sdfgamma),u_image:new t.Uniform1i(e,n.u_image),u_tex_y_a:new t.Uniform1f(e,n.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,n.u_tex_y_b),u_mix:new t.Uniform1f(e,n.u_mix)}},raster:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_tl_parent:new t.Uniform2f(e,n.u_tl_parent),u_scale_parent:new t.Uniform1f(e,n.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,n.u_buffer_scale),u_fade_t:new t.Uniform1f(e,n.u_fade_t),u_opacity:new t.Uniform1f(e,n.u_opacity),u_image0:new t.Uniform1i(e,n.u_image0),u_image1:new t.Uniform1i(e,n.u_image1),u_brightness_low:new t.Uniform1f(e,n.u_brightness_low),u_brightness_high:new t.Uniform1f(e,n.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,n.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,n.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,n.u_spin_weights)}},symbolIcon:function(e,n){return{u_is_size_zoom_constant:new t.Uniform1i(e,n.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,n.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,n.u_size_t),u_size:new t.Uniform1f(e,n.u_size),u_camera_to_center_distance:new t.Uniform1f(e,n.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,n.u_pitch),u_rotate_symbol:new t.Uniform1i(e,n.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,n.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,n.u_fade_change),u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,n.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,n.u_coord_matrix),u_is_text:new t.Uniform1f(e,n.u_is_text),u_pitch_with_map:new t.Uniform1i(e,n.u_pitch_with_map),u_texsize:new t.Uniform2f(e,n.u_texsize),u_texture:new t.Uniform1i(e,n.u_texture)}},symbolSDF:function(e,n){return{u_is_size_zoom_constant:new t.Uniform1i(e,n.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,n.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,n.u_size_t),u_size:new t.Uniform1f(e,n.u_size),u_camera_to_center_distance:new t.Uniform1f(e,n.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,n.u_pitch),u_rotate_symbol:new t.Uniform1i(e,n.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,n.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,n.u_fade_change),u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,n.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,n.u_coord_matrix),u_is_text:new t.Uniform1f(e,n.u_is_text),u_pitch_with_map:new t.Uniform1i(e,n.u_pitch_with_map),u_texsize:new t.Uniform2f(e,n.u_texsize),u_texture:new t.Uniform1i(e,n.u_texture),u_gamma_scale:new t.Uniform1f(e,n.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_is_halo:new t.Uniform1f(e,n.u_is_halo)}},symbolTextAndIcon:function(e,n){return{u_is_size_zoom_constant:new t.Uniform1i(e,n.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,n.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,n.u_size_t),u_size:new t.Uniform1f(e,n.u_size),u_camera_to_center_distance:new t.Uniform1f(e,n.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,n.u_pitch),u_rotate_symbol:new t.Uniform1i(e,n.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,n.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,n.u_fade_change),u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,n.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,n.u_coord_matrix),u_is_text:new t.Uniform1f(e,n.u_is_text),u_pitch_with_map:new t.Uniform1i(e,n.u_pitch_with_map),u_texsize:new t.Uniform2f(e,n.u_texsize),u_texsize_icon:new t.Uniform2f(e,n.u_texsize_icon),u_texture:new t.Uniform1i(e,n.u_texture),u_texture_icon:new t.Uniform1i(e,n.u_texture_icon),u_gamma_scale:new t.Uniform1f(e,n.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_is_halo:new t.Uniform1f(e,n.u_is_halo)}},background:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_opacity:new t.Uniform1f(e,n.u_opacity),u_color:new t.UniformColor(e,n.u_color)}},backgroundPattern:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_opacity:new t.Uniform1f(e,n.u_opacity),u_image:new t.Uniform1i(e,n.u_image),u_pattern_tl_a:new t.Uniform2f(e,n.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,n.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,n.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,n.u_pattern_br_b),u_texsize:new t.Uniform2f(e,n.u_texsize),u_mix:new t.Uniform1f(e,n.u_mix),u_pattern_size_a:new t.Uniform2f(e,n.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,n.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,n.u_scale_a),u_scale_b:new t.Uniform1f(e,n.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,n.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,n.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,n.u_tile_units_to_pixels)}}};function Hn(e,n){for(var r=e.sort((function(t,e){return t.tileID.isLessThan(e.tileID)?-1:e.tileID.isLessThan(t.tileID)?1:0})),i=0;i=0&&(A[m.associatedIconIndex]={shiftedAnchor:T,angle:C})}else ie(m.numGlyphs,p)}if(h){d.clear();for(var M=e.icon.placedSymbolArray,I=0;I0){var s=t.browser.now(),u=(s-e.timeAdded)/a,c=n?(s-n.timeAdded)/a:-1,l=r.getSource(),h=o.coveringZoomLevel({tileSize:l.tileSize,roundZoom:l.roundZoom}),f=!n||Math.abs(n.tileID.overscaledZ-h)>Math.abs(e.tileID.overscaledZ-h),p=f&&e.refreshedUponExpiration?1:t.clamp(f?u:1-c,0,1);return e.refreshedUponExpiration&&u>=1&&(e.refreshedUponExpiration=!1),n?{opacity:1,mix:1-p}:{opacity:p,mix:0}}return{opacity:1,mix:0}}function or(e,n,r){var i=e.context,o=i.gl,a=r.posMatrix,s=e.useProgram("debug"),u=Et.disabled,c=Ot.disabled,l=e.colorModeForRenderPass(),h="$debug";s.draw(i,o.LINE_STRIP,u,c,l,Tt.disabled,Sn(a,t.Color.red),h,e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);var f=n.getTileByID(r.key).latestRawTileData,p=f&&f.byteLength||0,d=Math.floor(p/1024),A=n.getTile(r).tileSize,g=512/Math.min(A,512),m=r.canonical.toString();r.overscaledZ!==r.canonical.z&&(m+=" => "+r.overscaledZ);for(var y=function(t,e,n,r){r=r||1;var i,o,a,s,u,c,l,h,f=[];for(i=0,o=t.length;i":[24,[4,18,20,9,4,0]],"?":[18,[3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,-1,-1,9,2,8,1,9,0,10,1,9,2]],"@":[27,[18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,-1,-1,12,16,10,14,9,11,9,8,10,6,11,5,-1,-1,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,-1,-1,19,16,18,8,18,6,19,5]],A:[18,[9,21,1,0,-1,-1,9,21,17,0,-1,-1,4,7,14,7]],B:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,-1,-1,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0]],C:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5]],D:[21,[4,21,4,0,-1,-1,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0]],E:[19,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11,-1,-1,4,0,17,0]],F:[18,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11]],G:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,-1,-1,13,8,18,8]],H:[22,[4,21,4,0,-1,-1,18,21,18,0,-1,-1,4,11,18,11]],I:[8,[4,21,4,0]],J:[16,[12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7]],K:[21,[4,21,4,0,-1,-1,18,21,4,7,-1,-1,9,12,18,0]],L:[17,[4,21,4,0,-1,-1,4,0,16,0]],M:[24,[4,21,4,0,-1,-1,4,21,12,0,-1,-1,20,21,12,0,-1,-1,20,21,20,0]],N:[22,[4,21,4,0,-1,-1,4,21,18,0,-1,-1,18,21,18,0]],O:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21]],P:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10]],Q:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,-1,-1,12,4,18,-2]],R:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,-1,-1,11,11,18,0]],S:[20,[17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],T:[16,[8,21,8,0,-1,-1,1,21,15,21]],U:[22,[4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21]],V:[18,[1,21,9,0,-1,-1,17,21,9,0]],W:[24,[2,21,7,0,-1,-1,12,21,7,0,-1,-1,12,21,17,0,-1,-1,22,21,17,0]],X:[20,[3,21,17,0,-1,-1,17,21,3,0]],Y:[18,[1,21,9,11,9,0,-1,-1,17,21,9,11]],Z:[20,[17,21,3,0,-1,-1,3,21,17,21,-1,-1,3,0,17,0]],"[":[14,[4,25,4,-7,-1,-1,5,25,5,-7,-1,-1,4,25,11,25,-1,-1,4,-7,11,-7]],"\\":[14,[0,21,14,-3]],"]":[14,[9,25,9,-7,-1,-1,10,25,10,-7,-1,-1,3,25,10,25,-1,-1,3,-7,10,-7]],"^":[16,[6,15,8,18,10,15,-1,-1,3,12,8,17,13,12,-1,-1,8,17,8,0]],_:[16,[0,-2,16,-2]],"`":[10,[6,21,5,20,4,18,4,16,5,15,6,16,5,17]],a:[19,[15,14,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],b:[19,[4,21,4,0,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],c:[18,[15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],d:[19,[15,21,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],e:[18,[3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],f:[12,[10,21,8,21,6,20,5,17,5,0,-1,-1,2,14,9,14]],g:[19,[15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],h:[19,[4,21,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],i:[8,[3,21,4,20,5,21,4,22,3,21,-1,-1,4,14,4,0]],j:[10,[5,21,6,20,7,21,6,22,5,21,-1,-1,6,14,6,-3,5,-6,3,-7,1,-7]],k:[17,[4,21,4,0,-1,-1,14,14,4,4,-1,-1,8,8,15,0]],l:[8,[4,21,4,0]],m:[30,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0,-1,-1,15,10,18,13,20,14,23,14,25,13,26,10,26,0]],n:[19,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],o:[19,[8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14]],p:[19,[4,14,4,-7,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],q:[19,[15,14,15,-7,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],r:[13,[4,14,4,0,-1,-1,4,8,5,11,7,13,9,14,12,14]],s:[17,[14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3]],t:[12,[5,21,5,4,6,1,8,0,10,0,-1,-1,2,14,9,14]],u:[19,[4,14,4,4,5,1,7,0,10,0,12,1,15,4,-1,-1,15,14,15,0]],v:[16,[2,14,8,0,-1,-1,14,14,8,0]],w:[22,[3,14,7,0,-1,-1,11,14,7,0,-1,-1,11,14,15,0,-1,-1,19,14,15,0]],x:[17,[3,14,14,0,-1,-1,14,14,3,0]],y:[16,[2,14,8,0,-1,-1,14,14,8,0,6,-4,4,-6,2,-7,1,-7]],z:[17,[14,14,3,0,-1,-1,3,14,14,14,-1,-1,3,0,14,0]],"{":[14,[9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,-1,-1,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,-1,-1,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7]],"|":[8,[4,25,4,-7]],"}":[14,[5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,-1,-1,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,-1,-1,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7]],"~":[24,[3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,-1,-1,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]]},sr={symbol:function(e,n,r,i,o){if("translucent"===e.renderPass){var a=Ot.disabled,s=e.colorModeForRenderPass();r.layout.get("text-variable-anchor")&&function(e,n,r,i,o,a,s){for(var u=n.transform,c="map"===o,l="map"===a,h=0,f=e;he.y){var n=t;t=e,e=n}return{x0:t.x,y0:t.y,x1:e.x,y1:e.y,dx:e.x-t.x,dy:e.y-t.y}}function lr(t,e,n,r,i){var o=Math.max(n,Math.floor(e.y0)),a=Math.min(r,Math.ceil(e.y1));if(t.x0===e.x0&&t.y0===e.y0?t.x0+e.dy/t.dy*t.dx0,h=e.dx<0,f=o;fu.dy&&(a=s,s=u,u=a),s.dy>c.dy&&(a=s,s=c,c=a),u.dy>c.dy&&(a=u,u=c,c=a),s.dy&&lr(c,s,r,i,o),u.dy&&lr(c,u,r,i,o)}ur.prototype.resize=function(e,n){var r=this.context.gl;if(this.width=e*t.browser.devicePixelRatio,this.height=n*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var i=0,o=this.style._order;i256&&this.clearStencil(),n.setColorMode(St.disabled),n.setDepthMode(Et.disabled);var i=this.useProgram("clippingMask");this._tileClippingMaskIDs={};for(var o=0,a=e;o256&&this.clearStencil();var t=this.nextStencilID++,e=this.context.gl;return new Ot({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},ur.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new Ot({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},ur.prototype.colorModeForRenderPass=function(){var e=this.context.gl;return this._showOverdrawInspector?new St([e.CONSTANT_COLOR,e.ONE],new t.Color(1/8,1/8,1/8,0),[!0,!0,!0,!0]):"opaque"===this.renderPass?St.unblended:St.alphaBlended},ur.prototype.depthModeForSublayer=function(t,e,n){if(!this.opaquePassEnabledForLayer())return Et.disabled;var r=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new Et(n||this.context.gl.LEQUAL,e,[r,r])},ur.prototype.opaquePassEnabledForLayer=function(){return this.currentLayer=0;this.currentLayer--){var P=this.style._layers[i[this.currentLayer]],M=o[P.source],I=l[P.source];this._renderTileClippingMasks(P,I),this.renderLayer(this,M,P,I)}for(this.renderPass="translucent",this.currentLayer=0;this.currentLayer0?e.pop():null},ur.prototype.isPatternMissing=function(t){if(!t)return!1;var e=this.imageManager.getPattern(t.from.toString()),n=this.imageManager.getPattern(t.to.toString());return!e||!n},ur.prototype.useProgram=function(t,e){void 0===e&&(e=this.emptyProgramConfiguration),this.cache=this.cache||{};var n=""+t+(e.cacheKey||"")+(this._showOverdrawInspector?"/overdraw":"");return this.cache[n]||(this.cache[n]=new An(this.context,pn[t],e,Vn[t],this._showOverdrawInspector)),this.cache[n]},ur.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault()},ur.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD)};var fr=function(e,n,r,i,o){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===o||o,this._minZoom=e||0,this._maxZoom=n||22,this._minPitch=null==r?0:r,this._maxPitch=null==i?60:i,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._posMatrixCache={},this._alignedPosMatrixCache={}},pr={minZoom:{configurable:!0},maxZoom:{configurable:!0},minPitch:{configurable:!0},maxPitch:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerPoint:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};fr.prototype.clone=function(){var t=new fr(this._minZoom,this._maxZoom,this._minPitch,this.maxPitch,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._calcMatrices(),t},pr.minZoom.get=function(){return this._minZoom},pr.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t))},pr.maxZoom.get=function(){return this._maxZoom},pr.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t))},pr.minPitch.get=function(){return this._minPitch},pr.minPitch.set=function(t){this._minPitch!==t&&(this._minPitch=t,this.pitch=Math.max(this.pitch,t))},pr.maxPitch.get=function(){return this._maxPitch},pr.maxPitch.set=function(t){this._maxPitch!==t&&(this._maxPitch=t,this.pitch=Math.min(this.pitch,t))},pr.renderWorldCopies.get=function(){return this._renderWorldCopies},pr.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t},pr.worldSize.get=function(){return this.tileSize*this.scale},pr.centerPoint.get=function(){return this.size._div(2)},pr.size.get=function(){return new t.Point(this.width,this.height)},pr.bearing.get=function(){return-this.angle/Math.PI*180},pr.bearing.set=function(e){var n=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==n&&(this._unmodified=!1,this.angle=n,this._calcMatrices(),this.rotationMatrix=t.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},pr.pitch.get=function(){return this._pitch/Math.PI*180},pr.pitch.set=function(e){var n=t.clamp(e,this.minPitch,this.maxPitch)/180*Math.PI;this._pitch!==n&&(this._unmodified=!1,this._pitch=n,this._calcMatrices())},pr.fov.get=function(){return this._fov/Math.PI*180},pr.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices())},pr.zoom.get=function(){return this._zoom},pr.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices())},pr.center.get=function(){return this._center},pr.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices())},fr.prototype.coveringZoomLevel=function(t){var e=(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize));return Math.max(0,e)},fr.prototype.getVisibleUnwrappedCoordinates=function(e){var n=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var r=this.pointCoordinate(new t.Point(0,0)),i=this.pointCoordinate(new t.Point(this.width,0)),o=this.pointCoordinate(new t.Point(this.width,this.height)),a=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(r.x,i.x,o.x,a.x)),u=Math.floor(Math.max(r.x,i.x,o.x,a.x)),c=s-1;c<=u+1;c++)0!==c&&n.push(new t.UnwrappedTileID(c,e));return n},fr.prototype.coveringTiles=function(e){var n=this.coveringZoomLevel(e),r=n;if(void 0!==e.minzoom&&ne.maxzoom&&(n=e.maxzoom);var i=t.MercatorCoordinate.fromLngLat(this.center),o=Math.pow(2,n),a=new t.Point(o*i.x-.5,o*i.y-.5);return function(e,n,r,i){void 0===i&&(i=!0);var o=1<=0&&u<=o)for(c=n;ca&&(i=a-g)}if(this.lngRange){var m=p.x,y=c.x/2;m-yu&&(r=u-y)}void 0===r&&void 0===i||(this.center=this.unproject(new t.Point(void 0!==r?r:p.x,void 0!==i?i:p.y))),this._unmodified=l,this._constraining=!1}},fr.prototype._calcMatrices=function(){if(this.height){this.cameraToCenterDistance=.5/Math.tan(this._fov/2)*this.height;var e=this._fov/2,n=Math.PI/2+this._pitch,r=Math.sin(e)*this.cameraToCenterDistance/Math.sin(Math.PI-n-e),i=this.point,o=i.x,a=i.y,s=1.01*(Math.cos(Math.PI/2-this._pitch)*r+this.cameraToCenterDistance),u=this.height/50,c=new Float64Array(16);t.perspective(c,this._fov,this.width/this.height,u,s),t.scale(c,c,[1,-1,1]),t.translate(c,c,[0,0,-this.cameraToCenterDistance]),t.rotateX(c,c,this._pitch),t.rotateZ(c,c,this.angle),t.translate(c,c,[-o,-a,0]),this.mercatorMatrix=t.scale([],c,[this.worldSize,this.worldSize,this.worldSize]),t.scale(c,c,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=c;var l=this.width%2/2,h=this.height%2/2,f=Math.cos(this.angle),p=Math.sin(this.angle),d=o-Math.round(o)+f*l+p*h,A=a-Math.round(a)+f*h+p*l,g=new Float64Array(c);if(t.translate(g,g,[d>.5?d-1:d,A>.5?A-1:A,0]),this.alignedProjMatrix=g,c=t.create(),t.scale(c,c,[this.width/2,-this.height/2,1]),t.translate(c,c,[1,-1,0]),this.labelPlaneMatrix=c,c=t.create(),t.scale(c,c,[1,-1,1]),t.translate(c,c,[-1,-1,0]),t.scale(c,c,[2/this.width,2/this.height,1]),this.glCoordMatrix=c,this.pixelMatrix=t.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(c=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error("failed to invert matrix");this.pixelMatrixInverse=c,this._posMatrixCache={},this._alignedPosMatrixCache={}}},fr.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),n=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(n,n,this.pixelMatrix)[3]/this.cameraToCenterDistance},fr.prototype.getCameraPoint=function(){var e=this._pitch,n=Math.tan(e)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,n))},fr.prototype.getCameraQueryGeometry=function(e){var n=this.getCameraPoint();if(1===e.length)return[e[0],n];for(var r=n.x,i=n.y,o=n.x,a=n.y,s=0,u=e;s=3&&!t.some((function(t){return isNaN(t)}))&&(this._map.jumpTo({center:[+t[2],+t[1]],zoom:+t[0],bearing:+(t[3]||0),pitch:+(t[4]||0)}),!0)},dr.prototype._updateHashUnthrottled=function(){var e=this.getHashString();try{t.window.history.replaceState(t.window.history.state,"",e)}catch(t){}};var Ar=function(e){function r(r,i,o,a){void 0===a&&(a={});var s=n.mousePos(i.getCanvasContainer(),o),u=i.unproject(s);e.call(this,r,t.extend({point:s,lngLat:u,originalEvent:o},a)),this._defaultPrevented=!1,this.target=i}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var i={defaultPrevented:{configurable:!0}};return r.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(r.prototype,i),r}(t.Event),gr=function(e){function r(r,i,o){var a=n.touchPos(i.getCanvasContainer(),o),s=a.map((function(t){return i.unproject(t)})),u=a.reduce((function(t,e,n,r){return t.add(e.div(r.length))}),new t.Point(0,0)),c=i.unproject(u);e.call(this,r,{points:a,point:u,lngLats:s,lngLat:c,originalEvent:o}),this._defaultPrevented=!1}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var i={defaultPrevented:{configurable:!0}};return r.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(r.prototype,i),r}(t.Event),mr=function(t){function e(e,n,r){t.call(this,e,{originalEvent:r}),this._defaultPrevented=!1}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0},n.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,n),e}(t.Event),yr=function(e){this._map=e,this._el=e.getCanvasContainer(),this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=1/450,t.bindAll(["_onWheel","_onTimeout","_onScrollFrame","_onScrollFinished"],this)};yr.prototype.setZoomRate=function(t){this._defaultZoomRate=t},yr.prototype.setWheelZoomRate=function(t){this._wheelZoomRate=t},yr.prototype.isEnabled=function(){return!!this._enabled},yr.prototype.isActive=function(){return!!this._active},yr.prototype.isZooming=function(){return!!this._zooming},yr.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&"center"===t.around)},yr.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},yr.prototype.onWheel=function(e){if(this.isEnabled()){var n=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,r=t.browser.now(),i=r-(this._lastWheelEventTime||0);this._lastWheelEventTime=r,0!==n&&n%4.000244140625==0?this._type="wheel":0!==n&&Math.abs(n)<4?this._type="trackpad":i>400?(this._type=null,this._lastValue=n,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(i*n)<200?"trackpad":"wheel",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,n+=this._lastValue)),e.shiftKey&&n&&(n/=4),this._type&&(this._lastWheelEvent=e,this._delta-=n,this.isActive()||this._start(e)),e.preventDefault()}},yr.prototype._onTimeout=function(t){this._type="wheel",this._delta-=this._lastValue,this.isActive()||this._start(t)},yr.prototype._start=function(e){if(this._delta){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),this._active=!0,this.isZooming()||(this._zooming=!0,this._map.fire(new t.Event("movestart",{originalEvent:e})),this._map.fire(new t.Event("zoomstart",{originalEvent:e}))),this._finishTimeout&&clearTimeout(this._finishTimeout);var r=n.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(r)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame))}},yr.prototype._onScrollFrame=function(){var e=this;if(this._frameId=null,this.isActive()){var n=this._map.transform;if(0!==this._delta){var r="wheel"===this._type&&Math.abs(this._delta)>4.000244140625?this._wheelZoomRate:this._defaultZoomRate,i=2/(1+Math.exp(-Math.abs(this._delta*r)));this._delta<0&&0!==i&&(i=1/i);var o="number"==typeof this._targetZoom?n.zoomScale(this._targetZoom):n.scale;this._targetZoom=Math.min(n.maxZoom,Math.max(n.minZoom,n.scaleZoom(o*i))),"wheel"===this._type&&(this._startZoom=n.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}var a="number"==typeof this._targetZoom?this._targetZoom:n.zoom,s=this._startZoom,u=this._easing,c=!1;if("wheel"===this._type&&s&&u){var l=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),h=u(l);n.zoom=t.number(s,a,h),l<1?this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame)):c=!0}else n.zoom=a,c=!0;n.setLocationAtPoint(this._around,this._aroundPoint),this._map.fire(new t.Event("move",{originalEvent:this._lastWheelEvent})),this._map.fire(new t.Event("zoom",{originalEvent:this._lastWheelEvent})),c&&(this._active=!1,this._finishTimeout=setTimeout((function(){e._zooming=!1,e._map.fire(new t.Event("zoomend",{originalEvent:e._lastWheelEvent})),e._map.fire(new t.Event("moveend",{originalEvent:e._lastWheelEvent})),delete e._targetZoom}),200))}},yr.prototype._smoothOutEasing=function(e){var n=t.ease;if(this._prevEase){var r=this._prevEase,i=(t.browser.now()-r.start)/r.duration,o=r.easing(i+.01)-r.easing(i),a=.27/Math.sqrt(o*o+1e-4)*.01,s=Math.sqrt(.0729-a*a);n=t.bezier(a,s,.25,1)}return this._prevEase={start:t.browser.now(),duration:e,easing:n},n};var vr=function(e,n){this._map=e,this._el=e.getCanvasContainer(),this._container=e.getContainer(),this._clickTolerance=n.clickTolerance||1,t.bindAll(["_onMouseMove","_onMouseUp","_onKeyDown"],this)};vr.prototype.isEnabled=function(){return!!this._enabled},vr.prototype.isActive=function(){return!!this._active},vr.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},vr.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},vr.prototype.onMouseDown=function(e){this.isEnabled()&&e.shiftKey&&0===e.button&&(t.window.document.addEventListener("mousemove",this._onMouseMove,!1),t.window.document.addEventListener("keydown",this._onKeyDown,!1),t.window.document.addEventListener("mouseup",this._onMouseUp,!1),n.disableDrag(),this._startPos=this._lastPos=n.mousePos(this._el,e),this._active=!0)},vr.prototype._onMouseMove=function(t){var e=n.mousePos(this._el,t);if(!(this._lastPos.equals(e)||!this._box&&e.dist(this._startPos)180&&(p=180);var d=p/180;c+=h*p*(d/2),Math.abs(n._normalizeBearing(c,0))0&&n-e[0][0]>160;)e.shift()};var xr={linearity:.3,easing:t.bezier(0,0,.3,1),maxSpeed:1400,deceleration:2500},wr=function(e,n){this._map=e,this._el=e.getCanvasContainer(),this._state="disabled",this._clickTolerance=n.clickTolerance||1,this._inertiaOptions=xr,t.bindAll(["_onMove","_onMouseUp","_onTouchEnd","_onBlur","_onDragFrame"],this)};wr.prototype.isEnabled=function(){return"disabled"!==this._state},wr.prototype.isActive=function(){return"active"===this._state},wr.prototype.enable=function(e){this.isEnabled()||(this._el.classList.add("mapboxgl-touch-drag-pan"),this._state="enabled",this._inertiaOptions=t.extend(xr,e))},wr.prototype.disable=function(){if(this.isEnabled())switch(this._el.classList.remove("mapboxgl-touch-drag-pan"),this._state){case"active":this._state="disabled",this._unbind(),this._deactivate(),this._fireEvent("dragend"),this._fireEvent("moveend");break;case"pending":this._state="disabled",this._unbind();break;default:this._state="disabled"}},wr.prototype.onMouseDown=function(e){"enabled"===this._state&&(e.ctrlKey||0!==n.mouseButton(e)||(n.addEventListener(t.window.document,"mousemove",this._onMove,{capture:!0}),n.addEventListener(t.window.document,"mouseup",this._onMouseUp),this._start(e)))},wr.prototype.onTouchStart=function(e){this.isEnabled()&&(e.touches&&e.touches.length>1&&("pending"===this._state||"active"===this._state)||(n.addEventListener(t.window.document,"touchmove",this._onMove,{capture:!0,passive:!1}),n.addEventListener(t.window.document,"touchend",this._onTouchEnd),this._start(e)))},wr.prototype._start=function(e){t.window.addEventListener("blur",this._onBlur),this._state="pending",this._startPos=this._mouseDownPos=this._prevPos=this._lastPos=n.mousePos(this._el,e),this._startTouch=this._lastTouch=t.window.TouchEvent&&e instanceof t.window.TouchEvent?n.touchPos(this._el,e):null,this._inertia=[[t.browser.now(),this._startPos]]},wr.prototype._touchesMatch=function(t,e){return!(!t||!e||t.length!==e.length)&&t.every((function(t,n){return e[n]===t}))},wr.prototype._onMove=function(e){e.preventDefault();var r=t.window.TouchEvent&&e instanceof t.window.TouchEvent?n.touchPos(this._el,e):null,i=n.mousePos(this._el,e);(r?this._touchesMatch(this._lastTouch,r):this._lastPos.equals(i))||"pending"===this._state&&i.dist(this._mouseDownPos)1&&n.addEventListener(t.window.document,"touchend",this._onTouchEnd);break;case"pending":this._state="enabled",this._unbind();break;case"enabled":this._unbind()}},wr.prototype._onBlur=function(t){this._abort(t)},wr.prototype._unbind=function(){n.removeEventListener(t.window.document,"touchmove",this._onMove,{capture:!0,passive:!1}),n.removeEventListener(t.window.document,"touchend",this._onTouchEnd),n.removeEventListener(t.window.document,"mousemove",this._onMove,{capture:!0}),n.removeEventListener(t.window.document,"mouseup",this._onMouseUp),n.removeEventListener(t.window,"blur",this._onBlur)},wr.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._startPos,delete this._prevPos,delete this._mouseDownPos,delete this._lastPos,delete this._startTouch,delete this._lastTouch,delete this._shouldStart},wr.prototype._inertialPan=function(t){this._fireEvent("dragend",t),this._drainInertiaBuffer();var e=this._inertia;if(e.length<2)this._fireEvent("moveend",t);else{var n=e[e.length-1],r=e[0],i=n[1].sub(r[1]),o=(n[0]-r[0])/1e3;if(0===o||n[1].equals(r[1]))this._fireEvent("moveend",t);else{var a=this._inertiaOptions,s=a.linearity,u=a.easing,c=a.maxSpeed,l=a.deceleration,h=i.mult(s/o),f=h.mag();f>c&&(f=c,h._unit()._mult(f));var p=f/(l*s),d=h.mult(-p/2);this._map.panBy(d,{duration:1e3*p,easing:u,noMoveStart:!0},{originalEvent:t})}}},wr.prototype._fireEvent=function(e,n){return this._map.fire(new t.Event(e,n?{originalEvent:n}:{}))},wr.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,n=t.browser.now();e.length>0&&n-e[0][0]>160;)e.shift()};var Er=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll(["_onKeyDown"],this)};function Or(t){return t*(2-t)}Er.prototype.isEnabled=function(){return!!this._enabled},Er.prototype.enable=function(){this.isEnabled()||(this._el.addEventListener("keydown",this._onKeyDown,!1),this._enabled=!0)},Er.prototype.disable=function(){this.isEnabled()&&(this._el.removeEventListener("keydown",this._onKeyDown),this._enabled=!1)},Er.prototype._onKeyDown=function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e=0,n=0,r=0,i=0,o=0;switch(t.keyCode){case 61:case 107:case 171:case 187:e=1;break;case 189:case 109:case 173:e=-1;break;case 37:t.shiftKey?n=-1:(t.preventDefault(),i=-1);break;case 39:t.shiftKey?n=1:(t.preventDefault(),i=1);break;case 38:t.shiftKey?r=1:(t.preventDefault(),o=-1);break;case 40:t.shiftKey?r=-1:(o=1,t.preventDefault());break;default:return}var a=this._map,s=a.getZoom(),u={duration:300,delayEndEvents:500,easing:Or,zoom:e?Math.round(s)+e*(t.shiftKey?2:1):s,bearing:a.getBearing()+15*n,pitch:a.getPitch()+10*r,offset:[100*-i,100*-o],center:a.getCenter()};a.easeTo(u,{originalEvent:t})}};var Sr=function(e){this._map=e,t.bindAll(["_onDblClick","_onZoomEnd"],this)};Sr.prototype.isEnabled=function(){return!!this._enabled},Sr.prototype.isActive=function(){return!!this._active},Sr.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},Sr.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},Sr.prototype.onTouchStart=function(t){var e=this;if(this.isEnabled()&&!(t.points.length>1))if(this._tapped){var n=t.points[0],r=this._tappedPoint;if(r&&r.dist(n)<=30){t.originalEvent.preventDefault();var i=function(){e._tapped&&e._zoom(t),e._map.off("touchcancel",o),e._resetTapped()},o=function(){e._map.off("touchend",i),e._resetTapped()};this._map.once("touchend",i),this._map.once("touchcancel",o)}else this._resetTapped()}else this._tappedPoint=t.points[0],this._tapped=setTimeout((function(){e._tapped=null,e._tappedPoint=null}),300)},Sr.prototype._resetTapped=function(){clearTimeout(this._tapped),this._tapped=null,this._tappedPoint=null},Sr.prototype.onDblClick=function(t){this.isEnabled()&&(t.originalEvent.preventDefault(),this._zoom(t))},Sr.prototype._zoom=function(t){this._active=!0,this._map.on("zoomend",this._onZoomEnd),this._map.zoomTo(this._map.getZoom()+(t.originalEvent.shiftKey?-1:1),{around:t.lngLat},t)},Sr.prototype._onZoomEnd=function(){this._active=!1,this._map.off("zoomend",this._onZoomEnd)};var Tr=t.bezier(0,0,.15,1),Cr=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll(["_onMove","_onEnd","_onTouchFrame"],this)};Cr.prototype.isEnabled=function(){return!!this._enabled},Cr.prototype.enable=function(t){this.isEnabled()||(this._el.classList.add("mapboxgl-touch-zoom-rotate"),this._enabled=!0,this._aroundCenter=!!t&&"center"===t.around)},Cr.prototype.disable=function(){this.isEnabled()&&(this._el.classList.remove("mapboxgl-touch-zoom-rotate"),this._enabled=!1)},Cr.prototype.disableRotation=function(){this._rotationDisabled=!0},Cr.prototype.enableRotation=function(){this._rotationDisabled=!1},Cr.prototype.isActive=function(){return this.isEnabled()&&!!this._gestureIntent},Cr.prototype.onStart=function(e){if(this.isEnabled()&&2===e.touches.length){var r=n.mousePos(this._el,e.touches[0]),i=n.mousePos(this._el,e.touches[1]),o=r.add(i).div(2);this._startVec=r.sub(i),this._startAround=this._map.transform.pointLocation(o),this._gestureIntent=void 0,this._inertia=[],n.addEventListener(t.window.document,"touchmove",this._onMove,{passive:!1}),n.addEventListener(t.window.document,"touchend",this._onEnd)}},Cr.prototype._getTouchEventData=function(t){var e=n.mousePos(this._el,t.touches[0]),r=n.mousePos(this._el,t.touches[1]),i=e.sub(r);return{vec:i,center:e.add(r).div(2),scale:i.mag()/this._startVec.mag(),bearing:this._rotationDisabled?0:180*i.angleWith(this._startVec)/Math.PI}},Cr.prototype._onMove=function(e){if(2===e.touches.length){var n=this._getTouchEventData(e),r=n.vec,i=n.scale,o=n.bearing;if(!this._gestureIntent){var a=this._rotationDisabled&&1!==i||Math.abs(1-i)>.15;Math.abs(o)>10?this._gestureIntent="rotate":a&&(this._gestureIntent="zoom"),this._gestureIntent&&(this._map.fire(new t.Event(this._gestureIntent+"start",{originalEvent:e})),this._map.fire(new t.Event("movestart",{originalEvent:e})),this._startVec=r)}this._lastTouchEvent=e,this._frameId||(this._frameId=this._map._requestRenderFrame(this._onTouchFrame)),e.preventDefault()}},Cr.prototype._onTouchFrame=function(){this._frameId=null;var e=this._gestureIntent;if(e){var n=this._map.transform;this._startScale||(this._startScale=n.scale,this._startBearing=n.bearing);var r=this._getTouchEventData(this._lastTouchEvent),i=r.center,o=r.bearing,a=r.scale,s=n.pointLocation(i),u=n.locationPoint(s);"rotate"===e&&(n.bearing=this._startBearing+o),n.zoom=n.scaleZoom(this._startScale*a),n.setLocationAtPoint(this._startAround,u),this._map.fire(new t.Event(e,{originalEvent:this._lastTouchEvent})),this._map.fire(new t.Event("move",{originalEvent:this._lastTouchEvent})),this._drainInertiaBuffer(),this._inertia.push([t.browser.now(),a,i])}},Cr.prototype._onEnd=function(e){n.removeEventListener(t.window.document,"touchmove",this._onMove,{passive:!1}),n.removeEventListener(t.window.document,"touchend",this._onEnd);var r=this._gestureIntent,i=this._startScale;if(this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._gestureIntent,delete this._startScale,delete this._startBearing,delete this._lastTouchEvent,r){this._map.fire(new t.Event(r+"end",{originalEvent:e})),this._drainInertiaBuffer();var o=this._inertia,a=this._map;if(o.length<2)a.snapToNorth({},{originalEvent:e});else{var s=o[o.length-1],u=o[0],c=a.transform.scaleZoom(i*s[1]),l=a.transform.scaleZoom(i*u[1]),h=c-l,f=(s[0]-u[0])/1e3,p=s[2];if(0!==f&&c!==l){var d=.15*h/f;Math.abs(d)>2.5&&(d=d>0?2.5:-2.5);var A=1e3*Math.abs(d/(12*.15)),g=c+d*A/2e3;a.easeTo({zoom:g,duration:A,easing:Tr,around:this._aroundCenter?a.getCenter():a.unproject(p),noMoveStart:!0},{originalEvent:e})}else a.snapToNorth({},{originalEvent:e})}}},Cr.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,n=t.browser.now();e.length>2&&n-e[0][0]>160;)e.shift()};var Pr={scrollZoom:yr,boxZoom:vr,dragRotate:br,dragPan:wr,keyboard:Er,doubleClickZoom:Sr,touchZoomRotate:Cr},Mr=function(e){function n(n,r){e.call(this),this._moving=!1,this._zooming=!1,this.transform=n,this._bearingSnap=r.bearingSnap,t.bindAll(["_renderFrameCallback"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.getCenter=function(){return new t.LngLat(this.transform.center.lng,this.transform.center.lat)},n.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},n.prototype.panBy=function(e,n,r){return e=t.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},n),r)},n.prototype.panTo=function(e,n,r){return this.easeTo(t.extend({center:e},n),r)},n.prototype.getZoom=function(){return this.transform.zoom},n.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},n.prototype.zoomTo=function(e,n,r){return this.easeTo(t.extend({zoom:e},n),r)},n.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},n.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},n.prototype.getBearing=function(){return this.transform.bearing},n.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},n.prototype.rotateTo=function(e,n,r){return this.easeTo(t.extend({bearing:e},n),r)},n.prototype.resetNorth=function(e,n){return this.rotateTo(0,t.extend({duration:1e3},e),n),this},n.prototype.resetNorthPitch=function(e,n){return this.easeTo(t.extend({bearing:0,pitch:0,duration:1e3},e),n),this},n.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())e?1:0})),["bottom","left","right","top"])){var a=this.transform,s=a.project(t.LngLat.convert(e)),u=a.project(t.LngLat.convert(n)),c=s.rotate(-r*Math.PI/180),l=u.rotate(-r*Math.PI/180),h=new t.Point(Math.max(c.x,l.x),Math.max(c.y,l.y)),f=new t.Point(Math.min(c.x,l.x),Math.min(c.y,l.y)),p=h.sub(f),d=(a.width-i.padding.left-i.padding.right)/p.x,A=(a.height-i.padding.top-i.padding.bottom)/p.y;if(!(A<0||d<0)){var g=Math.min(a.scaleZoom(a.scale*Math.min(d,A)),i.maxZoom),m=t.Point.convert(i.offset),y=(i.padding.left-i.padding.right)/2,v=(i.padding.top-i.padding.bottom)/2,_=new t.Point(m.x+y,m.y+v).mult(a.scale/a.zoomScale(g));return{center:a.unproject(s.add(u).div(2).sub(_)),zoom:g,bearing:r}}t.warnOnce("Map cannot fit within canvas with the given bounds, padding, and/or offset.")}else t.warnOnce("options.padding must be a positive number, or an Object with keys 'bottom', 'left', 'right', 'top'")},n.prototype.fitBounds=function(t,e,n){return this._fitInternal(this.cameraForBounds(t,e),e,n)},n.prototype.fitScreenCoordinates=function(e,n,r,i,o){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(n)),r,i),i,o)},n.prototype._fitInternal=function(e,n,r){return e?(n=t.extend(e,n)).linear?this.easeTo(n,r):this.flyTo(n,r):this},n.prototype.jumpTo=function(e,n){this.stop();var r=this.transform,i=!1,o=!1,a=!1;return"zoom"in e&&r.zoom!==+e.zoom&&(i=!0,r.zoom=+e.zoom),void 0!==e.center&&(r.center=t.LngLat.convert(e.center)),"bearing"in e&&r.bearing!==+e.bearing&&(o=!0,r.bearing=+e.bearing),"pitch"in e&&r.pitch!==+e.pitch&&(a=!0,r.pitch=+e.pitch),this.fire(new t.Event("movestart",n)).fire(new t.Event("move",n)),i&&this.fire(new t.Event("zoomstart",n)).fire(new t.Event("zoom",n)).fire(new t.Event("zoomend",n)),o&&this.fire(new t.Event("rotatestart",n)).fire(new t.Event("rotate",n)).fire(new t.Event("rotateend",n)),a&&this.fire(new t.Event("pitchstart",n)).fire(new t.Event("pitch",n)).fire(new t.Event("pitchend",n)),this.fire(new t.Event("moveend",n))},n.prototype.easeTo=function(e,n){var r=this;this.stop(),(!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate||!e.essential&&t.browser.prefersReducedMotion)&&(e.duration=0);var i=this.transform,o=this.getZoom(),a=this.getBearing(),s=this.getPitch(),u="zoom"in e?+e.zoom:o,c="bearing"in e?this._normalizeBearing(e.bearing,a):a,l="pitch"in e?+e.pitch:s,h=i.centerPoint.add(t.Point.convert(e.offset)),f=i.pointLocation(h),p=t.LngLat.convert(e.center||f);this._normalizeCenter(p);var d,A,g=i.project(f),m=i.project(p).sub(g),y=i.zoomScale(u-o);return e.around&&(d=t.LngLat.convert(e.around),A=i.locationPoint(d)),this._zooming=u!==o,this._rotating=a!==c,this._pitching=l!==s,this._prepareEase(n,e.noMoveStart),clearTimeout(this._easeEndTimeoutID),this._ease((function(e){if(r._zooming&&(i.zoom=t.number(o,u,e)),r._rotating&&(i.bearing=t.number(a,c,e)),r._pitching&&(i.pitch=t.number(s,l,e)),d)i.setLocationAtPoint(d,A);else{var f=i.zoomScale(i.zoom-o),p=u>o?Math.min(2,y):Math.max(.5,y),v=Math.pow(p,1-e),_=i.unproject(g.add(m.mult(e*v)).mult(f));i.setLocationAtPoint(i.renderWorldCopies?_.wrap():_,h)}r._fireMoveEvents(n)}),(function(){e.delayEndEvents?r._easeEndTimeoutID=setTimeout((function(){return r._afterEase(n)}),e.delayEndEvents):r._afterEase(n)}),e),this},n.prototype._prepareEase=function(e,n){this._moving=!0,n||this.fire(new t.Event("movestart",e)),this._zooming&&this.fire(new t.Event("zoomstart",e)),this._rotating&&this.fire(new t.Event("rotatestart",e)),this._pitching&&this.fire(new t.Event("pitchstart",e))},n.prototype._fireMoveEvents=function(e){this.fire(new t.Event("move",e)),this._zooming&&this.fire(new t.Event("zoom",e)),this._rotating&&this.fire(new t.Event("rotate",e)),this._pitching&&this.fire(new t.Event("pitch",e))},n.prototype._afterEase=function(e){var n=this._zooming,r=this._rotating,i=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,n&&this.fire(new t.Event("zoomend",e)),r&&this.fire(new t.Event("rotateend",e)),i&&this.fire(new t.Event("pitchend",e)),this.fire(new t.Event("moveend",e))},n.prototype.flyTo=function(e,n){var r=this;if(!e.essential&&t.browser.prefersReducedMotion){var i=t.pick(e,["center","zoom","bearing","pitch","around"]);return this.jumpTo(i,n)}this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var o=this.transform,a=this.getZoom(),s=this.getBearing(),u=this.getPitch(),c="zoom"in e?t.clamp(+e.zoom,o.minZoom,o.maxZoom):a,l="bearing"in e?this._normalizeBearing(e.bearing,s):s,h="pitch"in e?+e.pitch:u,f=o.zoomScale(c-a),p=o.centerPoint.add(t.Point.convert(e.offset)),d=o.pointLocation(p),A=t.LngLat.convert(e.center||d);this._normalizeCenter(A);var g=o.project(d),m=o.project(A).sub(g),y=e.curve,v=Math.max(o.width,o.height),_=v/f,b=m.mag();if("minZoom"in e){var x=t.clamp(Math.min(e.minZoom,a,c),o.minZoom,o.maxZoom),w=v/o.zoomScale(x-a);y=Math.sqrt(w/b*2)}var E=y*y;function O(t){var e=(_*_-v*v+(t?-1:1)*E*E*b*b)/(2*(t?_:v)*E*b);return Math.log(Math.sqrt(e*e+1)-e)}function S(t){return(Math.exp(t)-Math.exp(-t))/2}function T(t){return(Math.exp(t)+Math.exp(-t))/2}var C=O(0),P=function(t){return T(C)/T(C+y*t)},M=function(t){return v*((T(C)*(S(e=C+y*t)/T(e))-S(C))/E)/b;var e},I=(O(1)-C)/y;if(Math.abs(b)<1e-6||!isFinite(I)){if(Math.abs(v-_)<1e-6)return this.easeTo(e,n);var B=_e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=s!==l,this._pitching=h!==u,this._prepareEase(n,!1),this._ease((function(e){var i=e*I,f=1/P(i);o.zoom=1===e?c:a+o.scaleZoom(f),r._rotating&&(o.bearing=t.number(s,l,e)),r._pitching&&(o.pitch=t.number(u,h,e));var d=1===e?A:o.unproject(g.add(m.mult(M(i))).mult(f));o.setLocationAtPoint(o.renderWorldCopies?d.wrap():d,p),r._fireMoveEvents(n)}),(function(){return r._afterEase(n)}),e),this},n.prototype.isEasing=function(){return!!this._easeFrameId},n.prototype.stop=function(){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var t=this._onEaseEnd;delete this._onEaseEnd,t.call(this)}return this},n.prototype._ease=function(e,n,r){!1===r.animate||0===r.duration?(e(1),n()):(this._easeStart=t.browser.now(),this._easeOptions=r,this._onEaseFrame=e,this._onEaseEnd=n,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))},n.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},n.prototype._normalizeBearing=function(e,n){e=t.wrap(e,-180,180);var r=Math.abs(e-n);return Math.abs(e-360-n)180?-360:n<-180?360:0}},n}(t.Evented),Ir=function(e){void 0===e&&(e={}),this.options=e,t.bindAll(["_updateEditLink","_updateData","_updateCompact"],this)};Ir.prototype.getDefaultPosition=function(){return"bottom-right"},Ir.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=n.create("div","mapboxgl-ctrl mapboxgl-ctrl-attrib"),this._innerContainer=n.create("div","mapboxgl-ctrl-attrib-inner",this._container),e&&this._container.classList.add("mapboxgl-compact"),this._updateAttributions(),this._updateEditLink(),this._map.on("styledata",this._updateData),this._map.on("sourcedata",this._updateData),this._map.on("moveend",this._updateEditLink),void 0===e&&(this._map.on("resize",this._updateCompact),this._updateCompact()),this._container},Ir.prototype.onRemove=function(){n.remove(this._container),this._map.off("styledata",this._updateData),this._map.off("sourcedata",this._updateData),this._map.off("moveend",this._updateEditLink),this._map.off("resize",this._updateCompact),this._map=void 0,this._attribHTML=void 0},Ir.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(".mapbox-improve-map"));var n=[{key:"owner",value:this.styleOwner},{key:"id",value:this.styleId},{key:"access_token",value:this._map._requestManager._customAccessToken||t.config.ACCESS_TOKEN}];if(e){var r=n.reduce((function(t,e,r){return e.value&&(t+=e.key+"="+e.value+(r=0)return!1;return!0}))).join(" | ");a!==this._attribHTML&&(this._attribHTML=a,t.length?(this._innerContainer.innerHTML=a,this._container.classList.remove("mapboxgl-attrib-empty")):this._container.classList.add("mapboxgl-attrib-empty"),this._editLink=null)}},Ir.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add("mapboxgl-compact"):this._container.classList.remove("mapboxgl-compact")};var Br=function(){t.bindAll(["_updateLogo"],this),t.bindAll(["_updateCompact"],this)};Br.prototype.onAdd=function(t){this._map=t,this._container=n.create("div","mapboxgl-ctrl");var e=n.create("a","mapboxgl-ctrl-logo");return e.target="_blank",e.rel="noopener nofollow",e.href="https://www.mapbox.com/",e.setAttribute("aria-label",this._map._getUIString("LogoControl.Title")),e.setAttribute("rel","noopener nofollow"),this._container.appendChild(e),this._container.style.display="none",this._map.on("sourcedata",this._updateLogo),this._updateLogo(),this._map.on("resize",this._updateCompact),this._updateCompact(),this._container},Br.prototype.onRemove=function(){n.remove(this._container),this._map.off("sourcedata",this._updateLogo),this._map.off("resize",this._updateCompact)},Br.prototype.getDefaultPosition=function(){return"bottom-left"},Br.prototype._updateLogo=function(t){t&&"metadata"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?"block":"none")},Br.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return!0;return!1}},Br.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add("mapboxgl-compact"):e.classList.remove("mapboxgl-compact")}};var Rr=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1};Rr.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},Rr.prototype.remove=function(t){for(var e=this._currentlyRunning,n=0,r=e?this._queue.concat(e):this._queue;ne.maxZoom)throw new Error("maxZoom must be greater than or equal to minZoom");if(null!=e.minPitch&&null!=e.maxPitch&&e.minPitch>e.maxPitch)throw new Error("maxPitch must be greater than or equal to minPitch");if(null!=e.minPitch&&e.minPitch<0)throw new Error("minPitch must be greater than or equal to 0");if(null!=e.maxPitch&&e.maxPitch>60)throw new Error("maxPitch must be less than or equal to 60");var o=new fr(e.minZoom,e.maxZoom,e.minPitch,e.maxPitch,e.renderWorldCopies);if(r.call(this,o,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._antialias=e.antialias,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new Rr,this._controls=[],this._mapId=t.uniqueId(),this._locale=t.extend({},kr,e.locale),this._requestManager=new t.RequestManager(e.transformRequest,e.accessToken),"string"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error("Container '"+e.container+"' not found.")}else{if(!(e.container instanceof Dr))throw new Error("Invalid type: 'container' must be a String or HTMLElement.");this._container=e.container}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll(["_onWindowOnline","_onWindowResize","_contextLost","_contextRestored"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error("Failed to initialize WebGL.");this.on("move",(function(){return i._update(!1)})),this.on("moveend",(function(){return i._update(!1)})),this.on("zoom",(function(){return i._update(!0)})),void 0!==t.window&&(t.window.addEventListener("online",this._onWindowOnline,!1),t.window.addEventListener("resize",this._onWindowResize,!1)),function(t,e){var r=t.getCanvasContainer(),i=null,o=!1,a=null;for(var s in Pr)t[s]=new Pr[s](t,e),e.interactive&&e[s]&&t[s].enable(e[s]);n.addEventListener(r,"mouseout",(function(e){t.fire(new Ar("mouseout",t,e))})),n.addEventListener(r,"mousedown",(function(i){o=!0,a=n.mousePos(r,i);var s=new Ar("mousedown",t,i);t.fire(s),s.defaultPrevented||(e.interactive&&!t.doubleClickZoom.isActive()&&t.stop(),t.boxZoom.onMouseDown(i),t.boxZoom.isActive()||t.dragPan.isActive()||t.dragRotate.onMouseDown(i),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onMouseDown(i))})),n.addEventListener(r,"mouseup",(function(e){var n=t.dragRotate.isActive();i&&!n&&t.fire(new Ar("contextmenu",t,i)),i=null,o=!1,t.fire(new Ar("mouseup",t,e))})),n.addEventListener(r,"mousemove",(function(e){if(!t.dragPan.isActive()&&!t.dragRotate.isActive()){for(var n=e.target;n&&n!==r;)n=n.parentNode;n===r&&t.fire(new Ar("mousemove",t,e))}})),n.addEventListener(r,"mouseover",(function(e){for(var n=e.target;n&&n!==r;)n=n.parentNode;n===r&&t.fire(new Ar("mouseover",t,e))})),n.addEventListener(r,"touchstart",(function(n){var r=new gr("touchstart",t,n);t.fire(r),r.defaultPrevented||(e.interactive&&t.stop(),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onTouchStart(n),t.touchZoomRotate.onStart(n),t.doubleClickZoom.onTouchStart(r))}),{passive:!1}),n.addEventListener(r,"touchmove",(function(e){t.fire(new gr("touchmove",t,e))}),{passive:!1}),n.addEventListener(r,"touchend",(function(e){t.fire(new gr("touchend",t,e))})),n.addEventListener(r,"touchcancel",(function(e){t.fire(new gr("touchcancel",t,e))})),n.addEventListener(r,"click",(function(i){var o=n.mousePos(r,i);(!a||o.equals(a)||o.dist(a)-1&&this._controls.splice(n,1),e.onRemove(this),this},i.prototype.resize=function(e){var n=this._containerDimensions(),r=n[0],i=n[1];return this._resizeCanvas(r,i),this.transform.resize(r,i),this.painter.resize(r,i),this.fire(new t.Event("movestart",e)).fire(new t.Event("move",e)).fire(new t.Event("resize",e)).fire(new t.Event("moveend",e)),this},i.prototype.getBounds=function(){return this.transform.getBounds()},i.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},i.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},i.prototype.setMinZoom=function(t){if((t=null==t?-2:t)>=-2&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error("maxZoom must be greater than the current minZoom")},i.prototype.getMaxZoom=function(){return this.transform.maxZoom},i.prototype.setMinPitch=function(t){if((t=null==t?0:t)<0)throw new Error("minPitch must be greater than or equal to 0");if(t>=0&&t<=this.transform.maxPitch)return this.transform.minPitch=t,this._update(),this.getPitch()60)throw new Error("maxPitch must be less than or equal to 60");if(t>=this.transform.minPitch)return this.transform.maxPitch=t,this._update(),this.getPitch()>t&&this.setPitch(t),this;throw new Error("maxPitch must be greater than the current minPitch")},i.prototype.getMaxPitch=function(){return this.transform.maxPitch},i.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},i.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},i.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},i.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},i.prototype.isMoving=function(){return this._moving||this.dragPan.isActive()||this.dragRotate.isActive()||this.scrollZoom.isActive()},i.prototype.isZooming=function(){return this._zooming||this.scrollZoom.isZooming()},i.prototype.isRotating=function(){return this._rotating||this.dragRotate.isActive()},i.prototype.on=function(t,e,n){var i=this;if(void 0===n)return r.prototype.on.call(this,t,e);var o=function(){var r;if("mouseenter"===t||"mouseover"===t){var o=!1;return{layer:e,listener:n,delegates:{mousemove:function(r){var a=i.getLayer(e)?i.queryRenderedFeatures(r.point,{layers:[e]}):[];a.length?o||(o=!0,n.call(i,new Ar(t,i,r.originalEvent,{features:a}))):o=!1},mouseout:function(){o=!1}}}}if("mouseleave"===t||"mouseout"===t){var a=!1;return{layer:e,listener:n,delegates:{mousemove:function(r){(i.getLayer(e)?i.queryRenderedFeatures(r.point,{layers:[e]}):[]).length?a=!0:a&&(a=!1,n.call(i,new Ar(t,i,r.originalEvent)))},mouseout:function(e){a&&(a=!1,n.call(i,new Ar(t,i,e.originalEvent)))}}}}return{layer:e,listener:n,delegates:(r={},r[t]=function(t){var r=i.getLayer(e)?i.queryRenderedFeatures(t.point,{layers:[e]}):[];r.length&&(t.features=r,n.call(i,t),delete t.features)},r)}}();for(var a in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(o),o.delegates)this.on(a,o.delegates[a]);return this},i.prototype.off=function(t,e,n){if(void 0===n)return r.prototype.off.call(this,t,e);if(this._delegatedListeners&&this._delegatedListeners[t])for(var i=this._delegatedListeners[t],o=0;o180;){var s=r.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=r.width&&s.y<=r.height)break;e.lng>r.center.lng?e.lng-=360:e.lng+=360}return e}Nr.prototype._updateZoomButtons=function(){var t=this._map.getZoom();this._zoomInButton.disabled=t===this._map.getMaxZoom(),this._zoomOutButton.disabled=t===this._map.getMinZoom()},Nr.prototype._rotateCompassArrow=function(){var t=this.options.visualizePitch?"scale("+1/Math.pow(Math.cos(this._map.transform.pitch*(Math.PI/180)),.5)+") rotateX("+this._map.transform.pitch+"deg) rotateZ("+this._map.transform.angle*(180/Math.PI)+"deg)":"rotate("+this._map.transform.angle*(180/Math.PI)+"deg)";this._compassIcon.style.transform=t},Nr.prototype.onAdd=function(t){return this._map=t,this.options.showZoom&&(this._setButtonTitle(this._zoomInButton,"ZoomIn"),this._setButtonTitle(this._zoomOutButton,"ZoomOut"),this._map.on("zoom",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass&&(this._setButtonTitle(this._compass,"ResetBearing"),this.options.visualizePitch&&this._map.on("pitch",this._rotateCompassArrow),this._map.on("rotate",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new br(t,{button:"left",element:this._compass}),n.addEventListener(this._compass,"mousedown",this._handler.onMouseDown),n.addEventListener(this._compass,"touchstart",this._handler.onMouseDown,{passive:!1}),this._handler.enable()),this._container},Nr.prototype.onRemove=function(){n.remove(this._container),this.options.showZoom&&this._map.off("zoom",this._updateZoomButtons),this.options.showCompass&&(this.options.visualizePitch&&this._map.off("pitch",this._rotateCompassArrow),this._map.off("rotate",this._rotateCompassArrow),n.removeEventListener(this._compass,"mousedown",this._handler.onMouseDown),n.removeEventListener(this._compass,"touchstart",this._handler.onMouseDown,{passive:!1}),this._handler.disable(),delete this._handler),delete this._map},Nr.prototype._createButton=function(t,e){var r=n.create("button",t,this._container);return r.type="button",r.addEventListener("click",e),r},Nr.prototype._setButtonTitle=function(t,e){var n=this._map._getUIString("NavigationControl."+e);t.title=n,t.setAttribute("aria-label",n)};var Vr={center:"translate(-50%,-50%)",top:"translate(-50%,0)","top-left":"translate(0,0)","top-right":"translate(-100%,0)",bottom:"translate(-50%,-100%)","bottom-left":"translate(0,-100%)","bottom-right":"translate(-100%,-100%)",left:"translate(0,-50%)",right:"translate(-100%,-50%)"};function Hr(t,e,n){var r=t.classList;for(var i in Vr)r.remove("mapboxgl-"+n+"-anchor-"+i);r.add("mapboxgl-"+n+"-anchor-"+e)}var Wr,qr=function(e){function r(r,i){var o=this;if(e.call(this),(r instanceof t.window.HTMLElement||i)&&(r=t.extend({element:r},i)),t.bindAll(["_update","_onMove","_onUp","_addDragHandler","_onMapClick","_onKeyPress"],this),this._anchor=r&&r.anchor||"center",this._color=r&&r.color||"#3FB1CE",this._draggable=r&&r.draggable||!1,this._state="inactive",this._rotation=r&&r.rotation||0,this._rotationAlignment=r&&r.rotationAlignment||"auto",this._pitchAlignment=r&&r.pitchAlignment&&"auto"!==r.pitchAlignment?r.pitchAlignment:this._rotationAlignment,r&&r.element)this._element=r.element,this._offset=t.Point.convert(r&&r.offset||[0,0]);else{this._defaultMarker=!0,this._element=n.create("div"),this._element.setAttribute("aria-label","Map marker");var a=n.createNS("http://www.w3.org/2000/svg","svg");a.setAttributeNS(null,"display","block"),a.setAttributeNS(null,"height","41px"),a.setAttributeNS(null,"width","27px"),a.setAttributeNS(null,"viewBox","0 0 27 41");var s=n.createNS("http://www.w3.org/2000/svg","g");s.setAttributeNS(null,"stroke","none"),s.setAttributeNS(null,"stroke-width","1"),s.setAttributeNS(null,"fill","none"),s.setAttributeNS(null,"fill-rule","evenodd");var u=n.createNS("http://www.w3.org/2000/svg","g");u.setAttributeNS(null,"fill-rule","nonzero");var c=n.createNS("http://www.w3.org/2000/svg","g");c.setAttributeNS(null,"transform","translate(3.0, 29.0)"),c.setAttributeNS(null,"fill","#000000");for(var l=0,h=[{rx:"10.5",ry:"5.25002273"},{rx:"10.5",ry:"5.25002273"},{rx:"9.5",ry:"4.77275007"},{rx:"8.5",ry:"4.29549936"},{rx:"7.5",ry:"3.81822308"},{rx:"6.5",ry:"3.34094679"},{rx:"5.5",ry:"2.86367051"},{rx:"4.5",ry:"2.38636864"}];le.getEast()||n.latitudee.getNorth())},r.prototype._setErrorState=function(){switch(this._watchState){case"WAITING_ACTIVE":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");break;case"ACTIVE_LOCK":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting");break;case"BACKGROUND":this._watchState="BACKGROUND_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting")}},r.prototype._onSuccess=function(e){if(this._isOutOfMapMaxBounds(e))return this._setErrorState(),this.fire(new t.Event("outofmaxbounds",e)),this._updateMarker(),void this._finish();if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"BACKGROUND":case"BACKGROUND_ERROR":this._watchState="BACKGROUND",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background")}this.options.showUserLocation&&"OFF"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&"ACTIVE_LOCK"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove("mapboxgl-user-location-dot-stale"),this.fire(new t.Event("geolocate",e)),this._finish()},r.prototype._updateCamera=function(e){var n=new t.LngLat(e.coords.longitude,e.coords.latitude),r=e.coords.accuracy,i=this._map.getBearing(),o=t.extend({bearing:i},this.options.fitBoundsOptions);this._map.fitBounds(n.toBounds(r),o,{geolocateSource:!0})},r.prototype._updateMarker=function(t){t?this._userLocationDotMarker.setLngLat([t.coords.longitude,t.coords.latitude]).addTo(this._map):this._userLocationDotMarker.remove()},r.prototype._onError=function(e){if(this.options.trackUserLocation)if(1===e.code){this._watchState="OFF",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.disabled=!0;var n=this._map._getUIString("GeolocateControl.LocationNotAvailable");this._geolocateButton.title=n,this._geolocateButton.setAttribute("aria-label",n),void 0!==this._geolocationWatchID&&this._clearWatch()}else this._setErrorState();"OFF"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add("mapboxgl-user-location-dot-stale"),this.fire(new t.Event("error",e)),this._finish()},r.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0},r.prototype._setupUI=function(e){var r=this;if(this._container.addEventListener("contextmenu",(function(t){return t.preventDefault()})),this._geolocateButton=n.create("button","mapboxgl-ctrl-geolocate",this._container),n.create("span","mapboxgl-ctrl-icon",this._geolocateButton).setAttribute("aria-hidden",!0),this._geolocateButton.type="button",!1===e){t.warnOnce("Geolocation support is not available so the GeolocateControl will be disabled.");var i=this._map._getUIString("GeolocateControl.LocationNotAvailable");this._geolocateButton.disabled=!0,this._geolocateButton.title=i,this._geolocateButton.setAttribute("aria-label",i)}else{var o=this._map._getUIString("GeolocateControl.FindMyLocation");this._geolocateButton.title=o,this._geolocateButton.setAttribute("aria-label",o)}this.options.trackUserLocation&&(this._geolocateButton.setAttribute("aria-pressed","false"),this._watchState="OFF"),this.options.showUserLocation&&(this._dotElement=n.create("div","mapboxgl-user-location-dot"),this._userLocationDotMarker=new qr(this._dotElement),this.options.trackUserLocation&&(this._watchState="OFF")),this._geolocateButton.addEventListener("click",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on("movestart",(function(e){var n=e.originalEvent&&"resize"===e.originalEvent.type;e.geolocateSource||"ACTIVE_LOCK"!==r._watchState||n||(r._watchState="BACKGROUND",r._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background"),r._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),r.fire(new t.Event("trackuserlocationend")))}))},r.prototype.trigger=function(){if(!this._setup)return t.warnOnce("Geolocate control triggered before added to a map"),!1;if(this.options.trackUserLocation){switch(this._watchState){case"OFF":this._watchState="WAITING_ACTIVE",this.fire(new t.Event("trackuserlocationstart"));break;case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":case"BACKGROUND_ERROR":this._watchState="OFF",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this.fire(new t.Event("trackuserlocationend"));break;case"BACKGROUND":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event("trackuserlocationstart"))}switch(this._watchState){case"WAITING_ACTIVE":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"ACTIVE_LOCK":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"ACTIVE_ERROR":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");break;case"BACKGROUND":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background");break;case"BACKGROUND_ERROR":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error")}"OFF"===this._watchState&&void 0!==this._geolocationWatchID?this._clearWatch():void 0===this._geolocationWatchID&&(this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","true"),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,this.options.positionOptions))}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return!0},r.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","false"),this.options.showUserLocation&&this._updateMarker(null)},r}(t.Evented),Zr={maxWidth:100,unit:"metric"},Qr=function(e){this.options=t.extend({},Zr,e),t.bindAll(["_onMove","setUnit"],this)};function Kr(t,e,n){var r,i,o,a,s,u,c=n&&n.maxWidth||100,l=t._container.clientHeight/2,h=(r=t.unproject([0,l]),i=t.unproject([c,l]),o=Math.PI/180,a=r.lat*o,s=i.lat*o,u=Math.sin(a)*Math.sin(s)+Math.cos(a)*Math.cos(s)*Math.cos((i.lng-r.lng)*o),6371e3*Math.acos(Math.min(u,1)));if(n&&"imperial"===n.unit){var f=3.2808*h;f>5280?Yr(e,c,f/5280,t._getUIString("ScaleControl.Miles")):Yr(e,c,f,t._getUIString("ScaleControl.Feet"))}else n&&"nautical"===n.unit?Yr(e,c,h/1852,t._getUIString("ScaleControl.NauticalMiles")):h>=1e3?Yr(e,c,h/1e3,t._getUIString("ScaleControl.Kilometers")):Yr(e,c,h,t._getUIString("ScaleControl.Meters"))}function Yr(t,e,n,r){var i,o,a,s=(i=n,(o=Math.pow(10,(""+Math.floor(i)).length-1))*(a=(a=i/o)>=10?10:a>=5?5:a>=3?3:a>=2?2:a>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(a))),u=s/n;t.style.width=e*u+"px",t.innerHTML=s+r}Qr.prototype.getDefaultPosition=function(){return"bottom-left"},Qr.prototype._onMove=function(){Kr(this._map,this._container,this.options)},Qr.prototype.onAdd=function(t){return this._map=t,this._container=n.create("div","mapboxgl-ctrl mapboxgl-ctrl-scale",t.getContainer()),this._map.on("move",this._onMove),this._onMove(),this._container},Qr.prototype.onRemove=function(){n.remove(this._container),this._map.off("move",this._onMove),this._map=void 0},Qr.prototype.setUnit=function(t){this.options.unit=t,Kr(this._map,this._container,this.options)};var $r=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce("Full screen control 'container' must be a DOM element.")),t.bindAll(["_onClickFullscreen","_changeIcon"],this),"onfullscreenchange"in t.window.document?this._fullscreenchange="fullscreenchange":"onmozfullscreenchange"in t.window.document?this._fullscreenchange="mozfullscreenchange":"onwebkitfullscreenchange"in t.window.document?this._fullscreenchange="webkitfullscreenchange":"onmsfullscreenchange"in t.window.document&&(this._fullscreenchange="MSFullscreenChange")};$r.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=n.create("div","mapboxgl-ctrl mapboxgl-ctrl-group"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display="none",t.warnOnce("This device does not support fullscreen mode.")),this._controlContainer},$r.prototype.onRemove=function(){n.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon)},$r.prototype._checkFullscreenSupport=function(){return!!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},$r.prototype._setupUI=function(){var e=this._fullscreenButton=n.create("button","mapboxgl-ctrl-fullscreen",this._controlContainer);n.create("span","mapboxgl-ctrl-icon",e).setAttribute("aria-hidden",!0),e.type="button",this._updateTitle(),this._fullscreenButton.addEventListener("click",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon)},$r.prototype._updateTitle=function(){var t=this._getTitle();this._fullscreenButton.setAttribute("aria-label",t),this._fullscreenButton.title=t},$r.prototype._getTitle=function(){return this._map._getUIString(this._isFullscreen()?"FullscreenControl.Exit":"FullscreenControl.Enter")},$r.prototype._isFullscreen=function(){return this._fullscreen},$r.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle("mapboxgl-ctrl-shrink"),this._fullscreenButton.classList.toggle("mapboxgl-ctrl-fullscreen"),this._updateTitle())},$r.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen()};var ti={closeButton:!0,closeOnClick:!0,className:"",maxWidth:"240px"},ei=function(e){function r(n){e.call(this),this.options=t.extend(Object.create(ti),n),t.bindAll(["_update","_onClickClose","remove"],this)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.addTo=function(e){var n=this;return this._map=e,this.options.closeOnClick&&this._map.on("click",this._onClickClose),this._map.on("remove",this.remove),this._update(),this._trackPointer?(this._map.on("mousemove",(function(t){n._update(t.point)})),this._map.on("mouseup",(function(t){n._update(t.point)})),this._container&&this._container.classList.add("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.add("mapboxgl-track-pointer")):this._map.on("move",this._update),this.fire(new t.Event("open")),this},r.prototype.isOpen=function(){return!!this._map},r.prototype.remove=function(){return this._content&&n.remove(this._content),this._container&&(n.remove(this._container),delete this._container),this._map&&(this._map.off("move",this._update),this._map.off("click",this._onClickClose),this._map.off("remove",this.remove),this._map.off("mousemove"),delete this._map),this.fire(new t.Event("close")),this},r.prototype.getLngLat=function(){return this._lngLat},r.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on("move",this._update),this._map.off("mousemove"),this._container&&this._container.classList.remove("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.remove("mapboxgl-track-pointer")),this},r.prototype.trackPointer=function(){var t=this;return this._trackPointer=!0,this._pos=null,this._update(),this._map&&(this._map.off("move",this._update),this._map.on("mousemove",(function(e){t._update(e.point)})),this._map.on("drag",(function(e){t._update(e.point)})),this._container&&this._container.classList.add("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.add("mapboxgl-track-pointer")),this},r.prototype.getElement=function(){return this._container},r.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},r.prototype.setHTML=function(e){var n,r=t.window.document.createDocumentFragment(),i=t.window.document.createElement("body");for(i.innerHTML=e;n=i.firstChild;)r.appendChild(n);return this.setDOMContent(r)},r.prototype.getMaxWidth=function(){return this._container.style.maxWidth},r.prototype.setMaxWidth=function(t){return this.options.maxWidth=t,this._update(),this},r.prototype.setDOMContent=function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},r.prototype.addClassName=function(t){this._container.classList.add(t)},r.prototype.removeClassName=function(t){this._container.classList.remove(t)},r.prototype.toggleClassName=function(t){return this._container.classList.toggle(t)},r.prototype._createContent=function(){this._content&&n.remove(this._content),this._content=n.create("div","mapboxgl-popup-content",this._container),this.options.closeButton&&(this._closeButton=n.create("button","mapboxgl-popup-close-button",this._content),this._closeButton.type="button",this._closeButton.setAttribute("aria-label","Close popup"),this._closeButton.innerHTML="×",this._closeButton.addEventListener("click",this._onClickClose))},r.prototype._update=function(e){var r=this,i=this._lngLat||this._trackPointer;if(this._map&&i&&this._content&&(this._container||(this._container=n.create("div","mapboxgl-popup",this._map.getContainer()),this._tip=n.create("div","mapboxgl-popup-tip",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(" ").forEach((function(t){return r._container.classList.add(t)})),this._trackPointer&&this._container.classList.add("mapboxgl-popup-track-pointer")),this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer&&(this._lngLat=Gr(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||e)){var o=this._pos=this._trackPointer&&e?e:this._map.project(this._lngLat),a=this.options.anchor,s=function e(n){if(n){if("number"==typeof n){var r=Math.round(Math.sqrt(.5*Math.pow(n,2)));return{center:new t.Point(0,0),top:new t.Point(0,n),"top-left":new t.Point(r,r),"top-right":new t.Point(-r,r),bottom:new t.Point(0,-n),"bottom-left":new t.Point(r,-r),"bottom-right":new t.Point(-r,-r),left:new t.Point(n,0),right:new t.Point(-n,0)}}if(n instanceof t.Point||Array.isArray(n)){var i=t.Point.convert(n);return{center:i,top:i,"top-left":i,"top-right":i,bottom:i,"bottom-left":i,"bottom-right":i,left:i,right:i}}return{center:t.Point.convert(n.center||[0,0]),top:t.Point.convert(n.top||[0,0]),"top-left":t.Point.convert(n["top-left"]||[0,0]),"top-right":t.Point.convert(n["top-right"]||[0,0]),bottom:t.Point.convert(n.bottom||[0,0]),"bottom-left":t.Point.convert(n["bottom-left"]||[0,0]),"bottom-right":t.Point.convert(n["bottom-right"]||[0,0]),left:t.Point.convert(n.left||[0,0]),right:t.Point.convert(n.right||[0,0])}}return e(new t.Point(0,0))}(this.options.offset);if(!a){var u,c=this._container.offsetWidth,l=this._container.offsetHeight;u=o.y+s.bottom.ythis._map.transform.height-l?["bottom"]:[],o.xthis._map.transform.width-c/2&&u.push("right"),a=0===u.length?"bottom":u.join("-")}var h=o.add(s[a]).round();n.setTransform(this._container,Vr[a]+" translate("+h.x+"px,"+h.y+"px)"),Hr(this._container,a,"popup")}},r.prototype._onClickClose=function(){this.remove()},r}(t.Evented),ni={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,getRTLTextPluginStatus:t.getRTLTextPluginStatus,Map:Fr,NavigationControl:Nr,GeolocateControl:Jr,AttributionControl:Ir,ScaleControl:Qr,FullscreenControl:$r,Popup:ei,Marker:qr,Style:je,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e},get workerCount(){return Rt.workerCount},set workerCount(t){Rt.workerCount=t},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e},clearStorage:function(e){t.clearTileCache(e)},workerUrl:""};return ni})),n}()},function(t,e,n){"use strict";n.r(e);var r=n(3),i=n.n(r),o=n(5),a=n.n(o),s=n(6),u=n.n(s),c=n(2),l=n.n(c),h=n(0),f=n.n(h);function p(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=l()(t);if(e){var i=l()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return u()(this,n)}}var d=function(t){a()(n,t);var e=p(n);function n(){return i()(this,n),e.apply(this,arguments)}return n}(n(216).a);f()(d,"layerName","GreatCircleLayer"),f()(d,"defaultProps",{getHeight:{type:"accessor",value:0},greatCircle:!0});var A=n(4),g=n.n(A),m=n(189),y=n(211);function v(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=l()(t);if(e){var i=l()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return u()(this,n)}}function _(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var b=function(t){for(var e=1;e=.5?1/3*(4*t*t-1):1/3*(1-4*(1-t)*(1-t))}function M(t){return[P(t[0]),P(t[1])]}function I(t,e){var n=E()(e,2),r=n[0],i=n[1];switch(t){case 0:return[1,r,i];case 1:return[-r,1,i];case 2:return[-r,-i,1];case 3:return[-1,-i,-r];case 4:return[i,-1,-r];case 5:return[i,r,-1];default:throw new Error("Invalid face")}}function B(t,e,n,r){if(0===r){1===n&&(e[0]=t-1-e[0],e[1]=t-1-e[1]);var i=e[0];e[0]=e[1],e[1]=i}}function R(t){if("string"==typeof t){if(t.indexOf("/")>0)return t;t=function(t){var e=t.padEnd(16,"0");return S.a.fromString(e,16)}(t)}return function(t){for(var e=S.a.fromString(t,!0,10).toString(2);e.length<64;)e="0"+e;for(var n=e.lastIndexOf("1"),r=e.substring(0,3),i=e.substring(3,n),o=i.length/2,a=S.a.fromString(r,!0,2).toString(10),s=S.a.fromString(i,!0,2).toString(4);s.length89.999&&(x[0]=d);var w=x[0]-d;x[0]+=w>180?-360:w<-180?360:0,f[p++]=x[0],f[p++]=x[1],d=x[0]}return f[p++]=f[0],f[p++]=f[1],f}(function(t){for(var e,n=t.split("/"),r=parseInt(n[0],10),i=n[1],o=i.length,a=[0,0],s=o-1;s>=0;s--){e=o-s;var u=i[s],c=0,l=0;"1"===u?l=1:"2"===u?(c=1,l=1):"3"===u&&(c=1);var h=Math.pow(2,e-1);B(h,a,c,l),a[0]+=h*c,a[1]+=h*l}if(r%2==1){var f=a[0];a[0]=a[1],a[1]=f}return{face:r,ij:a,level:e}}(R(t)))}function L(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=l()(t);if(e){var i=l()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return u()(this,n)}}var D=function(t){a()(n,t);var e=L(n);function n(){return i()(this,n),e.apply(this,arguments)}return g()(n,[{key:"indexToBounds",value:function(){var t=this.props,e=t.data,n=t.getS2Token;return{data:e,_normalize:!1,positionFormat:"XY",getPolygon:function(t,e){return k(n(t,e))}}}}]),n}(x);f()(D,"layerName","S2Layer"),f()(D,"defaultProps",{getS2Token:{type:"accessor",value:function(t){return t.token}}});var j=n(18);function F(t){var e=function(t){for(var e=0,n=0,r=1<>=1;var a=parseInt(t[o]);a%2&&(e|=r),a>1&&(n|=r)}return[[e/i,512-n/i],[(e+.99)/i,512-(n+.99)/i]]}(t),n=E()(e,2),r=n[0],i=n[1],o=Object(j.p)(r),a=E()(o,2),s=a[0],u=a[1],c=Object(j.p)(i),l=E()(c,2),h=l[0],f=l[1];return[h,u,h,f,s,f,s,u,h,u]}function z(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=l()(t);if(e){var i=l()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return u()(this,n)}}var U=function(t){a()(n,t);var e=z(n);function n(){return i()(this,n),e.apply(this,arguments)}return g()(n,[{key:"indexToBounds",value:function(){var t=this.props,e=t.data,n=t.getQuadkey;return{data:e,_normalize:!1,positionFormat:"XY",getPolygon:function(t,e){return F(n(t,e))}}}}]),n}(x);f()(U,"layerName","QuadkeyLayer"),f()(U,"defaultProps",{getQuadkey:{type:"accessor",value:function(t){return t.quadkey}}});var N=n(65),G=n(215),V=n(67),H=n.n(V),W=n(39),q=n.n(W),X=n(20),J=function(){function t(e){i()(this,t),this.index=e,this.isVisible=!1,this.isSelected=!1,this.parent=null,this.children=[],this.content=null,this._loader=void 0,this._abortController=null,this._loaderId=0,this._isLoaded=!1,this._isCancelled=!1,this._needsReload=!1}var e;return g()(t,[{key:"data",get:function(){var t=this;return this.isLoading&&this._loader?this._loader.then((function(){return t.data})):this.content}},{key:"isLoaded",get:function(){return this._isLoaded&&!this._needsReload}},{key:"isLoading",get:function(){return Boolean(this._loader)&&!this._isCancelled}},{key:"needsReload",get:function(){return this._needsReload||this._isCancelled}},{key:"byteLength",get:function(){var t=this.content?this.content.byteLength:0;return Number.isFinite(t)||X.a.error("byteLength not defined in tile data")(),t}},{key:"_loadData",value:(e=H()(q.a.mark((function t(e){var n,r,i,o,a,s,u,c,l,h,f,p,d,A;return q.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=e.getData,r=e.requestScheduler,i=e.onLoad,o=e.onError,a=this.index,s=this.id,u=this.bbox,c=this.userData,l=this.zoom,h=this._loaderId,this._abortController=new AbortController,f=this._abortController.signal,t.next=7,r.scheduleRequest(this,(function(t){return t.isSelected?1:-1}));case 7:if(p=t.sent){t.next=11;break}return this._isCancelled=!0,t.abrupt("return");case 11:if(!this._isCancelled){t.next=14;break}return p.done(),t.abrupt("return");case 14:return d=null,t.prev=15,t.next=18,n({index:a,id:s,bbox:u,userData:c,zoom:l,signal:f});case 18:d=t.sent,t.next=24;break;case 21:t.prev=21,t.t0=t.catch(15),A=t.t0||!0;case 24:return t.prev=24,p.done(),t.finish(24);case 27:if(h===this._loaderId){t.next=29;break}return t.abrupt("return");case 29:if(this._loader=void 0,this.content=d,!this._isCancelled||d){t.next=34;break}return this._isLoaded=!1,t.abrupt("return");case 34:this._isLoaded=!0,this._isCancelled=!1,A?o(A,this):i(this);case 37:case"end":return t.stop()}}),t,this,[[15,21,24,27]])}))),function(t){return e.apply(this,arguments)})},{key:"loadData",value:function(t){return this._isLoaded=!1,this._isCancelled=!1,this._needsReload=!1,this._loaderId++,this._loader=this._loadData(t),this._loader}},{key:"setNeedsReload",value:function(){this.isLoading&&(this.abort(),this._loader=void 0),this._needsReload=!0}},{key:"abort",value:function(){var t;this.isLoaded||(this._isCancelled=!0,null===(t=this._abortController)||void 0===t||t.abort())}}]),t}(),Z=n(37),Q=n.n(Z),K=n(156),Y=n(84);const $=-1,tt=0,et=1;function nt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var rt=n(81);const it=new rt.a,ot=new rt.a;class at{constructor(t=[0,0,0],e=[0,0,0],n){nt(this,"center",void 0),nt(this,"halfDiagonal",void 0),nt(this,"minimum",void 0),nt(this,"maximum",void 0),n=n||it.copy(t).add(e).scale(.5),this.center=new rt.a(n),this.halfDiagonal=new rt.a(e).subtract(this.center),this.minimum=new rt.a(t),this.maximum=new rt.a(e)}clone(){return new at(this.minimum,this.maximum,this.center)}equals(t){return this===t||Boolean(t)&&this.minimum.equals(t.minimum)&&this.maximum.equals(t.maximum)}transform(t){return this.center.transformAsPoint(t),this.halfDiagonal.transform(t),this.minimum.transform(t),this.maximum.transform(t),this}intersectPlane(t){const{halfDiagonal:e}=this,n=ot.from(t.normal),r=e.x*Math.abs(n.x)+e.y*Math.abs(n.y)+e.z*Math.abs(n.z),i=this.center.dot(n)+t.distance;return i-r>0?et:i+r<0?$:tt}distanceTo(t){return Math.sqrt(this.distanceSquaredTo(t))}distanceSquaredTo(t){const e=it.from(t).subtract(this.center),{halfDiagonal:n}=this;let r,i=0;return r=Math.abs(e.x)-n.x,r>0&&(i+=r*r),r=Math.abs(e.y)-n.y,r>0&&(i+=r*r),r=Math.abs(e.z)-n.z,r>0&&(i+=r*r),i}}var st=n(25);const ut=new rt.a,ct=new rt.a;class lt{constructor(t=[0,0,0],e=0){nt(this,"center",void 0),nt(this,"radius",void 0),this.radius=-0,this.center=new rt.a,this.fromCenterRadius(t,e)}fromCenterRadius(t,e){return this.center.from(t),this.radius=e,this}fromCornerPoints(t,e){return e=ut.from(e),this.center=(new rt.a).from(t).add(e).scale(.5),this.radius=this.center.distance(e),this}equals(t){return this===t||Boolean(t)&&this.center.equals(t.center)&&this.radius===t.radius}clone(){return new lt(this.center,this.radius)}union(t){const e=this.center,n=this.radius,r=t.center,i=t.radius,o=ut.copy(r).subtract(e),a=o.magnitude();if(n>=a+i)return this.clone();if(i>=a+n)return t.clone();const s=.5*(n+a+i);return ct.copy(o).scale((-n+s)/a).add(e),this.center.copy(ct),this.radius=s,this}expand(t){const e=ut.from(t).subtract(this.center).magnitude();return e>this.radius&&(this.radius=e),this}transform(t){this.center.transform(t);const e=st.e(ut,t);return this.radius=Math.max(e[0],Math.max(e[1],e[2]))*this.radius,this}distanceSquaredTo(t){const e=this.distanceTo(t);return e*e}distanceTo(t){const e=ut.from(t).subtract(this.center);return Math.max(0,e.len()-this.radius)}intersectPlane(t){const e=this.center,n=this.radius,r=t.normal.dot(e)+t.distance;return r<-n?$:r0?this.copy([t,...e]):this.identity()}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this[4]=t[4],this[5]=t[5],this[6]=t[6],this[7]=t[7],this[8]=t[8],this.check()}identity(){return this.copy(yt)}fromObject(t){return this.check()}fromQuaternion(t){return At.c(this,t),this.check()}set(t,e,n,r,i,o,a,s,u){return this[0]=t,this[1]=e,this[2]=n,this[3]=r,this[4]=i,this[5]=o,this[6]=a,this[7]=s,this[8]=u,this.check()}setRowMajor(t,e,n,r,i,o,a,s,u){return this[0]=t,this[1]=r,this[2]=a,this[3]=e,this[4]=i,this[5]=s,this[6]=n,this[7]=o,this[8]=u,this.check()}determinant(){return At.b(this)}transpose(){return At.i(this,this),this.check()}invert(){return At.d(this,this),this.check()}multiplyLeft(t){return At.e(this,t,this),this.check()}multiplyRight(t){return At.e(this,this,t),this.check()}rotate(t){return At.f(this,this,t),this.check()}scale(t){return Array.isArray(t)?At.g(this,this,t):At.g(this,this,[t,t]),this.check()}translate(t){return At.h(this,this,t),this.check()}transform(t,e){let n;switch(t.length){case 2:n=gt.i(e||[-0,-0],t,this);break;case 3:n=mt.o(e||[-0,-0,-0],t,this);break;case 4:n=Object(dt.e)(e||[-0,-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return Object(pt.b)(n,t.length),n}transformVector(t,e){return this.transform(t,e)}transformVector2(t,e){return this.transform(t,e)}transformVector3(t,e){return this.transform(t,e)}}let _t,bt;var xt=n(294);const wt=new rt.a,Et=new rt.a,Ot=new rt.a,St=new rt.a,Tt=new rt.a,Ct=new rt.a,Pt=new rt.a,Mt=0,It=1,Bt=2,Rt=3,kt=4,Lt=5,Dt=6,jt=7,Ft=8;class zt{constructor(t=[0,0,0],e=[0,0,0,0,0,0,0,0,0]){nt(this,"center",void 0),nt(this,"halfAxes",void 0),this.center=(new rt.a).from(t),this.halfAxes=new vt(e)}get halfSize(){const t=this.halfAxes.getColumn(0),e=this.halfAxes.getColumn(1),n=this.halfAxes.getColumn(2);return[new rt.a(t).len(),new rt.a(e).len(),new rt.a(n).len()]}get quaternion(){const t=this.halfAxes.getColumn(0),e=this.halfAxes.getColumn(1),n=this.halfAxes.getColumn(2),r=new rt.a(t).normalize(),i=new rt.a(e).normalize(),o=new rt.a(n).normalize();return(new xt.a).fromMatrix3(new vt([...r,...i,...o]))}fromCenterHalfSizeQuaternion(t,e,n){const r=new xt.a(n),i=(new vt).fromQuaternion(r);return i[0]=i[0]*e[0],i[1]=i[1]*e[0],i[2]=i[2]*e[0],i[3]=i[3]*e[1],i[4]=i[4]*e[1],i[5]=i[5]*e[1],i[6]=i[6]*e[2],i[7]=i[7]*e[2],i[8]=i[8]*e[2],this.center=(new rt.a).from(t),this.halfAxes=i,this}clone(){return new zt(this.center,this.halfAxes)}equals(t){return this===t||Boolean(t)&&this.center.equals(t.center)&&this.halfAxes.equals(t.halfAxes)}getBoundingSphere(t=new lt){const e=this.halfAxes,n=e.getColumn(0,Ot),r=e.getColumn(1,St),i=e.getColumn(2,Tt),o=wt.copy(n).add(r).add(i);return t.center.copy(this.center),t.radius=o.magnitude(),t}intersectPlane(t){const e=this.center,n=t.normal,r=this.halfAxes,i=n.x,o=n.y,a=n.z,s=Math.abs(i*r[Mt]+o*r[It]+a*r[Bt])+Math.abs(i*r[Rt]+o*r[kt]+a*r[Lt])+Math.abs(i*r[Dt]+o*r[jt]+a*r[Ft]),u=n.dot(e)+t.distance;return u<=-s?$:u>=s?et:tt}distanceTo(t){return Math.sqrt(this.distanceSquaredTo(t))}distanceSquaredTo(t){const e=Et.from(t).subtract(this.center),n=this.halfAxes,r=n.getColumn(0,Ot),i=n.getColumn(1,St),o=n.getColumn(2,Tt),a=r.magnitude(),s=i.magnitude(),u=o.magnitude();r.normalize(),i.normalize(),o.normalize();let c,l=0;return c=Math.abs(e.dot(r))-a,c>0&&(l+=c*c),c=Math.abs(e.dot(i))-s,c>0&&(l+=c*c),c=Math.abs(e.dot(o))-u,c>0&&(l+=c*c),l}computePlaneDistances(t,e,n=[-0,-0]){let r=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;const o=this.center,a=this.halfAxes,s=a.getColumn(0,Ot),u=a.getColumn(1,St),c=a.getColumn(2,Tt),l=Ct.copy(s).add(u).add(c).add(o),h=Pt.copy(l).subtract(t);let f=e.dot(h);return r=Math.min(f,r),i=Math.max(f,i),l.copy(o).add(s).add(u).subtract(c),h.copy(l).subtract(t),f=e.dot(h),r=Math.min(f,r),i=Math.max(f,i),l.copy(o).add(s).subtract(u).add(c),h.copy(l).subtract(t),f=e.dot(h),r=Math.min(f,r),i=Math.max(f,i),l.copy(o).add(s).subtract(u).subtract(c),h.copy(l).subtract(t),f=e.dot(h),r=Math.min(f,r),i=Math.max(f,i),o.copy(l).subtract(s).add(u).add(c),h.copy(l).subtract(t),f=e.dot(h),r=Math.min(f,r),i=Math.max(f,i),o.copy(l).subtract(s).add(u).subtract(c),h.copy(l).subtract(t),f=e.dot(h),r=Math.min(f,r),i=Math.max(f,i),o.copy(l).subtract(s).subtract(u).add(c),h.copy(l).subtract(t),f=e.dot(h),r=Math.min(f,r),i=Math.max(f,i),o.copy(l).subtract(s).subtract(u).subtract(c),h.copy(l).subtract(t),f=e.dot(h),r=Math.min(f,r),i=Math.max(f,i),n[0]=r,n[1]=i,n}transform(t){this.center.transformAsPoint(t);const e=this.halfAxes.getColumn(0,Ot);e.transformAsPoint(t);const n=this.halfAxes.getColumn(1,St);n.transformAsPoint(t);const r=this.halfAxes.getColumn(2,Tt);return r.transformAsPoint(t),this.halfAxes=new vt([...e,...n,...r]),this}getTransform(){throw new Error("not implemented")}}var Ut=n(136),Nt=n(13);const Gt=new rt.a,Vt=new rt.a;class Ht{constructor(t=[0,0,1],e=0){nt(this,"normal",void 0),nt(this,"distance",void 0),this.normal=new rt.a,this.distance=-0,this.fromNormalDistance(t,e)}fromNormalDistance(t,e){return Object(Ut.a)(Number.isFinite(e)),this.normal.from(t).normalize(),this.distance=e,this}fromPointNormal(t,e){t=Gt.from(t),this.normal.from(e).normalize();const n=-this.normal.dot(t);return this.distance=n,this}fromCoefficients(t,e,n,r){return this.normal.set(t,e,n),Object(Ut.a)(Object(Nt.d)(this.normal.len(),1)),this.distance=r,this}clone(){return new Ht(this.normal,this.distance)}equals(t){return Object(Nt.d)(this.distance,t.distance)&&Object(Nt.d)(this.normal,t.normal)}getPointDistance(t){return this.normal.dot(t)+this.distance}transform(t){const e=Vt.copy(this.normal).transformAsVector(t).normalize(),n=this.normal.scale(-this.distance).transform(t);return this.fromPointNormal(n,e)}projectPointOntoPlane(t,e=[0,0,0]){t=Gt.from(t);const n=this.getPointDistance(t),r=Vt.copy(this.normal).scale(n);return t.subtract(r).to(e)}}const Wt=[new rt.a([1,0,0]),new rt.a([0,1,0]),new rt.a([0,0,1])],qt=new rt.a,Xt=new rt.a;new Ht(new rt.a(1,0,0),0);class Jt{constructor(t=[]){nt(this,"planes",void 0),this.planes=t}fromBoundingSphere(t){this.planes.length=2*Wt.length;const e=t.center,n=t.radius;let r=0;for(const t of Wt){let i=this.planes[r],o=this.planes[r+1];i||(i=this.planes[r]=new Ht),o||(o=this.planes[r+1]=new Ht);const a=qt.copy(t).scale(-n).add(e);t.dot(a);i.fromPointNormal(a,t);const s=qt.copy(t).scale(n).add(e),u=Xt.copy(t).negate();u.dot(s);o.fromPointNormal(s,u),r+=2}return this}computeVisibility(t){let e=et;for(const n of this.planes){switch(t.intersectPlane(n)){case $:return $;case tt:e=tt}}return e}computeVisibilityWithPlaneMask(t,e){if(Object(Ut.a)(Number.isFinite(e),"parentPlaneMask is required."),e===Jt.MASK_OUTSIDE||e===Jt.MASK_INSIDE)return e;let n=Jt.MASK_INSIDE;const r=this.planes;for(let i=0;is;)le(a,ie),oe.copy(ie).transpose(),a.multiplyRight(ie),a.multiplyLeft(oe),o.multiplyRight(ie),++r>2&&(++i,r=0);return e.unitary=o.toTarget(e.unitary),e.diagonal=a.toTarget(e.diagonal),e}const se=[1,0,0],ue=[2,2,1];function ce(t){let e=0;for(let n=0;n<3;++n){const r=t[ee.getElementIndex(ue[n],se[n])];e+=2*r*r}return Math.sqrt(e)}function le(t,e){const n=$t;let r=0,i=1;for(let e=0;e<3;++e){const n=Math.abs(t[ee.getElementIndex(ue[e],se[e])]);n>r&&(i=e,r=n)}const o=se[i],a=ue[i];let s=1,u=0;if(Math.abs(t[ee.getElementIndex(a,o)])>n){const e=(t[ee.getElementIndex(a,a)]-t[ee.getElementIndex(o,o)])/2/t[ee.getElementIndex(a,o)];let n;n=e<0?-1/(-e+Math.sqrt(1+e*e)):1/(e+Math.sqrt(1+e*e)),s=1/Math.sqrt(1+n*n),u=n*s}return vt.IDENTITY.to(e),e[ee.getElementIndex(o,o)]=e[ee.getElementIndex(a,a)]=s,e[ee.getElementIndex(a,o)]=u,e[ee.getElementIndex(o,a)]=-u,e}const he=new rt.a,fe=new rt.a,pe=new rt.a,de=new rt.a,Ae=new rt.a,ge=new vt,me={diagonal:new vt,unitary:new vt};function ye(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return ve(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ve(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function ve(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=i){var h=c.distanceTo(e.cameraPosition)*e.scale/e.height;l+=Math.floor(Math.log2(h))}if(l>=o)return this.selected=!0,!0}this.selected=!1,this.childVisible=!0;var f,p=ye(this.children);try{for(p.s();!(f=p.n()).done;){f.value.update(t)}}catch(t){p.e(t)}finally{p.f()}return!0}},{key:"getSelected",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(this.selected&&t.push(this),this._children){var e,n=ye(this._children);try{for(n.s();!(e=n.n()).done;){var r=e.value;r.getSelected(t)}}catch(t){n.e(t)}finally{n.f()}}return t}},{key:"insideBounds",value:function(t){var e=E()(t,4),n=e[0],r=e[1],i=e[2],o=e[3],a=512/Math.pow(2,this.z);return this.x*an&&(this.y+1)*a>r}},{key:"getBoundingVolume",value:function(t,e,n){if(n){var r,i=[],o=ye(this.z<1?xe:this.z<2?be:_e);try{for(o.s();!(r=o.n()).done;){var a=r.value,s=Me(this.x+a[0],this.y+a[1],this.z);s[2]=t[0],i.push(n(s)),t[0]!==t[1]&&(s[2]=t[1],i.push(n(s)))}}catch(t){o.e(t)}finally{o.f()}return function(t,e=new zt){if(!t||0===t.length)return e.halfAxes=new vt([0,0,0,0,0,0,0,0,0]),e.center=new rt.a,e;const n=t.length,r=new rt.a(0,0,0);for(const e of t)r.add(e);const i=1/n;r.multiplyByScalar(i);let o=0,a=0,s=0,u=0,c=0,l=0;for(const e of t){const t=he.copy(e).subtract(r);o+=t.x*t.x,a+=t.x*t.y,s+=t.x*t.z,u+=t.y*t.y,c+=t.y*t.z,l+=t.z*t.z}o*=i,a*=i,s*=i,u*=i,c*=i,l*=i;const h=ge;h[0]=o,h[1]=a,h[2]=s,h[3]=a,h[4]=u,h[5]=c,h[6]=s,h[7]=c,h[8]=l;const{unitary:f}=ae(h,me),p=e.halfAxes.copy(f);let d=p.getColumn(0,pe),A=p.getColumn(1,de),g=p.getColumn(2,Ae),m=-Number.MAX_VALUE,y=-Number.MAX_VALUE,v=-Number.MAX_VALUE,_=Number.MAX_VALUE,b=Number.MAX_VALUE,x=Number.MAX_VALUE;for(const e of t)he.copy(e),m=Math.max(he.dot(d),m),y=Math.max(he.dot(A),y),v=Math.max(he.dot(g),v),_=Math.min(he.dot(d),_),b=Math.min(he.dot(A),b),x=Math.min(he.dot(g),x);d=d.multiplyByScalar(.5*(_+m)),A=A.multiplyByScalar(.5*(b+y)),g=g.multiplyByScalar(.5*(x+v)),e.center.copy(d).add(A).add(g);const w=fe.set(m-_,y-b,v-x).multiplyByScalar(.5),E=new vt([w[0],0,0,0,w[1],0,0,0,w[2]]);return e.halfAxes.multiplyRight(E),e}(i)}var u=512/Math.pow(2,this.z),c=this.x*u+512*e,l=512-(this.y+1)*u;return new at([c,l,t[0]],[c+u,l+u,t[1]])}}]),t}();var Ee=[-1/0,-1/0,1/0,1/0],Oe={type:"url",value:null,validate:function(t,e){return e.optional&&null===t||"string"==typeof t||Array.isArray(t)&&t.every((function(t){return"string"==typeof t}))},equals:function(t,e){if(t===e)return!0;if(!Array.isArray(t)||!Array.isArray(e))return!1;var n=t.length;if(n!==e.length)return!1;for(var r=0;r4&&void 0!==arguments[4]?arguments[4]:512;if(t.isGeospatial){var o=Me(e,n,r),a=E()(o,2),s=a[0],u=a[1],c=Me(e+1,n+1,r),l=E()(c,2),h=l[0],f=l[1];return{west:s,north:u,east:h,south:f}}var p=Ie(e,n,r,i),d=E()(p,2),A=d[0],g=d[1],m=Ie(e+1,n+1,r,i),y=E()(m,2),v=y[0],_=y[1];return{left:A,top:g,right:v,bottom:_}}function Re(t,e,n,r,i){for(var o=function(t,e,n){return n?Se(t,n).map((function(t){return t*e/512})):t.map((function(t){return t*e/512}))}(function(t,e,n){var r;if(e&&2===e.length){var i=E()(e,2),o=i[0],a=i[1],s=t.getBounds({z:o}),u=t.getBounds({z:a});r=[Math.min(s[0],u[0]),Math.min(s[1],u[1]),Math.max(s[2],u[2]),Math.max(s[3],u[3])]}else r=t.getBounds();return t.isGeospatial?[Math.max(r[0],n[0]),Math.max(r[1],n[1]),Math.min(r[2],n[2]),Math.min(r[3],n[3])]:[Math.max(Math.min(r[0],n[2]),n[0]),Math.max(Math.min(r[1],n[3]),n[1]),Math.min(Math.max(r[2],n[0]),n[2]),Math.min(Math.max(r[3],n[1]),n[3])]}(t,null,r),Pe(e,n),i),a=E()(o,4),s=a[0],u=a[1],c=a[2],l=a[3],h=[],f=Math.floor(s);fn&&(f=n);var p=o;return u&&c&&o&&!e.isGeospatial&&(p=Se(o,u)),e.isGeospatial?function(t,e,n,r){var i=t instanceof K.a&&t.resolution?t.projectPosition:null,o=Object.values(t.getFrustumPlanes()).map((function(t){var e=t.normal,n=t.distance;return new Ht(e.clone().negate(),n)})),a=new Jt(o),s=t.distanceScales.unitsPerMeter[2],u=n&&n[0]*s||0,c=n&&n[1]*s||0,l=t instanceof Y.a&&t.pitch<=60?e:0;if(r){var h=r,f=E()(h,4),p=f[0],d=f[1],A=f[2],g=f[3],m=Object(j.l)([p,g]),y=Object(j.l)([A,d]);r=[m[0],512-m[1],y[0],512-y[1]]}var v=new we(0,0,0),_={viewport:t,project:i,cullingVolume:a,elevationBounds:[u,c],minZ:l,maxZ:e,bounds:r,offset:0};if(v.update(_),t instanceof Y.a&&t.subViewports&&t.subViewports.length>1){for(_.offset=-1;v.update(_)&&!(--_.offset<-3););for(_.offset=1;v.update(_)&&!(++_.offset>3););}return v.getSelected()}(e,f,i,o):Re(e,f,s,p||Ee,c)}var Le,De=n(208),je=n(77);function Fe(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return ze(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function ze(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0}),this._cache=new Map,this._tiles=[],this._dirty=!1,this._cacheByteSize=0,this._viewport=null,this._selectedTiles=null,this._frameNumber=0,this._modelMatrix=new Zt.a,this._modelMatrixInverse=new Zt.a,this.setOptions(e)}return g()(t,[{key:"tiles",get:function(){return this._tiles}},{key:"selectedTiles",get:function(){return this._selectedTiles}},{key:"isLoaded",get:function(){return null!==this._selectedTiles&&this._selectedTiles.every((function(t){return t.isLoaded}))}},{key:"needsReload",get:function(){return null!==this._selectedTiles&&this._selectedTiles.some((function(t){return t.needsReload}))}},{key:"setOptions",value:function(t){Object.assign(this.opts,t),Number.isFinite(t.maxZoom)&&(this._maxZoom=Math.floor(t.maxZoom)),Number.isFinite(t.minZoom)&&(this._minZoom=Math.ceil(t.minZoom))}},{key:"finalize",value:function(){var t,e=Fe(this._cache.values());try{for(e.s();!(t=e.n()).done;){var n=t.value;n.isLoading&&n.abort()}}catch(t){e.e(t)}finally{e.f()}this._cache.clear(),this._tiles=[],this._selectedTiles=null}},{key:"reloadAll",value:function(){var t,e=Fe(this._cache.keys());try{for(e.s();!(t=e.n()).done;){var n=t.value,r=this._cache.get(n);this._selectedTiles&&this._selectedTiles.includes(r)?r.setNeedsReload():this._cache.delete(n)}}catch(t){e.e(t)}finally{e.f()}}},{key:"update",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.zRange,i=n.modelMatrix,o=new Zt.a(i),a=!o.equals(this._modelMatrix);if(this._viewport&&t.equals(this._viewport)&&Object(Nt.d)(this._zRange,r)&&!a)this.needsReload&&(this._selectedTiles=this._selectedTiles.map((function(t){return e._getTile(t.index,!0)})));else{a&&(this._modelMatrixInverse=o.clone().invert(),this._modelMatrix=o),this._viewport=t,this._zRange=r;var s=this.getTileIndices({viewport:t,maxZoom:this._maxZoom,minZoom:this._minZoom,zRange:r,modelMatrix:this._modelMatrix,modelMatrixInverse:this._modelMatrixInverse});this._selectedTiles=s.map((function(t){return e._getTile(t,!0)})),this._dirty&&this._rebuildTree()}var u=this.updateTileStates();return this._pruneRequests(),this._dirty&&this._resizeCache(),u&&this._frameNumber++,this._frameNumber}},{key:"isTileVisible",value:function(t,e){if(!t.isVisible)return!1;if(e&&this._viewport){var n=Ce({viewport:this._viewport,z:this._zRange,cullRect:e}),r=E()(n,4),i=r[0],o=r[1],a=r[2],s=r[3],u=t.bbox;if("west"in u)return u.westi&&u.southo;var c=Math.min(u.top,u.bottom),l=Math.max(u.top,u.bottom);return u.lefti&&co}return!0}},{key:"getTileIndices",value:function(t){var e=t.viewport,n=t.maxZoom,r=t.minZoom,i=t.zRange,o=t.modelMatrix,a=t.modelMatrixInverse,s=this.opts;return ke({viewport:e,maxZoom:n,minZoom:r,zRange:i,tileSize:s.tileSize,extent:s.extent,modelMatrix:o,modelMatrixInverse:a,zoomOffset:s.zoomOffset})}},{key:"getTileId",value:function(t){return"".concat(t.x,"-").concat(t.y,"-").concat(t.z)}},{key:"getTileZoom",value:function(t){return t.z}},{key:"getTileMetadata",value:function(t){var e=this.opts.tileSize;return{bbox:Be(this._viewport,t.x,t.y,t.z,e)}}},{key:"getParentIndex",value:function(t){return{x:Math.floor(t.x/2),y:Math.floor(t.y/2),z:t.z-1}}},{key:"updateTileStates",value:function(){var t,e=this.opts.refinementStrategy||"best-available",n=new Array(this._cache.size),r=0,i=Fe(this._cache.values());try{for(i.s();!(t=i.n()).done;){var o=t.value;n[r++]=o.isVisible,o.isSelected=!1,o.isVisible=!1}}catch(t){i.e(t)}finally{i.f()}var a,s=Fe(this._selectedTiles);try{for(s.s();!(a=s.n()).done;){var u=a.value;u.isSelected=!0,u.isVisible=!0}}catch(t){s.e(t)}finally{s.f()}("function"==typeof e?e:Ue[e])(Array.from(this._cache.values())),r=0;var c,l=Fe(this._cache.values());try{for(l.s();!(c=l.n()).done;){var h=c.value;if(n[r++]!==h.isVisible)return!0}}catch(t){l.e(t)}finally{l.f()}return!1}},{key:"_pruneRequests",value:function(){var t,e=this.opts.maxRequests,n=[],r=0,i=Fe(this._cache.values());try{for(i.s();!(t=i.n()).done;){var o=t.value;o.isLoading&&(r++,o.isSelected||o.isVisible||n.push(o))}}catch(t){i.e(t)}finally{i.f()}for(;e>0&&r>e&&n.length>0;){n.shift().abort(),r--}}},{key:"_rebuildTree",value:function(){var t,e=this._cache,n=Fe(e.values());try{for(n.s();!(t=n.n()).done;){var r=t.value;r.parent=null,r.children&&(r.children.length=0)}}catch(t){n.e(t)}finally{n.f()}var i,o=Fe(e.values());try{for(o.s();!(i=o.n()).done;){var a=i.value,s=this._getNearestAncestor(a);a.parent=s,null!=s&&s.children&&s.children.push(a)}}catch(t){o.e(t)}finally{o.f()}}},{key:"_resizeCache",value:function(){var t=this._cache,e=this.opts,n=e.maxCacheSize||(e.maxCacheByteSize?1/0:5*this.selectedTiles.length),r=e.maxCacheByteSize||1/0;if(t.size>n||this._cacheByteSize>r){var i,o=Fe(t);try{for(o.s();!(i=o.n()).done;){var a=E()(i.value,2),s=a[0],u=a[1];if(u.isVisible||(this._cacheByteSize-=e.maxCacheByteSize?u.byteLength:0,t.delete(s),this.opts.onTileUnload(u)),t.size<=n&&this._cacheByteSize<=r)break}}catch(t){o.e(t)}finally{o.f()}this._rebuildTree(),this._dirty=!0}this._dirty&&(this._tiles=Array.from(this._cache.values()).sort((function(t,e){return t.zoom-e.zoom})),this._dirty=!1)}},{key:"_getTile",value:function(t,e){var n=this.getTileId(t),r=this._cache.get(n),i=!1;return!r&&e?(r=new J(t),Object.assign(r,this.getTileMetadata(r.index)),Object.assign(r,{id:n,zoom:this.getTileZoom(r.index)}),i=!0,this._cache.set(n,r),this._dirty=!0):r&&r.needsReload&&(i=!0),r&&i&&r.loadData({getData:this.opts.getTileData,requestScheduler:this._requestScheduler,onLoad:this.onTileLoad,onError:this.opts.onTileError}),r}},{key:"_getNearestAncestor",value:function(t){for(var e=this._minZoom,n=void 0===e?0:e,r=t.index;this.getTileZoom(r)>n;){r=this.getParentIndex(r);var i=this._getTile(r);if(i)return i}return null}}]),t}();function Ge(t){for(var e=t;e;){if(e.isLoaded||e.content)return e.state|=2,!0;e=e.parent}return!1}function Ve(t){var e,n=Fe(t.children);try{for(n.s();!(e=n.n()).done;){var r=e.value;r.isLoaded||r.content?r.state|=2:Ve(r)}}catch(t){n.e(t)}finally{n.f()}}function He(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function We(t){for(var e=1;e currentTime || (fadeTrail && (vTime < currentTime - trailLength))) {\n discard;\n}\n","fs:DECKGL_FILTER_COLOR":"if(fadeTrail) {\n color.a *= 1.0 - (currentTime - vTime) / trailLength;\n}\n"},t}},{key:"initializeState",value:function(){Qe()(l()(n.prototype),"initializeState",this).call(this),this.getAttributeManager().addInstanced({timestamps:{size:1,accessor:"getTimestamps",shaderAttributes:{instanceTimestamps:{vertexOffset:0},instanceNextTimestamps:{vertexOffset:1}}}})}},{key:"draw",value:function(t){var e=this.props,r=e.fadeTrail,i=e.trailLength,o=e.currentTime;t.uniforms=Ye(Ye({},t.uniforms),{},{fadeTrail:r,trailLength:i,currentTime:o}),Qe()(l()(n.prototype),"draw",this).call(this,t)}}]),n}(n(112).a);f()(tn,"layerName","TripsLayer"),f()(tn,"defaultProps",{fadeTrail:!0,trailLength:{type:"number",value:120,min:0},currentTime:{type:"number",value:0,min:0},getTimestamps:{type:"accessor",value:function(t){return t.timestamps}}});var en=function(t){var e,n=void 0!==(t=t||{})?t:{},r={};for(e in n)n.hasOwnProperty(e)&&(r[e]=n[e]);var i,o=[],a="";document.currentScript&&(a=document.currentScript.src),a=0!==a.indexOf("blob:")?a.substr(0,a.lastIndexOf("/")+1):"",i=function(t,e,n){var r=new XMLHttpRequest;r.open("GET",t,!0),r.responseType="arraybuffer",r.onload=function(){if(200==r.status||0==r.status&&r.response)e(r.response);else{var i=Z(t);i?e(i.buffer):n()}},r.onerror=n,r.send(null)};var s=n.print||console.log.bind(console),u=n.printErr||console.warn.bind(console);for(e in r)r.hasOwnProperty(e)&&(n[e]=r[e]);r=null,n.arguments&&(o=n.arguments);var c=0,l=function(){return c};var h=!1;function f(t){var e,r=n["_"+t];return e="Cannot call unknown function "+t+", make sure it is exported",r||ut("Assertion failed: "+e),r}function p(t,e,n,r,i){var o={string:function(t){var e=0;if(null!=t&&0!==t){var n=1+(t.length<<2);(function(t,e,n){(function(t,e,n,r){if(!(r>0))return 0;for(var i=n,o=n+r-1,a=0;a=55296&&s<=57343){var u=t.charCodeAt(++a);s=65536+((1023&s)<<10)|1023&u}if(s<=127){if(n>=o)break;e[n++]=s}else if(s<=2047){if(n+1>=o)break;e[n++]=192|s>>6,e[n++]=128|63&s}else if(s<=65535){if(n+2>=o)break;e[n++]=224|s>>12,e[n++]=128|s>>6&63,e[n++]=128|63&s}else{if(n+3>=o)break;e[n++]=240|s>>18,e[n++]=128|s>>12&63,e[n++]=128|s>>6&63,e[n++]=128|63&s}}e[n]=0})(t,y,e,n)})(t,e=tt(n),n)}return e},array:function(t){var e=tt(t.length);return function(t,e){m.set(t,e)}(t,e),e}};var a=f(t),s=[],u=0;if(r)for(var c=0;c=r);)++i;if(i-e>16&&t.subarray&&d)return d.decode(t.subarray(e,i));for(var o="";e>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}(y,t,e):""}var g,m,y,v,_,b,x;"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");function w(t,e){return t%e>0&&(t+=e-t%e),t}function E(t){g=t,n.HEAP8=m=new Int8Array(t),n.HEAP16=v=new Int16Array(t),n.HEAP32=_=new Int32Array(t),n.HEAPU8=y=new Uint8Array(t),n.HEAPU16=new Uint16Array(t),n.HEAPU32=new Uint32Array(t),n.HEAPF32=b=new Float32Array(t),n.HEAPF64=x=new Float64Array(t)}var O=n.TOTAL_MEMORY||33554432;function S(t){for(;t.length>0;){var e=t.shift();if("function"!=typeof e){var r=e.func;"number"==typeof r?void 0===e.arg?n.dynCall_v(r):n.dynCall_vi(r,e.arg):r(void 0===e.arg?null:e.arg)}else e()}}O=(g=n.buffer?n.buffer:new ArrayBuffer(O)).byteLength,E(g),_[6004]=5266928;var T=[],C=[],P=[],M=[];var I=Math.abs,B=Math.ceil,R=Math.floor,k=Math.min,L=0,D=null,j=null;n.preloadedImages={},n.preloadedAudios={};var F,z,U=null,N="data:application/octet-stream;base64,";function G(t){return String.prototype.startsWith?t.startsWith(N):0===t.indexOf(N)}U="data:application/octet-stream;base64,AAAAAAAAAAACAAAAAwAAAAEAAAAFAAAABAAAAAYAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAABAAAABAAAAAMAAAAGAAAABQAAAAIAAAAAAAAAAgAAAAMAAAABAAAABAAAAAYAAAAAAAAABQAAAAMAAAAGAAAABAAAAAUAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAAAAAAAgAAAAMAAAABAAAABQAAAAIAAAAAAAAAAQAAAAMAAAAGAAAABAAAAAYAAAAAAAAABQAAAAIAAAABAAAABAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAAAAAAAAAAAAIAAAAAAAAAAQAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABgAAAAAAAAAFAAAAAAAAAAAAAAAEAAAABQAAAAAAAAAAAAAAAAAAAAIAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAAAAAACAAAAAwAAAAQAAAAFAAAABgAAAAAAAAABAAAAAwAAAAQAAAAFAAAABgAAAAAAAAABAAAAAgAAAAQAAAAFAAAABgAAAAAAAAABAAAAAgAAAAMAAAAFAAAABgAAAAAAAAABAAAAAgAAAAMAAAAEAAAABgAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAABgAAAAAAAAADAAAAAgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAUAAAAEAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAEAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAACAAAABAAAAAMAAAAIAAAA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AAAAAAAAAAAAAAAABQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAAFAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAADAAAABQAAAAEAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAABQAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAABQAAAAAAAAAAAAAABQAAAAUAAAAAAAAAAAAAAP////8BAAAAAAAAAAMAAAAEAAAAAgAAAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAABQAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAQAAAP//////////AQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAIAAAAAAAAAAAAAAAEAAAACAAAABgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAoAAAACAAAAAAAAAAAAAAABAAAAAQAAAAUAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAIAAAAAAAAAAAAAAAEAAAADAAAABwAAAAYAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAHAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAABAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAgAAAAAAAAAAAAAAAQAAAAAAAAAJAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAwAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAgAAAAAAAAAAAAAAAQAAAAQAAAAIAAAACgAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAACAAAAAAAAAAAAAAABAAAACwAAAA8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA4AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAgAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAACAAAAAAAAAAAAAAABAAAADAAAABAAAAAMAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAEAAAAKAAAAEwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAgAAAAAAAAAAAAAAAQAAAA0AAAARAAAADQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABEAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAIAAAAAAAAAAAAAAAEAAAAOAAAAEgAAAA8AAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAPAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABMAAAACAAAAAAAAAAAAAAABAAAA//////////8TAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAASAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABIAAAAAAAAAGAAAAAAAAAAhAAAAAAAAAB4AAAAAAAAAIAAAAAMAAAAxAAAAAQAAADAAAAADAAAAMgAAAAMAAAAIAAAAAAAAAAUAAAAFAAAACgAAAAUAAAAWAAAAAAAAABAAAAAAAAAAEgAAAAAAAAApAAAAAQAAACEAAAAAAAAAHgAAAAAAAAAEAAAAAAAAAAAAAAAFAAAAAgAAAAUAAAAPAAAAAQAAAAgAAAAAAAAABQAAAAUAAAAfAAAAAQAAABYAAAAAAAAAEAAAAAAAAAACAAAAAAAAAAYAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAsAAAAAAAAAEQAAAAMAAAAYAAAAAQAAABcAAAADAAAAGQAAAAMAAAAAAAAAAAAAAAEAAAAFAAAACQAAAAUAAAAFAAAAAAAAAAIAAAAAAAAABgAAAAAAAAASAAAAAQAAAAoAAAAAAAAACwAAAAAAAAAEAAAAAQAAAAMAAAAFAAAABwAAAAUAAAAIAAAAAQAAAAAAAAAAAAAAAQAAAAUAAAAQAAAAAQAAAAUAAAAAAAAAAgAAAAAAAAAHAAAAAAAAABUAAAAAAAAAJgAAAAAAAAAJAAAAAAAAABMAAAAAAAAAIgAAAAMAAAAOAAAAAQAAABQAAAADAAAAJAAAAAMAAAADAAAAAAAAAA0AAAAFAAAAHQAAAAUAAAABAAAAAAAAAAcAAAAAAAAAFQAAAAAAAAAGAAAA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74auECWhw7+cjSACjzniv8CZ+wUhN9I/1uGEKzup6z+/GYr/04bavwmkNHp7xee/F2NMZVAA1z+82s+x2BLivwr2ytbJ9em/KwEH1sMS1r8yp/2LhTfev81i5RexJsy/BlIKPVwR5b95Wyu0/Qjnv5DjoT7YYcs/nBhKZ6zrwr8wRYS7Nebuv3OW6geh+Lu/SLrixebL3j+pcyymN9Xrv8rHIFfWehZAMBwUdlo0DECTUc17EOb2PxpVB1SWChdAzjbhb9pTDUDQhmdvECX5P9FlMKCC9+g/IIAzjELgE0DajDngMv8GQFhWDmDPjNs/y1guLh96EkAxPi8k7DIEQJCc4URlhRhA3eLKKLwkEECqpNAyTBD/P6xpjXcDiwVAFtl//cQm4z+Ibt3XKiYTQM7mCLUb3QdAoM1t8yVv7D8aLZv2Nk8UQEAJPV5nQwxAtSsfTCoE9z9TPjXLXIIWQBVanC5W9AtAYM3d7Adm9j++5mQz1FoWQBUThyaVBghAwH5muQsV7T89Q1qv82MUQJoWGOfNuBdAzrkClkmwDkDQjKq77t37Py+g0dtitsE/ZwAMTwVPEUBojepluNwBQGYbtuW+t9w/HNWIJs6MEkDTNuQUSlgEQKxktPP5TcQ/ixbLB8JjEUCwuWjXMQYCQAS/R09FkRdAowpiZjhhDkB7LmlczD/7P01iQmhhsAVAnrtTwDy84z/Z6jfQ2TgTQChOCXMnWwpAhrW3daoz8z/HYJvVPI4VQLT3ik5FcA5Angi7LOZd+z+NNVzDy5gXQBXdvVTFUA1AYNMgOeYe+T8+qHXGCwkXQKQTOKwa5AJA8gFVoEMW0T+FwzJyttIRQAEAAAD/////BwAAAP////8xAAAA/////1cBAAD/////YQkAAP////+nQQAA/////5HLAQD/////95AMAP/////B9lcAAAAAAAAAAAAAAAAAAgAAAP////8OAAAA/////2IAAAD/////rgIAAP/////CEgAA/////06DAAD/////IpcDAP/////uIRkA/////4LtrwAAAAAAAAAAAAAAAAAAAAAAAgAAAP//////////AQAAAAMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////wIAAAD//////////wEAAAAAAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA/////////////////////wEAAAD///////////////8CAAAA////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD///////////////////////////////8CAAAA////////////////AQAAAP////////////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAAAQAAAP//////////AgAAAP//////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAAEAAAD//////////wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAgAAAAAAAAACAAAAAQAAAAEAAAACAAAAAgAAAAAAAAAFAAAABQAAAAAAAAACAAAAAgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAABAAAAAgAAAAIAAAACAAAAAAAAAAUAAAAGAAAAAAAAAAIAAAACAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAEAAAADAAAAAgAAAAIAAAAAAAAABQAAAAcAAAAAAAAAAgAAAAIAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAACAAAAAQAAAAQAAAACAAAAAgAAAAAAAAAFAAAACAAAAAAAAAACAAAAAgAAAAMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAACAAAAAAAAAAIAAAABAAAAAAAAAAIAAAACAAAAAAAAAAUAAAAJAAAAAAAAAAIAAAACAAAAAwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAACAAAAAAAAAAMAAAAOAAAAAgAAAAAAAAACAAAAAwAAAAAAAAAAAAAAAgAAAAIAAAADAAAABgAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAgAAAAIAAAAAAAAAAwAAAAoAAAACAAAAAAAAAAIAAAADAAAAAQAAAAAAAAACAAAAAgAAAAMAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAgAAAAAAAAADAAAACwAAAAIAAAAAAAAAAgAAAAMAAAACAAAAAAAAAAIAAAACAAAAAwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAACAAAAAAAAAAMAAAAMAAAAAgAAAAAAAAACAAAAAwAAAAMAAAAAAAAAAgAAAAIAAAADAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAgAAAAIAAAAAAAAAAwAAAA0AAAACAAAAAAAAAAIAAAADAAAABAAAAAAAAAACAAAAAgAAAAMAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAgAAAAAAAAADAAAABgAAAAIAAAAAAAAAAgAAAAMAAAAPAAAAAAAAAAIAAAACAAAAAwAAAAsAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAIAAAACAAAAAAAAAAMAAAAHAAAAAgAAAAAAAAACAAAAAwAAABAAAAAAAAAAAgAAAAIAAAADAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAgAAAAIAAAAAAAAAAwAAAAgAAAACAAAAAAAAAAIAAAADAAAAEQAAAAAAAAACAAAAAgAAAAMAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAACAAAAAgAAAAAAAAADAAAACQAAAAIAAAAAAAAAAgAAAAMAAAASAAAAAAAAAAIAAAACAAAAAwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAACQAAAAIAAAACAAAAAAAAAAMAAAAFAAAAAgAAAAAAAAACAAAAAwAAABMAAAAAAAAAAgAAAAIAAAADAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAUAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////8AAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAQAAAAAAAAAFAAAAAQAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAABAAEAAAEBAAAAAAABAAAAAQAAAAEAAQAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAAAAQAAAAMAAAAOAAAABgAAAAsAAAACAAAABwAAAAEAAAAYAAAABQAAAAoAAAABAAAABgAAAAAAAAAmAAAABwAAAAwAAAADAAAACAAAAAIAAAAxAAAACQAAAA4AAAAAAAAABQAAAAQAAAA6AAAACAAAAA0AAAAEAAAACQAAAAMAAAA/AAAACwAAAAYAAAAPAAAACgAAABAAAABIAAAADAAAAAcAAAAQAAAACwAAABEAAABTAAAACgAAAAUAAAATAAAADgAAAA8AAABhAAAADQAAAAgAAAARAAAADAAAABIAAABrAAAADgAAAAkAAAASAAAADQAAABMAAAB1AAAADwAAABMAAAARAAAAEgAAABAAAAAHAAAABwAAAAEAAAACAAAABAAAAAMAAAAAAAAAAAAAAAcAAAADAAAAAQAAAAIAAAAFAAAABAAAAAAAAAAAAAAAYWxnb3MuYwBfcG9seWZpbGxJbnRlcm5hbABhZGphY2VudEZhY2VEaXJbdG1wRmlqay5mYWNlXVtmaWprLmZhY2VdID09IEtJAGZhY2VpamsuYwBfZmFjZUlqa1BlbnRUb0dlb0JvdW5kYXJ5AGFkamFjZW50RmFjZURpcltjZW50ZXJJSksuZmFjZV1bZmFjZTJdID09IEtJAF9mYWNlSWprVG9HZW9Cb3VuZGFyeQBwb2x5Z29uLT5uZXh0ID09IE5VTEwAbGlua2VkR2VvLmMAYWRkTmV3TGlua2VkUG9seWdvbgBuZXh0ICE9IE5VTEwAbG9vcCAhPSBOVUxMAGFkZE5ld0xpbmtlZExvb3AAcG9seWdvbi0+Zmlyc3QgPT0gTlVMTABhZGRMaW5rZWRMb29wAGNvb3JkICE9IE5VTEwAYWRkTGlua2VkQ29vcmQAbG9vcC0+Zmlyc3QgPT0gTlVMTABpbm5lckxvb3BzICE9IE5VTEwAbm9ybWFsaXplTXVsdGlQb2x5Z29uAGJib3hlcyAhPSBOVUxMAGNhbmRpZGF0ZXMgIT0gTlVMTABmaW5kUG9seWdvbkZvckhvbGUAY2FuZGlkYXRlQkJveGVzICE9IE5VTEwAcmV2RGlyICE9IElOVkFMSURfRElHSVQAbG9jYWxpai5jAGgzVG9Mb2NhbElqawBiYXNlQ2VsbCAhPSBvcmlnaW5CYXNlQ2VsbAAhKG9yaWdpbk9uUGVudCAmJiBpbmRleE9uUGVudCkAcGVudGFnb25Sb3RhdGlvbnMgPj0gMABkaXJlY3Rpb25Sb3RhdGlvbnMgPj0gMABiYXNlQ2VsbCA9PSBvcmlnaW5CYXNlQ2VsbABiYXNlQ2VsbCAhPSBJTlZBTElEX0JBU0VfQ0VMTABsb2NhbElqa1RvSDMAIV9pc0Jhc2VDZWxsUGVudGFnb24oYmFzZUNlbGwpAGJhc2VDZWxsUm90YXRpb25zID49IDAAd2l0aGluUGVudGFnb25Sb3RhdGlvbnMgPj0gMABncmFwaC0+YnVja2V0cyAhPSBOVUxMAHZlcnRleEdyYXBoLmMAaW5pdFZlcnRleEdyYXBoAG5vZGUgIT0gTlVMTABhZGRWZXJ0ZXhOb2Rl";function V(t){return t}function H(t){return t.replace(/\b__Z[\w\d_]+/g,(function(t){return t===t?t:t+" ["+t+"]"}))}function W(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function q(){return m.length}function X(t){try{var e=new ArrayBuffer(t);if(e.byteLength!=t)return;return new Int8Array(e).set(m),$(e),E(e),1}catch(t){}}var J="function"==typeof atob?atob:function(t){var e,n,r,i,o,a,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",u="",c=0;t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{e=s.indexOf(t.charAt(c++))<<2|(i=s.indexOf(t.charAt(c++)))>>4,n=(15&i)<<4|(o=s.indexOf(t.charAt(c++)))>>2,r=(3&o)<<6|(a=s.indexOf(t.charAt(c++))),u+=String.fromCharCode(e),64!==o&&(u+=String.fromCharCode(n)),64!==a&&(u+=String.fromCharCode(r))}while(c>2]=t,i[s+4>>2]=e,(s=0!=(0|o))&&(i[o>>2]=0),0|kt(t,e))return M=a,0|(d=1);i[d>>2]=0;t:do{if((0|n)>=1)if(s)for(h=0,f=1,p=1,u=0,s=t;;){if(!(u|h)){if(0==(0|(s=0|k(s,e,4,d)))&0==(0|(e=0|w()))){s=2;break t}if(0|kt(s,e)){s=1;break t}}if(0==(0|(s=0|k(s,e,0|i[16+(h<<2)>>2],d)))&0==(0|(e=0|w()))){s=2;break t}if(i[(t=r+(p<<3)|0)>>2]=s,i[t+4>>2]=e,i[o+(p<<2)>>2]=f,t=(0|(u=u+1|0))==(0|f),l=6==(0|(c=h+1|0)),0|kt(s,e)){s=1;break t}if((0|(f=f+(l&t&1)|0))>(0|n)){s=0;break}h=t?l?0:c:h,p=p+1|0,u=t?0:u}else for(h=0,f=1,p=1,u=0,s=t;;){if(!(u|h)){if(0==(0|(s=0|k(s,e,4,d)))&0==(0|(e=0|w()))){s=2;break t}if(0|kt(s,e)){s=1;break t}}if(0==(0|(s=0|k(s,e,0|i[16+(h<<2)>>2],d)))&0==(0|(e=0|w()))){s=2;break t}if(i[(t=r+(p<<3)|0)>>2]=s,i[t+4>>2]=e,t=(0|(u=u+1|0))==(0|f),l=6==(0|(c=h+1|0)),0|kt(s,e)){s=1;break t}if((0|(f=f+(l&t&1)|0))>(0|n)){s=0;break}h=t?l?0:c:h,p=p+1|0,u=t?0:u}else s=0}while(0);return M=a,0|(d=s)}function R(t,e,n,r,o,a,s){n|=0,r|=0,o|=0,a|=0,s|=0;var u,c,l=0,h=0,f=0,p=0,d=0;if(c=M,M=M+16|0,u=c,0==(0|(t|=0))&0==(0|(e|=0)))M=c;else{if(l=0|we(0|t,0|e,0|a,((0|a)<0)<<31>>31|0),w(),!(0==(0|(d=0|i[(p=h=r+(l<<3)|0)>>2]))&0==(0|(p=0|i[p+4>>2]))|(f=(0|d)==(0|t)&(0|p)==(0|e))))do{f=(0|(p=0|i[(d=h=r+((l=(l+1|0)%(0|a)|0)<<3)|0)>>2]))==(0|t)&(0|(d=0|i[d+4>>2]))==(0|e)}while(!(0==(0|p)&0==(0|d)|f));l=o+(l<<2)|0,f&&(0|i[l>>2])<=(0|s)||(i[(d=h)>>2]=t,i[d+4>>2]=e,i[l>>2]=s,(0|s)>=(0|n)||(d=s+1|0,i[u>>2]=0,R(p=0|k(t,e,2,u),0|w(),n,r,o,a,d),i[u>>2]=0,R(p=0|k(t,e,3,u),0|w(),n,r,o,a,d),i[u>>2]=0,R(p=0|k(t,e,1,u),0|w(),n,r,o,a,d),i[u>>2]=0,R(p=0|k(t,e,5,u),0|w(),n,r,o,a,d),i[u>>2]=0,R(p=0|k(t,e,4,u),0|w(),n,r,o,a,d),i[u>>2]=0,R(p=0|k(t,e,6,u),0|w(),n,r,o,a,d))),M=c}}function k(t,e,n,r){t|=0,e|=0,n|=0;var o,a,s=0,u=0,c=0,l=0,h=0,f=0,p=0;if((0|i[(r|=0)>>2])>0){s=0;do{n=0|ut(n),s=s+1|0}while((0|s)<(0|i[r>>2]))}o=0|Ee(0|t,0|e,45),w(),a=127&o,u=0|Lt(t,e),s=0|Ee(0|t,0|e,52),w(),s&=15;t:do{if(s)for(;;){if(f=0|Ee(0|t,0|e,0|(h=3*(15-s|0)|0)),w(),f&=7,p=0==(0|Ut(s)),s=s+-1|0,l=0|Oe(7,0,0|h),e&=~(0|w()),t=(h=0|Oe(0|i[(p?464:48)+(28*f|0)+(n<<2)>>2],0,0|h))|t&~l,e|=0|w(),!(n=0|i[(p?672:256)+(28*f|0)+(n<<2)>>2])){n=0;break t}if(!s){c=6;break}}else c=6}while(0);6==(0|c)&&(t|=f=0|Oe(0|(p=0|i[880+(28*a|0)+(n<<2)>>2]),0,45),e=0|w()|-1040385&e,n=0|i[4304+(28*a|0)+(n<<2)>>2],127==(127&p|0)&&(p=0|Oe(0|i[880+(28*a|0)+20>>2],0,45),e=0|w()|-1040385&e,n=0|i[4304+(28*a|0)+20>>2],t=0|jt(p|t,e),e=0|w(),i[r>>2]=1+(0|i[r>>2]))),c=0|Ee(0|t,0|e,45),w(),c&=127;t:do{if(0|D(c)){e:do{if(1==(0|Lt(t,e))){if((0|a)!=(0|c)){if(0|U(c,0|i[7728+(28*a|0)>>2])){t=0|zt(t,e),u=1,e=0|w();break}t=0|jt(t,e),u=1,e=0|w();break}switch(0|u){case 5:t=0|zt(t,e),e=0|w(),i[r>>2]=5+(0|i[r>>2]),u=0;break e;case 3:t=0|jt(t,e),e=0|w(),i[r>>2]=1+(0|i[r>>2]),u=0;break e;default:return p=0,x(0|(f=0)),0|p}}else u=0}while(0);if((0|n)>0){s=0;do{t=0|Dt(t,e),e=0|w(),s=s+1|0}while((0|s)!=(0|n))}if((0|a)!=(0|c)){if(!(0|j(c))){if(0!=(0|u)|5!=(0|Lt(t,e)))break;i[r>>2]=1+(0|i[r>>2]);break}switch(127&o){case 8:case 118:break t}3!=(0|Lt(t,e))&&(i[r>>2]=1+(0|i[r>>2]))}}else if((0|n)>0){s=0;do{t=0|jt(t,e),e=0|w(),s=s+1|0}while((0|s)!=(0|n))}}while(0);return i[r>>2]=((0|i[r>>2])+n|0)%6|0,p=t,x(0|(f=e)),0|p}function L(t,e,n,r,a,s){e|=0,n|=0,r|=0,a|=0,s|=0;var u,c,l,h,f,p,d,A,g,m=0,y=0,v=0,_=0,b=0,x=0,E=0,O=0,S=0,T=0,C=0,P=0,I=0,B=0;if(g=M,M=M+48|0,p=g+32|0,d=g+16|0,A=g,(0|(m=0|i[(t|=0)>>2]))<=0)return M=g,0|(P=0);u=t+4|0,c=p+8|0,l=d+8|0,h=A+8|0,f=((0|e)<0)<<31>>31,C=0;t:for(;;){S=(y=0|i[u>>2])+(C<<4)|0,i[p>>2]=i[S>>2],i[p+4>>2]=i[S+4>>2],i[p+8>>2]=i[S+8>>2],i[p+12>>2]=i[S+12>>2],(0|C)==(m+-1|0)?(i[d>>2]=i[y>>2],i[d+4>>2]=i[y+4>>2],i[d+8>>2]=i[y+8>>2],i[d+12>>2]=i[y+12>>2]):(S=y+(C+1<<4)|0,i[d>>2]=i[S>>2],i[d+4>>2]=i[S+4>>2],i[d+8>>2]=i[S+8>>2],i[d+12>>2]=i[S+12>>2]),S=0|q(p,d,n);e:do{if((0|S)>0){T=+(0|S),O=0;n:for(;;){B=+(S-O|0),I=+(0|O),o[A>>3]=+o[p>>3]*B/T+ +o[d>>3]*I/T,o[h>>3]=+o[c>>3]*B/T+ +o[l>>3]*I/T,y=0|we(0|(x=0|Nt(A,n)),0|(E=0|w()),0|e,0|f),w(),_=0|i[(v=m=s+(y<<3)|0)>>2],v=0|i[v+4>>2];r:do{if(0==(0|_)&0==(0|v))P=14;else for(b=0;;){if((0|b)>(0|e)){m=1;break r}if((0|_)==(0|x)&(0|v)==(0|E)){m=7;break r}if(0==(0|(_=0|i[(v=m=s+((y=(y+1|0)%(0|e)|0)<<3)|0)>>2]))&0==(0|(v=0|i[v+4>>2]))){P=14;break}b=b+1|0}}while(0);switch(14==(0|P)&&(P=0,0==(0|x)&0==(0|E)?m=7:(i[m>>2]=x,i[m+4>>2]=E,m=0|i[r>>2],i[(b=a+(m<<3)|0)>>2]=x,i[b+4>>2]=E,i[r>>2]=m+1,m=0)),7&m){case 7:case 0:break;default:break n}if((0|S)<=(0|(O=O+1|0))){P=8;break e}}if(0|m){m=-1,P=20;break t}}else P=8}while(0);if(8==(0|P)&&(P=0),(0|(C=C+1|0))>=(0|(m=0|i[t>>2]))){m=0,P=20;break}}return 20==(0|P)?(M=g,0|m):0}function D(t){return 0|i[7728+(28*(t|=0)|0)+16>>2]}function j(t){return 4==(0|(t|=0))|117==(0|t)|0}function F(t){return 0|i[11152+(216*(0|i[(t|=0)>>2])|0)+(72*(0|i[t+4>>2])|0)+(24*(0|i[t+8>>2])|0)+(i[t+12>>2]<<3)>>2]}function z(t){return 0|i[11152+(216*(0|i[(t|=0)>>2])|0)+(72*(0|i[t+4>>2])|0)+(24*(0|i[t+8>>2])|0)+(i[t+12>>2]<<3)+4>>2]}function U(t,e){return e|=0,(0|i[7728+(28*(t|=0)|0)+20>>2])==(0|e)?0|(e=1):0|(e=(0|i[7728+(28*t|0)+24>>2])==(0|e))}function N(t,e){return 0|i[880+(28*(t|=0)|0)+((e|=0)<<2)>>2]}function G(t,e){return e|=0,(0|i[880+(28*(t|=0)|0)>>2])==(0|e)?0|(e=0):(0|i[880+(28*t|0)+4>>2])==(0|e)?0|(e=1):(0|i[880+(28*t|0)+8>>2])==(0|e)?0|(e=2):(0|i[880+(28*t|0)+12>>2])==(0|e)?0|(e=3):(0|i[880+(28*t|0)+16>>2])==(0|e)?0|(e=4):(0|i[880+(28*t|0)+20>>2])==(0|e)?0|(e=5):0|((0|i[880+(28*t|0)+24>>2])==(0|e)?6:7)}function V(t){return+o[(t|=0)+16>>3]<+o[t+24>>3]|0}function H(t,e){t|=0;var n,r,i=0;return(i=+o[(e|=0)>>3])>=+o[t+8>>3]&&i<=+o[t>>3]?(n=+o[t+16>>3],i=+o[t+24>>3],e=(r=+o[e+8>>3])>=i,t=r<=n&1,n>2]=0,h=h+4|0}while((0|h)<(0|f));return qt(e,a),Ht(f=0|i[(h=a)>>2],h=0|i[h+4>>2],n),Wt(f,h,r),c=+Ct(n,r+8|0),o[n>>3]=+o[t>>3],o[(h=n+8|0)>>3]=+o[t+16>>3],o[r>>3]=+o[t+8>>3],o[(f=r+8|0)>>3]=+o[t+24>>3],l=+Ct(n,r),f=~~+y(+l*l/+Se(+ +u(+(+o[h>>3]-+o[f>>3])/(+o[n>>3]-+o[r>>3])),3)/(c*(2.59807621135*c)*.8)),M=s,0|(0==(0|f)?1:f)}function q(t,e,n){t|=0,e|=0,n|=0;var r,o,a,s,u,c=0,l=0;s=M,M=M+288|0,r=s+264|0,o=s+96|0,l=(c=a=s)+96|0;do{i[c>>2]=0,c=c+4|0}while((0|c)<(0|l));return qt(n,a),Ht(c=0|i[(l=a)>>2],l=0|i[l+4>>2],r),Wt(c,l,o),u=+Ct(r,o+8|0),l=~~+y(+ +Ct(t,e)/(2*u)),M=s,0|(0==(0|l)?1:l)}function X(t,e,n,r){e|=0,n|=0,r|=0,i[(t|=0)>>2]=e,i[t+4>>2]=n,i[t+8>>2]=r}function J(t,e){t|=0;var n,r,a,s,c=0,l=0,h=0,f=0,p=0,d=0,A=0;i[(s=(e|=0)+8|0)>>2]=0,r=+o[t>>3],f=+u(+r),a=+o[t+8>>3],f+=.5*(p=+u(+a)/.8660254037844386),f-=+(0|(c=~~f)),p-=+(0|(t=~~p));do{if(f<.5){if(f<.3333333333333333){if(i[e>>2]=c,p<.5*(f+1)){i[e+4>>2]=t;break}t=t+1|0,i[e+4>>2]=t;break}if(t=(1&!(p<(A=1-f)))+t|0,i[e+4>>2]=t,A<=p&p<2*f){c=c+1|0,i[e>>2]=c;break}i[e>>2]=c;break}if(!(f<.6666666666666666)){if(c=c+1|0,i[e>>2]=c,p<.5*f){i[e+4>>2]=t;break}t=t+1|0,i[e+4>>2]=t;break}if(p<1-f){if(i[e+4>>2]=t,2*f-1>2]=c;break}}else t=t+1|0,i[e+4>>2]=t;c=c+1|0,i[e>>2]=c}while(0);do{if(r<0){if(1&t){c=~~(+(0|c)-(2*(+((d=0|_e(0|c,((0|c)<0)<<31>>31|0,0|(d=(t+1|0)/2|0),((0|d)<0)<<31>>31|0))>>>0)+4294967296*+(0|w()))+1)),i[e>>2]=c;break}c=~~(+(0|c)-2*(+((d=0|_e(0|c,((0|c)<0)<<31>>31|0,0|(d=(0|t)/2|0),((0|d)<0)<<31>>31|0))>>>0)+4294967296*+(0|w()))),i[e>>2]=c;break}}while(0);d=e+4|0,a<0&&(c=c-((1|t<<1)/2|0)|0,i[e>>2]=c,t=0-t|0,i[d>>2]=t),l=t-c|0,(0|c)<0?(h=0-c|0,i[d>>2]=l,i[s>>2]=h,i[e>>2]=0,t=l,c=0):h=0,(0|t)<0&&(c=c-t|0,i[e>>2]=c,h=h-t|0,i[s>>2]=h,i[d>>2]=0,t=0),n=c-h|0,l=t-h|0,(0|h)<0&&(i[e>>2]=n,i[d>>2]=l,i[s>>2]=0,t=l,c=n,h=0),(0|(l=(0|h)<(0|(l=(0|t)<(0|c)?t:c))?h:l))<=0||(i[e>>2]=c-l,i[d>>2]=t-l,i[s>>2]=h-l)}function Z(t){var e,n=0,r=0,o=0,a=0,s=0;n=0|i[(t|=0)>>2],r=0|i[(e=t+4|0)>>2],(0|n)<0&&(r=r-n|0,i[e>>2]=r,i[(s=t+8|0)>>2]=(0|i[s>>2])-n,i[t>>2]=0,n=0),(0|r)<0?(n=n-r|0,i[t>>2]=n,a=(0|i[(s=t+8|0)>>2])-r|0,i[s>>2]=a,i[e>>2]=0,r=0):(s=a=t+8|0,a=0|i[a>>2]),(0|a)<0&&(n=n-a|0,i[t>>2]=n,r=r-a|0,i[e>>2]=r,i[s>>2]=0,a=0),(0|(o=(0|a)<(0|(o=(0|r)<(0|n)?r:n))?a:o))<=0||(i[t>>2]=n-o,i[e>>2]=r-o,i[s>>2]=a-o)}function Q(t,e){e|=0;var n,r;r=0|i[(t|=0)+8>>2],n=+((0|i[t+4>>2])-r|0),o[e>>3]=+((0|i[t>>2])-r|0)-.5*n,o[e+8>>3]=.8660254037844386*n}function K(t,e,n){t|=0,e|=0,i[(n|=0)>>2]=(0|i[e>>2])+(0|i[t>>2]),i[n+4>>2]=(0|i[e+4>>2])+(0|i[t+4>>2]),i[n+8>>2]=(0|i[e+8>>2])+(0|i[t+8>>2])}function Y(t,e,n){t|=0,e|=0,i[(n|=0)>>2]=(0|i[t>>2])-(0|i[e>>2]),i[n+4>>2]=(0|i[t+4>>2])-(0|i[e+4>>2]),i[n+8>>2]=(0|i[t+8>>2])-(0|i[e+8>>2])}function $(t,e){e|=0;var n,r=0;r=0|v(0|i[(t|=0)>>2],e),i[t>>2]=r,n=0|v(0|i[(r=t+4|0)>>2],e),i[r>>2]=n,e=0|v(0|i[(t=t+8|0)>>2],e),i[t>>2]=e}function tt(t){var e,n,r=0,o=0,a=0,s=0,u=0;u=(0|(n=0|i[(t|=0)>>2]))<0,t=(t=(o=(0|(s=((e=(0|(a=(0|i[t+4>>2])-(u?n:0)|0))<0)?0-a|0:0)+((0|i[t+8>>2])-(u?n:0))|0))<0)?0:s)-((a=(0|(o=(0|t)<(0|(o=(0|(r=(e?0:a)-(o?s:0)|0))<(0|(s=(u?0:n)-(e?a:0)-(o?s:0)|0))?r:s))?t:o))>0)?o:0)|0,r=r-(a?o:0)|0;t:do{switch(s-(a?o:0)|0){case 0:switch(0|r){case 0:return 0|(u=0==(0|t)?0:1==(0|t)?1:7);case 1:return 0|(u=0==(0|t)?2:1==(0|t)?3:7);default:break t}case 1:switch(0|r){case 0:return 0|(u=0==(0|t)?4:1==(0|t)?5:7);case 1:if(t)break t;return 0|(t=6);default:break t}}}while(0);return 0|(u=7)}function et(t){var e,n,r=0,o=0,a=0,s=0,u=0;o=0|i[(e=(t|=0)+8|0)>>2],a=0|ge(+((3*(r=(0|i[t>>2])-o|0)|0)-(o=(0|i[(n=t+4|0)>>2])-o|0)|0)/7),i[t>>2]=a,r=0|ge(+((o<<1)+r|0)/7),i[n>>2]=r,i[e>>2]=0,o=r-a|0,(0|a)<0?(u=0-a|0,i[n>>2]=o,i[e>>2]=u,i[t>>2]=0,r=o,a=0,o=u):o=0,(0|r)<0&&(a=a-r|0,i[t>>2]=a,o=o-r|0,i[e>>2]=o,i[n>>2]=0,r=0),u=a-o|0,s=r-o|0,(0|o)<0?(i[t>>2]=u,i[n>>2]=s,i[e>>2]=0,r=s,s=u,o=0):s=a,(0|(a=(0|o)<(0|(a=(0|r)<(0|s)?r:s))?o:a))<=0||(i[t>>2]=s-a,i[n>>2]=r-a,i[e>>2]=o-a)}function nt(t){var e,n,r=0,o=0,a=0,s=0,u=0;o=0|i[(e=(t|=0)+8|0)>>2],a=0|ge(+(((r=(0|i[t>>2])-o|0)<<1)+(o=(0|i[(n=t+4|0)>>2])-o|0)|0)/7),i[t>>2]=a,r=0|ge(+((3*o|0)-r|0)/7),i[n>>2]=r,i[e>>2]=0,o=r-a|0,(0|a)<0?(u=0-a|0,i[n>>2]=o,i[e>>2]=u,i[t>>2]=0,r=o,a=0,o=u):o=0,(0|r)<0&&(a=a-r|0,i[t>>2]=a,o=o-r|0,i[e>>2]=o,i[n>>2]=0,r=0),u=a-o|0,s=r-o|0,(0|o)<0?(i[t>>2]=u,i[n>>2]=s,i[e>>2]=0,r=s,s=u,o=0):s=a,(0|(a=(0|o)<(0|(a=(0|r)<(0|s)?r:s))?o:a))<=0||(i[t>>2]=s-a,i[n>>2]=r-a,i[e>>2]=o-a)}function rt(t){var e,n,r,o=0,a=0,s=0,u=0;o=0|i[(t|=0)>>2],a=0|i[(n=t+4|0)>>2],s=0|i[(r=t+8|0)>>2],u=a+(3*o|0)|0,i[t>>2]=u,a=s+(3*a|0)|0,i[n>>2]=a,o=(3*s|0)+o|0,i[r>>2]=o,s=a-u|0,(0|u)<0?(o=o-u|0,i[n>>2]=s,i[r>>2]=o,i[t>>2]=0,a=s,s=0):s=u,(0|a)<0&&(s=s-a|0,i[t>>2]=s,o=o-a|0,i[r>>2]=o,i[n>>2]=0,a=0),e=s-o|0,u=a-o|0,(0|o)<0?(i[t>>2]=e,i[n>>2]=u,i[r>>2]=0,s=e,o=0):u=a,(0|(a=(0|o)<(0|(a=(0|u)<(0|s)?u:s))?o:a))<=0||(i[t>>2]=s-a,i[n>>2]=u-a,i[r>>2]=o-a)}function it(t){var e,n,r,o=0,a=0,s=0,u=0;u=0|i[(t|=0)>>2],s=(3*(o=0|i[(n=t+4|0)>>2])|0)+u|0,u=(a=0|i[(r=t+8|0)>>2])+(3*u|0)|0,i[t>>2]=u,i[n>>2]=s,o=(3*a|0)+o|0,i[r>>2]=o,a=s-u|0,(0|u)<0?(o=o-u|0,i[n>>2]=a,i[r>>2]=o,i[t>>2]=0,u=0):a=s,(0|a)<0&&(u=u-a|0,i[t>>2]=u,o=o-a|0,i[r>>2]=o,i[n>>2]=0,a=0),e=u-o|0,s=a-o|0,(0|o)<0?(i[t>>2]=e,i[n>>2]=s,i[r>>2]=0,u=e,o=0):s=a,(0|(a=(0|o)<(0|(a=(0|s)<(0|u)?s:u))?o:a))<=0||(i[t>>2]=u-a,i[n>>2]=s-a,i[r>>2]=o-a)}function ot(t,e){t|=0;var n,r,o,a=0,s=0,u=0;((e|=0)+-1|0)>>>0>=6||(u=(0|i[15472+(12*e|0)>>2])+(0|i[t>>2])|0,i[t>>2]=u,o=t+4|0,s=(0|i[15472+(12*e|0)+4>>2])+(0|i[o>>2])|0,i[o>>2]=s,r=t+8|0,e=(0|i[15472+(12*e|0)+8>>2])+(0|i[r>>2])|0,i[r>>2]=e,a=s-u|0,(0|u)<0?(e=e-u|0,i[o>>2]=a,i[r>>2]=e,i[t>>2]=0,s=0):(a=s,s=u),(0|a)<0&&(s=s-a|0,i[t>>2]=s,e=e-a|0,i[r>>2]=e,i[o>>2]=0,a=0),n=s-e|0,u=a-e|0,(0|e)<0?(i[t>>2]=n,i[o>>2]=u,i[r>>2]=0,s=n,e=0):u=a,(0|(a=(0|e)<(0|(a=(0|u)<(0|s)?u:s))?e:a))<=0||(i[t>>2]=s-a,i[o>>2]=u-a,i[r>>2]=e-a))}function at(t){var e,n,r,o=0,a=0,s=0,u=0;u=0|i[(t|=0)>>2],s=(o=0|i[(n=t+4|0)>>2])+u|0,u=(a=0|i[(r=t+8|0)>>2])+u|0,i[t>>2]=u,i[n>>2]=s,o=a+o|0,i[r>>2]=o,a=s-u|0,(0|u)<0?(o=o-u|0,i[n>>2]=a,i[r>>2]=o,i[t>>2]=0,s=0):(a=s,s=u),(0|a)<0&&(s=s-a|0,i[t>>2]=s,o=o-a|0,i[r>>2]=o,i[n>>2]=0,a=0),e=s-o|0,u=a-o|0,(0|o)<0?(i[t>>2]=e,i[n>>2]=u,i[r>>2]=0,s=e,o=0):u=a,(0|(a=(0|o)<(0|(a=(0|u)<(0|s)?u:s))?o:a))<=0||(i[t>>2]=s-a,i[n>>2]=u-a,i[r>>2]=o-a)}function st(t){var e,n,r,o=0,a=0,s=0,u=0;o=0|i[(t|=0)>>2],s=0|i[(n=t+4|0)>>2],a=0|i[(r=t+8|0)>>2],u=s+o|0,i[t>>2]=u,s=a+s|0,i[n>>2]=s,o=a+o|0,i[r>>2]=o,a=s-u|0,(0|u)<0?(o=o-u|0,i[n>>2]=a,i[r>>2]=o,i[t>>2]=0,s=0):(a=s,s=u),(0|a)<0&&(s=s-a|0,i[t>>2]=s,o=o-a|0,i[r>>2]=o,i[n>>2]=0,a=0),e=s-o|0,u=a-o|0,(0|o)<0?(i[t>>2]=e,i[n>>2]=u,i[r>>2]=0,s=e,o=0):u=a,(0|(a=(0|o)<(0|(a=(0|u)<(0|s)?u:s))?o:a))<=0||(i[t>>2]=s-a,i[n>>2]=u-a,i[r>>2]=o-a)}function ut(t){switch(0|(t|=0)){case 1:t=5;break;case 5:t=4;break;case 4:t=6;break;case 6:t=2;break;case 2:t=3;break;case 3:t=1}return 0|t}function ct(t){switch(0|(t|=0)){case 1:t=3;break;case 3:t=2;break;case 2:t=6;break;case 6:t=4;break;case 4:t=5;break;case 5:t=1}return 0|t}function lt(t){var e,n,r,o=0,a=0,s=0,u=0;o=0|i[(t|=0)>>2],a=0|i[(n=t+4|0)>>2],s=0|i[(r=t+8|0)>>2],u=a+(o<<1)|0,i[t>>2]=u,a=s+(a<<1)|0,i[n>>2]=a,o=(s<<1)+o|0,i[r>>2]=o,s=a-u|0,(0|u)<0?(o=o-u|0,i[n>>2]=s,i[r>>2]=o,i[t>>2]=0,a=s,s=0):s=u,(0|a)<0&&(s=s-a|0,i[t>>2]=s,o=o-a|0,i[r>>2]=o,i[n>>2]=0,a=0),e=s-o|0,u=a-o|0,(0|o)<0?(i[t>>2]=e,i[n>>2]=u,i[r>>2]=0,s=e,o=0):u=a,(0|(a=(0|o)<(0|(a=(0|u)<(0|s)?u:s))?o:a))<=0||(i[t>>2]=s-a,i[n>>2]=u-a,i[r>>2]=o-a)}function ht(t){var e,n,r,o=0,a=0,s=0,u=0;u=0|i[(t|=0)>>2],s=((o=0|i[(n=t+4|0)>>2])<<1)+u|0,u=(a=0|i[(r=t+8|0)>>2])+(u<<1)|0,i[t>>2]=u,i[n>>2]=s,o=(a<<1)+o|0,i[r>>2]=o,a=s-u|0,(0|u)<0?(o=o-u|0,i[n>>2]=a,i[r>>2]=o,i[t>>2]=0,u=0):a=s,(0|a)<0&&(u=u-a|0,i[t>>2]=u,o=o-a|0,i[r>>2]=o,i[n>>2]=0,a=0),e=u-o|0,s=a-o|0,(0|o)<0?(i[t>>2]=e,i[n>>2]=s,i[r>>2]=0,u=e,o=0):s=a,(0|(a=(0|o)<(0|(a=(0|s)<(0|u)?s:u))?o:a))<=0||(i[t>>2]=u-a,i[n>>2]=s-a,i[r>>2]=o-a)}function ft(t,e){e|=0;var n,r,o,a=0,s=0,u=0;return o=(0|(r=(0|i[(t|=0)>>2])-(0|i[e>>2])|0))<0,n=(0|(s=(0|i[t+4>>2])-(0|i[e+4>>2])-(o?r:0)|0))<0,e=(e=(t=(0|(u=(o?0-r|0:0)+(0|i[t+8>>2])-(0|i[e+8>>2])+(n?0-s|0:0)|0))<0)?0:u)-((s=(0|(t=(0|e)<(0|(t=(0|(a=(n?0:s)-(t?u:0)|0))<(0|(u=(o?0:r)-(n?s:0)-(t?u:0)|0))?a:u))?e:t))>0)?t:0)|0,a=a-(s?t:0)|0,0|((0|(t=(0|(t=u-(s?t:0)|0))>-1?t:0-t|0))>(0|(e=(0|(a=(0|a)>-1?a:0-a|0))>(0|(e=(0|e)>-1?e:0-e|0))?a:e))?t:e)}function pt(t,e){e|=0;var n;n=0|i[(t|=0)+8>>2],i[e>>2]=(0|i[t>>2])-n,i[e+4>>2]=(0|i[t+4>>2])-n}function dt(t,e){e|=0;var n,r,o,a=0,s=0,u=0;s=0|i[(t|=0)>>2],i[e>>2]=s,t=0|i[t+4>>2],i[(r=e+4|0)>>2]=t,i[(o=e+8|0)>>2]=0,a=t-s|0,(0|s)<0?(t=0-s|0,i[r>>2]=a,i[o>>2]=t,i[e>>2]=0,s=0):(a=t,t=0),(0|a)<0&&(s=s-a|0,i[e>>2]=s,t=t-a|0,i[o>>2]=t,i[r>>2]=0,a=0),n=s-t|0,u=a-t|0,(0|t)<0?(i[e>>2]=n,i[r>>2]=u,i[o>>2]=0,a=u,u=n,t=0):u=s,(0|(s=(0|t)<(0|(s=(0|a)<(0|u)?a:u))?t:s))<=0||(i[e>>2]=u-s,i[r>>2]=a-s,i[o>>2]=t-s)}function At(t){var e,n,r,o;n=(o=0|i[(e=(t|=0)+8|0)>>2])-(0|i[t>>2])|0,i[t>>2]=n,t=(0|i[(r=t+4|0)>>2])-o|0,i[r>>2]=t,i[e>>2]=0-(t+n)}function gt(t){var e,n,r=0,o=0,a=0,s=0,u=0;r=0-(o=0|i[(t|=0)>>2])|0,i[t>>2]=r,i[(e=t+8|0)>>2]=0,s=(a=0|i[(n=t+4|0)>>2])+o|0,(0|o)>0?(i[n>>2]=s,i[e>>2]=o,i[t>>2]=0,r=0,a=s):o=0,(0|a)<0?(u=r-a|0,i[t>>2]=u,o=o-a|0,i[e>>2]=o,i[n>>2]=0,s=u-o|0,r=0-o|0,(0|o)<0?(i[t>>2]=s,i[n>>2]=r,i[e>>2]=0,a=r,o=0):(a=0,s=u)):s=r,(0|(r=(0|o)<(0|(r=(0|a)<(0|s)?a:s))?o:r))<=0||(i[t>>2]=s-r,i[n>>2]=a-r,i[e>>2]=o-r)}function mt(t,e,n,r){e|=0,n|=0,r|=0;var a,s=0,u=0,c=0,l=0;if(a=M,M=M+32|0,function(t,e){e|=0;var n,r,i=0;i=+o[(t=t|0)>>3],n=+h(+i),i=+f(+i),o[e+16>>3]=i,i=+o[t+8>>3],r=n*+h(+i),o[e>>3]=r,i=n*+f(+i),o[e+8>>3]=i}(t|=0,u=a),i[n>>2]=0,s=+ue(15888,u),(c=+ue(15912,u))>2]=1,s=c),(c=+ue(15936,u))>2]=2,s=c),(c=+ue(15960,u))>2]=3,s=c),(c=+ue(15984,u))>2]=4,s=c),(c=+ue(16008,u))>2]=5,s=c),(c=+ue(16032,u))>2]=6,s=c),(c=+ue(16056,u))>2]=7,s=c),(c=+ue(16080,u))>2]=8,s=c),(c=+ue(16104,u))>2]=9,s=c),(c=+ue(16128,u))>2]=10,s=c),(c=+ue(16152,u))>2]=11,s=c),(c=+ue(16176,u))>2]=12,s=c),(c=+ue(16200,u))>2]=13,s=c),(c=+ue(16224,u))>2]=14,s=c),(c=+ue(16248,u))>2]=15,s=c),(c=+ue(16272,u))>2]=16,s=c),(c=+ue(16296,u))>2]=17,s=c),(c=+ue(16320,u))>2]=18,s=c),(c=+ue(16344,u))>2]=19,s=c),(c=+d(+(1-.5*s)))<1e-16)return i[r>>2]=0,i[r+4>>2]=0,i[r+8>>2]=0,i[r+12>>2]=0,void(M=a);if(n=0|i[n>>2],s=+St((s=+o[16368+(24*n|0)>>3])-+St(+function(t,e){t|=0;var n,r,i,a,s;return a=+o[(e=e|0)>>3],r=+h(+a),i=+o[e+8>>3]-+o[t+8>>3],s=r*+f(+i),n=+o[t>>3],+ +m(+s,+(+f(+a)*+h(+n)-+h(+i)*(r*+f(+n))))}(15568+(n<<4)|0,t))),l=0|Ut(e)?+St(s+-.3334731722518321):s,s=+p(+c)/.381966011250105,(0|e)>0){u=0;do{s*=2.6457513110645907,u=u+1|0}while((0|u)!=(0|e))}c=+h(+l)*s,o[r>>3]=c,l=+f(+l)*s,o[r+8>>3]=l,M=a}function yt(t,e,n,r,a){e|=0,n|=0,r|=0,a|=0;var s=0,l=0;if((s=+function(t){var e,n;return n=+o[(t=t|0)>>3],e=+o[t+8>>3],+ +c(+(n*n+e*e))}(t|=0))<1e-16)return e=15568+(e<<4)|0,i[a>>2]=i[e>>2],i[a+4>>2]=i[e+4>>2],i[a+8>>2]=i[e+8>>2],void(i[a+12>>2]=i[e+12>>2]);if(l=+m(+ +o[t+8>>3],+ +o[t>>3]),(0|n)>0){t=0;do{s/=2.6457513110645907,t=t+1|0}while((0|t)!=(0|n))}r?(s/=3,n=0==(0|Ut(n)),s=+g(.381966011250105*(n?s:s/2.6457513110645907))):(s=+g(.381966011250105*s),0|Ut(n)&&(l=+St(l+.3334731722518321))),function(t,e,n,r){t|=0,e=+e,r|=0;var a=0,s=0,c=0,l=0;if((n=+n)<1e-16)return i[r>>2]=i[t>>2],i[r+4>>2]=i[t+4>>2],i[r+8>>2]=i[t+8>>2],void(i[r+12>>2]=i[t+12>>2]);s=e<0?e+6.283185307179586:e,s=e>=6.283185307179586?s+-6.283185307179586:s;do{if(!(s<1e-16)){if(a=+u(+(s+-3.141592653589793))<1e-16,e=+o[t>>3],a){e-=n,o[r>>3]=e,a=r;break}if(c=+h(+n),n=+f(+n),e=c*+f(+e)+ +h(+s)*(n*+h(+e)),e=+A(+((e=e>1?1:e)<-1?-1:e)),o[r>>3]=e,+u(+(e+-1.5707963267948966))<1e-16)return o[r>>3]=1.5707963267948966,void(o[r+8>>3]=0);if(+u(+(e+1.5707963267948966))<1e-16)return o[r>>3]=-1.5707963267948966,void(o[r+8>>3]=0);if(l=+h(+e),s=n*+f(+s)/l,n=+o[t>>3],e=(c-+f(+e)*+f(+n))/+h(+n)/l,c=s>1?1:s,e=e>1?1:e,(e=+o[t+8>>3]+ +m(+(c<-1?-1:c),+(e<-1?-1:e)))>3.141592653589793)do{e+=-6.283185307179586}while(e>3.141592653589793);if(e<-3.141592653589793)do{e+=6.283185307179586}while(e<-3.141592653589793);return void(o[r+8>>3]=e)}e=+o[t>>3]+n,o[r>>3]=e,a=r}while(0);if(+u(+(e+-1.5707963267948966))<1e-16)return o[a>>3]=1.5707963267948966,void(o[r+8>>3]=0);if(+u(+(e+1.5707963267948966))<1e-16)return o[a>>3]=-1.5707963267948966,void(o[r+8>>3]=0);if((e=+o[t+8>>3])>3.141592653589793)do{e+=-6.283185307179586}while(e>3.141592653589793);if(e<-3.141592653589793)do{e+=6.283185307179586}while(e<-3.141592653589793);o[r+8>>3]=e}(15568+(e<<4)|0,+St(+o[16368+(24*e|0)>>3]-l),s,a)}function vt(t,e,n){e|=0,n|=0;var r,o;r=M,M=M+16|0,Q((t|=0)+4|0,o=r),yt(o,0|i[t>>2],e,0,n),M=r}function _t(t,e,n,r,a){t|=0,e|=0,n|=0,r|=0,a|=0;var s,u,c,l,h,f,p,d,A,g,m,y,v,_,b,x,w,O,S,T,C,P,I=0,B=0,R=0,k=0,L=0,D=0;if(P=M,M=M+272|0,k=P+240|0,S=P,T=P+224|0,C=P+208|0,m=P+176|0,y=P+160|0,v=P+192|0,_=P+144|0,b=P+128|0,x=P+112|0,w=P+96|0,O=P+80|0,i[(I=P+256|0)>>2]=e,i[k>>2]=i[t>>2],i[k+4>>2]=i[t+4>>2],i[k+8>>2]=i[t+8>>2],i[k+12>>2]=i[t+12>>2],bt(k,I,S),i[a>>2]=0,(0|(k=r+n+(5==(0|r)&1)|0))<=(0|n))M=P;else{u=T+4|0,c=m+4|0,l=n+5|0,h=16848+((s=0|i[I>>2])<<2)|0,f=16928+(s<<2)|0,p=b+8|0,d=x+8|0,A=w+8|0,g=C+4|0,R=n;t:for(;;){B=S+(((0|R)%5|0)<<4)|0,i[C>>2]=i[B>>2],i[C+4>>2]=i[B+4>>2],i[C+8>>2]=i[B+8>>2],i[C+12>>2]=i[B+12>>2];do{}while(2==(0|xt(C,s,0,1)));if((0|R)>(0|n)&0!=(0|Ut(e))){if(i[m>>2]=i[C>>2],i[m+4>>2]=i[C+4>>2],i[m+8>>2]=i[C+8>>2],i[m+12>>2]=i[C+12>>2],Q(u,y),r=0|i[m>>2],I=0|i[17008+(80*r|0)+(i[T>>2]<<2)>>2],i[m>>2]=i[18608+(80*r|0)+(20*I|0)>>2],(0|(B=0|i[18608+(80*r|0)+(20*I|0)+16>>2]))>0){t=0;do{at(c),t=t+1|0}while((0|t)<(0|B))}switch(B=18608+(80*r|0)+(20*I|0)+4|0,i[v>>2]=i[B>>2],i[v+4>>2]=i[B+4>>2],i[v+8>>2]=i[B+8>>2],$(v,3*(0|i[h>>2])|0),K(c,v,c),Z(c),Q(c,_),L=+(0|i[f>>2]),o[b>>3]=3*L,o[p>>3]=0,D=-1.5*L,o[x>>3]=D,o[d>>3]=2.598076211353316*L,o[w>>3]=D,o[A>>3]=-2.598076211353316*L,0|i[17008+(80*(0|i[m>>2])|0)+(i[C>>2]<<2)>>2]){case 1:t=x,r=b;break;case 3:t=w,r=x;break;case 2:t=b,r=w;break;default:t=12;break t}ae(y,_,r,t,O),yt(O,0|i[m>>2],s,1,a+8+(i[a>>2]<<4)|0),i[a>>2]=1+(0|i[a>>2])}if((0|R)<(0|l)&&(Q(g,m),yt(m,0|i[C>>2],s,1,a+8+(i[a>>2]<<4)|0),i[a>>2]=1+(0|i[a>>2])),i[T>>2]=i[C>>2],i[T+4>>2]=i[C+4>>2],i[T+8>>2]=i[C+8>>2],i[T+12>>2]=i[C+12>>2],(0|(R=R+1|0))>=(0|k)){t=3;break}}3!=(0|t)?12==(0|t)&&E(22474,22521,581,22531):M=P}}function bt(t,e,n){t|=0,e|=0,n|=0;var r,o=0,a=0,s=0,u=0,c=0;r=M,M=M+128|0,a=r,u=20208,c=(s=o=r+64|0)+60|0;do{i[s>>2]=i[u>>2],s=s+4|0,u=u+4|0}while((0|s)<(0|c));u=20272,c=(s=a)+60|0;do{i[s>>2]=i[u>>2],s=s+4|0,u=u+4|0}while((0|s)<(0|c));o=(c=0==(0|Ut(0|i[e>>2])))?o:a,lt(a=t+4|0),ht(a),0|Ut(0|i[e>>2])&&(it(a),i[e>>2]=1+(0|i[e>>2])),i[n>>2]=i[t>>2],K(a,o,e=n+4|0),Z(e),i[n+16>>2]=i[t>>2],K(a,o+12|0,e=n+20|0),Z(e),i[n+32>>2]=i[t>>2],K(a,o+24|0,e=n+36|0),Z(e),i[n+48>>2]=i[t>>2],K(a,o+36|0,e=n+52|0),Z(e),i[n+64>>2]=i[t>>2],K(a,o+48|0,n=n+68|0),Z(n),M=r}function xt(t,e,n,r){n|=0,r|=0;var o,a,s,u,c,l,h=0,f=0,p=0,d=0,A=0;if(l=M,M=M+32|0,c=l+12|0,a=l,A=(t|=0)+4|0,d=0|i[16928+((e|=0)<<2)>>2],d=(u=0!=(0|r))?3*d|0:d,h=0|i[A>>2],o=0|i[(s=t+8|0)>>2],u){if((0|(h=o+h+(r=0|i[(f=t+12|0)>>2])|0))==(0|d))return M=l,0|(A=1);p=f}else h=o+h+(r=0|i[(p=t+12|0)>>2])|0;if((0|h)<=(0|d))return M=l,0|(A=0);do{if((0|r)>0){if(r=0|i[t>>2],(0|o)>0){f=18608+(80*r|0)+60|0,r=t;break}r=18608+(80*r|0)+40|0,n?(X(c,d,0,0),Y(A,c,a),st(a),K(a,c,A),f=r,r=t):(f=r,r=t)}else f=18608+(80*(0|i[t>>2])|0)+20|0,r=t}while(0);if(i[r>>2]=i[f>>2],(0|i[(h=f+16|0)>>2])>0){r=0;do{at(A),r=r+1|0}while((0|r)<(0|i[h>>2]))}return t=f+4|0,i[c>>2]=i[t>>2],i[c+4>>2]=i[t+4>>2],i[c+8>>2]=i[t+8>>2],e=0|i[16848+(e<<2)>>2],$(c,u?3*e|0:e),K(A,c,A),Z(A),r=u&&((0|i[s>>2])+(0|i[A>>2])+(0|i[p>>2])|0)==(0|d)?1:2,M=l,0|(A=r)}function wt(t,e){t|=0,e|=0;var n=0;do{n=0|xt(t,e,0,1)}while(2==(0|n));return 0|n}function Et(t,e,n,r,a){t|=0,e|=0,n|=0,r|=0,a|=0;var s,u,c,l,h,f,p,d,A,g,m,y,v,_,b,x,w,O,S=0,T=0,C=0,P=0,I=0;if(O=M,M=M+240|0,_=O+208|0,b=O,x=O+192|0,w=O+176|0,A=O+160|0,g=O+144|0,m=O+128|0,y=O+112|0,v=O+96|0,i[(S=O+224|0)>>2]=e,i[_>>2]=i[t>>2],i[_+4>>2]=i[t+4>>2],i[_+8>>2]=i[t+8>>2],i[_+12>>2]=i[t+12>>2],Ot(_,S,b),i[a>>2]=0,(0|(d=r+n+(6==(0|r)&1)|0))<=(0|n))M=O;else{u=n+6|0,c=16928+((s=0|i[S>>2])<<2)|0,l=g+8|0,h=m+8|0,f=y+8|0,p=x+4|0,T=0,C=n,r=-1;t:for(;;){if(t=b+((S=(0|C)%6|0)<<4)|0,i[x>>2]=i[t>>2],i[x+4>>2]=i[t+4>>2],i[x+8>>2]=i[t+8>>2],i[x+12>>2]=i[t+12>>2],t=T,T=0|xt(x,s,0,1),(0|C)>(0|n)&0!=(0|Ut(e))&&(1!=(0|t)&&(0|i[x>>2])!=(0|r))){switch(Q(b+(((S+5|0)%6|0)<<4)+4|0,w),Q(b+(S<<4)+4|0,A),P=+(0|i[c>>2]),o[g>>3]=3*P,o[l>>3]=0,I=-1.5*P,o[m>>3]=I,o[h>>3]=2.598076211353316*P,o[y>>3]=I,o[f>>3]=-2.598076211353316*P,S=0|i[_>>2],0|i[17008+(80*S|0)+(((0|r)==(0|S)?0|i[x>>2]:r)<<2)>>2]){case 1:t=m,r=g;break;case 3:t=y,r=m;break;case 2:t=g,r=y;break;default:t=8;break t}ae(w,A,r,t,v),0|se(w,v)||0|se(A,v)||(yt(v,0|i[_>>2],s,1,a+8+(i[a>>2]<<4)|0),i[a>>2]=1+(0|i[a>>2]))}if((0|C)<(0|u)&&(Q(p,w),yt(w,0|i[x>>2],s,1,a+8+(i[a>>2]<<4)|0),i[a>>2]=1+(0|i[a>>2])),(0|(C=C+1|0))>=(0|d)){t=3;break}r=0|i[x>>2]}3!=(0|t)?8==(0|t)&&E(22557,22521,746,22602):M=O}}function Ot(t,e,n){t|=0,e|=0,n|=0;var r,o=0,a=0,s=0,u=0,c=0;r=M,M=M+160|0,a=r,u=20336,c=(s=o=r+80|0)+72|0;do{i[s>>2]=i[u>>2],s=s+4|0,u=u+4|0}while((0|s)<(0|c));u=20416,c=(s=a)+72|0;do{i[s>>2]=i[u>>2],s=s+4|0,u=u+4|0}while((0|s)<(0|c));o=(c=0==(0|Ut(0|i[e>>2])))?o:a,lt(a=t+4|0),ht(a),0|Ut(0|i[e>>2])&&(it(a),i[e>>2]=1+(0|i[e>>2])),i[n>>2]=i[t>>2],K(a,o,e=n+4|0),Z(e),i[n+16>>2]=i[t>>2],K(a,o+12|0,e=n+20|0),Z(e),i[n+32>>2]=i[t>>2],K(a,o+24|0,e=n+36|0),Z(e),i[n+48>>2]=i[t>>2],K(a,o+36|0,e=n+52|0),Z(e),i[n+64>>2]=i[t>>2],K(a,o+48|0,e=n+68|0),Z(e),i[n+80>>2]=i[t>>2],K(a,o+60|0,n=n+84|0),Z(n),M=r}function St(t){var e;return e=(t=+t)<0?t+6.283185307179586:t,+(t>=6.283185307179586?e+-6.283185307179586:e)}function Tt(t,e){return e|=0,+u(+(+o[(t|=0)>>3]-+o[e>>3]))<17453292519943298e-27?0|(e=+u(+(+o[t+8>>3]-+o[e+8>>3]))<17453292519943298e-27):0|(e=0)}function Ct(t,e){t|=0;var n,r,i,a=0;return r=+o[(e|=0)>>3],n=+o[t>>3],a=(i=+f(.5*(r-n)))*i+(a=+f(.5*(+o[e+8>>3]-+o[t+8>>3])))*(+h(+r)*+h(+n)*a),2*+m(+ +c(+a),+ +c(+(1-a)))*6371.007180918475}function Pt(t,e,n){t|=0,n|=0;var r,i,a,s,u=0,l=0,d=0,A=0,y=0,v=0;return v=+o[(e|=0)>>3],a=+o[t>>3],y=+f(.5*(v-a)),d=+o[e+8>>3],i=+o[t+8>>3],A=+f(.5*(d-i)),r=+h(+a),s=+h(+v),A=2*+m(+ +c(+(A=y*y+A*(s*r*A))),+ +c(+(1-A))),y=+o[n>>3],v=+f(.5*(y-v)),u=+o[n+8>>3],d=+f(.5*(u-d)),l=+h(+y),d=2*+m(+ +c(+(d=v*v+d*(s*l*d))),+ +c(+(1-d))),y=+f(.5*(a-y)),u=+f(.5*(i-u)),u=2*+m(+ +c(+(u=y*y+u*(r*l*u))),+ +c(+(1-u))),4*+g(+ +c(+ +p(.5*(l=.5*(A+d+u)))*+p(.5*(l-A))*+p(.5*(l-d))*+p(.5*(l-u))))}function Mt(t,e){return e=0|Ee(0|(t|=0),0|(e|=0),45),w(),127&e|0}function It(t,e){var n=0,r=0,i=0,o=0,a=0,s=0;if(!(!0&134217728==(-16777216&(e|=0)|0)))return 0|(e=0);if(a=0|Ee(0|(t|=0),0|e,45),w(),(a&=127)>>>0>121)return 0|(e=0);n=0|Ee(0|t,0|e,52),w(),n&=15;do{if(0|n){for(i=1,r=0;;){if(o=0|Ee(0|t,0|e,3*(15-i|0)|0),w(),0!=(0|(o&=7))&(1^r)){if(1==(0|o)&0!=(0|D(a))){s=0,r=13;break}r=1}if(7==(0|o)){s=0,r=13;break}if(!(i>>>0>>0)){r=9;break}i=i+1|0}if(9==(0|r)){if(15!=(0|n))break;return 0|(s=1)}if(13==(0|r))return 0|s}}while(0);for(;;){if(s=0|Ee(0|t,0|e,3*(14-n|0)|0),w(),!(7==(7&s|0)&!0)){s=0,r=13;break}if(!(n>>>0<14)){s=1,r=13;break}n=n+1|0}return 13==(0|r)?0|s:0}function Bt(t,e,n){n|=0;var r=0,i=0;if(r=0|Ee(0|(t|=0),0|(e|=0),52),w(),(0|(r&=15))>=(0|n)){if((0|r)!=(0|n))if(n>>>0<=15){if(t|=i=0|Oe(0|n,0,52),e=0|w()|-15728641&e,(0|r)>(0|n))do{i=0|Oe(7,0,3*(14-n|0)|0),n=n+1|0,t|=i,e=0|w()|e}while((0|n)<(0|r))}else e=0,t=0}else e=0,t=0;return x(0|e),0|t}function Rt(t,e,n,r){n|=0,r|=0;var o,a=0,s=0,u=0,c=0,l=0,h=0;if(u=0|Ee(0|(t|=0),0|(e|=0),52),w(),(0|n)<16&(0|(u&=15))<=(0|n)){if((0|u)==(0|n))return i[(n=r)>>2]=t,void(i[n+4>>2]=e);if(o=(0|(l=0|ee(7,n-u|0)))/7|0,c=0|Ee(0|t,0|e,45),w(),0|D(127&c)){t:do{if(u)for(s=1;;){if(a=0|Ee(0|t,0|e,3*(15-s|0)|0),w(),0|(a&=7))break t;if(!(s>>>0>>0)){a=0;break}s=s+1|0}else a=0}while(0);s=0==(0|a)}else s=0;if(h=0|Oe(u+1|0,0,52),a=0|w()|-15728641&e,Rt(e=(h|t)&~(e=0|Oe(7,0,0|(c=3*(14-u|0)|0))),u=a&~(0|w()),n,r),a=r+(o<<3)|0,!s)return Rt((h=0|Oe(1,0,0|c))|e,0|w()|u,n,a),h=a+(o<<3)|0,Rt((l=0|Oe(2,0,0|c))|e,0|w()|u,n,h),h=h+(o<<3)|0,Rt((l=0|Oe(3,0,0|c))|e,0|w()|u,n,h),h=h+(o<<3)|0,Rt((l=0|Oe(4,0,0|c))|e,0|w()|u,n,h),h=h+(o<<3)|0,Rt((l=0|Oe(5,0,0|c))|e,0|w()|u,n,h),void Rt((l=0|Oe(6,0,0|c))|e,0|w()|u,n,h+(o<<3)|0);s=a+(o<<3)|0,(0|l)>6&&(Pe(0|a,0,(h=(s>>>0>(l=a+8|0)>>>0?s:l)+-1+(0-a)|0)+8&-8|0),a=l+(h>>>3<<3)|0),Rt((h=0|Oe(2,0,0|c))|e,0|w()|u,n,a),h=a+(o<<3)|0,Rt((l=0|Oe(3,0,0|c))|e,0|w()|u,n,h),h=h+(o<<3)|0,Rt((l=0|Oe(4,0,0|c))|e,0|w()|u,n,h),h=h+(o<<3)|0,Rt((l=0|Oe(5,0,0|c))|e,0|w()|u,n,h),Rt((l=0|Oe(6,0,0|c))|e,0|w()|u,n,h+(o<<3)|0)}}function kt(t,e){var n=0,r=0,i=0;if(i=0|Ee(0|(t|=0),0|(e|=0),45),w(),!(0|D(127&i)))return 0|(i=0);i=0|Ee(0|t,0|e,52),w(),i&=15;t:do{if(i)for(r=1;;){if(n=0|Ee(0|t,0|e,3*(15-r|0)|0),w(),0|(n&=7))break t;if(!(r>>>0>>0)){n=0;break}r=r+1|0}else n=0}while(0);return 0|(i=0==(0|n)&1)}function Lt(t,e){var n=0,r=0,i=0;if(i=0|Ee(0|(t|=0),0|(e|=0),52),w(),!(i&=15))return 0|(i=0);for(r=1;;){if(n=0|Ee(0|t,0|e,3*(15-r|0)|0),w(),0|(n&=7)){r=5;break}if(!(r>>>0>>0)){n=0,r=5;break}r=r+1|0}return 5==(0|r)?0|n:0}function Dt(t,e){var n=0,r=0,i=0,o=0,a=0,s=0,u=0;if(u=0|Ee(0|(t|=0),0|(e|=0),52),w(),!(u&=15))return u=t,x(0|(s=e)),0|u;for(s=1,n=0;;){r=0|Oe(7,0,0|(o=3*(15-s|0)|0)),i=0|w(),a=0|Ee(0|t,0|e,0|o),w(),t=(o=0|Oe(0|ut(7&a),0,0|o))|t&~r,e=(a=0|w())|e&~i;t:do{if(!n)if(0==(o&r|0)&0==(a&i|0))n=0;else if(r=0|Ee(0|t,0|e,52),w(),r&=15){n=1;e:for(;;){switch(a=0|Ee(0|t,0|e,3*(15-n|0)|0),w(),7&a){case 1:break e;case 0:break;default:n=1;break t}if(!(n>>>0>>0)){n=1;break t}n=n+1|0}for(n=1;;){if(i=0|Ee(0|t,0|e,0|(a=3*(15-n|0)|0)),w(),o=0|Oe(7,0,0|a),e&=~(0|w()),t=t&~o|(a=0|Oe(0|ut(7&i),0,0|a)),e=0|e|w(),!(n>>>0>>0)){n=1;break}n=n+1|0}}else n=1}while(0);if(!(s>>>0>>0))break;s=s+1|0}return x(0|e),0|t}function jt(t,e){var n=0,r=0,i=0,o=0,a=0;if(r=0|Ee(0|(t|=0),0|(e|=0),52),w(),!(r&=15))return r=t,x(0|(n=e)),0|r;for(n=1;a=0|Ee(0|t,0|e,0|(o=3*(15-n|0)|0)),w(),i=0|Oe(7,0,0|o),e&=~(0|w()),t=(o=0|Oe(0|ut(7&a),0,0|o))|t&~i,e=0|w()|e,n>>>0>>0;)n=n+1|0;return x(0|e),0|t}function Ft(t,e){var n=0,r=0,i=0,o=0,a=0,s=0,u=0;if(u=0|Ee(0|(t|=0),0|(e|=0),52),w(),!(u&=15))return u=t,x(0|(s=e)),0|u;for(s=1,n=0;;){r=0|Oe(7,0,0|(o=3*(15-s|0)|0)),i=0|w(),a=0|Ee(0|t,0|e,0|o),w(),t=(o=0|Oe(0|ct(7&a),0,0|o))|t&~r,e=(a=0|w())|e&~i;t:do{if(!n)if(0==(o&r|0)&0==(a&i|0))n=0;else if(r=0|Ee(0|t,0|e,52),w(),r&=15){n=1;e:for(;;){switch(a=0|Ee(0|t,0|e,3*(15-n|0)|0),w(),7&a){case 1:break e;case 0:break;default:n=1;break t}if(!(n>>>0>>0)){n=1;break t}n=n+1|0}for(n=1;;){if(o=0|Oe(7,0,0|(i=3*(15-n|0)|0)),a=e&~(0|w()),e=0|Ee(0|t,0|e,0|i),w(),t=t&~o|(e=0|Oe(0|ct(7&e),0,0|i)),e=0|a|w(),!(n>>>0>>0)){n=1;break}n=n+1|0}}else n=1}while(0);if(!(s>>>0>>0))break;s=s+1|0}return x(0|e),0|t}function zt(t,e){var n=0,r=0,i=0,o=0,a=0;if(r=0|Ee(0|(t|=0),0|(e|=0),52),w(),!(r&=15))return r=t,x(0|(n=e)),0|r;for(n=1;o=0|Oe(7,0,0|(a=3*(15-n|0)|0)),i=e&~(0|w()),e=0|Ee(0|t,0|e,0|a),w(),t=(e=0|Oe(0|ct(7&e),0,0|a))|t&~o,e=0|w()|i,n>>>0>>0;)n=n+1|0;return x(0|e),0|t}function Ut(t){return 0|(0|(t|=0))%2}function Nt(t,e){t|=0;var n,r;return r=M,M=M+16|0,n=r,(e|=0)>>>0<=15&&2146435072!=(2146435072&i[t+4>>2]|0)&&2146435072!=(2146435072&i[t+8+4>>2]|0)?(!function(t,e,n){var r,i;r=M,M=M+16|0,mt(t|=0,e|=0,n|=0,i=r),J(i,n+4|0),M=r}(t,e,n),e=0|function(t,e){t|=0;var n,r=0,o=0,a=0,s=0,u=0,c=0,l=0,h=0;if(n=M,M=M+64|0,c=n+40|0,o=n+24|0,a=n+12|0,s=n,Oe(0|(e|=0),0,52),r=134225919|w(),!e)return(0|i[t+4>>2])>2||(0|i[t+8>>2])>2||(0|i[t+12>>2])>2?(c=0,x(0|(u=0)),M=n,0|c):(Oe(0|F(t),0,45),u=0|w()|r,c=-1,x(0|u),M=n,0|c);if(i[c>>2]=i[t>>2],i[c+4>>2]=i[t+4>>2],i[c+8>>2]=i[t+8>>2],i[c+12>>2]=i[t+12>>2],u=c+4|0,(0|e)>0)for(t=-1;i[o>>2]=i[u>>2],i[o+4>>2]=i[u+4>>2],i[o+8>>2]=i[u+8>>2],1&e?(et(u),i[a>>2]=i[u>>2],i[a+4>>2]=i[u+4>>2],i[a+8>>2]=i[u+8>>2],rt(a)):(nt(u),i[a>>2]=i[u>>2],i[a+4>>2]=i[u+4>>2],i[a+8>>2]=i[u+8>>2],it(a)),Y(o,a,s),Z(s),l=0|Oe(7,0,0|(h=3*(15-e|0)|0)),r&=~(0|w()),t=(h=0|Oe(0|tt(s),0,0|h))|t&~l,r=0|w()|r,(0|e)>1;)e=e+-1|0;else t=-1;t:do{if((0|i[u>>2])<=2&&(0|i[c+8>>2])<=2&&(0|i[c+12>>2])<=2){if(e=0|Oe(0|(o=0|F(c)),0,45),e|=t,t=0|w()|-1040385&r,s=0|z(c),!(0|D(o))){if((0|s)<=0)break;for(a=0;;){if(o=0|Ee(0|e,0|t,52),w(),o&=15)for(r=1;c=0|Ee(0|e,0|t,0|(h=3*(15-r|0)|0)),w(),l=0|Oe(7,0,0|h),t&=~(0|w()),e=e&~l|(h=0|Oe(0|ut(7&c),0,0|h)),t=0|t|w(),r>>>0>>0;)r=r+1|0;if((0|(a=a+1|0))==(0|s))break t}}a=0|Ee(0|e,0|t,52),w(),a&=15;e:do{if(a){r=1;n:for(;;){switch(h=0|Ee(0|e,0|t,3*(15-r|0)|0),w(),7&h){case 1:break n;case 0:break;default:break e}if(!(r>>>0>>0))break e;r=r+1|0}if(0|U(o,0|i[c>>2]))for(r=1;l=0|Oe(7,0,0|(c=3*(15-r|0)|0)),h=t&~(0|w()),t=0|Ee(0|e,0|t,0|c),w(),e=e&~l|(t=0|Oe(0|ct(7&t),0,0|c)),t=0|h|w(),r>>>0>>0;)r=r+1|0;else for(r=1;c=0|Ee(0|e,0|t,0|(h=3*(15-r|0)|0)),w(),l=0|Oe(7,0,0|h),t&=~(0|w()),e=e&~l|(h=0|Oe(0|ut(7&c),0,0|h)),t=0|t|w(),r>>>0>>0;)r=r+1|0}}while(0);if((0|s)>0){r=0;do{e=0|Dt(e,t),t=0|w(),r=r+1|0}while((0|r)!=(0|s))}}else e=0,t=0}while(0);return h=e,x(0|(l=t)),M=n,0|h}(n,e),t=0|w()):(t=0,e=0),x(0|t),M=r,0|e}function Gt(t,e,n){var r,o=0,a=0,s=0;if(r=(n|=0)+4|0,a=0|Ee(0|(t|=0),0|(e|=0),52),w(),a&=15,s=0|Ee(0|t,0|e,45),w(),o=0==(0|a),0|D(127&s)){if(o)return 0|(s=1);o=1}else{if(o)return 0|(s=0);o=0==(0|i[r>>2])&&0==(0|i[n+8>>2])?0!=(0|i[n+12>>2])&1:1}for(n=1;1&n?rt(r):it(r),s=0|Ee(0|t,0|e,3*(15-n|0)|0),w(),ot(r,7&s),n>>>0>>0;)n=n+1|0;return 0|o}function Vt(t,e,n){n|=0;var r,o,a=0,s=0,u=0,c=0,l=0,h=0;o=M,M=M+16|0,r=o,h=0|Ee(0|(t|=0),0|(e|=0),45),w(),h&=127;t:do{if(0!=(0|D(h))&&(u=0|Ee(0|t,0|e,52),w(),0!=(0|(u&=15)))){a=1;e:for(;;){switch(l=0|Ee(0|t,0|e,3*(15-a|0)|0),w(),7&l){case 5:break e;case 0:break;default:a=e;break t}if(!(a>>>0>>0)){a=e;break t}a=a+1|0}for(s=1,a=e;c=0|Oe(7,0,0|(e=3*(15-s|0)|0)),l=a&~(0|w()),a=0|Ee(0|t,0|a,0|e),w(),t=t&~c|(a=0|Oe(0|ct(7&a),0,0|e)),a=0|l|w(),s>>>0>>0;)s=s+1|0}else a=e}while(0);if(l=7728+(28*h|0)|0,i[n>>2]=i[l>>2],i[n+4>>2]=i[l+4>>2],i[n+8>>2]=i[l+8>>2],i[n+12>>2]=i[l+12>>2],0|Gt(t,a,n)){if(c=n+4|0,i[r>>2]=i[c>>2],i[r+4>>2]=i[c+4>>2],i[r+8>>2]=i[c+8>>2],u=0|Ee(0|t,0|a,52),w(),l=15&u,1&u?(it(c),u=l+1|0):u=l,0|D(h)){t:do{if(l)for(e=1;;){if(s=0|Ee(0|t,0|a,3*(15-e|0)|0),w(),0|(s&=7)){a=s;break t}if(!(e>>>0>>0)){a=0;break}e=e+1|0}else a=0}while(0);a=4==(0|a)&1}else a=0;if(0|xt(n,u,a,0)){if(0|D(h))do{}while(0!=(0|xt(n,u,0,0)));(0|u)!=(0|l)&&nt(c)}else(0|u)!=(0|l)&&(i[c>>2]=i[r>>2],i[c+4>>2]=i[r+4>>2],i[c+8>>2]=i[r+8>>2]);M=o}else M=o}function Ht(t,e,n){n|=0;var r,i;r=M,M=M+16|0,Vt(t|=0,e|=0,i=r),e=0|Ee(0|t,0|e,52),w(),vt(i,15&e,n),M=r}function Wt(t,e,n){n|=0;var r,i,o=0,a=0;i=M,M=M+16|0,Vt(t|=0,e|=0,r=i),o=0|Ee(0|t,0|e,45),w(),o=0==(0|D(127&o)),a=0|Ee(0|t,0|e,52),w(),a&=15;t:do{if(!o){if(0|a)for(o=1;;){if(!(0==((0|Oe(7,0,3*(15-o|0)|0))&t|0)&0==((0|w())&e|0)))break t;if(!(o>>>0>>0))break;o=o+1|0}return _t(r,a,0,5,n),void(M=i)}}while(0);Et(r,a,0,6,n),M=i}function qt(t,e){e|=0;var n,r=0,o=0,a=0,s=0,u=0,c=0;if(Oe(0|(t|=0),0,52),n=134225919|w(),(0|t)<1){o=0,r=0;do{0|D(o)&&(Oe(0|o,0,45),u=0|n|w(),i[(t=e+(r<<3)|0)>>2]=-1,i[t+4>>2]=u,r=r+1|0),o=o+1|0}while(122!=(0|o))}else{u=0,r=0;do{if(0|D(u)){for(Oe(0|u,0,45),o=1,a=-1,s=0|n|w();a&=~(c=0|Oe(7,0,3*(15-o|0)|0)),s&=~(0|w()),(0|o)!=(0|t);)o=o+1|0;i[(c=e+(r<<3)|0)>>2]=a,i[c+4>>2]=s,r=r+1|0}u=u+1|0}while(122!=(0|u))}}function Xt(t,e,n,r){var o,a=0,s=0,u=0,c=0,l=0;if(o=M,M=M+64|0,u=o,(0|(t|=0))==(0|(n|=0))&(0|(e|=0))==(0|(r|=0))|!1|134217728!=(2013265920&e|0)|!1|134217728!=(2013265920&r|0))return M=o,0|(u=0);if(a=0|Ee(0|t,0|e,52),w(),a&=15,s=0|Ee(0|n,0|r,52),w(),(0|a)!=(15&s|0))return M=o,0|(u=0);if(s=a+-1|0,a>>>0>1&&(l=0|Bt(t,e,s),c=0|w(),(0|l)==(0|(s=0|Bt(n,r,s)))&(0|c)==(0|w()))){if(a=0|Ee(0|t,0|e,0|(s=3*(15^a)|0)),w(),a&=7,s=0|Ee(0|n,0|r,0|s),w(),0==(0|a)|0==(0|(s&=7)))return M=o,0|(l=1);if((0|i[21136+(a<<2)>>2])==(0|s))return M=o,0|(l=1);if((0|i[21168+(a<<2)>>2])==(0|s))return M=o,0|(l=1)}s=(a=u)+56|0;do{i[a>>2]=0,a=a+4|0}while((0|a)<(0|s));return I(t,e,1,u),a=(0|i[(l=u)>>2])==(0|n)&&(0|i[l+4>>2])==(0|r)||(0|i[(l=u+8|0)>>2])==(0|n)&&(0|i[l+4>>2])==(0|r)||(0|i[(l=u+16|0)>>2])==(0|n)&&(0|i[l+4>>2])==(0|r)||(0|i[(l=u+24|0)>>2])==(0|n)&&(0|i[l+4>>2])==(0|r)||(0|i[(l=u+32|0)>>2])==(0|n)&&(0|i[l+4>>2])==(0|r)||(0|i[(l=u+40|0)>>2])==(0|n)&&(0|i[l+4>>2])==(0|r)?1:1&((0|i[(a=u+48|0)>>2])==(0|n)?(0|i[a+4>>2])==(0|r):0),M=o,0|(l=a)}function Jt(t,e,n){n|=0;var r,o,a,s,u=0;if(a=M,M=M+16|0,o=a,u=0|Ee(0|(t|=0),0|(e|=0),56),w(),-1==(0|(e=0|function(t,e,n){n|=0;var r,o=0;if(o=0|kt(t=t|0,e=e|0),(n+-1|0)>>>0>5)return 0|(n=-1);if(1==(0|n)&(r=0!=(0|o)))return 0|(n=-1);return o=0|function(t,e){var n,r,o,a=0,s=0,u=0,c=0,l=0;if(o=M,M=M+32|0,r=o,Vt(t=t|0,e=e|0,n=o+16|0),u=0|Mt(t,e),l=0|Lt(t,e),function(t,e){t=7728+(28*(t|=0)|0)|0,i[(e|=0)>>2]=i[t>>2],i[e+4>>2]=i[t+4>>2],i[e+8>>2]=i[t+8>>2],i[e+12>>2]=i[t+12>>2]}(u,r),e=0|function(t,e){t|=0;var n=0,r=0;if((e|=0)>>>0>20)return 0|(e=-1);do{if((0|i[11152+(216*e|0)>>2])!=(0|t))if((0|i[11152+(216*e|0)+8>>2])!=(0|t))if((0|i[11152+(216*e|0)+16>>2])!=(0|t))if((0|i[11152+(216*e|0)+24>>2])!=(0|t))if((0|i[11152+(216*e|0)+32>>2])!=(0|t))if((0|i[11152+(216*e|0)+40>>2])!=(0|t))if((0|i[11152+(216*e|0)+48>>2])!=(0|t))if((0|i[11152+(216*e|0)+56>>2])!=(0|t))if((0|i[11152+(216*e|0)+64>>2])!=(0|t))if((0|i[11152+(216*e|0)+72>>2])!=(0|t))if((0|i[11152+(216*e|0)+80>>2])!=(0|t))if((0|i[11152+(216*e|0)+88>>2])!=(0|t))if((0|i[11152+(216*e|0)+96>>2])!=(0|t))if((0|i[11152+(216*e|0)+104>>2])!=(0|t))if((0|i[11152+(216*e|0)+112>>2])!=(0|t))if((0|i[11152+(216*e|0)+120>>2])!=(0|t))if((0|i[11152+(216*e|0)+128>>2])!=(0|t)){if((0|i[11152+(216*e|0)+136>>2])!=(0|t)){if((0|i[11152+(216*e|0)+144>>2])==(0|t)){t=0,n=2,r=0;break}if((0|i[11152+(216*e|0)+152>>2])==(0|t)){t=0,n=2,r=1;break}if((0|i[11152+(216*e|0)+160>>2])==(0|t)){t=0,n=2,r=2;break}if((0|i[11152+(216*e|0)+168>>2])==(0|t)){t=1,n=2,r=0;break}if((0|i[11152+(216*e|0)+176>>2])==(0|t)){t=1,n=2,r=1;break}if((0|i[11152+(216*e|0)+184>>2])==(0|t)){t=1,n=2,r=2;break}if((0|i[11152+(216*e|0)+192>>2])==(0|t)){t=2,n=2,r=0;break}if((0|i[11152+(216*e|0)+200>>2])==(0|t)){t=2,n=2,r=1;break}if((0|i[11152+(216*e|0)+208>>2])==(0|t)){t=2,n=2,r=2;break}return 0|(t=-1)}t=2,n=1,r=2}else t=2,n=1,r=1;else t=2,n=1,r=0;else t=1,n=1,r=2;else t=1,n=1,r=1;else t=1,n=1,r=0;else t=0,n=1,r=2;else t=0,n=1,r=1;else t=0,n=1,r=0;else t=2,n=0,r=2;else t=2,n=0,r=1;else t=2,n=0,r=0;else t=1,n=0,r=2;else t=1,n=0,r=1;else t=1,n=0,r=0;else t=0,n=0,r=2;else t=0,n=0,r=1;else t=0,n=0,r=0}while(0);return 0|(e=0|i[11152+(216*e|0)+(72*n|0)+(24*t|0)+(r<<3)+4>>2])}(u,0|i[n>>2]),!(0|D(u)))return M=o,0|(l=e);switch(0|u){case 4:t=0,a=14;break;case 14:t=1,a=14;break;case 24:t=2,a=14;break;case 38:t=3,a=14;break;case 49:t=4,a=14;break;case 58:t=5,a=14;break;case 63:t=6,a=14;break;case 72:t=7,a=14;break;case 83:t=8,a=14;break;case 97:t=9,a=14;break;case 107:t=10,a=14;break;case 117:t=11,a=14;break;default:c=0,s=0}14==(0|a)&&(c=0|i[22096+(24*t|0)+8>>2],s=0|i[22096+(24*t|0)+16>>2]);(0|(t=0|i[n>>2]))!=(0|i[r>>2])&&(u=0|j(u),t=0|i[n>>2],u|(0|t)==(0|s)&&(e=(e+1|0)%6|0));if(3==(0|l)&(0|t)==(0|s))return M=o,0|(l=(e+5|0)%6|0);if(!(5==(0|l)&(0|t)==(0|c)))return M=o,0|(l=e);return M=o,0|(l=(e+1|0)%6|0)}(t,e),r?0|(n=(5-o+(0|i[22384+(n<<2)>>2])|0)%5|0):0|(n=(6-o+(0|i[22416+(n<<2)>>2])|0)%6|0)}(r=(s=!0&268435456==(2013265920&e|0))?t:0,t=s?-2130706433&e|134217728:0,7&u))))return i[n>>2]=0,void(M=a);Vt(r,t,o),u=0|Ee(0|r,0|t,52),w(),u&=15,0|kt(r,t)?_t(o,u,e,2,n):Et(o,u,e,2,n),M=a}function Zt(t){t|=0;var e,n,r=0;return(e=0|ve(1,12))||E(22691,22646,49,22704),0|(r=0|i[(n=t+4|0)>>2])?(i[(r=r+8|0)>>2]=e,i[n>>2]=e,0|e):(0|i[t>>2]&&E(22721,22646,61,22744),i[(r=t)>>2]=e,i[n>>2]=e,0|e)}function Qt(t,e){t|=0,e|=0;var n,r;return(r=0|me(24))||E(22758,22646,78,22772),i[r>>2]=i[e>>2],i[r+4>>2]=i[e+4>>2],i[r+8>>2]=i[e+8>>2],i[r+12>>2]=i[e+12>>2],i[r+16>>2]=0,0|(n=0|i[(e=t+4|0)>>2])?(i[n+16>>2]=r,i[e>>2]=r,0|r):(0|i[t>>2]&&E(22787,22646,82,22772),i[t>>2]=r,i[e>>2]=r,0|r)}function Kt(t){var e,n,r=0,a=0,s=0,c=0,l=0,h=0,f=0,p=0,d=0,A=0,g=0,m=0,y=0,v=0,_=0,b=0,x=0,w=0,O=0,S=0,T=0,C=0,P=0,M=0,I=0,B=0,R=0,k=0,L=0,D=0;if(0|i[(c=(t|=0)+8|0)>>2])return 0|(D=1);if(!(s=0|i[t>>2]))return 0|(D=0);r=s,a=0;do{a=a+1|0,r=0|i[r+8>>2]}while(0!=(0|r));if(a>>>0<2)return 0|(D=0);(n=0|me(a<<2))||E(22807,22646,317,22826),(e=0|me(a<<5))||E(22848,22646,321,22826),i[t>>2]=0,i[(C=t+4|0)>>2]=0,i[c>>2]=0,a=0,k=0,T=0,g=0;t:for(;;){if(A=0|i[s>>2]){l=0,h=A;do{if(p=+o[h+8>>3],r=h,h=0|i[h+16>>2],f=+o[(c=(d=0==(0|h))?A:h)+8>>3],+u(+(p-f))>3.141592653589793){D=14;break}l+=(f-p)*(+o[r>>3]+ +o[c>>3])}while(!d);if(14==(0|D)){D=0,l=0,r=A;do{S=+o[r+8>>3],B=0|i[(R=r+16|0)>>2],O=+o[(B=0==(0|B)?A:B)+8>>3],l+=(+o[r>>3]+ +o[B>>3])*((O<0?O+6.283185307179586:O)-(S<0?S+6.283185307179586:S)),r=0|i[(0==(0|r)?s:R)>>2]}while(0!=(0|r))}l>0?(i[n+(k<<2)>>2]=s,k=k+1|0,c=T,r=g):D=19}else D=19;if(19==(0|D)){D=0;do{if(!a){if(g){c=C,h=g+8|0,r=s,a=t;break}if(0|i[t>>2]){D=27;break t}c=C,h=t,r=s,a=t;break}if(0|i[(r=a+8|0)>>2]){D=21;break t}if(!(a=0|ve(1,12))){D=23;break t}i[r>>2]=a,c=a+4|0,h=a,r=g}while(0);if(i[h>>2]=s,i[c>>2]=s,h=e+(T<<5)|0,d=0|i[s>>2]){for(o[(A=e+(T<<5)+8|0)>>3]=17976931348623157e292,o[(g=e+(T<<5)+24|0)>>3]=17976931348623157e292,o[h>>3]=-17976931348623157e292,o[(m=e+(T<<5)+16|0)>>3]=-17976931348623157e292,x=17976931348623157e292,w=-17976931348623157e292,c=0,y=d,p=17976931348623157e292,_=17976931348623157e292,b=-17976931348623157e292,f=-17976931348623157e292;l=+o[y>>3],S=+o[y+8>>3],y=0|i[y+16>>2],O=+o[((v=0==(0|y))?d:y)+8>>3],l>3]=l,p=l),S<_&&(o[g>>3]=S,_=S),l>b?o[h>>3]=l:l=b,S>f&&(o[m>>3]=S,f=S),x=S>0&Sw?S:w,c|=+u(+(S-O))>3.141592653589793,!v;)b=l;c&&(o[m>>3]=w,o[g>>3]=x)}else i[h>>2]=0,i[h+4>>2]=0,i[h+8>>2]=0,i[h+12>>2]=0,i[h+16>>2]=0,i[h+20>>2]=0,i[h+24>>2]=0,i[h+28>>2]=0;c=T+1|0}if(s=0|i[(R=s+8|0)>>2],i[R>>2]=0,!s){D=45;break}T=c,g=r}if(21==(0|D))E(22624,22646,35,22658);else if(23==(0|D))E(22678,22646,37,22658);else if(27==(0|D))E(22721,22646,61,22744);else if(45==(0|D)){t:do{if((0|k)>0){for(R=0==(0|c),I=c<<2,B=0==(0|t),M=0,r=0;;){if(P=0|i[n+(M<<2)>>2],R)D=73;else{if(!(T=0|me(I))){D=50;break}if(!(C=0|me(I))){D=52;break}e:do{if(B)a=0;else{for(c=0,a=0,h=t;s=e+(c<<5)|0,0|Yt(0|i[h>>2],s,0|i[P>>2])?(i[T+(a<<2)>>2]=h,i[C+(a<<2)>>2]=s,v=a+1|0):v=a,h=0|i[h+8>>2];)c=c+1|0,a=v;if((0|v)>0)if(s=0|i[T>>2],1==(0|v))a=s;else for(m=0,y=-1,a=s,g=s;;){for(d=0|i[g>>2],s=0,h=0;A=(0|(c=0|i[i[T+(h<<2)>>2]>>2]))==(0|d)?s:s+(1&(0|Yt(c,0|i[C+(h<<2)>>2],0|i[d>>2])))|0,(0|(h=h+1|0))!=(0|v);)s=A;if(a=(c=(0|A)>(0|y))?g:a,(0|(s=m+1|0))==(0|v))break e;m=s,y=c?A:y,g=0|i[T+(s<<2)>>2]}else a=0}}while(0);if(ye(T),ye(C),a){if(s=0|i[(c=a+4|0)>>2])a=s+8|0;else if(0|i[a>>2]){D=70;break}i[a>>2]=P,i[c>>2]=P}else D=73}if(73==(0|D)){if(D=0,0|(r=0|i[P>>2]))do{C=r,r=0|i[r+16>>2],ye(C)}while(0!=(0|r));ye(P),r=2}if((0|(M=M+1|0))>=(0|k)){L=r;break t}}50==(0|D)?E(22863,22646,249,22882):52==(0|D)?E(22901,22646,252,22882):70==(0|D)&&E(22721,22646,61,22744)}else L=0}while(0);return ye(n),ye(e),0|(D=L)}return 0}function Yt(t,e,n){t|=0;var r,a=0,s=0,u=0,c=0,l=0,h=0,f=0;if(!(0|H(e|=0,n|=0)))return 0|(t=0);if(e=0|V(e),r=+o[n>>3],a=e&(a=+o[n+8>>3])<0?a+6.283185307179586:a,!(t=0|i[t>>2]))return 0|(t=0);if(e){e=0,n=t;t:for(;;){for(;c=+o[n>>3],h=+o[n+8>>3],f=0|i[(n=n+16|0)>>2],u=+o[(f=0==(0|f)?t:f)>>3],s=+o[f+8>>3],c>u?(l=c,c=h):(l=u,u=c,c=s,s=h),rl;)if(!(n=0|i[n>>2])){n=22;break t}if(a=(c=c<0?c+6.283185307179586:c)==a|(h=s<0?s+6.283185307179586:s)==a?a+-2220446049250313e-31:a,((h+=(r-u)/(l-u)*(c-h))<0?h+6.283185307179586:h)>a&&(e^=1),!(n=0|i[n>>2])){n=22;break}}if(22==(0|n))return 0|e}else{e=0,n=t;t:for(;;){for(;c=+o[n>>3],h=+o[n+8>>3],f=0|i[(n=n+16|0)>>2],u=+o[(f=0==(0|f)?t:f)>>3],s=+o[f+8>>3],c>u?(l=c,c=h):(l=u,u=c,c=s,s=h),rl;)if(!(n=0|i[n>>2])){n=22;break t}if(s+(r-u)/(l-u)*(c-s)>(a=c==a|s==a?a+-2220446049250313e-31:a)&&(e^=1),!(n=0|i[n>>2])){n=22;break}}if(22==(0|n))return 0|e}return 0}function $t(t,e,n,o,a){n|=0,o|=0,a|=0;var s,u,c,l,h=0,f=0,p=0,d=0,A=0,g=0,m=0,y=0,v=0,_=0;if(l=M,M=M+32|0,_=l+16|0,c=l,h=0|Ee(0|(t|=0),0|(e|=0),52),w(),h&=15,m=0|Ee(0|n,0|o,52),w(),(0|h)!=(15&m|0))return M=l,0|(_=1);if(A=0|Ee(0|t,0|e,45),w(),A&=127,g=0|Ee(0|n,0|o,45),w(),m=(0|A)!=(0|(g&=127))){if(7==(0|(p=0|G(A,g))))return M=l,0|(_=2);7==(0|(d=0|G(g,A)))?E(22925,22949,151,22959):(y=p,f=d)}else y=0,f=0;s=0|D(A),u=0|D(g),i[_>>2]=0,i[_+4>>2]=0,i[_+8>>2]=0,i[_+12>>2]=0;do{if(y){if(p=(0|(g=0|i[4304+(28*A|0)+(y<<2)>>2]))>0,u)if(p){A=0,d=n,p=o;do{d=0|Ft(d,p),p=0|w(),1==(0|(f=0|ct(f)))&&(f=0|ct(1)),A=A+1|0}while((0|A)!=(0|g));g=f,A=d,d=p}else g=f,A=n,d=o;else if(p){A=0,d=n,p=o;do{d=0|zt(d,p),p=0|w(),f=0|ct(f),A=A+1|0}while((0|A)!=(0|g));g=f,A=d,d=p}else g=f,A=n,d=o;if(Gt(A,d,_),m||E(22972,22949,181,22959),(p=0!=(0|s))&(f=0!=(0|u))&&E(22999,22949,182,22959),p){if(f=0|Lt(t,e),0|r[22032+(7*f|0)+y>>0]){h=3;break}A=d=0|i[21200+(28*f|0)+(y<<2)>>2],v=26}else if(f){if(f=0|Lt(A,d),0|r[22032+(7*f|0)+g>>0]){h=4;break}A=0,d=0|i[21200+(28*g|0)+(f<<2)>>2],v=26}else f=0;if(26==(0|v))if((0|d)<=-1&&E(23030,22949,212,22959),(0|A)<=-1&&E(23053,22949,213,22959),(0|d)>0){p=_+4|0,f=0;do{st(p),f=f+1|0}while((0|f)!=(0|d));f=A}else f=A;if(i[c>>2]=0,i[c+4>>2]=0,i[c+8>>2]=0,ot(c,y),0|h)for(;0|Ut(h)?rt(c):it(c),(0|h)>1;)h=h+-1|0;if((0|f)>0){h=0;do{st(c),h=h+1|0}while((0|h)!=(0|f))}K(v=_+4|0,c,v),Z(v),v=50}else if(Gt(n,o,_),0!=(0|s)&0!=(0|u))if((0|g)!=(0|A)&&E(23077,22949,243,22959),f=0|Lt(t,e),h=0|Lt(n,o),0|r[22032+(7*f|0)+h>>0])h=5;else if((0|(f=0|i[21200+(28*f|0)+(h<<2)>>2]))>0){p=_+4|0,h=0;do{st(p),h=h+1|0}while((0|h)!=(0|f));v=50}else v=50;else v=50}while(0);return 50==(0|v)&&(h=_+4|0,i[a>>2]=i[h>>2],i[a+4>>2]=i[h+4>>2],i[a+8>>2]=i[h+8>>2],h=0),M=l,0|(_=h)}function te(t,e,n,r){n|=0,r|=0;var o,a,s=0,u=0,c=0,l=0,h=0,f=0,p=0,d=0,A=0,g=0,m=0,y=0,v=0;if(a=M,M=M+48|0,c=a+36|0,l=a+24|0,h=a+12|0,f=a,u=0|Ee(0|(t|=0),0|(e|=0),52),w(),u&=15,d=0|Ee(0|t,0|e,45),w(),o=0|D(d&=127),Oe(0|u,0,52),m=134225919|w(),i[(g=r)>>2]=-1,i[g+4>>2]=m,!u)return(0|i[n>>2])>1||(0|i[n+4>>2])>1||(0|i[n+8>>2])>1||127==(0|(s=0|N(d,0|tt(n))))?(M=a,0|(m=1)):(A=0|Oe(0|s,0,45),g=0|w(),g=-1040385&i[(d=r)+4>>2]|g,i[(m=r)>>2]=i[d>>2]|A,i[m+4>>2]=g,M=a,0|(m=0));for(i[c>>2]=i[n>>2],i[c+4>>2]=i[n+4>>2],i[c+8>>2]=i[n+8>>2];i[l>>2]=i[c>>2],i[l+4>>2]=i[c+4>>2],i[l+8>>2]=i[c+8>>2],0|Ut(u)?(et(c),i[h>>2]=i[c>>2],i[h+4>>2]=i[c+4>>2],i[h+8>>2]=i[c+8>>2],rt(h)):(nt(c),i[h>>2]=i[c>>2],i[h+4>>2]=i[c+4>>2],i[h+8>>2]=i[c+8>>2],it(h)),Y(l,h,f),Z(f),y=0|i[(g=r)>>2],g=0|i[g+4>>2],n=0|Oe(7,0,0|(v=3*(15-u|0)|0)),g&=~(0|w()),v=0|Oe(0|tt(f),0,0|v),g=0|w()|g,i[(m=r)>>2]=v|y&~n,i[m+4>>2]=g,(0|u)>1;)u=u+-1|0;t:do{if((0|i[c>>2])<=1&&(0|i[c+4>>2])<=1&&(0|i[c+8>>2])<=1){f=127==(0|(l=0|N(d,u=0|tt(c))))?0:0|D(l);e:do{if(u){if(o){if(c=21408+(28*(0|Lt(t,e))|0)+(u<<2)|0,(0|(c=0|i[c>>2]))>0){n=0;do{u=0|ut(u),n=n+1|0}while((0|n)!=(0|c))}if(1==(0|u)){s=3;break t}127==(0|(n=0|N(d,u)))&&E(23104,22949,376,23134),0|D(n)?E(23147,22949,377,23134):(A=c,p=u,s=n)}else A=0,p=u,s=l;if((0|(h=0|i[4304+(28*d|0)+(p<<2)>>2]))<=-1&&E(23178,22949,384,23134),!f){if((0|A)<=-1&&E(23030,22949,417,23134),0|A){u=0,n=0|i[(c=r)>>2],c=0|i[c+4>>2];do{n=0|jt(n,c),c=0|w(),i[(v=r)>>2]=n,i[v+4>>2]=c,u=u+1|0}while((0|u)<(0|A))}if((0|h)<=0){u=54;break}for(u=0,n=0|i[(c=r)>>2],c=0|i[c+4>>2];;)if(n=0|jt(n,c),c=0|w(),i[(v=r)>>2]=n,i[v+4>>2]=c,(0|(u=u+1|0))==(0|h)){u=54;break e}}if(7==(0|(l=0|G(s,d)))&&E(22925,22949,393,23134),n=0|i[(u=r)>>2],u=0|i[u+4>>2],(0|h)>0){c=0;do{n=0|jt(n,u),u=0|w(),i[(v=r)>>2]=n,i[v+4>>2]=u,c=c+1|0}while((0|c)!=(0|h))}if(n=0|Lt(n,u),v=0|j(s),(0|(n=0|i[(v?21824:21616)+(28*l|0)+(n<<2)>>2]))<=-1&&E(23030,22949,412,23134),n){u=0,c=0|i[(l=r)>>2],l=0|i[l+4>>2];do{c=0|Dt(c,l),l=0|w(),i[(v=r)>>2]=c,i[v+4>>2]=l,u=u+1|0}while((0|u)<(0|n));u=54}else u=54}else if(0!=(0|o)&0!=(0|f))if(u=21408+(28*(v=0|Lt(t,e))|0)+((0|Lt(0|i[(u=r)>>2],0|i[u+4>>2]))<<2)|0,(0|(u=0|i[u>>2]))<=-1&&E(23201,22949,433,23134),u){s=0,n=0|i[(c=r)>>2],c=0|i[c+4>>2];do{n=0|jt(n,c),c=0|w(),i[(v=r)>>2]=n,i[v+4>>2]=c,s=s+1|0}while((0|s)<(0|u));s=l,u=54}else s=l,u=55;else s=l,u=54}while(0);if(54==(0|u)&&f&&(u=55),55==(0|u)&&1==(0|Lt(0|i[(v=r)>>2],0|i[v+4>>2]))){s=4;break}m=0|i[(v=r)>>2],v=-1040385&i[v+4>>2],y=0|Oe(0|s,0,45),v=0|v|w(),i[(s=r)>>2]=m|y,i[s+4>>2]=v,s=0}else s=2}while(0);return M=a,0|(v=s)}function ee(t,e){var n=0;if(!(e|=0))return 0|(n=1);n=t|=0,t=1;do{t=0|v(0==(1&e|0)?1:n,t),e>>=1,n=0|v(n,n)}while(0!=(0|e));return 0|t}function ne(t,e,n){t|=0;var r,a,s=0,u=0,c=0,l=0,h=0,f=0,p=0,d=0;if(!(0|H(e|=0,n|=0)))return 0|(d=0);if(e=0|V(e),a=+o[n>>3],s=e&(s=+o[n+8>>3])<0?s+6.283185307179586:s,(0|(d=0|i[t>>2]))<=0)return 0|(d=0);if(r=0|i[t+4>>2],e){e=0,n=-1,t=0;t:for(;;){for(p=t;l=+o[r+(p<<4)>>3],f=+o[r+(p<<4)+8>>3],c=+o[r+((t=(n+2|0)%(0|d)|0)<<4)>>3],u=+o[r+(t<<4)+8>>3],l>c?(h=l,l=f):(h=c,c=l,l=u,u=f),ah;){if(!((0|(n=p+1|0))<(0|d))){n=22;break t}t=p,p=n,n=t}if(s=(l=l<0?l+6.283185307179586:l)==s|(f=u<0?u+6.283185307179586:u)==s?s+-2220446049250313e-31:s,((f+=(a-c)/(h-c)*(l-f))<0?f+6.283185307179586:f)>s&&(e^=1),(0|(t=p+1|0))>=(0|d)){n=22;break}n=p}if(22==(0|n))return 0|e}else{e=0,n=-1,t=0;t:for(;;){for(p=t;l=+o[r+(p<<4)>>3],f=+o[r+(p<<4)+8>>3],c=+o[r+((t=(n+2|0)%(0|d)|0)<<4)>>3],u=+o[r+(t<<4)+8>>3],l>c?(h=l,l=f):(h=c,c=l,l=u,u=f),ah;){if(!((0|(n=p+1|0))<(0|d))){n=22;break t}t=p,p=n,n=t}if(u+(a-c)/(h-c)*(l-u)>(s=l==s|u==s?s+-2220446049250313e-31:s)&&(e^=1),(0|(t=p+1|0))>=(0|d)){n=22;break}n=p}if(22==(0|n))return 0|e}return 0}function re(t,e){e|=0;var n,r,a,s,c,l=0,h=0,f=0,p=0,d=0,A=0,g=0,m=0,y=0,v=0,_=0,b=0;if(!(r=0|i[(t|=0)>>2]))return i[e>>2]=0,i[e+4>>2]=0,i[e+8>>2]=0,i[e+12>>2]=0,i[e+16>>2]=0,i[e+20>>2]=0,i[e+24>>2]=0,void(i[e+28>>2]=0);if(o[(a=e+8|0)>>3]=17976931348623157e292,o[(s=e+24|0)>>3]=17976931348623157e292,o[e>>3]=-17976931348623157e292,o[(c=e+16|0)>>3]=-17976931348623157e292,!((0|r)<=0)){for(n=0|i[t+4>>2],m=17976931348623157e292,y=-17976931348623157e292,v=0,t=-1,p=17976931348623157e292,d=17976931348623157e292,g=-17976931348623157e292,h=-17976931348623157e292,_=0;l=+o[n+(_<<4)>>3],A=+o[n+(_<<4)+8>>3],f=+o[n+(((0|(t=t+2|0))==(0|r)?0:t)<<4)+8>>3],l>3]=l,p=l),A>3]=A,d=A),l>g?o[e>>3]=l:l=g,A>h&&(o[c>>3]=A,h=A),m=A>0&Ay?A:y,v|=+u(+(A-f))>3.141592653589793,(0|(t=_+1|0))!=(0|r);)b=_,g=l,_=t,t=b;v&&(o[c>>3]=y,o[s>>3]=m)}}function ie(t,e){e|=0;var n,r=0,a=0,s=0,c=0,l=0,h=0,f=0,p=0,d=0,A=0,g=0,m=0,y=0,v=0,_=0,b=0,x=0,w=0,E=0,O=0,S=0;if(y=0|i[(t|=0)>>2]){if(o[(v=e+8|0)>>3]=17976931348623157e292,o[(_=e+24|0)>>3]=17976931348623157e292,o[e>>3]=-17976931348623157e292,o[(b=e+16|0)>>3]=-17976931348623157e292,(0|y)>0){for(s=0|i[t+4>>2],g=17976931348623157e292,m=-17976931348623157e292,a=0,r=-1,f=17976931348623157e292,p=17976931348623157e292,A=-17976931348623157e292,l=-17976931348623157e292,x=0;c=+o[s+(x<<4)>>3],d=+o[s+(x<<4)+8>>3],h=+o[s+(((0|(O=r+2|0))==(0|y)?0:O)<<4)+8>>3],c>3]=c,f=c),d>3]=d,p=d),c>A?o[e>>3]=c:c=A,d>l&&(o[b>>3]=d,l=d),g=d>0&dm?d:m,a|=+u(+(d-h))>3.141592653589793,(0|(r=x+1|0))!=(0|y);)O=x,A=c,x=r,r=O;a&&(o[b>>3]=m,o[_>>3]=g)}}else i[e>>2]=0,i[e+4>>2]=0,i[e+8>>2]=0,i[e+12>>2]=0,i[e+16>>2]=0,i[e+20>>2]=0,i[e+24>>2]=0,i[e+28>>2]=0;if(!((0|(r=0|i[(O=t+8|0)>>2]))<=0)){n=t+12|0,E=0;do{if(s=0|i[n>>2],a=E,_=e+((E=E+1|0)<<5)|0,b=0|i[s+(a<<3)>>2]){if(o[(x=e+(E<<5)+8|0)>>3]=17976931348623157e292,o[(t=e+(E<<5)+24|0)>>3]=17976931348623157e292,o[_>>3]=-17976931348623157e292,o[(w=e+(E<<5)+16|0)>>3]=-17976931348623157e292,(0|b)>0){for(y=0|i[s+(a<<3)+4>>2],g=17976931348623157e292,m=-17976931348623157e292,s=0,a=-1,v=0,f=17976931348623157e292,p=17976931348623157e292,d=-17976931348623157e292,l=-17976931348623157e292;c=+o[y+(v<<4)>>3],A=+o[y+(v<<4)+8>>3],h=+o[y+(((0|(a=a+2|0))==(0|b)?0:a)<<4)+8>>3],c>3]=c,f=c),A>3]=A,p=A),c>d?o[_>>3]=c:c=d,A>l&&(o[w>>3]=A,l=A),g=A>0&Am?A:m,s|=+u(+(A-h))>3.141592653589793,(0|(a=v+1|0))!=(0|b);)S=v,v=a,d=c,a=S;s&&(o[w>>3]=m,o[t>>3]=g)}}else i[_>>2]=0,i[_+4>>2]=0,i[_+8>>2]=0,i[_+12>>2]=0,i[_+16>>2]=0,i[_+20>>2]=0,i[_+24>>2]=0,i[_+28>>2]=0,r=0|i[O>>2]}while((0|E)<(0|r))}}function oe(t,e,n){var r=0,o=0,a=0;if(!(0|ne(t|=0,e|=0,n|=0)))return 0|(o=0);if((0|i[(o=t+8|0)>>2])<=0)return 0|(o=1);for(r=t+12|0,t=0;;){if(a=t,t=t+1|0,0|ne((0|i[r>>2])+(a<<3)|0,e+(t<<5)|0,n)){t=0,r=6;break}if((0|t)>=(0|i[o>>2])){t=1,r=6;break}}return 6==(0|r)?0|t:0}function ae(t,e,n,r,i){e|=0,n|=0,r|=0,i|=0;var a,s,u,c,l,h,f,p=0;c=+o[(t|=0)>>3],u=+o[e>>3]-c,s=+o[t+8>>3],a=+o[e+8>>3]-s,h=+o[n>>3],p=((p=+o[r>>3]-h)*(s-(f=+o[n+8>>3]))-(c-h)*(l=+o[r+8>>3]-f))/(u*l-a*p),o[i>>3]=c+u*p,o[i+8>>3]=s+a*p}function se(t,e){return e|=0,+o[(t|=0)>>3]!=+o[e>>3]?0|(e=0):0|(e=+o[t+8>>3]==+o[e+8>>3])}function ue(t,e){e|=0;var n,r,i;return+((i=+o[(t|=0)>>3]-+o[e>>3])*i+(r=+o[t+8>>3]-+o[e+8>>3])*r+(n=+o[t+16>>3]-+o[e+16>>3])*n)}function ce(t,e,n){t|=0,n|=0;var r=0;(0|(e|=0))>0?(r=0|ve(e,4),i[t>>2]=r,r||E(23230,23253,40,23267)):i[t>>2]=0,i[t+4>>2]=e,i[t+8>>2]=0,i[t+12>>2]=n}function le(t){var e,n,r,a=0,s=0,c=0,h=0;e=(t|=0)+4|0,n=t+12|0,r=t+8|0;t:for(;;){for(s=0|i[e>>2],a=0;;){if((0|a)>=(0|s))break t;if(c=0|i[t>>2],h=0|i[c+(a<<2)>>2])break;a=a+1|0}a=c+(~~(+u(+ +l(10,+ +(15-(0|i[n>>2])|0))*(+o[h>>3]+ +o[h+8>>3]))%+(0|s))>>>0<<2)|0,s=0|i[a>>2];e:do{if(0|s){if(c=h+32|0,(0|s)==(0|h))i[a>>2]=i[c>>2];else{if(!(a=0|i[(s=s+32|0)>>2]))break;for(;(0|a)!=(0|h);)if(!(a=0|i[(s=a+32|0)>>2]))break e;i[s>>2]=i[c>>2]}ye(h),i[r>>2]=(0|i[r>>2])-1}}while(0)}ye(0|i[t>>2])}function he(t){var e,n=0,r=0;for(e=0|i[(t|=0)+4>>2],r=0;;){if((0|r)>=(0|e)){n=0,r=4;break}if(n=0|i[(0|i[t>>2])+(r<<2)>>2]){r=4;break}r=r+1|0}return 4==(0|r)?0|n:0}function fe(t,e){e|=0;var n=0,r=0,a=0,s=0;if(n=~~(+u(+ +l(10,+ +(15-(0|i[(t|=0)+12>>2])|0))*(+o[e>>3]+ +o[e+8>>3]))%+(0|i[t+4>>2]))>>>0,n=(0|i[t>>2])+(n<<2)|0,!(r=0|i[n>>2]))return 0|(s=1);s=e+32|0;do{if((0|r)!=(0|e)){if(!(n=0|i[r+32>>2]))return 0|(s=1);for(a=n;;){if((0|a)==(0|e)){a=8;break}if(!(n=0|i[a+32>>2])){n=1,a=10;break}r=a,a=n}if(8==(0|a)){i[r+32>>2]=i[s>>2];break}if(10==(0|a))return 0|n}else i[n>>2]=i[s>>2]}while(0);return ye(e),i[(s=t+8|0)>>2]=(0|i[s>>2])-1,0|(s=0)}function pe(t,e,n){t|=0,e|=0,n|=0;var r,a=0,s=0,c=0;(r=0|me(40))||E(23283,23253,98,23296),i[r>>2]=i[e>>2],i[r+4>>2]=i[e+4>>2],i[r+8>>2]=i[e+8>>2],i[r+12>>2]=i[e+12>>2],i[(s=r+16|0)>>2]=i[n>>2],i[s+4>>2]=i[n+4>>2],i[s+8>>2]=i[n+8>>2],i[s+12>>2]=i[n+12>>2],i[r+32>>2]=0,s=~~(+u(+ +l(10,+ +(15-(0|i[t+12>>2])|0))*(+o[e>>3]+ +o[e+8>>3]))%+(0|i[t+4>>2]))>>>0,s=(0|i[t>>2])+(s<<2)|0,a=0|i[s>>2];do{if(a){for(;!(0|Tt(a,e)&&0|Tt(a+16|0,n));)if(s=0|i[a+32>>2],!(0|i[(a=0==(0|s)?a:s)+32>>2])){c=10;break}if(10==(0|c)){i[a+32>>2]=r;break}return ye(r),0|(c=a)}i[s>>2]=r}while(0);return i[(c=t+8|0)>>2]=1+(0|i[c>>2]),0|(c=r)}function de(t,e,n){e|=0,n|=0;var r=0,a=0;if(a=~~(+u(+ +l(10,+ +(15-(0|i[(t|=0)+12>>2])|0))*(+o[e>>3]+ +o[e+8>>3]))%+(0|i[t+4>>2]))>>>0,!(a=0|i[(0|i[t>>2])+(a<<2)>>2]))return 0|(n=0);if(!n){for(t=a;;){if(0|Tt(t,e)){r=10;break}if(!(t=0|i[t+32>>2])){t=0,r=10;break}}if(10==(0|r))return 0|t}for(t=a;;){if(0|Tt(t,e)&&0|Tt(t+16|0,n)){r=10;break}if(!(t=0|i[t+32>>2])){t=0,r=10;break}}return 10==(0|r)?0|t:0}function Ae(t,e){e|=0;var n=0;if(n=~~(+u(+ +l(10,+ +(15-(0|i[(t|=0)+12>>2])|0))*(+o[e>>3]+ +o[e+8>>3]))%+(0|i[t+4>>2]))>>>0,!(t=0|i[(0|i[t>>2])+(n<<2)>>2]))return 0|(n=0);for(;;){if(0|Tt(t,e)){e=5;break}if(!(t=0|i[t+32>>2])){t=0,e=5;break}}return 5==(0|e)?0|t:0}function ge(t){return 0|~~+function(t){return+ +Me(+(t=+t))}(t=+t)}function me(t){t|=0;var e,n=0,r=0,o=0,a=0,s=0,u=0,c=0,l=0,h=0,f=0,p=0,d=0,A=0,g=0,m=0,y=0,v=0,_=0,b=0,x=0;e=M,M=M+16|0,d=e;do{if(t>>>0<245){if(t=(h=t>>>0<11?16:t+11&-8)>>>3,3&(r=(p=0|i[5829])>>>t)|0)return o=0|i[(r=(t=23356+((n=(1&r^1)+t|0)<<1<<2)|0)+8|0)>>2],(0|(s=0|i[(a=o+8|0)>>2]))==(0|t)?i[5829]=p&~(1<>2]=t,i[r>>2]=s),x=n<<3,i[o+4>>2]=3|x,i[(x=o+x+4|0)>>2]=1|i[x>>2],M=e,0|(x=a);if(h>>>0>(f=0|i[5831])>>>0){if(0|r)return n=((n=r<>>=c=n>>>12&16)>>>5&8)|c|(s=(n>>>=r)>>>2&4)|(t=(n>>>=s)>>>1&2)|(o=(n>>>=t)>>>1&1))+(n>>>o)|0)<<1<<2)|0)+8|0)>>2],(0|(r=0|i[(c=s+8|0)>>2]))==(0|n)?(t=p&~(1<>2]=n,i[t>>2]=r,t=p),u=(x=o<<3)-h|0,i[s+4>>2]=3|h,i[(a=s+h|0)+4>>2]=1|u,i[s+x>>2]=u,0|f&&(o=0|i[5834],r=23356+((n=f>>>3)<<1<<2)|0,t&(n=1<>2]:(i[5829]=t|n,n=r,t=r+8|0),i[t>>2]=o,i[n+12>>2]=o,i[o+8>>2]=n,i[o+12>>2]=r),i[5831]=u,i[5834]=a,M=e,0|(x=c);if(s=0|i[5830]){for(r=(s&0-s)-1|0,r=l=0|i[23620+(((o=(r>>>=a=r>>>12&16)>>>5&8)|a|(u=(r>>>=o)>>>2&4)|(c=(r>>>=u)>>>1&2)|(l=(r>>>=c)>>>1&1))+(r>>>l)<<2)>>2],c=l,l=(-8&i[l+4>>2])-h|0;(t=0|i[r+16>>2])||(t=0|i[r+20>>2]);)r=t,c=(a=(u=(-8&i[t+4>>2])-h|0)>>>0>>0)?t:c,l=a?u:l;if((u=c+h|0)>>>0>c>>>0){a=0|i[c+24>>2],n=0|i[c+12>>2];do{if((0|n)==(0|c)){if(!(n=0|i[(t=c+20|0)>>2])&&!(n=0|i[(t=c+16|0)>>2])){r=0;break}for(;;)if(r=0|i[(o=n+20|0)>>2])n=r,t=o;else{if(!(r=0|i[(o=n+16|0)>>2]))break;n=r,t=o}i[t>>2]=0,r=n}else r=0|i[c+8>>2],i[r+12>>2]=n,i[n+8>>2]=r,r=n}while(0);do{if(0|a){if(n=0|i[c+28>>2],(0|c)==(0|i[(t=23620+(n<<2)|0)>>2])){if(i[t>>2]=r,!r){i[5830]=s&~(1<>2])==(0|c)?x:a+20|0)>>2]=r,!r)break;i[r+24>>2]=a,0|(n=0|i[c+16>>2])&&(i[r+16>>2]=n,i[n+24>>2]=r),0|(n=0|i[c+20>>2])&&(i[r+20>>2]=n,i[n+24>>2]=r)}}while(0);return l>>>0<16?(x=l+h|0,i[c+4>>2]=3|x,i[(x=c+x+4|0)>>2]=1|i[x>>2]):(i[c+4>>2]=3|h,i[u+4>>2]=1|l,i[u+l>>2]=l,0|f&&(o=0|i[5834],r=23356+((n=f>>>3)<<1<<2)|0,(n=1<>2]:(i[5829]=n|p,n=r,t=r+8|0),i[t>>2]=o,i[n+12>>2]=o,i[o+8>>2]=n,i[o+12>>2]=r),i[5831]=l,i[5834]=u),M=e,0|(x=c+8|0)}p=h}else p=h}else p=h}else if(t>>>0<=4294967231)if(h=-8&(t=t+11|0),o=0|i[5830]){a=0-h|0,l=(t>>>=8)?h>>>0>16777215?31:h>>>((l=14-((c=((m=t<<(p=(t+1048320|0)>>>16&8))+520192|0)>>>16&4)|p|(l=((m<<=c)+245760|0)>>>16&2))+(m<>>15)|0)+7|0)&1|l<<1:0,r=0|i[23620+(l<<2)>>2];t:do{if(r)for(t=0,c=h<<(31==(0|l)?0:25-(l>>>1)|0),s=0;;){if((u=(-8&i[r+4>>2])-h|0)>>>0>>0){if(!u){t=r,a=0,m=65;break t}t=r,a=u}if(s=0==(0|(m=0|i[r+20>>2]))|(0|m)==(0|(r=0|i[r+16+(c>>>31<<2)>>2]))?s:m,!r){r=s,m=61;break}c<<=1}else r=0,t=0,m=61}while(0);if(61==(0|m)){if(0==(0|r)&0==(0|t)){if(!(t=((t=2<>>=u=p>>>12&16)>>>5&8)|u|(c=(p>>>=s)>>>2&4)|(l=(p>>>=c)>>>1&2)|(r=(p>>>=l)>>>1&1))+(p>>>r)<<2)>>2]}r?m=65:(c=t,u=a)}if(65==(0|m))for(s=r;;){if(a=(r=(p=(-8&i[s+4>>2])-h|0)>>>0>>0)?p:a,t=r?s:t,(r=0|i[s+16>>2])||(r=0|i[s+20>>2]),!r){c=t,u=a;break}s=r}if(0!=(0|c)&&u>>>0<((0|i[5831])-h|0)>>>0&&(f=c+h|0)>>>0>c>>>0){s=0|i[c+24>>2],n=0|i[c+12>>2];do{if((0|n)==(0|c)){if(!(n=0|i[(t=c+20|0)>>2])&&!(n=0|i[(t=c+16|0)>>2])){n=0;break}for(;;)if(r=0|i[(a=n+20|0)>>2])n=r,t=a;else{if(!(r=0|i[(a=n+16|0)>>2]))break;n=r,t=a}i[t>>2]=0}else x=0|i[c+8>>2],i[x+12>>2]=n,i[n+8>>2]=x}while(0);do{if(s){if(t=0|i[c+28>>2],(0|c)==(0|i[(r=23620+(t<<2)|0)>>2])){if(i[r>>2]=n,!n){o&=~(1<>2])==(0|c)?x:s+20|0)>>2]=n,!n)break;i[n+24>>2]=s,0|(t=0|i[c+16>>2])&&(i[n+16>>2]=t,i[t+24>>2]=n),(t=0|i[c+20>>2])&&(i[n+20>>2]=t,i[t+24>>2]=n)}}while(0);t:do{if(u>>>0<16)x=u+h|0,i[c+4>>2]=3|x,i[(x=c+x+4|0)>>2]=1|i[x>>2];else{if(i[c+4>>2]=3|h,i[f+4>>2]=1|u,i[f+u>>2]=u,n=u>>>3,u>>>0<256){r=23356+(n<<1<<2)|0,(t=0|i[5829])&(n=1<>2]:(i[5829]=t|n,n=r,t=r+8|0),i[t>>2]=f,i[n+12>>2]=f,i[f+8>>2]=n,i[f+12>>2]=r;break}if(n=23620+((r=(n=u>>>8)?u>>>0>16777215?31:u>>>((r=14-((_=((x=n<<(b=(n+1048320|0)>>>16&8))+520192|0)>>>16&4)|b|(r=((x<<=_)+245760|0)>>>16&2))+(x<>>15)|0)+7|0)&1|r<<1:0)<<2)|0,i[f+28>>2]=r,i[(t=f+16|0)+4>>2]=0,i[t>>2]=0,!(o&(t=1<>2]=f,i[f+24>>2]=n,i[f+12>>2]=f,i[f+8>>2]=f;break}n=0|i[n>>2];e:do{if((-8&i[n+4>>2]|0)!=(0|u)){for(o=u<<(31==(0|r)?0:25-(r>>>1)|0);t=0|i[(r=n+16+(o>>>31<<2)|0)>>2];){if((-8&i[t+4>>2]|0)==(0|u)){n=t;break e}o<<=1,n=t}i[r>>2]=f,i[f+24>>2]=n,i[f+12>>2]=f,i[f+8>>2]=f;break t}}while(0);x=0|i[(b=n+8|0)>>2],i[x+12>>2]=f,i[b>>2]=f,i[f+8>>2]=x,i[f+12>>2]=n,i[f+24>>2]=0}}while(0);return M=e,0|(x=c+8|0)}p=h}else p=h;else p=-1}while(0);if((r=0|i[5831])>>>0>=p>>>0)return n=r-p|0,t=0|i[5834],n>>>0>15?(x=t+p|0,i[5834]=x,i[5831]=n,i[x+4>>2]=1|n,i[t+r>>2]=n,i[t+4>>2]=3|p):(i[5831]=0,i[5834]=0,i[t+4>>2]=3|r,i[(x=t+r+4|0)>>2]=1|i[x>>2]),M=e,0|(x=t+8|0);if((u=0|i[5832])>>>0>p>>>0)return _=u-p|0,i[5832]=_,b=(x=0|i[5835])+p|0,i[5835]=b,i[b+4>>2]=1|_,i[x+4>>2]=3|p,M=e,0|(x=x+8|0);if(0|i[5947]?t=0|i[5949]:(i[5949]=4096,i[5948]=4096,i[5950]=-1,i[5951]=-1,i[5952]=0,i[5940]=0,i[5947]=-16&d^1431655768,t=4096),c=p+48|0,(h=(s=t+(l=p+47|0)|0)&(a=0-t|0))>>>0<=p>>>0)return M=e,0|(x=0);if(0|(t=0|i[5939])&&(d=(f=0|i[5937])+h|0)>>>0<=f>>>0|d>>>0>t>>>0)return M=e,0|(x=0);t:do{if(4&i[5940])n=0,m=143;else{r=0|i[5835];e:do{if(r){for(o=23764;!((d=0|i[o>>2])>>>0<=r>>>0&&(d+(0|i[o+4>>2])|0)>>>0>r>>>0);){if(!(t=0|i[o+8>>2])){m=128;break e}o=t}if((n=s-u&a)>>>0<2147483647)if((0|(t=0|Ie(0|n)))==((0|i[o>>2])+(0|i[o+4>>2])|0)){if(-1!=(0|t)){u=n,s=t,m=145;break t}}else o=t,m=136;else n=0}else m=128}while(0);do{if(128==(0|m))if(-1!=(0|(r=0|Ie(0)))&&(n=r,g=(n=(0==((g=(A=0|i[5948])+-1|0)&n|0)?0:(g+n&0-A)-n|0)+h|0)+(A=0|i[5937])|0,n>>>0>p>>>0&n>>>0<2147483647)){if(0|(d=0|i[5939])&&g>>>0<=A>>>0|g>>>0>d>>>0){n=0;break}if((0|(t=0|Ie(0|n)))==(0|r)){u=n,s=r,m=145;break t}o=t,m=136}else n=0}while(0);do{if(136==(0|m)){if(r=0-n|0,!(c>>>0>n>>>0&n>>>0<2147483647&-1!=(0|o))){if(-1==(0|o)){n=0;break}u=n,s=o,m=145;break t}if((t=l-n+(t=0|i[5949])&0-t)>>>0>=2147483647){u=n,s=o,m=145;break t}if(-1==(0|Ie(0|t))){Ie(0|r),n=0;break}u=t+n|0,s=o,m=145;break t}}while(0);i[5940]=4|i[5940],m=143}}while(0);if(143==(0|m)&&h>>>0<2147483647&&!(-1==(0|(_=0|Ie(0|h)))|1^(v=(y=(g=0|Ie(0))-_|0)>>>0>(p+40|0)>>>0)|_>>>0>>0&-1!=(0|_)&-1!=(0|g)^1)&&(u=v?y:n,s=_,m=145),145==(0|m)){n=(0|i[5937])+u|0,i[5937]=n,n>>>0>(0|i[5938])>>>0&&(i[5938]=n),l=0|i[5835];t:do{if(l){for(n=23764;;){if((0|s)==((t=0|i[n>>2])+(r=0|i[n+4>>2])|0)){m=154;break}if(!(o=0|i[n+8>>2]))break;n=o}if(154==(0|m)&&(b=n+4|0,0==(8&i[n+12>>2]|0))&&s>>>0>l>>>0&t>>>0<=l>>>0){i[b>>2]=r+u,b=l+(_=0==(7&(_=l+8|0)|0)?0:0-_&7)|0,_=(x=(0|i[5832])+u|0)-_|0,i[5835]=b,i[5832]=_,i[b+4>>2]=1|_,i[l+x+4>>2]=40,i[5836]=i[5951];break}for(s>>>0<(0|i[5833])>>>0&&(i[5833]=s),r=s+u|0,n=23764;;){if((0|i[n>>2])==(0|r)){m=162;break}if(!(t=0|i[n+8>>2]))break;n=t}if(162==(0|m)&&0==(8&i[n+12>>2]|0)){i[n>>2]=s,i[(f=n+4|0)>>2]=(0|i[f>>2])+u,h=(f=s+(0==(7&(f=s+8|0)|0)?0:0-f&7)|0)+p|0,c=(n=r+(0==(7&(n=r+8|0)|0)?0:0-n&7)|0)-f-p|0,i[f+4>>2]=3|p;e:do{if((0|l)==(0|n))x=(0|i[5832])+c|0,i[5832]=x,i[5835]=h,i[h+4>>2]=1|x;else{if((0|i[5834])==(0|n)){x=(0|i[5831])+c|0,i[5831]=x,i[5834]=h,i[h+4>>2]=1|x,i[h+x>>2]=x;break}if(1==(3&(t=0|i[n+4>>2])|0)){u=-8&t,o=t>>>3;n:do{if(t>>>0<256){if(t=0|i[n+8>>2],(0|(r=0|i[n+12>>2]))==(0|t)){i[5829]=i[5829]&~(1<>2]=r,i[r+8>>2]=t;break}s=0|i[n+24>>2],t=0|i[n+12>>2];do{if((0|t)==(0|n)){if(t=0|i[(o=(r=n+16|0)+4|0)>>2])r=o;else if(!(t=0|i[r>>2])){t=0;break}for(;;)if(o=0|i[(a=t+20|0)>>2])t=o,r=a;else{if(!(o=0|i[(a=t+16|0)>>2]))break;t=o,r=a}i[r>>2]=0}else x=0|i[n+8>>2],i[x+12>>2]=t,i[t+8>>2]=x}while(0);if(!s)break;o=23620+((r=0|i[n+28>>2])<<2)|0;do{if((0|i[o>>2])==(0|n)){if(i[o>>2]=t,0|t)break;i[5830]=i[5830]&~(1<>2])==(0|n)?x:s+20|0)>>2]=t,!t)break n}while(0);if(i[t+24>>2]=s,0|(o=0|i[(r=n+16|0)>>2])&&(i[t+16>>2]=o,i[o+24>>2]=t),!(r=0|i[r+4>>2]))break;i[t+20>>2]=r,i[r+24>>2]=t}while(0);n=n+u|0,a=u+c|0}else a=c;if(i[(n=n+4|0)>>2]=-2&i[n>>2],i[h+4>>2]=1|a,i[h+a>>2]=a,n=a>>>3,a>>>0<256){r=23356+(n<<1<<2)|0,(t=0|i[5829])&(n=1<>2]:(i[5829]=t|n,n=r,t=r+8|0),i[t>>2]=h,i[n+12>>2]=h,i[h+8>>2]=n,i[h+12>>2]=r;break}n=a>>>8;do{if(n){if(a>>>0>16777215){o=31;break}o=a>>>((o=14-((_=((x=n<<(b=(n+1048320|0)>>>16&8))+520192|0)>>>16&4)|b|(o=((x<<=_)+245760|0)>>>16&2))+(x<>>15)|0)+7|0)&1|o<<1}else o=0}while(0);if(n=23620+(o<<2)|0,i[h+28>>2]=o,i[(t=h+16|0)+4>>2]=0,i[t>>2]=0,!((t=0|i[5830])&(r=1<>2]=h,i[h+24>>2]=n,i[h+12>>2]=h,i[h+8>>2]=h;break}n=0|i[n>>2];n:do{if((-8&i[n+4>>2]|0)!=(0|a)){for(o=a<<(31==(0|o)?0:25-(o>>>1)|0);t=0|i[(r=n+16+(o>>>31<<2)|0)>>2];){if((-8&i[t+4>>2]|0)==(0|a)){n=t;break n}o<<=1,n=t}i[r>>2]=h,i[h+24>>2]=n,i[h+12>>2]=h,i[h+8>>2]=h;break e}}while(0);x=0|i[(b=n+8|0)>>2],i[x+12>>2]=h,i[b>>2]=h,i[h+8>>2]=x,i[h+12>>2]=n,i[h+24>>2]=0}}while(0);return M=e,0|(x=f+8|0)}for(n=23764;!((t=0|i[n>>2])>>>0<=l>>>0&&(x=t+(0|i[n+4>>2])|0)>>>0>l>>>0);)n=0|i[n+8>>2];n=(t=(t=(a=x+-47|0)+(0==(7&(t=a+8|0)|0)?0:0-t&7)|0)>>>0<(a=l+16|0)>>>0?l:t)+8|0,b=s+(_=0==(7&(_=s+8|0)|0)?0:0-_&7)|0,_=(r=u+-40|0)-_|0,i[5835]=b,i[5832]=_,i[b+4>>2]=1|_,i[s+r+4>>2]=40,i[5836]=i[5951],i[(r=t+4|0)>>2]=27,i[n>>2]=i[5941],i[n+4>>2]=i[5942],i[n+8>>2]=i[5943],i[n+12>>2]=i[5944],i[5941]=s,i[5942]=u,i[5944]=0,i[5943]=n,n=t+24|0;do{b=n,i[(n=n+4|0)>>2]=7}while((b+8|0)>>>0>>0);if((0|t)!=(0|l)){if(s=t-l|0,i[r>>2]=-2&i[r>>2],i[l+4>>2]=1|s,i[t>>2]=s,n=s>>>3,s>>>0<256){r=23356+(n<<1<<2)|0,(t=0|i[5829])&(n=1<>2]:(i[5829]=t|n,n=r,t=r+8|0),i[t>>2]=l,i[n+12>>2]=l,i[l+8>>2]=n,i[l+12>>2]=r;break}if(r=23620+((o=(n=s>>>8)?s>>>0>16777215?31:s>>>((o=14-((_=((x=n<<(b=(n+1048320|0)>>>16&8))+520192|0)>>>16&4)|b|(o=((x<<=_)+245760|0)>>>16&2))+(x<>>15)|0)+7|0)&1|o<<1:0)<<2)|0,i[l+28>>2]=o,i[l+20>>2]=0,i[a>>2]=0,!((n=0|i[5830])&(t=1<>2]=l,i[l+24>>2]=r,i[l+12>>2]=l,i[l+8>>2]=l;break}n=0|i[r>>2];e:do{if((-8&i[n+4>>2]|0)!=(0|s)){for(o=s<<(31==(0|o)?0:25-(o>>>1)|0);t=0|i[(r=n+16+(o>>>31<<2)|0)>>2];){if((-8&i[t+4>>2]|0)==(0|s)){n=t;break e}o<<=1,n=t}i[r>>2]=l,i[l+24>>2]=n,i[l+12>>2]=l,i[l+8>>2]=l;break t}}while(0);x=0|i[(b=n+8|0)>>2],i[x+12>>2]=l,i[b>>2]=l,i[l+8>>2]=x,i[l+12>>2]=n,i[l+24>>2]=0}}else 0==(0|(x=0|i[5833]))|s>>>0>>0&&(i[5833]=s),i[5941]=s,i[5942]=u,i[5944]=0,i[5838]=i[5947],i[5837]=-1,i[5842]=23356,i[5841]=23356,i[5844]=23364,i[5843]=23364,i[5846]=23372,i[5845]=23372,i[5848]=23380,i[5847]=23380,i[5850]=23388,i[5849]=23388,i[5852]=23396,i[5851]=23396,i[5854]=23404,i[5853]=23404,i[5856]=23412,i[5855]=23412,i[5858]=23420,i[5857]=23420,i[5860]=23428,i[5859]=23428,i[5862]=23436,i[5861]=23436,i[5864]=23444,i[5863]=23444,i[5866]=23452,i[5865]=23452,i[5868]=23460,i[5867]=23460,i[5870]=23468,i[5869]=23468,i[5872]=23476,i[5871]=23476,i[5874]=23484,i[5873]=23484,i[5876]=23492,i[5875]=23492,i[5878]=23500,i[5877]=23500,i[5880]=23508,i[5879]=23508,i[5882]=23516,i[5881]=23516,i[5884]=23524,i[5883]=23524,i[5886]=23532,i[5885]=23532,i[5888]=23540,i[5887]=23540,i[5890]=23548,i[5889]=23548,i[5892]=23556,i[5891]=23556,i[5894]=23564,i[5893]=23564,i[5896]=23572,i[5895]=23572,i[5898]=23580,i[5897]=23580,i[5900]=23588,i[5899]=23588,i[5902]=23596,i[5901]=23596,i[5904]=23604,i[5903]=23604,b=s+(_=0==(7&(_=s+8|0)|0)?0:0-_&7)|0,_=(x=u+-40|0)-_|0,i[5835]=b,i[5832]=_,i[b+4>>2]=1|_,i[s+x+4>>2]=40,i[5836]=i[5951]}while(0);if((n=0|i[5832])>>>0>p>>>0)return _=n-p|0,i[5832]=_,b=(x=0|i[5835])+p|0,i[5835]=b,i[b+4>>2]=1|_,i[x+4>>2]=3|p,M=e,0|(x=x+8|0)}return i[(x=23312)>>2]=12,M=e,0|(x=0)}function ye(t){var e=0,n=0,r=0,o=0,a=0,s=0,u=0,c=0;if(t|=0){n=t+-8|0,o=0|i[5833],c=n+(e=-8&(t=0|i[t+-4>>2]))|0;do{if(1&t)u=n,s=n;else{if(r=0|i[n>>2],!(3&t))return;if(a=r+e|0,(s=n+(0-r)|0)>>>0>>0)return;if((0|i[5834])==(0|s)){if(3!=(3&(e=0|i[(t=c+4|0)>>2])|0)){u=s,e=a;break}return i[5831]=a,i[t>>2]=-2&e,i[s+4>>2]=1|a,void(i[s+a>>2]=a)}if(n=r>>>3,r>>>0<256){if(t=0|i[s+8>>2],(0|(e=0|i[s+12>>2]))==(0|t)){i[5829]=i[5829]&~(1<>2]=e,i[e+8>>2]=t,u=s,e=a;break}o=0|i[s+24>>2],t=0|i[s+12>>2];do{if((0|t)==(0|s)){if(t=0|i[(n=(e=s+16|0)+4|0)>>2])e=n;else if(!(t=0|i[e>>2])){t=0;break}for(;;)if(n=0|i[(r=t+20|0)>>2])t=n,e=r;else{if(!(n=0|i[(r=t+16|0)>>2]))break;t=n,e=r}i[e>>2]=0}else u=0|i[s+8>>2],i[u+12>>2]=t,i[t+8>>2]=u}while(0);if(o){if(e=0|i[s+28>>2],(0|i[(n=23620+(e<<2)|0)>>2])==(0|s)){if(i[n>>2]=t,!t){i[5830]=i[5830]&~(1<>2])==(0|s)?u:o+20|0)>>2]=t,!t){u=s,e=a;break}i[t+24>>2]=o,0|(n=0|i[(e=s+16|0)>>2])&&(i[t+16>>2]=n,i[n+24>>2]=t),(e=0|i[e+4>>2])?(i[t+20>>2]=e,i[e+24>>2]=t,u=s,e=a):(u=s,e=a)}else u=s,e=a}}while(0);if(!(s>>>0>=c>>>0)&&1&(r=0|i[(t=c+4|0)>>2])){if(2&r)i[t>>2]=-2&r,i[u+4>>2]=1|e,i[s+e>>2]=e,o=e;else{if((0|i[5835])==(0|c)){if(c=(0|i[5832])+e|0,i[5832]=c,i[5835]=u,i[u+4>>2]=1|c,(0|u)!=(0|i[5834]))return;return i[5834]=0,void(i[5831]=0)}if((0|i[5834])==(0|c))return c=(0|i[5831])+e|0,i[5831]=c,i[5834]=s,i[u+4>>2]=1|c,void(i[s+c>>2]=c);o=(-8&r)+e|0,n=r>>>3;do{if(r>>>0<256){if(e=0|i[c+8>>2],(0|(t=0|i[c+12>>2]))==(0|e)){i[5829]=i[5829]&~(1<>2]=t,i[t+8>>2]=e;break}a=0|i[c+24>>2],t=0|i[c+12>>2];do{if((0|t)==(0|c)){if(t=0|i[(n=(e=c+16|0)+4|0)>>2])e=n;else if(!(t=0|i[e>>2])){n=0;break}for(;;)if(n=0|i[(r=t+20|0)>>2])t=n,e=r;else{if(!(n=0|i[(r=t+16|0)>>2]))break;t=n,e=r}i[e>>2]=0,n=t}else n=0|i[c+8>>2],i[n+12>>2]=t,i[t+8>>2]=n,n=t}while(0);if(0|a){if(t=0|i[c+28>>2],(0|i[(e=23620+(t<<2)|0)>>2])==(0|c)){if(i[e>>2]=n,!n){i[5830]=i[5830]&~(1<>2])==(0|c)?r:a+20|0)>>2]=n,!n)break;i[n+24>>2]=a,0|(e=0|i[(t=c+16|0)>>2])&&(i[n+16>>2]=e,i[e+24>>2]=n),0|(t=0|i[t+4>>2])&&(i[n+20>>2]=t,i[t+24>>2]=n)}}while(0);if(i[u+4>>2]=1|o,i[s+o>>2]=o,(0|u)==(0|i[5834]))return void(i[5831]=o)}if(t=o>>>3,o>>>0<256)return n=23356+(t<<1<<2)|0,(e=0|i[5829])&(t=1<>2]:(i[5829]=e|t,t=n,e=n+8|0),i[e>>2]=u,i[t+12>>2]=u,i[u+8>>2]=t,void(i[u+12>>2]=n);t=23620+((r=(t=o>>>8)?o>>>0>16777215?31:o>>>((r=14-((a=((c=t<<(s=(t+1048320|0)>>>16&8))+520192|0)>>>16&4)|s|(r=((c<<=a)+245760|0)>>>16&2))+(c<>>15)|0)+7|0)&1|r<<1:0)<<2)|0,i[u+28>>2]=r,i[u+20>>2]=0,i[u+16>>2]=0,e=0|i[5830],n=1<>2];e:do{if((-8&i[t+4>>2]|0)!=(0|o)){for(r=o<<(31==(0|r)?0:25-(r>>>1)|0);e=0|i[(n=t+16+(r>>>31<<2)|0)>>2];){if((-8&i[e+4>>2]|0)==(0|o)){t=e;break e}r<<=1,t=e}i[n>>2]=u,i[u+24>>2]=t,i[u+12>>2]=u,i[u+8>>2]=u;break t}}while(0);c=0|i[(s=t+8|0)>>2],i[c+12>>2]=u,i[s>>2]=u,i[u+8>>2]=c,i[u+12>>2]=t,i[u+24>>2]=0}else i[5830]=e|n,i[t>>2]=u,i[u+24>>2]=t,i[u+12>>2]=u,i[u+8>>2]=u}while(0);if(c=(0|i[5837])-1|0,i[5837]=c,!(0|c)){for(t=23772;t=0|i[t>>2];)t=t+8|0;i[5837]=-1}}}}function ve(t,e){e|=0;var n=0;return(t|=0)?(n=0|v(e,t),(e|t)>>>0>65535&&(n=(0|(n>>>0)/(t>>>0))==(0|e)?n:-1)):n=0,(t=0|me(n))&&3&i[t+-4>>2]?(Pe(0|t,0,0|n),0|t):0|t}function _e(t,e,n,r){return 0|(x(0|(r=(e|=0)-(r|=0)-((n|=0)>>>0>(t|=0)>>>0|0)>>>0)),t-n>>>0|0)}function be(t){return 0|((t|=0)?31-(0|b(t^t-1))|0:32)}function xe(t,e,n,r,o){o|=0;var a=0,s=0,u=0,c=0,l=0,h=0,f=0,p=0,d=0,A=0;if(h=t|=0,s=n|=0,u=p=r|=0,!(l=c=e|=0))return a=0!=(0|o),u?a?(i[o>>2]=0|t,i[o+4>>2]=0&e,o=0,0|(x(0|(p=0)),o)):(o=0,0|(x(0|(p=0)),o)):(a&&(i[o>>2]=(h>>>0)%(s>>>0),i[o+4>>2]=0),o=(h>>>0)/(s>>>0)>>>0,0|(x(0|(p=0)),o));a=0==(0|u);do{if(s){if(!a){if((a=(0|b(0|u))-(0|b(0|l))|0)>>>0<=31){s=f=a+1|0,t=h>>>(f>>>0)&(e=a-31>>31)|l<<(u=31-a|0),e&=l>>>(f>>>0),a=0,u=h<>2]=0|t,i[o+4>>2]=c|0&e,o=0,0|(x(0|(p=0)),o)):(o=0,0|(x(0|(p=0)),o))}if((a=s-1|0)&s|0){s=u=33+(0|b(0|s))-(0|b(0|l))|0,t=(f=32-u|0)-1>>31&l>>>((d=u-32|0)>>>0)|(l<>>(u>>>0))&(e=d>>31),e&=l>>>(u>>>0),a=h<<(A=64-u|0)&(c=f>>31),u=(l<>>(d>>>0))&c|h<>31;break}return 0|o&&(i[o>>2]=a&h,i[o+4>>2]=0),1==(0|s)?(A=0|t,0|(x(0|(d=c|0&e)),A)):(d=l>>>((A=0|be(0|s))>>>0)|0,A=l<<32-A|h>>>(A>>>0)|0,0|(x(0|d),A))}if(a)return 0|o&&(i[o>>2]=(l>>>0)%(s>>>0),i[o+4>>2]=0),A=(l>>>0)/(s>>>0)>>>0,0|(x(0|(d=0)),A);if(!h)return 0|o&&(i[o>>2]=0,i[o+4>>2]=(l>>>0)%(u>>>0)),A=(l>>>0)/(u>>>0)>>>0,0|(x(0|(d=0)),A);if(!((a=u-1|0)&u))return 0|o&&(i[o>>2]=0|t,i[o+4>>2]=a&l|0&e),d=0,A=l>>>((0|be(0|u))>>>0),0|(x(0|d),A);if((a=(0|b(0|u))-(0|b(0|l))|0)>>>0<=30){s=e=a+1|0,t=l<<(u=31-a|0)|h>>>(e>>>0),e=l>>>(e>>>0),a=0,u=h<>2]=0|t,i[o+4>>2]=c|0&e,A=0,0|(x(0|(d=0)),A)):(A=0,0|(x(0|(d=0)),A))}while(0);if(s){l=0|function(t,e,n,r){return 0|(x((e|=0)+(r|=0)+((n=(t|=0)+(n|=0)>>>0)>>>0>>0|0)>>>0|0),0|n)}(0|(f=0|n),0|(h=p|0&r),-1,-1),n=0|w(),c=u,u=0;do{r=c,c=a>>>31|c<<1,a=u|a<<1,_e(0|l,0|n,0|(r=t<<1|r>>>31|0),0|(p=t>>>31|e<<1|0)),u=1&(d=(A=0|w())>>31|((0|A)<0?-1:0)<<1),t=0|_e(0|r,0|p,d&f|0,(((0|A)<0?-1:0)>>31|((0|A)<0?-1:0)<<1)&h|0),e=0|w(),s=s-1|0}while(0!=(0|s));l=c,c=0}else l=u,c=0,u=0;return s=0,0|o&&(i[o>>2]=t,i[o+4>>2]=e),A=-2&(a<<1|0)|u,0|(x(0|(d=(0|a)>>>31|(l|s)<<1|0&(s<<1|a>>>31)|c)),A)}function we(t,e,n,r){var o,a;return a=M,M=M+16|0,xe(t|=0,e|=0,n|=0,r|=0,o=0|a),M=a,0|(x(0|i[o+4>>2]),0|i[o>>2])}function Ee(t,e,n){return t|=0,e|=0,(0|(n|=0))<32?(x(e>>>n|0),t>>>n|(e&(1<>>n-32|0)}function Oe(t,e,n){return t|=0,e|=0,(0|(n|=0))<32?(x(e<>>32-n|0),t<=0?+s(t+.5):+y(t-.5)}function Ce(t,e,n){t|=0,e|=0;var o,a,s=0;if((0|(n|=0))>=8192)return T(0|t,0|e,0|n),0|t;if(a=0|t,o=t+n|0,(3&t)==(3&e)){for(;3&t;){if(!n)return 0|a;r[t>>0]=0|r[e>>0],t=t+1|0,e=e+1|0,n=n-1|0}for(s=(n=-4&o|0)-64|0;(0|t)<=(0|s);)i[t>>2]=i[e>>2],i[t+4>>2]=i[e+4>>2],i[t+8>>2]=i[e+8>>2],i[t+12>>2]=i[e+12>>2],i[t+16>>2]=i[e+16>>2],i[t+20>>2]=i[e+20>>2],i[t+24>>2]=i[e+24>>2],i[t+28>>2]=i[e+28>>2],i[t+32>>2]=i[e+32>>2],i[t+36>>2]=i[e+36>>2],i[t+40>>2]=i[e+40>>2],i[t+44>>2]=i[e+44>>2],i[t+48>>2]=i[e+48>>2],i[t+52>>2]=i[e+52>>2],i[t+56>>2]=i[e+56>>2],i[t+60>>2]=i[e+60>>2],t=t+64|0,e=e+64|0;for(;(0|t)<(0|n);)i[t>>2]=i[e>>2],t=t+4|0,e=e+4|0}else for(n=o-4|0;(0|t)<(0|n);)r[t>>0]=0|r[e>>0],r[t+1>>0]=0|r[e+1>>0],r[t+2>>0]=0|r[e+2>>0],r[t+3>>0]=0|r[e+3>>0],t=t+4|0,e=e+4|0;for(;(0|t)<(0|o);)r[t>>0]=0|r[e>>0],t=t+1|0,e=e+1|0;return 0|a}function Pe(t,e,n){e|=0;var o,a=0,s=0,u=0;if(o=(t|=0)+(n|=0)|0,e&=255,(0|n)>=67){for(;3&t;)r[t>>0]=e,t=t+1|0;for(u=e|e<<8|e<<16|e<<24,s=(a=-4&o|0)-64|0;(0|t)<=(0|s);)i[t>>2]=u,i[t+4>>2]=u,i[t+8>>2]=u,i[t+12>>2]=u,i[t+16>>2]=u,i[t+20>>2]=u,i[t+24>>2]=u,i[t+28>>2]=u,i[t+32>>2]=u,i[t+36>>2]=u,i[t+40>>2]=u,i[t+44>>2]=u,i[t+48>>2]=u,i[t+52>>2]=u,i[t+56>>2]=u,i[t+60>>2]=u,t=t+64|0;for(;(0|t)<(0|a);)i[t>>2]=u,t=t+4|0}for(;(0|t)<(0|o);)r[t>>0]=e,t=t+1|0;return o-n|0}function Me(t){return(t=+t)>=0?+s(t+.5):+y(t-.5)}function Ie(t){t|=0;var e,n,r;return r=0|S(),(0|t)>0&(0|(e=(n=0|i[a>>2])+t|0))<(0|n)|(0|e)<0?(P(0|e),O(12),-1):(0|e)>(0|r)&&!(0|C(0|e))?(O(12),-1):(i[a>>2]=e,0|n)}return{___uremdi3:we,_bitshift64Lshr:Ee,_bitshift64Shl:Oe,_calloc:ve,_cellAreaKm2:function(t,e){var n,r,o,a=0;if(o=M,M=M+192|0,r=o,Ht(t|=0,e|=0,n=o+168|0),Wt(t,e,r),(0|(e=0|i[r>>2]))>0){if(a=+Pt(r+8|0,r+8+((1!=(0|e)&1)<<4)|0,n)+0,1!=(0|e)){t=1;do{a+=+Pt(r+8+(t<<4)|0,r+8+(((0|(t=t+1|0))%(0|e)|0)<<4)|0,n)}while((0|t)<(0|e))}}else a=0;return M=o,6371.007180918475*a*6371.007180918475},_cellAreaM2:function(t,e){var n,r,o,a=0;if(o=M,M=M+192|0,r=o,Ht(t|=0,e|=0,n=o+168|0),Wt(t,e,r),(0|(e=0|i[r>>2]))>0){if(a=+Pt(r+8|0,r+8+((1!=(0|e)&1)<<4)|0,n)+0,1!=(0|e)){t=1;do{a+=+Pt(r+8+(t<<4)|0,r+8+(((0|(t=t+1|0))%(0|e)|0)<<4)|0,n)}while((0|t)<(0|e))}}else a=0;return M=o,6371.007180918475*a*6371.007180918475*1e3*1e3},_cellAreaRads2:function(t,e){var n,r,o,a=0;if(o=M,M=M+192|0,r=o,Ht(t|=0,e|=0,n=o+168|0),Wt(t,e,r),(0|(e=0|i[r>>2]))<=0)return M=o,+(a=0);if(a=+Pt(r+8|0,r+8+((1!=(0|e)&1)<<4)|0,n)+0,1==(0|e))return M=o,+a;t=1;do{a+=+Pt(r+8+(t<<4)|0,r+8+(((0|(t=t+1|0))%(0|e)|0)<<4)|0,n)}while((0|t)<(0|e));return M=o,+a},_compact:function(t,e,n){e|=0;var r,o=0,a=0,s=0,u=0,c=0,l=0,h=0,f=0,p=0,d=0,A=0,g=0,m=0,y=0,v=0,_=0,b=0,x=0,E=0,O=0,S=0;if(!(n|=0))return 0|(O=0);if(o=0|i[(a=t|=0)>>2],!0&0==(15728640&(a=0|i[a+4>>2])|0)){if((0|n)<=0)return 0|(O=0);if(i[(O=e)>>2]=o,i[O+4>>2]=a,1==(0|n))return 0|(O=0);o=1;do{E=0|i[(x=t+(o<<3)|0)+4>>2],i[(O=e+(o<<3)|0)>>2]=i[x>>2],i[O+4>>2]=E,o=o+1|0}while((0|o)!=(0|n));return 0|(o=0)}if(!(E=0|me(x=n<<3)))return 0|(O=-3);if(Ce(0|E,0|t,0|x),!(r=0|ve(n,8)))return ye(E),0|(O=-3);o=n;t:for(;;){_=0|Ee(0|(f=0|i[(u=E)>>2]),0|(u=0|i[u+4>>2]),52),w(),b=(_&=15)+-1|0,v=(0|o)>0;e:do{if(v){if(y=((0|o)<0)<<31>>31,g=0|Oe(0|b,0,52),m=0|w(),b>>>0>15)for(a=0,t=f,n=u;;){if(!(0==(0|t)&0==(0|n))){if(s=0|Ee(0|t,0|n,52),w(),c=(0|(s&=15))<(0|b),s=(0|s)==(0|b),n=0|we(0|(h=c?0:s?t:0),0|(t=c?0:s?n:0),0|o,0|y),w(),0==(0|(l=0|i[(c=s=r+(n<<3)|0)>>2]))&0==(0|(c=0|i[c+4>>2])))n=h;else for(g=0,A=n,d=c,n=h;;){if((0|g)>(0|o)){O=41;break t}if((0|l)==(0|n)&(-117440513&d|0)==(0|t)){h=0|Ee(0|l,0|d,56),w(),p=(h&=7)+1|0,m=0|Ee(0|l,0|d,45),w();n:do{if(0|D(127&m)){if(l=0|Ee(0|l,0|d,52),w(),!(l&=15)){c=6;break}for(c=1;;){if(!(0==((m=0|Oe(7,0,3*(15-c|0)|0))&n|0)&0==((0|w())&t|0))){c=7;break n}if(!(c>>>0>>0)){c=6;break}c=c+1|0}}else c=7}while(0);if((h+2|0)>>>0>c>>>0){O=51;break t}m=0|Oe(0|p,0,56),t=0|w()|-117440513&t,i[(c=s)>>2]=0,i[c+4>>2]=0,c=A,n|=m}else c=(A+1|0)%(0|o)|0;if(0==(0|(l=0|i[(d=s=r+(c<<3)|0)>>2]))&0==(0|(d=0|i[d+4>>2])))break;g=g+1|0,A=c}i[(m=s)>>2]=n,i[m+4>>2]=t}if((0|(a=a+1|0))>=(0|o))break e;t=0|i[(n=E+(a<<3)|0)>>2],n=0|i[n+4>>2]}for(a=0,t=f,n=u;;){if(!(0==(0|t)&0==(0|n))){if(c=0|Ee(0|t,0|n,52),w(),(0|(c&=15))>=(0|b)){if((0|c)!=(0|b)&&(t|=g,n=-15728641&n|m,c>>>0>=_>>>0)){s=b;do{A=0|Oe(7,0,3*(14-s|0)|0),s=s+1|0,t|=A,n=0|w()|n}while(s>>>0>>0)}}else t=0,n=0;if(c=0|we(0|t,0|n,0|o,0|y),w(),!(0==(0|(h=0|i[(l=s=r+(c<<3)|0)>>2]))&0==(0|(l=0|i[l+4>>2]))))for(A=0;;){if((0|A)>(0|o)){O=41;break t}if((0|h)==(0|t)&(-117440513&l|0)==(0|n)){p=0|Ee(0|h,0|l,56),w(),d=(p&=7)+1|0,S=0|Ee(0|h,0|l,45),w();n:do{if(0|D(127&S)){if(h=0|Ee(0|h,0|l,52),w(),!(h&=15)){l=6;break}for(l=1;;){if(!(0==((S=0|Oe(7,0,3*(15-l|0)|0))&t|0)&0==((0|w())&n|0))){l=7;break n}if(!(l>>>0>>0)){l=6;break}l=l+1|0}}else l=7}while(0);if((p+2|0)>>>0>l>>>0){O=51;break t}S=0|Oe(0|d,0,56),n=0|w()|-117440513&n,i[(d=s)>>2]=0,i[d+4>>2]=0,t|=S}else c=(c+1|0)%(0|o)|0;if(0==(0|(h=0|i[(l=s=r+(c<<3)|0)>>2]))&0==(0|(l=0|i[l+4>>2])))break;A=A+1|0}i[(S=s)>>2]=t,i[S+4>>2]=n}if((0|(a=a+1|0))>=(0|o))break e;t=0|i[(n=E+(a<<3)|0)>>2],n=0|i[n+4>>2]}}}while(0);if((o+5|0)>>>0<11){O=99;break}if(!(m=0|ve((0|o)/6|0,8))){O=58;break}e:do{if(v){A=0,d=0;do{if(!(0==(0|(a=0|i[(t=c=r+(A<<3)|0)>>2]))&0==(0|(t=0|i[t+4>>2])))){l=0|Ee(0|a,0|t,56),w(),n=(l&=7)+1|0,h=-117440513&t,S=0|Ee(0|a,0|t,45),w();n:do{if(0|D(127&S)){if(p=0|Ee(0|a,0|t,52),w(),0|(p&=15))for(s=1;;){if(!(0==(a&(S=0|Oe(7,0,3*(15-s|0)|0))|0)&0==(h&(0|w())|0)))break n;if(!(s>>>0

>>0))break;s=s+1|0}a|=t=0|Oe(0|n,0,56),t=0|w()|h,i[(n=c)>>2]=a,i[n+4>>2]=t,n=l+2|0}}while(0);7==(0|n)&&(i[(S=m+(d<<3)|0)>>2]=a,i[S+4>>2]=-117440513&t,d=d+1|0)}A=A+1|0}while((0|A)!=(0|o));if(v){if(g=((0|o)<0)<<31>>31,p=0|Oe(0|b,0,52),A=0|w(),b>>>0>15)for(t=0,a=0;;){do{if(!(0==(0|f)&0==(0|u))){for(l=0|Ee(0|f,0|u,52),w(),s=(0|(l&=15))<(0|b),l=(0|l)==(0|b),s=0|we(0|(c=s?0:l?f:0),0|(l=s?0:l?u:0),0|o,0|g),w(),n=0;;){if((0|n)>(0|o)){O=98;break t}if((-117440513&(h=0|i[(S=r+(s<<3)|0)+4>>2])|0)==(0|l)&&(0|i[S>>2])==(0|c)){O=70;break}if((0|i[(S=r+((s=(s+1|0)%(0|o)|0)<<3)|0)>>2])==(0|c)&&(0|i[S+4>>2])==(0|l))break;n=n+1|0}if(70==(0|O)&&(O=0,!0&100663296==(117440512&h|0)))break;i[(S=e+(a<<3)|0)>>2]=f,i[S+4>>2]=u,a=a+1|0}}while(0);if((0|(t=t+1|0))>=(0|o)){o=d;break e}f=0|i[(u=E+(t<<3)|0)>>2],u=0|i[u+4>>2]}for(t=0,a=0;;){do{if(!(0==(0|f)&0==(0|u))){if(l=0|Ee(0|f,0|u,52),w(),(0|(l&=15))>=(0|b))if((0|l)!=(0|b))if(n=f|p,s=-15728641&u|A,l>>>0<_>>>0)l=s;else{c=b;do{S=0|Oe(7,0,3*(14-c|0)|0),c=c+1|0,n|=S,s=0|w()|s}while(c>>>0>>0);l=s}else n=f,l=u;else n=0,l=0;for(c=0|we(0|n,0|l,0|o,0|g),w(),s=0;;){if((0|s)>(0|o)){O=98;break t}if((-117440513&(h=0|i[(S=r+(c<<3)|0)+4>>2])|0)==(0|l)&&(0|i[S>>2])==(0|n)){O=93;break}if((0|i[(S=r+((c=(c+1|0)%(0|o)|0)<<3)|0)>>2])==(0|n)&&(0|i[S+4>>2])==(0|l))break;s=s+1|0}if(93==(0|O)&&(O=0,!0&100663296==(117440512&h|0)))break;i[(S=e+(a<<3)|0)>>2]=f,i[S+4>>2]=u,a=a+1|0}}while(0);if((0|(t=t+1|0))>=(0|o)){o=d;break e}f=0|i[(u=E+(t<<3)|0)>>2],u=0|i[u+4>>2]}}else a=0,o=d}else a=0,o=0}while(0);if(Pe(0|r,0,0|x),Ce(0|E,0|m,o<<3|0),ye(m),!o)break;e=e+(a<<3)|0}return 41==(0|O)?(ye(E),ye(r),0|(S=-1)):51==(0|O)?(ye(E),ye(r),0|(S=-2)):58==(0|O)?(ye(E),ye(r),0|(S=-3)):98==(0|O)?(ye(m),ye(E),ye(r),0|(S=-1)):(99==(0|O)&&Ce(0|e,0|E,o<<3|0),ye(E),ye(r),0|(S=0))},_destroyLinkedPolygon:function(t){var e=0,n=0,r=0,o=0;if(t|=0)for(r=1;;){if(0|(e=0|i[t>>2]))do{if(0|(n=0|i[e>>2]))do{o=n,n=0|i[n+16>>2],ye(o)}while(0!=(0|n));o=e,e=0|i[e+8>>2],ye(o)}while(0!=(0|e));if(e=t,t=0|i[t+8>>2],r||ye(e),!t)break;r=0}},_edgeLengthKm:function(t){return+ +o[20752+((t|=0)<<3)>>3]},_edgeLengthM:function(t){return+ +o[20880+((t|=0)<<3)>>3]},_emscripten_replace_memory:function(t){return r=new Int8Array(t),new Uint8Array(t),i=new Int32Array(t),new Float32Array(t),o=new Float64Array(t),n=t,!0},_exactEdgeLengthKm:function(t,e){var n,r,a=0,s=0,u=0,l=0,p=0,d=0;if(r=M,M=M+176|0,Jt(t|=0,e|=0,n=r),(0|(t=0|i[n>>2]))<=1)return M=r,+(u=0);e=t+-1|0,t=0,a=0,s=+o[n+8>>3],u=+o[n+16>>3];do{p=s,s=+o[n+8+((t=t+1|0)<<4)>>3],d=+f(.5*(s-p)),l=u,u=+o[n+8+(t<<4)+8>>3],l=d*d+(l=+f(.5*(u-l)))*(+h(+p)*+h(+s)*l),a+=2*+m(+ +c(+l),+ +c(+(1-l)))}while((0|t)!=(0|e));return M=r,+(d=6371.007180918475*a)},_exactEdgeLengthM:function(t,e){var n,r,a=0,s=0,u=0,l=0,p=0,d=0;if(r=M,M=M+176|0,Jt(t|=0,e|=0,n=r),(0|(t=0|i[n>>2]))<=1)return M=r,+(u=0);e=t+-1|0,t=0,a=0,s=+o[n+8>>3],u=+o[n+16>>3];do{p=s,s=+o[n+8+((t=t+1|0)<<4)>>3],d=+f(.5*(s-p)),l=u,u=+o[n+8+(t<<4)+8>>3],l=d*d+(l=+f(.5*(u-l)))*(+h(+p)*+h(+s)*l),a+=2*+m(+ +c(+l),+ +c(+(1-l)))}while((0|t)!=(0|e));return M=r,+(d=6371.007180918475*a*1e3)},_exactEdgeLengthRads:function(t,e){var n,r,a=0,s=0,u=0,l=0,p=0,d=0;if(r=M,M=M+176|0,Jt(t|=0,e|=0,n=r),(0|(t=0|i[n>>2]))<=1)return M=r,+(u=0);e=t+-1|0,t=0,a=0,s=+o[n+8>>3],u=+o[n+16>>3];do{p=s,s=+o[n+8+((t=t+1|0)<<4)>>3],d=+f(.5*(s-p)),l=u,u=+o[n+8+(t<<4)+8>>3],l=d*d+(l=+f(.5*(u-l)))*(+h(+s)*+h(+p)*l),a+=2*+m(+ +c(+l),+ +c(+(1-l)))}while((0|t)<(0|e));return M=r,+a},_experimentalH3ToLocalIj:function(t,e,n,r,i){var o,a;return i|=0,a=M,M=M+16|0,(t=0|$t(t|=0,e|=0,n|=0,r|=0,o=a))||(pt(o,i),t=0),M=a,0|t},_experimentalLocalIjToH3:function(t,e,n,r){var i,o;return t|=0,e|=0,r|=0,i=M,M=M+16|0,dt(n|=0,o=i),r=0|te(t,e,o,r),M=i,0|r},_free:ye,_geoToH3:Nt,_getDestinationH3IndexFromUnidirectionalEdge:function(t,e){t|=0;var n,r,o=0;return n=M,M=M+16|0,o=n,!0&268435456==(2013265920&(e|=0)|0)?(r=0|Ee(0|t,0|e,56),w(),i[o>>2]=0,o=0|k(t,-2130706433&e|134217728,7&r,o),e=0|w(),x(0|e),M=n,0|o):(o=0,x(0|(e=0)),M=n,0|o)},_getH3IndexesFromUnidirectionalEdge:function(t,e,n){t|=0;var r,o,a,s,u=0;a=M,M=M+16|0,r=a,s=!0&268435456==(2013265920&(e|=0)|0),o=-2130706433&e|134217728,i[(u=n|=0)>>2]=s?t:0,i[u+4>>2]=s?o:0,s?(e=0|Ee(0|t,0|e,56),w(),i[r>>2]=0,t=0|k(t,o,7&e,r),e=0|w()):(t=0,e=0),i[(u=n+8|0)>>2]=t,i[u+4>>2]=e,M=a},_getH3UnidirectionalEdge:function(t,e,n,r){var o,a,s=0,u=0,c=0,l=0,h=0;if(a=M,M=M+16|0,o=a,!(0|Xt(t|=0,e|=0,n|=0,r|=0)))return l=0,x(0|(c=0)),M=a,0|l;for(c=-2130706433&e,s=(s=0==(0|kt(t,e)))?1:2;i[o>>2]=0,u=s+1|0,!((0|(h=0|k(t,e,s,o)))==(0|n)&(0|w())==(0|r));){if(!(u>>>0<7)){s=0,t=0,l=6;break}s=u}return 6==(0|l)?(x(0|s),M=a,0|t):(h=0|Oe(0|s,0,56),l=0|c|w()|268435456,h|=t,x(0|l),M=a,0|h)},_getH3UnidirectionalEdgeBoundary:Jt,_getH3UnidirectionalEdgesFromHexagon:function(t,e,n){n|=0;var r,o=0;r=0==(0|kt(t|=0,e|=0)),e&=-2130706433,i[(o=n)>>2]=r?t:0,i[o+4>>2]=r?285212672|e:0,i[(o=n+8|0)>>2]=t,i[o+4>>2]=301989888|e,i[(o=n+16|0)>>2]=t,i[o+4>>2]=318767104|e,i[(o=n+24|0)>>2]=t,i[o+4>>2]=335544320|e,i[(o=n+32|0)>>2]=t,i[o+4>>2]=352321536|e,i[(n=n+40|0)>>2]=t,i[n+4>>2]=369098752|e},_getOriginH3IndexFromUnidirectionalEdge:function(t,e){var n;return t|=0,x(0|((n=!0&268435456==(2013265920&(e|=0)|0))?-2130706433&e|134217728:0)),0|(n?t:0)},_getPentagonIndexes:qt,_getRes0Indexes:function(t){t|=0;var e=0,n=0,r=0;e=0;do{Oe(0|e,0,45),r=134225919|w(),i[(n=t+(e<<3)|0)>>2]=-1,i[n+4>>2]=r,e=e+1|0}while(122!=(0|e))},_h3Distance:function(t,e,n,r){var i,o,a;return n|=0,r|=0,a=M,M=M+32|0,o=a,t=0==(0|$t(t|=0,e|=0,t,e,i=a+12|0))&&0==(0|$t(t,e,n,r,o))?0|ft(i,o):-1,M=a,0|t},_h3GetBaseCell:Mt,_h3GetFaces:function t(e,n,r){r|=0;var o,a=0,s=0,u=0,c=0,l=0,h=0,f=0,p=0;o=M,M=M+128|0,f=o+112|0,u=o+96|0,p=o,s=0|Ee(0|(e|=0),0|(n|=0),52),w(),l=15&s,i[f>>2]=l,c=0|Ee(0|e,0|n,45),w(),c&=127;t:do{if(0|D(c)){if(0|l)for(a=1;;){if(!(0==((h=0|Oe(7,0,3*(15-a|0)|0))&e|0)&0==((0|w())&n|0))){s=0;break t}if(!(a>>>0>>0))break;a=a+1|0}if(!(1&s))return h=0|Oe(l+1|0,0,52),p=0|w()|-15728641&n,t((h|e)&~(f=0|Oe(7,0,3*(14-l|0)|0)),p&~(0|w()),r),void(M=o);s=1}else s=0}while(0);Vt(e,n,u),s?(bt(u,f,p),h=5):(Ot(u,f,p),h=6);t:do{if(0|D(c))if(l)for(a=1;;){if(!(0==((c=0|Oe(7,0,3*(15-a|0)|0))&e|0)&0==((0|w())&n|0))){a=8;break t}if(!(a>>>0>>0)){a=20;break}a=a+1|0}else a=20;else a=8}while(0);if(Pe(0|r,-1,0|a),s){s=0;do{for(wt(u=p+(s<<4)|0,0|i[f>>2]),u=0|i[u>>2],a=0;!(-1==(0|(l=0|i[(c=r+(a<<2)|0)>>2]))|(0|l)==(0|u));)a=a+1|0;i[c>>2]=u,s=s+1|0}while((0|s)!=(0|h))}else{s=0;do{for(xt(u=p+(s<<4)|0,0|i[f>>2],0,1),u=0|i[u>>2],a=0;!(-1==(0|(l=0|i[(c=r+(a<<2)|0)>>2]))|(0|l)==(0|u));)a=a+1|0;i[c>>2]=u,s=s+1|0}while((0|s)!=(0|h))}M=o},_h3GetResolution:function(t,e){return e=0|Ee(0|(t|=0),0|(e|=0),52),w(),15&e|0},_h3IndexesAreNeighbors:Xt,_h3IsPentagon:kt,_h3IsResClassIII:function(t,e){return e=0|Ee(0|(t|=0),0|(e|=0),52),w(),1&e|0},_h3IsValid:It,_h3Line:function(t,e,n,r,o){n|=0,r|=0,o|=0;var a,s=0,c=0,l=0,h=0,f=0,p=0,d=0,A=0,g=0,m=0,y=0,v=0,_=0,b=0,x=0,w=0,E=0;if(a=M,M=M+48|0,c=a+12|0,w=a,0==(0|$t(t|=0,e|=0,t,e,s=a+24|0))&&0==(0|$t(t,e,n,r,c))){if((0|(x=0|ft(s,c)))<0)return M=a,0|(w=x);for(i[s>>2]=0,i[s+4>>2]=0,i[s+8>>2]=0,i[c>>2]=0,i[c+4>>2]=0,i[c+8>>2]=0,$t(t,e,t,e,s),$t(t,e,n,r,c),At(s),At(c),x?(g=+(0|x),b=s,n=p=0|i[s>>2],r=d=0|i[(v=s+4|0)>>2],s=A=0|i[(_=s+8|0)>>2],m=+((0|i[c>>2])-p|0)/g,y=+((0|i[c+4>>2])-d|0)/g,g=+((0|i[c+8>>2])-A|0)/g):(v=r=s+4|0,_=A=s+8|0,b=s,n=0|i[s>>2],r=0|i[r>>2],s=0|i[A>>2],m=0,y=0,g=0),i[w>>2]=n,i[(A=w+4|0)>>2]=r,i[(d=w+8|0)>>2]=s,p=0;;){E=m*(h=+(0|p))+ +(0|n),l=y*h+ +(0|i[v>>2]),h=g*h+ +(0|i[_>>2]),r=~~+Te(+E),c=~~+Te(+l),n=~~+Te(+h),E=+u(+(+(0|r)-E)),l=+u(+(+(0|c)-l)),h=+u(+(+(0|n)-h));do{if(!(E>l&E>h)){if(f=0-r|0,l>h){s=f-n|0;break}s=c,n=f-c|0;break}r=0-(c+n)|0,s=c}while(0);if(i[w>>2]=r,i[A>>2]=s,i[d>>2]=n,gt(w),te(t,e,w,o+(p<<3)|0),(0|p)==(0|x))break;p=p+1|0,n=0|i[b>>2]}return M=a,0|(w=0)}return M=a,0|(w=-1)},_h3LineSize:function(t,e,n,r){var i,o,a;return n|=0,r|=0,a=M,M=M+32|0,o=a,t=0==(0|$t(t|=0,e|=0,t,e,i=a+12|0))&&0==(0|$t(t,e,n,r,o))?0|ft(i,o):-1,M=a,(t>>>31^1)+t|0},_h3SetToLinkedGeo:function(t,e,n){n|=0;var r,o,a,s=0;if(a=M,M=M+32|0,r=a,function(t,e,n){t|=0,n|=0;var r,o,a=0,s=0,u=0,c=0,l=0;if(o=M,M=M+176|0,r=o,(0|(e|=0))<1)return ce(n,0,0),void(M=o);c=0|Ee(0|i[(c=t)>>2],0|i[c+4>>2],52),w(),ce(n,(0|e)>6?e:6,15&c),c=0;do{if(Wt(0|i[(a=t+(c<<3)|0)>>2],0|i[a+4>>2],r),(0|(a=0|i[r>>2]))>0){l=0;do{u=r+8+(l<<4)|0,(s=0|de(n,a=r+8+(((0|(l=l+1|0))%(0|a)|0)<<4)|0,u))?fe(n,s):pe(n,u,a),a=0|i[r>>2]}while((0|l)<(0|a))}c=c+1|0}while((0|c)!=(0|e));M=o}(t|=0,e|=0,o=a+16|0),i[n>>2]=0,i[n+4>>2]=0,i[n+8>>2]=0,!(t=0|he(o)))return Kt(n),le(o),void(M=a);do{e=0|Zt(n);do{Qt(e,t),s=t+16|0,i[r>>2]=i[s>>2],i[r+4>>2]=i[s+4>>2],i[r+8>>2]=i[s+8>>2],i[r+12>>2]=i[s+12>>2],fe(o,t),t=0|Ae(o,r)}while(0!=(0|t));t=0|he(o)}while(0!=(0|t));Kt(n),le(o),M=a},_h3ToCenterChild:function(t,e,n){n|=0;var r=0,i=0;if(r=0|Ee(0|(t|=0),0|(e|=0),52),w(),(0|n)<16&(0|(r&=15))<=(0|n)){if((0|r)!=(0|n)&&(t|=i=0|Oe(0|n,0,52),e=0|w()|-15728641&e,(0|r)<(0|n)))do{i=0|Oe(7,0,3*(14-r|0)|0),r=r+1|0,t&=~i,e&=~(0|w())}while((0|r)<(0|n))}else e=0,t=0;return x(0|e),0|t},_h3ToChildren:Rt,_h3ToGeo:Ht,_h3ToGeoBoundary:Wt,_h3ToParent:Bt,_h3UnidirectionalEdgeIsValid:function(t,e){var n=0;if(!(!0&268435456==(2013265920&(e|=0)|0)))return 0|(n=0);switch(n=0|Ee(0|(t|=0),0|e,56),w(),7&n){case 0:case 7:return 0|(n=0)}return!0&16777216==(117440512&e|0)&0!=(0|kt(t,n=-2130706433&e|134217728))?0|(n=0):0|(n=0|It(t,n))},_hexAreaKm2:function(t){return+ +o[20496+((t|=0)<<3)>>3]},_hexAreaM2:function(t){return+ +o[20624+((t|=0)<<3)>>3]},_hexRing:function(t,e,n,r){t|=0,e|=0,r|=0;var o,a=0,s=0,u=0,c=0,l=0,h=0,f=0;if(o=M,M=M+16|0,f=o,!(n|=0))return i[(f=r)>>2]=t,i[f+4>>2]=e,M=o,0|(f=0);i[f>>2]=0;t:do{if(0|kt(t,e))t=1;else{if(s=(0|n)>0){a=0,h=t;do{if(0==(0|(h=0|k(h,e,4,f)))&0==(0|(e=0|w()))){t=2;break t}if(a=a+1|0,0|kt(h,e)){t=1;break t}}while((0|a)<(0|n));if(i[(l=r)>>2]=h,i[l+4>>2]=e,l=n+-1|0,s){s=0,u=1,a=h,t=e;do{if(0==(0|(a=0|k(a,t,2,f)))&0==(0|(t=0|w()))){t=2;break t}if(i[(c=r+(u<<3)|0)>>2]=a,i[c+4>>2]=t,u=u+1|0,0|kt(a,t)){t=1;break t}s=s+1|0}while((0|s)<(0|n));c=0,s=u;do{if(0==(0|(a=0|k(a,t,3,f)))&0==(0|(t=0|w()))){t=2;break t}if(i[(u=r+(s<<3)|0)>>2]=a,i[u+4>>2]=t,s=s+1|0,0|kt(a,t)){t=1;break t}c=c+1|0}while((0|c)<(0|n));u=0;do{if(0==(0|(a=0|k(a,t,1,f)))&0==(0|(t=0|w()))){t=2;break t}if(i[(c=r+(s<<3)|0)>>2]=a,i[c+4>>2]=t,s=s+1|0,0|kt(a,t)){t=1;break t}u=u+1|0}while((0|u)<(0|n));u=0;do{if(0==(0|(a=0|k(a,t,5,f)))&0==(0|(t=0|w()))){t=2;break t}if(i[(c=r+(s<<3)|0)>>2]=a,i[c+4>>2]=t,s=s+1|0,0|kt(a,t)){t=1;break t}u=u+1|0}while((0|u)<(0|n));u=0;do{if(0==(0|(a=0|k(a,t,4,f)))&0==(0|(t=0|w()))){t=2;break t}if(i[(c=r+(s<<3)|0)>>2]=a,i[c+4>>2]=t,s=s+1|0,0|kt(a,t)){t=1;break t}u=u+1|0}while((0|u)<(0|n));for(u=0;;){if(0==(0|(a=0|k(a,t,6,f)))&0==(0|(t=0|w()))){t=2;break t}if((0|u)!=(0|l)){if(i[(c=r+(s<<3)|0)>>2]=a,i[c+4>>2]=t,0|kt(a,t)){t=1;break t}s=s+1|0}if((0|(u=u+1|0))>=(0|n)){u=h,s=e;break}}}else u=h,a=h,s=e,t=e}else i[(u=r)>>2]=t,i[u+4>>2]=e,u=t,a=t,s=e,t=e;t=1&((0|u)!=(0|a)|(0|s)!=(0|t))}}while(0);return M=o,0|(f=t)},_i64Subtract:_e,_kRing:I,_kRingDistances:function(t,e,n,r,i){var o;if(0|B(t|=0,e|=0,n|=0,r|=0,i|=0)){if(Pe(0|r,0,(o=1+(0|v(3*n|0,n+1|0))|0)<<3|0),0|i)return Pe(0|i,0,o<<2|0),void R(t,e,n,r,i,o,0);(i=0|ve(o,4))&&(R(t,e,n,r,i,o,0),ye(i))}},_llvm_minnum_f64:Se,_llvm_round_f64:Te,_malloc:me,_maxFaceCount:function(t,e){var n=0,r=0;if(r=0|Ee(0|(t|=0),0|(e|=0),45),w(),!(0|D(127&r)))return 0|(r=2);if(r=0|Ee(0|t,0|e,52),w(),!(r&=15))return 0|(r=5);for(n=1;;){if(!(0==((0|Oe(7,0,3*(15-n|0)|0))&t|0)&0==((0|w())&e|0))){n=2,t=6;break}if(!(n>>>0>>0)){n=5,t=6;break}n=n+1|0}return 6==(0|t)?0|n:0},_maxH3ToChildrenSize:function(t,e,n){return n|=0,t=0|Ee(0|(t|=0),0|(e|=0),52),w(),(0|n)<16&(0|(t&=15))<=(0|n)?0|(n=0|ee(7,n-t|0)):0|(n=0)},_maxKringSize:function(t){return 1+(0|v(3*(t|=0)|0,t+1|0))|0},_maxPolyfillSize:function(t,e){e|=0;var n,r=0,o=0,a=0,s=0,u=0;if(n=M,M=M+48|0,a=n+8|0,o=n,s=0|i[(u=t|=0)+4>>2],i[(r=o)>>2]=i[u>>2],i[r+4>>2]=s,re(o,a),a=0|W(a,e),e=0|i[o>>2],(0|(o=0|i[t+8>>2]))<=0)return M=n,0|(u=(u=(s=(0|a)<(0|(u=e)))?u:a)+12|0);r=0|i[t+12>>2],t=0;do{e=(0|i[r+(t<<3)>>2])+e|0,t=t+1|0}while((0|t)<(0|o));return M=n,0|(u=(u=(u=(0|a)<(0|e))?e:a)+12|0)},_maxUncompactSize:function(t,e,n){t|=0,n|=0;var r=0,o=0,a=0,s=0;if((0|(e|=0))<=0)return 0|(n=0);if((0|n)>=16){for(r=0;;){if(!(0==(0|i[(s=t+(r<<3)|0)>>2])&0==(0|i[s+4>>2]))){r=-1,o=13;break}if((0|(r=r+1|0))>=(0|e)){r=0,o=13;break}}if(13==(0|o))return 0|r}r=0,s=0;t:for(;;){a=0|i[(o=t+(s<<3)|0)>>2],o=0|i[o+4>>2];do{if(!(0==(0|a)&0==(0|o))){if(o=0|Ee(0|a,0|o,52),w(),(0|(o&=15))>(0|n)){r=-1,o=13;break t}if((0|o)==(0|n)){r=r+1|0;break}r=(0|ee(7,n-o|0))+r|0;break}}while(0);if((0|(s=s+1|0))>=(0|e)){o=13;break}}return 13==(0|o)?0|r:0},_memcpy:Ce,_memset:Pe,_numHexagons:function(t){var e;return t=0|i[(e=21008+((t|=0)<<3)|0)>>2],x(0|i[e+4>>2]),0|t},_pentagonIndexCount:function(){return 12},_pointDistKm:Ct,_pointDistM:function(t,e){t|=0;var n,r,i,a=0;return r=+o[(e|=0)>>3],n=+o[t>>3],a=(i=+f(.5*(r-n)))*i+(a=+f(.5*(+o[e+8>>3]-+o[t+8>>3])))*(+h(+r)*+h(+n)*a),2*+m(+ +c(+a),+ +c(+(1-a)))*6371.007180918475*1e3},_pointDistRads:function(t,e){t|=0;var n,r,i,a=0;return r=+o[(e|=0)>>3],n=+o[t>>3],a=(i=+f(.5*(r-n)))*i+(a=+f(.5*(+o[e+8>>3]-+o[t+8>>3])))*(+h(+r)*+h(+n)*a),2*+m(+ +c(+a),+ +c(+(1-a)))},_polyfill:function(t,e,n){var r,o=0,a=0,s=0,u=0,c=0;if(r=M,M=M+48|0,o=r+8|0,a=r,0|function(t,e,n){e|=0,n|=0;var r,o,a,s,u,c=0,l=0,h=0,f=0,p=0,d=0,A=0,g=0,m=0,y=0,v=0,_=0,b=0,x=0,O=0,S=0,T=0,C=0,P=0,I=0,k=0,D=0,j=0,F=0,z=0;u=M,M=M+112|0,o=u+80|0,d=u+72|0,a=u,s=u+56|0,(z=0|me(32+(i[(A=(t=t|0)+8|0)>>2]<<5)|0))||E(22848,22448,800,22456);if(ie(t,z),c=0|i[(h=t)+4>>2],i[(p=d)>>2]=i[h>>2],i[p+4>>2]=c,re(d,o),p=0|W(o,e),c=0|i[d>>2],(0|(h=0|i[A>>2]))>0){f=0|i[t+12>>2],l=0;do{c=(0|i[f+(l<<3)>>2])+c|0,l=l+1|0}while((0|l)!=(0|h))}if(l=0|ve(r=(p=(0|p)<(0|c)?c:p)+12|0,8),g=0|ve(r,8),i[o>>2]=0,F=0|i[(j=t)+4>>2],i[(c=d)>>2]=i[j>>2],i[c+4>>2]=F,0|(c=0|L(d,r,e,o,l,g)))return ye(l),ye(g),ye(z),M=u,0|(z=c);t:do{if((0|i[A>>2])>0){for(h=t+12|0,c=0;f=0|L((0|i[h>>2])+(c<<3)|0,r,e,o,l,g),c=c+1|0,!(0|f);)if((0|c)>=(0|i[A>>2]))break t;return ye(l),ye(g),ye(z),M=u,0|(z=f)}}while(0);(0|p)>-12&&Pe(0|g,0,((0|r)>1?r:1)<<3|0);t:do{if((0|i[o>>2])>0){F=((0|r)<0)<<31>>31,C=l,P=g,I=l,k=l,D=g,j=l,c=l,x=l,O=g,S=g,T=g,l=g;e:for(;;){for(b=0|i[o>>2],v=0,_=0,h=0;;){p=(f=a)+56|0;do{i[f>>2]=0,f=f+4|0}while((0|f)<(0|p));if(d=0|i[(e=C+(v<<3)|0)>>2],e=0|i[e+4>>2],0|B(d,e,1,a,0)){p=(f=a)+56|0;do{i[f>>2]=0,f=f+4|0}while((0|f)<(0|p));0|(f=0|ve(7,4))&&(R(d,e,1,a,f,7,0),ye(f))}y=0;do{g=0|i[(m=a+(y<<3)|0)>>2],m=0|i[m+4>>2];n:do{if(!(0==(0|g)&0==(0|m))){if(d=0|we(0|g,0|m,0|r,0|F),w(),e=0|i[(p=f=n+(d<<3)|0)>>2],p=0|i[p+4>>2],!(0==(0|e)&0==(0|p)))for(A=0;;){if((0|A)>(0|r))break e;if((0|e)==(0|g)&(0|p)==(0|m))break n;if(e=0|i[(p=f=n+((d=(d+1|0)%(0|r)|0)<<3)|0)>>2],p=0|i[p+4>>2],0==(0|e)&0==(0|p))break;A=A+1|0}0==(0|g)&0==(0|m)||(Ht(g,m,s),0|oe(t,z,s)&&(i[(A=f)>>2]=g,i[A+4>>2]=m,i[(A=P+(h<<3)|0)>>2]=g,i[A+4>>2]=m,h=h+1|0))}}while(0);y=y+1|0}while(y>>>0<7);if((0|(_=_+1|0))>=(0|b))break;v=v+1|0}if((0|b)>0&&Pe(0|I,0,b<<3|0),i[o>>2]=h,!((0|h)>0))break t;g=l,m=T,y=j,v=S,_=O,b=P,l=x,T=c,S=k,O=I,x=g,c=m,j=D,D=y,k=v,I=_,P=C,C=b}return ye(k),ye(D),ye(z),M=u,0|(z=-1)}c=g}while(0);return ye(z),ye(l),ye(c),M=u,0|(z=0)}(t|=0,e|=0,n|=0)){if(s=0|i[(c=t)+4>>2],i[(u=a)>>2]=i[c>>2],i[u+4>>2]=s,re(a,o),u=0|W(o,e),e=0|i[a>>2],(0|(s=0|i[t+8>>2]))>0){a=0|i[t+12>>2],o=0;do{e=(0|i[a+(o<<3)>>2])+e|0,o=o+1|0}while((0|o)!=(0|s))}(0|(e=(0|u)<(0|e)?e:u))<=-12||Pe(0|n,0,8+(((0|(c=e+11|0))>0?c:0)<<3)|0),M=r}else M=r},_res0IndexCount:function(){return 122},_round:Me,_sbrk:Ie,_sizeOfCoordIJ:function(){return 8},_sizeOfGeoBoundary:function(){return 168},_sizeOfGeoCoord:function(){return 16},_sizeOfGeoPolygon:function(){return 16},_sizeOfGeofence:function(){return 8},_sizeOfH3Index:function(){return 8},_sizeOfLinkedGeoPolygon:function(){return 12},_uncompact:function(t,e,n,r,o){t|=0,n|=0,r|=0,o|=0;var a=0,s=0,u=0,c=0,l=0,h=0;if((0|(e|=0))<=0)return 0|(o=0);if((0|o)>=16){for(a=0;;){if(!(0==(0|i[(h=t+(a<<3)|0)>>2])&0==(0|i[h+4>>2]))){a=14;break}if((0|(a=a+1|0))>=(0|e)){s=0,a=16;break}}if(14==(0|a))return 0|((0|r)>0?-2:-1);if(16==(0|a))return 0|s}a=0,h=0;t:for(;;){s=0|i[(u=l=t+(h<<3)|0)>>2],u=0|i[u+4>>2];do{if(!(0==(0|s)&0==(0|u))){if((0|a)>=(0|r)){s=-1,a=16;break t}if(c=0|Ee(0|s,0|u,52),w(),(0|(c&=15))>(0|o)){s=-2,a=16;break t}if((0|c)==(0|o)){i[(l=n+(a<<3)|0)>>2]=s,i[l+4>>2]=u,a=a+1|0;break}if((0|(s=(0|ee(7,o-c|0))+a|0))>(0|r)){s=-1,a=16;break t}Rt(0|i[l>>2],0|i[l+4>>2],o,n+(a<<3)|0),a=s}}while(0);if((0|(h=h+1|0))>=(0|e)){s=0,a=16;break}}return 16==(0|a)?0|s:0},establishStackSpace:function(t,e){M=t|=0},stackAlloc:function(t){var e;return e=M,M=(M=M+(t|=0)|0)+15&-16,0|e},stackRestore:function(t){M=t|=0},stackSave:function(){return 0|M}}}({Math:Math,Int8Array:Int8Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Float32Array:Float32Array,Float64Array:Float64Array},{a:ut,b:function(t){c=t},c:l,d:function(t,e,n,r){ut("Assertion failed: "+A(t)+", at: "+[e?A(e):"unknown filename",n,r?A(r):"unknown function"])},e:function(t){return n.___errno_location&&(_[n.___errno_location()>>2]=t),t},f:q,g:function(t,e,n){y.set(y.subarray(e,e+n),t)},h:function(t){var e=q();if(t>2130706432)return!1;for(var n=Math.max(e,16777216);n>0]=e;break;case"i16":v[t>>1]=e;break;case"i32":_[t>>2]=e;break;case"i64":z=[e>>>0,(F=e,+I(F)>=1?F>0?(0|k(+R(F/4294967296),4294967295))>>>0:~~+B((F-+(~~F>>>0))/4294967296)>>>0:0)],_[t>>2]=z[0],_[t+4>>2]=z[1];break;case"float":b[t>>2]=e;break;case"double":x[t>>3]=e;break;default:ut("invalid type for setValue: "+n)}},n.getValue=function(t,e,n){switch("*"===(e=e||"i8").charAt(e.length-1)&&(e="i32"),e){case"i1":case"i8":return m[t>>0];case"i16":return v[t>>1];case"i32":case"i64":return _[t>>2];case"float":return b[t>>2];case"double":return x[t>>3];default:ut("invalid type for getValue: "+e)}return null},n.getTempRet0=l,U){G(U)||(Q=U,U=n.locateFile?n.locateFile(Q,a):a+Q),L++,n.monitorRunDependencies&&n.monitorRunDependencies(L);var rt=function(t){t.byteLength&&(t=new Uint8Array(t)),y.set(t,8),n.memoryInitializerRequest&&delete n.memoryInitializerRequest.response,function(t){if(L--,n.monitorRunDependencies&&n.monitorRunDependencies(L),0==L&&(null!==D&&(clearInterval(D),D=null),j)){var e=j;j=null,e()}}()},it=function(){i(U,rt,(function(){throw"could not load memory initializer "+U}))},ot=Z(U);if(ot)rt(ot.buffer);else if(n.memoryInitializerRequest){var at=function(){var t=n.memoryInitializerRequest,e=t.response;if(200!==t.status&&0!==t.status){var r=Z(n.memoryInitializerRequestURL);if(!r)return console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+t.status+", retrying "+U),void it();e=r.buffer}rt(e)};n.memoryInitializerRequest.response?setTimeout(at,0):n.memoryInitializerRequest.addEventListener("load",at)}else it()}function st(t){function e(){K||(K=!0,h||(S(C),S(P),n.onRuntimeInitialized&&n.onRuntimeInitialized(),function(){if(n.postRun)for("function"==typeof n.postRun&&(n.postRun=[n.postRun]);n.postRun.length;)t=n.postRun.shift(),M.unshift(t);var t;S(M)}()))}t=t||o,L>0||(!function(){if(n.preRun)for("function"==typeof n.preRun&&(n.preRun=[n.preRun]);n.preRun.length;)t=n.preRun.shift(),T.unshift(t);var t;S(T)}(),L>0||(n.setStatus?(n.setStatus("Running..."),setTimeout((function(){setTimeout((function(){n.setStatus("")}),1),e()}),1)):e()))}function ut(t){throw n.onAbort&&n.onAbort(t),s(t+=""),u(t),h=!0,"abort("+t+"). Build with -s ASSERTIONS=1 for more info."}if(j=function t(){K||st(),K||(j=t)},n.run=st,n.abort=ut,n.preInit)for("function"==typeof n.preInit&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.pop()();return st(),t}("object"==typeof en?en:{}),nn="number",rn={};[["sizeOfH3Index",nn],["sizeOfGeoCoord",nn],["sizeOfGeoBoundary",nn],["sizeOfGeoPolygon",nn],["sizeOfGeofence",nn],["sizeOfLinkedGeoPolygon",nn],["sizeOfCoordIJ",nn],["h3IsValid","number",["number","number"]],["geoToH3","number",[nn,nn,"number"]],["h3ToGeo",null,["number","number",nn]],["h3ToGeoBoundary",null,["number","number",nn]],["maxKringSize",nn,[nn]],["kRing",null,["number","number",nn,nn]],["kRingDistances",null,["number","number",nn,nn,nn]],["hexRing",null,["number","number",nn,nn]],["maxPolyfillSize",nn,[nn,"number"]],["polyfill",null,[nn,"number",nn]],["h3SetToLinkedGeo",null,[nn,nn,nn]],["destroyLinkedPolygon",null,[nn]],["compact",nn,[nn,nn,nn]],["uncompact",nn,[nn,nn,nn,nn,"number"]],["maxUncompactSize",nn,[nn,nn,"number"]],["h3IsPentagon","number",["number","number"]],["h3IsResClassIII","number",["number","number"]],["h3GetBaseCell",nn,["number","number"]],["h3GetResolution",nn,["number","number"]],["maxFaceCount",nn,["number","number"]],["h3GetFaces",null,["number","number",nn]],["h3ToParent","number",["number","number","number"]],["h3ToChildren",null,["number","number","number",nn]],["h3ToCenterChild","number",["number","number","number"]],["maxH3ToChildrenSize",nn,["number","number","number"]],["h3IndexesAreNeighbors","number",["number","number","number","number"]],["getH3UnidirectionalEdge","number",["number","number","number","number"]],["getOriginH3IndexFromUnidirectionalEdge","number",["number","number"]],["getDestinationH3IndexFromUnidirectionalEdge","number",["number","number"]],["h3UnidirectionalEdgeIsValid","number",["number","number"]],["getH3IndexesFromUnidirectionalEdge",null,["number","number",nn]],["getH3UnidirectionalEdgesFromHexagon",null,["number","number",nn]],["getH3UnidirectionalEdgeBoundary",null,["number","number",nn]],["h3Distance",nn,["number","number","number","number"]],["h3Line",nn,["number","number","number","number",nn]],["h3LineSize",nn,["number","number","number","number"]],["experimentalH3ToLocalIj",nn,["number","number","number","number",nn]],["experimentalLocalIjToH3",nn,["number","number",nn,nn]],["hexAreaM2",nn,["number"]],["hexAreaKm2",nn,["number"]],["edgeLengthM",nn,["number"]],["edgeLengthKm",nn,["number"]],["pointDistM",nn,[nn,nn]],["pointDistKm",nn,[nn,nn]],["pointDistRads",nn,[nn,nn]],["cellAreaM2",nn,["number","number"]],["cellAreaKm2",nn,["number","number"]],["cellAreaRads2",nn,["number","number"]],["exactEdgeLengthM",nn,["number","number"]],["exactEdgeLengthKm",nn,["number","number"]],["exactEdgeLengthRads",nn,["number","number"]],["numHexagons",nn,["number"]],["getRes0Indexes",null,[nn]],["res0IndexCount",nn],["getPentagonIndexes",null,[nn,nn]],["pentagonIndexCount",nn]].forEach((function(t){rn[t[0]]=en.cwrap.apply(en,t)}));var on=rn.sizeOfH3Index(),an=rn.sizeOfGeoCoord(),sn=rn.sizeOfGeoBoundary(),un=(rn.sizeOfGeoPolygon(),rn.sizeOfGeofence(),rn.sizeOfLinkedGeoPolygon()),cn=(rn.sizeOfCoordIJ(),"m"),ln="km";function hn(t){if("number"!=typeof t||t<0||t>15||Math.floor(t)!==t)throw new Error("Invalid resolution: "+t)}var fn=/[^0-9a-fA-F]/;function pn(t){if(Array.isArray(t)&&2===t.length&&Number.isInteger(t[0])&&Number.isInteger(t[1]))return t;if("string"!=typeof t||fn.test(t))return[0,0];var e=parseInt(t.substring(0,t.length-8),16);return[parseInt(t.substring(t.length-8),16),e]}function dn(t){if(t>=0)return t.toString(16);var e=gn(8,(t&=2147483647).toString(16));return e=(parseInt(e[0],16)+8).toString(16)+e.substring(1)}function An(t,e){return dn(e)+gn(8,dn(t))}function gn(t,e){for(var n=t-e.length,r="",i=0;i=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function zn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n180?i[0]-=360:o<-180&&(i[0]+=360)}}catch(t){r.e(t)}finally{r.f()}}function Nn(t,e,n){var r=Sn(t),i=E()(r,2),o=i[0],a=i[1],s=e.length;Un(e,a);for(var u=e[0]===e[s-1]?s-1:s,c=0;c1&&void 0!==arguments[1]?arguments[1]:1,n=Tn(t,!0);return 1!==e?Nn(t,n,e):Un(n),n}var Hn=jn(jn({},y.a.defaultProps),{},{highPrecision:"auto",coverage:{type:"number",min:0,max:1,value:1},centerHexagon:null,getHexagon:{type:"accessor",value:function(t){return t.hexagon}},extruded:!0}),Wn=function(t){a()(n,t);var e=Ln(n);function n(){return i()(this,n),e.apply(this,arguments)}return g()(n,[{key:"initializeState",value:function(){n._checkH3Lib(),this.state={edgeLengthKM:0,resolution:-1}}},{key:"shouldUpdateState",value:function(t){var e=t.changeFlags;return this._shouldUseHighPrecision()?e.propsOrDataChanged:e.somethingChanged}},{key:"updateState",value:function(t){var e=t.props,n=t.changeFlags;if(!0!==e.highPrecision&&(n.dataChanged||n.updateTriggersChanged&&n.updateTriggersChanged.getHexagon)){var r=this._calculateH3DataProps();this.setState(r)}this._updateVertices(this.context.viewport)}},{key:"_calculateH3DataProps",value:function(){var t,e,n,r,i=-1,o=!1,a=!1,s=Object(In.a)(this.props.data),u=s.iterable,c=s.objectInfo,l=Fn(u);try{for(l.s();!(t=l.n()).done;){var h=t.value;c.index++;var f=this.props.getHexagon(h,c),p=(e=void 0,n=void 0,r=void 0,e=pn(f),n=e[0],r=e[1],rn.h3IsValid(n,r)?rn.h3GetResolution(n,r):-1);if(i<0){if(i=p,!this.props.highPrecision)break}else if(i!==p){a=!0;break}if(On(f)){o=!0;break}}}catch(t){l.e(t)}finally{l.f()}return{resolution:i,edgeLengthKM:i>=0?Pn(i,"km"):0,hasMultipleRes:a,hasPentagon:o}}},{key:"_shouldUseHighPrecision",value:function(){if("auto"===this.props.highPrecision){var t=this.state,e=t.resolution,n=t.hasPentagon,r=t.hasMultipleRes,i=this.context.viewport;return Boolean(null==i?void 0:i.resolution)||r||n||e>=0&&e<=5}return this.props.highPrecision}},{key:"_updateVertices",value:function(t){if(!this._shouldUseHighPrecision()){var e=this.state,n=e.resolution,r=e.edgeLengthKM,i=e.centerHex;if(!(n<0)){var o=this.props.centerHexagon||function(t,e,n){var r=en._malloc(an);en.HEAPF64.set([t,e].map(Mn),r/8);var i=yn(rn.geoToH3(r,n));return en._free(r),i}(t.latitude,t.longitude,n);if(i!==o){if(i){var a=(s=o,u=pn(i),c=u[0],l=u[1],h=pn(s),f=h[0],p=h[1],rn.h3Distance(c,l,f,p));if(a>=0&&a*r<10)return}var s,u,c,l,h,f,p,d=t.distanceScales.unitsPerMeter,A=Vn(o),g=Sn(o),m=E()(g,2),y=m[0],v=m[1],_=t.projectFlat([v,y]),b=E()(_,2),x=b[0],w=b[1];A=A.map((function(e){var n=t.projectFlat(e);return[(n[0]-x)/d[0],(n[1]-w)/d[1]]})),this.setState({centerHex:o,vertices:A})}}}}},{key:"renderLayers",value:function(){return this._shouldUseHighPrecision()?this._renderPolygonLayer():this._renderColumnLayer()}},{key:"_getForwardProps",value:function(){var t=this.props,e=t.elevationScale,n=t.material,r=t.coverage,i=t.extruded,o=t.wireframe,a=t.stroked,s=t.filled,u=t.lineWidthUnits,c=t.lineWidthScale,l=t.lineWidthMinPixels,h=t.lineWidthMaxPixels,f=t.getFillColor,p=t.getElevation,d=t.getLineColor,A=t.getLineWidth,g=t.transitions,m=t.updateTriggers;return{elevationScale:e,extruded:i,coverage:r,wireframe:o,stroked:a,filled:s,lineWidthUnits:u,lineWidthScale:c,lineWidthMinPixels:l,lineWidthMaxPixels:h,material:n,getElevation:p,getFillColor:f,getLineColor:d,getLineWidth:A,transitions:g,updateTriggers:{getFillColor:m.getFillColor,getElevation:m.getElevation,getLineColor:m.getLineColor,getLineWidth:m.getLineWidth}}}},{key:"_renderPolygonLayer",value:function(){var t=this.props,e=t.data,n=t.getHexagon,r=t.updateTriggers,i=t.coverage,o=this.getSubLayerClass("hexagon-cell-hifi",y.a),a=this._getForwardProps();return a.updateTriggers.getPolygon=function(t,e){return null==t?e:"object"===Rn()(t)?jn(jn({},t),{},{coverage:e}):{getHexagon:t,coverage:e}}(r.getHexagon,i),new o(a,this.getSubLayerProps({id:"hexagon-cell-hifi",updateTriggers:a.updateTriggers}),{data:e,_normalize:!1,_windingOrder:"CCW",positionFormat:"XY",getPolygon:function(t,e){return function(t){var e,n=new Float64Array(2*t.length),r=0,i=Fn(t);try{for(i.s();!(e=i.n()).done;){var o=e.value;n[r++]=o[0],n[r++]=o[1]}}catch(t){i.e(t)}finally{i.f()}return n}(Vn(n(t,e),i))}})}},{key:"_renderColumnLayer",value:function(){var t=this.props,e=t.data,n=t.getHexagon,r=t.updateTriggers,i=this.getSubLayerClass("hexagon-cell",kn.a),o=this._getForwardProps();return o.updateTriggers.getPosition=r.getHexagon,new i(o,this.getSubLayerProps({id:"hexagon-cell",flatShading:!0,updateTriggers:o.updateTriggers}),{data:e,diskResolution:6,radius:1,vertices:this.state.vertices,getPosition:Gn.bind(null,n)})}}]),n}(m.a);function qn(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return Xn(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xn(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function Xn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0),Object(Ut.a)(e>=0),Object(Ut.a)(n>=0),this.radii=new rt.a(t,e,n),this.radiiSquared=new rt.a(t*t,e*e,n*n),this.radiiToTheFourth=new rt.a(t*t*t*t,e*e*e*e,n*n*n*n),this.oneOverRadii=new rt.a(0===t?0:1/t,0===e?0:1/e,0===n?0:1/n),this.oneOverRadiiSquared=new rt.a(0===t?0:1/(t*t),0===e?0:1/(e*e),0===n?0:1/(n*n)),this.minimumRadius=Math.min(t,e,n),this.maximumRadius=Math.max(t,e,n),0!==this.radiiSquared.z&&(this.squaredXOverSquaredZ=this.radiiSquared.x/this.radiiSquared.z),Object.freeze(this)}equals(t){return this===t||Boolean(t&&this.radii.equals(t.radii))}toString(){return this.radii.toString()}cartographicToCartesian(t,e=[0,0,0]){const n=Sr,r=Tr,[,,i]=t;this.geodeticSurfaceNormalCartographic(t,n),r.copy(this.radiiSquared).scale(n);const o=Math.sqrt(n.dot(r));return r.scale(1/o),n.scale(i),r.add(n),r.to(e)}cartesianToCartographic(t,e=[0,0,0]){Mr.from(t);const n=this.scaleToGeodeticSurface(Mr,Cr);if(!n)return;const r=this.geodeticSurfaceNormal(n,Sr),i=Pr;i.copy(Mr).subtract(n);const o=Math.atan2(r.y,r.x),a=Math.asin(r.z),s=Math.sign(mt.e(i,Mr))*mt.h(i);return pr([o,a,s],e,Nt.b._cartographicRadians?hr:Nt.i)}eastNorthUpToFixedFrame(t,e=new Zt.a){return Er(this,"east","north","up",t,e)}localFrameToFixedFrame(t,e,n,r,i=new Zt.a){return Er(this,t,e,n,r,i)}geocentricSurfaceNormal(t,e=[0,0,0]){return Or.from(t).normalize().to(e)}geodeticSurfaceNormalCartographic(t,e=[0,0,0]){const n=function(t,e=[]){return fr(t,e,Nt.b._cartographicRadians?hr:Nt.j)}(t),r=n[0],i=n[1],o=Math.cos(i);return Or.set(o*Math.cos(r),o*Math.sin(r),Math.sin(i)).normalize(),Or.to(e)}geodeticSurfaceNormal(t,e=[0,0,0]){return Or.from(t).scale(this.oneOverRadiiSquared).normalize().to(e)}scaleToGeodeticSurface(t,e){return function(t,e,n=[]){const{oneOverRadii:r,oneOverRadiiSquared:i,centerToleranceSquared:o}=e;dr.from(t);const a=dr.x,s=dr.y,u=dr.z,c=r.x,l=r.y,h=r.z,f=a*a*c*c,p=s*s*l*l,d=u*u*h*h,A=f+p+d,g=Math.sqrt(1/A);if(!Number.isFinite(g))return;const m=Ar;if(m.copy(t).scale(g),AYt);return dr.scale([x,w,E]).to(n)}(t,this,e)}scaleToGeocentricSurface(t,e=[0,0,0]){Cr.from(t);const n=Cr.x,r=Cr.y,i=Cr.z,o=this.oneOverRadiiSquared,a=1/Math.sqrt(n*n*o.x+r*r*o.y+i*i*o.z);return Cr.multiplyScalar(a).to(e)}transformPositionToScaledSpace(t,e=[0,0,0]){return Cr.from(t).scale(this.oneOverRadii).to(e)}transformPositionFromScaledSpace(t,e=[0,0,0]){return Cr.from(t).scale(this.radii).to(e)}getSurfaceNormalIntersectionWithZAxis(t,e=0,n=[0,0,0]){Object(Ut.a)(Object(Nt.d)(this.radii.x,this.radii.y,$t)),Object(Ut.a)(this.radii.z>0),Cr.from(t);const r=Cr.z*(1-this.squaredXOverSquaredZ);if(!(Math.abs(r)>=this.radii.z-e))return Cr.set(0,0,r).to(n)}}lr(Ir,"WGS84",new Ir(6378137,6378137,6356752.314245179));var Br=n(73),Rr=n(101),kr=n(19);class Lr{constructor(t,e,n){Object(cr.a)(this,"item",void 0),Object(cr.a)(this,"previous",void 0),Object(cr.a)(this,"next",void 0),this.item=t,this.previous=e,this.next=n}}class Dr{constructor(){Object(cr.a)(this,"head",null),Object(cr.a)(this,"tail",null),Object(cr.a)(this,"_length",0)}get length(){return this._length}add(t){const e=new Lr(t,this.tail,null);return this.tail?(this.tail.next=e,this.tail=e):(this.head=e,this.tail=e),++this._length,e}remove(t){t&&(t.previous&&t.next?(t.previous.next=t.next,t.next.previous=t.previous):t.previous?(t.previous.next=null,this.tail=t.previous):t.next?(t.next.previous=null,this.head=t.next):(this.head=null,this.tail=null),t.next=null,t.previous=null,--this._length)}splice(t,e){t!==e&&(this.remove(e),this._insert(t,e))}_insert(t,e){const n=t.next;t.next=e,this.tail===t?this.tail=e:n.previous=e,e.next=n,e.previous=t,++this._length}}function jr(t){return null!=t}class Fr{constructor(){Object(cr.a)(this,"_list",void 0),Object(cr.a)(this,"_sentinel",void 0),Object(cr.a)(this,"_trimTiles",void 0),this._list=new Dr,this._sentinel=this._list.add("sentinel"),this._trimTiles=!1}reset(){this._list.splice(this._list.tail,this._sentinel)}touch(t){const e=t._cacheNode;jr(e)&&this._list.splice(this._sentinel,e)}add(t,e,n){jr(e._cacheNode)||(e._cacheNode=this._list.add(e),n&&n(t,e))}unloadTile(t,e,n){const r=e._cacheNode;jr(r)&&(this._list.remove(r),e._cacheNode=void 0,n&&n(t,e))}unloadTiles(t,e){const n=this._trimTiles;this._trimTiles=!1;const r=this._list,i=1024*t.maximumMemoryUsage*1024,o=this._sentinel;let a=r.head;for(;a!==o&&(t.gpuMemoryUsageInBytes>i||n);){const n=a.item;a=a.next,this.unloadTile(t,n,e)}}trim(){this._trimTiles=!0}}const zr=new rt.a,Ur=new rt.a,Nr=new Jt([new Ht,new Ht,new Ht,new Ht,new Ht,new Ht]);function Gr(t,e){const{cameraDirection:n,cameraUp:r,height:i}=t,{metersPerUnit:o}=t.distanceScales,a=Hr(t,t.center),s=Ir.WGS84.eastNorthUpToFixedFrame(a),u=t.unprojectPosition(t.cameraPosition),c=Ir.WGS84.cartographicToCartesian(u,new rt.a),l=new rt.a(s.transformAsVector(new rt.a(n).scale(o))).normalize(),h=new rt.a(s.transformAsVector(new rt.a(r).scale(o))).normalize();!function(t){const e=t.getFrustumPlanes(),n=Vr(e.near,t.cameraPosition),r=Hr(t,n),i=Hr(t,t.cameraPosition,Ur);let o=0;Nr.planes[o++].fromPointNormal(r,zr.copy(r).subtract(i));for(const i in e){if("near"===i)continue;const a=Vr(e[i],n,Ur),s=Hr(t,a,Ur);Nr.planes[o++].fromPointNormal(s,zr.copy(r).subtract(s))}}(t);const f=t.constructor,{longitude:p,latitude:d,width:A,bearing:g,zoom:m}=t;return{camera:{position:c,direction:l,up:h},viewport:t,topDownViewport:new f({longitude:p,latitude:d,height:i,width:A,bearing:g,zoom:m,pitch:0}),height:i,cullingVolume:Nr,frameNumber:e,sseDenominator:1.15}}function Vr(t,e,n=new rt.a){const r=t.normal.dot(e);return n.copy(t.normal).scale(t.distance-r).add(e),n}function Hr(t,e,n=new rt.a){const r=t.unprojectPosition(e);return Ir.WGS84.cartographicToCartesian(r,n)}const Wr=new rt.a;function qr(t,e){if(t instanceof zt){const{halfAxes:n}=t,r=function(t){t.getColumn(0,Wr);const e=t.getColumn(1),n=t.getColumn(2),r=Wr.add(e).add(n);return r.len()}(n);return Math.log2(6356752.314245179/(r+e[2]))}if(t instanceof lt){const{radius:n}=t;return Math.log2(6356752.314245179/(n+e[2]))}if(t.width&&t.height){const{width:e,height:n}=t;return(Math.log2(6378137/e)+Math.log2(6378137/n))/2}return 1}function Xr(t,e,n){const r=Ir.WGS84.cartographicToCartesian([t.xmax,t.ymax,t.zmax],new rt.a),i=Math.sqrt(Math.pow(r[0]-n[0],2)+Math.pow(r[1]-n[1],2)+Math.pow(r[2]-n[2],2));return Math.log2(6356752.314245179/(i+e[2]))}const Jr=0,Zr=1,Qr=3,Kr=4,Yr=5,$r=1,ti=2,ei="empty",ni="scenegraph",ri="pointcloud",ii="mesh",oi="I3S",ai="TILES3D",si="geometricError",ui=1;function ci(t){return null!=t}const li=new rt.a,hi=new rt.a,fi=new rt.a;function pi(t,e,n){if(Object(Rr.a)(t,"3D Tile: boundingVolume must be defined"),t.box)return function(t,e,n){const r=new rt.a(t[0],t[1],t[2]);e.transform(r,r);let i=[];if(10===t.length){const e=t.slice(3,6),n=new xt.a;n.fromArray(t,6);const r=new rt.a([1,0,0]),o=new rt.a([0,1,0]),a=new rt.a([0,0,1]);r.transformByQuaternion(n),r.scale(e[0]),o.transformByQuaternion(n),o.scale(e[1]),a.transformByQuaternion(n),a.scale(e[2]),i=[...r.toArray(),...o.toArray(),...a.toArray()]}else i=[...t.slice(3,6),...t.slice(6,9),...t.slice(9,12)];const o=e.transformAsVector(i.slice(0,3)),a=e.transformAsVector(i.slice(3,6)),s=e.transformAsVector(i.slice(6,9)),u=new vt([o[0],o[1],o[2],a[0],a[1],a[2],s[0],s[1],s[2]]);if(ci(n))return n.center=r,n.halfAxes=u,n;return new zt(r,u)}(t.box,e,n);if(t.region){const[e,n,r,i,o,a]=t.region,s=Ir.WGS84.cartographicToCartesian([Object(Nt.c)(e),Object(Nt.c)(i),o],hi),u=Ir.WGS84.cartographicToCartesian([Object(Nt.c)(r),Object(Nt.c)(n),a],fi),c=(new rt.a).addVectors(s,u).multiplyScalar(.5),l=(new rt.a).subVectors(s,u).len()/2;return di([c[0],c[1],c[2],l],new Zt.a)}if(t.sphere)return di(t.sphere,e,n);throw new Error("3D Tile: boundingVolume must contain a sphere, region, or box")}function di(t,e,n){const r=new rt.a(t[0],t[1],t[2]);e.transform(r,r);const i=e.getScale(li),o=Math.max(Math.max(i[0],i[1]),i[2]),a=t[3]*o;return ci(n)?(n.center=r,n.radius=a,n):new lt(r,a)}new rt.a,new rt.a,new Zt.a,new rt.a,new rt.a,new rt.a;function Ai(t,e){if(t.dynamicScreenSpaceError&&t.dynamicScreenSpaceErrorComputedDensity){const n=t.dynamicScreenSpaceErrorComputedDensity,r=t.dynamicScreenSpaceErrorFactor;return function(t,e){const n=t*e;return 1-Math.exp(-n*n)}(e,n)*r}return 0}const gi=new rt.a,mi=new rt.a,yi=new rt.a,vi=new rt.a,_i=new rt.a,bi=new Zt.a,xi=new Zt.a;function wi(t,e){const{topDownViewport:n}=e,r=t.header.mbs[1],i=t.header.mbs[0],o=t.header.mbs[2],a=t.header.mbs[3],s=[...t.boundingVolume.center],u=n.unprojectPosition(n.cameraPosition);Ir.WGS84.cartographicToCartesian(u,gi),mi.copy(gi).subtract(s).normalize(),Ir.WGS84.eastNorthUpToFixedFrame(s,bi),xi.copy(bi).invert(),yi.copy(gi).transform(xi);const c=Math.sqrt(yi[0]*yi[0]+yi[1]*yi[1]),l=c*c/yi[2];vi.copy([yi[0],yi[1],l]);const h=vi.transform(bi).subtract(s).normalize(),f=mi.cross(h).normalize().scale(a).add(s),p=Ir.WGS84.cartesianToCartographic(f),d=n.project([i,r,o]),A=n.project(p);return _i.copy(d).subtract(A).magnitude()}class Ei{constructor(t=0){Object(cr.a)(this,"_map",new Map),Object(cr.a)(this,"_array",void 0),Object(cr.a)(this,"_length",void 0),this._array=new Array(t),this._length=t}get length(){return this._length}set length(t){this._length=t,t>this._array.length&&(this._array.length=t)}get values(){return this._array}get(t){return Object(Rr.a)(t=0),t>=this.length&&(this.length=t+1),this._map.has(this._array[t])&&this._map.delete(this._array[t]),this._array[t]=e,this._map.set(e,t)}delete(t){const e=this._map.get(t);e>=0&&(this._array.splice(e,1),this._map.delete(t),this.length--)}peek(){return this._array[this._length-1]}push(t){if(!this._map.has(t)){const e=this.length++;this._array[e]=t,this._map.set(t,e)}}pop(){const t=this._array[--this.length];return this._map.delete(t),t}reserve(t){Object(Rr.a)(t>=0),t>this._array.length&&(this._array.length=t)}resize(t){Object(Rr.a)(t>=0),this.length=t}trim(t){null==t&&(t=this.length),this._array.length=t}reset(){this._array=[],this._map=new Map,this._length=0}find(t){return this._map.has(t)}}const Oi={loadSiblings:!1,skipLevelOfDetail:!1,maximumScreenSpaceError:2,updateTransforms:!0,onTraversalEnd:()=>{},viewportTraversersMap:{},basePath:""};class Si{traversalFinished(t){return!0}constructor(t){Object(cr.a)(this,"options",void 0),Object(cr.a)(this,"root",void 0),Object(cr.a)(this,"requestedTiles",void 0),Object(cr.a)(this,"selectedTiles",void 0),Object(cr.a)(this,"emptyTiles",void 0),Object(cr.a)(this,"lastUpdate",(new Date).getTime()),Object(cr.a)(this,"updateDebounceTime",1e3),Object(cr.a)(this,"_traversalStack",void 0),Object(cr.a)(this,"_emptyTraversalStack",void 0),Object(cr.a)(this,"_frameNumber",void 0),this.options={...Oi,...t},this._traversalStack=new Ei,this._emptyTraversalStack=new Ei,this._frameNumber=null,this.root=null,this.selectedTiles={},this.requestedTiles={},this.emptyTiles={}}traverse(t,e,n){this.root=t,this.options={...this.options,...n},this.reset(),this.updateTile(t,e),this._frameNumber=e.frameNumber,this.executeTraversal(t,e)}reset(){this.requestedTiles={},this.selectedTiles={},this.emptyTiles={},this._traversalStack.reset(),this._emptyTraversalStack.reset()}executeTraversal(t,e){const n=this._traversalStack;for(t._selectionDepth=1,n.push(t);n.length>0;){const t=n.pop();let r=!1;this.canTraverse(t,e)&&(this.updateChildTiles(t,e),r=this.updateAndPushChildren(t,e,n,t.hasRenderContent?t._selectionDepth+1:t._selectionDepth));const i=t.parent,o=Boolean(!i||i._shouldRefine),a=!r;t.hasRenderContent?t.refine===$r?(this.loadTile(t,e),this.selectTile(t,e)):t.refine===ti&&(this.loadTile(t,e),a&&this.selectTile(t,e)):(this.emptyTiles[t.id]=t,this.loadTile(t,e),a&&this.selectTile(t,e)),this.touchTile(t,e),t._shouldRefine=r&&o}const r=(new Date).getTime();(this.traversalFinished(e)||r-this.lastUpdate>this.updateDebounceTime)&&(this.lastUpdate=r,this.options.onTraversalEnd(e))}updateChildTiles(t,e){const n=t.children;for(const t of n)this.updateTile(t,e);return!0}updateAndPushChildren(t,e,n,r){const{loadSiblings:i,skipLevelOfDetail:o}=this.options,a=t.children;a.sort(this.compareDistanceToCamera.bind(this));const s=t.refine===ti&&t.hasRenderContent&&!o;let u=!1,c=!0;for(const t of a)if(t._selectionDepth=r,t.isVisibleAndInRequestVolume?(n.find(t)&&n.delete(t),n.push(t),u=!0):(s||i)&&(this.loadTile(t,e),this.touchTile(t,e)),s){let n;if(n=!!t._inRequestVolume&&(t.hasRenderContent?t.contentAvailable:this.executeEmptyTraversal(t,e)),c=c&&n,!c)return!1}return u||(c=!1),c}updateTile(t,e){this.updateTileVisibility(t,e)}selectTile(t,e){this.shouldSelectTile(t)&&(t._selectedFrame=e.frameNumber,this.selectedTiles[t.id]=t)}loadTile(t,e){this.shouldLoadTile(t)&&(t._requestedFrame=e.frameNumber,t._priority=t._getPriority(),this.requestedTiles[t.id]=t)}touchTile(t,e){t.tileset._cache.touch(t),t._touchedFrame=e.frameNumber}canTraverse(t,e,n=!1,r=!1){return!!t.hasChildren&&(t.hasTilesetContent?!t.contentExpired:!(!r&&!t.isVisibleAndInRequestVolume)&&this.shouldRefine(t,e,n))}shouldLoadTile(t){return t.hasUnloadedContent||t.contentExpired}shouldSelectTile(t){return t.contentAvailable&&!this.options.skipLevelOfDetail}shouldRefine(t,e,n){let r=t._screenSpaceError;return n&&(r=t.getScreenSpaceError(e,!0)),r>this.options.maximumScreenSpaceError}updateTileVisibility(t,e){const n=[];if(this.options.viewportTraversersMap)for(const t in this.options.viewportTraversersMap){this.options.viewportTraversersMap[t]===e.viewport.id&&n.push(t)}else n.push(e.viewport.id);t.updateVisibility(e,n)}compareDistanceToCamera(t,e){return t._distanceToCamera-e._distanceToCamera}anyChildrenVisible(t,e){let n=!1;for(const r of t.children)r.updateVisibility(e),n=n||r.isVisibleAndInRequestVolume;return n}executeEmptyTraversal(t,e){let n=!0;const r=this._emptyTraversalStack;for(r.push(t);r.length>0&&n;){const t=r.pop();this.updateTile(t,e),t.isVisibleAndInRequestVolume||this.loadTile(t,e),this.touchTile(t,e);if(!t.hasRenderContent&&this.canTraverse(t,e,!1,!0)){const e=t.children;for(const t of e)r.find(t)&&r.delete(t),r.push(t)}else t.contentAvailable||(n=!1)}return n}}const Ti=new rt.a;class Ci{constructor(t,e,n,r=""){Object(cr.a)(this,"tileset",void 0),Object(cr.a)(this,"header",void 0),Object(cr.a)(this,"id",void 0),Object(cr.a)(this,"url",void 0),Object(cr.a)(this,"parent",void 0),Object(cr.a)(this,"refine",void 0),Object(cr.a)(this,"type",void 0),Object(cr.a)(this,"contentUrl",void 0),Object(cr.a)(this,"lodMetricType",void 0),Object(cr.a)(this,"lodMetricValue",void 0),Object(cr.a)(this,"boundingVolume",void 0),Object(cr.a)(this,"content",void 0),Object(cr.a)(this,"contentState",void 0),Object(cr.a)(this,"gpuMemoryUsageInBytes",void 0),Object(cr.a)(this,"children",void 0),Object(cr.a)(this,"depth",void 0),Object(cr.a)(this,"viewportIds",void 0),Object(cr.a)(this,"transform",void 0),Object(cr.a)(this,"extensions",void 0),Object(cr.a)(this,"userData",void 0),Object(cr.a)(this,"computedTransform",void 0),Object(cr.a)(this,"hasEmptyContent",void 0),Object(cr.a)(this,"hasTilesetContent",void 0),Object(cr.a)(this,"traverser",void 0),Object(cr.a)(this,"_cacheNode",void 0),Object(cr.a)(this,"_frameNumber",void 0),Object(cr.a)(this,"_lodJudge",void 0),Object(cr.a)(this,"_expireDate",void 0),Object(cr.a)(this,"_expiredContent",void 0),Object(cr.a)(this,"_shouldRefine",void 0),Object(cr.a)(this,"_distanceToCamera",void 0),Object(cr.a)(this,"_centerZDepth",void 0),Object(cr.a)(this,"_screenSpaceError",void 0),Object(cr.a)(this,"_visibilityPlaneMask",void 0),Object(cr.a)(this,"_visible",void 0),Object(cr.a)(this,"_inRequestVolume",void 0),Object(cr.a)(this,"_stackLength",void 0),Object(cr.a)(this,"_selectionDepth",void 0),Object(cr.a)(this,"_touchedFrame",void 0),Object(cr.a)(this,"_visitedFrame",void 0),Object(cr.a)(this,"_selectedFrame",void 0),Object(cr.a)(this,"_requestedFrame",void 0),Object(cr.a)(this,"_priority",void 0),Object(cr.a)(this,"_contentBoundingVolume",void 0),Object(cr.a)(this,"_viewerRequestVolume",void 0),Object(cr.a)(this,"_initialTransform",void 0),this.header=e,this.tileset=t,this.id=r||e.id,this.url=e.url,this.parent=n,this.refine=this._getRefine(e.refine),this.type=e.type,this.contentUrl=e.contentUrl,this.lodMetricType="geometricError",this.lodMetricValue=0,this.boundingVolume=null,this.content=null,this.contentState=Jr,this.gpuMemoryUsageInBytes=0,this.children=[],this.hasEmptyContent=!1,this.hasTilesetContent=!1,this.depth=0,this.viewportIds=[],this.userData={},this.extensions=null,this._priority=0,this._touchedFrame=0,this._visitedFrame=0,this._selectedFrame=0,this._requestedFrame=0,this._screenSpaceError=0,this._cacheNode=null,this._frameNumber=null,this._cacheNode=null,this.traverser=new Si({}),this._shouldRefine=!1,this._distanceToCamera=0,this._centerZDepth=0,this._visible=void 0,this._inRequestVolume=!1,this._stackLength=0,this._selectionDepth=0,this._initialTransform=new Zt.a,this.transform=new Zt.a,this._initializeLodMetric(e),this._initializeTransforms(e),this._initializeBoundingVolumes(e),this._initializeContent(e),this._initializeRenderingState(e),this._lodJudge=null,this._expireDate=null,this._expiredContent=null,Object.seal(this)}destroy(){this.header=null}isDestroyed(){return null===this.header}get selected(){return this._selectedFrame===this.tileset._frameNumber}get isVisible(){return this._visible}get isVisibleAndInRequestVolume(){return this._visible&&this._inRequestVolume}get hasRenderContent(){return!this.hasEmptyContent&&!this.hasTilesetContent}get hasChildren(){return this.children.length>0||this.header.children&&this.header.children.length>0}get contentReady(){return this.contentState===Qr||this.hasEmptyContent}get contentAvailable(){return Boolean(this.contentReady&&this.hasRenderContent||this._expiredContent&&!this.contentFailed)}get hasUnloadedContent(){return this.hasRenderContent&&this.contentUnloaded}get contentUnloaded(){return this.contentState===Jr}get contentExpired(){return this.contentState===Kr}get contentFailed(){return this.contentState===Yr}getScreenSpaceError(t,e){switch(this.tileset.type){case oi:return wi(this,t);case ai:return function(t,e,n){const r=t.tileset,i=t.parent&&t.parent.lodMetricValue||t.lodMetricValue,o=n?i:t.lodMetricValue;if(0===o)return 0;const a=Math.max(t._distanceToCamera,1e-7),{height:s,sseDenominator:u}=e,{viewDistanceScale:c}=r.options;let l=o*s*(c||1)/(a*u);return l-=Ai(r,a),l}(this,t,e);default:throw new Error("Unsupported tileset type")}}unselect(){this._selectedFrame=0}_getPriority(){const t=this.tileset._traverser,{skipLevelOfDetail:e}=t.options,n=this.refine===$r||e;if(n&&!this.isVisible&&void 0!==this._visible)return-1;if(this.tileset._frameNumber-this._touchedFrame>=1)return-1;if(this.contentState===Jr)return-1;const r=this.parent,i=r&&(!n||0===this._screenSpaceError||r.hasTilesetContent)?r._screenSpaceError:this._screenSpaceError,o=t.root?t.root._screenSpaceError:0;return Math.max(o-i,0)}async loadContent(){if(this.hasEmptyContent)return!1;if(this.content)return!0;this.contentExpired&&(this._expireDate=null),this.contentState=Zr;const t=await this.tileset._requestScheduler.scheduleRequest(this.id,this._getPriority.bind(this));if(!t)return this.contentState=Jr,!1;try{const e=this.tileset.getTileUrl(this.contentUrl),n=this.tileset.loader,r={...this.tileset.loadOptions,[n.id]:{...this.tileset.loadOptions[n.id],isTileset:"json"===this.type,...this._getLoaderSpecificOptions(n.id)}};return this.content=await Object(ur.a)(e,n,r),this.tileset.options.contentLoader&&await this.tileset.options.contentLoader(this),this._isTileset()&&this.tileset._initializeTileHeaders(this.content,this),this.contentState=Qr,this._onContentLoaded(),!0}catch(t){throw this.contentState=Yr,t}finally{t.done()}}unloadContent(){return this.content&&this.content.destroy&&this.content.destroy(),this.content=null,this.header.content&&this.header.content.destroy&&this.header.content.destroy(),this.header.content=null,this.contentState=Jr,!0}updateVisibility(t,e){if(this._frameNumber===t.frameNumber)return;const n=this.parent,r=n?n._visibilityPlaneMask:Jt.MASK_INDETERMINATE;if(this.tileset._traverser.options.updateTransforms){const t=n?n.computedTransform:this.tileset.modelMatrix;this._updateTransform(t)}this._distanceToCamera=this.distanceToTile(t),this._screenSpaceError=this.getScreenSpaceError(t,!1),this._visibilityPlaneMask=this.visibility(t,r),this._visible=this._visibilityPlaneMask!==Jt.MASK_OUTSIDE,this._inRequestVolume=this.insideViewerRequestVolume(t),this._frameNumber=t.frameNumber,this.viewportIds=e}visibility(t,e){const{cullingVolume:n}=t,{boundingVolume:r}=this;return n.computeVisibilityWithPlaneMask(r,e)}contentVisibility(){return!0}distanceToTile(t){const e=this.boundingVolume;return Math.sqrt(Math.max(e.distanceSquaredTo(t.camera.position),0))}cameraSpaceZDepth({camera:t}){const e=this.boundingVolume;return Ti.subVectors(e.center,t.position),t.direction.dot(Ti)}insideViewerRequestVolume(t){const e=this._viewerRequestVolume;return!e||e.distanceSquaredTo(t.camera.position)<=0}updateExpiration(){if(null!=this._expireDate&&this.contentReady&&!this.hasEmptyContent){const t=Date.now();Date.lessThan(this._expireDate,t)&&(this.contentState=Kr,this._expiredContent=this.content)}}get extras(){return this.header.extras}_initializeLodMetric(t){"lodMetricType"in t?this.lodMetricType=t.lodMetricType:(this.lodMetricType=this.parent&&this.parent.lodMetricType||this.tileset.lodMetricType,console.warn("3D Tile: Required prop lodMetricType is undefined. Using parent lodMetricType")),"lodMetricValue"in t?this.lodMetricValue=t.lodMetricValue:(this.lodMetricValue=this.parent&&this.parent.lodMetricValue||this.tileset.lodMetricValue,console.warn("3D Tile: Required prop lodMetricValue is undefined. Using parent lodMetricValue"))}_initializeTransforms(t){this.transform=t.transform?new Zt.a(t.transform):new Zt.a;const e=this.parent,n=this.tileset,r=e&&e.computedTransform?e.computedTransform.clone():n.modelMatrix.clone();this.computedTransform=new Zt.a(r).multiplyRight(this.transform);const i=e&&e._initialTransform?e._initialTransform.clone():new Zt.a;this._initialTransform=new Zt.a(i).multiplyRight(this.transform)}_initializeBoundingVolumes(t){this._contentBoundingVolume=null,this._viewerRequestVolume=null,this._updateBoundingVolume(t)}_initializeContent(t){this.content={_tileset:this.tileset,_tile:this},this.hasEmptyContent=!0,this.contentState=Jr,this.hasTilesetContent=!1,t.contentUrl&&(this.content=null,this.hasEmptyContent=!1)}_initializeRenderingState(t){this.depth=t.level||(this.parent?this.parent.depth+1:0),this._shouldRefine=!1,this._distanceToCamera=0,this._centerZDepth=0,this._screenSpaceError=0,this._visibilityPlaneMask=Jt.MASK_INDETERMINATE,this._visible=void 0,this._inRequestVolume=!1,this._stackLength=0,this._selectionDepth=0,this._frameNumber=0,this._touchedFrame=0,this._visitedFrame=0,this._selectedFrame=0,this._requestedFrame=0,this._priority=0}_getRefine(t){return t||this.parent&&this.parent.refine||ti}_isTileset(){return-1!==this.contentUrl.indexOf(".json")}_onContentLoaded(){switch(this.content&&this.content.type){case"vctr":case"geom":this.tileset._traverser.disableSkipLevelOfDetail=!0}this._isTileset()&&(this.hasTilesetContent=!0)}_updateBoundingVolume(t){this.boundingVolume=pi(t.boundingVolume,this.computedTransform,this.boundingVolume);const e=t.content;e&&(e.boundingVolume&&(this._contentBoundingVolume=pi(e.boundingVolume,this.computedTransform,this._contentBoundingVolume)),t.viewerRequestVolume&&(this._viewerRequestVolume=pi(t.viewerRequestVolume,this.computedTransform,this._viewerRequestVolume)))}_updateTransform(t=new Zt.a){const e=t.clone().multiplyRight(this.transform);!e.equals(this.computedTransform)&&(this.computedTransform=e,this._updateBoundingVolume(this.header))}_getLoaderSpecificOptions(t){switch(t){case"i3s":return{...this.tileset.options.i3s,tile:this.header,tileset:this.tileset.tileset,isTileHeader:!1};case"3d-tiles":case"cesium-ion":default:return{assetGltfUpAxis:(e=this.tileset.tileset).asset&&e.asset.gltfUpAxis||"Y"}}var e}}class Pi extends Si{compareDistanceToCamera(t,e){return 0===e._distanceToCamera&&0===t._distanceToCamera?e._centerZDepth-t._centerZDepth:e._distanceToCamera-t._distanceToCamera}updateTileVisibility(t,e){if(super.updateTileVisibility(t,e),!t.isVisibleAndInRequestVolume)return;const n=t.children.length>0;if(t.hasTilesetContent&&n){const n=t.children[0];return this.updateTileVisibility(n,e),void(t._visible=n._visible)}if(this.meetsScreenSpaceErrorEarly(t,e))return void(t._visible=!1);const r=t.refine===ti,i=t._optimChildrenWithinParent===ui;r&&i&&n&&!this.anyChildrenVisible(t,e)&&(t._visible=!1)}meetsScreenSpaceErrorEarly(t,e){const{parent:n}=t;return!(!n||n.hasTilesetContent||n.refine!==$r)&&!this.shouldRefine(t,e,!0)}}class Mi{constructor(){Object(cr.a)(this,"frameNumberMap",new Map)}register(t,e){const n=this.frameNumberMap.get(t)||new Map,r=n.get(e)||0;n.set(e,r+1),this.frameNumberMap.set(t,n)}deregister(t,e){const n=this.frameNumberMap.get(t);if(!n)return;const r=n.get(e)||1;n.set(e,r-1)}isZero(t,e){var n;return 0===((null===(n=this.frameNumberMap.get(t))||void 0===n?void 0:n.get(e))||0)}}const Ii="REQUESTED",Bi="COMPLETED",Ri="ERROR";class ki{constructor(){Object(cr.a)(this,"_statusMap",void 0),Object(cr.a)(this,"pendingTilesRegister",new Mi),this._statusMap={}}add(t,e,n,r){if(!this._statusMap[e]){const{frameNumber:i,viewport:{id:o}}=r;this._statusMap[e]={request:t,callback:n,key:e,frameState:r,status:Ii},this.pendingTilesRegister.register(o,i),t().then(t=>{this._statusMap[e].status=Bi;const{frameNumber:n,viewport:{id:i}}=this._statusMap[e].frameState;this.pendingTilesRegister.deregister(i,n),this._statusMap[e].callback(t,r)}).catch(t=>{this._statusMap[e].status=Ri;const{frameNumber:r,viewport:{id:i}}=this._statusMap[e].frameState;this.pendingTilesRegister.deregister(i,r),n(t)})}}update(t,e){if(this._statusMap[t]){const{frameNumber:n,viewport:{id:r}}=this._statusMap[t].frameState;this.pendingTilesRegister.deregister(r,n);const{frameNumber:i,viewport:{id:o}}=e;this.pendingTilesRegister.register(o,i),this._statusMap[t].frameState=e}}find(t){return this._statusMap[t]}hasPendingTiles(t,e){return!this.pendingTilesRegister.isZero(t,e)}}class Li extends Si{traversalFinished(t){return!this._tileManager.hasPendingTiles(t.viewport.id,this._frameNumber||0)}constructor(t){super(t),Object(cr.a)(this,"_tileManager",void 0),this._tileManager=new ki}shouldRefine(t,e){return t._lodJudge=function(t,e){if(0===t.lodMetricValue||isNaN(t.lodMetricValue))return"DIG";const n=2*wi(t,e);return n<2?"OUT":!t.header.children||n<=t.lodMetricValue?"DRAW":t.header.children?"DIG":"OUT"}(t,e),"DIG"===t._lodJudge}updateChildTiles(t,e){const n=t.header.children||[],r=t.children,i=t.tileset;for(const o of n){const n="".concat(o.id,"-").concat(e.viewport.id),a=r&&r.find(t=>t.id===n);if(a)a&&this.updateTile(a,e);else{let r=()=>this._loadTile(o.id,i);this._tileManager.find(n)?this._tileManager.update(n,e):(i.tileset.nodePages&&(r=()=>i.tileset.nodePagesTile.formTileFromNodePages(o.id)),this._tileManager.add(r,n,e=>this._onTileLoad(e,t,n),e))}}return!1}async _loadTile(t,e){const{loader:n}=e,r=e.getTileUrl("".concat(e.url,"/nodes/").concat(t)),i={...e.loadOptions,i3s:{...e.loadOptions.i3s,isTileHeader:!0,loadContent:!1}};return await Object(ur.a)(r,n,i)}_onTileLoad(t,e,n){const r=new Ci(e.tileset,t,e,n);e.children.push(r);const i=this._tileManager.find(r.id).frameState;this.updateTile(r,i),this._frameNumber===i.frameNumber&&(this.traversalFinished(i)||(new Date).getTime()-this.lastUpdate>this.updateDebounceTime)&&this.executeTraversal(r,i)}}const Di={description:"",ellipsoid:Ir.WGS84,modelMatrix:new Zt.a,throttleRequests:!0,maxRequests:64,maximumMemoryUsage:32,maximumTilesSelected:0,debounceTime:0,onTileLoad:()=>{},onTileUnload:()=>{},onTileError:()=>{},onTraversalComplete:t=>t,contentLoader:void 0,viewDistanceScale:1,maximumScreenSpaceError:8,loadTiles:!0,updateTransforms:!0,viewportTraversersMap:null,loadOptions:{fetch:{}},attributions:[],basePath:"",i3s:{}},ji="Tiles In Tileset(s)";class Fi{constructor(t,e){Object(cr.a)(this,"options",void 0),Object(cr.a)(this,"loadOptions",void 0),Object(cr.a)(this,"type",void 0),Object(cr.a)(this,"tileset",void 0),Object(cr.a)(this,"loader",void 0),Object(cr.a)(this,"url",void 0),Object(cr.a)(this,"basePath",void 0),Object(cr.a)(this,"modelMatrix",void 0),Object(cr.a)(this,"ellipsoid",void 0),Object(cr.a)(this,"lodMetricType",void 0),Object(cr.a)(this,"lodMetricValue",void 0),Object(cr.a)(this,"refine",void 0),Object(cr.a)(this,"root",void 0),Object(cr.a)(this,"roots",void 0),Object(cr.a)(this,"asset",void 0),Object(cr.a)(this,"description",void 0),Object(cr.a)(this,"properties",void 0),Object(cr.a)(this,"extras",void 0),Object(cr.a)(this,"attributions",void 0),Object(cr.a)(this,"credits",void 0),Object(cr.a)(this,"stats",void 0),Object(cr.a)(this,"traverseCounter",void 0),Object(cr.a)(this,"geometricError",void 0),Object(cr.a)(this,"selectedTiles",void 0),Object(cr.a)(this,"updatePromise",null),Object(cr.a)(this,"tilesetInitializationPromise",void 0),Object(cr.a)(this,"cartographicCenter",void 0),Object(cr.a)(this,"cartesianCenter",void 0),Object(cr.a)(this,"zoom",void 0),Object(cr.a)(this,"boundingVolume",void 0),Object(cr.a)(this,"gpuMemoryUsageInBytes",void 0),Object(cr.a)(this,"dynamicScreenSpaceErrorComputedDensity",void 0),Object(cr.a)(this,"_traverser",void 0),Object(cr.a)(this,"_cache",void 0),Object(cr.a)(this,"_requestScheduler",void 0),Object(cr.a)(this,"_frameNumber",void 0),Object(cr.a)(this,"_queryParamsString",void 0),Object(cr.a)(this,"_queryParams",void 0),Object(cr.a)(this,"_extensionsUsed",void 0),Object(cr.a)(this,"_tiles",void 0),Object(cr.a)(this,"_pendingCount",void 0),Object(cr.a)(this,"lastUpdatedVieports",void 0),Object(cr.a)(this,"_requestedTiles",void 0),Object(cr.a)(this,"_emptyTiles",void 0),Object(cr.a)(this,"frameStateData",void 0),Object(cr.a)(this,"maximumMemoryUsage",void 0),Object(Rr.a)(t),this.options={...Di,...e},this.tileset=t,this.loader=t.loader,this.type=t.type,this.url=t.url,this.basePath=t.basePath||kr.b.dirname(this.url),this.modelMatrix=this.options.modelMatrix,this.ellipsoid=this.options.ellipsoid,this.lodMetricType=t.lodMetricType,this.lodMetricValue=t.lodMetricValue,this.refine=t.root.refine,this.loadOptions=this.options.loadOptions||{},this.root=null,this.roots={},this.cartographicCenter=null,this.cartesianCenter=null,this.zoom=1,this.boundingVolume=null,this.traverseCounter=0,this.geometricError=0,this._traverser=this._initializeTraverser(),this._cache=new Fr,this._requestScheduler=new De.a({throttleRequests:this.options.throttleRequests,maxRequests:this.options.maxRequests}),this._frameNumber=0,this._pendingCount=0,this._tiles={},this.selectedTiles=[],this._emptyTiles=[],this._requestedTiles=[],this.frameStateData={},this.lastUpdatedVieports=null,this._queryParams={},this._queryParamsString="",this.maximumMemoryUsage=this.options.maximumMemoryUsage||32,this.gpuMemoryUsageInBytes=0,this.stats=new Br.a({id:this.url}),this._initializeStats(),this._extensionsUsed=void 0,this.dynamicScreenSpaceErrorComputedDensity=0,this.extras=null,this.asset={},this.credits={},this.description=this.options.description||"",this.tilesetInitializationPromise=this._initializeTileSet(t)}destroy(){this._destroy()}isLoaded(){return 0===this._pendingCount&&0!==this._frameNumber&&0===this._requestedTiles.length}get tiles(){return Object.values(this._tiles)}get frameNumber(){return this._frameNumber}get queryParams(){return this._queryParamsString||(this._queryParamsString=function(t){const e=[];for(const n of Object.keys(t))e.push("".concat(n,"=").concat(t[n]));switch(e.length){case 0:return"";case 1:return"?".concat(e[0]);default:return"?".concat(e.join("&"))}}(this._queryParams)),this._queryParamsString}setProps(t){this.options={...this.options,...t}}setOptions(t){this.options={...this.options,...t}}getTileUrl(t){return t.startsWith("data:")?t:"".concat(t).concat(this.queryParams)}hasExtension(t){return Boolean(this._extensionsUsed&&this._extensionsUsed.indexOf(t)>-1)}update(t=null){this.tilesetInitializationPromise.then(()=>{!t&&this.lastUpdatedVieports?t=this.lastUpdatedVieports:this.lastUpdatedVieports=t,t&&this.doUpdate(t)})}async selectTiles(t=null){return await this.tilesetInitializationPromise,t&&(this.lastUpdatedVieports=t),this.updatePromise||(this.updatePromise=new Promise(t=>{setTimeout(()=>{this.lastUpdatedVieports&&this.doUpdate(this.lastUpdatedVieports),t(this._frameNumber),this.updatePromise=null},this.options.debounceTime)})),this.updatePromise}doUpdate(t){if("loadTiles"in this.options&&!this.options.loadTiles)return;if(this.traverseCounter>0)return;const e=t instanceof Array?t:[t];this._cache.reset(),this._frameNumber++,this.traverseCounter=e.length;const n=[];for(const t of e){const e=t.id;this._needTraverse(e)?n.push(e):this.traverseCounter--}for(const t of e){const e=t.id;if(this.roots[e]||(this.roots[e]=this._initializeTileHeaders(this.tileset,null)),!n.includes(e))continue;const r=Gr(t,this._frameNumber);this._traverser.traverse(this.roots[e],r,this.options)}}_needTraverse(t){let e=t;return this.options.viewportTraversersMap&&(e=this.options.viewportTraversersMap[t]),e===t}_onTraversalEnd(t){const e=t.viewport.id;this.frameStateData[e]||(this.frameStateData[e]={selectedTiles:[],_requestedTiles:[],_emptyTiles:[]});const n=this.frameStateData[e],r=Object.values(this._traverser.selectedTiles),[i,o]=function(t,e,n){if(0===n||t.length<=n)return[t,[]];const r=[],{longitude:i,latitude:o}=e.viewport;for(const[e,n]of t.entries()){const[t,a]=n.header.mbs,s=Math.abs(i-t),u=Math.abs(o-a),c=Math.sqrt(u*u+s*s);r.push([e,c])}const a=r.sort((t,e)=>t[1]-e[1]),s=[];for(let e=0;e0||this._updateTiles()}_updateTiles(){this.selectedTiles=[],this._requestedTiles=[],this._emptyTiles=[];for(const t in this.frameStateData){const e=this.frameStateData[t];this.selectedTiles=this.selectedTiles.concat(e.selectedTiles),this._requestedTiles=this._requestedTiles.concat(e._requestedTiles),this._emptyTiles=this._emptyTiles.concat(e._emptyTiles)}this.selectedTiles=this.options.onTraversalComplete(this.selectedTiles);for(const t of this.selectedTiles)this._tiles[t.id]=t;this._loadTiles(),this._unloadTiles(),this._updateStats()}_tilesChanged(t,e){if(t.length!==e.length)return!0;const n=new Set(t.map(t=>t.id)),r=new Set(e.map(t=>t.id));let i=t.filter(t=>!r.has(t.id)).length>0;return i=i||e.filter(t=>!n.has(t.id)).length>0,i}_loadTiles(){for(const t of this._requestedTiles)t.contentUnloaded&&this._loadTile(t)}_unloadTiles(){this._cache.unloadTiles(this,(t,e)=>t._unloadTile(e))}_updateStats(){let t=0,e=0;for(const n of this.selectedTiles)n.contentAvailable&&n.content&&(t++,n.content.pointCount?e+=n.content.pointCount:e+=n.content.vertexCount);this.stats.get("Tiles In View").count=this.selectedTiles.length,this.stats.get("Tiles To Render").count=t,this.stats.get("Points/Vertices").count=e}async _initializeTileSet(t){this.type===oi&&(this.calculateViewPropsI3S(),t.root=await t.root),this.root=this._initializeTileHeaders(t,null),this.type===ai&&(this._initializeTiles3DTileset(t),this.calculateViewPropsTiles3D()),this.type===oi&&this._initializeI3STileset()}calculateViewPropsI3S(){var t;const e=this.tileset.fullExtent;if(e){const{xmin:t,xmax:n,ymin:r,ymax:i,zmin:o,zmax:a}=e;return this.cartographicCenter=new rt.a(t+(n-t)/2,r+(i-r)/2,o+(a-o)/2),this.cartesianCenter=Ir.WGS84.cartographicToCartesian(this.cartographicCenter,new rt.a),void(this.zoom=Xr(e,this.cartographicCenter,this.cartesianCenter))}const n=null===(t=this.tileset.store)||void 0===t?void 0:t.extent;if(n){const[t,e,r,i]=n;return this.cartographicCenter=new rt.a(t+(r-t)/2,e+(i-e)/2,0),this.cartesianCenter=Ir.WGS84.cartographicToCartesian(this.cartographicCenter,new rt.a),void(this.zoom=function(t,e,n){const[r,i,o,a]=t;return Xr({xmin:r,xmax:o,ymin:i,ymax:a,zmin:0,zmax:0},e,n)}(n,this.cartographicCenter,this.cartesianCenter))}console.warn("Extent is not defined in the tileset header"),this.cartographicCenter=new rt.a,this.zoom=1}calculateViewPropsTiles3D(){const t=this.root;Object(Rr.a)(t);const{center:e}=t.boundingVolume;if(!e)return console.warn("center was not pre-calculated for the root tile"),this.cartographicCenter=new rt.a,void(this.zoom=1);0!==e[0]||0!==e[1]||0!==e[2]?this.cartographicCenter=Ir.WGS84.cartesianToCartographic(e,new rt.a):this.cartographicCenter=new rt.a(0,0,-Ir.WGS84.radii[0]),this.cartesianCenter=e,this.zoom=qr(t.boundingVolume,this.cartographicCenter)}_initializeStats(){this.stats.get(ji),this.stats.get("Tiles Loading"),this.stats.get("Tiles In Memory"),this.stats.get("Tiles In View"),this.stats.get("Tiles To Render"),this.stats.get("Tiles Loaded"),this.stats.get("Tiles Unloaded"),this.stats.get("Failed Tile Loads"),this.stats.get("Points/Vertices","memory"),this.stats.get("Tile Memory Use","memory")}_initializeTileHeaders(t,e){const n=new Ci(this,t.root,e);if(e&&(e.children.push(n),n.depth=e.depth+1),this.type===ai){const t=[];for(t.push(n);t.length>0;){const e=t.pop();this.stats.get(ji).incrementCount();const n=e.header.children||[];for(const r of n){const n=new Ci(this,r,e);e.children.push(n),n.depth=e.depth+1,t.push(n)}}}return n}_initializeTraverser(){let t;switch(this.type){case ai:t=Pi;break;case oi:t=Li;break;default:t=Si}return new t({basePath:this.basePath,onTraversalEnd:this._onTraversalEnd.bind(this)})}_destroyTileHeaders(t){this._destroySubtree(t)}async _loadTile(t){let e;try{this._onStartTileLoading(),e=await t.loadContent()}catch(e){this._onTileLoadError(t,e)}finally{this._onEndTileLoading(),this._onTileLoad(t,e)}}_onTileLoadError(t,e){this.stats.get("Failed Tile Loads").incrementCount();const n=e.message||e.toString(),r=t.url;console.error("A 3D tile failed to load: ".concat(t.url," ").concat(n)),this.options.onTileError(t,n,r)}_onTileLoad(t,e){if(e){if(this.type===oi){var n,r;const t=(null===(n=this.tileset)||void 0===n||null===(r=n.nodePagesTile)||void 0===r?void 0:r.nodesInNodePages)||0;this.stats.get(ji).reset(),this.stats.get(ji).addCount(t)}t&&t.content&&function(t,e){Object(Rr.a)(t),Object(Rr.a)(e);const{rtcCenter:n,gltfUpAxis:r}=e,{computedTransform:i,boundingVolume:{center:o}}=t;let a=new Zt.a(i);switch(n&&a.translate(n),r){case"Z":break;case"Y":const t=(new Zt.a).rotateX(Math.PI/2);a=a.multiplyRight(t);break;case"X":const e=(new Zt.a).rotateY(-Math.PI/2);a=a.multiplyRight(e)}e.isQuantized&&a.translate(e.quantizedVolumeOffset).scale(e.quantizedVolumeScale);const s=new rt.a(o);e.cartesianModelMatrix=a,e.cartesianOrigin=s;const u=Ir.WGS84.cartesianToCartographic(s,new rt.a),c=Ir.WGS84.eastNorthUpToFixedFrame(s).invert();e.cartographicModelMatrix=c.multiplyRight(a),e.cartographicOrigin=u,e.coordinateSystem||(e.modelMatrix=e.cartographicModelMatrix)}(t,t.content),this._addTileToCache(t),this.options.onTileLoad(t)}}_onStartTileLoading(){this._pendingCount++,this.stats.get("Tiles Loading").incrementCount()}_onEndTileLoading(){this._pendingCount--,this.stats.get("Tiles Loading").decrementCount()}_addTileToCache(t){this._cache.add(this,t,e=>e._updateCacheStats(t))}_updateCacheStats(t){this.stats.get("Tiles Loaded").incrementCount(),this.stats.get("Tiles In Memory").incrementCount(),this.gpuMemoryUsageInBytes+=t.content.byteLength||0,this.stats.get("Tile Memory Use").count=this.gpuMemoryUsageInBytes}_unloadTile(t){this.gpuMemoryUsageInBytes-=t.content&&t.content.byteLength||0,this.stats.get("Tiles In Memory").decrementCount(),this.stats.get("Tiles Unloaded").incrementCount(),this.stats.get("Tile Memory Use").count=this.gpuMemoryUsageInBytes,this.options.onTileUnload(t),t.unloadContent()}_destroy(){const t=[];for(this.root&&t.push(this.root);t.length>0;){const e=t.pop();for(const n of e.children)t.push(n);this._destroyTile(e)}this.root=null}_destroySubtree(t){const e=t,n=[];for(n.push(e);n.length>0;){t=n.pop();for(const e of t.children)n.push(e);t!==e&&this._destroyTile(t)}e.children=[]}_destroyTile(t){this._cache.unloadTile(this,t),this._unloadTile(t),t.destroy()}_initializeTiles3DTileset(t){if(this.asset=t.asset,!this.asset)throw new Error("Tileset must have an asset property.");if("0.0"!==this.asset.version&&"1.0"!==this.asset.version)throw new Error("The tileset must be 3D Tiles version 0.0 or 1.0.");"tilesetVersion"in this.asset&&(this._queryParams.v=this.asset.tilesetVersion),this.credits={attributions:this.options.attributions||[]},this.description=this.options.description||"",this.properties=t.properties,this.geometricError=t.geometricError,this._extensionsUsed=t.extensionsUsed,this.extras=t.extras}_initializeI3STileset(){this.loadOptions.i3s&&"token"in this.loadOptions.i3s&&(this._queryParams.token=this.loadOptions.i3s.token)}}const zi={COMPOSITE:"cmpt",POINT_CLOUD:"pnts",BATCHED_3D_MODEL:"b3dm",INSTANCED_3D_MODEL:"i3dm",GEOMETRY:"geom",VECTOR:"vect",GLTF:"glTF"};Object.keys(zi);function Ui(t,e,n){Object(Rr.a)(t instanceof ArrayBuffer);const r=new TextDecoder("utf8"),i=new Uint8Array(t,e,n);return r.decode(i)}var Ni=n(177);const Gi={BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DOUBLE:5130},Vi={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,...Gi},Hi={[Gi.DOUBLE]:Float64Array,[Gi.FLOAT]:Float32Array,[Gi.UNSIGNED_SHORT]:Uint16Array,[Gi.UNSIGNED_INT]:Uint32Array,[Gi.UNSIGNED_BYTE]:Uint8Array,[Gi.BYTE]:Int8Array,[Gi.SHORT]:Int16Array,[Gi.INT]:Int32Array},Wi={DOUBLE:Gi.DOUBLE,FLOAT:Gi.FLOAT,UNSIGNED_SHORT:Gi.UNSIGNED_SHORT,UNSIGNED_INT:Gi.UNSIGNED_INT,UNSIGNED_BYTE:Gi.UNSIGNED_BYTE,BYTE:Gi.BYTE,SHORT:Gi.SHORT,INT:Gi.INT};class qi{static fromTypedArray(t){t=ArrayBuffer.isView(t)?t.constructor:t;for(const e in Hi){if(Hi[e]===t)return e}throw new Error("Failed to convert GL type")}static fromName(t){const e=Wi[t];if(!e)throw new Error("Failed to convert GL type");return e}static getArrayType(t){switch(t){case Gi.UNSIGNED_SHORT_5_6_5:case Gi.UNSIGNED_SHORT_4_4_4_4:case Gi.UNSIGNED_SHORT_5_5_5_1:return Uint16Array;default:const e=Hi[t];if(!e)throw new Error("Failed to convert GL type");return e}}static getByteSize(t){return qi.getArrayType(t).BYTES_PER_ELEMENT}static validate(t){return Boolean(qi.getArrayType(t))}static createTypedArray(t,e,n=0,r){void 0===r&&(r=(e.byteLength-n)/qi.getByteSize(t));return new(qi.getArrayType(t))(e,n,r)}}class Xi{constructor(t,e){Object(cr.a)(this,"json",void 0),Object(cr.a)(this,"buffer",void 0),Object(cr.a)(this,"featuresLength",0),Object(cr.a)(this,"_cachedTypedArrays",{}),this.json=t,this.buffer=e}getExtension(t){return this.json.extensions&&this.json.extensions[t]}hasProperty(t){return Boolean(this.json[t])}getGlobalProperty(t,e=Vi.UNSIGNED_INT,n=1){const r=this.json[t];return r&&Number.isFinite(r.byteOffset)?this._getTypedArrayFromBinary(t,e,n,1,r.byteOffset):r}getPropertyArray(t,e,n){const r=this.json[t];return r&&Number.isFinite(r.byteOffset)?("componentType"in r&&(e=qi.fromName(r.componentType)),this._getTypedArrayFromBinary(t,e,n,this.featuresLength,r.byteOffset)):this._getTypedArrayFromArray(t,e,r)}getProperty(t,e,n,r,i){const o=this.json[t];if(!o)return o;const a=this.getPropertyArray(t,e,n);if(1===n)return a[r];for(let t=0;tt[e],VEC2:(t,e)=>[t[2*e+0],t[2*e+1]],VEC3:(t,e)=>[t[3*e+0],t[3*e+1],t[3*e+2]],VEC4:(t,e)=>[t[4*e+0],t[4*e+1],t[4*e+2],t[4*e+3]],MAT2:(t,e)=>[t[4*e+0],t[4*e+1],t[4*e+2],t[4*e+3]],MAT3:(t,e)=>[t[9*e+0],t[9*e+1],t[9*e+2],t[9*e+3],t[9*e+4],t[9*e+5],t[9*e+6],t[9*e+7],t[9*e+8]],MAT4:(t,e)=>[t[16*e+0],t[16*e+1],t[16*e+2],t[16*e+3],t[16*e+4],t[16*e+5],t[16*e+6],t[16*e+7],t[16*e+8],t[16*e+9],t[16*e+10],t[16*e+11],t[16*e+12],t[16*e+13],t[16*e+14],t[16*e+15]]},Qi={SCALAR:(t,e,n)=>{e[n]=t},VEC2:(t,e,n)=>{e[2*n+0]=t[0],e[2*n+1]=t[1]},VEC3:(t,e,n)=>{e[3*n+0]=t[0],e[3*n+1]=t[1],e[3*n+2]=t[2]},VEC4:(t,e,n)=>{e[4*n+0]=t[0],e[4*n+1]=t[1],e[4*n+2]=t[2],e[4*n+3]=t[3]},MAT2:(t,e,n)=>{e[4*n+0]=t[0],e[4*n+1]=t[1],e[4*n+2]=t[2],e[4*n+3]=t[3]},MAT3:(t,e,n)=>{e[9*n+0]=t[0],e[9*n+1]=t[1],e[9*n+2]=t[2],e[9*n+3]=t[3],e[9*n+4]=t[4],e[9*n+5]=t[5],e[9*n+6]=t[6],e[9*n+7]=t[7],e[9*n+8]=t[8],e[9*n+9]=t[9]},MAT4:(t,e,n)=>{e[16*n+0]=t[0],e[16*n+1]=t[1],e[16*n+2]=t[2],e[16*n+3]=t[3],e[16*n+4]=t[4],e[16*n+5]=t[5],e[16*n+6]=t[6],e[16*n+7]=t[7],e[16*n+8]=t[8],e[16*n+9]=t[9],e[16*n+10]=t[10],e[16*n+11]=t[11],e[16*n+12]=t[12],e[16*n+13]=t[13],e[16*n+14]=t[14],e[16*n+15]=t[15]}};const Ki=t=>void 0!==t;function Yi(t,e,n){if(!e)return null;let r=t.getExtension("3DTILES_batch_table_hierarchy");const i=e.HIERARCHY;return i&&(console.warn("3D Tile Parser: HIERARCHY is deprecated. Use 3DTILES_batch_table_hierarchy."),e.extensions=e.extensions||{},e.extensions["3DTILES_batch_table_hierarchy"]=i,r=i),r?function(t,e){let n,r,i;const o=t.instancesLength,a=t.classes;let s,u=t.classIds,c=t.parentCounts,l=t.parentIds,h=o;Ki(u.byteOffset)&&(u.componentType=defaultValue(u.componentType,GL.UNSIGNED_SHORT),u.type=AttributeType.SCALAR,i=getBinaryAccessor(u),u=i.createArrayBufferView(e.buffer,e.byteOffset+u.byteOffset,o));if(Ki(c))for(Ki(c.byteOffset)&&(c.componentType=defaultValue(c.componentType,GL.UNSIGNED_SHORT),c.type=AttributeType.SCALAR,i=getBinaryAccessor(c),c=i.createArrayBufferView(e.buffer,e.byteOffset+c.byteOffset,o)),s=new Uint16Array(o),h=0,n=0;n0?function(t,e,n){const r=t.classIds,i=t.parentCounts,o=t.parentIds,a=t.parentIndexes,s=r.length,u=scratchVisited;u.length=Math.max(u.length,s);const c=++marker,l=scratchStack;l.length=0,l.push(e);for(;l.length>0;){if(e=l.pop(),u[e]===c)continue;u[e]=c;const r=n(t,e);if(Ki(r))return r;const s=i[e],h=a[e];for(let t=0;tt,ro={HIERARCHY:!0,extensions:!0,extras:!0};class io{constructor(t,e,n,r={}){var i;Object(cr.a)(this,"json",void 0),Object(cr.a)(this,"binary",void 0),Object(cr.a)(this,"featureCount",void 0),Object(cr.a)(this,"_extensions",void 0),Object(cr.a)(this,"_properties",void 0),Object(cr.a)(this,"_binaryProperties",void 0),Object(cr.a)(this,"_hierarchy",void 0),Object(Rr.a)(n>=0),this.json=t||{},this.binary=e,this.featureCount=n,this._extensions=(null===(i=this.json)||void 0===i?void 0:i.extensions)||{},this._properties={};for(const t in this.json)ro[t]||(this._properties[t]=this.json[t]);this._binaryProperties=this._initializeBinaryProperties(),r["3DTILES_batch_table_hierarchy"]&&(this._hierarchy=Yi(this,this.json,this.binary))}getExtension(t){return this.json&&this.json.extensions&&this.json.extensions[t]}memorySizeInBytes(){return 0}isClass(t,e){if(this._checkBatchId(t),Object(Rr.a)("string"==typeof e,e),this._hierarchy){return eo($i(this._hierarchy,t,(t,n)=>{const r=t.classIds[n];return t.classes[r].name===e}))}return!1}isExactClass(t,e){return Object(Rr.a)("string"==typeof e,e),this.getExactClassName(t)===e}getExactClassName(t){if(this._checkBatchId(t),this._hierarchy){const e=this._hierarchy.classIds[t];return this._hierarchy.classes[e].name}}hasProperty(t,e){return this._checkBatchId(t),Object(Rr.a)("string"==typeof e,e),eo(this._properties[e])||this._hasPropertyInHierarchy(t,e)}getPropertyNames(t,e){this._checkBatchId(t),(e=eo(e)?e:[]).length=0;const n=Object.keys(this._properties);return e.push(...n),this._hierarchy&&this._getPropertyNamesInHierarchy(t,e),e}getProperty(t,e){if(this._checkBatchId(t),Object(Rr.a)("string"==typeof e,e),this._binaryProperties){const n=this._binaryProperties[e];if(eo(n))return this._getBinaryProperty(n,t)}const n=this._properties[e];if(eo(n))return no(n[t]);if(this._hierarchy){const n=this._getHierarchyProperty(t,e);if(eo(n))return n}}setProperty(t,e,n){const r=this.featureCount;if(this._checkBatchId(t),Object(Rr.a)("string"==typeof e,e),this._binaryProperties){const r=this._binaryProperties[e];if(r)return void this._setBinaryProperty(r,t,n)}if(this._hierarchy&&this._setHierarchyProperty(this,t,e,n))return;let i=this._properties[e];eo(i)||(this._properties[e]=new Array(r),i=this._properties[e]),i[t]=no(n)}_checkBatchId(t){if(!(t>=0&&t{const r=t.classIds[n];return eo(t.classes[r].instances[e])});return eo(n)}_getPropertyNamesInHierarchy(t,e){$i(this._hierarchy,t,(t,n)=>{const r=t.classIds[n],i=t.classes[r].instances;for(const t in i)i.hasOwnProperty(t)&&-1===e.indexOf(t)&&e.push(t)})}_getHierarchyProperty(t,e){return $i(this._hierarchy,t,(t,n)=>{const r=t.classIds[n],i=t.classes[r],o=t.classIndexes[n],a=i.instances[e];return eo(a)?eo(a.typedArray)?this._getBinaryProperty(a,o):no(a[o]):null})}_setHierarchyProperty(t,e,n,r){const i=$i(this._hierarchy,e,(t,i)=>{const o=t.classIds[i],a=t.classes[o],s=t.classIndexes[i],u=a.instances[n];return!!eo(u)&&(Object(Rr.a)(i===e,'Inherited property "'.concat(n,'" is read-only.')),eo(u.typedArray)?this._setBinaryProperty(u,s,r):u[s]=no(r),!0)});return eo(i)}}function oo(t,e,n=0){const r=new DataView(e);if(t.magic=r.getUint32(n,!0),n+=4,t.version=r.getUint32(n,!0),n+=4,t.byteLength=r.getUint32(n,!0),n+=4,1!==t.version)throw new Error("3D Tile Version ".concat(t.version," not supported"));return n}function ao(t,e,n){const r=new DataView(e);let i;t.header=t.header||{};let o=r.getUint32(n,!0);n+=4;let a=r.getUint32(n,!0);n+=4;let s=r.getUint32(n,!0);n+=4;let u=r.getUint32(n,!0);return n+=4,s>=570425344?(n-=8,i=o,s=a,u=0,o=0,a=0,console.warn("b3dm tile in legacy format.")):u>=570425344&&(n-=4,i=s,s=o,u=a,o=0,a=0,console.warn("b3dm tile in legacy format.")),t.header.featureTableJsonByteLength=o,t.header.featureTableBinaryByteLength=a,t.header.batchTableJsonByteLength=s,t.header.batchTableBinaryByteLength=u,t.header.batchLength=i,n}function so(t,e,n,r){return n=function(t,e,n,r){const{featureTableJsonByteLength:i,featureTableBinaryByteLength:o,batchLength:a}=t.header;if(t.featureTableJson={BATCH_LENGTH:a||0},i>0){const r=Ui(e,n,i);t.featureTableJson=JSON.parse(r)}return n+=i,t.featureTableBinary=new Uint8Array(e,n,o),n+=o}(t,e,n),n=function(t,e,n,r){const{batchTableJsonByteLength:i,batchTableBinaryByteLength:o}=t.header;if(i>0){const r=Ui(e,n,i);t.batchTableJson=JSON.parse(r),n+=i,o>0&&(t.batchTableBinary=new Uint8Array(e,n,o),t.batchTableBinary=new Uint8Array(t.batchTableBinary),n+=o)}return n}(t,e,n)}function uo(t,e=[0,0,0]){const n=t>>11&31,r=t>>5&63,i=31&t;return e[0]=n<<3,e[1]=r<<2,e[2]=i<<3,e}function co(t,e,n){if(!(e||t&&t.batchIds&&n))return null;const{batchIds:r,isRGB565:i,pointCount:o}=t;if(r&&n){const t=new Uint8ClampedArray(3*o);for(let e=0;e255*t);t[3*e]=o[0],t[3*e+1]=o[1],t[3*e+2]=o[2]}return{type:Vi.UNSIGNED_BYTE,value:t,size:3,normalized:!0}}if(i){const t=new Uint8ClampedArray(3*o);for(let n=0;nn||e<0||e>n)throw new Error("x and y must be unsigned normalized integers between 0 and ".concat(n));if(r.x=ho(t,n),r.y=ho(e,n),r.z=1-(Math.abs(r.x)+Math.abs(r.y)),r.z<0){const t=r.x;r.x=(1-Math.abs(r.y))*fo(t),r.y=(1-Math.abs(t))*fo(r.y)}return r.normalize()}function Ao(t,e,n){return po(t,e,255,n)}const go=new rt.a;function mo(t,e,n){return t.isQuantized?n["3d-tiles"]&&n["3d-tiles"].decodeQuantizedPositions?(t.isQuantized=!1,function(t,e){const n=new rt.a,r=new Float32Array(3*t.pointCount);for(let i=0;i12;){const a={};t.tiles.push(a),n=await o(e,n,r,i,a)}return n}(i,t,e,n,r,To);case zi.BATCHED_3D_MODEL:return await Oo(i,t,e,n,r);case zi.GLTF:return await async function(t,e,n,r){t.rotateYtoZ=!0,t.gltfUpAxis=n["3d-tiles"]&&n["3d-tiles"].assetGltfUpAxis?n["3d-tiles"].assetGltfUpAxis:"Y";const{parse:i}=r;t.gltf=await i(e,vo.a,n,r)}(i,t,n,r);case zi.INSTANCED_3D_MODEL:return await So(i,t,e,n,r);case zi.POINT_CLOUD:return await yo(i,t,e,n,r);default:throw new Error("3DTileLoader: unknown type ".concat(i.type))}}var Co=n(98);async function Po(t,e,n){const r=t[e].bufferView,i=t.bufferViews[r],o=t.buffers[i.buffer];if(o.uri){const t=await Object(Co.a)(o.uri),e=await t.arrayBuffer();return new Uint8Array(e,i.byteOffset,i.byteLength)}return new Uint8Array(n,i.byteOffset,i.byteLength)}function Mo(t){const e=new DataView(t);return e.getUint32(0,!0)+2**32*e.getUint32(4,!0)}const Io={id:"3d-tiles-subtree",name:"3D Tiles Subtree",module:"3d-tiles",version:"3.2.10",extensions:["subtree"],mimeTypes:["application/octet-stream"],tests:["subtree"],parse:async function(t){if(1952609651!==new Uint32Array(t.slice(0,4))[0])throw new Error("Wrong subtree file magic number");if(1!==new Uint32Array(t.slice(4,8))[0])throw new Error("Wrong subtree file verson, must be 1");const e=Mo(t.slice(8,16)),n=new Uint8Array(t,24,e),r=new TextDecoder("utf8").decode(n),i=JSON.parse(r),o=Mo(t.slice(16,24));let a=new ArrayBuffer(0);return o&&(a=t.slice(24+e)),"bufferView"in i.tileAvailability&&(i.tileAvailability.explicitBitstream=await Po(i,"tileAvailability",a)),"bufferView"in i.contentAvailability&&(i.contentAvailability.explicitBitstream=await Po(i,"contentAvailability",a)),"bufferView"in i.childSubtreeAvailability&&(i.childSubtreeAvailability.explicitBitstream=await Po(i,"childSubtreeAvailability",a)),i},options:{}},Bo={QUADTREE:4,OCTREE:8};function Ro(t,e){return"constant"in t?Boolean(t.constant):!!t.explicitBitstream&&function(t,e){const n=Math.floor(t/8),r=t%8;return 1==(e[n]>>r&1)}(e,t.explicitBitstream)}function ko(t,e,n,r){const{basePath:i,refine:o,getRefine:a,lodMetricType:s,getTileType:u,rootLodMetricValue:c,rootBoundingVolume:l}=r,h=t.contentUrl&&t.contentUrl.replace("".concat(i,"/"),""),f=c/2**e,p=function(t,e,n){if(e.region){const{childTileX:r,childTileY:i,childTileZ:o}=n,[a,s,u,c,l,h]=e.region,f=2**t,p=(u-a)/f,d=(c-s)/f,A=(h-l)/f,[g,m]=[a+p*r,a+p*(r+1)],[y,v]=[s+d*i,s+d*(i+1)],[_,b]=[l+A*o,l+A*(o+1)];return{region:[g,y,m,v,_,b]}}return console.warn("Unsupported bounding volume type: ",e),null}(e,l,n);return{children:t.children,contentUrl:t.contentUrl,content:{uri:h},id:t.contentUrl,refine:a(o),type:u(t),lodMetricType:s,lodMetricValue:f,boundingVolume:p}}function Lo(t,e){return parseInt(t.toString(2)+e.toString(2),2)}function Do(t,e,n,r,i){const o=function(t){const e={};for(const n in t)e["{".concat(n,"}")]=t[n];return e}({level:e,x:n,y:r,z:i});return t.replace(/{level}|{x}|{y}|{z}/gi,t=>o[t])}function jo(t){if(!t.contentUrl)return ei;const e=t.contentUrl.split(".").pop();switch(e){case"pnts":return ri;case"i3dm":case"b3dm":case"glb":case"gltf":return ni;default:return e}}function Fo(t){switch(t){case"REPLACE":case"replace":return ti;case"ADD":case"add":return $r;default:return t}}function zo(t,e){if(/^[a-z][0-9a-z+.-]*:/i.test(e)){const n=new URL(t,"".concat(e,"/"));return decodeURI(n.toString())}return t.startsWith("/")?t:"".concat(e,"/").concat(t)}function Uo(t,e){if(!t)return null;if(t.content){const n=t.content.uri||t.content.url;t.contentUrl=zo(n,e.basePath)}return t.id=t.contentUrl,t.lodMetricType=si,t.lodMetricValue=t.geometricError,t.transformMatrix=t.transform,t.type=jo(t),t.refine=Fo(t.refine),t}async function No(t){if(!t.root)return null;const e=t.basePath,n=t.root.extensions["3DTILES_implicit_tiling"],{subdivisionScheme:r,maximumLevel:i,subtreeLevels:o,subtrees:{uri:a}}=n,s=zo(Do(a,0,0,0,0),e),u=await Object(ur.a)(s,Io),c=zo(t.root.content.uri,e),l=t.root.refine,h=t.root.geometricError,f=t.root.boundingVolume,p={contentUrlTemplate:c,subtreesUriTemplate:a,subdivisionScheme:r,subtreeLevels:o,maximumLevel:i,refine:l,basePath:e,lodMetricType:si,rootLodMetricValue:h,rootBoundingVolume:f,getTileType:jo,getRefine:Fo};return await async function(t,e,n){if(!t)return null;t.lodMetricType=si,t.lodMetricValue=t.geometricError,t.transformMatrix=t.transform;const{children:r,contentUrl:i}=await async function t(e){const{options:n,parentData:r={mortonIndex:0,x:0,y:0,z:0},childIndex:i=0,globalData:o={level:0,mortonIndex:0,x:0,y:0,z:0}}=e;let{subtree:a,level:s=0}=e;const{subdivisionScheme:u,subtreeLevels:c,maximumLevel:l,contentUrlTemplate:h,subtreesUriTemplate:f,basePath:p}=n,d={children:[],lodMetricValue:0,contentUrl:""},A=Bo[u],g=1&i,m=i>>1&1,y=i>>2&1,v=(A**s-1)/(A-1);let _=Lo(r.mortonIndex,i),b=v+_,x=Lo(r.x,g),w=Lo(r.y,m),E=Lo(r.z,y),O=!1;s+1>c&&(O=Ro(a.childSubtreeAvailability,_));const S=Lo(o.x,x),T=Lo(o.y,w),C=Lo(o.z,E),P=s+o.level;if(O){const t=Do("".concat(p,"/").concat(f),P,S,T,C);a=await Object(ur.a)(t,Io),o.mortonIndex=_,o.x=x,o.y=w,o.z=E,o.level=s,_=0,b=0,x=0,w=0,E=0,s=0}if(!Ro(a.tileAvailability,b)||s>l)return d;Ro(a.contentAvailability,b)&&(d.contentUrl=Do(h,P,S,T,C));const M=s+1,I={mortonIndex:_,x:x,y:w,z:E};for(let e=0;e0;){const t=(r.pop()||{}).children||[];for(const n of t)Uo(n,{basePath:e}),r.push(n)}return n}(i),i.type=ai,i.lodMetricType=si,i.lodMetricValue=(null===(r=i.root)||void 0===r?void 0:r.lodMetricValue)||0,i}(t,e,n):await async function(t,e,n){const r={content:{featureIds:null}};return await To(t,0,e,n,r.content),r.content}(t,e,n);return t},options:{"3d-tiles":{loadGLTF:!0,decodeQuantizedPositions:!1,isTileset:"auto",assetGltfUpAxis:null}}};function Vo(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Ho(t){for(var e=1;ee[1])&&this.setState({zRange:[r,i]})}}}},{key:"renderLayers",value:function(){var t=this.props,e=t.color,n=t.material,r=t.elevationData,i=t.texture,o=t.wireframe,a=t.meshMaxError,s=t.elevationDecoder,u=t.tileSize,c=t.maxZoom,l=t.minZoom,h=t.extent,f=t.maxRequests,p=t.onTileLoad,d=t.onTileUnload,A=t.onTileError,g=t.maxCacheSize,m=t.maxCacheByteSize,y=t.refinementStrategy;return this.state.isTiled?new Je(this.getSubLayerProps({id:"tiles"}),{getTileData:this.getTiledTerrainData.bind(this),renderSubLayers:this.renderSubLayers.bind(this),updateTriggers:{getTileData:{elevationData:na(r),texture:na(i),meshMaxError:a,elevationDecoder:s}},onViewportLoad:this.onViewportLoad.bind(this),zRange:this.state.zRange||null,tileSize:u,maxZoom:c,minZoom:l,extent:h,maxRequests:f,onTileLoad:p,onTileUnload:d,onTileError:A,maxCacheSize:g,maxCacheByteSize:m,refinementStrategy:y}):new(this.getSubLayerClass("mesh",rr.a))(this.getSubLayerProps({id:"mesh"}),{data:ta,mesh:this.state.terrain,texture:i,_instanced:!1,getPosition:function(t){return[0,0,0]},getColor:e,material:n,wireframe:o})}}]),n}(m.a);f()(ra,"defaultProps",ea),f()(ra,"layerName","TerrainLayer");var ia=n(36);function oa(t,e,n){const r=aa(t),i=Object.keys(r).filter(t=>r[t]!==Array);return function(t,e,n){const{pointPositionsCount:r,pointFeaturesCount:i,linePositionsCount:o,linePathsCount:a,lineFeaturesCount:s,polygonPositionsCount:u,polygonObjectsCount:c,polygonRingsCount:l,polygonFeaturesCount:h,propArrayTypes:f,coordLength:p}=e,{numericPropKeys:d=[],PositionDataType:A=Float32Array}=n,g=t[0]&&"id"in t[0],m=t.length>65535?Uint32Array:Uint16Array,y={type:"Point",positions:new A(r*p),globalFeatureIds:new m(r),featureIds:i>65535?new Uint32Array(r):new Uint16Array(r),numericProps:{},properties:[],fields:[]},v={type:"LineString",pathIndices:o>65535?new Uint32Array(a+1):new Uint16Array(a+1),positions:new A(o*p),globalFeatureIds:new m(o),featureIds:s>65535?new Uint32Array(o):new Uint16Array(o),numericProps:{},properties:[],fields:[]},_={type:"Polygon",polygonIndices:u>65535?new Uint32Array(c+1):new Uint16Array(c+1),primitivePolygonIndices:u>65535?new Uint32Array(l+1):new Uint16Array(l+1),positions:new A(u*p),triangles:[],globalFeatureIds:new m(u),featureIds:h>65535?new Uint32Array(u):new Uint16Array(u),numericProps:{},properties:[],fields:[]};for(const t of[y,v,_])for(const e of d){const n=f[e];t.numericProps[e]=new n(t.positions.length/p)}v.pathIndices[a]=o,_.polygonIndices[c]=u,_.primitivePolygonIndices[l]=u;const b={pointPosition:0,pointFeature:0,linePosition:0,linePath:0,lineFeature:0,polygonPosition:0,polygonObject:0,polygonRing:0,polygonFeature:0,feature:0};for(const e of t){const t=e.geometry,n=e.properties||{};switch(t.type){case"Point":sa(t,y,b,p,n),y.properties.push(pa(n,d)),g&&y.fields.push({id:e.id}),b.pointFeature++;break;case"LineString":ua(t,v,b,p,n),v.properties.push(pa(n,d)),g&&v.fields.push({id:e.id}),b.lineFeature++;break;case"Polygon":ca(t,_,b,p,n),_.properties.push(pa(n,d)),g&&_.fields.push({id:e.id}),b.polygonFeature++;break;default:throw new Error("Invalid geometry type")}b.feature++}return function(t,e,n,r){return{points:{...t,positions:{value:t.positions,size:r},globalFeatureIds:{value:t.globalFeatureIds,size:1},featureIds:{value:t.featureIds,size:1},numericProps:ha(t.numericProps,1)},lines:{...e,positions:{value:e.positions,size:r},pathIndices:{value:e.pathIndices,size:1},globalFeatureIds:{value:e.globalFeatureIds,size:1},featureIds:{value:e.featureIds,size:1},numericProps:ha(e.numericProps,1)},polygons:{...n,positions:{value:n.positions,size:r},polygonIndices:{value:n.polygonIndices,size:1},primitivePolygonIndices:{value:n.primitivePolygonIndices,size:1},triangles:{value:new Uint32Array(n.triangles),size:1},globalFeatureIds:{value:n.globalFeatureIds,size:1},featureIds:{value:n.featureIds,size:1},numericProps:ha(n.numericProps,1)}}}(y,v,_,p)}(t,{propArrayTypes:r,...e},{numericPropKeys:n&&n.numericPropKeys||i,PositionDataType:n?n.PositionDataType:Float32Array})}function aa(t){const e={};for(const n of t)if(n.properties)for(const t in n.properties){const r=n.properties[t];e[t]=da(r,e[t])}return e}function sa(t,e,n,r,i){e.positions.set(t.data,n.pointPosition*r);const o=t.data.length/r;fa(e,i,n.pointPosition,o),e.globalFeatureIds.fill(n.feature,n.pointPosition,n.pointPosition+o),e.featureIds.fill(n.pointFeature,n.pointPosition,n.pointPosition+o),n.pointPosition+=o}function ua(t,e,n,r,i){e.positions.set(t.data,n.linePosition*r);const o=t.data.length/r;fa(e,i,n.linePosition,o),e.globalFeatureIds.fill(n.feature,n.linePosition,n.linePosition+o),e.featureIds.fill(n.lineFeature,n.linePosition,n.linePosition+o);for(let i=0,o=t.indices.length;i(t-c)/o),h=Object(ia.f)(u,l,o,e);for(let e=0,n=h.length;e>3}if(1===n||2===n)t.readSVarint(),t.readSVarint(),1===n&&(s&&a.push(s),[]),s&&s.push([i,o]);else{if(7!==n)throw new Error("unknown command ".concat(n));s&&s.push(s[0].slice())}}return s&&a.push(s),a}bbox(){const t=this._pbf;t.pos=this._geometry;const e=t.readVarint()+t.pos;let n=1,r=0,i=0,o=0,a=1/0,s=-1/0,u=1/0,c=-1/0;for(;t.pos>3}if(1===n||2===n)t.readSVarint(),t.readSVarint(),is&&i,oc&&o;else if(7!==n)throw new Error("unknown command ".concat(n))}return[a,u,s,c]}_toGeoJSON(t){let e,n,r=this.loadGeometry(),i=va.types[this.type];switch(this.type){case 1:const i=[];for(0;e=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];const e=this._pbf.readVarint()+this._pbf.pos;return new va(this._pbf,e,this.extent,this._keys,this._values)}}function ba(t,e,n){e&&n&&(15===t?e.version=n.readVarint():1===t?e.name=n.readString():5===t?e.extent=n.readVarint():2===t?e._features.push(n.pos):3===t?e._keys.push(n.readString()):4===t&&e._values.push(function(t){let e=null;const n=t.readVarint()+t.pos;for(;t.pos>3;1===e?t.readString():2===e?t.readFloat():3===e?t.readDouble():4===e?t.readVarint64():5===e?t.readVarint():6===e?t.readSVarint():7===e?t.readBoolean():null}return e}(n)))}class xa{constructor(t,e){Object(cr.a)(this,"layers",void 0),this.layers=t.readFields(wa,{},e)}}function wa(t,e,n){if(3===t&&n){const t=new _a(n,n.readVarint()+n.pos);t.length&&e&&(e[t.name]=t)}}function Ea(t){const e=t.indices.length;if(e<=1)return{type:"Polygon",data:t.data,areas:[[Object(ia.g)(t.data)]],indices:[t.indices]};const n=[],r=[];let i,o=[],a=[],s=0;for(let u,c,l=0;l>3),1===Ta||2===Ta)t.readSVarint(),t.readSVarint(),1===Ta&&e.push(Ba),n.push(Ma,Ia),2;else{if(7!==Ta)throw new Error("unknown command ".concat(Ta));if(Ba>0){const t=e[e.length-1];n.push(n[t],n[t+1]),2}}return{data:n,indices:e}}_toBinaryCoordinates(t){const e=this.loadGeometry();let n;t(e.data,this);switch(this.type){case 1:this._geometryInfo.pointFeaturesCount++,this._geometryInfo.pointPositionsCount+=e.indices.length,{type:"Point",...e};break;case 2:this._geometryInfo.lineFeaturesCount++,this._geometryInfo.linePathsCount+=e.indices.length,this._geometryInfo.linePositionsCount+=e.data.length/2,{type:"LineString",...e};break;case 3:Ea(e),this._geometryInfo.polygonFeaturesCount++,this._geometryInfo.polygonObjectsCount+=n.indices.length;for(const t of n.indices)this._geometryInfo.polygonRingsCount+=t.length;this._geometryInfo.polygonPositionsCount+=n.data.length/2;break;default:throw new Error("Invalid geometry type: ".concat(this.type))}const r={type:"Feature",geometry:n,properties:this.properties};return null!==this.id&&(r.id=this.id),r}toBinaryCoordinates(t){if("function"==typeof t)return this._toBinaryCoordinates(t);const{x:e,y:n,z:r}=t,i=this.extent*Math.pow(2,r),o=this.extent*e,a=this.extent*n;return this._toBinaryCoordinates(t=>function(t,e,n,r){for(let i=0,o=t.length;i=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];const n=this._pbf.readVarint()+this._pbf.pos;return new Ra(this._pbf,n,this.extent,this._keys,this._values,e)}}function La(t,e,n){e&&n&&(15===t?e.version=n.readVarint():1===t?e.name=n.readString():5===t?e.extent=n.readVarint():2===t?e._features.push(n.pos):3===t?e._keys.push(n.readString()):4===t&&e._values.push(function(t){let e=null;const n=t.readVarint()+t.pos;for(;t.pos>3;1===e?t.readString():2===e?t.readFloat():3===e?t.readDouble():4===e?t.readVarint64():5===e?t.readVarint():6===e?t.readSVarint():7===e?t.readBoolean():null}return e}(n)))}class Da{constructor(t,e){Object(cr.a)(this,"layers",void 0),this.layers=t.readFields(ja,{},e)}}function ja(t,e,n){if(3===t&&n){const t=new ka(n,n.readVarint()+n.pos);t.length&&e&&(e[t.name]=t)}}function Fa(t,e){var n,r;const i=function(t){var e;if(null==t||!t.mvt)throw new Error("mvt options required");const n="wgs84"===(null===t.mvt||void 0===e?void 0:e.coordinates),{tileIndex:r}=t.mvt,i=r&&Number.isFinite(r.x)&&Number.isFinite(r.y)&&Number.isFinite(r.z);if(n&&!i)throw new Error("MVT Loader: WGS84 coordinates need tileIndex property");return t.mvt}(e),o=(null==e||null===e.gis||void 0===n?void 0:n.format)||(null==e||null===e.mvt||void 0===r?void 0:r.shape);switch(o){case"columnar-table":return{shape:"columnar-table",data:za(t,i)};case"geojson-row-table":return{shape:"geojson-row-table",data:Ua(t,i)};case"geojson":return Ua(t,i);case"binary-geometry":case"binary":return za(t,i);default:throw new Error(o)}}function za(t,e){const[n,r]=function(t,e){const n=[],r={coordLength:2,pointPositionsCount:0,pointFeaturesCount:0,linePositionsCount:0,linePathsCount:0,lineFeaturesCount:0,polygonPositionsCount:0,polygonObjectsCount:0,polygonRingsCount:0,polygonFeaturesCount:0};if(t.byteLength<=0)return[n,r];const i=new Da(new ga.a(t));return(e&&Array.isArray(e.layers)?e.layers:Object.keys(i.layers)).forEach(t=>{const o=i.layers[t];if(o)for(let i=0;i{const i=r.layers[t];if(i)for(let r=0;r1)return{type:"MultiPoint",coordinates:i};return{type:"Point",coordinates:i[0]}}(t,e,n);case"LineString":return function(t,e=-1/0,n=1/0){const{positions:r}=t,i=t.pathIndices.value.filter(t=>t>=e&&t<=n);if(!(i.length>2)){return{type:"LineString",coordinates:Ka(r,i[0],i[1])}}const o=[];for(let t=0;tt>=n&&t<=r),a=e.primitivePolygonIndices.value.filter(t=>t>=n&&t<=r);if(!(o.length>2)){const t=[];for(let e=0;e= clip_bounds[0] && position.y >= clip_bounds[1] && position.x < clip_bounds[2] && position.y < clip_bounds[3];\n}\n",ns={name:"clip-vs",vs:es},rs={"vs:#decl":"\nvarying float clip_isVisible;\n","vs:DECKGL_FILTER_GL_POSITION":"\n clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));\n","fs:#decl":"\nvarying float clip_isVisible;\n","fs:DECKGL_FILTER_COLOR":"\n if (clip_isVisible < 0.5) discard;\n"},is={name:"clip-fs",fs:es},os={"vs:#decl":"\nvarying vec2 clip_commonPosition;\n","vs:DECKGL_FILTER_GL_POSITION":"\n clip_commonPosition = geometry.position.xy;\n","fs:#decl":"\nvarying vec2 clip_commonPosition;\n","fs:DECKGL_FILTER_COLOR":"\n if (!clip_isInBounds(clip_commonPosition)) discard;\n"},as=function(t){a()(n,t);var e=$a(n);function n(){return i()(this,n),e.apply(this,arguments)}return g()(n,[{key:"getShaders",value:function(){var t="instancePositions"in this.getAttributeManager().attributes;return"clipByInstance"in this.props&&(t=this.props.clipByInstance),this.state.clipByInstance=t,t?{modules:[ns],inject:rs}:{modules:[is],inject:os}}},{key:"draw",value:function(t){var e=t.uniforms,n=this.props.clipBounds,r=void 0===n?ts.clipBounds:n;if(this.state.clipByInstance)e.clip_bounds=r;else{var i=this.projectPosition([r[0],r[1],0]),o=this.projectPosition([r[2],r[3],0]);e.clip_bounds=[Math.min(i[0],o[0]),Math.min(i[1],o[1]),Math.max(i[0],o[0]),Math.max(i[1],o[1])]}}}]),n}(Ya.a);function ss(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function us(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function As(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=o&&i[e]=0?t.globalFeatureIds.value[c]:-1}return e?u=ys(t.properties,(function(t){return t[e]===n}),o,a):t.fields&&(u=ys(t.fields,(function(t){return t.id===n}),o,a)),u>=0?function(t,e){if(!t.__ids){for(var n=[],r=t.featureIds.value,i=t.globalFeatureIds.value,o=0;o=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function _s(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);ni&&(t.minZoom=e.minzoom),Number.isFinite(e.maxzoom)&&(!Number.isFinite(o)||e.maxzoom=0)return s}}catch(t){o.e(t)}finally{o.f()}return-1}(u,a,l,c?"":r):-1}},{key:"_pickObjects",value:function(t){var e=this.context,n=e.deck,r=e.viewport,i=r.width,o=r.height,a=r.x,s=r.y,u=[this.id];return n.pickObjects({x:a,y:s,width:i,height:o,layerIds:u,maxObjects:t})}},{key:"getRenderedFeatures",value:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=this._pickObjects(e),r=new Set,i=[],o=vs(n);try{for(o.s();!(t=o.n()).done;){var a=t.value,s=Ss(a.object,this.props.uniqueIdProperty);void 0===s?i.push(a.object):r.has(s)||(r.add(s),i.push(a.object))}}catch(t){o.e(t)}finally{o.f()}return i}},{key:"_setWGS84PropertyForTiles",value:function(){var t=this;this.state.tileset.selectedTiles.forEach((function(e){e.hasOwnProperty("dataInWGS84")||Object.defineProperty(e,"dataInWGS84",{get:function(){if(!e.content)return null;if(t.state.binary&&Array.isArray(e.content)&&!e.content.length)return[];var n,r=e.bbox;if(void 0===e._contentWGS84&&(n=r,Number.isFinite(n.west)&&Number.isFinite(n.north)&&Number.isFinite(n.east)&&Number.isFinite(n.south))){var i=t.state.binary?qa(e.content):e.content;e._contentWGS84=i.map((function(e){return Ps(e,r,t.context.viewport)}))}return e._contentWGS84}})}))}}]),r}(Je);function Ss(t,e){return t.properties&&e?t.properties[e]:"id"in t?t.id:void 0}function Ts(t){var e;return(null===(e=t.properties)||void 0===e?void 0:e.layerName)||null}function Cs(t){return null!=t&&""!==t}function Ps(t,e,n){var r=ws(ws({},t),{},{geometry:{type:t.geometry.type}});return Object.defineProperty(r.geometry,"coordinates",{get:function(){return function(t,e,n){var r=[n.projectFlat([e.west,e.north]),n.projectFlat([e.east,e.south])];return us(us({},t),{},{coordinates:cs[t.type](t.coordinates,r,n)})}(t.geometry,e,n).coordinates}}),r}f()(Os,"layerName","MVTLayer"),f()(Os,"defaultProps",Es);for(var Ms={},Is=0;Is<"0123456789bcdefghjkmnpqrstuvwxyz".length;Is++)Ms["0123456789bcdefghjkmnpqrstuvwxyz".charAt(Is)]=Is;function Bs(t){var e=function(t){for(var e,n=!0,r=90,i=-90,o=180,a=-180,s=0,u=0,c=t.length;u=0;h--){var f=s>>h&1;n?(e=(o+a)/2,1===f?a=e:o=e):(e=(r+i)/2,1===f?i=e:r=e),n=!n}}return[i,a,r,o]}(t),n=E()(e,4),r=n[0],i=n[1],o=n[2],a=n[3];return[a,o,a,r,i,r,i,o,a,o]}function Rs(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=l()(t);if(e){var i=l()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return u()(this,n)}}var ks=function(t){a()(n,t);var e=Rs(n);function n(){return i()(this,n),e.apply(this,arguments)}return g()(n,[{key:"indexToBounds",value:function(){var t=this.props,e=t.data,n=t.getGeohash;return{data:e,_normalize:!1,positionFormat:"XY",getPolygon:function(t,e){return Bs(n(t,e))}}}}]),n}(x);f()(ks,"layerName","GeohashLayer"),f()(ks,"defaultProps",{getGeohash:{type:"accessor",value:function(t){return t.geohash}}}),n.d(e,"GreatCircleLayer",(function(){return d})),n.d(e,"S2Layer",(function(){return D})),n.d(e,"QuadkeyLayer",(function(){return U})),n.d(e,"TileLayer",(function(){return Je})),n.d(e,"TripsLayer",(function(){return tn})),n.d(e,"H3ClusterLayer",(function(){return Zn})),n.d(e,"H3HexagonLayer",(function(){return Wn})),n.d(e,"Tile3DLayer",(function(){return Jo})),n.d(e,"TerrainLayer",(function(){return ra})),n.d(e,"MVTLayer",(function(){return Os})),n.d(e,"GeohashLayer",(function(){return ks})),n.d(e,"_GeoCellLayer",(function(){return x})),n.d(e,"_getURLFromTemplate",(function(){return Te})),n.d(e,"_Tileset2D",(function(){return Ne})),n.d(e,"_Tile2DHeader",(function(){return J}))},function(t,e,n){"use strict";n.r(e);var r=n(3),i=n.n(r),o=n(4),a=n.n(o),s=n(7),u=n.n(s),c=n(5),l=n.n(c),h=n(6),f=n.n(h),p=n(2),d=n.n(p),A=n(0),g=n.n(A),m=n(20),y=n(181),v=n(8),_=n(234),b=n(197),x=n(178),w=n(293);function E(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;const r=Math.fround(t),i=t-r;return e[n]=r,e[n+1]=i,e}function O(t){return t-Math.fround(t)}function S(t){const e=new Float32Array(32);for(let n=0;n<4;++n)for(let r=0;r<4;++r){const i=4*n+r;E(t[4*r+n],e,2*i)}return e}const T={ONE:1};const C={name:"fp64-arithmetic",vs:"uniform float ONE;\nvec2 split(float a) {\n const float SPLIT = 4097.0;\n float t = a * SPLIT;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float a_hi = t * ONE - (t - a);\n float a_lo = a * ONE - a_hi;\n#else\n float a_hi = t - (t - a);\n float a_lo = a - a_hi;\n#endif\n return vec2(a_hi, a_lo);\n}\nvec2 split2(vec2 a) {\n vec2 b = split(a.x);\n b.y += a.y;\n return b;\n}\nvec2 quickTwoSum(float a, float b) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float sum = (a + b) * ONE;\n float err = b - (sum - a) * ONE;\n#else\n float sum = a + b;\n float err = b - (sum - a);\n#endif\n return vec2(sum, err);\n}\nvec2 twoSum(float a, float b) {\n float s = (a + b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * ONE - a) * ONE;\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);\n#else\n float v = s - a;\n float err = (a - (s - v)) + (b - v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSub(float a, float b) {\n float s = (a - b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * ONE - a) * ONE;\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);\n#else\n float v = s - a;\n float err = (a - (s - v)) - (b + v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSqr(float a) {\n float prod = a * a;\n vec2 a_fp64 = split(a);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *\n a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;\n#else\n float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;\n#endif\n return vec2(prod, err);\n}\n\nvec2 twoProd(float a, float b) {\n float prod = a * b;\n vec2 a_fp64 = split(a);\n vec2 b_fp64 = split(b);\n float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +\n a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;\n return vec2(prod, err);\n}\n\nvec2 sum_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSum(a.x, b.x);\n t = twoSum(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 sub_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSub(a.x, b.x);\n t = twoSub(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 mul_fp64(vec2 a, vec2 b) {\n vec2 prod = twoProd(a.x, b.x);\n prod.y += a.x * b.y;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n prod.y += a.y * b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n return prod;\n}\n\nvec2 div_fp64(vec2 a, vec2 b) {\n float xn = 1.0 / b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n vec2 yn = mul_fp64(a, vec2(xn, 0));\n#else\n vec2 yn = a * xn;\n#endif\n float diff = (sub_fp64(a, mul_fp64(b, yn))).x;\n vec2 prod = twoProd(xn, diff);\n return sum_fp64(yn, prod);\n}\n\nvec2 sqrt_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n\n float x = 1.0 / sqrt(a.x);\n float yn = a.x * x;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n vec2 yn_sqr = twoSqr(yn) * ONE;\n#else\n vec2 yn_sqr = twoSqr(yn);\n#endif\n float diff = sub_fp64(a, yn_sqr).x;\n vec2 prod = twoProd(x * 0.5, diff);\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n return sum_fp64(split(yn), prod);\n#else\n return sum_fp64(vec2(yn, 0.0), prod);\n#endif\n}\n",fs:null,getUniforms:function(){return T},fp64ify:E,fp64LowPart:O,fp64ifyMatrix4:S};var P,M,I=n(155),B=n(204),R={SUM:1,MEAN:2,MIN:3,MAX:4};function k(t,e){return t+e}function L(t,e){return e>t?e:t}function D(t,e){return e1&&void 0!==arguments[1]?arguments[1]:{};if(Number.isFinite(t))return t;return function(n){return e.index=n.index,t(n.source,e)}}(e,n),r){case R.MIN:return function(t){return function(t,e){if(Number.isFinite(e))return t.length?e:null;var n=t.map(e).filter(Number.isFinite);return n.length?n.reduce(D,1/0):null}(t,e)};case R.SUM:return function(t){return function(t,e){if(Number.isFinite(e))return t.length?t.length*e:null;var n=t.map(e).filter(Number.isFinite);return n.length?n.reduce(k,0):null}(t,e)};case R.MEAN:return function(t){return function(t,e){if(Number.isFinite(e))return t.length?e:null;var n=t.map(e).filter(Number.isFinite);return n.length?n.reduce(k,0)/n.length:null}(t,e)};case R.MAX:return function(t){return function(t,e){if(Number.isFinite(e))return t.length?e:null;var n=t.map(e).filter(Number.isFinite);return n.length?n.reduce(L,-1/0):null}(t,e)};default:return null}}function F(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(n){return e.indices=n.map((function(t){return t.index})),t(n.map((function(t){return t.source})),e)}}var z,U={projectPoints:!1,viewport:null,createBufferObjects:!0,moduleSettings:{}},N=3402823466e29,G=[32775,32774],V=[32776,32774],H=[32776,32775],W=(P={},g()(P,R.SUM,32774),g()(P,R.MEAN,32774),g()(P,R.MIN,G),g()(P,R.MAX,V),P),q={size:1,operation:R.SUM,needMin:!1,needMax:!1,combineMaxMin:!1},X=(M={},g()(M,10240,9728),g()(M,10241,9728),n(102)),J=n(71),Z=(z={},g()(z,10240,9728),g()(z,10241,9728),z);function Q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.width,r=void 0===n?1:n,i=e.height,o=void 0===i?1:i,a=e.data,s=void 0===a?null:a,u=e.unpackFlipY,c=void 0===u||u,l=e.parameters,h=void 0===l?Z:l,f=new X.a(t,{data:s,format:Object(v.j)(t)?34836:6408,type:5126,border:0,mipmaps:!1,parameters:h,dataFormat:6408,width:r,height:o,unpackFlipY:c});return f}function K(t,e){var n=e.id,r=e.width,i=void 0===r?1:r,o=e.height,a=void 0===o?1:o,s=e.texture;return new J.a(t,{id:n,width:i,height:a,attachments:g()({},36064,s)})}function Y(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return $(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return $(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function $(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:{};i()(this,t),this.id=n.id||"gpu-grid-aggregator",this.gl=e,this.state={weightAttributes:{},textures:{},meanTextures:{},buffers:{},framebuffers:{},maxMinFramebuffers:{},minFramebuffers:{},maxFramebuffers:{},equations:{},resources:{},results:{}},this._hasGPUSupport=Object(v.j)(e)&&Object(_.c)(this.gl,y.a.BLEND_EQUATION_MINMAX,y.a.COLOR_ATTACHMENT_RGBA32F,y.a.TEXTURE_FLOAT),this._hasGPUSupport&&this._setupModels()}return a()(t,[{key:"delete",value:function(){var t=this.gridAggregationModel,e=this.allAggregationModel,n=this.meanTransform,r=this.state,i=r.textures,o=r.framebuffers,a=r.maxMinFramebuffers,s=r.minFramebuffers,u=r.maxFramebuffers,c=r.meanTextures,l=r.resources;null==t||t.delete(),null==e||e.delete(),null==n||n.delete(),function(t){(t=Array.isArray(t)?t:[t]).forEach((function(t){for(var e in t)t[e].delete()}))}([o,i,a,s,u,c,l])}},{key:"run",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.setState({results:{}});var e=this._normalizeAggregationParams(t);return this._hasGPUSupport||m.a.log(1,"GPUGridAggregator: not supported")(),this._runAggregation(e)}},{key:"getData",value:function(t){var e={},n=this.state.results;for(var r in n[t].aggregationData||(n[t].aggregationData=n[t].aggregationBuffer.getData()),e.aggregationData=n[t].aggregationData,rt){var i=rt[r];(n[t][r]||n[t][i])&&(n[t][r]=n[t][r]||n[t][i].getData(),e[r]=n[t][r])}return e}},{key:"updateShaders",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.setState({shaderOptions:t,modelDirty:!0})}},{key:"_normalizeAggregationParams",value:function(t){var e=et(et({},U),t),n=e.weights;return n&&(e.weights=function(t){var e={};for(var n in t)e[n]=et(et({},q),t[n]);return e}(n)),e}},{key:"setState",value:function(t){Object.assign(this.state,t)}},{key:"_getAggregateData",value:function(t){var e={},n=this.state,r=n.textures,i=n.framebuffers,o=n.maxMinFramebuffers,a=n.minFramebuffers,s=n.maxFramebuffers,u=n.resources,c=t.weights;for(var l in c){e[l]={};var h=c[l],f=h.needMin,p=h.needMax,d=h.combineMaxMin;e[l].aggregationTexture=r[l],e[l].aggregationBuffer=Object(b.d)(i[l],{target:c[l].aggregationBuffer,sourceType:5126}),f&&p&&d?(e[l].maxMinBuffer=Object(b.d)(o[l],{target:c[l].maxMinBuffer,sourceType:5126}),e[l].maxMinTexture=u["".concat(l,"-maxMinTexture")]):(f&&(e[l].minBuffer=Object(b.d)(a[l],{target:c[l].minBuffer,sourceType:5126}),e[l].minTexture=u["".concat(l,"-minTexture")]),p&&(e[l].maxBuffer=Object(b.d)(s[l],{target:c[l].maxBuffer,sourceType:5126}),e[l].maxTexture=u["".concat(l,"-maxTexture")]))}return this._trackGPUResultBuffers(e,c),e}},{key:"_renderAggregateData",value:function(t){var e=t.cellSize,n=t.projectPoints,r=t.attributes,i=t.moduleSettings,o=t.numCol,a=t.numRow,s=t.weights,u=t.translation,c=t.scaling,l=this.state,h=l.maxMinFramebuffers,f=l.minFramebuffers,p=l.maxFramebuffers,d=[o,a],A={blend:!0,depthTest:!1,blendFunc:[1,1]},g={cellSize:e,gridSize:d,projectPoints:n,translation:u,scaling:c};for(var m in s){var y=s[m],v=y.needMin,_=y.needMax,b=v&&_&&s[m].combineMaxMin;this._renderToWeightsTexture({id:m,parameters:A,moduleSettings:i,uniforms:g,gridSize:d,attributes:r,weights:s}),b?this._renderToMaxMinTexture({id:m,parameters:et(et({},A),{},{blendEquation:H}),gridSize:d,minOrMaxFb:h[m],clearParams:{clearColor:[0,0,0,N]},combineMaxMin:b}):(v&&this._renderToMaxMinTexture({id:m,parameters:et(et({},A),{},{blendEquation:G}),gridSize:d,minOrMaxFb:f[m],clearParams:{clearColor:[N,N,N,0]},combineMaxMin:b}),_&&this._renderToMaxMinTexture({id:m,parameters:et(et({},A),{},{blendEquation:V}),gridSize:d,minOrMaxFb:p[m],clearParams:{clearColor:[0,0,0,0]},combineMaxMin:b}))}}},{key:"_renderToMaxMinTexture",value:function(t){var e=t.id,n=t.parameters,r=t.gridSize,i=t.minOrMaxFb,o=t.combineMaxMin,a=t.clearParams,s=void 0===a?{}:a,u=this.state.framebuffers,c=this.gl,l=this.allAggregationModel;Object(v.o)(c,et(et({},s),{},{framebuffer:i,viewport:[0,0,r[0],r[1]]}),(function(){c.clear(16384),l.draw({parameters:n,uniforms:{uSampler:u[e].texture,gridSize:r,combineMaxMin:o}})}))}},{key:"_renderToWeightsTexture",value:function(t){var e=t.id,n=t.parameters,r=t.moduleSettings,i=t.uniforms,o=t.gridSize,a=t.weights,s=this.state,u=s.framebuffers,c=s.equations,l=s.weightAttributes,h=this.gl,f=this.gridAggregationModel,p=a[e].operation,d=p===R.MIN?[N,N,N,0]:[0,0,0,0];if(Object(v.o)(h,{framebuffer:u[e],viewport:[0,0,o[0],o[1]],clearColor:d},(function(){h.clear(16384);var t={weights:l[e]};f.draw({parameters:et(et({},n),{},{blendEquation:c[e]}),moduleSettings:r,uniforms:i,attributes:t})})),p===R.MEAN){var A=this.state,m=A.meanTextures,y=A.textures,_={_sourceTextures:{aggregationValues:m[e]},_targetTexture:y[e],elementCount:y[e].width*y[e].height};this.meanTransform?this.meanTransform.update(_):this.meanTransform=function(t,e){return new w.a(t,et({vs:"#define SHADER_NAME gpu-aggregation-transform-mean-vs\nattribute vec4 aggregationValues;\nvarying vec4 meanValues;\n\nvoid main()\n{\n bool isCellValid = bool(aggregationValues.w > 0.);\n meanValues.xyz = isCellValid ? aggregationValues.xyz/aggregationValues.w : vec3(0, 0, 0);\n meanValues.w = aggregationValues.w;\n gl_PointSize = 1.0;\n}\n",_targetTextureVarying:"meanValues"},e))}(h,_),this.meanTransform.run({parameters:{blend:!1,depthTest:!1}}),u[e].attach(g()({},36064,y[e]))}}},{key:"_runAggregation",value:function(t){this._updateModels(t),this._setupFramebuffers(t),this._renderAggregateData(t);var e=this._getAggregateData(t);return this.setState({results:e}),e}},{key:"_setupFramebuffers",value:function(t){var e=this.state,n=e.textures,r=e.framebuffers,i=e.maxMinFramebuffers,o=e.minFramebuffers,a=e.maxFramebuffers,s=e.meanTextures,u=e.equations,c=t.weights,l=t.numCol,h=t.numRow,f={width:l,height:h};for(var p in c){var d=c[p],A=d.needMin,m=d.needMax,y=d.combineMaxMin,v=d.operation;n[p]=c[p].aggregationTexture||n[p]||Q(this.gl,{id:"".concat(p,"-texture"),width:l,height:h}),n[p].resize(f);var _=n[p];v===R.MEAN&&(s[p]=s[p]||Q(this.gl,{id:"".concat(p,"-mean-texture"),width:l,height:h}),s[p].resize(f),_=s[p]),r[p]?r[p].attach(g()({},36064,_)):r[p]=K(this.gl,{id:"".concat(p,"-fb"),width:l,height:h,texture:_}),r[p].resize(f),u[p]=W[v]||W.SUM,(A||m)&&(A&&m&&y?i[p]||(_=c[p].maxMinTexture||this._getMinMaxTexture("".concat(p,"-maxMinTexture")),i[p]=K(this.gl,{id:"".concat(p,"-maxMinFb"),texture:_})):(A&&(o[p]||(_=c[p].minTexture||this._getMinMaxTexture("".concat(p,"-minTexture")),o[p]=K(this.gl,{id:"".concat(p,"-minFb"),texture:_}))),m&&(a[p]||(_=c[p].maxTexture||this._getMinMaxTexture("".concat(p,"-maxTexture")),a[p]=K(this.gl,{id:"".concat(p,"-maxFb"),texture:_})))))}}},{key:"_getMinMaxTexture",value:function(t){var e=this.state.resources;return e[t]||(e[t]=Q(this.gl,{id:"resourceName"})),e[t]}},{key:"_setupModels",value:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.numCol,r=void 0===n?0:n,i=e.numRow,o=void 0===i?0:i,a=this.gl,s=this.state.shaderOptions;if(null===(t=this.gridAggregationModel)||void 0===t||t.delete(),this.gridAggregationModel=at(a,s),!this.allAggregationModel){var u=r*o;this.allAggregationModel=st(a,u)}}},{key:"_setupWeightAttributes",value:function(t){var e=this.state.weightAttributes,n=t.weights;for(var r in n)e[r]=t.attributes[r]}},{key:"_trackGPUResultBuffers",value:function(t,e){var n=this.state.resources;for(var r in t)if(t[r]){var i,o=Y(nt);try{for(o.s();!(i=o.n()).done;){var a=i.value;if(t[r][a]&&e[r][a]!==t[r][a]){var s="gpu-result-".concat(r,"-").concat(a);n[s]&&n[s].delete(),n[s]=t[r][a]}}}catch(t){o.e(t)}finally{o.f()}}}},{key:"_updateModels",value:function(t){var e=t.vertexCount,n=t.attributes,r=t.numCol,i=t.numRow;this.state.modelDirty&&(this._setupModels(t),this.setState({modelDirty:!1})),this._setupWeightAttributes(t),this.gridAggregationModel.setVertexCount(e),this.gridAggregationModel.setAttributes(n),this.allAggregationModel.setInstanceCount(r*i)}}],[{key:"getAggregationData",value:function(t){var e=t.aggregationData,n=t.maxData,r=t.minData,i=t.maxMinData,o=4*t.pixelIndex,a={};return e&&(a.cellCount=e[o+3],a.cellWeight=e[o]),i?(a.maxCellWieght=i[0],a.minCellWeight=i[3]):(n&&(a.maxCellWieght=n[0],a.totalCount=n[3]),r&&(a.minCellWeight=r[0],a.totalCount=n[3])),a}},{key:"getCellData",value:function(t){for(var e=t.countsData,n=t.size,r=void 0===n?1:n,i=e.length/4,o=new Float32Array(i*r),a=new Uint32Array(i),s=0;s 0. ? result.xy * scaling.xy : result.xy;\n return result.xy;\n}\n\nvoid main(void) {\n\n vWeights = weights;\n\n vec4 windowPos = vec4(positions, 1.);\n if (projectPoints) {\n windowPos = project_position_to_clipspace(positions, positions64Low, vec3(0));\n }\n\n vec2 pos = project_to_pixel(windowPos);\n\n vec2 pixelXY64[2];\n pixelXY64[0] = vec2(pos.x, 0.);\n pixelXY64[1] = vec2(pos.y, 0.);\n vec2 gridXY64[2];\n gridXY64[0] = div_fp64(pixelXY64[0], vec2(cellSize.x, 0));\n gridXY64[1] = div_fp64(pixelXY64[1], vec2(cellSize.y, 0));\n float x = floor(gridXY64[0].x);\n float y = floor(gridXY64[1].x);\n pos = vec2(x, y);\n pos = (pos * (2., 2.) / (gridSize)) - (1., 1.);\n vec2 offset = 1.0 / gridSize;\n pos = pos + offset;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n gl_PointSize = 1.0;\n}\n",fs:"#define SHADER_NAME gpu-aggregation-to-grid-fs\n\nprecision highp float;\n\nvarying vec3 vWeights;\n\nvoid main(void) {\n gl_FragColor = vec4(vWeights, 1.0);\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n",modules:[C,B.a]},e);return new x.a(t,et({id:"Gird-Aggregation-Model",vertexCount:1,drawMode:0},n))}function st(t,e){return new x.a(t,{id:"All-Aggregation-Model",vs:"#version 300 es\n#define SHADER_NAME gpu-aggregation-all-vs-64\n\nin vec2 position;\nuniform ivec2 gridSize;\nout vec2 vTextureCoord;\n\nvoid main(void) {\n vec2 pos = vec2(-1.0, -1.0);\n vec2 offset = 1.0 / vec2(gridSize);\n pos = pos + offset;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n\n int yIndex = gl_InstanceID / gridSize[0];\n int xIndex = gl_InstanceID - (yIndex * gridSize[0]);\n\n vec2 yIndexFP64 = vec2(float(yIndex), 0.);\n vec2 xIndexFP64 = vec2(float(xIndex), 0.);\n vec2 gridSizeYFP64 = vec2(gridSize[1], 0.);\n vec2 gridSizeXFP64 = vec2(gridSize[0], 0.);\n\n vec2 texCoordXFP64 = div_fp64(yIndexFP64, gridSizeYFP64);\n vec2 texCoordYFP64 = div_fp64(xIndexFP64, gridSizeXFP64);\n\n vTextureCoord = vec2(texCoordYFP64.x, texCoordXFP64.x);\n gl_PointSize = 1.0;\n}\n",fs:"#version 300 es\n#define SHADER_NAME gpu-aggregation-all-fs\n\nprecision highp float;\n\nin vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform bool combineMaxMin;\nout vec4 fragColor;\nvoid main(void) {\n vec4 textureColor = texture(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));\n if (textureColor.a == 0.) {\n discard;\n }\n fragColor.rgb = textureColor.rgb;\n fragColor.a = combineMaxMin ? textureColor.r : textureColor.a;\n}\n",modules:[C],vertexCount:1,drawMode:0,isInstanced:!0,instanceCount:e,attributes:{position:[0,0]}})}var ut=n(58),ct=n(220),lt=n(157),ht=[[255,255,178],[254,217,118],[254,178,76],[253,141,60],[240,59,32],[189,0,38]];function ft(t){var e,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Float32Array;if(Number.isFinite(t[0]))e=new r(t);else{e=new r(4*t.length);for(var i=0,o=0;o= domain.x && value <= domain.y) {\n float domainRange = domain.y - domain.x;\n if (domainRange <= 0.) {\n outColor = colorRange[0];\n } else {\n float rangeCount = float(RANGE_COUNT);\n float rangeStep = domainRange / rangeCount;\n float idx = floor((value - domain.x) / rangeStep);\n idx = clamp(idx, 0., rangeCount - 1.);\n int intIdx = int(idx);\n outColor = colorRange[intIdx];\n }\n }\n outColor = outColor / 255.;\n return outColor;\n}\n\nvoid main(void) {\n vSampleCount = instanceCounts.a;\n\n float weight = instanceCounts.r;\n float maxWeight = texture2D(maxTexture, vec2(0.5)).r;\n\n float step = weight / maxWeight;\n vec4 minMaxColor = mix(minColor, maxColor, step) / 255.;\n\n vec2 domain = colorDomain;\n float domainMaxValid = float(colorDomain.y != 0.);\n domain.y = mix(maxWeight, colorDomain.y, domainMaxValid);\n vec4 rangeColor = quantizeScale(domain, colorRange, weight);\n\n float rangeMinMax = float(shouldUseMinMax);\n vec4 color = mix(rangeColor, minMaxColor, rangeMinMax);\n vColor = vec4(color.rgb, color.a * opacity);\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n\n gl_Position = vec4(instancePositions + positions * cellScale, 1.);\n}\n",fs:"#define SHADER_NAME screen-grid-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying float vSampleCount;\n\nvoid main(void) {\n if (vSampleCount <= 0.0) {\n discard;\n }\n gl_FragColor = vColor;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n",modules:[ct.a]}}},{key:"initializeState",value:function(){var t=this.context.gl;this.getAttributeManager().addInstanced({instancePositions:{size:3,update:this.calculateInstancePositions},instanceCounts:{size:4,noAlloc:!0}}),this.setState({model:this._getModel(t)})}},{key:"shouldUpdateState",value:function(t){return t.changeFlags.somethingChanged}},{key:"updateState",value:function(t){u()(d()(n.prototype),"updateState",this).call(this,t);var e=t.oldProps,r=t.props,i=t.changeFlags,o=this.getAttributeManager();r.numInstances!==e.numInstances?o.invalidateAll():e.cellSizePixels!==r.cellSizePixels&&o.invalidate("instancePositions"),this._updateUniforms(e,r,i)}},{key:"draw",value:function(t){var e=t.uniforms,n=this.props,r=n.parameters,i=n.maxTexture,o=this.props.minColor||gt,a=this.props.maxColor||mt,s=this.props.colorDomain||[1,0];this.state.model.setUniforms(e).setUniforms({minColor:o,maxColor:a,maxTexture:i,colorDomain:s}).draw({parameters:dt({depthTest:!1,depthMask:!1},r)})}},{key:"calculateInstancePositions",value:function(t,e){for(var n=e.numInstances,r=this.context.viewport,i=r.width,o=r.height,a=this.props.cellSizePixels,s=Math.ceil(i/a),u=t.value,c=t.size,l=0;lc?c:0,h=new Float32Array([(u-l)/o*2,-(u-l)/a*2,1]);r.setUniforms({cellScale:h})}}}],[{key:"isSupported",value:function(t){return Object(_.c)(t,[y.a.TEXTURE_FLOAT])}}]),n}(lt.a);g()(_t,"layerName","ScreenGridCellLayer"),g()(_t,"defaultProps",vt);var bt=n(131),xt=n(158),wt=n(189);function Et(t,e){var n={};for(var r in t)e.includes(r)||(n[r]=t[r]);return n}function Ot(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return St(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return St(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function St(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:{},n=t.props,r=t.oldProps,i=t.changeFlags,o=e.compareAll,a=void 0!==o&&o,s=e.dimension,u=this.state.ignoreProps,c=s.props,l=s.accessors,h=void 0===l?[]:l,f=i.updateTriggersChanged;if(i.dataChanged)return!0;if(f){if(f.all)return!0;var p,d=Ot(h);try{for(d.s();!(p=d.n()).done;){var A=p.value;if(f[A])return!0}}catch(t){d.e(t)}finally{d.f()}}if(a)return!!i.extensionsChanged||Object(bt.a)({oldProps:r,newProps:n,ignoreProps:u,propTypes:this.constructor._propTypes});var g,m=Ot(c);try{for(m.s();!(g=m.n()).done;){var y=g.value;if(n[y]!==r[y])return!0}}catch(t){m.e(t)}finally{m.f()}return!1}},{key:"isAttributeChanged",value:function(t){var e=this.state.changedAttributes;return t?e&&void 0!==e[t]:!function(t){var e=!0;for(var n in t){e=!1;break}return e}(e)}},{key:"_getAttributeManager",value:function(){return new xt.a(this.context.gl,{id:this.props.id,stats:this.context.stats})}}]),n}(wt.a);g()(Ct,"layerName","AggregationLayer");var Pt=n(32),Mt=n(9),It=n.n(Mt);function Bt(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return Rt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Rt(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function Rt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n>>1;Ft(t[i],e)>0?r=i:n=i+1}return n}(t,n)]}(o,e,t)};return a.thresholds=function(){return o},kt(t,e,a)}function Ft(t,e){return t-e}function zt(t,e){var n=t.length;if(e<=0||n<2)return t[0];if(e>=1)return t[n-1];var r=(n-1)*e,i=Math.floor(r),o=t[i];return o+(t[i+1]-o)*(r-i)}function Ut(t,e){var n,r=new Map,i=[],o=Bt(t);try{for(o.s();!(n=o.n()).done;){var a=n.value,s="".concat(a);r.has(s)||r.set(s,i.push(a))}}catch(t){o.e(t)}finally{o.f()}return kt(t,e,(function(t){return function(t,e,n,r){var i="".concat(r),o=e.get(i);return void 0===o&&(o=t.push(r),e.set(i,o)),n[(o-1)%n.length]}(i,r,e,t)}))}function Nt(t){return null!=t}function Gt(t,e){return("function"==typeof e?t.map(e):t).filter(Nt)}function Vt(t,e){return Gt(t,e)}function Ht(t,e){return n=Gt(t,e),r=[],n.forEach((function(t){!r.includes(t)&&Nt(t)&&r.push(t)})),r;var n,r}function Wt(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return qt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return qt(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function qt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);ne?1:t>=e?0:NaN},Kt={getValue:Xt,getPoints:Jt,getIndex:Zt,filterData:null},Yt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Kt;i()(this,t),this.aggregatedBins=this.getAggregatedBins(e,n),this._updateMinMaxValues(),this.binMap=this.getBinMap()}return a()(t,[{key:"getAggregatedBins",value:function(t,e){for(var n=e.getValue,r=void 0===n?Xt:n,i=e.getPoints,o=void 0===i?Jt:i,a=e.getIndex,s=void 0===a?Zt:a,u=e.filterData,c="function"==typeof u,l=t.length,h=[],f=0,p=0;pa.counts?e:a.counts,n=n>a.value?n:a.value,r=r1&&void 0!==arguments[1]?arguments[1]:[],n=It()(e,2),r=n[0],i=void 0===r?0:r,o=n[1],a=void 0===o?100:o;if(this.sortedBins||(this.sortedBins=this.aggregatedBins.sort((function(t,e){return Qt(t.value,e.value)}))),!this.sortedBins.length)return[];var s=this._percentileToIndex([i,a]);return this._getScaleDomain(t,s)}},{key:"_getScaleDomain",value:function(t,e){var n=It()(e,2),r=n[0],i=n[1],o=this.sortedBins;switch(t){case"quantize":case"linear":return[o[r].value,o[i].value];case"quantile":return Vt(o.slice(r,i+1),(function(t){return t.value}));case"ordinal":return Ht(o,(function(t){return t.value}));default:return[o[r].value,o[i].value]}}}]),t}(),$t=n(50),te=n(12);function ee(t){return Number.isFinite(t)?t:0}function ne(t,e){for(var n,r,i=t.positions.value,o=1/0,a=-1/0,s=1/0,u=-1/0,c=0;ca?n:a,s=ru?r:u;return{xMin:ee(s),xMax:ee(u),yMin:ee(o),yMax:ee(a)}}function re(t,e){var n=t<0?-1:1,r=n<0?Math.abs(t)+e:Math.abs(t);return(r=Math.floor(r/e)*e)*n}function ie(t,e){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!n)return{xOffset:e,yOffset:e};var r=t.yMin,i=t.yMax,o=(r+i)/2;return ae(e,o)}function oe(t,e,n,r){var i=ie(t,e,r!==te.a.CARTESIAN),o=function(t,e,n,r){var i=r.width,o=r.height,a=n===te.a.CARTESIAN?[-i/2,-o/2]:[-180,-90];m.a.assert(n===te.a.CARTESIAN||n===te.a.LNGLAT||n===te.a.DEFAULT);var s=t.xMin,u=t.yMin;return[-1*(re(s-a[0],e.xOffset)+a[0]),-1*(re(u-a[1],e.yOffset)+a[1])]}(t,i,r,n),a=t.xMin,s=t.yMin,u=t.xMax,c=t.yMax,l=u-a+i.xOffset,h=c-s+i.yOffset;return{gridOffset:i,translation:o,width:l,height:h,numCol:Math.ceil(l/i.xOffset),numRow:Math.ceil(h/i.yOffset)}}function ae(t,e){var n;return{yOffset:t/6378e3*(180/Math.PI),xOffset:(n=e,t/6378e3*(180/Math.PI)/Math.cos(n*Math.PI/180))}}function se(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function ue(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function le(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);ns?n:s,u=rc?r:c);return{xMin:u,xMax:c,yMin:a,yMax:s}}(o.positions,u),f=e.posOffset||[180,90],p=e.gridOffset||ie(h,i);if(p.xOffset<=0||p.yOffset<=0)return{gridHash:{},gridOffset:p};var d,A=a.width,g=a.height,m=Math.ceil(A/p.xOffset),y=Math.ceil(g/p.yOffset),v={},_=Object($t.a)(r),b=_.iterable,x=_.objectInfo,w=new Array(3),E=ce(b);try{for(E.s();!(d=E.n()).done;){var O=d.value;x.index++,w[0]=c[x.index*l],w[1]=c[x.index*l+1],w[2]=l>=3?c[x.index*l+2]:0;var S=s?a.project(w):w,T=It()(S,2),C=T[0],P=T[1];if(Number.isFinite(C)&&Number.isFinite(P)){var M=Math.floor((P+f[1])/p.yOffset),I=Math.floor((C+f[0])/p.xOffset);if(!s||I>=0&&I=0&&M=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function pe(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0){var r=this.state,i=r.gpuGridAggregator,o=r.gpuAggregation,a=r.weights,s=o?i.getData("count"):a.count;e.object=ot.getAggregationData(ye({pixelIndex:n},s))}return e}},{key:"updateResults",value:function(t){var e=t.aggregationData,n=t.maxData,r=this.state.weights.count;r.aggregationData=e,r.aggregationBuffer.setData({data:e}),r.maxData=n,r.maxTexture.setImageData({data:n})}},{key:"updateAggregationState",value:function(t){var e=t.props.cellSizePixels,n=t.oldProps.cellSizePixels!==e,r=t.changeFlags.viewportChanged,i=t.props.gpuAggregation;this.state.gpuAggregation!==t.props.gpuAggregation&&i&&!ot.isSupported(this.context.gl)&&(m.a.warn("GPU Grid Aggregation not supported, falling back to CPU")(),i=!1);var o=i!==this.state.gpuAggregation;this.setState({gpuAggregation:i});var a=this.isAttributeChanged("positions"),s=this.state.dimensions,u=s.data,c=s.weights,l=a||o||r||this.isAggregationDirty(t,{compareAll:i,dimension:u}),h=this.isAggregationDirty(t,{dimension:c});this.setState({aggregationDataDirty:l,aggregationWeightsDirty:h});var f=this.context.viewport;if(r||n){var p=f.width,d=f.height,A=Math.ceil(p/e),g=Math.ceil(d/e);this.allocateResources(g,A),this.setState({scaling:[p/2,-d/2,1],gridOffset:{xOffset:e,yOffset:e},width:p,height:d,numCol:A,numRow:g})}h&&this._updateAccessors(t),(l||h)&&this._resetResults()}},{key:"_updateAccessors",value:function(t){var e=t.props,n=e.getWeight,r=e.aggregation,i=e.data,o=this.state.weights.count;o&&(o.getWeight=n,o.operation=R[r]),this.setState({getValue:j(r,n,{data:i})})}},{key:"_resetResults",value:function(){var t=this.state.weights.count;t&&(t.aggregationData=null)}}]),n}(Ae);g()(be,"layerName","ScreenGridLayer"),g()(be,"defaultProps",ve);var xe=n(210),we=n(27),Ee=n.n(we);function Oe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Se(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return t.hexagons?Se({data:t.hexagons},t):t.layerData?Se({data:t.layerData},t):t}},{key:"getAggregatedData",value:function(t,e){var n=this._getAggregator(t)(t,e);this.setState({layerData:this.normalizeResult(n)}),this.changeFlags={layerData:!0},this.getSortedBins(t)}},{key:"updateGetValueFuncs",value:function(t,e,n){for(var r in this.dimensionUpdaters){var i=this.dimensionUpdaters[r].getBins.triggers,o=i.value,a=i.weight,s=i.aggregation,u=e[o.prop];this.needUpdateDimensionStep(this.dimensionUpdaters[r].getBins,t,e,n)&&(u=u?F(u,{data:e.data}):j(e[s.prop],e[a.prop],{data:e.data})),u&&this.setDimensionState(r,{getValue:u})}}},{key:"needsReProjectPoints",value:function(t,e,n){return this._getCellSize(t)!==this._getCellSize(e)||this._getAggregator(t)!==this._getAggregator(e)||n.updateTriggersChanged&&(n.updateTriggersChanged.all||n.updateTriggersChanged.getPosition)}},{key:"addDimension",value:function(t){this._addDimension(t)}},{key:"_addDimension",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];e.forEach((function(e){var n=e.key;t.dimensionUpdaters[n]=t.getDimensionUpdaters(e),t.state.dimensions[n]={getValue:null,domain:null,sortedBins:null,scaleFunc:Te}}))}},{key:"getDimensionUpdaters",value:function(t){var e=t.key,n=t.accessor,r=t.pickingInfo,i=t.getBins,o=t.getDomain,a=t.getScaleFunc,s=t.nullValue;return{key:e,accessor:n,pickingInfo:r,getBins:Se({updater:this.getDimensionSortedBins},i),getDomain:Se({updater:this.getDimensionValueDomain},o),getScaleFunc:Se({updater:this.getDimensionScale},a),attributeAccessor:this.getSubLayerDimensionAttribute(e,s)}}},{key:"needUpdateDimensionStep",value:function(t,e,n,r){return Object.values(t.triggers).some((function(t){return t.updateTrigger?r.dataChanged||r.updateTriggersChanged&&(r.updateTriggersChanged.all||r.updateTriggersChanged[t.updateTrigger]):e[t.prop]!==n[t.prop]}))}},{key:"getDimensionChanges",value:function(t,e,n){var r=this,i=[],o=function(o){var a=Ce.find((function(i){return r.needUpdateDimensionStep(r.dimensionUpdaters[o][i],t,e,n)}));a&&i.push(r.dimensionUpdaters[o][a].updater.bind(r,e,r.dimensionUpdaters[o]))};for(var a in this.dimensionUpdaters)o(a);return i.length?i:null}},{key:"getUpdateTriggers",value:function(t){var e=this,n=t.updateTriggers||{},r={},i=function(i){var o=e.dimensionUpdaters[i].accessor;r[o]={},Ce.forEach((function(a){Object.values(e.dimensionUpdaters[i][a].triggers).forEach((function(e){var i=e.prop,a=e.updateTrigger;if(a){var s=n[a];"object"!==Ee()(s)||Array.isArray(s)?void 0!==s&&(r[o][i]=s):Object.assign(r[o],s)}else r[o][i]=t[i]}))}))};for(var o in this.dimensionUpdaters)i(o);return r}},{key:"getSortedBins",value:function(t){for(var e in this.dimensionUpdaters)this.getDimensionSortedBins(t,this.dimensionUpdaters[e])}},{key:"getDimensionSortedBins",value:function(t,e){var n=e.key,r=this.state.dimensions[n].getValue,i=new Yt(this.state.layerData.data||[],{getValue:r,filterData:t._filterData});this.setDimensionState(n,{sortedBins:i}),this.getDimensionValueDomain(t,e)}},{key:"getDimensionValueDomain",value:function(t,e){var n=e.getDomain,r=e.key,i=n.triggers,o=i.lowerPercentile,a=i.upperPercentile,s=i.scaleType,u=this.state.dimensions[r].sortedBins.getValueDomainByScale(t[s.prop],[t[o.prop],t[a.prop]]);this.setDimensionState(r,{valueDomain:u}),this.getDimensionScale(t,e)}},{key:"getDimensionScale",value:function(t,e){var n=e.key,r=e.getScaleFunc,i=e.getDomain,o=r.triggers,a=o.domain,s=o.range,u=i.triggers.scaleType,c=r.onSet,l=t[s.prop],h=t[a.prop]||this.state.dimensions[n].valueDomain,f=function(t){switch(t){case"quantize":return Lt;case"linear":return Dt;case"quantile":return jt;case"ordinal":return Ut;default:return Lt}}(u&&t[u.prop])(h,l);"object"===Ee()(c)&&"function"==typeof t[c.props]&&t[c.props](f.domain()),this.setDimensionState(n,{scaleFunc:f})}},{key:"getSubLayerDimensionAttribute",value:function(t,e){var n=this;return function(r){var i=n.state.dimensions[t],o=i.sortedBins,a=i.scaleFunc,s=o.binMap[r.index];if(s&&0===s.counts)return e;var u=s&&s.value,c=a.domain();return u>=c[0]&&u<=c[c.length-1]?a(u):e}}},{key:"getSubLayerAccessors",value:function(t){var e={};for(var n in this.dimensionUpdaters){e[this.dimensionUpdaters[n].accessor]=this.getSubLayerDimensionAttribute(t,n)}return e}},{key:"getPickingInfo",value:function(t){var e=t.info,n=null;if(e.picked&&e.index>-1){var r=this.state.layerData.data[e.index],i={};for(var o in this.dimensionUpdaters){var a=this.dimensionUpdaters[o].pickingInfo,s=this.state.dimensions[o].sortedBins,u=s.binMap[r.index]&&s.binMap[r.index].value;i[a]=u}n=Object.assign(i,r,{points:r.filteredPoints||r.points})}return e.picked=Boolean(n),e.object=n,e}},{key:"getAccessor",value:function(t){return this.dimensionUpdaters.hasOwnProperty(t)?this.dimensionUpdaters[t].attributeAccessor:Te}}],[{key:"defaultDimensions",value:function(){return Pe}}]),t}();function Be(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=d()(t);if(e){var i=d()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return f()(this,n)}}function Re(){}var ke={colorDomain:null,colorRange:ht,getColorValue:{type:"accessor",value:null},getColorWeight:{type:"accessor",value:1},colorAggregation:"SUM",lowerPercentile:{type:"number",min:0,max:100,value:0},upperPercentile:{type:"number",min:0,max:100,value:100},colorScaleType:"quantize",onSetColorDomain:Re,elevationDomain:null,elevationRange:[0,1e3],getElevationValue:{type:"accessor",value:null},getElevationWeight:{type:"accessor",value:1},elevationAggregation:"SUM",elevationLowerPercentile:{type:"number",min:0,max:100,value:0},elevationUpperPercentile:{type:"number",min:0,max:100,value:100},elevationScale:{type:"number",min:0,value:1},elevationScaleType:"linear",onSetElevationDomain:Re,gridAggregator:he,cellSize:{type:"number",min:0,max:1e3,value:1e3},coverage:{type:"number",min:0,max:1,value:1},getPosition:{type:"accessor",value:function(t){return t.position}},extruded:!1,material:!0,_filterData:{type:"function",value:null,optional:!0}},Le=function(t){l()(n,t);var e=Be(n);function n(){return i()(this,n),e.apply(this,arguments)}return a()(n,[{key:"initializeState",value:function(){var t=new Ie({getAggregator:function(t){return t.gridAggregator},getCellSize:function(t){return t.cellSize}});this.state={cpuAggregator:t,aggregatorState:t.state},this.getAttributeManager().add({positions:{size:3,type:5130,accessor:"getPosition"}})}},{key:"updateState",value:function(t){u()(d()(n.prototype),"updateState",this).call(this,t),this.setState({aggregatorState:this.state.cpuAggregator.updateState(t,{viewport:this.context.viewport,attributes:this.getAttributes(),numInstances:this.getNumInstances()})})}},{key:"getPickingInfo",value:function(t){var e=t.info;return this.state.cpuAggregator.getPickingInfo({info:e})}},{key:"_onGetSublayerColor",value:function(t){return this.state.cpuAggregator.getAccessor("fillColor")(t)}},{key:"_onGetSublayerElevation",value:function(t){return this.state.cpuAggregator.getAccessor("elevation")(t)}},{key:"_getSublayerUpdateTriggers",value:function(){return this.state.cpuAggregator.getUpdateTriggers(this.props)}},{key:"renderLayers",value:function(){var t=this.props,e=t.elevationScale,n=t.extruded,r=t.cellSize,i=t.coverage,o=t.material,a=t.transitions,s=this.state.cpuAggregator,u=this.getSubLayerClass("grid-cell",xe.a),c=this._getSublayerUpdateTriggers();return new u({cellSize:r,coverage:i,material:o,elevationScale:e,extruded:n,getFillColor:this._onGetSublayerColor.bind(this),getElevation:this._onGetSublayerElevation.bind(this),transitions:a&&{getFillColor:a.getColorValue||a.getColorWeight,getElevation:a.getElevationValue||a.getElevationWeight}},this.getSubLayerProps({id:"grid-cell",updateTriggers:c}),{data:s.state.layerData.data})}}]),n}(Ct);g()(Le,"layerName","CPUGridLayer"),g()(Le,"defaultProps",ke);var De=n(160),je=Math.PI/3,Fe=[0,je,2*je,3*je,4*je,5*je];function ze(t){return t[0]}function Ue(t){return t[1]}function Ne(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return Ge(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ge(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function Ge(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1){var A=l-p,g=p+(ly*y+v*v&&(p=g+(1&f?1:-1)/2,f=m)}var _=p+"-"+f,b=i[_];b?b.push(c):(o.push(b=i[_]=[c]),b.x=(p+(1&f)/2)*e,b.y=f*n)}return o}function l(t){var e=0,n=0;return Fe.map((function(r){var i=Math.sin(r)*t,o=-Math.cos(r)*t,a=i-e,s=o-n;return e=i,n=o,[a,s]}))}return c.hexagon=function(e){return"m"+l(null==e?t:+e).join("l")+"z"},c.centers=function(){for(var s=[],u=Math.round(i/n),c=Math.round(r/e),l=u*n;l=e?1:0}function Xn(t){var e=t.cellWeights,n=t.x,r=t.y,i=t.width,o=t.height,a=t.threshold;t.thresholdValue&&(m.a.deprecated("thresholdValue","threshold")(),a=t.thresholdValue);var s=n<0,u=n>=i-1,c=r<0,l=r>=o-1,h=s||u||c||l,f={},p={};s||l?p.top=0:(f.top=e[(r+1)*i+n],p.top=qn(f.top,a)),u||l?p.topRight=0:(f.topRight=e[(r+1)*i+n+1],p.topRight=qn(f.topRight,a)),u||c?p.right=0:(f.right=e[r*i+n+1],p.right=qn(f.right,a)),s||c?p.current=0:(f.current=e[r*i+n],p.current=qn(f.current,a));var d=p.top,A=p.topRight,g=p.right,y=p.current,v=-1;Number.isFinite(a)&&(v=d<<3|A<<2|g<<1|y),Array.isArray(a)&&(v=d<<6|A<<4|g<<2|y);var _=0;return h||(_=qn((f.top+f.topRight+f.right+f.current)/4,a)),{code:v,meanCode:_}}function Jn(t){var e=t.gridOrigin,n=t.cellSize,r=t.x,i=t.y,o=t.code,a=t.meanCode,s=t.type,u=void 0===s?Vn:s,c=Gn(Gn({},Wn),t.thresholdData),l=u===Hn?Un[o]:Fn[o];Array.isArray(l)||(l=l[a]);var h=c.zIndex*c.zOffset,f=(r+1)*n[0],p=(i+1)*n[1],d=e[0]+f,A=e[1]+p;if(u===Hn){var g=[];return l.forEach((function(t){var e=[];t.forEach((function(t){var r=d+t[0]*n[0],i=A+t[1]*n[1];e.push([r,i,h])})),g.push(e)})),g}var m=[];return l.forEach((function(t){t.forEach((function(t){var e=d+t[0]*n[0],r=A+t[1]*n[1];m.push([e,r,h])}))})),m}function Zn(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return Qn(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qn(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function Qn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&(o||e)&&this._generateContours()}},{key:"renderLayers",value:function(){var t=this.state.contourData,e=t.contourSegments,n=t.contourPolygons,r=this.getSubLayerClass("lines",Qe.a),i=this.getSubLayerClass("bands",Ke.a);return[e&&e.length>0&&new r(this.getSubLayerProps({id:"lines"}),{data:this.state.contourData.contourSegments,getSourcePosition:function(t){return t.start},getTargetPosition:function(t){return t.end},getColor:function(t){return t.contour.color||Yn},getWidth:function(t){return t.contour.strokeWidth||1}}),n&&n.length>0&&new i(this.getSubLayerProps({id:"bands"}),{data:this.state.contourData.contourPolygons,getPolygon:function(t){return t.vertices},getFillColor:function(t){return t.contour.color||Yn}})]}},{key:"updateAggregationState",value:function(t){var e=t.props,n=t.oldProps,r=e.cellSize,i=e.coordinateSystem,o=this.context.viewport,a=n.cellSize!==r,s=e.gpuAggregation;this.state.gpuAggregation!==e.gpuAggregation&&s&&!ot.isSupported(this.context.gl)&&(m.a.warn("GPU Grid Aggregation not supported, falling back to CPU")(),s=!1);var u=s!==this.state.gpuAggregation;this.setState({gpuAggregation:s});var c=this.state.dimensions,l=this.isAttributeChanged("positions"),h=c.data,f=c.weights,p=this.state.boundingBox;if(l&&(p=ne(this.getAttributes(),this.getNumInstances()),this.setState({boundingBox:p})),l||a){var d=oe(p,r,o,i),A=d.gridOffset,g=d.translation,y=d.width,v=d.height,_=d.numCol,b=d.numRow;this.allocateResources(b,_),this.setState({gridOffset:A,boundingBox:p,translation:g,posOffset:g.slice(),gridOrigin:[-1*g[0],-1*g[1]],width:y,height:v,numCol:_,numRow:b})}var x=l||u||this.isAggregationDirty(t,{dimension:h,compareAll:s}),w=this.isAggregationDirty(t,{dimension:f});w&&this._updateAccessors(t),(x||w)&&this._resetResults(),this.setState({aggregationDataDirty:x,aggregationWeightsDirty:w})}},{key:"_updateAccessors",value:function(t){var e=t.props,n=e.getWeight,r=e.aggregation,i=e.data,o=this.state.weights.count;o&&(o.getWeight=n,o.operation=R[r]),this.setState({getValue:j(r,n,{data:i})})}},{key:"_resetResults",value:function(){var t=this.state.weights.count;t&&(t.aggregationData=null)}},{key:"_generateContours",value:function(){var t=this.state,e=t.numCol,n=t.numRow,r=t.gridOrigin,i=t.gridOffset,o=t.thresholdData,a=this.state.weights.count,s=a.aggregationData;s||(s=a.aggregationBuffer.getData(),a.aggregationData=s);var u=function(t){var e,n=t.thresholdData,r=t.cellWeights,i=t.gridSize,o=t.gridOrigin,a=t.cellSize,s=[],u=[],c=i[0],l=i[1],h=0,f=0,p=Zn(n);try{for(p.s();!(e=p.n()).done;)for(var d=e.value,A=d.contour,g=A.threshold,m=-1;m= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n float domainRange = domain.y - domain.x;\n if (domainRange <= 0.) {\n outColor = colorRange[0];\n } else {\n float rangeCount = float(RANGE_COUNT);\n float rangeStep = domainRange / rangeCount;\n float idx = floor((value - domain.x) / rangeStep);\n idx = clamp(idx, 0., rangeCount - 1.);\n int intIdx = int(idx);\n outColor = colorRange[intIdx];\n }\n }\n return outColor;\n}\n\nfloat linearScale(vec2 domain, vec2 range, float value) {\n if (value >= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n return ((value - domain.x) / (domain.y - domain.x)) * (range.y - range.x) + range.x;\n }\n return -1.;\n}\n\nvoid main(void) {\n vec2 clrDomain = colorDomainValid ? colorDomain : vec2(colorData.maxMinCount.a, colorData.maxMinCount.r);\n vec4 color = quantizeScale(clrDomain, colorRange, colors.r);\n\n float elevation = 0.0;\n\n if (extruded) {\n vec2 elvDomain = elevationDomainValid ? elevationDomain : vec2(elevationData.maxMinCount.a, elevationData.maxMinCount.r);\n elevation = linearScale(elvDomain, elevationRange, elevations.r);\n elevation = elevation * (positions.z + 1.0) / 2.0 * elevationScale;\n }\n\n // if aggregated color or elevation is 0 do not render\n float shouldRender = float(color.r > 0.0 && elevations.r >= 0.0);\n float dotRadius = cellSize / 2. * coverage * shouldRender;\n\n int yIndex = (gl_InstanceID / gridSize[0]);\n int xIndex = gl_InstanceID - (yIndex * gridSize[0]);\n\n vec2 instancePositionXFP64 = mul_fp64(vec2(gridOffset[0], gridOffsetLow[0]), vec2(float(xIndex), 0.));\n instancePositionXFP64 = sum_fp64(instancePositionXFP64, vec2(gridOrigin[0], gridOriginLow[0]));\n vec2 instancePositionYFP64 = mul_fp64(vec2(gridOffset[1], gridOffsetLow[1]), vec2(float(yIndex), 0.));\n instancePositionYFP64 = sum_fp64(instancePositionYFP64, vec2(gridOrigin[1], gridOriginLow[1]));\n\n vec3 centroidPosition = vec3(instancePositionXFP64[0], instancePositionYFP64[0], elevation);\n vec3 centroidPosition64Low = vec3(instancePositionXFP64[1], instancePositionYFP64[1], 0.0);\n geometry.worldPosition = centroidPosition;\n vec3 pos = vec3(project_size(positions.xy + offset) * dotRadius, 0.);\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n\n gl_Position = project_position_to_clipspace(centroidPosition, centroidPosition64Low, pos, geometry.position);\n\n // Light calculations\n // Worldspace is the linear space after Mercator projection\n\n vec3 normals_commonspace = project_normal(normals);\n\n if (extruded) {\n vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, normals_commonspace);\n vColor = vec4(lightColor, color.a * opacity) / 255.;\n } else {\n vColor = vec4(color.rgb, color.a * opacity) / 255.;\n }\n}\n",fs:"#version 300 es\n#define SHADER_NAME gpu-grid-cell-layer-fragment-shader\n\nprecision highp float;\n\nin vec4 vColor;\n\nout vec4 fragColor;\n\nvoid main(void) {\n fragColor = vColor;\n fragColor = picking_filterColor(fragColor);\n}\n",modules:[B.a,nr.a,ct.a,C]})}},{key:"initializeState",value:function(t){var e=t.gl;this.getAttributeManager().addInstanced({colors:{size:4,noAlloc:!0},elevations:{size:4,noAlloc:!0}});var n=this._getModel(e);this._setupUniformBuffer(n),this.setState({model:n})}},{key:"_getModel",value:function(t){return new x.a(t,ar(ar({},this.getShaders()),{},{id:this.props.id,geometry:new ir.a,isInstanced:!0}))}},{key:"draw",value:function(t){var e=t.uniforms,n=this.props,r=n.cellSize,i=n.offset,o=n.extruded,a=n.elevationScale,s=n.coverage,u=n.gridSize,c=n.gridOrigin,l=n.gridOffset,h=n.elevationRange,f=n.colorMaxMinBuffer,p=n.elevationMaxMinBuffer,d=[Object(rr.b)(c[0]),Object(rr.b)(c[1])],A=[Object(rr.b)(l[0]),Object(rr.b)(l[1])],g=this.getDomainUniforms(),m=ft(this.props.colorRange);this.bindUniformBuffers(f,p),this.state.model.setUniforms(e).setUniforms(g).setUniforms({cellSize:r,offset:i,extruded:o,elevationScale:a,coverage:s,gridSize:u,gridOrigin:c,gridOriginLow:d,gridOffset:l,gridOffsetLow:A,colorRange:m,elevationRange:h}).draw(),this.unbindUniformBuffers(f,p)}},{key:"bindUniformBuffers",value:function(t,e){t.bind({target:35345,index:0}),e.bind({target:35345,index:1})}},{key:"unbindUniformBuffers",value:function(t,e){t.unbind({target:35345,index:0}),e.unbind({target:35345,index:1})}},{key:"getDomainUniforms",value:function(){var t=this.props,e=t.colorDomain,n=t.elevationDomain,r={};return null!==e?(r.colorDomainValid=!0,r.colorDomain=e):r.colorDomainValid=!1,null!==n?(r.elevationDomainValid=!0,r.elevationDomain=n):r.elevationDomainValid=!1,r}},{key:"_setupUniformBuffer",value:function(t){var e=this.context.gl,n=t.program.handle,r=e.getUniformBlockIndex(n,"ColorData"),i=e.getUniformBlockIndex(n,"ElevationData");e.uniformBlockBinding(n,r,0),e.uniformBlockBinding(n,i,1)}}]),n}(lt.a);function lr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function hr(t){for(var e=1;e=0){var o=this.state.gpuGridAggregator,a=this.getPositionForIndex(r),s=ot.getAggregationData(hr({pixelIndex:r},o.getData("color"))),u=ot.getAggregationData(hr({pixelIndex:r},o.getData("elevation")));if(i={colorValue:s.cellWeight,elevationValue:u.cellWeight,count:s.cellCount||u.cellCount,position:a,totalCount:s.totalCount||u.totalCount},"hover"!==n){var c=this.props,l=this.state.gridHash;if(!l){var h=this.state,f=h.gridOffset,p=h.translation,d=h.boundingBox,A=this.context.viewport;l=he(c,{gridOffset:f,attributes:this.getAttributes(),viewport:A,translation:p,boundingBox:d}).gridHash,this.setState({gridHash:l})}var g=l[this.getHashKeyForIndex(r)];Object.assign(i,g)}}return e.picked=Boolean(i),e.object=i,e}},{key:"renderLayers",value:function(){if(!this.state.isSupported)return null;var t=this.props,e=t.elevationScale,n=t.extruded,r=t.cellSize,i=t.coverage,o=t.material,a=t.elevationRange,s=t.colorDomain,u=t.elevationDomain,c=this.state,l=c.weights,h=c.numRow,f=c.numCol,p=c.gridOrigin,d=c.gridOffset,A=l.color,g=l.elevation,m=ft(this.props.colorRange);return new(this.getSubLayerClass("gpu-grid-cell",cr))({gridSize:[f,h],gridOrigin:p,gridOffset:[d.xOffset,d.yOffset],colorRange:m,elevationRange:a,colorDomain:s,elevationDomain:u,cellSize:r,coverage:i,material:o,elevationScale:e,extruded:n},this.getSubLayerProps({id:"gpu-grid-cell"}),{data:{attributes:{colors:A.aggregationBuffer,elevations:g.aggregationBuffer}},colorMaxMinBuffer:A.maxMinBuffer,elevationMaxMinBuffer:g.maxMinBuffer,numInstances:f*h})}},{key:"finalizeState",value:function(t){var e=this.state.weights;[e.color,e.elevation].forEach((function(t){var e=t.aggregationBuffer;t.maxMinBuffer.delete(),null==e||e.delete()})),u()(d()(n.prototype),"finalizeState",this).call(this,t)}},{key:"updateAggregationState",value:function(t){var e=t.props,n=t.oldProps,r=e.cellSize,i=e.coordinateSystem,o=this.context.viewport,a=n.cellSize!==r,s=this.state.dimensions,u=this.isAttributeChanged("positions"),c=u||this.isAttributeChanged(),l=this.state.boundingBox;if(u&&(l=ne(this.getAttributes(),this.getNumInstances()),this.setState({boundingBox:l})),u||a){var h=oe(l,r,o,i),f=h.gridOffset,p=h.translation,d=h.width,A=h.height,g=h.numCol,m=h.numRow;this.allocateResources(m,g),this.setState({gridOffset:f,translation:p,gridOrigin:[-1*p[0],-1*p[1]],width:d,height:A,numCol:g,numRow:m})}var y=c||this.isAggregationDirty(t,{dimension:s.data,compareAll:!0});y&&this._updateAccessors(t),this.setState({aggregationDataDirty:y})}},{key:"_updateAccessors",value:function(t){var e=t.props,n=e.colorAggregation,r=e.elevationAggregation,i=this.state.weights,o=i.color,a=i.elevation;o.operation=R[n],a.operation=R[r]}}]),n}(Ae);function gr(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=d()(t);if(e){var i=d()(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return f()(this,n)}}function mr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function yr(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function xr(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t[0]&&e[2]<=t[2]&&e[1]>=t[1]&&e[3]<=t[3]}g()(_r,"layerName","GridLayer"),g()(_r,"defaultProps",vr);var Or=new Float32Array(12);function Sr(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,r=0,i=br(t);try{for(i.s();!(e=i.n()).done;)for(var o=e.value,a=0;a 0.) {\n // if user specified custom domain use it.\n maxValue = colorDomain[1];\n minValue = colorDomain[0];\n }\n vIntensityMax = intensity / maxValue;\n vIntensityMin = intensity / minValue;\n}\n",fs:"#define SHADER_NAME triangle-layer-fragment-shader\n\nprecision highp float;\n\nuniform float opacity;\nuniform sampler2D texture;\nuniform sampler2D colorTexture;\nuniform float aggregationMode;\n\nvarying vec2 vTexCoords;\nvarying float vIntensityMin;\nvarying float vIntensityMax;\n\nvec4 getLinearColor(float value) {\n float factor = clamp(value * vIntensityMax, 0., 1.);\n vec4 color = texture2D(colorTexture, vec2(factor, 0.5));\n color.a *= min(value * vIntensityMin, 1.0);\n return color;\n}\n\nvoid main(void) {\n vec4 weights = texture2D(texture, vTexCoords);\n float weight = weights.r;\n\n if (aggregationMode > 0.5) {\n weight /= max(1.0, weights.a);\n }\n\n // discard pixels with 0 weight.\n if (weight <= 0.) {\n discard;\n }\n\n vec4 linearColor = getLinearColor(weight);\n linearColor.a *= opacity;\n gl_FragColor =linearColor;\n}\n",modules:[B.a]}}},{key:"initializeState",value:function(t){var e=t.gl;this.getAttributeManager().add({positions:{size:3,noAlloc:!0},texCoords:{size:2,noAlloc:!0}}),this.setState({model:this._getModel(e)})}},{key:"_getModel",value:function(t){var e=this.props.vertexCount;return new x.a(t,Pr(Pr({},this.getShaders()),{},{id:this.props.id,geometry:new ut.a({drawMode:6,vertexCount:e})}))}},{key:"draw",value:function(t){var e=t.uniforms,n=this.state.model,r=this.props,i=r.texture,o=r.maxTexture,a=r.colorTexture,s=r.intensity,u=r.threshold,c=r.aggregationMode,l=r.colorDomain;n.setUniforms(Pr(Pr({},e),{},{texture:i,maxTexture:o,colorTexture:a,intensity:s,threshold:u,aggregationMode:c,colorDomain:l})).draw()}}]),n}(lt.a);g()(Ir,"layerName","TriangleLayer");var Br;function Rr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function kr(t){for(var e=1;e 0.5) {\n discard;\n }\n gl_FragColor = weightsTexture * gaussianKDE(2. * dist);\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n"})}},{key:"_createWeightsTransform",value:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.context.gl,r=this.state.weightsTransform,i=this.state.weightsTexture;null===(t=r)||void 0===t||t.delete(),r=new w.a(n,kr({id:"".concat(this.id,"-weights-transform"),elementCount:1,_targetTexture:i,_targetTextureVarying:"weightsTexture"},e)),this.setState({weightsTransform:r})}},{key:"_setupResources",value:function(){var t=this.context.gl;this._createTextures();var e=this.state,n=e.textureSize,r=e.weightsTexture,i=e.maxWeightsTexture,o=this.getShaders("weights-transform");this._createWeightsTransform(o);var a=this.getShaders("max-weights-transform"),s=new w.a(t,kr(kr({id:"".concat(this.id,"-max-weights-transform"),_sourceTextures:{inTexture:r},_targetTexture:i,_targetTextureVarying:"outTexture"},a),{},{elementCount:n*n}));this.setState({weightsTexture:r,maxWeightsTexture:i,maxWeightTransform:s,zoom:null,triPositionBuffer:new Pt.a(t,{byteLength:48,accessor:{size:3}}),triTexCoordBuffer:new Pt.a(t,{byteLength:48,accessor:{size:2}})})}},{key:"updateShaders",value:function(t){this._createWeightsTransform(t)}},{key:"_updateMaxWeightValue",value:function(){this.state.maxWeightTransform.run({parameters:{blend:!0,depthTest:!1,blendFunc:[1,1],blendEquation:32776}})}},{key:"_updateBounds",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.context.viewport,n=[e.unproject([0,0]),e.unproject([e.width,0]),e.unproject([e.width,e.height]),e.unproject([0,e.height])].map((function(t){return t.map(Math.fround)})),r=wr(n),i={visibleWorldBounds:r,viewportCorners:n},o=!1;if(t||!this.state.worldBounds||!Er(this.state.worldBounds,r)){var a=this._worldToCommonBounds(r),s=this._commonToWorldBounds(a);this.props.coordinateSystem===te.a.LNGLAT&&(s[1]=Math.max(s[1],-85.051129),s[3]=Math.min(s[3],85.051129),s[0]=Math.max(s[0],-360),s[2]=Math.min(s[2],360));var u=this._worldToCommonBounds(s);i.worldBounds=s,i.normalizedCommonBounds=u,o=!0}return this.setState(i),o}},{key:"_updateTextureRenderingBounds",value:function(){var t=this.state,e=t.triPositionBuffer,n=t.triTexCoordBuffer,r=t.normalizedCommonBounds,i=t.viewportCorners,o=this.context.viewport;e.subData(Sr(i,3));var a=i.map((function(t){return e=o.projectPosition(t),n=r,i=It()(n,4),a=i[0],s=i[1],u=i[2],c=i[3],[(e[0]-a)/(u-a),(e[1]-s)/(c-s)];var e,n,i,a,s,u,c}));n.subData(Sr(a,2))}},{key:"_updateColorTexture",value:function(t){var e=t.props.colorRange,n=this.state.colorTexture,r=ft(e,!1,Uint8Array);n?n.setImageData({data:r,width:e.length}):n=new X.a(this.context.gl,kr({data:r,width:e.length,height:1},Dr)),this.setState({colorTexture:n})}},{key:"_updateWeightmap",value:function(){var t,e=this,n=this.props,r=n.radiusPixels,i=n.colorDomain,o=n.aggregation,a=this.state,s=a.weightsTransform,u=a.worldBounds,c=a.textureSize,l=a.weightsTexture,h=a.weightsScale;this.state.isWeightMapDirty=!1;var f=this._worldToCommonBounds(u,{useLayerCoordinateSystem:!0});if(i&&"SUM"===o){var p=this.context.viewport.distanceScales.metersPerUnit[2]*(f[2]-f[0])/c;this.state.colorDomain=i.map((function(t){return t*p*h}))}else this.state.colorDomain=i||jr;var d={radiusPixels:r,commonBounds:f,textureWidth:c,weightsScale:h};s.update({elementCount:this.getNumInstances()}),Object(v.o)(this.context.gl,{clearColor:[0,0,0,0]},(function(){s.run({uniforms:d,parameters:{blend:!0,depthTest:!1,blendFunc:[1,1],blendEquation:32774},clearRenderTarget:!0,attributes:e.getAttributes(),moduleSettings:e.getModuleSettings()})})),this._updateMaxWeightValue(),l.setParameters((t={},g()(t,10240,9729),g()(t,10241,9729),t))}},{key:"_debouncedUpdateWeightmap",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.state.updateTimer,n=this.props.debounceTimeout;t?(e=null,this._updateBounds(!0),this._updateTextureRenderingBounds(),this.setState({isWeightMapDirty:!0})):(this.setState({isWeightMapDirty:!1}),clearTimeout(e),e=setTimeout(this._debouncedUpdateWeightmap.bind(this,!0),n)),this.setState({updateTimer:e})}},{key:"_worldToCommonBounds",value:function(t){var e,n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.useLayerCoordinateSystem,o=void 0!==i&&i,a=It()(t,4),s=a[0],u=a[1],c=a[2],l=a[3],h=this.context.viewport,f=this.state.textureSize,p=this.props.coordinateSystem,d=o&&(p===te.a.LNGLAT_OFFSETS||p===te.a.METER_OFFSETS),A=d?h.projectPosition(this.props.coordinateOrigin):[0,0],g=2*f/h.scale;return o&&!d?(e=this.projectPosition([s,u,0]),n=this.projectPosition([c,l,0])):(e=h.projectPosition([s,u,0]),n=h.projectPosition([c,l,0])),Tr([e[0]-A[0],e[1]-A[1],n[0]-A[0],n[1]-A[1]],g,g)}},{key:"_commonToWorldBounds",value:function(t){var e=It()(t,4),n=e[0],r=e[1],i=e[2],o=e[3],a=this.context.viewport,s=a.unprojectPosition([n,r]),u=a.unprojectPosition([i,o]);return s.slice(0,2).concat(u.slice(0,2))}}]),n}(Ct);g()(Vr,"layerName","HeatmapLayer"),g()(Vr,"defaultProps",zr),n.d(e,"ScreenGridLayer",(function(){return be})),n.d(e,"CPUGridLayer",(function(){return Le})),n.d(e,"HexagonLayer",(function(){return Je})),n.d(e,"ContourLayer",(function(){return er})),n.d(e,"GridLayer",(function(){return _r})),n.d(e,"GPUGridLayer",(function(){return Ar})),n.d(e,"AGGREGATION_OPERATION",(function(){return R})),n.d(e,"HeatmapLayer",(function(){return Vr})),n.d(e,"_GPUGridAggregator",(function(){return ot})),n.d(e,"_CPUAggregator",(function(){return Ie})),n.d(e,"_AggregationLayer",(function(){return Ct})),n.d(e,"_BinSorter",(function(){return Yt}))},function(t,e,n){"use strict";n.r(e);var r=n(178),i=n(293),o=n(195),a=n(287),s=n(8),u=n(181),c=n(234),l=n(197),h=n(222),f=n(32),p=n(292),d=n(71),A=n(104),g=n(102),m=n(223),y=n(224),v=n(286),_=n(58),b=n(45);const x={x:[2,0,1],y:[0,1,2],z:[1,2,0]};class w extends _.a{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:e=Object(b.c)("truncated-code-geometry")}=t,{indices:n,attributes:r}=function(t){const{bottomRadius:e=0,topRadius:n=0,height:r=1,nradial:i=10,nvertical:o=10,verticalAxis:a="y",topCap:s=!1,bottomCap:u=!1}=t,c=(s?2:0)+(u?2:0),l=(i+1)*(o+1+c),h=Math.atan2(e-n,r),f=Math.sin,p=Math.cos,d=Math.PI,A=p(h),g=f(h),m=s?-2:0,y=o+(u?2:0),v=i+1,_=new Uint16Array(i*(o+c)*6),b=x[a],w=new Float32Array(3*l),E=new Float32Array(3*l),O=new Float32Array(2*l);let S=0,T=0;for(let t=m;t<=y;t++){let a,s=t/o,u=r*s;t<0?(u=0,s=1,a=e):t>o?(u=r,s=1,a=n):a=e+t/o*(n-e),-2!==t&&t!==o+2||(a=0,s=0),u-=r/2;for(let e=0;eo?0:n*A,E[S+b[1]]=t<0?-1:t>o?1:g,E[S+b[2]]=t<0||t>o?0:r*A,O[T+0]=e/i,O[T+1]=s,T+=2,S+=3}}for(let t=0;t0&&void 0!==arguments[0]?arguments[0]:{};const{id:e=Object(b.c)("cone-geometry"),radius:n=1,cap:r=!0}=t;super({...t,id:e,topRadius:0,topCap:Boolean(r),bottomCap:Boolean(r),bottomRadius:n})}}var O=n(272);class S extends w{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:e=Object(b.c)("cylinder-geometry"),radius:n=1}=t;super({...t,id:e,bottomRadius:n,topRadius:n})}}var T=n(81);const C=[-1,0,0,0,1,0,0,0,-1,0,0,1,0,-1,0,1,0,0],P=[3,4,5,3,5,1,3,1,0,3,0,4,4,0,2,4,2,5,2,0,1,5,2,1];class M extends _.a{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:e=Object(b.c)("ico-sphere-geometry")}=t,{indices:n,attributes:r}=function(t){const{iterations:e=0}=t,n=Math.PI,r=2*n,i=[...C];let o=[...P];i.push(),o.push();const a=(()=>{const t={};return(e,n)=>{const r=(e*=3)>(n*=3)?e:n,o="".concat(e=0;t-=3){const e=o[t+0],a=o[t+1],c=o[t+2],l=3*e,h=3*a,f=3*c,p=2*e,d=2*a,A=2*c,g=i[l+0],m=i[l+1],y=i[l+2],v=Math.acos(y/Math.sqrt(g*g+m*m+y*y)),_=Math.atan2(m,g)+n,b=v/n,x=1-_/r,w=i[h+0],E=i[h+1],O=i[h+2],S=Math.acos(O/Math.sqrt(w*w+E*E+O*O)),C=Math.atan2(E,w)+n,P=S/n,M=1-C/r,I=i[f+0],B=i[f+1],R=i[f+2],k=Math.acos(R/Math.sqrt(I*I+B*B+R*R)),L=Math.atan2(B,I)+n,D=k/n,j=1-L/r,F=[I-w,B-E,R-O],z=[g-w,m-E,y-O],U=new T.a(F).cross(z).normalize();let N;(0===x||0===M||0===j)&&(0===x||x>.5)&&(0===M||M>.5)&&(0===j||j>.5)&&(i.push(i[l+0],i[l+1],i[l+2]),N=i.length/3-1,o.push(N),u[2*N+0]=1,u[2*N+1]=b,s[3*N+0]=U.x,s[3*N+1]=U.y,s[3*N+2]=U.z,i.push(i[h+0],i[h+1],i[h+2]),N=i.length/3-1,o.push(N),u[2*N+0]=1,u[2*N+1]=P,s[3*N+0]=U.x,s[3*N+1]=U.y,s[3*N+2]=U.z,i.push(i[f+0],i[f+1],i[f+2]),N=i.length/3-1,o.push(N),u[2*N+0]=1,u[2*N+1]=D,s[3*N+0]=U.x,s[3*N+1]=U.y,s[3*N+2]=U.z),s[l+0]=s[h+0]=s[f+0]=U.x,s[l+1]=s[h+1]=s[f+1]=U.y,s[l+2]=s[h+2]=s[f+2]=U.z,u[p+0]=x,u[p+1]=b,u[d+0]=M,u[d+1]=P,u[A+0]=j,u[A+1]=D}return{indices:{size:1,value:new Uint16Array(o)},attributes:{POSITION:{size:3,value:new Float32Array(i)},NORMAL:{size:3,value:new Float32Array(s)},TEXCOORD_0:{size:2,value:new Float32Array(u)}}}}(t);super({...t,id:e,indices:n,attributes:{...r,...t.attributes}})}}class I extends _.a{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:e=Object(b.c)("plane-geometry")}=t,{indices:n,attributes:r}=function(t){const{type:e="x,y",offset:n=0,flipCull:r=!1,unpack:i=!1}=t,o=e.split(",");let a=t["".concat(o[0],"len")]||1;const s=t["".concat(o[1],"len")]||1,u=t["n".concat(o[0])]||1,c=t["n".concat(o[1])]||1,l=(u+1)*(c+1),h=new Float32Array(3*l),f=new Float32Array(3*l),p=new Float32Array(2*l);r&&(a=-a);let d=0,A=0;for(let t=0;t<=c;t++)for(let i=0;i<=u;i++){const o=i/u,l=t/c;switch(p[d+0]=r?1-o:o,p[d+1]=l,e){case"x,y":h[A+0]=a*o-.5*a,h[A+1]=s*l-.5*s,h[A+2]=n,f[A+0]=0,f[A+1]=0,f[A+2]=r?1:-1;break;case"x,z":h[A+0]=a*o-.5*a,h[A+1]=n,h[A+2]=s*l-.5*s,f[A+0]=0,f[A+1]=r?1:-1,f[A+2]=0;break;case"y,z":h[A+0]=n,h[A+1]=a*o-.5*a,h[A+2]=s*l-.5*s,f[A+0]=r?1:-1,f[A+1]=0,f[A+2]=0;break;default:throw new Error("PlaneGeometry: unknown type")}d+=2,A+=3}const g=u+1,m=new Uint16Array(u*c*6);for(let t=0;t0&&void 0!==arguments[0]?arguments[0]:{};const{id:e=Object(b.c)("sphere-geometry")}=t,{indices:n,attributes:r}=function(t){const{nlat:e=10,nlong:n=10}=t;let{radius:r=1}=t;const i=Math.PI-0,o=2*Math.PI-0,a=(e+1)*(n+1);if("number"==typeof r){const t=r;r=(e,n,r,i,o)=>t}const s=new Float32Array(3*a),u=new Float32Array(3*a),c=new Float32Array(2*a),l=new(a>65535?Uint32Array:Uint16Array)(e*n*6);for(let t=0;t<=e;t++)for(let a=0;a<=n;a++){const l=a/n,h=t/e,f=a+t*(n+1),p=2*f,d=3*f,A=o*l,g=i*h,m=Math.sin(A),y=Math.cos(A),v=Math.sin(g),_=Math.cos(g),b=y*v,x=_,w=m*v,E=r(b,x,w,l,h);s[d+0]=E*b,s[d+1]=E*x,s[d+2]=E*w,u[d+0]=b,u[d+1]=x,u[d+2]=w,c[p+0]=l,c[p+1]=1-h}const h=n+1;for(let t=0;t85.05113){_=_>0?85.05113:-85.05113;var E=new google.maps.LatLng(_,w);m+=o.fromLatLngToContainerPixel(E).y-i/2}m=Math.round(m);var O=180*new p.a(y).sub(v).verticalAngle()/Math.PI;O<0&&(O+=360);var S,T=t.getHeading()||0,C=t.getZoom()-1;if(0===O)S=i?(l.y-c.y)/i:1;else if(O===T){var P=new p.a([c.x,c.y]).sub([l.x,l.y]).len(),M=new p.a([r,-i]).len();S=M?P/M:1}return{width:r,height:i,left:g,top:m,zoom:C+=Math.log2(S||1),bearing:O,pitch:t.getTilt(),latitude:_,longitude:w}}(this._map,this._overlay),n=e.width,r=e.height,o=e.left,a=e.top,s=i()(e,E),u=t.canvas.parentElement.style;u.left="".concat(o,"px"),u.top="".concat(a,"px");t.setProps({width:n,height:r,viewState:S({altitude:1e4,repeat:!0},s)}),t.redraw()}}},{key:"_onDrawVectorInterleaved",value:function(t){var e=t.gl,n=t.transformer;if(this._deck&&this._map){var r=this._deck;if(r.setProps(S(S({},_(this._map,n)),{},{width:null,height:null})),r.isInitialized){var i=Object(h.f)(e,36006);r.setProps({_framebuffer:i}),r.needsRedraw({clearRedrawFlags:!0}),Object(h.n)(e,{viewport:[0,0,e.canvas.width,e.canvas.height],scissor:[0,0,e.canvas.width,e.canvas.height],stencilFunc:[519,0,255,519,0,255]}),Object(h.o)(e,C,(function(){r._drawLayers("google-vector",{clearCanvas:!1})}))}}}},{key:"_onDrawVectorOverlay",value:function(t){var e=t.transformer;if(this._deck&&this._map){var n=this._deck;n.setProps(S({},_(this._map,e))),n.redraw()}}}]),t}();n.d(e,"GoogleMapsOverlay",(function(){return I}))},function(t,e,n){"use strict";n.r(e);var r=n(0),i=n.n(r),o=n(3),a=n.n(o),s=n(4),u=n.n(s),c=n(7),l=n.n(c),h=n(5),f=n.n(h),p=n(6),d=n.n(p),A=n(2),g=n.n(A),m=n(133),y=n(121);function v(t){switch(t){case"int8":return Int8Array;case"uint8":return Uint8Array;case"int16":return Int16Array;case"uint16":return Uint16Array;case"float32":return Float32Array;case"float64":return Float64Array;case"int32":return Int32Array;case"uint32":return Uint32Array;case"int64":return BigInt64Array;case"uint64":return BigUint64Array;default:throw new Error("Unrecognized dtype ".concat(t))}}function _(t,e){if(!t)return null;for(var n in t){var r=t[n].attributes;for(var i in r){var o=r[i],a=o.dtype,s=o.value,u=v(a);r[i].value=new u(s.buffer)}}return t}function b(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function x(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};const{id:e=Object(i.c)("cube-geometry")}=t;super({...t,id:e,indices:{size:1,value:new Uint16Array(o)},attributes:{...c,...t.attributes}})}}},function(t,e,n){"use strict";var r=n(1),i=n(134);Object(i.a)();class o{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"sessionStorage";Object(r.a)(this,"storage",void 0),Object(r.a)(this,"id",void 0),Object(r.a)(this,"config",{}),this.storage=function(t){try{const e=window[t],n="__storage_test__";return e.setItem(n,n),e.removeItem(n),e}catch(t){return null}}(n),this.id=t,this.config={},Object.assign(this.config,e),this._loadConfiguration()}getConfiguration(){return this.config}setConfiguration(t){return this.config={},this.updateConfiguration(t)}updateConfiguration(t){if(Object.assign(this.config,t),this.storage){const t=JSON.stringify(this.config);this.storage.setItem(this.id,t)}return this}_loadConfiguration(){let t={};if(this.storage){const e=this.storage.getItem(this.id);t=e?JSON.parse(e):{}}return Object.assign(this.config,t),this}}function a(t,e,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:600;const i=t.src.replace(/\(/g,"%28").replace(/\)/g,"%29");t.width>r&&(n=Math.min(n,r/t.width));const o=t.width*n,a=t.height*n,s=["font-size:1px;","padding:".concat(Math.floor(a/2),"px ").concat(Math.floor(o/2),"px;"),"line-height:".concat(a,"px;"),"background:url(".concat(i,");"),"background-size:".concat(o,"px ").concat(a,"px;"),"color:transparent;"].join("");return["".concat(e," %c+"),s]}let s;function u(t){return"string"==typeof t?s[t.toUpperCase()]||s.WHITE:t}function c(t,e){if(!t)throw new Error(e||"Assertion failed")}!function(t){t[t.BLACK=30]="BLACK",t[t.RED=31]="RED",t[t.GREEN=32]="GREEN",t[t.YELLOW=33]="YELLOW",t[t.BLUE=34]="BLUE",t[t.MAGENTA=35]="MAGENTA",t[t.CYAN=36]="CYAN",t[t.WHITE=37]="WHITE",t[t.BRIGHT_BLACK=90]="BRIGHT_BLACK",t[t.BRIGHT_RED=91]="BRIGHT_RED",t[t.BRIGHT_GREEN=92]="BRIGHT_GREEN",t[t.BRIGHT_YELLOW=93]="BRIGHT_YELLOW",t[t.BRIGHT_BLUE=94]="BRIGHT_BLUE",t[t.BRIGHT_MAGENTA=95]="BRIGHT_MAGENTA",t[t.BRIGHT_CYAN=96]="BRIGHT_CYAN",t[t.BRIGHT_WHITE=97]="BRIGHT_WHITE"}(s||(s={}));var l=n(93);function h(){let t;var e,n;if(i.a&&"performance"in l.b)t=null===l.b||void 0===l.b||null===(e=l.b.performance)||void 0===e||null===(n=e.now)||void 0===n?void 0:n.call(e);else if("hrtime"in l.a){var r;const e=null===l.a||void 0===l.a||null===(r=l.a.hrtime)||void 0===r?void 0:r.call(l.a);t=1e3*e[0]+e[1]/1e6}else t=Date.now();return t}n.d(e,"a",(function(){return m}));const f={debug:i.a&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},p={enabled:!0,level:0};function d(){}const A={},g={once:!0};class m{constructor(){let{id:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:""};Object(r.a)(this,"id",void 0),Object(r.a)(this,"VERSION","8.9.0-alpha.5"),Object(r.a)(this,"_startTs",h()),Object(r.a)(this,"_deltaTs",h()),Object(r.a)(this,"_storage",void 0),Object(r.a)(this,"userData",{}),Object(r.a)(this,"LOG_THROTTLE_TIMEOUT",0),this.id=t,this._storage=new o("__probe-".concat(this.id,"__"),p),this.userData={},this.timeStamp("".concat(this.id," started")),function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:["constructor"];const n=Object.getPrototypeOf(t),r=Object.getOwnPropertyNames(n);for(const n of r)"function"==typeof t[n]&&(e.find(t=>n===t)||(t[n]=t[n].bind(t)))}(this),Object.seal(this)}set level(t){this.setLevel(t)}get level(){return this.getLevel()}isEnabled(){return this._storage.config.enabled}getLevel(){return this._storage.config.level}getTotal(){return Number((h()-this._startTs).toPrecision(10))}getDelta(){return Number((h()-this._deltaTs).toPrecision(10))}set priority(t){this.level=t}get priority(){return this.level}getPriority(){return this.level}enable(){let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._storage.updateConfiguration({enabled:t}),this}setLevel(t){return this._storage.updateConfiguration({level:t}),this}get(t){return this._storage.config[t]}set(t,e){this._storage.updateConfiguration({[t]:e})}settings(){console.table?console.table(this._storage.config):console.log(this._storage.config)}assert(t,e){c(t,e)}warn(t){return this._getLogFunction(0,t,f.warn,arguments,g)}error(t){return this._getLogFunction(0,t,f.error,arguments)}deprecated(t,e){return this.warn("`".concat(t,"` is deprecated and will be removed in a later version. Use `").concat(e,"` instead"))}removed(t,e){return this.error("`".concat(t,"` has been removed. Use `").concat(e,"` instead"))}probe(t,e){return this._getLogFunction(t,e,f.log,arguments,{time:!0,once:!0})}log(t,e){return this._getLogFunction(t,e,f.debug,arguments)}info(t,e){return this._getLogFunction(t,e,console.info,arguments)}once(t,e){for(var n=arguments.length,r=new Array(n>2?n-2:0),i=2;i{const e=a(t,n,r);console.log(...e)},t.src=e,d}const i=e.nodeName||"";if("img"===i.toLowerCase())return console.log(...a(e,n,r)),d;if("canvas"===i.toLowerCase()){const t=new Image;return t.onload=()=>console.log(...a(t,n,r)),t.src=e.toDataURL(),d}return d}({image:o,message:s,scale:u}):function(t){let{image:e,message:r="",scale:i=1}=t,o=null;try{o=n(248)}catch(t){}if(o)return()=>o(e,{fit:"box",width:"".concat(Math.round(80*i),"%")}).then(t=>console.log(t));return d}({image:o,message:s,scale:u}):d}time(t,e){return this._getLogFunction(t,e,console.time?console.time:console.info)}timeEnd(t,e){return this._getLogFunction(t,e,console.timeEnd?console.timeEnd:console.info)}timeStamp(t,e){return this._getLogFunction(t,e,console.timeStamp||d)}group(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{collapsed:!1};const r=v({logLevel:t,message:e,opts:n}),{collapsed:i}=n;return r.method=(i?console.groupCollapsed:console.group)||console.info,this._getLogFunction(r)}groupCollapsed(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.group(t,e,Object.assign({},n,{collapsed:!0}))}groupEnd(t){return this._getLogFunction(t,"",console.groupEnd||d)}withGroup(t,e,n){this.group(t,e)();try{n()}finally{this.groupEnd(t)()}}trace(){console.trace&&console.trace()}_shouldLog(t){return this.isEnabled()&&this.getLevel()>=y(t)}_getLogFunction(t,e,n,r,o){if(this._shouldLog(t)){o=v({logLevel:t,message:e,args:r,opts:o}),c(n=n||o.method),o.total=this.getTotal(),o.delta=this.getDelta(),this._deltaTs=h();const a=o.tag||o.message;if(o.once){if(A[a])return d;A[a]=h()}return e=function(t,e,n){if("string"==typeof e){const s=n.time?function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:8;const n=Math.max(e-t.length,0);return"".concat(" ".repeat(n)).concat(t)}(function(t){let e;return e=t<10?"".concat(t.toFixed(2),"ms"):t<100?"".concat(t.toFixed(1),"ms"):t<1e3?"".concat(t.toFixed(0),"ms"):"".concat((t/1e3).toFixed(2),"s"),e}(n.total)):"";e=n.time?"".concat(t,": ").concat(s," ").concat(e):"".concat(t,": ").concat(e),r=e,o=n.color,a=n.background,i.a||"string"!=typeof r||(o&&(o=u(o),r="[".concat(o,"m").concat(r,"")),a&&(o=u(a),r="[".concat(a+10,"m").concat(r,""))),e=r}var r,o,a;return e}(this.id,o.message,o),n.bind(console,e,...o.args)}return d}}function y(t){if(!t)return 0;let e;switch(typeof t){case"number":e=t;break;case"object":e=t.logLevel||t.priority||0;break;default:return 0}return c(Number.isFinite(e)&&e>=0),e}function v(t){const{logLevel:e,message:n}=t;t.logLevel=y(e);const r=t.args?Array.from(t.args):[];for(;r.length&&r.shift()!==n;);switch(typeof e){case"string":case"function":void 0!==n&&r.unshift(n),t.message=e;break;case"object":Object.assign(t,e)}"function"==typeof t.message&&(t.message=t.message());const i=typeof t.message;return c("string"===i||"object"===i),Object.assign(t,{args:r},t.opts)}function _(t){for(const e in t)for(const n in t[e])return n||"untitled";return"empty"}Object(r.a)(m,"VERSION","8.9.0-alpha.5")},,,,,,,,,,,,function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var r=n(134),i=n(167);const o=globalThis;function a(t){if(!t&&!Object(r.a)())return"Node";if(Object(i.a)(t))return"Electron";const e="undefined"!=typeof navigator?navigator:{},n=t||e.userAgent||"";if(n.indexOf("Edge")>-1)return"Edge";const a=-1!==n.indexOf("MSIE "),s=-1!==n.indexOf("Trident/");return a||s?"IE":o.chrome?"Chrome":o.safari?"Safari":o.mozInnerScreenX?"Firefox":"Unknown"}},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(8),i=n(38),o=n(32),a=n(45);class s extends i.a{get[Symbol.toStringTag](){return"TransformFeedback"}static isSupported(t){return Object(r.j)(t)}constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Object(r.a)(t),super(t,e),this.initialize(e),this.stubRemovedMethods("TransformFeedback","v6.0",["pause","resume"]),Object.seal(this)}initialize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.buffers={},this.unused={},this.configuration=null,this.bindOnUse=!0,Object(a.a)(this.buffers)||this.bind(()=>this._unbindBuffers()),this.setProps(t),this}setProps(t){"program"in t&&(this.configuration=t.program&&t.program.configuration),"configuration"in t&&(this.configuration=t.configuration),"bindOnUse"in t&&(t=t.bindOnUse),"buffers"in t&&this.setBuffers(t.buffers)}setBuffers(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.bind(()=>{for(const e in t)this.setBuffer(e,t[e])}),this}setBuffer(t,e){const n=this._getVaryingIndex(t),{buffer:i,byteSize:o,byteOffset:a}=this._getBufferParams(e);return n<0?(this.unused[t]=i,r.k.warn("".concat(this.id," unused varying buffer ").concat(t))(),this):(this.buffers[n]=e,this.bindOnUse||this._bindBuffer(n,i,a,o),this)}begin(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.gl.bindTransformFeedback(36386,this.handle),this._bindBuffers(),this.gl.beginTransformFeedback(t),this}end(){return this.gl.endTransformFeedback(),this._unbindBuffers(),this.gl.bindTransformFeedback(36386,null),this}_getBufferParams(t){let e,n,r;return t instanceof o.a==!1?(r=t.buffer,n=t.byteSize,e=t.byteOffset):r=t,void 0===e&&void 0===n||(e=e||0,n=n||r.byteLength-e),{buffer:r,byteOffset:e,byteSize:n}}_getVaryingInfo(t){return this.configuration&&this.configuration.getVaryingInfo(t)}_getVaryingIndex(t){if(this.configuration)return this.configuration.getVaryingInfo(t).location;const e=Number(t);return Number.isFinite(e)?e:-1}_bindBuffers(){if(this.bindOnUse)for(const t in this.buffers){const{buffer:e,byteSize:n,byteOffset:r}=this._getBufferParams(this.buffers[t]);this._bindBuffer(t,e,r,n)}}_unbindBuffers(){if(this.bindOnUse)for(const t in this.buffers)this._bindBuffer(t,null)}_bindBuffer(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3?arguments[3]:void 0;const i=e&&e.handle;return i&&void 0!==r?this.gl.bindBufferRange(35982,t,i,n,r):this.gl.bindBufferBase(35982,t,i),this}_createHandle(){return this.gl.createTransformFeedback()}_deleteHandle(){this.gl.deleteTransformFeedback(this.handle)}_bindHandle(t){this.gl.bindTransformFeedback(36386,this.handle)}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));let r=1,i=1;class o{constructor(){this.time=0,this.channels=new Map,this.animations=new Map,this.playing=!1,this.lastEngineTime=-1}addChannel(t){const{delay:e=0,duration:n=Number.POSITIVE_INFINITY,rate:i=1,repeat:o=1}=t,a=r++,s={time:0,delay:e,duration:n,rate:i,repeat:o};return this._setChannelTime(s,this.time),this.channels.set(a,s),a}removeChannel(t){this.channels.delete(t);for(const[e,n]of this.animations)n.channel===t&&this.detachAnimation(e)}isFinished(t){const e=this.channels.get(t);return void 0!==e&&this.time>=e.delay+e.duration*e.repeat}getTime(t){if(void 0===t)return this.time;const e=this.channels.get(t);return void 0===e?-1:e.time}setTime(t){this.time=Math.max(0,t);const e=this.channels.values();for(const t of e)this._setChannelTime(t,this.time);const n=this.animations.values();for(const t of n){const{animation:e,channel:n}=t;e.setTime(this.getTime(n))}}play(){this.playing=!0}pause(){this.playing=!1,this.lastEngineTime=-1}reset(){this.setTime(0)}attachAnimation(t,e){const n=i++;return this.animations.set(n,{animation:t,channel:e}),t.setTime(this.getTime(e)),n}detachAnimation(t){this.animations.delete(t)}update(t){this.playing&&(-1===this.lastEngineTime&&(this.lastEngineTime=t),this.setTime(this.time+(t-this.lastEngineTime)),this.lastEngineTime=t)}_setChannelTime(t,e){const n=e-t.delay;n>=t.duration*t.repeat?t.time=t.duration*t.rate:(t.time=Math.max(0,n)%t.duration,t.time*=t.rate)}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(114),i=n(13),o=n(22),a=n(33),s=n(53);class u extends r.a{constructor(t=0,e=0){super(2),Object(i.f)(t)&&1===arguments.length?this.copy(t):(i.b.debug&&(Object(o.a)(t),Object(o.a)(e)),this[0]=t,this[1]=e)}set(t,e){return this[0]=t,this[1]=e,this.check()}copy(t){return this[0]=t[0],this[1]=t[1],this.check()}fromObject(t){return i.b.debug&&(Object(o.a)(t.x),Object(o.a)(t.y)),this[0]=t.x,this[1]=t.y,this.check()}toObject(t){return t.x=this[0],t.y=this[1],t}get ELEMENTS(){return 2}horizontalAngle(){return Math.atan2(this.y,this.x)}verticalAngle(){return Math.atan2(this.x,this.y)}transform(t){return this.transformAsPoint(t)}transformAsPoint(t){return a.j(this,this,t),this.check()}transformAsVector(t){return Object(s.a)(this,this,t),this.check()}transformByMatrix3(t){return a.i(this,this,t),this.check()}transformByMatrix2x3(t){return a.h(this,this,t),this.check()}transformByMatrix2(t){return a.g(this,this,t),this.check()}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(47),i=n(126),o=n(49);const a={};async function s(t,e=null,n={}){return e&&(t=function(t,e,n){if(t.startsWith("http"))return t;const i=n.modules||{};if(i[t])return i[t];if(!r.b)return"modules/".concat(e,"/dist/libs/").concat(t);if(n.CDN)return Object(o.a)(n.CDN.startsWith("http")),"".concat(n.CDN,"/").concat(e,"@").concat("3.2.10","/dist/libs/").concat(t);if(r.d)return"../src/libs/".concat(t);return"modules/".concat(e,"/src/libs/").concat(t)}(t,e,n)),a[t]=a[t]||async function(t){if(t.endsWith("wasm")){const e=await fetch(t);return await e.arrayBuffer()}if(!r.b)try{return i&&i.requireFromFile&&await i.requireFromFile(t)}catch{return null}if(r.d)return importScripts(t);const e=await fetch(t);return function(t,e){if(!r.b)return i.requireFromString&&i.requireFromString(t,e);if(r.d)return eval.call(r.a,t),null;const n=document.createElement("script");n.id=e;try{n.appendChild(document.createTextNode(t))}catch(e){n.text=t}return document.body.appendChild(n),null}(await e.text(),t)}(t),await a[t]}},function(t,e,n){"use strict";var r={};n.r(r),n.d(r,"name",(function(){return ot})),n.d(r,"decode",(function(){return at}));var i={};n.r(i),n.d(i,"name",(function(){return ft})),n.d(i,"preprocess",(function(){return pt}));var o={};n.r(o),n.d(o,"name",(function(){return dt})),n.d(o,"preprocess",(function(){return At}));var a={};n.r(a),n.d(a,"name",(function(){return yt})),n.d(a,"preprocess",(function(){return vt})),n.d(a,"decode",(function(){return _t})),n.d(a,"encode",(function(){return bt}));var s={};n.r(s),n.d(s,"name",(function(){return Ot})),n.d(s,"decode",(function(){return St})),n.d(s,"encode",(function(){return Tt}));var u={};n.r(u),n.d(u,"name",(function(){return Ct})),n.d(u,"decode",(function(){return Pt})),n.d(u,"encode",(function(){return Mt}));var c={};n.r(c),n.d(c,"name",(function(){return It})),n.d(c,"decode",(function(){return Bt})),n.d(c,"encode",(function(){return Rt}));var l=n(289);const h="https://unpkg.com/@loaders.gl/textures@".concat("3.2.10","/dist/libs/basis_encoder.wasm"),f="https://unpkg.com/@loaders.gl/textures@".concat("3.2.10","/dist/libs/basis_encoder.js");let p,d;async function A(t){const e=t.modules||{};return e.basis?e.basis:(p=p||async function(t){let e=null,n=null;return[e,n]=await Promise.all([await Object(l.a)("basis_transcoder.js","textures",t),await Object(l.a)("basis_transcoder.wasm","textures",t)]),e=e||globalThis.BASIS,await function(t,e){const n={};e&&(n.wasmBinary=e);return new Promise(e=>{t(n).then(t=>{const{BasisFile:n,initializeBasis:r}=t;r(),e({BasisFile:n})})})}(e,n)}(t),await p)}async function g(t){const e=t.modules||{};return e.basisEncoder?e.basisEncoder:(d=d||async function(t){let e=null,n=null;return[e,n]=await Promise.all([await Object(l.a)(f,"textures",t),await Object(l.a)(h,"textures",t)]),e=e||globalThis.BASIS,await function(t,e){const n={};e&&(n.wasmBinary=e);return new Promise(e=>{t(n).then(t=>{const{BasisFile:n,KTX2File:r,initializeBasis:i,BasisEncoder:o}=t;i(),e({BasisFile:n,KTX2File:r,BasisEncoder:o})})})}(e,n)}(t),await d)}const m={COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_RGBA8_ETC2_EAC:37493,COMPRESSED_SRGB8_ETC2:37494,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37495,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37496,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37497,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGB_ATC_WEBGL:35986,COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL:35987,COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL:34798,COMPRESSED_RGBA_ASTC_4X4_KHR:37808,COMPRESSED_RGBA_ASTC_5X4_KHR:37809,COMPRESSED_RGBA_ASTC_5X5_KHR:37810,COMPRESSED_RGBA_ASTC_6X5_KHR:37811,COMPRESSED_RGBA_ASTC_6X6_KHR:37812,COMPRESSED_RGBA_ASTC_8X5_KHR:37813,COMPRESSED_RGBA_ASTC_8X6_KHR:37814,COMPRESSED_RGBA_ASTC_8X8_KHR:37815,COMPRESSED_RGBA_ASTC_10X5_KHR:37816,COMPRESSED_RGBA_ASTC_10X6_KHR:37817,COMPRESSED_RGBA_ASTC_10X8_KHR:37818,COMPRESSED_RGBA_ASTC_10X10_KHR:37819,COMPRESSED_RGBA_ASTC_12X10_KHR:37820,COMPRESSED_RGBA_ASTC_12X12_KHR:37821,COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR:37840,COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR:37841,COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR:37842,COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR:37843,COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR:37844,COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR:37845,COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR:37846,COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR:37847,COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR:37848,COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR:37849,COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR:37850,COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR:37851,COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR:37852,COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR:37853,COMPRESSED_RED_RGTC1_EXT:36283,COMPRESSED_SIGNED_RED_RGTC1_EXT:36284,COMPRESSED_RED_GREEN_RGTC2_EXT:36285,COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT:36286,COMPRESSED_SRGB_S3TC_DXT1_EXT:35916,COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:35917,COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:35918,COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:35919},y=["","WEBKIT_","MOZ_"],v={WEBGL_compressed_texture_s3tc:"dxt",WEBGL_compressed_texture_s3tc_srgb:"dxt-srgb",WEBGL_compressed_texture_etc1:"etc1",WEBGL_compressed_texture_etc:"etc2",WEBGL_compressed_texture_pvrtc:"pvrtc",WEBGL_compressed_texture_atc:"atc",WEBGL_compressed_texture_astc:"astc",EXT_texture_compression_rgtc:"rgtc"};let _=null;function b(t){if(!_){t=t||function(){try{return document.createElement("canvas").getContext("webgl")}catch(t){return null}}()||void 0,_=new Set;for(const e of y)for(const n in v)if(t&&t.getExtension("".concat(e).concat(n))){const t=v[n];_.add(t)}}return _}n(232);const x=[171,75,84,88,32,50,48,187,13,10,26,10];const w={etc1:{basisFormat:0,compressed:!0,format:m.COMPRESSED_RGB_ETC1_WEBGL},etc2:{basisFormat:1,compressed:!0},bc1:{basisFormat:2,compressed:!0,format:m.COMPRESSED_RGB_S3TC_DXT1_EXT},bc3:{basisFormat:3,compressed:!0,format:m.COMPRESSED_RGBA_S3TC_DXT5_EXT},bc4:{basisFormat:4,compressed:!0},bc5:{basisFormat:5,compressed:!0},"bc7-m6-opaque-only":{basisFormat:6,compressed:!0},"bc7-m5":{basisFormat:7,compressed:!0},"pvrtc1-4-rgb":{basisFormat:8,compressed:!0,format:m.COMPRESSED_RGB_PVRTC_4BPPV1_IMG},"pvrtc1-4-rgba":{basisFormat:9,compressed:!0,format:m.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG},"astc-4x4":{basisFormat:10,compressed:!0,format:m.COMPRESSED_RGBA_ASTC_4X4_KHR},"atc-rgb":{basisFormat:11,compressed:!0},"atc-rgba-interpolated-alpha":{basisFormat:12,compressed:!0},rgba32:{basisFormat:13,compressed:!1},rgb565:{basisFormat:14,compressed:!1},bgr565:{basisFormat:15,compressed:!1},rgba4444:{basisFormat:16,compressed:!1}};function E(t,e,n){const r=new t(new Uint8Array(e));try{if(!r.startTranscoding())throw new Error("Failed to start basis transcoding");const t=r.getNumImages(),e=[];for(let i=0;i=0&&a<=e.byteLength),{ArrayType:n,length:o,byteLength:a}}const Q={asset:{version:"2.0",generator:"loaders.gl"},buffers:[]};class K{constructor(t){Object(F.a)(this,"gltf",void 0),Object(F.a)(this,"sourceBuffers",void 0),Object(F.a)(this,"byteLength",void 0),this.gltf=t||{json:{...Q},buffers:[]},this.sourceBuffers=[],this.byteLength=0,this.gltf.buffers&&this.gltf.buffers[0]&&(this.byteLength=this.gltf.buffers[0].byteLength,this.sourceBuffers=[this.gltf.buffers[0]])}get json(){return this.gltf.json}getApplicationData(t){return this.json[t]}getExtraData(t){return(this.json.extras||{})[t]}getExtension(t){const e=this.getUsedExtensions().find(e=>e===t),n=this.json.extensions||{};return e?n[t]||!0:null}getRequiredExtension(t){return this.getRequiredExtensions().find(e=>e===t)?this.getExtension(t):null}getRequiredExtensions(){return this.json.extensionsRequired||[]}getUsedExtensions(){return this.json.extensionsUsed||[]}getObjectExtension(t,e){return(t.extensions||{})[e]}getScene(t){return this.getObject("scenes",t)}getNode(t){return this.getObject("nodes",t)}getSkin(t){return this.getObject("skins",t)}getMesh(t){return this.getObject("meshes",t)}getMaterial(t){return this.getObject("materials",t)}getAccessor(t){return this.getObject("accessors",t)}getTexture(t){return this.getObject("textures",t)}getSampler(t){return this.getObject("samplers",t)}getImage(t){return this.getObject("images",t)}getBufferView(t){return this.getObject("bufferViews",t)}getBuffer(t){return this.getObject("buffers",t)}getObject(t,e){if("object"==typeof e)return e;const n=this.json[t]&&this.json[t][e];if(!n)throw new Error("glTF file error: Could not find ".concat(t,"[").concat(e,"]"));return n}getTypedArrayForBufferView(t){const e=(t=this.getBufferView(t)).buffer,n=this.gltf.buffers[e];L(n);const r=(t.byteOffset||0)+n.byteOffset;return new Uint8Array(n.arrayBuffer,r,t.byteLength)}getTypedArrayForAccessor(t){t=this.getAccessor(t);const e=this.getBufferView(t.bufferView),n=this.getBuffer(e.buffer).data,{ArrayType:r,length:i}=Z(t,e);return new r(n,e.byteOffset+t.byteOffset,i)}getTypedArrayForImageData(t){t=this.getAccessor(t);const e=this.getBufferView(t.bufferView),n=this.getBuffer(e.buffer).data,r=e.byteOffset||0;return new Uint8Array(n,r,e.byteLength)}addApplicationData(t,e){return this.json[t]=e,this}addExtraData(t,e){return this.json.extras=this.json.extras||{},this.json.extras[t]=e,this}addObjectExtension(t,e,n){return t.extensions=t.extensions||{},t.extensions[e]=n,this.registerUsedExtension(e),this}setObjectExtension(t,e,n){(t.extensions||{})[e]=n}removeObjectExtension(t,e){const n=t.extensions||{},r=n[e];return delete n[e],r}addExtension(t,e={}){return L(e),this.json.extensions=this.json.extensions||{},this.json.extensions[t]=e,this.registerUsedExtension(t),e}addRequiredExtension(t,e={}){return L(e),this.addExtension(t,e),this.registerRequiredExtension(t),e}registerUsedExtension(t){this.json.extensionsUsed=this.json.extensionsUsed||[],this.json.extensionsUsed.find(e=>e===t)||this.json.extensionsUsed.push(t)}registerRequiredExtension(t){this.registerUsedExtension(t),this.json.extensionsRequired=this.json.extensionsRequired||[],this.json.extensionsRequired.find(e=>e===t)||this.json.extensionsRequired.push(t)}removeExtension(t){this.json.extensionsRequired&&this._removeStringFromArray(this.json.extensionsRequired,t),this.json.extensionsUsed&&this._removeStringFromArray(this.json.extensionsUsed,t),this.json.extensions&&delete this.json.extensions[t]}setDefaultScene(t){this.json.scene=t}addScene(t){const{nodeIndices:e}=t;return this.json.scenes=this.json.scenes||[],this.json.scenes.push({nodes:e}),this.json.scenes.length-1}addNode(t){const{meshIndex:e,matrix:n}=t;this.json.nodes=this.json.nodes||[];const r={mesh:e};return n&&(r.matrix=n),this.json.nodes.push(r),this.json.nodes.length-1}addMesh(t){const{attributes:e,indices:n,material:r,mode:i=4}=t,o={primitives:[{attributes:this._addAttributes(e),mode:i}]};if(n){const t=this._addIndices(n);o.primitives[0].indices=t}return Number.isFinite(r)&&(o.primitives[0].material=r),this.json.meshes=this.json.meshes||[],this.json.meshes.push(o),this.json.meshes.length-1}addPointCloud(t){const e={primitives:[{attributes:this._addAttributes(t),mode:0}]};return this.json.meshes=this.json.meshes||[],this.json.meshes.push(e),this.json.meshes.length-1}addImage(t,e){const n=Object(z.a)(t),r=e||(null==n?void 0:n.mimeType),i={bufferView:this.addBufferView(t),mimeType:r};return this.json.images=this.json.images||[],this.json.images.push(i),this.json.images.length-1}addBufferView(t){const e=t.byteLength;L(Number.isFinite(e)),this.sourceBuffers=this.sourceBuffers||[],this.sourceBuffers.push(t);const n={buffer:0,byteOffset:this.byteLength,byteLength:e};return this.byteLength+=Object(U.b)(e,4),this.json.bufferViews=this.json.bufferViews||[],this.json.bufferViews.push(n),this.json.bufferViews.length-1}addAccessor(t,e){const n={bufferView:t,type:X(e.size),componentType:e.componentType,count:e.count,max:e.max,min:e.min};return this.json.accessors=this.json.accessors||[],this.json.accessors.push(n),this.json.accessors.length-1}addBinaryBuffer(t,e={size:3}){const n=this.addBufferView(t);let r={min:e.min,max:e.max};r.min&&r.max||(r=this._getAccessorMinMax(t,e.size));const i={size:e.size,componentType:J(t),count:Math.round(t.length/e.size),min:r.min,max:r.max};return this.addAccessor(n,Object.assign(i,e))}addTexture(t){const{imageIndex:e}=t,n={source:e};return this.json.textures=this.json.textures||[],this.json.textures.push(n),this.json.textures.length-1}addMaterial(t){return this.json.materials=this.json.materials||[],this.json.materials.push(t),this.json.materials.length-1}createBinaryChunk(){var t,e;this.gltf.buffers=[];const n=this.byteLength,r=new ArrayBuffer(n),i=new Uint8Array(r);let o=0;for(const t of this.sourceBuffers||[])o=Object(U.a)(t,i,o);null!==(t=this.json)&&void 0!==t&&null!==(e=t.buffers)&&void 0!==e&&e[0]?this.json.buffers[0].byteLength=n:this.json.buffers=[{byteLength:n}],this.gltf.binary=r,this.sourceBuffers=[r]}_removeStringFromArray(t,e){let n=!0;for(;n;){const r=t.indexOf(e);r>-1?t.splice(r,1):n=!1}}_addAttributes(t={}){const e={};for(const n in t){const r=t[n],i=this._getGltfAttributeName(n),o=this.addBinaryBuffer(r.value,r);e[i]=o}return e}_addIndices(t){return this.addBinaryBuffer(t,{size:1})}_getGltfAttributeName(t){switch(t.toLowerCase()){case"position":case"positions":case"vertices":return"POSITION";case"normal":case"normals":return"NORMAL";case"color":case"colors":return"COLOR_0";case"texcoord":case"texcoords":return"TEXCOORD_0";default:return t}}_getAccessorMinMax(t,e){const n={min:null,max:null};if(t.length96?r-71:r>64?r-65:r>47?r+4:r>46?63:62}let n=0;for(let r=0;r0)throw new Error("glTF: Empty primitive detected: Draco decompression failure?")}(e)}function wt(t,e,n=4,r,i){var o;if(!r.DracoWriter)throw new Error("options.gltf.DracoWriter not provided");const a=r.DracoWriter.encodeSync({attributes:t}),s=null==i||null===(o=i.parseSync)||void 0===o?void 0:o.call(i,{attributes:t}),u=r._addFauxAttributes(s.attributes);return{primitives:[{attributes:u,mode:n,extensions:{KHR_draco_mesh_compression:{bufferView:r.addBufferView(a),attributes:u}}}]}}function*Et(t){for(const e of t.json.meshes||[])for(const t of e.primitives)yield t}const Ot="KHR_lights_punctual";async function St(t){const e=new K(t),{json:n}=e,r=e.getExtension("KHR_lights_punctual");r&&(e.json.lights=r.lights,e.removeExtension("KHR_lights_punctual"));for(const t of n.nodes||[]){const n=e.getObjectExtension(t,"KHR_lights_punctual");n&&(t.light=n.light),e.removeObjectExtension(t,"KHR_lights_punctual")}}async function Tt(t){const e=new K(t),{json:n}=e;if(n.lights){const t=e.addExtension("KHR_lights_punctual");L(!t.lights),t.lights=n.lights,delete n.lights}if(e.json.lights){for(const t of e.json.lights){const n=t.node;e.addObjectExtension(n,"KHR_lights_punctual",t)}delete e.json.lights}}const Ct="KHR_materials_unlit";async function Pt(t){const e=new K(t),{json:n}=e;e.removeExtension("KHR_materials_unlit");for(const t of n.materials||[]){t.extensions&&t.extensions.KHR_materials_unlit&&(t.unlit=!0),e.removeObjectExtension(t,"KHR_materials_unlit")}}function Mt(t){const e=new K(t),{json:n}=e;if(e.materials)for(const t of n.materials||[])t.unlit&&(delete t.unlit,e.addObjectExtension(t,"KHR_materials_unlit",{}),e.addExtension("KHR_materials_unlit"))}const It="KHR_techniques_webgl";async function Bt(t){const e=new K(t),{json:n}=e,r=e.getExtension("KHR_techniques_webgl");if(r){const t=function(t,e){const{programs:n=[],shaders:r=[],techniques:i=[]}=t,o=new TextDecoder;return r.forEach(t=>{if(!Number.isFinite(t.bufferView))throw new Error("KHR_techniques_webgl: no shader code");t.code=o.decode(e.getTypedArrayForBufferView(t.bufferView))}),n.forEach(t=>{t.fragmentShader=r[t.fragmentShader],t.vertexShader=r[t.vertexShader]}),i.forEach(t=>{t.program=n[t.program]}),i}(r,e);for(const r of n.materials||[]){const n=e.getObjectExtension(r,"KHR_techniques_webgl");n&&(r.technique=Object.assign({},n,t[n.technique]),r.technique.values=kt(r.technique,e)),e.removeObjectExtension(r,"KHR_techniques_webgl")}e.removeExtension("KHR_techniques_webgl")}}async function Rt(t,e){}function kt(t,e){const n=Object.assign({},t.values);return Object.keys(t.uniforms||{}).forEach(e=>{t.uniforms[e].value&&!(e in n)&&(n[e]=t.uniforms[e].value)}),Object.keys(n).forEach(t=>{"object"==typeof n[t]&&void 0!==n[t].index&&(n[t].texture=e.getTexture(n[t].index))}),n}const Lt=[r,i,o,a,s,u,c];function Dt(t,e){var n;const r=(null==e||null===(n=e.gltf)||void 0===n?void 0:n.excludeExtensions)||{};return!(t in r&&!r[t])}const jt={accessors:"accessor",animations:"animation",buffers:"buffer",bufferViews:"bufferView",images:"image",materials:"material",meshes:"mesh",nodes:"node",samplers:"sampler",scenes:"scene",skins:"skin",textures:"texture"},Ft={accessor:"accessors",animations:"animation",buffer:"buffers",bufferView:"bufferViews",image:"images",material:"materials",mesh:"meshes",node:"nodes",sampler:"samplers",scene:"scenes",skin:"skins",texture:"textures"};class zt{constructor(){Object(F.a)(this,"idToIndexMap",{animations:{},accessors:{},buffers:{},bufferViews:{},images:{},materials:{},meshes:{},nodes:{},samplers:{},scenes:{},skins:{},textures:{}}),Object(F.a)(this,"json",void 0)}normalize(t,e){this.json=t.json;const n=t.json;switch(n.asset&&n.asset.version){case"2.0":return;case void 0:case"1.0":break;default:return void console.warn("glTF: Unknown version ".concat(n.asset.version))}if(!e.normalize)throw new Error("glTF v1 is not supported.");console.warn("Converting glTF v1 to glTF v2 format. This is experimental and may fail."),this._addAsset(n),this._convertTopLevelObjectsToArrays(n),function(t){const e=new K(t),{json:n}=e;for(const t of n.images||[]){const n=e.getObjectExtension(t,"KHR_binary_glTF");n&&Object.assign(t,n),e.removeObjectExtension(t,"KHR_binary_glTF")}n.buffers&&n.buffers[0]&&delete n.buffers[0].uri,e.removeExtension("KHR_binary_glTF")}(t),this._convertObjectIdsToArrayIndices(n),this._updateObjects(n),this._updateMaterial(n)}_addAsset(t){t.asset=t.asset||{},t.asset.version="2.0",t.asset.generator=t.asset.generator||"Normalized to glTF 2.0 by loaders.gl"}_convertTopLevelObjectsToArrays(t){for(const e in jt)this._convertTopLevelObjectToArray(t,e)}_convertTopLevelObjectToArray(t,e){const n=t[e];if(n&&!Array.isArray(n)){t[e]=[];for(const r in n){const i=n[r];i.id=i.id||r;const o=t[e].length;t[e].push(i),this.idToIndexMap[e][r]=o}}}_convertObjectIdsToArrayIndices(t){for(const e in jt)this._convertIdsToIndices(t,e);"scene"in t&&(t.scene=this._convertIdToIndex(t.scene,"scene"));for(const e of t.textures)this._convertTextureIds(e);for(const e of t.meshes)this._convertMeshIds(e);for(const e of t.nodes)this._convertNodeIds(e);for(const e of t.scenes)this._convertSceneIds(e)}_convertTextureIds(t){t.source&&(t.source=this._convertIdToIndex(t.source,"image"))}_convertMeshIds(t){for(const e of t.primitives){const{attributes:t,indices:n,material:r}=e;for(const e in t)t[e]=this._convertIdToIndex(t[e],"accessor");n&&(e.indices=this._convertIdToIndex(n,"accessor")),r&&(e.material=this._convertIdToIndex(r,"material"))}}_convertNodeIds(t){t.children&&(t.children=t.children.map(t=>this._convertIdToIndex(t,"node"))),t.meshes&&(t.meshes=t.meshes.map(t=>this._convertIdToIndex(t,"mesh")))}_convertSceneIds(t){t.nodes&&(t.nodes=t.nodes.map(t=>this._convertIdToIndex(t,"node")))}_convertIdsToIndices(t,e){t[e]||(console.warn("gltf v1: json doesn't contain attribute ".concat(e)),t[e]=[]);for(const n of t[e])for(const t in n){const e=n[t],r=this._convertIdToIndex(e,t);n[t]=r}}_convertIdToIndex(t,e){const n=Ft[e];if(n in this.idToIndexMap){const r=this.idToIndexMap[n][t];if(!Number.isFinite(r))throw new Error("gltf v1: failed to resolve ".concat(e," with id ").concat(t));return r}return t}_updateObjects(t){for(const t of this.json.buffers)delete t.type}_updateMaterial(t){for(const i of t.materials){var e,n,r;i.pbrMetallicRoughness={baseColorFactor:[1,1,1,1],metallicFactor:1,roughnessFactor:1};const o=(null===(e=i.values)||void 0===e?void 0:e.tex)||(null===(n=i.values)||void 0===n?void 0:n.texture2d_0)||(null===(r=i.values)||void 0===r?void 0:r.diffuseTex),a=t.textures.findIndex(t=>t.id===o);-1!==a&&(i.pbrMetallicRoughness.baseColorTexture={index:a})}}}const Ut={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Nt={5120:1,5121:1,5122:2,5123:2,5125:4,5126:4},Gt=10240,Vt=10241,Ht=10242,Wt=10243,qt=10497,Xt={magFilter:Gt,minFilter:Vt,wrapS:Ht,wrapT:Wt},Jt={[Gt]:9729,[Vt]:9986,[Ht]:qt,[Wt]:qt};class Zt{constructor(){Object(F.a)(this,"baseUri",""),Object(F.a)(this,"json",{}),Object(F.a)(this,"buffers",[]),Object(F.a)(this,"images",[])}postProcess(t,e={}){const{json:n,buffers:r=[],images:i=[],baseUri:o=""}=t;return L(n),this.baseUri=o,this.json=n,this.buffers=r,this.images=i,this._resolveTree(this.json,e),this.json}_resolveTree(t,e={}){t.bufferViews&&(t.bufferViews=t.bufferViews.map((t,e)=>this._resolveBufferView(t,e))),t.images&&(t.images=t.images.map((t,e)=>this._resolveImage(t,e))),t.samplers&&(t.samplers=t.samplers.map((t,e)=>this._resolveSampler(t,e))),t.textures&&(t.textures=t.textures.map((t,e)=>this._resolveTexture(t,e))),t.accessors&&(t.accessors=t.accessors.map((t,e)=>this._resolveAccessor(t,e))),t.materials&&(t.materials=t.materials.map((t,e)=>this._resolveMaterial(t,e))),t.meshes&&(t.meshes=t.meshes.map((t,e)=>this._resolveMesh(t,e))),t.nodes&&(t.nodes=t.nodes.map((t,e)=>this._resolveNode(t,e))),t.skins&&(t.skins=t.skins.map((t,e)=>this._resolveSkin(t,e))),t.scenes&&(t.scenes=t.scenes.map((t,e)=>this._resolveScene(t,e))),void 0!==t.scene&&(t.scene=t.scenes[this.json.scene])}getScene(t){return this._get("scenes",t)}getNode(t){return this._get("nodes",t)}getSkin(t){return this._get("skins",t)}getMesh(t){return this._get("meshes",t)}getMaterial(t){return this._get("materials",t)}getAccessor(t){return this._get("accessors",t)}getCamera(t){return null}getTexture(t){return this._get("textures",t)}getSampler(t){return this._get("samplers",t)}getImage(t){return this._get("images",t)}getBufferView(t){return this._get("bufferViews",t)}getBuffer(t){return this._get("buffers",t)}_get(t,e){if("object"==typeof e)return e;const n=this.json[t]&&this.json[t][e];return n||console.warn("glTF file error: Could not find ".concat(t,"[").concat(e,"]")),n}_resolveScene(t,e){return t.id=t.id||"scene-".concat(e),t.nodes=(t.nodes||[]).map(t=>this.getNode(t)),t}_resolveNode(t,e){return t.id=t.id||"node-".concat(e),t.children&&(t.children=t.children.map(t=>this.getNode(t))),void 0!==t.mesh?t.mesh=this.getMesh(t.mesh):void 0!==t.meshes&&t.meshes.length&&(t.mesh=t.meshes.reduce((t,e)=>{const n=this.getMesh(e);return t.id=n.id,t.primitives=t.primitives.concat(n.primitives),t},{primitives:[]})),void 0!==t.camera&&(t.camera=this.getCamera(t.camera)),void 0!==t.skin&&(t.skin=this.getSkin(t.skin)),t}_resolveSkin(t,e){return t.id=t.id||"skin-".concat(e),t.inverseBindMatrices=this.getAccessor(t.inverseBindMatrices),t}_resolveMesh(t,e){return t.id=t.id||"mesh-".concat(e),t.primitives&&(t.primitives=t.primitives.map(t=>{const e=(t={...t}).attributes;t.attributes={};for(const n in e)t.attributes[n]=this.getAccessor(e[n]);return void 0!==t.indices&&(t.indices=this.getAccessor(t.indices)),void 0!==t.material&&(t.material=this.getMaterial(t.material)),t})),t}_resolveMaterial(t,e){if(t.id=t.id||"material-".concat(e),t.normalTexture&&(t.normalTexture={...t.normalTexture},t.normalTexture.texture=this.getTexture(t.normalTexture.index)),t.occlusionTexture&&(t.occlustionTexture={...t.occlustionTexture},t.occlusionTexture.texture=this.getTexture(t.occlusionTexture.index)),t.emissiveTexture&&(t.emmisiveTexture={...t.emmisiveTexture},t.emissiveTexture.texture=this.getTexture(t.emissiveTexture.index)),t.emissiveFactor||(t.emissiveFactor=t.emmisiveTexture?[1,1,1]:[0,0,0]),t.pbrMetallicRoughness){t.pbrMetallicRoughness={...t.pbrMetallicRoughness};const e=t.pbrMetallicRoughness;e.baseColorTexture&&(e.baseColorTexture={...e.baseColorTexture},e.baseColorTexture.texture=this.getTexture(e.baseColorTexture.index)),e.metallicRoughnessTexture&&(e.metallicRoughnessTexture={...e.metallicRoughnessTexture},e.metallicRoughnessTexture.texture=this.getTexture(e.metallicRoughnessTexture.index))}return t}_resolveAccessor(t,e){var n,r;if(t.id=t.id||"accessor-".concat(e),void 0!==t.bufferView&&(t.bufferView=this.getBufferView(t.bufferView)),t.bytesPerComponent=(n=t.componentType,Nt[n]),t.components=(r=t.type,Ut[r]),t.bytesPerElement=t.bytesPerComponent*t.components,t.bufferView){const e=t.bufferView.buffer,{ArrayType:n,byteLength:r}=Z(t,t.bufferView),i=(t.bufferView.byteOffset||0)+(t.byteOffset||0)+e.byteOffset;let o=e.arrayBuffer.slice(i,i+r);t.bufferView.byteStride&&(o=this._getValueFromInterleavedBuffer(e,i,t.bufferView.byteStride,t.bytesPerElement,t.count)),t.value=new n(o)}return t}_getValueFromInterleavedBuffer(t,e,n,r,i){const o=new Uint8Array(i*r);for(let a=0;a20);const r=e.getUint32(n+0,!0),i=e.getUint32(n+4,!0);return n+=8,Object(Qt.a)(0===i),te(t,e,n,r),n+=r,n+=ee(t,e,n,t.header.byteLength)}(t,i,n);case 2:return function(t,e,n,r){return Object(Qt.a)(t.header.byteLength>20),function(t,e,n,r){for(;n+8<=t.header.byteLength;){const i=e.getUint32(n+0,!0),o=e.getUint32(n+4,!0);switch(n+=8,o){case 1313821514:te(t,e,n,i);break;case 5130562:ee(t,e,n,i);break;case 0:r.strict||te(t,e,n,i);break;case 1:r.strict||ee(t,e,n,i)}n+=Object(U.b)(i,4)}}(t,e,n,r),n+t.header.byteLength}(t,i,n,{});default:throw new Error("Invalid GLB version ".concat(t.version,". Only supports v1 and v2."))}}function te(t,e,n,r){const i=new Uint8Array(e.buffer,n,r),o=new TextDecoder("utf8").decode(i);return t.json=JSON.parse(o),Object(U.b)(r,4)}function ee(t,e,n,r){return t.header.hasBinChunk=!0,t.binChunks.push({byteOffset:n,byteLength:r,arrayBuffer:e.buffer}),Object(U.b)(r,4)}async function ne(t,e,n=0,r,i){var o,a,s,u;!function(t,e,n,r){r.uri&&(t.baseUri=r.uri);if(e instanceof ArrayBuffer&&!Yt(e,n,r)){const t=new TextDecoder;e=t.decode(e)}if("string"==typeof e)t.json=Object(R.a)(e);else if(e instanceof ArrayBuffer){const i={};n=$t(i,e,n,r.glb),L("glTF"===i.type,"Invalid GLB magic string ".concat(i.type)),t._glb=i,t.json=i.json}else L(!1,"GLTF: must be ArrayBuffer or string");const i=t.json.buffers||[];if(t.buffers=new Array(i.length).fill(null),t._glb&&t._glb.header.hasBinChunk){const{binChunks:e}=t._glb;t.buffers[0]={arrayBuffer:e[0].arrayBuffer,byteOffset:e[0].byteOffset,byteLength:e[0].byteLength}}const o=t.json.images||[];t.images=new Array(o.length).fill({})}(t,e,n,r),function(t,e={}){(new zt).normalize(t,e)}(t,{normalize:null==r||null===(o=r.gltf)||void 0===o?void 0:o.normalize}),function(t,e={},n){const r=Lt.filter(t=>Dt(t.name,e));for(const o of r){var i;null===(i=o.preprocess)||void 0===i||i.call(o,t,e,n)}}(t,r,i);const c=[];if(null!=r&&null!==(a=r.gltf)&&void 0!==a&&a.loadBuffers&&t.json.buffers&&await async function(t,e,n){const r=t.json.buffers||[];for(let a=0;aDt(t.name,e));for(const o of r){var i;await(null===(i=o.decode)||void 0===i?void 0:i.call(o,t,e,n))}}(t,r,i);return c.push(l),await Promise.all(c),null!=r&&null!==(u=r.gltf)&&void 0!==u&&u.postProcess?function(t,e){return(new Zt).postProcess(t,e)}(t,r):t}async function re(t,e,n,r,i){const{fetch:o,parse:a}=i;let s;if(e.uri&&!e.hasOwnProperty("bufferView")){const t=D(e.uri,r),n=await o(t);s=await n.arrayBuffer()}if(Number.isFinite(e.bufferView)){const n=j(t.json,t.buffers,e.bufferView);s=Object(k.c)(n.buffer,n.byteOffset,n.byteLength)}L(s,"glTF image has no data");let u=await a(s,[B.a,I],{mimeType:e.mimeType,basis:r.basis||{format:P()}},i);u&&u[0]&&(u={compressed:!0,mipmaps:!1,width:u[0].width,height:u[0].height,data:u[0]}),t.images=t.images||[],t.images[n]=u}n.d(e,"a",(function(){return ie}));const ie={name:"glTF",id:"gltf",module:"gltf",version:"3.2.10",extensions:["gltf","glb"],mimeTypes:["model/gltf+json","model/gltf-binary"],text:!0,binary:!0,tests:["glTF"],parse:async function(t,e={},n){(e={...ie.options,...e}).gltf={...ie.options.gltf,...e.gltf};const{byteOffset:r=0}=e;return await ne({},t,r,e,n)},options:{gltf:{normalize:!0,loadBuffers:!0,loadImages:!0,decompressMeshes:!0,postProcess:!0},log:console},deprecatedOptions:{fetchImages:"gltf.loadImages",createImages:"gltf.loadImages",decompress:"gltf.decompressMeshes",postProcess:"gltf.postProcess",gltf:{decompress:"gltf.decompressMeshes"}}}},function(t,e,n){"use strict";var r=n(101),i=n(69);const{_parseImageNode:o}=globalThis,a="undefined"!=typeof Image,s="undefined"!=typeof ImageBitmap,u=Boolean(o),c=!!i.c||u;function l(t){const e=f(t);if(!e)throw new Error("Not an image");return e}function h(t){switch(l(t)){case"data":return t;case"image":case"imagebitmap":const e=document.createElement("canvas"),n=e.getContext("2d");if(!n)throw new Error("getImageData");return e.width=t.width,e.height=t.height,n.drawImage(t,0,0),n.getImageData(0,0,t.width,t.height);default:throw new Error("getImageData")}}function f(t){return"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?"imagebitmap":"undefined"!=typeof Image&&t instanceof Image?"image":t&&"object"==typeof t&&t.data&&t.width&&t.height?"data":null}const p=/^data:image\/svg\+xml/,d=/\.svg((\?|#).*)?$/;function A(t){return t&&(p.test(t)||d.test(t))}function g(t,e){if(A(e))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(t)])}async function m(t,e,n){const r=function(t,e){if(A(e)){let e=(new TextDecoder).decode(t);try{"function"==typeof unescape&&"function"==typeof encodeURIComponent&&(e=unescape(encodeURIComponent(e)))}catch(t){throw new Error(t.message)}return"data:image/svg+xml;base64,".concat(btoa(e))}return g(t,e)}(t,n),i=self.URL||self.webkitURL,o="string"!=typeof r&&i.createObjectURL(r);try{return await async function(t,e){const n=new Image;if(n.src=t,e.image&&e.image.decode&&n.decode)return await n.decode(),n;return await new Promise((e,r)=>{try{n.onload=()=>e(n),n.onerror=e=>r(new Error("Could not load image ".concat(t,": ").concat(e)))}catch(t){r(t)}})}(o||r,e)}finally{o&&i.revokeObjectURL(o)}}const y={};let v=!0;async function _(t,e,n){let r;if(A(n)){r=await m(t,e,n)}else r=g(t,n);const i=e&&e.imagebitmap;return await async function(t,e=null){!function(t){for(const e in t||y)return!1;return!0}(e)&&v||(e=null);if(e)try{return await createImageBitmap(t,e)}catch(t){console.warn(t),v=!1}return await createImageBitmap(t)}(r,i)}var b=n(173);n.d(e,"a",(function(){return x}));const x={id:"image",module:"images",name:"Images",version:"3.2.10",mimeTypes:["image/png","image/jpeg","image/gif","image/webp","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],extensions:["png","jpg","jpeg","gif","webp","bmp","ico","svg"],parse:async function(t,e,n){const i=((e=e||{}).image||{}).type||"auto",{url:o}=n||{};let u;switch(function(t){switch(t){case"auto":case"data":return function(){if(s)return"imagebitmap";if(a)return"image";if(c)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}();default:return function(t){switch(t){case"auto":return s||a||c;case"imagebitmap":return s;case"image":return a;case"data":return c;default:throw new Error("@loaders.gl/images: image ".concat(t," not supported in this environment"))}}(t),t}}(i)){case"imagebitmap":u=await _(t,e,o);break;case"image":u=await m(t,e,o);break;case"data":u=await async function(t,e){const{mimeType:n}=Object(b.a)(t)||{},i=globalThis._parseImageNode;return Object(r.a)(i),await i(t,n)}(t);break;default:Object(r.a)(!1)}return"data"===i&&(u=h(u)),u},tests:[t=>Boolean(Object(b.a)(new DataView(t)))],options:{image:{type:"auto",decode:!0}}}},function(t,e,n){"use strict";var r=n(38),i=n(52),o=n(71),a=n(8),s=n(104),u=n(10);const c={5126:w.bind(null,"uniform1fv",A,1,E),35664:w.bind(null,"uniform2fv",A,2,E),35665:w.bind(null,"uniform3fv",A,3,E),35666:w.bind(null,"uniform4fv",A,4,E),5124:w.bind(null,"uniform1iv",g,1,E),35667:w.bind(null,"uniform2iv",g,2,E),35668:w.bind(null,"uniform3iv",g,3,E),35669:w.bind(null,"uniform4iv",g,4,E),35670:w.bind(null,"uniform1iv",g,1,E),35671:w.bind(null,"uniform2iv",g,2,E),35672:w.bind(null,"uniform3iv",g,3,E),35673:w.bind(null,"uniform4iv",g,4,E),35674:w.bind(null,"uniformMatrix2fv",A,4,O),35675:w.bind(null,"uniformMatrix3fv",A,9,O),35676:w.bind(null,"uniformMatrix4fv",A,16,O),35678:x,35680:x,5125:w.bind(null,"uniform1uiv",m,1,E),36294:w.bind(null,"uniform2uiv",m,2,E),36295:w.bind(null,"uniform3uiv",m,3,E),36296:w.bind(null,"uniform4uiv",m,4,E),35685:w.bind(null,"uniformMatrix2x3fv",A,6,O),35686:w.bind(null,"uniformMatrix2x4fv",A,8,O),35687:w.bind(null,"uniformMatrix3x2fv",A,6,O),35688:w.bind(null,"uniformMatrix3x4fv",A,12,O),35689:w.bind(null,"uniformMatrix4x2fv",A,8,O),35690:w.bind(null,"uniformMatrix4x3fv",A,12,O),35678:x,35680:x,35679:x,35682:x,36289:x,36292:x,36293:x,36298:x,36299:x,36300:x,36303:x,36306:x,36307:x,36308:x,36311:x},l={},h={},f={},p=[0];function d(t,e,n,r){1===e&&"boolean"==typeof t&&(t=t?1:0),Number.isFinite(t)&&(p[0]=t,t=p);const i=t.length;if(i%e&&a.k.warn("Uniform size should be multiples of ".concat(e),t)(),t instanceof n)return t;let o=r[i];o||(o=new n(i),r[i]=o);for(let e=0;e{const i=t!==r;return i&&(e.uniform1i(n,r),t=r),i}}function w(t,e,n,r){let i=null,o=null;return(a,s,c)=>{const l=e(c,n),h=l.length;let f=!1;if(null===i)i=new Float32Array(h),o=h,f=!0;else{Object(u.a)(o===h,"Uniform length cannot change.");for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:"unnamed";const n=/#define[\s*]SHADER_NAME[\s*]([A-Za-z0-9_-]+)[\s*]/,r=t.match(n);return r?r[1]:e}function T(t,e,n,r){const i=t.split(/\r?\n/),o={},a={},s=r||S(e)||"(unnamed)",u="".concat(function(t){switch(t){case 35632:return"fragment";case 35633:return"vertex";default:return"unknown type"}}(n)," shader ").concat(s);for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:": ";const r=t.split(/\r?\n/),i=String(r.length+e-1).length;return r.map((t,r)=>{const o=String(r+e),a=o.length;return P(o,i-a)+n+t})}(e);return{shaderName:u,errors:C(o,c),warnings:C(a,c)}}function C(t,e){let n="";for(let r=0;r0&&void 0!==arguments[0]?arguments[0]:this.source;t.startsWith("#version ")||(t="#version 100\n".concat(t)),this.source=t,this.gl.shaderSource(this.handle,this.source),this.gl.compileShader(this.handle);if(!this.getParameter(35713)){const t=this.gl.getShaderInfoLog(this.handle),{shaderName:e,errors:n,warnings:r}=T(t,this.source,this.shaderType,this.id);throw a.k.error("GLSL compilation errors in ".concat(e,"\n").concat(n))(),a.k.warn("GLSL compilation warnings in ".concat(e,"\n").concat(r))(),new Error("GLSL compilation errors in ".concat(e))}}_deleteHandle(){this.gl.deleteShader(this.handle)}_getOptsFromHandle(){return{type:this.getParameter(35663),source:this.getSource()}}}class B extends I{get[Symbol.toStringTag](){return"VertexShader"}constructor(t,e){"string"==typeof e&&(e={source:e}),super(t,Object.assign({},e,{shaderType:35633}))}_createHandle(){return this.gl.createShader(35633)}}class R extends I{get[Symbol.toStringTag](){return"FragmentShader"}constructor(t,e){"string"==typeof e&&(e={source:e}),super(t,Object.assign({},e,{shaderType:35632}))}_createHandle(){return this.gl.createShader(35632)}}var k=n(61),L=n(78);class D{constructor(t){this.id=t.id,this.attributeInfos=[],this.attributeInfosByName={},this.attributeInfosByLocation=[],this.varyingInfos=[],this.varyingInfosByName={},Object.seal(this),this._readAttributesFromProgram(t),this._readVaryingsFromProgram(t)}getAttributeInfo(t){const e=Number(t);return Number.isFinite(e)?this.attributeInfosByLocation[e]:this.attributeInfosByName[t]||null}getAttributeLocation(t){const e=this.getAttributeInfo(t);return e?e.location:-1}getAttributeAccessor(t){const e=this.getAttributeInfo(t);return e?e.accessor:null}getVaryingInfo(t){const e=Number(t);return Number.isFinite(e)?this.varyingInfos[e]:this.varyingInfosByName[t]||null}getVaryingIndex(t){const e=this.getVaryingInfo();return e?e.location:-1}getVaryingAccessor(t){const e=this.getVaryingInfo();return e?e.accessor:null}_readAttributesFromProgram(t){const{gl:e}=t,n=e.getProgramParameter(t.handle,35721);for(let r=0;r=0&&this._addAttribute(a,n,i,o)}this.attributeInfos.sort((t,e)=>t.location-e.location)}_readVaryingsFromProgram(t){const{gl:e}=t;if(!Object(a.j)(e))return;const n=e.getProgramParameter(t.handle,35971);for(let r=0;rt.location-e.location)}_addAttribute(t,e,n,r){const{type:i,components:o}=Object(L.a)(n),a={type:i,size:r*o};this._inferProperties(t,e,a);const s={location:t,name:e,accessor:new k.a(a)};this.attributeInfos.push(s),this.attributeInfosByLocation[t]=s,this.attributeInfosByName[s.name]=s}_inferProperties(t,e,n){/instance/i.test(e)&&(n.divisor=1)}_addVarying(t,e,n,r){const{type:i,components:o}=Object(L.a)(n),a={location:t,name:e,accessor:new k.a({type:i,size:r*o})};this.varyingInfos.push(a),this.varyingInfosByName[a.name]=a}}var j=n(46);n.d(e,"a",(function(){return U}));const F=35981,z=["setVertexArray","setAttributes","setBuffers","unsetBuffers","use","getUniformCount","getUniformInfo","getUniformLocation","getUniformValue","getVarying","getFragDataLocation","getAttachedShaders","getAttributeCount","getAttributeLocation","getAttributeInfo"];class U extends r.a{get[Symbol.toStringTag](){return"Program"}constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(t,e),this.stubRemovedMethods("Program","v6.0",z),this._isCached=!1,this.initialize(e),Object.seal(this),this._setId(e.id)}initialize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{hash:e,vs:n,fs:r,varyings:i,bufferMode:o=F}=t;return this.hash=e||"",this.vs="string"==typeof n?new B(this.gl,{id:"".concat(t.id,"-vs"),source:n}):n,this.fs="string"==typeof r?new R(this.gl,{id:"".concat(t.id,"-fs"),source:r}):r,Object(u.a)(this.vs instanceof B),Object(u.a)(this.fs instanceof R),this.uniforms={},this._textureUniforms={},i&&i.length>0&&(Object(a.a)(this.gl),this.varyings=i,this.gl2.transformFeedbackVaryings(this.handle,i,o)),this._compileAndLink(),this._readUniformLocationsFromLinkedProgram(),this.configuration=new D(this),this.setProps(t)}delete(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._isCached?this:super.delete(t)}setProps(t){return"uniforms"in t&&this.setUniforms(t.uniforms),this}draw(t){let{logPriority:e,drawMode:n=4,vertexCount:r,offset:i=0,start:o,end:s,isIndexed:c=!1,indexType:l=5123,instanceCount:h=0,isInstanced:f=h>0,vertexArray:p=null,transformFeedback:d,framebuffer:A,parameters:g={},uniforms:m,samplers:y}=t;if((m||y)&&(a.k.deprecated("Program.draw({uniforms})","Program.setUniforms(uniforms)")(),this.setUniforms(m||{})),a.k.priority>=e){const t=A?A.id:"default",i="mode=".concat(Object(j.a)(this.gl,n)," verts=").concat(r," ")+"instances=".concat(h," indexType=").concat(Object(j.a)(this.gl,l)," ")+"isInstanced=".concat(f," isIndexed=").concat(c," ")+"Framebuffer=".concat(t);a.k.log(e,i)()}return Object(u.a)(p),this.gl.useProgram(this.handle),!(!this._areTexturesRenderable()||0===r||f&&0===h)&&(p.bindForDraw(r,h,()=>{if(void 0!==A&&(g=Object.assign({},g,{framebuffer:A})),d){const t=Object(L.c)(n);d.begin(t)}this._bindTextures(),Object(a.o)(this.gl,g,()=>{c&&f?this.gl2.drawElementsInstanced(n,r,l,i,h):c&&Object(a.j)(this.gl)&&!isNaN(o)&&!isNaN(s)?this.gl2.drawRangeElements(n,o,s,r,l,i):c?this.gl.drawElements(n,r,l,i):f?this.gl2.drawArraysInstanced(n,i,r,h):this.gl.drawArrays(n,i,r)}),d&&d.end()}),!0)}setUniforms(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a.k.priority>=2&&function(t,e,n){for(const r in t){const i=t[r];if((!n||Boolean(n[r]))&&!_(i))throw e=e?"".concat(e," "):"",console.error("".concat(e," Bad uniform ").concat(r),i),new Error("".concat(e," Bad uniform ").concat(r))}}(t,this.id,this._uniformSetters),this.gl.useProgram(this.handle);for(const e in t){const n=t[e],r=this._uniformSetters[e];if(r){let t=n,a=!1;if(t instanceof o.a&&(t=t.texture),t instanceof i.a)if(a=this.uniforms[e]!==n,a){void 0===r.textureIndex&&(r.textureIndex=this._textureIndexCounter++);const n=t,{textureIndex:i}=r;n.bind(i),t=i,this._textureUniforms[e]=n}else t=r.textureIndex;else this._textureUniforms[e]&&delete this._textureUniforms[e];(r(t)||a)&&b(this.uniforms,e,n)}}return this}_areTexturesRenderable(){let t=!0;for(const e in this._textureUniforms){const n=this._textureUniforms[e];n.update(),t=t&&n.loaded}return t}_bindTextures(){for(const t in this._textureUniforms){const e=this._uniformSetters[t].textureIndex;this._textureUniforms[t].bind(e)}}_createHandle(){return this.gl.createProgram()}_deleteHandle(){this.gl.deleteProgram(this.handle)}_getOptionsFromHandle(t){const e=this.gl.getAttachedShaders(t),n={};for(const t of e){switch(this.gl.getShaderParameter(this.handle,35663)){case 35633:n.vs=new B({handle:t});break;case 35632:n.fs=new R({handle:t})}}return n}_getParameter(t){return this.gl.getProgramParameter(this.handle,t)}_setId(t){if(!t){const t=this._getName();this.id=Object(M.c)(t)}}_getName(){let t=this.vs.getName()||this.fs.getName();return t=t.replace(/shader/i,""),t=t?"".concat(t,"-program"):"program",t}_compileAndLink(){const{gl:t}=this;if(t.attachShader(this.handle,this.vs.handle),t.attachShader(this.handle,this.fs.handle),a.k.time(4,"linkProgram for ".concat(this._getName()))(),t.linkProgram(this.handle),a.k.timeEnd(4,"linkProgram for ".concat(this._getName()))(),t.debug||a.k.level>0){if(!t.getProgramParameter(this.handle,35714))throw new Error("Error linking: ".concat(t.getProgramInfoLog(this.handle)));t.validateProgram(this.handle);if(!t.getProgramParameter(this.handle,35715))throw new Error("Error validating: ".concat(t.getProgramInfoLog(this.handle)))}}_readUniformLocationsFromLinkedProgram(){const{gl:t}=this;this._uniformSetters={},this._uniformCount=this._getParameter(35718);for(let e=0;e1)for(let e=0;e0&&void 0!==arguments[0]?arguments[0]:{};const{version:e=100,input:n,inputType:r,output:s}=t;if(!n)return 300===e?a:e>300?"#version ".concat(e,"\n").concat(o):i;const u=c(n,r);return e>=300?"#version ".concat(e," ").concat(300===e?"es":"","\nin ").concat(r," ").concat(n,";\nout vec4 ").concat(s,";\nvoid main() {\n ").concat(s," = ").concat(u,";\n}"):"varying ".concat(r," ").concat(n,";\nvoid main() {\n gl_FragColor = ").concat(u,";\n}")}function c(t,e){switch(e){case"float":return"vec4(".concat(t,", 0.0, 0.0, 1.0)");case"vec2":return"vec4(".concat(t,", 0.0, 1.0)");case"vec3":return"vec4(".concat(t,", 1.0)");case"vec4":return t;default:return Object(r.a)(!1),null}}var l=n(8),h=n(32),f=n(286),p=n(10);class d{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.gl=t,this.currentIndex=0,this.feedbackMap={},this.varyings=null,this.bindings=[],this.resources={},this._initialize(e),Object.seal(this)}setupResources(t){for(const e of this.bindings)this._setupTransformFeedback(e,t)}updateModelProps(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{varyings:e}=this;return e.length>0&&(t=Object.assign({},t,{varyings:e})),t}getDrawOptions(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=this.bindings[this.currentIndex],{sourceBuffers:n,transformFeedback:r}=e;return{attributes:Object.assign({},n,t.attributes),transformFeedback:r}}swap(){return!!this.feedbackMap&&(this.currentIndex=this._getNextIndex(),!0)}update(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._setupBuffers(t)}getBuffer(t){const{feedbackBuffers:e}=this.bindings[this.currentIndex],n=t?e[t]:null;return n?n instanceof h.a?n:n.buffer:null}getData(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{varyingName:e}=t,n=this.getBuffer(e);return n?n.getData():null}delete(){for(const t in this.resources)this.resources[t].delete()}_initialize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._setupBuffers(t),this.varyings=t.varyings||Object.keys(this.bindings[this.currentIndex].feedbackBuffers),this.varyings.length>0&&Object(p.a)(Object(l.j)(this.gl))}_getFeedbackBuffers(t){const{sourceBuffers:e={}}=t,n={};if(this.bindings[this.currentIndex]&&Object.assign(n,this.bindings[this.currentIndex].feedbackBuffers),this.feedbackMap)for(const t in this.feedbackMap){const r=this.feedbackMap[t];t in e&&(n[r]=t)}Object.assign(n,t.feedbackBuffers);for(const t in n){const r=n[t];if("string"==typeof r){const i=e[r],{byteLength:o,usage:a,accessor:s}=i;n[t]=this._createNewBuffer(t,{byteLength:o,usage:a,accessor:s})}}return n}_setupBuffers(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{sourceBuffers:e=null}=t;Object.assign(this.feedbackMap,t.feedbackMap);const n=this._getFeedbackBuffers(t);this._updateBindings({sourceBuffers:e,feedbackBuffers:n})}_setupTransformFeedback(t,e){let{model:n}=e;const{program:r}=n;t.transformFeedback=new f.a(this.gl,{program:r,buffers:t.feedbackBuffers})}_updateBindings(t){if(this.bindings[this.currentIndex]=this._updateBinding(this.bindings[this.currentIndex],t),this.feedbackMap){const{sourceBuffers:t,feedbackBuffers:e}=this._swapBuffers(this.bindings[this.currentIndex]),n=this._getNextIndex();this.bindings[n]=this._updateBinding(this.bindings[n],{sourceBuffers:t,feedbackBuffers:e})}}_updateBinding(t,e){return t?(Object.assign(t.sourceBuffers,e.sourceBuffers),Object.assign(t.feedbackBuffers,e.feedbackBuffers),t.transformFeedback&&t.transformFeedback.setBuffers(t.feedbackBuffers),t):{sourceBuffers:Object.assign({},e.sourceBuffers),feedbackBuffers:Object.assign({},e.feedbackBuffers)}}_swapBuffers(t){if(!this.feedbackMap)return null;const e=Object.assign({},t.sourceBuffers),n=Object.assign({},t.feedbackBuffers);for(const r in this.feedbackMap){const i=this.feedbackMap[r];e[r]=t.feedbackBuffers[i],n[i]=t.sourceBuffers[r],Object(p.a)(n[i]instanceof h.a)}return{sourceBuffers:e,feedbackBuffers:n}}_createNewBuffer(t,e){const n=new h.a(this.gl,e);return this.resources[t]&&this.resources[t].delete(),this.resources[t]=n,n}_getNextIndex(){return(this.currentIndex+1)%2}}var A=n(197),g=n(102),m=n(71),y=n(222);function v(t){let e=100;const n=t.match(/[^\s]+/g);if(n.length>=2&&"#version"===n[0]){const t=parseInt(n[1],10);Number.isFinite(t)&&(e=t)}return e}var _=n(183);const b={name:"transform",vs:"attribute float transform_elementID;\nvec2 transform_getPixelSizeHalf(vec2 size) {\n return vec2(1.) / (2. * size);\n}\n\nvec2 transform_getPixelIndices(vec2 texSize, vec2 pixelSizeHalf) {\n float yIndex = floor((transform_elementID / texSize[0]) + pixelSizeHalf[1]);\n float xIndex = transform_elementID - (yIndex * texSize[0]);\n return vec2(xIndex, yIndex);\n}\nvec2 transform_getTexCoord(vec2 size) {\n vec2 pixelSizeHalf = transform_getPixelSizeHalf(size);\n vec2 indices = transform_getPixelIndices(size, pixelSizeHalf);\n vec2 coord = indices / size + pixelSizeHalf;\n return coord;\n}\nvec2 transform_getPos(vec2 size) {\n vec2 texCoord = transform_getTexCoord(size);\n vec2 pos = (texCoord * (2.0, 2.0)) - (1., 1.);\n return pos;\n}\nvec4 transform_getInput(sampler2D texSampler, vec2 size) {\n vec2 texCoord = transform_getTexCoord(size);\n vec4 textureColor = texture2D(texSampler, texCoord);\n return textureColor;\n}\n",fs:null};function x(t){let{vs:e,sourceTextureMap:n,targetTextureVarying:i,targetTexture:o}=t;let a=Object.keys(n).length,u=null;const c={};let l=e,h={};if(a>0||i){const t=l.split("\n"),e=t.slice();if(t.forEach((t,o,l)=>{if(a>0){const i=function(t,e){const n={},i=function(t){return s(t,["attribute","in"])}(t);if(!i)return null;const{type:o,name:a}=i;if(a&&e[a]){const e="// ".concat(t," => Replaced by Transform with a sampler"),{samplerName:i,sizeName:s,uniformDeclerations:u}=function(t){const e="".concat("transform_uSampler_").concat(t),n="".concat("transform_uSize_").concat(t),r=" uniform sampler2D ".concat(e,";\n uniform vec2 ").concat(n,";");return{samplerName:e,sizeName:n,uniformDeclerations:r}}(a),c=function(t){switch(t){case"float":return"x";case"vec2":return"xy";case"vec3":return"xyz";case"vec4":return"xyzw";default:return Object(r.a)(!1),null}}(o),l=" ".concat(o," ").concat(a," = transform_getInput(").concat(i,", ").concat(s,").").concat(c,";\n");n[i]=a;return{updatedLine:e,inject:{"vs:#decl":u,"vs:#main-start":l},samplerTextureMap:n}}return null}(t,n);if(i){const{updatedLine:t,inject:n}=i;e[o]=t,h=Object(_.b)([h,n]),Object.assign(c,i.samplerTextureMap),a--}}i&&!u&&(u=function(t,e){const n=s(t,["varying","out"]);if(!n)return null;return n.name===e?n.type:null}(t,i))}),i){Object(p.a)(o);const t="".concat("transform_uSize_").concat(i),e={"vs:#decl":"uniform vec2 ".concat(t,";\n"),"vs:#main-start":" vec2 ".concat("transform_position"," = transform_getPos(").concat(t,");\n gl_Position = vec4(").concat("transform_position",", 0, 1.);\n")};h=Object(_.b)([h,e])}l=e.join("\n")}return{vs:l,targetTextureType:u,inject:h,samplerTextureMap:c}}const w={10241:9728,10240:9728,10242:33071,10243:33071};class E{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.gl=t,this.id=this.currentIndex=0,this._swapTexture=null,this.targetTextureVarying=null,this.targetTextureType=null,this.samplerTextureMap=null,this.bindings=[],this.resources={},this._initialize(e),Object.seal(this)}updateModelProps(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=this._processVertexShader(t);return Object.assign({},t,e)}getDrawOptions(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{sourceBuffers:e,sourceTextures:n,framebuffer:r,targetTexture:i}=this.bindings[this.currentIndex],o=Object.assign({},e,t.attributes),a=Object.assign({},t.uniforms),s=Object.assign({},t.parameters);let u=t.discard;if(this.hasSourceTextures||this.hasTargetTexture){o.transform_elementID=this.elementIDBuffer;for(const t in this.samplerTextureMap){const e=this.samplerTextureMap[t];a[t]=n[e]}this._setSourceTextureParameters();const t=function(t){let{sourceTextureMap:e,targetTextureVarying:n,targetTexture:r}=t;const i={};let o,a;n&&(({width:o,height:a}=r),i["".concat("transform_uSize_").concat(n)]=[o,a]);for(const t in e)({width:o,height:a}=e[t]),i["".concat("transform_uSize_").concat(t)]=[o,a];return i}({sourceTextureMap:n,targetTextureVarying:this.targetTextureVarying,targetTexture:i});Object.assign(a,t)}return this.hasTargetTexture&&(u=!1,s.viewport=[0,0,r.width,r.height]),{attributes:o,framebuffer:r,uniforms:a,discard:u,parameters:s}}swap(){return!!this._swapTexture&&(this.currentIndex=this._getNextIndex(),!0)}update(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._setupTextures(t)}getTargetTexture(){const{targetTexture:t}=this.bindings[this.currentIndex];return t}getData(){let{packed:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{framebuffer:e}=this.bindings[this.currentIndex],n=Object(A.c)(e);if(!t)return n;const i=n.constructor,o=function(t){switch(t){case"float":return 1;case"vec2":return 2;case"vec3":return 3;case"vec4":return 4;default:return Object(r.a)(!1),null}}(this.targetTextureType),a=new i(n.length*o/4);let s=0;for(let t=0;t0&&void 0!==arguments[0]?arguments[0]:{};const{_targetTextureVarying:e,_swapTexture:n}=t;this._swapTexture=n,this.targetTextureVarying=e,this.hasTargetTexture=e,this._setupTextures(t)}_createTargetTexture(t){const{sourceTextures:e,textureOrReference:n}=t;if(n instanceof g.a)return n;const r=e[n];return r?(this._targetRefTexName=n,this._createNewTexture(r)):null}_setupTextures(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{sourceBuffers:e,_sourceTextures:n={},_targetTexture:r}=t,i=this._createTargetTexture({sourceTextures:n,textureOrReference:r});this.hasSourceTextures=this.hasSourceTextures||n&&Object.keys(n).length>0,this._updateBindings({sourceBuffers:e,sourceTextures:n,targetTexture:i}),"elementCount"in t&&this._updateElementIDBuffer(t.elementCount)}_updateElementIDBuffer(t){if("number"!=typeof t||this.elementCount>=t)return;const e=new Float32Array(t);e.forEach((t,e,n)=>{n[e]=e}),this.elementIDBuffer?this.elementIDBuffer.setData({data:e}):this.elementIDBuffer=new h.a(this.gl,{data:e,accessor:{size:1}}),this.elementCount=t}_updateBindings(t){if(this.bindings[this.currentIndex]=this._updateBinding(this.bindings[this.currentIndex],t),this._swapTexture){const{sourceTextures:t,targetTexture:e}=this._swapTextures(this.bindings[this.currentIndex]),n=this._getNextIndex();this.bindings[n]=this._updateBinding(this.bindings[n],{sourceTextures:t,targetTexture:e})}}_updateBinding(t,e){const{sourceBuffers:n,sourceTextures:r,targetTexture:i}=e;if(t||(t={sourceBuffers:{},sourceTextures:{},targetTexture:null}),Object.assign(t.sourceTextures,r),Object.assign(t.sourceBuffers,n),i){t.targetTexture=i;const{width:e,height:n}=i,{framebuffer:r}=t;r?(r.update({attachments:{36064:i},resizeAttachments:!1}),r.resize({width:e,height:n})):t.framebuffer=new m.a(this.gl,{id:"transform-framebuffer",width:e,height:n,attachments:{36064:i}})}return t}_setSourceTextureParameters(){const t=this.currentIndex,{sourceTextures:e}=this.bindings[t];for(const t in e)e[t].setParameters(w)}_swapTextures(t){if(!this._swapTexture)return null;const e=Object.assign({},t.sourceTextures);e[this._swapTexture]=t.targetTexture;return{sourceTextures:e,targetTexture:t.sourceTextures[this._swapTexture]}}_createNewTexture(t){const e=Object(y.a)(t,{parameters:{10241:9728,10240:9728,10242:33071,10243:33071},pixelStore:{37440:!1}});return this.ownTexture&&this.ownTexture.delete(),this.ownTexture=e,e}_getNextIndex(){return(this.currentIndex+1)%2}_processVertexShader(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{sourceTextures:e,targetTexture:n}=this.bindings[this.currentIndex],{vs:r,uniforms:i,targetTextureType:o,inject:a,samplerTextureMap:s}=x({vs:t.vs,sourceTextureMap:e,targetTextureVarying:this.targetTextureVarying,targetTexture:n}),c=Object(_.b)([t.inject||{},a]);this.targetTextureType=o,this.samplerTextureMap=s;return{vs:r,fs:t._fs||u({version:v(r),input:this.targetTextureVarying,inputType:o,output:"transform_output"}),modules:this.hasSourceTextures||this.targetTextureVarying?[b].concat(t.modules||[]):t.modules,uniforms:i,inject:c}}}var O=n(45),S=n(178);n.d(e,"a",(function(){return T}));class T{static isSupported(t){return Object(l.j)(t)}constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.gl=t,this.model=null,this.elementCount=0,this.bufferTransform=null,this.textureTransform=null,this.elementIDBuffer=null,this._initialize(e),Object.seal(this)}delete(){const{model:t,bufferTransform:e,textureTransform:n}=this;t&&t.delete(),e&&e.delete(),n&&n.delete()}run(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{clearRenderTarget:e=!0}=t,n=this._updateDrawOptions(t);e&&n.framebuffer&&n.framebuffer.clear({color:!0}),this.model.transform(n)}swap(){let t=!1;const e=[this.bufferTransform,this.textureTransform].filter(Boolean);for(const n of e)t=t||n.swap();Object(p.a)(t,"Nothing to swap")}getBuffer(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return this.bufferTransform&&this.bufferTransform.getBuffer(t)}getData(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=[this.bufferTransform,this.textureTransform].filter(Boolean);for(const n of e){const e=n.getData(t);if(e)return e}return null}getFramebuffer(){return this.textureTransform&&this.textureTransform.getFramebuffer()}update(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};"elementCount"in t&&this.model.setVertexCount(t.elementCount);const e=[this.bufferTransform,this.textureTransform].filter(Boolean);for(const n of e)n.update(t)}_initialize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{gl:e}=this;this._buildResourceTransforms(e,t),t=this._updateModelProps(t),this.model=new S.a(e,Object.assign({},t,{fs:t.fs||u({version:v(t.vs)}),id:t.id||"transform-model",drawMode:t.drawMode||0,vertexCount:t.elementCount})),this.bufferTransform&&this.bufferTransform.setupResources({model:this.model})}_updateModelProps(t){let e=Object.assign({},t);const n=[this.bufferTransform,this.textureTransform].filter(Boolean);for(const t of n)e=t.updateModelProps(e);return e}_buildResourceTransforms(t,e){(function(t){if(!Object(O.a)(t.feedbackBuffers)||!Object(O.a)(t.feedbackMap)||t.varyings&&t.varyings.length>0)return!0;return!1})(e)&&(this.bufferTransform=new d(t,e)),function(t){if(!Object(O.a)(t._sourceTextures)||t._targetTexture||t._targetTextureVarying)return!0;return!1}(e)&&(this.textureTransform=new E(t,e)),Object(p.a)(this.bufferTransform||this.textureTransform,"must provide source/feedback buffers or source/target textures")}_updateDrawOptions(t){let e=Object.assign({},t);const n=[this.bufferTransform,this.textureTransform].filter(Boolean);for(const t of n)e=Object.assign(e,t.getDrawOptions(e));return e}}},function(t,e,n){"use strict";var r=n(115),i=n(22),o=n(114),a=n(13),s=n(24),u=n(53);let c;class l extends o.a{static get ZERO(){return c||(c=new l(0,0,0,0),Object.freeze(c)),c}constructor(t=0,e=0,n=0,r=0){super(-0,-0,-0,-0),Object(a.f)(t)&&1===arguments.length?this.copy(t):(a.b.debug&&(Object(i.a)(t),Object(i.a)(e),Object(i.a)(n),Object(i.a)(r)),this[0]=t,this[1]=e,this[2]=n,this[3]=r)}set(t,e,n,r){return this[0]=t,this[1]=e,this[2]=n,this[3]=r,this.check()}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this.check()}fromObject(t){return a.b.debug&&(Object(i.a)(t.x),Object(i.a)(t.y),Object(i.a)(t.z),Object(i.a)(t.w)),this[0]=t.x,this[1]=t.y,this[2]=t.z,this[3]=t.w,this}toObject(t){return t.x=this[0],t.y=this[1],t.z=this[2],t.w=this[3],t}get ELEMENTS(){return 4}get z(){return this[2]}set z(t){this[2]=Object(i.a)(t)}get w(){return this[3]}set w(t){this[3]=Object(i.a)(t)}transform(t){return s.p(this,this,t),this.check()}transformByMatrix3(t){return Object(u.e)(this,this,t),this.check()}transformByMatrix2(t){return Object(u.d)(this,this,t),this.check()}transformByQuaternion(t){return s.q(this,this,t),this.check()}applyMatrix4(t){return t.transform(this,this),this}}var h=n(11),f=n(54),p=n(35);function d(){var t=new h.a(4);return h.a!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function A(t,e,n){n*=.5;var r=Math.sin(n);return t[0]=r*e[0],t[1]=r*e[1],t[2]=r*e[2],t[3]=Math.cos(n),t}function g(t,e,n){var r=e[0],i=e[1],o=e[2],a=e[3],s=n[0],u=n[1],c=n[2],l=n[3];return t[0]=r*l+a*s+i*c-o*u,t[1]=i*l+a*u+o*s-r*c,t[2]=o*l+a*c+r*u-i*s,t[3]=a*l-r*s-i*u-o*c,t}function m(t,e,n,r){var i,o,a,s,u,c=e[0],l=e[1],f=e[2],p=e[3],d=n[0],A=n[1],g=n[2],m=n[3];return(o=c*d+l*A+f*g+p*m)<0&&(o=-o,d=-d,A=-A,g=-g,m=-m),1-o>h.b?(i=Math.acos(o),a=Math.sin(i),s=Math.sin((1-r)*i)/a,u=Math.sin(r*i)/a):(s=1-r,u=r),t[0]=s*c+u*d,t[1]=s*l+u*A,t[2]=s*f+u*g,t[3]=s*p+u*m,t}function y(t,e){var n,r=e[0]+e[4]+e[8];if(r>0)n=Math.sqrt(r+1),t[3]=.5*n,n=.5/n,t[0]=(e[5]-e[7])*n,t[1]=(e[6]-e[2])*n,t[2]=(e[1]-e[3])*n;else{var i=0;e[4]>e[0]&&(i=1),e[8]>e[3*i+i]&&(i=2);var o=(i+1)%3,a=(i+2)%3;n=Math.sqrt(e[3*i+i]-e[3*o+o]-e[3*a+a]+1),t[i]=.5*n,n=.5/n,t[3]=(e[3*o+a]-e[3*a+o])*n,t[o]=(e[3*o+i]+e[3*i+o])*n,t[a]=(e[3*a+i]+e[3*i+a])*n}return t}p.b,p.g,p.c,p.l;var v,_,b,x,w,E,O=p.a,S=p.k,T=p.d,C=p.i,P=p.h,M=p.m,I=p.j,B=(p.f,p.e,v=s.c(),_=s.f(1,0,0),b=s.f(0,1,0),function(t,e,n){var r=s.e(e,n);return r<-.999999?(s.d(v,_,e),s.g(v)<1e-6&&s.d(v,b,e),s.k(v,v),A(t,v,Math.PI),t):r>.999999?(t[0]=0,t[1]=0,t[2]=0,t[3]=1,t):(s.d(v,e,n),t[0]=v[0],t[1]=v[1],t[2]=v[2],t[3]=1+r,I(t,t))});x=d(),w=d(),E=f.a();n.d(e,"a",(function(){return k}));const R=[0,0,0,1];class k extends r.a{constructor(t=0,e=0,n=0,r=1){super(-0,-0,-0,-0),Array.isArray(t)&&1===arguments.length?this.copy(t):this.set(t,e,n,r)}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this.check()}set(t,e,n,r){return this[0]=t,this[1]=e,this[2]=n,this[3]=r,this.check()}fromObject(t){return this[0]=t.x,this[1]=t.y,this[2]=t.z,this[3]=t.w,this.check()}fromMatrix3(t){return y(this,t),this.check()}fromAxisRotation(t,e){return A(this,t,e),this.check()}identity(){var t;return(t=this)[0]=0,t[1]=0,t[2]=0,t[3]=1,this.check()}setAxisAngle(t,e){return this.fromAxisRotation(t,e)}get ELEMENTS(){return 4}get x(){return this[0]}set x(t){this[0]=Object(i.a)(t)}get y(){return this[1]}set y(t){this[1]=Object(i.a)(t)}get z(){return this[2]}set z(t){this[2]=Object(i.a)(t)}get w(){return this[3]}set w(t){this[3]=Object(i.a)(t)}len(){return P(this)}lengthSquared(){return M(this)}dot(t){return T(this,t)}rotationTo(t,e){return B(this,t,e),this.check()}add(t){return O(this,this,t),this.check()}calculateW(){var t,e,n,r,i;return t=this,n=(e=this)[0],r=e[1],i=e[2],t[0]=n,t[1]=r,t[2]=i,t[3]=Math.sqrt(Math.abs(1-n*n-r*r-i*i)),this.check()}conjugate(){var t,e;return e=this,(t=this)[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=e[3],this.check()}invert(){var t,e,n,r,i,o,a,s;return t=this,n=(e=this)[0],r=e[1],i=e[2],o=e[3],s=(a=n*n+r*r+i*i+o*o)?1/a:0,t[0]=-n*s,t[1]=-r*s,t[2]=-i*s,t[3]=o*s,this.check()}lerp(t,e,n){return void 0===n?this.lerp(this,t,e):(C(this,t,e,n),this.check())}multiplyRight(t){return g(this,this,t),this.check()}multiplyLeft(t){return g(this,t,this),this.check()}normalize(){const t=this.len(),e=t>0?1/t:0;return this[0]=this[0]*e,this[1]=this[1]*e,this[2]=this[2]*e,this[3]=this[3]*e,0===t&&(this[3]=1),this.check()}rotateX(t){return function(t,e,n){n*=.5;var r=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(n),u=Math.cos(n);t[0]=r*u+a*s,t[1]=i*u+o*s,t[2]=o*u-i*s,t[3]=a*u-r*s}(this,this,t),this.check()}rotateY(t){return function(t,e,n){n*=.5;var r=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(n),u=Math.cos(n);t[0]=r*u-o*s,t[1]=i*u+a*s,t[2]=o*u+r*s,t[3]=a*u-i*s}(this,this,t),this.check()}rotateZ(t){return function(t,e,n){n*=.5;var r=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(n),u=Math.cos(n);t[0]=r*u+i*s,t[1]=i*u-r*s,t[2]=o*u+a*s,t[3]=a*u-o*s}(this,this,t),this.check()}scale(t){return S(this,this,t),this.check()}slerp(t,e,n){let r,i,o;switch(arguments.length){case 1:({start:r=R,target:i,ratio:o}=t);break;case 2:r=this,i=t,o=e;break;default:r=t,i=e,o=n}return m(this,r,i,o),this.check()}transformVector4(t,e=new l){return p.o(e,t,this),Object(i.b)(e,4)}lengthSq(){return this.lengthSquared()}setFromAxisAngle(t,e){return this.setAxisAngle(t,e)}premultiply(t){return this.multiplyLeft(t)}multiply(t){return this.multiplyRight(t)}}},function(t,e,n){"use strict";var r=n(138);n.d(e,"a",(function(){return i}));const i={name:"pbr",vs:"uniform mat4 u_MVPMatrix;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_NormalMatrix;\n\nvarying vec3 pbr_vPosition;\nvarying vec2 pbr_vUV;\n\n#ifdef HAS_NORMALS\n# ifdef HAS_TANGENTS\nvarying mat3 pbr_vTBN;\n# else\nvarying vec3 pbr_vNormal;\n# endif\n#endif\n\nvoid pbr_setPositionNormalTangentUV(vec4 position, vec4 normal, vec4 tangent, vec2 uv)\n{\n vec4 pos = u_ModelMatrix * position;\n pbr_vPosition = vec3(pos.xyz) / pos.w;\n\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\n vec3 normalW = normalize(vec3(u_NormalMatrix * vec4(normal.xyz, 0.0)));\n vec3 tangentW = normalize(vec3(u_ModelMatrix * vec4(tangent.xyz, 0.0)));\n vec3 bitangentW = cross(normalW, tangentW) * tangent.w;\n pbr_vTBN = mat3(tangentW, bitangentW, normalW);\n#else\n pbr_vNormal = normalize(vec3(u_ModelMatrix * vec4(normal.xyz, 0.0)));\n#endif\n#endif\n\n#ifdef HAS_UV\n pbr_vUV = uv;\n#else\n pbr_vUV = vec2(0.,0.);\n#endif\n}\n",fs:"#if defined(USE_TEX_LOD) && !defined(FEATURE_GLSL_TEXTURE_LOD)\n# error PBR fragment shader: Texture LOD is not available\n#endif\n\n#if !defined(HAS_TANGENTS) && !defined(FEATURE_GLSL_DERIVATIVES)\n# error PBR fragment shader: Derivatives are not available\n#endif\n\n\n#if (__VERSION__ < 300)\n #define SMART_FOR(INIT, WEBGL1COND, WEBGL2COND, INCR) for (INIT; WEBGL1COND; INCR)\n#else\n #define SMART_FOR(INIT, WEBGL1COND, WEBGL2COND, INCR) for (INIT; WEBGL2COND; INCR)\n#endif\n\nprecision highp float;\n\nuniform bool pbr_uUnlit;\n\n#ifdef USE_IBL\nuniform samplerCube u_DiffuseEnvSampler;\nuniform samplerCube u_SpecularEnvSampler;\nuniform sampler2D u_brdfLUT;\nuniform vec2 u_ScaleIBLAmbient;\n#endif\n\n#ifdef HAS_BASECOLORMAP\nuniform sampler2D u_BaseColorSampler;\n#endif\n#ifdef HAS_NORMALMAP\nuniform sampler2D u_NormalSampler;\nuniform float u_NormalScale;\n#endif\n#ifdef HAS_EMISSIVEMAP\nuniform sampler2D u_EmissiveSampler;\nuniform vec3 u_EmissiveFactor;\n#endif\n#ifdef HAS_METALROUGHNESSMAP\nuniform sampler2D u_MetallicRoughnessSampler;\n#endif\n#ifdef HAS_OCCLUSIONMAP\nuniform sampler2D u_OcclusionSampler;\nuniform float u_OcclusionStrength;\n#endif\n\n#ifdef ALPHA_CUTOFF\nuniform float u_AlphaCutoff;\n#endif\n\nuniform vec2 u_MetallicRoughnessValues;\nuniform vec4 u_BaseColorFactor;\n\nuniform vec3 u_Camera;\n#ifdef PBR_DEBUG\nuniform vec4 u_ScaleDiffBaseMR;\nuniform vec4 u_ScaleFGDSpec;\n#endif\n\nvarying vec3 pbr_vPosition;\n\nvarying vec2 pbr_vUV;\n\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\nvarying mat3 pbr_vTBN;\n#else\nvarying vec3 pbr_vNormal;\n#endif\n#endif\n\n\nstruct PBRInfo\n{\n float NdotL;\n float NdotV;\n float NdotH;\n float LdotH;\n float VdotH;\n float perceptualRoughness;\n float metalness;\n vec3 reflectance0;\n vec3 reflectance90;\n float alphaRoughness;\n vec3 diffuseColor;\n vec3 specularColor;\n vec3 n;\n vec3 v;\n};\n\nconst float M_PI = 3.141592653589793;\nconst float c_MinRoughness = 0.04;\n\nvec4 SRGBtoLINEAR(vec4 srgbIn)\n{\n#ifdef MANUAL_SRGB\n#ifdef SRGB_FAST_APPROXIMATION\n vec3 linOut = pow(srgbIn.xyz,vec3(2.2));\n#else\n vec3 bLess = step(vec3(0.04045),srgbIn.xyz);\n vec3 linOut = mix( srgbIn.xyz/vec3(12.92), pow((srgbIn.xyz+vec3(0.055))/vec3(1.055),vec3(2.4)), bLess );\n#endif\n return vec4(linOut,srgbIn.w);;\n#else\n return srgbIn;\n#endif\n}\n\nvec3 getNormal()\n{\n#ifndef HAS_TANGENTS\n vec3 pos_dx = dFdx(pbr_vPosition);\n vec3 pos_dy = dFdy(pbr_vPosition);\n vec3 tex_dx = dFdx(vec3(pbr_vUV, 0.0));\n vec3 tex_dy = dFdy(vec3(pbr_vUV, 0.0));\n vec3 t = (tex_dy.t * pos_dx - tex_dx.t * pos_dy) / (tex_dx.s * tex_dy.t - tex_dy.s * tex_dx.t);\n\n#ifdef HAS_NORMALS\n vec3 ng = normalize(pbr_vNormal);\n#else\n vec3 ng = cross(pos_dx, pos_dy);\n#endif\n\n t = normalize(t - ng * dot(ng, t));\n vec3 b = normalize(cross(ng, t));\n mat3 tbn = mat3(t, b, ng);\n#else\n mat3 tbn = pbr_vTBN;\n#endif\n\n#ifdef HAS_NORMALMAP\n vec3 n = texture2D(u_NormalSampler, pbr_vUV).rgb;\n n = normalize(tbn * ((2.0 * n - 1.0) * vec3(u_NormalScale, u_NormalScale, 1.0)));\n#else\n vec3 n = normalize(tbn[2].xyz);\n#endif\n\n return n;\n}\n\n\n#ifdef USE_IBL\nvec3 getIBLContribution(PBRInfo pbrInputs, vec3 n, vec3 reflection)\n{\n float mipCount = 9.0;\n float lod = (pbrInputs.perceptualRoughness * mipCount);\n vec3 brdf = SRGBtoLINEAR(texture2D(u_brdfLUT,\n vec2(pbrInputs.NdotV, 1.0 - pbrInputs.perceptualRoughness))).rgb;\n vec3 diffuseLight = SRGBtoLINEAR(textureCube(u_DiffuseEnvSampler, n)).rgb;\n\n#ifdef USE_TEX_LOD\n vec3 specularLight = SRGBtoLINEAR(textureCubeLod(u_SpecularEnvSampler, reflection, lod)).rgb;\n#else\n vec3 specularLight = SRGBtoLINEAR(textureCube(u_SpecularEnvSampler, reflection)).rgb;\n#endif\n\n vec3 diffuse = diffuseLight * pbrInputs.diffuseColor;\n vec3 specular = specularLight * (pbrInputs.specularColor * brdf.x + brdf.y);\n diffuse *= u_ScaleIBLAmbient.x;\n specular *= u_ScaleIBLAmbient.y;\n\n return diffuse + specular;\n}\n#endif\n\n\nvec3 diffuse(PBRInfo pbrInputs)\n{\n return pbrInputs.diffuseColor / M_PI;\n}\n\nvec3 specularReflection(PBRInfo pbrInputs)\n{\n return pbrInputs.reflectance0 +\n (pbrInputs.reflectance90 - pbrInputs.reflectance0) *\n pow(clamp(1.0 - pbrInputs.VdotH, 0.0, 1.0), 5.0);\n}\n\n\n\nfloat geometricOcclusion(PBRInfo pbrInputs)\n{\n float NdotL = pbrInputs.NdotL;\n float NdotV = pbrInputs.NdotV;\n float r = pbrInputs.alphaRoughness;\n\n float attenuationL = 2.0 * NdotL / (NdotL + sqrt(r * r + (1.0 - r * r) * (NdotL * NdotL)));\n float attenuationV = 2.0 * NdotV / (NdotV + sqrt(r * r + (1.0 - r * r) * (NdotV * NdotV)));\n return attenuationL * attenuationV;\n}\n\n\n\n\n\nfloat microfacetDistribution(PBRInfo pbrInputs)\n{\n float roughnessSq = pbrInputs.alphaRoughness * pbrInputs.alphaRoughness;\n float f = (pbrInputs.NdotH * roughnessSq - pbrInputs.NdotH) * pbrInputs.NdotH + 1.0;\n return roughnessSq / (M_PI * f * f);\n}\n\nvoid PBRInfo_setAmbientLight(inout PBRInfo pbrInputs) {\n pbrInputs.NdotL = 1.0;\n pbrInputs.NdotH = 0.0;\n pbrInputs.LdotH = 0.0;\n pbrInputs.VdotH = 1.0;\n}\n\nvoid PBRInfo_setDirectionalLight(inout PBRInfo pbrInputs, vec3 lightDirection) {\n vec3 n = pbrInputs.n;\n vec3 v = pbrInputs.v;\n vec3 l = normalize(lightDirection);\n vec3 h = normalize(l+v);\n\n pbrInputs.NdotL = clamp(dot(n, l), 0.001, 1.0);\n pbrInputs.NdotH = clamp(dot(n, h), 0.0, 1.0);\n pbrInputs.LdotH = clamp(dot(l, h), 0.0, 1.0);\n pbrInputs.VdotH = clamp(dot(v, h), 0.0, 1.0);\n}\n\nvoid PBRInfo_setPointLight(inout PBRInfo pbrInputs, PointLight pointLight) {\n vec3 light_direction = normalize(pointLight.position - pbr_vPosition);\n PBRInfo_setDirectionalLight(pbrInputs, light_direction);\n}\n\nvec3 calculateFinalColor(PBRInfo pbrInputs, vec3 lightColor) {\n vec3 F = specularReflection(pbrInputs);\n float G = geometricOcclusion(pbrInputs);\n float D = microfacetDistribution(pbrInputs);\n vec3 diffuseContrib = (1.0 - F) * diffuse(pbrInputs);\n vec3 specContrib = F * G * D / (4.0 * pbrInputs.NdotL * pbrInputs.NdotV);\n return pbrInputs.NdotL * lightColor * (diffuseContrib + specContrib);\n}\n\nvec4 pbr_filterColor(vec4 colorUnused)\n{\n#ifdef HAS_BASECOLORMAP\n vec4 baseColor = SRGBtoLINEAR(texture2D(u_BaseColorSampler, pbr_vUV)) * u_BaseColorFactor;\n#else\n vec4 baseColor = u_BaseColorFactor;\n#endif\n\n#ifdef ALPHA_CUTOFF\n if (baseColor.a < u_AlphaCutoff) {\n discard;\n }\n#endif\n\n vec3 color = vec3(0, 0, 0);\n\n if(pbr_uUnlit){\n color.rgb = baseColor.rgb;\n }\n else{\n\n\n float perceptualRoughness = u_MetallicRoughnessValues.y;\n float metallic = u_MetallicRoughnessValues.x;\n#ifdef HAS_METALROUGHNESSMAP\n\n vec4 mrSample = texture2D(u_MetallicRoughnessSampler, pbr_vUV);\n perceptualRoughness = mrSample.g * perceptualRoughness;\n metallic = mrSample.b * metallic;\n#endif\n perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0);\n metallic = clamp(metallic, 0.0, 1.0);\n\n float alphaRoughness = perceptualRoughness * perceptualRoughness;\n\n vec3 f0 = vec3(0.04);\n vec3 diffuseColor = baseColor.rgb * (vec3(1.0) - f0);\n diffuseColor *= 1.0 - metallic;\n vec3 specularColor = mix(f0, baseColor.rgb, metallic);\n float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n\n\n\n float reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);\n vec3 specularEnvironmentR0 = specularColor.rgb;\n vec3 specularEnvironmentR90 = vec3(1.0, 1.0, 1.0) * reflectance90;\n\n vec3 n = getNormal();\n vec3 v = normalize(u_Camera - pbr_vPosition);\n\n float NdotV = clamp(abs(dot(n, v)), 0.001, 1.0);\n vec3 reflection = -normalize(reflect(v, n));\n\n PBRInfo pbrInputs = PBRInfo(\n 0.0,\n NdotV,\n 0.0,\n 0.0,\n 0.0,\n perceptualRoughness,\n metallic,\n specularEnvironmentR0,\n specularEnvironmentR90,\n alphaRoughness,\n diffuseColor,\n specularColor,\n n,\n v\n );\n\n#ifdef USE_LIGHTS\n PBRInfo_setAmbientLight(pbrInputs);\n color += calculateFinalColor(pbrInputs, lighting_uAmbientLight.color);\n SMART_FOR(int i = 0, i < MAX_LIGHTS, i < lighting_uDirectionalLightCount, i++) {\n if (i < lighting_uDirectionalLightCount) {\n PBRInfo_setDirectionalLight(pbrInputs, lighting_uDirectionalLight[i].direction);\n color += calculateFinalColor(pbrInputs, lighting_uDirectionalLight[i].color);\n }\n }\n SMART_FOR(int i = 0, i < MAX_LIGHTS, i < lighting_uPointLightCount, i++) {\n if (i < lighting_uPointLightCount) {\n PBRInfo_setPointLight(pbrInputs, lighting_uPointLight[i]);\n float attenuation = getPointLightAttenuation(lighting_uPointLight[i], distance(lighting_uPointLight[i].position, pbr_vPosition));\n color += calculateFinalColor(pbrInputs, lighting_uPointLight[i].color / attenuation);\n }\n }\n#endif\n#ifdef USE_IBL\n color += getIBLContribution(pbrInputs, n, reflection);\n#endif\n#ifdef HAS_OCCLUSIONMAP\n float ao = texture2D(u_OcclusionSampler, pbr_vUV).r;\n color = mix(color, color * ao, u_OcclusionStrength);\n#endif\n\n#ifdef HAS_EMISSIVEMAP\n vec3 emissive = SRGBtoLINEAR(texture2D(u_EmissiveSampler, pbr_vUV)).rgb * u_EmissiveFactor;\n color += emissive;\n#endif\n\n#ifdef PBR_DEBUG\n\n\n\n\n\n color = mix(color, baseColor.rgb, u_ScaleDiffBaseMR.y);\n color = mix(color, vec3(metallic), u_ScaleDiffBaseMR.z);\n color = mix(color, vec3(perceptualRoughness), u_ScaleDiffBaseMR.w);\n#endif\n\n }\n\n return vec4(pow(color,vec3(1.0/2.2)), baseColor.a);\n}\n",defines:{LIGHTING_FRAGMENT:1},dependencies:[r.a]}}])})); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/Ball-101/share/jupyter/nbextensions/pydeck/index.js.map b/Ball-101/share/jupyter/nbextensions/pydeck/index.js.map deleted file mode 100755 index 5a7619e3..00000000 --- a/Ball-101/share/jupyter/nbextensions/pydeck/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/defineProperty.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/createClass.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/inherits.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/get.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/utils/log.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/utils/assert.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/utils/webgl-checks.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/polyfill/polyfill-vertex-array-object.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/polyfill/get-parameter-polyfill.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/polyfill/polyfill-table.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/polyfill/polyfill-context.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/state-tracker/webgl-parameter-tables.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/utils/utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/state-tracker/track-context-state.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/state-tracker/unified-parameter-api.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/utils/device-pixels.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/context/context.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/gltools/dist/esm/index.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/utils/assert.js","webpack:////home/jesus/code/deck.gl/node_modules/gl-matrix/esm/common.js","webpack:///../core/src/lib/constants.ts","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/lib/common.js","webpack:///../core/node_modules/gl-matrix/esm/common.js","webpack:///../core/src/effects/lighting/point-light.ts","webpack:///../core/src/effects/lighting/camera-light.ts","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/sun/dist/esm/suncalc.js","webpack:///../core/src/effects/lighting/sun-light.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/utils/clip-space.js","webpack:///../core/src/passes/screen-pass.ts","webpack:///../core/src/effects/post-process-effect.ts","webpack:///../core/src/viewports/orbit-viewport.ts","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/classes/spherical-coordinates.js","webpack:///../core/src/viewports/first-person-viewport.ts","webpack:///../core/src/controllers/first-person-controller.ts","webpack:///../core/src/views/first-person-view.ts","webpack:///../core/src/views/orbit-view.ts","webpack:///../core/src/controllers/globe-controller.ts","webpack:///../core/src/views/globe-view.ts","webpack:///../core/src/transitions/fly-to-interpolator.ts","webpack:///../core/src/index.ts","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/math-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/assert.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/web-mercator-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/fit-bounds.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/get-bounds.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/normalize-viewport-props.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/fly-to-viewport.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/index.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/path-utils/path.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/index.js","webpack:///../core/src/utils/log.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/javascript-utils/is-type.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/lib/validators.js","webpack:///../core/src/lifecycle/constants.ts","webpack:////home/jesus/code/deck.gl/node_modules/gl-matrix/esm/vec3.js","webpack:////home/jesus/code/deck.gl/node_modules/gl-matrix/esm/mat4.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/typeof.js","webpack:///../core/src/utils/assert.ts","webpack:////home/jesus/code/deck.gl/node_modules/prop-types/index.js","webpack:///../core/src/debug/index.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/buffer.js","webpack:////home/jesus/code/deck.gl/node_modules/gl-matrix/esm/vec2.js","webpack:///../core/src/utils/math-utils.ts","webpack:////home/jesus/code/deck.gl/node_modules/gl-matrix/esm/vec4.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/polygon/dist/esm/polygon-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/polygon/dist/esm/earcut.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/polygon/dist/esm/utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/polygon/dist/esm/lineclip.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/polygon/dist/esm/cut-by-grid.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/polygon/dist/esm/cut-by-mercator-bounds.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/polygon/dist/esm/index.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/resource.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/regenerator/index.js","webpack:///./src/deck-bundle.js","webpack:///../core/src/viewports/viewport.ts","webpack:///../core/src/utils/array-utils.ts","webpack:///../core/src/lib/attribute/attribute-transition-utils.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/loader-utils/normalize-loader.js","webpack:////home/jesus/code/deck.gl/node_modules/probe.gl/dist/esm/utils/globals.js","webpack:////home/jesus/code/deck.gl/node_modules/probe.gl/dist/esm/utils/local-storage.js","webpack:////home/jesus/code/deck.gl/node_modules/probe.gl/dist/esm/utils/formatters.js","webpack:////home/jesus/code/deck.gl/node_modules/probe.gl/dist/esm/utils/color.js","webpack:////home/jesus/code/deck.gl/node_modules/probe.gl/dist/esm/utils/assert.js","webpack:////home/jesus/code/deck.gl/node_modules/probe.gl/dist/esm/utils/hi-res-timestamp.js","webpack:////home/jesus/code/deck.gl/node_modules/probe.gl/dist/esm/lib/log.js","webpack:////home/jesus/code/deck.gl/node_modules/probe.gl/dist/esm/utils/autobind.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/loader-utils/loggers.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/loader-utils/option-defaults.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/loader-utils/option-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/utils/utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/webgl-utils/constants-to-keys.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/env-utils/globals.js","webpack:///../core/src/transitions/linear-interpolator.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/env-utils/assert.js","webpack:///../core/src/utils/iterable-utils.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/webgl-utils/typed-array-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/texture.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/lib/gl-matrix-extras.js","webpack:////home/jesus/code/deck.gl/node_modules/gl-matrix/esm/mat3.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/fetch/read-array-buffer.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/fetch/read-file.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/fetch/write-file.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/api/parse-sync.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/api/parse-in-batches.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/api/load-in-batches.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/worker-api/process-on-worker.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/api/encode.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/api/save.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/iterators/make-stream/make-dom-stream.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/null-loader.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/progress/fetch-progress.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/filesystems/browser-filesystem.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/index.js","webpack:///../core/src/controllers/controller.ts","webpack:///../core/src/utils/positions.ts","webpack:///../core/src/views/view.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/geometry/geometry.js","webpack:///../core/src/utils/deep-equal.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/utils/mime-type-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/utils/resource-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/accessor.js","webpack:///../layers/src/solid-polygon-layer/polygon.ts","webpack:////home/jesus/code/deck.gl/node_modules/node-libs-browser/node_modules/process/browser.js","webpack:///../layers/src/bitmap-layer/create-mesh.ts","webpack:///../layers/src/bitmap-layer/bitmap-layer-vertex.ts","webpack:///../layers/src/bitmap-layer/bitmap-layer-fragment.ts","webpack:///../layers/src/bitmap-layer/bitmap-layer.ts","webpack:///../layers/src/index.ts","webpack:///../core/src/utils/flatten.ts","webpack:///../core/src/utils/typed-array-manager.ts","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///../core/node_modules/gl-matrix/esm/mat4.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/env-utils/globals.js","webpack:///../core/src/passes/layers-pass.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/framebuffer.js","webpack:///../core/src/transitions/transition.ts","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/stats/dist/esm/lib/stat.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/stats/dist/esm/lib/stats.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/stats/dist/esm/index.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/lib/constants.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/classes/matrix4.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/utils/log.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/api/select-loader.js","webpack:///../core/src/utils/memoize.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/webgl-utils/attribute-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/texture-formats.js","webpack:///../core/node_modules/gl-matrix/esm/vec3.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/classes/vector3.js","webpack:///(webpack)/buildin/global.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/binary-utils/array-buffer-utils.js","webpack:///../core/src/viewports/web-mercator-viewport.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/utils/row-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/utils/async-queue.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/batches/base-table-batch-aggregator.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/batches/row-table-batch-aggregator.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/batches/columnar-table-batch-aggregator.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/batches/table-batch-builder.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/csv/dist/esm/papaparse/papaparse.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/csv/dist/esm/papaparse/async-iterator-streamer.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/csv/dist/esm/csv-loader.js","webpack:///./src/playground/widget-tooltip.js","webpack:///./src/playground/utils/script-utils.js","webpack:///./src/lib/components/component-css.js","webpack:///./src/lib/components/description-card.js","webpack:///./src/playground/create-deck.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/constants/dist/esm/index.js","webpack:///./src/playground/utils/google-maps-utils.js","webpack:///./src/lib/components/add-support-components.js","webpack:///../core/node_modules/gl-matrix/esm/vec4.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/loader-utils/loader-context.js","webpack:///../core/node_modules/gl-matrix/esm/vec2.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/env/dist/esm/lib/globals.js","webpack:////home/jesus/code/deck.gl/node_modules/probe.gl/dist/esm/env/globals.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/path-utils/file-aliases.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/binary-utils/buffer-utils.js","webpack:///../core/src/effects/lighting/directional-light.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/fetch/fetch-file.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/fp32/fp32.js","webpack:///../core/src/shaderlib/misc/geometry.ts","webpack:///../core/src/shaderlib/project/project.glsl.ts","webpack:///../core/src/shaderlib/project/project.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/api/parse.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/worker-api/validate-worker-version.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/env-utils/assert.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/utils/load-file.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/texture-2d.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/utils/response-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/renderbuffer-formats.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/renderbuffer.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/utils/globals.js","webpack:////home/jesus/code/deck.gl/node_modules/react-map-gl/dist/esm/utils/globals.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/api/register-loaders.js","webpack:///../core/src/controllers/map-controller.ts","webpack:///../core/src/transitions/transition-interpolator.ts","webpack:///../core/src/controllers/orbit-controller.ts","webpack:///../layers/src/solid-polygon-layer/polygon-tesselator.ts","webpack:///../layers/src/solid-polygon-layer/solid-polygon-layer-vertex-main.glsl.ts","webpack:///../layers/src/solid-polygon-layer/solid-polygon-layer-vertex-top.glsl.ts","webpack:///../layers/src/solid-polygon-layer/solid-polygon-layer-vertex-side.glsl.ts","webpack:///../layers/src/solid-polygon-layer/solid-polygon-layer.ts","webpack:///../layers/src/solid-polygon-layer/solid-polygon-layer-fragment.glsl.ts","webpack:///../layers/src/path-layer/path-tesselator.ts","webpack:///../layers/src/path-layer/path.ts","webpack:///../layers/src/path-layer/path-layer.ts","webpack:///../layers/src/path-layer/path-layer-vertex.glsl.ts","webpack:///../layers/src/path-layer/path-layer-fragment.glsl.ts","webpack:///../layers/src/icon-layer/icon-manager.ts","webpack:///../layers/src/icon-layer/icon-layer.ts","webpack:///../layers/src/icon-layer/icon-layer-vertex.glsl.ts","webpack:///../layers/src/icon-layer/icon-layer-fragment.glsl.ts","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/classes/base/vector.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/classes/base/math-array.js","webpack:///../core/src/shaderlib/shadow/shadow.ts","webpack:///../core/src/shaderlib/project/viewport-uniforms.ts","webpack:///../core/src/controllers/view-state.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/loader-utils/get-data.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/iterators/make-iterator/make-array-buffer-iterator.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/iterators/make-iterator/make-stream-iterator.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/iterators/make-iterator/make-iterator.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/iterators/make-iterator/make-string-iterator.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/iterators/make-iterator/make-blob-iterator.js","webpack:///./src/version.js","webpack:////home/jesus/code/deck.gl/node_modules/long/dist/long.js","webpack:///../mesh-layers/src/utils/matrix.ts","webpack:///./src/playground/utils/mapbox-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/init.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/node/worker_threads-browser.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/worker-utils/get-loadable-worker-url.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/worker-farm/worker-thread.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/worker-farm/worker-job.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/worker-farm/worker-pool.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/worker-farm/worker-farm.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/iterators/text-iterators.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/binary-utils/get-first-characters.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/stats/dist/esm/utils/hi-res-timestamp.js","webpack:///../core/src/lifecycle/props.ts","webpack:///../core/src/passes/shadow-pass.ts","webpack:///../core/src/effects/lighting/lighting-effect.ts","webpack:///external \"@jupyter-widgets/base\"","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/env/dist/esm/lib/is-browser.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/utils/check-props.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/lib/assert.js","webpack:///../core/src/shaderlib/project/project-functions.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/lights/lights.glsl.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/lights/lights.js","webpack:////home/jesus/code/deck.gl/node_modules/hammerjs/hammer.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/binary-utils/memory-copy-utils.js","webpack:///../mesh-layers/src/index.ts","webpack:///../core/src/effects/lighting/ambient-light.ts","webpack:///../core/src/views/map-view.ts","webpack:///../core/src/controllers/transition-manager.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/env-utils/version.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/iterators/async-iteration.js","webpack:///../core/src/shaderlib/index.ts","webpack:///../core/src/views/orthographic-view.ts","webpack:///../core/src/viewports/orthographic-viewport.ts","webpack:///../core/src/controllers/orthographic-controller.ts","webpack:///../core/src/utils/count.ts","webpack:///../core/src/utils/shader.ts","webpack:///../core/src/viewports/globe-viewport.ts","webpack:///../core/src/transitions/cpu-interpolation-transition.js","webpack:///../core/src/transitions/cpu-spring-transition.js","webpack:///../core/src/lib/uniform-transition-manager.js","webpack:///../core/src/utils/texture.ts","webpack:///../core/src/lifecycle/prop-types.ts","webpack:///../core/src/lifecycle/create-props.ts","webpack:///../core/src/lifecycle/component.ts","webpack:///../core/src/lifecycle/component-state.ts","webpack:///../core/src/lib/layer-state.ts","webpack:///../core/src/lib/layer.ts","webpack:///../core/src/lib/attribute/shader-attribute.ts","webpack:///../core/src/lib/attribute/data-column.ts","webpack:///../core/src/lib/attribute/gl-utils.ts","webpack:///../core/src/utils/range.ts","webpack:///../core/src/lib/attribute/attribute.ts","webpack:///../core/src/transitions/gpu-interpolation-transition.ts","webpack:///../core/src/lib/attribute/attribute-transition-manager.ts","webpack:///../core/src/transitions/gpu-spring-transition.ts","webpack:///../core/src/lib/attribute/attribute-manager.ts","webpack:////home/jesus/code/deck.gl/node_modules/@mapbox/tiny-sdf/index.js","webpack:///../layers/src/text-layer/utils.ts","webpack:///../layers/src/text-layer/lru-cache.ts","webpack:///../layers/src/text-layer/font-atlas-manager.ts","webpack:///../layers/src/text-layer/text-layer.ts","webpack:///../layers/src/column-layer/column-geometry.ts","webpack:///../layers/src/column-layer/column-layer.ts","webpack:///../layers/src/column-layer/column-layer-vertex.glsl.ts","webpack:///../layers/src/column-layer/column-layer-fragment.glsl.ts","webpack:///../layers/src/scatterplot-layer/scatterplot-layer.ts","webpack:///../layers/src/scatterplot-layer/scatterplot-layer-vertex.glsl.ts","webpack:///../layers/src/scatterplot-layer/scatterplot-layer-fragment.glsl.ts","webpack:///../layers/src/text-layer/text-background-layer/text-background-layer.ts","webpack:///../layers/src/text-layer/text-background-layer/text-background-layer-vertex.glsl.ts","webpack:///../layers/src/text-layer/text-background-layer/text-background-layer-fragment.glsl.ts","webpack:///../core/src/lib/resource/resource.ts","webpack:///../core/src/lib/resource/resource-manager.ts","webpack:///../core/src/lib/layer-manager.ts","webpack:///../layers/src/text-layer/multi-icon-layer/multi-icon-layer.ts","webpack:///../layers/src/text-layer/multi-icon-layer/multi-icon-layer-fragment.glsl.ts","webpack:///../core/src/passes/draw-layers-pass.ts","webpack:///../core/src/lib/deck-renderer.js","webpack:///../json/src/transports/transport.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/env/dist/esm/lib/is-electron.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/utils/stub-methods.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/classes/base/matrix.js","webpack:///../core/src/passes/pass.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/worker-utils/get-transfer-list.js","webpack:///../core/src/passes/pick-layers-pass.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/images/dist/esm/lib/category-api/binary-image-api.js","webpack:///../layers/src/utils.ts","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///./src/playground/utils/css-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/draco/dist/esm/lib/utils/version.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/draco/dist/esm/draco-loader.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/schema/impl/schema.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/utils/assert.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/schema/impl/field.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/schema/impl/enum.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/schema/impl/type.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/category/mesh/deduce-mesh-schema.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/lib/arrow/arrow-like-type-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/draco/dist/esm/lib/utils/get-draco-schema.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/draco/dist/esm/lib/draco-parser.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/schema/dist/esm/category/mesh/mesh-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/draco/dist/esm/lib/draco-module-loader.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/draco/dist/esm/index.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/utils/array-utils-flat.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/vertex-array-object.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/vertex-array.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/utils/format-value.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/debug/debug-vertex-array.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/debug/debug-uniforms.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/debug/debug-program-configuration.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/lib/model-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/lib/model.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/utils/assert.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/clear.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/features/webgl-features-table.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/worker-api/get-worker-url.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/lib/inject-shader.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/module-injectors.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/worker-loader-utils/parse-with-worker.js","webpack:///../json/src/utils/assert.js","webpack:///../json/src/utils/get.js","webpack:///../json/src/helpers/parse-expression-string.js","webpack:///../json/src/syntactic-sugar.js","webpack:///../json/src/json-configuration.js","webpack:///../json/src/helpers/convert-functions.js","webpack:///../json/src/helpers/instantiate-class.js","webpack:///../json/src/json-converter.js","webpack:///../json/src/helpers/parse-json.js","webpack:///../json/src/helpers/execute-function.js","webpack:///../json/src/utils/shallow-equal-objects.js","webpack:///../json/src/index.js","webpack:///./src/lib/jupyter-transport.js","webpack:///../core/src/lib/composite-layer.ts","webpack:///../core/src/lib/view-manager.ts","webpack:///../core/src/passes/mask-pass.ts","webpack:///../core/src/effects/mask/mask-effect.ts","webpack:///../core/src/effects/mask/utils.ts","webpack:///../core/src/lib/effect-manager.ts","webpack:///../core/src/lib/picking/query-object.ts","webpack:///../core/src/lib/picking/pick-info.ts","webpack:///../core/src/lib/deck-picker.ts","webpack:///../core/src/lib/tooltip.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/query.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/lib/animation-loop.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/webgl-utils/request-animation-frame.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/utils/hammer-overrides.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/utils/hammer.browser.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/inputs/input.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/constants.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/inputs/wheel-input.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/inputs/move-input.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/inputs/key-input.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/inputs/contextmenu-input.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/utils/event-utils.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/utils/event-registrar.js","webpack:///../core/node_modules/mjolnir.js/dist/esm/event-manager.js","webpack:///../core/src/lib/deck.ts","webpack:///../core/src/utils/json-loader.ts","webpack:///../core/src/lib/init.ts","webpack:////home/jesus/code/deck.gl/node_modules/pbf/index.js","webpack:////home/jesus/code/deck.gl/node_modules/expression-eval/index.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/lib/resolve-modules.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/utils/is-old-ie.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/utils/webgl-info.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/lib/transpile-shader.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/lib/assemble-shaders.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/lib/platform-defines.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/lib/program-manager.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/lib/filters/prop-types.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/lib/shader-module.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/webgl-utils/format-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/copy-and-blit.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/core/dist/esm/lib/api/load.js","webpack:///../core/src/shaderlib/project32/project32.ts","webpack:///../core/src/lib/layer-extension.ts","webpack:///../core/src/utils/tesselator.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/worker-loader-utils/encode-with-worker.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/request-utils/request-scheduler.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/json-loader.js","webpack:///../layers/src/column-layer/grid-cell-layer.ts","webpack:///../layers/src/polygon-layer/polygon-layer.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/loader-utils/dist/esm/lib/parser-utils/parse-json.js","webpack:////home/jesus/code/deck.gl/node_modules/ieee754/index.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/experimental/dist/esm/scenegraph/scenegraph-node.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/experimental/dist/esm/scenegraph/group-node.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/experimental/dist/esm/gltf/gltf-animator.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/experimental/dist/esm/scenegraph/model-node.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/experimental/dist/esm/gltf/create-gltf-model.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/experimental/dist/esm/gltf/gltf-instantiator.js","webpack:///../mesh-layers/src/scenegraph-layer/gltf-utils.ts","webpack:///../mesh-layers/src/scenegraph-layer/scenegraph-layer.ts","webpack:///../mesh-layers/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts","webpack:///../mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/experimental/dist/esm/gltf/create-gltf-objects.js","webpack:///../layers/src/geojson-layer/geojson-binary.ts","webpack:///../layers/src/geojson-layer/sub-layer-map.ts","webpack:///../layers/src/geojson-layer/geojson.ts","webpack:///../layers/src/geojson-layer/geojson-layer-props.ts","webpack:///../layers/src/geojson-layer/geojson-layer.ts","webpack:///../layers/src/arc-layer/arc-layer.ts","webpack:///../layers/src/arc-layer/arc-layer-vertex.glsl.ts","webpack:///../layers/src/arc-layer/arc-layer-fragment.glsl.ts","webpack:///../layers/src/line-layer/line-layer.ts","webpack:///../layers/src/line-layer/line-layer-vertex.glsl.ts","webpack:///../layers/src/line-layer/line-layer-fragment.glsl.ts","webpack:///../layers/src/point-cloud-layer/point-cloud-layer.ts","webpack:///../layers/src/point-cloud-layer/point-cloud-layer-vertex.glsl.ts","webpack:///../layers/src/point-cloud-layer/point-cloud-layer-fragment.glsl.ts","webpack:///../mesh-layers/src/simple-mesh-layer/simple-mesh-layer.ts","webpack:///../mesh-layers/src/simple-mesh-layer/simple-mesh-layer-vertex.glsl.ts","webpack:///../mesh-layers/src/simple-mesh-layer/simple-mesh-layer-fragment.glsl.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/picking/picking.js","webpack:///../core/src/shaderlib/picking/picking.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/phong-lighting/phong-lighting.glsl.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/phong-lighting/phong-lighting.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/webgl-utils/texture-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/texture-cube.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/texture-3d.js","webpack:////home/jesus/code/deck.gl/node_modules/probe.gl/dist/esm/env/is-browser.js","webpack:////home/jesus/code/deck.gl/node_modules/probe.gl/dist/esm/env/is-electron.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/asyncIterator.js","webpack:////home/jesus/code/deck.gl/node_modules/react-map-gl/dist/esm/mapbox/mapbox.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///../layers/node_modules/earcut/src/earcut.js","webpack:////home/jesus/code/deck.gl/node_modules/ktx-parse/dist/ktx-parse.modern.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/experimental/dist/esm/gltf/gltf-material-parser.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/features/features.js","webpack:///./src/index.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/superPropBase.js","webpack:///./src/lib/jupyter-transport-view.js","webpack:///../core/bundle/index.ts","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","webpack:///../core/bundle/deckgl.js","webpack:////home/jesus/code/deck.gl/node_modules/prop-types/factoryWithThrowingShims.js","webpack:////home/jesus/code/deck.gl/node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:////home/jesus/code/deck.gl/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:////home/jesus/code/deck.gl/node_modules/node-libs-browser/node_modules/buffer/index.js","webpack:////home/jesus/code/deck.gl/node_modules/base64-js/index.js","webpack:////home/jesus/code/deck.gl/node_modules/isarray/index.js","webpack:////home/jesus/code/deck.gl/node_modules/jsep/build/jsep.js","webpack:////home/jesus/code/deck.gl/node_modules/mapbox-gl/dist/mapbox-gl.js","webpack:///../geo-layers/src/great-circle-layer/great-circle-layer.ts","webpack:///../geo-layers/src/geo-cell-layer/GeoCellLayer.ts","webpack:///../geo-layers/src/s2-layer/s2-geometry.ts","webpack:///../geo-layers/src/s2-layer/s2-utils.ts","webpack:///../geo-layers/src/s2-layer/s2-layer.ts","webpack:///../geo-layers/src/quadkey-layer/quadkey-utils.ts","webpack:///../geo-layers/src/quadkey-layer/quadkey-layer.ts","webpack:///../geo-layers/src/tile-layer/tile-2d-header.ts","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/culling/dist/esm/constants.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/culling/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/culling/dist/esm/lib/bounding-volumes/axis-aligned-bounding-box.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/culling/dist/esm/lib/bounding-volumes/bounding-sphere.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/classes/matrix3.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/culling/dist/esm/lib/bounding-volumes/oriented-bounding-box.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/culling/dist/esm/lib/plane.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/culling/dist/esm/lib/culling-volume.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/culling/dist/esm/lib/perspective-off-center-frustum.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/culling/dist/esm/lib/algorithms/bounding-sphere-from-points.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/lib/math-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/culling/dist/esm/lib/algorithms/compute-eigen-decomposition.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/culling/dist/esm/lib/algorithms/bounding-box-from-points.js","webpack:///../geo-layers/src/tile-layer/tile-2d-traversal.ts","webpack:///../geo-layers/src/tile-layer/utils.ts","webpack:///../geo-layers/src/tile-layer/tileset-2d.ts","webpack:///../geo-layers/src/tile-layer/tile-layer.ts","webpack:///../geo-layers/src/trips-layer/trips-layer.ts","webpack:////home/jesus/code/deck.gl/node_modules/h3-js/dist/browser/h3-js.es.js","webpack:///../geo-layers/src/h3-layers/h3-hexagon-layer.ts","webpack:///../geo-layers/src/h3-layers/h3-cluster-layer.ts","webpack:///../geo-layers/src/mesh-layer/mesh-layer.ts","webpack:///../geo-layers/src/mesh-layer/mesh-layer-vertex.glsl.ts","webpack:///../geo-layers/src/mesh-layer/mesh-layer-fragment.glsl.ts","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/geospatial/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/geospatial/dist/esm/constants.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/geospatial/dist/esm/type-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/geospatial/dist/esm/ellipsoid/helpers/scale-to-geodetic-surface.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/geospatial/dist/esm/ellipsoid/helpers/ellipsoid-transform.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/geospatial/dist/esm/ellipsoid/ellipsoid.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/utils/doubly-linked-list-node.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/utils/doubly-linked-list.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/tileset-cache.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/helpers/frame-state.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/helpers/zoom.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/constants.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/helpers/bounding-volume.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/helpers/tiles-3d-lod.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/helpers/i3s-lod.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/utils/managed-array.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/traversers/tileset-traverser.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/tile-3d.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/helpers/3d-tiles-options.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/traversers/tileset-3d-traverser.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/traversers/i3s-pending-tiles-register.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/traversers/i3s-tile-manager.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/traversers/i3s-tileset-traverser.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/tileset-3d.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/tiles/dist/esm/tileset/helpers/transform-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/utils/version.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/constants.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/helpers/parse-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/math/dist/esm/geometry/constants.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/math/dist/esm/geometry/gl/gl-type.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/classes/tile-3d-feature-table.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/classes/helpers/tile-3d-accessor-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/classes/tile-3d-batch-table-hierarchy.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/classes/tile-3d-batch-table.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/helpers/parse-3d-tile-header.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/helpers/parse-3d-tile-tables.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/math/dist/esm/geometry/colors/rgb565.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/helpers/normalize-3d-tile-colors.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/math/dist/esm/geometry/utils/assert.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/math/dist/esm/geometry/compression/attribute-compression.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/helpers/normalize-3d-tile-normals.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/helpers/normalize-3d-tile-positions.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/parse-3d-tile-point-cloud.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/helpers/parse-3d-tile-gltf-view.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/parse-3d-tile-batched-model.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/parse-3d-tile-instanced-model.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/parse-3d-tile.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/parse-3d-tile-composite.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/parse-3d-tile-gltf.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/tile-3d-subtree-loader.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/lib/parsers/parse-3d-tile-header.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/3d-tiles/dist/esm/tiles-3d-loader.js","webpack:///../geo-layers/src/tile-3d-layer/tile-3d-layer.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/terrain/dist/esm/lib/utils/version.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/terrain/dist/esm/terrain-loader.js","webpack:///../geo-layers/src/terrain-layer/terrain-layer.ts","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gis/dist/esm/lib/flat-geojson-to-binary.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/mvt/dist/esm/helpers/mapbox-util-functions.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/mvt/dist/esm/lib/mapbox-vector-tile/vector-tile-feature.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/mvt/dist/esm/lib/mapbox-vector-tile/vector-tile-layer.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/mvt/dist/esm/lib/mapbox-vector-tile/vector-tile.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/mvt/dist/esm/helpers/binary-util-functions.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/mvt/dist/esm/lib/binary-vector-tile/vector-tile-feature.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/mvt/dist/esm/lib/binary-vector-tile/vector-tile-layer.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/mvt/dist/esm/lib/binary-vector-tile/vector-tile.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/mvt/dist/esm/lib/parse-mvt.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/mvt/dist/esm/mvt-loader.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gis/dist/esm/lib/binary-to-geojson.js","webpack:///../extensions/src/clip/clip.ts","webpack:///../geo-layers/src/mvt-layer/coordinate-transform.ts","webpack:///../geo-layers/src/mvt-layer/find-index-binary.ts","webpack:///../geo-layers/src/mvt-layer/mvt-layer.ts","webpack:///../geo-layers/src/geohash-layer/geohash-utils.ts","webpack:///../geo-layers/src/geohash-layer/geohash-layer.ts","webpack:///../geo-layers/src/index.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/fp64/fp64-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/fp64/fp64.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/fp64/fp64-arithmetic.glsl.js","webpack:///../aggregation-layers/src/utils/aggregation-operation-utils.js","webpack:///../aggregation-layers/src/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js","webpack:///../aggregation-layers/src/utils/resource-utils.js","webpack:///../aggregation-layers/src/utils/gpu-grid-aggregation/gpu-grid-aggregator.js","webpack:///../aggregation-layers/src/utils/gpu-grid-aggregation/transform-mean-vs.glsl.js","webpack:///../aggregation-layers/src/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.js","webpack:///../aggregation-layers/src/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.js","webpack:///../aggregation-layers/src/utils/gpu-grid-aggregation/aggregate-all-vs.glsl.js","webpack:///../aggregation-layers/src/utils/gpu-grid-aggregation/aggregate-all-fs.glsl.js","webpack:///../aggregation-layers/src/utils/color-utils.ts","webpack:///../aggregation-layers/src/screen-grid-layer/screen-grid-cell-layer.ts","webpack:///../aggregation-layers/src/screen-grid-layer/screen-grid-layer-vertex.glsl.ts","webpack:///../aggregation-layers/src/screen-grid-layer/screen-grid-layer-fragment.glsl.ts","webpack:///../aggregation-layers/src/utils/prop-utils.js","webpack:///../aggregation-layers/src/aggregation-layer.ts","webpack:///../aggregation-layers/src/utils/scale-utils.js","webpack:///../aggregation-layers/src/utils/bin-sorter.ts","webpack:///../aggregation-layers/src/utils/grid-aggregation-utils.js","webpack:///../aggregation-layers/src/cpu-grid-layer/grid-aggregator.js","webpack:///../aggregation-layers/src/grid-aggregation-layer.ts","webpack:///../aggregation-layers/src/screen-grid-layer/screen-grid-layer.ts","webpack:///../aggregation-layers/src/utils/cpu-aggregator.js","webpack:///../aggregation-layers/src/cpu-grid-layer/cpu-grid-layer.ts","webpack:////home/jesus/code/deck.gl/node_modules/d3-hexbin/src/hexbin.js","webpack:///../aggregation-layers/src/hexagon-layer/hexagon-layer.ts","webpack:///../aggregation-layers/src/hexagon-layer/hexagon-aggregator.js","webpack:///../aggregation-layers/src/contour-layer/marching-squares-codes.ts","webpack:///../aggregation-layers/src/contour-layer/marching-squares.ts","webpack:///../aggregation-layers/src/contour-layer/contour-layer.ts","webpack:///../aggregation-layers/src/contour-layer/contour-utils.ts","webpack:///../aggregation-layers/src/gpu-grid-layer/gpu-grid-cell-layer.ts","webpack:///../aggregation-layers/src/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.ts","webpack:///../aggregation-layers/src/gpu-grid-layer/gpu-grid-cell-layer-fragment.glsl.ts","webpack:///../aggregation-layers/src/gpu-grid-layer/gpu-grid-layer.ts","webpack:///../aggregation-layers/src/grid-layer/grid-layer.ts","webpack:///../aggregation-layers/src/heatmap-layer/heatmap-layer-utils.ts","webpack:///../aggregation-layers/src/heatmap-layer/triangle-layer.ts","webpack:///../aggregation-layers/src/heatmap-layer/triangle-layer-vertex.glsl.ts","webpack:///../aggregation-layers/src/heatmap-layer/triangle-layer-fragment.glsl.ts","webpack:///../aggregation-layers/src/heatmap-layer/weights-vs.glsl.ts","webpack:///../aggregation-layers/src/heatmap-layer/heatmap-layer.ts","webpack:///../aggregation-layers/src/heatmap-layer/max-vs.glsl.ts","webpack:///../aggregation-layers/src/heatmap-layer/max-fs.glsl.ts","webpack:///../aggregation-layers/src/heatmap-layer/weights-fs.glsl.ts","webpack:///../aggregation-layers/src/index.ts","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/geometries/truncated-cone-geometry.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/geometries/cone-geometry.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/geometries/cylinder-geometry.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/geometries/ico-sphere-geometry.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/geometries/plane-geometry.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/geometry/geometry-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/geometries/sphere-geometry.js","webpack:///../core/bundle/lumagl.js","webpack:///../google-maps/src/utils.ts","webpack:///../google-maps/src/google-maps-overlay.ts","webpack:///../google-maps/src/index.ts","webpack:///./src/lib/utils/deserialize-matrix.js","webpack:///./src/lib/jupyter-transport-model.js","webpack:///./src/playground/playground.js","webpack:///./src/playground/index.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/geometries/cube-geometry.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/env/dist/esm/utils/globals.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/log/dist/esm/utils/local-storage.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/log/dist/esm/utils/formatters.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/log/dist/esm/utils/color.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/log/dist/esm/utils/assert.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/log/dist/esm/utils/hi-res-timestamp.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/log/dist/esm/log.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/log/dist/esm/utils/autobind.js","webpack:////home/jesus/code/deck.gl/node_modules/@probe.gl/env/dist/esm/lib/get-browser.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/transform-feedback.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/animation/timeline.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/classes/vector2.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/worker-utils/dist/esm/lib/library-utils/library-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/textures/dist/esm/lib/parsers/basis-module-loader.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/textures/dist/esm/lib/gl-extensions.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/textures/dist/esm/lib/utils/texture-formats.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/textures/dist/esm/lib/parsers/parse-ktx.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/textures/dist/esm/lib/parsers/parse-basis.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/textures/dist/esm/basis-loader.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/textures/dist/esm/lib/utils/version.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/utils/assert.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/gltf-utils/resolve-url.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/gltf-utils/get-typed-array.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/gltf-utils/gltf-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/api/gltf-scenegraph.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/meshopt/meshopt-decoder.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/extensions/EXT_meshopt_compression.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/images/dist/esm/lib/category-api/image-format.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/extensions/EXT_texture_webp.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/extensions/KHR_texture_basisu.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/gltf-utils/gltf-attribute-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/extensions/KHR_draco_mesh_compression.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/api/gltf-extensions.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/api/normalize-gltf-v1.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/extensions/KHR_binary_gltf.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/api/post-process-gltf.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/parsers/parse-glb.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/parsers/parse-gltf.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/gltf-loader.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/gltf/dist/esm/lib/utils/version.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/images/dist/esm/lib/category-api/image-type.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/images/dist/esm/lib/category-api/parsed-image-api.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/images/dist/esm/lib/parsers/svg-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/images/dist/esm/lib/parsers/parse-to-image.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/images/dist/esm/lib/parsers/parse-to-image-bitmap.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/images/dist/esm/image-loader.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/images/dist/esm/lib/utils/version.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/images/dist/esm/lib/parsers/parse-image.js","webpack:////home/jesus/code/deck.gl/node_modules/@loaders.gl/images/dist/esm/lib/parsers/parse-to-node-image.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/uniforms.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/glsl-utils/get-shader-name.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/glsl-utils/format-glsl-error.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/glsl-utils/get-shader-type-name.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/shader.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/program-configuration.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/classes/program.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/utils/shader-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/transform/buffer-transform.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/webgl/dist/esm/glsl-utils/get-shader-version.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/transform/transform.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/transform/transform-shader-utils.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/transform/texture-transform.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/engine/dist/esm/transform/transform.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/classes/vector4.js","webpack:////home/jesus/code/deck.gl/node_modules/gl-matrix/esm/quat.js","webpack:////home/jesus/code/deck.gl/node_modules/@math.gl/core/dist/esm/classes/quaternion.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/pbr/pbr.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/pbr/pbr-vertex.glsl.js","webpack:////home/jesus/code/deck.gl/node_modules/@luma.gl/shadertools/dist/esm/modules/pbr/pbr-fragment.glsl.js"],"names":["root","factory","exports","module","require","define","amd","a","i","window","__WEBPACK_EXTERNAL_MODULE__133__","installedModules","__webpack_require__","moduleId","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","obj","configurable","writable","_defineProperty","_getPrototypeOf","setPrototypeOf","getPrototypeOf","__proto__","instance","Constructor","TypeError","_defineProperties","target","props","length","descriptor","protoProps","staticProps","subClass","superClass","constructor","_typeof","assertThisInitialized","self","superPropBase","_get","receiver","Reflect","base","desc","getOwnPropertyDescriptor","id","assert","condition","message","Error","isWebGL","gl","WebGLRenderingContext","WebGL2RenderingContext","Boolean","Number","isFinite","_version","isWebGL2","getWebGL2Context","assertWebGLContext","assertWebGL2Context","glErrorShadow","synthesizeGLError","err","opt_msg","msg","undefined","globalThis","console","error","WebGLVertexArrayObjectOES","ext","this","isAlive","hasBeenBound","elementArrayBuffer","attribs","Array","maxVertexAttribs","attrib","VertexAttrib","maxAttrib","enabled","buffer","size","type","normalized","stride","offset","cached","recache","join","OESVertexArrayObject","f","getError","apply","parseInt","wrapGLError","original","getParameter","enableVertexAttribArray","disableVertexAttribArray","bindBuffer","getVertexAttrib","vertexAttribPointer","pname","VERTEX_ARRAY_BINDING_OES","currentVertexArrayObject","defaultVertexArrayObject","arguments","index","vao","Math","max","currentArrayBuffer","indx","instrumentExtension","canvas","addEventListener","log","reset_","vertexArrayObjects","ii","bindVertexArrayOES","createVertexArrayOES","arrayObject","push","deleteVertexArrayOES","splice","indexOf","isVertexArrayOES","oldVAO","newVAO","currentBinding","oldAttrib","bufferChanged","getWebGL2ValueOrZero","WEBGL_PARAMETERS","getExtension","GPU_DISJOINT_EXT","UNMASKED_VENDOR_WEBGL","UNMASKED_RENDERER_WEBGL","luma","extensions","MAX_TEXTURE_MAX_ANISOTROPY_EXT","MAX_COLOR_ATTACHMENTS_WEBGL","MAX_DRAW_BUFFERS_WEBGL","WEBGL2_CONTEXT_POLYFILLS","meta","suffix","createVertexArray","deleteVertexArray","bindVertexArray","isVertexArray","location","divisor","drawElementsInstanced","drawArraysInstanced","drawBuffers","createQuery","deleteQuery","beginQuery","endQuery","handle","getQueryObject","WEBGL2_CONTEXT_OVERRIDES","readBuffer","originalFunc","attachment","webgl2","extension","getExtensionData","result","getProgramParameter","program","getInternalformatParameter","format","Int32Array","TEXTURE_MAX_ANISOTROPY_EXT","originalGetParameter","limit","hint","polyfillExtension","_ref2","target2","defaults","keys","extKey","concat","polyfill","polyfillContext","polyfilled","original_getSupportedExtensions","getSupportedExtensions","list","original_getExtension","__OESVertexArrayObject","polyfillVertexArrayObject","EXTENSIONS","initializeExtensions","polyfills","getOwnPropertyNames","installPolyfills","_ref","forEach","installOverrides","GL_PARAMETER_DEFAULTS","Float32Array","enable","disable","pixelStorei","isArray","array","ArrayBuffer","isView","GL_PARAMETER_SETTERS","blendColor","clearColor","colorMask","cullFace","clearDepth","depthFunc","depthRange","depthMask","bindFramebuffer","frontFace","lineWidth","scissor","clearStencil","stencilMaskSeparate","viewport","framebuffer","blend","blendEquation","args","blendEquationSeparate","blendFunc","blendFuncSeparate","cull","depthTest","dither","derivativeHint","mipmapHint","polygonOffsetFill","polygonOffset","sampleCoverage","scissorTest","stencilTest","stencilMask","mask","backMask","stencilFunc","func","ref","backFunc","backRef","stencilFuncSeparate","stencilOp","sfail","dpfail","dppass","backSfail","backDpfail","backDppass","stencilOpSeparate","getValue","glEnum","values","cache","GL_COMPOSITE_PARAMETER_SETTERS","stencilFuncFront","stencilFuncBack","stencilOpFront","stencilOpBack","GL_HOOKED_SETTERS","update","capability","g","b","modeRGB","modeAlpha","src","dst","srcRGB","dstRGB","srcAlpha","dstAlpha","depth","zNear","zFar","face","width","factor","units","invert","x","y","height","fail","zfail","zpass","isEnabled","GL_PARAMETER_GETTERS","isObjectEmpty","deepArrayEqual","isArrayX","isArrayY","installGetterOverride","functionName","originalGetterFunc","state","installSetterSpy","setter","originalSetterFunc","_len","params","_key","valueChanged","oldValue","_updateCache","installProgramSpy","originalUseProgram","useProgram","copyState","stateStack","getParameters","assign","seal","oldValues","setParameters","pop","trackContextState","options","popContextState","compositeSetters","glConstant","compositeSetter","parameters","parameterKeys","resetParameters","withParameters","nocatch","pushContextState","cssToDeviceRatio","clientWidth","canvasSizeInfo","drawingBufferWidth","cssToDevicePixels","cssPixel","yInvert","ratio","drawingBufferHeight","scalePixels","getDevicePixelRatio","useDevicePixels","windowRatio","devicePixelRatio","pixel","scaleX","scaleY","xHigh","yHigh","min","round","isBrowser","isPage","document","CONTEXT_DEFAULTS","webgl1","throwOnError","manageState","debug","createGLContext","onError","targetCanvas","getCanvas","createBrowserContext","instrumentGLContext","logInfo","_instrumented","getVersion","makeDebugContext","level","warn","resizeGLContext","setDevicePixelRatio","resize","errorMessage","onCreateError","statusMessage","getContext","removeEventListener","onContextLost","onContextRestored","readyState","getElementById","createElement","style","body","insertBefore","firstChild","webGL","info","vendorMasked","rendererMasked","vendor","renderer","version","shadingLanguageVersion","getContextDebugInfo","driver","clientHeight","cachedSize","clampedPixelRatio","canvasWidth","floor","canvasHeight","arrayWithHoles","iterableToArrayLimit","nonIterableRest","arr","EPSILON","ARRAY_TYPE","RANDOM","random","PI","hypot","sqrt","COORDINATE_SYSTEM","DEFAULT","LNGLAT","METER_OFFSETS","LNGLAT_OFFSETS","CARTESIAN","deprecated","PROJECTION_MODE","WEB_MERCATOR","GLOBE","WEB_MERCATOR_AUTO_OFFSET","IDENTITY","UNIT","common","meters","pixels","EVENTS","click","handler","panstart","panmove","panend","OPERATION","DRAW","MASK","RADIANS_TO_DEGREES","DEGREES_TO_RADIANS","config","precision","printTypes","printDegrees","printRowMajor","formatValue","parseFloat","toPrecision","DataView","toRadians","degrees","radians","toDegrees","map","clamp","lerp","ai","equals","epsilon","oldEpsilon","abs","clone","duplicateArray","DEFAULT_LIGHT_COLOR","DEFAULT_ATTENUATION","DEFAULT_LIGHT_POSITION","idCount","PointLight","color","intensity","position","attenuation","getAttenuation","projectedLight","layer","context","coordinateSystem","coordinateOrigin","projectPosition","fromCoordinateSystem","isGeospatial","fromCoordinateOrigin","CameraLight","modelMatrix","project_uCameraPosition","getUniformsFromViewport","e","getSunPosition","timestamp","latitude","longitude","longitudeWestInRadians","phi","getTime","toJulianDay","toDays","dates","L","meanAnomaly","M","C","sin","getEclipticLongitude","days","declination","getDeclination","rightAscension","getRightAscension","getSunCoords","H","getSiderealTime","azimuth","getAzimuth","altitude","getAltitude","getSunDirection","cos","eclipticLongitude","lambda","atan2","tan","asin","hourAngle","latitudeInRadians","delta","SunLight","opts","resolution","z","direction","DirectionalLight","POSITIONS","TEX_COORDS","coord","super","vs","geometry","drawMode","vertexCount","attributes","aClipSpacePosition","aTexCoord","aCoordinate","setVertexCount","ScreenPass","fs","model","ClipSpace","outputBuffer","_renderPass","delete","inputBuffer","clear","draw","moduleSettings","uniforms","texture","texSize","depthWrite","Pass","PostProcessEffect","normalizeShaderModule","passes","getFragmentShaderForRenderPass","pass","idn","createPasses","swapBuffer","render","switchBuffer","FILTER_FS_TEMPLATE","SAMPLER_FS_TEMPLATE","filter","sampler","getViewMatrix","focalDistance","orbitAxis","rotationX","rotationOrbit","zoom","up","eye","viewMatrix","Matrix4","lookAt","rotateX","rotateZ","rotateY","projectionScale","pow","scale","OrbitViewport","projectionMatrix","fovy","fovyToAltitude","projectedCenter","project","center","xyz","topLeft","y2","pixelsToWorld","pixelUnprojectionMatrix","X","Y","Z","coords","p0","nextCenter","unproject","Viewport","theta","radius","bearing","pitch","radiusScale","check","formatString","other","v","copy","lng","lat","vec3","acos","FirstPersonViewport","dir","SphericalCoordinates","toVector3","normalize","transformAsVector","getMeterZoom","FirstPersonState","maxPitch","minPitch","startRotatePos","startBearing","startPitch","startZoomPosition","pos","_getUpdatedState","getViewportProps","newRotation","deltaAngleX","deltaAngleY","getState","getDirection","_move","log2","speed","negate","viewState","fromProps","fromPosition","Vector3","add","use2D","spherical","newProps","mod","ViewState","FirstPersonController","transitionDuration","transitionInterpolator","LinearInterpolator","Controller","FirstPersonView","View","OrbitView","OrbitController","GlobeState","maxZoom","minZoom","MapState","GlobeController","dragRotate","touchRotate","GlobeView","GlobeViewport","LINEARLY_INTERPOLATED_PROPS","DEFAULT_OPTS","curve","FlyToInterpolator","compare","extract","required","startProps","endProps","flyToViewport","getFlyToDuration","TransitionInterpolator","transformVector","matrix","vector","modulus","LOG2E","PI_4","DEFAULT_ALTITUDE","zoomToScale","scaleToZoom","lngLatToWorld","lngLat","phi2","worldToLngLat","xy","lambda2","atan","exp","unitsPerMeter","getDistanceScales","highPrecision","latCosine","unitsPerDegreeY","altUnitsPerMeter","metersPerUnit","unitsPerDegree","degreesPerUnit","latCosine2","unitsPerDegreeY2","altUnitsPerDegree2","altUnitsPerMeter2","unitsPerDegree2","unitsPerMeter2","addMetersToLngLat","lngLatZ","z0","worldspace","newLngLat","newZ","vm","mat4","relativeScale","getProjectionParameters","nearZMultiplier","farZMultiplier","altitudeToFovy","fovRadians","pitchRadians","cameraToSeaLevelDistance","fovAboveCenter","topHalfSurfaceDistance","furthestDistance","horizonDistance","fov","aspect","near","far","worldToPixels","pixelProjectionMatrix","targetZ","coord0","coord1","z1","vec2","fitBounds","bounds","minExtent","west","south","east","north","padding","top","bottom","left","right","getPaddingObject","nw","se","targetSize","offsetX","offsetY","centerLngLat","getBounds","unprojectOps","bottomLeft","bottomRight","topRight","unprojectOnFarPlane","distanceScales","normalizeViewportProps","halfHeightPixels","minLatitude","maxLatitude","VIEWPORT_TRANSITION_PROPS","startZoom","startCenterXY","uDelta","w0","u1","S","rho","rho2","r0","getFlyToTransitionParams","startValue","endValue","step","w","cosh","u","tanh","sinh","newZoom","newCenterWorld","newCenter","screenSpeed","maxDuration","duration","startCenter","startScale","endZoom","endCenter","endCenterXY","w1","_u1","b0","b1","r1","filename","url","slashIndex","lastIndexOf","substr","dirname","parts","part","replace","RegExp","Log","isBoolean","isFunction","isObject","isPureObject","isPromise","then","isIterable","iterator","isAsyncIterable","asyncIterator","isIterator","next","isResponse","Response","arrayBuffer","text","json","isBlob","Blob","isBuffer","isReadableStream","ReadableStream","tee","cancel","getReader","isReadableDOMStream","read","pipe","readable","isReadableNodeStream","isWritableStream","abort","getWriter","isWritableDOMStream","end","write","isWritableNodeStream","checkNumber","checkVector","callerName","validateVector","LIFECYCLE","NO_STATE","MATCHED","INITIALIZED","AWAITING_GC","AWAITING_FINALIZATION","FINALIZED","COMPONENT_SYMBOL","for","ASYNC_DEFAULTS_SYMBOL","ASYNC_ORIGINAL_SYMBOL","ASYNC_RESOLVED_SYMBOL","out","fromValues","len","dot","cross","ax","ay","az","bx","by","bz","transformMat4","transformMat3","transformQuat","q","qx","qy","qz","qw","uvx","uvy","uvz","uuvx","uuvy","uuvz","w2","rad","angle","mag","cosine","vec","mul","transpose","a01","a02","a03","a12","a13","a23","a00","a10","a11","a20","a21","a22","a30","a31","a32","a33","b00","b01","b02","b03","b04","b05","b06","b07","b08","b09","b10","b11","det","determinant","multiply","b2","b3","translate","rotate","axis","b12","b20","b21","b22","getScaling","mat","m11","m12","m13","m21","m22","m23","m31","m32","m33","fromQuat","x2","z2","xx","yx","yy","zx","zy","zz","wx","wy","wz","frustum","rl","tb","nf","perspective","Infinity","ortho","lr","bt","x0","x1","y0","y1","eyex","eyey","eyez","upx","upy","upz","centerx","centery","centerz","identity","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a14","a15","b4","b5","b6","b7","b8","b9","b13","b14","b15","ReferenceError","loggers","register","handlers","eventType","arg1","arg2","arg3","deckLog","DEPRECATED_PROPS","integer","instanced","isInstanced","PROP_CHECKS_INITIALIZE","removedProps","replacedProps","bytes","deprecatedProps","PROP_CHECKS_SET_PROPS","Buffer","stubRemovedMethods","initialize","accessor","byteLength","getBytesPerElement","getBytesPerVertex","data","usage","debugData","setAccessor","_setData","_setByteLength","bytesUsed","srcOffset","bufferSubData","_inferType","sourceBuffer","readOffset","writeOffset","copyBufferSubData","dstData","srcByteOffset","dstOffset","ArrayType","clamped","sourceAvailableElementCount","_getAvailableElementCount","dstElementOffset","dstAvailableElementCount","dstElementCount","copyElementCount","getBufferSubData","bindBufferRange","bindBufferBase","changed","getData","_trackDeallocatedMemory","_getTarget","bufferData","slice","_trackAllocatedMemory","sourceElementOffset","BYTES_PER_ELEMENT","getElementCount","createBuffer","deleteBuffer","getBufferParameter","reallocate","transformMat2","transformMat2d","sub","createMat4","getCameraPosition","viewMatrixInverse","getFrustumPlanes","viewProjectionMatrix","getFrustumPlane","scratchArray","scratchVector","set","distance","normal","fp64LowPart","fround","toDoublePrecisionArray","typedArray","startIndex","endIndex","count","typedArrayManager","allocate","sourceIndex","targetIndex","j","subarray","squaredLength","aw","ix","iy","iz","iw","exactEquals","WINDING","CLOCKWISE","COUNTER_CLOCKWISE","modifyPolygonWindingDirection","points","sign","getPolygonSignedArea","getPolygonWindingDirection","start","numPoints","numSwaps","tmp","reversePolygon","dim","area","earcut","positions","holeIndices","areas","hasHoles","outerLen","outerNode","linkedList","triangles","prev","invSize","maxX","maxY","minX","minY","queue","steiner","getLeftmost","sort","compareX","eliminateHole","filterPoints","eliminateHoles","earcutLinked","clockwise","last","insertNode","removeNode","again","ear","zOrder","prevZ","nextZ","numMerges","pSize","qSize","tail","inSize","sortLinked","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","maxZ","intersects","locallyInside","isValidDiagonal","splitPolygon","hole","hx","hy","mx","my","tanMin","sectorContainsSector","findHoleBridge","leftmost","cx","cy","px","py","intersectsPolygon","inside","middleInside","p1","p2","q1","q2","o1","o2","o3","o4","onSegment","num","Node","an","bp","source","isDuplicate","getPointAtIndex","startI","intersect","edge","bbox","snap","bitCode","code","cutPolylineByGrid","broken","gridResolution","gridOffset","codeB","cell","getGridCell","scratchPoint","codeAlt","moveToNeighborCell","concatInPlace","arr1","arr2","cutPolygonByGrid","edgeTypes","types","fill","holes","shift","getBoundingBox","bisectPolygon","polygonLow","polygonHigh","polygon","resultLow","resultHigh","typesLow","typesHigh","side","prevSide","prevType","lowPointCount","highPointCount","cutPolylineByMercatorBounds","newPositions","wrapLongitudesForShortestPath","shiftLongitudesIntoRange","cutPolygonByMercatorBounds","newHoleIndices","srcStartIndex","ringIndex","srcEndIndex","targetStartIndex","splitIndex","findSplitIndex","insertPoleVertices","maxLat","pointIndex","firstLng","lastLng","prevLng","refLng","pointCount","arrayWithoutHoles","iterableToArray","nonIterableSpread","ERR_RESOURCE_METHOD_UNDEFINED","Resource","userData","gl2","_bound","_handle","_createHandle","_initStats","_addStats","deleteChildren","children","_deleteHandle","_removeStats","child","funcOrHandle","_bindHandle","parameter","PARAMETERS","isWebgl2","webgl1Default","webgl2Default","_getParameter","_setParameter","setParameter","className","methodNames","stats","incrementCount","decrementCount","_doTrackAllocatedMemory","addCount","_doTrackDeallocatedMemory","subtractCount","deck","ZERO_VECTOR","DEFAULT_DISTANCE_SCALES","displayName","_initProps","_initMatrices","unprojectPosition","projectFlat","unprojectFlat","worldPosition","targetZWorld","unprojectOption","_frustumPlanes","meterOffset","orthographic","fovyRadians","viewMatrixUncentered","multiplyRight","createProjectionMatrix","vpm","cameraPosition","viewportMatrix","padArrayChunk","sourceLength","targetLength","datum","DEFAULT_TRANSITION_SETTINGS","interpolation","easing","spring","stiffness","damping","normalizeTransitionSettings","userSettings","layerSettings","getSourceBufferAttribute","attribute","getBuffer","settings","getAttributeTypeFromSize","cycleBuffers","buffers","getAttributeBufferLength","numInstances","doublePrecision","multiplier","Float64Array","noAlloc","padBuffer","fromLength","fromStartIndices","precisionMultiplier","byteOffset","toStartIndices","startIndices","hasStartIndices","toLength","isConstant","toData","chunk","normalizeConstant","getMissingData","sourceStartIndices","targetStartIndices","getChunkData","nextSourceIndex","nextTargetIndex","padArray","subData","isLoaderObject","loader","_loader","normalizeLoader","_loader2","_loader3","parseTextSync","parseText","binary","LocalStorage","defaultSettings","storage","setItem","removeItem","getStorage","_loadConfiguration","configuration","updateConfiguration","serialized","JSON","stringify","serializedConfiguration","getItem","parse","formatImage","image","maxWidth","imageUrl","COLOR","BLACK","RED","GREEN","YELLOW","BLUE","MAGENTA","CYAN","WHITE","BRIGHT_BLACK","BRIGHT_RED","BRIGHT_GREEN","BRIGHT_YELLOW","BRIGHT_BLUE","BRIGHT_MAGENTA","BRIGHT_CYAN","BRIGHT_WHITE","getColor","toUpperCase","getHiResTimestamp","performance","now","hrtime","timeParts","Date","originalConsole","DEFAULT_SETTINGS","noop","ONCE","once","getTableHeader","table","title","VERSION","_startTs","_deltaTs","LOG_THROTTLE_TIMEOUT","_storage","timeStamp","predefined","proto","propNames","find","autobind","newLevel","setLevel","getLevel","newPriority","_getLogFunction","oldUsage","newUsage","logLevel","time","columns","tag","priority","_shouldLog","img","Image","onload","element","nodeName","toLowerCase","toDataURL","logImageInBrowser","asciify","fit","logImageInNode","setting","timeEnd","collapsed","normalizeArguments","method","groupCollapsed","group","groupEnd","trace","normalizeLogLevel","total","getTotal","getDelta","string","padLength","repeat","leftPad","ms","formatted","toFixed","formatTime","background","decorateMessage","resolvedLevel","from","unshift","messageType","probeLog","NullLog","DEFAULT_LOADER_OPTIONS","fetch","mimeType","nothrow","CDN","worker","maxConcurrency","maxMobileConcurrency","reuseWorkers","_nodeWorkers","_workerType","_limitMB","batchSize","batchDebounceMs","metadata","transforms","REMOVED_LOADER_OPTIONS","throws","dataType","uri","headers","credentials","redirect","referrer","referrerPolicy","integrity","keepalive","signal","getGlobalLoaderState","loaders","_state","getGlobalLoaderOptions","globalOptions","setGlobalOptions","normalizeOptionsInternal","normalizeOptions","validateOptionsObject","idOptions","loaderOptions","deprecatedOptions","validateOptions","getFetchFunction","fetchOptions","defaultOptions","loaderName","prefix","isSubOptions","isBaseUriOption","isWorkerUrlOption","suggestion","findSimilarOption","optionKey","lowerCaseOptionKey","bestSuggestion","lowerCaseKey","startsWith","mergedOptions","baseUri","addUrlOptions","mergeNestedFields","uidCounters","uid","isPowerOfTwo","isEmpty","getKeyValue","number","isNaN","getKey","String","globals","global","global_","process","browser","isWorker","importScripts","isMobile","orientation","matches","exec","DEFAULT_PROPS","DEFAULT_REQUIRED_PROPS","transitionProps","normalizedOpts","makeViewport","around","startViewport","endViewport","aroundPosition","propsInTransition","_propsToExtract","panByPosition","EMPTY_ARRAY","placeholderArray","createIterable","startRow","endRow","iterable","objectInfo","getAccessorFromBuffer","nested","bytesPerElement","elementStride","elementOffset","_","getGLTypeFromTypedArray","arrayOrType","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","Int8Array","Int16Array","getTypedArrayFromGLType","glType","flipRows","bytesPerPixel","temp","bytesPerRow","topOffset","bottomOffset","copyWithin","newWidth","newHeight","newData","NPOT_MIN_FILTERS","WebGLBuffer","Texture","linearFiltering","supported","textureUnit","loaded","dataFormat","border","mipmaps","Promise","resolvedImageData","isVideo","HTMLVideoElement","HAVE_METADATA","_video","recreate","pixelStore","compressed","_deduceParameters","activeTexture","bindTexture","_isNPOT","_updateForNPOT","setImageData","generateMipmap","video","lastTime","HAVE_CURRENT_DATA","currentTime","setSubImageData","_getDataType","compressedTextureSize","texImage2D","levelIndex","levelData","entries","compressedTexImage2D","levelSize","channels","channelSize","ndarray","shape","compressedTexSubImage2D","texSubImage2D","_ref3","textureFormat","_deduceImageSize","ImageData","HTMLImageElement","naturalWidth","naturalHeight","HTMLCanvasElement","ImageBitmap","videoWidth","videoHeight","createTexture","deleteTexture","getTexParameter","param","_getNPOTParam","texParameterf","texParameteri","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","vec2_transformMat4AsVector","vec3_transformMat4AsVector","vec3_transformMat2","vec4_transformMat2","vec4_transformMat3","async","readArrayBuffer","file","_readToArrayBuffer","blob","resolve","reject","fileReader","FileReader","event","_event$target","onerror","readAsArrayBuffer","readBlob","readFileSync","writeFile","filePath","arrayBufferOrString","flag","writeFileSync","parseSync","typedLoaders","candidateLoaders","parseWithLoaderSync","parseInBatches","outputIterator","inputIterator","transformedIterator","iteratorChain","transformBatches","applyInputTransforms","parsedData","mimeTypes","batch","batchType","parseChunkInBatches","parseToOutputIterator","metadataBatch","_context","makeMetadataBatchIterator","parseWithLoaderInBatches","loadInBatches","files","loadOneFileInBatches","response","processOnWorker","workerFarm","getWorkerFarm","workerPoolProps","workerPool","getWorkerPool","jobName","job","startJob","onMessage","transferableOptions","postMessage","input","payload","done","encode","writer","encodeSync","encodeText","TextEncoder","encodeInBatches","batches","chunks","encodeURLtoURL","tmpInputFilename","getTemporaryFilename","tmpOutputFilename","outputFilename","TextDecoder","decode","dataIterator","getIterator","inputUrl","outputUrl","save","encodedData","saveSync","makeStream","controller","close","enqueue","_iterator$return","return","highWaterMark","NullWorkerLoader","tests","null","echoParameters","NullLoader","fetchProgress","onProgress","onDone","ok","contentLength","totalBytes","progressStream","reader","loadedBytes","percent","_fetch","lowerCaseFiles","usedFiles","path","includes","status","statusText","range","Headers","pathname","flags","fd","bytesRead","used","NO_TRANSITION_PROPS","INERTIA_EASING","EVENT_TYPES","pinchEventWorkaround","isDragging","transitionManager","TransitionManager","getControllerState","ControllerState","onViewStateChange","_onTransition","onStateChange","_setInteractionState","handleEvent","eventManager","customEvents","toggleEvents","_customEvents","setProps","eventName","_events","off","finalize","_controllerState","eventStartBlocked","_eventStartBlocked","_onPanStart","_onPan","_onPanEnd","_onPinchStart","_onPinch","_onPinchEnd","_onTriplePanStart","_onTriplePan","_onTriplePanEnd","_onDoubleTap","_onWheel","_onKeyDown","offsetCenter","handled","stopPropagation","srcEvent","metaKey","altKey","ctrlKey","shiftKey","_interactionState","timeout","timer","setTimeout","dragMode","_getTransitionProps","processViewStateChange","inertia","scrollZoom","dragPan","doubleClickZoom","touchZoom","keyboard","isInteractive","updateTransition","eventNames","on","newControllerState","extraProps","interactionState","controllerState","oldViewState","newStates","getCenter","isPointInBounds","alternateMode","isFunctionKeyPressed","rightButton","invertPan","_panMove","updateViewport","_onPanMove","_onPanRotate","_onPanMoveEnd","_onPanRotateEnd","pan","isPanning","velocity","endPos","velocityX","velocityY","panEnd","transitionEasing","isRotating","rotateEnd","preventDefault","smooth","isZooming","rotateStart","deltaX","blockEvents","zoomStart","_startPinchRotation","rotation","_lastPinchEvent","velocityZ","deltaTime","endScale","zoomEnd","isZoomOut","funcKey","zoomSpeed","moveSpeed","rotateSpeedX","rotateSpeedY","zoomOut","zoomIn","rotateLeft","moveLeft","rotateRight","moveRight","rotateUp","moveUp","rotateDown","moveDown","transition","PERCENT_OR_PIXELS_REGEX","parsePosition","relative","match","getPosition","extent","viewportInstance","_x","_y","_width","_height","_padding","view","ViewportType","deepEqual","filterViewState","viewportDimensions","getDimensions","newViewState","dimensions","ControllerType","DRAW_MODE","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","Geometry","indices","_setAttributes","_calculateVertexCount","attributeName","_print","isIndexed","constant","aValue","bValue","DATA_URL_PATTERN","MIME_TYPE_PATTERN","parseMIMEType","mimeString","parseMIMETypeFromURL","QUERY_STRING_PATTERN","getResourceUrlAndType","resource","stripQueryString","getResourceContentLength","DEFAULT_ACCESSOR_VALUES","PROP_CHECKS","Accessor","accessors","_len2","_key2","_assign","freeze","OUTER_POLYGON_WINDING","HOLE_POLYGON_WINDING","windingOptions","isClosed","getPositions","getHoleIndices","isFlatRingClosed","copyNestedRing","simplePolygon","windingDirection","isNestedRingClosed","copyFlatRing","srcLength","positionSize","validate","srcPositions","srcHoleIndices","isNested","isSimple","polygonIndex","getPlaneArea","xIndex","yIndex","numVerts","permutePositions","zIndex","getSurfaceIndices","preproject","full3d","positionIndex","is3d","xyArea","xzArea","yzArea","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","nextTick","env","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","DEFAULT_INDICES","DEFAULT_TEX_COORDS","createMesh","texCoords","createQuad","maxXSpan","maxYSpan","uCount","ceil","vCount","vertex","ut","vt","interpolateQuad","quad","defaultProps","_imageCoordinateSystem","desaturate","transparentColor","tintColor","BitmapLayer","project32","picking","attributeManager","getAttributeManager","remove","mesh","fp64","use64bitPositions","oldProps","changeFlags","extensionsChanged","_getModel","invalidateAll","oldMesh","_createMesh","invalidate","setState","_getCoordinateUniforms","bitmap","fracUV","uv","disablePicking","encodePickingColor","normalizedBounds","isRectangularBounds","Model","getShaders","moduleParameters","coordinateConversion","pickingActive","setUniforms","bitmapTexture","imageCoordinateSystem","defaultImageCoordinateSystem","Layer","flatten","flattenArray","fillArray","copied","TypedArrayManager","overAlloc","poolSize","setOptions","maxCount","Type","newSize","maxSize","newArray","_allocate","_release","sizeToAllocate","pool","_pool","findIndex","asyncGeneratorStep","gen","_next","_throw","arg","fn","self_","window_","document_","LayersPass","_drawLayers","viewports","views","onViewportActive","clearStack","clearCanvas","clearGLCanvas","_lastRenderIndex","renderStats","drawLayerParams","_getDrawLayerParams","subViewports","subViewport","_drawLayersInViewport","layers","layerFilter","cullRect","effects","indexResolver","layerIndexResolver","layerIndices","resolvers","resolveLayerIndex","isDrawn","indexOverride","_offset","layerId","parentId","parent","resolver","drawContext","isPicking","renderPass","layerFilterCache","layerIndex","shouldDrawLayer","_shouldDrawLayer","layerParam","layerRenderIndex","_getModuleParameters","layerParameters","getLayerParameters","globalModuleParameters","glViewport","useTarget","pixelRatio","getGLViewport","clearOpts","renderStatus","totalCount","visibleCount","compositeCount","pickableCount","pickable","isComposite","_drawLayer","raiseError","visible","filterSubLayer","rootLayerId","activateViewport","overrides","internalState","autoWrapLongitude","wrapLongitude","mousePosition","effect","getModuleParameters","Framebuffer","colorBufferFloat","colorBufferHalfFloat","defaultFramebuffer","attachments","MAX_COLOR_ATTACHMENTS","MAX_DRAW_BUFFERS","ownResources","stencil","_createDefaultAttachments","clearAttachments","checkStatus","resizeAttachments","attach","prevHandle","_setReadBuffer","_setDrawBuffers","attachmentPoint","newAttachments","_attachRenderbuffer","renderbuffer","_attachTexture","_unattach","getStatus","STATUS","_getFrameBufferStatus","checkFramebufferStatus","drawBuffer","invalidateFramebuffer","_getAttachmentParameterFallback","getFramebufferAttachmentParameter","ATTACHMENT_PARAMETERS","getAttachmentParameter","attachmentName","getAttachmentParameters","open","targetMaxHeight","defaultAttachments","oldAttachment","framebufferRenderbuffer","framebufferTexture2D","_ref4","_ref5","framebufferTextureLayer","mapIndexToCubeMapFace","drawBuffersWEBGL","caps","WEBGL2","EXT_sRGB","createFramebuffer","deleteFramebuffer","Transition","timeline","_inProgress","_timeline","onStart","removeChannel","onEnd","onInterrupt","addChannel","delay","_onUpdate","onUpdate","isFinished","reset","samples","sampleSize","_count","_samples","_checkSampling","_time","lastTiming","_startTime","_timerPending","addTime","lastSampleCount","lastSampleTime","_initializeStats","_getOrCreate","stat","average","getAverageTime","hz","getHz","VERTEX_SHADER","FRAGMENT_SHADER","INDICES","DEFAULT_FOVY","DEFAULT_ASPECT","DEFAULT_NEAR","DEFAULT_FAR","IDENTITY_MATRIX","getIdentityMatrix","ZERO","getZeroMatrix","m00","m10","m20","m30","m01","m02","m03","quaternion","column0Row0","column1Row1","column2Row0","column2Row1","column3Row2","computeInfinitePerspectiveOffCenter","checkRadians","halfY","scaleResult","getScale","inverseScale0","inverseScale1","inverseScale2","angleXYZ","transformAsPoint","possiblyDegrees","EXT_PATTERN","selectLoader","validHTTPResponse","selectLoaderSync","getNoValidLoaderMessage","ignoreRegisteredLoaders","normalizeLoaders","testUrl","reason","findLoaderByMIMEType","loaderExtension","findLoaderByExtension","findLoaderByUrl","testDataAgainstText","testDataAgainstBinary","findLoaderByInitialBytes","getFirstCharacters","fallbackMimeType","selectLoaderInternal","firstCharacters","testText","some","test","magic","getMagicString","testBinary","dataView","fromCharCode","getUint8","isEqual","memoize","compute","cachedResult","cachedArgs","COMPOSITE_GL_TYPES","getPrimitiveDrawMode","decomposeCompositeGLType","compositeGLType","typeAndSize","components","getCompositeGLType","compType","compComponents","TEXTURE_FORMATS","DATA_FORMAT_CHANNELS","TYPE_SIZES","isFormatSupported","gl1","isLinearFilteringSupported","sqrLen","ORIGIN","origin","matrix4","matrix3","matrix2","Function","toArrayBuffer","_toArrayBuffer","compareArrayBuffers","arrayBuffer1","arrayBuffer2","array1","array2","concatenateArrayBuffers","sources","sourceArrays","source2","reduce","sourceArray","sliceArrayBuffer","subArray","WebMercatorViewport","worldOffset","legacyMeterSizes","projectionParameters","viewOffset","multiplyLeft","_subViewports","_pseudoMeters","minOffset","maxOffset","offsetViewport","fromLocation","toLocation","corners","convertToObjectRow","arrayRow","objectRow","convertToArrayRow","_Symbol$asyncIterator","ArrayQueue","_values","_settlers","_closed","dequeue","settler","schema","_headers","row","cursor","rows","rowObject","addObjectRow","arrayRows","rowArray","addArrayRow","objectRows","_reallocateColumns","fieldName","_pruneColumns","field","allocated","oldColumn","columnName","column","DEFAULT_OPTIONS","_this$options","_this$options2","totalLength","limitReached","rowBytes","_estimateRowMB","aggregator","TableBatchType","_getTableBatchType","isChunkComplete","_isFull","_getBatch","rowCount","lastBatchEmittedMs","normalizedBatch","getBatch","batchCount","ArrowBatch","Papa","_input","_config","UserDefinedStreamer","dynamicTyping","dynamicTypingFunction","transform","WORKERS_SUPPORTED","newWorker","userStep","userChunk","userComplete","complete","userError","workerId","streamer","StringStreamer","stream","unparse","_quotes","_writeHeader","_delimiter","_newline","_quoteChar","_escapedQuote","_skipEmptyLines","_columns","delimiter","BAD_DELIMITERS","quotes","skipEmptyLines","newline","quoteChar","header","escapeChar","unpackConfig","quoteCharRegex","escapeRegExp","serialize","objectKeys","fields","csv","hasHeader","dataKeyedByField","safe","maxCol","emptyLine","nullLine","trim","line","col","colIdx","str","toString","substrings","hasAny","charAt","RECORD_SEP","UNIT_SEP","BYTE_ORDER_MARK","NODE_STREAM_INPUT","LocalChunkSize","RemoteChunkSize","DefaultDelimiter","Parser","ParserHandle","ChunkStreamer","_finished","_completed","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","errors","configCopy","chunkSize","parseChunk","isFakeChunk","beforeFirstChunk","modifiedChunk","aggregate","results","paused","aborted","lastIndex","substring","finishedIncludingPreview","preview","_sendError","remaining","_parser","_delimiterError","FLOAT","ISO_DATE","_stepCounter","_rowCounter","_paused","_aborted","_fields","_results","needsHeaderRow","processResults","testEmptyLine","addError","addHeder","transformHeader","fillHeaderFields","processRow","rowSource","parseDynamic","incrementBy","applyHeaderAndDynamicTypingAndTransformation","shouldApplyDynamicTyping","baseIndex","ignoreLastRow","re","split","nAppearsFirst","numWithN","guessLineEndings","delimGuess","comments","delimitersToGuess","bestDelim","bestDelta","fieldCountPrevRow","delim","avgFieldCount","emptyLinesCount","fieldCount","successful","bestDelimiter","guessDelimiter","parserConfig","pause","getCharIndex","resume","fastMode","inputLen","delimLen","newlineLen","commentsLen","stepIsFunction","lastCursor","returnable","pushRow","doStep","quoteSearch","nextDelim","nextNewline","saveRow","finish","spacesBetweenQuoteAndDelimiter","extraSpaces","spacesBetweenQuoteAndNewLine","spaceLength","textBetweenClosingQuoteAndIndex","newCursor","stopped","linebreak","truncated","cpy","AsyncIteratorStreamer","textDecoder","encoding","getStringChunk","DEFAULT_CSV_LOADER_OPTIONS","optimizeMemoryUsage","columnPrefix","CSVLoader","category","parseCSV","_options","csvOptions","asyncQueue","isFirstRow","headerRow","tableBatchBuilder","download","flat","isHeaderRow","duplicateColumnTransformer","generateHeader","deduceSchema","addRow","getFullBatch","getFinalBatch","csvText","firstRow","readFirstRow","parseWithHeader","papaparseConfig","every","observedColumns","Set","colName","counter","has","lastPickedObject","lastTooltip","DEFAULT_STYLE","fontFamily","display","flex","flexDirection","getDiv","getTooltipDefault","pickedInfo","picked","tooltip","html","tabularize","EXCLUDES","dataTable","textContent","valueElement","toText","setStyles","appendChild","innerHTML","fontWeight","marginRight","overflow","whiteSpace","textOverflow","justifyContent","alignItems","jsonValue","substituteIn","template","output","k","subkey","replaceAll","scriptLoadPromises","BOX_STYLE","margin","overflowX","overflowY","outline","maxHeight","boxSizing","backgroundColor","DescriptionCard","container","description","div","el","textContainer","append","classesFilter","functionsFilter","extractElements","library","dict","elements","jsonConverterConfiguration","classes","enumerations","GL","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","COLOR_BUFFER_BIT","ONE","SRC_COLOR","ONE_MINUS_SRC_COLOR","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","CONSTANT_COLOR","ONE_MINUS_CONSTANT_COLOR","CONSTANT_ALPHA","ONE_MINUS_CONSTANT_ALPHA","FUNC_ADD","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","BLEND_EQUATION","BLEND_EQUATION_RGB","BLEND_EQUATION_ALPHA","BLEND_DST_RGB","BLEND_SRC_RGB","BLEND_DST_ALPHA","BLEND_SRC_ALPHA","BLEND_COLOR","ARRAY_BUFFER_BINDING","ELEMENT_ARRAY_BUFFER_BINDING","LINE_WIDTH","ALIASED_POINT_SIZE_RANGE","ALIASED_LINE_WIDTH_RANGE","CULL_FACE_MODE","FRONT_FACE","DEPTH_RANGE","DEPTH_WRITEMASK","DEPTH_CLEAR_VALUE","DEPTH_FUNC","STENCIL_CLEAR_VALUE","STENCIL_FUNC","STENCIL_FAIL","STENCIL_PASS_DEPTH_FAIL","STENCIL_PASS_DEPTH_PASS","STENCIL_REF","STENCIL_VALUE_MASK","STENCIL_WRITEMASK","STENCIL_BACK_FUNC","STENCIL_BACK_FAIL","STENCIL_BACK_PASS_DEPTH_FAIL","STENCIL_BACK_PASS_DEPTH_PASS","STENCIL_BACK_REF","STENCIL_BACK_VALUE_MASK","STENCIL_BACK_WRITEMASK","VIEWPORT","SCISSOR_BOX","COLOR_CLEAR_VALUE","COLOR_WRITEMASK","UNPACK_ALIGNMENT","PACK_ALIGNMENT","MAX_TEXTURE_SIZE","MAX_VIEWPORT_DIMS","SUBPIXEL_BITS","RED_BITS","GREEN_BITS","BLUE_BITS","ALPHA_BITS","DEPTH_BITS","STENCIL_BITS","POLYGON_OFFSET_UNITS","POLYGON_OFFSET_FACTOR","TEXTURE_BINDING_2D","SAMPLE_BUFFERS","SAMPLES","SAMPLE_COVERAGE_VALUE","SAMPLE_COVERAGE_INVERT","COMPRESSED_TEXTURE_FORMATS","VENDOR","RENDERER","IMPLEMENTATION_COLOR_READ_TYPE","IMPLEMENTATION_COLOR_READ_FORMAT","BROWSER_DEFAULT_WEBGL","STATIC_DRAW","STREAM_DRAW","DYNAMIC_DRAW","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","BUFFER_SIZE","BUFFER_USAGE","CURRENT_VERTEX_ATTRIB","VERTEX_ATTRIB_ARRAY_ENABLED","VERTEX_ATTRIB_ARRAY_SIZE","VERTEX_ATTRIB_ARRAY_STRIDE","VERTEX_ATTRIB_ARRAY_TYPE","VERTEX_ATTRIB_ARRAY_NORMALIZED","VERTEX_ATTRIB_ARRAY_POINTER","VERTEX_ATTRIB_ARRAY_BUFFER_BINDING","CULL_FACE","FRONT","BACK","FRONT_AND_BACK","BLEND","DEPTH_TEST","DITHER","POLYGON_OFFSET_FILL","SAMPLE_ALPHA_TO_COVERAGE","SAMPLE_COVERAGE","SCISSOR_TEST","STENCIL_TEST","NO_ERROR","INVALID_ENUM","INVALID_VALUE","INVALID_OPERATION","OUT_OF_MEMORY","CONTEXT_LOST_WEBGL","CW","CCW","DONT_CARE","FASTEST","NICEST","GENERATE_MIPMAP_HINT","BYTE","UNSIGNED_BYTE","SHORT","UNSIGNED_SHORT","INT","UNSIGNED_INT","DOUBLE","DEPTH_COMPONENT","ALPHA","RGB","RGBA","LUMINANCE","LUMINANCE_ALPHA","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","COMPILE_STATUS","DELETE_STATUS","LINK_STATUS","VALIDATE_STATUS","ATTACHED_SHADERS","ACTIVE_ATTRIBUTES","ACTIVE_UNIFORMS","MAX_VERTEX_ATTRIBS","MAX_VERTEX_UNIFORM_VECTORS","MAX_VARYING_VECTORS","MAX_COMBINED_TEXTURE_IMAGE_UNITS","MAX_VERTEX_TEXTURE_IMAGE_UNITS","MAX_TEXTURE_IMAGE_UNITS","MAX_FRAGMENT_UNIFORM_VECTORS","SHADER_TYPE","SHADING_LANGUAGE_VERSION","CURRENT_PROGRAM","NEVER","ALWAYS","LESS","EQUAL","LEQUAL","GREATER","GEQUAL","NOTEQUAL","KEEP","REPLACE","INCR","DECR","INVERT","INCR_WRAP","DECR_WRAP","NEAREST","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_LINEAR","TEXTURE_MAG_FILTER","TEXTURE_2D","TEXTURE","TEXTURE_CUBE_MAP","TEXTURE_BINDING_CUBE_MAP","TEXTURE_CUBE_MAP_POSITIVE_X","TEXTURE_CUBE_MAP_NEGATIVE_X","TEXTURE_CUBE_MAP_POSITIVE_Y","TEXTURE_CUBE_MAP_NEGATIVE_Y","TEXTURE_CUBE_MAP_POSITIVE_Z","TEXTURE_CUBE_MAP_NEGATIVE_Z","MAX_CUBE_MAP_TEXTURE_SIZE","TEXTURE0","ACTIVE_TEXTURE","REPEAT","MIRRORED_REPEAT","TEXTURE_WIDTH","TEXTURE_HEIGHT","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D","SAMPLER_CUBE","LOW_FLOAT","MEDIUM_FLOAT","HIGH_FLOAT","LOW_INT","MEDIUM_INT","HIGH_INT","FRAMEBUFFER","RENDERBUFFER","RGBA4","RGB5_A1","RGB565","DEPTH_COMPONENT16","STENCIL_INDEX","STENCIL_INDEX8","DEPTH_STENCIL","RENDERBUFFER_WIDTH","RENDERBUFFER_HEIGHT","RENDERBUFFER_INTERNAL_FORMAT","RENDERBUFFER_RED_SIZE","RENDERBUFFER_GREEN_SIZE","RENDERBUFFER_BLUE_SIZE","RENDERBUFFER_ALPHA_SIZE","RENDERBUFFER_DEPTH_SIZE","RENDERBUFFER_STENCIL_SIZE","FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE","FRAMEBUFFER_ATTACHMENT_OBJECT_NAME","FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL","FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE","COLOR_ATTACHMENT0","DEPTH_ATTACHMENT","STENCIL_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","NONE","FRAMEBUFFER_COMPLETE","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_BINDING","RENDERBUFFER_BINDING","READ_FRAMEBUFFER","DRAW_FRAMEBUFFER","MAX_RENDERBUFFER_SIZE","INVALID_FRAMEBUFFER_OPERATION","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_COLORSPACE_CONVERSION_WEBGL","READ_BUFFER","UNPACK_ROW_LENGTH","UNPACK_SKIP_ROWS","UNPACK_SKIP_PIXELS","PACK_ROW_LENGTH","PACK_SKIP_ROWS","PACK_SKIP_PIXELS","TEXTURE_BINDING_3D","UNPACK_SKIP_IMAGES","UNPACK_IMAGE_HEIGHT","MAX_3D_TEXTURE_SIZE","MAX_ELEMENTS_VERTICES","MAX_ELEMENTS_INDICES","MAX_TEXTURE_LOD_BIAS","MAX_FRAGMENT_UNIFORM_COMPONENTS","MAX_VERTEX_UNIFORM_COMPONENTS","MAX_ARRAY_TEXTURE_LAYERS","MIN_PROGRAM_TEXEL_OFFSET","MAX_PROGRAM_TEXEL_OFFSET","MAX_VARYING_COMPONENTS","FRAGMENT_SHADER_DERIVATIVE_HINT","RASTERIZER_DISCARD","VERTEX_ARRAY_BINDING","MAX_VERTEX_OUTPUT_COMPONENTS","MAX_FRAGMENT_INPUT_COMPONENTS","MAX_SERVER_WAIT_TIMEOUT","MAX_ELEMENT_INDEX","RGB8","RGBA8","RGB10_A2","TEXTURE_3D","TEXTURE_WRAP_R","TEXTURE_MIN_LOD","TEXTURE_MAX_LOD","TEXTURE_BASE_LEVEL","TEXTURE_MAX_LEVEL","TEXTURE_COMPARE_MODE","TEXTURE_COMPARE_FUNC","SRGB","SRGB8","SRGB8_ALPHA8","COMPARE_REF_TO_TEXTURE","RGBA32F","RGB32F","RGBA16F","RGB16F","TEXTURE_2D_ARRAY","TEXTURE_BINDING_2D_ARRAY","R11F_G11F_B10F","RGB9_E5","RGBA32UI","RGB32UI","RGBA16UI","RGB16UI","RGBA8UI","RGB8UI","RGBA32I","RGB32I","RGBA16I","RGB16I","RGBA8I","RGB8I","RED_INTEGER","RGB_INTEGER","RGBA_INTEGER","R8","RG8","R16F","R32F","RG16F","RG32F","R8I","R8UI","R16I","R16UI","R32I","R32UI","RG8I","RG8UI","RG16I","RG16UI","RG32I","RG32UI","R8_SNORM","RG8_SNORM","RGB8_SNORM","RGBA8_SNORM","RGB10_A2UI","TEXTURE_IMMUTABLE_FORMAT","TEXTURE_IMMUTABLE_LEVELS","UNSIGNED_INT_2_10_10_10_REV","UNSIGNED_INT_10F_11F_11F_REV","UNSIGNED_INT_5_9_9_9_REV","FLOAT_32_UNSIGNED_INT_24_8_REV","UNSIGNED_INT_24_8","HALF_FLOAT","RG","RG_INTEGER","INT_2_10_10_10_REV","CURRENT_QUERY","QUERY_RESULT","QUERY_RESULT_AVAILABLE","ANY_SAMPLES_PASSED","ANY_SAMPLES_PASSED_CONSERVATIVE","DRAW_BUFFER0","DRAW_BUFFER1","DRAW_BUFFER2","DRAW_BUFFER3","DRAW_BUFFER4","DRAW_BUFFER5","DRAW_BUFFER6","DRAW_BUFFER7","DRAW_BUFFER8","DRAW_BUFFER9","DRAW_BUFFER10","DRAW_BUFFER11","DRAW_BUFFER12","DRAW_BUFFER13","DRAW_BUFFER14","DRAW_BUFFER15","COLOR_ATTACHMENT1","COLOR_ATTACHMENT2","COLOR_ATTACHMENT3","COLOR_ATTACHMENT4","COLOR_ATTACHMENT5","COLOR_ATTACHMENT6","COLOR_ATTACHMENT7","COLOR_ATTACHMENT8","COLOR_ATTACHMENT9","COLOR_ATTACHMENT10","COLOR_ATTACHMENT11","COLOR_ATTACHMENT12","COLOR_ATTACHMENT13","COLOR_ATTACHMENT14","COLOR_ATTACHMENT15","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","MAX_SAMPLES","SAMPLER_BINDING","PIXEL_PACK_BUFFER","PIXEL_UNPACK_BUFFER","PIXEL_PACK_BUFFER_BINDING","PIXEL_UNPACK_BUFFER_BINDING","COPY_READ_BUFFER","COPY_WRITE_BUFFER","COPY_READ_BUFFER_BINDING","COPY_WRITE_BUFFER_BINDING","FLOAT_MAT2x3","FLOAT_MAT2x4","FLOAT_MAT3x2","FLOAT_MAT3x4","FLOAT_MAT4x2","FLOAT_MAT4x3","UNSIGNED_INT_VEC2","UNSIGNED_INT_VEC3","UNSIGNED_INT_VEC4","UNSIGNED_NORMALIZED","SIGNED_NORMALIZED","VERTEX_ATTRIB_ARRAY_INTEGER","VERTEX_ATTRIB_ARRAY_DIVISOR","TRANSFORM_FEEDBACK_BUFFER_MODE","MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS","TRANSFORM_FEEDBACK_VARYINGS","TRANSFORM_FEEDBACK_BUFFER_START","TRANSFORM_FEEDBACK_BUFFER_SIZE","TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN","MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS","MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS","INTERLEAVED_ATTRIBS","SEPARATE_ATTRIBS","TRANSFORM_FEEDBACK_BUFFER","TRANSFORM_FEEDBACK_BUFFER_BINDING","TRANSFORM_FEEDBACK","TRANSFORM_FEEDBACK_PAUSED","TRANSFORM_FEEDBACK_ACTIVE","TRANSFORM_FEEDBACK_BINDING","FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING","FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE","FRAMEBUFFER_ATTACHMENT_RED_SIZE","FRAMEBUFFER_ATTACHMENT_GREEN_SIZE","FRAMEBUFFER_ATTACHMENT_BLUE_SIZE","FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE","FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE","FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE","FRAMEBUFFER_DEFAULT","DEPTH24_STENCIL8","DRAW_FRAMEBUFFER_BINDING","READ_FRAMEBUFFER_BINDING","RENDERBUFFER_SAMPLES","FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE","UNIFORM_BUFFER","UNIFORM_BUFFER_BINDING","UNIFORM_BUFFER_START","UNIFORM_BUFFER_SIZE","MAX_VERTEX_UNIFORM_BLOCKS","MAX_FRAGMENT_UNIFORM_BLOCKS","MAX_COMBINED_UNIFORM_BLOCKS","MAX_UNIFORM_BUFFER_BINDINGS","MAX_UNIFORM_BLOCK_SIZE","MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS","MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS","UNIFORM_BUFFER_OFFSET_ALIGNMENT","ACTIVE_UNIFORM_BLOCKS","UNIFORM_TYPE","UNIFORM_SIZE","UNIFORM_BLOCK_INDEX","UNIFORM_OFFSET","UNIFORM_ARRAY_STRIDE","UNIFORM_MATRIX_STRIDE","UNIFORM_IS_ROW_MAJOR","UNIFORM_BLOCK_BINDING","UNIFORM_BLOCK_DATA_SIZE","UNIFORM_BLOCK_ACTIVE_UNIFORMS","UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES","UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER","UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER","OBJECT_TYPE","SYNC_CONDITION","SYNC_STATUS","SYNC_FLAGS","SYNC_FENCE","SYNC_GPU_COMMANDS_COMPLETE","UNSIGNALED","SIGNALED","ALREADY_SIGNALED","TIMEOUT_EXPIRED","CONDITION_SATISFIED","WAIT_FAILED","SYNC_FLUSH_COMMANDS_BIT","DEPTH","STENCIL","MIN","MAX","DEPTH_COMPONENT24","STREAM_READ","STREAM_COPY","STATIC_READ","STATIC_COPY","DYNAMIC_READ","DYNAMIC_COPY","DEPTH_COMPONENT32F","DEPTH32F_STENCIL8","INVALID_INDEX","TIMEOUT_IGNORED","MAX_CLIENT_WAIT_TIMEOUT_WEBGL","VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_R11_EAC","COMPRESSED_SIGNED_R11_EAC","COMPRESSED_RG11_EAC","COMPRESSED_SIGNED_RG11_EAC","COMPRESSED_RGB8_ETC2","COMPRESSED_RGBA8_ETC2_EAC","COMPRESSED_SRGB8_ETC2","COMPRESSED_SRGB8_ALPHA8_ETC2_EAC","COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","COMPRESSED_RGB_ATC_WEBGL","COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","UNSIGNED_INT_24_8_WEBGL","HALF_FLOAT_OES","RGBA32F_EXT","RGB32F_EXT","FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT","UNSIGNED_NORMALIZED_EXT","MIN_EXT","MAX_EXT","SRGB_EXT","SRGB_ALPHA_EXT","SRGB8_ALPHA8_EXT","FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT","FRAGMENT_SHADER_DERIVATIVE_HINT_OES","COLOR_ATTACHMENT0_WEBGL","COLOR_ATTACHMENT1_WEBGL","COLOR_ATTACHMENT2_WEBGL","COLOR_ATTACHMENT3_WEBGL","COLOR_ATTACHMENT4_WEBGL","COLOR_ATTACHMENT5_WEBGL","COLOR_ATTACHMENT6_WEBGL","COLOR_ATTACHMENT7_WEBGL","COLOR_ATTACHMENT8_WEBGL","COLOR_ATTACHMENT9_WEBGL","COLOR_ATTACHMENT10_WEBGL","COLOR_ATTACHMENT11_WEBGL","COLOR_ATTACHMENT12_WEBGL","COLOR_ATTACHMENT13_WEBGL","COLOR_ATTACHMENT14_WEBGL","COLOR_ATTACHMENT15_WEBGL","DRAW_BUFFER0_WEBGL","DRAW_BUFFER1_WEBGL","DRAW_BUFFER2_WEBGL","DRAW_BUFFER3_WEBGL","DRAW_BUFFER4_WEBGL","DRAW_BUFFER5_WEBGL","DRAW_BUFFER6_WEBGL","DRAW_BUFFER7_WEBGL","DRAW_BUFFER8_WEBGL","DRAW_BUFFER9_WEBGL","DRAW_BUFFER10_WEBGL","DRAW_BUFFER11_WEBGL","DRAW_BUFFER12_WEBGL","DRAW_BUFFER13_WEBGL","DRAW_BUFFER14_WEBGL","DRAW_BUFFER15_WEBGL","QUERY_COUNTER_BITS_EXT","CURRENT_QUERY_EXT","QUERY_RESULT_EXT","QUERY_RESULT_AVAILABLE_EXT","TIME_ELAPSED_EXT","TIMESTAMP_EXT","registerLoaders","jsonConverter","addCustomLibraries","customLibraries","onComplete","libraryName","resourceUri","onModuleLoaded","script","querySelector","loadScript","converter","newConfiguration","functions","mergeConfiguration","addModuleToConverter","updateDeck","inputJson","deckgl","convert","createStandaloneFromProvider","mapProvider","mapboxApiKey","googleMapsKey","getTooltip","sharedProps","onClick","onHover","onResize","onDragStart","onDrag","onDragEnd","mapboxgl","mapboxApiAccessToken","onLoad","modifyMapboxElements","mapStyle","initialViewState","deckOverlay","mapTypeId","google","maps","Map","setMap","createGoogleMapsDeckOverlay","createDeck","jsonInput","oldLayers","parentContainer","uiElementsOverlay","insertAdjacentElement","addSupportComponents","convertedLayers","layerToLoad","newLayers","ol","nl","missingLayers","formattedTooltip","makeTooltip","getLoaderContext","previousContext","resolvedContext","getLoadersFromContext","contextLoaders","process_","pathPrefix","fileAliases","setPathPrefix","getPathPrefix","resolvePath","alias","replacement","toBuffer","bufferToArrayBuffer","DEFAULT_LIGHT_DIRECTION","_shadow","toArray","shadow","fetchFile","fp32","defines","COORDINATE_SYSTEM_GLSL_CONSTANTS","PROJECTION_MODE_GLSL_CONSTANTS","UNIT_GLSL_CONSTANTS","INITIAL_MODULE_OPTIONS","dependencies","projectShader","getUniforms","coreVersion","workerVersion","validateWorkerVersion","redirected","fromEntries","parseWithLoader","isSupported","crossOrigin","makeResponse","initialDataUrl","blobSlice","readAsDataURL","base64","btoa","arrayBufferToBase64","getInitialDataUrl","checkResponse","contentType","getResponseError","EXT_FLOAT_WEBGL2","bpp","formats","bindRenderbuffer","renderbufferStorageMultisample","renderbufferStorage","createRenderbuffer","deleteRenderbuffer","getRenderbufferParameter","userAgent","navigator","passiveSupported","getGlobalLoaderRegistry","loaderRegistry","normalizedLoader","registeredLoader","getRegisteredLoaders","_unregisterLoaders","startPanLngLat","startZoomLngLat","_unproject","startPos","_getNewRotation","zoomedViewport","_zoomFromCenter","_panFromCenter","deltaY","centerY","startY","deltaScaleX","deltaScaleY","MapController","_propsToCompare","_requiredProps","currentProps","nextProps","startViewStateProps","endViewStateProps","_checkRequiredProps","propName","OrbitState","minRotationX","maxRotationX","startPanPosition","startRotationX","startRotationOrbit","startPosition","_calculateNewZoom","PolygonTesselator","IndexType","vertexValid","externalIndices","getGeometry","normalizedPolygon","Polygon","isCut","subPolygon","getGeometrySize","geometrySize","updateGeometryAttributes","vertexStart","indexStart","indexStarts","geometryIndex","_updateIndices","_updatePositions","_updateVertexValid","polygonPositions","Tesselator","main","DEFAULT_COLOR","filled","extruded","wireframe","_normalize","_windingOrder","_full3d","elevationScale","getPolygon","getElevation","getFillColor","getLineColor","material","ATTRIBUTE_TRANSITION","enter","SolidPolygonLayer","vsTop","vsSide","RING_WINDING_ORDER_CW","gouraudLighting","polygonTesselator","hasFeatures","FEATURES","ELEMENT_INDEX_UINT32","calculateIndices","calculatePositions","shaderAttributes","vertexOffset","instancePositions","nextPositions","calculateVertexValid","elevations","instanceElevations","fillColors","colorFormat","defaultValue","instanceFillColors","lineColors","instanceLineColors","pickingColors","__source","instancePickingColors","objectIndex","_disablePickingIndex","topModel","sideModel","renderUniforms","setInstanceCount","instanceCount","setDrawMode","isWireframe","updateParams","updateGeometry","models","_getModels","dataChanged","updateTriggersChanged","all","geometryBuffer","positionFormat","vertexStarts","shaders","NON_INSTANCED_MODEL","vertexPositions","isSideVertex","excludeAttributes","PathTesselator","segmentTypes","flatPath","normalizePath","subPath","getPathLength","_updateSegmentTypes","isPathClosed","ptIndex","getPointOnPath","loop","lastPointIndex","widthUnits","widthScale","widthMinPixels","widthMaxPixels","MAX_SAFE_INTEGER","jointRounded","capRounded","miterLimit","billboard","_pathType","getPath","getWidth","rounded","deprecatedFor","PathLayer","addInstanced","instanceLeftPositions","instanceStartPositions","instanceEndPositions","instanceRightPositions","instanceTypes","calculateSegmentTypes","instanceStrokeWidths","instanceColors","pathTesselator","jointType","capType","DEFAULT_TEXTURE_PARAMETERS","getIconId","icon","buildRowMapping","mapping","yOffset","xOffset","IconManager","_texture","_externalTexture","_autoPacking","_mapping","loadOptions","autoPacking","iconAtlas","iconMapping","textureParameters","_loadOptions","_textureParameters","_pendingCount","getIcon","oldWidth","oldHeight","newTexture","icons","cachedIcons","getDiffIcons","rowHeight","buildMapping","_buffer","_canvasWidth","_rowHeight","_xOffset","_yOffset","_canvasHeight","Texture2D","copyToTexture","targetY","_canvas","_loadIcons","ctx","load","ImageLoader","imageData","clearRect","drawImage","resizeImage","catch","finally","sizeScale","sizeUnits","sizeMinPixels","sizeMaxPixels","alphaCutoff","getSize","getAngle","getPixelOffset","onIconError","optional","IconLayer","iconManager","_onError","instanceSizes","instanceOffsets","getInstanceOffset","instanceIconFrames","getInstanceIconFrame","instanceColorModes","getInstanceColorMode","instanceAngles","instancePixelOffset","prePacked","isAsyncPropLoading","packIcons","isLoaded","iconsTexture","getTexture","iconsTextureDim","setNeedsRedraw","evt","getCurrentLayer","getIconMapping","anchorX","anchorY","Vector","lengthSquared","ELEMENTS","mathArray","distanceSquared","dist","product","magnitude","vectors","subtract","multiplyScalar","MathArray","cls","ExtendableBuiltin","construct","_extendableBuiltin","targetArray","arrayOrObject","fromObject","toObject","to","minVector","maxVector","scalar","valid","addScalar","multiplyByScalar","getMemoizedViewportCenterPosition","getMemoizedViewProjectionMatrices","shadowMatrices","projectionMatrices","farZ","shadowMatrix","corner","DEFAULT_SHADOW_COLOR","VECTOR_TO_POINT_MATRIX","createShadowUniforms","shadowEnabled","shadow_uDrawShadowMap","shadow_uUseShadowMap","drawToShadowMap","shadowMaps","shadow_uColor","shadowColor","shadow_uLightId","shadowLightId","shadow_uLightCount","project_uCenter","projectCenters","viewProjectionMatrices","viewProjectionMatrixCentered","project_uCoordinateSystem","project_uProjectionMode","dummyShadowMap","inject","DEFAULT_PIXELS_PER_UNIT2","DEFAULT_COORDINATE_ORIGIN","getMemoizedViewportUniforms","projectionCenter","originCommon","cameraPosCommon","getOffsetOrigin","geospatialOrigin","shaderCoordinateOrigin","offsetMode","vec4","calculateMatrixAndOffset","viewportSize","projectionMode","project_uCoordinateOrigin","project_uCommonOrigin","project_uPseudoMeters","project_uViewportSize","project_uDevicePixelRatio","project_uFocalDistance","project_uCommonUnitsPerMeter","project_uCommonUnitsPerWorldUnit","project_uCommonUnitsPerWorldUnit2","project_uScale","project_uWrapLongitude","project_uViewProjectionMatrix","project_uModelMatrix","distanceScalesAtOrigin","_viewportProps","applyConstraints","ERR_DATA","getArrayBufferOrStringFromDataSync","getArrayBufferOrStringFromData","isArrayBuffer","getAsyncIterableFromData","getIterableFromData","makeStreamIterator","nextBatchPromise","currentBatchPromise","_streamReadAhead","releaseLock","makeBrowserStreamIterator","makeNodeStreamIterator","makeIterator","textEncoder","chunkLength","makeStringIterator","chunkByteLength","makeArrayBufferIterator","makeBlobIterator","MODULE_VERSION","__VERSION__","MODULE_NAME","Long","low","high","unsigned","isLong","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","fromBits","fromNumber","UZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","MIN_VALUE","MAX_VALUE","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","fromString","radix","RangeError","radixToPower","power","fromValue","val","TWO_PWR_16_DBL","TWO_PWR_24","UONE","NEG_ONE","LongPrototype","toInt","toNumber","isZero","isNegative","eq","radixLong","rem1","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","isPositive","isOdd","isEven","notEquals","neq","lessThan","comp","lt","lessThanOrEqual","lte","greaterThan","gt","greaterThanOrEqual","gte","thisNeg","otherNeg","not","addend","a48","a16","b48","b32","b16","c48","c32","c16","c00","subtrahend","divide","approx","res","toUnsigned","shru","shr","shl","LN2","approxRes","approxRem","modulo","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","toSigned","toBytes","le","toBytesLE","toBytesBE","hi","lo","RADIAN_PER_DEGREE","valueArray","calculateTransformMatrix","targetMatrix","yaw","roll","sr","sp","sw","cr","cp","cw","scx","scy","scz","getExtendedMat3FromMat4","MATRIX_ATTRIBUTES","instanceModelMatrix__LOCATION_0","instanceModelMatrix__LOCATION_1","instanceModelMatrix__LOCATION_2","instanceTranslation","getOrientation","getTranslation","getTransformMatrix","arrayMatrix","constantMatrix","constantScale","constantOrientation","constantTranslation","hasMatrix","instanceModelMatrixData","shouldComposeModelMatrix","MAPBOX_CSS_URL","loadMapboxCSS","loadCSS","getElementsByClassName","StatsManager","lumaStats","nodeIO","workerURLCache","getLoadableWorkerURL","workerURL","getLoadableWorkerURLFromSource","workerUrl","getLoadableWorkerURLFromURL","workerSource","URL","createObjectURL","NOOP","Worker","_createBrowserWorker","_createNodeWorker","terminate","terminated","transferList","lineno","colno","_loadableURL","onmessage","_getErrorFromErrorEvent","onmessageerror","eval","workerThread","_resolve","_reject","isRunning","idleQueue","destroy","isDestroyed","onDebug","startPromise","jobQueue","_startQueuedJob","_getAvailableWorker","queuedJob","backlog","returnWorkerToQueue","_getMaxConcurrency","_workerFarm","workerPools","_getWorkerPoolProps","makeTextDecoderIterator","arrayBufferIterator","makeTextEncoderIterator","textIterator","makeLineIterator","previous","textChunk","eolIndex","makeNumberedLineIterator","lineIterator","validateProps","propTypes","getPropTypes","propType","diffProps","propsChangedReason","compareProps","ignoreProps","updateTriggers","transitions","dataChangedReason","dataComparator","_dataDiff","diffDataProps","updateTriggersChangedReason","diffUpdateTrigger","triggerName","diffUpdateTriggers","propsChanged","diffExtensions","transitionsChanged","diffTransitions","comparePropValues","newProp","oldProp","equal","oldExtensions","newTriggers","oldTriggers","LayerType","_propTypes","ShadowPass","shadowMap","depthBuffer","Renderbuffer","fbo","DEFAULT_AMBIENT_LIGHT_PROPS","DEFAULT_DIRECTIONAL_LIGHT_PROPS","LightingEffect","lightSource","ambientLight","directionalLights","pointLights","_applyDefaultLights","light","_calculateMatrices","shadowPasses","_createShadowPasses","programManager","ProgramManager","getDefaultProgramManager","addDefaultModule","lightSources","directionalLight","getProjectedLight","pointLight","removeDefaultModule","lightMatrices","shadowPass","AmbientLight","checkProps","propChecks","removed","replacementProp","lngLatZToWorldPosition","getWorldPosition","normalizeParameters","positionCommonSpace","convertColor","component","getLightSourceUniforms","lightSourceUniforms","lighting_uPointLightCount","lighting_uDirectionalLightCount","lights","lighting_uEnabled","MAX_LIGHTS","exportName","VENDOR_PREFIXES","TEST_ELEMENT","setTimeoutContext","bindFn","invokeArrayArg","each","deprecate","deprecationMessage","stack","nextKey","extend","dest","merge","inherit","properties","childP","baseP","_super","boolOrFn","ifUndefined","val1","val2","addEventListeners","splitStr","removeEventListeners","hasParent","node","parentNode","inStr","inArray","findByKey","uniqueArray","prefixed","prop","camelProp","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","PROPS_XY","PROPS_CLIENT_XY","Input","manager","callback","inputTarget","domHandler","ev","init","inputHandler","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","getDistance","offsetDelta","prevDelta","prevInput","computeDeltaXY","offsetDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","getRotation","maxPointers","lastInterval","computeIntervalInputData","computeInputData","recognize","clientX","clientY","evEl","evTarget","evWin","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MouseInput","pressed","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SingleTouchInput","started","normalizeSingleTouches","touches","changedTouches","TOUCH_INPUT_MAP","TouchInput","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","touch","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","actions","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","DIRECTION_LEFT","DIRECTION_UP","preventSrc","Recognizer","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","attrTest","optionPointers","isRecognized","isValid","threshold","DIRECTION_HORIZONTAL","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","oldCssProps","toggleCssProps","item","force","curRecognizer","existing","events","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_VERTICAL","DIRECTION_ALL","Tap","Pan","Swipe","Pinch","Rotate","Press","padToNBytes","copyToArray","targetOffset","srcByteLength","MapView","TRANSITION_EVENTS","BREAK","SNAP_TO_END","IGNORE","DEFAULT_EASING","DEFAULT_INTERRUPTION","interpolator","interpolateProps","transitionTriggered","_shouldIgnoreViewportChange","_isTransitionEnabled","inProgress","interruption","_triggerTransition","arePropsEqual","_isUpdateDueToCurrentTransition","startViewstate","shortestPathFrom","getDuration","initialProps","initializeProps","transitionSettings","transitionInterruption","onTransitionStart","_onTransitionUpdate","_onTransitionEnd","onTransitionInterrupt","onTransitionEnd","inTransition","visitor","concatenateArrayBuffersAsync","arrayBuffers","DEFAULT_MODULES","SHADER_HOOKS","createProgramManager","shaderModule","shaderHook","addShaderHook","OrthographicView","OrthographicViewport","OrthographicController","getProjectionMatrix","flipY","zoomX","zoomY","zoom_","OrthographicState","zoomAxis","deltaZoom","newZoomX","newZoomY","isPlainObject","mergeShaders","mergedInjection","halfFov","GLOBE_RADIUS","lSqr","l0Sqr","l1Sqr","sSqr","dSqr","dr","cosPhi","D","CPUInterpolationTransition","_value","toValue","updateSpringElement","cur","value1","value2","distanceSquare","CPUSpringTransition","_currValue","_prevValue","nextValue","updateSpring","TRANSITION_TYPES","UniformTransitionManager","TransitionType","internalTextures","TYPE_DEFINITIONS","boolean","arrayEqual","valueType","getTypeOf","function","dataTransform","specialTextureParameters","release","parsePropType","propDef","normalizePropDefinition","createProps","propObjects","propsPrototype","getPropsPrototype","propsInstance","componentClass","getOwnProperty","parentClass","parentDefaultProps","componentPropDefs","propDefs","parsePropTypes","parentProps","componentName","getComponentName","defineProperties","createPropsPrototype","defaultValues","descriptors","getDescriptorForAsyncProp","addAsyncPropsToPropPrototype","_deprecatedProps","newValue","nameStr","newPropName","addDeprecatedPropsToPropPrototype","_mergedDefaultProps","createPropsPrototypeAndTypes","hasAsyncProp","getAsyncProp","Component","asyncProps","EMPTY_PROPS","LayerState","needsRedraw","needsUpdate","subLayers","usesPickingColorCache","onDataLoad","onAsyncPropUpdated","oldAsyncProps","asyncProp","resolvedValue","pendingLoadCount","resolvedLoadCount","_watchPromise","resolvedValues","originalValues","_createAsyncPropData","_updateAsyncProp","_didAsyncInputValueChange","_resolveAsyncIterable","_setPropValue","lastValue","_freezeAsyncOldProps","_postProcessValue","loadCount","promise","_setAsyncPropValue","_onResolve","MAX_PICKING_COLOR_CACHE_SIZE","areViewportsEqual","oldViewport","pickingColorCache","__diff","resourceManager","getLoadOptions","inResourceManager","contains","resourceId","persistent","subscribe","onChange","reloadAsyncProp","consumerId","requestId","opacity","operation","getPolygonOffset","highlightedObjectIndex","autoHighlight","highlightColor","layerName","partialState","setChangeFlags","stateChanged","layerManager","setNeedsUpdate","getModels","updateModuleSettings","pickingEvent","propsOrDataChanged","dataRange","neededPickingBuffer","isInteger","needPickingBuffer","pickingColorsAttribute","unsubscribe","uniformTransitions","sourceLayer","clearRedrawFlags","_getNeedsRedraw","hasUniformTransition","shouldUpdateState","_getUpdateParams","active","viewportChanged","_update","changedAttributes","_setModelAttributes","getNumInstances","getStartIndices","getChangedAttributes","clearChangedFlags","updateAttributes","cacheSize","newCacheSize","pickingColor","getShaderAttributes","setAttributes","colors","getVertexOffset","updateSubBuffer","startOffset","_getAttributeManager","calculateInstancePickingColors","_clearChangeFlags","_onAsyncPropUpdated","setAsyncProps","initializeState","oldLayer","_diffProps","getOldProps","stateNeedsUpdate","currentViewport","_updateUniformTransition","oldModels","updateState","modelChanged","_postUpdate","resetOldProps","finalizeState","_updateAttributeTransition","setModuleParameters","offsets","flagChanged","prevDataChangedReason","somethingChanged","invalidateAttribute","_updateAutoHighlight","pickingModuleParameters","pickingSelectedColor","pickingHighlightColor","AttributeManager","forceUpdate","_updateAttributes","redraw","attributeManagerNeedsRedraw","getNeedsRedraw","ShaderAttribute","dataColumn","getAccessor","constantValue","getStride","resolveShaderAttribute","baseAccessor","shaderAttributeOptions","DataColumn","bufferType","logicalType","hasFeature","defaultType","glArrayFromType","externalBuffer","bufferAccessor","allocatedValue","isBuffer64Bit","doubleShaderAttributeDefs","resolvedOptions","shaderAttributeDef","_normalizeValue","_areValuesEqual","_checkExternalBuffer","requiredBufferSize","endOffset","illegalArrayType","EMPTY","FULL","rangeList","newRangeList","insertPosition","range0","Attribute","lastExternalBuffer","binaryValue","binaryAccessor","updateRanges","_autoUpdater","_validateAttributeUpdaters","layout","supportsTransition","updated","setData","_checkAttributeArray","clearNeedsUpdate","needsNormalize","shaderAttributeDefs","shaderAttributeName","accessorFunc","objectValue","numVertices","GPUInterpolationTransition","attributeInTransition","currentStartIndices","currentLength","attributeType","Transform","ATTRIBUTE_TYPE","varyings","getTransform","bufferOpts","padBufferOpts","elementCount","sourceBuffers","aFrom","aTo","feedbackBuffers","vCurrent","getFramebuffer","aPrev","aCur","vNext","discard","clearRenderTarget","readPixelsToArray","AttributeTransitionManager","_removeTransition","getTransitionSetting","_updateAttribute","animatedAttributes","isNew","attributeTransitionManager","_add","attributeNameArray","invalidatedAttributes","_invalidateTrigger","timeStart","accessorName","setExternalBuffer","setBinaryValue","setConstantValue","transitionUpdated","getAttributes","hasAttribute","_createAttribute","_mapUpdateTriggersToAttributes","triggers","getUpdateTriggers","updateBuffer","INF","TinySDF","fontSize","cutoff","fontStyle","_createCanvas","willReadFrequently","font","textBaseline","textAlign","fillStyle","gridOuter","gridInner","char","glyphAdvance","actualBoundingBoxAscent","actualBoundingBoxDescent","actualBoundingBoxLeft","actualBoundingBoxRight","measureText","glyphTop","glyphWidth","glyphHeight","glyph","glyphLeft","fillText","imgData","getImageData","edt","gridSize","edt1d","grid","qr","SINGLE_LINE","getTextWidth","layoutWidth","breakAll","rowStartCharIndex","rowOffsetLeft","textWidth","breakWord","groupStartCharIndex","groupEndCharIndex","groupWidth","autoWrapping","wordBreak","transformRow","leftOffsets","rowSize","character","frame","layoutHeight","codePointAt","transformParagraph","paragraph","lineHeight","characters","numCharacters","rowWidth","autoWrappingEnabled","rowOffsetTop","lineStartIndex","lineEndIndex","rowIndex","rowStart","rowEnd","layoutOffsetY","LRUCache","_cache","_deleteOrder","_appendOrder","_order","DEFAULT_FONT_SETTINGS","characterSet","charSet","getDefaultCharacterSet","sdf","smoothing","getNewChars","cacheKey","newCharSet","cachedFontAtlas","populateAlphaChannel","alphaChannel","setTextStyle","FontAtlasManager","_atlas","_getKey","fontAtlas","_generateFontAtlas","getFontWidth","fontHeight","maxCanvasWidth","putImageData","tinySDF","createImageData","TEXT_ANCHOR","middle","ALIGNMENT_BASELINE","getBackgroundColor","getBorderColor","getBorderWidth","backgroundPadding","outlineWidth","outlineColor","fontSettings","getText","getTextAnchor","getAlignmentBaseline","TextLayer","fontAtlasManager","rowOffset","styleVersion","_updateText","_updateFontAtlas","fontProps","textBuffer","autoCharacterSet","characterCount","texts","codes","codesAtIndex","fromCodePoint","charCode","getTextFromBuffer","CharactersLayerClass","getSubLayerClass","MultiIconLayer","BackgroundLayerClass","TextBackgroundLayer","getLineWidth","getSubLayerProps","getBoundingRect","getIconOffsets","setFontAtlasCacheLimit","CompositeLayer","ColumnGeometry","nradial","vertices","flatMap","isExtruded","vertsAroundEdge","stepAngle","normals","vertexIndex","POSITION","NORMAL","tesselateColumn","diskResolution","coverage","radiusUnits","lineWidthUnits","lineWidthScale","lineWidthMinPixels","lineWidthMaxPixels","stroked","ColumnLayer","transpileToGLSL100","useDerivatives","flatShading","GLSL_DERIVATIVES","FLAT_SHADING","phongLighting","regenerateModels","_updateGeometry","hasThinkness","meanVertexDistance","edgeDistance","fillVertexCount","wireframeVertexCount","isStroke","radiusMinPixels","radiusMaxPixels","antialiasing","getRadius","strokeWidth","ScatterplotLayer","instanceRadius","instanceLineWidths","instanceRects","instancePixelOffsets","consumer","_subscribers","_error","_content","_data","_loadCount","ResourceManager","protocol","_resources","_consumers","_pruneRequest","request","prune","resources","_track","_prune","consumers","oldResource","inUse","LayerManager","Stats","Timeline","_finalizeLayer","_needsRedraw","layerNeedsRedraw","_nextLayers","_lastRenderedLayers","_needsUpdate","layerIds","_debug","flatLayers","_updateLayers","setLayers","stage","oldLayerMap","generatedLayers","_updateSublayersRecursively","_finalizeOldLayers","newLayer","sublayers","_transferLayerState","_updateLayer","_initializeLayer","getSubLayers","_handleError","_initialize","lifecycle","_transferState","_finalize","outlineBuffer","gamma","DrawLayersPass","DeckRenderer","drawPickingColors","drawLayersPass","pickLayersPass","PickLayersPass","renderCount","renderBuffers","lastPostProcessEffect","layerPass","getDefaultFramebuffer","_preRender","_postRender","preRender","postRender","_resizeRenderBuffers","onIninitialize","onFinalize","Transport","_messageQueue","transport","onInitialize","_destroyed","isElectron","mockUserAgent","electron","realUserAgent","upgradeMessage","methodName","Matrix","RANK","columnIndex","firstIndex","columnVector","getTransferList","recursive","transfers","transfersSet","isTransferable","MessagePort","OffscreenCanvas","getTransferListForWriter","PICKING_PARAMETERS","pickingFBO","_drawPickingBuffer","deviceRect","pickZ","encodedColors","byLayer","byAlpha","_colors","useInPicking","decodePickingColor","decodeColor","pickingAttribute","pickParameters","encoded","entry","encodeColor","pickedColor","pickedLayer","pickedViewports","pickedObjectIndex","getBinaryImageMetadata","binaryData","toDataView","getUint32","getPngMetadata","getUint16","tableMarkers","sofMarkers","getJpegMarkers","getJpegMetadata","getGifMetadata","getBmpMetadata","replaceInRange","getIndex","replaceStart","replaceEnd","endChunk","objectWithoutPropertiesLoose","excluded","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","link","rel","href","getElementsByTagName","createContainer","DracoLoader","shapes","draco","decoderType","WebAssembly","libraryPath","extraAttributes","attributeNameEntry","usedNames","checkNames","compareTo","columnNames","nameMap","selectedFields","columnIndices","schemaOrFields","otherSchema","mergeMaps","fieldMap","mergedFields","m1","m2","nullable","typeId","_Symbol$toStringTag","_Symbol$toStringTag2","_Symbol$toStringTag3","_Symbol$toStringTag4","_Symbol$toStringTag5","_Symbol$toStringTag6","_Symbol$toStringTag7","_Symbol$toStringTag8","Null","Int","Float","Binary","Utf8","Bool","Decimal","Time","Timestamp","Interval","List","Struct","Union","FixedSizeBinary","FixedSizeList","Dictionary","isSigned","bitWidth","Int8","Int16","Int32","Uint8","Uint16","Uint32","Precision","Float32","Float64","listSize","deduceMeshField","optionalMetadata","getArrowTypeFromTypedArray","byteStride","makeMeshAttributeMetadata","getArrowFieldFromAttribute","loaderData","makeMetadata","metadataMap","DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP","TEX_COORD","DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP","1","6","9","decoder","Decoder","metadataQuerier","MetadataQuerier","DecoderBuffer","Init","_disableAttributeTransforms","geometry_type","GetEncodedGeometryType","dracoGeometry","TRIANGULAR_MESH","Mesh","PointCloud","dracoStatus","DecodeBufferToMesh","POINT_CLOUD","DecodeBufferToPointCloud","ptr","error_msg","_getDracoLoaderData","_getMeshData","boundingBox","getMeshBoundingBox","namedLoaderDataAttributes","dracoAttribute","transformAttributesLoaderData","indicesField","getDracoSchema","num_points","_getTopLevelMetadata","_getDracoAttributes","num_attributes","num_faces","dracoAttributes","attributeId","GetAttribute","_getAttributeMetadata","unique_id","attribute_type","data_type","num_components","byte_offset","byte_stride","attribute_index","quantization","_getQuantizationTransform","quantization_transform","octahedron","_getOctahedronTransform","octahedron_transform","_getMeshAttributes","topology","_getTriangleStripIndices","_getTriangleListIndices","loaderAttribute","_deduceAttributeName","_getAttributeValues","numIndices","_malloc","GetTrianglesUInt32Array","HEAPF32","_free","dracoArray","DracoInt32Array","GetTriangleStripsFromMesh","numValues","intArray","GetValue","getUint32Array","TypedArrayCtor","numComponents","DT_FLOAT32","DT_INT8","DT_INT16","DT_INT32","DT_UINT8","DT_UINT16","DT_UINT32","DT_INVALID","getDracoDataType","GetAttributeDataArrayForAllPoints","uniqueId","attributeUniqueId","thisAttributeType","dracoAttributeConstant","entryName","dracoMetadata","GetMetadata","_getDracoMetadata","GetAttributeMetadata","numEntries","NumEntries","entryIndex","GetEntryName","_getDracoMetadataField","GetIntEntryArray","getInt32Array","int","GetIntEntry","GetStringEntry","double","GetDoubleEntry","quantizedAttributes","octahedronAttributes","skipAttributes","dracoAttributeName","SkipAttributeTransform","AttributeQuantizationTransform","InitFromAttribute","quantization_bits","min_values","min_value","DRACO_JS_DECODER_URL","DRACO_WASM_WRAPPER_URL","DRACO_WASM_DECODER_URL","loadDecoderPromise","loadDracoDecoderModule","draco3d","createDecoderModule","DracoDecoderModule","wasmBinary","initializeDracoDecoder","loadDracoDecoder","dracoParser","getScratchArray","constantAttributeZero","defaultVertexArray","isDefaultArray","MAX_ATTRIBUTES","_setConstantFloatArray","_setConstantIntArray","_setConstantUintArray","bufferValue","getMaxAttributes","elementBuffer","setElementBuffer","vertexAttribIPointer","vertexAttribDivisor","_normalizeConstantArrayValue","updateNeeded","_compareConstantArrayValues","arrayValue","v1","v2","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI1iv","vertexAttribI2iv","vertexAttribI3iv","vertexAttribI4iv","vertexAttribI1uiv","vertexAttribI2uiv","vertexAttribI3uiv","vertexAttribI4uiv","getVertexAttribOffset","MULTI_LOCATION_ATTRIBUTE_REGEXP","DEPRECATIONS_V6","elementsAccessor","unused","drawParams","vertexArrayObject","bindOnUse","_updateDrawParams","locationOrName","_setAttribute","clearDrawParams","appAccessor","_resolveLocationAndAccessor","setBuffer","_setConstantAttributes","valueAccessor","INVALID_RESULT","_getAttributeIndex","accessInfo","_getAttributeInfo","currentAccessor","getAttributeInfo","multiLocation","locationOffset","getAttributeLocation","setConstant","_setConstantAttributeZero","_setConstantAttribute","getConstantBuffer","indexCount","_updateDrawParamsForLocation","indexType","indexOffset","getVertexCount","formatArrayValue","maxElts","terminator","decimal","getDebugTableRow","vertexArray","verts","getDebugData","getGLSLDeclaration","typeAndName","getDebugTableForUniforms","undefinedOnly","uniformLocations","_uniformSetters","uniformNames","uniformName","addUniformToTable","unusedCount","unusedTable","uniform","isDefined","isUniformDefined","attributeInfo","GLTF_TO_LUMA_ATTRIBUTE_MAP","COLOR_0","TEXCOORD_0","TEXCOORD_1","TEXCOORD_2","mapAttributeName","attributeMap","inferAttributeAccessor","DRAW_PARAMS","lastLogTime","animated","_programManagerState","_managedProgram","bufferMode","programProps","_programDirty","_attributes","_checkProgram","getModuleUniforms","geometryBuffers","_setModelProps","_deleteGeometryBuffers","remappedName","getBuffersFromGeometry","normalizedAttributes","transformFeedback","logPriority","_logDrawCallStart","getDrawParams","vertexArrayInstanced","onBeforeRender","onAfterRender","didDraw","getDrawMode","_logDrawCallEnd","unbindModels","_setFeedbackBuffers","unbindBuffers","bindBuffers","setGeometry","_feedbackBuffers","stateHash","animationProps","setBuffers","logDrawTimeout","attributeTable","attributeLocation","rowHeader","getDebugTableForVertexArray","uniformTable","missingTable","missingCount","configTable","attributeInfos","glslDeclaration","varyingInfo","varyingInfos","getDebugTableForProgramConfiguration","GL_COLOR","clearFlags","clearBuffer","clearBufferiv","clearBufferuiv","clearBufferfv","clearBufferfi","VERTEX_ARRAY_OBJECT","TIMER_QUERY","INSTANCED_RENDERING","MULTIPLE_RENDER_TARGETS","BLEND_EQUATION_MINMAX","FLOAT_BLEND","COLOR_ENCODING_SRGB","TEXTURE_DEPTH","TEXTURE_FLOAT","TEXTURE_HALF_FLOAT","TEXTURE_FILTER_LINEAR_FLOAT","TEXTURE_FILTER_LINEAR_HALF_FLOAT","TEXTURE_FILTER_ANISOTROPIC","COLOR_ATTACHMENT_RGBA32F","COLOR_ATTACHMENT_FLOAT","COLOR_ATTACHMENT_HALF_FLOAT","GLSL_FRAG_DATA","GLSL_FRAG_DEPTH","GLSL_TEXTURE_LOD","testTexture","testFb","getWorkerName","warning","getWorkerURL","workerOptions","workerFile","versionTag","MODULE_INJECTORS","DECLARATION_INJECT_MARKER","REGEX_START_OF_MAIN","REGEX_END_OF_MAIN","fragments","injectShader","injectStandardStubs","isVertex","fragmentData","order","injection","fragmentString","combineInjects","injects","canParseWithWorker","parseWithWorker","parseOnMainThread","compositeKey","keyList","keyMap","getKeys","cachedExpressionMap","parseExpressionString","propValue","ast","expressionEval","traverse","JSONConfiguration","typeKey","functionKey","reactComponents","constants","convertFunction","preProcessClassProps","Class","postProcessConvertedJson","configurations","trimFunctionIdentifier","convertFunctions","instantiateClass","stringProps","instantiateJavaScriptClass","React","instantiateReactComponent","JSONConverter","onJSONChange","convertedJson","convertJSONRecursively","convertJSON","parseJSON","isClassInstance","convertPlainObject","convertClassInstance","targetFunction","matchedFunction","executeFunction","convertFunctionObject","enumVarName","enumValName","convertString","shallowEqualObjects","JupyterTransport","jupyterModel","jupyterView","_stringifyJSONSafe","send","updateObject","subLayerId","DefaultLayerClass","overridingProps","_subLayerProps","sourceObject","sourceObjectIndex","sublayerProps","overridingSublayerProps","overridingSublayerTriggers","sublayerId","subLayerPropTypes","getSubLayerAccessor","passThroughProps","updateAutoHighlight","shouldUpdate","subLayersList","renderLayers","ViewManager","controllers","_viewports","_viewportMap","_isUpdating","_eventManager","_eventCallbacks","onInteractionStateChange","viewId","rect","containsPixel","viewMap","viewOrViewId","getView","getViewStateId","getViewports","_setViews","_setViewState","_setSize","_rebuildViewports","_diffViews","_onViewStateChange","controllerProps","resolvedProps","_createController","oldControllers","invalidateControllers","getViewState","oldController","hasController","_updateController","_buildViewportMap","newViews","oldViews","MaskPass","mapSize","maskMap","channel","MaskEffect","dummyMaskMap","maskLayers","masks","maskPass","channelMap","_sortMaskChannels","lastViewport","maskId","_renderChannel","channelInfo","oldChannelInfo","maskChanged","layerBounds","maskBounds","subLayerBounds","viewportBounds","paddedBounds","_doubleBounds","getMaskBounds","maskViewport","getMaskViewport","channelCount","maskChannels","DEFAULT_LIGHTING_EFFECT","EffectManager","_internalEffects","setEffects","cleanup","NO_PICKED_OBJECT","getClosestObject","pickedColors","deviceX","deviceY","deviceRadius","minSquareDistanceToCenter","closestPixelIndex","dy2","d2","pickedObject","pickedX","pickedY","getEmptyPickingInfo","coordinate","pickInfo","pickedViewport","getViewportFromCoordinates","point","devicePixel","processPickInfo","lastPickedInfo","affectedLayers","lastPickedPixelIndex","lastPickedLayerId","pickedLayerId","lastPickedLayer","baseInfo","infos","rootLayer","getLayerPickingInfo","getPickingInfo","DeckPicker","_pickable","depthFBO","_pickClosestObject","_pickVisibleObjects","lastPickedViewportId","pickableLayers","isPickable","unproject3D","_getPickable","emptyInfo","_resizeBuffer","devicePixelRange","_getPickingRect","deviceWidth","deviceHeight","_drawAndSample","disablePickingIndex","restorePickingColors","maxObjects","leftTop","deviceLeft","deviceTop","rightBottom","deviceRight","deviceBottom","pickInfos","uniqueColors","colorKey","getUniqueObjects","uniqueInfos","isMaxObjects","sourceX","sourceY","sourceWidth","sourceHeight","defaultStyle","Tooltip","canvasParent","parentElement","displayInfo","innerText","isVisible","hasTimerQuery","_queryPending","_pollingPromise","begin","conservative","resultAvailable","getQueryParameter","getResult","POSITIVE_INFINITY","poll","isResultAvailable","requestAnimationFrame","statIdCounter","onCreateContext","onAddHTML","onRender","glOptions","autoResizeViewport","autoResizeDrawingBuffer","useDevicePixelRatio","cpuTime","gpuTime","frameRate","_initialized","_running","_animationFrameId","_nextFramePromise","_resolveNextFrame","_cpuStartTime","_pageLoadPromise","_onMousemove","_onMouseleave","_setDisplay","_getPageLoadPromise","_createWebGLContext","_createFramebuffer","_startEventHandling","_initializeCallbackData","_updateCallbackData","_resizeCanvasDrawingBuffer","_resizeViewport","_gpuTimeQuery","appContext","_addCallbackData","_startLoop","isContextLost","_beginTimers","_setupFrame","_renderFrame","_clearNeedsRedraw","offScreen","commit","_endTimers","_finalizeCallbackData","_cancelAnimationFrame","waitForRender","renderFrame","_requestAnimationFrame","animationLoop","animationFrameId","cancelAnimationFrame","timerId","renderFrameCallback","_resizeFramebuffer","startTime","engineTime","tick","tock","_loop","_animationLoop","_mousePosition","_getSizeAndAspect","_offScreen","_createInfoDiv","wrapperDiv","isTimerDisjoint","getTimerMilliseconds","beginTimeElapsedQuery","oldHandler","predict","enhancePointerEventInput","RECOGNIZERS","RECOGNIZER_COMPATIBLE_MAP","tripan","pinch","doubletap","anytap","RECOGNIZER_FALLBACK_MAP","BASIC_EVENT_ALIASES","INPUT_EVENT_TYPES","KEY_EVENTS","MOUSE_EVENTS","WHEEL_EVENTS","EVENT_RECOGNIZER_MAP","tap","press","pinchin","pinchout","pinchstart","pinchmove","pinchend","pinchcancel","rotatestart","rotatemove","rotateend","rotatecancel","tripanstart","tripanmove","tripanup","tripandown","tripanleft","tripanright","tripanend","tripancancel","panup","pandown","panleft","panright","pancancel","swipe","swipeleft","swiperight","swipeup","swipedown","GESTURE_EVENT_ALIASES","anyclick","dblclick","mouseover","mouseout","mouseleave","firefox","WheelEvent","deltaMode","DOM_DELTA_PIXEL","DOM_DELTA_LINE","passive","handleOverEvent","handleOutEvent","handleEnterEvent","handleLeaveEvent","handleMoveEvent","enableMoveEvent","enableLeaveEvent","enableEnterEvent","enableOutEvent","enableOverEvent","_emit","targetElement","srcElement","tagName","enableDownEvent","enableUpEvent","tabIndex","whichButtons","buttons","leftButton","middleButton","getOffsetPosition","rootElement","getBoundingClientRect","offsetWidth","offsetHeight","clientLeft","clientTop","mjolnirEvent","_normalizeEvent","handlersByElement","_active","immediatePropagationStopped","stopImmediatePropagation","entriesToRemove","getElement","recognizerOptions","_onBasicInput","_onOtherEvent","setElement","ManagerClass","otherName","recognizerName","recognizerOption","wheelInput","moveInput","keyInput","contextmenuInput","eventAlias","eventRegistrar","_toggleRecognizer","_addEventHandler","_removeEventHandler","fallbackRecognizers","enableEventType","isRecognizerUsed","eh","pickingRadius","eventRecognizerOptions","_framebuffer","_animate","_typedArrayManagerProps","_customRender","onWebGLInitialized","_onMetrics","getCursor","Deck","_pickRequest","eventOptions","getLayers","deckPicker","getLastPickedObject","_lastPointerDownInfo","layerHandler","rootHandler","_pick","cursorState","isHovering","getBrowser","_createAnimationLoop","metrics","fps","setPropsTime","updateAttributesTime","framesRedrawn","pickTime","pickCount","gpuTimePerFrame","cpuTimePerFrame","bufferMemory","textureMemory","renderbufferMemory","gpuMemory","_metricsCounter","viewManager","effectManager","deckRenderer","removeChild","_setCanvasSize","_getViews","_getViewState","viewManagerNeedsRedraw","layerManagerNeedsRedraw","effectManagerNeedsRedraw","deckRendererNeedsRedraw","redrawReason","resourceIds","statKey","getViews","getEffects","cssWidth","cssHeight","AnimationLoop","_onContextLost","_setGLContext","_onRenderFrame","setTooltip","play","attachTimeline","EventManager","_onPointerDown","_onPointerMove","pointerleave","_onEvent","_onInteractionStateChange","_updateCanvasSize","renderOptions","_getFrameStats","_getMetrics","_updateCursor","updateLayers","_pickAndCallback","updateViewStates","animationLoopStats","memoryStats","deckGlobal","firstChar","lastChar","existingVersion","_registerLoggers","jsonLoader","imagebitmap","premultiplyAlpha","Pbf","ieee754","buf","Varint","Fixed64","Bytes","Fixed32","utf8TextDecoder","readPackedEnd","pbf","readVarint","toNum","makeRoomForExtraLength","extraLen","realloc","writePackedVarint","writeVarint","writePackedSVarint","writeSVarint","writePackedFloat","writeFloat","writePackedDouble","writeDouble","writePackedBoolean","writeBoolean","writePackedFixed32","writeFixed32","writePackedSFixed32","writeSFixed32","writePackedFixed64","writeFixed64","writePackedSFixed64","writeSFixed64","readUInt32","writeInt32","readInt32","readFields","readField","skip","readMessage","readFixed32","readSFixed32","readFixed64","readSFixed64","readFloat","readDouble","h","readVarintRemainder","readVarint64","readSVarint","readBoolean","readString","readUtf8TextDecoder","bytesPerSequence","readUtf8","readBytes","readPackedVarint","readPackedSVarint","readPackedBoolean","readPackedFloat","readPackedDouble","readPackedFixed32","readPackedSFixed32","readPackedFixed64","readPackedSFixed64","writeTag","writeBigVarintLow","lsb","writeBigVarintHigh","writeBigVarint","writeString","lead","charCodeAt","writeUtf8","writeBytes","writeRawMessage","writeMessage","writeBytesField","writeFixed32Field","writeSFixed32Field","writeFixed64Field","writeSFixed64Field","writeVarintField","writeSVarintField","writeStringField","writeFloatField","writeDoubleField","writeBooleanField","jsep","binops","unops","evaluateArray","evaluate","evaluateArrayAsync","evaluateAsync","evaluateMember","computed","evaluateMemberAsync","operator","caller","callee","consequent","alternate","argument","evalAsync","compile","expression","compileAsync","resolveModules","getShaderDependencies","instantiateModules","seen","moduleMap","moduleDepth","getDependencyGraph","isOldIE","isMSIE","isTrident","WEBGL_FEATURES","compiledGlslExtensions","canCompileGLGSExtension","cap","feature","extensionName","behavior","shader","createShader","shaderSource","compileShader","canCompile","getShaderParameter","deleteShader","getFeature","features","testVariable","qualifier","ES300_REPLACEMENTS","ES300_VERTEX_REPLACEMENTS","ES300_FRAGMENT_REPLACEMENTS","ES100_REPLACEMENTS","ES100_VERTEX_REPLACEMENTS","ES100_FRAGMENT_REPLACEMENTS","ES300_FRAGMENT_OUTPUT_REGEX","transpileShader","targetGLSLVersion","convertShader","outputMatch","outputName","convertFragmentShaderTo300","convertFragmentShaderTo100","replacements","pattern","INJECT_SHADER_DECLARATIONS","assembleShader","hookFunctions","prologue","sourceLines","glslVersion","versionLine","coreSource","allDefines","getDefines","assembledSource","getShaderName","getShaderType","gpuVendor","identifyGPUVendor","getContextInfo","getPlatformShaderDefines","isFragment","versionDefines","getVersionDefines","sourceText","getApplicationDefines","hookFunctionMap","hook","signature","normalizeHookFunctions","hookInjections","declInjections","mainInjections","hash","checkDeprecations","getModuleSource","injections","injectionType","hookName","hookFunction","footer","getHookFunctions","assembleGetUniforms","moduleUniforms","defaultProgramManager","_programCache","_getUniforms","_registeredModules","_hookFunctions","_defaultModules","_hashes","_hashCounter","_useCounts","moduleName","_getModuleList","vsHash","_getHash","fsHash","moduleHashes","varyingHashes","defineKeys","injectKeys","defineHashes","injectHashes","assembled","assembleShaders","appModules","deprecations","vertexShader","fragmentShader","_parseDeprecationDefinitions","normalizeInjections","moduleSource","_defaultGetUniforms","def","regex","old","new","private","glFormatToComponents","sourceFormat","sourceAttachment","sourceType","getPixelArray","readPixels","readPixelsToBuffer","targetByteOffset","byteCount","glTypeToBytes","unbind","copyToDataUrl","targetMipmaplevel","targetInternalFormat","targetX","isSubCopy","copyTexSubImage2D","copyTexSubImage3D","copyTexImage2D","pixelArray","LayerExtension","defaultTypedArrayManager","_attributeDefs","getGeometryFromBuffer","_rebuildGeometry","normalizedData","_forEachGeometry","dataIndex","normalizedGeometry","normalizeGeometry","vertexEnd","canEncodeWithWorker","throttleRequests","maxRequests","RequestScheduler","getPriority","requestMap","requestQueue","_issueNewRequests","isDone","activeRequestCount","deferredUpdate","_issueNewRequestsAsync","freeSlots","_updateAllRequests","_issueRequest","_updateRequest","JSONLoader","GridCellLayer","CubeGeometry","cellSize","defaultLineColor","lineJointRounded","lineMiterLimit","PolygonLayer","paths","getLineDashArray","geometryChanged","pathsDiff","_getPaths","getSubLayerRow","lineDashJustified","FillLayer","StrokeLayer","polygonLayer","shouldRenderSubLayer","dashJustified","getDashArray","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","_setScenegraphNodeProps","setPosition","setRotation","setScale","updateMatrix","rot","rotateXYZ","worldMatrix","worldInverse","worldInverseTranspose","objectMatrix","worldInverseMatrix","worldInverseTransposeMatrix","setMatrix","removeAll","ATTRIBUTE_TYPE_TO_COMPONENTS","SCALAR","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY","5120","5121","5122","5123","5125","5126","accessorToJsArray","_animation","componentType","bufferView","slicedArray","helperMatrix","interpolate","animationTime","nextIndex","previousIndex","previousTime","nextTime","stepInterpolate","slerp","linearInterpolate","tDiff","outTangent0","inTangent1","m0","cubicsplineInterpolate","GLTFAnimation","playing","timeMs","gltfNode","translation","rotationMatrix","fromQuaternion","applyTranslationRotationScale","_node","GLTFAnimator","gltf","animations","animation","samplers","nodes","setTime","animate","AfterRender","_setModelNodeProps","managedResources","addVersionToShader","modelOptions","pbrDebug","imageBasedLightingEnvironment","useTangents","scenes","scene","createScene","gltfScene","createNode","gltfMesh","_mesh","primitives","gltfPrimitive","createPrimitive","materialParser","generatedTextures","pbr","createGLTFModel","createAttributes","loadedAttributes","attrName","createAccessor","generated","lumaBuffers","gltfSampler","gltfObjects","waitWhileCondition","scenegraph","getScene","getAnimator","animator","_animations","_lighting","_imageBasedLightingEnvironment","GLTFLoader","ScenegraphLayer","instanceModelMatrix","_updateScenegraph","_applyAnimationsProp","_deleteScenegraph","scenegraphData","ScenegraphNode","instantiator","instantiate","createAnimator","createGLTFObjects","_getModelOptions","waitForGLTFAssets","_applyAllAttributes","attributesAvailable","allAttributes","animationsProp","getAnimations","findResult","waitForFullLoad","composeModelMatrix","sceneModelMatrix","u_Camera","binaryToFeatureForAccesor","featureIndex","featureIds","propertiesIndex","numericPropsIndex","numericProps","getPropertiesForIndex","POINT_LAYER","circle","pointRadiusMaxPixels","pointRadiusMinPixels","pointRadiusScale","pointRadiusUnits","pointAntialiasing","pointBillboard","getPointRadius","iconSizeMaxPixels","iconSizeMinPixels","iconSizeScale","iconSizeUnits","iconAlphaCutoff","iconBillboard","getIconAngle","getIconColor","getIconPixelOffset","getIconSize","textSizeMaxPixels","textSizeMinPixels","textSizeScale","textSizeUnits","textBackground","textBackgroundPadding","textFontFamily","textFontWeight","textLineHeight","textMaxWidth","textOutlineColor","textOutlineWidth","textWordBreak","textCharacterSet","textBillboard","textFontSettings","getTextAngle","getTextColor","getTextPixelOffset","getTextSize","getTextAlignmentBaseline","getTextBackgroundColor","getTextBorderColor","getTextBorderWidth","LINE_LAYER","lineCapRounded","lineBillboard","POLYGON_LAYER","getDefaultProps","forwardProps","sourceKey","targetKey","separateGeojsonFeatures","wrapFeature","separated","pointFeatures","lineFeatures","polygonFeatures","polygonOutlineFeatures","geometries","subGeometry","separateGeometry","sourceFeature","sourceFeatureIndex","coordinates","nestLevel","COORDINATE_NEST_LEVEL","validateGeometry","Point","MultiPoint","LineString","MultiLineString","MultiPolygon","getCoordinates","createLayerPropsFromBinary","geojsonBinary","layerProps","lines","polygons","polygonsOutline","customPickingColors","globalFeatureIds","calculatePickingColors","pathIndices","polygonIndices","primitivePolygonIndices","FEATURE_TYPES","pointType","GeoJsonLayer","_updateStateBinary","_updateStateJSON","geojson","getGeojsonFeatures","newFeatures","featuresDiff","oldFeatures","partialFeatures","createLayerPropsFromFeatures","featureType","ft","pointLayerIdPrefix","sourceIsPoints","PolygonFillLayer","forwardedProps","useLineColor","PolygonStrokeLayer","LineStringsLayer","pointLayers","PointLayerMapping","PointsLayer","pointsLayerProps","rest","polygonFillLayer","_renderPolygonLayer","_renderLineLayers","_renderPointLayers","getSourcePosition","sourcePosition","getTargetPosition","targetPosition","getSourceColor","getTargetColor","getHeight","getTilt","greatCircle","ArcLayer","instanceSourcePositions","instanceTargetPositions","instanceSourceColors","instanceTargetColors","instanceWidths","instanceHeights","instanceTilts","useShortestPath","numSegments","LineLayer","DEFAULT_NORMAL","pointSize","getNormal","radiusPixels","PointCloudLayer","instanceNormals","validateGeometryAttributes","useMeshColors","_useMeshColors","_instanced","SimpleMeshLayer","DERIVATIVES_AVAILABLE","emptyTexture","getModel","hasNormals","setTexture","hasTexture","DEFAULT_MODULE_OPTIONS","selectedColor","picking_uSelectedColorValid","picking_uSelectedColor","picking_uHighlightColor","picking_uActive","picking_uAttribute","getMaterialUniforms","ambient","diffuse","shininess","specularColor","lighting_uAmbient","lighting_uDiffuse","lighting_uShininess","lighting_uSpecularColor","LIGHTING_VERTEX","LIGHTING_FRAGMENT","cloneTextureFrom","refTexture","TextureType","toFramebuffer","FACES","TextureCube","setCubeMapImageData","mipmapLevel","_subImage","imageDataMap","resolvedFaces","facePixels","lodLevel","setImageDataForFace","Texture3D","unpackFlipY","texImage3D","mapboxApiUrl","attributionControl","bool","preserveDrawingBuffer","reuseMaps","transformRequest","mapOptions","oneOfType","asyncRender","accessToken","search","MapboxAccessToken","REACT_APP_MAPBOX_ACCESS_TOKEN","getAccessToken","checkPropTypes","Mapbox","_this","_map","initialized","_checkStyleSheet","_destroy","_frame","_render","savedMap","oldContainer","getContainer","newContainer","classList","childNodes","_container","setStyle","diff","isStyleLoaded","_fireLoadEvent","_reuse","interactive","trackResize","_this2","baseApiUrl","_create","_updateMapViewport","_updateMapSize","sizeChanged","jumpTo","_viewStateToMapboxProps","_ref$pitch","_ref$bearing","_ref$altitude","mapboxVersion","testElement","isCssLoaded","getComputedStyle","setAttribute","head","_classCallCheck","_createClass","signedArea","bridge","bridgeReverse","sum","default","deviation","polygonArea","trianglesArea","holeIndex","BASISLZ","ZSTD","ZLIB","BASICFORMAT","UNSPECIFIED","ETC1S","UASTC","ITU","NTSC","SLOG","SLOG2","ALPHA_STRAIGHT","ALPHA_PREMULTIPLIED","RRR","GGG","AAA","RRRG","U","vkFormat","typeSize","pixelWidth","pixelHeight","pixelDepth","layerCount","faceCount","supercompressionScheme","levels","dataFormatDescriptor","vendorId","descriptorType","versionNumber","descriptorBlockSize","colorModel","colorPrimaries","transferFunction","texelBlockDimension","bytesPlane","keyValue","globalData","_dataView","_littleEndian","_nextUint32","_nextUint64","uncompressedByteLength","_skip","_nextUint16","_nextUint8","bitOffset","bitLength","channelID","samplePosition","sampleLower","sampleUpper","_scan","B","A","I","imageFlags","rgbSliceByteOffset","rgbSliceByteLength","alphaSliceByteOffset","alphaSliceByteLength","R","E","T","O","P","F","G","endpointCount","selectorCount","imageDescs","endpointsData","selectorsData","tablesData","extendedData","GLTFMaterialParser","MANUAL_SRGB","SRGB_FAST_APPROXIMATION","USE_TEX_LOD","u_MetallicRoughnessValues","u_DiffuseEnvSampler","getDiffuseEnvSampler","u_SpecularEnvSampler","getSpecularEnvSampler","u_brdfLUT","getBrdfTexture","u_ScaleIBLAmbient","u_ScaleDiffBaseMR","u_ScaleFGDSpec","defineIfPresent","TANGENT","parseMaterial","gltfTexture","textureOptions","pbrMetallicRoughness","baseColorTexture","parseTexture","u_BaseColorFactor","baseColorFactor","metallicRoughnessTexture","metallicFactor","roughnessFactor","pbr_uUnlit","unlit","parsePbrMetallicRoughness","normalTexture","u_NormalScale","occlusionTexture","strength","u_OcclusionStrength","emissiveTexture","u_EmissiveFactor","emissiveFactor","alphaMode","ALPHA_CUTOFF","u_AlphaCutoff","isFeatureSupported","getFeatures","featureDefinition","queryFeature","dataBaseUrl","getAttribute","__webpack_public_path__","jupyterTransport","JupyterTransportModel","JupyterTransportView","initPlayground","_setPrototypeOf","listenTo","onJsonChanged","onDataBufferChanged","_messageReceived","dataBuffer","DOMWidgetView","LumaGL","deckGLCore","DeckGL","_global","iter","_arr","_n","_d","_e","_s","_i","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","previousPromise","callInvokeWithMethodAndArg","invoke","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iteratorMethod","isGeneratorFunction","genFun","ctor","mark","awrap","reverse","skipTempReset","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","CANVAS_STYLE","mapCanvas","deckCanvas","createCanvas","isMap","_onBeforeRender","getMap","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propFullName","secret","getShim","isRequired","ReactPropTypes","symbol","any","arrayOf","elementType","instanceOf","objectOf","oneOf","exact","PropTypes","sourceKeys","kMaxLength","TYPED_ARRAY_SUPPORT","that","encodingOrOffset","allocUnsafe","fromArrayLike","fromArrayBuffer","isEncoding","actual","checked","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","hexWrite","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","codePoints","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","typedArraySupport","_augment","species","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","inspect","thisStart","thisEnd","thisCopy","targetCopy","toJSON","ret","toHex","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","noAssert","newBuf","sliceLen","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","lookup","throwError","unary_ops","binary_ops","getMaxKeyLen","max_len","max_unop_len","max_binop_len","literals","binaryPrecedence","op_val","createBinaryExpression","isDecimalDigit","ch","isIdentifierStart","isIdentifierPart","expr","ch_i","charAtFunc","charCodeAtFunc","exprI","exprICode","gobbleSpaces","gobbleExpression","gobbleBinaryExpression","gobbleBinaryOp","to_check","tc_len","biop","prec","biop_info","gobbleToken","gobbleNumericLiteral","gobbleStringLiteral","gobbleArray","gobbleVariable","chCode","raw","quote","closed","gobbleIdentifier","gobbleArguments","termination","gobbleGroup","addUnaryOp","op_name","addBinaryOp","precedence","addLiteral","literal_name","literal_value","removeUnaryOp","removeAllUnaryOps","removeBinaryOp","removeAllBinaryOps","removeLiteral","removeAllLiterals","shared","workerBundleString","sharedChunk","p1x","p1y","p2x","p2y","sampleCurveX","sampleCurveY","sampleCurveDerivativeX","solveCurveX","solve","_sub","multByPoint","_multByPoint","divByPoint","_divByPoint","mult","_mult","_div","_rotate","rotateAround","_rotateAround","matMult","_matMult","unit","_unit","perp","_perp","_round","distSqr","angleTo","angleWith","angleWithSep","WorkerGlobalScope","safari","V","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","msCancelAnimationFrame","resolveURL","hardwareConcurrency","matchMedia","API_URL","FEEDBACK_URL","REQUIRE_ACCESS_TOKEN","ACCESS_TOKEN","MAX_PARALLEL_IMAGE_REQUESTS","testSupport","N","K","_transformRequestFn","_customAccessToken","_createSkuToken","token","tokenExpiresAt","_skuToken","_skuTokenExpiresAt","_isSkuTokenExpired","normalizeStyleURL","_makeAPIURL","normalizeGlyphsURL","normalizeSourceURL","authority","normalizeSpriteURL","normalizeTileURL","canonicalizeTileURL","canonicalizeTileset","tiles","J","$","decodeURIComponent","atob","W","anonId","pendingRequest","getStorageKey","encodeURIComponent","fetchEventData","localStorage","saveEventData","processRequests","postEvent","EVENTS_URL","created","toISOString","sdkIdentifier","sdkVersion","skuId","userId","_t","queueRequest","Q","tt","et","success","skuToken","postMapLoadEvent","postTurnstileEvent","lastSuccess","tokenU","getDate","nt","it","at","ot","st","pt","caches","ht","yt","dt","Unknown","Style","Source","Tile","Glyphs","SpriteImage","SpriteJSON","mt","AbortController","Request","toUTCString","put","ct","wt","At","xt","actor","XMLHttpRequest","responseType","setRequestHeader","withCredentials","getResponseHeader","St","accept","requestParameters","cancelled","revokeObjectURL","cacheControl","expires","kt","It","zt","Ct","Bt","_listeners","_oneTimeListeners","fire","listens","_eventedParent","_eventedParentData","setEventedParent","Tt","$version","$root","period","sprite","glyphs","source_vector","scheme","tms","minzoom","maxzoom","attribution","source_raster","raster","tileSize","source_raster_dem","terrarium","mapbox","source_geojson","maximum","minimum","tolerance","cluster","clusterRadius","clusterMaxZoom","clusterProperties","lineMetrics","generateId","source_video","urls","source_image","heatmap","hillshade","paint","layout_background","visibility","none","layout_fill","interpolated","layout_circle","layout_heatmap","layout_line","butt","square","bevel","miter","requires","layout_symbol","auto","both","tokens","horizontal","vertical","uppercase","lowercase","layout_raster","layout_hillshade","filter_operator","in","stops","exponential","categorical","colorSpace","rgb","lab","hcl","function_stop","expression_name","let","var","literal","case","coalesce","ln2","pi","typeof","collator","rgba","accumulated","log10","ln","upcase","downcase","anchor","paint_fill","paint_line","paint_circle","paint_heatmap","paint_symbol","overridable","paint_raster","linear","nearest","paint_hillshade","paint_background","Pt","__line__","Et","Mt","Vt","valueOf","Ft","Lt","Ot","bindings","Dt","kind","Rt","Ut","jt","qt","Nt","Kt","Xt","Zt","Gt","Jt","itemType","Ht","Yt","$t","Wt","transparent","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","parseCSSColor","Qt","te","sensitivity","locale","Intl","Collator","resolvedLocale","ee","fontStack","textColor","sections","ne","available","ie","ae","oe","expectedType","eachChild","possibleOutputs","ue","pe","ce","content","he","availableImages","fe","ye","parseColor","de","me","featureState","formattedSection","_parseColorCache","geometryType","ve","_evaluate","definitions","overloads","Ae","registry","scope","checkSubtype","ge","caseSensitive","diacriticSensitive","xe","be","we","boundExpression","Se","_parse","typeAnnotation","ke","labels","outputs","Ie","ze","Ee","Me","Fe","Le","Oe","De","Re","Ue","je","alpha","qe","Ne","Ke","forward","Xe","Ze","Ge","Je","interpolationFactor","controlPoints","He","Ye","$e","We","needle","haystack","Qe","inputType","cases","otherwise","outputIndex$1","tr","branches","er","rr","nr","lhs","rhs","hasUntypedArgument","ir","ar","ur","pr","currency","minFractionDigits","maxFractionDigits","NumberFormat","minimumFractionDigits","maximumFractionDigits","hr","fr","yr","mr","vr","gr","xr","br","_r","wr","Ar","Sr","kr","Ir","zr","Cr","Br","heatmapDensity","lineProgress","LN10","isSupportedScript","Tr","_warningHistory","_evaluator","_defaultValue","_enumValues","Pr","Er","enum","resolvedImage","evaluateWithoutErrorHandling","Mr","_styleExpression","isStateDependent","Vr","zoomStops","interpolationType","Fr","Lr","_parameters","_specification","Or","valueSpec","objectElementValidators","styleSpec","un","objectKey","Dr","arrayElementValidator","arrayIndex","Rr","Ur","jr","expressionContext","propertyKey","propertyType","Nr","deserialize","Kr","Xr","Gr","Zr","Jr","$r","Hr","Yr","Wr","Qr","layerType","tn","en","rn","nn","sn","pn","cn","hn","paintProperty","layoutProperty","yn","dn","mn","vn","gn","bn","cells","bboxes","insert","_insertReadonly","_forEachCell","_insertCell","query","_queryCell","_convertToCellCoord","_convertFromCellCoord","wn","An","writeable","klass","omit","shallow","Sn","_classRegistryKey","kn","In","$name","zn","Cn","first","lastIntegerZoom","lastIntegerZoomTime","lastZoom","lastFloorZoom","Bn","Arabic","Khmer","Hiragana","Katakana","Bopomofo","Kanbun","Tn","En","Pn","Mn","Vn","Fn","Ln","On","Dn","Rn","Un","jn","qn","Nn","Kn","Xn","pluginStatus","pluginURL","Zn","Gn","Jn","applyArabicShaping","processBidirectionalText","processStyledBidirectionalText","isLoading","isParsed","getPluginURL","Hn","fadeDuration","zoomHistory","crossFadingFactor","getCrossfadeParameters","fromScale","toScale","Yn","specification","isDataDriven","possiblyEvaluate","$n","transitioned","Qn","untransitioned","Wn","_properties","defaultTransitionablePropertyValues","setValue","getTransition","setTransition","ti","prior","defaultTransitioningPropertyValues","ni","hasTransition","ei","defaultPropertyValues","ri","constantOr","defaultPossiblyEvaluatedValues","oi","_calculate","si","ui","li","overridableProperties","_featureFilter","_unevaluatedLayout","_transitionablePaint","setPaintProperty","setLayoutProperty","_transitioningPaint","_crossfadeParameters","getLayoutProperty","_validate","getPaintProperty","_handleSpecialPaintPropertyUpdate","_handleOverridablePaintPropertyUpdate","isHidden","updateTransitions","recalculate","is3D","isTileClipped","hasOffscreenPass","ci","_structArray","_pos1","_pos2","_pos4","_pos8","fi","isTransferred","capacity","yi","members","di","alignment","_trim","_refreshViews","reserve","mi","int16","emplaceBack","emplace","vi","gi","xi","bi","uint16","wi","float32","Ai","uint32","Si","ki","Ii","zi","Ci","Bi","Ti","Pi","Ei","Mi","Vi","Fi","Li","Oi","anchorPointX","anchorPointY","sourceLayerIndex","bucketIndex","signedDistanceFromAnchor","anchorPoint","Di","Ri","glyphStartIndex","numGlyphs","vertexStartIndex","lineLength","segment","lowerSize","upperSize","lineOffsetX","lineOffsetY","writingMode","placedOrientation","hidden","crossTileID","associatedIconIndex","Ui","ji","rightJustifiedTextSymbolIndex","centerJustifiedTextSymbolIndex","leftJustifiedTextSymbolIndex","verticalPlacedTextSymbolIndex","placedIconSymbolIndex","verticalPlacedIconSymbolIndex","textBoxStartIndex","textBoxEndIndex","verticalTextBoxStartIndex","verticalTextBoxEndIndex","iconBoxStartIndex","iconBoxEndIndex","verticalIconBoxStartIndex","verticalIconBoxEndIndex","numHorizontalGlyphVertices","numVerticalGlyphVertices","numIconVertices","numVerticalIconVertices","textBoxScale","textOffset0","textOffset1","qi","Ni","Ki","getoffsetX","Xi","tileUnitDistanceFromAnchor","Zi","getx","gety","gettileUnitDistanceFromAnchor","Gi","Ji","Hi","Yi","segments","$i","prepareSegment","MAX_VERTEX_ARRAY_LENGTH","vertexLength","sortKey","primitiveOffset","primitiveLength","vaos","simpleSegment","Wi","ids","indexed","Qi","ta","ea","current","uniform1i","ra","uniform1f","na","uniform2f","ia","uniform3f","aa","uniform4f","oa","sa","ua","uniformMatrix4fv","la","pa","names","maxValue","setConstantPatternPositions","populatePaintArray","updatePaintArray","upload","getBinding","ca","patternPositions","patternTo","patternFrom","tlbr","ha","paintVertexAttributes","paintVertexArray","paintVertexBuffer","updateData","createVertexBuffer","fa","useIntegerZoom","ya","zoomInPaintVertexArray","zoomOutPaintVertexArray","patterns","mid","tl","zoomInPaintVertexBuffer","zoomOutPaintVertexBuffer","da","binders","_buffers","createDynamic","va","ga","populatePaintArrays","updatePaintArrays","getPaintVertexBuffers","updatePatternPaintBuffers","ma","programConfigurations","layoutAttributes","needsUpload","_featureMap","_bufferOffset","composite","xa","_a","ba","wa","loadGeometry","Aa","Sa","overscaling","hasPattern","layoutVertexArray","indexArray","stateDependentLayerIds","ka","Va","Ba","Ia","Pa","za","Ma","Ca","Ta","Ea","Fa","La","Oa","Da","populate","addFeature","stateDependentLayers","uploadPending","uploaded","layoutVertexBuffer","indexBuffer","createIndexBuffer","qa","Ra","Ua","ja","Ka","Xa","createBucket","queryRadius","queryIntersectsFeature","Za","cameraToCenterDistance","Ga","Ja","Ha","Ya","$a","Wa","Qa","eo","_updateColorRamp","colorRamp","colorRampTexture","heatmapFbo","ro","no","io","ao","so","oo","uo","bo","mo","vo","po","Mo","To","So","Po","Ao","xo","ho","co","fo","yo","_o","ko","Co","wo","Bo","go","zo","Io","Eo","Vo","Fo","Lo","Oo","Do","Ro","patternDependencies","Uo","jo","patternFeatures","indexArray2","segments2","addFeatures","indexBuffer2","qo","No","Ko","Xo","Zo","Go","_pbf","_geometry","_keys","Jo","Ho","toGeoJSON","Yo","$o","_features","Wo","Qo","ts","VectorTile","VectorTileFeature","VectorTileLayer","es","rs","is","as","os","ss","us","ps","ls","cs","hs","ys","ds","addLine","scaledDistance","totalDistance","clipStart","mapbox_clip_start","clipEnd","mapbox_clip_end","e1","e2","updateDistance","addCurrentVertex","addHalfVertex","gs","xs","_updateGradient","gradient","gradientTexture","bs","ws","As","Ss","ks","Is","toLocaleUpperCase","toLocaleLowerCase","zs","Bs","Ts","Ps","Es","Ms","Vs","Fs","Ls","Os","Ds","Rs","Us","js","qs","Ns","Ks","Xs","Zs","Gs","Js","Ys","$s","Ws","advance","tu","ru","stretchX","stretchY","paddedRect","nu","displaySize","iu","haveRenderCallbacks","addImages","iconPositions","hasRenderCallback","patchUpdatedImages","dispatchRenderCallbacks","updatedImages","patchUpdatedImage","getImage","au","horizontalOnly","su","imageName","forText","forImage","uu","sectionIndex","imageSectionID","lu","fromFeature","verticalizePunctuation","mu","positionedLines","iconsInText","verticalizable","getMaxScale","positionedGlyphs","lineOffset","getSection","getSectionIndex","getCharCode","pu","gu","vu","horizontalAlign","verticalAlign","addImageSection","addTextSection","getNextImageSectionCharCode","10","11","12","13","32","cu","hu","fu","yu","du","badness","priorBreak","xu","collisionPadding","bu","_u","wu","layoutSize","minSize","Au","uSize","uSizeT","Su","ku","getSizeData","evaluateSizeForFeature","evaluateSizeForZoom","SIZE_PACK_FACTOR","Iu","angleDelta","zu","Cu","Bu","Tu","Pu","Mu","Vu","Lu","stretch","Ou","fixed","bl","tex","glyphOffset","pixelOffsetTL","pixelOffsetBR","minFontScaleX","minFontScaleY","isSDF","Fu","Du","boxStartIndex","_addLineCollisionCircles","boxEndIndex","Ru","Uu","_down","ju","qu","Nu","SQRT2","_up","peek","Ku","Xu","Zu","Gu","Ju","murmur3","murmur2","Yu","$u","Wu","Qu","Qs","Cs","allowVerticalPlacement","textSizeData","compositeTextSizes","addSymbols","placedSymbolArray","compareText","il","al","sl","ul","ll","dynamicLayoutVertexArray","opacityVertexArray","dynamicLayoutVertexBuffer","opacityVertexBuffer","itemSize","pl","collisionVertexArray","collisionVertexBuffer","cl","collisionBoxArray","hasPaintOverrides","hasRTLText","iconSizeData","sortFeaturesByKey","sortFeaturesByY","writingModes","sourceID","createArrays","dl","textCollisionBox","iconCollisionBox","textCollisionCircle","iconCollisionCircle","glyphOffsetArray","lineVertexArray","symbolInstances","calculateGlyphDependencies","iconDependencies","glyphDependencies","getValueAndResolveTokens","addToLineVertexArray","_addCollisionDebugVertex","addCollisionDebugVertices","addDebugCollisionBoxes","generateCollisionDebugBuffers","_deserializeCollisionBoxesForSymbol","textBox","textFeatureIndex","textCircles","verticalTextBox","verticalTextFeatureIndex","iconBox","iconFeatureIndex","verticalIconBox","verticalIconFeatureIndex","deserializeCollisionBoxes","collisionArrays","hasTextData","hasIconData","hasTextCollisionBoxData","hasIconCollisionBoxData","hasTextCollisionCircleData","hasIconCollisionCircleData","addIndicesForPlacedSymbol","getSortedSymbolIndexes","sortedAngle","symbolInstanceIndexes","sortFeatures","featureSortOrder","MAX_GLYPHS","addDynamicAttributes","hl","fl","runtimeType","getOverride","hasOverride","yl","_setPaintOverrides","hasPaintOverride","_interpolationType","ml","vl","xl","implementation","renderingMode","prerender","onAdd","painter","onRemove","_l","wl","Al","Sl","kl","Il","useMipmap","pixelStoreUnpackFlipY","pixelStoreUnpack","pixelStoreUnpackPremultiplyAlpha","premultiply","isSizePowerOfTwo","zl","_callback","_triggered","MessageChannel","_channel","port2","trigger","port1","Cl","mapId","callbacks","tasks","taskQueue","cancelCallbacks","invoker","receive","globalScope","Bl","hasCallback","targetMapId","mustQueue","sourceMapId","processTask","getWorkerSource","Tl","setSouthWest","setNorthEast","_ne","Pl","_sw","getSouthWest","getNorthEast","getNorthWest","getWest","getNorth","getSouthEast","getEast","getSouth","toBounds","lon","El","Ml","Vl","Fl","Ll","Ol","Dl","fromLngLat","toLngLat","toAltitude","meterInMercatorCoordinateUnits","Rl","ql","getTilePoint","Ul","canonical","jl","overscaledZ","scaledTo","isChildOf","isLessThan","wrapped","unwrapTo","overscaleFactor","toUnwrapped","Nl","_idx","_unpackTerrarium","_unpackMapbox","getUnpackVector","getPixels","backfillBorder","Kl","Xl","_stringToNumber","_numberToString","Zl","_vectorTileFeature","_z","Gl","Jl","stateChanges","deletedStates","removeFeatureState","initializeTileState","setFeatureState","coalesceChanges","Hl","tileID","grid3D","featureIndexArray","Yl","$l","loadVTLayers","vtLayers","rawTileData","sourceLayerCoder","queryGeometry","queryPadding","cameraQueryGeometry","loadMatchingFeature","pixelPosMatrix","bucketLayerIDs","intersectionZ","lookupSymbolFeatures","hasLayer","Wl","uses","buckets","expirationTime","hasSymbolBuckets","expiredRequestCount","registerFadeDuration","timeAdded","fadeEndTime","wasRequested","loadVectorData","hasData","unloadVectorData","latestFeatureIndex","latestRawTileData","getLayer","justReloaded","imageAtlas","glyphAtlasImage","imageAtlasTexture","glyphAtlasTexture","getBucket","prepare","queryRenderedFeatures","querySourceFeatures","_geojsonTileLayer","tile","clearMask","maskedBoundsBuffer","maskedIndexBuffer","setMask","0","patternsLoaded","setExpiryData","getExpiryTimeout","holdingForFade","symbolFadeHoldUntil","symbolFadeFinished","clearFadeHold","setHoldDuration","setDependencies","hasDependency","Actor","AlphaImage","CanonicalTileID","CollisionBoxArray","Color","DEMData","DataConstantProperty","DictionaryCoder","EXTENT","ErrorEvent","EvaluationParameters","Event","Evented","FeatureIndex","FillBucket","FillExtrusionBucket","ImageAtlas","ImagePosition","LineBucket","LngLat","LngLatBounds","MercatorCoordinate","ONE_EM","OverscaledTileID","Point$1","ProgramConfiguration","Properties","Protobuf","RGBAImage","RequestManager","ResourceType","SegmentVector","SourceFeatureState","StructArrayLayout1ui2","StructArrayLayout2i4","StructArrayLayout2ui4","StructArrayLayout3ui6","StructArrayLayout4i8","SymbolBucket","Transitionable","Uniform1f","Uniform1i","Uniform2f","Uniform3f","Uniform4f","UniformColor","UniformMatrix4f","UnwrappedTileID","ValidationError","WritingMode","ZoomHistory","asyncAll","bezier","bindAll","cacheEntryPossiblyAdded","getActor","clearTileCache","clone$1","create$1","create$2","createCommonjsModule","createExpression","createLayout","createStyleLayer","ease","emitValidationErrors","endsWith","enforceCacheSizeLimit","evaluateVariableOffset","evented","featureFilter","filterObject","fromRotation","getAnchorAlignment","getAnchorJustification","getArrayBuffer","getJSON","getRTLTextPluginStatus","getReferrer","getVideo","muted","onloadstart","host","isChar","isMapboxURL","keysDifference","makeRequest","mapObject","mercatorXfromLng","mercatorYfromLat","mercatorZfromAltitude","mvt","parseGlyphPBF","performSymbolLayout","tilePixelRatio","iconsNeedLinear","compositeIconSizes","layoutTextSize","layoutIconSize","textMaxSize","sdfIcons","pick","plugin","polygonIntersectsPolygon","potpack","rasterBoundsAttributes","refProperties","registerForPluginStateChange","setCacheLimits","setRTLTextPlugin","sphericalToCartesian","symbolSize","triggerPluginCompletionEvent","validateCustomStyleLayer","validateLight","validateStyle","vectorTile","warnOnce","webpSupported","keyCache","_layerConfigs","_layers","familiesBySource","showCollisionBoxes","collectResourceTiming","returnDependencies","stacks","glyphMap","iconMap","glyphPositions","getEntriesByName","measure","clearMarks","clearMeasures","_marks","rawData","Performance","loading","loadTile","resourceTiming","reloadTile","reloadCallback","abortTile","removeTile","rawImageData","ring","_feature","tags","rawGeometry","keycache","valuecache","fromVectorTileJs","fromGeojsonVt","GeoJSONWrapper","nodeSize","within","trees","cluster_id","point_count","point_count_abbreviated","promoteId","transformed","numSimplified","numFeatures","Pe","Te","tileCoords","indexMaxZoom","indexMaxPoints","splitTile","Ce","_geoJSONIndex","getTile","_cluster","getClusters","_limitZoom","getChildren","_getOriginId","_getOriginZoom","getLeaves","_appendLeaves","_addTileFeatures","getClusterExpansionZoom","loadGeoJSON","loadData","_pendingCallback","abandoned","_pendingLoadDataParams","_loadData","superclusterOptions","geojsonVtOptions","removeSource","clusterId","getClusterChildren","getClusterLeaves","layerIndexes","workerSourceTypes","workerSources","demWorkerSources","registerWorkerSource","registerRTLTextPlugin","setReferrer","setImages","getLayerIndex","removedIds","loadDEMTile","getDEMWorkerSource","removeDEMTile","loadWorkerSource","syncRTLPluginState","getAvailableImages","reduceRight","isSealed","isFrozen","isExtensible","preventExtensions","webGLContextAttributes","failIfMajorPerformanceCaveat","probablySupportsContext","supportsContext","antialias","createNS","createElementNS","documentElement","disableDrag","enableDrag","setTransform","capture","userImage","suppressClick","mousePos","TouchEvent","touchPos","mouseButton","InstallTrigger","platform","images","callbackDispatchedThisFrame","requestors","atlasImage","dirty","setLoaded","_notify","addImage","_validateStretch","_validateContent","updateImage","removeImage","listImages","getImages","getPixelSize","getPattern","bin","_updatePatternAtlas","atlasTexture","beginFrame","requestManager","localIdeographFontFamily","setURL","getGlyphs","requests","_tinySDF","loadGlyphRange","_doesCharSupportLocalGlyph","_transitionable","setLight","_transitioning","getLight","nextRow","getDash","addDash","actors","currentActor","acquire","vector_layers","vectorLayers","vectorLayerIds","broadcast","validateBounds","dispatcher","reparseOverscaled","_loaded","_collectResourceTiming","_tileJSONRequest","_requestManager","tileBounds","_getMapId","sourceDataType","hasTile","_refreshExpiredTiles","unloadTile","roundZoom","getTileTexture","extTextureFilterAnisotropic","extTextureFilterAnisotropicMax","saveTileTexture","dem","needsHillshadePrepare","neighboringTiles","_getNeighboringTiles","backfilled","demTexture","_removed","_resourceTiming","_updateWorkerData","_finishLoading","setCoordinates","_boundsArray","boundsBuffer","boundsSegments","triggerRepaint","seek","seekable","_hasInvalidDimensions","_playing","calculatePosMatrix","maxPitchScaleFactor","tilesIn","wrappedTileID","queryResults","getFeatureState","_getAndRemoveByKey","getAndRemove","setMaxSize","dynamicDraw","unbindVAO","bindElementBuffer","bindVertexBuffer","enableAttributes","setVertexAttribPointers","getDefault","setDefault","extVertexArrayObject","setDirty","colorAttachment","depthAttachment","ReadOnly","ReadWrite","disabled","depthFail","blendFunction","Replace","unblended","alphaBlended","backCCW","cullFaceSide","extTextureHalfFloat","extTimerQuery","setCullFace","setDepthMode","setStencilMode","setColorMode","_sourceLoaded","reload","_sourceErrored","_source","_tiles","_unloadTile","_timers","_cacheTimers","_maxTileCacheSize","_coveredTiles","getSource","_shouldReloadOnResume","_loadTile","_abortTile","imageManager","getIds","getRenderableIds","_isIdRenderable","hasRenderableParent","findLoadedParent","_reloadTile","_tileLoaded","refreshedUponExpiration","_setTileReloadTimer","_backfillDEM","getTileByID","_retainLoadedChildren","updateCacheSize","handleWrapJump","_prevLng","getVisibleUnwrappedCoordinates","coveringTiles","coveringZoomLevel","maxOverzooming","maxUnderzooming","_updateRetainedTiles","_addTile","_fadeDuration","_removeTile","releaseSymbolFadeTiles","clearTiles","getCameraQueryGeometry","pointCoordinate","getVisibleCoordinates","posMatrix","reloadTilesForDependencies","workers","workerCount","addLayer","removeLayer","setFilter","addSource","setGeoJSONSourceData","setLayerZoomRange","setLayerProperty","setCenter","setZoom","setBearing","setPitch","setSprite","setGlyphs","command","boxCells","circleCells","xCellCount","yCellCount","circleKeys","boxKeys","circles","xScale","yScale","boxUid","circleUid","labelPlaneMatrix","glCoordMatrix","signedDistanceFromCamera","useVertical","notEnoughRoom","needsFlipping","tileDistance","prevTileDistance","lastSegmentViewportDistance","keysLength","_insertBoxCell","insertCircle","_insertCircleCell","_query","hitTest","seenUids","box","_queryCircle","_queryCellCircle","hitTestCircle","_circleAndRectCollide","_circlesCollide","_convertToXCellCoord","_convertToYCellCoord","ignoredGrid","pitchfactor","_pitch","screenRightBoundary","screenBottomBoundary","gridRightBoundary","gridBottomBoundary","placeCollisionBox","projectAndGetPerspectiveRatio","perspectiveRatio","isInsideGrid","offscreen","isOffscreen","approximateTileDistance","placeCollisionCircles","projectAnchor","cameraDistance","projectPoint","queryRenderedSymbols","bucketInstanceId","insertCollisionBox","collisionGroupID","insertCollisionCircles","placed","skipFade","crossSourceCollisions","maxGroupID","collisionGroups","ID","predicate","collisionIndex","placements","opacities","variableOffsets","stale","commitTime","retainedQueryData","prevPlacement","placedOrientations","placeLayerTile","placeLayerBucket","attemptAnchorPlacement","textOffset","prevAnchor","markUsedJustification","markUsedOrientation","placedGlyphBoxes","zoomAtLastRecencyCheck","prevZoomAdjustment","zoomAdjustment","symbolFadeChange","lastPlacementChangeTime","updateLayerOpacities","updateBucketOpacities","hasTransitions","stillRecent","setStale","_currentTileIndex","_seenCrossTileIDs","continuePlacement","placement","_currentPlacementIndex","_forceFullPlacement","_showCollisionBoxes","_done","_inProgressLayer","indexedSymbolInstances","getScaledCoordinates","findMatches","maxCrossTileID","generate","indexes","usedCrossTileIDs","addBucket","removeBucketCrossTileIDs","removeStaleBuckets","crossTileIDs","maxBucketInstanceId","bucketsInCurrentPlacement","pruneUnusedLayers","Be","glyphManager","lineAtlas","crossTileSymbolIndex","sourceCaches","_resetUpdates","_rtlTextPluginCallback","sourceId","_validateLayer","loadURL","_request","_load","loadJSON","stylesheet","_spriteRequest","_serializeLayers","_updatedSources","_checkLoaded","_changed","_updatedLayers","_removedLayers","_updateWorkerLayers","_reloadSource","_clearSource","_updateTilesForChangedImages","_updatedPaintProps","_changedImages","isSourceLoaded","_layerOrderChanged","moveLayer","getFilter","_flattenAndSortRenderedFeatures","addSourceType","getSourceType","setSourceType","workerSourceURL","_remove","_updateSources","_generateCollisionBoxes","_updatePlacement","pauseablePlacement","_releaseSymbolFadeTiles","getResource","Ve","fragmentSource","vertexSource","prelude","backgroundPattern","clippingMask","heatmapTexture","collisionBox","collisionCircle","fillOutline","fillOutlinePattern","fillPattern","fillExtrusion","fillExtrusionPattern","hillshadePrepare","lineGradient","linePattern","lineSDF","symbolIcon","symbolSDF","symbolTextAndIcon","boundProgram","boundLayoutVertexBuffer","boundPaintVertexBuffers","boundIndexBuffer","boundVertexOffset","boundDynamicVertexBuffer","boundDynamicVertexBuffer2","freshBind","numAttributes","currentNumAttributes","createProgram","failedToCreate","attachShader","bindAttribLocation","linkProgram","getActiveAttrib","getAttribLocation","getActiveUniform","getUniformLocation","fixedUniforms","binderUniforms","tileZoom","u_image","u_texsize","u_scale","u_fade","u_pixel_coord_upper","u_pixel_coord_lower","drawElements","u_matrix","u_lightpos","u_lightintensity","u_lightcolor","u_vertical_gradient","u_opacity","u_height_factor","u_world","pixelsToGLUnits","u_camera_to_center_distance","u_scale_with_map","translatePosMatrix","u_pitch_with_map","u_device_pixel_ratio","u_extrude_scale","u_pixels_to_tile_units","u_overscale_factor","u_color","u_intensity","u_ratio","u_units_to_pixels","u_patternscale_a","u_patternscale_b","u_sdfgamma","u_tex_y_a","u_tex_y_b","u_mix","u_tl_parent","u_scale_parent","u_buffer_scale","u_fade_t","mix","u_image0","u_image1","u_brightness_low","u_brightness_high","u_saturation_factor","u_contrast_factor","u_spin_weights","u_is_size_zoom_constant","u_is_size_feature_constant","u_size_t","u_size","u_pitch","u_rotate_symbol","u_aspect_ratio","u_fade_change","u_label_plane_matrix","u_coord_matrix","u_is_text","u_texture","u_gamma_scale","u_is_halo","u_texsize_icon","u_texture_icon","u_pattern_tl_a","u_pattern_br_a","u_pattern_tl_b","u_pattern_br_b","u_pattern_size_a","u_pattern_size_b","u_scale_a","u_scale_b","u_tile_units_to_pixels","u_color_ramp","u_latrange","u_light","u_shadow","u_highlight","u_accent","u_dimension","u_zoom","u_maxzoom","u_unpack","colorModeForRenderPass","shiftedAnchor","depthModeForSublayer","rotating","zooming","uniformValues","atlasTextureIcon","atlasInterpolation","atlasInterpolationIcon","hasHalo","TEXTURE1","stencilModeForClipping","moving","rasterBoundsBuffer","quadTriangleIndexBuffer","rasterBoundsSegments","debugBuffer","tileBorderIndexBuffer","debugSegments","7","8","programConfiguration","viewportBuffer","viewportSegments","opaquePassEnabledForLayer","depthRangeFor3D","stencilModeFor3D","isPatternMissing","tileExtentBuffer","tileExtentSegments","custom","setCustomLayerDefaults","customLayerMatrix","setBaseState","_tileTextures","setup","numSublayers","depthEpsilon","depthRboNeedsClear","emptyProgramConfiguration","gpuTimers","depthRbo","stencilClearMode","nextStencilID","currentStencilSource","_renderTileClippingMasks","_tileClippingMaskIDs","_showOverdrawInspector","currentLayer","opaquePassCutoff","renderLayer","showOverdrawInspector","showTileBoundaries","setupOffscreenDepthRenderbuffer","gpuTimingStart","gpuTimingEnd","gpuTiming","calls","createQueryEXT","beginQueryEXT","endQueryEXT","collectGpuTimers","queryGpuTimers","getQueryObjectEXT","deleteQueryEXT","maxValidLatitude","_renderWorldCopies","_minZoom","_maxZoom","_minPitch","_maxPitch","setMaxBounds","_center","_fov","_unmodified","_posMatrixCache","_alignedPosMatrixCache","renderWorldCopies","worldSize","centerPoint","unmodified","latRange","_calcMatrices","_zoom","zoomScale","zoomFraction","_constrain","scaleZoom","setLocationAtPoint","locationCoordinate","coordinateLocation","locationPoint","coordinatePoint","pointLocation","pixelMatrixInverse","pixelMatrix","getMaxBounds","lngRange","alignedProjMatrix","projMatrix","mercatorMatrix","_constraining","getCameraPoint","_hashName","_updateHash","_updateHashUnthrottled","addTo","_onHashChange","getHashString","getZoom","getBearing","getPitch","_getCurrentHash","history","replaceState","getCanvasContainer","originalEvent","_defaultPrevented","defaultPrevented","lngLats","_el","_delta","_defaultZoomRate","_wheelZoomRate","setZoomRate","setWheelZoomRate","_enabled","isActive","_zooming","_aroundCenter","onWheel","_lastWheelEventTime","_type","_lastValue","_timeout","_onTimeout","_lastWheelEvent","_frameId","_cancelRenderFrame","_finishTimeout","_around","_aroundPoint","_requestRenderFrame","_onScrollFrame","_targetZoom","_startZoom","_easing","_smoothOutEasing","_prevEase","_clickTolerance","clickTolerance","onMouseDown","_onMouseMove","_onMouseUp","_startPos","_lastPos","_box","_fireEvent","_finish","fitScreenCoordinates","keyCode","_button","_bearingSnap","bearingSnap","_pitchWithRotate","pitchWithRotate","_unbind","_deactivate","_eventButton","_onBlur","_inertia","_prevPos","_lastMoveEvent","_onDragFrame","_drainInertiaBuffer","_normalizeBearing","_inertialRotate","resetNorth","noMoveStart","rotateTo","linearity","maxSpeed","deceleration","_inertiaOptions","_onMove","onTouchStart","_onTouchEnd","_mouseDownPos","_startTouch","_lastTouch","_touchesMatch","_shouldStart","touchZoomRotate","_abort","_inertialPan","panBy","delayEndEvents","easeTo","_tapped","_tappedPoint","_resetTapped","onDblClick","_onZoomEnd","zoomTo","disableRotation","_rotationDisabled","enableRotation","_gestureIntent","_startVec","_startAround","_onEnd","_getTouchEventData","_lastTouchEvent","_onTouchFrame","_startScale","_startBearing","snapToNorth","boxZoom","_moving","panTo","resetNorthPitch","cameraForBounds","_cameraForBoxAndBearing","_fitInternal","flyTo","essential","prefersReducedMotion","_normalizeCenter","_rotating","_pitching","_prepareEase","_easeEndTimeoutID","_ease","_fireMoveEvents","_afterEase","isEasing","_easeFrameId","_onEaseFrame","_onEaseEnd","_easeStart","_easeOptions","_renderFrameCallback","getDefaultPosition","compact","_innerContainer","_updateAttributions","_updateEditLink","_updateData","_updateCompact","_attribHTML","_editLink","styleOwner","styleId","_hash","customAttribution","owner","_getUIString","_updateLogo","_logoRequired","mapbox_logo","_queue","_id","_cleared","_currentlyRunning","HTMLElement","refreshExpiredTiles","maxTileCacheSize","_interactive","_failIfMajorPerformanceCaveat","_preserveDrawingBuffer","_antialias","_trackResize","_crossSourceCollisions","_crossFadingFactor","_renderTaskQueue","_controls","_mapId","_locale","maxBounds","_setupContainer","_setupPainter","_onWindowOnline","_onWindowResize","fitBoundsOptions","_localIdeographFontFamily","addControl","logoPosition","repaint","_controlPositions","removeControl","_containerDimensions","_resizeCanvas","setMinZoom","getMinZoom","setMaxZoom","getMaxZoom","setMinPitch","getMinPitch","setMaxPitch","getMaxPitch","getRenderWorldCopies","setRenderWorldCopies","isMoving","listener","delegates","_delegatedListeners","_diffStyle","_updateStyle","_updateDiff","getStyle","areTilesLoaded","hasImage","loadImage","_canvasContainer","_detectMissingCSS","_missingCSSCanary","getPropertyValue","_contextLost","_contextRestored","_controlContainer","_styleDirty","_sourcesDirty","_placementDirty","layerTimes","_repaint","loseContext","_showTileBoundaries","_vertices","_setCacheLimits","showCompass","showZoom","visualizePitch","_zoomInButton","_createButton","_zoomOutButton","_compass","_compassIcon","_updateZoomButtons","_rotateCompassArrow","_setButtonTitle","_handler","_anchor","_color","_draggable","draggable","_rotation","_rotationAlignment","rotationAlignment","_pitchAlignment","pitchAlignment","_element","_defaultMarker","setAttributeNS","rx","ry","scrollTop","scrollLeft","_popup","setDraggable","_onMapClick","_addDragHandler","_onUp","getLngLat","_lngLat","setLngLat","_pos","setPopup","_onKeyPress","_originalTabIndex","removeAttribute","togglePopup","getPopup","isOpen","getOffset","setOffset","_positionDelta","isDraggable","setRotationAlignment","getRotationAlignment","setPitchAlignment","getPitchAlignment","positionOptions","enableHighAccuracy","maximumAge","trackUserLocation","showUserLocation","_setupUI","permissions","geolocation","_geolocationWatchID","clearWatch","_userLocationDotMarker","_isOutOfMapMaxBounds","_setErrorState","_watchState","_geolocateButton","_onSuccess","_updateMarker","_lastKnownPosition","_updateCamera","_dotElement","accuracy","geolocateSource","_clearWatch","_timeoutId","_setup","watchPosition","getCurrentPosition","setUnit","_fullscreen","_fullscreenchange","_checkFullscreenSupport","_changeIcon","fullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","webkitFullscreenEnabled","_fullscreenButton","_updateTitle","_onClickFullscreen","_getTitle","_isFullscreen","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenElement","toggle","exitFullscreen","mozCancelFullScreen","msExitFullscreen","webkitCancelFullScreen","requestFullscreen","mozRequestFullScreen","msRequestFullscreen","webkitRequestFullscreen","closeButton","closeOnClick","_onClickClose","_trackPointer","trackPointer","setText","setDOMContent","createTextNode","setHTML","createDocumentFragment","getMaxWidth","setMaxWidth","_createContent","addClassName","removeClassName","toggleClassName","_closeButton","_tip","NavigationControl","GeolocateControl","AttributionControl","ScaleControl","FullscreenControl","Popup","Marker","clearStorage","GreatCircleLayer","GeoCellLayer","indexToBounds","RADIAN_TO_DEGREE","IJToST","ij","singleSTtoUV","STToUV","FaceUVToXYZ","rotateAndFlipQuadrant","getS2QuadKey","paddedToken","padEnd","getIdFromToken","idS","FACE_BITS","lsbIndex","faceB","posB","levelN","faceS","posS","toHilbertQuadkey","getS2Polygon","nextOffset","stepI","stepJ","deltaLng","getGeoBounds","hilbertQuadkey","maxLevel","FromHilbertQuadKey","S2Layer","getS2Token","getQuadkeyPolygon","quadkey","quadkeyToWorldBounds","QuadkeyLayer","getQuadkey","Tile2DHeader","isSelected","_abortController","_loaderId","_isLoaded","_isCancelled","_needsReload","requestScheduler","loaderId","scheduleRequest","requestToken","tileData","INTERSECTION","scratchNormal","halfDiagonal","plane","distanceSquaredTo","fromCenterRadius","oppositeCorner","boundingSphere","leftCenter","leftRadius","rightCenter","rightRadius","toRightCenter","centerSeparation","halfDistanceBetweenTangentPoints","distanceTo","distanceToPlane","IDENTITY_MATRIX3","ZERO_MATRIX3","mat3","scratchVector3","scratchOffset","scratchVectorU","scratchVectorV","scratchVectorW","scratchCorner","scratchToCenter","MATRIX3","halfAxes","xAxis","getColumn","yAxis","zAxis","normXAxis","normYAxis","normZAxis","fromMatrix3","halfSize","quaternionObject","directionsMatrix","cornerVector","normalX","normalY","normalZ","radEffective","uHalf","vHalf","wHalf","minDist","maxDist","NEGATIVE_INFINITY","toCenter","transformation","fromNormalDistance","fromPointNormal","pointDistance","getPointDistance","scaledNormal","faces","scratchPlaneCenter","scratchPlaneNormal","planes","planeIndex","faceNormal","plane0","plane1","plane0Center","plane1Center","negatedFaceNormal","boundingVolume","intersectPlane","parentPlaneMask","MASK_OUTSIDE","MASK_INSIDE","scratchMatrix","scratchUnitary","scratchDiagonal","jMatrix","jMatrixTranspose","computeEigenDecomposition","EIGEN_TOLERANCE","sweep","unitaryMatrix","diagonalMatrix","norm","computeFrobeniusNorm","offDiagonalFrobeniusNorm","shurDecomposition","unitary","toTarget","diagonal","rowVal","colVal","getElementIndex","maxDiagonal","rotAxis","tau","scratchVector4","scratchVector5","scratchVector6","scratchCovarianceResult","scratchEigenResult","REF_POINTS_5","REF_POINTS_9","REF_POINTS_11","OSMNode","_children","cullingVolume","elevationBounds","getBoundingVolume","insideBounds","computeVisibility","childVisible","selected","getSelected","zRange","refPointPositions","osmTile2lngLat","meanPoint","invLength","exx","exy","exz","eyy","eyz","ezz","covarianceMatrix","v3","u2","u3","l1","l2","l3","scaleMatrix","makeOrientedBoundingBoxFromPoints","originX","originY","AxisAlignedBoundingBox","DEFAULT_EXTENT","urlType","transformBox","transformedCoords","getURLFromTemplate","getCullBounds","bounds0","bounds1","tile2XY","tileToBoundingBox","getIdentityTileIndices","modelMatrixInverse","getIndexingCoords","getTileIndices","zoomOffset","transformedExtent","_GlobeViewport","Plane","CullingVolume","elevationMin","elevationMax","minLng","minLat","maxLng","traversalParams","getOSMTileIndices","STRATEGIES","allTiles","getPlaceholderInAncestors","getPlaceholderInChildren","t1","t2","Tileset2D","onTileLoad","maxCacheByteSize","_cacheByteSize","_resizeCache","_requestScheduler","_dirty","_viewport","_selectedTiles","_frameNumber","_modelMatrix","_modelMatrixInverse","needsReload","setNeedsReload","modelMatrixAsMatrix4","isModelMatrixNew","_zRange","_getTile","tileIndices","_rebuildTree","updateTileStates","_pruneRequests","refinementStrategy","visibilities","abortCandidates","ongoingRequestCount","_getNearestAncestor","maxCacheSize","selectedTiles","onTileUnload","getTileId","getTileMetadata","getTileZoom","getTileData","onTileError","getParentIndex","startTile","TilesetClass","renderSubLayers","onViewportLoad","TileLayer","tileset","_getTilesetOptions","reloadAll","_updateTileset","_onTileLoad","_onTileError","_onTileUnload","frameNumber","loadingStateChanged","tilesetChanged","_onViewportLoad","subLayerProps","getSubLayerPropsByTile","isTileVisible","TripsLayer","timestamps","instanceTimestamps","instanceNextTimestamps","fadeTrail","trailLength","getTimestamps","libh3","Module","moduleOverrides","readAsync","arguments_","scriptDirectory","currentScript","xhr","tryParseAsDataURI","tempRet0","getTempRet0","ABORT","getCFunc","ident","ccall","returnType","argTypes","toC","outPtr","maxBytesToWrite","outU8Array","outIdx","startIdx","endIdx","stringToUTF8Array","HEAPU8","stringToUTF8","stackAlloc","HEAP8","writeArrayToMemory","cArgs","stackSave","UTF8ToString","convertReturnValue","stackRestore","UTF8Decoder","maxBytesToRead","u8Array","idx","endPtr","u0","UTF8ArrayToString","HEAP16","HEAP32","HEAPF64","alignUp","multiple","updateGlobalBufferAndViews","INITIAL_TOTAL_MEMORY","callRuntimeCallbacks","DYNAMICTOP_PTR","__ATPRERUN__","__ATINIT__","__ATMAIN__","__ATPOSTRUN__","Math_abs","Math_ceil","Math_floor","Math_min","runDependencies","runDependencyWatcher","dependenciesFulfilled","tempDouble","tempI64","memoryInitializer","dataURIPrefix","isDataURI","demangle","demangleAll","jsStackTrace","_emscripten_get_heap_size","emscripten_realloc_buffer","newBuffer","_emscripten_replace_memory","decodeBase64","chr1","chr2","chr3","enc2","enc3","enc4","keyStr","decoded","intArrayFromBase64","calledRun","asm","imul","clz32","hd","Yc","Xc","Fb","bd","cd","Lb","Rb","dd","Nb","Pb","Mb","Sb","_b","Vb","Wb","jb","ed","_c","Vc","Na","Jc","Ic","gb","lb","Fc","mb","ab","bb","cb","Gc","db","eb","fb","Hc","hb","sb","Ab","Bb","Cb","Eb","tc","Ob","Qb","Tb","Ub","$b","gc","Kc","Lc","hc","ic","Wc","kc","lc","mc","nc","uc","vc","wc","xc","Mc","Nc","Oc","Pc","Qc","Rc","Sc","Uc","jd","Tc","$c","ad","Zc","gd","___uremdi3","_bitshift64Lshr","_bitshift64Shl","_calloc","_cellAreaKm2","_cellAreaM2","_cellAreaRads2","_compact","_destroyLinkedPolygon","_edgeLengthKm","_edgeLengthM","_exactEdgeLengthKm","_exactEdgeLengthM","_exactEdgeLengthRads","_experimentalH3ToLocalIj","_experimentalLocalIjToH3","_geoToH3","_getDestinationH3IndexFromUnidirectionalEdge","_getH3IndexesFromUnidirectionalEdge","_getH3UnidirectionalEdge","_getH3UnidirectionalEdgeBoundary","_getH3UnidirectionalEdgesFromHexagon","_getOriginH3IndexFromUnidirectionalEdge","_getPentagonIndexes","_getRes0Indexes","_h3Distance","_h3GetBaseCell","_h3GetFaces","Yb","_h3GetResolution","_h3IndexesAreNeighbors","_h3IsPentagon","_h3IsResClassIII","_h3IsValid","_h3Line","_h3LineSize","_h3SetToLinkedGeo","_h3ToCenterChild","_h3ToChildren","_h3ToGeo","_h3ToGeoBoundary","_h3ToParent","_h3UnidirectionalEdgeIsValid","_hexAreaKm2","_hexAreaM2","_hexRing","_i64Subtract","_kRing","_kRingDistances","_llvm_minnum_f64","_llvm_round_f64","_maxFaceCount","_maxH3ToChildrenSize","_maxKringSize","_maxPolyfillSize","_maxUncompactSize","_memcpy","_memset","_numHexagons","_pentagonIndexCount","_pointDistKm","_pointDistM","_pointDistRads","_polyfill","_res0IndexCount","_sbrk","_sizeOfCoordIJ","_sizeOfGeoBoundary","_sizeOfGeoCoord","_sizeOfGeoPolygon","_sizeOfGeofence","_sizeOfH3Index","_sizeOfLinkedGeoPolygon","_uncompact","establishStackSpace","requestedSize","oldSize","numericArgs","noSafe","applyMemoryInitializer","clearInterval","removeRunDependency","doBrowserLoad","memoryInitializerBytes","useRequest","doRun","postRun","preRun","what","runCaller","NUMBER","H3","cwrap","SZ_H3INDEX","sizeOfH3Index","SZ_GEOCOORD","sizeOfGeoCoord","SZ_GEOBOUNDARY","sizeOfGeoBoundary","SZ_LINKED_GEOPOLYGON","sizeOfGeoPolygon","sizeOfGeofence","sizeOfLinkedGeoPolygon","UNITS","sizeOfCoordIJ","validateRes","INVALID_HEXIDECIMAL_CHAR","h3IndexToSplitLong","h3Index","upper","hexFrom32Bit","tempStr","zeroPad","splitLongToh3Index","lower","fullLen","numStr","numZeroes","outStr","readLong","invocation","readH3Index","storeH3Index","cAddress","HEAPU32","storeArrayOfHexagons","hexagons","readSingleCoord","readGeoCoord","readGeoCoordGeoJson","readGeoBoundary","geoBoundary","geoJsonCoords","closedLoop","vertsPos","readCoord","h3IsPentagon","h3ToGeo","latlng","h3ToGeoBoundary","formatAsGeoJson","h3SetToMultiPolygon","h3Indexes","originalPolygon","h3SetToLinkedGeo","multiPolygon","loops","SZ_DBL","SZ_PTR","readMultiPolygon","destroyLinkedPolygon","edgeLength","edgeLengthM","edgeLengthKm","degsToRads","deg","normalizeLongitudes","scalePolygon","hexId","actualCount","getHexagonCentroid","getHexagon","h3ToPolygon","centerHexagon","hexagon","H3HexagonLayer","_checkH3Lib","edgeLengthKM","_shouldUseHighPrecision","dataProps","_calculateH3DataProps","_updateVertices","hasPentagon","hasMultipleRes","hexResolution","h3IsValid","h3GetResolution","centerHex","hex","geoToH3","destination","oLower","oUpper","ref$1","dLower","dUpper","h3Distance","centerLat","centerLng","centerX","_renderColumnLayer","SubLayerClass","_getForwardProps","mergeTriggers","flattenPolygon","H3ClusterLayer","getHexagons","MeshLayer","featureIdsPickingColors","calculateFeatureIdsPickingColors","pbrMaterial","updatePbrMaterialUniforms","pickFeatureIds","HAS_UV_REGIONS","uvRegions","fromCartographic","cartographic","toCartographic","scaleToGeodeticSurfaceIntersection","scaleToGeodeticSurfaceGradient","scratchOrigin","VECTOR_PRODUCT_LOCAL_FRAME","down","degeneratePositionLocalFrame","scratchAxisVectors","localFrameToFixedFrame","ellipsoid","firstAxis","secondAxis","thirdAxis","cartesianOrigin","thirdAxisInferred","firstAxisVector","secondAxisVector","thirdAxisVector","fromArray","geodeticSurfaceNormal","scratchK","scratchHeight","scratchCartesian","radii","radiiSquared","radiiToTheFourth","oneOverRadii","oneOverRadiiSquared","minimumRadius","maximumRadius","squaredXOverSquaredZ","geodeticSurfaceNormalCartographic","cartesian","scaleToGeodeticSurface","_cartographicRadians","cartographicVectorRadians","fromCartographicToRadians","cosLatitude","centerToleranceSquared","positionX","positionY","positionZ","oneOverRadiiX","oneOverRadiiY","oneOverRadiiZ","squaredNorm","intersection","oneOverRadiiSquaredX","oneOverRadiiSquaredY","oneOverRadiiSquaredZ","xMultiplier","yMultiplier","zMultiplier","correction","xMultiplier2","yMultiplier2","zMultiplier2","beta","_length","nextNode","_insert","oldNodeNext","_list","_sentinel","_trimTiles","_cacheNode","addCallback","unloadCallback","trimTiles","maximumMemoryUsageInBytes","maximumMemoryUsage","sentinel","gpuMemoryUsageInBytes","getFrameState","cameraDirection","cameraUp","viewportCenterCartesian","worldToCartesian","enuToFixedTransform","WGS84","eastNorthUpToFixedFrame","cameraPositionCartographic","cameraPositionCartesian","cartographicToCartesian","cameraDirectionCartesian","cameraUpCartesian","frustumPlanes","nearCenterCommon","closestPointOnPlane","nearCenterCartesian","cameraCartesian","posCommon","cartesianPos","commonSpacePlanesToWGS84","ViewportClass","camera","topDownViewport","sseDenominator","refPoint","distanceToRef","cartographicPos","getZoomFromBoundingVolume","cartorgraphicCenter","obbSize","axeY","axeZ","farthestVertex","getObbSize","getZoomFromFullExtent","fullExtent","cartesianCenter","extentVertex","xmax","ymax","zmax","extentSize","TILE_CONTENT_STATE","TILE_REFINEMENT","TILE_TYPE","TILESET_TYPE","LOD_METRIC_TYPE","TILE3D_OPTIMIZATION_HINT","scratchScale","scratchNorthWest","scratchSouthEast","createBoundingVolume","boundingVolumeHeader","transformByQuaternion","createBox","region","minHeight","northWest","southEast","centerInCartesian","addVectors","subVectors","createSphere","sphere","uniformScale","getDynamicScreenSpaceError","distanceToCamera","dynamicScreenSpaceError","dynamicScreenSpaceErrorComputedDensity","density","dynamicScreenSpaceErrorFactor","fog","toEye","cameraPositionEnu","extraVertexEnu","projectedOriginVector","enuToCartesianMatrix","cartesianToEnuMatrix","getProjectedRadius","frameState","mbsLat","mbs","mbsLon","mbsZ","mbsR","mbsCenterCartesian","projection","extraZ","extraVectorCartesian","sphereMbsBorderVertexCartesian","sphereMbsBorderVertexCartographic","cartesianToCartographic","projectedOrigin","projectedMbsBorderVertex","_array","loadSiblings","skipLevelOfDetail","maximumScreenSpaceError","updateTransforms","onTraversalEnd","viewportTraversersMap","basePath","_traversalStack","_emptyTraversalStack","requestedTiles","emptyTiles","updateTile","executeTraversal","_selectionDepth","shouldRefine","canTraverse","updateChildTiles","updateAndPushChildren","hasRenderContent","parentRefines","_shouldRefine","stoppedRefining","refine","selectTile","touchTile","newTime","traversalFinished","lastUpdate","updateDebounceTime","compareDistanceToCamera","checkRefines","hasVisibleChild","refines","isVisibleAndInRequestVolume","childRefines","_inRequestVolume","contentAvailable","executeEmptyTraversal","updateTileVisibility","shouldSelectTile","_selectedFrame","shouldLoadTile","_requestedFrame","_priority","_getPriority","_touchedFrame","useParentMetric","ignoreVisibility","hasChildren","hasTilesetContent","contentExpired","hasUnloadedContent","screenSpaceError","_screenSpaceError","getScreenSpaceError","viewportIds","updateVisibility","_distanceToCamera","anyVisible","allDescendantsLoaded","parentHeader","extendedId","_getRefine","contentUrl","lodMetricType","lodMetricValue","contentState","hasEmptyContent","_visitedFrame","traverser","_centerZDepth","_visible","_stackLength","_initialTransform","_initializeLodMetric","_initializeTransforms","_initializeBoundingVolumes","_initializeContent","_initializeRenderingState","_lodJudge","_expireDate","_expiredContent","contentReady","contentFailed","contentUnloaded","useParentLodMetric","parentLodMetricValue","viewDistanceScale","getTiles3DScreenSpaceError","_traverser","maySkipTile","rootScreenSpaceError","getTileUrl","isTileset","_getLoaderSpecificOptions","contentLoader","_isTileset","_initializeTileHeaders","_onContentLoaded","parentVisibilityPlaneMask","_visibilityPlaneMask","MASK_INDETERMINATE","parentTransform","computedTransform","_updateTransform","distanceToTile","insideViewerRequestVolume","computeVisibilityWithPlaneMask","viewerRequestVolume","_viewerRequestVolume","extras","tileHeader","parentInitialTransform","_contentBoundingVolume","_updateBoundingVolume","_tileset","_tile","disableSkipLevelOfDetail","i3s","isTileHeader","assetGltfUpAxis","asset","gltfUpAxis","meetsScreenSpaceErrorEarly","useOptimization","_optimChildrenWithinParent","anyChildrenVisible","viewportId","viewportMap","frameNumberMap","oldCount","_this$frameNumberMap$","_statusMap","pendingTilesRegister","actualFrameNumber","deregister","newFrameNumber","newViewportId","_tileManager","hasPendingTiles","screenSize","getLodStatus","childTiles","childTile","nodePages","nodePagesTile","formTileFromNodePages","nodeId","nodeUrl","loadContent","maximumTilesSelected","debounceTime","onTraversalComplete","loadTiles","attributions","TILES_TOTAL","roots","cartographicCenter","traverseCounter","geometricError","_initializeTraverser","_emptyTiles","_requestedTiles","frameStateData","lastUpdatedVieports","_queryParams","_queryParamsString","_extensionsUsed","credits","tilesetInitializationPromise","_initializeTileSet","queryParams","queryParamStrings","getQueryParamString","tilePath","doUpdate","updatePromise","preparedViewports","viewportsToTraverse","_needTraverse","traverserId","currentFrameStateData","filteredSelectedTiles","unselectedTiles","tuples","viewportLongitude","viewportLatitude","deltaLon","deltaLat","tuplesSorted","limitSelectedTiles","unselect","_updateTiles","frameStateKey","frameStateDataValue","_loadTiles","_unloadTiles","_updateStats","oldSelectedTiles","set1","set2","unloadTiles","tilesRenderable","pointsRenderable","tilesetJson","calculateViewPropsI3S","_initializeTiles3DTileset","calculateViewPropsTiles3D","_initializeI3STileset","_this$tileset$store","xmin","ymin","zmin","getZoomFromExtent","parentTileHeader","rootTile","childHeader","TraverserClass","_onTraversalEnd","parentTile","_destroySubtree","_onStartTileLoading","_onTileLoadError","_onEndTileLoading","_this$tileset","_this$tileset$nodePag","nodesInNodePages","rtcCenter","rotationY","isQuantized","quantizedVolumeOffset","quantizedVolumeScale","cartesianModelMatrix","cartographicOrigin","toFixedFrameMatrix","cartographicModelMatrix","calculateTransformProps","_addTileToCache","_updateCacheStats","unloadContent","_destroyTile","tilesetVersion","extensionsUsed","TILE3D_TYPE","COMPOSITE","BATCHED_3D_MODEL","INSTANCED_3D_MODEL","GEOMETRY","VECTOR","GLTF","getStringFromArrayBuffer","GL_TYPE","GL_TYPE_TO_ARRAY_TYPE","NAME_TO_GL_TYPE","getArrayType","getByteSize","featureTableJson","featureTableBinary","propertyName","componentLength","_getTypedArrayFromBinary","fromName","featuresLength","_getTypedArrayFromArray","featureId","getPropertyArray","cachedTypedArrays","_cachedTypedArrays","createTypedArray","COMPONENTS_PER_ATTRIBUTE","UNPACKER","PACKER","initializeHierarchy","batchTable","jsonHeader","binaryBody","hierarchy","legacyHierarchy","HIERARCHY","hierarchyJson","classId","instancesLength","parentIndexes","classIds","parentCounts","parentIds","parentIdsLength","AttributeType","getBinaryAccessor","createArrayBufferView","classesLength","classInstancesLength","instances","binaryProperties","getBinaryProperties","combine","classCounts","classIndexes","validateInstance","validateHierarchy","initializeHierarchyValues","traverseHierarchy","instanceIndex","endConditionCallback","visited","scratchVisited","visitedMarker","scratchStack","parentCount","parentIndex","traverseHierarchyMultipleParents","traverseHierarchySingleParent","IGNORED_PROPERTY_FIELDS","featureCount","_this$json","_extensions","_binaryProperties","_initializeBinaryProperties","_hierarchy","batchId","_checkBatchId","getExactClassName","_hasPropertyInHierarchy","propertyNames","_getPropertyNamesInHierarchy","binaryProperty","_getBinaryProperty","propertyValues","hierarchyProperty","_getHierarchyProperty","_setBinaryProperty","_setHierarchyProperty","unpack","pack","_initializeBinaryProperty","tile3DAccessor","unpacker","packer","createTypedArrayFromAccessor","componentCount","instanceClass","indexInClass","parse3DTileHeaderSync","parse3DTileTablesHeaderSync","batchLength","featureTableJsonByteLength","featureTableBinaryByteLength","batchTableJsonByteLength","batchTableBinaryByteLength","parse3DTileTablesSync","BATCH_LENGTH","featureTableString","parse3DTileFeatureTable","batchTableString","batchTableJson","batchTableBinary","parse3DTileBatchTable","decodeRGB565","rgb565","r5","g6","normalize3DTileColorAttribute","batchIds","isRGB565","colorArray","getProperty","fromSNorm","rangeMaximum","signNotZero","octDecodeInRange","rangeMax","oldVX","octDecode","normalize3DTilePositionAttribute","decodeQuantizedPositions","scratchPosition","decodedArray","quantizedRange","parsePointCloud3DTile","isTranslucent","isOctEncoded16P","initializeTile","featureTable","pointsLength","getGlobalProperty","hasProperty","batchFeatureLength","parseBatchIds","parsePointCloudTables","dracoBuffer","dracoFeatureTableProperties","dracoBatchTableProperties","batchTableDraco","featureTableDraco","dracoByteOffset","dracoByteLength","hasPositions","hasColors","hasBatchIds","BATCH_ID","dracoData","featureTableProperties","batchTableProperties","dequantizeInShader","dracoOptions","decodedPositions","decodedColors","decodedNormals","decodedBatchIds","isQuantizedDraco","isOctEncodedDraco","minValues","quantizationBits","octEncodedRange","batchTableAttributes","loadDraco","parseDraco","parsePositions","constantRGBA","parseColors","normalize3DTileNormalAttribute","parseNormals","GLTF_FORMAT","parse3DTileGLTFViewSync","rotateYtoZ","gltfByteLength","gltfArrayBuffer","gltfByteOffset","extractGLTF","gltfFormat","tile3DOptions","gltfUrlBytes","gltfUrl","extractGLTFBufferOrURL","loadGLTF","parseBatchedModel3DTile","_tile$gltf","parseBatchedModel","CESIUM_RTC","parseInstancedModel3DTile","eastNorthUp","_batchTable","collectionOptions","instancePosition","instanceNormalRight","instanceNormalUp","instanceNormalForward","instanceRotation","instanceQuaternion","instanceScale","instanceTranslationRotationScale","instanceTransform","scratch1","scratch2","scratchVector1","scratchVector2","MAX_UNSIGNED_SHORT","normalUp","normalRight","hasCustomOrientation","octNormalUp","octNormalRight","getRotationMatrix3","setColumn","nonUniformScale","extractInstancedAttributes","parseInstancedModel","parse3DTile","tilesLength","subtile","parseComposite3DTile","parseGltf3DTile","getExplicitBitstream","subtree","internalBinaryBuffer","bufferViewIndex","bufferViews","parseUint64Value","Tile3DSubtreeLoader","jsonByteLength","stringAttribute","binaryByteLength","tileAvailability","explicitBitstream","contentAvailability","childSubtreeAvailability","SUBDIVISION_COUNT_MAP","QUADTREE","OCTREE","getAvailabilityResult","availabilityData","availabilityIndex","availabilityBuffer","byteIndex","bitIndex","getBooleanValueFromBitstream","formatTileData","childCoordinates","getRefine","getTileType","rootLodMetricValue","rootBoundingVolume","childTileX","childTileY","childTileZ","minimumHeight","maximumHeight","boundingVolumesCount","sizeX","sizeY","sizeZ","childWest","childEast","childSouth","childNorth","childMinimumHeight","childMaximumHeight","calculateBoundingVolumeForChildTile","concatBits","second","replaceContentUrlTemplate","templateUrl","mapUrl","items","generateMapUrl","matched","fileExtension","resolveUri","decodeURI","normalizeTileData","contentUri","transformMatrix","normalizeImplicitTileHeaders","implicitTilingExtension","subdivisionScheme","maximumLevel","subtreeLevels","subtrees","subtreesUriTemplate","rootSubtreeUrl","rootSubtree","contentUrlTemplate","parseImplicitTiles","parentData","mortonIndex","childIndex","childrenPerTile","childX","childY","childZ","levelOffset","childTileMortonIndex","tileAvailabilityIndex","isChildSubtreeAvailable","lev","childSubtreeUrl","childTileLevel","pData","currentTile","formattedTile","normalizeImplicitTileData","Tiles3DLoader","_tilesetJson$root","getBaseUri","_tilesetJson$extensio","_tilesetJson$extensio2","extensionsRequired","hasImplicitTilingExtension","normalizeTileHeaders","parseTileset","parseTile","SINGLE_DATA","getPointColor","onTilesetLoad","tileset3d","_getMeshColor","Tile3DLayer","layerMap","activeViewports","lastUpdatedViewports","_loadTileset","tileId","tilesetUrl","preload","preloadOptions","Tileset3D","viewportsNumber","selectTiles","_makePointCloudLayer","_make3DModelLayer","_makeSimpleMeshLayer","getMeshGeometry","layerCache","_getSubLayer","contentAttributes","TerrainLoader","terrain","tesselator","meshMaxError","elevationDecoder","rScaler","gScaler","bScaler","skirtHeight","DUMMY_DATA","elevationData","TerrainWorkerLoader","urlTemplateToUpdateTrigger","TerrainLayer","elevationDataChanged","isTiled","shouldReload","loadTerrain","dataUrl","textureUrl","surface","ranges","bound","getTiledTerrainData","flatGeojsonToBinary","geometryInfo","propArrayTypes","extractNumericPropTypes","numericPropKeys","pointPositionsCount","pointFeaturesCount","linePositionsCount","linePathsCount","lineFeaturesCount","polygonPositionsCount","polygonObjectsCount","polygonRingsCount","polygonFeaturesCount","coordLength","PositionDataType","hasGlobalId","GlobalFeatureIdsDataType","indexMap","pointPosition","pointFeature","linePosition","linePath","lineFeature","polygonPosition","polygonObject","polygonRing","polygonFeature","handlePoint","keepStringProperties","handleLineString","handlePolygon","wrapProps","makeAccessorObjects","fillArrays","deduceArrayType","nPositions","fillNumericProperties","nextIndices","triangulatePolygon","endPosition","returnObj","numericPropName","numericKeys","readFeature","readTag","cmd","cmdLen","rings","ccw","classifyRings","_toGeoJSON","readLayer","readValueMessage","readTile","geom","ringAreas","before","after","_geometryInfo","_toBinaryCoordinates","parseMVT","_options$gis","_options$mvt","mvtOptions","_options$mvt2","wgs84Coordinates","tileIndex","hasTileIndex","gis","parseToBinary","parseToGeojson","flatGeoJsonFeatures","vectorTileLayer","decodedFeature","getDecodedFeatureBinary","parseToFlatGeoJson","getDecodedFeature","transformToLocalCoordinates","layerProperty","toBinaryCoordinates","transformToLocalCoordinatesBinary","MVTWorkerLoader","binaryToGeojson","globalFeatureId","dataArray","normalizeInput","currValue","parseFeature","getSingleFeature","parseFeatures","parseFeatureCollection","binaryToGeometry","ringToGeoJson","pointToGeoJson","ringCoordinates","lineStringToGeoJson","polygonToGeoJson","startRingIndex","endRingIndex","startPolygonIndex","endPolygonIndex","polygonCoordinates","unexpectedInput","parseType","parseProperties","parseFields","clipBounds","shaderFunction","shaderModuleVs","injectionVs","shaderModuleFs","injectionFs","ClipExtension","clipByInstance","clip_bounds","corner0","corner1","availableTransformations","multiPoint","getPoints","multiLineString","lineString","pointX","pointY","GEOM_TYPES","findIndexByType","geomData","uniqueIdProperty","startFeatureIndex","endFeatureIndex","layerRange","__layers","layerNames","getLayerRange","elem","__ids","getGlobalFeatureId","highlightedFeatureId","MVTLayer","tileJSON","_updateTileData","_setWGS84PropertyForTiles","tilejson","loadProps","worldScale","newHoveredFeatureId","newHoveredFeatureLayerName","hoveredFeatureId","hoveredFeatureLayerName","hoveredFeature","getFeatureUniqueId","getFeatureLayerName","isWGS84","transformTileCoordsToWGS84","getHighlightedObjectIndex","isHighlighted","isFeatureIdDefined","featureIdToHighlight","isMatchingId","isMatchingLayer","findIndexBinary","pickObjects","maxFeatures","_pickObjects","featureCache","renderedFeatures","_contentWGS84","projectedBbox","BASE32_CODES_DICT","getGeohashPolygon","geohash","isLon","maxLon","minLon","hashValue","bits","getGeohashBounds","GeohashLayer","getGeohash","fp64ify","hiPart","loPart","fp64ifyMatrix4","matrixFP64","CONST_UNIFORMS","fp64arithmetic","AGGREGATION_OPERATION","SUM","MEAN","sumReducer","accu","maxReducer","minReducer","getValueFunc","aggregation","op","wrapAccessor","pts","filtered","getMin","getSum","getMean","getMax","wrapGetValueFunc","DEFAULT_RUN_PARAMS","projectPoints","createBufferObjects","MAX_32_BIT_FLOAT","MIN_BLEND_EQUATION","MAX_BLEND_EQUATION","MAX_MIN_BLEND_EQUATION","EQUATION_MAP","DEFAULT_WEIGHT_PARAMS","needMin","needMax","combineMaxMin","DEFAULT_PARAMETERS","getFloatTexture","BUFFER_NAMES","ARRAY_BUFFER_MAP","maxData","minData","maxMinData","REQUIRED_FEATURES","GPUGridAggregator","weightAttributes","textures","meanTextures","framebuffers","maxMinFramebuffers","minFramebuffers","maxFramebuffers","equations","_hasGPUSupport","_setupModels","gridAggregationModel","allAggregationModel","meanTransform","deleteResources","aggregationParams","_normalizeAggregationParams","_runAggregation","weightId","arrayName","aggregationData","aggregationBuffer","bufferName","shaderOptions","modelDirty","weights","normalizeWeightParams","aggregationTexture","maxMinBuffer","maxMinTexture","minBuffer","minTexture","maxBuffer","maxTexture","_trackGPUResultBuffers","numCol","numRow","scaling","_renderToWeightsTexture","_renderToMaxMinTexture","minOrMaxFb","clearParams","uSampler","transformOptions","_sourceTextures","aggregationValues","_targetTexture","_targetTextureVarying","getMeanTransform","_updateModels","_setupFramebuffers","_renderAggregateData","_getAggregateData","framebufferSize","_getMinMaxTexture","getAggregationModel","getAllAggregationModel","_setupWeightAttributes","pixelIndex","cellCount","cellWeight","maxCellWieght","minCellWeight","countsData","numCells","cellWeights","cellCounts","sizeIndex","defaultColorRange","colorRangeToFlatArray","colorRange","flatArray","DEFAULT_MINCOLOR","DEFAULT_MAXCOLOR","COLOR_PROPS","cellSizePixels","cellMarginPixels","colorDomain","ScreenGridCellLayer","calculateInstancePositions","instanceCounts","_updateUniforms","minColor","maxColor","shouldUseMinMax","_shouldUseMinMax","cellScale","filterProps","filterKeys","filteredProps","AggregationLayer","updateShaders","updateOpts","compareAll","dimension","domain","scaleFunction","getQuantizeScale","domainRange","clampIdx","quantizeScale","getLinearScale","linearScale","getQuantileScale","sortedDomain","ascending","thresholds","bisectRight","thresholdsScale","fraction","domainLength","domainFraction","lowIndex","getOrdinalScale","domainMap","uniqueDomain","ordinalScale","notNullOrUndefined","getTruthyValues","getQuantileDomain","getOrdinalDomain","defaultGetValue","defaultGetPoints","defaultGetIndex","filterData","BinSorter","bins","aggregatedBins","getAggregatedBins","_updateMinMaxValues","binMap","getBinMap","hasFilter","binCount","binIndex","filteredPoints","counts","percentileRange","sortedBins","minValue","lowerIdx","upperIdx","idxRange","_percentileToIndex","indexEdge","_getScaleDomain","scaleType","toFinite","yMin","yMax","xMin","xMax","alignToCell","inValue","getGridOffset","convertToMeters","calculateGridLatLonOffset","getGridParams","worldOrigin","pointToDensityGridDataCPU","hashInfo","positionAttribute","numInstance","getPositionBoundingBox","posOffset","gridHash","lonIdx","latIdx","pointsToGridHashing","idxs","getGridLayerDataFromGridHash","GridAggregationLayer","layerData","gpuGridAggregator","cpuGridAggregator","updateAggregationState","aggregationDataDirty","aggregationWeightsDirty","gpuAggregation","aggregationDirty","_updateAggregation","_updateWeightBins","_uploadAggregationResults","dataBytes","weight","getModuleSettings","cellIndex","updateResults","getWeight","DIMENSIONS","ScreenGridLayer","getCellSize","subLayerData","positionAttributeName","aggregationResults","getAggregationData","cellSizeChanged","gpuAggregationChanged","positionsChanged","isAttributeChanged","isAggregationDirty","allocateResources","_updateAccessors","_resetResults","nop","dimensionSteps","defaultDimensions","pickingInfo","getBins","updateTrigger","getDomain","lowerPercentile","upperPercentile","getScaleFunc","onSet","nullValue","defaultGetCellSize","CPUAggregator","dimensionUpdaters","_getCellSize","_getAggregator","getAggregator","_addDimension","updateGetValueFuncs","reprojectNeeded","needsReProjectPoints","getAggregatedData","getDimensionChanges","normalizeResult","getSortedBins","needUpdateDimensionStep","setDimensionState","getDimensionUpdaters","scaleFunc","updater","getDimensionSortedBins","getDimensionValueDomain","getDimensionScale","attributeAccessor","getSubLayerDimensionAttribute","dimensionStep","updaters","needUpdate","_updateTriggers","fromProp","dimensionUpdater","_filterData","valueDomain","getValueDomainByScale","dimensionRange","dimensionDomain","getScaleFunctionByScaleType","getScaleFunction","cv","binInfo","dimensionKey","getColorValue","getColorWeight","colorAggregation","colorScaleType","onSetColorDomain","elevationDomain","elevationRange","getElevationValue","getElevationWeight","elevationAggregation","elevationLowerPercentile","elevationUpperPercentile","elevationScaleType","onSetElevationDomain","gridAggregator","CPUGridLayer","cpuAggregator","aggregatorState","_getSublayerUpdateTriggers","_onGetSublayerColor","_onGetSublayerElevation","thirdPi","angles","hexagonAggregator","getPointsCenter","radiusCommon","getRadiusInCommon","screenPoints","posIndex","screenCoord","hexbin","binsById","pj","py1","px1","pi2","pj2","px2","py2","centers","fragment","newHexbin","HexagonLayer","hexagonVertices","convertLatLngToMeterOffset","vertex0","vertex3","centroid","centroidFlat","vtFlat","OFFSET","NE","NW","SE","SW","SW_TRIANGLE","SE_TRIANGLE","NE_TRIANGLE","NW_TRIANGLE","SW_TRAPEZOID","SE_TRAPEZOID","NE_TRAPEZOID","NW_TRAPEZOID","S_RECTANGLE","E_RECTANGLE","N_RECTANGLE","W_RECTANGLE","EW_RECTANGEL","SN_RECTANGEL","SQUARE","SW_PENTAGON","SE_PENTAGON","NE_PENTAGON","NW_PENTAGON","NW_N_PENTAGON","NE_E_PENTAGON","SE_S_PENTAGON","SW_W_PENTAGON","NW_W_PENTAGON","NE_N_PENTAGON","SE_E_PENTAGON","SW_S_PENTAGON","S_HEXAGON","E_HEXAGON","N_HEXAGON","W_HEXAGON","SW_NE_HEXAGON","NW_SE_HEXAGON","NE_HEPTAGON","SW_HEPTAGON","NW_HEPTAGON","SE_HEPTAGON","OCTAGON","ISOLINES_CODE_OFFSET_MAP","14","15","ternaryToIndex","ternary","ISOBANDS_CODE_OFFSET_MAP","CONTOUR_TYPE","DEFAULT_THRESHOLD_DATA","zOffset","getVertexCode","getCode","thresholdValue","isLeftBoundary","isRightBoundary","isBottomBoundary","isTopBoundary","isBoundary","meanCode","getVertices","gridOrigin","thresholdData","vZ","rX","rY","refVertexX","refVertexY","polygonOffsets","xyOffset","vX","vY","xyOffsets","contours","ContourLayer","contourData","contoursChanged","_updateThresholdData","_generateContours","contourSegments","contourPolygons","LinesSubLayerClass","BandsSubLayerClass","contour","segmentIndex","generateContours","getCellData","GPUGridCellLayer","_setupUniformBuffer","colorMaxMinBuffer","elevationMaxMinBuffer","gridOriginLow","gridOffsetLow","domainUniforms","getDomainUniforms","bindUniformBuffers","unbindUniformBuffers","colorDomainValid","elevationDomainValid","programHandle","colorIndex","getUniformBlockIndex","elevationIndex","uniformBlockBinding","GPUGridLayer","elevation","getPositionForIndex","colorInfo","elevationInfo","colorValue","elevationValue","cpuAggregationData","getHashKeyForIndex","cellSizeMeters","attributesChanged","GridLayer","useGPUAggregation","canUseGPUAggregation","boundsContain","currentBounds","targetBounds","packVertices","scaleToAspectRatio","currentWidth","currentHeight","xCenter","yCenter","TriangleLayer","colorTexture","aggregationMode","TEXTURE_OPTIONS","DEFAULT_COLOR_DOMAIN","AGGREGATION_MODE","weightsTextureSize","debounceTimeout","FLOAT_TARGET_FEATURES","HeatmapLayer","_setupTextureParams","_setupAttributes","_setupResources","_updateHeatmapState","_getChangeFlags","boundsChanged","_updateBounds","_updateTextureRenderingBounds","updateTimer","isWeightMapDirty","viewportZoomChanged","_debouncedUpdateWeightmap","_updateColorTexture","_updateWeightmap","weightsTexture","triPositionBuffer","triTexCoordBuffer","maxWeightsTexture","weightsTransform","maxWeightTransform","textureSize","floatTargetSupport","getTextureParams","weightsScale","_fs","_createTextures","weightsTransformShaders","_createWeightsTransform","maxWeightsTransformShaders","inTexture","viewportCorners","visibleWorldBounds","newState","worldBounds","scaledCommonBounds","_worldToCommonBounds","_commonToWorldBounds","normalizedCommonBounds","textureBounds","commonBounds","useLayerCoordinateSystem","metersPerPixel","textureWidth","_updateMaxWeightValue","fromTimer","bottomLeftCommon","topRightCommon","minLong","maxLong","offsetOriginCommon","bottomLeftWorld","topRightWorld","INDEX_OFFSETS","bottomRadius","topRadius","nvertical","verticalAxis","topCap","bottomCap","extra","slant","msin","mcos","mpi","cosSlant","sinSlant","i3","i2","ringRadius","tesselateTruncatedCone","ICO_POSITIONS","ICO_INDICES","iterations","PI2","getMiddlePoint","pointMemo","i1","maxi","xm","ym","zm","indices2","in1","in2","in3","iu1","iu2","iu3","theta1","phi1","theta2","x3","y3","z3","theta3","phi3","vec1","newIndex","tesselateIcosaHedron","flipCull","c1len","c2len","subdivisions1","subdivisions2","numVertsAcross","unpackedAttributes","unpackedValue","unpackIndexedGeometry","tesselatePlane","nlat","nlong","longRange","n1","n2","n3","sinTheta","cosTheta","sinPhi","ux","uy","uz","numVertsAround","tesselateSphere","createDeckInstance","overlay","_googleMap","destroyDeckInstance","eventListeners","newDeck","interleaved","mockEvent","getEventPixel","handleMouseEvent","_eventListeners","getPanes","overlayLayer","getViewPropsFromCoordinateTransformer","transformer","getMapSize","getCameraParams","heading","tilt","pixelToLngLat","latLng","fromContainerPixelToLatLng","HIDE_ALL_LAYERS","GL_STATE","GoogleMapsOverlay","_overlay","UNINITIALIZED","RenderingType","getRenderingType","_createOverlay","_deck","parentStyle","pickObject","pickMultipleObjects","renderingType","WebGLOverlayView","OverlayView","_onContextRestored","onDraw","_onDrawVectorInterleaved","_onAdd","_onDrawVectorOverlay","_onDrawRaster","_onRemove","requestRedraw","getProjection","fromLatLngToDivPixel","centerH","LatLng","centerContainerPx","fromLatLngToContainerPixel","centerDivPx","leftOffset","topLngLat","bottomLngLat","Vector2","verticalAngle","getHeading","viewDiagonal","mapDiagonal","getViewPropsFromOverlay","isInitialized","dtypeToTypedArray","dtype","BigInt64Array","BigUint64Array","deserializeMatrix","_model_name","model_name","_model_module","model_module","_model_module_version","model_module_version","_view_name","view_name","_view_module","view_module","_view_module_version","view_module_version","custom_libraries","json_input","mapbox_key","selected_data","data_buffer","js_warning","DOMWidgetModel","serializers","setCallbacks","getPlaygroundProps","transportRootElement","getRootDOMElement","deckContainer","jsonProps","deckEvent","filterJsonValue","sendJSONMessage","sendEventViaTransport","propsWithBinary","processDataBuffer","deckBundle","CUBE_INDICES","CUBE_POSITIONS","CUBE_NORMALS","CUBE_TEX_COORDS","ATTRIBUTES","_window$performance","_window$performance$n","_process$hrtime","navigator_","chrome","mozInnerScreenX","TransformFeedback","_unbindBuffers","bufferOrParams","_getVaryingIndex","byteSize","_getBufferParams","_bindBuffer","primitiveMode","bindTransformFeedback","_bindBuffers","beginTransformFeedback","endTransformFeedback","getVaryingInfo","bufferIndex","createTransformFeedback","deleteTransformFeedback","channelHandles","animationHandles","lastEngineTime","rate","_setChannelTime","animationHandle","detachAnimation","animationData","channelHandle","offsetTime","matrix2x3","loadLibraryPromises","loadLibrary","libraryUrl","getLibraryUrl","scriptSource","loadLibraryFromString","loadLibraryFromFile","BASIS_CDN_ENCODER_WASM","BASIS_CDN_ENCODER_JS","loadBasisTranscoderPromise","loadBasisEncoderPromise","loadBasisTrascoderModule","basis","BASIS","BasisModule","BasisFile","initializeBasis","initializeBasisTrascoderModule","loadBasisTrascoder","loadBasisEncoderModule","basisEncoder","BASIS_ENCODER","BasisEncoderModule","KTX2File","BasisEncoder","initializeBasisEncoderModule","loadBasisEncoder","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGBA_ASTC_4X4_KHR","COMPRESSED_RGBA_ASTC_5X4_KHR","COMPRESSED_RGBA_ASTC_5X5_KHR","COMPRESSED_RGBA_ASTC_6X5_KHR","COMPRESSED_RGBA_ASTC_6X6_KHR","COMPRESSED_RGBA_ASTC_8X5_KHR","COMPRESSED_RGBA_ASTC_8X6_KHR","COMPRESSED_RGBA_ASTC_8X8_KHR","COMPRESSED_RGBA_ASTC_10X5_KHR","COMPRESSED_RGBA_ASTC_10X6_KHR","COMPRESSED_RGBA_ASTC_10X8_KHR","COMPRESSED_RGBA_ASTC_10X10_KHR","COMPRESSED_RGBA_ASTC_12X10_KHR","COMPRESSED_RGBA_ASTC_12X12_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR","COMPRESSED_RED_RGTC1_EXT","COMPRESSED_SIGNED_RED_RGTC1_EXT","COMPRESSED_RED_GREEN_RGTC2_EXT","COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT","COMPRESSED_SRGB_S3TC_DXT1_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT","BROWSER_PREFIXES","WEBGL_EXTENSIONS","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_pvrtc","WEBGL_compressed_texture_atc","WEBGL_compressed_texture_astc","EXT_texture_compression_rgtc","getSupportedGPUTextureFormats","getWebGLContext","gpuTextureFormat","KTX2_ID","OutputFormat","etc1","basisFormat","etc2","bc1","bc3","bc4","bc5","rgba32","bgr565","rgba4444","parseBasisFile","basisFile","startTranscoding","imageCount","getNumImages","imageIndex","levelsCount","getNumLevels","transcodeImage","getImageWidth","getImageHeight","hasAlpha","getHasAlpha","getBasisOptions","decodedSize","getImageTranscodedSizeInBytes","decodedData","parseKTX2File","ktx2File","getLevels","transcodeKTX2Image","alphaFlag","getImageLevelInfo","selectSupportedBasisFormat","noAlpha","supportedFormats","BasisWorkerLoader","containerFormat","BasisLoader","isKTX","fileConstructors","resolveUrl","baseUrl","getTypedArrayForBufferView","binChunk","TYPES","ARRAY_CONSTRUCTOR_TO_WEBGL_CONSTANT","ARRAY_TO_COMPONENT_TYPE","ATTRIBUTE_COMPONENT_TYPE_TO_BYTE_SIZE","getAccessorTypeFromSize","getComponentTypeFromArray","getAccessorArrayTypeAndLength","bytesPerComponent","DEFAULT_GLTF_JSON","isExtension","getUsedExtensions","getRequiredExtensions","getObject","getBufferView","registerUsedExtension","extensionData","addExtension","registerRequiredExtension","_removeStringFromArray","sceneIndex","nodeIndices","meshIndex","nodeData","glTFMesh","_addAttributes","indicesAccessor","_addIndices","meshes","mimeTypeOpt","glTFImage","addBufferView","glTFBufferView","glTFAccessor","minMax","_getAccessorMinMax","accessorDefaults","addAccessor","glTFTexture","pbrMaterialInfo","materials","_this$json$buffers","totalByteLength","dstByteOffset","attributeKey","attributeData","_getGltfAttributeName","addBinaryBuffer","initValues","componentIndex","detector","wasmpack","FILTERS","OCTAHEDRAL","QUATERNION","EXPONENTIAL","DECODERS","wasmPromise","loadWasmInstance","wasm","__wasm_call_ctors","loadWasmModule","sbrk","count4","tp","heap","memory","gltfData","_options$gltf","decompressMeshes","promises","decodeMeshoptBufferView","removeExtension","meshoptExtension","getObjectExtension","meshoptDecodeGltfBuffer","NODE_FORMAT_SUPPORT","mimeTypeSupported","_isImageFormatSupported","checkWebPSupport","_parseImageNode","checkFormatSupport","preprocess","removeObjectExtension","getGLTFAccessor","convertTypedArrays","toTypedArray","getAccessorData","primitive","makeMeshPrimitiveIterator","decompressPrimitive","compressMesh","addRequiredExtension","dracoExtension","bufferCopy","decodedAttributes","getGLTFAccessors","decodedAttribute","accessorIndex","checkPrimitive","_context$parseSync","DracoWriter","compressedData","fauxAccessors","_addFauxAttributes","gltfScenegraph","nodeExtension","addObjectExtension","KHR_materials_unlit","techniques","techniquesExtension","programs","technique","resolveTechniques","materialExtension","resolveValues","useExtension","excludes","excludeExtensions","GLTF_ARRAYS","skins","GLTF_KEYS","skin","_addAsset","_convertTopLevelObjectsToArrays","_convertObjectIdsToArrayIndices","_updateObjects","_updateMaterial","_convertTopLevelObjectToArray","mapName","objectMap","idToIndexMap","_convertIdsToIndices","_convertIdToIndex","_convertTextureIds","_convertMeshIds","_convertNodeIds","_convertSceneIds","topLevelArrayName","_material$values","_material$values2","_material$values3","textureId","texture2d_0","diffuseTex","textureIndex","COMPONENTS","BYTES","GL_SAMPLER","SAMPLER_PARAMETER_GLTF_TO_GL","magFilter","minFilter","wrapS","wrapT","DEFAULT_SAMPLER","_resolveTree","bufView","_resolveBufferView","_resolveImage","_resolveSampler","_resolveTexture","_resolveAccessor","_resolveMaterial","_resolveMesh","_resolveNode","_resolveSkin","_resolveScene","getNode","getMesh","accum","getCamera","getSkin","inverseBindMatrices","getMaterial","occlustionTexture","emmisiveTexture","cutBuffer","_getValueFromInterleavedBuffer","getSampler","_enumSamplerParameter","preloadedImage","MAGIC_glTF","isGLB","magic1","parseGLBSync","glb","hasBinChunk","binChunks","GLB_FILE_HEADER_SIZE","contentFormat","parseJSONChunk","parseBINChunk","parseGLBV1","chunkFormat","strict","parseGLBChunksSync","parseGLBV2","jsonChunk","jsonText","parseGLTF","_options$gltf2","_options$gltf3","_options$gltf4","_glb","parseGLTFContainerSync","normalizeGLTFV1","_extension$preprocess","preprocessExtensions","loadBuffers","_context$fetch","_response$arrayBuffer","loadImages","imageIndices","getReferencesImageIndices","_extension$decode","decodeExtensions","postProcess","postProcessGLTF","parsedImage","fetchImages","createImages","decompress","IMAGE_SUPPORTED","IMAGE_BITMAP_SUPPORTED","NODE_IMAGE_SUPPORTED","DATA_SUPPORTED","getImageType","getImageTypeOrNull","SVG_DATA_URL_PATTERN","SVG_URL_PATTERN","isSVG","getBlob","parseToImage","blobOrDataUrl","xmlText","unescape","getBlobOrSVGDataUrl","webkitURL","objectUrl","loadToImage","EMPTY_OBJECT","imagebitmapOptionsSupported","parseToImageBitmap","imagebitmapOptions","isEmptyObject","createImageBitmap","safeCreateImageBitmap","imageType","getDefaultImageType","isImageTypeSupported","getLoadableImageType","parseToNodeImage","UNIFORM_SETTERS","getArraySetter","toFloatArray","setVectorUniform","toIntArray","setMatrixUniform","getSamplerSetter","toUIntArray","FLOAT_ARRAY","INT_ARRAY","UINT_ARRAY","uniformLength","getUniformSetter","parseUniformName","checkUniformValue","checkLength","checkUniformArray","copyUniform","uniformSetter","cacheLength","defaultName","SHADER_NAME_REGEXP","parseGLSLCompilerError","errLog","shaderType","shaderName","errorStrings","warnings","shaderDescription","getShaderTypeName","errorString","maxDigits","lineNumber","padLeft","addLineNumbers","formatErrors","getTypeName","_compile","getShaderSource","getTranslatedShaderSource","infoLog","getShaderInfoLog","VertexShader","FragmentShader","attributeInfosByName","attributeInfosByLocation","varyingInfosByName","_readAttributesFromProgram","_readVaryingsFromProgram","varying","_addAttribute","getTransformFeedbackVarying","_addVarying","compositeType","_inferProperties","GL_SEPARATE_ATTRIBS","V6_DEPRECATED_METHODS","_isCached","_setId","_textureUniforms","transformFeedbackVaryings","_compileAndLink","_readUniformLocationsFromLinkedProgram","_areTexturesRenderable","bindForDraw","_bindTextures","drawRangeElements","drawArrays","uniformMap","checkUniformValues","textureUpdate","_textureIndexCounter","texturesRenderable","deleteProgram","shaderHandles","getAttachedShaders","shaderHandle","programName","_getName","getName","getProgramInfoLog","validateProgram","_uniformCount","uniformIndices","getActiveUniforms","blockName","blockIndex","getActiveUniformBlockParameter","blockBinding","FS100","FS_GLES","FS300","getQualifierDetails","qualifiers","words","definition","getPassthroughFS","outputValue","convertToVec4","variable","currentIndex","feedbackMap","_setupTransformFeedback","_getNextIndex","_setupBuffers","varyingName","sourceName","feedbackName","bufferOrRef","_createNewBuffer","_getFeedbackBuffers","_updateBindings","_updateBinding","_swapBuffers","srcName","dstName","getShaderVersion","updateForTextures","sourceTextureMap","targetTextureVarying","targetTexture","sourceCount","targetTextureType","samplerTextureMap","updatedVs","finalInject","vsLines","updateVsLines","textureMap","getAttributeDefinition","updatedLine","samplerName","sizeName","uniformDeclerations","textureName","getSamplerDeclerations","typeToChannelSuffix","sampleInstruction","processAttributeDefinition","qualaiferDetails","getVaryingType","SRC_TEX_PARAMETER_OVERRIDES","_swapTexture","updatedModelProps","_processVertexShader","sourceTextures","hasSourceTextures","hasTargetTexture","transform_elementID","elementIDBuffer","_setSourceTextureParameters","sizeUniforms","getSizeUniforms","_setupTextures","packed","typeToChannelCount","packedPixels","packCount","ownTexture","textureOrReference","_targetRefTexName","_createNewTexture","_createTargetTexture","_updateElementIDBuffer","elementIds","_swapTextures","combinedInject","bufferTransform","textureTransform","updatedOpts","_updateDrawOptions","swapped","resourceTransforms","resourceTransform","_buildResourceTransforms","_updateModelProps","setupResources","updatedProps","updateModelProps","canCreateBufferTransform","canCreateTextureTransform","getDrawOptions","setAxisAngle","bw","omega","cosom","sinom","scale0","scale1","fromMat3","fRoot","fTrace","tmpvec3","xUnitVec3","yUnitVec3","temp1","temp2","matr","rotationTo","IDENTITY_QUATERNION","fromAxisRotation","vectorA","vectorB","invDot","arg0"],"mappings":"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AAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI42C,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,KAAK30G,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI75B,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,IAAIC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAIC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,IAAIC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI25B,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAIgiI,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,KAAKC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,KAAKhiI,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE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","file":"index.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@jupyter-widgets/base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@jupyter-widgets/base\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"@jupyter-widgets/base\")) : factory(root[\"@jupyter-widgets/base\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function(__WEBPACK_EXTERNAL_MODULE__133__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 243);\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","var superPropBase = require(\"./superPropBase\");\n\nfunction _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n module.exports = _get = Reflect.get;\n } else {\n module.exports = _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}\n\nmodule.exports = _get;","import { Log } from '@probe.gl/log';\nexport const log = new Log({\n id: 'luma.gl'\n});\n//# sourceMappingURL=log.js.map","export function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'luma.gl: assertion failed.');\n }\n}\n//# sourceMappingURL=assert.js.map","import { assert } from './assert';\nconst ERR_CONTEXT = 'Invalid WebGLRenderingContext';\nexport const ERR_WEBGL = ERR_CONTEXT;\nexport const ERR_WEBGL2 = 'Requires WebGL2';\nexport function isWebGL(gl) {\n if (typeof WebGLRenderingContext !== 'undefined' && gl instanceof WebGLRenderingContext) {\n return true;\n }\n\n if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {\n return true;\n }\n\n return Boolean(gl && Number.isFinite(gl._version));\n}\nexport function isWebGL2(gl) {\n if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {\n return true;\n }\n\n return Boolean(gl && gl._version === 2);\n}\nexport function getWebGL2Context(gl) {\n return isWebGL2(gl) ? gl : null;\n}\nexport function assertWebGLContext(gl) {\n assert(isWebGL(gl), ERR_CONTEXT);\n return gl;\n}\nexport function assertWebGL2Context(gl) {\n assert(isWebGL2(gl), ERR_WEBGL2);\n return gl;\n}\n//# sourceMappingURL=webgl-checks.js.map","const glErrorShadow = {};\n\nfunction error(msg) {\n if (globalThis.console && globalThis.console.error) {\n globalThis.console.error(msg);\n }\n}\n\nfunction log(msg) {\n if (globalThis.console && globalThis.console.log) {\n globalThis.console.log(msg);\n }\n}\n\nfunction synthesizeGLError(err, opt_msg) {\n glErrorShadow[err] = true;\n\n if (opt_msg !== undefined) {\n error(opt_msg);\n }\n}\n\nfunction wrapGLError(gl) {\n const f = gl.getError;\n\n gl.getError = function getError() {\n let err;\n\n do {\n err = f.apply(gl);\n\n if (err !== 0) {\n glErrorShadow[err] = true;\n }\n } while (err !== 0);\n\n for (err in glErrorShadow) {\n if (glErrorShadow[err]) {\n delete glErrorShadow[err];\n return parseInt(err, 10);\n }\n }\n\n return 0;\n };\n}\n\nconst WebGLVertexArrayObjectOES = function WebGLVertexArrayObjectOES(ext) {\n const gl = ext.gl;\n this.ext = ext;\n this.isAlive = true;\n this.hasBeenBound = false;\n this.elementArrayBuffer = null;\n this.attribs = new Array(ext.maxVertexAttribs);\n\n for (let n = 0; n < this.attribs.length; n++) {\n const attrib = new WebGLVertexArrayObjectOES.VertexAttrib(gl);\n this.attribs[n] = attrib;\n }\n\n this.maxAttrib = 0;\n};\n\nWebGLVertexArrayObjectOES.VertexAttrib = function VertexAttrib(gl) {\n this.enabled = false;\n this.buffer = null;\n this.size = 4;\n this.type = 5126;\n this.normalized = false;\n this.stride = 16;\n this.offset = 0;\n this.cached = '';\n this.recache();\n};\n\nWebGLVertexArrayObjectOES.VertexAttrib.prototype.recache = function recache() {\n this.cached = [this.size, this.type, this.normalized, this.stride, this.offset].join(':');\n};\n\nconst OESVertexArrayObject = function OESVertexArrayObject(gl) {\n const self = this;\n this.gl = gl;\n wrapGLError(gl);\n const original = this.original = {\n getParameter: gl.getParameter,\n enableVertexAttribArray: gl.enableVertexAttribArray,\n disableVertexAttribArray: gl.disableVertexAttribArray,\n bindBuffer: gl.bindBuffer,\n getVertexAttrib: gl.getVertexAttrib,\n vertexAttribPointer: gl.vertexAttribPointer\n };\n\n gl.getParameter = function getParameter(pname) {\n if (pname === self.VERTEX_ARRAY_BINDING_OES) {\n if (self.currentVertexArrayObject === self.defaultVertexArrayObject) {\n return null;\n }\n\n return self.currentVertexArrayObject;\n }\n\n return original.getParameter.apply(this, arguments);\n };\n\n gl.enableVertexAttribArray = function enableVertexAttribArray(index) {\n const vao = self.currentVertexArrayObject;\n vao.maxAttrib = Math.max(vao.maxAttrib, index);\n const attrib = vao.attribs[index];\n attrib.enabled = true;\n return original.enableVertexAttribArray.apply(this, arguments);\n };\n\n gl.disableVertexAttribArray = function disableVertexAttribArray(index) {\n const vao = self.currentVertexArrayObject;\n vao.maxAttrib = Math.max(vao.maxAttrib, index);\n const attrib = vao.attribs[index];\n attrib.enabled = false;\n return original.disableVertexAttribArray.apply(this, arguments);\n };\n\n gl.bindBuffer = function bindBuffer(target, buffer) {\n switch (target) {\n case 34962:\n self.currentArrayBuffer = buffer;\n break;\n\n case 34963:\n self.currentVertexArrayObject.elementArrayBuffer = buffer;\n break;\n\n default:\n }\n\n return original.bindBuffer.apply(this, arguments);\n };\n\n gl.getVertexAttrib = function getVertexAttrib(index, pname) {\n const vao = self.currentVertexArrayObject;\n const attrib = vao.attribs[index];\n\n switch (pname) {\n case 34975:\n return attrib.buffer;\n\n case 34338:\n return attrib.enabled;\n\n case 34339:\n return attrib.size;\n\n case 34340:\n return attrib.stride;\n\n case 34341:\n return attrib.type;\n\n case 34922:\n return attrib.normalized;\n\n default:\n return original.getVertexAttrib.apply(this, arguments);\n }\n };\n\n gl.vertexAttribPointer = function vertexAttribPointer(indx, size, type, normalized, stride, offset) {\n const vao = self.currentVertexArrayObject;\n vao.maxAttrib = Math.max(vao.maxAttrib, indx);\n const attrib = vao.attribs[indx];\n attrib.buffer = self.currentArrayBuffer;\n attrib.size = size;\n attrib.type = type;\n attrib.normalized = normalized;\n attrib.stride = stride;\n attrib.offset = offset;\n attrib.recache();\n return original.vertexAttribPointer.apply(this, arguments);\n };\n\n if (gl.instrumentExtension) {\n gl.instrumentExtension(this, 'OES_vertex_array_object');\n }\n\n if (gl.canvas) {\n gl.canvas.addEventListener('webglcontextrestored', () => {\n log('OESVertexArrayObject emulation library context restored');\n self.reset_();\n }, true);\n }\n\n this.reset_();\n};\n\nOESVertexArrayObject.prototype.VERTEX_ARRAY_BINDING_OES = 0x85b5;\n\nOESVertexArrayObject.prototype.reset_ = function reset_() {\n const contextWasLost = this.vertexArrayObjects !== undefined;\n\n if (contextWasLost) {\n for (let ii = 0; ii < this.vertexArrayObjects.length; ++ii) {\n this.vertexArrayObjects.isAlive = false;\n }\n }\n\n const gl = this.gl;\n this.maxVertexAttribs = gl.getParameter(34921);\n this.defaultVertexArrayObject = new WebGLVertexArrayObjectOES(this);\n this.currentVertexArrayObject = null;\n this.currentArrayBuffer = null;\n this.vertexArrayObjects = [this.defaultVertexArrayObject];\n this.bindVertexArrayOES(null);\n};\n\nOESVertexArrayObject.prototype.createVertexArrayOES = function createVertexArrayOES() {\n const arrayObject = new WebGLVertexArrayObjectOES(this);\n this.vertexArrayObjects.push(arrayObject);\n return arrayObject;\n};\n\nOESVertexArrayObject.prototype.deleteVertexArrayOES = function deleteVertexArrayOES(arrayObject) {\n arrayObject.isAlive = false;\n this.vertexArrayObjects.splice(this.vertexArrayObjects.indexOf(arrayObject), 1);\n\n if (this.currentVertexArrayObject === arrayObject) {\n this.bindVertexArrayOES(null);\n }\n};\n\nOESVertexArrayObject.prototype.isVertexArrayOES = function isVertexArrayOES(arrayObject) {\n if (arrayObject && arrayObject instanceof WebGLVertexArrayObjectOES) {\n if (arrayObject.hasBeenBound && arrayObject.ext === this) {\n return true;\n }\n }\n\n return false;\n};\n\nOESVertexArrayObject.prototype.bindVertexArrayOES = function bindVertexArrayOES(arrayObject) {\n const gl = this.gl;\n\n if (arrayObject && !arrayObject.isAlive) {\n synthesizeGLError(1282, 'bindVertexArrayOES: attempt to bind deleted arrayObject');\n return;\n }\n\n const original = this.original;\n const oldVAO = this.currentVertexArrayObject;\n this.currentVertexArrayObject = arrayObject || this.defaultVertexArrayObject;\n this.currentVertexArrayObject.hasBeenBound = true;\n const newVAO = this.currentVertexArrayObject;\n\n if (oldVAO === newVAO) {\n return;\n }\n\n if (!oldVAO || newVAO.elementArrayBuffer !== oldVAO.elementArrayBuffer) {\n original.bindBuffer.call(gl, 34963, newVAO.elementArrayBuffer);\n }\n\n let currentBinding = this.currentArrayBuffer;\n const maxAttrib = Math.max(oldVAO ? oldVAO.maxAttrib : 0, newVAO.maxAttrib);\n\n for (let n = 0; n <= maxAttrib; n++) {\n const attrib = newVAO.attribs[n];\n const oldAttrib = oldVAO ? oldVAO.attribs[n] : null;\n\n if (!oldVAO || attrib.enabled !== oldAttrib.enabled) {\n if (attrib.enabled) {\n original.enableVertexAttribArray.call(gl, n);\n } else {\n original.disableVertexAttribArray.call(gl, n);\n }\n }\n\n if (attrib.enabled) {\n let bufferChanged = false;\n\n if (!oldVAO || attrib.buffer !== oldAttrib.buffer) {\n if (currentBinding !== attrib.buffer) {\n original.bindBuffer.call(gl, 34962, attrib.buffer);\n currentBinding = attrib.buffer;\n }\n\n bufferChanged = true;\n }\n\n if (bufferChanged || attrib.cached !== oldAttrib.cached) {\n original.vertexAttribPointer.call(gl, n, attrib.size, attrib.type, attrib.normalized, attrib.stride, attrib.offset);\n }\n }\n }\n\n if (this.currentArrayBuffer !== currentBinding) {\n original.bindBuffer.call(gl, 34962, this.currentArrayBuffer);\n }\n};\n\nexport function polyfillVertexArrayObject(gl) {\n if (typeof gl.createVertexArray === 'function') {\n return;\n }\n\n const original_getSupportedExtensions = gl.getSupportedExtensions;\n\n gl.getSupportedExtensions = function getSupportedExtensions() {\n const list = original_getSupportedExtensions.call(this) || [];\n\n if (list.indexOf('OES_vertex_array_object') < 0) {\n list.push('OES_vertex_array_object');\n }\n\n return list;\n };\n\n const original_getExtension = gl.getExtension;\n\n gl.getExtension = function getExtension(name) {\n const ext = original_getExtension.call(this, name);\n\n if (ext) {\n return ext;\n }\n\n if (name !== 'OES_vertex_array_object') {\n return null;\n }\n\n if (!gl.__OESVertexArrayObject) {\n this.__OESVertexArrayObject = new OESVertexArrayObject(this);\n }\n\n return this.__OESVertexArrayObject;\n };\n}\n//# sourceMappingURL=polyfill-vertex-array-object.js.map","import { isWebGL2 } from '../utils/webgl-checks';\nconst OES_element_index = 'OES_element_index';\nconst WEBGL_draw_buffers = 'WEBGL_draw_buffers';\nconst EXT_disjoint_timer_query = 'EXT_disjoint_timer_query';\nconst EXT_disjoint_timer_query_webgl2 = 'EXT_disjoint_timer_query_webgl2';\nconst EXT_texture_filter_anisotropic = 'EXT_texture_filter_anisotropic';\nconst WEBGL_debug_renderer_info = 'WEBGL_debug_renderer_info';\nconst GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8b8b;\nconst GL_DONT_CARE = 0x1100;\nconst GL_GPU_DISJOINT_EXT = 0x8fbb;\nconst GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84ff;\nconst GL_UNMASKED_VENDOR_WEBGL = 0x9245;\nconst GL_UNMASKED_RENDERER_WEBGL = 0x9246;\n\nconst getWebGL2ValueOrZero = gl => !isWebGL2(gl) ? 0 : undefined;\n\nconst WEBGL_PARAMETERS = {\n [3074]: gl => !isWebGL2(gl) ? 36064 : undefined,\n [GL_FRAGMENT_SHADER_DERIVATIVE_HINT]: gl => !isWebGL2(gl) ? GL_DONT_CARE : undefined,\n [35977]: getWebGL2ValueOrZero,\n [32937]: getWebGL2ValueOrZero,\n [GL_GPU_DISJOINT_EXT]: (gl, getParameter) => {\n const ext = isWebGL2(gl) ? gl.getExtension(EXT_disjoint_timer_query_webgl2) : gl.getExtension(EXT_disjoint_timer_query);\n return ext && ext.GPU_DISJOINT_EXT ? getParameter(ext.GPU_DISJOINT_EXT) : 0;\n },\n [GL_UNMASKED_VENDOR_WEBGL]: (gl, getParameter) => {\n const ext = gl.getExtension(WEBGL_debug_renderer_info);\n return getParameter(ext && ext.UNMASKED_VENDOR_WEBGL || 7936);\n },\n [GL_UNMASKED_RENDERER_WEBGL]: (gl, getParameter) => {\n const ext = gl.getExtension(WEBGL_debug_renderer_info);\n return getParameter(ext && ext.UNMASKED_RENDERER_WEBGL || 7937);\n },\n [GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT]: (gl, getParameter) => {\n const ext = gl.luma.extensions[EXT_texture_filter_anisotropic];\n return ext ? getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 1.0;\n },\n [32883]: getWebGL2ValueOrZero,\n [35071]: getWebGL2ValueOrZero,\n [37447]: getWebGL2ValueOrZero,\n [36063]: (gl, getParameter) => {\n if (!isWebGL2(gl)) {\n const ext = gl.getExtension(WEBGL_draw_buffers);\n return ext ? getParameter(ext.MAX_COLOR_ATTACHMENTS_WEBGL) : 0;\n }\n\n return undefined;\n },\n [35379]: getWebGL2ValueOrZero,\n [35374]: getWebGL2ValueOrZero,\n [35377]: getWebGL2ValueOrZero,\n [34852]: gl => {\n if (!isWebGL2(gl)) {\n const ext = gl.getExtension(WEBGL_draw_buffers);\n return ext ? ext.MAX_DRAW_BUFFERS_WEBGL : 0;\n }\n\n return undefined;\n },\n [36203]: gl => gl.getExtension(OES_element_index) ? 2147483647 : 65535,\n [33001]: gl => gl.getExtension(OES_element_index) ? 16777216 : 65535,\n [33000]: gl => 16777216,\n [37157]: getWebGL2ValueOrZero,\n [35373]: getWebGL2ValueOrZero,\n [35657]: getWebGL2ValueOrZero,\n [36183]: getWebGL2ValueOrZero,\n [37137]: getWebGL2ValueOrZero,\n [34045]: getWebGL2ValueOrZero,\n [35978]: getWebGL2ValueOrZero,\n [35979]: getWebGL2ValueOrZero,\n [35968]: getWebGL2ValueOrZero,\n [35376]: getWebGL2ValueOrZero,\n [35375]: getWebGL2ValueOrZero,\n [35659]: getWebGL2ValueOrZero,\n [37154]: getWebGL2ValueOrZero,\n [35371]: getWebGL2ValueOrZero,\n [35658]: getWebGL2ValueOrZero,\n [35076]: getWebGL2ValueOrZero,\n [35077]: getWebGL2ValueOrZero,\n [35380]: getWebGL2ValueOrZero\n};\nexport function getParameterPolyfill(gl, originalGetParameter, pname) {\n const limit = WEBGL_PARAMETERS[pname];\n const value = typeof limit === 'function' ? limit(gl, originalGetParameter, pname) : limit;\n const result = value !== undefined ? value : originalGetParameter(pname);\n return result;\n}\n//# sourceMappingURL=get-parameter-polyfill.js.map","import { assert } from '../utils/assert';\nimport { isWebGL2 } from '../utils/webgl-checks';\nimport { getParameterPolyfill } from './get-parameter-polyfill';\nconst OES_vertex_array_object = 'OES_vertex_array_object';\nconst ANGLE_instanced_arrays = 'ANGLE_instanced_arrays';\nconst WEBGL_draw_buffers = 'WEBGL_draw_buffers';\nconst EXT_disjoint_timer_query = 'EXT_disjoint_timer_query';\nconst EXT_texture_filter_anisotropic = 'EXT_texture_filter_anisotropic';\nconst ERR_VAO_NOT_SUPPORTED = 'VertexArray requires WebGL2 or OES_vertex_array_object extension';\n\nfunction getExtensionData(gl, extension) {\n return {\n webgl2: isWebGL2(gl),\n ext: gl.getExtension(extension)\n };\n}\n\nexport const WEBGL2_CONTEXT_POLYFILLS = {\n [OES_vertex_array_object]: {\n meta: {\n suffix: 'OES'\n },\n createVertexArray: () => {\n assert(false, ERR_VAO_NOT_SUPPORTED);\n },\n deleteVertexArray: () => {},\n bindVertexArray: () => {},\n isVertexArray: () => false\n },\n [ANGLE_instanced_arrays]: {\n meta: {\n suffix: 'ANGLE'\n },\n\n vertexAttribDivisor(location, divisor) {\n assert(divisor === 0, 'WebGL instanced rendering not supported');\n },\n\n drawElementsInstanced: () => {},\n drawArraysInstanced: () => {}\n },\n [WEBGL_draw_buffers]: {\n meta: {\n suffix: 'WEBGL'\n },\n drawBuffers: () => {\n assert(false);\n }\n },\n [EXT_disjoint_timer_query]: {\n meta: {\n suffix: 'EXT'\n },\n createQuery: () => {\n assert(false);\n },\n deleteQuery: () => {\n assert(false);\n },\n beginQuery: () => {\n assert(false);\n },\n endQuery: () => {},\n\n getQuery(handle, pname) {\n return this.getQueryObject(handle, pname);\n },\n\n getQueryParameter(handle, pname) {\n return this.getQueryObject(handle, pname);\n },\n\n getQueryObject: () => {}\n }\n};\nexport const WEBGL2_CONTEXT_OVERRIDES = {\n readBuffer: (gl, originalFunc, attachment) => {\n if (isWebGL2(gl)) {\n originalFunc(attachment);\n } else {}\n },\n getVertexAttrib: (gl, originalFunc, location, pname) => {\n const {\n webgl2,\n ext\n } = getExtensionData(gl, ANGLE_instanced_arrays);\n let result;\n\n switch (pname) {\n case 35069:\n result = !webgl2 ? false : undefined;\n break;\n\n case 35070:\n result = !webgl2 && !ext ? 0 : undefined;\n break;\n\n default:\n }\n\n return result !== undefined ? result : originalFunc(location, pname);\n },\n getProgramParameter: (gl, originalFunc, program, pname) => {\n if (!isWebGL2(gl)) {\n switch (pname) {\n case 35967:\n return 35981;\n\n case 35971:\n return 0;\n\n case 35382:\n return 0;\n\n default:\n }\n }\n\n return originalFunc(program, pname);\n },\n getInternalformatParameter: (gl, originalFunc, target, format, pname) => {\n if (!isWebGL2(gl)) {\n switch (pname) {\n case 32937:\n return new Int32Array([0]);\n\n default:\n }\n }\n\n return gl.getInternalformatParameter(target, format, pname);\n },\n\n getTexParameter(gl, originalFunc, target, pname) {\n switch (pname) {\n case 34046:\n const {\n extensions\n } = gl.luma;\n const ext = extensions[EXT_texture_filter_anisotropic];\n pname = ext && ext.TEXTURE_MAX_ANISOTROPY_EXT || 34046;\n break;\n\n default:\n }\n\n return originalFunc(target, pname);\n },\n\n getParameter: getParameterPolyfill,\n\n hint(gl, originalFunc, pname, value) {\n return originalFunc(pname, value);\n }\n\n};\n//# sourceMappingURL=polyfill-table.js.map","import { polyfillVertexArrayObject } from './polyfill-vertex-array-object';\nimport { assert } from '../utils/assert';\nimport { WEBGL2_CONTEXT_POLYFILLS, WEBGL2_CONTEXT_OVERRIDES } from './polyfill-table';\nexport function polyfillContext(gl) {\n gl.luma = gl.luma || {};\n const {\n luma\n } = gl;\n\n if (!luma.polyfilled) {\n polyfillVertexArrayObject(gl);\n initializeExtensions(gl);\n installPolyfills(gl, WEBGL2_CONTEXT_POLYFILLS);\n installOverrides(gl, {\n target: luma,\n target2: gl\n });\n luma.polyfilled = true;\n }\n\n return gl;\n}\nglobalThis.polyfillContext = polyfillContext;\n\nfunction initializeExtensions(gl) {\n gl.luma.extensions = {};\n const EXTENSIONS = gl.getSupportedExtensions() || [];\n\n for (const extension of EXTENSIONS) {\n gl.luma[extension] = gl.getExtension(extension);\n }\n}\n\nfunction installOverrides(gl, _ref) {\n let {\n target,\n target2\n } = _ref;\n Object.keys(WEBGL2_CONTEXT_OVERRIDES).forEach(key => {\n if (typeof WEBGL2_CONTEXT_OVERRIDES[key] === 'function') {\n const originalFunc = gl[key] ? gl[key].bind(gl) : () => {};\n const polyfill = WEBGL2_CONTEXT_OVERRIDES[key].bind(null, gl, originalFunc);\n target[key] = polyfill;\n target2[key] = polyfill;\n }\n });\n}\n\nfunction installPolyfills(gl, polyfills) {\n for (const extension of Object.getOwnPropertyNames(polyfills)) {\n if (extension !== 'overrides') {\n polyfillExtension(gl, {\n extension,\n target: gl.luma,\n target2: gl\n });\n }\n }\n}\n\nfunction polyfillExtension(gl, _ref2) {\n let {\n extension,\n target,\n target2\n } = _ref2;\n const defaults = WEBGL2_CONTEXT_POLYFILLS[extension];\n assert(defaults);\n const {\n meta = {}\n } = defaults;\n const {\n suffix = ''\n } = meta;\n const ext = gl.getExtension(extension);\n\n for (const key of Object.keys(defaults)) {\n const extKey = \"\".concat(key).concat(suffix);\n let polyfill = null;\n\n if (key === 'meta') {} else if (typeof gl[key] === 'function') {} else if (ext && typeof ext[extKey] === 'function') {\n polyfill = function () {\n return ext[extKey](...arguments);\n };\n } else if (typeof defaults[key] === 'function') {\n polyfill = defaults[key].bind(target);\n }\n\n if (polyfill) {\n target[key] = polyfill;\n target2[key] = polyfill;\n }\n }\n}\n//# sourceMappingURL=polyfill-context.js.map","import { isWebGL2 } from '../utils/webgl-checks';\nexport const GL_PARAMETER_DEFAULTS = {\n [3042]: false,\n [32773]: new Float32Array([0, 0, 0, 0]),\n [32777]: 32774,\n [34877]: 32774,\n [32969]: 1,\n [32968]: 0,\n [32971]: 1,\n [32970]: 0,\n [3106]: new Float32Array([0, 0, 0, 0]),\n [3107]: [true, true, true, true],\n [2884]: false,\n [2885]: 1029,\n [2929]: false,\n [2931]: 1,\n [2932]: 513,\n [2928]: new Float32Array([0, 1]),\n [2930]: true,\n [3024]: true,\n [36006]: null,\n [2886]: 2305,\n [33170]: 4352,\n [2849]: 1,\n [32823]: false,\n [32824]: 0,\n [10752]: 0,\n [32938]: 1.0,\n [32939]: false,\n [3089]: false,\n [3088]: new Int32Array([0, 0, 1024, 1024]),\n [2960]: false,\n [2961]: 0,\n [2968]: 0xffffffff,\n [36005]: 0xffffffff,\n [2962]: 519,\n [2967]: 0,\n [2963]: 0xffffffff,\n [34816]: 519,\n [36003]: 0,\n [36004]: 0xffffffff,\n [2964]: 7680,\n [2965]: 7680,\n [2966]: 7680,\n [34817]: 7680,\n [34818]: 7680,\n [34819]: 7680,\n [2978]: [0, 0, 1024, 1024],\n [3333]: 4,\n [3317]: 4,\n [37440]: false,\n [37441]: false,\n [37443]: 37444,\n [35723]: 4352,\n [36010]: null,\n [35977]: false,\n [3330]: 0,\n [3332]: 0,\n [3331]: 0,\n [3314]: 0,\n [32878]: 0,\n [3316]: 0,\n [3315]: 0,\n [32877]: 0\n};\n\nconst enable = (gl, value, key) => value ? gl.enable(key) : gl.disable(key);\n\nconst hint = (gl, value, key) => gl.hint(key, value);\n\nconst pixelStorei = (gl, value, key) => gl.pixelStorei(key, value);\n\nconst drawFramebuffer = (gl, value) => {\n const target = isWebGL2(gl) ? 36009 : 36160;\n return gl.bindFramebuffer(target, value);\n};\n\nconst readFramebuffer = (gl, value) => {\n return gl.bindFramebuffer(36008, value);\n};\n\nfunction isArray(array) {\n return Array.isArray(array) || ArrayBuffer.isView(array);\n}\n\nexport const GL_PARAMETER_SETTERS = {\n [3042]: enable,\n [32773]: (gl, value) => gl.blendColor(...value),\n [32777]: 'blendEquation',\n [34877]: 'blendEquation',\n [32969]: 'blendFunc',\n [32968]: 'blendFunc',\n [32971]: 'blendFunc',\n [32970]: 'blendFunc',\n [3106]: (gl, value) => gl.clearColor(...value),\n [3107]: (gl, value) => gl.colorMask(...value),\n [2884]: enable,\n [2885]: (gl, value) => gl.cullFace(value),\n [2929]: enable,\n [2931]: (gl, value) => gl.clearDepth(value),\n [2932]: (gl, value) => gl.depthFunc(value),\n [2928]: (gl, value) => gl.depthRange(...value),\n [2930]: (gl, value) => gl.depthMask(value),\n [3024]: enable,\n [35723]: hint,\n [36006]: drawFramebuffer,\n [2886]: (gl, value) => gl.frontFace(value),\n [33170]: hint,\n [2849]: (gl, value) => gl.lineWidth(value),\n [32823]: enable,\n [32824]: 'polygonOffset',\n [10752]: 'polygonOffset',\n [35977]: enable,\n [32938]: 'sampleCoverage',\n [32939]: 'sampleCoverage',\n [3089]: enable,\n [3088]: (gl, value) => gl.scissor(...value),\n [2960]: enable,\n [2961]: (gl, value) => gl.clearStencil(value),\n [2968]: (gl, value) => gl.stencilMaskSeparate(1028, value),\n [36005]: (gl, value) => gl.stencilMaskSeparate(1029, value),\n [2962]: 'stencilFuncFront',\n [2967]: 'stencilFuncFront',\n [2963]: 'stencilFuncFront',\n [34816]: 'stencilFuncBack',\n [36003]: 'stencilFuncBack',\n [36004]: 'stencilFuncBack',\n [2964]: 'stencilOpFront',\n [2965]: 'stencilOpFront',\n [2966]: 'stencilOpFront',\n [34817]: 'stencilOpBack',\n [34818]: 'stencilOpBack',\n [34819]: 'stencilOpBack',\n [2978]: (gl, value) => gl.viewport(...value),\n [3333]: pixelStorei,\n [3317]: pixelStorei,\n [37440]: pixelStorei,\n [37441]: pixelStorei,\n [37443]: pixelStorei,\n [3330]: pixelStorei,\n [3332]: pixelStorei,\n [3331]: pixelStorei,\n [36010]: readFramebuffer,\n [3314]: pixelStorei,\n [32878]: pixelStorei,\n [3316]: pixelStorei,\n [3315]: pixelStorei,\n [32877]: pixelStorei,\n framebuffer: (gl, framebuffer) => {\n const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;\n return gl.bindFramebuffer(36160, handle);\n },\n blend: (gl, value) => value ? gl.enable(3042) : gl.disable(3042),\n blendColor: (gl, value) => gl.blendColor(...value),\n blendEquation: (gl, args) => {\n args = isArray(args) ? args : [args, args];\n gl.blendEquationSeparate(...args);\n },\n blendFunc: (gl, args) => {\n args = isArray(args) && args.length === 2 ? [...args, ...args] : args;\n gl.blendFuncSeparate(...args);\n },\n clearColor: (gl, value) => gl.clearColor(...value),\n clearDepth: (gl, value) => gl.clearDepth(value),\n clearStencil: (gl, value) => gl.clearStencil(value),\n colorMask: (gl, value) => gl.colorMask(...value),\n cull: (gl, value) => value ? gl.enable(2884) : gl.disable(2884),\n cullFace: (gl, value) => gl.cullFace(value),\n depthTest: (gl, value) => value ? gl.enable(2929) : gl.disable(2929),\n depthFunc: (gl, value) => gl.depthFunc(value),\n depthMask: (gl, value) => gl.depthMask(value),\n depthRange: (gl, value) => gl.depthRange(...value),\n dither: (gl, value) => value ? gl.enable(3024) : gl.disable(3024),\n derivativeHint: (gl, value) => {\n gl.hint(35723, value);\n },\n frontFace: (gl, value) => gl.frontFace(value),\n mipmapHint: (gl, value) => gl.hint(33170, value),\n lineWidth: (gl, value) => gl.lineWidth(value),\n polygonOffsetFill: (gl, value) => value ? gl.enable(32823) : gl.disable(32823),\n polygonOffset: (gl, value) => gl.polygonOffset(...value),\n sampleCoverage: (gl, value) => gl.sampleCoverage(...value),\n scissorTest: (gl, value) => value ? gl.enable(3089) : gl.disable(3089),\n scissor: (gl, value) => gl.scissor(...value),\n stencilTest: (gl, value) => value ? gl.enable(2960) : gl.disable(2960),\n stencilMask: (gl, value) => {\n value = isArray(value) ? value : [value, value];\n const [mask, backMask] = value;\n gl.stencilMaskSeparate(1028, mask);\n gl.stencilMaskSeparate(1029, backMask);\n },\n stencilFunc: (gl, args) => {\n args = isArray(args) && args.length === 3 ? [...args, ...args] : args;\n const [func, ref, mask, backFunc, backRef, backMask] = args;\n gl.stencilFuncSeparate(1028, func, ref, mask);\n gl.stencilFuncSeparate(1029, backFunc, backRef, backMask);\n },\n stencilOp: (gl, args) => {\n args = isArray(args) && args.length === 3 ? [...args, ...args] : args;\n const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;\n gl.stencilOpSeparate(1028, sfail, dpfail, dppass);\n gl.stencilOpSeparate(1029, backSfail, backDpfail, backDppass);\n },\n viewport: (gl, value) => gl.viewport(...value)\n};\n\nfunction getValue(glEnum, values, cache) {\n return values[glEnum] !== undefined ? values[glEnum] : cache[glEnum];\n}\n\nexport const GL_COMPOSITE_PARAMETER_SETTERS = {\n blendEquation: (gl, values, cache) => gl.blendEquationSeparate(getValue(32777, values, cache), getValue(34877, values, cache)),\n blendFunc: (gl, values, cache) => gl.blendFuncSeparate(getValue(32969, values, cache), getValue(32968, values, cache), getValue(32971, values, cache), getValue(32970, values, cache)),\n polygonOffset: (gl, values, cache) => gl.polygonOffset(getValue(32824, values, cache), getValue(10752, values, cache)),\n sampleCoverage: (gl, values, cache) => gl.sampleCoverage(getValue(32938, values, cache), getValue(32939, values, cache)),\n stencilFuncFront: (gl, values, cache) => gl.stencilFuncSeparate(1028, getValue(2962, values, cache), getValue(2967, values, cache), getValue(2963, values, cache)),\n stencilFuncBack: (gl, values, cache) => gl.stencilFuncSeparate(1029, getValue(34816, values, cache), getValue(36003, values, cache), getValue(36004, values, cache)),\n stencilOpFront: (gl, values, cache) => gl.stencilOpSeparate(1028, getValue(2964, values, cache), getValue(2965, values, cache), getValue(2966, values, cache)),\n stencilOpBack: (gl, values, cache) => gl.stencilOpSeparate(1029, getValue(34817, values, cache), getValue(34818, values, cache), getValue(34819, values, cache))\n};\nexport const GL_HOOKED_SETTERS = {\n enable: (update, capability) => update({\n [capability]: true\n }),\n disable: (update, capability) => update({\n [capability]: false\n }),\n pixelStorei: (update, pname, value) => update({\n [pname]: value\n }),\n hint: (update, pname, hint) => update({\n [pname]: hint\n }),\n bindFramebuffer: (update, target, framebuffer) => {\n switch (target) {\n case 36160:\n return update({\n [36006]: framebuffer,\n [36010]: framebuffer\n });\n\n case 36009:\n return update({\n [36006]: framebuffer\n });\n\n case 36008:\n return update({\n [36010]: framebuffer\n });\n\n default:\n return null;\n }\n },\n blendColor: (update, r, g, b, a) => update({\n [32773]: new Float32Array([r, g, b, a])\n }),\n blendEquation: (update, mode) => update({\n [32777]: mode,\n [34877]: mode\n }),\n blendEquationSeparate: (update, modeRGB, modeAlpha) => update({\n [32777]: modeRGB,\n [34877]: modeAlpha\n }),\n blendFunc: (update, src, dst) => update({\n [32969]: src,\n [32968]: dst,\n [32971]: src,\n [32970]: dst\n }),\n blendFuncSeparate: (update, srcRGB, dstRGB, srcAlpha, dstAlpha) => update({\n [32969]: srcRGB,\n [32968]: dstRGB,\n [32971]: srcAlpha,\n [32970]: dstAlpha\n }),\n clearColor: (update, r, g, b, a) => update({\n [3106]: new Float32Array([r, g, b, a])\n }),\n clearDepth: (update, depth) => update({\n [2931]: depth\n }),\n clearStencil: (update, s) => update({\n [2961]: s\n }),\n colorMask: (update, r, g, b, a) => update({\n [3107]: [r, g, b, a]\n }),\n cullFace: (update, mode) => update({\n [2885]: mode\n }),\n depthFunc: (update, func) => update({\n [2932]: func\n }),\n depthRange: (update, zNear, zFar) => update({\n [2928]: new Float32Array([zNear, zFar])\n }),\n depthMask: (update, mask) => update({\n [2930]: mask\n }),\n frontFace: (update, face) => update({\n [2886]: face\n }),\n lineWidth: (update, width) => update({\n [2849]: width\n }),\n polygonOffset: (update, factor, units) => update({\n [32824]: factor,\n [10752]: units\n }),\n sampleCoverage: (update, value, invert) => update({\n [32938]: value,\n [32939]: invert\n }),\n scissor: (update, x, y, width, height) => update({\n [3088]: new Int32Array([x, y, width, height])\n }),\n stencilMask: (update, mask) => update({\n [2968]: mask,\n [36005]: mask\n }),\n stencilMaskSeparate: (update, face, mask) => update({\n [face === 1028 ? 2968 : 36005]: mask\n }),\n stencilFunc: (update, func, ref, mask) => update({\n [2962]: func,\n [2967]: ref,\n [2963]: mask,\n [34816]: func,\n [36003]: ref,\n [36004]: mask\n }),\n stencilFuncSeparate: (update, face, func, ref, mask) => update({\n [face === 1028 ? 2962 : 34816]: func,\n [face === 1028 ? 2967 : 36003]: ref,\n [face === 1028 ? 2963 : 36004]: mask\n }),\n stencilOp: (update, fail, zfail, zpass) => update({\n [2964]: fail,\n [2965]: zfail,\n [2966]: zpass,\n [34817]: fail,\n [34818]: zfail,\n [34819]: zpass\n }),\n stencilOpSeparate: (update, face, fail, zfail, zpass) => update({\n [face === 1028 ? 2964 : 34817]: fail,\n [face === 1028 ? 2965 : 34818]: zfail,\n [face === 1028 ? 2966 : 34819]: zpass\n }),\n viewport: (update, x, y, width, height) => update({\n [2978]: [x, y, width, height]\n })\n};\n\nconst isEnabled = (gl, key) => gl.isEnabled(key);\n\nexport const GL_PARAMETER_GETTERS = {\n [3042]: isEnabled,\n [2884]: isEnabled,\n [2929]: isEnabled,\n [3024]: isEnabled,\n [32823]: isEnabled,\n [32926]: isEnabled,\n [32928]: isEnabled,\n [3089]: isEnabled,\n [2960]: isEnabled,\n [35977]: isEnabled\n};\n//# sourceMappingURL=webgl-parameter-tables.js.map","export function isObjectEmpty(object) {\n for (const key in object) {\n return false;\n }\n\n return true;\n}\nexport function deepArrayEqual(x, y) {\n if (x === y) {\n return true;\n }\n\n const isArrayX = Array.isArray(x) || ArrayBuffer.isView(x);\n const isArrayY = Array.isArray(y) || ArrayBuffer.isView(y);\n\n if (isArrayX && isArrayY && x.length === y.length) {\n for (let i = 0; i < x.length; ++i) {\n if (x[i] !== y[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n//# sourceMappingURL=utils.js.map","import { GL_PARAMETER_DEFAULTS, GL_HOOKED_SETTERS } from './webgl-parameter-tables';\nimport { setParameters, getParameters } from './unified-parameter-api';\nimport { assert } from '../utils/assert';\nimport { deepArrayEqual } from '../utils/utils';\n\nfunction installGetterOverride(gl, functionName) {\n const originalGetterFunc = gl[functionName].bind(gl);\n\n gl[functionName] = function get() {\n const pname = arguments.length <= 0 ? undefined : arguments[0];\n\n if (!(pname in gl.state.cache)) {\n return originalGetterFunc(...arguments);\n }\n\n return gl.state.enable ? gl.state.cache[pname] : originalGetterFunc(...arguments);\n };\n\n Object.defineProperty(gl[functionName], 'name', {\n value: \"\".concat(functionName, \"-from-cache\"),\n configurable: false\n });\n}\n\nfunction installSetterSpy(gl, functionName, setter) {\n const originalSetterFunc = gl[functionName].bind(gl);\n\n gl[functionName] = function set() {\n for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {\n params[_key] = arguments[_key];\n }\n\n const {\n valueChanged,\n oldValue\n } = setter(gl.state._updateCache, ...params);\n\n if (valueChanged) {\n originalSetterFunc(...params);\n }\n\n return oldValue;\n };\n\n Object.defineProperty(gl[functionName], 'name', {\n value: \"\".concat(functionName, \"-to-cache\"),\n configurable: false\n });\n}\n\nfunction installProgramSpy(gl) {\n const originalUseProgram = gl.useProgram.bind(gl);\n\n gl.useProgram = function useProgramLuma(handle) {\n if (gl.state.program !== handle) {\n originalUseProgram(handle);\n gl.state.program = handle;\n }\n };\n}\n\nclass GLState {\n constructor(gl) {\n let {\n copyState = false,\n log = () => {}\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.gl = gl;\n this.program = null;\n this.stateStack = [];\n this.enable = true;\n this.cache = copyState ? getParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);\n this.log = log;\n this._updateCache = this._updateCache.bind(this);\n Object.seal(this);\n }\n\n push() {\n let values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.stateStack.push({});\n }\n\n pop() {\n assert(this.stateStack.length > 0);\n const oldValues = this.stateStack[this.stateStack.length - 1];\n setParameters(this.gl, oldValues);\n this.stateStack.pop();\n }\n\n _updateCache(values) {\n let valueChanged = false;\n let oldValue;\n const oldValues = this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1];\n\n for (const key in values) {\n assert(key !== undefined);\n const value = values[key];\n const cached = this.cache[key];\n\n if (!deepArrayEqual(value, cached)) {\n valueChanged = true;\n oldValue = cached;\n\n if (oldValues && !(key in oldValues)) {\n oldValues[key] = cached;\n }\n\n this.cache[key] = value;\n }\n }\n\n return {\n valueChanged,\n oldValue\n };\n }\n\n}\n\nexport function trackContextState(gl) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n enable = true,\n copyState\n } = options;\n assert(copyState !== undefined);\n\n if (!gl.state) {\n const {\n polyfillContext\n } = globalThis;\n\n if (polyfillContext) {\n polyfillContext(gl);\n }\n\n gl.state = new GLState(gl, {\n copyState\n });\n installProgramSpy(gl);\n\n for (const key in GL_HOOKED_SETTERS) {\n const setter = GL_HOOKED_SETTERS[key];\n installSetterSpy(gl, key, setter);\n }\n\n installGetterOverride(gl, 'getParameter');\n installGetterOverride(gl, 'isEnabled');\n }\n\n gl.state.enable = enable;\n return gl;\n}\nexport function pushContextState(gl) {\n if (!gl.state) {\n trackContextState(gl, {\n copyState: false\n });\n }\n\n gl.state.push();\n}\nexport function popContextState(gl) {\n assert(gl.state);\n gl.state.pop();\n}\n//# sourceMappingURL=track-context-state.js.map","import { GL_PARAMETER_DEFAULTS, GL_PARAMETER_SETTERS, GL_COMPOSITE_PARAMETER_SETTERS, GL_PARAMETER_GETTERS } from './webgl-parameter-tables';\nimport { pushContextState, popContextState } from './track-context-state';\nimport { assert } from '../utils/assert';\nimport { isWebGL } from '../utils/webgl-checks';\nimport { isObjectEmpty } from '../utils/utils';\nexport function setParameters(gl, values) {\n assert(isWebGL(gl), 'setParameters requires a WebGL context');\n\n if (isObjectEmpty(values)) {\n return;\n }\n\n const compositeSetters = {};\n\n for (const key in values) {\n const glConstant = Number(key);\n const setter = GL_PARAMETER_SETTERS[key];\n\n if (setter) {\n if (typeof setter === 'string') {\n compositeSetters[setter] = true;\n } else {\n setter(gl, values[key], glConstant);\n }\n }\n }\n\n const cache = gl.state && gl.state.cache;\n\n if (cache) {\n for (const key in compositeSetters) {\n const compositeSetter = GL_COMPOSITE_PARAMETER_SETTERS[key];\n compositeSetter(gl, values, cache);\n }\n }\n}\nexport function getParameters(gl, parameters) {\n parameters = parameters || GL_PARAMETER_DEFAULTS;\n\n if (typeof parameters === 'number') {\n const key = parameters;\n const getter = GL_PARAMETER_GETTERS[key];\n return getter ? getter(gl, key) : gl.getParameter(key);\n }\n\n const parameterKeys = Array.isArray(parameters) ? parameters : Object.keys(parameters);\n const state = {};\n\n for (const key of parameterKeys) {\n const getter = GL_PARAMETER_GETTERS[key];\n state[key] = getter ? getter(gl, Number(key)) : gl.getParameter(Number(key));\n }\n\n return state;\n}\nexport function resetParameters(gl) {\n setParameters(gl, GL_PARAMETER_DEFAULTS);\n}\nexport function withParameters(gl, parameters, func) {\n if (isObjectEmpty(parameters)) {\n return func(gl);\n }\n\n const {\n nocatch = true\n } = parameters;\n pushContextState(gl);\n setParameters(gl, parameters);\n let value;\n\n if (nocatch) {\n value = func(gl);\n popContextState(gl);\n } else {\n try {\n value = func(gl);\n } finally {\n popContextState(gl);\n }\n }\n\n return value;\n}\n//# sourceMappingURL=unified-parameter-api.js.map","export function cssToDeviceRatio(gl) {\n const {\n luma\n } = gl;\n\n if (gl.canvas && luma) {\n const {\n clientWidth\n } = luma.canvasSizeInfo;\n return clientWidth ? gl.drawingBufferWidth / clientWidth : 1;\n }\n\n return 1;\n}\nexport function cssToDevicePixels(gl, cssPixel) {\n let yInvert = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n const ratio = cssToDeviceRatio(gl);\n const width = gl.drawingBufferWidth;\n const height = gl.drawingBufferHeight;\n return scalePixels(cssPixel, ratio, width, height, yInvert);\n}\nexport function getDevicePixelRatio(useDevicePixels) {\n const windowRatio = typeof window === 'undefined' ? 1 : window.devicePixelRatio || 1;\n\n if (Number.isFinite(useDevicePixels)) {\n return useDevicePixels <= 0 ? 1 : useDevicePixels;\n }\n\n return useDevicePixels ? windowRatio : 1;\n}\n\nfunction scalePixels(pixel, ratio, width, height, yInvert) {\n const x = scaleX(pixel[0], ratio, width);\n let y = scaleY(pixel[1], ratio, height, yInvert);\n let t = scaleX(pixel[0] + 1, ratio, width);\n const xHigh = t === width - 1 ? t : t - 1;\n t = scaleY(pixel[1] + 1, ratio, height, yInvert);\n let yHigh;\n\n if (yInvert) {\n t = t === 0 ? t : t + 1;\n yHigh = y;\n y = t;\n } else {\n yHigh = t === height - 1 ? t : t - 1;\n }\n\n return {\n x,\n y,\n width: Math.max(xHigh - x + 1, 1),\n height: Math.max(yHigh - y + 1, 1)\n };\n}\n\nfunction scaleX(x, ratio, width) {\n const r = Math.min(Math.round(x * ratio), width - 1);\n return r;\n}\n\nfunction scaleY(y, ratio, height, yInvert) {\n return yInvert ? Math.max(0, height - 1 - Math.round(y * ratio)) : Math.min(Math.round(y * ratio), height - 1);\n}\n//# sourceMappingURL=device-pixels.js.map","import { isBrowser as getIsBrowser } from '@probe.gl/env';\nimport { trackContextState } from '../state-tracker/track-context-state';\nimport { log } from '../utils/log';\nimport { assert } from '../utils/assert';\nimport { getDevicePixelRatio } from '../utils/device-pixels';\nimport { isWebGL2 } from '../utils/webgl-checks';\nconst isBrowser = getIsBrowser();\nconst isPage = isBrowser && typeof document !== 'undefined';\nconst CONTEXT_DEFAULTS = {\n webgl2: true,\n webgl1: true,\n throwOnError: true,\n manageState: true,\n canvas: null,\n debug: false,\n width: 800,\n height: 600\n};\nexport function createGLContext() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n assert(isBrowser, \"createGLContext only available in the browser.\\nCreate your own headless context or use 'createHeadlessContext' from @luma.gl/test-utils\");\n options = Object.assign({}, CONTEXT_DEFAULTS, options);\n const {\n width,\n height\n } = options;\n\n function onError(message) {\n if (options.throwOnError) {\n throw new Error(message);\n }\n\n console.error(message);\n return null;\n }\n\n options.onError = onError;\n let gl;\n const {\n canvas\n } = options;\n const targetCanvas = getCanvas({\n canvas,\n width,\n height,\n onError\n });\n gl = createBrowserContext(targetCanvas, options);\n\n if (!gl) {\n return null;\n }\n\n gl = instrumentGLContext(gl, options);\n logInfo(gl);\n return gl;\n}\nexport function instrumentGLContext(gl) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!gl || gl._instrumented) {\n return gl;\n }\n\n gl._version = gl._version || getVersion(gl);\n gl.luma = gl.luma || {};\n gl.luma.canvasSizeInfo = gl.luma.canvasSizeInfo || {};\n options = Object.assign({}, CONTEXT_DEFAULTS, options);\n const {\n manageState,\n debug\n } = options;\n\n if (manageState) {\n trackContextState(gl, {\n copyState: false,\n log: function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return log.log(1, ...args)();\n }\n });\n }\n\n if (isBrowser && debug) {\n if (!globalThis.makeDebugContext) {\n log.warn('WebGL debug mode not activated. import \"@luma.gl/debug\" to enable.')();\n } else {\n gl = globalThis.makeDebugContext(gl, options);\n log.level = Math.max(log.level, 1);\n }\n }\n\n gl._instrumented = true;\n return gl;\n}\nexport function getContextDebugInfo(gl) {\n const vendorMasked = gl.getParameter(7936);\n const rendererMasked = gl.getParameter(7937);\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n const vendorUnmasked = ext && gl.getParameter(ext.UNMASKED_VENDOR_WEBGL || 7936);\n const rendererUnmasked = ext && gl.getParameter(ext.UNMASKED_RENDERER_WEBGL || 7937);\n return {\n vendor: vendorUnmasked || vendorMasked,\n renderer: rendererUnmasked || rendererMasked,\n vendorMasked,\n rendererMasked,\n version: gl.getParameter(7938),\n shadingLanguageVersion: gl.getParameter(35724)\n };\n}\nexport function resizeGLContext(gl) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (gl.canvas) {\n const devicePixelRatio = getDevicePixelRatio(options.useDevicePixels);\n setDevicePixelRatio(gl, devicePixelRatio, options);\n return;\n }\n\n const ext = gl.getExtension('STACKGL_resize_drawingbuffer');\n\n if (ext && \"width\" in options && \"height\" in options) {\n ext.resize(options.width, options.height);\n }\n}\n\nfunction createBrowserContext(canvas, options) {\n const {\n onError\n } = options;\n let errorMessage = null;\n\n const onCreateError = error => errorMessage = error.statusMessage || errorMessage;\n\n canvas.addEventListener('webglcontextcreationerror', onCreateError, false);\n const {\n webgl1 = true,\n webgl2 = true\n } = options;\n let gl = null;\n\n if (webgl2) {\n gl = gl || canvas.getContext('webgl2', options);\n gl = gl || canvas.getContext('experimental-webgl2', options);\n }\n\n if (webgl1) {\n gl = gl || canvas.getContext('webgl', options);\n gl = gl || canvas.getContext('experimental-webgl', options);\n }\n\n canvas.removeEventListener('webglcontextcreationerror', onCreateError, false);\n\n if (!gl) {\n return onError(\"Failed to create \".concat(webgl2 && !webgl1 ? 'WebGL2' : 'WebGL', \" context: \").concat(errorMessage || 'Unknown error'));\n }\n\n if (options.onContextLost) {\n canvas.addEventListener('webglcontextlost', options.onContextLost, false);\n }\n\n if (options.onContextRestored) {\n canvas.addEventListener('webglcontextrestored', options.onContextRestored, false);\n }\n\n return gl;\n}\n\nfunction getCanvas(_ref) {\n let {\n canvas,\n width = 800,\n height = 600,\n onError\n } = _ref;\n let targetCanvas;\n\n if (typeof canvas === 'string') {\n const isPageLoaded = isPage && document.readyState === 'complete';\n\n if (!isPageLoaded) {\n onError(\"createGLContext called on canvas '\".concat(canvas, \"' before page was loaded\"));\n }\n\n targetCanvas = document.getElementById(canvas);\n } else if (canvas) {\n targetCanvas = canvas;\n } else {\n targetCanvas = document.createElement('canvas');\n targetCanvas.id = 'lumagl-canvas';\n targetCanvas.style.width = Number.isFinite(width) ? \"\".concat(width, \"px\") : '100%';\n targetCanvas.style.height = Number.isFinite(height) ? \"\".concat(height, \"px\") : '100%';\n document.body.insertBefore(targetCanvas, document.body.firstChild);\n }\n\n return targetCanvas;\n}\n\nfunction logInfo(gl) {\n const webGL = isWebGL2(gl) ? 'WebGL2' : 'WebGL1';\n const info = getContextDebugInfo(gl);\n const driver = info ? \"(\".concat(info.vendor, \",\").concat(info.renderer, \")\") : '';\n const debug = gl.debug ? ' debug' : '';\n log.info(1, \"\".concat(webGL).concat(debug, \" context \").concat(driver))();\n}\n\nfunction getVersion(gl) {\n if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {\n return 2;\n }\n\n return 1;\n}\n\nfunction setDevicePixelRatio(gl, devicePixelRatio, options) {\n let clientWidth = 'width' in options ? options.width : gl.canvas.clientWidth;\n let clientHeight = 'height' in options ? options.height : gl.canvas.clientHeight;\n\n if (!clientWidth || !clientHeight) {\n log.log(1, 'Canvas clientWidth/clientHeight is 0')();\n devicePixelRatio = 1;\n clientWidth = gl.canvas.width || 1;\n clientHeight = gl.canvas.height || 1;\n }\n\n gl.luma = gl.luma || {};\n gl.luma.canvasSizeInfo = gl.luma.canvasSizeInfo || {};\n const cachedSize = gl.luma.canvasSizeInfo;\n\n if (cachedSize.clientWidth !== clientWidth || cachedSize.clientHeight !== clientHeight || cachedSize.devicePixelRatio !== devicePixelRatio) {\n let clampedPixelRatio = devicePixelRatio;\n const canvasWidth = Math.floor(clientWidth * clampedPixelRatio);\n const canvasHeight = Math.floor(clientHeight * clampedPixelRatio);\n gl.canvas.width = canvasWidth;\n gl.canvas.height = canvasHeight;\n\n if (gl.drawingBufferWidth !== canvasWidth || gl.drawingBufferHeight !== canvasHeight) {\n log.warn(\"Device pixel ratio clamped\")();\n clampedPixelRatio = Math.min(gl.drawingBufferWidth / clientWidth, gl.drawingBufferHeight / clientHeight);\n gl.canvas.width = Math.floor(clientWidth * clampedPixelRatio);\n gl.canvas.height = Math.floor(clientHeight * clampedPixelRatio);\n }\n\n Object.assign(gl.luma.canvasSizeInfo, {\n clientWidth,\n clientHeight,\n devicePixelRatio\n });\n }\n}\n//# sourceMappingURL=context.js.map","export { log } from './utils/log';\nexport { isWebGL, isWebGL2, getWebGL2Context, assertWebGLContext, assertWebGL2Context } from './utils/webgl-checks';\nexport { polyfillContext } from './polyfill/polyfill-context';\nexport { getParameters, setParameters, resetParameters, withParameters } from './state-tracker/unified-parameter-api';\nexport { trackContextState, pushContextState, popContextState } from './state-tracker/track-context-state';\nexport { createGLContext, resizeGLContext, instrumentGLContext, getContextDebugInfo } from './context/context';\nexport { cssToDeviceRatio, cssToDevicePixels } from './utils/device-pixels';\n//# sourceMappingURL=index.js.map","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","export function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'luma.gl: assertion failed.');\n }\n}\n//# sourceMappingURL=assert.js.map","/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// Note: The numeric values here are matched by shader code in the\n// \"project\" and \"project64\" shader modules. Both places need to be\n// updated.\nimport log from '../utils/log';\n\n/**\n * The coordinate system that positions/dimensions are defined in.\n */\nexport const COORDINATE_SYSTEM = {\n /**\n * `LNGLAT` if rendering into a geospatial viewport, `CARTESIAN` otherwise\n */\n DEFAULT: -1,\n /**\n * Positions are interpreted as [longitude, latitude, elevation]\n * longitude/latitude are in degrees, elevation is in meters.\n * Dimensions are in meters.\n */\n LNGLAT: 1,\n\n /**\n * Positions are interpreted as [x, y, z] in meter offsets from the coordinate origin.\n * Dimensions are in meters.\n */\n METER_OFFSETS: 2,\n\n /**\n * Positions are interpreted as [deltaLng, deltaLat, elevation] from the coordinate origin.\n * deltaLng/deltaLat are in degrees, elevation is in meters.\n * Dimensions are in meters.\n */\n LNGLAT_OFFSETS: 3,\n\n /**\n * Positions and dimensions are in the common units of the viewport.\n */\n CARTESIAN: 0\n} as const;\n\n// Enums cannot be directly exported as they are not transpiled correctly into ES5, see https://github.com/visgl/deck.gl/issues/7130\nexport type CoordinateSystem = -1 | 0 | 1 | 2 | 3;\n\n// Deprecated\n/* eslint-disable accessor-pairs */\nObject.defineProperty(COORDINATE_SYSTEM, 'IDENTITY', {\n get: () => {\n log.deprecated('COORDINATE_SYSTEM.IDENTITY', 'COORDINATE_SYSTEM.CARTESIAN')();\n return 0;\n }\n});\n/* eslint-enable accessor-pairs */\n\n/**\n * How coordinates are transformed from the world space into the common space.\n */\nexport const PROJECTION_MODE = {\n /**\n * Render geospatial data in Web Mercator projection\n */\n WEB_MERCATOR: 1,\n /**\n * Render geospatial data as a 3D globe\n */\n GLOBE: 2,\n\n /**\n * (Internal use only) Web Mercator projection at high zoom\n */\n WEB_MERCATOR_AUTO_OFFSET: 4,\n\n /**\n * No transformation\n */\n IDENTITY: 0\n} as const;\n\nexport const UNIT = {\n common: 0,\n meters: 1,\n pixels: 2\n} as const;\n\nexport const EVENTS = {\n click: {handler: 'onClick'},\n panstart: {handler: 'onDragStart'},\n panmove: {handler: 'onDrag'},\n panend: {handler: 'onDragEnd'}\n} as const;\n\n/**\n * The rendering operation to perform with a layer, used in the `operation` prop\n */\nexport const OPERATION = {\n DRAW: 'draw',\n MASK: 'mask'\n} as const;\n","import assert from './assert';\nconst RADIANS_TO_DEGREES = 1 / Math.PI * 180;\nconst DEGREES_TO_RADIANS = 1 / 180 * Math.PI;\nexport const config = {\n EPSILON: 1e-12,\n debug: false,\n precision: 4,\n printTypes: false,\n printDegrees: false,\n printRowMajor: true\n};\nexport function configure(options) {\n for (const key in options) {\n assert(key in config);\n config[key] = options[key];\n }\n\n return config;\n}\nexport function formatValue(value, {\n precision = config.precision\n} = {}) {\n value = round(value);\n return \"\".concat(parseFloat(value.toPrecision(precision)));\n}\nexport function isArray(value) {\n return Array.isArray(value) || ArrayBuffer.isView(value) && !(value instanceof DataView);\n}\nexport function clone(array) {\n return 'clone' in array ? array.clone() : array.slice();\n}\nexport function toRadians(degrees) {\n return radians(degrees);\n}\nexport function toDegrees(radians) {\n return degrees(radians);\n}\nexport function radians(degrees, result) {\n return map(degrees, degrees => degrees * DEGREES_TO_RADIANS, result);\n}\nexport function degrees(radians, result) {\n return map(radians, radians => radians * RADIANS_TO_DEGREES, result);\n}\nexport function sin(radians, result) {\n return map(radians, angle => Math.sin(angle), result);\n}\nexport function cos(radians, result) {\n return map(radians, angle => Math.cos(angle), result);\n}\nexport function tan(radians, result) {\n return map(radians, angle => Math.tan(angle), result);\n}\nexport function asin(radians, result) {\n return map(radians, angle => Math.asin(angle), result);\n}\nexport function acos(radians, result) {\n return map(radians, angle => Math.acos(angle), result);\n}\nexport function atan(radians, result) {\n return map(radians, angle => Math.atan(angle), result);\n}\nexport function clamp(value, min, max) {\n return map(value, value => Math.max(min, Math.min(max, value)));\n}\nexport function lerp(a, b, t) {\n if (isArray(a)) {\n return a.map((ai, i) => lerp(ai, b[i], t));\n }\n\n return t * b + (1 - t) * a;\n}\nexport function equals(a, b, epsilon) {\n const oldEpsilon = config.EPSILON;\n\n if (epsilon) {\n config.EPSILON = epsilon;\n }\n\n try {\n if (a === b) {\n return true;\n }\n\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; ++i) {\n if (!equals(a[i], b[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n if (a && a.equals) {\n return a.equals(b);\n }\n\n if (b && b.equals) {\n return b.equals(a);\n }\n\n if (typeof a === 'number' && typeof b === 'number') {\n return Math.abs(a - b) <= config.EPSILON * Math.max(1, Math.abs(a), Math.abs(b));\n }\n\n return false;\n } finally {\n config.EPSILON = oldEpsilon;\n }\n}\nexport function exactEquals(a, b) {\n if (a === b) {\n return true;\n }\n\n if (a && typeof a === 'object' && b && typeof b === 'object') {\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (a.exactEquals) {\n return a.exactEquals(b);\n }\n }\n\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; ++i) {\n if (!exactEquals(a[i], b[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\nexport function withEpsilon(epsilon, func) {\n const oldPrecision = config.EPSILON;\n config.EPSILON = epsilon;\n let value;\n\n try {\n value = func();\n } finally {\n config.EPSILON = oldPrecision;\n }\n\n return value;\n}\n\nfunction round(value) {\n return Math.round(value / config.EPSILON) * config.EPSILON;\n}\n\nfunction duplicateArray(array) {\n return array.clone ? array.clone() : new Array(array.length);\n}\n\nfunction map(value, func, result) {\n if (isArray(value)) {\n const array = value;\n result = result || duplicateArray(array);\n\n for (let i = 0; i < result.length && i < array.length; ++i) {\n result[i] = func(value[i], i, result);\n }\n\n return result;\n }\n\n return func(value);\n}\n//# sourceMappingURL=common.js.map","/**\r\n * Common utilities\r\n * @module glMatrix\r\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\r\n * Sets the type of array used when creating new vectors and matrices\r\n *\r\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\r\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\r\n * Convert Degree To Radian\r\n *\r\n * @param {Number} a Angle in Degrees\r\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\r\n * Tests whether or not the arguments have approximately the same value, within an absolute\r\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\r\n * than or equal to 1.0, and a relative tolerance is used for larger values)\r\n *\r\n * @param {Number} a The first number to test.\r\n * @param {Number} b The second number to test.\r\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","import {projectPosition} from '../../shaderlib/project/project-functions';\nimport {COORDINATE_SYSTEM} from '../../lib/constants';\n\nimport type Layer from '../../lib/layer';\n\nconst DEFAULT_LIGHT_COLOR = [255, 255, 255];\nconst DEFAULT_LIGHT_INTENSITY = 1.0;\nconst DEFAULT_ATTENUATION = [0, 0, 1];\nconst DEFAULT_LIGHT_POSITION = [0.0, 0.0, 1.0];\n\nlet idCount = 0;\n\nexport type PointLightOptions = {\n id?: string;\n /** Light color, [r, g, b] in the 0-255 range\n * @default [255, 255, 255]\n */\n color?: number[];\n /** Light intensity, higher number is brighter\n * @default 1.0\n */\n intensity?: number;\n /** Light position [x, y, z] in the common space\n * @default [0.0, 0.0, 1.0]\n */\n position?: number[];\n /** Light attenuation\n * @default [0.0, 0.0, 1.0]\n */\n attenuation?: number[];\n};\n\nexport class PointLight {\n id: string;\n color: number[];\n intensity: number;\n type = 'point';\n position: number[];\n attenuation: number[];\n\n protected projectedLight: PointLight;\n\n constructor(props: PointLightOptions = {}) {\n const {color = DEFAULT_LIGHT_COLOR} = props;\n const {intensity = DEFAULT_LIGHT_INTENSITY} = props;\n const {position = DEFAULT_LIGHT_POSITION} = props;\n\n this.id = props.id || `point-${idCount++}`;\n this.color = color;\n this.intensity = intensity;\n this.type = 'point';\n this.position = position;\n this.attenuation = getAttenuation(props);\n this.projectedLight = {...this};\n }\n\n getProjectedLight({layer}: {layer: Layer}): PointLight {\n const {projectedLight} = this;\n const viewport = layer.context.viewport;\n const {coordinateSystem, coordinateOrigin} = layer.props;\n const position = projectPosition(this.position, {\n viewport,\n coordinateSystem,\n coordinateOrigin,\n fromCoordinateSystem: viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN,\n fromCoordinateOrigin: [0, 0, 0]\n });\n projectedLight.color = this.color;\n projectedLight.intensity = this.intensity;\n projectedLight.position = position;\n return projectedLight;\n }\n}\n\nfunction getAttenuation(props: PointLightOptions): number[] {\n if (props.attenuation) {\n return props.attenuation;\n }\n if ('intensity' in props) {\n return [0, 0, props.intensity || 0];\n }\n return DEFAULT_ATTENUATION;\n}\n","/* eslint-disable camelcase */\nimport {PointLight} from './point-light';\nimport {getUniformsFromViewport} from '../../shaderlib/project/viewport-uniforms';\nimport type Layer from '../../lib/layer';\n\nexport default class CameraLight extends PointLight {\n getProjectedLight({layer}: {layer: Layer}): PointLight {\n const {projectedLight} = this;\n const viewport = layer.context.viewport;\n const {coordinateSystem, coordinateOrigin, modelMatrix} = layer.props;\n const {project_uCameraPosition} = getUniformsFromViewport({\n viewport,\n modelMatrix,\n coordinateSystem,\n coordinateOrigin\n });\n projectedLight.color = this.color;\n projectedLight.intensity = this.intensity;\n projectedLight.position = project_uCameraPosition;\n return projectedLight;\n }\n}\n","const DEGREES_TO_RADIANS = Math.PI / 180;\nconst DAY_IN_MS = 1000 * 60 * 60 * 24;\nconst JD1970 = 2440588;\nconst JD2000 = 2451545;\nconst e = DEGREES_TO_RADIANS * 23.4397;\nconst M0 = 357.5291;\nconst M1 = 0.98560028;\nconst THETA0 = 280.147;\nconst THETA1 = 360.9856235;\nexport function getSunPosition(timestamp, latitude, longitude) {\n const longitudeWestInRadians = DEGREES_TO_RADIANS * -longitude;\n const phi = DEGREES_TO_RADIANS * latitude;\n const d = toDays(timestamp);\n const c = getSunCoords(d);\n const H = getSiderealTime(d, longitudeWestInRadians) - c.rightAscension;\n return {\n azimuth: getAzimuth(H, phi, c.declination),\n altitude: getAltitude(H, phi, c.declination)\n };\n}\nexport function getSunDirection(timestamp, latitude, longitude) {\n const {\n azimuth,\n altitude\n } = getSunPosition(timestamp, latitude, longitude);\n return [Math.sin(azimuth) * Math.cos(altitude), Math.cos(azimuth) * Math.cos(altitude), -Math.sin(altitude)];\n}\n\nfunction toJulianDay(timestamp) {\n const ts = typeof timestamp === 'number' ? timestamp : timestamp.getTime();\n return ts / DAY_IN_MS - 0.5 + JD1970;\n}\n\nfunction toDays(timestamp) {\n return toJulianDay(timestamp) - JD2000;\n}\n\nfunction getRightAscension(eclipticLongitude, b) {\n const lambda = eclipticLongitude;\n return Math.atan2(Math.sin(lambda) * Math.cos(e) - Math.tan(b) * Math.sin(e), Math.cos(lambda));\n}\n\nfunction getDeclination(eclipticLongitude, b) {\n const lambda = eclipticLongitude;\n return Math.asin(Math.sin(b) * Math.cos(e) + Math.cos(b) * Math.sin(e) * Math.sin(lambda));\n}\n\nfunction getAzimuth(hourAngle, latitudeInRadians, declination) {\n const H = hourAngle;\n const phi = latitudeInRadians;\n const delta = declination;\n return Math.atan2(Math.sin(H), Math.cos(H) * Math.sin(phi) - Math.tan(delta) * Math.cos(phi));\n}\n\nfunction getAltitude(hourAngle, latitudeInRadians, declination) {\n const H = hourAngle;\n const phi = latitudeInRadians;\n const delta = declination;\n return Math.asin(Math.sin(phi) * Math.sin(delta) + Math.cos(phi) * Math.cos(delta) * Math.cos(H));\n}\n\nfunction getSiderealTime(dates, longitudeWestInRadians) {\n return DEGREES_TO_RADIANS * (THETA0 + THETA1 * dates) - longitudeWestInRadians;\n}\n\nfunction getSolarMeanAnomaly(days) {\n return DEGREES_TO_RADIANS * (M0 + M1 * days);\n}\n\nfunction getEclipticLongitude(meanAnomaly) {\n const M = meanAnomaly;\n const C = DEGREES_TO_RADIANS * (1.9148 * Math.sin(M) + 0.02 * Math.sin(2 * M) + 0.0003 * Math.sin(3 * M));\n const P = DEGREES_TO_RADIANS * 102.9372;\n return M + C + P + Math.PI;\n}\n\nfunction getSunCoords(dates) {\n const M = getSolarMeanAnomaly(dates);\n const L = getEclipticLongitude(M);\n return {\n declination: getDeclination(L, 0),\n rightAscension: getRightAscension(L, 0)\n };\n}\n//# sourceMappingURL=suncalc.js.map","import {DirectionalLight} from './directional-light';\nimport {getSunDirection} from '@math.gl/sun';\n\nimport type Layer from '../../lib/layer';\n\nexport type SunLightOptions = {\n id?: string;\n /** Light color, [r, g, b] in the 0-255 range\n * @default [255, 255, 255]\n */\n color?: number[];\n /** Light intensity, higher number is brighter\n * @default 1.0\n */\n intensity?: number;\n /**\n * The time at which to position the sun. Either a Date object or a timestamp (milliseconds elapsed since unix time 0)\n */\n timestamp: number | Date;\n /** (Experimental) render shadows casted by this light\n * @default false\n */\n _shadow?: boolean;\n};\n\nexport default class SunLight extends DirectionalLight {\n timestamp: number | Date;\n\n constructor(opts: SunLightOptions) {\n super(opts);\n\n this.timestamp = opts.timestamp;\n }\n\n getProjectedLight({layer}: {layer: Layer}): DirectionalLight {\n const {viewport} = layer.context;\n const isGlobe = viewport.resolution && viewport.resolution > 0;\n\n if (isGlobe) {\n // Rotate vector to align with the direction of the globe projection (up at lon:0,lat:0 is [0, -1, 0])\n const [x, y, z] = getSunDirection(this.timestamp, 0, 0);\n this.direction = [x, -z, y];\n } else {\n // @ts-expect-error longitude and latitude are not defined on all viewports\n const {latitude, longitude} = viewport;\n this.direction = getSunDirection(this.timestamp, latitude, longitude);\n }\n\n return this;\n }\n}\n","import Model from '../lib/model';\nimport Geometry from '../geometry/geometry';\nconst CLIPSPACE_VERTEX_SHADER = \"attribute vec2 aClipSpacePosition;\\nattribute vec2 aTexCoord;\\nattribute vec2 aCoordinate;\\n\\nvarying vec2 position;\\nvarying vec2 coordinate;\\nvarying vec2 uv;\\n\\nvoid main(void) {\\n gl_Position = vec4(aClipSpacePosition, 0., 1.);\\n position = aClipSpacePosition;\\n coordinate = aCoordinate;\\n uv = aTexCoord;\\n}\\n\";\nconst POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];\nexport default class ClipSpace extends Model {\n constructor(gl, opts) {\n const TEX_COORDS = POSITIONS.map(coord => coord === -1 ? 0 : coord);\n super(gl, Object.assign({}, opts, {\n vs: CLIPSPACE_VERTEX_SHADER,\n geometry: new Geometry({\n drawMode: 5,\n vertexCount: 4,\n attributes: {\n aClipSpacePosition: {\n size: 2,\n value: new Float32Array(POSITIONS)\n },\n aTexCoord: {\n size: 2,\n value: new Float32Array(TEX_COORDS)\n },\n aCoordinate: {\n size: 2,\n value: new Float32Array(TEX_COORDS)\n }\n }\n })\n }));\n this.setVertexCount(4);\n }\n\n}\n//# sourceMappingURL=clip-space.js.map","//\n// A base render pass.\n//\n// Attribution: This class and the multipass system were inspired by\n// the THREE.js EffectComposer and *Pass classes\n\nimport type {Framebuffer} from '@luma.gl/core';\nimport {ClipSpace, setParameters, withParameters, clear} from '@luma.gl/core';\nimport Pass from './pass';\n\nimport type {ShaderModule} from '../types/types';\n\ntype ScreenPassProps = {\n module: ShaderModule;\n fs: string | null;\n id: string;\n moduleSettings: any;\n};\n\ntype ScreenPassRenderOptions = {\n inputBuffer: Framebuffer;\n outputBuffer: Framebuffer;\n};\n\nexport default class ScreenPass extends Pass {\n model: ClipSpace;\n\n constructor(gl: WebGLRenderingContext, props: ScreenPassProps) {\n super(gl, props);\n const {module, fs, id} = props;\n this.model = new ClipSpace(gl, {id, fs, modules: [module]});\n }\n\n render(params: ScreenPassRenderOptions): void {\n const gl = this.gl;\n\n setParameters(gl, {viewport: [0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight]});\n\n withParameters(gl, {framebuffer: params.outputBuffer, clearColor: [0, 0, 0, 0]}, () =>\n this._renderPass(gl, params)\n );\n }\n\n delete() {\n this.model.delete();\n this.model = null;\n }\n\n // Private methods\n\n /**\n * Renders the pass.\n * This is an abstract method that should be overridden.\n * @param inputBuffer - Frame buffer that contains the result of the previous pass\n * @param outputBuffer - Frame buffer that serves as the output render target\n */\n protected _renderPass(gl: WebGLRenderingContext, options: ScreenPassRenderOptions) {\n const {inputBuffer} = options;\n clear(gl, {color: true});\n this.model.draw({\n moduleSettings: this.props.moduleSettings,\n uniforms: {\n texture: inputBuffer,\n texSize: [inputBuffer.width, inputBuffer.height]\n },\n parameters: {\n depthWrite: false,\n depthTest: false\n }\n });\n }\n}\n","import ScreenPass from '../passes/screen-pass';\nimport {normalizeShaderModule} from '@luma.gl/core';\n\nimport type {Effect, PostRenderOptions} from '../lib/effect';\nimport type {Framebuffer} from '@luma.gl/webgl';\nimport type {ShaderModule} from '../types/types';\n\nexport default class PostProcessEffect implements Effect {\n id: string;\n props: any;\n module: ShaderModule;\n passes?: ScreenPass[];\n\n constructor(module: ShaderModule, props: any = {}) {\n this.id = `${module.name}-pass`;\n this.props = props;\n normalizeShaderModule(module);\n this.module = module;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n preRender(): void {}\n\n postRender(gl: WebGLRenderingContext, params: PostRenderOptions): Framebuffer {\n const passes = this.passes || createPasses(gl, this.module, this.id, this.props);\n this.passes = passes;\n\n const {target} = params;\n let inputBuffer = params.inputBuffer;\n let outputBuffer = params.swapBuffer;\n\n for (let index = 0; index < this.passes.length; index++) {\n if (target && index === this.passes.length - 1) {\n outputBuffer = target;\n }\n this.passes[index].render({inputBuffer, outputBuffer});\n const switchBuffer = outputBuffer;\n outputBuffer = inputBuffer;\n inputBuffer = switchBuffer;\n }\n return inputBuffer;\n }\n\n cleanup(): void {\n if (this.passes) {\n for (const pass of this.passes) {\n pass.delete();\n }\n this.passes = undefined;\n }\n }\n}\n\nfunction createPasses(\n gl: WebGLRenderingContext,\n module: ShaderModule,\n id: string,\n moduleSettings: any\n): ScreenPass[] {\n if (!module.passes) {\n const fs = getFragmentShaderForRenderPass(module);\n const pass = new ScreenPass(gl, {\n id,\n module,\n fs,\n moduleSettings\n });\n return [pass];\n }\n\n return module.passes.map((pass, index) => {\n const fs = getFragmentShaderForRenderPass(module, pass);\n const idn = `${id}-${index}`;\n\n return new ScreenPass(gl, {\n id: idn,\n module,\n fs,\n moduleSettings\n });\n });\n}\n\nconst FILTER_FS_TEMPLATE = func => `\\\nuniform sampler2D texture;\nuniform vec2 texSize;\n\nvarying vec2 position;\nvarying vec2 coordinate;\nvarying vec2 uv;\n\nvoid main() {\n vec2 texCoord = coordinate;\n\n gl_FragColor = texture2D(texture, texCoord);\n gl_FragColor = ${func}(gl_FragColor, texSize, texCoord);\n}\n`;\n\nconst SAMPLER_FS_TEMPLATE = func => `\\\nuniform sampler2D texture;\nuniform vec2 texSize;\n\nvarying vec2 position;\nvarying vec2 coordinate;\nvarying vec2 uv;\n\nvoid main() {\n vec2 texCoord = coordinate;\n\n gl_FragColor = ${func}(texture, texSize, texCoord);\n}\n`;\n\nfunction getFragmentShaderForRenderPass(module, pass = module) {\n if (pass.filter) {\n const func = typeof pass.filter === 'string' ? pass.filter : `${module.name}_filterColor`;\n return FILTER_FS_TEMPLATE(func);\n }\n\n if (pass.sampler) {\n const func = typeof pass.sampler === 'string' ? pass.sampler : `${module.name}_sampleColor`;\n return SAMPLER_FS_TEMPLATE(func);\n }\n\n // console.error(`${module.name} no fragment shader generated`);\n return null;\n}\n","import Viewport from '../viewports/viewport';\n\nimport {Matrix4} from '@math.gl/core';\nimport {pixelsToWorld, fovyToAltitude} from '@math.gl/web-mercator';\n\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\nfunction getViewMatrix({\n height,\n focalDistance,\n orbitAxis,\n rotationX,\n rotationOrbit,\n zoom\n}: {\n height: number;\n focalDistance: number;\n orbitAxis: 'Y' | 'Z';\n rotationX: number;\n rotationOrbit: number;\n zoom: number;\n}): Matrix4 {\n // We position the camera so that one common space unit (world space unit scaled by zoom)\n // at the target maps to one screen pixel.\n // This is a similar technique to that used in web mercator projection\n // By doing so we are able to convert between common space and screen space sizes efficiently\n // in the vertex shader.\n const up = orbitAxis === 'Z' ? [0, 0, 1] : [0, 1, 0];\n const eye = orbitAxis === 'Z' ? [0, -focalDistance, 0] : [0, 0, focalDistance];\n\n const viewMatrix = new Matrix4().lookAt({eye, up});\n\n viewMatrix.rotateX(rotationX * DEGREES_TO_RADIANS);\n if (orbitAxis === 'Z') {\n viewMatrix.rotateZ(rotationOrbit * DEGREES_TO_RADIANS);\n } else {\n viewMatrix.rotateY(rotationOrbit * DEGREES_TO_RADIANS);\n }\n\n // When height increases, we need to increase the distance from the camera to the target to\n // keep the 1:1 mapping. However, this also changes the projected depth of each position by\n // moving them further away between the near/far plane.\n // Without modifying the default near/far planes, we instead scale down the common space to\n // remove the distortion to the depth field.\n const projectionScale = Math.pow(2, zoom) / height;\n viewMatrix.scale(projectionScale);\n\n return viewMatrix;\n}\n\nexport type OrbitViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** Axis with 360 degrees rotating freedom, either `'Y'` or `'Z'`, default to `'Z'`. */\n orbitAxis?: 'Y' | 'Z';\n /** The world position at the center of the viewport. Default `[0, 0, 0]`. */\n target?: [number, number, number];\n /** The zoom level of the viewport. `zoom: 0` maps one unit distance to one pixel on screen, and increasing `zoom` by `1` scales the same object to twice as large. Default `0`. */\n zoom?: number;\n /** Rotating angle around orbit axis. Default `0`. */\n rotationOrbit?: number;\n /** Rotating angle around orbit axis. Default `0`. */\n rotationX?: number;\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** Field of view covered by camera, in the perspective case. In degrees. Default `50`. */\n fovy?: number;\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Whether to create an orthographic or perspective projection matrix. Default is `false` (perspective projection). */\n orthographic?: boolean;\n};\n\nexport default class OrbitViewport extends Viewport {\n projectedCenter: number[];\n\n constructor(props: OrbitViewportOptions) {\n const {\n height,\n\n projectionMatrix,\n\n fovy = 50, // For setting camera position\n orbitAxis = 'Z', // Orbit axis with 360 degrees rotating freedom, can only be 'Y' or 'Z'\n target = [0, 0, 0], // Which point is camera looking at, default origin\n\n rotationX = 0, // Rotating angle around X axis\n rotationOrbit = 0, // Rotating angle around orbit axis\n\n zoom = 0\n } = props;\n\n const focalDistance = projectionMatrix ? projectionMatrix[5] / 2 : fovyToAltitude(fovy);\n\n super({\n ...props,\n // in case viewState contains longitude/latitude values,\n // make sure that the base Viewport class does not treat this as a geospatial viewport\n longitude: undefined,\n viewMatrix: getViewMatrix({\n height: height || 1,\n focalDistance,\n orbitAxis,\n rotationX,\n rotationOrbit,\n zoom\n }),\n fovy,\n focalDistance,\n position: target,\n zoom\n });\n\n this.projectedCenter = this.project(this.center);\n }\n\n unproject(xyz: number[], {topLeft = true}: {topLeft?: boolean} = {}): [number, number, number] {\n const [x, y, z = this.projectedCenter[2]] = xyz;\n\n const y2 = topLeft ? y : this.height - y;\n const [X, Y, Z] = pixelsToWorld([x, y2, z], this.pixelUnprojectionMatrix);\n return [X, Y, Z];\n }\n\n panByPosition(coords: number[], pixel: number[]): OrbitViewportOptions {\n const p0 = this.project(coords);\n const nextCenter = [\n this.width / 2 + p0[0] - pixel[0],\n this.height / 2 + p0[1] - pixel[1],\n this.projectedCenter[2]\n ];\n return {\n target: this.unproject(nextCenter)\n };\n }\n}\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Vector3 from './vector3';\nimport { formatValue, equals, config } from '../lib/common';\nimport { degrees, radians, clamp } from '../lib/common';\nimport * as vec3 from 'gl-matrix/vec3';\nconst EPSILON = 0.000001;\nconst EARTH_RADIUS_METERS = 6371000;\nexport default class SphericalCoordinates {\n constructor({\n phi = 0,\n theta = 0,\n radius = 1,\n bearing,\n pitch,\n altitude,\n radiusScale = EARTH_RADIUS_METERS\n } = {}) {\n _defineProperty(this, \"phi\", void 0);\n\n _defineProperty(this, \"theta\", void 0);\n\n _defineProperty(this, \"radius\", void 0);\n\n _defineProperty(this, \"radiusScale\", void 0);\n\n this.phi = phi;\n this.theta = theta;\n this.radius = radius || altitude || 1;\n this.radiusScale = radiusScale || 1;\n\n if (bearing !== undefined) {\n this.bearing = bearing;\n }\n\n if (pitch !== undefined) {\n this.pitch = pitch;\n }\n\n this.check();\n }\n\n toString() {\n return this.formatString(config);\n }\n\n formatString({\n printTypes = false\n }) {\n const f = formatValue;\n return \"\".concat(printTypes ? 'Spherical' : '', \"[rho:\").concat(f(this.radius), \",theta:\").concat(f(this.theta), \",phi:\").concat(f(this.phi), \"]\");\n }\n\n equals(other) {\n return equals(this.radius, other.radius) && equals(this.theta, other.theta) && equals(this.phi, other.phi);\n }\n\n exactEquals(other) {\n return this.radius === other.radius && this.theta === other.theta && this.phi === other.phi;\n }\n\n get bearing() {\n return 180 - degrees(this.phi);\n }\n\n set bearing(v) {\n this.phi = Math.PI - radians(v);\n }\n\n get pitch() {\n return degrees(this.theta);\n }\n\n set pitch(v) {\n this.theta = radians(v);\n }\n\n get longitude() {\n return degrees(this.phi);\n }\n\n get latitude() {\n return degrees(this.theta);\n }\n\n get lng() {\n return degrees(this.phi);\n }\n\n get lat() {\n return degrees(this.theta);\n }\n\n get z() {\n return (this.radius - 1) * this.radiusScale;\n }\n\n set(radius, phi, theta) {\n this.radius = radius;\n this.phi = phi;\n this.theta = theta;\n return this.check();\n }\n\n clone() {\n return new SphericalCoordinates().copy(this);\n }\n\n copy(other) {\n this.radius = other.radius;\n this.phi = other.phi;\n this.theta = other.theta;\n return this.check();\n }\n\n fromLngLatZ([lng, lat, z]) {\n this.radius = 1 + z / this.radiusScale;\n this.phi = radians(lat);\n this.theta = radians(lng);\n return this.check();\n }\n\n fromVector3(v) {\n this.radius = vec3.length(v);\n\n if (this.radius > 0) {\n this.theta = Math.atan2(v[0], v[1]);\n this.phi = Math.acos(clamp(v[2] / this.radius, -1, 1));\n }\n\n return this.check();\n }\n\n toVector3() {\n return new Vector3(0, 0, this.radius).rotateX({\n radians: this.theta\n }).rotateZ({\n radians: this.phi\n });\n }\n\n makeSafe() {\n this.phi = Math.max(EPSILON, Math.min(Math.PI - EPSILON, this.phi));\n return this;\n }\n\n check() {\n if (!Number.isFinite(this.phi) || !Number.isFinite(this.theta) || !(this.radius > 0)) {\n throw new Error('SphericalCoordinates: some fields set to invalid numbers');\n }\n\n return this;\n }\n\n}\n//# sourceMappingURL=spherical-coordinates.js.map","import Viewport from '../viewports/viewport';\nimport {getMeterZoom} from '@math.gl/web-mercator';\nimport {Matrix4, _SphericalCoordinates as SphericalCoordinates} from '@math.gl/core';\n\nexport type FirstPersonViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** Longitude of the camera, in the geospatial case. */\n longitude?: number;\n /** Latitude of the camera, in the geospatial case. */\n latitude?: number;\n /** Meter offsets of the camera from the lng-lat anchor point. Default `[0, 0, 0]`. */\n position?: [number, number, number];\n /** Bearing (heading) of the camera in degrees. Default `0` (north). */\n bearing?: number;\n /** Pitch (tilt) of the camera in degrees. Default `0` (horizontal). */\n pitch?: number;\n /** Transform applied to the camera position and direction */\n modelMatrix?: number[] | null;\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** The up direction, default positive z axis. */\n up?: [number, number, number];\n /** Field of view covered by camera, in degrees. Default `75`. */\n fovy?: number;\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Modifier of viewport scale. Corresponds to the number of pixels per meter. Default `1`. */\n focalDistance?: number;\n};\n\nexport default class FirstPersonViewport extends Viewport {\n longitude?: number;\n latitude?: number;\n\n constructor(props: FirstPersonViewportOptions) {\n // TODO - push direction handling into Matrix4.lookAt\n const {longitude, latitude, modelMatrix, bearing = 0, pitch = 0, up = [0, 0, 1]} = props;\n\n // Always calculate direction from bearing and pitch\n const spherical = new SphericalCoordinates({\n bearing,\n // Avoid \"pixel project matrix not invertible\" error\n pitch: pitch === -90 ? 0.0001 : 90 + pitch\n });\n const dir = spherical.toVector3().normalize();\n\n // Direction is relative to model coordinates, of course\n const center = modelMatrix ? new Matrix4(modelMatrix).transformAsVector(dir) : dir;\n\n // Just the direction. All the positioning is done in viewport.js\n const zoom = Number.isFinite(latitude) ? getMeterZoom({latitude: latitude as number}) : 0;\n const scale = Math.pow(2, zoom);\n const viewMatrix = new Matrix4().lookAt({eye: [0, 0, 0], center, up}).scale(scale);\n\n super({\n ...props,\n zoom,\n viewMatrix\n });\n\n this.latitude = latitude;\n this.longitude = longitude;\n }\n}\n","import Controller from './controller';\nimport ViewState from './view-state';\nimport {mod} from '../utils/math-utils';\nimport LinearInterpolator from '../transitions/linear-interpolator';\n\nimport {Vector3, _SphericalCoordinates as SphericalCoordinates, clamp} from '@math.gl/core';\n\nconst MOVEMENT_SPEED = 20;\n\ntype FirstPersonStateProps = {\n width: number;\n height: number;\n\n position?: number[];\n bearing?: number;\n pitch?: number;\n\n // Geospatial anchor\n longitude?: number | null;\n latitude?: number | null;\n\n maxPitch?: number;\n minPitch?: number;\n};\n\ntype FirstPersonStateInternal = {\n startRotatePos?: [number, number];\n startBearing?: number;\n startPitch?: number;\n startZoomPosition?: number[];\n};\n\nclass FirstPersonState extends ViewState<\n FirstPersonState,\n FirstPersonStateProps,\n FirstPersonStateInternal\n> {\n constructor(options: FirstPersonStateProps & FirstPersonStateInternal) {\n const {\n /* Viewport arguments */\n width, // Width of viewport\n height, // Height of viewport\n\n // Position and orientation\n position = [0, 0, 0], // typically in meters from anchor point\n\n bearing = 0, // Rotation around y axis\n pitch = 0, // Rotation around x axis\n\n // Geospatial anchor\n longitude = null,\n latitude = null,\n\n maxPitch = 90,\n minPitch = -90,\n\n // Model state when the rotate operation first started\n startRotatePos,\n startBearing,\n startPitch,\n startZoomPosition\n } = options;\n\n super(\n {\n width,\n height,\n position,\n bearing,\n pitch,\n longitude,\n latitude,\n maxPitch,\n minPitch\n },\n {\n startRotatePos,\n startBearing,\n startPitch,\n startZoomPosition\n }\n );\n }\n\n /* Public API */\n\n /**\n * Start panning\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n panStart(): FirstPersonState {\n return this;\n }\n\n /**\n * Pan\n * @param {[Number, Number]} pos - position on screen where the pointer is\n */\n pan(): FirstPersonState {\n return this;\n }\n\n /**\n * End panning\n * Must call if `panStart()` was called\n */\n panEnd(): FirstPersonState {\n return this;\n }\n\n /**\n * Start rotating\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n rotateStart({pos}: {pos: [number, number]}): FirstPersonState {\n return this._getUpdatedState({\n startRotatePos: pos,\n startBearing: this.getViewportProps().bearing,\n startPitch: this.getViewportProps().pitch\n });\n }\n\n /**\n * Rotate\n * @param {[Number, Number]} pos - position on screen where the pointer is\n */\n rotate({\n pos,\n deltaAngleX = 0,\n deltaAngleY = 0\n }: {\n pos?: [number, number];\n deltaAngleX?: number;\n deltaAngleY: number;\n }): FirstPersonState {\n const {startRotatePos, startBearing, startPitch} = this.getState();\n const {width, height} = this.getViewportProps();\n\n if (!startRotatePos || startBearing === undefined || startPitch === undefined) {\n return this;\n }\n\n let newRotation;\n if (pos) {\n const deltaScaleX = (pos[0] - startRotatePos[0]) / width;\n const deltaScaleY = (pos[1] - startRotatePos[1]) / height;\n newRotation = {\n bearing: startBearing - deltaScaleX * 180,\n pitch: startPitch - deltaScaleY * 90\n };\n } else {\n newRotation = {\n bearing: startBearing - deltaAngleX,\n pitch: startPitch - deltaAngleY\n };\n }\n\n return this._getUpdatedState(newRotation);\n }\n\n /**\n * End rotating\n * Must call if `rotateStart()` was called\n */\n rotateEnd(): FirstPersonState {\n return this._getUpdatedState({\n startRotatePos: null,\n startBearing: null,\n startPitch: null\n });\n }\n\n /**\n * Start zooming\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n zoomStart(): FirstPersonState {\n return this._getUpdatedState({\n startZoomPosition: this.getViewportProps().position\n });\n }\n\n /**\n * Zoom\n * @param {[Number, Number]} pos - position on screen where the current center is\n * @param {[Number, Number]} startPos - the center position at\n * the start of the operation. Must be supplied of `zoomStart()` was not called\n * @param {Number} scale - a number between [0, 1] specifying the accumulated\n * relative scale.\n */\n zoom({scale}: {scale: number}): FirstPersonState {\n let {startZoomPosition} = this.getState();\n if (!startZoomPosition) {\n startZoomPosition = this.getViewportProps().position;\n }\n\n const direction = this.getDirection();\n return this._move(direction, Math.log2(scale) * MOVEMENT_SPEED, startZoomPosition);\n }\n\n /**\n * End zooming\n * Must call if `zoomStart()` was called\n */\n zoomEnd(): FirstPersonState {\n return this._getUpdatedState({\n startZoomPosition: null\n });\n }\n\n moveLeft(speed: number = MOVEMENT_SPEED): FirstPersonState {\n const direction = this.getDirection(true);\n return this._move(direction.rotateZ({radians: Math.PI / 2}), speed);\n }\n\n moveRight(speed: number = MOVEMENT_SPEED): FirstPersonState {\n const direction = this.getDirection(true);\n return this._move(direction.rotateZ({radians: -Math.PI / 2}), speed);\n }\n\n // forward\n moveUp(speed: number = MOVEMENT_SPEED): FirstPersonState {\n const direction = this.getDirection(true);\n return this._move(direction, speed);\n }\n\n // backward\n moveDown(speed: number = MOVEMENT_SPEED): FirstPersonState {\n const direction = this.getDirection(true);\n return this._move(direction.negate(), speed);\n }\n\n rotateLeft(speed: number = 15): FirstPersonState {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing - speed\n });\n }\n\n rotateRight(speed: number = 15): FirstPersonState {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing + speed\n });\n }\n\n rotateUp(speed: number = 10): FirstPersonState {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch + speed\n });\n }\n\n rotateDown(speed: number = 10): FirstPersonState {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch - speed\n });\n }\n\n zoomIn(speed: number = 2): FirstPersonState {\n return this.zoom({scale: speed});\n }\n\n zoomOut(speed: number = 2): FirstPersonState {\n return this.zoom({scale: 1 / speed});\n }\n\n // shortest path between two view states\n shortestPathFrom(viewState: FirstPersonState) {\n const fromProps = viewState.getViewportProps();\n const props = {...this.getViewportProps()};\n const {bearing, longitude} = props;\n\n if (Math.abs(bearing - fromProps.bearing) > 180) {\n props.bearing = bearing < 0 ? bearing + 360 : bearing - 360;\n }\n if (\n longitude !== null &&\n fromProps.longitude !== null &&\n Math.abs(longitude - fromProps.longitude) > 180\n ) {\n props.longitude = longitude < 0 ? longitude + 360 : longitude - 360;\n }\n return props;\n }\n\n /* Private methods */\n _move(\n direction: Vector3,\n speed: number,\n fromPosition: number[] = this.getViewportProps().position\n ) {\n const delta = direction.scale(speed);\n return this._getUpdatedState({\n position: new Vector3(fromPosition).add(delta)\n });\n }\n\n getDirection(use2D: boolean = false): Vector3 {\n const spherical = new SphericalCoordinates({\n bearing: this.getViewportProps().bearing,\n pitch: use2D ? 90 : 90 + this.getViewportProps().pitch\n });\n const direction = spherical.toVector3().normalize();\n return direction;\n }\n\n _getUpdatedState(newProps: Record): FirstPersonState {\n // Update _viewportProps\n return new FirstPersonState({...this.getViewportProps(), ...this.getState(), ...newProps});\n }\n\n // Apply any constraints (mathematical or defined by _viewportProps) to map state\n applyConstraints(props: Required): Required {\n // Ensure pitch and zoom are within specified range\n const {pitch, maxPitch, minPitch, longitude, bearing} = props;\n props.pitch = clamp(pitch, minPitch, maxPitch);\n\n // Normalize degrees\n if (longitude !== null && (longitude < -180 || longitude > 180)) {\n props.longitude = mod(longitude + 180, 360) - 180;\n }\n if (bearing < -180 || bearing > 180) {\n props.bearing = mod(bearing + 180, 360) - 180;\n }\n\n return props;\n }\n}\n\nexport default class FirstPersonController extends Controller {\n ControllerState = FirstPersonState;\n\n transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator(['position', 'pitch', 'bearing'])\n };\n}\n","import View, {CommonViewState} from './view';\nimport FirstPersonViewport from '../viewports/first-person-viewport';\nimport FirstPersonController from '../controllers/first-person-controller';\n\nexport type FirstPersonViewState = {\n /** Longitude of the camera, in the geospatial case. */\n longitude?: number;\n /** Latitude of the camera, in the geospatial case. */\n latitude?: number;\n /** Meter offsets of the camera from the lng-lat anchor point. Default `[0, 0, 0]`. */\n position?: [number, number, number];\n /** Bearing (heading) of the camera in degrees. Default `0` (north). */\n bearing?: number;\n /** Pitch (tilt) of the camera in degrees. Default `0` (horizontal). */\n pitch?: number;\n /** Min pitch angle. Default `-90` (up). */\n minPitch?: number;\n /** Max pitch angle. Default `90` (down). */\n maxPitch?: number;\n /** Transform applied to the camera position and direction */\n modelMatrix?: number[] | null;\n} & CommonViewState;\n\ntype FirstPersonViewProps = {\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** Field of view covered by camera, in degrees. Default `75`. */\n fovy?: number;\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Modifier of viewport scale. Corresponds to the number of pixels per meter. Default `1`. */\n focalDistance?: number;\n};\n\nexport default class FirstPersonView extends View {\n static displayName = 'FirstPersonView';\n\n get ViewportType() {\n return FirstPersonViewport;\n }\n\n get ControllerType() {\n return FirstPersonController;\n }\n}\n","import View, {CommonViewState} from './view';\nimport OrbitViewport from '../viewports/orbit-viewport';\nimport OrbitController from '../controllers/orbit-controller';\n\nexport type OrbitViewState = {\n /** The world position at the center of the viewport. Default `[0, 0, 0]`. */\n target: [number, number, number];\n /** The zoom level of the viewport. `zoom: 0` maps one unit distance to one pixel on screen, and increasing `zoom` by `1` scales the same object to twice as large. Default `0`. */\n zoom: number;\n /** Rotating angle around orbit axis. Default `0`. */\n rotationOrbit?: number;\n /** Rotating angle around orbit axis. Default `0`. */\n rotationX?: number;\n /** The min zoom level of the viewport. Default `-Infinity`. */\n minZoom?: number;\n /** The max zoom level of the viewport. Default `Infinity`. */\n maxZoom?: number;\n /** The min rotating angle around X axis. Default `-90`. */\n minRotationX?: number;\n /** The max rotating angle around X axis. Default `90`. */\n maxRotationX?: number;\n} & CommonViewState;\n\ntype OrbitViewProps = {\n /** Axis with 360 degrees rotating freedom, either `'Y'` or `'Z'`, default to `'Z'`. */\n orbitAxis?: 'Y' | 'Z';\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** Field of view covered by camera, in the perspective case. In degrees. Default `50`. */\n fovy?: number;\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Whether to create an orthographic or perspective projection matrix. Default is `false` (perspective projection). */\n orthographic?: boolean;\n};\n\nexport default class OrbitView extends View {\n static displayName = 'OrbitView';\n\n constructor(props: OrbitViewProps = {}) {\n super(props);\n this.props.orbitAxis = props.orbitAxis || 'Z';\n }\n\n get ViewportType() {\n return OrbitViewport;\n }\n\n get ControllerType() {\n return OrbitController;\n }\n}\n","import {clamp} from '@math.gl/core';\nimport Controller, {ControllerProps} from './controller';\n\nimport {MapState, MapStateProps} from './map-controller';\nimport {mod} from '../utils/math-utils';\nimport LinearInterpolator from '../transitions/linear-interpolator';\n\nclass GlobeState extends MapState {\n // Apply any constraints (mathematical or defined by _viewportProps) to map state\n applyConstraints(props: Required): Required {\n // Ensure zoom is within specified range\n const {maxZoom, minZoom, zoom} = props;\n props.zoom = clamp(zoom, minZoom, maxZoom);\n\n const {longitude, latitude} = props;\n if (longitude < -180 || longitude > 180) {\n props.longitude = mod(longitude + 180, 360) - 180;\n }\n props.latitude = clamp(latitude, -89, 89);\n\n return props;\n }\n}\n\nexport default class GlobeController extends Controller {\n ControllerState = GlobeState;\n\n transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator(['longitude', 'latitude', 'zoom'])\n };\n\n dragMode: 'pan' | 'rotate' = 'pan';\n\n setProps(props: ControllerProps) {\n super.setProps(props);\n\n // TODO - support pitching?\n this.dragRotate = false;\n this.touchRotate = false;\n }\n}\n","import View, {CommonViewState} from './view';\nimport GlobeViewport from '../viewports/globe-viewport';\nimport GlobeController from '../controllers/globe-controller';\n\nexport type GlobeViewState = {\n /** Longitude of the map center */\n longitude: number;\n /** Latitude of the map center */\n latitude: number;\n /** Zoom level */\n zoom: number;\n /** Min zoom, default `0` */\n minZoom?: number;\n /** Max zoom, default `20` */\n maxZoom?: number;\n} & CommonViewState;\n\ntype GlobeViewProps = {\n /** The resolution at which to turn flat features into 3D meshes, in degrees. Smaller numbers will generate more detailed mesh. Default `10`. */\n resolution?: number;\n /** Scaler for the near plane, 1 unit equals to the height of the viewport. Default to `0.1`. Overwrites the `near` parameter. */\n nearZMultiplier?: boolean;\n /** Scaler for the far plane, 1 unit equals to the distance from the camera to the top edge of the screen. Default to `1.01`. Overwrites the `far` parameter. */\n farZMultiplier?: boolean;\n /** Distance of the camera relative to viewport height. Default `1.5`. */\n altitude?: number;\n};\n\nexport default class GlobeView extends View {\n static displayName = 'GlobeView';\n\n get ViewportType() {\n return GlobeViewport;\n }\n\n get ControllerType() {\n return GlobeController;\n }\n}\n","import TransitionInterpolator from './transition-interpolator';\nimport {lerp} from '@math.gl/core';\n\nimport {flyToViewport, getFlyToDuration} from '@math.gl/web-mercator';\n\nconst LINEARLY_INTERPOLATED_PROPS = ['bearing', 'pitch'];\nconst DEFAULT_OPTS = {\n speed: 1.2,\n curve: 1.414\n};\n\n/**\n * This class adapts mapbox-gl-js Map#flyTo animation so it can be used in\n * react/redux architecture.\n * mapbox-gl-js flyTo : https://www.mapbox.com/mapbox-gl-js/api/#map#flyto.\n * It implements “Smooth and efficient zooming and panning.” algorithm by\n * \"Jarke J. van Wijk and Wim A.A. Nuij\"\n */\nexport default class FlyToInterpolator extends TransitionInterpolator {\n opts: {\n curve: number;\n speed: number;\n screenSpeed?: number;\n maxDuration?: number;\n };\n\n constructor(\n opts: {\n /** The zooming \"curve\" that will occur along the flight path. Default 1.414 */\n curve?: number;\n /** The average speed of the animation defined in relation to `options.curve`, it linearly affects the duration, higher speed returns smaller durations and vice versa. Default 1.2 */\n speed?: number;\n /** The average speed of the animation measured in screenfuls per second. Similar to `opts.speed` it linearly affects the duration, when specified `opts.speed` is ignored. */\n screenSpeed?: number;\n /** Maximum duration in milliseconds, if calculated duration exceeds this value, `0` is returned. */\n maxDuration?: number;\n } = {}\n ) {\n super({\n compare: ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'],\n extract: ['width', 'height', 'longitude', 'latitude', 'zoom', 'bearing', 'pitch'],\n required: ['width', 'height', 'latitude', 'longitude', 'zoom']\n });\n this.opts = {...DEFAULT_OPTS, ...opts};\n }\n\n interpolateProps(startProps, endProps, t) {\n const viewport = flyToViewport(startProps, endProps, t, this.opts);\n\n // Linearly interpolate 'bearing' and 'pitch'.\n // If pitch/bearing are not supplied, they are interpreted as zeros in viewport calculation\n // (fallback defined in WebMercatorViewport)\n // Because there is no guarantee that the current controller's ViewState normalizes\n // these props, safe guard is needed to avoid generating NaNs\n for (const key of LINEARLY_INTERPOLATED_PROPS) {\n viewport[key] = lerp(startProps[key] || 0, endProps[key] || 0, t);\n }\n\n return viewport;\n }\n\n // computes the transition duration\n getDuration(startProps, endProps) {\n let {transitionDuration} = endProps;\n if (transitionDuration === 'auto') {\n // auto calculate duration based on start and end props\n transitionDuration = getFlyToDuration(startProps, endProps, this.opts);\n }\n return transitionDuration;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable max-len */\n\n// Intialize globals, check version\nimport './lib/init';\n\n// Import shaderlib to make sure shader modules are initialized\nimport './shaderlib';\n\n// Core Library\nexport {COORDINATE_SYSTEM, OPERATION, UNIT} from './lib/constants';\n\n// Effects\nexport {default as LightingEffect} from './effects/lighting/lighting-effect';\nexport {AmbientLight} from './effects/lighting/ambient-light';\nexport {DirectionalLight} from './effects/lighting/directional-light';\nexport {PointLight} from './effects/lighting/point-light';\nexport {default as _CameraLight} from './effects/lighting/camera-light';\nexport {default as _SunLight} from './effects/lighting/sun-light';\nexport {default as PostProcessEffect} from './effects/post-process-effect';\n\n// Passes\nexport {default as _LayersPass} from './passes/layers-pass';\n\n// Experimental Pure JS (non-React) bindings\nexport {default as Deck} from './lib/deck';\n\nexport {default as LayerManager} from './lib/layer-manager';\nexport {default as AttributeManager} from './lib/attribute/attribute-manager';\nexport {default as Layer} from './lib/layer';\nexport {default as CompositeLayer} from './lib/composite-layer';\nexport {default as DeckRenderer} from './lib/deck-renderer';\n\n// Viewports\nexport {default as Viewport} from './viewports/viewport';\nexport {default as WebMercatorViewport} from './viewports/web-mercator-viewport';\nexport {default as _GlobeViewport} from './viewports/globe-viewport';\nexport {default as OrbitViewport} from './viewports/orbit-viewport';\nexport {default as OrthographicViewport} from './viewports/orthographic-viewport';\nexport {default as FirstPersonViewport} from './viewports/first-person-viewport';\n\n// Shader modules\nexport {picking, project, project32, gouraudLighting, phongLighting, shadow} from './shaderlib';\n\nexport {default as View} from './views/view';\nexport {default as MapView} from './views/map-view';\nexport {default as FirstPersonView} from './views/first-person-view';\nexport {default as OrbitView} from './views/orbit-view';\nexport {default as OrthographicView} from './views/orthographic-view';\nexport {default as _GlobeView} from './views/globe-view';\n\n// Controllers\nexport {default as Controller} from './controllers/controller';\nexport {default as MapController} from './controllers/map-controller';\nexport {default as _GlobeController} from './controllers/globe-controller';\nexport {default as FirstPersonController} from './controllers/first-person-controller';\nexport {default as OrbitController} from './controllers/orbit-controller';\nexport {default as OrthographicController} from './controllers/orthographic-controller';\n\n// Extensions interface\nexport {default as LayerExtension} from './lib/layer-extension';\n\n// Transitions\nexport {TRANSITION_EVENTS} from './controllers/transition-manager';\nexport {default as TransitionInterpolator} from './transitions/transition-interpolator';\nexport {default as LinearInterpolator} from './transitions/linear-interpolator';\nexport {default as FlyToInterpolator} from './transitions/fly-to-interpolator';\n\n// Layer utilities\nexport {default as log} from './utils/log';\nexport {default as assert} from './utils/assert';\nexport {createIterable} from './utils/iterable-utils';\nexport {fp64LowPart} from './utils/math-utils';\nexport {default as Tesselator} from './utils/tesselator'; // Export? move to luma.gl or math.gl?\n\n// Experimental utilities\nexport {fillArray as _fillArray, flatten as _flatten} from './utils/flatten'; // Export? move to luma.gl or math.gl?\nexport {count as _count} from './utils/count';\nexport {default as _memoize} from './utils/memoize';\nexport {mergeShaders as _mergeShaders} from './utils/shader';\nexport {compareProps as _compareProps} from './lifecycle/props';\n\n// Types\nexport type {CoordinateSystem} from './lib/constants';\nexport type {MapViewState} from './views/map-view';\nexport type {FirstPersonViewState} from './views/first-person-view';\nexport type {OrbitViewState} from './views/orbit-view';\nexport type {OrthographicViewState} from './views/orthographic-view';\nexport type {GlobeViewState} from './views/globe-view';\nexport type {ChangeFlags} from './lib/layer-state';\nexport type {LayersList} from './lib/layer-manager';\nexport type {LayerContext} from './lib/layer-manager';\nexport type {UpdateParameters} from './lib/layer';\nexport type {DeckProps} from './lib/deck';\nexport type {\n LayerProps,\n CompositeLayerProps,\n Accessor,\n AccessorFunction,\n LayerData,\n Unit,\n Position,\n Color,\n Texture,\n Material\n} from './types/layer-props';\nexport type {FilterContext} from './passes/layers-pass';\nexport type {PickingInfo, GetPickingInfoParams} from './lib/picking/pick-info';\nexport type {ConstructorOf as _ConstructorOf, ShaderModule as _ShaderModule} from './types/types';\nexport type {BinaryAttribute} from './lib/attribute/attribute';\nexport type {Effect} from './lib/effect';\nexport type {PickingUniforms, ProjectUniforms} from './shaderlib';\nexport type {DefaultProps} from './lifecycle/prop-types';\n","import { transformMat4, scale } from 'gl-matrix/vec4';\nexport function createMat4() {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\nexport function transformVector(matrix, vector) {\n const result = transformMat4([], vector, matrix);\n scale(result, result, 1 / result[3]);\n return result;\n}\nexport function mod(value, divisor) {\n const modulus = value % divisor;\n return modulus < 0 ? divisor + modulus : modulus;\n}\nexport function lerp(start, end, step) {\n return step * end + (1 - step) * start;\n}\nexport function clamp(x, min, max) {\n return x < min ? min : x > max ? max : x;\n}\n\nfunction ieLog2(x) {\n return Math.log(x) * Math.LOG2E;\n}\n\nexport const log2 = Math.log2 || ieLog2;\n//# sourceMappingURL=math-utils.js.map","export default function assert(condition, message) {\n if (!condition) {\n throw new Error(message || '@math.gl/web-mercator: assertion failed.');\n }\n}\n//# sourceMappingURL=assert.js.map","import { createMat4, transformVector, clamp, log2 } from './math-utils';\nimport * as mat4 from 'gl-matrix/mat4';\nimport * as vec2 from 'gl-matrix/vec2';\nimport * as vec3 from 'gl-matrix/vec3';\nimport assert from './assert';\nconst PI = Math.PI;\nconst PI_4 = PI / 4;\nconst DEGREES_TO_RADIANS = PI / 180;\nconst RADIANS_TO_DEGREES = 180 / PI;\nconst TILE_SIZE = 512;\nconst EARTH_CIRCUMFERENCE = 40.03e6;\nexport const MAX_LATITUDE = 85.051129;\nexport const DEFAULT_ALTITUDE = 1.5;\nexport function zoomToScale(zoom) {\n return Math.pow(2, zoom);\n}\nexport function scaleToZoom(scale) {\n return log2(scale);\n}\nexport function lngLatToWorld(lngLat) {\n const [lng, lat] = lngLat;\n assert(Number.isFinite(lng));\n assert(Number.isFinite(lat) && lat >= -90 && lat <= 90, 'invalid latitude');\n const lambda2 = lng * DEGREES_TO_RADIANS;\n const phi2 = lat * DEGREES_TO_RADIANS;\n const x = TILE_SIZE * (lambda2 + PI) / (2 * PI);\n const y = TILE_SIZE * (PI + Math.log(Math.tan(PI_4 + phi2 * 0.5))) / (2 * PI);\n return [x, y];\n}\nexport function worldToLngLat(xy) {\n const [x, y] = xy;\n const lambda2 = x / TILE_SIZE * (2 * PI) - PI;\n const phi2 = 2 * (Math.atan(Math.exp(y / TILE_SIZE * (2 * PI) - PI)) - PI_4);\n return [lambda2 * RADIANS_TO_DEGREES, phi2 * RADIANS_TO_DEGREES];\n}\nexport function getMeterZoom(options) {\n const {\n latitude\n } = options;\n assert(Number.isFinite(latitude));\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return scaleToZoom(EARTH_CIRCUMFERENCE * latCosine) - 9;\n}\nexport function unitsPerMeter(latitude) {\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return TILE_SIZE / EARTH_CIRCUMFERENCE / latCosine;\n}\nexport function getDistanceScales(options) {\n const {\n latitude,\n longitude,\n highPrecision = false\n } = options;\n assert(Number.isFinite(latitude) && Number.isFinite(longitude));\n const worldSize = TILE_SIZE;\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n const unitsPerDegreeX = worldSize / 360;\n const unitsPerDegreeY = unitsPerDegreeX / latCosine;\n const altUnitsPerMeter = worldSize / EARTH_CIRCUMFERENCE / latCosine;\n const result = {\n unitsPerMeter: [altUnitsPerMeter, altUnitsPerMeter, altUnitsPerMeter],\n metersPerUnit: [1 / altUnitsPerMeter, 1 / altUnitsPerMeter, 1 / altUnitsPerMeter],\n unitsPerDegree: [unitsPerDegreeX, unitsPerDegreeY, altUnitsPerMeter],\n degreesPerUnit: [1 / unitsPerDegreeX, 1 / unitsPerDegreeY, 1 / altUnitsPerMeter]\n };\n\n if (highPrecision) {\n const latCosine2 = DEGREES_TO_RADIANS * Math.tan(latitude * DEGREES_TO_RADIANS) / latCosine;\n const unitsPerDegreeY2 = unitsPerDegreeX * latCosine2 / 2;\n const altUnitsPerDegree2 = worldSize / EARTH_CIRCUMFERENCE * latCosine2;\n const altUnitsPerMeter2 = altUnitsPerDegree2 / unitsPerDegreeY * altUnitsPerMeter;\n result.unitsPerDegree2 = [0, unitsPerDegreeY2, altUnitsPerDegree2];\n result.unitsPerMeter2 = [altUnitsPerMeter2, 0, altUnitsPerMeter2];\n }\n\n return result;\n}\nexport function addMetersToLngLat(lngLatZ, xyz) {\n const [longitude, latitude, z0] = lngLatZ;\n const [x, y, z] = xyz;\n const {\n unitsPerMeter,\n unitsPerMeter2\n } = getDistanceScales({\n longitude,\n latitude,\n highPrecision: true\n });\n const worldspace = lngLatToWorld(lngLatZ);\n worldspace[0] += x * (unitsPerMeter[0] + unitsPerMeter2[0] * y);\n worldspace[1] += y * (unitsPerMeter[1] + unitsPerMeter2[1] * y);\n const newLngLat = worldToLngLat(worldspace);\n const newZ = (z0 || 0) + (z || 0);\n return Number.isFinite(z0) || Number.isFinite(z) ? [newLngLat[0], newLngLat[1], newZ] : newLngLat;\n}\nexport function getViewMatrix(options) {\n const {\n height,\n pitch,\n bearing,\n altitude,\n scale,\n center\n } = options;\n const vm = createMat4();\n mat4.translate(vm, vm, [0, 0, -altitude]);\n mat4.rotateX(vm, vm, -pitch * DEGREES_TO_RADIANS);\n mat4.rotateZ(vm, vm, bearing * DEGREES_TO_RADIANS);\n const relativeScale = scale / height;\n mat4.scale(vm, vm, [relativeScale, relativeScale, relativeScale]);\n\n if (center) {\n mat4.translate(vm, vm, vec3.negate([], center));\n }\n\n return vm;\n}\nexport function getProjectionParameters(options) {\n const {\n width,\n height,\n altitude,\n pitch = 0,\n offset,\n center,\n scale,\n nearZMultiplier = 1,\n farZMultiplier = 1\n } = options;\n let {\n fovy = altitudeToFovy(DEFAULT_ALTITUDE)\n } = options;\n\n if (altitude !== undefined) {\n fovy = altitudeToFovy(altitude);\n }\n\n const fovRadians = fovy * DEGREES_TO_RADIANS;\n const pitchRadians = pitch * DEGREES_TO_RADIANS;\n const focalDistance = fovyToAltitude(fovy);\n let cameraToSeaLevelDistance = focalDistance;\n\n if (center) {\n cameraToSeaLevelDistance += center[2] * scale / Math.cos(pitchRadians) / height;\n }\n\n const fovAboveCenter = fovRadians * (0.5 + (offset ? offset[1] : 0) / height);\n const topHalfSurfaceDistance = Math.sin(fovAboveCenter) * cameraToSeaLevelDistance / Math.sin(clamp(Math.PI / 2 - pitchRadians - fovAboveCenter, 0.01, Math.PI - 0.01));\n const furthestDistance = Math.sin(pitchRadians) * topHalfSurfaceDistance + cameraToSeaLevelDistance;\n const horizonDistance = cameraToSeaLevelDistance * 10;\n const farZ = Math.min(furthestDistance * farZMultiplier, horizonDistance);\n return {\n fov: fovRadians,\n aspect: width / height,\n focalDistance,\n near: nearZMultiplier,\n far: farZ\n };\n}\nexport function getProjectionMatrix(options) {\n const {\n fov,\n aspect,\n near,\n far\n } = getProjectionParameters(options);\n const projectionMatrix = mat4.perspective([], fov, aspect, near, far);\n return projectionMatrix;\n}\nexport function altitudeToFovy(altitude) {\n return 2 * Math.atan(0.5 / altitude) * RADIANS_TO_DEGREES;\n}\nexport function fovyToAltitude(fovy) {\n return 0.5 / Math.tan(0.5 * fovy * DEGREES_TO_RADIANS);\n}\nexport function worldToPixels(xyz, pixelProjectionMatrix) {\n const [x, y, z = 0] = xyz;\n assert(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z));\n return transformVector(pixelProjectionMatrix, [x, y, z, 1]);\n}\nexport function pixelsToWorld(xyz, pixelUnprojectionMatrix, targetZ = 0) {\n const [x, y, z] = xyz;\n assert(Number.isFinite(x) && Number.isFinite(y), 'invalid pixel coordinate');\n\n if (Number.isFinite(z)) {\n const coord = transformVector(pixelUnprojectionMatrix, [x, y, z, 1]);\n return coord;\n }\n\n const coord0 = transformVector(pixelUnprojectionMatrix, [x, y, 0, 1]);\n const coord1 = transformVector(pixelUnprojectionMatrix, [x, y, 1, 1]);\n const z0 = coord0[2];\n const z1 = coord1[2];\n const t = z0 === z1 ? 0 : ((targetZ || 0) - z0) / (z1 - z0);\n return vec2.lerp([], coord0, coord1, t);\n}\n//# sourceMappingURL=web-mercator-utils.js.map","import assert from './assert';\nimport { log2, clamp } from './math-utils';\nimport { MAX_LATITUDE, lngLatToWorld, worldToLngLat } from './web-mercator-utils';\nexport default function fitBounds(options) {\n const {\n width,\n height,\n bounds,\n minExtent = 0,\n maxZoom = 24,\n offset = [0, 0]\n } = options;\n const [[west, south], [east, north]] = bounds;\n const padding = getPaddingObject(options.padding);\n const nw = lngLatToWorld([west, clamp(north, -MAX_LATITUDE, MAX_LATITUDE)]);\n const se = lngLatToWorld([east, clamp(south, -MAX_LATITUDE, MAX_LATITUDE)]);\n const size = [Math.max(Math.abs(se[0] - nw[0]), minExtent), Math.max(Math.abs(se[1] - nw[1]), minExtent)];\n const targetSize = [width - padding.left - padding.right - Math.abs(offset[0]) * 2, height - padding.top - padding.bottom - Math.abs(offset[1]) * 2];\n assert(targetSize[0] > 0 && targetSize[1] > 0);\n const scaleX = targetSize[0] / size[0];\n const scaleY = targetSize[1] / size[1];\n const offsetX = (padding.right - padding.left) / 2 / scaleX;\n const offsetY = (padding.bottom - padding.top) / 2 / scaleY;\n const center = [(se[0] + nw[0]) / 2 + offsetX, (se[1] + nw[1]) / 2 + offsetY];\n const centerLngLat = worldToLngLat(center);\n const zoom = Math.min(maxZoom, log2(Math.abs(Math.min(scaleX, scaleY))));\n assert(Number.isFinite(zoom));\n return {\n longitude: centerLngLat[0],\n latitude: centerLngLat[1],\n zoom\n };\n}\n\nfunction getPaddingObject(padding = 0) {\n if (typeof padding === 'number') {\n return {\n top: padding,\n bottom: padding,\n left: padding,\n right: padding\n };\n }\n\n assert(Number.isFinite(padding.top) && Number.isFinite(padding.bottom) && Number.isFinite(padding.left) && Number.isFinite(padding.right));\n return padding;\n}\n//# sourceMappingURL=fit-bounds.js.map","import { worldToLngLat } from './web-mercator-utils';\nimport * as vec2 from 'gl-matrix/vec2';\nimport { transformVector } from './math-utils';\nconst DEGREES_TO_RADIANS = Math.PI / 180;\nexport default function getBounds(viewport, z = 0) {\n const {\n width,\n height,\n unproject\n } = viewport;\n const unprojectOps = {\n targetZ: z\n };\n const bottomLeft = unproject([0, height], unprojectOps);\n const bottomRight = unproject([width, height], unprojectOps);\n let topLeft;\n let topRight;\n const halfFov = viewport.fovy ? 0.5 * viewport.fovy * DEGREES_TO_RADIANS : Math.atan(0.5 / viewport.altitude);\n const angleToGround = (90 - viewport.pitch) * DEGREES_TO_RADIANS;\n\n if (halfFov > angleToGround - 0.01) {\n topLeft = unprojectOnFarPlane(viewport, 0, z);\n topRight = unprojectOnFarPlane(viewport, width, z);\n } else {\n topLeft = unproject([0, 0], unprojectOps);\n topRight = unproject([width, 0], unprojectOps);\n }\n\n return [bottomLeft, bottomRight, topRight, topLeft];\n}\n\nfunction unprojectOnFarPlane(viewport, x, targetZ) {\n const {\n pixelUnprojectionMatrix\n } = viewport;\n const coord0 = transformVector(pixelUnprojectionMatrix, [x, 0, 1, 1]);\n const coord1 = transformVector(pixelUnprojectionMatrix, [x, viewport.height, 1, 1]);\n const z = targetZ * viewport.distanceScales.unitsPerMeter[2];\n const t = (z - coord0[2]) / (coord1[2] - coord0[2]);\n const coord = vec2.lerp([], coord0, coord1, t);\n const result = worldToLngLat(coord);\n result.push(targetZ);\n return result;\n}\n//# sourceMappingURL=get-bounds.js.map","import { worldToLngLat } from './web-mercator-utils';\nimport { mod, log2 } from './math-utils';\nconst TILE_SIZE = 512;\nexport default function normalizeViewportProps(props) {\n const {\n width,\n height,\n pitch = 0\n } = props;\n let {\n longitude,\n latitude,\n zoom,\n bearing = 0\n } = props;\n\n if (longitude < -180 || longitude > 180) {\n longitude = mod(longitude + 180, 360) - 180;\n }\n\n if (bearing < -180 || bearing > 180) {\n bearing = mod(bearing + 180, 360) - 180;\n }\n\n const minZoom = log2(height / TILE_SIZE);\n\n if (zoom <= minZoom) {\n zoom = minZoom;\n latitude = 0;\n } else {\n const halfHeightPixels = height / 2 / Math.pow(2, zoom);\n const minLatitude = worldToLngLat([0, halfHeightPixels])[1];\n\n if (latitude < minLatitude) {\n latitude = minLatitude;\n } else {\n const maxLatitude = worldToLngLat([0, TILE_SIZE - halfHeightPixels])[1];\n\n if (latitude > maxLatitude) {\n latitude = maxLatitude;\n }\n }\n }\n\n return {\n width,\n height,\n longitude,\n latitude,\n zoom,\n pitch,\n bearing\n };\n}\n//# sourceMappingURL=normalize-viewport-props.js.map","import { lerp } from './math-utils';\nimport { scaleToZoom, zoomToScale, lngLatToWorld, worldToLngLat } from './web-mercator-utils';\nimport * as vec2 from 'gl-matrix/vec2';\nconst EPSILON = 0.01;\nconst VIEWPORT_TRANSITION_PROPS = ['longitude', 'latitude', 'zoom'];\nconst DEFAULT_OPTS = {\n curve: 1.414,\n speed: 1.2\n};\nexport default function flyToViewport(startProps, endProps, t, options) {\n const {\n startZoom,\n startCenterXY,\n uDelta,\n w0,\n u1,\n S,\n rho,\n rho2,\n r0\n } = getFlyToTransitionParams(startProps, endProps, options);\n\n if (u1 < EPSILON) {\n const viewport = {};\n\n for (const key of VIEWPORT_TRANSITION_PROPS) {\n const startValue = startProps[key];\n const endValue = endProps[key];\n viewport[key] = lerp(startValue, endValue, t);\n }\n\n return viewport;\n }\n\n const s = t * S;\n const w = Math.cosh(r0) / Math.cosh(r0 + rho * s);\n const u = w0 * ((Math.cosh(r0) * Math.tanh(r0 + rho * s) - Math.sinh(r0)) / rho2) / u1;\n const scaleIncrement = 1 / w;\n const newZoom = startZoom + scaleToZoom(scaleIncrement);\n const newCenterWorld = vec2.scale([], uDelta, u);\n vec2.add(newCenterWorld, newCenterWorld, startCenterXY);\n const newCenter = worldToLngLat(newCenterWorld);\n return {\n longitude: newCenter[0],\n latitude: newCenter[1],\n zoom: newZoom\n };\n}\nexport function getFlyToDuration(startProps, endProps, options) {\n const opts = { ...DEFAULT_OPTS,\n ...options\n };\n const {\n screenSpeed,\n speed,\n maxDuration\n } = opts;\n const {\n S,\n rho\n } = getFlyToTransitionParams(startProps, endProps, opts);\n const length = 1000 * S;\n let duration;\n\n if (Number.isFinite(screenSpeed)) {\n duration = length / (screenSpeed / rho);\n } else {\n duration = length / speed;\n }\n\n return Number.isFinite(maxDuration) && duration > maxDuration ? 0 : duration;\n}\n\nfunction getFlyToTransitionParams(startProps, endProps, opts) {\n opts = Object.assign({}, DEFAULT_OPTS, opts);\n const rho = opts.curve;\n const startZoom = startProps.zoom;\n const startCenter = [startProps.longitude, startProps.latitude];\n const startScale = zoomToScale(startZoom);\n const endZoom = endProps.zoom;\n const endCenter = [endProps.longitude, endProps.latitude];\n const scale = zoomToScale(endZoom - startZoom);\n const startCenterXY = lngLatToWorld(startCenter);\n const endCenterXY = lngLatToWorld(endCenter);\n const uDelta = vec2.sub([], endCenterXY, startCenterXY);\n const w0 = Math.max(startProps.width, startProps.height);\n const w1 = w0 / scale;\n const u1 = vec2.length(uDelta) * startScale;\n\n const _u1 = Math.max(u1, EPSILON);\n\n const rho2 = rho * rho;\n const b0 = (w1 * w1 - w0 * w0 + rho2 * rho2 * _u1 * _u1) / (2 * w0 * rho2 * _u1);\n const b1 = (w1 * w1 - w0 * w0 - rho2 * rho2 * _u1 * _u1) / (2 * w1 * rho2 * _u1);\n const r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0);\n const r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n const S = (r1 - r0) / rho;\n return {\n startZoom,\n startCenterXY,\n uDelta,\n w0,\n u1,\n S,\n rho,\n rho2,\n r0,\n r1\n };\n}\n//# sourceMappingURL=fly-to-viewport.js.map","export { default } from './web-mercator-viewport';\nexport { default as WebMercatorViewport } from './web-mercator-viewport';\nexport { default as getBounds } from './get-bounds';\nexport { default as fitBounds } from './fit-bounds';\nexport { default as normalizeViewportProps } from './normalize-viewport-props';\nexport { default as flyToViewport, getFlyToDuration } from './fly-to-viewport';\nexport { MAX_LATITUDE, lngLatToWorld, worldToLngLat, worldToPixels, pixelsToWorld, zoomToScale, scaleToZoom, altitudeToFovy, fovyToAltitude, getMeterZoom, unitsPerMeter, getDistanceScales, addMetersToLngLat, getViewMatrix, getProjectionMatrix, getProjectionParameters } from './web-mercator-utils';\n//# sourceMappingURL=index.js.map","export function filename(url) {\n const slashIndex = url && url.lastIndexOf('/');\n return slashIndex >= 0 ? url.substr(slashIndex + 1) : '';\n}\nexport function dirname(url) {\n const slashIndex = url && url.lastIndexOf('/');\n return slashIndex >= 0 ? url.substr(0, slashIndex) : '';\n}\nexport function join(...parts) {\n const separator = '/';\n parts = parts.map((part, index) => {\n if (index) {\n part = part.replace(new RegExp(\"^\".concat(separator)), '');\n }\n\n if (index !== parts.length - 1) {\n part = part.replace(new RegExp(\"\".concat(separator, \"$\")), '');\n }\n\n return part;\n });\n return parts.join(separator);\n}\n//# sourceMappingURL=path.js.map","export { assert } from './lib/env-utils/assert';\nexport { isBrowser, isWorker, nodeVersion, self, window, global, document } from './lib/env-utils/globals';\nexport { createLoaderWorker } from './lib/worker-loader-utils/create-loader-worker';\nexport { parseWithWorker, canParseWithWorker } from './lib/worker-loader-utils/parse-with-worker';\nexport { canEncodeWithWorker } from './lib/worker-loader-utils/encode-with-worker';\nexport { parseJSON } from './lib/parser-utils/parse-json';\nexport { toArrayBuffer, sliceArrayBuffer, concatenateArrayBuffers, concatenateTypedArrays, compareArrayBuffers } from './lib/binary-utils/array-buffer-utils';\nexport { padToNBytes, copyToArray, copyArrayBuffer } from './lib/binary-utils/memory-copy-utils';\nexport { copyPaddedArrayBufferToDataView, copyPaddedStringToDataView } from './lib/binary-utils/binary-copy-utils';\nexport { padStringToByteAlignment, copyStringToDataView, copyBinaryToDataView } from './lib/binary-utils/encode-utils';\nexport { getFirstCharacters, getMagicString } from './lib/binary-utils/get-first-characters';\nexport { makeTextEncoderIterator, makeTextDecoderIterator, makeLineIterator, makeNumberedLineIterator } from './lib/iterators/text-iterators';\nexport { forEach, concatenateArrayBuffersAsync } from './lib/iterators/async-iteration';\nexport { default as RequestScheduler } from './lib/request-utils/request-scheduler';\nexport { setPathPrefix, getPathPrefix, resolvePath } from './lib/path-utils/file-aliases';\nexport { addAliases as _addAliases } from './lib/path-utils/file-aliases';\nexport { JSONLoader } from './json-loader';\nimport * as path from './lib/path-utils/path';\nexport { path };\nexport { isBuffer, toBuffer, bufferToArrayBuffer } from './lib/binary-utils/buffer-utils';\nimport * as util from './lib/node/util';\nexport { util };\nexport { promisify } from './lib/node/util';\nimport * as fs from './lib/node/fs';\nexport { fs };\nexport { default as _NodeFileSystem } from './lib/filesystems/node-filesystem';\n//# sourceMappingURL=index.js.map","import {Log} from '@probe.gl/log';\n\nexport default new Log({id: 'deck'});\n","const isBoolean = x => typeof x === 'boolean';\n\nconst isFunction = x => typeof x === 'function';\n\nexport const isObject = x => x !== null && typeof x === 'object';\nexport const isPureObject = x => isObject(x) && x.constructor === {}.constructor;\nexport const isPromise = x => isObject(x) && isFunction(x.then);\nexport const isIterable = x => x && typeof x[Symbol.iterator] === 'function';\nexport const isAsyncIterable = x => x && typeof x[Symbol.asyncIterator] === 'function';\nexport const isIterator = x => x && isFunction(x.next);\nexport const isResponse = x => typeof Response !== 'undefined' && x instanceof Response || x && x.arrayBuffer && x.text && x.json;\nexport const isFile = x => typeof File !== 'undefined' && x instanceof File;\nexport const isBlob = x => typeof Blob !== 'undefined' && x instanceof Blob;\nexport const isBuffer = x => x && typeof x === 'object' && x.isBuffer;\nexport const isWritableDOMStream = x => isObject(x) && isFunction(x.abort) && isFunction(x.getWriter);\nexport const isReadableDOMStream = x => typeof ReadableStream !== 'undefined' && x instanceof ReadableStream || isObject(x) && isFunction(x.tee) && isFunction(x.cancel) && isFunction(x.getReader);\nexport const isWritableNodeStream = x => isObject(x) && isFunction(x.end) && isFunction(x.write) && isBoolean(x.writable);\nexport const isReadableNodeStream = x => isObject(x) && isFunction(x.read) && isFunction(x.pipe) && isBoolean(x.readable);\nexport const isReadableStream = x => isReadableDOMStream(x) || isReadableNodeStream(x);\nexport const isWritableStream = x => isWritableDOMStream(x) || isWritableNodeStream(x);\n//# sourceMappingURL=is-type.js.map","import { config } from './common';\nexport function validateVector(v, length) {\n if (v.length !== length) {\n return false;\n }\n\n for (let i = 0; i < v.length; ++i) {\n if (!Number.isFinite(v[i])) {\n return false;\n }\n }\n\n return true;\n}\nexport function checkNumber(value) {\n if (!Number.isFinite(value)) {\n throw new Error(\"Invalid number \".concat(value));\n }\n\n return value;\n}\nexport function checkVector(v, length, callerName = '') {\n if (config.debug && !validateVector(v, length)) {\n throw new Error(\"math.gl: \".concat(callerName, \" some fields set to invalid numbers'\"));\n }\n\n return v;\n}\nconst map = {};\nexport function deprecated(method, version) {\n if (!map[method]) {\n map[method] = true;\n console.warn(\"\".concat(method, \" has been removed in version \").concat(version, \", see upgrade guide for more information\"));\n }\n}\n//# sourceMappingURL=validators.js.map","export const LIFECYCLE = {\n NO_STATE: 'Awaiting state',\n MATCHED: 'Matched. State transferred from previous layer',\n INITIALIZED: 'Initialized',\n AWAITING_GC: 'Discarded. Awaiting garbage collection',\n AWAITING_FINALIZATION: 'No longer matched. Awaiting garbage collection',\n FINALIZED: 'Finalized! Awaiting garbage collection'\n} as const;\n\nexport type Lifecycle = typeof LIFECYCLE[keyof typeof LIFECYCLE];\n\n/* Secret props keys */\n// Symbols are non-enumerable by default, does not show in for...in or Object.keys\n// but are copied with Object.assign ¯\\_(ツ)_/¯\n// Supported everywhere except IE11, can be polyfilled with core-js\nexport const COMPONENT_SYMBOL: unique symbol = Symbol.for('component');\nexport const ASYNC_DEFAULTS_SYMBOL: unique symbol = Symbol.for('asyncPropDefaults');\nexport const ASYNC_ORIGINAL_SYMBOL: unique symbol = Symbol.for('asyncPropOriginal');\nexport const ASYNC_RESOLVED_SYMBOL: unique symbol = Symbol.for('asyncPropResolved');\n","import * as glMatrix from \"./common.js\";\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {ReadonlyVec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Calculates the length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, z);\n}\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\n\nexport function fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the source vector\n * @returns {vec3} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\n\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to ceil\n * @returns {vec3} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to floor\n * @returns {vec3} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\n * Math.round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to round\n * @returns {vec3} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, z);\n}\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Calculates the squared length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to negate\n * @returns {vec3} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to invert\n * @returns {vec3} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to normalize\n * @returns {vec3} out\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\n * Performs a hermite interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Performs a bezier interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec3} out\n */\n\nexport function transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2]; //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Get the angle between two 3D vectors\n * @param {ReadonlyVec3} a The first operand\n * @param {ReadonlyVec3} b The second operand\n * @returns {Number} The angle in radians\n */\n\nexport function angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec3 to zero\n *\n * @param {vec3} out the receiving vector\n * @returns {vec3} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec3} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec3.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();","import * as glMatrix from \"./common.js\";\n/**\n * 4x4 Matrix
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.\n * @module mat4\n */\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(16);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Create a new mat4 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} A new mat4\n */\n\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set the components of a mat4 to the given values\n *\n * @param {mat4} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} out\n */\n\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a12 = a[6],\n a13 = a[7];\n var a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\n out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\n return out;\n}\n/**\n * Calculates the determinant of a mat4\n *\n * @param {ReadonlyMat4} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n/**\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15]; // Cache only the current line of the second matrix\n\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to translate\n * @param {ReadonlyVec3} v vector to translate by\n * @returns {mat4} out\n */\n\nexport function translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n}\n/**\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Rotates a mat4 by the given angle around the given axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function rotate(out, a, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n var b00, b01, b02;\n var b10, b11, b12;\n var b20, b21, b22;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11]; // Construct the elements of the rotation matrix\n\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c; // Perform rotation-specific matrix multiplication\n\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateX(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateY(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateZ(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.scale(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotate(dest, dest, rad, axis);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function fromRotation(out, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c; // Perform rotation-specific matrix multiplication\n\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateX(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromXRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateY(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromYRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateZ(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromZRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 from a dual quat.\n *\n * @param {mat4} out Matrix\n * @param {ReadonlyQuat2} a Dual Quaternion\n * @returns {mat4} mat4 receiving operation result\n */\n\nexport function fromQuat2(out, a) {\n var translation = new glMatrix.ARRAY_TYPE(3);\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n var magnitude = bx * bx + by * by + bz * bz + bw * bw; //Only scale if it makes sense\n\n if (magnitude > 0) {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n } else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n\n fromRotationTranslation(out, a, translation);\n return out;\n}\n/**\n * Returns the translation vector component of a transformation\n * matrix. If a matrix is built with fromRotationTranslation,\n * the returned vector will be the same as the translation vector\n * originally supplied.\n * @param {vec3} out Vector to receive translation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n/**\n * Returns the scaling factor component of a transformation\n * matrix. If a matrix is built with fromRotationTranslationScale\n * with a normalized Quaternion paramter, the returned vector will be\n * the same as the scaling vector\n * originally supplied.\n * @param {vec3} out Vector to receive scaling factor component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getScaling(out, mat) {\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out[0] = Math.hypot(m11, m12, m13);\n out[1] = Math.hypot(m21, m22, m23);\n out[2] = Math.hypot(m31, m32, m33);\n return out;\n}\n/**\n * Returns a quaternion representing the rotational component\n * of a transformation matrix. If a matrix is built with\n * fromRotationTranslation, the returned quaternion will be the\n * same as the quaternion originally supplied.\n * @param {quat} out Quaternion to receive the rotation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {quat} out\n */\n\nexport function getRotation(out, mat) {\n var scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n var is1 = 1 / scaling[0];\n var is2 = 1 / scaling[1];\n var is3 = 1 / scaling[2];\n var sm11 = mat[0] * is1;\n var sm12 = mat[1] * is2;\n var sm13 = mat[2] * is3;\n var sm21 = mat[4] * is1;\n var sm22 = mat[5] * is2;\n var sm23 = mat[6] * is3;\n var sm31 = mat[8] * is1;\n var sm32 = mat[9] * is2;\n var sm33 = mat[10] * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * mat4.translate(dest, origin);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n * mat4.translate(dest, negativeOrigin);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n var ox = o[0];\n var oy = o[1];\n var oz = o[2];\n var out0 = (1 - (yy + zz)) * sx;\n var out1 = (xy + wz) * sx;\n var out2 = (xz - wy) * sx;\n var out4 = (xy - wz) * sy;\n var out5 = (1 - (xx + zz)) * sy;\n var out6 = (yz + wx) * sy;\n var out8 = (xz + wy) * sz;\n var out9 = (yz - wx) * sz;\n var out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n/**\n * Calculates a 4x4 matrix from the given quaternion\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat4} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveNO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n\n return out;\n}\n/**\n * Alias for {@link mat4.perspectiveNO}\n * @function\n */\n\nexport var perspective = perspectiveNO;\n/**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveZO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -near;\n }\n\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n var xScale = 2.0 / (leftTan + rightTan);\n var yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n}\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoNO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Alias for {@link mat4.orthoNO}\n * @function\n */\n\nexport var ortho = orthoNO;\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoZO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n var eyex = eye[0];\n var eyey = eye[1];\n var eyez = eye[2];\n var upx = up[0];\n var upy = up[1];\n var upz = up[2];\n var centerx = center[0];\n var centery = center[1];\n var centerz = center[2];\n\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.hypot(z0, z1, z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.hypot(x0, x1, x2);\n\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.hypot(y0, y1, y2);\n\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n/**\n * Generates a matrix that makes something look at something else.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function targetTo(out, eye, target, up) {\n var eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n var z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n var len = z0 * z0 + z1 * z1 + z2 * z2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n\n var x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat4\n *\n * @param {ReadonlyMat4} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \", \" + a[9] + \", \" + a[10] + \", \" + a[11] + \", \" + a[12] + \", \" + a[13] + \", \" + a[14] + \", \" + a[15] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);\n}\n/**\n * Adds two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat4} out\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n/**\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat4} out the receiving vector\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat4} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var a8 = a[8],\n a9 = a[9],\n a10 = a[10],\n a11 = a[11];\n var a12 = a[12],\n a13 = a[13],\n a14 = a[14],\n a15 = a[15];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n var b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n var b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11];\n var b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat4.subtract}\n * @function\n */\n\nexport var sub = subtract;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\nexport default function assert(condition: any, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message || 'deck.gl: assertion failed.');\n }\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","import deckLog from '../utils/log';\nimport {getLoggers} from './loggers';\n\n/* debug utility */\n\nlet loggers: Record = {};\n\n// Conditionally load default loggers in development mode\n// eslint-disable-next-line\nif (process.env.NODE_ENV !== 'production') {\n loggers = getLoggers(deckLog);\n}\n\nexport function register(handlers: Record): void {\n loggers = handlers;\n}\n\nexport default function debug(eventType: string, arg1?: any, arg2?: any, arg3?: any): void {\n if (deckLog.level > 0 && loggers[eventType]) {\n // Not using rest parameters to defeat perf hit from array construction\n loggers[eventType].call(null, arg1, arg2, arg3);\n }\n}\n","import Resource from './resource';\nimport Accessor from './accessor';\nimport { getGLTypeFromTypedArray, getTypedArrayFromGLType } from '../webgl-utils/typed-array-utils';\nimport { assertWebGL2Context, log } from '@luma.gl/gltools';\nimport { assert } from '../utils/assert';\nimport { checkProps } from '../utils/check-props';\nconst DEBUG_DATA_LENGTH = 10;\nconst DEPRECATED_PROPS = {\n offset: 'accessor.offset',\n stride: 'accessor.stride',\n type: 'accessor.type',\n size: 'accessor.size',\n divisor: 'accessor.divisor',\n normalized: 'accessor.normalized',\n integer: 'accessor.integer',\n instanced: 'accessor.divisor',\n isInstanced: 'accessor.divisor'\n};\nconst PROP_CHECKS_INITIALIZE = {\n removedProps: {},\n replacedProps: {\n bytes: 'byteLength'\n },\n deprecatedProps: DEPRECATED_PROPS\n};\nconst PROP_CHECKS_SET_PROPS = {\n removedProps: DEPRECATED_PROPS\n};\nexport default class Buffer extends Resource {\n get [Symbol.toStringTag]() {\n return 'Buffer';\n }\n\n constructor(gl) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(gl, props);\n this.stubRemovedMethods('Buffer', 'v6.0', ['layout', 'setLayout', 'getIndexedParameter']);\n this.target = props.target || (this.gl.webgl2 ? 36662 : 34962);\n this.initialize(props);\n Object.seal(this);\n }\n\n getElementCount() {\n let accessor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.accessor;\n return Math.round(this.byteLength / Accessor.getBytesPerElement(accessor));\n }\n\n getVertexCount() {\n let accessor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.accessor;\n return Math.round(this.byteLength / Accessor.getBytesPerVertex(accessor));\n }\n\n initialize() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (ArrayBuffer.isView(props)) {\n props = {\n data: props\n };\n }\n\n if (Number.isFinite(props)) {\n props = {\n byteLength: props\n };\n }\n\n props = checkProps('Buffer', props, PROP_CHECKS_INITIALIZE);\n this.usage = props.usage || 35044;\n this.debugData = null;\n this.setAccessor(Object.assign({}, props, props.accessor));\n\n if (props.data) {\n this._setData(props.data, props.offset, props.byteLength);\n } else {\n this._setByteLength(props.byteLength || 0);\n }\n\n return this;\n }\n\n setProps(props) {\n props = checkProps('Buffer', props, PROP_CHECKS_SET_PROPS);\n\n if ('accessor' in props) {\n this.setAccessor(props.accessor);\n }\n\n return this;\n }\n\n setAccessor(accessor) {\n accessor = Object.assign({}, accessor);\n delete accessor.buffer;\n this.accessor = new Accessor(accessor);\n return this;\n }\n\n reallocate(byteLength) {\n if (byteLength > this.byteLength) {\n this._setByteLength(byteLength);\n\n return true;\n }\n\n this.bytesUsed = byteLength;\n return false;\n }\n\n setData(props) {\n return this.initialize(props);\n }\n\n subData(props) {\n if (ArrayBuffer.isView(props)) {\n props = {\n data: props\n };\n }\n\n const {\n data,\n offset = 0,\n srcOffset = 0\n } = props;\n const byteLength = props.byteLength || props.length;\n assert(data);\n const target = this.gl.webgl2 ? 36663 : this.target;\n this.gl.bindBuffer(target, this.handle);\n\n if (srcOffset !== 0 || byteLength !== undefined) {\n assertWebGL2Context(this.gl);\n this.gl.bufferSubData(this.target, offset, data, srcOffset, byteLength);\n } else {\n this.gl.bufferSubData(target, offset, data);\n }\n\n this.gl.bindBuffer(target, null);\n this.debugData = null;\n\n this._inferType(data);\n\n return this;\n }\n\n copyData(_ref) {\n let {\n sourceBuffer,\n readOffset = 0,\n writeOffset = 0,\n size\n } = _ref;\n const {\n gl\n } = this;\n assertWebGL2Context(gl);\n gl.bindBuffer(36662, sourceBuffer.handle);\n gl.bindBuffer(36663, this.handle);\n gl.copyBufferSubData(36662, 36663, readOffset, writeOffset, size);\n gl.bindBuffer(36662, null);\n gl.bindBuffer(36663, null);\n this.debugData = null;\n return this;\n }\n\n getData() {\n let {\n dstData = null,\n srcByteOffset = 0,\n dstOffset = 0,\n length = 0\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n assertWebGL2Context(this.gl);\n const ArrayType = getTypedArrayFromGLType(this.accessor.type || 5126, {\n clamped: false\n });\n\n const sourceAvailableElementCount = this._getAvailableElementCount(srcByteOffset);\n\n const dstElementOffset = dstOffset;\n let dstAvailableElementCount;\n let dstElementCount;\n\n if (dstData) {\n dstElementCount = dstData.length;\n dstAvailableElementCount = dstElementCount - dstElementOffset;\n } else {\n dstAvailableElementCount = Math.min(sourceAvailableElementCount, length || sourceAvailableElementCount);\n dstElementCount = dstElementOffset + dstAvailableElementCount;\n }\n\n const copyElementCount = Math.min(sourceAvailableElementCount, dstAvailableElementCount);\n length = length || copyElementCount;\n assert(length <= copyElementCount);\n dstData = dstData || new ArrayType(dstElementCount);\n this.gl.bindBuffer(36662, this.handle);\n this.gl.getBufferSubData(36662, srcByteOffset, dstData, dstOffset, length);\n this.gl.bindBuffer(36662, null);\n return dstData;\n }\n\n bind() {\n let {\n target = this.target,\n index = this.accessor && this.accessor.index,\n offset = 0,\n size\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (target === 35345 || target === 35982) {\n if (size !== undefined) {\n this.gl.bindBufferRange(target, index, this.handle, offset, size);\n } else {\n assert(offset === 0);\n this.gl.bindBufferBase(target, index, this.handle);\n }\n } else {\n this.gl.bindBuffer(target, this.handle);\n }\n\n return this;\n }\n\n unbind() {\n let {\n target = this.target,\n index = this.accessor && this.accessor.index\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const isIndexedBuffer = target === 35345 || target === 35982;\n\n if (isIndexedBuffer) {\n this.gl.bindBufferBase(target, index, null);\n } else {\n this.gl.bindBuffer(target, null);\n }\n\n return this;\n }\n\n getDebugData() {\n if (!this.debugData) {\n this.debugData = this.getData({\n length: Math.min(DEBUG_DATA_LENGTH, this.byteLength)\n });\n return {\n data: this.debugData,\n changed: true\n };\n }\n\n return {\n data: this.debugData,\n changed: false\n };\n }\n\n invalidateDebugData() {\n this.debugData = null;\n }\n\n _setData(data) {\n let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let byteLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : data.byteLength + offset;\n assert(ArrayBuffer.isView(data));\n\n this._trackDeallocatedMemory();\n\n const target = this._getTarget();\n\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, byteLength, this.usage);\n this.gl.bufferSubData(target, offset, data);\n this.gl.bindBuffer(target, null);\n this.debugData = data.slice(0, DEBUG_DATA_LENGTH);\n this.bytesUsed = byteLength;\n\n this._trackAllocatedMemory(byteLength);\n\n const type = getGLTypeFromTypedArray(data);\n assert(type);\n this.setAccessor(new Accessor(this.accessor, {\n type\n }));\n return this;\n }\n\n _setByteLength(byteLength) {\n let usage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.usage;\n assert(byteLength >= 0);\n\n this._trackDeallocatedMemory();\n\n let data = byteLength;\n\n if (byteLength === 0) {\n data = new Float32Array(0);\n }\n\n const target = this._getTarget();\n\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, data, usage);\n this.gl.bindBuffer(target, null);\n this.usage = usage;\n this.debugData = null;\n this.bytesUsed = byteLength;\n\n this._trackAllocatedMemory(byteLength);\n\n return this;\n }\n\n _getTarget() {\n return this.gl.webgl2 ? 36663 : this.target;\n }\n\n _getAvailableElementCount(srcByteOffset) {\n const ArrayType = getTypedArrayFromGLType(this.accessor.type || 5126, {\n clamped: false\n });\n const sourceElementOffset = srcByteOffset / ArrayType.BYTES_PER_ELEMENT;\n return this.getElementCount() - sourceElementOffset;\n }\n\n _inferType(data) {\n if (!this.accessor.type) {\n this.setAccessor(new Accessor(this.accessor, {\n type: getGLTypeFromTypedArray(data)\n }));\n }\n }\n\n _createHandle() {\n return this.gl.createBuffer();\n }\n\n _deleteHandle() {\n this.gl.deleteBuffer(this.handle);\n\n this._trackDeallocatedMemory();\n }\n\n _getParameter(pname) {\n this.gl.bindBuffer(this.target, this.handle);\n const value = this.gl.getBufferParameter(this.target, pname);\n this.gl.bindBuffer(this.target, null);\n return value;\n }\n\n get type() {\n log.deprecated('Buffer.type', 'Buffer.accessor.type')();\n return this.accessor.type;\n }\n\n get bytes() {\n log.deprecated('Buffer.bytes', 'Buffer.byteLength')();\n return this.byteLength;\n }\n\n setByteLength(byteLength) {\n log.deprecated('setByteLength', 'reallocate')();\n return this.reallocate(byteLength);\n }\n\n updateAccessor(opts) {\n log.deprecated('updateAccessor(...)', 'setAccessor(new Accessor(buffer.accessor, ...)')();\n this.accessor = new Accessor(this.accessor, opts);\n return this;\n }\n\n}\n//# sourceMappingURL=buffer.js.map","import * as glMatrix from \"./common.js\";\n/**\n * 2 Dimensional Vector\n * @module vec2\n */\n\n/**\n * Creates a new, empty vec2\n *\n * @returns {vec2} a new 2D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(2);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {ReadonlyVec2} a vector to clone\n * @returns {vec2} a new 2D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\n * Creates a new vec2 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} a new 2D vector\n */\n\nexport function fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\n * Copy the values from one vec2 to another\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the source vector\n * @returns {vec2} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\n * Set the components of a vec2 to the given values\n *\n * @param {vec2} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} out\n */\n\nexport function set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\n * Adds two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\n * Multiplies two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\n * Divides two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\n * Math.ceil the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to ceil\n * @returns {vec2} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\n * Math.floor the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to floor\n * @returns {vec2} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\n * Returns the minimum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\n * Returns the maximum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\n * Math.round the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to round\n * @returns {vec2} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec2} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\n * Adds two vec2's after scaling the second operand by a scalar value\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec2} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.hypot(x, y);\n}\n/**\n * Calculates the squared euclidian distance between two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\n * Calculates the length of a vec2\n *\n * @param {ReadonlyVec2} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0],\n y = a[1];\n return Math.hypot(x, y);\n}\n/**\n * Calculates the squared length of a vec2\n *\n * @param {ReadonlyVec2} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n/**\n * Negates the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to negate\n * @returns {vec2} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to invert\n * @returns {vec2} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\n * Normalize a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to normalize\n * @returns {vec2} out\n */\n\nexport function normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\n * Computes the cross product of two vec2's\n * Note that the cross product must by definition produce a 3D vector\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec3} out\n */\n\nexport function cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec2} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec2} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec2} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat2} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\n * Transforms the vec2 with a mat2d\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat2d} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\n * Transforms the vec2 with a mat3\n * 3rd vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat3} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\n * Transforms the vec2 with a mat4\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\n * Rotate a 2D vector\n * @param {vec2} out The receiving vec2\n * @param {ReadonlyVec2} a The vec2 point to rotate\n * @param {ReadonlyVec2} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec2} out\n */\n\nexport function rotate(out, a, b, rad) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad); //perform rotation and translate to correct position\n\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\n * Get the angle between two 2D vectors\n * @param {ReadonlyVec2} a The first operand\n * @param {ReadonlyVec2} b The second operand\n * @returns {Number} The angle in radians\n */\n\nexport function angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1],\n // mag is the product of the magnitudes of a and b\n mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\n // mag &&.. short circuits if mag == 0\n cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec2 to zero\n *\n * @param {vec2} out the receiving vector\n * @returns {vec2} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec2} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec2(\" + a[0] + \", \" + a[1] + \")\";\n}\n/**\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec2} a The first vector.\n * @param {ReadonlyVec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec2} a The first vector.\n * @param {ReadonlyVec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n/**\n * Alias for {@link vec2.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec2.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec2.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec2.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec2.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec2.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec2.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec2s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();","// Extensions to math.gl library. Intended to be folded back.\nimport typedArrayManager from './typed-array-manager';\nimport {Vector3, NumericArray} from '@math.gl/core';\n\nimport type {Matrix4} from '@math.gl/core';\n\n// Helper, avoids low-precision 32 bit matrices from gl-matrix mat4.create()\nexport function createMat4(): number[] {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\n\nexport function mod(value: number, divisor: number): number {\n const modulus = value % divisor;\n return modulus < 0 ? divisor + modulus : modulus;\n}\n\n// Extract camera vectors (move to math library?)\nexport function getCameraPosition(\n viewMatrixInverse: Matrix4 | NumericArray\n): [number, number, number] {\n // Read the translation from the inverse view matrix\n return [viewMatrixInverse[12], viewMatrixInverse[13], viewMatrixInverse[14]];\n}\n\nexport type FrustumPlane = {\n distance: number;\n normal: Vector3;\n};\n\n// https://www.gamedevs.org/uploads/fast-extraction-viewing-frustum-planes-from-world-view-projection-matrix.pdf\nexport function getFrustumPlanes(viewProjectionMatrix: Matrix4 | NumericArray): {\n left: FrustumPlane;\n right: FrustumPlane;\n top: FrustumPlane;\n bottom: FrustumPlane;\n near: FrustumPlane;\n far: FrustumPlane;\n} {\n return {\n left: getFrustumPlane(\n viewProjectionMatrix[3] + viewProjectionMatrix[0],\n viewProjectionMatrix[7] + viewProjectionMatrix[4],\n viewProjectionMatrix[11] + viewProjectionMatrix[8],\n viewProjectionMatrix[15] + viewProjectionMatrix[12]\n ),\n right: getFrustumPlane(\n viewProjectionMatrix[3] - viewProjectionMatrix[0],\n viewProjectionMatrix[7] - viewProjectionMatrix[4],\n viewProjectionMatrix[11] - viewProjectionMatrix[8],\n viewProjectionMatrix[15] - viewProjectionMatrix[12]\n ),\n bottom: getFrustumPlane(\n viewProjectionMatrix[3] + viewProjectionMatrix[1],\n viewProjectionMatrix[7] + viewProjectionMatrix[5],\n viewProjectionMatrix[11] + viewProjectionMatrix[9],\n viewProjectionMatrix[15] + viewProjectionMatrix[13]\n ),\n top: getFrustumPlane(\n viewProjectionMatrix[3] - viewProjectionMatrix[1],\n viewProjectionMatrix[7] - viewProjectionMatrix[5],\n viewProjectionMatrix[11] - viewProjectionMatrix[9],\n viewProjectionMatrix[15] - viewProjectionMatrix[13]\n ),\n near: getFrustumPlane(\n viewProjectionMatrix[3] + viewProjectionMatrix[2],\n viewProjectionMatrix[7] + viewProjectionMatrix[6],\n viewProjectionMatrix[11] + viewProjectionMatrix[10],\n viewProjectionMatrix[15] + viewProjectionMatrix[14]\n ),\n far: getFrustumPlane(\n viewProjectionMatrix[3] - viewProjectionMatrix[2],\n viewProjectionMatrix[7] - viewProjectionMatrix[6],\n viewProjectionMatrix[11] - viewProjectionMatrix[10],\n viewProjectionMatrix[15] - viewProjectionMatrix[14]\n )\n };\n}\n\nconst scratchVector = new Vector3();\n\nfunction getFrustumPlane(a: number, b: number, c: number, d: number): FrustumPlane {\n scratchVector.set(a, b, c);\n const L = scratchVector.len();\n return {distance: d / L, normal: new Vector3(-a / L, -b / L, -c / L)};\n}\n\n/**\n * Calculate the low part of a WebGL 64 bit float\n * @param x {number} - the input float number\n * @returns {number} - the lower 32 bit of the number\n */\nexport function fp64LowPart(x: number): number {\n return x - Math.fround(x);\n}\n\nlet scratchArray;\n\n/**\n * Split a Float64Array into a double-length Float32Array\n * @param typedArray\n * @param options\n * @param options.size - per attribute size\n * @param options.startIndex - start index in the source array\n * @param options.endIndex - end index in the source array\n * @returns {} - high part, low part for each attribute:\n [1xHi, 1yHi, 1zHi, 1xLow, 1yLow, 1zLow, 2xHi, ...]\n */\nexport function toDoublePrecisionArray(\n typedArray: Float64Array,\n options: {size?: number; startIndex?: number; endIndex?: number}\n): Float32Array {\n const {size = 1, startIndex = 0} = options;\n\n const endIndex = options.endIndex !== undefined ? options.endIndex : typedArray.length;\n\n const count = (endIndex - startIndex) / size;\n scratchArray = typedArrayManager.allocate(scratchArray, count, {\n type: Float32Array,\n size: size * 2\n });\n\n let sourceIndex = startIndex;\n let targetIndex = 0;\n while (sourceIndex < endIndex) {\n for (let j = 0; j < size; j++) {\n const value = typedArray[sourceIndex++];\n scratchArray[targetIndex + j] = value;\n scratchArray[targetIndex + j + size] = fp64LowPart(value);\n }\n targetIndex += size * 2;\n }\n\n return scratchArray.subarray(0, count * size * 2);\n}\n","import * as glMatrix from \"./common.js\";\n/**\n * 4 Dimensional Vector\n * @module vec4\n */\n\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec4 initialized with values from an existing vector\n *\n * @param {ReadonlyVec4} a vector to clone\n * @returns {vec4} a new 4D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Creates a new vec4 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} a new 4D vector\n */\n\nexport function fromValues(x, y, z, w) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the source vector\n * @returns {vec4} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\n\nexport function set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Adds two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n/**\n * Multiplies two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n/**\n * Divides two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n/**\n * Math.ceil the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to ceil\n * @returns {vec4} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n/**\n * Math.floor the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to floor\n * @returns {vec4} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n/**\n * Returns the minimum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n/**\n * Returns the maximum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n/**\n * Math.round the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to round\n * @returns {vec4} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.round(a[3]);\n return out;\n}\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n/**\n * Adds two vec4's after scaling the second operand by a scalar value\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec4} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Calculates the length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Negates the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to negate\n * @returns {vec4} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to invert\n * @returns {vec4} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to normalize\n * @returns {vec4} out\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n/**\n * Returns the cross-product of three vectors in a 4-dimensional space\n *\n * @param {ReadonlyVec4} result the receiving vector\n * @param {ReadonlyVec4} U the first vector\n * @param {ReadonlyVec4} V the second vector\n * @param {ReadonlyVec4} W the third vector\n * @returns {vec4} result\n */\n\nexport function cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec4} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec4} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec4} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0; // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n\n var v1, v2, v3, v4;\n var s1, s2;\n\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n\n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n/**\n * Transforms the vec4 with a mat4.\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec4} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n/**\n * Transforms the vec4 with a quat\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec4} out\n */\n\nexport function transformQuat(out, a, q) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3]; // calculate quat * vec\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to zero\n *\n * @param {vec4} out the receiving vector\n * @returns {vec4} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec4} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n/**\n * Alias for {@link vec4.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec4.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec4s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 4;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n\n return a;\n };\n}();","import { equals } from '@math.gl/core';\nexport const WINDING = {\n CLOCKWISE: 1,\n COUNTER_CLOCKWISE: -1\n};\nexport function modifyPolygonWindingDirection(points, direction, options = {}) {\n const windingDirection = getPolygonWindingDirection(points, options);\n\n if (windingDirection !== direction) {\n reversePolygon(points, options);\n return true;\n }\n\n return false;\n}\nexport function getPolygonWindingDirection(points, options = {}) {\n return Math.sign(getPolygonSignedArea(points, options));\n}\nexport function getPolygonSignedArea(points, options = {}) {\n const {\n start = 0,\n end = points.length\n } = options;\n const dim = options.size || 2;\n let area = 0;\n\n for (let i = start, j = end - dim; i < end; i += dim) {\n area += (points[i] - points[j]) * (points[i + 1] + points[j + 1]);\n j = i;\n }\n\n return area / 2;\n}\nexport function forEachSegmentInPolygon(points, visitor, options = {}) {\n const {\n start = 0,\n end = points.length,\n size = 2,\n isClosed\n } = options;\n const numPoints = (end - start) / size;\n\n for (let i = 0; i < numPoints - 1; ++i) {\n visitor(points[start + i * size], points[start + i * size + 1], points[start + (i + 1) * size], points[start + (i + 1) * size + 1], i, i + 1);\n }\n\n const endPointIndex = start + (numPoints - 1) * size;\n const isClosedEx = isClosed || equals(points[start], points[endPointIndex]) && equals(points[start + 1], points[endPointIndex + 1]);\n\n if (!isClosedEx) {\n visitor(points[endPointIndex], points[endPointIndex + 1], points[start], points[start + 1], numPoints - 1, 0);\n }\n}\n\nfunction reversePolygon(points, options) {\n const {\n start = 0,\n end = points.length,\n size = 2\n } = options;\n const numPoints = (end - start) / size;\n const numSwaps = Math.floor(numPoints / 2);\n\n for (let i = 0; i < numSwaps; ++i) {\n const b1 = start + i * size;\n const b2 = start + (numPoints - 1 - i) * size;\n\n for (let j = 0; j < size; ++j) {\n const tmp = points[b1 + j];\n points[b1 + j] = points[b2 + j];\n points[b2 + j] = tmp;\n }\n }\n}\n\nexport function modifyPolygonWindingDirectionPoints(points, direction, options = {}) {\n const currentDirection = getPolygonWindingDirectionPoints(points, options);\n\n if (currentDirection !== direction) {\n points.reverse();\n return true;\n }\n\n return false;\n}\nexport function getPolygonWindingDirectionPoints(points, options = {}) {\n return Math.sign(getPolygonSignedAreaPoints(points, options));\n}\nexport function getPolygonSignedAreaPoints(points, options = {}) {\n const {\n start = 0,\n end = points.length\n } = options;\n let area = 0;\n\n for (let i = start, j = end - 1; i < end; ++i) {\n area += (points[i][0] - points[j][0]) * (points[i][1] + points[j][1]);\n j = i;\n }\n\n return area / 2;\n}\nexport function forEachSegmentInPolygonPoints(points, visitor, options = {}) {\n const {\n start = 0,\n end = points.length,\n isClosed\n } = options;\n\n for (let i = start; i < end - 1; ++i) {\n visitor(points[i], points[i + 1], i, i + 1);\n }\n\n const isClosedEx = isClosed || equals(points[end - 1], points[0]);\n\n if (!isClosedEx) {\n visitor(points[end - 1], points[0], end - 1, 0);\n }\n}\n//# sourceMappingURL=polygon-utils.js.map","import { getPolygonSignedArea } from './polygon-utils';\nexport function earcut(positions, holeIndices, dim = 2, areas) {\n const hasHoles = holeIndices && holeIndices.length;\n const outerLen = hasHoles ? holeIndices[0] * dim : positions.length;\n let outerNode = linkedList(positions, 0, outerLen, dim, true, areas && areas[0]);\n const triangles = [];\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n let invSize;\n let maxX;\n let maxY;\n let minX;\n let minY;\n let x;\n let y;\n if (hasHoles) outerNode = eliminateHoles(positions, holeIndices, outerNode, dim, areas);\n\n if (positions.length > 80 * dim) {\n minX = maxX = positions[0];\n minY = maxY = positions[1];\n\n for (let i = dim; i < outerLen; i += dim) {\n x = positions[i];\n y = positions[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 1 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n return triangles;\n}\n\nfunction linkedList(data, start, end, dim, clockwise, area) {\n let i;\n let last;\n\n if (area === undefined) {\n area = getPolygonSignedArea(data, {\n start,\n end,\n size: dim\n });\n }\n\n if (clockwise === area < 0) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n let p = start;\n let again;\n\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n let stop = ear;\n let prev;\n let next;\n\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n triangles.push(prev.i / dim);\n triangles.push(ear.i / dim);\n triangles.push(next.i / dim);\n removeNode(ear);\n ear = next.next;\n stop = next.next;\n continue;\n }\n\n ear = next;\n\n if (ear === stop) {\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\nfunction isEar(ear) {\n const a = ear.prev;\n const b = ear;\n const c = ear.next;\n if (area(a, b, c) >= 0) return false;\n let p = ear.next.next;\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n const a = ear.prev;\n const b = ear;\n const c = ear.next;\n if (area(a, b, c) >= 0) return false;\n const minTX = a.x < b.x ? a.x < c.x ? a.x : c.x : b.x < c.x ? b.x : c.x;\n const minTY = a.y < b.y ? a.y < c.y ? a.y : c.y : b.y < c.y ? b.y : c.y;\n const maxTX = a.x > b.x ? a.x > c.x ? a.x : c.x : b.x > c.x ? b.x : c.x;\n const maxTY = a.y > b.y ? a.y > c.y ? a.y : c.y : b.y > c.y ? b.y : c.y;\n const minZ = zOrder(minTX, minTY, minX, minY, invSize);\n const maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n let p = ear.prevZ;\n let n = ear.nextZ;\n\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n if (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n while (p && p.z >= minZ) {\n if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n while (n && n.z <= maxZ) {\n if (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\nfunction cureLocalIntersections(start, triangles, dim) {\n let p = start;\n\n do {\n const a = p.prev;\n const b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n triangles.push(a.i / dim);\n triangles.push(p.i / dim);\n triangles.push(b.i / dim);\n removeNode(p);\n removeNode(p.next);\n p = start = b;\n }\n\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n let a = start;\n\n do {\n let b = a.next.next;\n\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n let c = splitPolygon(a, b);\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n earcutLinked(a, triangles, dim, minX, minY, invSize);\n earcutLinked(c, triangles, dim, minX, minY, invSize);\n return;\n }\n\n b = b.next;\n }\n\n a = a.next;\n } while (a !== start);\n}\n\nfunction eliminateHoles(data, holeIndices, outerNode, dim, areas) {\n const queue = [];\n let i;\n let len;\n let start;\n let end;\n let list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false, areas && areas[i + 1]);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n for (i = 0; i < queue.length; i++) {\n eliminateHole(queue[i], outerNode);\n outerNode = filterPoints(outerNode, outerNode.next);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\nfunction eliminateHole(hole, outerNode) {\n outerNode = findHoleBridge(hole, outerNode);\n\n if (outerNode) {\n const b = splitPolygon(outerNode, hole);\n filterPoints(outerNode, outerNode.next);\n filterPoints(b, b.next);\n }\n}\n\nfunction findHoleBridge(hole, outerNode) {\n let p = outerNode;\n const hx = hole.x;\n const hy = hole.y;\n let qx = -Infinity;\n let m;\n\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n const x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n\n if (x <= hx && x > qx) {\n qx = x;\n\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.next.y) return p.next;\n }\n\n m = p.x < p.next.x ? p : p.next;\n }\n }\n\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n if (hx === qx) return m;\n const stop = m;\n const mx = m.x;\n const my = m.y;\n let tanMin = Infinity;\n let tan;\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n tan = Math.abs(hy - p.y) / (hx - p.x);\n\n if (locallyInside(p, hole) && (tan < tanMin || tan === tanMin && (p.x > m.x || p.x === m.x && sectorContainsSector(m, p)))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\nfunction indexCurve(start, minX, minY, invSize) {\n let p = start;\n\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n sortLinked(p);\n}\n\nfunction sortLinked(list) {\n let e;\n let i;\n let inSize = 1;\n let numMerges;\n let p;\n let pSize;\n let q;\n let qSize;\n let tail;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n\n qSize = inSize;\n\n while (pSize > 0 || qSize > 0 && q) {\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;else list = e;\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n } while (numMerges > 1);\n\n return list;\n}\n\nfunction zOrder(x, y, minX, minY, invSize) {\n x = 32767 * (x - minX) * invSize;\n y = 32767 * (y - minY) * invSize;\n x = (x | x << 8) & 0x00ff00ff;\n x = (x | x << 4) & 0x0f0f0f0f;\n x = (x | x << 2) & 0x33333333;\n x = (x | x << 1) & 0x55555555;\n y = (y | y << 8) & 0x00ff00ff;\n y = (y | y << 4) & 0x0f0f0f0f;\n y = (y | y << 2) & 0x33333333;\n y = (y | y << 1) & 0x55555555;\n return x | y << 1;\n}\n\nfunction getLeftmost(start) {\n let p = start;\n let leftmost = start;\n\n do {\n if (p.x < leftmost.x || p.x === leftmost.x && p.y < leftmost.y) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && (area(a.prev, a, b.prev) || area(a, b.prev, b)) || equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0);\n}\n\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\nfunction intersects(p1, q1, p2, q2) {\n const o1 = sign(area(p1, q1, p2));\n const o2 = sign(area(p1, q1, q2));\n const o3 = sign(area(p2, q2, p1));\n const o4 = sign(area(p2, q2, q1));\n if (o1 !== o2 && o3 !== o4) return true;\n if (o1 === 0 && onSegment(p1, p2, q1)) return true;\n if (o2 === 0 && onSegment(p1, q2, q1)) return true;\n if (o3 === 0 && onSegment(p2, p1, q2)) return true;\n if (o4 === 0 && onSegment(p2, q1, q2)) return true;\n return false;\n}\n\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\nfunction intersectsPolygon(a, b) {\n let p = a;\n\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\nfunction middleInside(a, b) {\n let p = a;\n let inside = false;\n const px = (a.x + b.x) / 2;\n const py = (a.y + b.y) / 2;\n\n do {\n if (p.y > py !== p.next.y > py && p.next.y !== p.y && px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x) inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\nfunction splitPolygon(a, b) {\n const a2 = new Node(a.i, a.x, a.y);\n const b2 = new Node(b.i, b.x, b.y);\n const an = a.next;\n const bp = b.prev;\n a.next = b;\n b.prev = a;\n a2.next = an;\n an.prev = a2;\n b2.next = a2;\n a2.prev = b2;\n bp.next = b2;\n b2.prev = bp;\n return b2;\n}\n\nfunction insertNode(i, x, y, last) {\n const p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n this.i = i;\n this.x = x;\n this.y = y;\n this.prev = null;\n this.next = null;\n this.z = null;\n this.prevZ = null;\n this.nextZ = null;\n this.steiner = false;\n}\n//# sourceMappingURL=earcut.js.map","export function push(target, source) {\n const size = source.length;\n const startIndex = target.length;\n\n if (startIndex > 0) {\n let isDuplicate = true;\n\n for (let i = 0; i < size; i++) {\n if (target[startIndex - size + i] !== source[i]) {\n isDuplicate = false;\n break;\n }\n }\n\n if (isDuplicate) {\n return false;\n }\n }\n\n for (let i = 0; i < size; i++) {\n target[startIndex + i] = source[i];\n }\n\n return true;\n}\nexport function copy(target, source) {\n const size = source.length;\n\n for (let i = 0; i < size; i++) {\n target[i] = source[i];\n }\n}\nexport function getPointAtIndex(positions, index, size, offset, out = []) {\n const startI = offset + index * size;\n\n for (let i = 0; i < size; i++) {\n out[i] = positions[startI + i];\n }\n\n return out;\n}\n//# sourceMappingURL=utils.js.map","import { push, copy, getPointAtIndex } from './utils';\nexport function clipPolyline(positions, bbox, options) {\n const {\n size = 2,\n startIndex = 0,\n endIndex = positions.length\n } = options || {};\n const numPoints = (endIndex - startIndex) / size;\n const result = [];\n let part = [];\n let a;\n let b;\n let codeA = -1;\n let codeB;\n let lastCode;\n\n for (let i = 1; i < numPoints; i++) {\n a = getPointAtIndex(positions, i - 1, size, startIndex, a);\n b = getPointAtIndex(positions, i, size, startIndex, b);\n\n if (codeA < 0) {\n codeA = bitCode(a, bbox);\n }\n\n codeB = lastCode = bitCode(b, bbox);\n\n while (true) {\n if (!(codeA | codeB)) {\n push(part, a);\n\n if (codeB !== lastCode) {\n push(part, b);\n\n if (i < numPoints - 1) {\n result.push(part);\n part = [];\n }\n } else if (i === numPoints - 1) {\n push(part, b);\n }\n\n break;\n } else if (codeA & codeB) {\n break;\n } else if (codeA) {\n intersect(a, b, codeA, bbox, a);\n codeA = bitCode(a, bbox);\n } else {\n intersect(a, b, codeB, bbox, b);\n codeB = bitCode(b, bbox);\n }\n }\n\n codeA = lastCode;\n }\n\n if (part.length) result.push(part);\n return result;\n}\nexport function clipPolygon(positions, bbox, options) {\n const {\n size = 2,\n endIndex = positions.length\n } = options || {};\n let {\n startIndex = 0\n } = options || {};\n let numPoints = (endIndex - startIndex) / size;\n let result;\n let p;\n let prev;\n let inside;\n let prevInside;\n\n for (let edge = 1; edge <= 8; edge *= 2) {\n result = [];\n prev = getPointAtIndex(positions, numPoints - 1, size, startIndex, prev);\n prevInside = !(bitCode(prev, bbox) & edge);\n\n for (let i = 0; i < numPoints; i++) {\n p = getPointAtIndex(positions, i, size, startIndex, p);\n inside = !(bitCode(p, bbox) & edge);\n if (inside !== prevInside) push(result, intersect(prev, p, edge, bbox));\n if (inside) push(result, p);\n copy(prev, p);\n prevInside = inside;\n }\n\n positions = result;\n startIndex = 0;\n numPoints = result.length / size;\n if (!numPoints) break;\n }\n\n return result;\n}\nexport function intersect(a, b, edge, bbox, out = []) {\n let t;\n let snap;\n\n if (edge & 8) {\n t = (bbox[3] - a[1]) / (b[1] - a[1]);\n snap = 3;\n } else if (edge & 4) {\n t = (bbox[1] - a[1]) / (b[1] - a[1]);\n snap = 1;\n } else if (edge & 2) {\n t = (bbox[2] - a[0]) / (b[0] - a[0]);\n snap = 2;\n } else if (edge & 1) {\n t = (bbox[0] - a[0]) / (b[0] - a[0]);\n snap = 0;\n } else {\n return null;\n }\n\n for (let i = 0; i < a.length; i++) {\n out[i] = (snap & 1) === i ? bbox[snap] : t * (b[i] - a[i]) + a[i];\n }\n\n return out;\n}\nexport function bitCode(p, bbox) {\n let code = 0;\n if (p[0] < bbox[0]) code |= 1;else if (p[0] > bbox[2]) code |= 2;\n if (p[1] < bbox[1]) code |= 4;else if (p[1] > bbox[3]) code |= 8;\n return code;\n}\n//# sourceMappingURL=lineclip.js.map","import { bitCode, intersect } from './lineclip';\nimport { getPointAtIndex, copy, push } from './utils';\nexport function cutPolylineByGrid(positions, options) {\n const {\n size = 2,\n broken = false,\n gridResolution = 10,\n gridOffset = [0, 0],\n startIndex = 0,\n endIndex = positions.length\n } = options || {};\n const numPoints = (endIndex - startIndex) / size;\n let part = [];\n const result = [part];\n const a = getPointAtIndex(positions, 0, size, startIndex);\n let b;\n let codeB;\n const cell = getGridCell(a, gridResolution, gridOffset, []);\n const scratchPoint = [];\n push(part, a);\n\n for (let i = 1; i < numPoints; i++) {\n b = getPointAtIndex(positions, i, size, startIndex, b);\n codeB = bitCode(b, cell);\n\n while (codeB) {\n intersect(a, b, codeB, cell, scratchPoint);\n const codeAlt = bitCode(scratchPoint, cell);\n\n if (codeAlt) {\n intersect(a, scratchPoint, codeAlt, cell, scratchPoint);\n codeB = codeAlt;\n }\n\n push(part, scratchPoint);\n copy(a, scratchPoint);\n moveToNeighborCell(cell, gridResolution, codeB);\n\n if (broken && part.length > size) {\n part = [];\n result.push(part);\n push(part, a);\n }\n\n codeB = bitCode(b, cell);\n }\n\n push(part, b);\n copy(a, b);\n }\n\n return broken ? result : result[0];\n}\nconst TYPE_INSIDE = 0;\nconst TYPE_BORDER = 1;\n\nfunction concatInPlace(arr1, arr2) {\n for (let i = 0; i < arr2.length; i++) {\n arr1.push(arr2[i]);\n }\n\n return arr1;\n}\n\nexport function cutPolygonByGrid(positions, holeIndices = null, options) {\n if (!positions.length) {\n return [];\n }\n\n const {\n size = 2,\n gridResolution = 10,\n gridOffset = [0, 0],\n edgeTypes = false\n } = options || {};\n const result = [];\n const queue = [{\n pos: positions,\n types: edgeTypes ? new Array(positions.length / size).fill(TYPE_BORDER) : null,\n holes: holeIndices || []\n }];\n const bbox = [[], []];\n let cell = [];\n\n while (queue.length) {\n const {\n pos,\n types,\n holes\n } = queue.shift();\n getBoundingBox(pos, size, holes[0] || pos.length, bbox);\n cell = getGridCell(bbox[0], gridResolution, gridOffset, cell);\n const code = bitCode(bbox[1], cell);\n\n if (code) {\n let parts = bisectPolygon(pos, types, size, 0, holes[0] || pos.length, cell, code);\n const polygonLow = {\n pos: parts[0].pos,\n types: parts[0].types,\n holes: []\n };\n const polygonHigh = {\n pos: parts[1].pos,\n types: parts[1].types,\n holes: []\n };\n queue.push(polygonLow, polygonHigh);\n\n for (let i = 0; i < holes.length; i++) {\n parts = bisectPolygon(pos, types, size, holes[i], holes[i + 1] || pos.length, cell, code);\n\n if (parts[0]) {\n polygonLow.holes.push(polygonLow.pos.length);\n polygonLow.pos = concatInPlace(polygonLow.pos, parts[0].pos);\n\n if (edgeTypes) {\n polygonLow.types = concatInPlace(polygonLow.types, parts[0].types);\n }\n }\n\n if (parts[1]) {\n polygonHigh.holes.push(polygonHigh.pos.length);\n polygonHigh.pos = concatInPlace(polygonHigh.pos, parts[1].pos);\n\n if (edgeTypes) {\n polygonHigh.types = concatInPlace(polygonHigh.types, parts[1].types);\n }\n }\n }\n } else {\n const polygon = {\n positions: pos\n };\n\n if (edgeTypes) {\n polygon.edgeTypes = types;\n }\n\n if (holes.length) {\n polygon.holeIndices = holes;\n }\n\n result.push(polygon);\n }\n }\n\n return result;\n}\n\nfunction bisectPolygon(positions, edgeTypes, size, startIndex, endIndex, bbox, edge) {\n const numPoints = (endIndex - startIndex) / size;\n const resultLow = [];\n const resultHigh = [];\n const typesLow = [];\n const typesHigh = [];\n const scratchPoint = [];\n let p;\n let side;\n let type;\n const prev = getPointAtIndex(positions, numPoints - 1, size, startIndex);\n let prevSide = Math.sign(edge & 8 ? prev[1] - bbox[3] : prev[0] - bbox[2]);\n let prevType = edgeTypes && edgeTypes[numPoints - 1];\n let lowPointCount = 0;\n let highPointCount = 0;\n\n for (let i = 0; i < numPoints; i++) {\n p = getPointAtIndex(positions, i, size, startIndex, p);\n side = Math.sign(edge & 8 ? p[1] - bbox[3] : p[0] - bbox[2]);\n type = edgeTypes && edgeTypes[startIndex / size + i];\n\n if (side && prevSide && prevSide !== side) {\n intersect(prev, p, edge, bbox, scratchPoint);\n push(resultLow, scratchPoint) && typesLow.push(prevType);\n push(resultHigh, scratchPoint) && typesHigh.push(prevType);\n }\n\n if (side <= 0) {\n push(resultLow, p) && typesLow.push(type);\n lowPointCount -= side;\n } else if (typesLow.length) {\n typesLow[typesLow.length - 1] = TYPE_INSIDE;\n }\n\n if (side >= 0) {\n push(resultHigh, p) && typesHigh.push(type);\n highPointCount += side;\n } else if (typesHigh.length) {\n typesHigh[typesHigh.length - 1] = TYPE_INSIDE;\n }\n\n copy(prev, p);\n prevSide = side;\n prevType = type;\n }\n\n return [lowPointCount ? {\n pos: resultLow,\n types: edgeTypes && typesLow\n } : null, highPointCount ? {\n pos: resultHigh,\n types: edgeTypes && typesHigh\n } : null];\n}\n\nfunction getGridCell(p, gridResolution, gridOffset, out) {\n const left = Math.floor((p[0] - gridOffset[0]) / gridResolution) * gridResolution + gridOffset[0];\n const bottom = Math.floor((p[1] - gridOffset[1]) / gridResolution) * gridResolution + gridOffset[1];\n out[0] = left;\n out[1] = bottom;\n out[2] = left + gridResolution;\n out[3] = bottom + gridResolution;\n return out;\n}\n\nfunction moveToNeighborCell(cell, gridResolution, edge) {\n if (edge & 8) {\n cell[1] += gridResolution;\n cell[3] += gridResolution;\n } else if (edge & 4) {\n cell[1] -= gridResolution;\n cell[3] -= gridResolution;\n } else if (edge & 2) {\n cell[0] += gridResolution;\n cell[2] += gridResolution;\n } else if (edge & 1) {\n cell[0] -= gridResolution;\n cell[2] -= gridResolution;\n }\n}\n\nfunction getBoundingBox(positions, size, endIndex, out) {\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n\n for (let i = 0; i < endIndex; i += size) {\n const x = positions[i];\n const y = positions[i + 1];\n minX = x < minX ? x : minX;\n maxX = x > maxX ? x : maxX;\n minY = y < minY ? y : minY;\n maxY = y > maxY ? y : maxY;\n }\n\n out[0][0] = minX;\n out[0][1] = minY;\n out[1][0] = maxX;\n out[1][1] = maxY;\n return out;\n}\n//# sourceMappingURL=cut-by-grid.js.map","import { cutPolylineByGrid, cutPolygonByGrid } from './cut-by-grid';\nimport { getPointAtIndex, push } from './utils';\nconst DEFAULT_MAX_LATITUDE = 85.051129;\nexport function cutPolylineByMercatorBounds(positions, options) {\n const {\n size = 2,\n startIndex = 0,\n endIndex = positions.length,\n normalize = true\n } = options || {};\n const newPositions = positions.slice(startIndex, endIndex);\n wrapLongitudesForShortestPath(newPositions, size, 0, endIndex - startIndex);\n const parts = cutPolylineByGrid(newPositions, {\n size,\n broken: true,\n gridResolution: 360,\n gridOffset: [-180, -180]\n });\n\n if (normalize) {\n for (const part of parts) {\n shiftLongitudesIntoRange(part, size);\n }\n }\n\n return parts;\n}\nexport function cutPolygonByMercatorBounds(positions, holeIndices = null, options) {\n const {\n size = 2,\n normalize = true,\n edgeTypes = false\n } = options || {};\n holeIndices = holeIndices || [];\n const newPositions = [];\n const newHoleIndices = [];\n let srcStartIndex = 0;\n let targetIndex = 0;\n\n for (let ringIndex = 0; ringIndex <= holeIndices.length; ringIndex++) {\n const srcEndIndex = holeIndices[ringIndex] || positions.length;\n const targetStartIndex = targetIndex;\n const splitIndex = findSplitIndex(positions, size, srcStartIndex, srcEndIndex);\n\n for (let i = splitIndex; i < srcEndIndex; i++) {\n newPositions[targetIndex++] = positions[i];\n }\n\n for (let i = srcStartIndex; i < splitIndex; i++) {\n newPositions[targetIndex++] = positions[i];\n }\n\n wrapLongitudesForShortestPath(newPositions, size, targetStartIndex, targetIndex);\n insertPoleVertices(newPositions, size, targetStartIndex, targetIndex, options === null || options === void 0 ? void 0 : options.maxLatitude);\n srcStartIndex = srcEndIndex;\n newHoleIndices[ringIndex] = targetIndex;\n }\n\n newHoleIndices.pop();\n const parts = cutPolygonByGrid(newPositions, newHoleIndices, {\n size,\n gridResolution: 360,\n gridOffset: [-180, -180],\n edgeTypes\n });\n\n if (normalize) {\n for (const part of parts) {\n shiftLongitudesIntoRange(part.positions, size);\n }\n }\n\n return parts;\n}\n\nfunction findSplitIndex(positions, size, startIndex, endIndex) {\n let maxLat = -1;\n let pointIndex = -1;\n\n for (let i = startIndex + 1; i < endIndex; i += size) {\n const lat = Math.abs(positions[i]);\n\n if (lat > maxLat) {\n maxLat = lat;\n pointIndex = i - 1;\n }\n }\n\n return pointIndex;\n}\n\nfunction insertPoleVertices(positions, size, startIndex, endIndex, maxLatitude = DEFAULT_MAX_LATITUDE) {\n const firstLng = positions[startIndex];\n const lastLng = positions[endIndex - size];\n\n if (Math.abs(firstLng - lastLng) > 180) {\n const p = getPointAtIndex(positions, 0, size, startIndex);\n p[0] += Math.round((lastLng - firstLng) / 360) * 360;\n push(positions, p);\n p[1] = Math.sign(p[1]) * maxLatitude;\n push(positions, p);\n p[0] = firstLng;\n push(positions, p);\n }\n}\n\nfunction wrapLongitudesForShortestPath(positions, size, startIndex, endIndex) {\n let prevLng = positions[0];\n let lng;\n\n for (let i = startIndex; i < endIndex; i += size) {\n lng = positions[i];\n const delta = lng - prevLng;\n\n if (delta > 180 || delta < -180) {\n lng -= Math.round(delta / 360) * 360;\n }\n\n positions[i] = prevLng = lng;\n }\n}\n\nfunction shiftLongitudesIntoRange(positions, size) {\n let refLng;\n const pointCount = positions.length / size;\n\n for (let i = 0; i < pointCount; i++) {\n refLng = positions[i * size];\n\n if ((refLng + 180) % 360 !== 0) {\n break;\n }\n }\n\n const delta = -Math.round(refLng / 360) * 360;\n\n if (delta === 0) {\n return;\n }\n\n for (let i = 0; i < pointCount; i++) {\n positions[i * size] += delta;\n }\n}\n//# sourceMappingURL=cut-by-mercator-bounds.js.map","export { default as Polygon } from './polygon';\nexport { getPolygonSignedArea, getPolygonWindingDirection, forEachSegmentInPolygon, modifyPolygonWindingDirection, WINDING } from './polygon-utils';\nexport { earcut } from './earcut';\nexport { clipPolygon, clipPolyline } from './lineclip';\nexport { cutPolygonByGrid, cutPolylineByGrid } from './cut-by-grid';\nexport { cutPolylineByMercatorBounds, cutPolygonByMercatorBounds } from './cut-by-mercator-bounds';\nexport { default as _Polygon } from './polygon';\n//# sourceMappingURL=index.js.map","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","import { isWebGL2, assertWebGLContext } from '@luma.gl/gltools';\nimport { lumaStats, StatsManager } from '../init';\nimport { getKey, getKeyValue } from '../webgl-utils/constants-to-keys';\nimport { assert } from '../utils/assert';\nimport { uid } from '../utils/utils';\nimport { stubRemovedMethods } from '../utils/stub-methods';\nconst ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual methods';\nexport default class Resource {\n get [Symbol.toStringTag]() {\n return 'Resource';\n }\n\n constructor(gl) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n assertWebGLContext(gl);\n const {\n id,\n userData = {}\n } = opts;\n this.gl = gl;\n this.gl2 = gl;\n this.id = id || uid(this[Symbol.toStringTag]);\n this.userData = userData;\n this._bound = false;\n this._handle = opts.handle;\n\n if (this._handle === undefined) {\n this._handle = this._createHandle();\n }\n\n this.byteLength = 0;\n\n this._initStats();\n\n this._addStats();\n }\n\n toString() {\n return \"\".concat(this[Symbol.toStringTag] || this.constructor.name, \"(\").concat(this.id, \")\");\n }\n\n get handle() {\n return this._handle;\n }\n\n delete() {\n let {\n deleteChildren = false\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n const children = this._handle && this._deleteHandle(this._handle);\n\n if (this._handle) {\n this._removeStats();\n }\n\n this._handle = null;\n\n if (children && deleteChildren) {\n children.filter(Boolean).forEach(child => child.delete());\n }\n\n return this;\n }\n\n bind() {\n let funcOrHandle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.handle;\n\n if (typeof funcOrHandle !== 'function') {\n this._bindHandle(funcOrHandle);\n\n return this;\n }\n\n let value;\n\n if (!this._bound) {\n this._bindHandle(this.handle);\n\n this._bound = true;\n value = funcOrHandle();\n this._bound = false;\n\n this._bindHandle(null);\n } else {\n value = funcOrHandle();\n }\n\n return value;\n }\n\n unbind() {\n this.bind(null);\n }\n\n getParameter(pname) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n const parameters = this.constructor.PARAMETERS || {};\n const parameter = parameters[pname];\n\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n const parameterAvailable = (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n const webgl1Default = parameter.webgl1;\n const webgl2Default = 'webgl2' in parameter ? parameter.webgl2 : parameter.webgl1;\n const defaultValue = isWebgl2 ? webgl2Default : webgl1Default;\n return defaultValue;\n }\n }\n\n return this._getParameter(pname, opts);\n }\n\n getParameters() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n parameters,\n keys\n } = options;\n const PARAMETERS = this.constructor.PARAMETERS || {};\n const isWebgl2 = isWebGL2(this.gl);\n const values = {};\n const parameterKeys = parameters || Object.keys(PARAMETERS);\n\n for (const pname of parameterKeys) {\n const parameter = PARAMETERS[pname];\n const parameterAvailable = parameter && (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (parameterAvailable) {\n const key = keys ? getKey(this.gl, pname) : pname;\n values[key] = this.getParameter(pname, options);\n\n if (keys && parameter.type === 'GLenum') {\n values[key] = getKey(this.gl, values[key]);\n }\n }\n }\n\n return values;\n }\n\n setParameter(pname, value) {\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n const parameters = this.constructor.PARAMETERS || {};\n const parameter = parameters[pname];\n\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n const parameterAvailable = (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n throw new Error('Parameter not available on this platform');\n }\n\n if (parameter.type === 'GLenum') {\n value = getKeyValue(value);\n }\n }\n\n this._setParameter(pname, value);\n\n return this;\n }\n\n setParameters(parameters) {\n for (const pname in parameters) {\n this.setParameter(pname, parameters[pname]);\n }\n\n return this;\n }\n\n stubRemovedMethods(className, version, methodNames) {\n return stubRemovedMethods(this, className, version, methodNames);\n }\n\n initialize(opts) {}\n\n _createHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _deleteHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _bindHandle(handle) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _getOptsFromHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _getParameter(pname, opts) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _setParameter(pname, value) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _context() {\n this.gl.luma = this.gl.luma || {};\n return this.gl.luma;\n }\n\n _initStats() {\n this.gl.stats = this.gl.stats || new StatsManager();\n }\n\n _addStats() {\n const name = this[Symbol.toStringTag];\n const stats = lumaStats.get('Resource Counts');\n stats.get('Resources Created').incrementCount();\n stats.get(\"\".concat(name, \"s Created\")).incrementCount();\n stats.get(\"\".concat(name, \"s Active\")).incrementCount();\n }\n\n _removeStats() {\n const name = this[Symbol.toStringTag];\n const stats = lumaStats.get('Resource Counts');\n stats.get(\"\".concat(name, \"s Active\")).decrementCount();\n }\n\n _trackAllocatedMemory(bytes) {\n let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this[Symbol.toStringTag];\n\n this._doTrackAllocatedMemory(bytes, name);\n\n this._doTrackAllocatedMemory(bytes, name, this.gl.stats.get(\"Memory Usage\"));\n }\n\n _doTrackAllocatedMemory(bytes) {\n let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this[Symbol.toStringTag];\n let stats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : lumaStats.get(\"Memory Usage\");\n stats.get('GPU Memory').addCount(bytes);\n stats.get(\"\".concat(name, \" Memory\")).addCount(bytes);\n this.byteLength = bytes;\n }\n\n _trackDeallocatedMemory() {\n let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this[Symbol.toStringTag];\n\n this._doTrackDeallocatedMemory(name);\n\n this._doTrackDeallocatedMemory(name, this.gl.stats.get(\"Memory Usage\"));\n }\n\n _doTrackDeallocatedMemory() {\n let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this[Symbol.toStringTag];\n let stats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : lumaStats.get(\"Memory Usage\");\n stats.get('GPU Memory').subtractCount(this.byteLength);\n stats.get(\"\".concat(name, \" Memory\")).subtractCount(this.byteLength);\n this.byteLength = 0;\n }\n\n}\n//# sourceMappingURL=resource.js.map","module.exports = require(\"regenerator-runtime\");\n","/**\n * Pulls together all deck.gl dependencies used\n * in @deck.gl/jupyter-widget\n */\nconst deck = require('../../core/bundle');\n\nObject.assign(\n deck,\n require('@deck.gl/layers'),\n require('@deck.gl/aggregation-layers'),\n require('@deck.gl/geo-layers'),\n require('@deck.gl/mesh-layers'),\n require('@deck.gl/google-maps'),\n require('@deck.gl/json')\n);\n\nmodule.exports = deck;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport log from '../utils/log';\nimport {createMat4, getCameraPosition, getFrustumPlanes, FrustumPlane} from '../utils/math-utils';\n\nimport {Matrix4, Vector3, equals, clamp} from '@math.gl/core';\nimport * as mat4 from 'gl-matrix/mat4';\n\nimport {\n getDistanceScales,\n getMeterZoom,\n lngLatToWorld,\n worldToLngLat,\n worldToPixels,\n pixelsToWorld\n} from '@math.gl/web-mercator';\n\nimport {PROJECTION_MODE} from '../lib/constants';\n\nexport type DistanceScales = {\n unitsPerMeter: number[];\n metersPerUnit: number[];\n};\n\nexport type Padding = {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n};\n\nexport type ViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** Longitude in degrees (geospatial only) */\n longitude?: number;\n /** Latitude in degrees (geospatial only) */\n latitude?: number;\n /** Viewport center in world space. If geospatial, refers to meter offsets from lng, lat */\n position?: number[];\n /** Zoom level */\n zoom?: number;\n /** Padding around the viewport, in pixels. */\n padding?: Padding | null;\n distanceScales?: DistanceScales;\n /** Model matrix of viewport center */\n modelMatrix?: number[] | null;\n /** Custom view matrix */\n viewMatrix?: number[];\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** Modifier of viewport scale. Corresponds to the number of pixels per common unit at zoom 0. */\n focalDistance?: number;\n /** Use orthographic projection */\n orthographic?: boolean;\n /** fovy in radians. If supplied, overrides fovy */\n fovyRadians?: number;\n /** fovy in degrees. */\n fovy?: number;\n /** Near plane of the projection matrix */\n near?: number;\n /** Far plane of the projection matrix */\n far?: number;\n};\n\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\nconst IDENTITY = createMat4();\n\nconst ZERO_VECTOR = [0, 0, 0];\n\nconst DEFAULT_DISTANCE_SCALES: DistanceScales = {\n unitsPerMeter: [1, 1, 1],\n metersPerUnit: [1, 1, 1]\n};\n\n// / Helpers\nfunction createProjectionMatrix({\n width,\n height,\n orthographic,\n fovyRadians,\n focalDistance,\n padding,\n near,\n far\n}: {\n width: number;\n height: number;\n orthographic: boolean;\n fovyRadians: number;\n focalDistance: number;\n padding: Padding | null;\n near: number;\n far: number;\n}) {\n const aspect = width / height;\n const matrix = orthographic\n ? new Matrix4().orthographic({fovy: fovyRadians, aspect, focalDistance, near, far})\n : new Matrix4().perspective({fovy: fovyRadians, aspect, near, far});\n if (padding) {\n const {left = 0, right = 0, top = 0, bottom = 0} = padding;\n const offsetX = clamp((left + width - right) / 2, 0, width) - width / 2;\n const offsetY = clamp((top + height - bottom) / 2, 0, height) - height / 2;\n // pixels to clip space\n matrix[8] -= (offsetX * 2) / width;\n matrix[9] += (offsetY * 2) / height;\n }\n return matrix;\n}\n\n/**\n * Manages coordinate system transformations.\n *\n * Note: The Viewport is immutable in the sense that it only has accessors.\n * A new viewport instance should be created if any parameters have changed.\n */\nexport default class Viewport {\n static displayName = 'Viewport';\n\n /** Init parameters */\n\n id: string;\n x: number;\n y: number;\n width: number;\n height: number;\n isGeospatial: boolean;\n zoom: number;\n focalDistance: number;\n position: number[];\n modelMatrix: number[] | null;\n\n /** Derived parameters */\n\n // `!` post-fix expression operator asserts that its operand is non-null and non-undefined in contexts\n // where the type checker is unable to conclude that fact.\n\n distanceScales: DistanceScales; /** scale factors between world space and common space */\n scale!: number; /** scale factor, equals 2^zoom */\n center!: number[]; /** viewport center in common space */\n cameraPosition!: number[]; /** Camera position in common space */\n projectionMatrix!: number[];\n viewMatrix!: number[];\n viewMatrixUncentered!: number[];\n viewMatrixInverse!: number[];\n viewProjectionMatrix!: number[];\n pixelProjectionMatrix!: number[];\n pixelUnprojectionMatrix!: number[];\n resolution?: number;\n\n private _frustumPlanes: {[name: string]: FrustumPlane} = {};\n\n constructor(opts: ViewportOptions = {}) {\n // @ts-ignore\n this.id = opts.id || this.constructor.displayName || 'viewport';\n\n this.x = opts.x || 0;\n this.y = opts.y || 0;\n // Silently allow apps to send in w,h = 0,0\n this.width = opts.width || 1;\n this.height = opts.height || 1;\n this.zoom = opts.zoom || 0;\n this.distanceScales = opts.distanceScales || DEFAULT_DISTANCE_SCALES;\n this.focalDistance = opts.focalDistance || 1;\n this.position = opts.position || ZERO_VECTOR;\n this.modelMatrix = opts.modelMatrix || null;\n\n const {longitude, latitude} = opts;\n this.isGeospatial = Number.isFinite(latitude) && Number.isFinite(longitude);\n\n this._initProps(opts);\n this._initMatrices(opts);\n\n // Bind methods for easy access\n this.equals = this.equals.bind(this);\n this.project = this.project.bind(this);\n this.unproject = this.unproject.bind(this);\n this.projectPosition = this.projectPosition.bind(this);\n this.unprojectPosition = this.unprojectPosition.bind(this);\n this.projectFlat = this.projectFlat.bind(this);\n this.unprojectFlat = this.unprojectFlat.bind(this);\n }\n\n get metersPerPixel(): number {\n return this.distanceScales.metersPerUnit[2] / this.scale;\n }\n\n get projectionMode(): number {\n if (this.isGeospatial) {\n return this.zoom < 12\n ? PROJECTION_MODE.WEB_MERCATOR\n : PROJECTION_MODE.WEB_MERCATOR_AUTO_OFFSET;\n }\n return PROJECTION_MODE.IDENTITY;\n }\n\n // Two viewports are equal if width and height are identical, and if\n // their view and projection matrices are (approximately) equal.\n equals(viewport: Viewport): boolean {\n if (!(viewport instanceof Viewport)) {\n return false;\n }\n if (this === viewport) {\n return true;\n }\n\n return (\n viewport.width === this.width &&\n viewport.height === this.height &&\n viewport.scale === this.scale &&\n equals(viewport.projectionMatrix, this.projectionMatrix) &&\n equals(viewport.viewMatrix, this.viewMatrix)\n );\n // TODO - check distance scales?\n }\n\n /**\n * Projects xyz (possibly latitude and longitude) to pixel coordinates in window\n * using viewport projection parameters\n * - [longitude, latitude] to [x, y]\n * - [longitude, latitude, Z] => [x, y, z]\n * Note: By default, returns top-left coordinates for canvas/SVG type render\n *\n * @param {Array} lngLatZ - [lng, lat] or [lng, lat, Z]\n * @param {Object} opts - options\n * @param {Object} opts.topLeft=true - Whether projected coords are top left\n * @return {Array} - [x, y] or [x, y, z] in top left coords\n */\n project(xyz: number[], {topLeft = true}: {topLeft?: boolean} = {}): number[] {\n const worldPosition = this.projectPosition(xyz);\n const coord = worldToPixels(worldPosition, this.pixelProjectionMatrix);\n\n const [x, y] = coord;\n const y2 = topLeft ? y : this.height - y;\n return xyz.length === 2 ? [x, y2] : [x, y2, coord[2]];\n }\n\n /**\n * Unproject pixel coordinates on screen onto world coordinates,\n * (possibly [lon, lat]) on map.\n * - [x, y] => [lng, lat]\n * - [x, y, z] => [lng, lat, Z]\n * @param {Array} xyz -\n * @param {Object} opts - options\n * @param {Object} opts.topLeft=true - Whether origin is top left\n * @return {Array|null} - [lng, lat, Z] or [X, Y, Z]\n */\n unproject(\n xyz: number[],\n {topLeft = true, targetZ}: {topLeft?: boolean; targetZ?: number} = {}\n ): number[] {\n const [x, y, z] = xyz;\n\n const y2 = topLeft ? y : this.height - y;\n const targetZWorld = targetZ && targetZ * this.distanceScales.unitsPerMeter[2];\n const coord = pixelsToWorld([x, y2, z], this.pixelUnprojectionMatrix, targetZWorld);\n const [X, Y, Z] = this.unprojectPosition(coord);\n\n if (Number.isFinite(z)) {\n return [X, Y, Z];\n }\n return Number.isFinite(targetZ) ? [X, Y, targetZ as number] : [X, Y];\n }\n\n // NON_LINEAR PROJECTION HOOKS\n // Used for web meractor projection\n\n projectPosition(xyz: number[]): [number, number, number] {\n const [X, Y] = this.projectFlat(xyz);\n const Z = (xyz[2] || 0) * this.distanceScales.unitsPerMeter[2];\n return [X, Y, Z];\n }\n\n unprojectPosition(xyz: number[]): [number, number, number] {\n const [X, Y] = this.unprojectFlat(xyz);\n const Z = (xyz[2] || 0) * this.distanceScales.metersPerUnit[2];\n return [X, Y, Z];\n }\n\n /**\n * Project [lng,lat] on sphere onto [x,y] on 512*512 Mercator Zoom 0 tile.\n * Performs the nonlinear part of the web mercator projection.\n * Remaining projection is done with 4x4 matrices which also handles\n * perspective.\n * @param {Array} lngLat - [lng, lat] coordinates\n * Specifies a point on the sphere to project onto the map.\n * @return {Array} [x,y] coordinates.\n */\n projectFlat(xyz: number[]): [number, number] {\n if (this.isGeospatial) {\n // Shader clamps latitude to +-89.9, see /shaderlib/project/project.glsl.js\n // lngLatToWorld([0, -89.9])[1] = -317.9934163758329\n // lngLatToWorld([0, 89.9])[1] = 829.9934163758271\n const result = lngLatToWorld(xyz);\n result[1] = clamp(result[1], -318, 830);\n return result;\n }\n return xyz as [number, number];\n }\n\n /**\n * Unproject world point [x,y] on map onto {lat, lon} on sphere\n * @param {object|Vector} xy - object with {x,y} members\n * representing point on projected map plane\n * @return {GeoCoordinates} - object with {lat,lon} of point on sphere.\n * Has toArray method if you need a GeoJSON Array.\n * Per cartographic tradition, lat and lon are specified as degrees.\n */\n unprojectFlat(xyz: number[]): [number, number] {\n if (this.isGeospatial) {\n return worldToLngLat(xyz);\n }\n return xyz as [number, number];\n }\n\n /**\n * Get bounds of the current viewport\n * @return {Array} - [minX, minY, maxX, maxY]\n */\n getBounds(options: {z?: number} = {}): [number, number, number, number] {\n const unprojectOption = {targetZ: options.z || 0};\n\n const topLeft = this.unproject([0, 0], unprojectOption);\n const topRight = this.unproject([this.width, 0], unprojectOption);\n const bottomLeft = this.unproject([0, this.height], unprojectOption);\n const bottomRight = this.unproject([this.width, this.height], unprojectOption);\n\n return [\n Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]),\n Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1])\n ];\n }\n\n getDistanceScales(coordinateOrigin?: number[]): DistanceScales {\n if (coordinateOrigin) {\n return getDistanceScales({\n longitude: coordinateOrigin[0],\n latitude: coordinateOrigin[1],\n highPrecision: true\n });\n }\n return this.distanceScales;\n }\n\n containsPixel({\n x,\n y,\n width = 1,\n height = 1\n }: {\n x: number;\n y: number;\n width?: number;\n height?: number;\n }): boolean {\n return (\n x < this.x + this.width &&\n this.x < x + width &&\n y < this.y + this.height &&\n this.y < y + height\n );\n }\n\n // Extract frustum planes in common space\n getFrustumPlanes(): {\n left: FrustumPlane;\n right: FrustumPlane;\n bottom: FrustumPlane;\n top: FrustumPlane;\n near: FrustumPlane;\n far: FrustumPlane;\n } {\n if (this._frustumPlanes.near) {\n // @ts-ignore\n return this._frustumPlanes;\n }\n\n Object.assign(this._frustumPlanes, getFrustumPlanes(this.viewProjectionMatrix));\n\n // @ts-ignore\n return this._frustumPlanes;\n }\n\n // EXPERIMENTAL METHODS\n\n /**\n * Needed by panning and linear transition\n * Pan the viewport to place a given world coordinate at screen point [x, y]\n *\n * @param {Array} coords - world coordinates\n * @param {Array} pixel - [x,y] coordinates on screen\n * @return {Object} props of the new viewport\n */\n panByPosition(coords: number[], pixel: number[]): any {\n return null;\n }\n\n // INTERNAL METHODS\n\n /* eslint-disable complexity, max-statements */\n private _initProps(opts: ViewportOptions) {\n const longitude = opts.longitude as number;\n const latitude = opts.latitude as number;\n\n if (this.isGeospatial) {\n if (!Number.isFinite(opts.zoom)) {\n this.zoom = getMeterZoom({latitude}) + Math.log2(this.focalDistance);\n }\n this.distanceScales = opts.distanceScales || getDistanceScales({latitude, longitude});\n }\n const scale = Math.pow(2, this.zoom);\n this.scale = scale;\n\n const {position, modelMatrix} = opts;\n let meterOffset: number[] = ZERO_VECTOR;\n if (position) {\n meterOffset = modelMatrix\n ? (new Matrix4(modelMatrix).transformAsVector(position, []) as number[])\n : position;\n }\n\n if (this.isGeospatial) {\n // Determine camera center in common space\n const center = this.projectPosition([longitude, latitude, 0]);\n\n this.center = new Vector3(meterOffset)\n // Convert to pixels in current zoom\n .scale(this.distanceScales.unitsPerMeter)\n .add(center);\n } else {\n this.center = this.projectPosition(meterOffset);\n }\n }\n /* eslint-enable complexity, max-statements */\n\n private _initMatrices(opts: ViewportOptions) {\n const {\n // View matrix\n viewMatrix = IDENTITY,\n // Projection matrix\n projectionMatrix = null,\n\n // Projection matrix parameters, used if projectionMatrix not supplied\n orthographic = false,\n fovyRadians,\n fovy = 75,\n near = 0.1, // Distance of near clipping plane\n far = 1000, // Distance of far clipping plane\n padding = null, // Center offset in pixels\n focalDistance = 1\n } = opts;\n\n this.viewMatrixUncentered = viewMatrix;\n // Make a centered version of the matrix for projection modes without an offset\n this.viewMatrix = new Matrix4()\n // Apply the uncentered view matrix\n .multiplyRight(viewMatrix)\n // And center it\n .translate(new Vector3(this.center).negate());\n\n this.projectionMatrix =\n projectionMatrix ||\n createProjectionMatrix({\n width: this.width,\n height: this.height,\n orthographic,\n fovyRadians: fovyRadians || fovy * DEGREES_TO_RADIANS,\n focalDistance,\n padding,\n near,\n far\n });\n\n // Note: As usual, matrix operations should be applied in \"reverse\" order\n // since vectors will be multiplied in from the right during transformation\n const vpm = createMat4();\n mat4.multiply(vpm, vpm, this.projectionMatrix);\n mat4.multiply(vpm, vpm, this.viewMatrix);\n this.viewProjectionMatrix = vpm;\n\n // console.log('VPM', this.viewMatrix, this.projectionMatrix, this.viewProjectionMatrix);\n\n // Calculate inverse view matrix\n this.viewMatrixInverse = mat4.invert([], this.viewMatrix) || this.viewMatrix;\n\n // Decompose camera parameters\n this.cameraPosition = getCameraPosition(this.viewMatrixInverse);\n\n /*\n * Builds matrices that converts preprojected lngLats to screen pixels\n * and vice versa.\n * Note: Currently returns bottom-left coordinates!\n * Note: Starts with the GL projection matrix and adds steps to the\n * scale and translate that matrix onto the window.\n * Note: WebGL controls clip space to screen projection with gl.viewport\n * and does not need this step.\n */\n\n // matrix for conversion from world location to screen (pixel) coordinates\n const viewportMatrix = createMat4(); // matrix from NDC to viewport.\n const pixelProjectionMatrix = createMat4(); // matrix from world space to viewport.\n mat4.scale(viewportMatrix, viewportMatrix, [this.width / 2, -this.height / 2, 1]);\n mat4.translate(viewportMatrix, viewportMatrix, [1, -1, 0]);\n mat4.multiply(pixelProjectionMatrix, viewportMatrix, this.viewProjectionMatrix);\n this.pixelProjectionMatrix = pixelProjectionMatrix;\n\n this.pixelUnprojectionMatrix = mat4.invert(createMat4(), this.pixelProjectionMatrix);\n if (!this.pixelUnprojectionMatrix) {\n log.warn('Pixel project matrix not invertible')();\n // throw new Error('Pixel project matrix not invertible');\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/*\n * Helper function for padArray\n */\nfunction padArrayChunk(options: {\n source;\n target;\n start?: number;\n end?: number;\n size: number;\n getData;\n}): void {\n const {source, target, start = 0, size, getData} = options;\n const end = options.end || target.length;\n\n const sourceLength = source.length;\n const targetLength = end - start;\n\n if (sourceLength > targetLength) {\n target.set(source.subarray(0, targetLength), start);\n return;\n }\n\n target.set(source, start);\n\n if (!getData) {\n return;\n }\n\n // source is not large enough to fill target space, call `getData` to get filler data\n let i = sourceLength;\n while (i < targetLength) {\n const datum = getData(i, source);\n for (let j = 0; j < size; j++) {\n target[start + i] = datum[j] || 0;\n i++;\n }\n }\n}\n\n/*\n * The padArray function stretches a source array to the size of a target array.\n The arrays can have internal structures (like the attributes of PathLayer and\n SolidPolygonLayer), defined by the optional sourceStartIndices and targetStartIndices parameters.\n If the target array is larger, the getData callback is used to fill in the blanks.\n * @params {TypedArray} source - original data\n * @params {TypedArray} target - output data\n * @params {Number} size - length per datum\n * @params {Function} getData - callback to get new data when source is short\n * @params {Array} [sourceStartIndices] - subdivision of the original data in [object0StartIndex, object1StartIndex, ...]\n * @params {Array} [targetStartIndices] - subdivision of the output data in [object0StartIndex, object1StartIndex, ...]\n */\nexport function padArray({source, target, size, getData, sourceStartIndices, targetStartIndices}) {\n if (!Array.isArray(targetStartIndices)) {\n // Flat arrays\n padArrayChunk({\n source,\n target,\n size,\n getData\n });\n return target;\n }\n\n // Arrays have internal structure\n let sourceIndex = 0;\n let targetIndex = 0;\n const getChunkData = getData && ((i, chunk) => getData(i + targetIndex, chunk));\n\n const n = Math.min(sourceStartIndices.length, targetStartIndices.length);\n\n for (let i = 1; i < n; i++) {\n const nextSourceIndex = sourceStartIndices[i] * size;\n const nextTargetIndex = targetStartIndices[i] * size;\n\n padArrayChunk({\n source: source.subarray(sourceIndex, nextSourceIndex),\n target,\n start: targetIndex,\n end: nextTargetIndex,\n size,\n getData: getChunkData\n });\n\n sourceIndex = nextSourceIndex;\n targetIndex = nextTargetIndex;\n }\n\n if (targetIndex < target.length) {\n padArrayChunk({\n source: [],\n target,\n start: targetIndex,\n size,\n getData: getChunkData\n });\n }\n\n return target;\n}\n","import {padArray} from '../../utils/array-utils';\nimport {NumericArray} from '../../types/types';\nimport Attribute from './attribute';\nimport type {BufferAccessor} from './data-column';\nimport type {Buffer} from '@luma.gl/webgl';\n\nexport interface TransitionSettings {\n type: string;\n /** Callback to get the value that the entering vertices are transitioning from. */\n enter?: (toValue: NumericArray, chunk?: NumericArray) => NumericArray;\n /** Callback when the transition is started */\n onStart?: () => void;\n /** Callback when the transition is done */\n onEnd?: () => void;\n /** Callback when the transition is interrupted */\n onInterrupt?: () => void;\n}\n\nexport type InterpolationTransitionSettings = TransitionSettings & {\n type?: 'interpolation';\n /** Duration of the transition animation, in milliseconds */\n duration: number;\n /** Easing function that maps a value from [0, 1] to [0, 1], see [http://easings.net/](http://easings.net/) */\n easing?: (t: number) => number;\n};\n\nexport type SpringTransitionSettings = TransitionSettings & {\n type: 'spring';\n /** \"Tension\" factor for the spring */\n stiffness: number;\n /** \"Friction\" factor that counteracts the spring's acceleration */\n damping: number;\n};\n\nconst DEFAULT_TRANSITION_SETTINGS = {\n interpolation: {\n duration: 0,\n easing: t => t\n },\n spring: {\n stiffness: 0.05,\n damping: 0.5\n }\n};\n\nexport function normalizeTransitionSettings(\n userSettings: number | InterpolationTransitionSettings | SpringTransitionSettings,\n layerSettings?: boolean | Partial\n): TransitionSettings | null {\n if (!userSettings) {\n return null;\n }\n if (Number.isFinite(userSettings)) {\n userSettings = {type: 'interpolation', duration: userSettings as number};\n }\n const type = (userSettings as TransitionSettings).type || 'interpolation';\n return {\n ...DEFAULT_TRANSITION_SETTINGS[type],\n ...(layerSettings as TransitionSettings),\n ...(userSettings as TransitionSettings),\n type\n };\n}\n\n// NOTE: NOT COPYING OVER OFFSET OR STRIDE HERE BECAUSE:\n// (1) WE DON'T SUPPORT INTERLEAVED BUFFERS FOR TRANSITIONS\n// (2) BUFFERS WITH OFFSETS ALWAYS CONTAIN VALUES OF THE SAME SIZE\n// (3) THE OPERATIONS IN THE SHADER ARE PER-COMPONENT (addition and scaling)\nexport function getSourceBufferAttribute(\n gl: WebGLRenderingContext,\n attribute: Attribute\n): [Buffer, BufferAccessor] | NumericArray {\n // The Attribute we pass to Transform as a sourceBuffer must have {divisor: 0}\n // so we create a copy of the attribute (with divisor=0) to use when running\n // transform feedback\n const buffer = attribute.getBuffer();\n if (buffer) {\n return [\n buffer,\n {\n divisor: 0,\n size: attribute.size,\n normalized: attribute.settings.normalized\n } as BufferAccessor\n ];\n }\n // constant\n // don't pass normalized here because the `value` from a normalized attribute is\n // already normalized\n return attribute.value as NumericArray;\n}\n\nexport function getAttributeTypeFromSize(size: number): string {\n switch (size) {\n case 1:\n return 'float';\n case 2:\n return 'vec2';\n case 3:\n return 'vec3';\n case 4:\n return 'vec4';\n default:\n throw new Error(`No defined attribute type for size \"${size}\"`);\n }\n}\n\nexport function cycleBuffers(buffers: Buffer[]): void {\n buffers.push(buffers.shift() as Buffer);\n}\n\nexport function getAttributeBufferLength(attribute: Attribute, numInstances: number): number {\n const {doublePrecision, settings, value, size} = attribute;\n const multiplier = doublePrecision && value instanceof Float64Array ? 2 : 1;\n return (settings.noAlloc ? (value as NumericArray).length : numInstances * size) * multiplier;\n}\n\n// This helper is used when transitioning attributes from a set of values in one buffer layout\n// to a set of values in a different buffer layout. (Buffer layouts are used when attribute values\n// within a buffer should be grouped for drawElements, like the Polygon layer.) For example, a\n// buffer layout of [3, 4] might have data [A1, A2, A3, B1, B2, B3, B4]. If it needs to transition\n// to a buffer layout of [4, 2], it should produce a buffer, using the transition setting's `enter`\n// function, that looks like this: [A1, A2, A3, A4 (user `enter` fn), B1, B2, 0]. Note: the final\n// 0 in this buffer is because we never shrink buffers, only grow them, for performance reasons.\nexport function padBuffer({\n buffer,\n numInstances,\n attribute,\n fromLength,\n fromStartIndices,\n getData = x => x\n}: {\n buffer: Buffer;\n numInstances: number;\n attribute: Attribute;\n fromLength: number;\n fromStartIndices?: NumericArray | null;\n getData?: (toValue: NumericArray, chunk?: NumericArray) => NumericArray;\n}): void {\n // TODO: move the precisionMultiplier logic to the attribute when retrieving\n // its `size` and `elementOffset`?\n const precisionMultiplier =\n attribute.doublePrecision && attribute.value instanceof Float64Array ? 2 : 1;\n const size = attribute.size * precisionMultiplier;\n const byteOffset = attribute.byteOffset;\n const toStartIndices = attribute.startIndices;\n const hasStartIndices = fromStartIndices && toStartIndices;\n const toLength = getAttributeBufferLength(attribute, numInstances);\n const isConstant = attribute.isConstant;\n\n // check if buffer needs to be padded\n if (!hasStartIndices && fromLength >= toLength) {\n return;\n }\n\n const toData = isConstant\n ? attribute.value\n : (attribute.getBuffer() as Buffer).getData({srcByteOffset: byteOffset});\n if (attribute.settings.normalized && !isConstant) {\n const getter = getData;\n getData = (value, chunk) => attribute.normalizeConstant(getter(value, chunk));\n }\n\n const getMissingData = isConstant\n ? (i, chunk) => getData(toData, chunk)\n : (i, chunk) => getData(toData.subarray(i, i + size), chunk);\n\n const source = buffer.getData({length: fromLength});\n const data = new Float32Array(toLength);\n padArray({\n source,\n target: data,\n sourceStartIndices: fromStartIndices,\n targetStartIndices: toStartIndices,\n size,\n getData: getMissingData\n });\n\n // TODO: support offset in buffer.setData?\n if (buffer.byteLength < data.byteLength + byteOffset) {\n buffer.reallocate(data.byteLength + byteOffset);\n }\n buffer.subData({data, offset: byteOffset});\n}\n","import { assert } from '@loaders.gl/loader-utils';\nexport function isLoaderObject(loader) {\n var _loader;\n\n if (!loader) {\n return false;\n }\n\n if (Array.isArray(loader)) {\n loader = loader[0];\n }\n\n const hasExtensions = Array.isArray((_loader = loader) === null || _loader === void 0 ? void 0 : _loader.extensions);\n return hasExtensions;\n}\nexport function normalizeLoader(loader) {\n var _loader2, _loader3;\n\n assert(loader, 'null loader');\n assert(isLoaderObject(loader), 'invalid loader');\n let options;\n\n if (Array.isArray(loader)) {\n options = loader[1];\n loader = loader[0];\n loader = { ...loader,\n options: { ...loader.options,\n ...options\n }\n };\n }\n\n if ((_loader2 = loader) !== null && _loader2 !== void 0 && _loader2.parseTextSync || (_loader3 = loader) !== null && _loader3 !== void 0 && _loader3.parseText) {\n loader.text = true;\n }\n\n if (!loader.text) {\n loader.binary = true;\n }\n\n return loader;\n}\n//# sourceMappingURL=normalize-loader.js.map","import checkIfBrowser from '../env/is-browser';\nexport { self, window, global, document, process, console } from '../env/globals';\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'untranspiled source';\nexport const isBrowser = checkIfBrowser();\n//# sourceMappingURL=globals.js.map","function getStorage(type) {\n try {\n const storage = window[type];\n const x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return storage;\n } catch (e) {\n return null;\n }\n}\n\nexport default class LocalStorage {\n constructor(id, defaultSettings, type = 'sessionStorage') {\n this.storage = getStorage(type);\n this.id = id;\n this.config = {};\n Object.assign(this.config, defaultSettings);\n\n this._loadConfiguration();\n }\n\n getConfiguration() {\n return this.config;\n }\n\n setConfiguration(configuration) {\n this.config = {};\n return this.updateConfiguration(configuration);\n }\n\n updateConfiguration(configuration) {\n Object.assign(this.config, configuration);\n\n if (this.storage) {\n const serialized = JSON.stringify(this.config);\n this.storage.setItem(this.id, serialized);\n }\n\n return this;\n }\n\n _loadConfiguration() {\n let configuration = {};\n\n if (this.storage) {\n const serializedConfiguration = this.storage.getItem(this.id);\n configuration = serializedConfiguration ? JSON.parse(serializedConfiguration) : {};\n }\n\n Object.assign(this.config, configuration);\n return this;\n }\n\n}\n//# sourceMappingURL=local-storage.js.map","export function formatTime(ms) {\n let formatted;\n\n if (ms < 10) {\n formatted = \"\".concat(ms.toFixed(2), \"ms\");\n } else if (ms < 100) {\n formatted = \"\".concat(ms.toFixed(1), \"ms\");\n } else if (ms < 1000) {\n formatted = \"\".concat(ms.toFixed(0), \"ms\");\n } else {\n formatted = \"\".concat((ms / 1000).toFixed(2), \"s\");\n }\n\n return formatted;\n}\nexport function leftPad(string, length = 8) {\n const padLength = Math.max(length - string.length, 0);\n return \"\".concat(' '.repeat(padLength)).concat(string);\n}\nexport function rightPad(string, length = 8) {\n const padLength = Math.max(length - string.length, 0);\n return \"\".concat(string).concat(' '.repeat(padLength));\n}\nexport function formatValue(v, opts = {}) {\n const EPSILON = 1e-16;\n const {\n isInteger = false\n } = opts;\n\n if (Array.isArray(v) || ArrayBuffer.isView(v)) {\n return formatArrayValue(v, opts);\n }\n\n if (!Number.isFinite(v)) {\n return String(v);\n }\n\n if (Math.abs(v) < EPSILON) {\n return isInteger ? '0' : '0.';\n }\n\n if (isInteger) {\n return v.toFixed(0);\n }\n\n if (Math.abs(v) > 100 && Math.abs(v) < 10000) {\n return v.toFixed(0);\n }\n\n const string = v.toPrecision(2);\n const decimal = string.indexOf('.0');\n return decimal === string.length - 2 ? string.slice(0, -1) : string;\n}\n\nfunction formatArrayValue(v, opts) {\n const {\n maxElts = 16,\n size = 1\n } = opts;\n let string = '[';\n\n for (let i = 0; i < v.length && i < maxElts; ++i) {\n if (i > 0) {\n string += \",\".concat(i % size === 0 ? ' ' : '');\n }\n\n string += formatValue(v[i], opts);\n }\n\n const terminator = v.length > maxElts ? '...' : ']';\n return \"\".concat(string).concat(terminator);\n}\n\nexport function formatImage(image, message, scale, maxWidth = 600) {\n const imageUrl = image.src.replace(/\\(/g, '%28').replace(/\\)/g, '%29');\n\n if (image.width > maxWidth) {\n scale = Math.min(scale, maxWidth / image.width);\n }\n\n const width = image.width * scale;\n const height = image.height * scale;\n const style = ['font-size:1px;', \"padding:\".concat(Math.floor(height / 2), \"px \").concat(Math.floor(width / 2), \"px;\"), \"line-height:\".concat(height, \"px;\"), \"background:url(\".concat(imageUrl, \");\"), \"background-size:\".concat(width, \"px \").concat(height, \"px;\"), 'color:transparent;'].join('');\n return [\"\".concat(message, \" %c+\"), style];\n}\n//# sourceMappingURL=formatters.js.map","import { isBrowser } from './globals';\nexport const COLOR = {\n BLACK: 30,\n RED: 31,\n GREEN: 32,\n YELLOW: 33,\n BLUE: 34,\n MAGENTA: 35,\n CYAN: 36,\n WHITE: 37,\n BRIGHT_BLACK: 90,\n BRIGHT_RED: 91,\n BRIGHT_GREEN: 92,\n BRIGHT_YELLOW: 93,\n BRIGHT_BLUE: 94,\n BRIGHT_MAGENTA: 95,\n BRIGHT_CYAN: 96,\n BRIGHT_WHITE: 97\n};\n\nfunction getColor(color) {\n return typeof color === 'string' ? COLOR[color.toUpperCase()] || COLOR.WHITE : color;\n}\n\nexport function addColor(string, color, background) {\n if (!isBrowser && typeof string === 'string') {\n if (color) {\n color = getColor(color);\n string = \"\\x1B[\".concat(color, \"m\").concat(string, \"\\x1B[39m\");\n }\n\n if (background) {\n color = getColor(background);\n string = \"\\x1B[\".concat(background + 10, \"m\").concat(string, \"\\x1B[49m\");\n }\n }\n\n return string;\n}\n//# sourceMappingURL=color.js.map","export default function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'Assertion failed');\n }\n}\n//# sourceMappingURL=assert.js.map","import { window, process, isBrowser } from './globals';\nexport default function getHiResTimestamp() {\n let timestamp;\n\n if (isBrowser && window.performance) {\n timestamp = window.performance.now();\n } else if (process.hrtime) {\n const timeParts = process.hrtime();\n timestamp = timeParts[0] * 1000 + timeParts[1] / 1e6;\n } else {\n timestamp = Date.now();\n }\n\n return timestamp;\n}\n//# sourceMappingURL=hi-res-timestamp.js.map","import { VERSION, isBrowser } from '../utils/globals';\nimport LocalStorage from '../utils/local-storage';\nimport { formatImage, formatTime, leftPad } from '../utils/formatters';\nimport { addColor } from '../utils/color';\nimport { autobind } from '../utils/autobind';\nimport assert from '../utils/assert';\nimport getHiResTimestamp from '../utils/hi-res-timestamp';\nconst originalConsole = {\n debug: isBrowser ? console.debug || console.log : console.log,\n log: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error\n};\nconst DEFAULT_SETTINGS = {\n enabled: true,\n level: 0\n};\n\nfunction noop() {}\n\nconst cache = {};\nconst ONCE = {\n once: true\n};\n\nfunction getTableHeader(table) {\n for (const key in table) {\n for (const title in table[key]) {\n return title || 'untitled';\n }\n }\n\n return 'empty';\n}\n\nexport default class Log {\n constructor({\n id\n } = {\n id: ''\n }) {\n this.id = id;\n this.VERSION = VERSION;\n this._startTs = getHiResTimestamp();\n this._deltaTs = getHiResTimestamp();\n this.LOG_THROTTLE_TIMEOUT = 0;\n this._storage = new LocalStorage(\"__probe-\".concat(this.id, \"__\"), DEFAULT_SETTINGS);\n this.userData = {};\n this.timeStamp(\"\".concat(this.id, \" started\"));\n autobind(this);\n Object.seal(this);\n }\n\n set level(newLevel) {\n this.setLevel(newLevel);\n }\n\n get level() {\n return this.getLevel();\n }\n\n isEnabled() {\n return this._storage.config.enabled;\n }\n\n getLevel() {\n return this._storage.config.level;\n }\n\n getTotal() {\n return Number((getHiResTimestamp() - this._startTs).toPrecision(10));\n }\n\n getDelta() {\n return Number((getHiResTimestamp() - this._deltaTs).toPrecision(10));\n }\n\n set priority(newPriority) {\n this.level = newPriority;\n }\n\n get priority() {\n return this.level;\n }\n\n getPriority() {\n return this.level;\n }\n\n enable(enabled = true) {\n this._storage.updateConfiguration({\n enabled\n });\n\n return this;\n }\n\n setLevel(level) {\n this._storage.updateConfiguration({\n level\n });\n\n return this;\n }\n\n assert(condition, message) {\n assert(condition, message);\n }\n\n warn(message) {\n return this._getLogFunction(0, message, originalConsole.warn, arguments, ONCE);\n }\n\n error(message) {\n return this._getLogFunction(0, message, originalConsole.error, arguments);\n }\n\n deprecated(oldUsage, newUsage) {\n return this.warn(\"`\".concat(oldUsage, \"` is deprecated and will be removed in a later version. Use `\").concat(newUsage, \"` instead\"));\n }\n\n removed(oldUsage, newUsage) {\n return this.error(\"`\".concat(oldUsage, \"` has been removed. Use `\").concat(newUsage, \"` instead\"));\n }\n\n probe(logLevel, message) {\n return this._getLogFunction(logLevel, message, originalConsole.log, arguments, {\n time: true,\n once: true\n });\n }\n\n log(logLevel, message) {\n return this._getLogFunction(logLevel, message, originalConsole.debug, arguments);\n }\n\n info(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.info, arguments);\n }\n\n once(logLevel, message) {\n return this._getLogFunction(logLevel, message, originalConsole.debug || originalConsole.info, arguments, ONCE);\n }\n\n table(logLevel, table, columns) {\n if (table) {\n return this._getLogFunction(logLevel, table, console.table || noop, columns && [columns], {\n tag: getTableHeader(table)\n });\n }\n\n return noop;\n }\n\n image({\n logLevel,\n priority,\n image,\n message = '',\n scale = 1\n }) {\n if (!this._shouldLog(logLevel || priority)) {\n return noop;\n }\n\n return isBrowser ? logImageInBrowser({\n image,\n message,\n scale\n }) : logImageInNode({\n image,\n message,\n scale\n });\n }\n\n settings() {\n if (console.table) {\n console.table(this._storage.config);\n } else {\n console.log(this._storage.config);\n }\n }\n\n get(setting) {\n return this._storage.config[setting];\n }\n\n set(setting, value) {\n this._storage.updateConfiguration({\n [setting]: value\n });\n }\n\n time(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.time ? console.time : console.info);\n }\n\n timeEnd(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.timeEnd ? console.timeEnd : console.info);\n }\n\n timeStamp(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.timeStamp || noop);\n }\n\n group(logLevel, message, opts = {\n collapsed: false\n }) {\n opts = normalizeArguments({\n logLevel,\n message,\n opts\n });\n const {\n collapsed\n } = opts;\n opts.method = (collapsed ? console.groupCollapsed : console.group) || console.info;\n return this._getLogFunction(opts);\n }\n\n groupCollapsed(logLevel, message, opts = {}) {\n return this.group(logLevel, message, Object.assign({}, opts, {\n collapsed: true\n }));\n }\n\n groupEnd(logLevel) {\n return this._getLogFunction(logLevel, '', console.groupEnd || noop);\n }\n\n withGroup(logLevel, message, func) {\n this.group(logLevel, message)();\n\n try {\n func();\n } finally {\n this.groupEnd(logLevel)();\n }\n }\n\n trace() {\n if (console.trace) {\n console.trace();\n }\n }\n\n _shouldLog(logLevel) {\n return this.isEnabled() && this.getLevel() >= normalizeLogLevel(logLevel);\n }\n\n _getLogFunction(logLevel, message, method, args = [], opts) {\n if (this._shouldLog(logLevel)) {\n opts = normalizeArguments({\n logLevel,\n message,\n args,\n opts\n });\n method = method || opts.method;\n assert(method);\n opts.total = this.getTotal();\n opts.delta = this.getDelta();\n this._deltaTs = getHiResTimestamp();\n const tag = opts.tag || opts.message;\n\n if (opts.once) {\n if (!cache[tag]) {\n cache[tag] = getHiResTimestamp();\n } else {\n return noop;\n }\n }\n\n message = decorateMessage(this.id, opts.message, opts);\n return method.bind(console, message, ...opts.args);\n }\n\n return noop;\n }\n\n}\nLog.VERSION = VERSION;\n\nfunction normalizeLogLevel(logLevel) {\n if (!logLevel) {\n return 0;\n }\n\n let resolvedLevel;\n\n switch (typeof logLevel) {\n case 'number':\n resolvedLevel = logLevel;\n break;\n\n case 'object':\n resolvedLevel = logLevel.logLevel || logLevel.priority || 0;\n break;\n\n default:\n return 0;\n }\n\n assert(Number.isFinite(resolvedLevel) && resolvedLevel >= 0);\n return resolvedLevel;\n}\n\nexport function normalizeArguments(opts) {\n const {\n logLevel,\n message\n } = opts;\n opts.logLevel = normalizeLogLevel(logLevel);\n const args = opts.args ? Array.from(opts.args) : [];\n\n while (args.length && args.shift() !== message) {}\n\n opts.args = args;\n\n switch (typeof logLevel) {\n case 'string':\n case 'function':\n if (message !== undefined) {\n args.unshift(message);\n }\n\n opts.message = logLevel;\n break;\n\n case 'object':\n Object.assign(opts, logLevel);\n break;\n\n default:\n }\n\n if (typeof opts.message === 'function') {\n opts.message = opts.message();\n }\n\n const messageType = typeof opts.message;\n assert(messageType === 'string' || messageType === 'object');\n return Object.assign(opts, opts.opts);\n}\n\nfunction decorateMessage(id, message, opts) {\n if (typeof message === 'string') {\n const time = opts.time ? leftPad(formatTime(opts.total)) : '';\n message = opts.time ? \"\".concat(id, \": \").concat(time, \" \").concat(message) : \"\".concat(id, \": \").concat(message);\n message = addColor(message, opts.color, opts.background);\n }\n\n return message;\n}\n\nfunction logImageInNode({\n image,\n message = '',\n scale = 1\n}) {\n let asciify = null;\n\n try {\n asciify = module.require('asciify-image');\n } catch (error) {}\n\n if (asciify) {\n return () => asciify(image, {\n fit: 'box',\n width: \"\".concat(Math.round(80 * scale), \"%\")\n }).then(data => console.log(data));\n }\n\n return noop;\n}\n\nfunction logImageInBrowser({\n image,\n message = '',\n scale = 1\n}) {\n if (typeof image === 'string') {\n const img = new Image();\n\n img.onload = () => {\n const args = formatImage(img, message, scale);\n console.log(...args);\n };\n\n img.src = image;\n return noop;\n }\n\n const element = image.nodeName || '';\n\n if (element.toLowerCase() === 'img') {\n console.log(...formatImage(image, message, scale));\n return noop;\n }\n\n if (element.toLowerCase() === 'canvas') {\n const img = new Image();\n\n img.onload = () => console.log(...formatImage(img, message, scale));\n\n img.src = image.toDataURL();\n return noop;\n }\n\n return noop;\n}\n//# sourceMappingURL=log.js.map","export function autobind(obj, predefined = ['constructor']) {\n const proto = Object.getPrototypeOf(obj);\n const propNames = Object.getOwnPropertyNames(proto);\n\n for (const key of propNames) {\n if (typeof obj[key] === 'function') {\n if (!predefined.find(name => key === name)) {\n obj[key] = obj[key].bind(obj);\n }\n }\n }\n}\n//# sourceMappingURL=autobind.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Log } from 'probe.gl';\nexport const probeLog = new Log({\n id: 'loaders.gl'\n});\nexport class NullLog {\n log() {\n return () => {};\n }\n\n info() {\n return () => {};\n }\n\n warn() {\n return () => {};\n }\n\n error() {\n return () => {};\n }\n\n}\nexport class ConsoleLog {\n constructor() {\n _defineProperty(this, \"console\", void 0);\n\n this.console = console;\n }\n\n log(...args) {\n return this.console.log.bind(this.console, ...args);\n }\n\n info(...args) {\n return this.console.info.bind(this.console, ...args);\n }\n\n warn(...args) {\n return this.console.warn.bind(this.console, ...args);\n }\n\n error(...args) {\n return this.console.error.bind(this.console, ...args);\n }\n\n}\n//# sourceMappingURL=loggers.js.map","import { isBrowser } from '@loaders.gl/loader-utils';\nimport { ConsoleLog } from './loggers';\nexport const DEFAULT_LOADER_OPTIONS = {\n fetch: null,\n mimeType: undefined,\n nothrow: false,\n log: new ConsoleLog(),\n CDN: 'https://unpkg.com/@loaders.gl',\n worker: true,\n maxConcurrency: 3,\n maxMobileConcurrency: 1,\n reuseWorkers: isBrowser,\n _nodeWorkers: false,\n _workerType: '',\n limit: 0,\n _limitMB: 0,\n batchSize: 'auto',\n batchDebounceMs: 0,\n metadata: false,\n transforms: []\n};\nexport const REMOVED_LOADER_OPTIONS = {\n throws: 'nothrow',\n dataType: '(no longer used)',\n uri: 'baseUri',\n method: 'fetch.method',\n headers: 'fetch.headers',\n body: 'fetch.body',\n mode: 'fetch.mode',\n credentials: 'fetch.credentials',\n cache: 'fetch.cache',\n redirect: 'fetch.redirect',\n referrer: 'fetch.referrer',\n referrerPolicy: 'fetch.referrerPolicy',\n integrity: 'fetch.integrity',\n keepalive: 'fetch.keepalive',\n signal: 'fetch.signal'\n};\n//# sourceMappingURL=option-defaults.js.map","import { isPureObject, isObject } from '../../javascript-utils/is-type';\nimport { fetchFile } from '../fetch/fetch-file';\nimport { probeLog, NullLog } from './loggers';\nimport { DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS } from './option-defaults';\nexport function getGlobalLoaderState() {\n globalThis.loaders = globalThis.loaders || {};\n const {\n loaders\n } = globalThis;\n loaders._state = loaders._state || {};\n return loaders._state;\n}\nexport const getGlobalLoaderOptions = () => {\n const state = getGlobalLoaderState();\n state.globalOptions = state.globalOptions || { ...DEFAULT_LOADER_OPTIONS\n };\n return state.globalOptions;\n};\nexport function setGlobalOptions(options) {\n const state = getGlobalLoaderState();\n const globalOptions = getGlobalLoaderOptions();\n state.globalOptions = normalizeOptionsInternal(globalOptions, options);\n}\nexport function normalizeOptions(options, loader, loaders, url) {\n loaders = loaders || [];\n loaders = Array.isArray(loaders) ? loaders : [loaders];\n validateOptions(options, loaders);\n return normalizeOptionsInternal(loader, options, url);\n}\nexport function getFetchFunction(options, context) {\n const globalOptions = getGlobalLoaderOptions();\n const fetchOptions = options || globalOptions;\n\n if (typeof fetchOptions.fetch === 'function') {\n return fetchOptions.fetch;\n }\n\n if (isObject(fetchOptions.fetch)) {\n return url => fetchFile(url, fetchOptions);\n }\n\n if (context !== null && context !== void 0 && context.fetch) {\n return context === null || context === void 0 ? void 0 : context.fetch;\n }\n\n return fetchFile;\n}\n\nfunction validateOptions(options, loaders) {\n validateOptionsObject(options, null, DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS, loaders);\n\n for (const loader of loaders) {\n const idOptions = options && options[loader.id] || {};\n const loaderOptions = loader.options && loader.options[loader.id] || {};\n const deprecatedOptions = loader.deprecatedOptions && loader.deprecatedOptions[loader.id] || {};\n validateOptionsObject(idOptions, loader.id, loaderOptions, deprecatedOptions, loaders);\n }\n}\n\nfunction validateOptionsObject(options, id, defaultOptions, deprecatedOptions, loaders) {\n const loaderName = id || 'Top level';\n const prefix = id ? \"\".concat(id, \".\") : '';\n\n for (const key in options) {\n const isSubOptions = !id && isObject(options[key]);\n const isBaseUriOption = key === 'baseUri' && !id;\n const isWorkerUrlOption = key === 'workerUrl' && id;\n\n if (!(key in defaultOptions) && !isBaseUriOption && !isWorkerUrlOption) {\n if (key in deprecatedOptions) {\n probeLog.warn(\"\".concat(loaderName, \" loader option '\").concat(prefix).concat(key, \"' no longer supported, use '\").concat(deprecatedOptions[key], \"'\"))();\n } else if (!isSubOptions) {\n const suggestion = findSimilarOption(key, loaders);\n probeLog.warn(\"\".concat(loaderName, \" loader option '\").concat(prefix).concat(key, \"' not recognized. \").concat(suggestion))();\n }\n }\n }\n}\n\nfunction findSimilarOption(optionKey, loaders) {\n const lowerCaseOptionKey = optionKey.toLowerCase();\n let bestSuggestion = '';\n\n for (const loader of loaders) {\n for (const key in loader.options) {\n if (optionKey === key) {\n return \"Did you mean '\".concat(loader.id, \".\").concat(key, \"'?\");\n }\n\n const lowerCaseKey = key.toLowerCase();\n const isPartialMatch = lowerCaseOptionKey.startsWith(lowerCaseKey) || lowerCaseKey.startsWith(lowerCaseOptionKey);\n\n if (isPartialMatch) {\n bestSuggestion = bestSuggestion || \"Did you mean '\".concat(loader.id, \".\").concat(key, \"'?\");\n }\n }\n }\n\n return bestSuggestion;\n}\n\nfunction normalizeOptionsInternal(loader, options, url) {\n const loaderDefaultOptions = loader.options || {};\n const mergedOptions = { ...loaderDefaultOptions\n };\n addUrlOptions(mergedOptions, url);\n\n if (mergedOptions.log === null) {\n mergedOptions.log = new NullLog();\n }\n\n mergeNestedFields(mergedOptions, getGlobalLoaderOptions());\n mergeNestedFields(mergedOptions, options);\n return mergedOptions;\n}\n\nfunction mergeNestedFields(mergedOptions, options) {\n for (const key in options) {\n if (key in options) {\n const value = options[key];\n\n if (isPureObject(value) && isPureObject(mergedOptions[key])) {\n mergedOptions[key] = { ...mergedOptions[key],\n ...options[key]\n };\n } else {\n mergedOptions[key] = options[key];\n }\n }\n }\n}\n\nfunction addUrlOptions(options, url) {\n if (url && !('baseUri' in options)) {\n options.baseUri = url;\n }\n}\n//# sourceMappingURL=option-utils.js.map","import { assert } from './assert';\nconst uidCounters = {};\nexport function uid() {\n let id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'id';\n uidCounters[id] = uidCounters[id] || 1;\n const count = uidCounters[id]++;\n return \"\".concat(id, \"-\").concat(count);\n}\nexport function isPowerOfTwo(n) {\n assert(typeof n === 'number', 'Input must be a number');\n return n && (n & n - 1) === 0;\n}\nexport function isObjectEmpty(obj) {\n let isEmpty = true;\n\n for (const key in obj) {\n isEmpty = false;\n break;\n }\n\n return isEmpty;\n}\n//# sourceMappingURL=utils.js.map","import { assert } from '../utils/assert';\nexport function getKeyValue(gl, name) {\n if (typeof name !== 'string') {\n return name;\n }\n\n const number = Number(name);\n\n if (!isNaN(number)) {\n return number;\n }\n\n name = name.replace(/^.*\\./, '');\n const value = gl[name];\n assert(value !== undefined, \"Accessing undefined constant GL.\".concat(name));\n return value;\n}\nexport function getKey(gl, value) {\n value = Number(value);\n\n for (const key in gl) {\n if (gl[key] === value) {\n return \"GL.\".concat(key);\n }\n }\n\n return String(value);\n}\nexport function getKeyType(gl, value) {\n assert(value !== undefined, 'undefined key');\n value = Number(value);\n\n for (const key in gl) {\n if (gl[key] === value) {\n return \"GL.\".concat(key);\n }\n }\n\n return String(value);\n}\n//# sourceMappingURL=constants-to-keys.js.map","const globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document\n};\nconst self_ = globals.self || globals.window || globals.global || {};\nconst window_ = globals.window || globals.self || globals.global || {};\nconst global_ = globals.global || globals.self || globals.window || {};\nconst document_ = globals.document || {};\nexport { self_ as self, window_ as window, global_ as global, document_ as document };\nexport const isBrowser = typeof process !== 'object' || String(process) !== '[object process]' || process.browser;\nexport const isWorker = typeof importScripts === 'function';\nexport const isMobile = typeof window !== 'undefined' && typeof window.orientation !== 'undefined';\nconst matches = typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\nexport const nodeVersion = matches && parseFloat(matches[1]) || 0;\n//# sourceMappingURL=globals.js.map","import TransitionInterpolator from './transition-interpolator';\nimport {lerp} from '@math.gl/core';\n\nimport type Viewport from '../viewports/viewport';\n\nconst DEFAULT_PROPS = ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'];\nconst DEFAULT_REQUIRED_PROPS = ['longitude', 'latitude', 'zoom'];\n\ntype PropsWithAnchor = {\n around?: number[];\n aroundPosition?: number[];\n [key: string]: any;\n};\n\n/**\n * Performs linear interpolation of two view states.\n */\nexport default class LinearInterpolator extends TransitionInterpolator {\n opts: {\n around?: number[];\n makeViewport?: (props: Record) => Viewport;\n };\n\n /**\n * @param {Object} opts\n * @param {Array} opts.transitionProps - list of props to apply linear transition to.\n * @param {Array} opts.around - a screen point to zoom/rotate around.\n * @param {Function} opts.makeViewport - construct a viewport instance with given props.\n */\n constructor(\n opts:\n | string[]\n | {\n transitionProps?:\n | string[]\n | {\n compare: string[];\n extract?: string[];\n required?: string[];\n };\n around?: number[];\n makeViewport?: (props: Record) => Viewport;\n } = {}\n ) {\n // Backward compatibility\n const transitionProps = Array.isArray(opts) ? opts : opts.transitionProps;\n\n const normalizedOpts = Array.isArray(opts) ? {} : opts;\n normalizedOpts.transitionProps = Array.isArray(transitionProps)\n ? {\n compare: transitionProps,\n required: transitionProps\n }\n : transitionProps || {\n compare: DEFAULT_PROPS,\n required: DEFAULT_REQUIRED_PROPS\n };\n\n super(normalizedOpts.transitionProps);\n this.opts = normalizedOpts;\n }\n\n initializeProps(\n startProps: Record,\n endProps: Record\n ): {\n start: PropsWithAnchor;\n end: PropsWithAnchor;\n } {\n const result = super.initializeProps(startProps, endProps);\n\n const {makeViewport, around} = this.opts;\n if (makeViewport && around) {\n const startViewport = makeViewport(startProps);\n const endViewport = makeViewport(endProps);\n const aroundPosition = startViewport.unproject(around);\n result.start.around = around;\n Object.assign(result.end, {\n around: endViewport.project(aroundPosition),\n aroundPosition,\n width: endProps.width,\n height: endProps.height\n });\n }\n\n return result;\n }\n\n interpolateProps(\n startProps: PropsWithAnchor,\n endProps: PropsWithAnchor,\n t: number\n ): Record {\n const propsInTransition = {};\n for (const key of this._propsToExtract) {\n propsInTransition[key] = lerp(startProps[key] || 0, endProps[key] || 0, t);\n }\n\n if (endProps.aroundPosition && this.opts.makeViewport) {\n // Linear transition should be performed in common space\n const viewport = this.opts.makeViewport({...endProps, ...propsInTransition});\n Object.assign(\n propsInTransition,\n viewport.panByPosition(\n endProps.aroundPosition,\n // anchor point in current screen coordinates\n lerp(startProps.around as number[], endProps.around as number[], t) as number[]\n )\n );\n }\n return propsInTransition;\n }\n}\n","export function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'loaders.gl assertion failed.');\n }\n}\n//# sourceMappingURL=assert.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport type {NumericArray} from '../types/types';\nimport type {AccessorFunction} from '../types/layer-props';\n\nconst EMPTY_ARRAY = [];\nconst placeholderArray = [];\n\n/*\n * Create an Iterable\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols\n * and a \"context\" tracker from the given data\n */\nexport function createIterable(\n data,\n startRow = 0,\n endRow = Infinity\n): {\n iterable: Iterable;\n objectInfo: {\n index: number;\n data: any;\n target: any[];\n };\n} {\n let iterable: Iterable = EMPTY_ARRAY;\n\n const objectInfo = {\n index: -1,\n data,\n // visitor can optionally utilize this to avoid constructing a new array for every object\n target: []\n };\n\n if (!data) {\n iterable = EMPTY_ARRAY;\n } else if (typeof data[Symbol.iterator] === 'function') {\n // data is already an iterable\n iterable = data;\n } else if (data.length > 0) {\n placeholderArray.length = data.length;\n iterable = placeholderArray;\n }\n\n if (startRow > 0 || Number.isFinite(endRow)) {\n iterable = (Array.isArray(iterable) ? iterable : Array.from(iterable)).slice(startRow, endRow);\n objectInfo.index = startRow - 1;\n }\n\n return {iterable, objectInfo};\n}\n\n/*\n * Returns true if data is an async iterable object\n */\nexport function isAsyncIterable(data): boolean {\n return data && data[Symbol.asyncIterator];\n}\n\n/*\n * Create an accessor function from a flat buffer that yields the value at each object index\n */\nexport function getAccessorFromBuffer(\n typedArray,\n options: {\n size: number;\n stride?: number;\n offset?: number;\n startIndices?: NumericArray;\n nested?: boolean;\n }\n): AccessorFunction {\n const {size, stride, offset, startIndices, nested} = options;\n const bytesPerElement = typedArray.BYTES_PER_ELEMENT;\n const elementStride = stride ? stride / bytesPerElement : size;\n const elementOffset = offset ? offset / bytesPerElement : 0;\n const vertexCount = Math.floor((typedArray.length - elementOffset) / elementStride);\n\n return (_, {index, target}) => {\n if (!startIndices) {\n const sourceIndex = index * elementStride + elementOffset;\n for (let j = 0; j < size; j++) {\n target[j] = typedArray[sourceIndex + j];\n }\n return target;\n }\n const startIndex = startIndices[index];\n const endIndex = startIndices[index + 1] || vertexCount;\n let result;\n\n if (nested) {\n result = new Array(endIndex - startIndex);\n for (let i = startIndex; i < endIndex; i++) {\n const sourceIndex = i * elementStride + elementOffset;\n target = new Array(size);\n for (let j = 0; j < size; j++) {\n target[j] = typedArray[sourceIndex + j];\n }\n result[i - startIndex] = target;\n }\n } else if (elementStride === size) {\n result = typedArray.subarray(\n startIndex * size + elementOffset,\n endIndex * size + elementOffset\n );\n } else {\n result = new typedArray.constructor((endIndex - startIndex) * size);\n let targetIndex = 0;\n for (let i = startIndex; i < endIndex; i++) {\n const sourceIndex = i * elementStride + elementOffset;\n for (let j = 0; j < size; j++) {\n result[targetIndex++] = typedArray[sourceIndex + j];\n }\n }\n }\n\n return result;\n };\n}\n","const ERR_TYPE_DEDUCTION = 'Failed to deduce GL constant from typed array';\nexport function getGLTypeFromTypedArray(arrayOrType) {\n const type = ArrayBuffer.isView(arrayOrType) ? arrayOrType.constructor : arrayOrType;\n\n switch (type) {\n case Float32Array:\n return 5126;\n\n case Uint16Array:\n return 5123;\n\n case Uint32Array:\n return 5125;\n\n case Uint8Array:\n return 5121;\n\n case Uint8ClampedArray:\n return 5121;\n\n case Int8Array:\n return 5120;\n\n case Int16Array:\n return 5122;\n\n case Int32Array:\n return 5124;\n\n default:\n throw new Error(ERR_TYPE_DEDUCTION);\n }\n}\nexport function getTypedArrayFromGLType(glType) {\n let {\n clamped = true\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n switch (glType) {\n case 5126:\n return Float32Array;\n\n case 5123:\n case 33635:\n case 32819:\n case 32820:\n return Uint16Array;\n\n case 5125:\n return Uint32Array;\n\n case 5121:\n return clamped ? Uint8ClampedArray : Uint8Array;\n\n case 5120:\n return Int8Array;\n\n case 5122:\n return Int16Array;\n\n case 5124:\n return Int32Array;\n\n default:\n throw new Error('Failed to deduce typed array type from GL constant');\n }\n}\nexport function flipRows(_ref) {\n let {\n data,\n width,\n height,\n bytesPerPixel = 4,\n temp\n } = _ref;\n const bytesPerRow = width * bytesPerPixel;\n temp = temp || new Uint8Array(bytesPerRow);\n\n for (let y = 0; y < height / 2; ++y) {\n const topOffset = y * bytesPerRow;\n const bottomOffset = (height - y - 1) * bytesPerRow;\n temp.set(data.subarray(topOffset, topOffset + bytesPerRow));\n data.copyWithin(topOffset, bottomOffset, bottomOffset + bytesPerRow);\n data.set(temp, bottomOffset);\n }\n}\nexport function scalePixels(_ref2) {\n let {\n data,\n width,\n height\n } = _ref2;\n const newWidth = Math.round(width / 2);\n const newHeight = Math.round(height / 2);\n const newData = new Uint8Array(newWidth * newHeight * 4);\n\n for (let y = 0; y < newHeight; y++) {\n for (let x = 0; x < newWidth; x++) {\n for (let c = 0; c < 4; c++) {\n newData[(y * newWidth + x) * 4 + c] = data[(y * 2 * width + x * 2) * 4 + c];\n }\n }\n }\n\n return {\n data: newData,\n width: newWidth,\n height: newHeight\n };\n}\n//# sourceMappingURL=typed-array-utils.js.map","import { isWebGL2, assertWebGL2Context, withParameters, log } from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport { TEXTURE_FORMATS, DATA_FORMAT_CHANNELS, TYPE_SIZES, isFormatSupported, isLinearFilteringSupported } from './texture-formats';\nimport { assert } from '../utils/assert';\nimport { uid, isPowerOfTwo } from '../utils/utils';\nconst NPOT_MIN_FILTERS = [9729, 9728];\n\nconst WebGLBuffer = globalThis.WebGLBuffer || function WebGLBuffer() {};\n\nexport default class Texture extends Resource {\n get [Symbol.toStringTag]() {\n return 'Texture';\n }\n\n static isSupported(gl) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n format,\n linearFiltering\n } = opts;\n let supported = true;\n\n if (format) {\n supported = supported && isFormatSupported(gl, format);\n supported = supported && (!linearFiltering || isLinearFilteringSupported(gl, format));\n }\n\n return supported;\n }\n\n constructor(gl, props) {\n const {\n id = uid('texture'),\n handle,\n target\n } = props;\n super(gl, {\n id,\n handle\n });\n this.target = target;\n this.textureUnit = undefined;\n this.loaded = false;\n this.width = undefined;\n this.height = undefined;\n this.depth = undefined;\n this.format = undefined;\n this.type = undefined;\n this.dataFormat = undefined;\n this.border = undefined;\n this.textureUnit = undefined;\n this.mipmaps = undefined;\n }\n\n toString() {\n return \"Texture(\".concat(this.id, \",\").concat(this.width, \"x\").concat(this.height, \")\");\n }\n\n initialize() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let data = props.data;\n\n if (data instanceof Promise) {\n data.then(resolvedImageData => this.initialize(Object.assign({}, props, {\n pixels: resolvedImageData,\n data: resolvedImageData\n })));\n return this;\n }\n\n const isVideo = typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement;\n\n if (isVideo && data.readyState < HTMLVideoElement.HAVE_METADATA) {\n this._video = null;\n data.addEventListener('loadeddata', () => this.initialize(props));\n return this;\n }\n\n const {\n pixels = null,\n format = 6408,\n border = 0,\n recreate = false,\n parameters = {},\n pixelStore = {},\n textureUnit = undefined\n } = props;\n\n if (!data) {\n data = pixels;\n }\n\n let {\n width,\n height,\n dataFormat,\n type,\n compressed = false,\n mipmaps = true\n } = props;\n const {\n depth = 0\n } = props;\n ({\n width,\n height,\n compressed,\n dataFormat,\n type\n } = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n this.width = width;\n this.height = height;\n this.depth = depth;\n this.format = format;\n this.type = type;\n this.dataFormat = dataFormat;\n this.border = border;\n this.textureUnit = textureUnit;\n\n if (Number.isFinite(this.textureUnit)) {\n this.gl.activeTexture(33984 + this.textureUnit);\n this.gl.bindTexture(this.target, this.handle);\n }\n\n if (mipmaps && this._isNPOT()) {\n log.warn(\"texture: \".concat(this, \" is Non-Power-Of-Two, disabling mipmaping\"))();\n mipmaps = false;\n\n this._updateForNPOT(parameters);\n }\n\n this.mipmaps = mipmaps;\n this.setImageData({\n data,\n width,\n height,\n depth,\n format,\n type,\n dataFormat,\n border,\n mipmaps,\n parameters: pixelStore,\n compressed\n });\n\n if (mipmaps) {\n this.generateMipmap();\n }\n\n this.setParameters(parameters);\n\n if (recreate) {\n this.data = data;\n }\n\n if (isVideo) {\n this._video = {\n video: data,\n parameters,\n lastTime: data.readyState >= HTMLVideoElement.HAVE_CURRENT_DATA ? data.currentTime : -1\n };\n }\n\n return this;\n }\n\n update() {\n if (this._video) {\n const {\n video,\n parameters,\n lastTime\n } = this._video;\n\n if (lastTime === video.currentTime || video.readyState < HTMLVideoElement.HAVE_CURRENT_DATA) {\n return;\n }\n\n this.setSubImageData({\n data: video,\n parameters\n });\n\n if (this.mipmaps) {\n this.generateMipmap();\n }\n\n this._video.lastTime = video.currentTime;\n }\n }\n\n resize(_ref) {\n let {\n height,\n width,\n mipmaps = false\n } = _ref;\n\n if (width !== this.width || height !== this.height) {\n return this.initialize({\n width,\n height,\n format: this.format,\n type: this.type,\n dataFormat: this.dataFormat,\n border: this.border,\n mipmaps\n });\n }\n\n return this;\n }\n\n generateMipmap() {\n let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (this._isNPOT()) {\n log.warn(\"texture: \".concat(this, \" is Non-Power-Of-Two, disabling mipmaping\"))();\n return this;\n }\n\n this.mipmaps = true;\n this.gl.bindTexture(this.target, this.handle);\n withParameters(this.gl, params, () => {\n this.gl.generateMipmap(this.target);\n });\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n setImageData(options) {\n this._trackDeallocatedMemory('Texture');\n\n const {\n target = this.target,\n pixels = null,\n level = 0,\n format = this.format,\n border = this.border,\n offset = 0,\n parameters = {}\n } = options;\n let {\n data = null,\n type = this.type,\n width = this.width,\n height = this.height,\n dataFormat = this.dataFormat,\n compressed = false\n } = options;\n\n if (!data) {\n data = pixels;\n }\n\n ({\n type,\n dataFormat,\n compressed,\n width,\n height\n } = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n const {\n gl\n } = this;\n gl.bindTexture(this.target, this.handle);\n let dataType = null;\n ({\n data,\n dataType\n } = this._getDataType({\n data,\n compressed\n }));\n let gl2;\n let compressedTextureSize = 0;\n withParameters(this.gl, parameters, () => {\n switch (dataType) {\n case 'null':\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n break;\n\n case 'typed-array':\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data, offset);\n break;\n\n case 'buffer':\n gl2 = assertWebGL2Context(gl);\n gl2.bindBuffer(35052, data.handle || data);\n gl2.texImage2D(target, level, format, width, height, border, dataFormat, type, offset);\n gl2.bindBuffer(35052, null);\n break;\n\n case 'browser-object':\n if (isWebGL2(gl)) {\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n } else {\n gl.texImage2D(target, level, format, dataFormat, type, data);\n }\n\n break;\n\n case 'compressed':\n for (const [levelIndex, levelData] of data.entries()) {\n gl.compressedTexImage2D(target, levelIndex, levelData.format, levelData.width, levelData.height, border, levelData.data);\n compressedTextureSize += levelData.levelSize;\n }\n\n break;\n\n default:\n assert(false, 'Unknown image data type');\n }\n });\n\n if (dataType === 'compressed') {\n this._trackAllocatedMemory(compressedTextureSize, 'Texture');\n } else if (data && data.byteLength) {\n this._trackAllocatedMemory(data.byteLength, 'Texture');\n } else {\n const channels = DATA_FORMAT_CHANNELS[this.dataFormat] || 4;\n const channelSize = TYPE_SIZES[this.type] || 1;\n\n this._trackAllocatedMemory(this.width * this.height * channels * channelSize, 'Texture');\n }\n\n this.loaded = true;\n return this;\n }\n\n setSubImageData(_ref2) {\n let {\n target = this.target,\n pixels = null,\n data = null,\n x = 0,\n y = 0,\n width = this.width,\n height = this.height,\n level = 0,\n format = this.format,\n type = this.type,\n dataFormat = this.dataFormat,\n compressed = false,\n offset = 0,\n border = this.border,\n parameters = {}\n } = _ref2;\n ({\n type,\n dataFormat,\n compressed,\n width,\n height\n } = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n assert(this.depth === 0, 'texSubImage not supported for 3D textures');\n\n if (!data) {\n data = pixels;\n }\n\n if (data && data.data) {\n const ndarray = data;\n data = ndarray.data;\n width = ndarray.shape[0];\n height = ndarray.shape[1];\n }\n\n if (data instanceof Buffer) {\n data = data.handle;\n }\n\n this.gl.bindTexture(this.target, this.handle);\n withParameters(this.gl, parameters, () => {\n if (compressed) {\n this.gl.compressedTexSubImage2D(target, level, x, y, width, height, format, data);\n } else if (data === null) {\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);\n } else if (ArrayBuffer.isView(data)) {\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);\n } else if (data instanceof WebGLBuffer) {\n const gl2 = assertWebGL2Context(this.gl);\n gl2.bindBuffer(35052, data);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);\n gl2.bindBuffer(35052, null);\n } else if (isWebGL2(this.gl)) {\n const gl2 = assertWebGL2Context(this.gl);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);\n } else {\n this.gl.texSubImage2D(target, level, x, y, dataFormat, type, data);\n }\n });\n this.gl.bindTexture(this.target, null);\n }\n\n copyFramebuffer() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n log.error('Texture.copyFramebuffer({...}) is no logner supported, use copyToTexture(source, target, opts})')();\n return null;\n }\n\n getActiveUnit() {\n return this.gl.getParameter(34016) - 33984;\n }\n\n bind() {\n let textureUnit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.textureUnit;\n const {\n gl\n } = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(33984 + textureUnit);\n }\n\n gl.bindTexture(this.target, this.handle);\n return textureUnit;\n }\n\n unbind() {\n let textureUnit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.textureUnit;\n const {\n gl\n } = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(33984 + textureUnit);\n }\n\n gl.bindTexture(this.target, null);\n return textureUnit;\n }\n\n _getDataType(_ref3) {\n let {\n data,\n compressed = false\n } = _ref3;\n\n if (compressed) {\n return {\n data,\n dataType: 'compressed'\n };\n }\n\n if (data === null) {\n return {\n data,\n dataType: 'null'\n };\n }\n\n if (ArrayBuffer.isView(data)) {\n return {\n data,\n dataType: 'typed-array'\n };\n }\n\n if (data instanceof Buffer) {\n return {\n data: data.handle,\n dataType: 'buffer'\n };\n }\n\n if (data instanceof WebGLBuffer) {\n return {\n data,\n dataType: 'buffer'\n };\n }\n\n return {\n data,\n dataType: 'browser-object'\n };\n }\n\n _deduceParameters(opts) {\n const {\n format,\n data\n } = opts;\n let {\n width,\n height,\n dataFormat,\n type,\n compressed\n } = opts;\n const textureFormat = TEXTURE_FORMATS[format];\n dataFormat = dataFormat || textureFormat && textureFormat.dataFormat;\n type = type || textureFormat && textureFormat.types[0];\n compressed = compressed || textureFormat && textureFormat.compressed;\n ({\n width,\n height\n } = this._deduceImageSize(data, width, height));\n return {\n dataFormat,\n type,\n compressed,\n width,\n height,\n format,\n data\n };\n }\n\n _deduceImageSize(data, width, height) {\n let size;\n\n if (typeof ImageData !== 'undefined' && data instanceof ImageData) {\n size = {\n width: data.width,\n height: data.height\n };\n } else if (typeof HTMLImageElement !== 'undefined' && data instanceof HTMLImageElement) {\n size = {\n width: data.naturalWidth,\n height: data.naturalHeight\n };\n } else if (typeof HTMLCanvasElement !== 'undefined' && data instanceof HTMLCanvasElement) {\n size = {\n width: data.width,\n height: data.height\n };\n } else if (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) {\n size = {\n width: data.width,\n height: data.height\n };\n } else if (typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement) {\n size = {\n width: data.videoWidth,\n height: data.videoHeight\n };\n } else if (!data) {\n size = {\n width: width >= 0 ? width : 1,\n height: height >= 0 ? height : 1\n };\n } else {\n size = {\n width,\n height\n };\n }\n\n assert(size, 'Could not deduced texture size');\n assert(width === undefined || size.width === width, 'Deduced texture width does not match supplied width');\n assert(height === undefined || size.height === height, 'Deduced texture height does not match supplied height');\n return size;\n }\n\n _createHandle() {\n return this.gl.createTexture();\n }\n\n _deleteHandle() {\n this.gl.deleteTexture(this.handle);\n\n this._trackDeallocatedMemory('Texture');\n }\n\n _getParameter(pname) {\n switch (pname) {\n case 4096:\n return this.width;\n\n case 4097:\n return this.height;\n\n default:\n this.gl.bindTexture(this.target, this.handle);\n const value = this.gl.getTexParameter(this.target, pname);\n this.gl.bindTexture(this.target, null);\n return value;\n }\n }\n\n _setParameter(pname, param) {\n this.gl.bindTexture(this.target, this.handle);\n param = this._getNPOTParam(pname, param);\n\n switch (pname) {\n case 33082:\n case 33083:\n this.gl.texParameterf(this.handle, pname, param);\n break;\n\n case 4096:\n case 4097:\n assert(false);\n break;\n\n default:\n this.gl.texParameteri(this.target, pname, param);\n break;\n }\n\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n _isNPOT() {\n if (isWebGL2(this.gl)) {\n return false;\n }\n\n if (!this.width || !this.height) {\n return false;\n }\n\n return !isPowerOfTwo(this.width) || !isPowerOfTwo(this.height);\n }\n\n _updateForNPOT(parameters) {\n if (parameters[this.gl.TEXTURE_MIN_FILTER] === undefined) {\n parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.LINEAR;\n }\n\n if (parameters[this.gl.TEXTURE_WRAP_S] === undefined) {\n parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\n }\n\n if (parameters[this.gl.TEXTURE_WRAP_T] === undefined) {\n parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\n }\n }\n\n _getNPOTParam(pname, param) {\n if (this._isNPOT()) {\n switch (pname) {\n case 10241:\n if (NPOT_MIN_FILTERS.indexOf(param) === -1) {\n param = 9729;\n }\n\n break;\n\n case 10242:\n case 10243:\n if (param !== 33071) {\n param = 33071;\n }\n\n break;\n\n default:\n break;\n }\n }\n\n return param;\n }\n\n}\n//# sourceMappingURL=texture.js.map","export function vec2_transformMat4AsVector(out, a, m) {\n const x = a[0];\n const y = a[1];\n const w = m[3] * x + m[7] * y || 1.0;\n out[0] = (m[0] * x + m[4] * y) / w;\n out[1] = (m[1] * x + m[5] * y) / w;\n return out;\n}\nexport function vec3_transformMat4AsVector(out, a, m) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = m[3] * x + m[7] * y + m[11] * z || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z) / w;\n return out;\n}\nexport function vec3_transformMat2(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n out[2] = a[2];\n return out;\n}\nexport function vec4_transformMat2(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\nexport function vec4_transformMat3(out, a, m) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n out[0] = m[0] * x + m[3] * y + m[6] * z;\n out[1] = m[1] * x + m[4] * y + m[7] * z;\n out[2] = m[2] * x + m[5] * y + m[8] * z;\n out[3] = a[3];\n return out;\n}\n//# sourceMappingURL=gl-matrix-extras.js.map","import * as glMatrix from \"./common.js\";\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(9);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {ReadonlyMat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\n\nexport function fromMat4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Create a new mat3 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} A new mat3\n */\n\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set the components of a mat3 to the given values\n *\n * @param {mat3} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} out\n */\n\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n\n return out;\n}\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20; // Calculate the determinant\n\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n out[0] = a11 * a22 - a12 * a21;\n out[1] = a02 * a21 - a01 * a22;\n out[2] = a01 * a12 - a02 * a11;\n out[3] = a12 * a20 - a10 * a22;\n out[4] = a00 * a22 - a02 * a20;\n out[5] = a02 * a10 - a00 * a12;\n out[6] = a10 * a21 - a11 * a20;\n out[7] = a01 * a20 - a00 * a21;\n out[8] = a00 * a11 - a01 * a10;\n return out;\n}\n/**\n * Calculates the determinant of a mat3\n *\n * @param {ReadonlyMat3} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to translate\n * @param {ReadonlyVec2} v vector to translate by\n * @returns {mat3} out\n */\n\nexport function translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1];\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.translate(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Translation vector\n * @returns {mat3} out\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = v[0];\n out[7] = v[1];\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.rotate(dest, dest, rad);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function fromRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = -s;\n out[4] = c;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.scale(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Scaling vector\n * @returns {mat3} out\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = v[1];\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat2d} a the matrix to copy\n * @returns {mat3} out\n **/\n\nexport function fromMat2d(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n}\n/**\n * Calculates a 3x3 matrix from the given quaternion\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat3} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n return out;\n}\n/**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\n *\n * @returns {mat3} out\n */\n\nexport function normalFromMat4(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n return out;\n}\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\n\nexport function projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat3\n *\n * @param {ReadonlyMat3} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\n}\n/**\n * Adds two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat3} out\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n return out;\n}\n/**\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat3} out the receiving vector\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat3} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7],\n a8 = a[8];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat3.subtract}\n * @function\n */\n\nexport var sub = subtract;","import { fs } from '@loaders.gl/loader-utils';\nexport async function readArrayBuffer(file, start, length) {\n if (typeof file === 'number') {\n return await fs._readToArrayBuffer(file, start, length);\n }\n\n if (!(file instanceof Blob)) {\n file = new Blob([file]);\n }\n\n const slice = file.slice(start, start + length);\n return await readBlob(slice);\n}\nexport async function readBlob(blob) {\n return await new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n\n fileReader.onload = event => {\n var _event$target;\n\n return resolve(event === null || event === void 0 ? void 0 : (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.result);\n };\n\n fileReader.onerror = error => reject(error);\n\n fileReader.readAsArrayBuffer(blob);\n });\n}\n//# sourceMappingURL=read-array-buffer.js.map","import { isBrowser, resolvePath, fs, toArrayBuffer } from '@loaders.gl/loader-utils';\nimport { assert } from '@loaders.gl/loader-utils';\nexport function readFileSync(url, options = {}) {\n url = resolvePath(url);\n\n if (!isBrowser) {\n const buffer = fs.readFileSync(url, options);\n return typeof buffer !== 'string' ? toArrayBuffer(buffer) : buffer;\n }\n\n if (!options.nothrow) {\n assert(false);\n }\n\n return null;\n}\n//# sourceMappingURL=read-file.js.map","import { isBrowser, assert, resolvePath } from '@loaders.gl/loader-utils';\nimport { fs, toBuffer } from '@loaders.gl/loader-utils';\nexport async function writeFile(filePath, arrayBufferOrString, options) {\n filePath = resolvePath(filePath);\n\n if (!isBrowser) {\n await fs.writeFile(filePath, toBuffer(arrayBufferOrString), {\n flag: 'w'\n });\n }\n\n assert(false);\n}\nexport function writeFileSync(filePath, arrayBufferOrString, options) {\n filePath = resolvePath(filePath);\n\n if (!isBrowser) {\n fs.writeFileSync(filePath, toBuffer(arrayBufferOrString), {\n flag: 'w'\n });\n }\n\n assert(false);\n}\n//# sourceMappingURL=write-file.js.map","import { assert } from '@loaders.gl/loader-utils';\nimport { selectLoaderSync } from './select-loader';\nimport { isLoaderObject } from '../loader-utils/normalize-loader';\nimport { normalizeOptions } from '../loader-utils/option-utils';\nimport { getArrayBufferOrStringFromDataSync } from '../loader-utils/get-data';\nimport { getLoaderContext, getLoadersFromContext } from '../loader-utils/loader-context';\nimport { getResourceUrlAndType } from '../utils/resource-utils';\nexport function parseSync(data, loaders, options, context) {\n assert(!context || typeof context === 'object');\n\n if (!Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined;\n options = loaders;\n loaders = undefined;\n }\n\n options = options || {};\n const typedLoaders = loaders;\n const candidateLoaders = getLoadersFromContext(typedLoaders, context);\n const loader = selectLoaderSync(data, candidateLoaders, options);\n\n if (!loader) {\n return null;\n }\n\n options = normalizeOptions(options, loader, candidateLoaders);\n const {\n url\n } = getResourceUrlAndType(data);\n\n const parse = () => {\n throw new Error('parseSync called parse');\n };\n\n context = getLoaderContext({\n url,\n parseSync,\n parse,\n loaders: loaders\n }, options);\n return parseWithLoaderSync(loader, data, options, context);\n}\n\nfunction parseWithLoaderSync(loader, data, options, context) {\n data = getArrayBufferOrStringFromDataSync(data, loader, options);\n\n if (loader.parseTextSync && typeof data === 'string') {\n return loader.parseTextSync(data, options);\n }\n\n if (loader.parseSync && data instanceof ArrayBuffer) {\n return loader.parseSync(data, options, context);\n }\n\n throw new Error(\"\".concat(loader.name, \" loader: 'parseSync' not supported by this loader, use 'parse' instead. \").concat(context.url || ''));\n}\n//# sourceMappingURL=parse-sync.js.map","import { assert, concatenateArrayBuffersAsync } from '@loaders.gl/loader-utils';\nimport { isLoaderObject } from '../loader-utils/normalize-loader';\nimport { normalizeOptions } from '../loader-utils/option-utils';\nimport { getLoaderContext } from '../loader-utils/loader-context';\nimport { getAsyncIterableFromData } from '../loader-utils/get-data';\nimport { getResourceUrlAndType } from '../utils/resource-utils';\nimport { selectLoader } from './select-loader';\nimport { parse } from './parse';\nexport async function parseInBatches(data, loaders, options, context) {\n assert(!context || typeof context === 'object');\n\n if (!Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined;\n options = loaders;\n loaders = undefined;\n }\n\n data = await data;\n options = options || {};\n const {\n url\n } = getResourceUrlAndType(data);\n const loader = await selectLoader(data, loaders, options);\n\n if (!loader) {\n return null;\n }\n\n options = normalizeOptions(options, loader, loaders, url);\n context = getLoaderContext({\n url,\n parseInBatches,\n parse,\n loaders: loaders\n }, options, context);\n return await parseWithLoaderInBatches(loader, data, options, context);\n}\n\nasync function parseWithLoaderInBatches(loader, data, options, context) {\n const outputIterator = await parseToOutputIterator(loader, data, options, context);\n\n if (!options.metadata) {\n return outputIterator;\n }\n\n const metadataBatch = {\n batchType: 'metadata',\n metadata: {\n _loader: loader,\n _context: context\n },\n data: [],\n bytesUsed: 0\n };\n\n async function* makeMetadataBatchIterator(iterator) {\n yield metadataBatch;\n yield* iterator;\n }\n\n return makeMetadataBatchIterator(outputIterator);\n}\n\nasync function parseToOutputIterator(loader, data, options, context) {\n const inputIterator = await getAsyncIterableFromData(data, options);\n const transformedIterator = await applyInputTransforms(inputIterator, (options === null || options === void 0 ? void 0 : options.transforms) || []);\n\n if (loader.parseInBatches) {\n return loader.parseInBatches(transformedIterator, options, context);\n }\n\n async function* parseChunkInBatches() {\n const arrayBuffer = await concatenateArrayBuffersAsync(transformedIterator);\n const parsedData = await parse(arrayBuffer, loader, { ...options,\n mimeType: loader.mimeTypes[0]\n }, context);\n const batch = {\n mimeType: loader.mimeTypes[0],\n shape: Array.isArray(parsedData) ? 'row-table' : 'unknown',\n batchType: 'data',\n data: parsedData,\n length: Array.isArray(parsedData) ? parsedData.length : 1\n };\n yield batch;\n }\n\n return parseChunkInBatches();\n}\n\nasync function applyInputTransforms(inputIterator, transforms = []) {\n let iteratorChain = inputIterator;\n\n for await (const transformBatches of transforms) {\n iteratorChain = transformBatches(iteratorChain);\n }\n\n return iteratorChain;\n}\n//# sourceMappingURL=parse-in-batches.js.map","import { isLoaderObject } from '../loader-utils/normalize-loader';\nimport { getFetchFunction } from '../loader-utils/option-utils';\nimport { parseInBatches } from './parse-in-batches';\nexport function loadInBatches(files, loaders, options, context) {\n if (!Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined;\n options = loaders;\n loaders = null;\n }\n\n const fetch = getFetchFunction(options || {});\n\n if (!Array.isArray(files)) {\n return loadOneFileInBatches(files, loaders, options, fetch);\n }\n\n const promises = files.map(file => loadOneFileInBatches(file, loaders, options, fetch));\n return promises;\n}\n\nasync function loadOneFileInBatches(file, loaders, options, fetch) {\n if (typeof file === 'string') {\n const url = file;\n const response = await fetch(url);\n return await parseInBatches(response, loaders, options);\n }\n\n return await parseInBatches(file, loaders, options);\n}\n//# sourceMappingURL=load-in-batches.js.map","import WorkerFarm from '../worker-farm/worker-farm';\nimport { getWorkerURL, getWorkerName } from './get-worker-url';\nimport { getTransferListForWriter } from '../worker-utils/get-transfer-list';\nexport function canProcessOnWorker(worker, options) {\n if (!WorkerFarm.isSupported()) {\n return false;\n }\n\n return worker.worker && (options === null || options === void 0 ? void 0 : options.worker);\n}\nexport async function processOnWorker(worker, data, options = {}, context = {}) {\n const name = getWorkerName(worker);\n const workerFarm = WorkerFarm.getWorkerFarm(options);\n const {\n source\n } = options;\n const workerPoolProps = {\n name,\n source\n };\n\n if (!source) {\n workerPoolProps.url = getWorkerURL(worker, options);\n }\n\n const workerPool = workerFarm.getWorkerPool(workerPoolProps);\n const jobName = options.jobName || worker.name;\n const job = await workerPool.startJob(jobName, onMessage.bind(null, context));\n const transferableOptions = getTransferListForWriter(options);\n job.postMessage('process', {\n input: data,\n options: transferableOptions\n });\n const result = await job.result;\n return result.result;\n}\n\nasync function onMessage(context, job, type, payload) {\n switch (type) {\n case 'done':\n job.done(payload);\n break;\n\n case 'error':\n job.error(new Error(payload.error));\n break;\n\n case 'process':\n const {\n id,\n input,\n options\n } = payload;\n\n try {\n if (!context.process) {\n job.postMessage('error', {\n id,\n error: 'Worker not set up to process on main thread'\n });\n return;\n }\n\n const result = await context.process(input, options);\n job.postMessage('done', {\n id,\n result\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n job.postMessage('error', {\n id,\n error: message\n });\n }\n\n break;\n\n default:\n console.warn(\"process-on-worker: unknown message \".concat(type));\n }\n}\n//# sourceMappingURL=process-on-worker.js.map","import { canEncodeWithWorker } from '@loaders.gl/loader-utils';\nimport { processOnWorker } from '@loaders.gl/worker-utils';\nimport { concatenateArrayBuffers, resolvePath } from '@loaders.gl/loader-utils';\nimport { isBrowser } from '@loaders.gl/loader-utils';\nimport { writeFile } from '../fetch/write-file';\nimport { fetchFile } from '../fetch/fetch-file';\nimport { getLoaderOptions } from './loader-options';\nexport async function encode(data, writer, options) {\n const globalOptions = getLoaderOptions();\n options = { ...globalOptions,\n ...options\n };\n\n if (canEncodeWithWorker(writer, options)) {\n return await processOnWorker(writer, data, options);\n }\n\n if (writer.encode) {\n return await writer.encode(data, options);\n }\n\n if (writer.encodeSync) {\n return writer.encodeSync(data, options);\n }\n\n if (writer.encodeText) {\n return new TextEncoder().encode(await writer.encodeText(data, options));\n }\n\n if (writer.encodeInBatches) {\n const batches = encodeInBatches(data, writer, options);\n const chunks = [];\n\n for await (const batch of batches) {\n chunks.push(batch);\n }\n\n return concatenateArrayBuffers(...chunks);\n }\n\n if (!isBrowser && writer.encodeURLtoURL) {\n const tmpInputFilename = getTemporaryFilename('input');\n await writeFile(tmpInputFilename, data);\n const tmpOutputFilename = getTemporaryFilename('output');\n const outputFilename = await encodeURLtoURL(tmpInputFilename, tmpOutputFilename, writer, options);\n const response = await fetchFile(outputFilename);\n return response.arrayBuffer();\n }\n\n throw new Error('Writer could not encode data');\n}\nexport function encodeSync(data, writer, options) {\n if (writer.encodeSync) {\n return writer.encodeSync(data, options);\n }\n\n throw new Error('Writer could not synchronously encode data');\n}\nexport async function encodeText(data, writer, options) {\n if (writer.text && writer.encodeText) {\n return await writer.encodeText(data, options);\n }\n\n if (writer.text && (writer.encode || writer.encodeInBatches)) {\n const arrayBuffer = await encode(data, writer, options);\n return new TextDecoder().decode(arrayBuffer);\n }\n\n throw new Error('Writer could not encode data as text');\n}\nexport function encodeInBatches(data, writer, options) {\n if (writer.encodeInBatches) {\n const dataIterator = getIterator(data);\n return writer.encodeInBatches(dataIterator, options);\n }\n\n throw new Error('Writer could not encode data in batches');\n}\nexport async function encodeURLtoURL(inputUrl, outputUrl, writer, options) {\n inputUrl = resolvePath(inputUrl);\n outputUrl = resolvePath(outputUrl);\n\n if (isBrowser || !writer.encodeURLtoURL) {\n throw new Error();\n }\n\n const outputFilename = await writer.encodeURLtoURL(inputUrl, outputUrl, options);\n return outputFilename;\n}\n\nfunction getIterator(data) {\n const dataIterator = [{\n table: data,\n start: 0,\n end: data.length\n }];\n return dataIterator;\n}\n\nfunction getTemporaryFilename(filename) {\n return \"/tmp/\".concat(filename);\n}\n//# sourceMappingURL=encode.js.map","import { encode, encodeSync } from './encode';\nimport { writeFile, writeFileSync } from '../fetch/write-file';\nexport async function save(data, url, writer, options) {\n const encodedData = await encode(data, writer, options);\n return await writeFile(url, encodedData);\n}\nexport function saveSync(data, url, writer, options) {\n const encodedData = encodeSync(data, writer, options);\n return writeFileSync(url, encodedData);\n}\n//# sourceMappingURL=save.js.map","export function makeStream(source, options) {\n const iterator = source[Symbol.asyncIterator] ? source[Symbol.asyncIterator]() : source[Symbol.iterator]();\n return new ReadableStream({\n type: 'bytes',\n\n async pull(controller) {\n try {\n const {\n done,\n value\n } = await iterator.next();\n\n if (done) {\n controller.close();\n } else {\n controller.enqueue(new Uint8Array(value));\n }\n } catch (error) {\n controller.error(error);\n }\n },\n\n async cancel() {\n var _iterator$return;\n\n await (iterator === null || iterator === void 0 ? void 0 : (_iterator$return = iterator.return) === null || _iterator$return === void 0 ? void 0 : _iterator$return.call(iterator));\n }\n\n }, {\n highWaterMark: 2 ** 24,\n ...options\n });\n}\n//# sourceMappingURL=make-dom-stream.js.map","const VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : 'latest';\nexport const NullWorkerLoader = {\n name: 'Null loader',\n id: 'null',\n module: 'core',\n version: VERSION,\n worker: true,\n mimeTypes: ['application/x.empty'],\n extensions: ['null'],\n tests: [() => false],\n options: {\n null: {}\n }\n};\n\nfunction parseSync(arrayBuffer, options, context) {\n if (!options.null.echoParameters) return null;\n context = context && JSON.parse(JSON.stringify(context));\n return {\n arrayBuffer,\n options,\n context\n };\n}\n\nexport const NullLoader = {\n name: 'Null loader',\n id: 'null',\n module: 'core',\n version: VERSION,\n mimeTypes: ['application/x.empty'],\n extensions: ['null'],\n parse: async (arrayBuffer, options, context) => parseSync(arrayBuffer, options, context),\n parseSync,\n parseInBatches: async function* generator(asyncIterator, options, context) {\n for await (const batch of asyncIterator) {\n yield parseSync(batch, options, context);\n }\n },\n tests: [() => false],\n options: {\n null: {\n echoParameters: false\n }\n }\n};\n//# sourceMappingURL=null-loader.js.map","export default async function fetchProgress(response, onProgress, onDone = () => {}, onError = () => {}) {\n response = await response;\n\n if (!response.ok) {\n return response;\n }\n\n const body = response.body;\n\n if (!body) {\n return response;\n }\n\n const contentLength = response.headers.get('content-length') || 0;\n const totalBytes = contentLength && parseInt(contentLength);\n\n if (!(contentLength > 0)) {\n return response;\n }\n\n if (typeof ReadableStream === 'undefined' || !body.getReader) {\n return response;\n }\n\n const progressStream = new ReadableStream({\n async start(controller) {\n const reader = body.getReader();\n await read(controller, reader, 0, totalBytes, onProgress, onDone, onError);\n }\n\n });\n return new Response(progressStream);\n}\n\nasync function read(controller, reader, loadedBytes, totalBytes, onProgress, onDone, onError) {\n try {\n const {\n done,\n value\n } = await reader.read();\n\n if (done) {\n onDone();\n controller.close();\n return;\n }\n\n loadedBytes += value.byteLength;\n const percent = Math.round(loadedBytes / totalBytes * 100);\n onProgress(percent, {\n loadedBytes,\n totalBytes\n });\n controller.enqueue(value);\n await read(controller, reader, loadedBytes, totalBytes, onProgress, onDone, onError);\n } catch (error) {\n controller.error(error);\n onError(error);\n }\n}\n//# sourceMappingURL=fetch-progress.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class BrowserFileSystem {\n constructor(files, options) {\n _defineProperty(this, \"_fetch\", void 0);\n\n _defineProperty(this, \"files\", {});\n\n _defineProperty(this, \"lowerCaseFiles\", {});\n\n _defineProperty(this, \"usedFiles\", {});\n\n this._fetch = (options === null || options === void 0 ? void 0 : options.fetch) || fetch;\n\n for (let i = 0; i < files.length; ++i) {\n const file = files[i];\n this.files[file.name] = file;\n this.lowerCaseFiles[file.name.toLowerCase()] = file;\n this.usedFiles[file.name] = false;\n }\n\n this.fetch = this.fetch.bind(this);\n }\n\n async fetch(path, options) {\n if (path.includes('://')) {\n return this._fetch(path, options);\n }\n\n const file = this.files[path];\n\n if (!file) {\n return new Response(path, {\n status: 400,\n statusText: 'NOT FOUND'\n });\n }\n\n const headers = new Headers(options === null || options === void 0 ? void 0 : options.headers);\n const range = headers.get('Range');\n const bytes = range && /bytes=($1)-($2)/.exec(range);\n\n if (bytes) {\n const start = parseInt(bytes[1]);\n const end = parseInt(bytes[2]);\n const data = await file.slice(start, end).arrayBuffer();\n const response = new Response(data);\n Object.defineProperty(response, 'url', {\n value: path\n });\n return response;\n }\n\n const response = new Response(file);\n Object.defineProperty(response, 'url', {\n value: path\n });\n return response;\n }\n\n async readdir(dirname) {\n const files = [];\n\n for (const path in this.files) {\n files.push(path);\n }\n\n return files;\n }\n\n async stat(path, options) {\n const file = this.files[path];\n\n if (!file) {\n throw new Error(path);\n }\n\n return {\n size: file.size\n };\n }\n\n async unlink(path) {\n delete this.files[path];\n delete this.lowerCaseFiles[path];\n this.usedFiles[path] = true;\n }\n\n async open(pathname, flags, mode) {\n return this.files[pathname];\n }\n\n async read(fd, buffer, offset = 0, length = buffer.byteLength, position = null) {\n const file = fd;\n const startPosition = 0;\n const arrayBuffer = await file.slice(startPosition, startPosition + length).arrayBuffer();\n return {\n bytesRead: length,\n buffer: arrayBuffer\n };\n }\n\n async close(fd) {}\n\n _getFile(path, used) {\n const file = this.files[path] || this.lowerCaseFiles[path];\n\n if (file && used) {\n this.usedFiles[path] = true;\n }\n\n return file;\n }\n\n}\n//# sourceMappingURL=browser-filesystem.js.map","export { fetchFile } from './lib/fetch/fetch-file';\nexport { readArrayBuffer } from './lib/fetch/read-array-buffer';\nexport { readFileSync } from './lib/fetch/read-file';\nexport { writeFile, writeFileSync } from './lib/fetch/write-file';\nexport { setLoaderOptions, getLoaderOptions } from './lib/api/loader-options';\nexport { registerLoaders } from './lib/api/register-loaders';\nexport { selectLoader, selectLoaderSync } from './lib/api/select-loader';\nexport { parse } from './lib/api/parse';\nexport { parseSync } from './lib/api/parse-sync';\nexport { parseInBatches } from './lib/api/parse-in-batches';\nexport { load } from './lib/api/load';\nexport { loadInBatches } from './lib/api/load-in-batches';\nexport { encode, encodeSync, encodeInBatches, encodeText, encodeURLtoURL } from './lib/api/encode';\nexport { save, saveSync } from './lib/api/save';\nexport { setPathPrefix, getPathPrefix, resolvePath } from '@loaders.gl/loader-utils';\nexport { RequestScheduler } from '@loaders.gl/loader-utils';\nexport { makeIterator } from './iterators/make-iterator/make-iterator';\nexport { makeStream } from './iterators/make-stream/make-node-stream';\nexport { NullWorkerLoader, NullLoader } from './null-loader';\nexport { JSONLoader } from '@loaders.gl/loader-utils';\nexport { default as _fetchProgress } from './lib/progress/fetch-progress';\nexport { default as _BrowserFileSystem } from './lib/filesystems/browser-filesystem';\nexport { _unregisterLoaders } from './lib/api/register-loaders';\nexport { isBrowser, isWorker, self, window, global, document } from '@loaders.gl/loader-utils';\nexport { assert } from '@loaders.gl/loader-utils';\nexport { forEach, concatenateArrayBuffersAsync } from '@loaders.gl/loader-utils';\nexport { makeTextDecoderIterator, makeTextEncoderIterator, makeLineIterator, makeNumberedLineIterator } from '@loaders.gl/loader-utils';\nexport { isPureObject, isPromise, isIterable, isAsyncIterable, isIterator, isResponse, isReadableStream, isWritableStream } from './javascript-utils/is-type';\n//# sourceMappingURL=index.js.map","// Copyright (c) 2015 Uber Technologies, Inc.\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* eslint-disable max-statements, complexity */\nimport TransitionManager, {TransitionProps} from './transition-manager';\nimport LinearInterpolator from '../transitions/linear-interpolator';\nimport {IViewState} from './view-state';\nimport {ConstructorOf} from '../types/types';\n\nimport type Viewport from '../viewports/viewport';\n\nimport type {EventManager, MjolnirEvent, MjolnirGestureEvent, MjolnirWheelEvent, MjolnirKeyEvent} from 'mjolnir.js';\nimport type {Timeline} from '@luma.gl/core';\n\nconst NO_TRANSITION_PROPS = {\n transitionDuration: 0\n} as const;\n\nconst DEFAULT_INERTIA = 300;\nconst INERTIA_EASING = t => 1 - (1 - t) * (1 - t);\n\nconst EVENT_TYPES = {\n WHEEL: ['wheel'],\n PAN: ['panstart', 'panmove', 'panend'],\n PINCH: ['pinchstart', 'pinchmove', 'pinchend'],\n TRIPLE_PAN: ['tripanstart', 'tripanmove', 'tripanend'],\n DOUBLE_TAP: ['doubletap'],\n KEYBOARD: ['keydown']\n} as const;\n\n/** Configuration of how user input is handled */\nexport type ControllerOptions = {\n /** Enable zooming with mouse wheel. Default `true`. */\n scrollZoom?: boolean | {\n /** Scaler that translates wheel delta to the change of viewport scale. Default `0.01`. */\n speed?: number;\n /** Smoothly transition to the new zoom. If enabled, will provide a slightly lagged but smoother experience. Default `false`. */\n smooth?: boolean\n };\n /** Enable panning with pointer drag. Default `true` */\n dragPan?: boolean;\n /** Enable rotating with pointer drag. Default `true` */\n dragRotate?: boolean;\n /** Enable zooming with double click. Default `true` */\n doubleClickZoom?: boolean;\n /** Enable zooming with multi-touch. Default `true` */\n touchZoom?: boolean;\n /** Enable rotating with multi-touch. Use two-finger rotating gesture for horizontal and three-finger swiping gesture for vertical rotation. Default `false` */\n touchRotate?: boolean;\n /** Enable interaction with keyboard. Default `true`. */\n keyboard?:\n | boolean\n | {\n /** Speed of zoom using +/- keys. Default `2` */\n zoomSpeed?: number;\n /** Speed of movement using arrow keys, in pixels. */\n moveSpeed?: number;\n /** Speed of rotation using shift + left/right arrow keys, in degrees. Default 15. */\n rotateSpeedX?: number;\n /** Speed of rotation using shift + up/down arrow keys, in degrees. Default 10. */\n rotateSpeedY?: number;\n };\n /** Drag behavior without pressing function keys, one of `pan` and `rotate`. */\n dragMode?: 'pan' | 'rotate';\n /** Enable inertia after panning/pinching. If a number is provided, indicates the duration of time over which the velocity reduces to zero, in milliseconds. Default `false`. */\n inertia?: boolean | number;\n};\n\nexport type ControllerProps = {\n /** Identifier of the controller */\n id: string;\n /** Viewport x position */\n x: number;\n /** Viewport y position */\n y: number;\n /** Viewport width */\n width: number;\n /** Viewport height */\n height: number;\n} & ControllerOptions & TransitionProps;\n\n/** The state of a controller */\nexport type InteractionState = {\n /** If the view state is in transition */\n inTransition?: boolean;\n /** If the user is dragging */\n isDragging?: boolean;\n /** If the view is being panned, either from user input or transition */\n isPanning?: boolean;\n /** If the view is being rotated, either from user input or transition */\n isRotating?: boolean;\n /** If the view is being zoomed, either from user input or transition */\n isZooming?: boolean;\n}\n\n/** Parameters passed to the onViewStateChange callback */\nexport type ViewStateChangeParameters = {\n /** The next view state, either from user input or transition */\n viewState: Record;\n /** Object describing the nature of the view state change */\n interactionState: InteractionState;\n /** The current view state */\n oldViewState?: Record;\n}\n\nconst pinchEventWorkaround: any = {};\n\nexport default abstract class Controller> {\n abstract get ControllerState(): ConstructorOf;\n abstract get transition(): TransitionProps;\n\n // @ts-expect-error (2564) - not assigned in the constructor\n protected props: ControllerProps;\n protected state: Record = {};\n\n protected transitionManager: TransitionManager;\n protected eventManager: EventManager;\n protected onViewStateChange: (params: ViewStateChangeParameters) => void;\n protected onStateChange: (state: InteractionState) => void;\n protected makeViewport: (opts: Record) => Viewport\n\n private _controllerState?: ControllerState;\n private _events: Record = {};\n private _interactionState: InteractionState = {\n isDragging: false\n };\n private _customEvents: string[] = [];\n private _eventStartBlocked: any = null;\n private _panMove: boolean = false;\n\n protected invertPan: boolean = false;\n protected dragMode: 'pan' | 'rotate' = 'rotate';\n protected inertia: number = 0;\n protected scrollZoom: boolean | {speed?: number; smooth?: boolean} = true;\n protected dragPan: boolean = true;\n protected dragRotate: boolean = true;\n protected doubleClickZoom: boolean = true;\n protected touchZoom: boolean = true;\n protected touchRotate: boolean = false;\n protected keyboard:\n | boolean\n | {\n zoomSpeed?: number; // speed of zoom using +/- keys. Default 2.\n moveSpeed?: number; // speed of movement using arrow keys, in pixels.\n rotateSpeedX?: number; // speed of rotation using shift + left/right arrow keys, in degrees. Default 15.\n rotateSpeedY?: number; // speed of rotation using shift + up/down arrow keys, in degrees. Default 10.\n } = true;\n\n constructor(opts: {\n timeline: Timeline,\n eventManager: EventManager;\n makeViewport: (opts: Record) => Viewport;\n onViewStateChange: (params: ViewStateChangeParameters) => void;\n onStateChange: (state: InteractionState) => void;\n }) {\n this.transitionManager = new TransitionManager({\n ...opts,\n getControllerState: props => new this.ControllerState(props),\n onViewStateChange: this._onTransition.bind(this),\n onStateChange: this._setInteractionState.bind(this)\n });\n\n this.handleEvent = this.handleEvent.bind(this);\n\n this.eventManager = opts.eventManager;\n this.onViewStateChange = opts.onViewStateChange || (() => {});\n this.onStateChange = opts.onStateChange || (() => {});\n this.makeViewport = opts.makeViewport;\n }\n\n set events(customEvents) {\n this.toggleEvents(this._customEvents, false);\n this.toggleEvents(customEvents, true);\n this._customEvents = customEvents;\n // Make sure default events are not overwritten\n if (this.props) {\n this.setProps(this.props);\n }\n }\n\n finalize() {\n for (const eventName in this._events) {\n if (this._events[eventName]) {\n // @ts-ignore (2345) event type string cannot be assifned to enum\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager?.off(eventName, this.handleEvent);\n }\n }\n this.transitionManager.finalize();\n }\n\n /**\n * Callback for events\n */\n handleEvent(event: MjolnirEvent) {\n // Force recalculate controller state\n this._controllerState = undefined;\n const eventStartBlocked = this._eventStartBlocked;\n\n switch (event.type) {\n case 'panstart':\n return eventStartBlocked ? false : this._onPanStart(event);\n case 'panmove':\n return this._onPan(event);\n case 'panend':\n return this._onPanEnd(event);\n case 'pinchstart':\n return eventStartBlocked ? false : this._onPinchStart(event);\n case 'pinchmove':\n return this._onPinch(event);\n case 'pinchend':\n return this._onPinchEnd(event);\n case 'tripanstart':\n return eventStartBlocked ? false : this._onTriplePanStart(event);\n case 'tripanmove':\n return this._onTriplePan(event);\n case 'tripanend':\n return this._onTriplePanEnd(event);\n case 'doubletap':\n return this._onDoubleTap(event);\n case 'wheel':\n return this._onWheel(event);\n case 'keydown':\n return this._onKeyDown(event);\n default:\n return false;\n }\n }\n\n /* Event utils */\n // Event object: http://hammerjs.github.io/api/#event-object\n get controllerState(): ControllerState {\n this._controllerState = this._controllerState || new this.ControllerState({\n makeViewport: this.makeViewport,\n ...this.props,\n ...this.state\n });\n return this._controllerState ;\n }\n\n getCenter(event: MjolnirGestureEvent | MjolnirWheelEvent) : [number, number] {\n const {x, y} = this.props;\n const {offsetCenter} = event;\n return [offsetCenter.x - x, offsetCenter.y - y];\n }\n\n isPointInBounds(pos: [number, number], event: MjolnirEvent): boolean {\n const {width, height} = this.props;\n if (event && event.handled) {\n return false;\n }\n\n const inside = pos[0] >= 0 && pos[0] <= width && pos[1] >= 0 && pos[1] <= height;\n if (inside && event) {\n event.stopPropagation();\n }\n return inside;\n }\n\n isFunctionKeyPressed(event: MjolnirEvent): boolean {\n const {srcEvent} = event;\n return Boolean(srcEvent.metaKey || srcEvent.altKey || srcEvent.ctrlKey || srcEvent.shiftKey);\n }\n\n isDragging(): boolean {\n return this._interactionState.isDragging || false;\n }\n\n // When a multi-touch event ends, e.g. pinch, not all pointers are lifted at the same time.\n // This triggers a brief `pan` event.\n // Calling this method will temporarily disable *start events to avoid conflicting transitions.\n blockEvents(timeout: number): void {\n /* global setTimeout */\n const timer = setTimeout(() => {\n if (this._eventStartBlocked === timer) {\n this._eventStartBlocked = null;\n }\n }, timeout);\n this._eventStartBlocked = timer;\n }\n\n /**\n * Extract interactivity options\n */\n setProps(props: ControllerProps) {\n if (props.dragMode) {\n this.dragMode = props.dragMode;\n }\n this.props = props;\n\n if (!('transitionInterpolator' in props)) {\n // Add default transition interpolator\n props.transitionInterpolator = this._getTransitionProps().transitionInterpolator;\n }\n\n this.transitionManager.processViewStateChange(props);\n\n const {inertia} = props;\n this.inertia = Number.isFinite(inertia) ? (inertia as number) : (inertia === true ? DEFAULT_INERTIA : 0);\n\n // TODO - make sure these are not reset on every setProps\n const {\n scrollZoom = true,\n dragPan = true,\n dragRotate = true,\n doubleClickZoom = true,\n touchZoom = true,\n touchRotate = false,\n keyboard = true\n } = props;\n\n // Register/unregister events\n const isInteractive = Boolean(this.onViewStateChange);\n this.toggleEvents(EVENT_TYPES.WHEEL, isInteractive && scrollZoom);\n this.toggleEvents(EVENT_TYPES.PAN, isInteractive && (dragPan || dragRotate));\n this.toggleEvents(EVENT_TYPES.PINCH, isInteractive && (touchZoom || touchRotate));\n this.toggleEvents(EVENT_TYPES.TRIPLE_PAN, isInteractive && touchRotate);\n this.toggleEvents(EVENT_TYPES.DOUBLE_TAP, isInteractive && doubleClickZoom);\n this.toggleEvents(EVENT_TYPES.KEYBOARD, isInteractive && keyboard);\n\n // Interaction toggles\n this.scrollZoom = scrollZoom;\n this.dragPan = dragPan;\n this.dragRotate = dragRotate;\n this.doubleClickZoom = doubleClickZoom;\n this.touchZoom = touchZoom;\n this.touchRotate = touchRotate;\n this.keyboard = keyboard;\n }\n\n updateTransition() {\n this.transitionManager.updateTransition();\n }\n\n toggleEvents(eventNames, enabled) {\n if (this.eventManager) {\n eventNames.forEach(eventName => {\n if (this._events[eventName] !== enabled) {\n this._events[eventName] = enabled;\n if (enabled) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager.on(eventName, this.handleEvent);\n } else {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager.off(eventName, this.handleEvent);\n }\n }\n });\n }\n }\n\n // Private Methods\n\n /* Callback util */\n // formats map state and invokes callback function\n protected updateViewport(newControllerState: ControllerState, extraProps: Record | null = null, interactionState: InteractionState = {}) {\n const viewState = {...newControllerState.getViewportProps(), ...extraProps};\n\n // TODO - to restore diffing, we need to include interactionState\n const changed = this.controllerState !== newControllerState;\n // const oldViewState = this.controllerState.getViewportProps();\n // const changed = Object.keys(viewState).some(key => oldViewState[key] !== viewState[key]);\n\n this.state = newControllerState.getState();\n this._setInteractionState(interactionState);\n\n if (changed) {\n const oldViewState = this.controllerState && this.controllerState.getViewportProps();\n if (this.onViewStateChange) {\n this.onViewStateChange({viewState, interactionState: this._interactionState, oldViewState});\n }\n }\n }\n\n private _onTransition(params: {viewState: Record, oldViewState: Record}) {\n this.onViewStateChange({...params, interactionState: this._interactionState});\n }\n\n private _setInteractionState(newStates: InteractionState) {\n Object.assign(this._interactionState, newStates);\n this.onStateChange(this._interactionState);\n }\n\n /* Event handlers */\n // Default handler for the `panstart` event.\n protected _onPanStart(event: MjolnirGestureEvent): boolean {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n let alternateMode = this.isFunctionKeyPressed(event) || event.rightButton || false;\n if (this.invertPan || this.dragMode === 'pan') {\n // invertPan is replaced by props.dragMode, keeping for backward compatibility\n alternateMode = !alternateMode;\n }\n const newControllerState = this.controllerState[alternateMode ? 'panStart' : 'rotateStart']({\n pos\n });\n this._panMove = alternateMode;\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {isDragging: true});\n return true;\n }\n\n // Default handler for the `panmove` and `panend` event.\n protected _onPan(event: MjolnirGestureEvent): boolean {\n if (!this.isDragging()) {\n return false;\n }\n return this._panMove ? this._onPanMove(event) : this._onPanRotate(event);\n }\n\n protected _onPanEnd(event: MjolnirGestureEvent): boolean {\n if (!this.isDragging()) {\n return false;\n }\n return this._panMove ? this._onPanMoveEnd(event) : this._onPanRotateEnd(event);\n }\n\n // Default handler for panning to move.\n // Called by `_onPan` when panning without function key pressed.\n protected _onPanMove(event: MjolnirGestureEvent): boolean {\n if (!this.dragPan) {\n return false;\n }\n const pos = this.getCenter(event);\n const newControllerState = this.controllerState.pan({pos});\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isPanning: true\n });\n return true;\n }\n\n protected _onPanMoveEnd(event: MjolnirGestureEvent): boolean {\n const {inertia} = this;\n if (this.dragPan && inertia && event.velocity) {\n const pos = this.getCenter(event);\n const endPos: [number, number] = [\n pos[0] + (event.velocityX * inertia) / 2,\n pos[1] + (event.velocityY * inertia) / 2\n ];\n const newControllerState = this.controllerState.pan({pos: endPos}).panEnd();\n this.updateViewport(\n newControllerState,\n {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n },\n {\n isDragging: false,\n isPanning: true\n }\n );\n } else {\n const newControllerState = this.controllerState.panEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isPanning: false\n });\n }\n return true;\n }\n\n // Default handler for panning to rotate.\n // Called by `_onPan` when panning with function key pressed.\n protected _onPanRotate(event: MjolnirGestureEvent): boolean {\n if (!this.dragRotate) {\n return false;\n }\n\n const pos = this.getCenter(event);\n const newControllerState = this.controllerState.rotate({pos});\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isRotating: true\n });\n return true;\n }\n\n protected _onPanRotateEnd(event): boolean {\n const {inertia} = this;\n if (this.dragRotate && inertia && event.velocity) {\n const pos = this.getCenter(event);\n const endPos: [number, number] = [\n pos[0] + (event.velocityX * inertia) / 2,\n pos[1] + (event.velocityY * inertia) / 2\n ];\n const newControllerState = this.controllerState.rotate({pos: endPos}).rotateEnd();\n this.updateViewport(\n newControllerState,\n {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n },\n {\n isDragging: false,\n isRotating: true\n }\n );\n } else {\n const newControllerState = this.controllerState.rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isRotating: false\n });\n }\n return true;\n }\n\n // Default handler for the `wheel` event.\n protected _onWheel(event: MjolnirWheelEvent): boolean {\n if (!this.scrollZoom) {\n return false;\n }\n event.srcEvent.preventDefault();\n\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n\n const {speed = 0.01, smooth = false} = this.scrollZoom === true ? {} : this.scrollZoom;\n const {delta} = event;\n\n // Map wheel delta to relative scale\n let scale = 2 / (1 + Math.exp(-Math.abs(delta * speed)));\n if (delta < 0 && scale !== 0) {\n scale = 1 / scale;\n }\n\n const newControllerState = this.controllerState.zoom({pos, scale});\n this.updateViewport(\n newControllerState,\n {...this._getTransitionProps({around: pos}), transitionDuration: smooth ? 250 : 1},\n {\n isZooming: true,\n isPanning: true\n }\n );\n return true;\n }\n\n protected _onTriplePanStart(event: MjolnirGestureEvent): boolean {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n const newControllerState = this.controllerState.rotateStart({pos});\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {isDragging: true});\n return true;\n }\n\n protected _onTriplePan(event: MjolnirGestureEvent): boolean {\n if (!this.touchRotate) {\n return false;\n }\n if (!this.isDragging()) {\n return false;\n }\n\n const pos = this.getCenter(event);\n pos[0] -= event.deltaX;\n\n const newControllerState = this.controllerState.rotate({pos});\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isRotating: true\n });\n return true;\n }\n\n protected _onTriplePanEnd(event: MjolnirGestureEvent): boolean {\n if (!this.isDragging()) {\n return false;\n }\n const {inertia} = this;\n if (this.touchRotate && inertia && event.velocityY) {\n const pos = this.getCenter(event);\n const endPos: [number, number] = [pos[0], (pos[1] += (event.velocityY * inertia) / 2)];\n const newControllerState = this.controllerState.rotate({pos: endPos});\n this.updateViewport(\n newControllerState,\n {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n },\n {\n isDragging: false,\n isRotating: true\n }\n );\n this.blockEvents(inertia);\n } else {\n const newControllerState = this.controllerState.rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isRotating: false\n });\n }\n return true;\n }\n\n // Default handler for the `pinchstart` event.\n protected _onPinchStart(event: MjolnirGestureEvent): boolean {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n\n const newControllerState = this.controllerState.zoomStart({pos}).rotateStart({pos});\n // hack - hammer's `rotation` field doesn't seem to produce the correct angle\n pinchEventWorkaround._startPinchRotation = event.rotation;\n pinchEventWorkaround._lastPinchEvent = event;\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {isDragging: true});\n return true;\n }\n\n // Default handler for the `pinchmove` and `pinchend` events.\n protected _onPinch(event: MjolnirGestureEvent): boolean {\n if (!this.touchZoom && !this.touchRotate) {\n return false;\n }\n if (!this.isDragging()) {\n return false;\n }\n\n let newControllerState = this.controllerState;\n if (this.touchZoom) {\n const {scale} = event;\n const pos = this.getCenter(event);\n newControllerState = newControllerState.zoom({pos, scale});\n }\n if (this.touchRotate) {\n const {rotation} = event;\n newControllerState = newControllerState.rotate({\n deltaAngleX: pinchEventWorkaround._startPinchRotation - rotation\n });\n }\n\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isPanning: this.touchZoom,\n isZooming: this.touchZoom,\n isRotating: this.touchRotate\n });\n pinchEventWorkaround._lastPinchEvent = event;\n return true;\n }\n\n protected _onPinchEnd(event: MjolnirGestureEvent): boolean {\n if (!this.isDragging()) {\n return false;\n }\n const {inertia} = this;\n const {_lastPinchEvent} = pinchEventWorkaround;\n if (this.touchZoom && inertia && _lastPinchEvent && event.scale !== _lastPinchEvent.scale) {\n const pos = this.getCenter(event);\n let newControllerState = this.controllerState.rotateEnd();\n const z = Math.log2(event.scale);\n const velocityZ =\n (z - Math.log2(_lastPinchEvent.scale)) / (event.deltaTime - _lastPinchEvent.deltaTime);\n const endScale = Math.pow(2, z + (velocityZ * inertia) / 2);\n newControllerState = newControllerState.zoom({pos, scale: endScale}).zoomEnd();\n\n this.updateViewport(\n newControllerState,\n {\n ...this._getTransitionProps({around: pos}),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n },\n {\n isDragging: false,\n isPanning: this.touchZoom,\n isZooming: this.touchZoom,\n isRotating: false\n }\n );\n this.blockEvents(inertia);\n } else {\n const newControllerState = this.controllerState.zoomEnd().rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isPanning: false,\n isZooming: false,\n isRotating: false\n });\n }\n pinchEventWorkaround._startPinchRotation = null;\n pinchEventWorkaround._lastPinchEvent = null;\n return true;\n }\n\n // Default handler for the `doubletap` event.\n protected _onDoubleTap(event: MjolnirGestureEvent): boolean {\n if (!this.doubleClickZoom) {\n return false;\n }\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n\n const isZoomOut = this.isFunctionKeyPressed(event);\n\n const newControllerState = this.controllerState.zoom({pos, scale: isZoomOut ? 0.5 : 2});\n this.updateViewport(newControllerState, this._getTransitionProps({around: pos}), {\n isZooming: true,\n isPanning: true\n });\n this.blockEvents(100);\n return true;\n }\n\n // Default handler for the `keydown` event\n protected _onKeyDown(event: MjolnirKeyEvent): boolean {\n if (!this.keyboard) {\n return false;\n }\n const funcKey = this.isFunctionKeyPressed(event);\n // @ts-ignore\n const {zoomSpeed, moveSpeed, rotateSpeedX, rotateSpeedY} = this.keyboard === true ? {} : this.keyboard;\n const {controllerState} = this;\n let newControllerState;\n const interactionState: InteractionState = {};\n\n switch (event.srcEvent.code) {\n case 'Minus':\n newControllerState = funcKey\n ? controllerState.zoomOut(zoomSpeed).zoomOut(zoomSpeed)\n : controllerState.zoomOut(zoomSpeed);\n interactionState.isZooming = true;\n break;\n case 'Equal':\n newControllerState = funcKey\n ? controllerState.zoomIn(zoomSpeed).zoomIn(zoomSpeed)\n : controllerState.zoomIn(zoomSpeed);\n interactionState.isZooming = true;\n break;\n case 'ArrowLeft':\n if (funcKey) {\n newControllerState = controllerState.rotateLeft(rotateSpeedX);\n interactionState.isRotating = true;\n } else {\n newControllerState = controllerState.moveLeft(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowRight':\n if (funcKey) {\n newControllerState = controllerState.rotateRight(rotateSpeedX);\n interactionState.isRotating = true;\n } else {\n newControllerState = controllerState.moveRight(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowUp':\n if (funcKey) {\n newControllerState = controllerState.rotateUp(rotateSpeedY);\n interactionState.isRotating = true;\n } else {\n newControllerState = controllerState.moveUp(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowDown':\n if (funcKey) {\n newControllerState = controllerState.rotateDown(rotateSpeedY);\n interactionState.isRotating = true;\n } else {\n newControllerState = controllerState.moveDown(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n default:\n return false;\n }\n this.updateViewport(newControllerState, this._getTransitionProps(), interactionState);\n return true;\n }\n\n protected _getTransitionProps(opts?: any): TransitionProps {\n const {transition} = this;\n\n if (!transition || !transition.transitionInterpolator) {\n return NO_TRANSITION_PROPS;\n }\n\n // Enables Transitions on double-tap and key-down events.\n return opts\n ? {\n ...transition,\n transitionInterpolator: new LinearInterpolator({\n ...opts,\n ...(transition.transitionInterpolator as LinearInterpolator).opts,\n makeViewport: this.controllerState.makeViewport\n })\n }\n : transition;\n }\n}\n","const PERCENT_OR_PIXELS_REGEX = /([0-9]+\\.?[0-9]*)(%|px)/;\n\nexport type Position = {\n position: number;\n relative: boolean;\n};\n\n// Takes a number or a string of formats `50%`, `33.3%` or `200px`\nexport function parsePosition(value: number | string): Position {\n switch (typeof value) {\n case 'number':\n return {\n position: value,\n relative: false\n };\n\n case 'string':\n const match = PERCENT_OR_PIXELS_REGEX.exec(value);\n if (match && match.length >= 3) {\n const relative = match[2] === '%';\n const position = parseFloat(match[1]);\n return {\n position: relative ? position / 100 : position,\n relative\n };\n }\n // fallthrough\n\n default:\n // eslint-disable-line\n throw new Error(`Could not parse position string ${value}`);\n }\n}\n\nexport function getPosition(position: Position, extent: number): number {\n return position.relative ? Math.round(position.position * extent) : position.position;\n}\n","import Viewport from '../viewports/viewport';\nimport {parsePosition, getPosition, Position} from '../utils/positions';\nimport {deepEqual} from '../utils/deep-equal';\nimport assert from '../utils/assert';\nimport type Controller from '../controllers/controller';\nimport type {ControllerOptions} from '../controllers/controller';\nimport type {TransitionProps} from '../controllers/transition-manager';\nimport type {Padding} from '../viewports/viewport';\nimport type {ConstructorOf} from '../types/types';\n\nexport type CommonViewState = TransitionProps;\n\ntype CommonViewProps = {\n /** A unique id of the view. In a multi-view use case, this is important for matching view states and place contents into this view. */\n id?: string;\n /** A relative (e.g. `'50%'`) or absolute position. Default `0`. */\n x?: number | string;\n /** A relative (e.g. `'50%'`) or absolute position. Default `0`. */\n y?: number | string;\n /** A relative (e.g. `'50%'`) or absolute extent. Default `'100%'`. */\n width?: number | string;\n /** A relative (e.g. `'50%'`) or absolute extent. Default `'100%'`. */\n height?: number | string;\n /** Padding around the view, expressed in either relative (e.g. `'50%'`) or absolute pixels. Default `null`. */\n padding?: {\n left?: number | string;\n right?: number | string;\n top?: number | string;\n bottom?: number | string;\n } | null;\n /** State of the view */\n viewState?:\n | string\n | ({\n id?: string;\n } & Partial);\n /** Options for viewport interactivity. */\n controller?:\n | null\n | boolean\n | ConstructorOf>\n | (ControllerOptions & {\n type?: ConstructorOf>;\n });\n\n /** @deprecated Directly wrap a viewport instance */\n viewportInstance?: Viewport;\n};\n\nexport default abstract class View<\n ViewState extends CommonViewState = CommonViewState,\n ViewProps = {}\n> {\n id: string;\n abstract get ViewportType(): ConstructorOf;\n abstract get ControllerType(): ConstructorOf>;\n\n private viewportInstance?: Viewport;\n private _x: Position;\n private _y: Position;\n private _width: Position;\n private _height: Position;\n private _padding: {\n left: Position;\n right: Position;\n top: Position;\n bottom: Position;\n } | null;\n\n readonly props: ViewProps & CommonViewProps;\n\n constructor(props: ViewProps & CommonViewProps) {\n const {\n id,\n x = 0,\n y = 0,\n width = '100%',\n height = '100%',\n padding = null,\n viewportInstance\n } = props || {};\n\n assert(!viewportInstance || viewportInstance instanceof Viewport);\n this.viewportInstance = viewportInstance;\n\n // @ts-ignore\n this.id = id || this.constructor.displayName || 'view';\n\n this.props = {...props, id: this.id};\n\n // Extents\n this._x = parsePosition(x);\n this._y = parsePosition(y);\n this._width = parsePosition(width);\n this._height = parsePosition(height);\n this._padding = padding && {\n left: parsePosition(padding.left || 0),\n right: parsePosition(padding.right || 0),\n top: parsePosition(padding.top || 0),\n bottom: parsePosition(padding.bottom || 0)\n };\n\n // Bind methods for easy access\n this.equals = this.equals.bind(this);\n\n Object.seal(this);\n }\n\n equals(view: View): boolean {\n if (this === view) {\n return true;\n }\n\n // if `viewportInstance` is set, it is the only prop that is used\n // Delegate to `Viewport.equals`\n if (this.viewportInstance) {\n return view.viewportInstance ? this.viewportInstance.equals(view.viewportInstance) : false;\n }\n\n return this.ViewportType === view.ViewportType && deepEqual(this.props, view.props);\n }\n\n /** Make viewport from canvas dimensions and view state */\n makeViewport({width, height, viewState}: {width: number; height: number; viewState: any}) {\n if (this.viewportInstance) {\n return this.viewportInstance;\n }\n\n viewState = this.filterViewState(viewState);\n\n // Resolve relative viewport dimensions\n const viewportDimensions = this.getDimensions({width, height});\n return new this.ViewportType({...viewState, ...this.props, ...viewportDimensions});\n }\n\n getViewStateId(): string {\n const {viewState} = this.props;\n if (typeof viewState === 'string') {\n // if View.viewState is a string, return it\n return viewState;\n }\n return viewState?.id || this.id;\n }\n\n // Allows view to override (or completely define) viewState\n filterViewState(viewState: ViewState): ViewState {\n if (this.props.viewState && typeof this.props.viewState === 'object') {\n // If we have specified an id, then intent is to override,\n // If not, completely specify the view state\n if (!this.props.viewState.id) {\n return this.props.viewState as ViewState;\n }\n\n // Merge in all props from View's viewState, except id\n const newViewState = {...viewState};\n for (const key in this.props.viewState) {\n if (key !== 'id') {\n newViewState[key] = this.props.viewState[key];\n }\n }\n return newViewState;\n }\n\n return viewState;\n }\n\n /** Resolve the dimensions of the view from overall canvas dimensions */\n getDimensions({width, height}: {width: number; height: number}): {\n x: number;\n y: number;\n width: number;\n height: number;\n padding?: Padding;\n } {\n const dimensions: {\n x: number;\n y: number;\n width: number;\n height: number;\n padding?: Padding;\n } = {\n x: getPosition(this._x, width),\n y: getPosition(this._y, height),\n width: getPosition(this._width, width),\n height: getPosition(this._height, height)\n };\n\n if (this._padding) {\n dimensions.padding = {\n left: getPosition(this._padding.left, width),\n top: getPosition(this._padding.top, height),\n right: getPosition(this._padding.right, width),\n bottom: getPosition(this._padding.bottom, height)\n };\n }\n return dimensions;\n }\n\n // Used by sub classes to resolve controller props\n get controller(): (ControllerOptions & {type: ConstructorOf>}) | null {\n const opts = this.props.controller;\n\n if (!opts) {\n return null;\n }\n if (opts === true) {\n return {type: this.ControllerType};\n }\n if (typeof opts === 'function') {\n return {type: opts};\n }\n return {type: this.ControllerType, ...opts};\n }\n}\n","import { uid, assert } from '@luma.gl/webgl';\nexport const DRAW_MODE = {\n POINTS: 0x0000,\n LINES: 0x0001,\n LINE_LOOP: 0x0002,\n LINE_STRIP: 0x0003,\n TRIANGLES: 0x0004,\n TRIANGLE_STRIP: 0x0005,\n TRIANGLE_FAN: 0x0006\n};\nexport default class Geometry {\n static get DRAW_MODE() {\n return DRAW_MODE;\n }\n\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n id = uid('geometry'),\n drawMode = DRAW_MODE.TRIANGLES,\n attributes = {},\n indices = null,\n vertexCount = null\n } = props;\n this.id = id;\n this.drawMode = drawMode | 0;\n this.attributes = {};\n this.userData = {};\n\n this._setAttributes(attributes, indices);\n\n this.vertexCount = vertexCount || this._calculateVertexCount(this.attributes, this.indices);\n }\n\n get mode() {\n return this.drawMode;\n }\n\n getVertexCount() {\n return this.vertexCount;\n }\n\n getAttributes() {\n return this.indices ? {\n indices: this.indices,\n ...this.attributes\n } : this.attributes;\n }\n\n _print(attributeName) {\n return \"Geometry \".concat(this.id, \" attribute \").concat(attributeName);\n }\n\n _setAttributes(attributes, indices) {\n if (indices) {\n this.indices = ArrayBuffer.isView(indices) ? {\n value: indices,\n size: 1\n } : indices;\n }\n\n for (const attributeName in attributes) {\n let attribute = attributes[attributeName];\n attribute = ArrayBuffer.isView(attribute) ? {\n value: attribute\n } : attribute;\n assert(ArrayBuffer.isView(attribute.value), \"\".concat(this._print(attributeName), \": must be typed array or object with value as typed array\"));\n\n if ((attributeName === 'POSITION' || attributeName === 'positions') && !attribute.size) {\n attribute.size = 3;\n }\n\n if (attributeName === 'indices') {\n assert(!this.indices);\n this.indices = attribute;\n } else {\n this.attributes[attributeName] = attribute;\n }\n }\n\n if (this.indices && this.indices.isIndexed !== undefined) {\n this.indices = Object.assign({}, this.indices);\n delete this.indices.isIndexed;\n }\n\n return this;\n }\n\n _calculateVertexCount(attributes, indices) {\n if (indices) {\n return indices.value.length;\n }\n\n let vertexCount = Infinity;\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const {\n value,\n size,\n constant\n } = attribute;\n\n if (!constant && value && size >= 1) {\n vertexCount = Math.min(vertexCount, value.length / size);\n }\n }\n\n assert(Number.isFinite(vertexCount));\n return vertexCount;\n }\n\n}\n//# sourceMappingURL=geometry.js.map","// Partial deep equal (only recursive on arrays)\nexport function deepEqual(a: any, b: any): boolean {\n if (a === b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n for (const key in a) {\n const aValue = a[key];\n const bValue = b[key];\n const equals =\n aValue === bValue ||\n (Array.isArray(aValue) && Array.isArray(bValue) && deepEqual(aValue, bValue));\n if (!equals) {\n return false;\n }\n }\n return true;\n}\n","const DATA_URL_PATTERN = /^data:([-\\w.]+\\/[-\\w.+]+)(;|,)/;\nconst MIME_TYPE_PATTERN = /^([-\\w.]+\\/[-\\w.+]+)/;\nexport function parseMIMEType(mimeString) {\n const matches = MIME_TYPE_PATTERN.exec(mimeString);\n\n if (matches) {\n return matches[1];\n }\n\n return mimeString;\n}\nexport function parseMIMETypeFromURL(url) {\n const matches = DATA_URL_PATTERN.exec(url);\n\n if (matches) {\n return matches[1];\n }\n\n return '';\n}\n//# sourceMappingURL=mime-type-utils.js.map","import { isResponse, isBlob } from '../../javascript-utils/is-type';\nimport { parseMIMEType, parseMIMETypeFromURL } from './mime-type-utils';\nconst QUERY_STRING_PATTERN = /\\?.*/;\nexport function getResourceUrlAndType(resource) {\n if (isResponse(resource)) {\n const url = stripQueryString(resource.url || '');\n const contentTypeHeader = resource.headers.get('content-type') || '';\n return {\n url,\n type: parseMIMEType(contentTypeHeader) || parseMIMETypeFromURL(url)\n };\n }\n\n if (isBlob(resource)) {\n return {\n url: stripQueryString(resource.name || ''),\n type: resource.type || ''\n };\n }\n\n if (typeof resource === 'string') {\n return {\n url: stripQueryString(resource),\n type: parseMIMETypeFromURL(resource)\n };\n }\n\n return {\n url: '',\n type: ''\n };\n}\nexport function getResourceContentLength(resource) {\n if (isResponse(resource)) {\n return resource.headers['content-length'] || -1;\n }\n\n if (isBlob(resource)) {\n return resource.size;\n }\n\n if (typeof resource === 'string') {\n return resource.length;\n }\n\n if (resource instanceof ArrayBuffer) {\n return resource.byteLength;\n }\n\n if (ArrayBuffer.isView(resource)) {\n return resource.byteLength;\n }\n\n return -1;\n}\n\nfunction stripQueryString(url) {\n return url.replace(QUERY_STRING_PATTERN, '');\n}\n//# sourceMappingURL=resource-utils.js.map","import { getTypedArrayFromGLType } from '../webgl-utils/typed-array-utils';\nimport { assert } from '../utils/assert';\nimport { checkProps } from '../utils/check-props';\nconst DEFAULT_ACCESSOR_VALUES = {\n offset: 0,\n stride: 0,\n type: 5126,\n size: 1,\n divisor: 0,\n normalized: false,\n integer: false\n};\nconst PROP_CHECKS = {\n deprecatedProps: {\n instanced: 'divisor',\n isInstanced: 'divisor'\n }\n};\nexport default class Accessor {\n static getBytesPerElement(accessor) {\n const ArrayType = getTypedArrayFromGLType(accessor.type || 5126);\n return ArrayType.BYTES_PER_ELEMENT;\n }\n\n static getBytesPerVertex(accessor) {\n assert(accessor.size);\n const ArrayType = getTypedArrayFromGLType(accessor.type || 5126);\n return ArrayType.BYTES_PER_ELEMENT * accessor.size;\n }\n\n static resolve() {\n for (var _len = arguments.length, accessors = new Array(_len), _key = 0; _key < _len; _key++) {\n accessors[_key] = arguments[_key];\n }\n\n return new Accessor(...[DEFAULT_ACCESSOR_VALUES, ...accessors]);\n }\n\n constructor() {\n for (var _len2 = arguments.length, accessors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n accessors[_key2] = arguments[_key2];\n }\n\n accessors.forEach(accessor => this._assign(accessor));\n Object.freeze(this);\n }\n\n toString() {\n return JSON.stringify(this);\n }\n\n get BYTES_PER_ELEMENT() {\n return Accessor.getBytesPerElement(this);\n }\n\n get BYTES_PER_VERTEX() {\n return Accessor.getBytesPerVertex(this);\n }\n\n _assign() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n props = checkProps('Accessor', props, PROP_CHECKS);\n\n if (props.type !== undefined) {\n this.type = props.type;\n\n if (props.type === 5124 || props.type === 5125) {\n this.integer = true;\n }\n }\n\n if (props.size !== undefined) {\n this.size = props.size;\n }\n\n if (props.offset !== undefined) {\n this.offset = props.offset;\n }\n\n if (props.stride !== undefined) {\n this.stride = props.stride;\n }\n\n if (props.normalized !== undefined) {\n this.normalized = props.normalized;\n }\n\n if (props.integer !== undefined) {\n this.integer = props.integer;\n }\n\n if (props.divisor !== undefined) {\n this.divisor = props.divisor;\n }\n\n if (props.buffer !== undefined) {\n this.buffer = props.buffer;\n }\n\n if (props.index !== undefined) {\n if (typeof props.index === 'boolean') {\n this.index = props.index ? 1 : 0;\n } else {\n this.index = props.index;\n }\n }\n\n if (props.instanced !== undefined) {\n this.divisor = props.instanced ? 1 : 0;\n }\n\n if (props.isInstanced !== undefined) {\n this.divisor = props.isInstanced ? 1 : 0;\n }\n\n return this;\n }\n\n}\nexport { DEFAULT_ACCESSOR_VALUES };\n//# sourceMappingURL=accessor.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* eslint-disable max-params */\nimport earcut from 'earcut';\nimport {modifyPolygonWindingDirection, WINDING} from '@math.gl/polygon';\n\nimport type {Position} from '@deck.gl/core';\nimport type {NumericArray} from '@math.gl/core';\n\nconst OUTER_POLYGON_WINDING = WINDING.CLOCKWISE;\nconst HOLE_POLYGON_WINDING = WINDING.COUNTER_CLOCKWISE;\n\ntype WindingOptions = {\n start?: number;\n end?: number;\n size?: number;\n isClosed?: boolean;\n};\n\n/** A scratch object for sending winding options */\nconst windingOptions: WindingOptions = {\n isClosed: true\n};\n\n// 4 data formats are supported:\n\n/** Simple Polygon: an array of points */\nexport type NestedSimplePolygonGeometry = Position[];\n/** Complex Polygon: an array of array of points (array of rings)\n * with the first ring representing the outer hull and other rings representing holes\n */\nexport type NestedComplexPolygonGeometry = Position[][];\n/** An array of numbers (flattened \"simple polygon\") */\nexport type FlatSimplePolygonGeometry = NumericArray;\n/** Flattened \"complex polygon\" */\nexport type FlatComplexPolygonGeometry = {positions: NumericArray; holeIndices: NumericArray};\n\nexport type PolygonGeometry =\n | NestedSimplePolygonGeometry\n | NestedComplexPolygonGeometry\n | FlatSimplePolygonGeometry\n | FlatComplexPolygonGeometry;\n\nexport type NormalizedPolygonGeometry = FlatSimplePolygonGeometry | FlatComplexPolygonGeometry;\n\n/**\n * Ensure a polygon is valid format\n */\nfunction validate(polygon: PolygonGeometry): void {\n polygon = (polygon && (polygon as FlatComplexPolygonGeometry).positions) || polygon;\n if (!Array.isArray(polygon) && !ArrayBuffer.isView(polygon)) {\n throw new Error('invalid polygon');\n }\n}\n\n/** Get the positions from a normalized polygon */\nexport function getPositions(polygon: NormalizedPolygonGeometry): NumericArray {\n return 'positions' in polygon ? polygon.positions : polygon;\n}\n\n/** Get the hole indices from a normalized polygon */\nexport function getHoleIndices(polygon: NormalizedPolygonGeometry): NumericArray | null {\n return 'holeIndices' in polygon ? polygon.holeIndices : null;\n}\n\n/**\n * Check if a polygon is nested or flat\n * Returns true if the polygon is a flat polygon (i.e. not an array of polygons)\n */\nfunction isNested(\n polygon: PolygonGeometry\n): polygon is NestedSimplePolygonGeometry | NestedComplexPolygonGeometry {\n return Array.isArray(polygon[0]);\n}\n\n/**\n * Check if a polygon is simple or complex\n * Returns true if the polygon is a simple polygon (i.e. not an array of polygons)\n */\nfunction isSimple(\n polygon: NestedSimplePolygonGeometry | NestedComplexPolygonGeometry\n): polygon is NestedSimplePolygonGeometry {\n return polygon.length >= 1 && polygon[0].length >= 2 && Number.isFinite(polygon[0][0]);\n}\n\n/**\n * Check if a simple polygon is a closed ring\n * Returns true if the simple polygon is a closed ring\n */\nfunction isNestedRingClosed(simplePolygon: NestedSimplePolygonGeometry): boolean {\n // check if first and last vertex are the same\n const p0 = simplePolygon[0];\n const p1 = simplePolygon[simplePolygon.length - 1];\n\n return p0[0] === p1[0] && p0[1] === p1[1] && p0[2] === p1[2];\n}\n\n/**\n * Check if a simple flat array is a closed ring\n * Returns true if the simple flat array is a closed ring\n */\nfunction isFlatRingClosed(\n positions: FlatSimplePolygonGeometry,\n /** size of a position, 2 (xy) or 3 (xyz) */\n size: number,\n /** start index of the path in the positions array */\n startIndex: number,\n /** end index of the path in the positions array */\n endIndex: number\n): boolean {\n for (let i = 0; i < size; i++) {\n if (positions[startIndex + i] !== positions[endIndex - size + i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Copy a simple polygon coordinates into a flat array, closes the ring if needed.\n * Returns the index of the write head in the destination\n */\nfunction copyNestedRing(\n /** destination */\n target: NumericArray,\n /** index in the destination to start copying into */\n targetStartIndex: number,\n /** the source polygon */\n simplePolygon: NestedSimplePolygonGeometry,\n /** size of a position, 2 (xy) or 3 (xyz) */\n size: number,\n /** modify polygon to be of the specified winding direction */\n windingDirection: number\n): number {\n let targetIndex = targetStartIndex;\n const len = simplePolygon.length;\n for (let i = 0; i < len; i++) {\n for (let j = 0; j < size; j++) {\n target[targetIndex++] = simplePolygon[i][j] || 0;\n }\n }\n\n if (!isNestedRingClosed(simplePolygon)) {\n for (let j = 0; j < size; j++) {\n target[targetIndex++] = simplePolygon[0][j] || 0;\n }\n }\n\n windingOptions.start = targetStartIndex;\n windingOptions.end = targetIndex;\n windingOptions.size = size;\n modifyPolygonWindingDirection(target, windingDirection, windingOptions);\n\n return targetIndex;\n}\n\n/**\n * Copy a simple flat array into another flat array, closes the ring if needed.\n * Returns the index of the write head in the destination\n */\nfunction copyFlatRing(\n /** destination */\n target: NumericArray,\n /** index in the destination to start copying into */\n targetStartIndex: number,\n /** the source polygon */\n positions: FlatSimplePolygonGeometry,\n /** size of a position, 2 (xy) or 3 (xyz) */\n size: number,\n /** start index of the path in the positions array */\n srcStartIndex: number = 0,\n /** end index of the path in the positions array */\n srcEndIndex: number,\n windingDirection: number\n): number {\n srcEndIndex = srcEndIndex || positions.length;\n const srcLength = srcEndIndex - srcStartIndex;\n if (srcLength <= 0) {\n return targetStartIndex;\n }\n let targetIndex = targetStartIndex;\n\n for (let i = 0; i < srcLength; i++) {\n target[targetIndex++] = positions[srcStartIndex + i];\n }\n\n if (!isFlatRingClosed(positions, size, srcStartIndex, srcEndIndex)) {\n for (let i = 0; i < size; i++) {\n target[targetIndex++] = positions[srcStartIndex + i];\n }\n }\n\n windingOptions.start = targetStartIndex;\n windingOptions.end = targetIndex;\n windingOptions.size = size;\n modifyPolygonWindingDirection(target, windingDirection, windingOptions);\n\n return targetIndex;\n}\n\n/**\n * Normalize any polygon representation into the \"complex flat\" format\n */\n/* eslint-disable max-statements */\nexport function normalize(\n polygon: PolygonGeometry,\n positionSize: number\n): NormalizedPolygonGeometry {\n validate(polygon);\n\n const positions: number[] = [];\n const holeIndices: number[] = [];\n\n if ('positions' in polygon) {\n // complex flat\n const {positions: srcPositions, holeIndices: srcHoleIndices} = polygon;\n\n if (srcHoleIndices) {\n let targetIndex = 0;\n // split the positions array into `holeIndices.length + 1` rings\n // holeIndices[-1] falls back to 0\n // holeIndices[holeIndices.length] falls back to positions.length\n for (let i = 0; i <= srcHoleIndices.length; i++) {\n targetIndex = copyFlatRing(\n positions,\n targetIndex,\n srcPositions,\n positionSize,\n srcHoleIndices[i - 1],\n srcHoleIndices[i],\n i === 0 ? OUTER_POLYGON_WINDING : HOLE_POLYGON_WINDING\n );\n holeIndices.push(targetIndex);\n }\n // The last one is not a starting index of a hole, remove\n holeIndices.pop();\n\n return {positions, holeIndices};\n }\n polygon = srcPositions;\n }\n if (!isNested(polygon)) {\n // simple flat\n copyFlatRing(positions, 0, polygon, positionSize, 0, positions.length, OUTER_POLYGON_WINDING);\n return positions;\n }\n if (!isSimple(polygon)) {\n // complex polygon\n let targetIndex = 0;\n\n for (const [polygonIndex, simplePolygon] of polygon.entries()) {\n targetIndex = copyNestedRing(\n positions,\n targetIndex,\n simplePolygon,\n positionSize,\n polygonIndex === 0 ? OUTER_POLYGON_WINDING : HOLE_POLYGON_WINDING\n );\n holeIndices.push(targetIndex);\n }\n // The last one is not a starting index of a hole, remove\n holeIndices.pop();\n // last index points to the end of the array, remove it\n return {positions, holeIndices};\n }\n // simple polygon\n copyNestedRing(positions, 0, polygon, positionSize, OUTER_POLYGON_WINDING);\n return positions;\n}\n/* eslint-enable max-statements */\n\n/*\n * Calculate the area of a single plane of the polygon\n */\nfunction getPlaneArea(positions: NumericArray, xIndex: number, yIndex: number): number {\n const numVerts = positions.length / 3;\n let area = 0;\n for (let i = 0; i < numVerts; i++) {\n const j = (i + 1) % numVerts;\n area += positions[i * 3 + xIndex] * positions[j * 3 + yIndex];\n area -= positions[j * 3 + xIndex] * positions[i * 3 + yIndex];\n }\n return Math.abs(area / 2);\n}\n\nfunction permutePositions(positions: NumericArray, xIndex: number, yIndex: number, zIndex: number) {\n const numVerts = positions.length / 3;\n for (let i = 0; i < numVerts; i++) {\n const o = i * 3;\n\n const x = positions[o + 0];\n const y = positions[o + 1];\n const z = positions[o + 2];\n\n positions[o + xIndex] = x;\n positions[o + yIndex] = y;\n positions[o + zIndex] = z;\n }\n}\n\n/*\n * Get vertex indices for drawing polygon mesh (triangulation)\n */\nexport function getSurfaceIndices(\n polygon: NormalizedPolygonGeometry,\n positionSize: number,\n preproject?: (xy: number[]) => number[],\n full3d?: boolean\n): number[] {\n let holeIndices = getHoleIndices(polygon);\n if (holeIndices) {\n holeIndices = holeIndices.map(positionIndex => positionIndex / positionSize);\n }\n\n let positions = getPositions(polygon);\n\n const is3d = full3d && positionSize === 3;\n\n if (preproject) {\n // When tesselating lnglat coordinates, project them to the common space for accuracy\n const n = positions.length;\n\n // Clone the array\n positions = positions.slice();\n\n const p: number[] = [];\n for (let i = 0; i < n; i += positionSize) {\n p[0] = positions[i];\n p[1] = positions[i + 1];\n\n if (is3d) {\n p[2] = positions[i + 2];\n }\n\n const xy = preproject(p);\n\n positions[i] = xy[0];\n positions[i + 1] = xy[1];\n\n if (is3d) {\n positions[i + 2] = xy[2];\n }\n }\n }\n\n if (is3d) {\n // calculate plane with largest area\n const xyArea = getPlaneArea(positions, 0, 1);\n const xzArea = getPlaneArea(positions, 0, 2);\n const yzArea = getPlaneArea(positions, 1, 2);\n\n if (!xyArea && !xzArea && !yzArea) {\n return []; // no planes have area, nothing we can do\n }\n\n // permute positions to make the largest plane xy for earcut\n if (xyArea > xzArea && xyArea > yzArea) {\n // xy plane largest, nothing to do\n } else if (xzArea > yzArea) {\n // xz plane largest, permute to make xyz -> xzy\n if (!preproject) {\n positions = positions.slice();\n }\n permutePositions(positions, 0, 2, 1);\n } else {\n // yz plane largest, permute to make xyz -> yzx\n if (!preproject) {\n positions = positions.slice();\n }\n permutePositions(positions, 1, 2, 0);\n }\n }\n\n // Let earcut triangulate the polygon\n return earcut(positions, holeIndices, positionSize);\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","import {lerp} from '@math.gl/core';\n\nconst DEFAULT_INDICES = new Uint16Array([0, 2, 1, 0, 3, 2]);\nconst DEFAULT_TEX_COORDS = new Float32Array([0, 1, 0, 0, 1, 0, 1, 1]);\n\n/*\n 1 ---- 2\n | |\n | |\n 0 ---- 3\n*/\n/* eslint-disable max-statements */\nexport default function createMesh(bounds, resolution) {\n if (!resolution) {\n return createQuad(bounds);\n }\n const maxXSpan = Math.max(\n Math.abs(bounds[0][0] - bounds[3][0]),\n Math.abs(bounds[1][0] - bounds[2][0])\n );\n const maxYSpan = Math.max(\n Math.abs(bounds[1][1] - bounds[0][1]),\n Math.abs(bounds[2][1] - bounds[3][1])\n );\n const uCount = Math.ceil(maxXSpan / resolution) + 1;\n const vCount = Math.ceil(maxYSpan / resolution) + 1;\n\n const vertexCount = (uCount - 1) * (vCount - 1) * 6;\n const indices = new Uint32Array(vertexCount);\n const texCoords = new Float32Array(uCount * vCount * 2);\n const positions = new Float64Array(uCount * vCount * 3);\n\n // Tesselate\n let vertex = 0;\n let index = 0;\n for (let u = 0; u < uCount; u++) {\n const ut = u / (uCount - 1);\n for (let v = 0; v < vCount; v++) {\n const vt = v / (vCount - 1);\n const p = interpolateQuad(bounds, ut, vt);\n\n positions[vertex * 3 + 0] = p[0];\n positions[vertex * 3 + 1] = p[1];\n positions[vertex * 3 + 2] = p[2] || 0;\n\n texCoords[vertex * 2 + 0] = ut;\n texCoords[vertex * 2 + 1] = 1 - vt;\n\n if (u > 0 && v > 0) {\n indices[index++] = vertex - vCount;\n indices[index++] = vertex - vCount - 1;\n indices[index++] = vertex - 1;\n indices[index++] = vertex - vCount;\n indices[index++] = vertex - 1;\n indices[index++] = vertex;\n }\n\n vertex++;\n }\n }\n return {\n vertexCount,\n positions,\n indices,\n texCoords\n };\n}\n\nfunction createQuad(bounds) {\n const positions = new Float64Array(12);\n // [[minX, minY], [minX, maxY], [maxX, maxY], [maxX, minY]]\n for (let i = 0; i < bounds.length; i++) {\n positions[i * 3 + 0] = bounds[i][0];\n positions[i * 3 + 1] = bounds[i][1];\n positions[i * 3 + 2] = bounds[i][2] || 0;\n }\n\n return {\n vertexCount: 6,\n positions,\n indices: DEFAULT_INDICES,\n texCoords: DEFAULT_TEX_COORDS\n };\n}\n\nfunction interpolateQuad(quad, ut, vt) {\n return lerp(lerp(quad[0], quad[1], vt), lerp(quad[3], quad[2], vt), ut);\n}\n","export default `\n#define SHADER_NAME bitmap-layer-vertex-shader\n\nattribute vec2 texCoords;\nattribute vec3 positions;\nattribute vec3 positions64Low;\n\nvarying vec2 vTexCoord;\nvarying vec2 vTexPos;\n\nuniform float coordinateConversion;\n\nconst vec3 pickingColor = vec3(1.0, 0.0, 0.0);\n\nvoid main(void) {\n geometry.worldPosition = positions;\n geometry.uv = texCoords;\n geometry.pickingColor = pickingColor;\n\n gl_Position = project_position_to_clipspace(positions, positions64Low, vec3(0.0), geometry.position);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vTexCoord = texCoords;\n\n if (coordinateConversion < -0.5) {\n vTexPos = geometry.position.xy + project_uCommonOrigin.xy;\n } else if (coordinateConversion > 0.5) {\n vTexPos = geometry.worldPosition.xy;\n }\n\n vec4 color = vec4(0.0);\n DECKGL_FILTER_COLOR(color, geometry);\n}\n`;\n","/**\n * Pack the top 12 bits of two normalized floats into 3 8-bit (rgb) values\n * This enables addressing 4096x4096 individual pixels\n *\n * returns vec3 encoded RGB colors\n * result.r - top 8 bits of u\n * result.g - top 8 bits of v\n * result.b - next 4 bits of u and v: (u + v * 16)\n */\nconst packUVsIntoRGB = `\nvec3 packUVsIntoRGB(vec2 uv) {\n // Extract the top 8 bits. We want values to be truncated down so we can add a fraction\n vec2 uv8bit = floor(uv * 256.);\n\n // Calculate the normalized remainders of u and v parts that do not fit into 8 bits\n // Scale and clamp to 0-1 range\n vec2 uvFraction = fract(uv * 256.);\n vec2 uvFraction4bit = floor(uvFraction * 16.);\n\n // Remainder can be encoded in blue channel, encode as 4 bits for pixel coordinates\n float fractions = uvFraction4bit.x + uvFraction4bit.y * 16.;\n\n return vec3(uv8bit, fractions) / 255.;\n}\n`;\n\nexport default `\n#define SHADER_NAME bitmap-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D bitmapTexture;\n\nvarying vec2 vTexCoord;\nvarying vec2 vTexPos;\n\nuniform float desaturate;\nuniform vec4 transparentColor;\nuniform vec3 tintColor;\nuniform float opacity;\n\nuniform float coordinateConversion;\nuniform vec4 bounds;\n\n/* projection utils */\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / PI / 2.0;\n\n// from degrees to Web Mercator\nvec2 lnglat_to_mercator(vec2 lnglat) {\n float x = lnglat.x;\n float y = clamp(lnglat.y, -89.9, 89.9);\n return vec2(\n radians(x) + PI,\n PI + log(tan(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\n// from Web Mercator to degrees\nvec2 mercator_to_lnglat(vec2 xy) {\n xy /= WORLD_SCALE;\n return degrees(vec2(\n xy.x - PI,\n atan(exp(xy.y - PI)) * 2.0 - PI * 0.5\n ));\n}\n/* End projection utils */\n\n// apply desaturation\nvec3 color_desaturate(vec3 color) {\n float luminance = (color.r + color.g + color.b) * 0.333333333;\n return mix(color, vec3(luminance), desaturate);\n}\n\n// apply tint\nvec3 color_tint(vec3 color) {\n return color * tintColor;\n}\n\n// blend with background color\nvec4 apply_opacity(vec3 color, float alpha) {\n return mix(transparentColor, vec4(color, 1.0), alpha);\n}\n\nvec2 getUV(vec2 pos) {\n return vec2(\n (pos.x - bounds[0]) / (bounds[2] - bounds[0]),\n (pos.y - bounds[3]) / (bounds[1] - bounds[3])\n );\n}\n\n${packUVsIntoRGB}\n\nvoid main(void) {\n vec2 uv = vTexCoord;\n if (coordinateConversion < -0.5) {\n vec2 lnglat = mercator_to_lnglat(vTexPos);\n uv = getUV(lnglat);\n } else if (coordinateConversion > 0.5) {\n vec2 commonPos = lnglat_to_mercator(vTexPos);\n uv = getUV(commonPos);\n }\n vec4 bitmapColor = texture2D(bitmapTexture, uv);\n\n gl_FragColor = apply_opacity(color_tint(color_desaturate(bitmapColor.rgb)), bitmapColor.a * opacity);\n\n geometry.uv = uv;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n\n if (picking_uActive) {\n // Since instance information is not used, we can use picking color for pixel index\n gl_FragColor.rgb = packUVsIntoRGB(uv);\n }\n}\n`;\n","// Copyright (c) 2015 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {\n Layer,\n project32,\n picking,\n CoordinateSystem,\n COORDINATE_SYSTEM,\n LayerProps,\n PickingInfo,\n GetPickingInfoParams,\n UpdateParameters,\n Color,\n Texture,\n Position,\n DefaultProps\n} from '@deck.gl/core';\nimport {Model, Geometry} from '@luma.gl/core';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\n\nimport createMesh from './create-mesh';\n\nimport vs from './bitmap-layer-vertex';\nimport fs from './bitmap-layer-fragment';\n\nconst defaultProps: DefaultProps = {\n image: {type: 'image', value: null, async: true},\n bounds: {type: 'array', value: [1, 0, 0, 1], compare: true},\n _imageCoordinateSystem: COORDINATE_SYSTEM.DEFAULT,\n\n desaturate: {type: 'number', min: 0, max: 1, value: 0},\n // More context: because of the blending mode we're using for ground imagery,\n // alpha is not effective when blending the bitmap layers with the base map.\n // Instead we need to manually dim/blend rgb values with a background color.\n transparentColor: {type: 'color', value: [0, 0, 0, 0]},\n tintColor: {type: 'color', value: [255, 255, 255]}\n};\n\n/** All properties supported by BitmapLayer. */\nexport type BitmapLayerProps = _BitmapLayerProps & LayerProps;\nexport type BitmapBoundingBox =\n | [left: number, bottom: number, right: number, top: number]\n | [Position, Position, Position, Position];\n\n/** Properties added by BitmapLayer. */\ntype _BitmapLayerProps = {\n /**\n * The image to display.\n *\n * @default null\n */\n image?: string | Texture | null;\n\n /**\n * Supported formats:\n * - Coordinates of the bounding box of the bitmap `[left, bottom, right, top]`\n * - Coordinates of four corners of the bitmap, should follow the sequence of `[[left, bottom], [left, top], [right, top], [right, bottom]]`.\n * Each position could optionally contain a third component `z`.\n * @default [1, 0, 0, 1]\n */\n bounds?: BitmapBoundingBox;\n\n /**\n * > Note: this prop is experimental.\n *\n * Specifies how image coordinates should be geographically interpreted.\n * @default COORDINATE_SYSTEM.DEFAULT\n */\n _imageCoordinateSystem?: CoordinateSystem;\n\n /**\n * The desaturation of the bitmap. Between `[0, 1]`.\n * @default 0\n */\n desaturate?: number;\n\n /**\n * The color to use for transparent pixels, in `[r, g, b, a]`.\n * @default [0, 0, 0, 0]\n */\n transparentColor?: Color;\n\n /**\n * The color to tint the bitmap by, in `[r, g, b]`.\n * @default [255, 255, 255]\n */\n tintColor?: Color;\n\n /** Customize the [texture parameters](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texParameter). */\n textureParameters?: Record | null;\n};\n\n/** Render a bitmap at specified boundaries. */\nexport default class BitmapLayer extends Layer<\n ExtraPropsT & Required<_BitmapLayerProps>\n> {\n static layerName = 'BitmapLayer';\n static defaultProps = defaultProps;\n\n state!: Layer['state'] & {\n disablePicking?: boolean;\n model?: Model;\n mesh?: any;\n coordinateConversion?: number;\n bounds?: number[];\n };\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]});\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager()!;\n\n attributeManager.remove(['instancePickingColors']);\n const noAlloc = true;\n\n attributeManager.add({\n indices: {\n size: 1,\n isIndexed: true,\n update: attribute => (attribute.value = this.state.mesh.indices),\n noAlloc\n },\n positions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n update: attribute => (attribute.value = this.state.mesh.positions),\n noAlloc\n },\n texCoords: {\n size: 2,\n update: attribute => (attribute.value = this.state.mesh.texCoords),\n noAlloc\n }\n });\n }\n\n updateState({props, oldProps, changeFlags}: UpdateParameters): void {\n // setup model first\n const attributeManager = this.getAttributeManager()!;\n\n if (changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n attributeManager.invalidateAll();\n }\n\n if (props.bounds !== oldProps.bounds) {\n const oldMesh = this.state.mesh;\n const mesh = this._createMesh();\n this.state.model.setVertexCount(mesh.vertexCount);\n for (const key in mesh) {\n if (oldMesh && oldMesh[key] !== mesh[key]) {\n attributeManager.invalidate(key);\n }\n }\n this.setState({mesh, ...this._getCoordinateUniforms()});\n } else if (props._imageCoordinateSystem !== oldProps._imageCoordinateSystem) {\n this.setState(this._getCoordinateUniforms());\n }\n }\n\n getPickingInfo(params: GetPickingInfoParams): PickingInfo {\n const {image} = this.props;\n const info: PickingInfo & {bitmap?: any} = params.info;\n\n if (!info.color || !image) {\n info.bitmap = null;\n return info;\n }\n\n const {width, height} = image as Texture;\n\n // Picking color doesn't represent object index in this layer\n info.index = 0;\n\n // Calculate uv and pixel in bitmap\n const uv = unpackUVsFromRGB(info.color);\n\n const pixel = [Math.floor(uv[0] * (width as number)), Math.floor(uv[1] * (height as number))];\n\n info.bitmap = {\n size: {width, height}, // Size of bitmap\n uv, // Floating point precision in 0-1 range\n pixel // Truncated to integer and scaled to pixel size\n };\n\n return info;\n }\n\n // Override base Layer multi-depth picking logic\n disablePickingIndex() {\n this.setState({disablePicking: true});\n }\n\n restorePickingColors() {\n this.setState({disablePicking: false});\n }\n\n protected _updateAutoHighlight(info) {\n super._updateAutoHighlight({\n ...info,\n color: this.encodePickingColor(0)\n });\n }\n\n protected _createMesh() {\n const {bounds} = this.props;\n\n let normalizedBounds = bounds;\n // bounds as [minX, minY, maxX, maxY]\n if (isRectangularBounds(bounds)) {\n /*\n (minX0, maxY3) ---- (maxX2, maxY3)\n | |\n | |\n | |\n (minX0, minY1) ---- (maxX2, minY1)\n */\n normalizedBounds = [\n [bounds[0], bounds[1]],\n [bounds[0], bounds[3]],\n [bounds[2], bounds[3]],\n [bounds[2], bounds[1]]\n ];\n }\n\n return createMesh(normalizedBounds, this.context.viewport.resolution);\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n if (!gl) {\n return null;\n }\n\n /*\n 0,0 --- 1,0\n | |\n 0,1 --- 1,1\n */\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLES,\n vertexCount: 6\n }),\n isInstanced: false\n });\n }\n\n draw(opts) {\n const {uniforms, moduleParameters} = opts;\n const {model, coordinateConversion, bounds, disablePicking} = this.state;\n const {image, desaturate, transparentColor, tintColor} = this.props;\n\n if (moduleParameters.pickingActive && disablePicking) {\n return;\n }\n\n // // TODO fix zFighting\n // Render the image\n if (image && model) {\n model\n .setUniforms(uniforms)\n .setUniforms({\n bitmapTexture: image,\n desaturate,\n transparentColor: transparentColor.map(x => x / 255),\n tintColor: tintColor.slice(0, 3).map(x => x / 255),\n coordinateConversion,\n bounds\n })\n .draw();\n }\n }\n\n _getCoordinateUniforms() {\n const {LNGLAT, CARTESIAN, DEFAULT} = COORDINATE_SYSTEM;\n let {_imageCoordinateSystem: imageCoordinateSystem} = this.props;\n if (imageCoordinateSystem !== DEFAULT) {\n const {bounds} = this.props;\n if (!isRectangularBounds(bounds)) {\n throw new Error('_imageCoordinateSystem only supports rectangular bounds');\n }\n\n // The default behavior (linearly interpolated tex coords)\n const defaultImageCoordinateSystem = this.context.viewport.resolution ? LNGLAT : CARTESIAN;\n imageCoordinateSystem = imageCoordinateSystem === LNGLAT ? LNGLAT : CARTESIAN;\n\n if (imageCoordinateSystem === LNGLAT && defaultImageCoordinateSystem === CARTESIAN) {\n // LNGLAT in Mercator, e.g. display LNGLAT-encoded image in WebMercator projection\n return {coordinateConversion: -1, bounds};\n }\n if (imageCoordinateSystem === CARTESIAN && defaultImageCoordinateSystem === LNGLAT) {\n // Mercator in LNGLAT, e.g. display WebMercator encoded image in Globe projection\n const bottomLeft = lngLatToWorld([bounds[0], bounds[1]]);\n const topRight = lngLatToWorld([bounds[2], bounds[3]]);\n return {\n coordinateConversion: 1,\n bounds: [bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]]\n };\n }\n }\n return {\n coordinateConversion: 0,\n bounds: [0, 0, 0, 0]\n };\n }\n}\n\n/**\n * Decode uv floats from rgb bytes where b contains 4-bit fractions of uv\n * @param {number[]} color\n * @returns {number[]} uvs\n * https://stackoverflow.com/questions/30242013/glsl-compressing-packing-multiple-0-1-colours-var4-into-a-single-var4-variab\n */\nfunction unpackUVsFromRGB(color) {\n const [u, v, fracUV] = color;\n const vFrac = (fracUV & 0xf0) / 256;\n const uFrac = (fracUV & 0x0f) / 16;\n return [(u + uFrac) / 256, (v + vFrac) / 256];\n}\n\nfunction isRectangularBounds(\n bounds: [number, number, number, number] | [Position, Position, Position, Position]\n): bounds is [number, number, number, number] {\n return Number.isFinite(bounds[0]);\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable max-len */\n\n// Core Layers\nexport {default as ArcLayer} from './arc-layer/arc-layer';\nexport {default as BitmapLayer} from './bitmap-layer/bitmap-layer';\nexport {default as IconLayer} from './icon-layer/icon-layer';\nexport {default as LineLayer} from './line-layer/line-layer';\nexport {default as PointCloudLayer} from './point-cloud-layer/point-cloud-layer';\nexport {default as ScatterplotLayer} from './scatterplot-layer/scatterplot-layer';\nexport {default as ColumnLayer} from './column-layer/column-layer';\nexport {default as GridCellLayer} from './column-layer/grid-cell-layer';\nexport {default as PathLayer} from './path-layer/path-layer';\nexport {default as PolygonLayer} from './polygon-layer/polygon-layer';\nexport {default as GeoJsonLayer} from './geojson-layer/geojson-layer';\nexport {default as TextLayer} from './text-layer/text-layer';\nexport {default as SolidPolygonLayer} from './solid-polygon-layer/solid-polygon-layer';\n\n// Experimental layer exports\nexport {default as _MultiIconLayer} from './text-layer/multi-icon-layer/multi-icon-layer';\nexport {default as _TextBackgroundLayer} from './text-layer/text-background-layer/text-background-layer';\n\n// Types\nexport type {ArcLayerProps} from './arc-layer/arc-layer';\nexport type {BitmapLayerProps, BitmapBoundingBox} from './bitmap-layer/bitmap-layer';\nexport type {ColumnLayerProps} from './column-layer/column-layer';\nexport type {ScatterplotLayerProps} from './scatterplot-layer/scatterplot-layer';\nexport type {IconLayerProps} from './icon-layer/icon-layer';\nexport type {LineLayerProps} from './line-layer/line-layer';\nexport type {PolygonLayerProps} from './polygon-layer/polygon-layer';\nexport type {GeoJsonLayerProps} from './geojson-layer/geojson-layer';\nexport type {GridCellLayerProps} from './column-layer/grid-cell-layer';\nexport type {TextLayerProps} from './text-layer/text-layer';\nexport type {MultiIconLayerProps} from './text-layer/multi-icon-layer/multi-icon-layer';\nexport type {PointCloudLayerProps} from './point-cloud-layer/point-cloud-layer';\nexport type {TextBackgroundLayerProps} from './text-layer/text-background-layer/text-background-layer';\nexport type {PathLayerProps} from './path-layer/path-layer';\nexport type {SolidPolygonLayerProps} from './solid-polygon-layer/solid-polygon-layer';\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\ntype NestedArray = (T | NestedArray)[];\n\n/**\n * Flattens a nested array into a single level array,\n * or a single value into an array with one value\n * @example flatten([[1, [2]], [3], 4]) => [1, 2, 3, 4]\n * @example flatten(1) => [1]\n * @param array The array to flatten.\n * @param filter= - Optional predicate called on each `value` to\n * determine if it should be included (pushed onto) the resulting array.\n * @return Returns the new flattened array (new array or `result` if provided)\n */\nexport function flatten(\n array: T | NestedArray,\n filter: (element: T) => boolean = () => true\n): T[] {\n // Wrap single object in array\n if (!Array.isArray(array)) {\n return filter(array) ? [array] : [];\n }\n // Deep flatten and filter the array\n return flattenArray(array, filter, []);\n}\n\n/** Deep flattens an array. Helper to `flatten`, see its parameters */\nfunction flattenArray(array: NestedArray, filter: (element: T) => boolean, result: T[]): T[] {\n let index = -1;\n while (++index < array.length) {\n const value = array[index];\n if (Array.isArray(value)) {\n flattenArray(value, filter, result);\n } else if (filter(value)) {\n result.push(value);\n }\n }\n return result;\n}\n\n/** Uses copyWithin to significantly speed up typed array value filling */\nexport function fillArray({target, source, start = 0, count = 1}) {\n const length = source.length;\n const total = count * length;\n let copied = 0;\n for (let i = start; copied < length; copied++) {\n target[i++] = source[copied];\n }\n\n while (copied < total) {\n // If we have copied less than half, copy everything we got\n // else copy remaining in one operation\n if (copied < total - copied) {\n target.copyWithin(start + copied, start, start + copied);\n copied *= 2;\n } else {\n target.copyWithin(start + copied, start, start + total - copied);\n copied = total;\n }\n }\n\n return target;\n}\n","import {TypedArray, TypedArrayConstructor} from '../types/types';\n\nexport type TypedArrayManagerOptions = {\n overAlloc?: number;\n poolSize?: number;\n};\n\nexport class TypedArrayManager {\n private _pool: ArrayBuffer[] = [];\n opts: {\n overAlloc: number;\n poolSize: number;\n } = {overAlloc: 2, poolSize: 100};\n\n constructor(options: TypedArrayManagerOptions = {}) {\n this.setOptions(options);\n }\n\n setOptions(options: TypedArrayManagerOptions) {\n Object.assign(this.opts, options);\n }\n\n allocate(\n typedArray: T | null | undefined,\n count: number,\n {\n size = 1,\n type,\n padding = 0,\n copy = false,\n initialize = false,\n maxCount\n }: {\n size?: number;\n type?: TypedArrayConstructor;\n padding?: number;\n copy?: boolean;\n initialize?: boolean;\n maxCount?: number;\n }\n ): T {\n const Type =\n type || (typedArray && (typedArray.constructor as TypedArrayConstructor)) || Float32Array;\n\n const newSize = count * size + padding;\n if (ArrayBuffer.isView(typedArray)) {\n if (newSize <= typedArray.length) {\n return typedArray;\n }\n if (newSize * typedArray.BYTES_PER_ELEMENT <= typedArray.buffer.byteLength) {\n return new Type(typedArray.buffer, 0, newSize) as T;\n }\n }\n\n let maxSize: number = Infinity;\n if (maxCount) {\n maxSize = maxCount * size + padding;\n }\n\n const newArray = this._allocate(Type, newSize, initialize, maxSize);\n\n if (typedArray && copy) {\n newArray.set(typedArray);\n } else if (!initialize) {\n // Hack - always initialize the first 4 elements. NaNs crash the Attribute validation\n newArray.fill(0, 0, 4);\n }\n\n this._release(typedArray);\n return newArray as T;\n }\n\n release(typedArray: TypedArray | null | undefined) {\n this._release(typedArray);\n }\n\n private _allocate(\n Type: TypedArrayConstructor,\n size: number,\n initialize: boolean,\n maxSize: number\n ): TypedArray {\n // Allocate at least one element to ensure a valid buffer\n let sizeToAllocate = Math.max(Math.ceil(size * this.opts.overAlloc), 1);\n // Don't over allocate after certain specified number of elements\n if (sizeToAllocate > maxSize) {\n sizeToAllocate = maxSize;\n }\n\n // Check if available in pool\n const pool = this._pool;\n const byteLength = Type.BYTES_PER_ELEMENT * sizeToAllocate;\n const i = pool.findIndex(b => b.byteLength >= byteLength);\n if (i >= 0) {\n // Create a new array using an existing buffer\n const array = new Type(pool.splice(i, 1)[0], 0, sizeToAllocate);\n if (initialize) {\n // Viewing a buffer with a different type may create NaNs\n array.fill(0);\n }\n return array;\n }\n return new Type(sizeToAllocate);\n }\n\n private _release(typedArray: TypedArray | null | undefined): void {\n if (!ArrayBuffer.isView(typedArray)) {\n return;\n }\n const pool = this._pool;\n const {buffer} = typedArray;\n // Save the buffer of the released array into the pool\n // Sort buffers by size\n // TODO - implement binary search?\n const {byteLength} = buffer;\n const i = pool.findIndex(b => b.byteLength >= byteLength);\n if (i < 0) {\n pool.push(buffer);\n } else if (i > 0 || pool.length < this.opts.poolSize) {\n pool.splice(i, 0, buffer);\n }\n if (pool.length > this.opts.poolSize) {\n // Drop the smallest one\n pool.shift();\n }\n }\n}\n\nexport default new TypedArrayManager();\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","import * as glMatrix from \"./common.js\";\n/**\r\n * 4x4 Matrix
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.\r\n * @module mat4\r\n */\n\n/**\r\n * Creates a new identity mat4\r\n *\r\n * @returns {mat4} a new 4x4 matrix\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(16);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a new mat4 initialized with values from an existing matrix\r\n *\r\n * @param {ReadonlyMat4} a matrix to clone\r\n * @returns {mat4} a new 4x4 matrix\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Copy the values from one mat4 to another\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Create a new mat4 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} A new mat4\r\n */\n\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\r\n * Set the components of a mat4 to the given values\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} out\r\n */\n\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\r\n * Set a mat4 to the identity matrix\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @returns {mat4} out\r\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Transpose the values of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a12 = a[6],\n a13 = a[7];\n var a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\r\n * Inverts a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n/**\r\n * Calculates the adjugate of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\n out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\n return out;\n}\n/**\r\n * Calculates the determinant of a mat4\r\n *\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n/**\r\n * Multiplies two mat4s\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15]; // Cache only the current line of the second matrix\n\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n/**\r\n * Translate a mat4 by the given vector\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to translate\r\n * @param {ReadonlyVec3} v vector to translate by\r\n * @returns {mat4} out\r\n */\n\nexport function translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n}\n/**\r\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to scale\r\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\r\n * @returns {mat4} out\r\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Rotates a mat4 by the given angle around the given axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {ReadonlyVec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\n\nexport function rotate(out, a, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n var b00, b01, b02;\n var b10, b11, b12;\n var b20, b21, b22;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11]; // Construct the elements of the rotation matrix\n\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c; // Perform rotation-specific matrix multiplication\n\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the X axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function rotateX(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the Y axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function rotateY(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the Z axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function rotateZ(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @returns {mat4} out\r\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.scale(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyVec3} v Scaling vector\r\n * @returns {mat4} out\r\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a given angle around a given axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotate(dest, dest, rad, axis);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {ReadonlyVec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\n\nexport function fromRotation(out, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c; // Perform rotation-specific matrix multiplication\n\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the X axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateX(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function fromXRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the Y axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateY(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function fromYRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the Z axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateZ(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nexport function fromZRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation and vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @returns {mat4} out\r\n */\n\nexport function fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a new mat4 from a dual quat.\r\n *\r\n * @param {mat4} out Matrix\r\n * @param {ReadonlyQuat2} a Dual Quaternion\r\n * @returns {mat4} mat4 receiving operation result\r\n */\n\nexport function fromQuat2(out, a) {\n var translation = new glMatrix.ARRAY_TYPE(3);\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n var magnitude = bx * bx + by * by + bz * bz + bw * bw; //Only scale if it makes sense\n\n if (magnitude > 0) {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n } else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n\n fromRotationTranslation(out, a, translation);\n return out;\n}\n/**\r\n * Returns the translation vector component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslation,\r\n * the returned vector will be the same as the translation vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive translation component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\n\nexport function getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n/**\r\n * Returns the scaling factor component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslationScale\r\n * with a normalized Quaternion paramter, the returned vector will be\r\n * the same as the scaling vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive scaling factor component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\n\nexport function getScaling(out, mat) {\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out[0] = Math.hypot(m11, m12, m13);\n out[1] = Math.hypot(m21, m22, m23);\n out[2] = Math.hypot(m31, m32, m33);\n return out;\n}\n/**\r\n * Returns a quaternion representing the rotational component\r\n * of a transformation matrix. If a matrix is built with\r\n * fromRotationTranslation, the returned quaternion will be the\r\n * same as the quaternion originally supplied.\r\n * @param {quat} out Quaternion to receive the rotation component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {quat} out\r\n */\n\nexport function getRotation(out, mat) {\n var scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n var is1 = 1 / scaling[0];\n var is2 = 1 / scaling[1];\n var is3 = 1 / scaling[2];\n var sm11 = mat[0] * is1;\n var sm12 = mat[1] * is2;\n var sm13 = mat[2] * is3;\n var sm21 = mat[4] * is1;\n var sm22 = mat[5] * is2;\n var sm23 = mat[6] * is3;\n var sm31 = mat[8] * is1;\n var sm32 = mat[9] * is2;\n var sm33 = mat[10] * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @param {ReadonlyVec3} s Scaling vector\r\n * @returns {mat4} out\r\n */\n\nexport function fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * mat4.translate(dest, origin);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n * mat4.translate(dest, negativeOrigin);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @param {ReadonlyVec3} s Scaling vector\r\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\r\n * @returns {mat4} out\r\n */\n\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n var ox = o[0];\n var oy = o[1];\n var oz = o[2];\n var out0 = (1 - (yy + zz)) * sx;\n var out1 = (xy + wz) * sx;\n var out2 = (xz - wy) * sx;\n var out4 = (xy - wz) * sy;\n var out5 = (1 - (xx + zz)) * sy;\n var out6 = (yz + wx) * sy;\n var out8 = (xz + wy) * sz;\n var out9 = (yz - wx) * sz;\n var out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n/**\r\n * Calculates a 4x4 matrix from the given quaternion\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyQuat} q Quaternion to create matrix from\r\n *\r\n * @returns {mat4} out\r\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a frustum matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Number} left Left bound of the frustum\r\n * @param {Number} right Right bound of the frustum\r\n * @param {Number} bottom Bottom bound of the frustum\r\n * @param {Number} top Top bound of the frustum\r\n * @param {Number} near Near bound of the frustum\r\n * @param {Number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nexport function frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n/**\r\n * Generates a perspective projection matrix with the given bounds.\r\n * Passing null/undefined/no value for far will generate infinite projection matrix.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} fovy Vertical field of view in radians\r\n * @param {number} aspect Aspect ratio. typically viewport width/height\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum, can be null or Infinity\r\n * @returns {mat4} out\r\n */\n\nexport function perspective(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n\n return out;\n}\n/**\r\n * Generates a perspective projection matrix with the given field of view.\r\n * This is primarily useful for generating projection matrices to be used\r\n * with the still experiemental WebVR API.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n var xScale = 2.0 / (leftTan + rightTan);\n var yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n}\n/**\r\n * Generates a orthogonal projection matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} left Left bound of the frustum\r\n * @param {number} right Right bound of the frustum\r\n * @param {number} bottom Bottom bound of the frustum\r\n * @param {number} top Top bound of the frustum\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nexport function ortho(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\r\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {ReadonlyVec3} eye Position of the viewer\r\n * @param {ReadonlyVec3} center Point the viewer is looking at\r\n * @param {ReadonlyVec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\n\nexport function lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n var eyex = eye[0];\n var eyey = eye[1];\n var eyez = eye[2];\n var upx = up[0];\n var upy = up[1];\n var upz = up[2];\n var centerx = center[0];\n var centery = center[1];\n var centerz = center[2];\n\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.hypot(z0, z1, z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.hypot(x0, x1, x2);\n\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.hypot(y0, y1, y2);\n\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a matrix that makes something look at something else.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {ReadonlyVec3} eye Position of the viewer\r\n * @param {ReadonlyVec3} center Point the viewer is looking at\r\n * @param {ReadonlyVec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\n\nexport function targetTo(out, eye, target, up) {\n var eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n var z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n var len = z0 * z0 + z1 * z1 + z2 * z2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n\n var x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n/**\r\n * Returns a string representation of a mat4\r\n *\r\n * @param {ReadonlyMat4} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\n\nexport function str(a) {\n return \"mat4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \", \" + a[9] + \", \" + a[10] + \", \" + a[11] + \", \" + a[12] + \", \" + a[13] + \", \" + a[14] + \", \" + a[15] + \")\";\n}\n/**\r\n * Returns Frobenius norm of a mat4\r\n *\r\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);\n}\n/**\r\n * Adds two mat4's\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat4} out\r\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n/**\r\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat4} out the receiving vector\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat4} out\r\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyMat4} a The first matrix.\r\n * @param {ReadonlyMat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n}\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyMat4} a The first matrix.\r\n * @param {ReadonlyMat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var a8 = a[8],\n a9 = a[9],\n a10 = a[10],\n a11 = a[11];\n var a12 = a[12],\n a13 = a[13],\n a14 = a[14],\n a15 = a[15];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n var b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n var b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11];\n var b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n/**\r\n * Alias for {@link mat4.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link mat4.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;","const globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document\n};\nconst self_ = globals.self || globals.window || globals.global || {};\nconst window_ = globals.window || globals.self || globals.global || {};\nconst global_ = globals.global || globals.self || globals.window || {};\nconst document_ = globals.document || {};\nexport { self_ as self, window_ as window, global_ as global, document_ as document };\nexport const isBrowser = Boolean(typeof process !== 'object' || String(process) !== '[object process]' || process.browser);\nexport const isWorker = typeof importScripts === 'function';\nconst matches = typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\nexport const nodeVersion = matches && parseFloat(matches[1]) || 0;\n//# sourceMappingURL=globals.js.map","import GL from '@luma.gl/constants';\nimport Pass from './pass';\nimport {clear, setParameters, withParameters, cssToDeviceRatio} from '@luma.gl/core';\n\nimport type {Framebuffer} from '@luma.gl/core';\nimport type Viewport from '../viewports/viewport';\nimport type View from '../views/view';\nimport type Layer from '../lib/layer';\nimport type {Effect} from '../lib/effect';\n\nexport type Rect = {x: number; y: number; width: number; height: number};\n\nexport type LayersPassRenderOptions = {\n target?: Framebuffer;\n pass: string;\n layers: Layer[];\n viewports: Viewport[];\n onViewportActive: (viewport: Viewport) => void;\n cullRect?: Rect;\n views?: Record;\n effects?: Effect[];\n /** If true, recalculates render index (z) from 0. Set to false if a stack of layers are rendered in multiple passes. */\n clearStack?: boolean;\n clearCanvas?: boolean;\n layerFilter?: (context: FilterContext) => boolean;\n moduleParameters?: any;\n};\n\ntype DrawLayerParameters = {\n shouldDrawLayer: boolean;\n layerRenderIndex?: number;\n moduleParameters?: any;\n layerParameters?: any;\n};\n\nexport type FilterContext = {\n layer: Layer;\n viewport: Viewport;\n isPicking: boolean;\n renderPass: string;\n cullRect?: Rect;\n};\n\nexport type RenderStats = {\n totalCount: number;\n visibleCount: number;\n compositeCount: number;\n pickableCount: number;\n};\n\nexport default class LayersPass extends Pass {\n _lastRenderIndex: number = -1;\n\n render(options: LayersPassRenderOptions): any {\n const gl = this.gl;\n\n setParameters(gl, {framebuffer: options.target});\n return this._drawLayers(options);\n }\n\n // Draw a list of layers in a list of viewports\n private _drawLayers(options: LayersPassRenderOptions) {\n const {\n target,\n moduleParameters,\n viewports,\n views,\n onViewportActive,\n clearStack = true,\n clearCanvas = true\n } = options;\n options.pass = options.pass || 'unknown';\n\n const gl = this.gl;\n if (clearCanvas) {\n clearGLCanvas(gl);\n }\n\n if (clearStack) {\n this._lastRenderIndex = -1;\n }\n\n const renderStats: RenderStats[] = [];\n\n for (const viewport of viewports) {\n const view = views && views[viewport.id];\n\n // Update context to point to this viewport\n onViewportActive(viewport);\n\n const drawLayerParams = this._getDrawLayerParams(viewport, options);\n\n // render this viewport\n // @ts-expect-error\n const subViewports = viewport.subViewports || [viewport];\n for (const subViewport of subViewports) {\n const stats = this._drawLayersInViewport(\n gl,\n {\n target,\n moduleParameters,\n viewport: subViewport,\n view,\n pass: options.pass,\n layers: options.layers\n },\n drawLayerParams\n );\n renderStats.push(stats);\n }\n }\n return renderStats;\n }\n\n // Resolve the parameters needed to draw each layer\n // When a viewport contains multiple subviewports (e.g. repeated web mercator map),\n // this is only done once for the parent viewport\n private _getDrawLayerParams(\n viewport: Viewport,\n {layers, pass, layerFilter, cullRect, effects, moduleParameters}: LayersPassRenderOptions\n ): DrawLayerParameters[] {\n const drawLayerParams: DrawLayerParameters[] = [];\n const indexResolver = layerIndexResolver(this._lastRenderIndex + 1);\n const drawContext: FilterContext = {\n layer: layers[0],\n viewport,\n isPicking: pass.startsWith('picking'),\n renderPass: pass,\n cullRect\n };\n const layerFilterCache = {};\n for (let layerIndex = 0; layerIndex < layers.length; layerIndex++) {\n const layer = layers[layerIndex];\n // Check if we should draw layer\n const shouldDrawLayer = this._shouldDrawLayer(\n layer,\n drawContext,\n layerFilter,\n layerFilterCache\n );\n\n const layerParam: DrawLayerParameters = {\n shouldDrawLayer\n };\n\n if (shouldDrawLayer) {\n // This is the \"logical\" index for ordering this layer in the stack\n // used to calculate polygon offsets\n // It can be the same as another layer\n layerParam.layerRenderIndex = indexResolver(layer, shouldDrawLayer);\n\n layerParam.moduleParameters = this._getModuleParameters(\n layer,\n effects,\n pass,\n moduleParameters\n );\n layerParam.layerParameters = this.getLayerParameters(layer, layerIndex, viewport);\n }\n drawLayerParams[layerIndex] = layerParam;\n }\n return drawLayerParams;\n }\n\n // Draws a list of layers in one viewport\n // TODO - when picking we could completely skip rendering viewports that dont\n // intersect with the picking rect\n /* eslint-disable max-depth, max-statements */\n private _drawLayersInViewport(\n gl,\n {layers, moduleParameters: globalModuleParameters, pass, target, viewport, view},\n drawLayerParams\n ): RenderStats {\n const glViewport = getGLViewport(gl, {\n moduleParameters: globalModuleParameters,\n target,\n viewport\n });\n\n if (view && view.props.clear) {\n const clearOpts = view.props.clear === true ? {color: true, depth: true} : view.props.clear;\n withParameters(\n gl,\n {\n scissorTest: true,\n scissor: glViewport\n },\n () => clear(gl, clearOpts)\n );\n }\n\n // render layers in normal colors\n const renderStatus = {\n totalCount: layers.length,\n visibleCount: 0,\n compositeCount: 0,\n pickableCount: 0\n };\n\n setParameters(gl, {viewport: glViewport});\n\n // render layers in normal colors\n for (let layerIndex = 0; layerIndex < layers.length; layerIndex++) {\n const layer = layers[layerIndex];\n const {shouldDrawLayer, layerRenderIndex, moduleParameters, layerParameters} =\n drawLayerParams[layerIndex];\n\n // Calculate stats\n if (shouldDrawLayer && layer.props.pickable) {\n renderStatus.pickableCount++;\n }\n if (layer.isComposite) {\n renderStatus.compositeCount++;\n } else if (shouldDrawLayer) {\n // Draw the layer\n renderStatus.visibleCount++;\n\n this._lastRenderIndex = Math.max(this._lastRenderIndex, layerRenderIndex);\n\n // overwrite layer.context.viewport with the sub viewport\n moduleParameters.viewport = viewport;\n\n try {\n layer._drawLayer({\n moduleParameters,\n uniforms: {layerIndex: layerRenderIndex},\n parameters: layerParameters\n });\n } catch (err) {\n layer.raiseError(err, `drawing ${layer} to ${pass}`);\n }\n }\n }\n\n return renderStatus;\n }\n /* eslint-enable max-depth, max-statements */\n\n /* Methods for subclass overrides */\n protected shouldDrawLayer(layer: Layer): boolean {\n return true;\n }\n\n protected getModuleParameters(layer: Layer, effects?: Effect[]): any {\n return null;\n }\n\n protected getLayerParameters(layer: Layer, layerIndex: number, viewport: Viewport): any {\n return layer.props.parameters;\n }\n\n /* Private */\n private _shouldDrawLayer(\n layer: Layer,\n drawContext: FilterContext,\n layerFilter: ((params: FilterContext) => boolean) | undefined,\n layerFilterCache: Record\n ) {\n const shouldDrawLayer = layer.props.visible && this.shouldDrawLayer(layer);\n\n if (!shouldDrawLayer) {\n return false;\n }\n\n drawContext.layer = layer;\n\n let parent = layer.parent as Layer;\n while (parent) {\n // @ts-ignore\n if (!parent.props.visible || !parent.filterSubLayer(drawContext)) {\n return false;\n }\n drawContext.layer = parent;\n parent = parent.parent as Layer;\n }\n\n if (layerFilter) {\n const rootLayerId = drawContext.layer.id;\n if (!(rootLayerId in layerFilterCache)) {\n layerFilterCache[rootLayerId] = layerFilter(drawContext);\n }\n if (!layerFilterCache[rootLayerId]) {\n return false;\n }\n }\n\n // If a layer is drawn, update its viewportChanged flag\n layer.activateViewport(drawContext.viewport);\n\n return true;\n }\n\n private _getModuleParameters(\n layer: Layer,\n effects: Effect[] | undefined,\n pass: string,\n overrides: any\n ): any {\n const moduleParameters = Object.assign(\n Object.create(layer.internalState?.propsInTransition || layer.props),\n {\n autoWrapLongitude: layer.wrapLongitude,\n // @ts-ignore\n viewport: layer.context.viewport,\n // @ts-ignore\n mousePosition: layer.context.mousePosition,\n pickingActive: 0,\n devicePixelRatio: cssToDeviceRatio(this.gl)\n }\n );\n\n if (effects) {\n for (const effect of effects) {\n Object.assign(moduleParameters, effect.getModuleParameters?.(layer));\n }\n }\n\n return Object.assign(moduleParameters, this.getModuleParameters(layer, effects), overrides);\n }\n}\n\n// If the _index prop is defined, return a layer index that's relative to its parent\n// Otherwise return the index of the layer among all rendered layers\n// This is done recursively, i.e. if the user overrides a layer's default index,\n// all its descendants will be resolved relative to that index.\n// This implementation assumes that parent layers always appear before its children\n// which is true if the layer array comes from the LayerManager\nexport function layerIndexResolver(\n startIndex: number = 0,\n layerIndices: Record = {}\n): (layer: Layer, isDrawn: boolean) => number {\n const resolvers = {};\n\n const resolveLayerIndex = (layer, isDrawn) => {\n const indexOverride = layer.props._offset;\n const layerId = layer.id;\n const parentId = layer.parent && layer.parent.id;\n\n let index;\n\n if (parentId && !(parentId in layerIndices)) {\n // Populate layerIndices with the parent layer's index\n resolveLayerIndex(layer.parent, false);\n }\n\n if (parentId in resolvers) {\n const resolver = (resolvers[parentId] =\n resolvers[parentId] || layerIndexResolver(layerIndices[parentId], layerIndices));\n index = resolver(layer, isDrawn);\n resolvers[layerId] = resolver;\n } else if (Number.isFinite(indexOverride)) {\n index = indexOverride + (layerIndices[parentId] || 0);\n // Mark layer as needing its own resolver\n // We don't actually create it until it's used for the first time\n resolvers[layerId] = null;\n } else {\n index = startIndex;\n }\n\n if (isDrawn && index >= startIndex) {\n startIndex = index + 1;\n }\n\n layerIndices[layerId] = index;\n return index;\n };\n return resolveLayerIndex;\n}\n\n// Convert viewport top-left CSS coordinates to bottom up WebGL coordinates\nfunction getGLViewport(\n gl,\n {\n moduleParameters,\n target,\n viewport\n }: {\n moduleParameters: any;\n target?: Framebuffer;\n viewport: Viewport;\n }\n): [number, number, number, number] {\n const useTarget = target && target.id !== 'default-framebuffer';\n const pixelRatio =\n (moduleParameters && moduleParameters.devicePixelRatio) || cssToDeviceRatio(gl);\n\n // Default framebuffer is used when writing to canvas\n const height = useTarget ? target.height : gl.drawingBufferHeight;\n\n // Convert viewport top-left CSS coordinates to bottom up WebGL coordinates\n const dimensions = viewport;\n return [\n dimensions.x * pixelRatio,\n height - (dimensions.y + dimensions.height) * pixelRatio,\n dimensions.width * pixelRatio,\n dimensions.height * pixelRatio\n ];\n}\n\nfunction clearGLCanvas(gl: WebGLRenderingContext) {\n const width = gl.drawingBufferWidth;\n const height = gl.drawingBufferHeight;\n // clear depth and color buffers, restoring transparency\n setParameters(gl, {viewport: [0, 0, width, height]});\n gl.clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT);\n}\n","import { getWebGL2Context, assertWebGL2Context, log } from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Texture2D from './texture-2d';\nimport Renderbuffer from './renderbuffer';\nimport { clear, clearBuffer } from './clear';\nimport { copyToDataUrl } from './copy-and-blit.js';\nimport { getFeatures } from '../features';\nimport { getKey } from '../webgl-utils/constants-to-keys';\nimport { assert } from '../utils/assert';\nconst ERR_MULTIPLE_RENDERTARGETS = 'Multiple render targets not supported';\nexport default class Framebuffer extends Resource {\n get [Symbol.toStringTag]() {\n return 'Framebuffer';\n }\n\n static isSupported(gl) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n colorBufferFloat,\n colorBufferHalfFloat\n } = options;\n let supported = true;\n\n if (colorBufferFloat) {\n supported = Boolean(gl.getExtension('EXT_color_buffer_float') || gl.getExtension('WEBGL_color_buffer_float') || gl.getExtension('OES_texture_float'));\n }\n\n if (colorBufferHalfFloat) {\n supported = supported && Boolean(gl.getExtension('EXT_color_buffer_float') || gl.getExtension('EXT_color_buffer_half_float'));\n }\n\n return supported;\n }\n\n static getDefaultFramebuffer(gl) {\n gl.luma = gl.luma || {};\n gl.luma.defaultFramebuffer = gl.luma.defaultFramebuffer || new Framebuffer(gl, {\n id: 'default-framebuffer',\n handle: null,\n attachments: {}\n });\n return gl.luma.defaultFramebuffer;\n }\n\n get MAX_COLOR_ATTACHMENTS() {\n const gl2 = assertWebGL2Context(this.gl);\n return gl2.getParameter(gl2.MAX_COLOR_ATTACHMENTS);\n }\n\n get MAX_DRAW_BUFFERS() {\n const gl2 = assertWebGL2Context(this.gl);\n return gl2.getParameter(gl2.MAX_DRAW_BUFFERS);\n }\n\n constructor(gl) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(gl, opts);\n this.width = null;\n this.height = null;\n this.attachments = {};\n this.readBuffer = 36064;\n this.drawBuffers = [36064];\n this.ownResources = [];\n this.initialize(opts);\n Object.seal(this);\n }\n\n get color() {\n return this.attachments[36064] || null;\n }\n\n get texture() {\n return this.attachments[36064] || null;\n }\n\n get depth() {\n return this.attachments[36096] || this.attachments[33306] || null;\n }\n\n get stencil() {\n return this.attachments[36128] || this.attachments[33306] || null;\n }\n\n initialize(_ref) {\n let {\n width = 1,\n height = 1,\n attachments = null,\n color = true,\n depth = true,\n stencil = false,\n check = true,\n readBuffer = undefined,\n drawBuffers = undefined\n } = _ref;\n assert(width >= 0 && height >= 0, 'Width and height need to be integers');\n this.width = width;\n this.height = height;\n\n if (attachments) {\n for (const attachment in attachments) {\n const target = attachments[attachment];\n const object = Array.isArray(target) ? target[0] : target;\n object.resize({\n width,\n height\n });\n }\n } else {\n attachments = this._createDefaultAttachments(color, depth, stencil, width, height);\n }\n\n this.update({\n clearAttachments: true,\n attachments,\n readBuffer,\n drawBuffers\n });\n\n if (attachments && check) {\n this.checkStatus();\n }\n }\n\n delete() {\n for (const resource of this.ownResources) {\n resource.delete();\n }\n\n super.delete();\n return this;\n }\n\n update(_ref2) {\n let {\n attachments = {},\n readBuffer,\n drawBuffers,\n clearAttachments = false,\n resizeAttachments = true\n } = _ref2;\n this.attach(attachments, {\n clearAttachments,\n resizeAttachments\n });\n const {\n gl\n } = this;\n const prevHandle = gl.bindFramebuffer(36160, this.handle);\n\n if (readBuffer) {\n this._setReadBuffer(readBuffer);\n }\n\n if (drawBuffers) {\n this._setDrawBuffers(drawBuffers);\n }\n\n gl.bindFramebuffer(36160, prevHandle || null);\n return this;\n }\n\n resize() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let {\n width,\n height\n } = options;\n\n if (this.handle === null) {\n assert(width === undefined && height === undefined);\n this.width = this.gl.drawingBufferWidth;\n this.height = this.gl.drawingBufferHeight;\n return this;\n }\n\n if (width === undefined) {\n width = this.gl.drawingBufferWidth;\n }\n\n if (height === undefined) {\n height = this.gl.drawingBufferHeight;\n }\n\n if (width !== this.width && height !== this.height) {\n log.log(2, \"Resizing framebuffer \".concat(this.id, \" to \").concat(width, \"x\").concat(height))();\n }\n\n for (const attachmentPoint in this.attachments) {\n this.attachments[attachmentPoint].resize({\n width,\n height\n });\n }\n\n this.width = width;\n this.height = height;\n return this;\n }\n\n attach(attachments) {\n let {\n clearAttachments = false,\n resizeAttachments = true\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const newAttachments = {};\n\n if (clearAttachments) {\n Object.keys(this.attachments).forEach(key => {\n newAttachments[key] = null;\n });\n }\n\n Object.assign(newAttachments, attachments);\n const prevHandle = this.gl.bindFramebuffer(36160, this.handle);\n\n for (const key in newAttachments) {\n assert(key !== undefined, 'Misspelled framebuffer binding point?');\n const attachment = Number(key);\n const descriptor = newAttachments[attachment];\n let object = descriptor;\n\n if (!object) {\n this._unattach(attachment);\n } else if (object instanceof Renderbuffer) {\n this._attachRenderbuffer({\n attachment,\n renderbuffer: object\n });\n } else if (Array.isArray(descriptor)) {\n const [texture, layer = 0, level = 0] = descriptor;\n object = texture;\n\n this._attachTexture({\n attachment,\n texture,\n layer,\n level\n });\n } else {\n this._attachTexture({\n attachment,\n texture: object,\n layer: 0,\n level: 0\n });\n }\n\n if (resizeAttachments && object) {\n object.resize({\n width: this.width,\n height: this.height\n });\n }\n }\n\n this.gl.bindFramebuffer(36160, prevHandle || null);\n Object.assign(this.attachments, attachments);\n Object.keys(this.attachments).filter(key => !this.attachments[key]).forEach(key => {\n delete this.attachments[key];\n });\n }\n\n checkStatus() {\n const {\n gl\n } = this;\n const status = this.getStatus();\n\n if (status !== 36053) {\n throw new Error(_getFrameBufferStatus(status));\n }\n\n return this;\n }\n\n getStatus() {\n const {\n gl\n } = this;\n const prevHandle = gl.bindFramebuffer(36160, this.handle);\n const status = gl.checkFramebufferStatus(36160);\n gl.bindFramebuffer(36160, prevHandle || null);\n return status;\n }\n\n clear() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n color,\n depth,\n stencil,\n drawBuffers = []\n } = options;\n const prevHandle = this.gl.bindFramebuffer(36160, this.handle);\n\n if (color || depth || stencil) {\n clear(this.gl, {\n color,\n depth,\n stencil\n });\n }\n\n drawBuffers.forEach((value, drawBuffer) => {\n clearBuffer(this.gl, {\n drawBuffer,\n value\n });\n });\n this.gl.bindFramebuffer(36160, prevHandle || null);\n return this;\n }\n\n readPixels() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n log.error('Framebuffer.readPixels() is no logner supported, use readPixelsToArray(framebuffer)')();\n return null;\n }\n\n readPixelsToBuffer() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n log.error('Framebuffer.readPixelsToBuffer()is no logner supported, use readPixelsToBuffer(framebuffer)')();\n return null;\n }\n\n copyToDataUrl() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n log.error('Framebuffer.copyToDataUrl() is no logner supported, use copyToDataUrl(framebuffer)')();\n return null;\n }\n\n copyToImage() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n log.error('Framebuffer.copyToImage() is no logner supported, use copyToImage(framebuffer)')();\n return null;\n }\n\n copyToTexture() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n log.error('Framebuffer.copyToTexture({...}) is no logner supported, use copyToTexture(source, target, opts})')();\n return null;\n }\n\n blit() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n log.error('Framebuffer.blit({...}) is no logner supported, use blit(source, target, opts)')();\n return null;\n }\n\n invalidate(_ref3) {\n let {\n attachments = [],\n x = 0,\n y = 0,\n width,\n height\n } = _ref3;\n const gl2 = assertWebGL2Context(this.gl);\n const prevHandle = gl2.bindFramebuffer(36008, this.handle);\n const invalidateAll = x === 0 && y === 0 && width === undefined && height === undefined;\n\n if (invalidateAll) {\n gl2.invalidateFramebuffer(36008, attachments);\n } else {\n gl2.invalidateFramebuffer(36008, attachments, x, y, width, height);\n }\n\n gl2.bindFramebuffer(36008, prevHandle);\n return this;\n }\n\n getAttachmentParameter(attachment, pname, keys) {\n let value = this._getAttachmentParameterFallback(pname);\n\n if (value === null) {\n this.gl.bindFramebuffer(36160, this.handle);\n value = this.gl.getFramebufferAttachmentParameter(36160, attachment, pname);\n this.gl.bindFramebuffer(36160, null);\n }\n\n if (keys && value > 1000) {\n value = getKey(this.gl, value);\n }\n\n return value;\n }\n\n getAttachmentParameters() {\n let attachment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 36064;\n let keys = arguments.length > 1 ? arguments[1] : undefined;\n let parameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.constructor.ATTACHMENT_PARAMETERS || [];\n const values = {};\n\n for (const pname of parameters) {\n const key = keys ? getKey(this.gl, pname) : pname;\n values[key] = this.getAttachmentParameter(attachment, pname, keys);\n }\n\n return values;\n }\n\n getParameters() {\n let keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n const attachments = Object.keys(this.attachments);\n const parameters = {};\n\n for (const attachmentName of attachments) {\n const attachment = Number(attachmentName);\n const key = keys ? getKey(this.gl, attachment) : attachment;\n parameters[key] = this.getAttachmentParameters(attachment, keys);\n }\n\n return parameters;\n }\n\n show() {\n if (typeof window !== 'undefined') {\n window.open(copyToDataUrl(this), 'luma-debug-texture');\n }\n\n return this;\n }\n\n log() {\n let logLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n if (logLevel > log.level || typeof window === 'undefined') {\n return this;\n }\n\n message = message || \"Framebuffer \".concat(this.id);\n const image = copyToDataUrl(this, {\n targetMaxHeight: 100\n });\n log.image({\n logLevel,\n message,\n image\n }, message)();\n return this;\n }\n\n bind() {\n let {\n target = 36160\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.gl.bindFramebuffer(target, this.handle);\n return this;\n }\n\n unbind() {\n let {\n target = 36160\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.gl.bindFramebuffer(target, null);\n return this;\n }\n\n _createDefaultAttachments(color, depth, stencil, width, height) {\n let defaultAttachments = null;\n\n if (color) {\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[36064] = new Texture2D(this.gl, {\n id: \"\".concat(this.id, \"-color0\"),\n pixels: null,\n format: 6408,\n type: 5121,\n width,\n height,\n mipmaps: false,\n parameters: {\n [10241]: 9729,\n [10240]: 9729,\n [10242]: 33071,\n [10243]: 33071\n }\n });\n this.ownResources.push(defaultAttachments[36064]);\n }\n\n if (depth && stencil) {\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[33306] = new Renderbuffer(this.gl, {\n id: \"\".concat(this.id, \"-depth-stencil\"),\n format: 35056,\n width,\n height: 111\n });\n this.ownResources.push(defaultAttachments[33306]);\n } else if (depth) {\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[36096] = new Renderbuffer(this.gl, {\n id: \"\".concat(this.id, \"-depth\"),\n format: 33189,\n width,\n height\n });\n this.ownResources.push(defaultAttachments[36096]);\n } else if (stencil) {\n assert(false);\n }\n\n return defaultAttachments;\n }\n\n _unattach(attachment) {\n const oldAttachment = this.attachments[attachment];\n\n if (!oldAttachment) {\n return;\n }\n\n if (oldAttachment instanceof Renderbuffer) {\n this.gl.framebufferRenderbuffer(36160, attachment, 36161, null);\n } else {\n this.gl.framebufferTexture2D(36160, attachment, 3553, null, 0);\n }\n\n delete this.attachments[attachment];\n }\n\n _attachRenderbuffer(_ref4) {\n let {\n attachment = 36064,\n renderbuffer\n } = _ref4;\n const {\n gl\n } = this;\n gl.framebufferRenderbuffer(36160, attachment, 36161, renderbuffer.handle);\n this.attachments[attachment] = renderbuffer;\n }\n\n _attachTexture(_ref5) {\n let {\n attachment = 36064,\n texture,\n layer,\n level\n } = _ref5;\n const {\n gl\n } = this;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case 35866:\n case 32879:\n const gl2 = assertWebGL2Context(gl);\n gl2.framebufferTextureLayer(36160, attachment, texture.target, level, layer);\n break;\n\n case 34067:\n const face = mapIndexToCubeMapFace(layer);\n gl.framebufferTexture2D(36160, attachment, face, texture.handle, level);\n break;\n\n case 3553:\n gl.framebufferTexture2D(36160, attachment, 3553, texture.handle, level);\n break;\n\n default:\n assert(false, 'Illegal texture type');\n }\n\n gl.bindTexture(texture.target, null);\n this.attachments[attachment] = texture;\n }\n\n _setReadBuffer(readBuffer) {\n const gl2 = getWebGL2Context(this.gl);\n\n if (gl2) {\n gl2.readBuffer(readBuffer);\n } else {\n assert(readBuffer === 36064 || readBuffer === 1029, ERR_MULTIPLE_RENDERTARGETS);\n }\n\n this.readBuffer = readBuffer;\n }\n\n _setDrawBuffers(drawBuffers) {\n const {\n gl\n } = this;\n const gl2 = assertWebGL2Context(gl);\n\n if (gl2) {\n gl2.drawBuffers(drawBuffers);\n } else {\n const ext = gl.getExtension('WEBGL_draw_buffers');\n\n if (ext) {\n ext.drawBuffersWEBGL(drawBuffers);\n } else {\n assert(drawBuffers.length === 1 && (drawBuffers[0] === 36064 || drawBuffers[0] === 1029), ERR_MULTIPLE_RENDERTARGETS);\n }\n }\n\n this.drawBuffers = drawBuffers;\n }\n\n _getAttachmentParameterFallback(pname) {\n const caps = getFeatures(this.gl);\n\n switch (pname) {\n case 36052:\n return !caps.WEBGL2 ? 0 : null;\n\n case 33298:\n case 33299:\n case 33300:\n case 33301:\n case 33302:\n case 33303:\n return !caps.WEBGL2 ? 8 : null;\n\n case 33297:\n return !caps.WEBGL2 ? 5125 : null;\n\n case 33296:\n return !caps.WEBGL2 && !caps.EXT_sRGB ? 9729 : null;\n\n default:\n return null;\n }\n }\n\n _createHandle() {\n return this.gl.createFramebuffer();\n }\n\n _deleteHandle() {\n this.gl.deleteFramebuffer(this.handle);\n }\n\n _bindHandle(handle) {\n return this.gl.bindFramebuffer(36160, handle);\n }\n\n}\n\nfunction mapIndexToCubeMapFace(layer) {\n return layer < 34069 ? layer + 34069 : layer;\n}\n\nfunction _getFrameBufferStatus(status) {\n const STATUS = Framebuffer.STATUS || {};\n return STATUS[status] || \"Framebuffer error \".concat(status);\n}\n\nexport const FRAMEBUFFER_ATTACHMENT_PARAMETERS = [36049, 36048, 33296, 33298, 33299, 33300, 33301, 33302, 33303];\nFramebuffer.ATTACHMENT_PARAMETERS = FRAMEBUFFER_ATTACHMENT_PARAMETERS;\n//# sourceMappingURL=framebuffer.js.map","import type {Timeline} from '@luma.gl/core';\n\nexport type TransitionSettings = {\n duration: number;\n onStart?: (transition: Transition) => void;\n onUpdate?: (transition: Transition) => void;\n onInterrupt?: (transition: Transition) => void;\n onEnd?: (transition: Transition) => void;\n};\n\nexport default class Transition {\n private _inProgress: boolean;\n private _handle: number | null;\n private _timeline: Timeline;\n\n time: number;\n settings: TransitionSettings;\n\n /**\n * @params timeline {Timeline}\n */\n constructor(timeline: Timeline) {\n this._inProgress = false;\n this._handle = null;\n this._timeline = timeline;\n this.time = 0;\n\n // Defaults\n this.settings = {duration: 0};\n }\n\n /* Public API */\n get inProgress(): boolean {\n return this._inProgress;\n }\n\n /**\n * (re)start this transition.\n * @params props {object} - optional overriding props. see constructor\n */\n start(settings: TransitionSettings) {\n this.cancel();\n this.settings = settings;\n this._inProgress = true;\n this.settings.onStart?.(this);\n }\n\n /**\n * end this transition if it is in progress.\n */\n end() {\n if (this._inProgress) {\n this._timeline.removeChannel(this._handle);\n this._handle = null;\n this._inProgress = false;\n this.settings.onEnd?.(this);\n }\n }\n\n /**\n * cancel this transition if it is in progress.\n */\n cancel() {\n if (this._inProgress) {\n this.settings.onInterrupt?.(this);\n this._timeline.removeChannel(this._handle);\n this._handle = null;\n this._inProgress = false;\n }\n }\n\n /**\n * update this transition. Returns `true` if updated.\n */\n update() {\n if (!this._inProgress) {\n return false;\n }\n\n // It is important to initialize the handle during `update` instead of `start`.\n // The CPU time that the `start` frame takes should not be counted towards the duration.\n // On the other hand, `update` always happens during a render cycle. The clock starts when the\n // transition is rendered for the first time.\n if (this._handle === null) {\n const {_timeline: timeline, settings} = this;\n this._handle = timeline.addChannel({\n delay: timeline.getTime(),\n duration: settings.duration\n });\n }\n\n this.time = this._timeline.getTime(this._handle);\n // Call subclass method\n this._onUpdate();\n // Call user callback\n this.settings.onUpdate?.(this);\n\n // This only works if `settings.duration` is set\n // Spring transition must call `end` manually\n if (this._timeline.isFinished(this._handle)) {\n this.end();\n }\n return true;\n }\n\n /* Private API */\n\n protected _onUpdate() {\n // for subclass override\n }\n}\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport getHiResTimestamp from '../utils/hi-res-timestamp';\nexport default class Stat {\n constructor(name, type) {\n _defineProperty(this, \"name\", void 0);\n\n _defineProperty(this, \"type\", void 0);\n\n _defineProperty(this, \"sampleSize\", 1);\n\n _defineProperty(this, \"time\", void 0);\n\n _defineProperty(this, \"count\", void 0);\n\n _defineProperty(this, \"samples\", void 0);\n\n _defineProperty(this, \"lastTiming\", void 0);\n\n _defineProperty(this, \"lastSampleTime\", void 0);\n\n _defineProperty(this, \"lastSampleCount\", void 0);\n\n _defineProperty(this, \"_count\", 0);\n\n _defineProperty(this, \"_time\", 0);\n\n _defineProperty(this, \"_samples\", 0);\n\n _defineProperty(this, \"_startTime\", 0);\n\n _defineProperty(this, \"_timerPending\", false);\n\n this.name = name;\n this.type = type;\n this.reset();\n }\n\n setSampleSize(samples) {\n this.sampleSize = samples;\n return this;\n }\n\n incrementCount() {\n this.addCount(1);\n return this;\n }\n\n decrementCount() {\n this.subtractCount(1);\n return this;\n }\n\n addCount(value) {\n this._count += value;\n this._samples++;\n\n this._checkSampling();\n\n return this;\n }\n\n subtractCount(value) {\n this._count -= value;\n this._samples++;\n\n this._checkSampling();\n\n return this;\n }\n\n addTime(time) {\n this._time += time;\n this.lastTiming = time;\n this._samples++;\n\n this._checkSampling();\n\n return this;\n }\n\n timeStart() {\n this._startTime = getHiResTimestamp();\n this._timerPending = true;\n return this;\n }\n\n timeEnd() {\n if (!this._timerPending) {\n return this;\n }\n\n this.addTime(getHiResTimestamp() - this._startTime);\n this._timerPending = false;\n\n this._checkSampling();\n\n return this;\n }\n\n getSampleAverageCount() {\n return this.sampleSize > 0 ? this.lastSampleCount / this.sampleSize : 0;\n }\n\n getSampleAverageTime() {\n return this.sampleSize > 0 ? this.lastSampleTime / this.sampleSize : 0;\n }\n\n getSampleHz() {\n return this.lastSampleTime > 0 ? this.sampleSize / (this.lastSampleTime / 1000) : 0;\n }\n\n getAverageCount() {\n return this.samples > 0 ? this.count / this.samples : 0;\n }\n\n getAverageTime() {\n return this.samples > 0 ? this.time / this.samples : 0;\n }\n\n getHz() {\n return this.time > 0 ? this.samples / (this.time / 1000) : 0;\n }\n\n reset() {\n this.time = 0;\n this.count = 0;\n this.samples = 0;\n this.lastTiming = 0;\n this.lastSampleTime = 0;\n this.lastSampleCount = 0;\n this._count = 0;\n this._time = 0;\n this._samples = 0;\n this._startTime = 0;\n this._timerPending = false;\n return this;\n }\n\n _checkSampling() {\n if (this._samples === this.sampleSize) {\n this.lastSampleTime = this._time;\n this.lastSampleCount = this._count;\n this.count += this._count;\n this.time += this._time;\n this.samples += this._samples;\n this._time = 0;\n this._count = 0;\n this._samples = 0;\n }\n }\n\n}\n//# sourceMappingURL=stat.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Stat from './stat';\nexport default class Stats {\n constructor(options) {\n _defineProperty(this, \"id\", void 0);\n\n _defineProperty(this, \"stats\", {});\n\n this.id = options.id;\n this.stats = {};\n\n this._initializeStats(options.stats);\n\n Object.seal(this);\n }\n\n get(name) {\n let type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'count';\n return this._getOrCreate({\n name,\n type\n });\n }\n\n get size() {\n return Object.keys(this.stats).length;\n }\n\n reset() {\n for (const key in this.stats) {\n this.stats[key].reset();\n }\n\n return this;\n }\n\n forEach(fn) {\n for (const key in this.stats) {\n fn(this.stats[key]);\n }\n }\n\n getTable() {\n const table = {};\n this.forEach(stat => {\n table[stat.name] = {\n time: stat.time || 0,\n count: stat.count || 0,\n average: stat.getAverageTime() || 0,\n hz: stat.getHz() || 0\n };\n });\n return table;\n }\n\n _initializeStats() {\n let stats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n stats.forEach(stat => this._getOrCreate(stat));\n }\n\n _getOrCreate(stat) {\n if (!stat || !stat.name) {\n return null;\n }\n\n const {\n name,\n type\n } = stat;\n\n if (!this.stats[name]) {\n if (stat instanceof Stat) {\n this.stats[name] = stat;\n } else {\n this.stats[name] = new Stat(name, type);\n }\n }\n\n return this.stats[name];\n }\n\n}\n//# sourceMappingURL=stats.js.map","export { default as Stats } from './lib/stats';\nexport { default as Stat } from './lib/stat';\nexport { default as _getHiResTimestamp } from './utils/hi-res-timestamp';\n//# sourceMappingURL=index.js.map","export const VERTEX_SHADER = 'vs';\nexport const FRAGMENT_SHADER = 'fs';\n//# sourceMappingURL=constants.js.map","import Matrix from './base/matrix';\nimport { checkVector } from '../lib/validators';\nimport { vec2_transformMat4AsVector, vec3_transformMat4AsVector } from '../lib/gl-matrix-extras';\nimport * as mat4 from 'gl-matrix/mat4';\nimport * as vec2 from 'gl-matrix/vec2';\nimport * as vec3 from 'gl-matrix/vec3';\nimport * as vec4 from 'gl-matrix/vec4';\nvar INDICES;\n\n(function (INDICES) {\n INDICES[INDICES[\"COL0ROW0\"] = 0] = \"COL0ROW0\";\n INDICES[INDICES[\"COL0ROW1\"] = 1] = \"COL0ROW1\";\n INDICES[INDICES[\"COL0ROW2\"] = 2] = \"COL0ROW2\";\n INDICES[INDICES[\"COL0ROW3\"] = 3] = \"COL0ROW3\";\n INDICES[INDICES[\"COL1ROW0\"] = 4] = \"COL1ROW0\";\n INDICES[INDICES[\"COL1ROW1\"] = 5] = \"COL1ROW1\";\n INDICES[INDICES[\"COL1ROW2\"] = 6] = \"COL1ROW2\";\n INDICES[INDICES[\"COL1ROW3\"] = 7] = \"COL1ROW3\";\n INDICES[INDICES[\"COL2ROW0\"] = 8] = \"COL2ROW0\";\n INDICES[INDICES[\"COL2ROW1\"] = 9] = \"COL2ROW1\";\n INDICES[INDICES[\"COL2ROW2\"] = 10] = \"COL2ROW2\";\n INDICES[INDICES[\"COL2ROW3\"] = 11] = \"COL2ROW3\";\n INDICES[INDICES[\"COL3ROW0\"] = 12] = \"COL3ROW0\";\n INDICES[INDICES[\"COL3ROW1\"] = 13] = \"COL3ROW1\";\n INDICES[INDICES[\"COL3ROW2\"] = 14] = \"COL3ROW2\";\n INDICES[INDICES[\"COL3ROW3\"] = 15] = \"COL3ROW3\";\n})(INDICES || (INDICES = {}));\n\nconst DEFAULT_FOVY = 45 * Math.PI / 180;\nconst DEFAULT_ASPECT = 1;\nconst DEFAULT_NEAR = 0.1;\nconst DEFAULT_FAR = 500;\nconst IDENTITY_MATRIX = Object.freeze([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\nexport default class Matrix4 extends Matrix {\n static get IDENTITY() {\n return getIdentityMatrix();\n }\n\n static get ZERO() {\n return getZeroMatrix();\n }\n\n get ELEMENTS() {\n return 16;\n }\n\n get RANK() {\n return 4;\n }\n\n get INDICES() {\n return INDICES;\n }\n\n constructor(array) {\n super(-0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0);\n\n if (arguments.length === 1 && Array.isArray(array)) {\n this.copy(array);\n } else {\n this.identity();\n }\n }\n\n copy(array) {\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n this[3] = array[3];\n this[4] = array[4];\n this[5] = array[5];\n this[6] = array[6];\n this[7] = array[7];\n this[8] = array[8];\n this[9] = array[9];\n this[10] = array[10];\n this[11] = array[11];\n this[12] = array[12];\n this[13] = array[13];\n this[14] = array[14];\n this[15] = array[15];\n return this.check();\n }\n\n set(m00, m10, m20, m30, m01, m11, m21, m31, m02, m12, m22, m32, m03, m13, m23, m33) {\n this[0] = m00;\n this[1] = m10;\n this[2] = m20;\n this[3] = m30;\n this[4] = m01;\n this[5] = m11;\n this[6] = m21;\n this[7] = m31;\n this[8] = m02;\n this[9] = m12;\n this[10] = m22;\n this[11] = m32;\n this[12] = m03;\n this[13] = m13;\n this[14] = m23;\n this[15] = m33;\n return this.check();\n }\n\n setRowMajor(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n this[0] = m00;\n this[1] = m10;\n this[2] = m20;\n this[3] = m30;\n this[4] = m01;\n this[5] = m11;\n this[6] = m21;\n this[7] = m31;\n this[8] = m02;\n this[9] = m12;\n this[10] = m22;\n this[11] = m32;\n this[12] = m03;\n this[13] = m13;\n this[14] = m23;\n this[15] = m33;\n return this.check();\n }\n\n toRowMajor(result) {\n result[0] = this[0];\n result[1] = this[4];\n result[2] = this[8];\n result[3] = this[12];\n result[4] = this[1];\n result[5] = this[5];\n result[6] = this[9];\n result[7] = this[13];\n result[8] = this[2];\n result[9] = this[6];\n result[10] = this[10];\n result[11] = this[14];\n result[12] = this[3];\n result[13] = this[7];\n result[14] = this[11];\n result[15] = this[15];\n return result;\n }\n\n identity() {\n return this.copy(IDENTITY_MATRIX);\n }\n\n fromObject(object) {\n return this.check();\n }\n\n fromQuaternion(quaternion) {\n mat4.fromQuat(this, quaternion);\n return this.check();\n }\n\n frustum(view) {\n const {\n left,\n right,\n bottom,\n top,\n near = DEFAULT_NEAR,\n far = DEFAULT_FAR\n } = view;\n\n if (far === Infinity) {\n computeInfinitePerspectiveOffCenter(this, left, right, bottom, top, near);\n } else {\n mat4.frustum(this, left, right, bottom, top, near, far);\n }\n\n return this.check();\n }\n\n lookAt(view) {\n const {\n eye,\n center = [0, 0, 0],\n up = [0, 1, 0]\n } = view;\n mat4.lookAt(this, eye, center, up);\n return this.check();\n }\n\n ortho(view) {\n const {\n left,\n right,\n bottom,\n top,\n near = DEFAULT_NEAR,\n far = DEFAULT_FAR\n } = view;\n mat4.ortho(this, left, right, bottom, top, near, far);\n return this.check();\n }\n\n orthographic(view) {\n const {\n fovy = DEFAULT_FOVY,\n aspect = DEFAULT_ASPECT,\n focalDistance = 1,\n near = DEFAULT_NEAR,\n far = DEFAULT_FAR\n } = view;\n checkRadians(fovy);\n const halfY = fovy / 2;\n const top = focalDistance * Math.tan(halfY);\n const right = top * aspect;\n return this.ortho({\n left: -right,\n right,\n bottom: -top,\n top,\n near,\n far\n });\n }\n\n perspective(view) {\n const {\n fovy = 45 * Math.PI / 180,\n aspect = 1,\n near = 0.1,\n far = 500\n } = view;\n checkRadians(fovy);\n mat4.perspective(this, fovy, aspect, near, far);\n return this.check();\n }\n\n determinant() {\n return mat4.determinant(this);\n }\n\n getScale(result = [-0, -0, -0]) {\n result[0] = Math.sqrt(this[0] * this[0] + this[1] * this[1] + this[2] * this[2]);\n result[1] = Math.sqrt(this[4] * this[4] + this[5] * this[5] + this[6] * this[6]);\n result[2] = Math.sqrt(this[8] * this[8] + this[9] * this[9] + this[10] * this[10]);\n return result;\n }\n\n getTranslation(result = [-0, -0, -0]) {\n result[0] = this[12];\n result[1] = this[13];\n result[2] = this[14];\n return result;\n }\n\n getRotation(result, scaleResult) {\n result = result || [-0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0];\n scaleResult = scaleResult || [-0, -0, -0];\n const scale = this.getScale(scaleResult);\n const inverseScale0 = 1 / scale[0];\n const inverseScale1 = 1 / scale[1];\n const inverseScale2 = 1 / scale[2];\n result[0] = this[0] * inverseScale0;\n result[1] = this[1] * inverseScale1;\n result[2] = this[2] * inverseScale2;\n result[3] = 0;\n result[4] = this[4] * inverseScale0;\n result[5] = this[5] * inverseScale1;\n result[6] = this[6] * inverseScale2;\n result[7] = 0;\n result[8] = this[8] * inverseScale0;\n result[9] = this[9] * inverseScale1;\n result[10] = this[10] * inverseScale2;\n result[11] = 0;\n result[12] = 0;\n result[13] = 0;\n result[14] = 0;\n result[15] = 1;\n return result;\n }\n\n getRotationMatrix3(result, scaleResult) {\n result = result || [-0, -0, -0, -0, -0, -0, -0, -0, -0];\n scaleResult = scaleResult || [-0, -0, -0];\n const scale = this.getScale(scaleResult);\n const inverseScale0 = 1 / scale[0];\n const inverseScale1 = 1 / scale[1];\n const inverseScale2 = 1 / scale[2];\n result[0] = this[0] * inverseScale0;\n result[1] = this[1] * inverseScale1;\n result[2] = this[2] * inverseScale2;\n result[3] = this[4] * inverseScale0;\n result[4] = this[5] * inverseScale1;\n result[5] = this[6] * inverseScale2;\n result[6] = this[8] * inverseScale0;\n result[7] = this[9] * inverseScale1;\n result[8] = this[10] * inverseScale2;\n return result;\n }\n\n transpose() {\n mat4.transpose(this, this);\n return this.check();\n }\n\n invert() {\n mat4.invert(this, this);\n return this.check();\n }\n\n multiplyLeft(a) {\n mat4.multiply(this, a, this);\n return this.check();\n }\n\n multiplyRight(a) {\n mat4.multiply(this, this, a);\n return this.check();\n }\n\n rotateX(radians) {\n mat4.rotateX(this, this, radians);\n return this.check();\n }\n\n rotateY(radians) {\n mat4.rotateY(this, this, radians);\n return this.check();\n }\n\n rotateZ(radians) {\n mat4.rotateZ(this, this, radians);\n return this.check();\n }\n\n rotateXYZ(angleXYZ) {\n return this.rotateX(angleXYZ[0]).rotateY(angleXYZ[1]).rotateZ(angleXYZ[2]);\n }\n\n rotateAxis(radians, axis) {\n mat4.rotate(this, this, radians, axis);\n return this.check();\n }\n\n scale(factor) {\n mat4.scale(this, this, Array.isArray(factor) ? factor : [factor, factor, factor]);\n return this.check();\n }\n\n translate(vector) {\n mat4.translate(this, this, vector);\n return this.check();\n }\n\n transform(vector, result) {\n if (vector.length === 4) {\n result = vec4.transformMat4(result || [-0, -0, -0, -0], vector, this);\n checkVector(result, 4);\n return result;\n }\n\n return this.transformAsPoint(vector, result);\n }\n\n transformAsPoint(vector, result) {\n const {\n length\n } = vector;\n let out;\n\n switch (length) {\n case 2:\n out = vec2.transformMat4(result || [-0, -0], vector, this);\n break;\n\n case 3:\n out = vec3.transformMat4(result || [-0, -0, -0], vector, this);\n break;\n\n default:\n throw new Error('Illegal vector');\n }\n\n checkVector(out, vector.length);\n return out;\n }\n\n transformAsVector(vector, result) {\n let out;\n\n switch (vector.length) {\n case 2:\n out = vec2_transformMat4AsVector(result || [-0, -0], vector, this);\n break;\n\n case 3:\n out = vec3_transformMat4AsVector(result || [-0, -0, -0], vector, this);\n break;\n\n default:\n throw new Error('Illegal vector');\n }\n\n checkVector(out, vector.length);\n return out;\n }\n\n transformPoint(vector, result) {\n return this.transformAsPoint(vector, result);\n }\n\n transformVector(vector, result) {\n return this.transformAsPoint(vector, result);\n }\n\n transformDirection(vector, result) {\n return this.transformAsVector(vector, result);\n }\n\n makeRotationX(radians) {\n return this.identity().rotateX(radians);\n }\n\n makeTranslation(x, y, z) {\n return this.identity().translate([x, y, z]);\n }\n\n}\nlet ZERO;\nlet IDENTITY;\n\nfunction getZeroMatrix() {\n if (!ZERO) {\n ZERO = new Matrix4([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\n Object.freeze(ZERO);\n }\n\n return ZERO;\n}\n\nfunction getIdentityMatrix() {\n if (!IDENTITY) {\n IDENTITY = new Matrix4();\n Object.freeze(IDENTITY);\n }\n\n return IDENTITY;\n}\n\nfunction checkRadians(possiblyDegrees) {\n if (possiblyDegrees > Math.PI * 2) {\n throw Error('expected radians');\n }\n}\n\nfunction computeInfinitePerspectiveOffCenter(result, left, right, bottom, top, near) {\n const column0Row0 = 2 * near / (right - left);\n const column1Row1 = 2 * near / (top - bottom);\n const column2Row0 = (right + left) / (right - left);\n const column2Row1 = (top + bottom) / (top - bottom);\n const column2Row2 = -1;\n const column2Row3 = -1;\n const column3Row2 = -2 * near;\n result[0] = column0Row0;\n result[1] = 0;\n result[2] = 0;\n result[3] = 0;\n result[4] = 0;\n result[5] = column1Row1;\n result[6] = 0;\n result[7] = 0;\n result[8] = column2Row0;\n result[9] = column2Row1;\n result[10] = column2Row2;\n result[11] = column2Row3;\n result[12] = 0;\n result[13] = 0;\n result[14] = column3Row2;\n result[15] = 0;\n return result;\n}\n//# sourceMappingURL=matrix4.js.map","import { Log } from '@probe.gl/log';\nexport const log = new Log({\n id: 'loaders.gl'\n});\n//# sourceMappingURL=log.js.map","import { compareArrayBuffers, path } from '@loaders.gl/loader-utils';\nimport { normalizeLoader } from '../loader-utils/normalize-loader';\nimport { log } from '../utils/log';\nimport { getResourceUrlAndType } from '../utils/resource-utils';\nimport { getRegisteredLoaders } from './register-loaders';\nimport { isBlob } from '../../javascript-utils/is-type';\nconst EXT_PATTERN = /\\.([^.]+)$/;\nexport async function selectLoader(data, loaders = [], options, context) {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n let loader = selectLoaderSync(data, loaders, { ...options,\n nothrow: true\n }, context);\n\n if (loader) {\n return loader;\n }\n\n if (isBlob(data)) {\n data = await data.slice(0, 10).arrayBuffer();\n loader = selectLoaderSync(data, loaders, options, context);\n }\n\n if (!loader && !(options !== null && options !== void 0 && options.nothrow)) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\nexport function selectLoaderSync(data, loaders = [], options, context) {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n if (loaders && !Array.isArray(loaders)) {\n return normalizeLoader(loaders);\n }\n\n let candidateLoaders = [];\n\n if (loaders) {\n candidateLoaders = candidateLoaders.concat(loaders);\n }\n\n if (!(options !== null && options !== void 0 && options.ignoreRegisteredLoaders)) {\n candidateLoaders.push(...getRegisteredLoaders());\n }\n\n normalizeLoaders(candidateLoaders);\n const loader = selectLoaderInternal(data, candidateLoaders, options, context);\n\n if (!loader && !(options !== null && options !== void 0 && options.nothrow)) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\n\nfunction selectLoaderInternal(data, loaders, options, context) {\n const {\n url,\n type\n } = getResourceUrlAndType(data);\n const testUrl = url || (context === null || context === void 0 ? void 0 : context.url);\n let loader = null;\n let reason = '';\n\n if (options !== null && options !== void 0 && options.mimeType) {\n loader = findLoaderByMIMEType(loaders, options === null || options === void 0 ? void 0 : options.mimeType);\n reason = \"match forced by supplied MIME type \".concat(options === null || options === void 0 ? void 0 : options.mimeType);\n }\n\n loader = loader || findLoaderByUrl(loaders, testUrl);\n reason = reason || (loader ? \"matched url \".concat(testUrl) : '');\n loader = loader || findLoaderByMIMEType(loaders, type);\n reason = reason || (loader ? \"matched MIME type \".concat(type) : '');\n loader = loader || findLoaderByInitialBytes(loaders, data);\n reason = reason || (loader ? \"matched initial data \".concat(getFirstCharacters(data)) : '');\n loader = loader || findLoaderByMIMEType(loaders, options === null || options === void 0 ? void 0 : options.fallbackMimeType);\n reason = reason || (loader ? \"matched fallback MIME type \".concat(type) : '');\n\n if (reason) {\n var _loader;\n\n log.log(1, \"selectLoader selected \".concat((_loader = loader) === null || _loader === void 0 ? void 0 : _loader.name, \": \").concat(reason, \".\"));\n }\n\n return loader;\n}\n\nfunction validHTTPResponse(data) {\n if (data instanceof Response) {\n if (data.status === 204) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction getNoValidLoaderMessage(data) {\n const {\n url,\n type\n } = getResourceUrlAndType(data);\n let message = 'No valid loader found (';\n message += url ? \"\".concat(path.filename(url), \", \") : 'no url provided, ';\n message += \"MIME type: \".concat(type ? \"\\\"\".concat(type, \"\\\"\") : 'not provided', \", \");\n const firstCharacters = data ? getFirstCharacters(data) : '';\n message += firstCharacters ? \" first bytes: \\\"\".concat(firstCharacters, \"\\\"\") : 'first bytes: not available';\n message += ')';\n return message;\n}\n\nfunction normalizeLoaders(loaders) {\n for (const loader of loaders) {\n normalizeLoader(loader);\n }\n}\n\nfunction findLoaderByUrl(loaders, url) {\n const match = url && EXT_PATTERN.exec(url);\n const extension = match && match[1];\n return extension ? findLoaderByExtension(loaders, extension) : null;\n}\n\nfunction findLoaderByExtension(loaders, extension) {\n extension = extension.toLowerCase();\n\n for (const loader of loaders) {\n for (const loaderExtension of loader.extensions) {\n if (loaderExtension.toLowerCase() === extension) {\n return loader;\n }\n }\n }\n\n return null;\n}\n\nfunction findLoaderByMIMEType(loaders, mimeType) {\n for (const loader of loaders) {\n if (loader.mimeTypes && loader.mimeTypes.includes(mimeType)) {\n return loader;\n }\n\n if (mimeType === \"application/x.\".concat(loader.id)) {\n return loader;\n }\n }\n\n return null;\n}\n\nfunction findLoaderByInitialBytes(loaders, data) {\n if (!data) {\n return null;\n }\n\n for (const loader of loaders) {\n if (typeof data === 'string') {\n if (testDataAgainstText(data, loader)) {\n return loader;\n }\n } else if (ArrayBuffer.isView(data)) {\n if (testDataAgainstBinary(data.buffer, data.byteOffset, loader)) {\n return loader;\n }\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n\n if (testDataAgainstBinary(data, byteOffset, loader)) {\n return loader;\n }\n }\n }\n\n return null;\n}\n\nfunction testDataAgainstText(data, loader) {\n if (loader.testText) {\n return loader.testText(data);\n }\n\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some(test => data.startsWith(test));\n}\n\nfunction testDataAgainstBinary(data, byteOffset, loader) {\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some(test => testBinary(data, byteOffset, loader, test));\n}\n\nfunction testBinary(data, byteOffset, loader, test) {\n if (test instanceof ArrayBuffer) {\n return compareArrayBuffers(test, data, test.byteLength);\n }\n\n switch (typeof test) {\n case 'function':\n return test(data, loader);\n\n case 'string':\n const magic = getMagicString(data, byteOffset, test.length);\n return test === magic;\n\n default:\n return false;\n }\n}\n\nfunction getFirstCharacters(data, length = 5) {\n if (typeof data === 'string') {\n return data.slice(0, length);\n } else if (ArrayBuffer.isView(data)) {\n return getMagicString(data.buffer, data.byteOffset, length);\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n return getMagicString(data, byteOffset, length);\n }\n\n return '';\n}\n\nfunction getMagicString(arrayBuffer, byteOffset, length) {\n if (arrayBuffer.byteLength < byteOffset + length) {\n return '';\n }\n\n const dataView = new DataView(arrayBuffer);\n let magic = '';\n\n for (let i = 0; i < length; i++) {\n magic += String.fromCharCode(dataView.getUint8(byteOffset + i));\n }\n\n return magic;\n}\n//# sourceMappingURL=select-loader.js.map","function isEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (Array.isArray(a)) {\n // Special treatment for arrays: compare 1-level deep\n // This is to support equality of matrix/coordinate props\n const len = a.length;\n if (!b || b.length !== len) {\n return false;\n }\n\n for (let i = 0; i < len; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n\n/**\n * Speed up consecutive function calls by caching the result of calls with identical input\n * https://en.wikipedia.org/wiki/Memoization\n * @param {function} compute - the function to be memoized\n */\nexport default function memoize(compute: (args: In) => Out): (args: In) => Out {\n let cachedArgs: any = {};\n let cachedResult: Out;\n\n return (args: In) => {\n for (const key in args) {\n if (!isEqual(args[key], cachedArgs[key])) {\n cachedResult = compute(args);\n cachedArgs = args;\n break;\n }\n }\n return cachedResult;\n };\n}\n","import { assert } from '../utils/assert';\nconst GL_BYTE = 0x1400;\nconst GL_UNSIGNED_BYTE = 0x1401;\nconst GL_SHORT = 0x1402;\nconst GL_UNSIGNED_SHORT = 0x1403;\nconst GL_POINTS = 0x0;\nconst GL_LINES = 0x1;\nconst GL_LINE_LOOP = 0x2;\nconst GL_LINE_STRIP = 0x3;\nconst GL_TRIANGLES = 0x4;\nconst GL_TRIANGLE_STRIP = 0x5;\nconst GL_TRIANGLE_FAN = 0x6;\nconst GL_FLOAT = 0x1406;\nconst GL_FLOAT_VEC2 = 0x8b50;\nconst GL_FLOAT_VEC3 = 0x8b51;\nconst GL_FLOAT_VEC4 = 0x8b52;\nconst GL_INT = 0x1404;\nconst GL_INT_VEC2 = 0x8b53;\nconst GL_INT_VEC3 = 0x8b54;\nconst GL_INT_VEC4 = 0x8b55;\nconst GL_UNSIGNED_INT = 0x1405;\nconst GL_UNSIGNED_INT_VEC2 = 0x8dc6;\nconst GL_UNSIGNED_INT_VEC3 = 0x8dc7;\nconst GL_UNSIGNED_INT_VEC4 = 0x8dc8;\nconst GL_BOOL = 0x8b56;\nconst GL_BOOL_VEC2 = 0x8b57;\nconst GL_BOOL_VEC3 = 0x8b58;\nconst GL_BOOL_VEC4 = 0x8b59;\nconst GL_FLOAT_MAT2 = 0x8b5a;\nconst GL_FLOAT_MAT3 = 0x8b5b;\nconst GL_FLOAT_MAT4 = 0x8b5c;\nconst GL_FLOAT_MAT2x3 = 0x8b65;\nconst GL_FLOAT_MAT2x4 = 0x8b66;\nconst GL_FLOAT_MAT3x2 = 0x8b67;\nconst GL_FLOAT_MAT3x4 = 0x8b68;\nconst GL_FLOAT_MAT4x2 = 0x8b69;\nconst GL_FLOAT_MAT4x3 = 0x8b6a;\nconst COMPOSITE_GL_TYPES = {\n [GL_FLOAT]: [GL_FLOAT, 1, 'float'],\n [GL_FLOAT_VEC2]: [GL_FLOAT, 2, 'vec2'],\n [GL_FLOAT_VEC3]: [GL_FLOAT, 3, 'vec3'],\n [GL_FLOAT_VEC4]: [GL_FLOAT, 4, 'vec4'],\n [GL_INT]: [GL_INT, 1, 'int'],\n [GL_INT_VEC2]: [GL_INT, 2, 'ivec2'],\n [GL_INT_VEC3]: [GL_INT, 3, 'ivec3'],\n [GL_INT_VEC4]: [GL_INT, 4, 'ivec4'],\n [GL_UNSIGNED_INT]: [GL_UNSIGNED_INT, 1, 'uint'],\n [GL_UNSIGNED_INT_VEC2]: [GL_UNSIGNED_INT, 2, 'uvec2'],\n [GL_UNSIGNED_INT_VEC3]: [GL_UNSIGNED_INT, 3, 'uvec3'],\n [GL_UNSIGNED_INT_VEC4]: [GL_UNSIGNED_INT, 4, 'uvec4'],\n [GL_BOOL]: [GL_FLOAT, 1, 'bool'],\n [GL_BOOL_VEC2]: [GL_FLOAT, 2, 'bvec2'],\n [GL_BOOL_VEC3]: [GL_FLOAT, 3, 'bvec3'],\n [GL_BOOL_VEC4]: [GL_FLOAT, 4, 'bvec4'],\n [GL_FLOAT_MAT2]: [GL_FLOAT, 8, 'mat2'],\n [GL_FLOAT_MAT2x3]: [GL_FLOAT, 8, 'mat2x3'],\n [GL_FLOAT_MAT2x4]: [GL_FLOAT, 8, 'mat2x4'],\n [GL_FLOAT_MAT3]: [GL_FLOAT, 12, 'mat3'],\n [GL_FLOAT_MAT3x2]: [GL_FLOAT, 12, 'mat3x2'],\n [GL_FLOAT_MAT3x4]: [GL_FLOAT, 12, 'mat3x4'],\n [GL_FLOAT_MAT4]: [GL_FLOAT, 16, 'mat4'],\n [GL_FLOAT_MAT4x2]: [GL_FLOAT, 16, 'mat4x2'],\n [GL_FLOAT_MAT4x3]: [GL_FLOAT, 16, 'mat4x3']\n};\nexport function getPrimitiveDrawMode(drawMode) {\n switch (drawMode) {\n case GL_POINTS:\n return GL_POINTS;\n\n case GL_LINES:\n return GL_LINES;\n\n case GL_LINE_STRIP:\n return GL_LINES;\n\n case GL_LINE_LOOP:\n return GL_LINES;\n\n case GL_TRIANGLES:\n return GL_TRIANGLES;\n\n case GL_TRIANGLE_STRIP:\n return GL_TRIANGLES;\n\n case GL_TRIANGLE_FAN:\n return GL_TRIANGLES;\n\n default:\n assert(false);\n return 0;\n }\n}\nexport function getPrimitiveCount(_ref) {\n let {\n drawMode,\n vertexCount\n } = _ref;\n\n switch (drawMode) {\n case GL_POINTS:\n case GL_LINE_LOOP:\n return vertexCount;\n\n case GL_LINES:\n return vertexCount / 2;\n\n case GL_LINE_STRIP:\n return vertexCount - 1;\n\n case GL_TRIANGLES:\n return vertexCount / 3;\n\n case GL_TRIANGLE_STRIP:\n case GL_TRIANGLE_FAN:\n return vertexCount - 2;\n\n default:\n assert(false);\n return 0;\n }\n}\nexport function getVertexCount(_ref2) {\n let {\n drawMode,\n vertexCount\n } = _ref2;\n const primitiveCount = getPrimitiveCount({\n drawMode,\n vertexCount\n });\n\n switch (getPrimitiveDrawMode(drawMode)) {\n case GL_POINTS:\n return primitiveCount;\n\n case GL_LINES:\n return primitiveCount * 2;\n\n case GL_TRIANGLES:\n return primitiveCount * 3;\n\n default:\n assert(false);\n return 0;\n }\n}\nexport function decomposeCompositeGLType(compositeGLType) {\n const typeAndSize = COMPOSITE_GL_TYPES[compositeGLType];\n\n if (!typeAndSize) {\n return null;\n }\n\n const [type, components] = typeAndSize;\n return {\n type,\n components\n };\n}\nexport function getCompositeGLType(type, components) {\n switch (type) {\n case GL_BYTE:\n case GL_UNSIGNED_BYTE:\n case GL_SHORT:\n case GL_UNSIGNED_SHORT:\n type = GL_FLOAT;\n break;\n\n default:\n }\n\n for (const glType in COMPOSITE_GL_TYPES) {\n const [compType, compComponents, name] = COMPOSITE_GL_TYPES[glType];\n\n if (compType === type && compComponents === components) {\n return {\n glType,\n name\n };\n }\n }\n\n return null;\n}\n//# sourceMappingURL=attribute-utils.js.map","import { isWebGL2 } from '@luma.gl/gltools';\nexport const TEXTURE_FORMATS = {\n [6407]: {\n dataFormat: 6407,\n types: [5121, 33635]\n },\n [6408]: {\n dataFormat: 6408,\n types: [5121, 32819, 32820]\n },\n [6406]: {\n dataFormat: 6406,\n types: [5121]\n },\n [6409]: {\n dataFormat: 6409,\n types: [5121]\n },\n [6410]: {\n dataFormat: 6410,\n types: [5121]\n },\n [33326]: {\n dataFormat: 6403,\n types: [5126],\n gl2: true\n },\n [33328]: {\n dataFormat: 33319,\n types: [5126],\n gl2: true\n },\n [34837]: {\n dataFormat: 6407,\n types: [5126],\n gl2: true\n },\n [34836]: {\n dataFormat: 6408,\n types: [5126],\n gl2: true\n }\n};\nexport const DATA_FORMAT_CHANNELS = {\n [6403]: 1,\n [36244]: 1,\n [33319]: 2,\n [33320]: 2,\n [6407]: 3,\n [36248]: 3,\n [6408]: 4,\n [36249]: 4,\n [6402]: 1,\n [34041]: 1,\n [6406]: 1,\n [6409]: 1,\n [6410]: 2\n};\nexport const TYPE_SIZES = {\n [5126]: 4,\n [5125]: 4,\n [5124]: 4,\n [5123]: 2,\n [5122]: 2,\n [5131]: 2,\n [5120]: 1,\n [5121]: 1\n};\nexport function isFormatSupported(gl, format) {\n const info = TEXTURE_FORMATS[format];\n\n if (!info) {\n return false;\n }\n\n if (info.gl1 === undefined && info.gl2 === undefined) {\n return true;\n }\n\n const value = isWebGL2(gl) ? info.gl2 || info.gl1 : info.gl1;\n return typeof value === 'string' ? gl.getExtension(value) : value;\n}\nexport function isLinearFilteringSupported(gl, format) {\n const info = TEXTURE_FORMATS[format];\n\n switch (info && info.types[0]) {\n case 5126:\n return gl.getExtension('OES_texture_float_linear');\n\n case 5131:\n return gl.getExtension('OES_texture_half_float_linear');\n\n default:\n return true;\n }\n}\n//# sourceMappingURL=texture-formats.js.map","import * as glMatrix from \"./common.js\";\n/**\r\n * 3 Dimensional Vector\r\n * @module vec3\r\n */\n\n/**\r\n * Creates a new, empty vec3\r\n *\r\n * @returns {vec3} a new 3D vector\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec3 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec3} a vector to clone\r\n * @returns {vec3} a new 3D vector\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Calculates the length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Creates a new vec3 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} a new 3D vector\r\n */\n\nexport function fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Copy the values from one vec3 to another\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the source vector\r\n * @returns {vec3} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Set the components of a vec3 to the given values\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} out\r\n */\n\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Adds two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\r\n * Multiplies two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\r\n * Divides two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to ceil\r\n * @returns {vec3} out\r\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to floor\r\n * @returns {vec3} out\r\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\r\n * Math.round the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to round\r\n * @returns {vec3} out\r\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n/**\r\n * Scales a vec3 by a scalar number\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec3} out\r\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\r\n * Adds two vec3's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec3} out\r\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Calculates the squared length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Negates the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to negate\r\n * @returns {vec3} out\r\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to invert\r\n * @returns {vec3} out\r\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\r\n * Normalize a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to normalize\r\n * @returns {vec3} out\r\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\r\n * Computes the cross product of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\r\n * Performs a hermite interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Performs a bezier interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec3} out\r\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat4.\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat3.\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\r\n * Transforms the vec3 with a quat\r\n * Can also be used for dual quaternions. (Multiply it with the real part)\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyQuat} q quaternion to transform with\r\n * @returns {vec3} out\r\n */\n\nexport function transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\r\n * Rotate a 3D vector around the x-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nexport function rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the y-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nexport function rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the z-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nexport function rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2]; //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Get the angle between two 3D vectors\r\n * @param {ReadonlyVec3} a The first operand\r\n * @param {ReadonlyVec3} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nexport function angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec3 to zero\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @returns {vec3} out\r\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec3} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nexport function str(a) {\n return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\r\n * Alias for {@link vec3.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;\n/**\r\n * Alias for {@link vec3.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link vec3.divide}\r\n * @function\r\n */\n\nexport var div = divide;\n/**\r\n * Alias for {@link vec3.distance}\r\n * @function\r\n */\n\nexport var dist = distance;\n/**\r\n * Alias for {@link vec3.squaredDistance}\r\n * @function\r\n */\n\nexport var sqrDist = squaredDistance;\n/**\r\n * Alias for {@link vec3.length}\r\n * @function\r\n */\n\nexport var len = length;\n/**\r\n * Alias for {@link vec3.squaredLength}\r\n * @function\r\n */\n\nexport var sqrLen = squaredLength;\n/**\r\n * Perform some operation over an array of vec3s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();","import Vector from './base/vector';\nimport { config, isArray } from '../lib/common';\nimport { checkNumber } from '../lib/validators';\nimport * as vec3 from 'gl-matrix/vec3';\nimport { vec3_transformMat2, vec3_transformMat4AsVector } from '../lib/gl-matrix-extras';\nconst ORIGIN = [0, 0, 0];\nlet ZERO;\nexport default class Vector3 extends Vector {\n static get ZERO() {\n if (!ZERO) {\n ZERO = new Vector3(0, 0, 0);\n Object.freeze(ZERO);\n }\n\n return ZERO;\n }\n\n constructor(x = 0, y = 0, z = 0) {\n super(-0, -0, -0);\n\n if (arguments.length === 1 && isArray(x)) {\n this.copy(x);\n } else {\n if (config.debug) {\n checkNumber(x);\n checkNumber(y);\n checkNumber(z);\n }\n\n this[0] = x;\n this[1] = y;\n this[2] = z;\n }\n }\n\n set(x, y, z) {\n this[0] = x;\n this[1] = y;\n this[2] = z;\n return this.check();\n }\n\n copy(array) {\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n return this.check();\n }\n\n fromObject(object) {\n if (config.debug) {\n checkNumber(object.x);\n checkNumber(object.y);\n checkNumber(object.z);\n }\n\n this[0] = object.x;\n this[1] = object.y;\n this[2] = object.z;\n return this.check();\n }\n\n toObject(object) {\n object.x = this[0];\n object.y = this[1];\n object.z = this[2];\n return object;\n }\n\n get ELEMENTS() {\n return 3;\n }\n\n get z() {\n return this[2];\n }\n\n set z(value) {\n this[2] = checkNumber(value);\n }\n\n angle(vector) {\n return vec3.angle(this, vector);\n }\n\n cross(vector) {\n vec3.cross(this, this, vector);\n return this.check();\n }\n\n rotateX({\n radians,\n origin = ORIGIN\n }) {\n vec3.rotateX(this, this, origin, radians);\n return this.check();\n }\n\n rotateY({\n radians,\n origin = ORIGIN\n }) {\n vec3.rotateY(this, this, origin, radians);\n return this.check();\n }\n\n rotateZ({\n radians,\n origin = ORIGIN\n }) {\n vec3.rotateZ(this, this, origin, radians);\n return this.check();\n }\n\n transform(matrix4) {\n return this.transformAsPoint(matrix4);\n }\n\n transformAsPoint(matrix4) {\n vec3.transformMat4(this, this, matrix4);\n return this.check();\n }\n\n transformAsVector(matrix4) {\n vec3_transformMat4AsVector(this, this, matrix4);\n return this.check();\n }\n\n transformByMatrix3(matrix3) {\n vec3.transformMat3(this, this, matrix3);\n return this.check();\n }\n\n transformByMatrix2(matrix2) {\n vec3_transformMat2(this, this, matrix2);\n return this.check();\n }\n\n transformByQuaternion(quaternion) {\n vec3.transformQuat(this, this, quaternion);\n return this.check();\n }\n\n}\n//# sourceMappingURL=vector3.js.map","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { isBuffer, bufferToArrayBuffer } from './buffer-utils';\nexport function toArrayBuffer(data) {\n if (isBuffer(data)) {\n return bufferToArrayBuffer(data);\n }\n\n if (data instanceof ArrayBuffer) {\n return data;\n }\n\n if (ArrayBuffer.isView(data)) {\n if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n\n return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);\n }\n\n if (typeof data === 'string') {\n const text = data;\n const uint8Array = new TextEncoder().encode(text);\n return uint8Array.buffer;\n }\n\n if (data && typeof data === 'object' && data._toArrayBuffer) {\n return data._toArrayBuffer();\n }\n\n throw new Error('toArrayBuffer');\n}\nexport function compareArrayBuffers(arrayBuffer1, arrayBuffer2, byteLength) {\n byteLength = byteLength || arrayBuffer1.byteLength;\n\n if (arrayBuffer1.byteLength < byteLength || arrayBuffer2.byteLength < byteLength) {\n return false;\n }\n\n const array1 = new Uint8Array(arrayBuffer1);\n const array2 = new Uint8Array(arrayBuffer2);\n\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n\n return true;\n}\nexport function concatenateArrayBuffers(...sources) {\n const sourceArrays = sources.map(source2 => source2 instanceof ArrayBuffer ? new Uint8Array(source2) : source2);\n const byteLength = sourceArrays.reduce((length, typedArray) => length + typedArray.byteLength, 0);\n const result = new Uint8Array(byteLength);\n let offset = 0;\n\n for (const sourceArray of sourceArrays) {\n result.set(sourceArray, offset);\n offset += sourceArray.byteLength;\n }\n\n return result.buffer;\n}\nexport function concatenateTypedArrays(...typedArrays) {\n const arrays = typedArrays;\n const TypedArrayConstructor = arrays && arrays.length > 1 && arrays[0].constructor || null;\n\n if (!TypedArrayConstructor) {\n throw new Error('\"concatenateTypedArrays\" - incorrect quantity of arguments or arguments have incompatible data types');\n }\n\n const sumLength = arrays.reduce((acc, value) => acc + value.length, 0);\n const result = new TypedArrayConstructor(sumLength);\n let offset = 0;\n\n for (const array of arrays) {\n result.set(array, offset);\n offset += array.length;\n }\n\n return result;\n}\nexport function sliceArrayBuffer(arrayBuffer, byteOffset, byteLength) {\n const subArray = byteLength !== undefined ? new Uint8Array(arrayBuffer).subarray(byteOffset, byteOffset + byteLength) : new Uint8Array(arrayBuffer).subarray(byteOffset);\n const arrayCopy = new Uint8Array(subArray);\n return arrayCopy.buffer;\n}\n//# sourceMappingURL=array-buffer-utils.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// View and Projection Matrix calculations for mapbox-js style\n// map view properties\nimport Viewport from './viewport';\n\nimport {\n pixelsToWorld,\n getViewMatrix,\n addMetersToLngLat,\n unitsPerMeter,\n getProjectionParameters,\n altitudeToFovy,\n fovyToAltitude,\n fitBounds,\n getBounds\n} from '@math.gl/web-mercator';\nimport {Padding} from './viewport';\n\n// TODO - import from math.gl\nimport * as vec2 from 'gl-matrix/vec2';\nimport {Matrix4, clamp} from '@math.gl/core';\n\nexport type WebMercatorViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** Longitude in degrees */\n longitude?: number;\n /** Latitude in degrees */\n latitude?: number;\n /** Tilt of the camera in degrees */\n pitch?: number;\n /** Heading of the camera in degrees */\n bearing?: number;\n /** Camera altitude relative to the viewport height, legacy property used to control the FOV. Default `1.5` */\n altitude?: number;\n /** Camera fovy in degrees. If provided, overrides `altitude` */\n fovy?: number;\n /** Viewport center in world space. If geospatial, refers to meter offsets from lng, lat */\n position?: number[];\n /** Zoom level */\n zoom?: number;\n /** Padding around the viewport, in pixels. */\n padding?: Padding | null;\n /** Model matrix of viewport center */\n modelMatrix?: number[] | null;\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** Use orthographic projection */\n orthographic?: boolean;\n /** Scaler for the near plane, 1 unit equals to the height of the viewport. Default `0.1` */\n nearZMultiplier?: number;\n /** Scaler for the far plane, 1 unit equals to the distance from the camera to the edge of the screen. Default `1.01` */\n farZMultiplier?: number;\n /** Render multiple copies of the world */\n repeat?: boolean;\n /** Internal use */\n worldOffset?: number;\n /** @deprecated Revert to approximated meter size calculation prior to v8.5 */\n legacyMeterSizes?: boolean;\n};\n\n/**\n * Manages transformations to/from WGS84 coordinates using the Web Mercator Projection.\n */\nexport default class WebMercatorViewport extends Viewport {\n static displayName = 'WebMercatorViewport';\n\n longitude: number;\n latitude: number;\n pitch: number;\n bearing: number;\n altitude: number;\n fovy: number;\n orthographic: boolean;\n\n /** Each sub viewport renders one copy of the world if repeat:true. The list is generated and cached on first request. */\n private _subViewports: WebMercatorViewport[] | null;\n /** @deprecated Revert to approximated meter size calculation prior to v8.5 */\n private _pseudoMeters: boolean;\n\n /* eslint-disable complexity, max-statements */\n constructor(opts: WebMercatorViewportOptions = {}) {\n const {\n latitude = 0,\n longitude = 0,\n zoom = 0,\n pitch = 0,\n bearing = 0,\n nearZMultiplier = 0.1,\n farZMultiplier = 1.01,\n orthographic = false,\n projectionMatrix,\n\n repeat = false,\n worldOffset = 0,\n position,\n padding,\n\n // backward compatibility\n // TODO: remove in v9\n legacyMeterSizes = false\n } = opts;\n\n let {width, height, altitude = 1.5} = opts;\n const scale = Math.pow(2, zoom);\n\n // Silently allow apps to send in 0,0 to facilitate isomorphic render etc\n width = width || 1;\n height = height || 1;\n\n let fovy;\n let projectionParameters: any = null;\n if (projectionMatrix) {\n altitude = projectionMatrix[5] / 2;\n fovy = altitudeToFovy(altitude);\n } else {\n if (opts.fovy) {\n fovy = opts.fovy;\n altitude = fovyToAltitude(fovy);\n } else {\n fovy = altitudeToFovy(altitude);\n }\n\n let offset: [number, number] | undefined;\n if (padding) {\n const {top = 0, bottom = 0} = padding;\n offset = [0, clamp((top + height - bottom) / 2, 0, height) - height / 2];\n }\n\n projectionParameters = getProjectionParameters({\n width,\n height,\n scale,\n center: position && [0, 0, position[2] * unitsPerMeter(latitude)],\n offset,\n pitch,\n fovy,\n nearZMultiplier,\n farZMultiplier\n });\n }\n\n // The uncentered matrix allows us two move the center addition to the\n // shader (cheap) which gives a coordinate system that has its center in\n // the layer's center position. This makes rotations and other modelMatrx\n // transforms much more useful.\n let viewMatrixUncentered = getViewMatrix({\n height,\n pitch,\n bearing,\n scale,\n altitude\n });\n\n if (worldOffset) {\n const viewOffset = new Matrix4().translate([512 * worldOffset, 0, 0]);\n viewMatrixUncentered = viewOffset.multiplyLeft(viewMatrixUncentered);\n }\n\n super({\n ...opts,\n // x, y,\n width,\n height,\n\n // view matrix\n viewMatrix: viewMatrixUncentered,\n longitude,\n latitude,\n zoom,\n\n // projection matrix parameters\n ...projectionParameters,\n fovy,\n focalDistance: altitude\n });\n\n // Save parameters\n this.latitude = latitude;\n this.longitude = longitude;\n this.zoom = zoom;\n this.pitch = pitch;\n this.bearing = bearing;\n this.altitude = altitude;\n this.fovy = fovy;\n\n this.orthographic = orthographic;\n\n this._subViewports = repeat ? [] : null;\n this._pseudoMeters = legacyMeterSizes;\n\n Object.freeze(this);\n }\n /* eslint-enable complexity, max-statements */\n\n get subViewports(): WebMercatorViewport[] | null {\n if (this._subViewports && !this._subViewports.length) {\n // Cache sub viewports so that we only calculate them once\n const bounds = this.getBounds();\n\n const minOffset = Math.floor((bounds[0] + 180) / 360);\n const maxOffset = Math.ceil((bounds[2] - 180) / 360);\n\n for (let x = minOffset; x <= maxOffset; x++) {\n const offsetViewport = x\n ? new WebMercatorViewport({\n ...this,\n worldOffset: x\n })\n : this;\n this._subViewports.push(offsetViewport);\n }\n }\n return this._subViewports;\n }\n\n projectPosition(xyz: number[]): [number, number, number] {\n if (this._pseudoMeters) {\n // Backward compatibility\n return super.projectPosition(xyz);\n }\n const [X, Y] = this.projectFlat(xyz);\n const Z = (xyz[2] || 0) * unitsPerMeter(xyz[1]);\n return [X, Y, Z];\n }\n\n unprojectPosition(xyz: number[]): [number, number, number] {\n if (this._pseudoMeters) {\n // Backward compatibility\n return super.unprojectPosition(xyz);\n }\n const [X, Y] = this.unprojectFlat(xyz);\n const Z = (xyz[2] || 0) / unitsPerMeter(Y);\n return [X, Y, Z];\n }\n\n /**\n * Add a meter delta to a base lnglat coordinate, returning a new lnglat array\n *\n * Note: Uses simple linear approximation around the viewport center\n * Error increases with size of offset (roughly 1% per 100km)\n *\n * @param {[Number,Number]|[Number,Number,Number]) lngLatZ - base coordinate\n * @param {[Number,Number]|[Number,Number,Number]) xyz - array of meter deltas\n * @return {[Number,Number]|[Number,Number,Number]) array of [lng,lat,z] deltas\n */\n addMetersToLngLat(lngLatZ: number[], xyz: number[]): number[] {\n return addMetersToLngLat(lngLatZ, xyz);\n }\n\n panByPosition(coords: number[], pixel: number[]): WebMercatorViewportOptions {\n const fromLocation = pixelsToWorld(pixel, this.pixelUnprojectionMatrix);\n const toLocation = this.projectFlat(coords);\n\n const translate = vec2.add([], toLocation, vec2.negate([], fromLocation));\n const newCenter = vec2.add([], this.center, translate);\n\n const [longitude, latitude] = this.unprojectFlat(newCenter);\n return {longitude, latitude};\n }\n\n getBounds(options: {z?: number} = {}): [number, number, number, number] {\n // @ts-ignore\n const corners = getBounds(this, options.z || 0);\n\n return [\n Math.min(corners[0][0], corners[1][0], corners[2][0], corners[3][0]),\n Math.min(corners[0][1], corners[1][1], corners[2][1], corners[3][1]),\n Math.max(corners[0][0], corners[1][0], corners[2][0], corners[3][0]),\n Math.max(corners[0][1], corners[1][1], corners[2][1], corners[3][1])\n ];\n }\n\n /**\n * Returns a new viewport that fit around the given rectangle.\n * Only supports non-perspective mode.\n */\n fitBounds(\n /** [[lon, lat], [lon, lat]] */\n bounds: [[number, number], [number, number]],\n options: {\n /** If not supplied, will use the current width of the viewport (default `1`) */\n width?: number;\n /** If not supplied, will use the current height of the viewport (default `1`) */\n height?: number;\n /** In degrees, 0.01 would be about 1000 meters */\n minExtent?: number;\n /** Max zoom level */\n maxZoom?: number;\n /** Extra padding in pixels */\n padding?: number | Required;\n /** Center shift in pixels */\n offset?: number[];\n } = {}\n ) {\n const {width, height} = this;\n const {longitude, latitude, zoom} = fitBounds({width, height, bounds, ...options});\n return new WebMercatorViewport({width, height, longitude, latitude, zoom});\n }\n}\n","export function convertToObjectRow(arrayRow, headers) {\n if (!arrayRow) {\n throw new Error('null row');\n }\n\n if (!headers) {\n throw new Error('no headers');\n }\n\n const objectRow = {};\n\n for (let i = 0; i < headers.length; i++) {\n objectRow[headers[i]] = arrayRow[i];\n }\n\n return objectRow;\n}\nexport function convertToArrayRow(objectRow, headers) {\n if (!objectRow) {\n throw new Error('null row');\n }\n\n if (!headers) {\n throw new Error('no headers');\n }\n\n const arrayRow = new Array(headers.length);\n\n for (let i = 0; i < headers.length; i++) {\n arrayRow[i] = objectRow[headers[i]];\n }\n\n return arrayRow;\n}\n//# sourceMappingURL=row-utils.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nlet _Symbol$asyncIterator;\n\nclass ArrayQueue extends Array {\n enqueue(value) {\n return this.push(value);\n }\n\n dequeue() {\n return this.shift();\n }\n\n}\n\n_Symbol$asyncIterator = Symbol.asyncIterator;\nexport default class AsyncQueue {\n constructor() {\n _defineProperty(this, \"_values\", void 0);\n\n _defineProperty(this, \"_settlers\", void 0);\n\n _defineProperty(this, \"_closed\", void 0);\n\n this._values = new ArrayQueue();\n this._settlers = new ArrayQueue();\n this._closed = false;\n }\n\n close() {\n while (this._settlers.length > 0) {\n this._settlers.dequeue().resolve({\n done: true\n });\n }\n\n this._closed = true;\n }\n\n [_Symbol$asyncIterator]() {\n return this;\n }\n\n enqueue(value) {\n if (this._closed) {\n throw new Error('Closed');\n }\n\n if (this._settlers.length > 0) {\n if (this._values.length > 0) {\n throw new Error('Illegal internal state');\n }\n\n const settler = this._settlers.dequeue();\n\n if (value instanceof Error) {\n settler.reject(value);\n } else {\n settler.resolve({\n value\n });\n }\n } else {\n this._values.enqueue(value);\n }\n }\n\n next() {\n if (this._values.length > 0) {\n const value = this._values.dequeue();\n\n if (value instanceof Error) {\n return Promise.reject(value);\n }\n\n return Promise.resolve({\n value\n });\n }\n\n if (this._closed) {\n if (this._settlers.length > 0) {\n throw new Error('Illegal internal state');\n }\n\n return Promise.resolve({\n done: true\n });\n }\n\n return new Promise((resolve, reject) => {\n this._settlers.enqueue({\n resolve,\n reject\n });\n });\n }\n\n}\nexport async function takeAsync(asyncIterable, count = Infinity) {\n const result = [];\n const iterator = asyncIterable[Symbol.asyncIterator]();\n\n while (result.length < count) {\n const {\n value,\n done\n } = await iterator.next();\n\n if (done) {\n break;\n }\n\n result.push(value);\n }\n\n return result;\n}\n//# sourceMappingURL=async-queue.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nconst DEFAULT_ROW_COUNT = 100;\nexport default class RowTableBatchAggregator {\n constructor(schema, options) {\n _defineProperty(this, \"schema\", void 0);\n\n _defineProperty(this, \"options\", void 0);\n\n _defineProperty(this, \"length\", 0);\n\n _defineProperty(this, \"rows\", null);\n\n _defineProperty(this, \"cursor\", 0);\n\n _defineProperty(this, \"_headers\", []);\n\n this.options = options;\n this.schema = schema;\n\n if (!Array.isArray(schema)) {\n this._headers = [];\n\n for (const key in schema) {\n this._headers[schema[key].index] = schema[key].name;\n }\n }\n }\n\n rowCount() {\n return this.length;\n }\n\n addArrayRow(row, cursor) {\n if (Number.isFinite(cursor)) {\n this.cursor = cursor;\n }\n\n this.rows = this.rows || new Array(DEFAULT_ROW_COUNT);\n this.rows[this.length] = row;\n this.length++;\n }\n\n addObjectRow(row, cursor) {\n if (Number.isFinite(cursor)) {\n this.cursor = cursor;\n }\n\n this.rows = this.rows || new Array(DEFAULT_ROW_COUNT);\n this.rows[this.length] = row;\n this.length++;\n }\n\n getBatch() {\n let rows = this.rows;\n\n if (!rows) {\n return null;\n }\n\n rows = rows.slice(0, this.length);\n this.rows = null;\n const batch = {\n shape: this.options.shape,\n batchType: 'data',\n data: rows,\n length: this.length,\n schema: this.schema,\n cursor: this.cursor\n };\n return batch;\n }\n\n}\n//# sourceMappingURL=base-table-batch-aggregator.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { convertToArrayRow, convertToObjectRow } from '../utils/row-utils';\nconst DEFAULT_ROW_COUNT = 100;\nexport default class RowTableBatchAggregator {\n constructor(schema, options) {\n _defineProperty(this, \"schema\", void 0);\n\n _defineProperty(this, \"options\", void 0);\n\n _defineProperty(this, \"length\", 0);\n\n _defineProperty(this, \"objectRows\", null);\n\n _defineProperty(this, \"arrayRows\", null);\n\n _defineProperty(this, \"cursor\", 0);\n\n _defineProperty(this, \"_headers\", []);\n\n this.options = options;\n this.schema = schema;\n\n if (!Array.isArray(schema)) {\n this._headers = [];\n\n for (const key in schema) {\n this._headers[schema[key].index] = schema[key].name;\n }\n }\n }\n\n rowCount() {\n return this.length;\n }\n\n addArrayRow(row, cursor) {\n if (Number.isFinite(cursor)) {\n this.cursor = cursor;\n }\n\n switch (this.options.shape) {\n case 'object-row-table':\n const rowObject = convertToObjectRow(row, this._headers);\n this.addObjectRow(rowObject, cursor);\n break;\n\n case 'array-row-table':\n this.arrayRows = this.arrayRows || new Array(DEFAULT_ROW_COUNT);\n this.arrayRows[this.length] = row;\n this.length++;\n break;\n }\n }\n\n addObjectRow(row, cursor) {\n if (Number.isFinite(cursor)) {\n this.cursor = cursor;\n }\n\n switch (this.options.shape) {\n case 'array-row-table':\n const rowArray = convertToArrayRow(row, this._headers);\n this.addArrayRow(rowArray, cursor);\n break;\n\n case 'object-row-table':\n this.objectRows = this.objectRows || new Array(DEFAULT_ROW_COUNT);\n this.objectRows[this.length] = row;\n this.length++;\n break;\n }\n }\n\n getBatch() {\n let rows = this.arrayRows || this.objectRows;\n\n if (!rows) {\n return null;\n }\n\n rows = rows.slice(0, this.length);\n this.arrayRows = null;\n this.objectRows = null;\n return {\n shape: this.options.shape,\n batchType: 'data',\n data: rows,\n length: this.length,\n schema: this.schema,\n cursor: this.cursor\n };\n }\n\n}\n//# sourceMappingURL=row-table-batch-aggregator.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nconst DEFAULT_ROW_COUNT = 100;\nexport default class ColumnarTableBatchAggregator {\n constructor(schema, options) {\n _defineProperty(this, \"schema\", void 0);\n\n _defineProperty(this, \"length\", 0);\n\n _defineProperty(this, \"allocated\", 0);\n\n _defineProperty(this, \"columns\", {});\n\n this.schema = schema;\n\n this._reallocateColumns();\n }\n\n rowCount() {\n return this.length;\n }\n\n addArrayRow(row) {\n this._reallocateColumns();\n\n let i = 0;\n\n for (const fieldName in this.columns) {\n this.columns[fieldName][this.length] = row[i++];\n }\n\n this.length++;\n }\n\n addObjectRow(row) {\n this._reallocateColumns();\n\n for (const fieldName in row) {\n this.columns[fieldName][this.length] = row[fieldName];\n }\n\n this.length++;\n }\n\n getBatch() {\n this._pruneColumns();\n\n const columns = Array.isArray(this.schema) ? this.columns : {};\n\n if (!Array.isArray(this.schema)) {\n for (const fieldName in this.schema) {\n const field = this.schema[fieldName];\n columns[field.name] = this.columns[field.index];\n }\n }\n\n this.columns = {};\n const batch = {\n shape: 'columnar-table',\n batchType: 'data',\n data: columns,\n schema: this.schema,\n length: this.length\n };\n return batch;\n }\n\n _reallocateColumns() {\n if (this.length < this.allocated) {\n return;\n }\n\n this.allocated = this.allocated > 0 ? this.allocated *= 2 : DEFAULT_ROW_COUNT;\n this.columns = {};\n\n for (const fieldName in this.schema) {\n const field = this.schema[fieldName];\n const ArrayType = field.type || Float32Array;\n const oldColumn = this.columns[field.index];\n\n if (oldColumn && ArrayBuffer.isView(oldColumn)) {\n const typedArray = new ArrayType(this.allocated);\n typedArray.set(oldColumn);\n this.columns[field.index] = typedArray;\n } else if (oldColumn) {\n oldColumn.length = this.allocated;\n this.columns[field.index] = oldColumn;\n } else {\n this.columns[field.index] = new ArrayType(this.allocated);\n }\n }\n }\n\n _pruneColumns() {\n for (const [columnName, column] of Object.entries(this.columns)) {\n this.columns[columnName] = column.slice(0, this.length);\n }\n }\n\n}\n//# sourceMappingURL=columnar-table-batch-aggregator.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport BaseTableBatchAggregator from './base-table-batch-aggregator';\nimport RowTableBatchAggregator from './row-table-batch-aggregator';\nimport ColumnarTableBatchAggregator from './columnar-table-batch-aggregator';\nconst DEFAULT_OPTIONS = {\n shape: 'array-row-table',\n batchSize: 'auto',\n batchDebounceMs: 0,\n limit: 0,\n _limitMB: 0\n};\nconst ERR_MESSAGE = 'TableBatchBuilder';\nexport default class TableBatchBuilder {\n constructor(schema, options) {\n _defineProperty(this, \"schema\", void 0);\n\n _defineProperty(this, \"options\", void 0);\n\n _defineProperty(this, \"aggregator\", null);\n\n _defineProperty(this, \"batchCount\", 0);\n\n _defineProperty(this, \"bytesUsed\", 0);\n\n _defineProperty(this, \"isChunkComplete\", false);\n\n _defineProperty(this, \"lastBatchEmittedMs\", Date.now());\n\n _defineProperty(this, \"totalLength\", 0);\n\n _defineProperty(this, \"totalBytes\", 0);\n\n _defineProperty(this, \"rowBytes\", 0);\n\n this.schema = schema;\n this.options = { ...DEFAULT_OPTIONS,\n ...options\n };\n }\n\n limitReached() {\n var _this$options, _this$options2;\n\n if (Boolean((_this$options = this.options) === null || _this$options === void 0 ? void 0 : _this$options.limit) && this.totalLength >= this.options.limit) {\n return true;\n }\n\n if (Boolean((_this$options2 = this.options) === null || _this$options2 === void 0 ? void 0 : _this$options2._limitMB) && this.totalBytes / 1e6 >= this.options._limitMB) {\n return true;\n }\n\n return false;\n }\n\n addRow(row) {\n if (this.limitReached()) {\n return;\n }\n\n this.totalLength++;\n this.rowBytes = this.rowBytes || this._estimateRowMB(row);\n this.totalBytes += this.rowBytes;\n\n if (Array.isArray(row)) {\n this.addArrayRow(row);\n } else {\n this.addObjectRow(row);\n }\n }\n\n addArrayRow(row) {\n if (!this.aggregator) {\n const TableBatchType = this._getTableBatchType();\n\n this.aggregator = new TableBatchType(this.schema, this.options);\n }\n\n this.aggregator.addArrayRow(row);\n }\n\n addObjectRow(row) {\n if (!this.aggregator) {\n const TableBatchType = this._getTableBatchType();\n\n this.aggregator = new TableBatchType(this.schema, this.options);\n }\n\n this.aggregator.addObjectRow(row);\n }\n\n chunkComplete(chunk) {\n if (chunk instanceof ArrayBuffer) {\n this.bytesUsed += chunk.byteLength;\n }\n\n if (typeof chunk === 'string') {\n this.bytesUsed += chunk.length;\n }\n\n this.isChunkComplete = true;\n }\n\n getFullBatch(options) {\n return this._isFull() ? this._getBatch(options) : null;\n }\n\n getFinalBatch(options) {\n return this._getBatch(options);\n }\n\n _estimateRowMB(row) {\n return Array.isArray(row) ? row.length * 8 : Object.keys(row).length * 8;\n }\n\n _isFull() {\n if (!this.aggregator || this.aggregator.rowCount() === 0) {\n return false;\n }\n\n if (this.options.batchSize === 'auto') {\n if (!this.isChunkComplete) {\n return false;\n }\n } else if (this.options.batchSize > this.aggregator.rowCount()) {\n return false;\n }\n\n if (this.options.batchDebounceMs > Date.now() - this.lastBatchEmittedMs) {\n return false;\n }\n\n this.isChunkComplete = false;\n this.lastBatchEmittedMs = Date.now();\n return true;\n }\n\n _getBatch(options) {\n if (!this.aggregator) {\n return null;\n }\n\n if (options !== null && options !== void 0 && options.bytesUsed) {\n this.bytesUsed = options.bytesUsed;\n }\n\n const normalizedBatch = this.aggregator.getBatch();\n normalizedBatch.count = this.batchCount;\n normalizedBatch.bytesUsed = this.bytesUsed;\n Object.assign(normalizedBatch, options);\n this.batchCount++;\n this.aggregator = null;\n return normalizedBatch;\n }\n\n _getTableBatchType() {\n switch (this.options.shape) {\n case 'row-table':\n return BaseTableBatchAggregator;\n\n case 'array-row-table':\n case 'object-row-table':\n return RowTableBatchAggregator;\n\n case 'columnar-table':\n return ColumnarTableBatchAggregator;\n\n case 'arrow-table':\n if (!TableBatchBuilder.ArrowBatch) {\n throw new Error(ERR_MESSAGE);\n }\n\n return TableBatchBuilder.ArrowBatch;\n\n default:\n throw new Error(ERR_MESSAGE);\n }\n }\n\n}\n\n_defineProperty(TableBatchBuilder, \"ArrowBatch\", void 0);\n//# sourceMappingURL=table-batch-builder.js.map","/* @license\nPapa Parse\nv5.0.0-beta.0\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\nconst BYTE_ORDER_MARK = '\\ufeff';\nconst Papa = {\n parse: CsvToJson,\n unparse: JsonToCsv,\n RECORD_SEP: String.fromCharCode(30),\n UNIT_SEP: String.fromCharCode(31),\n BYTE_ORDER_MARK,\n BAD_DELIMITERS: ['\\r', '\\n', '\"', BYTE_ORDER_MARK],\n WORKERS_SUPPORTED: false,\n NODE_STREAM_INPUT: 1,\n LocalChunkSize: 1024 * 1024 * 10,\n RemoteChunkSize: 1024 * 1024 * 5,\n DefaultDelimiter: ',',\n Parser: Parser,\n ParserHandle: ParserHandle,\n ChunkStreamer: ChunkStreamer,\n StringStreamer: StringStreamer\n};\nexport default Papa;\n\nfunction CsvToJson(_input, _config, UserDefinedStreamer) {\n _config = _config || {};\n var dynamicTyping = _config.dynamicTyping || false;\n\n if (isFunction(dynamicTyping)) {\n _config.dynamicTypingFunction = dynamicTyping;\n dynamicTyping = {};\n }\n\n _config.dynamicTyping = dynamicTyping;\n _config.transform = isFunction(_config.transform) ? _config.transform : false;\n\n if (_config.worker && Papa.WORKERS_SUPPORTED) {\n var w = newWorker();\n w.userStep = _config.step;\n w.userChunk = _config.chunk;\n w.userComplete = _config.complete;\n w.userError = _config.error;\n _config.step = isFunction(_config.step);\n _config.chunk = isFunction(_config.chunk);\n _config.complete = isFunction(_config.complete);\n _config.error = isFunction(_config.error);\n delete _config.worker;\n w.postMessage({\n input: _input,\n config: _config,\n workerId: w.id\n });\n return;\n }\n\n var streamer = null;\n\n if (typeof _input === 'string') {\n streamer = new StringStreamer(_config);\n }\n\n if (!streamer) {\n streamer = new UserDefinedStreamer(_config);\n }\n\n return streamer.stream(_input);\n}\n\nfunction JsonToCsv(_input, _config) {\n var _quotes = false;\n var _writeHeader = true;\n var _delimiter = ',';\n var _newline = '\\r\\n';\n var _quoteChar = '\"';\n\n var _escapedQuote = _quoteChar + _quoteChar;\n\n var _skipEmptyLines = false;\n var _columns = null;\n unpackConfig();\n var quoteCharRegex = new RegExp(escapeRegExp(_quoteChar), 'g');\n if (typeof _input === 'string') _input = JSON.parse(_input);\n\n if (Array.isArray(_input)) {\n if (!_input.length || Array.isArray(_input[0])) return serialize(null, _input, _skipEmptyLines);else if (typeof _input[0] === 'object') return serialize(_columns || objectKeys(_input[0]), _input, _skipEmptyLines);\n } else if (typeof _input === 'object') {\n if (typeof _input.data === 'string') _input.data = JSON.parse(_input.data);\n\n if (Array.isArray(_input.data)) {\n if (!_input.fields) _input.fields = _input.meta && _input.meta.fields;\n if (!_input.fields) _input.fields = Array.isArray(_input.data[0]) ? _input.fields : objectKeys(_input.data[0]);\n if (!Array.isArray(_input.data[0]) && typeof _input.data[0] !== 'object') _input.data = [_input.data];\n }\n\n return serialize(_input.fields || [], _input.data || [], _skipEmptyLines);\n }\n\n throw new Error('Unable to serialize unrecognized input');\n\n function unpackConfig() {\n if (typeof _config !== 'object') return;\n\n if (typeof _config.delimiter === 'string' && !Papa.BAD_DELIMITERS.filter(function (value) {\n return _config.delimiter.indexOf(value) !== -1;\n }).length) {\n _delimiter = _config.delimiter;\n }\n\n if (typeof _config.quotes === 'boolean' || Array.isArray(_config.quotes)) _quotes = _config.quotes;\n if (typeof _config.skipEmptyLines === 'boolean' || typeof _config.skipEmptyLines === 'string') _skipEmptyLines = _config.skipEmptyLines;\n if (typeof _config.newline === 'string') _newline = _config.newline;\n if (typeof _config.quoteChar === 'string') _quoteChar = _config.quoteChar;\n if (typeof _config.header === 'boolean') _writeHeader = _config.header;\n\n if (Array.isArray(_config.columns)) {\n if (_config.columns.length === 0) throw new Error('Option columns is empty');\n _columns = _config.columns;\n }\n\n if (_config.escapeChar !== undefined) {\n _escapedQuote = _config.escapeChar + _quoteChar;\n }\n }\n\n function objectKeys(obj) {\n if (typeof obj !== 'object') return [];\n var keys = [];\n\n for (var key in obj) keys.push(key);\n\n return keys;\n }\n\n function serialize(fields, data, skipEmptyLines) {\n var csv = '';\n if (typeof fields === 'string') fields = JSON.parse(fields);\n if (typeof data === 'string') data = JSON.parse(data);\n var hasHeader = Array.isArray(fields) && fields.length > 0;\n var dataKeyedByField = !Array.isArray(data[0]);\n\n if (hasHeader && _writeHeader) {\n for (var i = 0; i < fields.length; i++) {\n if (i > 0) csv += _delimiter;\n csv += safe(fields[i], i);\n }\n\n if (data.length > 0) csv += _newline;\n }\n\n for (var row = 0; row < data.length; row++) {\n var maxCol = hasHeader ? fields.length : data[row].length;\n var emptyLine = false;\n var nullLine = hasHeader ? Object.keys(data[row]).length === 0 : data[row].length === 0;\n\n if (skipEmptyLines && !hasHeader) {\n emptyLine = skipEmptyLines === 'greedy' ? data[row].join('').trim() === '' : data[row].length === 1 && data[row][0].length === 0;\n }\n\n if (skipEmptyLines === 'greedy' && hasHeader) {\n var line = [];\n\n for (var c = 0; c < maxCol; c++) {\n var cx = dataKeyedByField ? fields[c] : c;\n line.push(data[row][cx]);\n }\n\n emptyLine = line.join('').trim() === '';\n }\n\n if (!emptyLine) {\n for (var col = 0; col < maxCol; col++) {\n if (col > 0 && !nullLine) csv += _delimiter;\n var colIdx = hasHeader && dataKeyedByField ? fields[col] : col;\n csv += safe(data[row][colIdx], col);\n }\n\n if (row < data.length - 1 && (!skipEmptyLines || maxCol > 0 && !nullLine)) {\n csv += _newline;\n }\n }\n }\n\n return csv;\n }\n\n function safe(str, col) {\n if (typeof str === 'undefined' || str === null) return '';\n if (str.constructor === Date) return JSON.stringify(str).slice(1, 25);\n str = str.toString().replace(quoteCharRegex, _escapedQuote);\n var needsQuotes = typeof _quotes === 'boolean' && _quotes || Array.isArray(_quotes) && _quotes[col] || hasAny(str, Papa.BAD_DELIMITERS) || str.indexOf(_delimiter) > -1 || str.charAt(0) === ' ' || str.charAt(str.length - 1) === ' ';\n return needsQuotes ? _quoteChar + str + _quoteChar : str;\n }\n\n function hasAny(str, substrings) {\n for (var i = 0; i < substrings.length; i++) if (str.indexOf(substrings[i]) > -1) return true;\n\n return false;\n }\n}\n\nfunction ChunkStreamer(config) {\n this._handle = null;\n this._finished = false;\n this._completed = false;\n this._input = null;\n this._baseIndex = 0;\n this._partialLine = '';\n this._rowCount = 0;\n this._start = 0;\n this._nextChunk = null;\n this.isFirstChunk = true;\n this._completeResults = {\n data: [],\n errors: [],\n meta: {}\n };\n replaceConfig.call(this, config);\n\n this.parseChunk = function (chunk, isFakeChunk) {\n if (this.isFirstChunk && isFunction(this._config.beforeFirstChunk)) {\n var modifiedChunk = this._config.beforeFirstChunk(chunk);\n\n if (modifiedChunk !== undefined) chunk = modifiedChunk;\n }\n\n this.isFirstChunk = false;\n var aggregate = this._partialLine + chunk;\n this._partialLine = '';\n\n var results = this._handle.parse(aggregate, this._baseIndex, !this._finished);\n\n if (this._handle.paused() || this._handle.aborted()) return;\n var lastIndex = results.meta.cursor;\n\n if (!this._finished) {\n this._partialLine = aggregate.substring(lastIndex - this._baseIndex);\n this._baseIndex = lastIndex;\n }\n\n if (results && results.data) this._rowCount += results.data.length;\n var finishedIncludingPreview = this._finished || this._config.preview && this._rowCount >= this._config.preview;\n\n if (isFunction(this._config.chunk) && !isFakeChunk) {\n this._config.chunk(results, this._handle);\n\n if (this._handle.paused() || this._handle.aborted()) return;\n results = undefined;\n this._completeResults = undefined;\n }\n\n if (!this._config.step && !this._config.chunk) {\n this._completeResults.data = this._completeResults.data.concat(results.data);\n this._completeResults.errors = this._completeResults.errors.concat(results.errors);\n this._completeResults.meta = results.meta;\n }\n\n if (!this._completed && finishedIncludingPreview && isFunction(this._config.complete) && (!results || !results.meta.aborted)) {\n this._config.complete(this._completeResults, this._input);\n\n this._completed = true;\n }\n\n if (!finishedIncludingPreview && (!results || !results.meta.paused)) this._nextChunk();\n return results;\n };\n\n this._sendError = function (error) {\n if (isFunction(this._config.error)) this._config.error(error);\n };\n\n function replaceConfig(config) {\n var configCopy = copy(config);\n configCopy.chunkSize = parseInt(configCopy.chunkSize);\n if (!config.step && !config.chunk) configCopy.chunkSize = null;\n this._handle = new ParserHandle(configCopy);\n this._handle.streamer = this;\n this._config = configCopy;\n }\n}\n\nfunction StringStreamer(config) {\n config = config || {};\n ChunkStreamer.call(this, config);\n var remaining;\n\n this.stream = function (s) {\n remaining = s;\n return this._nextChunk();\n };\n\n this._nextChunk = function () {\n if (this._finished) return;\n var size = this._config.chunkSize;\n var chunk = size ? remaining.substr(0, size) : remaining;\n remaining = size ? remaining.substr(size) : '';\n this._finished = !remaining;\n return this.parseChunk(chunk);\n };\n}\n\nStringStreamer.prototype = Object.create(StringStreamer.prototype);\nStringStreamer.prototype.constructor = StringStreamer;\n\nfunction ParserHandle(_config) {\n var FLOAT = /^\\s*-?(\\d*\\.?\\d+|\\d+\\.?\\d*)(e[-+]?\\d+)?\\s*$/i;\n var ISO_DATE = /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/;\n var self = this;\n var _stepCounter = 0;\n var _rowCounter = 0;\n\n var _input;\n\n var _parser;\n\n var _paused = false;\n var _aborted = false;\n\n var _delimiterError;\n\n var _fields = [];\n var _results = {\n data: [],\n errors: [],\n meta: {}\n };\n\n if (isFunction(_config.step)) {\n var userStep = _config.step;\n\n _config.step = function (results) {\n _results = results;\n if (needsHeaderRow()) processResults();else {\n processResults();\n if (!_results.data || _results.data.length === 0) return;\n _stepCounter += results.data.length;\n if (_config.preview && _stepCounter > _config.preview) _parser.abort();else userStep(_results, self);\n }\n };\n }\n\n this.parse = function (input, baseIndex, ignoreLastRow) {\n var quoteChar = _config.quoteChar || '\"';\n if (!_config.newline) _config.newline = guessLineEndings(input, quoteChar);\n _delimiterError = false;\n\n if (!_config.delimiter) {\n var delimGuess = guessDelimiter(input, _config.newline, _config.skipEmptyLines, _config.comments, _config.delimitersToGuess);\n if (delimGuess.successful) _config.delimiter = delimGuess.bestDelimiter;else {\n _delimiterError = true;\n _config.delimiter = Papa.DefaultDelimiter;\n }\n _results.meta.delimiter = _config.delimiter;\n } else if (isFunction(_config.delimiter)) {\n _config.delimiter = _config.delimiter(input);\n _results.meta.delimiter = _config.delimiter;\n }\n\n var parserConfig = copy(_config);\n if (_config.preview && _config.header) parserConfig.preview++;\n _input = input;\n _parser = new Parser(parserConfig);\n _results = _parser.parse(_input, baseIndex, ignoreLastRow);\n processResults();\n return _paused ? {\n meta: {\n paused: true\n }\n } : _results || {\n meta: {\n paused: false\n }\n };\n };\n\n this.paused = function () {\n return _paused;\n };\n\n this.pause = function () {\n _paused = true;\n\n _parser.abort();\n\n _input = _input.substr(_parser.getCharIndex());\n };\n\n this.resume = function () {\n _paused = false;\n self.streamer.parseChunk(_input, true);\n };\n\n this.aborted = function () {\n return _aborted;\n };\n\n this.abort = function () {\n _aborted = true;\n\n _parser.abort();\n\n _results.meta.aborted = true;\n if (isFunction(_config.complete)) _config.complete(_results);\n _input = '';\n };\n\n function testEmptyLine(s) {\n return _config.skipEmptyLines === 'greedy' ? s.join('').trim() === '' : s.length === 1 && s[0].length === 0;\n }\n\n function processResults() {\n if (_results && _delimiterError) {\n addError('Delimiter', 'UndetectableDelimiter', \"Unable to auto-detect delimiting character; defaulted to '\" + Papa.DefaultDelimiter + \"'\");\n _delimiterError = false;\n }\n\n if (_config.skipEmptyLines) {\n for (var i = 0; i < _results.data.length; i++) if (testEmptyLine(_results.data[i])) _results.data.splice(i--, 1);\n }\n\n if (needsHeaderRow()) fillHeaderFields();\n return applyHeaderAndDynamicTypingAndTransformation();\n }\n\n function needsHeaderRow() {\n return _config.header && _fields.length === 0;\n }\n\n function fillHeaderFields() {\n if (!_results) return;\n\n function addHeder(header) {\n if (isFunction(_config.transformHeader)) header = _config.transformHeader(header);\n\n _fields.push(header);\n }\n\n if (Array.isArray(_results.data[0])) {\n for (var i = 0; needsHeaderRow() && i < _results.data.length; i++) _results.data[i].forEach(addHeder);\n\n _results.data.splice(0, 1);\n } else _results.data.forEach(addHeder);\n }\n\n function shouldApplyDynamicTyping(field) {\n if (_config.dynamicTypingFunction && _config.dynamicTyping[field] === undefined) {\n _config.dynamicTyping[field] = _config.dynamicTypingFunction(field);\n }\n\n return (_config.dynamicTyping[field] || _config.dynamicTyping) === true;\n }\n\n function parseDynamic(field, value) {\n if (shouldApplyDynamicTyping(field)) {\n if (value === 'true' || value === 'TRUE') return true;else if (value === 'false' || value === 'FALSE') return false;else if (FLOAT.test(value)) return parseFloat(value);else if (ISO_DATE.test(value)) return new Date(value);else return value === '' ? null : value;\n }\n\n return value;\n }\n\n function applyHeaderAndDynamicTypingAndTransformation() {\n if (!_results || !_results.data || !_config.header && !_config.dynamicTyping && !_config.transform) return _results;\n\n function processRow(rowSource, i) {\n var row = _config.header ? {} : [];\n var j;\n\n for (j = 0; j < rowSource.length; j++) {\n var field = j;\n var value = rowSource[j];\n if (_config.header) field = j >= _fields.length ? '__parsed_extra' : _fields[j];\n if (_config.transform) value = _config.transform(value, field);\n value = parseDynamic(field, value);\n\n if (field === '__parsed_extra') {\n row[field] = row[field] || [];\n row[field].push(value);\n } else row[field] = value;\n }\n\n if (_config.header) {\n if (j > _fields.length) addError('FieldMismatch', 'TooManyFields', 'Too many fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i);else if (j < _fields.length) addError('FieldMismatch', 'TooFewFields', 'Too few fields: expected ' + _fields.length + ' fields but parsed ' + j, _rowCounter + i);\n }\n\n return row;\n }\n\n var incrementBy = 1;\n\n if (!_results.data[0] || Array.isArray(_results.data[0])) {\n _results.data = _results.data.map(processRow);\n incrementBy = _results.data.length;\n } else _results.data = processRow(_results.data, 0);\n\n if (_config.header && _results.meta) _results.meta.fields = _fields;\n _rowCounter += incrementBy;\n return _results;\n }\n\n function guessDelimiter(input, newline, skipEmptyLines, comments, delimitersToGuess) {\n var bestDelim, bestDelta, fieldCountPrevRow;\n delimitersToGuess = delimitersToGuess || [',', '\\t', '|', ';', Papa.RECORD_SEP, Papa.UNIT_SEP];\n\n for (var i = 0; i < delimitersToGuess.length; i++) {\n var delim = delimitersToGuess[i];\n var delta = 0,\n avgFieldCount = 0,\n emptyLinesCount = 0;\n fieldCountPrevRow = undefined;\n var preview = new Parser({\n comments: comments,\n delimiter: delim,\n newline: newline,\n preview: 10\n }).parse(input);\n\n for (var j = 0; j < preview.data.length; j++) {\n if (skipEmptyLines && testEmptyLine(preview.data[j])) {\n emptyLinesCount++;\n continue;\n }\n\n var fieldCount = preview.data[j].length;\n avgFieldCount += fieldCount;\n\n if (typeof fieldCountPrevRow === 'undefined') {\n fieldCountPrevRow = 0;\n continue;\n } else if (fieldCount > 1) {\n delta += Math.abs(fieldCount - fieldCountPrevRow);\n fieldCountPrevRow = fieldCount;\n }\n }\n\n if (preview.data.length > 0) avgFieldCount /= preview.data.length - emptyLinesCount;\n\n if ((typeof bestDelta === 'undefined' || delta > bestDelta) && avgFieldCount > 1.99) {\n bestDelta = delta;\n bestDelim = delim;\n }\n }\n\n _config.delimiter = bestDelim;\n return {\n successful: !!bestDelim,\n bestDelimiter: bestDelim\n };\n }\n\n function guessLineEndings(input, quoteChar) {\n input = input.substr(0, 1024 * 1024);\n var re = new RegExp(escapeRegExp(quoteChar) + '([^]*?)' + escapeRegExp(quoteChar), 'gm');\n input = input.replace(re, '');\n var r = input.split('\\r');\n var n = input.split('\\n');\n var nAppearsFirst = n.length > 1 && n[0].length < r[0].length;\n if (r.length === 1 || nAppearsFirst) return '\\n';\n var numWithN = 0;\n\n for (var i = 0; i < r.length; i++) {\n if (r[i][0] === '\\n') numWithN++;\n }\n\n return numWithN >= r.length / 2 ? '\\r\\n' : '\\r';\n }\n\n function addError(type, code, msg, row) {\n _results.errors.push({\n type: type,\n code: code,\n message: msg,\n row: row\n });\n }\n}\n\nfunction escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction Parser(config) {\n config = config || {};\n var delim = config.delimiter;\n var newline = config.newline;\n var comments = config.comments;\n var step = config.step;\n var preview = config.preview;\n var fastMode = config.fastMode;\n var quoteChar;\n\n if (config.quoteChar === undefined) {\n quoteChar = '\"';\n } else {\n quoteChar = config.quoteChar;\n }\n\n var escapeChar = quoteChar;\n\n if (config.escapeChar !== undefined) {\n escapeChar = config.escapeChar;\n }\n\n if (typeof delim !== 'string' || Papa.BAD_DELIMITERS.indexOf(delim) > -1) delim = ',';\n if (comments === delim) throw new Error('Comment character same as delimiter');else if (comments === true) comments = '#';else if (typeof comments !== 'string' || Papa.BAD_DELIMITERS.indexOf(comments) > -1) comments = false;\n if (newline !== '\\n' && newline !== '\\r' && newline !== '\\r\\n') newline = '\\n';\n var cursor = 0;\n var aborted = false;\n\n this.parse = function (input, baseIndex, ignoreLastRow) {\n if (typeof input !== 'string') throw new Error('Input must be a string');\n var inputLen = input.length,\n delimLen = delim.length,\n newlineLen = newline.length,\n commentsLen = comments.length;\n var stepIsFunction = isFunction(step);\n cursor = 0;\n var data = [],\n errors = [],\n row = [],\n lastCursor = 0;\n if (!input) return returnable();\n\n if (fastMode || fastMode !== false && input.indexOf(quoteChar) === -1) {\n var rows = input.split(newline);\n\n for (var i = 0; i < rows.length; i++) {\n row = rows[i];\n cursor += row.length;\n if (i !== rows.length - 1) cursor += newline.length;else if (ignoreLastRow) return returnable();\n if (comments && row.substr(0, commentsLen) === comments) continue;\n\n if (stepIsFunction) {\n data = [];\n pushRow(row.split(delim));\n doStep();\n if (aborted) return returnable();\n } else pushRow(row.split(delim));\n\n if (preview && i >= preview) {\n data = data.slice(0, preview);\n return returnable(true);\n }\n }\n\n return returnable();\n }\n\n var nextDelim = input.indexOf(delim, cursor);\n var nextNewline = input.indexOf(newline, cursor);\n var quoteCharRegex = new RegExp(escapeRegExp(escapeChar) + escapeRegExp(quoteChar), 'g');\n var quoteSearch;\n\n for (;;) {\n if (input[cursor] === quoteChar) {\n quoteSearch = cursor;\n cursor++;\n\n for (;;) {\n quoteSearch = input.indexOf(quoteChar, quoteSearch + 1);\n\n if (quoteSearch === -1) {\n if (!ignoreLastRow) {\n errors.push({\n type: 'Quotes',\n code: 'MissingQuotes',\n message: 'Quoted field unterminated',\n row: data.length,\n index: cursor\n });\n }\n\n return finish();\n }\n\n if (quoteSearch === inputLen - 1) {\n var value = input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar);\n return finish(value);\n }\n\n if (quoteChar === escapeChar && input[quoteSearch + 1] === escapeChar) {\n quoteSearch++;\n continue;\n }\n\n if (quoteChar !== escapeChar && quoteSearch !== 0 && input[quoteSearch - 1] === escapeChar) {\n continue;\n }\n\n var checkUpTo = nextNewline === -1 ? nextDelim : Math.min(nextDelim, nextNewline);\n var spacesBetweenQuoteAndDelimiter = extraSpaces(checkUpTo);\n\n if (input[quoteSearch + 1 + spacesBetweenQuoteAndDelimiter] === delim) {\n row.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar));\n cursor = quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen;\n nextDelim = input.indexOf(delim, cursor);\n nextNewline = input.indexOf(newline, cursor);\n\n if (stepIsFunction) {\n doStep();\n if (aborted) return returnable();\n }\n\n if (preview && data.length >= preview) return returnable(true);\n break;\n }\n\n var spacesBetweenQuoteAndNewLine = extraSpaces(nextNewline);\n\n if (input.substr(quoteSearch + 1 + spacesBetweenQuoteAndNewLine, newlineLen) === newline) {\n row.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar));\n saveRow(quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen);\n nextDelim = input.indexOf(delim, cursor);\n\n if (stepIsFunction) {\n doStep();\n if (aborted) return returnable();\n }\n\n if (preview && data.length >= preview) return returnable(true);\n break;\n }\n\n errors.push({\n type: 'Quotes',\n code: 'InvalidQuotes',\n message: 'Trailing quote on quoted field is malformed',\n row: data.length,\n index: cursor\n });\n quoteSearch++;\n continue;\n }\n\n if (stepIsFunction) {\n doStep();\n if (aborted) return returnable();\n }\n\n if (preview && data.length >= preview) return returnable(true);\n continue;\n }\n\n if (comments && row.length === 0 && input.substr(cursor, commentsLen) === comments) {\n if (nextNewline === -1) return returnable();\n cursor = nextNewline + newlineLen;\n nextNewline = input.indexOf(newline, cursor);\n nextDelim = input.indexOf(delim, cursor);\n continue;\n }\n\n if (nextDelim !== -1 && (nextDelim < nextNewline || nextNewline === -1)) {\n row.push(input.substring(cursor, nextDelim));\n cursor = nextDelim + delimLen;\n nextDelim = input.indexOf(delim, cursor);\n continue;\n }\n\n if (nextNewline !== -1) {\n row.push(input.substring(cursor, nextNewline));\n saveRow(nextNewline + newlineLen);\n\n if (stepIsFunction) {\n doStep();\n if (aborted) return returnable();\n }\n\n if (preview && data.length >= preview) return returnable(true);\n continue;\n }\n\n break;\n }\n\n return finish();\n\n function pushRow(row) {\n data.push(row);\n lastCursor = cursor;\n }\n\n function extraSpaces(index) {\n var spaceLength = 0;\n\n if (index !== -1) {\n var textBetweenClosingQuoteAndIndex = input.substring(quoteSearch + 1, index);\n\n if (textBetweenClosingQuoteAndIndex && textBetweenClosingQuoteAndIndex.trim() === '') {\n spaceLength = textBetweenClosingQuoteAndIndex.length;\n }\n }\n\n return spaceLength;\n }\n\n function finish(value) {\n if (ignoreLastRow) return returnable();\n if (typeof value === 'undefined') value = input.substr(cursor);\n row.push(value);\n cursor = inputLen;\n pushRow(row);\n if (stepIsFunction) doStep();\n return returnable();\n }\n\n function saveRow(newCursor) {\n cursor = newCursor;\n pushRow(row);\n row = [];\n nextNewline = input.indexOf(newline, cursor);\n }\n\n function returnable(stopped, step) {\n var isStep = step || false;\n return {\n data: isStep ? data[0] : data,\n errors: errors,\n meta: {\n delimiter: delim,\n linebreak: newline,\n aborted: aborted,\n truncated: !!stopped,\n cursor: lastCursor + (baseIndex || 0)\n }\n };\n }\n\n function doStep() {\n step(returnable(undefined, true));\n data = [];\n errors = [];\n }\n };\n\n this.abort = function () {\n aborted = true;\n };\n\n this.getCharIndex = function () {\n return cursor;\n };\n}\n\nfunction notImplemented() {\n throw new Error('Not implemented.');\n}\n\nfunction copy(obj) {\n if (typeof obj !== 'object' || obj === null) return obj;\n var cpy = Array.isArray(obj) ? [] : {};\n\n for (var key in obj) cpy[key] = copy(obj[key]);\n\n return cpy;\n}\n\nfunction isFunction(func) {\n return typeof func === 'function';\n}\n//# sourceMappingURL=papaparse.js.map","import Papa from './papaparse';\nconst {\n ChunkStreamer\n} = Papa;\nexport default function AsyncIteratorStreamer(config) {\n config = config || {};\n ChunkStreamer.call(this, config);\n this.textDecoder = new TextDecoder(this._config.encoding);\n\n this.stream = async function (asyncIterator) {\n this._input = asyncIterator;\n\n try {\n for await (const chunk of asyncIterator) {\n this.parseChunk(this.getStringChunk(chunk));\n }\n\n this._finished = true;\n this.parseChunk('');\n } catch (error) {\n this._sendError(error);\n }\n };\n\n this._nextChunk = function nextChunk() {};\n\n this.getStringChunk = function (chunk) {\n return typeof chunk === 'string' ? chunk : this.textDecoder.decode(chunk, {\n stream: true\n });\n };\n}\nAsyncIteratorStreamer.prototype = Object.create(ChunkStreamer.prototype);\nAsyncIteratorStreamer.prototype.constructor = AsyncIteratorStreamer;\n//# sourceMappingURL=async-iterator-streamer.js.map","import { AsyncQueue, TableBatchBuilder, convertToArrayRow, convertToObjectRow } from '@loaders.gl/schema';\nimport Papa from './papaparse/papaparse';\nimport AsyncIteratorStreamer from './papaparse/async-iterator-streamer';\nconst VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : 'latest';\nconst DEFAULT_CSV_LOADER_OPTIONS = {\n csv: {\n shape: 'object-row-table',\n optimizeMemoryUsage: false,\n header: 'auto',\n columnPrefix: 'column',\n quoteChar: '\"',\n escapeChar: '\"',\n dynamicTyping: true,\n comments: false,\n skipEmptyLines: true,\n delimitersToGuess: [',', '\\t', '|', ';']\n }\n};\nexport const CSVLoader = {\n id: 'csv',\n module: 'csv',\n name: 'CSV',\n version: VERSION,\n extensions: ['csv', 'tsv', 'dsv'],\n mimeTypes: ['text/csv', 'text/tab-separated-values', 'text/dsv'],\n category: 'table',\n parse: async (arrayBuffer, options) => parseCSV(new TextDecoder().decode(arrayBuffer), options),\n parseText: (text, options) => parseCSV(text, options),\n parseInBatches: parseCSVInBatches,\n options: DEFAULT_CSV_LOADER_OPTIONS\n};\n\nasync function parseCSV(csvText, options) {\n const csvOptions = { ...DEFAULT_CSV_LOADER_OPTIONS.csv,\n ...(options === null || options === void 0 ? void 0 : options.csv)\n };\n const firstRow = readFirstRow(csvText);\n const header = csvOptions.header === 'auto' ? isHeaderRow(firstRow) : Boolean(csvOptions.header);\n const parseWithHeader = header;\n const papaparseConfig = { ...csvOptions,\n header: parseWithHeader,\n download: false,\n transformHeader: parseWithHeader ? duplicateColumnTransformer() : undefined,\n error: e => {\n throw new Error(e);\n }\n };\n const result = Papa.parse(csvText, papaparseConfig);\n let {\n data: rows\n } = result;\n const headerRow = result.meta.fields || generateHeader(csvOptions.columnPrefix, firstRow.length);\n\n switch (csvOptions.shape) {\n case 'object-row-table':\n rows = rows.map(row => Array.isArray(row) ? convertToObjectRow(row, headerRow) : row);\n break;\n\n case 'array-row-table':\n rows = rows.map(row => Array.isArray(row) ? row : convertToArrayRow(row, headerRow));\n break;\n\n default:\n }\n\n return rows;\n}\n\nfunction parseCSVInBatches(asyncIterator, options) {\n var _options;\n\n options = { ...options\n };\n\n if (options.batchSize === 'auto') {\n options.batchSize = 4000;\n }\n\n const csvOptions = { ...DEFAULT_CSV_LOADER_OPTIONS.csv,\n ...((_options = options) === null || _options === void 0 ? void 0 : _options.csv)\n };\n const asyncQueue = new AsyncQueue();\n let isFirstRow = true;\n let headerRow = null;\n let tableBatchBuilder = null;\n let schema = null;\n const config = { ...csvOptions,\n header: false,\n download: false,\n chunkSize: 1024 * 1024 * 5,\n skipEmptyLines: false,\n\n step(results) {\n let row = results.data;\n\n if (csvOptions.skipEmptyLines) {\n const collapsedRow = row.flat().join('').trim();\n\n if (collapsedRow === '') {\n return;\n }\n }\n\n const bytesUsed = results.meta.cursor;\n\n if (isFirstRow && !headerRow) {\n const header = csvOptions.header === 'auto' ? isHeaderRow(row) : Boolean(csvOptions.header);\n\n if (header) {\n headerRow = row.map(duplicateColumnTransformer());\n return;\n }\n }\n\n if (isFirstRow) {\n isFirstRow = false;\n\n if (!headerRow) {\n headerRow = generateHeader(csvOptions.columnPrefix, row.length);\n }\n\n schema = deduceSchema(row, headerRow);\n }\n\n if (csvOptions.optimizeMemoryUsage) {\n row = JSON.parse(JSON.stringify(row));\n }\n\n tableBatchBuilder = tableBatchBuilder || new TableBatchBuilder(schema, {\n shape: csvOptions.shape || 'array-row-table',\n ...options\n });\n\n try {\n tableBatchBuilder.addRow(row);\n const batch = tableBatchBuilder && tableBatchBuilder.getFullBatch({\n bytesUsed\n });\n\n if (batch) {\n asyncQueue.enqueue(batch);\n }\n } catch (error) {\n asyncQueue.enqueue(error);\n }\n },\n\n complete(results) {\n try {\n const bytesUsed = results.meta.cursor;\n const batch = tableBatchBuilder && tableBatchBuilder.getFinalBatch({\n bytesUsed\n });\n\n if (batch) {\n asyncQueue.enqueue(batch);\n }\n } catch (error) {\n asyncQueue.enqueue(error);\n }\n\n asyncQueue.close();\n }\n\n };\n Papa.parse(asyncIterator, config, AsyncIteratorStreamer);\n return asyncQueue;\n}\n\nfunction isHeaderRow(row) {\n return row && row.every(value => typeof value === 'string');\n}\n\nfunction readFirstRow(csvText) {\n const result = Papa.parse(csvText, {\n download: false,\n dynamicTyping: true,\n preview: 1\n });\n return result.data[0];\n}\n\nfunction duplicateColumnTransformer() {\n const observedColumns = new Set();\n return col => {\n let colName = col;\n let counter = 1;\n\n while (observedColumns.has(colName)) {\n colName = \"\".concat(col, \".\").concat(counter);\n counter++;\n }\n\n observedColumns.add(colName);\n return colName;\n };\n}\n\nfunction generateHeader(columnPrefix, count = 0) {\n const headers = [];\n\n for (let i = 0; i < count; i++) {\n headers.push(\"\".concat(columnPrefix).concat(i + 1));\n }\n\n return headers;\n}\n\nfunction deduceSchema(row, headerRow) {\n const schema = headerRow ? {} : [];\n\n for (let i = 0; i < row.length; i++) {\n const columnName = headerRow && headerRow[i] || i;\n const value = row[i];\n\n switch (typeof value) {\n case 'number':\n case 'boolean':\n schema[columnName] = {\n name: String(columnName),\n index: i,\n type: Float32Array\n };\n break;\n\n case 'string':\n default:\n schema[columnName] = {\n name: String(columnName),\n index: i,\n type: Array\n };\n }\n }\n\n return schema;\n}\n\nexport const _typecheckCSVLoader = CSVLoader;\n//# sourceMappingURL=csv-loader.js.map","/* global document */\nlet lastPickedObject;\nlet lastTooltip;\n\nconst DEFAULT_STYLE = {\n fontFamily: '\"Helvetica Neue\", Helvetica, Arial, sans-serif',\n display: 'flex',\n flex: 'wrap',\n maxWidth: '500px',\n flexDirection: 'column',\n zIndex: 2\n};\n\nfunction getDiv() {\n return document.createElement('div');\n}\n\nexport function getTooltipDefault(pickedInfo) {\n if (!pickedInfo.picked) {\n return null;\n }\n if (pickedInfo.object === lastPickedObject) {\n return lastTooltip;\n }\n const tooltip = {\n html: tabularize(pickedInfo.object),\n style: DEFAULT_STYLE\n };\n lastTooltip = tooltip;\n lastPickedObject = pickedInfo.object;\n return tooltip;\n}\n\nconst EXCLUDES = new Set(['position', 'index']);\n\nexport function tabularize(json) {\n // Turns a JSON object of picked info into HTML for a tooltip\n const dataTable = getDiv();\n\n // Creates rows of two columns for the tooltip\n for (const key in json) {\n if (EXCLUDES.has(key)) {\n continue; // eslint-disable-line\n }\n const header = getDiv();\n header.className = 'header';\n header.textContent = key;\n\n const valueElement = getDiv();\n valueElement.className = 'value';\n\n valueElement.textContent = toText(json[key]);\n\n const row = getDiv();\n\n setStyles(row, header, valueElement);\n\n row.appendChild(header);\n row.appendChild(valueElement);\n dataTable.appendChild(row);\n }\n\n return dataTable.innerHTML;\n}\n\nfunction setStyles(row, header, value) {\n // Set default tooltip style\n Object.assign(header.style, {\n fontWeight: 700,\n marginRight: '10px',\n flex: '1 1 0%'\n });\n\n Object.assign(value.style, {\n flex: 'none',\n maxWidth: '250px',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n });\n\n Object.assign(row.style, {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'stretch'\n });\n}\n\nexport function toText(jsonValue) {\n // Set contents of table value, trimming for certain types of data\n let text;\n if (Array.isArray(jsonValue) && jsonValue.length > 4) {\n text = `Array<${jsonValue.length}>`;\n } else if (typeof jsonValue === 'string') {\n text = jsonValue;\n } else if (typeof jsonValue === 'number') {\n text = String(jsonValue);\n } else {\n try {\n text = JSON.stringify(jsonValue);\n } catch (err) {\n text = '';\n }\n }\n const MAX_LENGTH = 50;\n if (text.length > MAX_LENGTH) {\n text = text.slice(0, MAX_LENGTH);\n }\n return text;\n}\n\nexport function substituteIn(template, json) {\n /*\n * Flexible substitution of templates using a json:\n * - if the json contains the key, use [key]\n * - if the json does not contain the key, try ['properties'][key]\n * - if the key contains several keys separated with dots, use them all in a row:\n * e.g. 'a.b.c' will read json['a']['b']['c']\n */\n let value;\n let output = template;\n const propsKey = 'properties';\n const keyPattern = /{[^}]*}/g;\n const cleanKey = k => k.replace(/[{}]/g, '');\n const keys = [...new Set(template.match(keyPattern).map(cleanKey))];\n\n for (const key of keys) {\n if (key.includes('.')) {\n value = json;\n const subkeys = key.split('.');\n for (const subkey of subkeys) {\n if (value.hasOwnProperty(subkey)) {\n value = value[subkey];\n } else {\n value = undefined;\n break;\n }\n }\n } else if (json.hasOwnProperty(key)) {\n value = json[key];\n } else if (json[propsKey] && json[propsKey].hasOwnProperty(key)) {\n value = json[propsKey][key];\n } else {\n value = undefined;\n }\n output = output.replaceAll(`{${key}}`, value);\n }\n\n return output;\n}\n\nexport default function makeTooltip(tooltip) {\n /*\n * If explictly no tooltip passed by user, return null\n * If a JSON object passed, return a tooltip based on that object\n * We expect the user has passed a string template that will take pickedInfo keywords\n * If a boolean passed, return the default tooltip\n */\n if (!tooltip) {\n return null;\n }\n\n if (tooltip.html || tooltip.text) {\n return pickedInfo => {\n if (!pickedInfo.picked) {\n return null;\n }\n\n const formattedTooltip = {\n style: tooltip.style || DEFAULT_STYLE\n };\n\n if (tooltip.html) {\n formattedTooltip.html = substituteIn(tooltip.html, pickedInfo.object);\n } else {\n formattedTooltip.text = substituteIn(tooltip.text, pickedInfo.object);\n }\n\n return formattedTooltip;\n };\n }\n\n return getTooltipDefault;\n}\n","/* global document */\n\n// Ensure we only load a script once\nconst scriptLoadPromises = {};\n\nexport function loadScript(url) {\n if (!scriptLoadPromises[url]) {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n const head = document.querySelector('head');\n head.appendChild(script);\n\n scriptLoadPromises[url] = new Promise(resolve => {\n script.onload = resolve;\n });\n }\n return scriptLoadPromises[url];\n}\n","export const BOX_STYLE = {\n position: 'absolute',\n top: '0px',\n left: '0px',\n width: 344,\n padding: '12px 24px',\n margin: 24,\n overflowX: 'hidden',\n overflowY: 'overlay',\n outline: 'none',\n maxHeight: '94%',\n boxSizing: 'border-box',\n backgroundColor: 'rgb(255, 255, 255)',\n fontFamily: '\"Fira Sans\", sans-serif',\n zIndex: 1\n};\n","/* global document */\n\nimport {BOX_STYLE} from './component-css';\n\nclass DescriptionCard {\n constructor({container, props}) {\n const {description} = props;\n\n const div = document.createElement('div');\n div.className = 'deck-json-description-box';\n Object.assign(div.style, BOX_STYLE);\n this.el = div;\n\n const textContainer = document.createElement('div');\n textContainer.innerHTML = description;\n\n div.appendChild(textContainer);\n container.append(div);\n }\n\n remove() {\n this.el.remove();\n this.description = null;\n }\n\n static get stringName() {\n // name within JSON\n return 'description';\n }\n}\n\nexport default DescriptionCard;\n","/* global console, window */\n/* eslint-disable no-console */\nimport {CSVLoader} from '@loaders.gl/csv';\nimport {registerLoaders} from '@loaders.gl/core';\n// Avoid calling it GL - would be removed by babel-plugin-inline-webgl-constants\nimport GLConstants from '@luma.gl/constants';\n\nimport makeTooltip from './widget-tooltip';\n\nimport mapboxgl, {modifyMapboxElements} from './utils/mapbox-utils';\nimport {loadScript} from './utils/script-utils';\nimport {createGoogleMapsDeckOverlay} from './utils/google-maps-utils';\n\nimport {addSupportComponents} from '../lib/components/index';\n\nimport * as deck from '../deck-bundle';\n\nconst classesFilter = x => x.charAt(0) === x.charAt(0).toUpperCase();\nconst functionsFilter = x => x.charAt(0) === x.charAt(0).toLowerCase() && x.charAt(0) != '_';\n\nfunction extractElements(library = {}, filter) {\n // Extracts exported elements as a dictionary from a library\n const dict = {};\n const elements = Object.keys(library).filter(filter);\n for (const el of elements) {\n dict[el] = library[el];\n }\n return dict;\n}\n\n// Handle JSONConverter and loaders configuration\nconst jsonConverterConfiguration = {\n classes: extractElements(deck, classesFilter),\n // Will be resolved as `.`\n enumerations: {\n COORDINATE_SYSTEM: deck.COORDINATE_SYSTEM,\n GL: GLConstants\n }\n};\n\nregisterLoaders([CSVLoader]);\n\nconst jsonConverter = new deck.JSONConverter({\n configuration: jsonConverterConfiguration\n});\n\nfunction addModuleToConverter(module, converter) {\n const newConfiguration = {\n classes: extractElements(module, classesFilter),\n functions: extractElements(module, functionsFilter)\n };\n converter.mergeConfiguration(newConfiguration);\n}\n\nexport function addCustomLibraries(customLibraries, onComplete) {\n if (!customLibraries) {\n return;\n }\n\n const loaded = {};\n\n function onEachFinish() {\n if (Object.values(loaded).every(f => f)) {\n // when all libraries loaded\n if (typeof onComplete === 'function') onComplete();\n }\n }\n\n function onModuleLoaded(libraryName, module) {\n addModuleToConverter(module, jsonConverter);\n loaded[libraryName] = module;\n onEachFinish();\n }\n\n customLibraries.forEach(({libraryName, resourceUri}) => {\n // set loaded to be false, even if addCustomLibraries is called multiple times\n // with the same parameters\n loaded[libraryName] = false;\n\n if (libraryName in window) {\n // do not redefine\n onModuleLoaded(libraryName, window[libraryName]);\n return;\n }\n\n // because loadscript is async and scipt execution is untraceble\n // the only way we can listen on its execution complete is to observe on the\n // window.libraryName property\n Object.defineProperty(window, libraryName, {\n set: module => onModuleLoaded(libraryName, module),\n get: () => {\n return loaded[libraryName];\n }\n });\n\n loadScript(resourceUri);\n });\n}\n\nfunction updateDeck(inputJson, deckgl) {\n const results = jsonConverter.convert(inputJson);\n deckgl.setProps(results);\n}\n\nfunction missingLayers(oldLayers, newLayers) {\n return oldLayers.filter(ol => ol && ol.id && !newLayers.find(nl => nl.id === ol.id));\n}\n\nfunction createStandaloneFromProvider({\n mapProvider,\n props,\n mapboxApiKey,\n googleMapsKey,\n handleEvent,\n getTooltip,\n container\n}) {\n // Common deck.gl props for all basemaos\n const handlers = handleEvent\n ? {\n onClick: info => handleEvent('deck-click-event', info),\n onHover: info => handleEvent('deck-hover-event', info),\n onResize: size => handleEvent('deck-resize-event', size),\n onViewStateChange: ({viewState, interactionState, oldViewState}) => {\n const viewport = new deck.WebMercatorViewport(viewState);\n viewState.nw = viewport.unproject([0, 0]);\n viewState.se = viewport.unproject([viewport.width, viewport.height]);\n handleEvent('deck-view-state-change-event', viewState);\n },\n onDragStart: info => handleEvent('deck-drag-start-event', info),\n onDrag: info => handleEvent('deck-drag-event', info),\n onDragEnd: info => handleEvent('deck-drag-end-event', info)\n }\n : null;\n\n const sharedProps = {\n ...handlers,\n getTooltip,\n container\n };\n\n switch (mapProvider) {\n case 'mapbox':\n deck.log.info('Using Mapbox base maps')();\n return new deck.DeckGL({\n ...sharedProps,\n ...props,\n map: mapboxgl,\n mapboxApiAccessToken: mapboxApiKey,\n onLoad: modifyMapboxElements\n });\n case 'carto':\n deck.log.info('Using Carto base maps')();\n return new deck.DeckGL({\n map: mapboxgl,\n ...sharedProps,\n ...props\n });\n case 'google_maps':\n deck.log.info('Using Google Maps base maps')();\n return createGoogleMapsDeckOverlay({\n ...sharedProps,\n ...props,\n googleMapsKey\n });\n default:\n deck.log.info('No recognized map provider specified')();\n return new deck.DeckGL({\n ...sharedProps,\n ...props,\n map: null,\n mapboxApiAccessToken: null\n });\n }\n}\n\nfunction createDeck({\n mapboxApiKey,\n googleMapsKey,\n container,\n jsonInput,\n tooltip,\n handleEvent,\n customLibraries,\n configuration\n}) {\n let deckgl;\n try {\n if (configuration) {\n jsonConverter.mergeConfiguration(configuration);\n }\n\n const oldLayers = jsonInput.layers || [];\n const props = jsonConverter.convert(jsonInput);\n\n addSupportComponents(container, props);\n\n const convertedLayers = (props.layers || []).filter(l => l);\n\n // loading custom library is async, some layers might not be convertable before custom library loads\n const layerToLoad = missingLayers(oldLayers, convertedLayers);\n const getTooltip = makeTooltip(tooltip);\n const {mapProvider} = props;\n\n deckgl = createStandaloneFromProvider({\n mapProvider,\n props,\n mapboxApiKey,\n googleMapsKey,\n handleEvent,\n getTooltip,\n container\n });\n\n const onComplete = () => {\n if (layerToLoad.length) {\n // convert input layer again to presist layer order\n const newProps = jsonConverter.convert({layers: jsonInput.layers});\n const newLayers = (newProps.layers || []).filter(l => l);\n\n if (newLayers.length > convertedLayers.length) {\n // if more layers are converted\n deckgl.setProps({layers: newLayers});\n }\n }\n };\n\n addCustomLibraries(customLibraries, onComplete);\n } catch (err) {\n // This will fail in node tests\n // eslint-disable-next-line\n console.error(err);\n }\n return deckgl;\n}\n\nexport {createDeck, updateDeck, jsonConverter};\n","export default {\n DEPTH_BUFFER_BIT: 0x00000100,\n STENCIL_BUFFER_BIT: 0x00000400,\n COLOR_BUFFER_BIT: 0x00004000,\n POINTS: 0x0000,\n LINES: 0x0001,\n LINE_LOOP: 0x0002,\n LINE_STRIP: 0x0003,\n TRIANGLES: 0x0004,\n TRIANGLE_STRIP: 0x0005,\n TRIANGLE_FAN: 0x0006,\n ZERO: 0,\n ONE: 1,\n SRC_COLOR: 0x0300,\n ONE_MINUS_SRC_COLOR: 0x0301,\n SRC_ALPHA: 0x0302,\n ONE_MINUS_SRC_ALPHA: 0x0303,\n DST_ALPHA: 0x0304,\n ONE_MINUS_DST_ALPHA: 0x0305,\n DST_COLOR: 0x0306,\n ONE_MINUS_DST_COLOR: 0x0307,\n SRC_ALPHA_SATURATE: 0x0308,\n CONSTANT_COLOR: 0x8001,\n ONE_MINUS_CONSTANT_COLOR: 0x8002,\n CONSTANT_ALPHA: 0x8003,\n ONE_MINUS_CONSTANT_ALPHA: 0x8004,\n FUNC_ADD: 0x8006,\n FUNC_SUBTRACT: 0x800a,\n FUNC_REVERSE_SUBTRACT: 0x800b,\n BLEND_EQUATION: 0x8009,\n BLEND_EQUATION_RGB: 0x8009,\n BLEND_EQUATION_ALPHA: 0x883d,\n BLEND_DST_RGB: 0x80c8,\n BLEND_SRC_RGB: 0x80c9,\n BLEND_DST_ALPHA: 0x80ca,\n BLEND_SRC_ALPHA: 0x80cb,\n BLEND_COLOR: 0x8005,\n ARRAY_BUFFER_BINDING: 0x8894,\n ELEMENT_ARRAY_BUFFER_BINDING: 0x8895,\n LINE_WIDTH: 0x0b21,\n ALIASED_POINT_SIZE_RANGE: 0x846d,\n ALIASED_LINE_WIDTH_RANGE: 0x846e,\n CULL_FACE_MODE: 0x0b45,\n FRONT_FACE: 0x0b46,\n DEPTH_RANGE: 0x0b70,\n DEPTH_WRITEMASK: 0x0b72,\n DEPTH_CLEAR_VALUE: 0x0b73,\n DEPTH_FUNC: 0x0b74,\n STENCIL_CLEAR_VALUE: 0x0b91,\n STENCIL_FUNC: 0x0b92,\n STENCIL_FAIL: 0x0b94,\n STENCIL_PASS_DEPTH_FAIL: 0x0b95,\n STENCIL_PASS_DEPTH_PASS: 0x0b96,\n STENCIL_REF: 0x0b97,\n STENCIL_VALUE_MASK: 0x0b93,\n STENCIL_WRITEMASK: 0x0b98,\n STENCIL_BACK_FUNC: 0x8800,\n STENCIL_BACK_FAIL: 0x8801,\n STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802,\n STENCIL_BACK_PASS_DEPTH_PASS: 0x8803,\n STENCIL_BACK_REF: 0x8ca3,\n STENCIL_BACK_VALUE_MASK: 0x8ca4,\n STENCIL_BACK_WRITEMASK: 0x8ca5,\n VIEWPORT: 0x0ba2,\n SCISSOR_BOX: 0x0c10,\n COLOR_CLEAR_VALUE: 0x0c22,\n COLOR_WRITEMASK: 0x0c23,\n UNPACK_ALIGNMENT: 0x0cf5,\n PACK_ALIGNMENT: 0x0d05,\n MAX_TEXTURE_SIZE: 0x0d33,\n MAX_VIEWPORT_DIMS: 0x0d3a,\n SUBPIXEL_BITS: 0x0d50,\n RED_BITS: 0x0d52,\n GREEN_BITS: 0x0d53,\n BLUE_BITS: 0x0d54,\n ALPHA_BITS: 0x0d55,\n DEPTH_BITS: 0x0d56,\n STENCIL_BITS: 0x0d57,\n POLYGON_OFFSET_UNITS: 0x2a00,\n POLYGON_OFFSET_FACTOR: 0x8038,\n TEXTURE_BINDING_2D: 0x8069,\n SAMPLE_BUFFERS: 0x80a8,\n SAMPLES: 0x80a9,\n SAMPLE_COVERAGE_VALUE: 0x80aa,\n SAMPLE_COVERAGE_INVERT: 0x80ab,\n COMPRESSED_TEXTURE_FORMATS: 0x86a3,\n VENDOR: 0x1f00,\n RENDERER: 0x1f01,\n VERSION: 0x1f02,\n IMPLEMENTATION_COLOR_READ_TYPE: 0x8b9a,\n IMPLEMENTATION_COLOR_READ_FORMAT: 0x8b9b,\n BROWSER_DEFAULT_WEBGL: 0x9244,\n STATIC_DRAW: 0x88e4,\n STREAM_DRAW: 0x88e0,\n DYNAMIC_DRAW: 0x88e8,\n ARRAY_BUFFER: 0x8892,\n ELEMENT_ARRAY_BUFFER: 0x8893,\n BUFFER_SIZE: 0x8764,\n BUFFER_USAGE: 0x8765,\n CURRENT_VERTEX_ATTRIB: 0x8626,\n VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622,\n VERTEX_ATTRIB_ARRAY_SIZE: 0x8623,\n VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624,\n VERTEX_ATTRIB_ARRAY_TYPE: 0x8625,\n VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886a,\n VERTEX_ATTRIB_ARRAY_POINTER: 0x8645,\n VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889f,\n CULL_FACE: 0x0b44,\n FRONT: 0x0404,\n BACK: 0x0405,\n FRONT_AND_BACK: 0x0408,\n BLEND: 0x0be2,\n DEPTH_TEST: 0x0b71,\n DITHER: 0x0bd0,\n POLYGON_OFFSET_FILL: 0x8037,\n SAMPLE_ALPHA_TO_COVERAGE: 0x809e,\n SAMPLE_COVERAGE: 0x80a0,\n SCISSOR_TEST: 0x0c11,\n STENCIL_TEST: 0x0b90,\n NO_ERROR: 0,\n INVALID_ENUM: 0x0500,\n INVALID_VALUE: 0x0501,\n INVALID_OPERATION: 0x0502,\n OUT_OF_MEMORY: 0x0505,\n CONTEXT_LOST_WEBGL: 0x9242,\n CW: 0x0900,\n CCW: 0x0901,\n DONT_CARE: 0x1100,\n FASTEST: 0x1101,\n NICEST: 0x1102,\n GENERATE_MIPMAP_HINT: 0x8192,\n BYTE: 0x1400,\n UNSIGNED_BYTE: 0x1401,\n SHORT: 0x1402,\n UNSIGNED_SHORT: 0x1403,\n INT: 0x1404,\n UNSIGNED_INT: 0x1405,\n FLOAT: 0x1406,\n DOUBLE: 0x140a,\n DEPTH_COMPONENT: 0x1902,\n ALPHA: 0x1906,\n RGB: 0x1907,\n RGBA: 0x1908,\n LUMINANCE: 0x1909,\n LUMINANCE_ALPHA: 0x190a,\n UNSIGNED_SHORT_4_4_4_4: 0x8033,\n UNSIGNED_SHORT_5_5_5_1: 0x8034,\n UNSIGNED_SHORT_5_6_5: 0x8363,\n FRAGMENT_SHADER: 0x8b30,\n VERTEX_SHADER: 0x8b31,\n COMPILE_STATUS: 0x8b81,\n DELETE_STATUS: 0x8b80,\n LINK_STATUS: 0x8b82,\n VALIDATE_STATUS: 0x8b83,\n ATTACHED_SHADERS: 0x8b85,\n ACTIVE_ATTRIBUTES: 0x8b89,\n ACTIVE_UNIFORMS: 0x8b86,\n MAX_VERTEX_ATTRIBS: 0x8869,\n MAX_VERTEX_UNIFORM_VECTORS: 0x8dfb,\n MAX_VARYING_VECTORS: 0x8dfc,\n MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8b4d,\n MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8b4c,\n MAX_TEXTURE_IMAGE_UNITS: 0x8872,\n MAX_FRAGMENT_UNIFORM_VECTORS: 0x8dfd,\n SHADER_TYPE: 0x8b4f,\n SHADING_LANGUAGE_VERSION: 0x8b8c,\n CURRENT_PROGRAM: 0x8b8d,\n NEVER: 0x0200,\n ALWAYS: 0x0207,\n LESS: 0x0201,\n EQUAL: 0x0202,\n LEQUAL: 0x0203,\n GREATER: 0x0204,\n GEQUAL: 0x0206,\n NOTEQUAL: 0x0205,\n KEEP: 0x1e00,\n REPLACE: 0x1e01,\n INCR: 0x1e02,\n DECR: 0x1e03,\n INVERT: 0x150a,\n INCR_WRAP: 0x8507,\n DECR_WRAP: 0x8508,\n NEAREST: 0x2600,\n LINEAR: 0x2601,\n NEAREST_MIPMAP_NEAREST: 0x2700,\n LINEAR_MIPMAP_NEAREST: 0x2701,\n NEAREST_MIPMAP_LINEAR: 0x2702,\n LINEAR_MIPMAP_LINEAR: 0x2703,\n TEXTURE_MAG_FILTER: 0x2800,\n TEXTURE_MIN_FILTER: 0x2801,\n TEXTURE_WRAP_S: 0x2802,\n TEXTURE_WRAP_T: 0x2803,\n TEXTURE_2D: 0x0de1,\n TEXTURE: 0x1702,\n TEXTURE_CUBE_MAP: 0x8513,\n TEXTURE_BINDING_CUBE_MAP: 0x8514,\n TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515,\n TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516,\n TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517,\n TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518,\n TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519,\n TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851a,\n MAX_CUBE_MAP_TEXTURE_SIZE: 0x851c,\n TEXTURE0: 0x84c0,\n ACTIVE_TEXTURE: 0x84e0,\n REPEAT: 0x2901,\n CLAMP_TO_EDGE: 0x812f,\n MIRRORED_REPEAT: 0x8370,\n TEXTURE_WIDTH: 0x1000,\n TEXTURE_HEIGHT: 0x1001,\n FLOAT_VEC2: 0x8b50,\n FLOAT_VEC3: 0x8b51,\n FLOAT_VEC4: 0x8b52,\n INT_VEC2: 0x8b53,\n INT_VEC3: 0x8b54,\n INT_VEC4: 0x8b55,\n BOOL: 0x8b56,\n BOOL_VEC2: 0x8b57,\n BOOL_VEC3: 0x8b58,\n BOOL_VEC4: 0x8b59,\n FLOAT_MAT2: 0x8b5a,\n FLOAT_MAT3: 0x8b5b,\n FLOAT_MAT4: 0x8b5c,\n SAMPLER_2D: 0x8b5e,\n SAMPLER_CUBE: 0x8b60,\n LOW_FLOAT: 0x8df0,\n MEDIUM_FLOAT: 0x8df1,\n HIGH_FLOAT: 0x8df2,\n LOW_INT: 0x8df3,\n MEDIUM_INT: 0x8df4,\n HIGH_INT: 0x8df5,\n FRAMEBUFFER: 0x8d40,\n RENDERBUFFER: 0x8d41,\n RGBA4: 0x8056,\n RGB5_A1: 0x8057,\n RGB565: 0x8d62,\n DEPTH_COMPONENT16: 0x81a5,\n STENCIL_INDEX: 0x1901,\n STENCIL_INDEX8: 0x8d48,\n DEPTH_STENCIL: 0x84f9,\n RENDERBUFFER_WIDTH: 0x8d42,\n RENDERBUFFER_HEIGHT: 0x8d43,\n RENDERBUFFER_INTERNAL_FORMAT: 0x8d44,\n RENDERBUFFER_RED_SIZE: 0x8d50,\n RENDERBUFFER_GREEN_SIZE: 0x8d51,\n RENDERBUFFER_BLUE_SIZE: 0x8d52,\n RENDERBUFFER_ALPHA_SIZE: 0x8d53,\n RENDERBUFFER_DEPTH_SIZE: 0x8d54,\n RENDERBUFFER_STENCIL_SIZE: 0x8d55,\n FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8cd0,\n FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8cd1,\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8cd2,\n FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8cd3,\n COLOR_ATTACHMENT0: 0x8ce0,\n DEPTH_ATTACHMENT: 0x8d00,\n STENCIL_ATTACHMENT: 0x8d20,\n DEPTH_STENCIL_ATTACHMENT: 0x821a,\n NONE: 0,\n FRAMEBUFFER_COMPLETE: 0x8cd5,\n FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8cd6,\n FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8cd7,\n FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8cd9,\n FRAMEBUFFER_UNSUPPORTED: 0x8cdd,\n FRAMEBUFFER_BINDING: 0x8ca6,\n RENDERBUFFER_BINDING: 0x8ca7,\n READ_FRAMEBUFFER: 0x8ca8,\n DRAW_FRAMEBUFFER: 0x8ca9,\n MAX_RENDERBUFFER_SIZE: 0x84e8,\n INVALID_FRAMEBUFFER_OPERATION: 0x0506,\n UNPACK_FLIP_Y_WEBGL: 0x9240,\n UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241,\n UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243,\n READ_BUFFER: 0x0c02,\n UNPACK_ROW_LENGTH: 0x0cf2,\n UNPACK_SKIP_ROWS: 0x0cf3,\n UNPACK_SKIP_PIXELS: 0x0cf4,\n PACK_ROW_LENGTH: 0x0d02,\n PACK_SKIP_ROWS: 0x0d03,\n PACK_SKIP_PIXELS: 0x0d04,\n TEXTURE_BINDING_3D: 0x806a,\n UNPACK_SKIP_IMAGES: 0x806d,\n UNPACK_IMAGE_HEIGHT: 0x806e,\n MAX_3D_TEXTURE_SIZE: 0x8073,\n MAX_ELEMENTS_VERTICES: 0x80e8,\n MAX_ELEMENTS_INDICES: 0x80e9,\n MAX_TEXTURE_LOD_BIAS: 0x84fd,\n MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8b49,\n MAX_VERTEX_UNIFORM_COMPONENTS: 0x8b4a,\n MAX_ARRAY_TEXTURE_LAYERS: 0x88ff,\n MIN_PROGRAM_TEXEL_OFFSET: 0x8904,\n MAX_PROGRAM_TEXEL_OFFSET: 0x8905,\n MAX_VARYING_COMPONENTS: 0x8b4b,\n FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8b8b,\n RASTERIZER_DISCARD: 0x8c89,\n VERTEX_ARRAY_BINDING: 0x85b5,\n MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122,\n MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125,\n MAX_SERVER_WAIT_TIMEOUT: 0x9111,\n MAX_ELEMENT_INDEX: 0x8d6b,\n RED: 0x1903,\n RGB8: 0x8051,\n RGBA8: 0x8058,\n RGB10_A2: 0x8059,\n TEXTURE_3D: 0x806f,\n TEXTURE_WRAP_R: 0x8072,\n TEXTURE_MIN_LOD: 0x813a,\n TEXTURE_MAX_LOD: 0x813b,\n TEXTURE_BASE_LEVEL: 0x813c,\n TEXTURE_MAX_LEVEL: 0x813d,\n TEXTURE_COMPARE_MODE: 0x884c,\n TEXTURE_COMPARE_FUNC: 0x884d,\n SRGB: 0x8c40,\n SRGB8: 0x8c41,\n SRGB8_ALPHA8: 0x8c43,\n COMPARE_REF_TO_TEXTURE: 0x884e,\n RGBA32F: 0x8814,\n RGB32F: 0x8815,\n RGBA16F: 0x881a,\n RGB16F: 0x881b,\n TEXTURE_2D_ARRAY: 0x8c1a,\n TEXTURE_BINDING_2D_ARRAY: 0x8c1d,\n R11F_G11F_B10F: 0x8c3a,\n RGB9_E5: 0x8c3d,\n RGBA32UI: 0x8d70,\n RGB32UI: 0x8d71,\n RGBA16UI: 0x8d76,\n RGB16UI: 0x8d77,\n RGBA8UI: 0x8d7c,\n RGB8UI: 0x8d7d,\n RGBA32I: 0x8d82,\n RGB32I: 0x8d83,\n RGBA16I: 0x8d88,\n RGB16I: 0x8d89,\n RGBA8I: 0x8d8e,\n RGB8I: 0x8d8f,\n RED_INTEGER: 0x8d94,\n RGB_INTEGER: 0x8d98,\n RGBA_INTEGER: 0x8d99,\n R8: 0x8229,\n RG8: 0x822b,\n R16F: 0x822d,\n R32F: 0x822e,\n RG16F: 0x822f,\n RG32F: 0x8230,\n R8I: 0x8231,\n R8UI: 0x8232,\n R16I: 0x8233,\n R16UI: 0x8234,\n R32I: 0x8235,\n R32UI: 0x8236,\n RG8I: 0x8237,\n RG8UI: 0x8238,\n RG16I: 0x8239,\n RG16UI: 0x823a,\n RG32I: 0x823b,\n RG32UI: 0x823c,\n R8_SNORM: 0x8f94,\n RG8_SNORM: 0x8f95,\n RGB8_SNORM: 0x8f96,\n RGBA8_SNORM: 0x8f97,\n RGB10_A2UI: 0x906f,\n TEXTURE_IMMUTABLE_FORMAT: 0x912f,\n TEXTURE_IMMUTABLE_LEVELS: 0x82df,\n UNSIGNED_INT_2_10_10_10_REV: 0x8368,\n UNSIGNED_INT_10F_11F_11F_REV: 0x8c3b,\n UNSIGNED_INT_5_9_9_9_REV: 0x8c3e,\n FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8dad,\n UNSIGNED_INT_24_8: 0x84fa,\n HALF_FLOAT: 0x140b,\n RG: 0x8227,\n RG_INTEGER: 0x8228,\n INT_2_10_10_10_REV: 0x8d9f,\n CURRENT_QUERY: 0x8865,\n QUERY_RESULT: 0x8866,\n QUERY_RESULT_AVAILABLE: 0x8867,\n ANY_SAMPLES_PASSED: 0x8c2f,\n ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8d6a,\n MAX_DRAW_BUFFERS: 0x8824,\n DRAW_BUFFER0: 0x8825,\n DRAW_BUFFER1: 0x8826,\n DRAW_BUFFER2: 0x8827,\n DRAW_BUFFER3: 0x8828,\n DRAW_BUFFER4: 0x8829,\n DRAW_BUFFER5: 0x882a,\n DRAW_BUFFER6: 0x882b,\n DRAW_BUFFER7: 0x882c,\n DRAW_BUFFER8: 0x882d,\n DRAW_BUFFER9: 0x882e,\n DRAW_BUFFER10: 0x882f,\n DRAW_BUFFER11: 0x8830,\n DRAW_BUFFER12: 0x8831,\n DRAW_BUFFER13: 0x8832,\n DRAW_BUFFER14: 0x8833,\n DRAW_BUFFER15: 0x8834,\n MAX_COLOR_ATTACHMENTS: 0x8cdf,\n COLOR_ATTACHMENT1: 0x8ce1,\n COLOR_ATTACHMENT2: 0x8ce2,\n COLOR_ATTACHMENT3: 0x8ce3,\n COLOR_ATTACHMENT4: 0x8ce4,\n COLOR_ATTACHMENT5: 0x8ce5,\n COLOR_ATTACHMENT6: 0x8ce6,\n COLOR_ATTACHMENT7: 0x8ce7,\n COLOR_ATTACHMENT8: 0x8ce8,\n COLOR_ATTACHMENT9: 0x8ce9,\n COLOR_ATTACHMENT10: 0x8cea,\n COLOR_ATTACHMENT11: 0x8ceb,\n COLOR_ATTACHMENT12: 0x8cec,\n COLOR_ATTACHMENT13: 0x8ced,\n COLOR_ATTACHMENT14: 0x8cee,\n COLOR_ATTACHMENT15: 0x8cef,\n SAMPLER_3D: 0x8b5f,\n SAMPLER_2D_SHADOW: 0x8b62,\n SAMPLER_2D_ARRAY: 0x8dc1,\n SAMPLER_2D_ARRAY_SHADOW: 0x8dc4,\n SAMPLER_CUBE_SHADOW: 0x8dc5,\n INT_SAMPLER_2D: 0x8dca,\n INT_SAMPLER_3D: 0x8dcb,\n INT_SAMPLER_CUBE: 0x8dcc,\n INT_SAMPLER_2D_ARRAY: 0x8dcf,\n UNSIGNED_INT_SAMPLER_2D: 0x8dd2,\n UNSIGNED_INT_SAMPLER_3D: 0x8dd3,\n UNSIGNED_INT_SAMPLER_CUBE: 0x8dd4,\n UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8dd7,\n MAX_SAMPLES: 0x8d57,\n SAMPLER_BINDING: 0x8919,\n PIXEL_PACK_BUFFER: 0x88eb,\n PIXEL_UNPACK_BUFFER: 0x88ec,\n PIXEL_PACK_BUFFER_BINDING: 0x88ed,\n PIXEL_UNPACK_BUFFER_BINDING: 0x88ef,\n COPY_READ_BUFFER: 0x8f36,\n COPY_WRITE_BUFFER: 0x8f37,\n COPY_READ_BUFFER_BINDING: 0x8f36,\n COPY_WRITE_BUFFER_BINDING: 0x8f37,\n FLOAT_MAT2x3: 0x8b65,\n FLOAT_MAT2x4: 0x8b66,\n FLOAT_MAT3x2: 0x8b67,\n FLOAT_MAT3x4: 0x8b68,\n FLOAT_MAT4x2: 0x8b69,\n FLOAT_MAT4x3: 0x8b6a,\n UNSIGNED_INT_VEC2: 0x8dc6,\n UNSIGNED_INT_VEC3: 0x8dc7,\n UNSIGNED_INT_VEC4: 0x8dc8,\n UNSIGNED_NORMALIZED: 0x8c17,\n SIGNED_NORMALIZED: 0x8f9c,\n VERTEX_ATTRIB_ARRAY_INTEGER: 0x88fd,\n VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88fe,\n TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8c7f,\n MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8c80,\n TRANSFORM_FEEDBACK_VARYINGS: 0x8c83,\n TRANSFORM_FEEDBACK_BUFFER_START: 0x8c84,\n TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8c85,\n TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8c88,\n MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8c8a,\n MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8c8b,\n INTERLEAVED_ATTRIBS: 0x8c8c,\n SEPARATE_ATTRIBS: 0x8c8d,\n TRANSFORM_FEEDBACK_BUFFER: 0x8c8e,\n TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8c8f,\n TRANSFORM_FEEDBACK: 0x8e22,\n TRANSFORM_FEEDBACK_PAUSED: 0x8e23,\n TRANSFORM_FEEDBACK_ACTIVE: 0x8e24,\n TRANSFORM_FEEDBACK_BINDING: 0x8e25,\n FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210,\n FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211,\n FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212,\n FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213,\n FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214,\n FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215,\n FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216,\n FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217,\n FRAMEBUFFER_DEFAULT: 0x8218,\n DEPTH24_STENCIL8: 0x88f0,\n DRAW_FRAMEBUFFER_BINDING: 0x8ca6,\n READ_FRAMEBUFFER_BINDING: 0x8caa,\n RENDERBUFFER_SAMPLES: 0x8cab,\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8cd4,\n FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8d56,\n UNIFORM_BUFFER: 0x8a11,\n UNIFORM_BUFFER_BINDING: 0x8a28,\n UNIFORM_BUFFER_START: 0x8a29,\n UNIFORM_BUFFER_SIZE: 0x8a2a,\n MAX_VERTEX_UNIFORM_BLOCKS: 0x8a2b,\n MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8a2d,\n MAX_COMBINED_UNIFORM_BLOCKS: 0x8a2e,\n MAX_UNIFORM_BUFFER_BINDINGS: 0x8a2f,\n MAX_UNIFORM_BLOCK_SIZE: 0x8a30,\n MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8a31,\n MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8a33,\n UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8a34,\n ACTIVE_UNIFORM_BLOCKS: 0x8a36,\n UNIFORM_TYPE: 0x8a37,\n UNIFORM_SIZE: 0x8a38,\n UNIFORM_BLOCK_INDEX: 0x8a3a,\n UNIFORM_OFFSET: 0x8a3b,\n UNIFORM_ARRAY_STRIDE: 0x8a3c,\n UNIFORM_MATRIX_STRIDE: 0x8a3d,\n UNIFORM_IS_ROW_MAJOR: 0x8a3e,\n UNIFORM_BLOCK_BINDING: 0x8a3f,\n UNIFORM_BLOCK_DATA_SIZE: 0x8a40,\n UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8a42,\n UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8a43,\n UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8a44,\n UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8a46,\n OBJECT_TYPE: 0x9112,\n SYNC_CONDITION: 0x9113,\n SYNC_STATUS: 0x9114,\n SYNC_FLAGS: 0x9115,\n SYNC_FENCE: 0x9116,\n SYNC_GPU_COMMANDS_COMPLETE: 0x9117,\n UNSIGNALED: 0x9118,\n SIGNALED: 0x9119,\n ALREADY_SIGNALED: 0x911a,\n TIMEOUT_EXPIRED: 0x911b,\n CONDITION_SATISFIED: 0x911c,\n WAIT_FAILED: 0x911d,\n SYNC_FLUSH_COMMANDS_BIT: 0x00000001,\n COLOR: 0x1800,\n DEPTH: 0x1801,\n STENCIL: 0x1802,\n MIN: 0x8007,\n MAX: 0x8008,\n DEPTH_COMPONENT24: 0x81a6,\n STREAM_READ: 0x88e1,\n STREAM_COPY: 0x88e2,\n STATIC_READ: 0x88e5,\n STATIC_COPY: 0x88e6,\n DYNAMIC_READ: 0x88e9,\n DYNAMIC_COPY: 0x88ea,\n DEPTH_COMPONENT32F: 0x8cac,\n DEPTH32F_STENCIL8: 0x8cad,\n INVALID_INDEX: 0xffffffff,\n TIMEOUT_IGNORED: -1,\n MAX_CLIENT_WAIT_TIMEOUT_WEBGL: 0x9247,\n VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: 0x88fe,\n UNMASKED_VENDOR_WEBGL: 0x9245,\n UNMASKED_RENDERER_WEBGL: 0x9246,\n MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84ff,\n TEXTURE_MAX_ANISOTROPY_EXT: 0x84fe,\n COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0,\n COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1,\n COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2,\n COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3,\n COMPRESSED_R11_EAC: 0x9270,\n COMPRESSED_SIGNED_R11_EAC: 0x9271,\n COMPRESSED_RG11_EAC: 0x9272,\n COMPRESSED_SIGNED_RG11_EAC: 0x9273,\n COMPRESSED_RGB8_ETC2: 0x9274,\n COMPRESSED_RGBA8_ETC2_EAC: 0x9275,\n COMPRESSED_SRGB8_ETC2: 0x9276,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9277,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9278,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9279,\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00,\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02,\n COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01,\n COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03,\n COMPRESSED_RGB_ETC1_WEBGL: 0x8d64,\n COMPRESSED_RGB_ATC_WEBGL: 0x8c92,\n COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 0x8c92,\n COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 0x87ee,\n UNSIGNED_INT_24_8_WEBGL: 0x84fa,\n HALF_FLOAT_OES: 0x8d61,\n RGBA32F_EXT: 0x8814,\n RGB32F_EXT: 0x8815,\n FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: 0x8211,\n UNSIGNED_NORMALIZED_EXT: 0x8c17,\n MIN_EXT: 0x8007,\n MAX_EXT: 0x8008,\n SRGB_EXT: 0x8c40,\n SRGB_ALPHA_EXT: 0x8c42,\n SRGB8_ALPHA8_EXT: 0x8c43,\n FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: 0x8210,\n FRAGMENT_SHADER_DERIVATIVE_HINT_OES: 0x8b8b,\n COLOR_ATTACHMENT0_WEBGL: 0x8ce0,\n COLOR_ATTACHMENT1_WEBGL: 0x8ce1,\n COLOR_ATTACHMENT2_WEBGL: 0x8ce2,\n COLOR_ATTACHMENT3_WEBGL: 0x8ce3,\n COLOR_ATTACHMENT4_WEBGL: 0x8ce4,\n COLOR_ATTACHMENT5_WEBGL: 0x8ce5,\n COLOR_ATTACHMENT6_WEBGL: 0x8ce6,\n COLOR_ATTACHMENT7_WEBGL: 0x8ce7,\n COLOR_ATTACHMENT8_WEBGL: 0x8ce8,\n COLOR_ATTACHMENT9_WEBGL: 0x8ce9,\n COLOR_ATTACHMENT10_WEBGL: 0x8cea,\n COLOR_ATTACHMENT11_WEBGL: 0x8ceb,\n COLOR_ATTACHMENT12_WEBGL: 0x8cec,\n COLOR_ATTACHMENT13_WEBGL: 0x8ced,\n COLOR_ATTACHMENT14_WEBGL: 0x8cee,\n COLOR_ATTACHMENT15_WEBGL: 0x8cef,\n DRAW_BUFFER0_WEBGL: 0x8825,\n DRAW_BUFFER1_WEBGL: 0x8826,\n DRAW_BUFFER2_WEBGL: 0x8827,\n DRAW_BUFFER3_WEBGL: 0x8828,\n DRAW_BUFFER4_WEBGL: 0x8829,\n DRAW_BUFFER5_WEBGL: 0x882a,\n DRAW_BUFFER6_WEBGL: 0x882b,\n DRAW_BUFFER7_WEBGL: 0x882c,\n DRAW_BUFFER8_WEBGL: 0x882d,\n DRAW_BUFFER9_WEBGL: 0x882e,\n DRAW_BUFFER10_WEBGL: 0x882f,\n DRAW_BUFFER11_WEBGL: 0x8830,\n DRAW_BUFFER12_WEBGL: 0x8831,\n DRAW_BUFFER13_WEBGL: 0x8832,\n DRAW_BUFFER14_WEBGL: 0x8833,\n DRAW_BUFFER15_WEBGL: 0x8834,\n MAX_COLOR_ATTACHMENTS_WEBGL: 0x8cdf,\n MAX_DRAW_BUFFERS_WEBGL: 0x8824,\n VERTEX_ARRAY_BINDING_OES: 0x85b5,\n QUERY_COUNTER_BITS_EXT: 0x8864,\n CURRENT_QUERY_EXT: 0x8865,\n QUERY_RESULT_EXT: 0x8866,\n QUERY_RESULT_AVAILABLE_EXT: 0x8867,\n TIME_ELAPSED_EXT: 0x88bf,\n TIMESTAMP_EXT: 0x8e28,\n GPU_DISJOINT_EXT: 0x8fbb\n};\n//# sourceMappingURL=index.js.map","/* global window */\nimport * as deck from '../../deck-bundle';\n\nexport function createGoogleMapsDeckOverlay({\n container,\n onClick,\n onComplete,\n getTooltip,\n googleMapsKey,\n layers,\n mapStyle = 'satellite',\n initialViewState = {latitude: 0, longitude: 0, zoom: 1}\n}) {\n if (!googleMapsKey) {\n deck.log.warn('No Google Maps API key set')();\n return null;\n }\n const deckOverlay = new deck.GoogleMapsOverlay({layers});\n const view = {\n center: {lat: initialViewState.latitude, lng: initialViewState.longitude},\n mapTypeId: mapStyle,\n zoom: initialViewState.zoom\n };\n\n const map = new window.google.maps.Map(container, view);\n deckOverlay.setMap(map);\n return deckOverlay;\n}\n","/* global document */\nimport DescriptionCard from './description-card';\n\nexport function addSupportComponents(parentContainer, props) {\n const uiElementsOverlay = document.createElement('div');\n uiElementsOverlay.className = 'deckgl-ui-elements-overlay';\n uiElementsOverlay.style.zIndex = 1;\n parentContainer.insertAdjacentElement('beforebegin', uiElementsOverlay);\n\n const components = [];\n for (const key of Object.keys(props)) {\n switch (key) {\n case 'description':\n const el = new DescriptionCard({container: uiElementsOverlay, props});\n components.push(el);\n break;\n default:\n break;\n }\n }\n return components;\n}\n","import * as glMatrix from \"./common.js\";\n/**\r\n * 4 Dimensional Vector\r\n * @module vec4\r\n */\n\n/**\r\n * Creates a new, empty vec4\r\n *\r\n * @returns {vec4} a new 4D vector\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec4 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec4} a vector to clone\r\n * @returns {vec4} a new 4D vector\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\r\n * Creates a new vec4 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} a new 4D vector\r\n */\n\nexport function fromValues(x, y, z, w) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\r\n * Copy the values from one vec4 to another\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the source vector\r\n * @returns {vec4} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\r\n * Set the components of a vec4 to the given values\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} out\r\n */\n\nexport function set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\r\n * Adds two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n/**\r\n * Multiplies two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n/**\r\n * Divides two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to ceil\r\n * @returns {vec4} out\r\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to floor\r\n * @returns {vec4} out\r\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n/**\r\n * Math.round the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to round\r\n * @returns {vec4} out\r\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.round(a[3]);\n return out;\n}\n/**\r\n * Scales a vec4 by a scalar number\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec4} out\r\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n/**\r\n * Adds two vec4's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec4} out\r\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec4's\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec4's\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\r\n * Calculates the length of a vec4\r\n *\r\n * @param {ReadonlyVec4} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\r\n * Calculates the squared length of a vec4\r\n *\r\n * @param {ReadonlyVec4} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\r\n * Negates the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to negate\r\n * @returns {vec4} out\r\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to invert\r\n * @returns {vec4} out\r\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n/**\r\n * Normalize a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to normalize\r\n * @returns {vec4} out\r\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec4's\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n/**\r\n * Returns the cross-product of three vectors in a 4-dimensional space\r\n *\r\n * @param {ReadonlyVec4} result the receiving vector\r\n * @param {ReadonlyVec4} U the first vector\r\n * @param {ReadonlyVec4} V the second vector\r\n * @param {ReadonlyVec4} W the third vector\r\n * @returns {vec4} result\r\n */\n\nexport function cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec4's\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec4} out\r\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec4} out\r\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0; // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n\n var v1, v2, v3, v4;\n var s1, s2;\n\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n\n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n/**\r\n * Transforms the vec4 with a mat4.\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec4} out\r\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n/**\r\n * Transforms the vec4 with a quat\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to transform\r\n * @param {ReadonlyQuat} q quaternion to transform with\r\n * @returns {vec4} out\r\n */\n\nexport function transformQuat(out, a, q) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3]; // calculate quat * vec\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n}\n/**\r\n * Set the components of a vec4 to zero\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @returns {vec4} out\r\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec4} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nexport function str(a) {\n return \"vec4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec4} a The first vector.\r\n * @param {ReadonlyVec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec4} a The first vector.\r\n * @param {ReadonlyVec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n/**\r\n * Alias for {@link vec4.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;\n/**\r\n * Alias for {@link vec4.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link vec4.divide}\r\n * @function\r\n */\n\nexport var div = divide;\n/**\r\n * Alias for {@link vec4.distance}\r\n * @function\r\n */\n\nexport var dist = distance;\n/**\r\n * Alias for {@link vec4.squaredDistance}\r\n * @function\r\n */\n\nexport var sqrDist = squaredDistance;\n/**\r\n * Alias for {@link vec4.length}\r\n * @function\r\n */\n\nexport var len = length;\n/**\r\n * Alias for {@link vec4.squaredLength}\r\n * @function\r\n */\n\nexport var sqrLen = squaredLength;\n/**\r\n * Perform some operation over an array of vec4s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 4;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n\n return a;\n };\n}();","import { getFetchFunction } from './option-utils';\nexport function getLoaderContext(context, options, previousContext = null) {\n if (previousContext) {\n return previousContext;\n }\n\n const resolvedContext = {\n fetch: getFetchFunction(options, context),\n ...context\n };\n\n if (!Array.isArray(resolvedContext.loaders)) {\n resolvedContext.loaders = null;\n }\n\n return resolvedContext;\n}\nexport function getLoadersFromContext(loaders, context) {\n if (!context && loaders && !Array.isArray(loaders)) {\n return loaders;\n }\n\n let candidateLoaders;\n\n if (loaders) {\n candidateLoaders = Array.isArray(loaders) ? loaders : [loaders];\n }\n\n if (context && context.loaders) {\n const contextLoaders = Array.isArray(context.loaders) ? context.loaders : [context.loaders];\n candidateLoaders = candidateLoaders ? [...candidateLoaders, ...contextLoaders] : contextLoaders;\n }\n\n return candidateLoaders && candidateLoaders.length ? candidateLoaders : null;\n}\n//# sourceMappingURL=loader-context.js.map","import * as glMatrix from \"./common.js\";\n/**\r\n * 2 Dimensional Vector\r\n * @module vec2\r\n */\n\n/**\r\n * Creates a new, empty vec2\r\n *\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(2);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec2} a vector to clone\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Copy the values from one vec2 to another\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the source vector\r\n * @returns {vec2} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Set the components of a vec2 to the given values\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} out\r\n */\n\nexport function set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Adds two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\r\n * Multiplies two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\r\n * Divides two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to ceil\r\n * @returns {vec2} out\r\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to floor\r\n * @returns {vec2} out\r\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\r\n * Math.round the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to round\r\n * @returns {vec2} out\r\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n/**\r\n * Scales a vec2 by a scalar number\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec2} out\r\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\r\n * Adds two vec2's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec2} out\r\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\r\n * Calculates the length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nexport function length(a) {\n var x = a[0],\n y = a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nexport function squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n/**\r\n * Negates the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to negate\r\n * @returns {vec2} out\r\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to invert\r\n * @returns {vec2} out\r\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\r\n * Normalize a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to normalize\r\n * @returns {vec2} out\r\n */\n\nexport function normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\r\n * Computes the cross product of two vec2's\r\n * Note that the cross product must by definition produce a 3D vector\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec2} out\r\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec2} out\r\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2d\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2d} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat3\r\n * 3rd vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat3} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat4\r\n * 3rd vector component is implicitly '0'\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\r\n * Rotate a 2D vector\r\n * @param {vec2} out The receiving vec2\r\n * @param {ReadonlyVec2} a The vec2 point to rotate\r\n * @param {ReadonlyVec2} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec2} out\r\n */\n\nexport function rotate(out, a, b, rad) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad); //perform rotation and translate to correct position\n\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\r\n * Get the angle between two 2D vectors\r\n * @param {ReadonlyVec2} a The first operand\r\n * @param {ReadonlyVec2} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nexport function angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1],\n // mag is the product of the magnitudes of a and b\n mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\n // mag &&.. short circuits if mag == 0\n cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec2 to zero\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @returns {vec2} out\r\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec2} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nexport function str(a) {\n return \"vec2(\" + a[0] + \", \" + a[1] + \")\";\n}\n/**\r\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n/**\r\n * Alias for {@link vec2.length}\r\n * @function\r\n */\n\nexport var len = length;\n/**\r\n * Alias for {@link vec2.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;\n/**\r\n * Alias for {@link vec2.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link vec2.divide}\r\n * @function\r\n */\n\nexport var div = divide;\n/**\r\n * Alias for {@link vec2.distance}\r\n * @function\r\n */\n\nexport var dist = distance;\n/**\r\n * Alias for {@link vec2.squaredDistance}\r\n * @function\r\n */\n\nexport var sqrDist = squaredDistance;\n/**\r\n * Alias for {@link vec2.squaredLength}\r\n * @function\r\n */\n\nexport var sqrLen = squaredLength;\n/**\r\n * Perform some operation over an array of vec2s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();","const globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document,\n process: typeof process === 'object' && process\n};\nconst global_ = globalThis;\nconst self_ = globals.self || globals.window || globals.global;\nconst window_ = globals.window || globals.self || globals.global;\nconst document_ = globals.document || {};\nconst process_ = globals.process || {};\nconst console_ = console;\nexport { self_ as self, window_ as window, global_ as global, document_ as document, process_ as process, console_ as console };\n//# sourceMappingURL=globals.js.map","const globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document,\n process: typeof process === 'object' && process\n};\nconst self_ = globals.self || globals.window || globals.global;\nconst window_ = globals.window || globals.self || globals.global;\nconst global_ = globals.global || globals.self || globals.window;\nconst document_ = globals.document || {};\nconst process_ = globals.process || {};\nconst console_ = console;\nexport { self_ as self, window_ as window, global_ as global, document_ as document, process_ as process, console_ as console };\n//# sourceMappingURL=globals.js.map","let pathPrefix = '';\nconst fileAliases = {};\nexport function setPathPrefix(prefix) {\n pathPrefix = prefix;\n}\nexport function getPathPrefix() {\n return pathPrefix;\n}\nexport function addAliases(aliases) {\n Object.assign(fileAliases, aliases);\n}\nexport function resolvePath(filename) {\n for (const alias in fileAliases) {\n if (filename.startsWith(alias)) {\n const replacement = fileAliases[alias];\n filename = filename.replace(alias, replacement);\n }\n }\n\n if (!filename.startsWith('http://') && !filename.startsWith('https://')) {\n filename = \"\".concat(pathPrefix).concat(filename);\n }\n\n return filename;\n}\n//# sourceMappingURL=file-aliases.js.map","import * as node from '../node/buffer';\nexport function isBuffer(value) {\n return value && typeof value === 'object' && value.isBuffer;\n}\nexport function toBuffer(data) {\n return node.toBuffer ? node.toBuffer(data) : data;\n}\nexport function bufferToArrayBuffer(buffer) {\n if (isBuffer(buffer)) {\n const typedArray = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.length);\n return typedArray.slice().buffer;\n }\n\n return buffer;\n}\n//# sourceMappingURL=buffer-utils.js.map","import {Vector3} from '@math.gl/core';\nimport type Layer from '../../lib/layer';\n\nconst DEFAULT_LIGHT_COLOR = [255, 255, 255];\nconst DEFAULT_LIGHT_INTENSITY = 1.0;\nconst DEFAULT_LIGHT_DIRECTION = [0.0, 0.0, -1.0];\n\nlet idCount = 0;\n\nexport type DirectionalLightOptions = {\n id?: string;\n /** Light color, [r, g, b] in the 0-255 range\n * @default [255, 255, 255]\n */\n color?: number[];\n /** Light intensity, higher number is brighter\n * @default 1.0\n */\n intensity?: number;\n /** Light direction in the common space\n * @default [0.0, 0.0, -1.0]\n */\n direction?: number[];\n /** (Experimental) render shadows cast by this light\n * @default false\n */\n _shadow?: boolean;\n};\n\nexport class DirectionalLight {\n id: string;\n color: number[];\n intensity: number;\n type = 'directional';\n direction: number[];\n shadow: boolean;\n\n constructor(props: DirectionalLightOptions = {}) {\n const {color = DEFAULT_LIGHT_COLOR} = props;\n const {intensity = DEFAULT_LIGHT_INTENSITY} = props;\n const {direction = DEFAULT_LIGHT_DIRECTION} = props;\n const {_shadow = false} = props;\n\n this.id = props.id || `directional-${idCount++}`;\n this.color = color;\n this.intensity = intensity;\n this.type = 'directional';\n this.direction = new Vector3(direction).normalize().toArray() as [number, number, number];\n this.shadow = _shadow;\n }\n\n getProjectedLight(opts: {layer: Layer}): DirectionalLight {\n return this;\n }\n}\n","import { resolvePath } from '@loaders.gl/loader-utils';\nimport { makeResponse } from '../utils/response-utils';\nexport async function fetchFile(url, options) {\n if (typeof url === 'string') {\n url = resolvePath(url);\n let fetchOptions = options;\n\n if (options !== null && options !== void 0 && options.fetch && typeof (options === null || options === void 0 ? void 0 : options.fetch) !== 'function') {\n fetchOptions = options.fetch;\n }\n\n return await fetch(url, fetchOptions);\n }\n\n return await makeResponse(url);\n}\n//# sourceMappingURL=fetch-file.js.map","const fp32shader = \"#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\\nconst float TWO_PI = 6.2831854820251465;\\nconst float PI_2 = 1.5707963705062866;\\nconst float PI_16 = 0.1963495463132858;\\n\\nconst float SIN_TABLE_0 = 0.19509032368659973;\\nconst float SIN_TABLE_1 = 0.3826834261417389;\\nconst float SIN_TABLE_2 = 0.5555702447891235;\\nconst float SIN_TABLE_3 = 0.7071067690849304;\\n\\nconst float COS_TABLE_0 = 0.9807852506637573;\\nconst float COS_TABLE_1 = 0.9238795042037964;\\nconst float COS_TABLE_2 = 0.8314695954322815;\\nconst float COS_TABLE_3 = 0.7071067690849304;\\n\\nconst float INVERSE_FACTORIAL_3 = 1.666666716337204e-01;\\nconst float INVERSE_FACTORIAL_5 = 8.333333767950535e-03;\\nconst float INVERSE_FACTORIAL_7 = 1.9841270113829523e-04;\\nconst float INVERSE_FACTORIAL_9 = 2.75573188446287533e-06;\\n\\nfloat sin_taylor_fp32(float a) {\\n float r, s, t, x;\\n\\n if (a == 0.0) {\\n return 0.0;\\n }\\n\\n x = -a * a;\\n s = a;\\n r = a;\\n\\n r = r * x;\\n t = r * INVERSE_FACTORIAL_3;\\n s = s + t;\\n\\n r = r * x;\\n t = r * INVERSE_FACTORIAL_5;\\n s = s + t;\\n\\n r = r * x;\\n t = r * INVERSE_FACTORIAL_7;\\n s = s + t;\\n\\n r = r * x;\\n t = r * INVERSE_FACTORIAL_9;\\n s = s + t;\\n\\n return s;\\n}\\n\\nvoid sincos_taylor_fp32(float a, out float sin_t, out float cos_t) {\\n if (a == 0.0) {\\n sin_t = 0.0;\\n cos_t = 1.0;\\n }\\n sin_t = sin_taylor_fp32(a);\\n cos_t = sqrt(1.0 - sin_t * sin_t);\\n}\\n\\nfloat tan_taylor_fp32(float a) {\\n float sin_a;\\n float cos_a;\\n\\n if (a == 0.0) {\\n return 0.0;\\n }\\n float z = floor(a / TWO_PI);\\n float r = a - TWO_PI * z;\\n\\n float t;\\n float q = floor(r / PI_2 + 0.5);\\n int j = int(q);\\n\\n if (j < -2 || j > 2) {\\n return 1.0 / 0.0;\\n }\\n\\n t = r - PI_2 * q;\\n\\n q = floor(t / PI_16 + 0.5);\\n int k = int(q);\\n int abs_k = int(abs(float(k)));\\n\\n if (abs_k > 4) {\\n return 1.0 / 0.0;\\n } else {\\n t = t - PI_16 * q;\\n }\\n\\n float u = 0.0;\\n float v = 0.0;\\n\\n float sin_t, cos_t;\\n float s, c;\\n sincos_taylor_fp32(t, sin_t, cos_t);\\n\\n if (k == 0) {\\n s = sin_t;\\n c = cos_t;\\n } else {\\n if (abs(float(abs_k) - 1.0) < 0.5) {\\n u = COS_TABLE_0;\\n v = SIN_TABLE_0;\\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\\n u = COS_TABLE_1;\\n v = SIN_TABLE_1;\\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\\n u = COS_TABLE_2;\\n v = SIN_TABLE_2;\\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\\n u = COS_TABLE_3;\\n v = SIN_TABLE_3;\\n }\\n if (k > 0) {\\n s = u * sin_t + v * cos_t;\\n c = u * cos_t - v * sin_t;\\n } else {\\n s = u * sin_t - v * cos_t;\\n c = u * cos_t + v * sin_t;\\n }\\n }\\n\\n if (j == 0) {\\n sin_a = s;\\n cos_a = c;\\n } else if (j == 1) {\\n sin_a = c;\\n cos_a = -s;\\n } else if (j == -1) {\\n sin_a = -c;\\n cos_a = s;\\n } else {\\n sin_a = -s;\\n cos_a = -c;\\n }\\n return sin_a / cos_a;\\n}\\n#endif\\n\\nfloat tan_fp32(float a) {\\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\\n return tan_taylor_fp32(a);\\n#else\\n return tan(a);\\n#endif\\n}\\n\";\nexport const fp32 = {\n name: 'fp32',\n vs: fp32shader,\n fs: null\n};\n//# sourceMappingURL=fp32.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport type {ShaderModule} from '../../types/types';\n\nconst defines = '#define SMOOTH_EDGE_RADIUS 0.5';\nconst vs = `\n${defines}\n\nstruct VertexGeometry {\n vec4 position;\n vec3 worldPosition;\n vec3 worldPositionAlt;\n vec3 normal;\n vec2 uv;\n vec3 pickingColor;\n} geometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0),\n vec3(0.0),\n vec3(0.0),\n vec2(0.0),\n vec3(0.0)\n);\n`;\n\nconst fs = `\n${defines}\n\nstruct FragmentGeometry {\n vec2 uv;\n} geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n`;\n\nexport default {name: 'geometry', vs, fs} as ShaderModule;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {COORDINATE_SYSTEM, PROJECTION_MODE, UNIT} from '../../lib/constants';\n\n// We are generating these from the js code in constants.js\nconst COORDINATE_SYSTEM_GLSL_CONSTANTS = Object.keys(COORDINATE_SYSTEM)\n .map(key => `const int COORDINATE_SYSTEM_${key} = ${COORDINATE_SYSTEM[key]};`)\n .join('');\nconst PROJECTION_MODE_GLSL_CONSTANTS = Object.keys(PROJECTION_MODE)\n .map(key => `const int PROJECTION_MODE_${key} = ${PROJECTION_MODE[key]};`)\n .join('');\nconst UNIT_GLSL_CONSTANTS = Object.keys(UNIT)\n .map(key => `const int UNIT_${key.toUpperCase()} = ${UNIT[key]};`)\n .join('');\n\nexport default `\\\n${COORDINATE_SYSTEM_GLSL_CONSTANTS}\n${PROJECTION_MODE_GLSL_CONSTANTS}\n${UNIT_GLSL_CONSTANTS}\n\nuniform int project_uCoordinateSystem;\nuniform int project_uProjectionMode;\nuniform float project_uScale;\nuniform bool project_uWrapLongitude;\nuniform vec3 project_uCommonUnitsPerMeter;\nuniform vec3 project_uCommonUnitsPerWorldUnit;\nuniform vec3 project_uCommonUnitsPerWorldUnit2;\nuniform vec4 project_uCenter;\nuniform mat4 project_uModelMatrix;\nuniform mat4 project_uViewProjectionMatrix;\nuniform vec2 project_uViewportSize;\nuniform float project_uDevicePixelRatio;\nuniform float project_uFocalDistance;\nuniform vec3 project_uCameraPosition;\nuniform vec3 project_uCoordinateOrigin;\nuniform vec3 project_uCommonOrigin;\nuniform bool project_uPseudoMeters;\n\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / (PI * 2.0);\nconst vec3 ZERO_64_LOW = vec3(0.0);\nconst float EARTH_RADIUS = 6370972.0; // meters\nconst float GLOBE_RADIUS = 256.0;\n\n// returns an adjustment factor for uCommonUnitsPerMeter\nfloat project_size_at_latitude(float lat) {\n float y = clamp(lat, -89.9, 89.9);\n return 1.0 / cos(radians(y));\n}\n\nfloat project_size() {\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR &&\n project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT &&\n project_uPseudoMeters == false) {\n\n // uCommonUnitsPerMeter in low-zoom Web Mercator is non-linear\n // Adjust by 1 / cos(latitude)\n // If geometry.position (vertex in common space) is populated, use it\n // Otherwise use geometry.worldPosition (anchor in world space)\n \n if (geometry.position.w == 0.0) {\n return project_size_at_latitude(geometry.worldPosition.y);\n }\n\n // latitude from common y: 2.0 * (atan(exp(y / TILE_SIZE * 2.0 * PI - PI)) - PI / 4.0)\n // Taylor series of 1 / cos(latitude)\n // Max error < 0.003\n \n float y = geometry.position.y / TILE_SIZE * 2.0 - 1.0;\n float y2 = y * y;\n float y4 = y2 * y2;\n float y6 = y4 * y2;\n return 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;\n }\n return 1.0;\n}\n\nfloat project_size_at_latitude(float meters, float lat) {\n return meters * project_uCommonUnitsPerMeter.z * project_size_at_latitude(lat);\n}\n\n//\n// Scaling offsets - scales meters to \"world distance\"\n// Note the scalar version of project_size is for scaling the z component only\n//\nfloat project_size(float meters) {\n return meters * project_uCommonUnitsPerMeter.z * project_size();\n}\n\nvec2 project_size(vec2 meters) {\n return meters * project_uCommonUnitsPerMeter.xy * project_size();\n}\n\nvec3 project_size(vec3 meters) {\n return meters * project_uCommonUnitsPerMeter * project_size();\n}\n\nvec4 project_size(vec4 meters) {\n return vec4(meters.xyz * project_uCommonUnitsPerMeter, meters.w);\n}\n\n// Get rotation matrix that aligns the z axis with the given up vector\n// Find 3 unit vectors ux, uy, uz that are perpendicular to each other and uz == up\nmat3 project_get_orientation_matrix(vec3 up) {\n vec3 uz = normalize(up);\n // Tangent on XY plane\n vec3 ux = abs(uz.z) == 1.0 ? vec3(1.0, 0.0, 0.0) : normalize(vec3(uz.y, -uz.x, 0));\n vec3 uy = cross(uz, ux);\n return mat3(ux, uy, uz);\n}\n\nbool project_needs_rotation(vec3 commonPosition, out mat3 transform) {\n if (project_uProjectionMode == PROJECTION_MODE_GLOBE) {\n transform = project_get_orientation_matrix(commonPosition);\n return true;\n }\n return false;\n}\n\n//\n// Projecting normal - transform deltas from current coordinate system to\n// normals in the worldspace\n//\nvec3 project_normal(vec3 vector) {\n // Apply model matrix\n vec4 normal_modelspace = project_uModelMatrix * vec4(vector, 0.0);\n vec3 n = normalize(normal_modelspace.xyz * project_uCommonUnitsPerMeter);\n mat3 rotation;\n if (project_needs_rotation(geometry.position.xyz, rotation)) {\n n = rotation * n;\n }\n return n;\n}\n\nvec4 project_offset_(vec4 offset) {\n float dy = offset.y;\n vec3 commonUnitsPerWorldUnit = project_uCommonUnitsPerWorldUnit + project_uCommonUnitsPerWorldUnit2 * dy;\n return vec4(offset.xyz * commonUnitsPerWorldUnit, offset.w);\n}\n\n//\n// Projecting positions - non-linear projection: lnglats => unit tile [0-1, 0-1]\n//\nvec2 project_mercator_(vec2 lnglat) {\n float x = lnglat.x;\n if (project_uWrapLongitude) {\n x = mod(x + 180., 360.0) - 180.;\n }\n float y = clamp(lnglat.y, -89.9, 89.9);\n return vec2(\n radians(x) + PI,\n PI + log(tan_fp32(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\nvec3 project_globe_(vec3 lnglatz) {\n float lambda = radians(lnglatz.x);\n float phi = radians(lnglatz.y);\n float cosPhi = cos(phi);\n float D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;\n\n return vec3(\n sin(lambda) * cosPhi,\n -cos(lambda) * cosPhi,\n sin(phi)\n ) * D;\n}\n\n//\n// Projects positions (defined by project_uCoordinateSystem) to common space (defined by project_uProjectionMode)\n//\nvec4 project_position(vec4 position, vec3 position64Low) {\n vec4 position_world = project_uModelMatrix * position;\n\n // Work around for a Mac+NVIDIA bug https://github.com/visgl/deck.gl/issues/4145\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4(\n project_mercator_(position_world.xy),\n project_size_at_latitude(position_world.z, position_world.y),\n position_world.w\n );\n }\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {\n position_world.xyz += project_uCoordinateOrigin;\n }\n }\n if (project_uProjectionMode == PROJECTION_MODE_GLOBE) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4(\n project_globe_(position_world.xyz),\n position_world.w\n );\n }\n }\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n if (abs(position_world.y - project_uCoordinateOrigin.y) > 0.25) {\n // Too far from the projection center for offset mode to be accurate\n // Only use high parts\n return vec4(\n project_mercator_(position_world.xy) - project_uCommonOrigin.xy,\n project_size(position_world.z),\n position_world.w\n );\n }\n }\n }\n if (project_uProjectionMode == PROJECTION_MODE_IDENTITY ||\n (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&\n (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n project_uCoordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {\n // Subtract high part of 64 bit value. Convert remainder to float32, preserving precision.\n position_world.xyz -= project_uCoordinateOrigin;\n }\n\n // Translation is already added to the high parts\n return project_offset_(position_world + project_uModelMatrix * vec4(position64Low, 0.0));\n}\n\nvec4 project_position(vec4 position) {\n return project_position(position, ZERO_64_LOW);\n}\n\nvec3 project_position(vec3 position, vec3 position64Low) {\n vec4 projected_position = project_position(vec4(position, 1.0), position64Low);\n return projected_position.xyz;\n}\n\nvec3 project_position(vec3 position) {\n vec4 projected_position = project_position(vec4(position, 1.0), ZERO_64_LOW);\n return projected_position.xyz;\n}\n\nvec2 project_position(vec2 position) {\n vec4 projected_position = project_position(vec4(position, 0.0, 1.0), ZERO_64_LOW);\n return projected_position.xy;\n}\n\nvec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatrix, vec4 center) {\n return viewProjectionMatrix * position + center;\n}\n\n//\n// Projects from common space coordinates to clip space.\n// Uses project_uViewProjectionMatrix\n//\nvec4 project_common_position_to_clipspace(vec4 position) {\n return project_common_position_to_clipspace(position, project_uViewProjectionMatrix, project_uCenter);\n}\n\n// Returns a clip space offset that corresponds to a given number of screen pixels\nvec2 project_pixel_size_to_clipspace(vec2 pixels) {\n vec2 offset = pixels / project_uViewportSize * project_uDevicePixelRatio * 2.0;\n return offset * project_uFocalDistance;\n}\n\nfloat project_size_to_pixel(float meters) {\n return project_size(meters) * project_uScale;\n}\nfloat project_size_to_pixel(float size, int unit) {\n if (unit == UNIT_METERS) return project_size_to_pixel(size);\n if (unit == UNIT_COMMON) return size * project_uScale;\n // UNIT_PIXELS\n return size;\n}\nfloat project_pixel_size(float pixels) {\n return pixels / project_uScale;\n}\nvec2 project_pixel_size(vec2 pixels) {\n return pixels / project_uScale;\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {fp32} from '@luma.gl/core';\nimport geometry from '../misc/geometry';\nimport projectShader from './project.glsl';\nimport {getUniformsFromViewport} from './viewport-uniforms';\n\nimport type {ProjectModuleSettings} from './viewport-uniforms';\nimport type {ShaderModule} from '../../types/types';\n\nconst INITIAL_MODULE_OPTIONS = {};\n\nfunction getUniforms(opts: ProjectModuleSettings | {} = INITIAL_MODULE_OPTIONS) {\n if ('viewport' in opts) {\n return getUniformsFromViewport(opts);\n }\n return {};\n}\n\nexport default {\n name: 'project',\n dependencies: [fp32, geometry],\n vs: projectShader,\n getUniforms\n} as ShaderModule;\n","import { assert, validateWorkerVersion } from '@loaders.gl/worker-utils';\nimport { parseWithWorker, canParseWithWorker } from '@loaders.gl/loader-utils';\nimport { isLoaderObject } from '../loader-utils/normalize-loader';\nimport { isResponse } from '../../javascript-utils/is-type';\nimport { normalizeOptions } from '../loader-utils/option-utils';\nimport { getArrayBufferOrStringFromData } from '../loader-utils/get-data';\nimport { getLoaderContext, getLoadersFromContext } from '../loader-utils/loader-context';\nimport { getResourceUrlAndType } from '../utils/resource-utils';\nimport { selectLoader } from './select-loader';\nexport async function parse(data, loaders, options, context) {\n assert(!context || typeof context === 'object');\n\n if (loaders && !Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined;\n options = loaders;\n loaders = undefined;\n }\n\n data = await data;\n options = options || {};\n const {\n url\n } = getResourceUrlAndType(data);\n const typedLoaders = loaders;\n const candidateLoaders = getLoadersFromContext(typedLoaders, context);\n const loader = await selectLoader(data, candidateLoaders, options);\n\n if (!loader) {\n return null;\n }\n\n options = normalizeOptions(options, loader, candidateLoaders, url);\n context = getLoaderContext({\n url,\n parse,\n loaders: candidateLoaders\n }, options, context);\n return await parseWithLoader(loader, data, options, context);\n}\n\nasync function parseWithLoader(loader, data, options, context) {\n validateWorkerVersion(loader);\n\n if (isResponse(data)) {\n const response = data;\n const {\n ok,\n redirected,\n status,\n statusText,\n type,\n url\n } = response;\n const headers = Object.fromEntries(response.headers.entries());\n context.response = {\n headers,\n ok,\n redirected,\n status,\n statusText,\n type,\n url\n };\n }\n\n data = await getArrayBufferOrStringFromData(data, loader, options);\n\n if (loader.parseTextSync && typeof data === 'string') {\n options.dataType = 'text';\n return loader.parseTextSync(data, options, context, loader);\n }\n\n if (canParseWithWorker(loader, options)) {\n return await parseWithWorker(loader, data, options, context, parse);\n }\n\n if (loader.parseText && typeof data === 'string') {\n return await loader.parseText(data, options, context, loader);\n }\n\n if (loader.parse) {\n return await loader.parse(data, options, context, loader);\n }\n\n assert(!loader.parseSync);\n throw new Error(\"\".concat(loader.id, \" loader - no parser found and worker is disabled\"));\n}\n//# sourceMappingURL=parse.js.map","import { assert } from '../env-utils/assert';\nimport { VERSION } from '../env-utils/version';\nexport function validateWorkerVersion(worker, coreVersion = VERSION) {\n assert(worker, 'no worker provided');\n const workerVersion = worker.version;\n\n if (!coreVersion || !workerVersion) {\n return false;\n }\n\n return true;\n}\n\nfunction parseVersion(version) {\n const parts = version.split('.').map(Number);\n return {\n major: parts[0],\n minor: parts[1]\n };\n}\n//# sourceMappingURL=validate-worker-version.js.map","export function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'loader assertion failed.');\n }\n}\n//# sourceMappingURL=assert.js.map","import { assert } from '../utils/assert';\nlet pathPrefix = '';\nexport function setPathPrefix(prefix) {\n pathPrefix = prefix;\n}\nexport function loadFile(url) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n assert(typeof url === 'string');\n url = pathPrefix + url;\n const dataType = options.dataType || 'text';\n return fetch(url, options).then(res => res[dataType]());\n}\nexport function loadImage(url, opts) {\n assert(typeof url === 'string');\n url = pathPrefix + url;\n return new Promise((resolve, reject) => {\n try {\n const image = new Image();\n\n image.onload = () => resolve(image);\n\n image.onerror = () => reject(new Error(\"Could not load image \".concat(url, \".\")));\n\n image.crossOrigin = opts && opts.crossOrigin || 'anonymous';\n image.src = url;\n } catch (error) {\n reject(error);\n }\n });\n}\n//# sourceMappingURL=load-file.js.map","import { assertWebGLContext } from '@luma.gl/gltools';\nimport Texture from './texture';\nimport { loadImage } from '../utils/load-file';\nexport default class Texture2D extends Texture {\n get [Symbol.toStringTag]() {\n return 'Texture2D';\n }\n\n static isSupported(gl, opts) {\n return Texture.isSupported(gl, opts);\n }\n\n constructor(gl) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n assertWebGLContext(gl);\n\n if (props instanceof Promise || typeof props === 'string') {\n props = {\n data: props\n };\n }\n\n if (typeof props.data === 'string') {\n props = Object.assign({}, props, {\n data: loadImage(props.data)\n });\n }\n\n super(gl, Object.assign({}, props, {\n target: 3553\n }));\n this.initialize(props);\n Object.seal(this);\n }\n\n}\n//# sourceMappingURL=texture-2d.js.map","import { isResponse } from '../../javascript-utils/is-type';\nimport { getResourceContentLength, getResourceUrlAndType } from './resource-utils';\nexport async function makeResponse(resource) {\n if (isResponse(resource)) {\n return resource;\n }\n\n const headers = {};\n const contentLength = getResourceContentLength(resource);\n\n if (contentLength >= 0) {\n headers['content-length'] = String(contentLength);\n }\n\n const {\n url,\n type\n } = getResourceUrlAndType(resource);\n\n if (type) {\n headers['content-type'] = type;\n }\n\n const initialDataUrl = await getInitialDataUrl(resource);\n\n if (initialDataUrl) {\n headers['x-first-bytes'] = initialDataUrl;\n }\n\n if (typeof resource === 'string') {\n resource = new TextEncoder().encode(resource);\n }\n\n const response = new Response(resource, {\n headers\n });\n Object.defineProperty(response, 'url', {\n value: url\n });\n return response;\n}\nexport async function checkResponse(response) {\n if (!response.ok) {\n const message = await getResponseError(response);\n throw new Error(message);\n }\n}\nexport function checkResponseSync(response) {\n if (!response.ok) {\n let message = \"\".concat(response.status, \" \").concat(response.statusText);\n message = message.length > 60 ? \"\".concat(message.slice(0, 60), \"...\") : message;\n throw new Error(message);\n }\n}\n\nasync function getResponseError(response) {\n let message = \"Failed to fetch resource \".concat(response.url, \" (\").concat(response.status, \"): \");\n\n try {\n const contentType = response.headers.get('Content-Type');\n let text = response.statusText;\n\n if (contentType.includes('application/json')) {\n text += \" \".concat(await response.text());\n }\n\n message += text;\n message = message.length > 60 ? \"\".concat(message.slice(0, 60), \"...\") : message;\n } catch (error) {}\n\n return message;\n}\n\nasync function getInitialDataUrl(resource) {\n const INITIAL_DATA_LENGTH = 5;\n\n if (typeof resource === 'string') {\n return \"data:,\".concat(resource.slice(0, INITIAL_DATA_LENGTH));\n }\n\n if (resource instanceof Blob) {\n const blobSlice = resource.slice(0, 5);\n return await new Promise(resolve => {\n const reader = new FileReader();\n\n reader.onload = event => {\n var _event$target;\n\n return resolve(event === null || event === void 0 ? void 0 : (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.result);\n };\n\n reader.readAsDataURL(blobSlice);\n });\n }\n\n if (resource instanceof ArrayBuffer) {\n const slice = resource.slice(0, INITIAL_DATA_LENGTH);\n const base64 = arrayBufferToBase64(slice);\n return \"data:base64,\".concat(base64);\n }\n\n return null;\n}\n\nfunction arrayBufferToBase64(buffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n return btoa(binary);\n}\n//# sourceMappingURL=response-utils.js.map","const EXT_FLOAT_WEBGL2 = 'EXT_color_buffer_float';\nexport default {\n [33189]: {\n bpp: 2\n },\n [33190]: {\n gl2: true,\n bpp: 3\n },\n [36012]: {\n gl2: true,\n bpp: 4\n },\n [36168]: {\n bpp: 1\n },\n [34041]: {\n bpp: 4\n },\n [35056]: {\n gl2: true,\n bpp: 4\n },\n [36013]: {\n gl2: true,\n bpp: 5\n },\n [32854]: {\n bpp: 2\n },\n [36194]: {\n bpp: 2\n },\n [32855]: {\n bpp: 2\n },\n [33321]: {\n gl2: true,\n bpp: 1\n },\n [33330]: {\n gl2: true,\n bpp: 1\n },\n [33329]: {\n gl2: true,\n bpp: 1\n },\n [33332]: {\n gl2: true,\n bpp: 2\n },\n [33331]: {\n gl2: true,\n bpp: 2\n },\n [33334]: {\n gl2: true,\n bpp: 4\n },\n [33333]: {\n gl2: true,\n bpp: 4\n },\n [33323]: {\n gl2: true,\n bpp: 2\n },\n [33336]: {\n gl2: true,\n bpp: 2\n },\n [33335]: {\n gl2: true,\n bpp: 2\n },\n [33338]: {\n gl2: true,\n bpp: 4\n },\n [33337]: {\n gl2: true,\n bpp: 4\n },\n [33340]: {\n gl2: true,\n bpp: 8\n },\n [33339]: {\n gl2: true,\n bpp: 8\n },\n [32849]: {\n gl2: true,\n bpp: 3\n },\n [32856]: {\n gl2: true,\n bpp: 4\n },\n [32857]: {\n gl2: true,\n bpp: 4\n },\n [36220]: {\n gl2: true,\n bpp: 4\n },\n [36238]: {\n gl2: true,\n bpp: 4\n },\n [36975]: {\n gl2: true,\n bpp: 4\n },\n [36214]: {\n gl2: true,\n bpp: 8\n },\n [36232]: {\n gl2: true,\n bpp: 8\n },\n [36226]: {\n gl2: true,\n bpp: 16\n },\n [36208]: {\n gl2: true,\n bpp: 16\n },\n [33325]: {\n gl2: EXT_FLOAT_WEBGL2,\n bpp: 2\n },\n [33327]: {\n gl2: EXT_FLOAT_WEBGL2,\n bpp: 4\n },\n [34842]: {\n gl2: EXT_FLOAT_WEBGL2,\n bpp: 8\n },\n [33326]: {\n gl2: EXT_FLOAT_WEBGL2,\n bpp: 4\n },\n [33328]: {\n gl2: EXT_FLOAT_WEBGL2,\n bpp: 8\n },\n [34836]: {\n gl2: EXT_FLOAT_WEBGL2,\n bpp: 16\n },\n [35898]: {\n gl2: EXT_FLOAT_WEBGL2,\n bpp: 4\n }\n};\n//# sourceMappingURL=renderbuffer-formats.js.map","import Resource from './resource';\nimport RENDERBUFFER_FORMATS from './renderbuffer-formats';\nimport { isWebGL2 } from '@luma.gl/gltools';\nimport { assert } from '../utils/assert';\n\nfunction isFormatSupported(gl, format, formats) {\n const info = formats[format];\n\n if (!info) {\n return false;\n }\n\n const value = isWebGL2(gl) ? info.gl2 || info.gl1 : info.gl1;\n\n if (typeof value === 'string') {\n return gl.getExtension(value);\n }\n\n return value;\n}\n\nexport default class Renderbuffer extends Resource {\n get [Symbol.toStringTag]() {\n return 'Renderbuffer';\n }\n\n static isSupported(gl) {\n let {\n format\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n format: null\n };\n return !format || isFormatSupported(gl, format, RENDERBUFFER_FORMATS);\n }\n\n static getSamplesForFormat(gl, _ref) {\n let {\n format\n } = _ref;\n return gl.getInternalformatParameter(36161, format, 32937);\n }\n\n constructor(gl) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(gl, opts);\n this.initialize(opts);\n Object.seal(this);\n }\n\n initialize(_ref2) {\n let {\n format,\n width = 1,\n height = 1,\n samples = 0\n } = _ref2;\n assert(format, 'Needs format');\n\n this._trackDeallocatedMemory();\n\n this.gl.bindRenderbuffer(36161, this.handle);\n\n if (samples !== 0 && isWebGL2(this.gl)) {\n this.gl.renderbufferStorageMultisample(36161, samples, format, width, height);\n } else {\n this.gl.renderbufferStorage(36161, format, width, height);\n }\n\n this.format = format;\n this.width = width;\n this.height = height;\n this.samples = samples;\n\n this._trackAllocatedMemory(this.width * this.height * (this.samples || 1) * RENDERBUFFER_FORMATS[this.format].bpp);\n\n return this;\n }\n\n resize(_ref3) {\n let {\n width,\n height\n } = _ref3;\n\n if (width !== this.width || height !== this.height) {\n return this.initialize({\n width,\n height,\n format: this.format,\n samples: this.samples\n });\n }\n\n return this;\n }\n\n _createHandle() {\n return this.gl.createRenderbuffer();\n }\n\n _deleteHandle() {\n this.gl.deleteRenderbuffer(this.handle);\n\n this._trackDeallocatedMemory();\n }\n\n _bindHandle(handle) {\n this.gl.bindRenderbuffer(36161, handle);\n }\n\n _syncHandle(handle) {\n this.format = this.getParameter(36164);\n this.width = this.getParameter(36162);\n this.height = this.getParameter(36163);\n this.samples = this.getParameter(36011);\n }\n\n _getParameter(pname) {\n this.gl.bindRenderbuffer(36161, this.handle);\n const value = this.gl.getRenderbufferParameter(36161, pname);\n return value;\n }\n\n}\n//# sourceMappingURL=renderbuffer.js.map","// Purpose: include this in your module to avoids adding dependencies on\n// micro modules like 'global'\n/* global window, global, document, navigator */\nexport const userAgent = typeof navigator !== 'undefined' && navigator.userAgent ? navigator.userAgent.toLowerCase() : '';\nconst window_ = typeof window !== 'undefined' ? window : global;\nconst global_ = typeof global !== 'undefined' ? global : window;\nconst document_ = typeof document !== 'undefined' ? document : {};\nexport { window_ as window, global_ as global, document_ as document };\n/*\n * Detect whether passive option is supported by the current browser.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n #Safely_detecting_option_support\n */\nlet passiveSupported = false;\n/* eslint-disable accessor-pairs, no-empty */\ntry {\n const options = {\n // This function will be called when the browser\n // attempts to access the passive property.\n get passive() {\n passiveSupported = true;\n return true;\n }\n };\n window_.addEventListener('test', null, options);\n window_.removeEventListener('test', null);\n}\ncatch (err) {\n passiveSupported = false;\n}\nexport { passiveSupported };\n//# sourceMappingURL=globals.js.map","var window_ = typeof window !== 'undefined' ? window : global;\nvar global_ = typeof global !== 'undefined' ? global : window;\nvar document_ = typeof document !== 'undefined' ? document : {};\nexport { window_ as window, global_ as global, document_ as document };\n//# sourceMappingURL=globals.js.map","import { normalizeLoader } from '../loader-utils/normalize-loader';\nimport { getGlobalLoaderState } from '../loader-utils/option-utils';\n\nconst getGlobalLoaderRegistry = () => {\n const state = getGlobalLoaderState();\n state.loaderRegistry = state.loaderRegistry || [];\n return state.loaderRegistry;\n};\n\nexport function registerLoaders(loaders) {\n const loaderRegistry = getGlobalLoaderRegistry();\n loaders = Array.isArray(loaders) ? loaders : [loaders];\n\n for (const loader of loaders) {\n const normalizedLoader = normalizeLoader(loader);\n\n if (!loaderRegistry.find(registeredLoader => normalizedLoader === registeredLoader)) {\n loaderRegistry.unshift(normalizedLoader);\n }\n }\n}\nexport function getRegisteredLoaders() {\n return getGlobalLoaderRegistry();\n}\nexport function _unregisterLoaders() {\n const state = getGlobalLoaderState();\n state.loaderRegistry = [];\n}\n//# sourceMappingURL=register-loaders.js.map","import {clamp} from '@math.gl/core';\nimport Controller, {ControllerProps} from './controller';\nimport ViewState from './view-state';\nimport {normalizeViewportProps} from '@math.gl/web-mercator';\nimport assert from '../utils/assert';\n\nimport LinearInterpolator from '../transitions/linear-interpolator';\nimport type Viewport from '../viewports/viewport';\n\nconst PITCH_MOUSE_THRESHOLD = 5;\nconst PITCH_ACCEL = 1.2;\n\nexport type MapStateProps = {\n /** Mapbox viewport properties */\n /** The width of the viewport */\n width: number;\n /** The height of the viewport */\n height: number;\n /** The latitude at the center of the viewport */\n latitude: number;\n /** The longitude at the center of the viewport */\n longitude: number;\n /** The tile zoom level of the map. */\n zoom: number;\n /** The bearing of the viewport in degrees */\n bearing?: number;\n /** The pitch of the viewport in degrees */\n pitch?: number;\n /**\n * Specify the altitude of the viewport camera\n * Unit: map heights, default 1.5\n * Non-public API, see https://github.com/mapbox/mapbox-gl-js/issues/1137\n */\n altitude?: number;\n /** Viewport position */\n position?: [number, number, number];\n\n /** Viewport constraints */\n maxZoom?: number;\n minZoom?: number;\n maxPitch?: number;\n minPitch?: number;\n\n /** Normalize viewport props to fit map height into viewport. Default `true` */\n normalize?: boolean;\n};\n\ntype MapStateInternal = {\n /** Interaction states, required to calculate change during transform */\n /* The point on map being grabbed when the operation first started */\n startPanLngLat?: [number, number];\n /* Center of the zoom when the operation first started */\n startZoomLngLat?: [number, number];\n /* Pointer position when rotation started */\n startRotatePos?: [number, number];\n /** Bearing when current perspective rotate operation started */\n startBearing?: number;\n /** Pitch when current perspective rotate operation started */\n startPitch?: number;\n /** Zoom when current zoom operation started */\n startZoom?: number;\n};\n\n/* Utils */\n\nexport class MapState extends ViewState {\n makeViewport: (props: Record) => Viewport;\n\n constructor(\n options: MapStateProps &\n MapStateInternal & {\n makeViewport: (props: Record) => Viewport;\n }\n ) {\n const {\n /** Mapbox viewport properties */\n /** The width of the viewport */\n width,\n /** The height of the viewport */\n height,\n /** The latitude at the center of the viewport */\n latitude,\n /** The longitude at the center of the viewport */\n longitude,\n /** The tile zoom level of the map. */\n zoom,\n /** The bearing of the viewport in degrees */\n bearing = 0,\n /** The pitch of the viewport in degrees */\n pitch = 0,\n /**\n * Specify the altitude of the viewport camera\n * Unit: map heights, default 1.5\n * Non-public API, see https://github.com/mapbox/mapbox-gl-js/issues/1137\n */\n altitude = 1.5,\n /** Viewport position */\n position = [0, 0, 0],\n\n /** Viewport constraints */\n maxZoom = 20,\n minZoom = 0,\n maxPitch = 60,\n minPitch = 0,\n\n /** Interaction states, required to calculate change during transform */\n /* The point on map being grabbed when the operation first started */\n startPanLngLat,\n /* Center of the zoom when the operation first started */\n startZoomLngLat,\n /* Pointer position when rotation started */\n startRotatePos,\n /** Bearing when current perspective rotate operation started */\n startBearing,\n /** Pitch when current perspective rotate operation started */\n startPitch,\n /** Zoom when current zoom operation started */\n startZoom,\n\n /** Normalize viewport props to fit map height into viewport */\n normalize = true\n } = options;\n\n assert(Number.isFinite(longitude)); // `longitude` must be supplied\n assert(Number.isFinite(latitude)); // `latitude` must be supplied\n assert(Number.isFinite(zoom)); // `zoom` must be supplied\n\n super(\n {\n width,\n height,\n latitude,\n longitude,\n zoom,\n bearing,\n pitch,\n altitude,\n maxZoom,\n minZoom,\n maxPitch,\n minPitch,\n normalize,\n position\n },\n {\n startPanLngLat,\n startZoomLngLat,\n startRotatePos,\n startBearing,\n startPitch,\n startZoom\n }\n );\n\n this.makeViewport = options.makeViewport;\n }\n\n /**\n * Start panning\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n panStart({pos}: {pos: [number, number]}): MapState {\n return this._getUpdatedState({\n startPanLngLat: this._unproject(pos)\n });\n }\n\n /**\n * Pan\n * @param {[Number, Number]} pos - position on screen where the pointer is\n * @param {[Number, Number], optional} startPos - where the pointer grabbed at\n * the start of the operation. Must be supplied of `panStart()` was not called\n */\n pan({pos, startPos}: {pos: [number, number]; startPos?: [number, number]}): MapState {\n const startPanLngLat = this.getState().startPanLngLat || this._unproject(startPos);\n\n if (!startPanLngLat) {\n return this;\n }\n\n const viewport = this.makeViewport(this.getViewportProps());\n const newProps = viewport.panByPosition(startPanLngLat, pos);\n\n return this._getUpdatedState(newProps);\n }\n\n /**\n * End panning\n * Must call if `panStart()` was called\n */\n panEnd(): MapState {\n return this._getUpdatedState({\n startPanLngLat: null\n });\n }\n\n /**\n * Start rotating\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n rotateStart({pos}: {pos: [number, number]}): MapState {\n return this._getUpdatedState({\n startRotatePos: pos,\n startBearing: this.getViewportProps().bearing,\n startPitch: this.getViewportProps().pitch\n });\n }\n\n /**\n * Rotate\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n rotate({\n pos,\n deltaAngleX = 0,\n deltaAngleY = 0\n }: {\n pos?: [number, number];\n deltaAngleX?: number;\n deltaAngleY?: number;\n }): MapState {\n const {startRotatePos, startBearing, startPitch} = this.getState();\n\n if (!startRotatePos || startBearing === undefined || startPitch === undefined) {\n return this;\n }\n let newRotation;\n if (pos) {\n newRotation = this._getNewRotation(pos, startRotatePos, startPitch, startBearing);\n } else {\n newRotation = {\n bearing: startBearing + deltaAngleX,\n pitch: startPitch + deltaAngleY\n };\n }\n return this._getUpdatedState(newRotation);\n }\n\n /**\n * End rotating\n * Must call if `rotateStart()` was called\n */\n rotateEnd(): MapState {\n return this._getUpdatedState({\n startBearing: null,\n startPitch: null\n });\n }\n\n /**\n * Start zooming\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n zoomStart({pos}: {pos: [number, number]}): MapState {\n return this._getUpdatedState({\n startZoomLngLat: this._unproject(pos),\n startZoom: this.getViewportProps().zoom\n });\n }\n\n /**\n * Zoom\n * @param {[Number, Number]} pos - position on screen where the current center is\n * @param {[Number, Number]} startPos - the center position at\n * the start of the operation. Must be supplied of `zoomStart()` was not called\n * @param {Number} scale - a number between [0, 1] specifying the accumulated\n * relative scale.\n */\n zoom({\n pos,\n startPos,\n scale\n }: {\n pos: [number, number];\n startPos?: [number, number];\n scale: number;\n }): MapState {\n // Make sure we zoom around the current mouse position rather than map center\n let {startZoom, startZoomLngLat} = this.getState();\n\n if (!startZoomLngLat) {\n // We have two modes of zoom:\n // scroll zoom that are discrete events (transform from the current zoom level),\n // and pinch zoom that are continuous events (transform from the zoom level when\n // pinch started).\n // If startZoom state is defined, then use the startZoom state;\n // otherwise assume discrete zooming\n startZoom = this.getViewportProps().zoom;\n startZoomLngLat = this._unproject(startPos) || this._unproject(pos);\n }\n if (!startZoomLngLat) {\n return this;\n }\n\n const {maxZoom, minZoom} = this.getViewportProps();\n let zoom = (startZoom as number) + Math.log2(scale);\n zoom = clamp(zoom, minZoom, maxZoom);\n\n const zoomedViewport = this.makeViewport({...this.getViewportProps(), zoom});\n\n return this._getUpdatedState({\n zoom,\n ...zoomedViewport.panByPosition(startZoomLngLat, pos)\n });\n }\n\n /**\n * End zooming\n * Must call if `zoomStart()` was called\n */\n zoomEnd(): MapState {\n return this._getUpdatedState({\n startZoomLngLat: null,\n startZoom: null\n });\n }\n\n zoomIn(speed: number = 2): MapState {\n return this._zoomFromCenter(speed);\n }\n\n zoomOut(speed: number = 2): MapState {\n return this._zoomFromCenter(1 / speed);\n }\n\n moveLeft(speed: number = 100): MapState {\n return this._panFromCenter([speed, 0]);\n }\n\n moveRight(speed: number = 100): MapState {\n return this._panFromCenter([-speed, 0]);\n }\n\n moveUp(speed: number = 100): MapState {\n return this._panFromCenter([0, speed]);\n }\n\n moveDown(speed: number = 100): MapState {\n return this._panFromCenter([0, -speed]);\n }\n\n rotateLeft(speed: number = 15): MapState {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing - speed\n });\n }\n\n rotateRight(speed: number = 15): MapState {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing + speed\n });\n }\n\n rotateUp(speed: number = 10): MapState {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch + speed\n });\n }\n\n rotateDown(speed: number = 10): MapState {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch - speed\n });\n }\n\n shortestPathFrom(viewState: MapState): MapStateProps {\n // const endViewStateProps = new this.ControllerState(endProps).shortestPathFrom(startViewstate);\n const fromProps = viewState.getViewportProps();\n const props = {...this.getViewportProps()};\n const {bearing, longitude} = props;\n\n if (Math.abs(bearing - fromProps.bearing) > 180) {\n props.bearing = bearing < 0 ? bearing + 360 : bearing - 360;\n }\n if (Math.abs(longitude - fromProps.longitude) > 180) {\n props.longitude = longitude < 0 ? longitude + 360 : longitude - 360;\n }\n return props;\n }\n\n // Apply any constraints (mathematical or defined by _viewportProps) to map state\n applyConstraints(props: Required): Required {\n // Ensure zoom is within specified range\n const {maxZoom, minZoom, zoom} = props;\n props.zoom = clamp(zoom, minZoom, maxZoom);\n\n // Ensure pitch is within specified range\n const {maxPitch, minPitch, pitch} = props;\n props.pitch = clamp(pitch, minPitch, maxPitch);\n\n // Normalize viewport props to fit map height into viewport\n const {normalize = true} = props;\n if (normalize) {\n Object.assign(props, normalizeViewportProps(props));\n }\n\n return props;\n }\n\n /* Private methods */\n\n _zoomFromCenter(scale) {\n const {width, height} = this.getViewportProps();\n return this.zoom({\n pos: [width / 2, height / 2],\n scale\n });\n }\n\n _panFromCenter(offset) {\n const {width, height} = this.getViewportProps();\n return this.pan({\n startPos: [width / 2, height / 2],\n pos: [width / 2 + offset[0], height / 2 + offset[1]]\n });\n }\n\n _getUpdatedState(newProps): MapState {\n // @ts-ignore\n return new this.constructor({\n makeViewport: this.makeViewport,\n ...this.getViewportProps(),\n ...this.getState(),\n ...newProps\n });\n }\n\n _unproject(pos?: [number, number]): [number, number] | undefined {\n const viewport = this.makeViewport(this.getViewportProps());\n // @ts-ignore\n return pos && viewport.unproject(pos);\n }\n\n _getNewRotation(\n pos: [number, number],\n startPos: [number, number],\n startPitch: number,\n startBearing: number\n ): {\n pitch: number;\n bearing: number;\n } {\n const deltaX = pos[0] - startPos[0];\n const deltaY = pos[1] - startPos[1];\n const centerY = pos[1];\n const startY = startPos[1];\n const {width, height} = this.getViewportProps();\n\n const deltaScaleX = deltaX / width;\n let deltaScaleY = 0;\n\n if (deltaY > 0) {\n if (Math.abs(height - startY) > PITCH_MOUSE_THRESHOLD) {\n // Move from 0 to -1 as we drag upwards\n deltaScaleY = (deltaY / (startY - height)) * PITCH_ACCEL;\n }\n } else if (deltaY < 0) {\n if (startY > PITCH_MOUSE_THRESHOLD) {\n // Move from 0 to 1 as we drag upwards\n deltaScaleY = 1 - centerY / startY;\n }\n }\n // clamp deltaScaleY to [-1, 1] so that rotation is constrained between minPitch and maxPitch.\n // deltaScaleX does not need to be clamped as bearing does not have constraints.\n deltaScaleY = clamp(deltaScaleY, -1, 1);\n\n const {minPitch, maxPitch} = this.getViewportProps();\n\n const bearing = startBearing + 180 * deltaScaleX;\n let pitch = startPitch;\n if (deltaScaleY > 0) {\n // Gradually increase pitch\n pitch = startPitch + deltaScaleY * (maxPitch - startPitch);\n } else if (deltaScaleY < 0) {\n // Gradually decrease pitch\n pitch = startPitch - deltaScaleY * (minPitch - startPitch);\n }\n\n return {\n pitch,\n bearing\n };\n }\n}\n\nexport default class MapController extends Controller {\n ControllerState = MapState;\n\n transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator({\n transitionProps: {\n compare: ['longitude', 'latitude', 'zoom', 'bearing', 'pitch', 'position'],\n required: ['longitude', 'latitude', 'zoom']\n }\n })\n };\n\n dragMode: 'pan' | 'rotate' = 'pan';\n\n setProps(props: ControllerProps & MapStateProps) {\n props.position = props.position || [0, 0, 0];\n const oldProps = this.props;\n\n super.setProps(props);\n\n const dimensionChanged = !oldProps || oldProps.height !== props.height;\n if (dimensionChanged) {\n // Dimensions changed, normalize the props\n this.updateViewport(\n new this.ControllerState({\n makeViewport: this.makeViewport,\n ...props,\n ...this.state\n })\n );\n }\n }\n}\n","import {equals} from '@math.gl/core';\nimport assert from '../utils/assert';\n\nexport default abstract class TransitionInterpolator {\n protected _propsToCompare: string[];\n protected _propsToExtract: string[];\n protected _requiredProps?: string[];\n\n /**\n * @param opts {array|object}\n * @param opts.compare {array} - prop names used in equality check\n * @param opts.extract {array} - prop names needed for interpolation\n * @param opts.required {array} - prop names that must be supplied\n * alternatively, supply one list of prop names as `opts` if all of the above are the same.\n */\n constructor(opts: {compare: string[]; extract?: string[]; required?: string[]}) {\n const {compare, extract, required} = opts;\n\n this._propsToCompare = compare;\n this._propsToExtract = extract || compare;\n this._requiredProps = required;\n }\n\n /**\n * Checks if two sets of props need transition in between\n * @param currentProps {object} - a list of viewport props\n * @param nextProps {object} - a list of viewport props\n * @returns {bool} - true if two props are equivalent\n */\n arePropsEqual(currentProps: Record, nextProps: Record): boolean {\n for (const key of this._propsToCompare) {\n if (\n !(key in currentProps) ||\n !(key in nextProps) ||\n !equals(currentProps[key], nextProps[key])\n ) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Called before transition starts to validate/pre-process start and end props\n * @param startProps {object} - a list of starting viewport props\n * @param endProps {object} - a list of target viewport props\n * @returns {Object} {start, end} - start and end props to be passed\n * to `interpolateProps`\n */\n initializeProps(\n startProps: Record,\n endProps: Record\n ): {\n start: Record;\n end: Record;\n } {\n const startViewStateProps = {};\n const endViewStateProps = {};\n\n for (const key of this._propsToExtract) {\n if (key in startProps || key in endProps) {\n startViewStateProps[key] = startProps[key];\n endViewStateProps[key] = endProps[key];\n }\n }\n\n this._checkRequiredProps(startViewStateProps);\n this._checkRequiredProps(endViewStateProps);\n\n return {start: startViewStateProps, end: endViewStateProps};\n }\n\n /**\n * Returns viewport props in transition\n * @param startProps {object} - a list of starting viewport props\n * @param endProps {object} - a list of target viewport props\n * @param t {number} - a time factor between [0, 1]\n * @returns {object} - a list of interpolated viewport props\n */\n abstract interpolateProps(\n startProps: Record,\n endProps: Record,\n t: number\n ): Record;\n\n /**\n * Returns transition duration\n * @param startProps {object} - a list of starting viewport props\n * @param endProps {object} - a list of target viewport props\n * @returns {Number} - transition duration in milliseconds\n */\n getDuration(startProps: Record, endProps: Record): number {\n return endProps.transitionDuration;\n }\n\n _checkRequiredProps(props) {\n if (!this._requiredProps) {\n return;\n }\n\n this._requiredProps.forEach(propName => {\n const value = props[propName];\n assert(\n Number.isFinite(value) || Array.isArray(value),\n `${propName} is required for transition`\n );\n });\n }\n}\n","import {clamp} from '@math.gl/core';\nimport Controller from './controller';\nimport ViewState from './view-state';\nimport {mod} from '../utils/math-utils';\n\nimport type Viewport from '../viewports/viewport';\nimport LinearInterpolator from '../transitions/linear-interpolator';\n\nexport type OrbitStateProps = {\n width: number;\n height: number;\n target?: number[];\n zoom?: number | number[];\n rotationX?: number;\n rotationOrbit?: number;\n\n /** Viewport constraints */\n maxZoom?: number;\n minZoom?: number;\n minRotationX?: number;\n maxRotationX?: number;\n};\n\ntype OrbitStateInternal = {\n startPanPosition?: number[];\n startRotatePos?: number[];\n startRotationX?: number;\n startRotationOrbit?: number;\n startZoomPosition?: number[];\n startZoom?: number | number[];\n};\n\nexport class OrbitState extends ViewState {\n makeViewport: (props: Record) => Viewport;\n\n constructor(\n options: OrbitStateProps &\n OrbitStateInternal & {\n makeViewport: (props: Record) => Viewport;\n }\n ) {\n const {\n /* Viewport arguments */\n width, // Width of viewport\n height, // Height of viewport\n rotationX = 0, // Rotation around x axis\n rotationOrbit = 0, // Rotation around orbit axis\n target = [0, 0, 0],\n zoom = 0,\n\n /* Viewport constraints */\n minRotationX = -90,\n maxRotationX = 90,\n minZoom = -Infinity,\n maxZoom = Infinity,\n\n /** Interaction states, required to calculate change during transform */\n // Model state when the pan operation first started\n startPanPosition,\n // Model state when the rotate operation first started\n startRotatePos,\n startRotationX,\n startRotationOrbit,\n // Model state when the zoom operation first started\n startZoomPosition,\n startZoom\n } = options;\n\n super(\n {\n width,\n height,\n rotationX,\n rotationOrbit,\n target,\n zoom,\n minRotationX,\n maxRotationX,\n minZoom,\n maxZoom\n },\n {\n startPanPosition,\n startRotatePos,\n startRotationX,\n startRotationOrbit,\n startZoomPosition,\n startZoom\n }\n );\n\n this.makeViewport = options.makeViewport;\n }\n\n /**\n * Start panning\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n panStart({pos}: {pos: [number, number]}): OrbitState {\n return this._getUpdatedState({\n startPanPosition: this._unproject(pos)\n });\n }\n\n /**\n * Pan\n * @param {[Number, Number]} pos - position on screen where the pointer is\n */\n pan({pos, startPosition}: {pos: [number, number]; startPosition?: number[]}): OrbitState {\n const startPanPosition = this.getState().startPanPosition || startPosition;\n\n if (!startPanPosition) {\n return this;\n }\n\n const viewport = this.makeViewport(this.getViewportProps());\n const newProps = viewport.panByPosition(startPanPosition, pos);\n\n return this._getUpdatedState(newProps);\n }\n\n /**\n * End panning\n * Must call if `panStart()` was called\n */\n panEnd(): OrbitState {\n return this._getUpdatedState({\n startPanPosition: null\n });\n }\n\n /**\n * Start rotating\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n rotateStart({pos}: {pos: [number, number]}): OrbitState {\n return this._getUpdatedState({\n startRotatePos: pos,\n startRotationX: this.getViewportProps().rotationX,\n startRotationOrbit: this.getViewportProps().rotationOrbit\n });\n }\n\n /**\n * Rotate\n * @param {[Number, Number]} pos - position on screen where the pointer is\n */\n rotate({\n pos,\n deltaAngleX = 0,\n deltaAngleY = 0\n }: {\n pos?: [number, number];\n deltaAngleX?: number;\n deltaAngleY?: number;\n }): OrbitState {\n const {startRotatePos, startRotationX, startRotationOrbit} = this.getState();\n const {width, height} = this.getViewportProps();\n\n if (!startRotatePos || startRotationX === undefined || startRotationOrbit === undefined) {\n return this;\n }\n\n let newRotation;\n if (pos) {\n let deltaScaleX = (pos[0] - startRotatePos[0]) / width;\n const deltaScaleY = (pos[1] - startRotatePos[1]) / height;\n\n if (startRotationX < -90 || startRotationX > 90) {\n // When looking at the \"back\" side of the scene, invert horizontal drag\n // so that the camera movement follows user input\n deltaScaleX *= -1;\n }\n newRotation = {\n rotationX: startRotationX + deltaScaleY * 180,\n rotationOrbit: startRotationOrbit + deltaScaleX * 180\n };\n } else {\n newRotation = {\n rotationX: startRotationX + deltaAngleY,\n rotationOrbit: startRotationOrbit + deltaAngleX\n };\n }\n\n return this._getUpdatedState(newRotation);\n }\n\n /**\n * End rotating\n * Must call if `rotateStart()` was called\n */\n rotateEnd(): OrbitState {\n return this._getUpdatedState({\n startRotationX: null,\n startRotationOrbit: null\n });\n }\n\n // shortest path between two view states\n shortestPathFrom(viewState: OrbitState): OrbitStateProps {\n const fromProps = viewState.getViewportProps();\n const props = {...this.getViewportProps()};\n const {rotationOrbit} = props;\n\n if (Math.abs(rotationOrbit - fromProps.rotationOrbit) > 180) {\n props.rotationOrbit = rotationOrbit < 0 ? rotationOrbit + 360 : rotationOrbit - 360;\n }\n\n return props;\n }\n\n /**\n * Start zooming\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n zoomStart({pos}: {pos: [number, number]}): OrbitState {\n return this._getUpdatedState({\n startZoomPosition: this._unproject(pos),\n startZoom: this.getViewportProps().zoom\n });\n }\n\n /**\n * Zoom\n * @param {[Number, Number]} pos - position on screen where the current target is\n * @param {[Number, Number]} startPos - the target position at\n * the start of the operation. Must be supplied of `zoomStart()` was not called\n * @param {Number} scale - a number between [0, 1] specifying the accumulated\n * relative scale.\n */\n zoom({\n pos,\n startPos,\n scale\n }: {\n pos: [number, number];\n startPos?: [number, number];\n scale: number;\n }): OrbitState {\n let {startZoom, startZoomPosition} = this.getState();\n if (!startZoomPosition) {\n // We have two modes of zoom:\n // scroll zoom that are discrete events (transform from the current zoom level),\n // and pinch zoom that are continuous events (transform from the zoom level when\n // pinch started).\n // If startZoom state is defined, then use the startZoom state;\n // otherwise assume discrete zooming\n startZoom = this.getViewportProps().zoom;\n startZoomPosition = this._unproject(startPos) || this._unproject(pos);\n }\n if (!startZoomPosition) {\n return this;\n }\n const newZoom = this._calculateNewZoom({scale, startZoom});\n const zoomedViewport = this.makeViewport({...this.getViewportProps(), zoom: newZoom});\n\n return this._getUpdatedState({\n zoom: newZoom,\n ...zoomedViewport.panByPosition(startZoomPosition, pos)\n });\n }\n\n /**\n * End zooming\n * Must call if `zoomStart()` was called\n */\n zoomEnd(): OrbitState {\n return this._getUpdatedState({\n startZoomPosition: null,\n startZoom: null\n });\n }\n\n zoomIn(speed: number = 2): OrbitState {\n return this._getUpdatedState({\n zoom: this._calculateNewZoom({scale: speed})\n });\n }\n\n zoomOut(speed: number = 2): OrbitState {\n return this._getUpdatedState({\n zoom: this._calculateNewZoom({scale: 1 / speed})\n });\n }\n\n moveLeft(speed: number = 50): OrbitState {\n return this._panFromCenter([-speed, 0]);\n }\n\n moveRight(speed: number = 50): OrbitState {\n return this._panFromCenter([speed, 0]);\n }\n\n moveUp(speed: number = 50): OrbitState {\n return this._panFromCenter([0, -speed]);\n }\n\n moveDown(speed: number = 50): OrbitState {\n return this._panFromCenter([0, speed]);\n }\n\n rotateLeft(speed: number = 15): OrbitState {\n return this._getUpdatedState({\n rotationOrbit: this.getViewportProps().rotationOrbit - speed\n });\n }\n\n rotateRight(speed: number = 15): OrbitState {\n return this._getUpdatedState({\n rotationOrbit: this.getViewportProps().rotationOrbit + speed\n });\n }\n\n rotateUp(speed: number = 10): OrbitState {\n return this._getUpdatedState({\n rotationX: this.getViewportProps().rotationX - speed\n });\n }\n\n rotateDown(speed: number = 10): OrbitState {\n return this._getUpdatedState({\n rotationX: this.getViewportProps().rotationX + speed\n });\n }\n\n /* Private methods */\n\n _unproject(pos?: number[]): number[] | undefined {\n const viewport = this.makeViewport(this.getViewportProps());\n // @ts-ignore\n return pos && viewport.unproject(pos);\n }\n\n // Calculates new zoom\n _calculateNewZoom({\n scale,\n startZoom\n }: {\n scale: number;\n startZoom?: number | number[];\n }): number | number[] {\n const {maxZoom, minZoom} = this.getViewportProps();\n if (startZoom === undefined) {\n startZoom = this.getViewportProps().zoom;\n }\n const zoom = (startZoom as number) + Math.log2(scale);\n return clamp(zoom, minZoom, maxZoom);\n }\n\n _panFromCenter(offset) {\n const {width, height, target} = this.getViewportProps();\n return this.pan({\n startPosition: target,\n pos: [width / 2 + offset[0], height / 2 + offset[1]]\n });\n }\n\n _getUpdatedState(newProps): OrbitState {\n // @ts-ignore\n return new this.constructor({\n makeViewport: this.makeViewport,\n ...this.getViewportProps(),\n ...this.getState(),\n ...newProps\n });\n }\n\n // Apply any constraints (mathematical or defined by _viewportProps) to map state\n applyConstraints(props: Required): Required {\n // Ensure zoom is within specified range\n const {maxZoom, minZoom, zoom, maxRotationX, minRotationX, rotationOrbit} = props;\n\n props.zoom = Array.isArray(zoom)\n ? [clamp(zoom[0], minZoom, maxZoom), clamp(zoom[1], minZoom, maxZoom)]\n : clamp(zoom, minZoom, maxZoom);\n\n props.rotationX = clamp(props.rotationX, minRotationX, maxRotationX);\n if (rotationOrbit < -180 || rotationOrbit > 180) {\n props.rotationOrbit = mod(rotationOrbit + 180, 360) - 180;\n }\n\n return props;\n }\n}\n\nexport default class OrbitController extends Controller {\n ControllerState = OrbitState;\n\n transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator({\n transitionProps: {\n compare: ['target', 'zoom', 'rotationX', 'rotationOrbit'],\n required: ['target', 'zoom']\n }\n })\n };\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// Handles tesselation of polygons with holes\n// - 2D surfaces\n// - 2D outlines\n// - 3D surfaces (top and sides only)\n// - 3D wireframes (not yet)\nimport * as Polygon from './polygon';\nimport {Tesselator} from '@deck.gl/core';\nimport {cutPolygonByGrid, cutPolygonByMercatorBounds} from '@math.gl/polygon';\n\nimport type {\n PolygonGeometry,\n NormalizedPolygonGeometry,\n FlatComplexPolygonGeometry\n} from './polygon';\nimport type {TypedArray} from '@math.gl/core';\n\ntype GeometryUpdateContext = {\n vertexStart: number;\n indexStart: number;\n geometrySize: number;\n geometryIndex: number;\n};\n\ntype CutPolygon = FlatComplexPolygonGeometry & {\n edgeTypes: number[];\n};\n\n// This class is set up to allow querying one attribute at a time\n// the way the AttributeManager expects it\nexport default class PolygonTesselator extends Tesselator<\n PolygonGeometry,\n NormalizedPolygonGeometry | CutPolygon[],\n {\n fp64?: boolean;\n IndexType?: Uint32ArrayConstructor | Uint16ArrayConstructor;\n resolution?: number;\n wrapLongitude?: boolean;\n preproject?: (xy: number[]) => number[];\n full3d?: boolean;\n }\n> {\n constructor(opts) {\n const {fp64, IndexType = Uint32Array} = opts;\n super({\n ...opts,\n attributes: {\n positions: {size: 3, type: fp64 ? Float64Array : Float32Array},\n vertexValid: {type: Uint8ClampedArray, size: 1},\n indices: {type: IndexType, size: 1}\n }\n });\n }\n\n /** Get attribute by name */\n get(attributeName: string): TypedArray | null {\n const {attributes} = this;\n if (attributeName === 'indices') {\n return attributes.indices && attributes.indices.subarray(0, this.vertexCount);\n }\n\n return attributes[attributeName];\n }\n\n /** Override base Tesselator method */\n updateGeometry(opts) {\n super.updateGeometry(opts);\n\n const externalIndices = this.buffers.indices;\n if (externalIndices) {\n // @ts-ignore (2339) value is not defined on TypedArray (fall through)\n this.vertexCount = (externalIndices.value || externalIndices).length;\n } else if (this.data && !this.getGeometry) {\n throw new Error('missing indices buffer');\n }\n }\n\n /** Implement base Tesselator interface */\n protected normalizeGeometry(polygon: PolygonGeometry): NormalizedPolygonGeometry | CutPolygon[] {\n if (this.normalize) {\n const normalizedPolygon = Polygon.normalize(polygon, this.positionSize);\n if (this.opts.resolution) {\n return cutPolygonByGrid(\n Polygon.getPositions(normalizedPolygon),\n Polygon.getHoleIndices(normalizedPolygon),\n {\n size: this.positionSize,\n gridResolution: this.opts.resolution,\n edgeTypes: true\n }\n ) as CutPolygon[];\n }\n if (this.opts.wrapLongitude) {\n return cutPolygonByMercatorBounds(\n Polygon.getPositions(normalizedPolygon),\n Polygon.getHoleIndices(normalizedPolygon),\n {\n size: this.positionSize,\n maxLatitude: 86,\n edgeTypes: true\n }\n ) as CutPolygon[];\n }\n return normalizedPolygon;\n }\n // normalize is explicitly set to false, assume that user passed in already normalized polygons\n return polygon as NormalizedPolygonGeometry;\n }\n\n /** Implement base Tesselator interface */\n protected getGeometrySize(polygon: NormalizedPolygonGeometry | CutPolygon[]): number {\n if (isCut(polygon)) {\n let size = 0;\n for (const subPolygon of polygon) {\n size += this.getGeometrySize(subPolygon);\n }\n return size;\n }\n return Polygon.getPositions(polygon).length / this.positionSize;\n }\n\n /** Override base Tesselator method */\n protected getGeometryFromBuffer(buffer) {\n if (this.normalize || !this.buffers.indices) {\n return super.getGeometryFromBuffer(buffer);\n }\n // we don't need to read the positions if no normalization/tesselation\n return null;\n }\n\n /** Implement base Tesselator interface */\n protected updateGeometryAttributes(\n polygon: NormalizedPolygonGeometry | CutPolygon[] | null,\n context: GeometryUpdateContext\n ) {\n if (polygon && isCut(polygon)) {\n for (const subPolygon of polygon) {\n const geometrySize = this.getGeometrySize(subPolygon);\n context.geometrySize = geometrySize;\n this.updateGeometryAttributes(subPolygon, context);\n context.vertexStart += geometrySize;\n context.indexStart = this.indexStarts[context.geometryIndex + 1];\n }\n } else {\n this._updateIndices(polygon, context);\n this._updatePositions(polygon, context);\n this._updateVertexValid(polygon, context);\n }\n }\n\n // Flatten the indices array\n private _updateIndices(\n polygon: NormalizedPolygonGeometry | null,\n {geometryIndex, vertexStart: offset, indexStart}: GeometryUpdateContext\n ) {\n const {attributes, indexStarts, typedArrayManager} = this;\n\n let target = attributes.indices;\n if (!target || !polygon) {\n return;\n }\n let i = indexStart;\n\n // 1. get triangulated indices for the internal areas\n const indices = Polygon.getSurfaceIndices(\n polygon,\n this.positionSize,\n this.opts.preproject,\n this.opts.full3d\n );\n\n // make sure the buffer is large enough\n target = typedArrayManager.allocate(target, indexStart + indices.length, {\n copy: true\n });\n\n // 2. offset each index by the number of indices in previous polygons\n for (let j = 0; j < indices.length; j++) {\n target[i++] = indices[j] + offset;\n }\n\n indexStarts[geometryIndex + 1] = indexStart + indices.length;\n attributes.indices = target;\n }\n\n // Flatten out all the vertices of all the sub subPolygons\n private _updatePositions(\n polygon: NormalizedPolygonGeometry | null,\n {vertexStart, geometrySize}: GeometryUpdateContext\n ) {\n const {\n attributes: {positions},\n positionSize\n } = this;\n if (!positions || !polygon) {\n return;\n }\n const polygonPositions = Polygon.getPositions(polygon);\n\n for (let i = vertexStart, j = 0; j < geometrySize; i++, j++) {\n const x = polygonPositions[j * positionSize];\n const y = polygonPositions[j * positionSize + 1];\n const z = positionSize > 2 ? polygonPositions[j * positionSize + 2] : 0;\n\n positions[i * 3] = x;\n positions[i * 3 + 1] = y;\n positions[i * 3 + 2] = z;\n }\n }\n\n private _updateVertexValid(\n polygon: NormalizedPolygonGeometry | null,\n {vertexStart, geometrySize}: GeometryUpdateContext\n ) {\n const {positionSize} = this;\n const vertexValid = this.attributes.vertexValid as TypedArray;\n const holeIndices = polygon && Polygon.getHoleIndices(polygon);\n /* We are reusing the some buffer for `nextPositions` by offseting one vertex\n * to the left. As a result,\n * the last vertex of each ring overlaps with the first vertex of the next ring.\n * `vertexValid` is used to mark the end of each ring so we don't draw these\n * segments:\n positions A0 A1 A2 A3 A4 B0 B1 B2 C0 ...\n nextPositions A1 A2 A3 A4 B0 B1 B2 C0 C1 ...\n vertexValid 1 1 1 1 0 1 1 0 1 ...\n */\n if (polygon && (polygon as CutPolygon).edgeTypes) {\n vertexValid.set((polygon as CutPolygon).edgeTypes, vertexStart);\n } else {\n vertexValid.fill(1, vertexStart, vertexStart + geometrySize);\n }\n if (holeIndices) {\n for (let j = 0; j < holeIndices.length; j++) {\n vertexValid[vertexStart + holeIndices[j] / positionSize - 1] = 0;\n }\n }\n vertexValid[vertexStart + geometrySize - 1] = 0;\n }\n}\n\nfunction isCut(polygon: NormalizedPolygonGeometry | CutPolygon[]): polygon is CutPolygon[] {\n return Array.isArray(polygon) && polygon.length > 0 && !Number.isFinite(polygon[0]);\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n\nattribute vec2 vertexPositions;\nattribute float vertexValid;\n\nuniform bool extruded;\nuniform bool isWireframe;\nuniform float elevationScale;\nuniform float opacity;\n\nvarying vec4 vColor;\n\nstruct PolygonProps {\n vec4 fillColors;\n vec4 lineColors;\n vec3 positions;\n vec3 nextPositions;\n vec3 pickingColors;\n vec3 positions64Low;\n vec3 nextPositions64Low;\n float elevations;\n};\n\nvec3 project_offset_normal(vec3 vector) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS) {\n // normals generated by the polygon tesselator are in lnglat offsets instead of meters\n return normalize(vector * project_uCommonUnitsPerWorldUnit);\n }\n return project_normal(vector);\n}\n\nvoid calculatePosition(PolygonProps props) {\n#ifdef IS_SIDE_VERTEX\n if(vertexValid < 0.5){\n gl_Position = vec4(0.);\n return;\n }\n#endif\n\n vec3 pos;\n vec3 pos64Low;\n vec3 normal;\n vec4 colors = isWireframe ? props.lineColors : props.fillColors;\n\n geometry.worldPosition = props.positions;\n geometry.worldPositionAlt = props.nextPositions;\n geometry.pickingColor = props.pickingColors;\n\n#ifdef IS_SIDE_VERTEX\n pos = mix(props.positions, props.nextPositions, vertexPositions.x);\n pos64Low = mix(props.positions64Low, props.nextPositions64Low, vertexPositions.x);\n#else\n pos = props.positions;\n pos64Low = props.positions64Low;\n#endif\n\n if (extruded) {\n pos.z += props.elevations * vertexPositions.y * elevationScale;\n }\n gl_Position = project_position_to_clipspace(pos, pos64Low, vec3(0.), geometry.position);\n\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n if (extruded) {\n #ifdef IS_SIDE_VERTEX\n normal = vec3(\n props.positions.y - props.nextPositions.y + (props.positions64Low.y - props.nextPositions64Low.y),\n props.nextPositions.x - props.positions.x + (props.nextPositions64Low.x - props.positions64Low.x),\n 0.0);\n normal = project_offset_normal(normal);\n #else\n normal = project_normal(vec3(0.0, 0.0, 1.0));\n #endif\n geometry.normal = normal;\n vec3 lightColor = lighting_getLightColor(colors.rgb, project_uCameraPosition, geometry.position.xyz, normal);\n vColor = vec4(lightColor, colors.a * opacity);\n } else {\n vColor = vec4(colors.rgb, colors.a * opacity);\n }\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport main from './solid-polygon-layer-vertex-main.glsl';\n\nexport default `\\\n#define SHADER_NAME solid-polygon-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 positions64Low;\nattribute float elevations;\nattribute vec4 fillColors;\nattribute vec4 lineColors;\nattribute vec3 pickingColors;\n\n${main}\n\nvoid main(void) {\n PolygonProps props;\n\n props.positions = positions;\n props.positions64Low = positions64Low;\n props.elevations = elevations;\n props.fillColors = fillColors;\n props.lineColors = lineColors;\n props.pickingColors = pickingColors;\n\n calculatePosition(props);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport main from './solid-polygon-layer-vertex-main.glsl';\n\nexport default `\\\n#define SHADER_NAME solid-polygon-layer-vertex-shader-side\n#define IS_SIDE_VERTEX\n\n\nattribute vec3 instancePositions;\nattribute vec3 nextPositions;\nattribute vec3 instancePositions64Low;\nattribute vec3 nextPositions64Low;\nattribute float instanceElevations;\nattribute vec4 instanceFillColors;\nattribute vec4 instanceLineColors;\nattribute vec3 instancePickingColors;\n\n${main}\n\nvoid main(void) {\n PolygonProps props;\n\n #if RING_WINDING_ORDER_CW == 1\n props.positions = instancePositions;\n props.positions64Low = instancePositions64Low;\n props.nextPositions = nextPositions;\n props.nextPositions64Low = nextPositions64Low;\n #else\n props.positions = nextPositions;\n props.positions64Low = nextPositions64Low;\n props.nextPositions = instancePositions;\n props.nextPositions64Low = instancePositions64Low;\n #endif\n props.elevations = instanceElevations;\n props.fillColors = instanceFillColors;\n props.lineColors = instanceLineColors;\n props.pickingColors = instancePickingColors;\n\n calculatePosition(props);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {Layer, project32, gouraudLighting, picking, COORDINATE_SYSTEM} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry, hasFeatures, FEATURES} from '@luma.gl/core';\n\n// Polygon geometry generation is managed by the polygon tesselator\nimport PolygonTesselator from './polygon-tesselator';\n\nimport vsTop from './solid-polygon-layer-vertex-top.glsl';\nimport vsSide from './solid-polygon-layer-vertex-side.glsl';\nimport fs from './solid-polygon-layer-fragment.glsl';\n\nimport type {\n LayerProps,\n Color,\n Material,\n Accessor,\n AccessorFunction,\n UpdateParameters,\n GetPickingInfoParams,\n PickingInfo,\n DefaultProps\n} from '@deck.gl/core';\nimport type {PolygonGeometry} from './polygon';\n\ntype _SolidPolygonLayerProps = {\n /** Whether to fill the polygons\n * @default true\n */\n filled?: boolean;\n /** Whether to extrude the polygons\n * @default false\n */\n extruded?: boolean;\n /** Whether to generate a line wireframe of the polygon.\n * @default false\n */\n wireframe?: boolean;\n /**\n * (Experimental) If `false`, will skip normalizing the coordinates returned by `getPolygon`.\n * @default true\n */\n _normalize?: boolean;\n /**\n * (Experimental) This prop is only effective with `_normalize: false`.\n * It specifies the winding order of rings in the polygon data, one of 'CW' (clockwise) and 'CCW' (counter-clockwise)\n */\n _windingOrder?: 'CW' | 'CCW';\n\n /**\n * (Experimental) This prop is only effective with `XYZ` data.\n * When true, polygon tesselation will be performed on the plane with the largest area, instead of the xy plane.\n * @default false\n */\n _full3d?: boolean;\n\n /** Elevation multiplier.\n * @default 1\n */\n elevationScale?: number;\n\n /** Polygon geometry accessor. */\n getPolygon?: AccessorFunction;\n /** Extrusion height accessor.\n * @default 1000\n */\n getElevation?: Accessor;\n /** Fill color accessor.\n * @default [0, 0, 0, 255]\n */\n getFillColor?: Accessor;\n /** Stroke color accessor.\n * @default [0, 0, 0, 255]\n */\n getLineColor?: Accessor;\n\n /**\n * Material settings for lighting effect. Applies if `extruded: true`\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n};\n\n/** Render filled and/or extruded polygons. */\nexport type SolidPolygonLayerProps = _SolidPolygonLayerProps &\n LayerProps;\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n filled: true,\n extruded: false,\n wireframe: false,\n _normalize: true,\n _windingOrder: 'CW',\n _full3d: false,\n\n elevationScale: {type: 'number', min: 0, value: 1},\n\n getPolygon: {type: 'accessor', value: f => f.polygon},\n getElevation: {type: 'accessor', value: 1000},\n getFillColor: {type: 'accessor', value: DEFAULT_COLOR},\n getLineColor: {type: 'accessor', value: DEFAULT_COLOR},\n\n material: true\n};\n\nconst ATTRIBUTE_TRANSITION = {\n enter: (value, chunk) => {\n return chunk.length ? chunk.subarray(chunk.length - value.length) : value;\n }\n};\n\nexport default class SolidPolygonLayer extends Layer<\n ExtraPropsT & Required<_SolidPolygonLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'SolidPolygonLayer';\n\n state!: {\n topModel?: Model;\n sideModel?: Model;\n models?: Model[];\n numInstances: number;\n polygonTesselator: PolygonTesselator;\n };\n\n getShaders(type) {\n return super.getShaders({\n vs: type === 'top' ? vsTop : vsSide,\n fs,\n defines: {\n RING_WINDING_ORDER_CW: !this.props._normalize && this.props._windingOrder === 'CCW' ? 0 : 1\n },\n modules: [project32, gouraudLighting, picking]\n });\n }\n\n get wrapLongitude(): boolean {\n return false;\n }\n\n initializeState() {\n const {gl, viewport} = this.context;\n let {coordinateSystem} = this.props;\n const {_full3d} = this.props;\n if (viewport.isGeospatial && coordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n coordinateSystem = COORDINATE_SYSTEM.LNGLAT;\n }\n\n let preproject: ((xy: number[]) => number[]) | undefined;\n\n if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT) {\n if (_full3d) {\n preproject = viewport.projectPosition.bind(viewport);\n } else {\n preproject = viewport.projectFlat.bind(viewport);\n }\n }\n\n this.setState({\n numInstances: 0,\n polygonTesselator: new PolygonTesselator({\n // Lnglat coordinates are usually projected non-linearly, which affects tesselation results\n // Provide a preproject function if the coordinates are in lnglat\n preproject,\n fp64: this.use64bitPositions(),\n IndexType: !gl || hasFeatures(gl, FEATURES.ELEMENT_INDEX_UINT32) ? Uint32Array : Uint16Array\n })\n });\n\n const attributeManager = this.getAttributeManager()!;\n const noAlloc = true;\n\n attributeManager.remove(['instancePickingColors']);\n\n /* eslint-disable max-len */\n attributeManager.add({\n indices: {\n size: 1,\n isIndexed: true,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateIndices,\n noAlloc\n },\n positions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getPolygon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculatePositions,\n noAlloc,\n shaderAttributes: {\n positions: {\n vertexOffset: 0,\n divisor: 0\n },\n instancePositions: {\n vertexOffset: 0,\n divisor: 1\n },\n nextPositions: {\n vertexOffset: 1,\n divisor: 1\n }\n }\n },\n vertexValid: {\n size: 1,\n divisor: 1,\n type: GL.UNSIGNED_BYTE,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateVertexValid,\n noAlloc\n },\n elevations: {\n size: 1,\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getElevation',\n shaderAttributes: {\n elevations: {\n divisor: 0\n },\n instanceElevations: {\n divisor: 1\n }\n }\n },\n fillColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getFillColor',\n defaultValue: DEFAULT_COLOR,\n shaderAttributes: {\n fillColors: {\n divisor: 0\n },\n instanceFillColors: {\n divisor: 1\n }\n }\n },\n lineColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getLineColor',\n defaultValue: DEFAULT_COLOR,\n shaderAttributes: {\n lineColors: {\n divisor: 0\n },\n instanceLineColors: {\n divisor: 1\n }\n }\n },\n pickingColors: {\n size: 3,\n type: GL.UNSIGNED_BYTE,\n accessor: (object, {index, target: value}) =>\n this.encodePickingColor(object && object.__source ? object.__source.index : index, value),\n shaderAttributes: {\n pickingColors: {\n divisor: 0\n },\n instancePickingColors: {\n divisor: 1\n }\n }\n }\n });\n /* eslint-enable max-len */\n }\n\n getPickingInfo(params: GetPickingInfoParams): PickingInfo {\n const info = super.getPickingInfo(params);\n const {index} = info;\n const {data} = this.props;\n\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n info.object = (data as any[]).find(d => d.__source.index === index);\n }\n return info;\n }\n\n disablePickingIndex(objectIndex: number) {\n const {data} = this.props;\n\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n for (let i = 0; i < (data as any[]).length; i++) {\n if (data[i].__source.index === objectIndex) {\n this._disablePickingIndex(i);\n }\n }\n } else {\n this._disablePickingIndex(objectIndex);\n }\n }\n\n draw({uniforms}) {\n const {extruded, filled, wireframe, elevationScale} = this.props;\n const {topModel, sideModel, polygonTesselator} = this.state;\n\n const renderUniforms = {\n ...uniforms,\n extruded: Boolean(extruded),\n elevationScale\n };\n\n // Note: the order is important\n if (sideModel) {\n sideModel.setInstanceCount(polygonTesselator.instanceCount - 1);\n sideModel.setUniforms(renderUniforms);\n if (wireframe) {\n sideModel.setDrawMode(GL.LINE_STRIP);\n sideModel.setUniforms({isWireframe: true}).draw();\n }\n if (filled) {\n sideModel.setDrawMode(GL.TRIANGLE_FAN);\n sideModel.setUniforms({isWireframe: false}).draw();\n }\n }\n\n if (topModel) {\n topModel.setVertexCount(polygonTesselator.vertexCount);\n topModel.setUniforms(renderUniforms).draw();\n }\n }\n\n updateState(updateParams: UpdateParameters) {\n super.updateState(updateParams);\n\n this.updateGeometry(updateParams);\n\n const {props, oldProps, changeFlags} = updateParams;\n const attributeManager = this.getAttributeManager();\n\n const regenerateModels =\n changeFlags.extensionsChanged ||\n props.filled !== oldProps.filled ||\n props.extruded !== oldProps.extruded;\n\n if (regenerateModels) {\n this.state.models?.forEach(model => model.delete());\n\n this.setState(this._getModels(this.context.gl));\n attributeManager!.invalidateAll();\n }\n }\n\n protected updateGeometry({props, oldProps, changeFlags}: UpdateParameters) {\n const geometryConfigChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPolygon));\n\n // When the geometry config or the data is changed,\n // tessellator needs to be invoked\n if (geometryConfigChanged) {\n const {polygonTesselator} = this.state;\n const buffers = (props.data as any).attributes || {};\n polygonTesselator.updateGeometry({\n data: props.data,\n normalize: props._normalize,\n geometryBuffer: buffers.getPolygon,\n buffers,\n getGeometry: props.getPolygon,\n positionFormat: props.positionFormat,\n wrapLongitude: props.wrapLongitude,\n // TODO - move the flag out of the viewport\n resolution: this.context.viewport.resolution,\n fp64: this.use64bitPositions(),\n dataChanged: changeFlags.dataChanged,\n full3d: props._full3d\n });\n\n this.setState({\n numInstances: polygonTesselator.instanceCount,\n startIndices: polygonTesselator.vertexStarts\n });\n\n if (!changeFlags.dataChanged) {\n // Base `layer.updateState` only invalidates all attributes on data change\n // Cover the rest of the scenarios here\n this.getAttributeManager()!.invalidateAll();\n }\n }\n }\n\n protected _getModels(gl: WebGLRenderingContext): Model {\n const {id, filled, extruded} = this.props;\n\n let topModel;\n let sideModel;\n\n if (filled) {\n const shaders = this.getShaders('top');\n shaders.defines.NON_INSTANCED_MODEL = 1;\n\n topModel = new Model(gl, {\n ...shaders,\n id: `${id}-top`,\n drawMode: GL.TRIANGLES,\n attributes: {\n vertexPositions: new Float32Array([0, 1])\n },\n uniforms: {\n isWireframe: false,\n isSideVertex: false\n },\n vertexCount: 0,\n isIndexed: true\n });\n }\n if (extruded) {\n sideModel = new Model(gl, {\n ...this.getShaders('side'),\n id: `${id}-side`,\n geometry: new Geometry({\n drawMode: GL.LINES,\n vertexCount: 4,\n attributes: {\n // top right - top left - bootom left - bottom right\n vertexPositions: {\n size: 2,\n value: new Float32Array([1, 0, 0, 0, 0, 1, 1, 1])\n }\n }\n }),\n instanceCount: 0,\n isInstanced: 1\n });\n\n sideModel.userData.excludeAttributes = {indices: true};\n }\n\n return {\n models: [sideModel, topModel].filter(Boolean),\n topModel,\n sideModel\n };\n }\n\n protected calculateIndices(attribute) {\n const {polygonTesselator} = this.state;\n attribute.startIndices = polygonTesselator.indexStarts;\n attribute.value = polygonTesselator.get('indices');\n }\n\n protected calculatePositions(attribute) {\n const {polygonTesselator} = this.state;\n attribute.startIndices = polygonTesselator.vertexStarts;\n attribute.value = polygonTesselator.get('positions');\n }\n\n protected calculateVertexValid(attribute) {\n attribute.value = this.state.polygonTesselator.get('vertexValid');\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME solid-polygon-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n gl_FragColor = vColor;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {Tesselator} from '@deck.gl/core';\nimport {normalizePath} from './path';\n\nimport type {TypedArray} from '@math.gl/core';\nimport type {PathGeometry, FlatPathGeometry, NormalizedPathGeometry} from './path';\n\nconst START_CAP = 1;\nconst END_CAP = 2;\nconst INVALID = 4;\n\n// This class is set up to allow querying one attribute at a time\n// the way the AttributeManager expects it\nexport default class PathTesselator extends Tesselator<\n PathGeometry,\n NormalizedPathGeometry,\n {\n fp64?: boolean;\n resolution?: number;\n wrapLongitude?: boolean;\n loop?: boolean;\n }\n> {\n constructor(opts) {\n super({\n ...opts,\n attributes: {\n // Padding covers shaderAttributes for last segment in largest case fp64\n // additional vertex + hi & low parts, 3 * 6\n positions: {\n size: 3,\n padding: 18,\n initialize: true,\n type: opts.fp64 ? Float64Array : Float32Array\n },\n segmentTypes: {size: 1, type: Uint8ClampedArray}\n }\n });\n }\n\n /** Get packed attribute by name */\n get(attributeName: string): TypedArray | null {\n return this.attributes[attributeName];\n }\n\n /* Implement base Tesselator interface */\n protected getGeometryFromBuffer(buffer) {\n if (this.normalize) {\n return super.getGeometryFromBuffer(buffer);\n }\n // we don't need to read the positions if no normalization\n return null;\n }\n\n /* Implement base Tesselator interface */\n protected normalizeGeometry(path: PathGeometry): number[][] | PathGeometry {\n if (this.normalize) {\n return normalizePath(path, this.positionSize, this.opts.resolution, this.opts.wrapLongitude);\n }\n return path;\n }\n\n /* Implement base Tesselator interface */\n protected getGeometrySize(path: NormalizedPathGeometry): number {\n if (isCut(path)) {\n let size = 0;\n for (const subPath of path) {\n size += this.getGeometrySize(subPath);\n }\n return size;\n }\n const numPoints = this.getPathLength(path);\n if (numPoints < 2) {\n // invalid path\n return 0;\n }\n if (this.isClosed(path)) {\n // minimum 3 vertices\n return numPoints < 3 ? 0 : numPoints + 2;\n }\n return numPoints;\n }\n\n /* Implement base Tesselator interface */\n protected updateGeometryAttributes(\n path: NormalizedPathGeometry | null,\n context: {\n vertexStart: number;\n geometrySize: number;\n }\n ): void {\n if (context.geometrySize === 0) {\n return;\n }\n if (path && isCut(path)) {\n for (const subPath of path) {\n const geometrySize = this.getGeometrySize(subPath);\n context.geometrySize = geometrySize;\n this.updateGeometryAttributes(subPath, context);\n context.vertexStart += geometrySize;\n }\n } else {\n this._updateSegmentTypes(path, context);\n this._updatePositions(path, context);\n }\n }\n\n private _updateSegmentTypes(\n path: FlatPathGeometry | null,\n context: {\n vertexStart: number;\n geometrySize: number;\n }\n ) {\n const segmentTypes = this.attributes.segmentTypes as TypedArray;\n const isPathClosed = path ? this.isClosed(path) : false;\n const {vertexStart, geometrySize} = context;\n\n // positions -- A0 A1 B0 B1 B2 B3 B0 B1 B2 --\n // segmentTypes 3 4 4 0 0 0 0 4 4\n segmentTypes.fill(0, vertexStart, vertexStart + geometrySize);\n if (isPathClosed) {\n segmentTypes[vertexStart] = INVALID;\n segmentTypes[vertexStart + geometrySize - 2] = INVALID;\n } else {\n segmentTypes[vertexStart] += START_CAP;\n segmentTypes[vertexStart + geometrySize - 2] += END_CAP;\n }\n segmentTypes[vertexStart + geometrySize - 1] = INVALID;\n }\n\n private _updatePositions(\n path: FlatPathGeometry | null,\n context: {\n vertexStart: number;\n geometrySize: number;\n }\n ) {\n const {positions} = this.attributes;\n if (!positions || !path) {\n return;\n }\n const {vertexStart, geometrySize} = context;\n const p = new Array(3);\n\n // positions -- A0 A1 B0 B1 B2 B3 B0 B1 B2 --\n // segmentTypes 3 4 4 0 0 0 0 4 4\n for (let i = vertexStart, ptIndex = 0; ptIndex < geometrySize; i++, ptIndex++) {\n this.getPointOnPath(path, ptIndex, p);\n positions[i * 3] = p[0];\n positions[i * 3 + 1] = p[1];\n positions[i * 3 + 2] = p[2];\n }\n }\n\n // Utilities\n /** Returns the number of points in the path */\n private getPathLength(path: FlatPathGeometry): number {\n return path.length / this.positionSize;\n }\n\n /** Returns a point on the path at the specified index */\n private getPointOnPath(path: FlatPathGeometry, index: number, target: number[] = []): number[] {\n const {positionSize} = this;\n if (index * positionSize >= path.length) {\n // loop\n index += 1 - path.length / positionSize;\n }\n const i = index * positionSize;\n target[0] = path[i];\n target[1] = path[i + 1];\n target[2] = (positionSize === 3 && path[i + 2]) || 0;\n return target;\n }\n\n // Returns true if the first and last points are identical\n private isClosed(path: FlatPathGeometry): boolean {\n if (!this.normalize) {\n return Boolean(this.opts.loop);\n }\n const {positionSize} = this;\n const lastPointIndex = path.length - positionSize;\n return (\n path[0] === path[lastPointIndex] &&\n path[1] === path[lastPointIndex + 1] &&\n (positionSize === 2 || path[2] === path[lastPointIndex + 2])\n );\n }\n}\n\nfunction isCut(path: NormalizedPathGeometry): path is FlatPathGeometry[] {\n return Array.isArray(path[0]);\n}\n","import {cutPolylineByGrid, cutPolylineByMercatorBounds} from '@math.gl/polygon';\n\nimport type {NumericArray} from '@math.gl/core';\nimport type {Position} from '@deck.gl/core';\n\nexport type NestedPathGeometry = Position[];\nexport type FlatPathGeometry = NumericArray;\nexport type PathGeometry = NestedPathGeometry | FlatPathGeometry;\nexport type NormalizedPathGeometry = FlatPathGeometry[] | FlatPathGeometry;\n\n/**\n * Flattens a nested path object\n * Cut the feature if needed (globe projection, wrap longitude, etc.)\n * Returns a flat array of path positions, or a list of flat arrays representing multiple paths\n */\nexport function normalizePath(\n path: PathGeometry,\n size: number,\n gridResolution?: number,\n wrapLongitude?: boolean\n): number[][] | NumericArray {\n let flatPath: NumericArray;\n if (Array.isArray(path[0])) {\n const length = path.length * size;\n flatPath = new Array(length);\n for (let i = 0; i < path.length; i++) {\n for (let j = 0; j < size; j++) {\n flatPath[i * size + j] = path[i][j] || 0;\n }\n }\n } else {\n flatPath = path as NumericArray;\n }\n if (gridResolution) {\n return cutPolylineByGrid(flatPath, {size, gridResolution});\n }\n if (wrapLongitude) {\n return cutPolylineByMercatorBounds(flatPath, {size});\n }\n return flatPath;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {Layer, project32, picking, UNIT} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\nimport PathTesselator from './path-tesselator';\n\nimport vs from './path-layer-vertex.glsl';\nimport fs from './path-layer-fragment.glsl';\n\nimport type {\n LayerProps,\n Color,\n Accessor,\n AccessorFunction,\n Unit,\n UpdateParameters,\n GetPickingInfoParams,\n PickingInfo,\n DefaultProps\n} from '@deck.gl/core';\nimport type {PathGeometry} from './path';\n\ntype _PathLayerProps = {\n /** The units of the line width, one of `'meters'`, `'common'`, and `'pixels'`\n * @default 'meters'\n */\n widthUnits?: Unit;\n /**\n * Path width multiplier.\n * @default 1\n */\n widthScale?: number;\n /**\n * The minimum path width in pixels. This prop can be used to prevent the path from getting too thin when zoomed out.\n * @default 0\n */\n widthMinPixels?: number;\n /**\n * The maximum path width in pixels. This prop can be used to prevent the path from getting too thick when zoomed in.\n * @default Number.MAX_SAFE_INTEGER\n */\n widthMaxPixels?: number;\n /**\n * Type of joint. If `true`, draw round joints. Otherwise draw miter joints.\n * @default false\n */\n jointRounded?: boolean;\n /**\n * Type of caps. If `true`, draw round caps. Otherwise draw square caps.\n * @default false\n */\n capRounded?: boolean;\n /**\n * The maximum extent of a joint in ratio to the stroke width. Only works if `jointRounded` is `false`.\n * @default 4\n */\n miterLimit?: number;\n /**\n * If `true`, extrude the path in screen space (width always faces the camera).\n * If `false`, the width always faces up (z).\n * @default false\n */\n billboard?: boolean;\n /**\n * (Experimental) If `'loop'` or `'open'`, will skip normalizing the coordinates returned by `getPath` and instead assume all paths are to be loops or open paths.\n * When normalization is disabled, paths must be specified in the format of flat array. Open paths must contain at least 2 vertices and closed paths must contain at least 3 vertices.\n * @default null\n */\n _pathType?: null | 'loop' | 'open';\n /**\n * Path geometry accessor.\n */\n getPath?: AccessorFunction;\n /**\n * Path color accessor.\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n /**\n * Path width accessor.\n * @default 1\n */\n getWidth?: Accessor;\n /**\n * @deprecated Use `jointRounded` and `capRounded` instead\n */\n rounded?: boolean;\n};\n\nexport type PathLayerProps = _PathLayerProps & LayerProps;\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n widthUnits: 'meters',\n widthScale: {type: 'number', min: 0, value: 1},\n widthMinPixels: {type: 'number', min: 0, value: 0},\n widthMaxPixels: {type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER},\n jointRounded: false,\n capRounded: false,\n miterLimit: {type: 'number', min: 0, value: 4},\n billboard: false,\n _pathType: null,\n\n getPath: {type: 'accessor', value: object => object.path},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n getWidth: {type: 'accessor', value: 1},\n\n // deprecated props\n rounded: {deprecatedFor: ['jointRounded', 'capRounded']}\n};\n\nconst ATTRIBUTE_TRANSITION = {\n enter: (value, chunk) => {\n return chunk.length ? chunk.subarray(chunk.length - value.length) : value;\n }\n};\n\n/** Render lists of coordinate points as extruded polylines with mitering. */\nexport default class PathLayer extends Layer<\n ExtraPropsT & Required<_PathLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'PathLayer';\n\n state!: {\n model?: Model;\n pathTesselator: PathTesselator;\n };\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]}); // 'project' module added by default.\n }\n\n get wrapLongitude(): boolean {\n return false;\n }\n\n initializeState() {\n const noAlloc = true;\n const attributeManager = this.getAttributeManager();\n /* eslint-disable max-len */\n attributeManager!.addInstanced({\n positions: {\n size: 3,\n // Start filling buffer from 1 vertex in\n vertexOffset: 1,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getPath',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculatePositions,\n noAlloc,\n shaderAttributes: {\n instanceLeftPositions: {\n vertexOffset: 0\n },\n instanceStartPositions: {\n vertexOffset: 1\n },\n instanceEndPositions: {\n vertexOffset: 2\n },\n instanceRightPositions: {\n vertexOffset: 3\n }\n }\n },\n instanceTypes: {\n size: 1,\n type: GL.UNSIGNED_BYTE,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateSegmentTypes,\n noAlloc\n },\n instanceStrokeWidths: {\n size: 1,\n accessor: 'getWidth',\n transition: ATTRIBUTE_TRANSITION,\n defaultValue: 1\n },\n instanceColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n accessor: 'getColor',\n transition: ATTRIBUTE_TRANSITION,\n defaultValue: DEFAULT_COLOR\n },\n instancePickingColors: {\n size: 3,\n type: GL.UNSIGNED_BYTE,\n accessor: (object, {index, target: value}) =>\n this.encodePickingColor(object && object.__source ? object.__source.index : index, value)\n }\n });\n /* eslint-enable max-len */\n\n this.setState({\n pathTesselator: new PathTesselator({\n fp64: this.use64bitPositions()\n })\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n const {props, changeFlags} = params;\n\n const attributeManager = this.getAttributeManager();\n\n const geometryChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPath));\n\n if (geometryChanged) {\n const {pathTesselator} = this.state;\n const buffers = (props.data as any).attributes || {};\n\n pathTesselator.updateGeometry({\n data: props.data,\n geometryBuffer: buffers.getPath,\n buffers,\n normalize: !props._pathType,\n loop: props._pathType === 'loop',\n getGeometry: props.getPath,\n positionFormat: props.positionFormat,\n wrapLongitude: props.wrapLongitude,\n // TODO - move the flag out of the viewport\n resolution: this.context.viewport.resolution,\n dataChanged: changeFlags.dataChanged\n });\n this.setState({\n numInstances: pathTesselator.instanceCount,\n startIndices: pathTesselator.vertexStarts\n });\n if (!changeFlags.dataChanged) {\n // Base `layer.updateState` only invalidates all attributes on data change\n // Cover the rest of the scenarios here\n attributeManager!.invalidateAll();\n }\n }\n\n if (changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n attributeManager!.invalidateAll();\n }\n }\n\n getPickingInfo(params: GetPickingInfoParams): PickingInfo {\n const info = super.getPickingInfo(params);\n const {index} = info;\n const {data} = this.props;\n\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n info.object = (data as any[]).find(d => d.__source.index === index);\n }\n return info;\n }\n\n /** Override base Layer method */\n disablePickingIndex(objectIndex: number) {\n const {data} = this.props;\n\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n for (let i = 0; i < (data as any[]).length; i++) {\n if (data[i].__source.index === objectIndex) {\n this._disablePickingIndex(i);\n }\n }\n } else {\n this._disablePickingIndex(objectIndex);\n }\n }\n\n draw({uniforms}) {\n const {\n jointRounded,\n capRounded,\n billboard,\n miterLimit,\n widthUnits,\n widthScale,\n widthMinPixels,\n widthMaxPixels\n } = this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n jointType: Number(jointRounded),\n capType: Number(capRounded),\n billboard,\n widthUnits: UNIT[widthUnits],\n widthScale,\n miterLimit,\n widthMinPixels,\n widthMaxPixels\n })\n .draw();\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n /*\n * _\n * \"-_ 1 3 5\n * _ \"o---------------------o-------------------_-o\n * - / \"\"--..__ '. _.-' /\n * _ \"@- - - - - \"\"--..__- - - - x - - - -_.@' /\n * \"-_ / \"\"--..__ '. _,-` : /\n * \"o----------------------------\"\"-o' : /\n * 0,2 4 / '. : /\n * / '.: /\n * / :'. /\n * / : ', /\n * / : o\n */\n\n // prettier-ignore\n const SEGMENT_INDICES = [\n // start corner\n 0, 1, 2,\n // body\n 1, 4, 2,\n 1, 3, 4,\n // end corner\n 3, 5, 4\n ];\n\n // [0] position on segment - 0: start, 1: end\n // [1] side of path - -1: left, 0: center (joint), 1: right\n // prettier-ignore\n const SEGMENT_POSITIONS = [\n // bevel start corner\n 0, 0,\n // start inner corner\n 0, -1,\n // start outer corner\n 0, 1,\n // end inner corner\n 1, -1,\n // end outer corner\n 1, 1,\n // bevel end corner\n 1, 0\n ];\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLES,\n attributes: {\n indices: new Uint16Array(SEGMENT_INDICES),\n positions: {value: new Float32Array(SEGMENT_POSITIONS), size: 2}\n }\n }),\n isInstanced: true\n });\n }\n\n protected calculatePositions(attribute) {\n const {pathTesselator} = this.state;\n\n attribute.startIndices = pathTesselator.vertexStarts;\n attribute.value = pathTesselator.get('positions');\n }\n\n protected calculateSegmentTypes(attribute) {\n const {pathTesselator} = this.state;\n\n attribute.startIndices = pathTesselator.vertexStarts;\n attribute.value = pathTesselator.get('segmentTypes');\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME path-layer-vertex-shader\n\nattribute vec2 positions;\n\nattribute float instanceTypes;\nattribute vec3 instanceStartPositions;\nattribute vec3 instanceEndPositions;\nattribute vec3 instanceLeftPositions;\nattribute vec3 instanceRightPositions;\nattribute vec3 instanceLeftPositions64Low;\nattribute vec3 instanceStartPositions64Low;\nattribute vec3 instanceEndPositions64Low;\nattribute vec3 instanceRightPositions64Low;\nattribute float instanceStrokeWidths;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\nuniform float jointType;\nuniform float capType;\nuniform float miterLimit;\nuniform bool billboard;\nuniform int widthUnits;\n\nuniform float opacity;\n\nvarying vec4 vColor;\nvarying vec2 vCornerOffset;\nvarying float vMiterLength;\nvarying vec2 vPathPosition;\nvarying float vPathLength;\nvarying float vJointType;\n\nconst float EPSILON = 0.001;\nconst vec3 ZERO_OFFSET = vec3(0.0);\n\nfloat flipIfTrue(bool flag) {\n return -(float(flag) * 2. - 1.);\n}\n\n// calculate line join positions\nvec3 lineJoin(\n vec3 prevPoint, vec3 currPoint, vec3 nextPoint,\n vec2 width\n) {\n bool isEnd = positions.x > 0.0;\n // side of the segment - -1: left, 0: center, 1: right\n float sideOfPath = positions.y;\n float isJoint = float(sideOfPath == 0.0);\n\n vec3 deltaA3 = (currPoint - prevPoint);\n vec3 deltaB3 = (nextPoint - currPoint);\n\n mat3 rotationMatrix;\n bool needsRotation = !billboard && project_needs_rotation(currPoint, rotationMatrix);\n if (needsRotation) {\n deltaA3 = deltaA3 * rotationMatrix;\n deltaB3 = deltaB3 * rotationMatrix;\n }\n vec2 deltaA = deltaA3.xy / width;\n vec2 deltaB = deltaB3.xy / width;\n\n float lenA = length(deltaA);\n float lenB = length(deltaB);\n\n vec2 dirA = lenA > 0. ? normalize(deltaA) : vec2(0.0, 0.0);\n vec2 dirB = lenB > 0. ? normalize(deltaB) : vec2(0.0, 0.0);\n\n vec2 perpA = vec2(-dirA.y, dirA.x);\n vec2 perpB = vec2(-dirB.y, dirB.x);\n\n // tangent of the corner\n vec2 tangent = dirA + dirB;\n tangent = length(tangent) > 0. ? normalize(tangent) : perpA;\n // direction of the corner\n vec2 miterVec = vec2(-tangent.y, tangent.x);\n // direction of the segment\n vec2 dir = isEnd ? dirA : dirB;\n // direction of the extrusion\n vec2 perp = isEnd ? perpA : perpB;\n // length of the segment\n float L = isEnd ? lenA : lenB;\n\n // A = angle of the corner\n float sinHalfA = abs(dot(miterVec, perp));\n float cosHalfA = abs(dot(dirA, miterVec));\n\n // -1: right, 1: left\n float turnDirection = flipIfTrue(dirA.x * dirB.y >= dirA.y * dirB.x);\n\n // relative position to the corner:\n // -1: inside (smaller side of the angle)\n // 0: center\n // 1: outside (bigger side of the angle)\n float cornerPosition = sideOfPath * turnDirection;\n\n float miterSize = 1.0 / max(sinHalfA, EPSILON);\n // trim if inside corner extends further than the line segment\n miterSize = mix(\n min(miterSize, max(lenA, lenB) / max(cosHalfA, EPSILON)),\n miterSize,\n step(0.0, cornerPosition)\n );\n\n vec2 offsetVec = mix(miterVec * miterSize, perp, step(0.5, cornerPosition))\n * (sideOfPath + isJoint * turnDirection);\n\n // special treatment for start cap and end cap\n bool isStartCap = lenA == 0.0 || (!isEnd && (instanceTypes == 1.0 || instanceTypes == 3.0));\n bool isEndCap = lenB == 0.0 || (isEnd && (instanceTypes == 2.0 || instanceTypes == 3.0));\n bool isCap = isStartCap || isEndCap;\n\n // extend out a triangle to envelope the round cap\n if (isCap) {\n offsetVec = mix(perp * sideOfPath, dir * capType * 4.0 * flipIfTrue(isStartCap), isJoint);\n vJointType = capType;\n } else {\n vJointType = jointType;\n }\n\n // Generate variables for fragment shader\n vPathLength = L;\n vCornerOffset = offsetVec;\n vMiterLength = dot(vCornerOffset, miterVec * turnDirection);\n vMiterLength = isCap ? isJoint : vMiterLength;\n\n vec2 offsetFromStartOfPath = vCornerOffset + deltaA * float(isEnd);\n vPathPosition = vec2(\n dot(offsetFromStartOfPath, perp),\n dot(offsetFromStartOfPath, dir)\n );\n geometry.uv = vPathPosition;\n\n float isValid = step(instanceTypes, 3.5);\n vec3 offset = vec3(offsetVec * width * isValid, 0.0);\n\n if (needsRotation) {\n offset = rotationMatrix * offset;\n }\n return currPoint + offset;\n}\n\n// In clipspace extrusion, if a line extends behind the camera, clip it to avoid visual artifacts\nvoid clipLine(inout vec4 position, vec4 refPosition) {\n if (position.w < EPSILON) {\n float r = (EPSILON - refPosition.w) / (position.w - refPosition.w);\n position = refPosition + (position - refPosition) * r;\n }\n}\n\nvoid main() {\n geometry.pickingColor = instancePickingColors;\n\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity);\n\n float isEnd = positions.x;\n\n vec3 prevPosition = mix(instanceLeftPositions, instanceStartPositions, isEnd);\n vec3 prevPosition64Low = mix(instanceLeftPositions64Low, instanceStartPositions64Low, isEnd);\n\n vec3 currPosition = mix(instanceStartPositions, instanceEndPositions, isEnd);\n vec3 currPosition64Low = mix(instanceStartPositions64Low, instanceEndPositions64Low, isEnd);\n\n vec3 nextPosition = mix(instanceEndPositions, instanceRightPositions, isEnd);\n vec3 nextPosition64Low = mix(instanceEndPositions64Low, instanceRightPositions64Low, isEnd);\n\n geometry.worldPosition = currPosition;\n vec2 widthPixels = vec2(clamp(\n project_size_to_pixel(instanceStrokeWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels) / 2.0);\n vec3 width;\n\n if (billboard) {\n // Extrude in clipspace\n vec4 prevPositionScreen = project_position_to_clipspace(prevPosition, prevPosition64Low, ZERO_OFFSET);\n vec4 currPositionScreen = project_position_to_clipspace(currPosition, currPosition64Low, ZERO_OFFSET, geometry.position);\n vec4 nextPositionScreen = project_position_to_clipspace(nextPosition, nextPosition64Low, ZERO_OFFSET);\n\n clipLine(prevPositionScreen, currPositionScreen);\n clipLine(nextPositionScreen, currPositionScreen);\n clipLine(currPositionScreen, mix(nextPositionScreen, prevPositionScreen, isEnd));\n\n width = vec3(widthPixels, 0.0);\n DECKGL_FILTER_SIZE(width, geometry);\n\n vec3 pos = lineJoin(\n prevPositionScreen.xyz / prevPositionScreen.w,\n currPositionScreen.xyz / currPositionScreen.w,\n nextPositionScreen.xyz / nextPositionScreen.w,\n project_pixel_size_to_clipspace(width.xy)\n );\n\n gl_Position = vec4(pos * currPositionScreen.w, currPositionScreen.w);\n } else {\n // Extrude in commonspace\n prevPosition = project_position(prevPosition, prevPosition64Low);\n currPosition = project_position(currPosition, currPosition64Low);\n nextPosition = project_position(nextPosition, nextPosition64Low);\n\n width = vec3(project_pixel_size(widthPixels), 0.0);\n DECKGL_FILTER_SIZE(width, geometry);\n\n vec4 pos = vec4(\n lineJoin(prevPosition, currPosition, nextPosition, width.xy),\n 1.0);\n geometry.position = pos;\n gl_Position = project_common_position_to_clipspace(pos);\n }\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME path-layer-fragment-shader\n\nprecision highp float;\n\nuniform float miterLimit;\n\nvarying vec4 vColor;\nvarying vec2 vCornerOffset;\nvarying float vMiterLength;\n/*\n * vPathPosition represents the relative coordinates of the current fragment on the path segment.\n * vPathPosition.x - position along the width of the path, between [-1, 1]. 0 is the center line.\n * vPathPosition.y - position along the length of the path, between [0, L / width].\n */\nvarying vec2 vPathPosition;\nvarying float vPathLength;\nvarying float vJointType;\n\nvoid main(void) {\n geometry.uv = vPathPosition;\n\n if (vPathPosition.y < 0.0 || vPathPosition.y > vPathLength) {\n // if joint is rounded, test distance from the corner\n if (vJointType > 0.5 && length(vCornerOffset) > 1.0) {\n discard;\n }\n // trim miter\n if (vJointType < 0.5 && vMiterLength > miterLimit + 1.0) {\n discard;\n }\n }\n gl_FragColor = vColor;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","/* global document */\nimport GL from '@luma.gl/constants';\nimport {Texture2D, copyToTexture} from '@luma.gl/core';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {load} from '@loaders.gl/core';\nimport {createIterable} from '@deck.gl/core';\n\nimport type {AccessorFunction} from '@deck.gl/core';\n\nconst DEFAULT_CANVAS_WIDTH = 1024;\nconst DEFAULT_BUFFER = 4;\n\nconst noop = () => {};\n\nconst DEFAULT_TEXTURE_PARAMETERS = {\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR_MIPMAP_LINEAR,\n // GL.LINEAR is the default value but explicitly set it here\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n // for texture boundary artifact\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n};\n\ntype IconDef = {\n /** Width of the icon */\n width: number;\n /** Height of the icon */\n height: number;\n /** Horizontal position of icon anchor. Default: half width. */\n anchorX?: number;\n /** Vertical position of icon anchor. Default: half height. */\n anchorY?: number;\n /**\n * Whether the icon is treated as a transparency mask.\n * If `true`, color defined by `getColor` is applied.\n * If `false`, pixel color from the icon image is applied.\n * @default false\n */\n mask?: boolean;\n};\n\nexport type UnpackedIcon = {\n /** Url to fetch the icon */\n url: string;\n /** Unique identifier of the icon. Icons of the same id are only fetched once. Fallback to `url` if not specified. */\n id?: string;\n} & IconDef;\n\ntype PrepackedIcon = {\n /** Left position of the icon on the atlas */\n x: number;\n /** Top position of the icon on the atlas */\n y: number;\n} & IconDef;\n\nexport type IconMapping = Record;\n\nexport type LoadIconErrorContext = {\n error: Error;\n /** The URL that was trying to fetch */\n url: string;\n /** The original data object that requested this icon */\n source: any;\n /** The index of the original data object that requested this icon */\n sourceIndex: number;\n /** The load options used for the fetch */\n loadOptions: any;\n};\n\nfunction nextPowOfTwo(number: number): number {\n return Math.pow(2, Math.ceil(Math.log2(number)));\n}\n\n// update comment to create a new texture and copy original data.\nfunction resizeImage(\n ctx: CanvasRenderingContext2D,\n imageData: HTMLImageElement | ImageBitmap,\n width: number,\n height: number\n): HTMLImageElement | HTMLCanvasElement | ImageBitmap {\n if (width === imageData.width && height === imageData.height) {\n return imageData;\n }\n\n ctx.canvas.height = height;\n ctx.canvas.width = width;\n\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n // image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight\n ctx.drawImage(imageData, 0, 0, imageData.width, imageData.height, 0, 0, width, height);\n\n return ctx.canvas;\n}\n\nfunction getIconId(icon: UnpackedIcon): string {\n return icon && (icon.id || icon.url);\n}\n\n// resize texture without losing original data\nfunction resizeTexture(\n texture: Texture2D,\n width: number,\n height: number,\n parameters: any\n): Texture2D {\n const oldWidth = texture.width;\n const oldHeight = texture.height;\n\n const newTexture = new Texture2D(texture.gl, {width, height, parameters});\n copyToTexture(texture, newTexture, {\n targetY: 0,\n width: oldWidth,\n height: oldHeight\n });\n\n texture.delete();\n return newTexture;\n}\n\n// traverse icons in a row of icon atlas\n// extend each icon with left-top coordinates\nfunction buildRowMapping(\n mapping: IconMapping,\n columns: {\n icon: UnpackedIcon;\n xOffset: number;\n }[],\n yOffset: number\n): void {\n for (let i = 0; i < columns.length; i++) {\n const {icon, xOffset} = columns[i];\n const id = getIconId(icon);\n mapping[id] = {\n ...icon,\n x: xOffset,\n y: yOffset\n };\n }\n}\n\n/**\n * Generate coordinate mapping to retrieve icon left-top position from an icon atlas\n */\nexport function buildMapping({\n icons,\n buffer,\n mapping = {},\n xOffset = 0,\n yOffset = 0,\n rowHeight = 0,\n canvasWidth\n}: {\n /** list of icon definitions */\n icons: UnpackedIcon[];\n /** add bleeding buffer to the right and bottom side of the image */\n buffer: number;\n /** right position of last icon in old mapping */\n xOffset: number;\n /** top position in last icon in old mapping */\n yOffset: number;\n /** height of the last icon's row */\n rowHeight: number;\n /** max width of canvas */\n canvasWidth: number;\n mapping: IconMapping;\n}): {\n mapping: IconMapping;\n rowHeight: number;\n xOffset: number;\n yOffset: number;\n canvasWidth: number;\n canvasHeight: number;\n} {\n let columns: {\n icon: UnpackedIcon;\n xOffset: number;\n }[] = [];\n // Strategy to layout all the icons into a texture:\n // traverse the icons sequentially, layout the icons from left to right, top to bottom\n // when the sum of the icons width is equal or larger than canvasWidth,\n // move to next row starting from total height so far plus max height of the icons in previous row\n // row width is equal to canvasWidth\n // row height is decided by the max height of the icons in that row\n // mapping coordinates of each icon is its left-top position in the texture\n for (let i = 0; i < icons.length; i++) {\n const icon = icons[i];\n const id = getIconId(icon);\n\n if (!mapping[id]) {\n const {height, width} = icon;\n\n // fill one row\n if (xOffset + width + buffer > canvasWidth) {\n buildRowMapping(mapping, columns, yOffset);\n\n xOffset = 0;\n yOffset = rowHeight + yOffset + buffer;\n rowHeight = 0;\n columns = [];\n }\n\n columns.push({\n icon,\n xOffset\n });\n\n xOffset = xOffset + width + buffer;\n rowHeight = Math.max(rowHeight, height);\n }\n }\n\n if (columns.length > 0) {\n buildRowMapping(mapping, columns, yOffset);\n }\n\n return {\n mapping,\n rowHeight,\n xOffset,\n yOffset,\n canvasWidth,\n canvasHeight: nextPowOfTwo(rowHeight + yOffset + buffer)\n };\n}\n\n// extract icons from data\n// return icons should be unique, and not cached or cached but url changed\nexport function getDiffIcons(\n data: any,\n getIcon: AccessorFunction | null,\n cachedIcons: Record\n): Record<\n string,\n UnpackedIcon & {\n source: any;\n sourceIndex: number;\n }\n> | null {\n if (!data || !getIcon) {\n return null;\n }\n\n cachedIcons = cachedIcons || {};\n const icons = {};\n const {iterable, objectInfo} = createIterable(data);\n for (const object of iterable) {\n objectInfo.index++;\n const icon = getIcon(object, objectInfo);\n const id = getIconId(icon);\n\n if (!icon) {\n throw new Error('Icon is missing.');\n }\n\n if (!icon.url) {\n throw new Error('Icon url is missing.');\n }\n\n if (!icons[id] && (!cachedIcons[id] || icon.url !== cachedIcons[id].url)) {\n icons[id] = {...icon, source: object, sourceIndex: objectInfo.index};\n }\n }\n return icons;\n}\n\nexport default class IconManager {\n gl: WebGLRenderingContext;\n\n private onUpdate: () => void;\n private onError: (context: LoadIconErrorContext) => void;\n private _loadOptions: any = null;\n private _texture: Texture2D | null = null;\n private _externalTexture: Texture2D | null = null;\n private _mapping: IconMapping = {};\n private _textureParameters: Record | null = null;\n\n /** count of pending requests to fetch icons */\n private _pendingCount: number = 0;\n\n private _autoPacking: boolean = false;\n\n // / internal state used for autoPacking\n\n private _xOffset: number = 0;\n private _yOffset: number = 0;\n private _rowHeight: number = 0;\n private _buffer: number = DEFAULT_BUFFER;\n private _canvasWidth: number = DEFAULT_CANVAS_WIDTH;\n private _canvasHeight: number = 0;\n private _canvas: HTMLCanvasElement | null = null;\n\n constructor(\n gl: WebGLRenderingContext,\n {\n onUpdate = noop,\n onError = noop\n }: {\n /** Callback when the texture updates */\n onUpdate: () => void;\n /** Callback when an error is encountered */\n onError: (context: LoadIconErrorContext) => void;\n }\n ) {\n this.gl = gl;\n this.onUpdate = onUpdate;\n this.onError = onError;\n }\n\n finalize(): void {\n this._texture?.delete();\n }\n\n getTexture(): Texture2D | null {\n return this._texture || this._externalTexture;\n }\n\n getIconMapping(icon: string | UnpackedIcon): PrepackedIcon {\n const id = this._autoPacking ? getIconId(icon as UnpackedIcon) : (icon as string);\n return this._mapping[id] || {};\n }\n\n setProps({\n loadOptions,\n autoPacking,\n iconAtlas,\n iconMapping,\n textureParameters\n }: {\n loadOptions?: any;\n autoPacking?: boolean;\n iconAtlas?: Texture2D | null;\n iconMapping?: IconMapping | null;\n textureParameters?: Record | null;\n }) {\n if (loadOptions) {\n this._loadOptions = loadOptions;\n }\n\n if (autoPacking !== undefined) {\n this._autoPacking = autoPacking;\n }\n\n if (iconMapping) {\n this._mapping = iconMapping;\n }\n\n if (iconAtlas) {\n this._texture?.delete();\n this._texture = null;\n this._externalTexture = iconAtlas;\n }\n\n if (textureParameters) {\n this._textureParameters = textureParameters;\n }\n }\n\n get isLoaded(): boolean {\n return this._pendingCount === 0;\n }\n\n packIcons(data: any, getIcon: AccessorFunction): void {\n if (!this._autoPacking || typeof document === 'undefined') {\n return;\n }\n\n const icons = Object.values(getDiffIcons(data, getIcon, this._mapping) || {});\n\n if (icons.length > 0) {\n // generate icon mapping\n const {mapping, xOffset, yOffset, rowHeight, canvasHeight} = buildMapping({\n icons,\n buffer: this._buffer,\n canvasWidth: this._canvasWidth,\n mapping: this._mapping,\n rowHeight: this._rowHeight,\n xOffset: this._xOffset,\n yOffset: this._yOffset\n });\n\n this._rowHeight = rowHeight;\n this._mapping = mapping;\n this._xOffset = xOffset;\n this._yOffset = yOffset;\n this._canvasHeight = canvasHeight;\n\n // create new texture\n if (!this._texture) {\n this._texture = new Texture2D(this.gl, {\n width: this._canvasWidth,\n height: this._canvasHeight,\n parameters: this._textureParameters || DEFAULT_TEXTURE_PARAMETERS\n });\n }\n\n if (this._texture.height !== this._canvasHeight) {\n this._texture = resizeTexture(\n this._texture,\n this._canvasWidth,\n this._canvasHeight,\n this._textureParameters || DEFAULT_TEXTURE_PARAMETERS\n );\n }\n\n this.onUpdate();\n\n // load images\n this._canvas = this._canvas || document.createElement('canvas');\n this._loadIcons(icons);\n }\n }\n\n private _loadIcons(\n icons: (UnpackedIcon & {\n source: any;\n sourceIndex: number;\n })[]\n ): void {\n // This method is only called in the auto packing case, where _canvas is defined\n const ctx = this._canvas!.getContext('2d') as CanvasRenderingContext2D;\n\n for (const icon of icons) {\n this._pendingCount++;\n load(icon.url, ImageLoader, this._loadOptions)\n .then(imageData => {\n const id = getIconId(icon);\n const {x, y, width, height} = this._mapping[id];\n\n const data = resizeImage(ctx, imageData, width, height);\n\n this._texture.setSubImageData({\n data,\n x,\n y,\n width,\n height\n });\n\n // Call to regenerate mipmaps after modifying texture(s)\n this._texture.generateMipmap();\n\n this.onUpdate();\n })\n .catch(error => {\n this.onError({\n url: icon.url,\n source: icon.source,\n sourceIndex: icon.sourceIndex,\n loadOptions: this._loadOptions,\n error\n });\n })\n .finally(() => {\n this._pendingCount--;\n });\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {Layer, project32, picking, log, UNIT} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './icon-layer-vertex.glsl';\nimport fs from './icon-layer-fragment.glsl';\nimport IconManager from './icon-manager';\n\nimport type {\n LayerProps,\n Accessor,\n AccessorFunction,\n Position,\n Color,\n Texture,\n Unit,\n UpdateParameters,\n LayerContext,\n DefaultProps\n} from '@deck.gl/core';\nimport type {UnpackedIcon, IconMapping, LoadIconErrorContext} from './icon-manager';\n\ntype _IconLayerProps = {\n /** A prepacked image that contains all icons. */\n iconAtlas?: string | Texture;\n /** Icon names mapped to icon definitions, or a URL to load such mapping from a JSON file. */\n iconMapping?: string | IconMapping;\n\n /** Icon size multiplier.\n * @default 1\n */\n sizeScale?: number;\n /**\n * The units of the icon size, one of `meters`, `common`, and `pixels`.\n *\n * @default 'pixels'\n */\n sizeUnits?: Unit;\n /**\n * The minimum size in pixels. When using non-pixel `sizeUnits`, this prop can be used to prevent the icon from getting too small when zoomed out.\n */\n sizeMinPixels?: number;\n /**\n * The maximum size in pixels. When using non-pixel `sizeUnits`, this prop can be used to prevent the icon from getting too big when zoomed in.\n */\n sizeMaxPixels?: number;\n /** If `true`, the icon always faces camera. Otherwise the icon faces up (z)\n * @default true\n */\n billboard?: boolean;\n /**\n * Discard pixels whose opacity is below this threshold.\n * A discarded pixel would create a \"hole\" in the icon that is not considered part of the object.\n * @default 0.05\n */\n alphaCutoff?: number;\n\n /** Anchor position accessor. */\n getPosition?: Accessor;\n /** Icon definition accessor.\n * Should return the icon id if using pre-packed icons (`iconAtlas` + `iconMapping`).\n * Return an object that defines the icon if using auto-packing.\n */\n getIcon?: AccessorFunction | AccessorFunction;\n /** Icon color accessor.\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n /** Icon size accessor.\n * @default 1\n */\n getSize?: Accessor;\n /** Icon rotation accessor, in degrees.\n * @default 0\n */\n getAngle?: Accessor;\n /**\n * Icon offsest accessor, in pixels.\n * @default [0, 0]\n */\n getPixelOffset?: Accessor;\n /**\n * Callback called if the attempt to fetch an icon returned by `getIcon` fails.\n */\n onIconError?: ((context: LoadIconErrorContext) => void) | null;\n\n /** Customize the [texture parameters](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texParameter). */\n textureParameters?: Record | null;\n};\n\nexport type IconLayerProps = _IconLayerProps & LayerProps;\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n iconAtlas: {type: 'image', value: null, async: true},\n iconMapping: {type: 'object', value: {}, async: true},\n sizeScale: {type: 'number', value: 1, min: 0},\n billboard: true,\n sizeUnits: 'pixels',\n sizeMinPixels: {type: 'number', min: 0, value: 0}, // min point radius in pixels\n sizeMaxPixels: {type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER}, // max point radius in pixels\n alphaCutoff: {type: 'number', value: 0.05, min: 0, max: 1},\n\n getPosition: {type: 'accessor', value: x => x.position},\n getIcon: {type: 'accessor', value: x => x.icon},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n getSize: {type: 'accessor', value: 1},\n getAngle: {type: 'accessor', value: 0},\n getPixelOffset: {type: 'accessor', value: [0, 0]},\n\n onIconError: {type: 'function', value: null, compare: false, optional: true}\n};\n\n/** Render raster icons at given coordinates. */\nexport default class IconLayer extends Layer<\n ExtraPropsT & Required<_IconLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'IconLayer';\n\n state!: {\n model?: Model;\n iconManager: IconManager;\n };\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]});\n }\n\n initializeState() {\n this.state = {\n iconManager: new IconManager(this.context.gl, {\n onUpdate: this._onUpdate.bind(this),\n onError: this._onError.bind(this)\n })\n };\n\n const attributeManager = this.getAttributeManager();\n /* eslint-disable max-len */\n attributeManager!.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceSizes: {\n size: 1,\n transition: true,\n accessor: 'getSize',\n defaultValue: 1\n },\n instanceOffsets: {\n size: 2,\n accessor: 'getIcon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n transform: this.getInstanceOffset\n },\n instanceIconFrames: {\n size: 4,\n accessor: 'getIcon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n transform: this.getInstanceIconFrame\n },\n instanceColorModes: {\n size: 1,\n type: GL.UNSIGNED_BYTE,\n accessor: 'getIcon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n transform: this.getInstanceColorMode\n },\n instanceColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceAngles: {\n size: 1,\n transition: true,\n accessor: 'getAngle'\n },\n instancePixelOffset: {\n size: 2,\n transition: true,\n accessor: 'getPixelOffset'\n }\n });\n /* eslint-enable max-len */\n }\n\n /* eslint-disable max-statements, complexity */\n updateState(params: UpdateParameters) {\n super.updateState(params);\n const {props, oldProps, changeFlags} = params;\n\n const attributeManager = this.getAttributeManager();\n const {iconAtlas, iconMapping, data, getIcon, textureParameters} = props;\n const {iconManager} = this.state;\n\n // internalState is always defined during updateState\n const prePacked = iconAtlas || this.internalState!.isAsyncPropLoading('iconAtlas');\n iconManager.setProps({\n loadOptions: props.loadOptions,\n autoPacking: !prePacked,\n iconAtlas,\n iconMapping: prePacked ? (iconMapping as IconMapping) : null,\n textureParameters\n });\n\n // prepacked iconAtlas from user\n if (prePacked) {\n if (oldProps.iconMapping !== props.iconMapping) {\n attributeManager!.invalidate('getIcon');\n }\n } else if (\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getIcon))\n ) {\n // Auto packing - getIcon is expected to return an object\n iconManager.packIcons(data, getIcon as AccessorFunction);\n }\n\n if (changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n attributeManager!.invalidateAll();\n }\n }\n /* eslint-enable max-statements, complexity */\n\n get isLoaded(): boolean {\n return super.isLoaded && this.state.iconManager.isLoaded;\n }\n\n finalizeState(context: LayerContext): void {\n super.finalizeState(context);\n // Release resources held by the icon manager\n this.state.iconManager.finalize();\n }\n\n draw({uniforms}): void {\n const {sizeScale, sizeMinPixels, sizeMaxPixels, sizeUnits, billboard, alphaCutoff} = this.props;\n const {iconManager} = this.state;\n\n const iconsTexture = iconManager.getTexture();\n if (iconsTexture) {\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n iconsTexture,\n iconsTextureDim: [iconsTexture.width, iconsTexture.height],\n sizeUnits: UNIT[sizeUnits],\n sizeScale,\n sizeMinPixels,\n sizeMaxPixels,\n billboard,\n alphaCutoff\n })\n .draw();\n }\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n // The icon-layer vertex shader uses 2d positions\n // specifed via: attribute vec2 positions;\n const positions = [-1, -1, -1, 1, 1, 1, 1, -1];\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_FAN,\n attributes: {\n // The size must be explicitly passed here otherwise luma.gl\n // will default to assuming that positions are 3D (x,y,z)\n positions: {\n size: 2,\n value: new Float32Array(positions)\n }\n }\n }),\n isInstanced: true\n });\n }\n\n private _onUpdate(): void {\n this.setNeedsRedraw();\n }\n\n private _onError(evt: LoadIconErrorContext): void {\n const onIconError = this.getCurrentLayer()?.props.onIconError;\n if (onIconError) {\n onIconError(evt);\n } else {\n log.error(evt.error.message)();\n }\n }\n\n protected getInstanceOffset(icon: string): number[] {\n const {\n width,\n height,\n anchorX = width / 2,\n anchorY = height / 2\n } = this.state.iconManager.getIconMapping(icon);\n return [width / 2 - anchorX, height / 2 - anchorY];\n }\n\n protected getInstanceColorMode(icon: string): number {\n const mapping = this.state.iconManager.getIconMapping(icon);\n return mapping.mask ? 1 : 0;\n }\n\n protected getInstanceIconFrame(icon: string): number[] {\n const {x, y, width, height} = this.state.iconManager.getIconMapping(icon);\n return [x, y, width, height];\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME icon-layer-vertex-shader\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute vec3 instancePositions64Low;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\nattribute vec2 instancePixelOffset;\n\nuniform float sizeScale;\nuniform vec2 iconsTextureDim;\nuniform float sizeMinPixels;\nuniform float sizeMaxPixels;\nuniform bool billboard;\nuniform int sizeUnits;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\nvarying vec2 uv;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n geometry.uv = positions;\n geometry.pickingColor = instancePickingColors;\n uv = positions;\n\n vec2 iconSize = instanceIconFrames.zw;\n // convert size in meters to pixels, then scaled and clamp\n \n // project meters to pixels and clamp to limits \n float sizePixels = clamp(\n project_size_to_pixel(instanceSizes * sizeScale, sizeUnits), \n sizeMinPixels, sizeMaxPixels\n );\n\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : sizePixels / iconSize.y;\n\n // scale and rotate vertex in \"pixel\" value and convert back to fraction in clipspace\n vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets;\n pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) * instanceScale;\n pixelOffset += instancePixelOffset;\n pixelOffset.y *= -1.0;\n\n if (billboard) {\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position);\n vec3 offset = vec3(pixelOffset, 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\n\n } else {\n vec3 offset_common = vec3(project_pixel_size(pixelOffset), 0.0);\n DECKGL_FILTER_SIZE(offset_common, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset_common, geometry.position); \n }\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vColor = instanceColors;\n DECKGL_FILTER_COLOR(vColor, geometry);\n\n vColorMode = instanceColorModes;\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME icon-layer-fragment-shader\n\nprecision highp float;\n\nuniform float opacity;\nuniform sampler2D iconsTexture;\nuniform float alphaCutoff;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\nvarying vec2 uv;\n\nvoid main(void) {\n geometry.uv = uv;\n\n vec4 texColor = texture2D(iconsTexture, vTextureCoords);\n\n // if colorMode == 0, use pixel color from the texture\n // if colorMode == 1 or rendering picking buffer, use texture as transparency mask\n vec3 color = mix(texColor.rgb, vColor.rgb, vColorMode);\n // Take the global opacity and the alpha from vColor into account for the alpha component\n float a = texColor.a * opacity * vColor.a;\n\n if (a < alphaCutoff) {\n discard;\n }\n\n gl_FragColor = vec4(color, a);\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","import MathArray from './math-array';\nimport { checkNumber } from '../../lib/validators';\nimport assert from '../../lib/assert';\nexport default class Vector extends MathArray {\n get x() {\n return this[0];\n }\n\n set x(value) {\n this[0] = checkNumber(value);\n }\n\n get y() {\n return this[1];\n }\n\n set y(value) {\n this[1] = checkNumber(value);\n }\n\n len() {\n return Math.sqrt(this.lengthSquared());\n }\n\n magnitude() {\n return this.len();\n }\n\n lengthSquared() {\n let length = 0;\n\n for (let i = 0; i < this.ELEMENTS; ++i) {\n length += this[i] * this[i];\n }\n\n return length;\n }\n\n magnitudeSquared() {\n return this.lengthSquared();\n }\n\n distance(mathArray) {\n return Math.sqrt(this.distanceSquared(mathArray));\n }\n\n distanceSquared(mathArray) {\n let length = 0;\n\n for (let i = 0; i < this.ELEMENTS; ++i) {\n const dist = this[i] - mathArray[i];\n length += dist * dist;\n }\n\n return checkNumber(length);\n }\n\n dot(mathArray) {\n let product = 0;\n\n for (let i = 0; i < this.ELEMENTS; ++i) {\n product += this[i] * mathArray[i];\n }\n\n return checkNumber(product);\n }\n\n normalize() {\n const length = this.magnitude();\n\n if (length !== 0) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] /= length;\n }\n }\n\n return this.check();\n }\n\n multiply(...vectors) {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= vector[i];\n }\n }\n\n return this.check();\n }\n\n divide(...vectors) {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] /= vector[i];\n }\n }\n\n return this.check();\n }\n\n lengthSq() {\n return this.lengthSquared();\n }\n\n distanceTo(vector) {\n return this.distance(vector);\n }\n\n distanceToSquared(vector) {\n return this.distanceSquared(vector);\n }\n\n getComponent(i) {\n assert(i >= 0 && i < this.ELEMENTS, 'index is out of range');\n return checkNumber(this[i]);\n }\n\n setComponent(i, value) {\n assert(i >= 0 && i < this.ELEMENTS, 'index is out of range');\n this[i] = value;\n return this.check();\n }\n\n addVectors(a, b) {\n return this.copy(a).add(b);\n }\n\n subVectors(a, b) {\n return this.copy(a).subtract(b);\n }\n\n multiplyVectors(a, b) {\n return this.copy(a).multiply(b);\n }\n\n addScaledVector(a, b) {\n return this.add(new this.constructor(a).multiplyScalar(b));\n }\n\n}\n//# sourceMappingURL=vector.js.map","function _extendableBuiltin(cls) {\n function ExtendableBuiltin() {\n var instance = Reflect.construct(cls, Array.from(arguments));\n Object.setPrototypeOf(instance, Object.getPrototypeOf(this));\n return instance;\n }\n\n ExtendableBuiltin.prototype = Object.create(cls.prototype, {\n constructor: {\n value: cls,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(ExtendableBuiltin, cls);\n } else {\n ExtendableBuiltin.__proto__ = cls;\n }\n\n return ExtendableBuiltin;\n}\n\nimport { config, formatValue, equals, isArray } from '../../lib/common';\nexport default class MathArray extends _extendableBuiltin(Array) {\n clone() {\n return new this.constructor().copy(this);\n }\n\n fromArray(array, offset = 0) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = array[i + offset];\n }\n\n return this.check();\n }\n\n toArray(targetArray = [], offset = 0) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n targetArray[offset + i] = this[i];\n }\n\n return targetArray;\n }\n\n from(arrayOrObject) {\n return Array.isArray(arrayOrObject) ? this.copy(arrayOrObject) : this.fromObject(arrayOrObject);\n }\n\n to(arrayOrObject) {\n if (arrayOrObject === this) {\n return this;\n }\n\n return isArray(arrayOrObject) ? this.toArray(arrayOrObject) : this.toObject(arrayOrObject);\n }\n\n toTarget(target) {\n return target ? this.to(target) : this;\n }\n\n toFloat32Array() {\n return new Float32Array(this);\n }\n\n toString() {\n return this.formatString(config);\n }\n\n formatString(opts) {\n let string = '';\n\n for (let i = 0; i < this.ELEMENTS; ++i) {\n string += (i > 0 ? ', ' : '') + formatValue(this[i], opts);\n }\n\n return \"\".concat(opts.printTypes ? this.constructor.name : '', \"[\").concat(string, \"]\");\n }\n\n equals(array) {\n if (!array || this.length !== array.length) {\n return false;\n }\n\n for (let i = 0; i < this.ELEMENTS; ++i) {\n if (!equals(this[i], array[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n exactEquals(array) {\n if (!array || this.length !== array.length) {\n return false;\n }\n\n for (let i = 0; i < this.ELEMENTS; ++i) {\n if (this[i] !== array[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n negate() {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = -this[i];\n }\n\n return this.check();\n }\n\n lerp(a, b, t) {\n if (t === undefined) {\n return this.lerp(this, a, b);\n }\n\n for (let i = 0; i < this.ELEMENTS; ++i) {\n const ai = a[i];\n this[i] = ai + t * (b[i] - ai);\n }\n\n return this.check();\n }\n\n min(vector) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.min(vector[i], this[i]);\n }\n\n return this.check();\n }\n\n max(vector) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.max(vector[i], this[i]);\n }\n\n return this.check();\n }\n\n clamp(minVector, maxVector) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.min(Math.max(this[i], minVector[i]), maxVector[i]);\n }\n\n return this.check();\n }\n\n add(...vectors) {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] += vector[i];\n }\n }\n\n return this.check();\n }\n\n subtract(...vectors) {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] -= vector[i];\n }\n }\n\n return this.check();\n }\n\n scale(scale) {\n if (typeof scale === 'number') {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= scale;\n }\n } else {\n for (let i = 0; i < this.ELEMENTS && i < scale.length; ++i) {\n this[i] *= scale[i];\n }\n }\n\n return this.check();\n }\n\n multiplyByScalar(scalar) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= scalar;\n }\n\n return this.check();\n }\n\n check() {\n if (config.debug && !this.validate()) {\n throw new Error(\"math.gl: \".concat(this.constructor.name, \" some fields set to invalid numbers'\"));\n }\n\n return this;\n }\n\n validate() {\n let valid = this.length === this.ELEMENTS;\n\n for (let i = 0; i < this.ELEMENTS; ++i) {\n valid = valid && Number.isFinite(this[i]);\n }\n\n return valid;\n }\n\n sub(a) {\n return this.subtract(a);\n }\n\n setScalar(a) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = a;\n }\n\n return this.check();\n }\n\n addScalar(a) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] += a;\n }\n\n return this.check();\n }\n\n subScalar(a) {\n return this.addScalar(-a);\n }\n\n multiplyScalar(scalar) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= scalar;\n }\n\n return this.check();\n }\n\n divideScalar(a) {\n return this.multiplyByScalar(1 / a);\n }\n\n clampScalar(min, max) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.min(Math.max(this[i], min), max);\n }\n\n return this.check();\n }\n\n get elements() {\n return this;\n }\n\n}\n//# sourceMappingURL=math-array.js.map","// Copyright (c) 2015-2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {COORDINATE_SYSTEM, PROJECTION_MODE} from '../../lib/constants';\nimport project from '../project/project';\nimport {Vector3, Matrix4} from '@math.gl/core';\nimport memoize from '../../utils/memoize';\nimport {pixelsToWorld} from '@math.gl/web-mercator';\n\nimport type {Texture2D} from '@luma.gl/webgl';\nimport type {ShaderModule, NumericArray} from '../../types/types';\nimport type Viewport from '../../viewports/viewport';\nimport type {ProjectUniforms} from '../project/viewport-uniforms';\n\nconst vs = `\nconst int max_lights = 2;\nuniform mat4 shadow_uViewProjectionMatrices[max_lights];\nuniform vec4 shadow_uProjectCenters[max_lights];\nuniform bool shadow_uDrawShadowMap;\nuniform bool shadow_uUseShadowMap;\nuniform int shadow_uLightId;\nuniform float shadow_uLightCount;\n\nvarying vec3 shadow_vPosition[max_lights];\n\nvec4 shadow_setVertexPosition(vec4 position_commonspace) {\n if (shadow_uDrawShadowMap) {\n return project_common_position_to_clipspace(position_commonspace, shadow_uViewProjectionMatrices[shadow_uLightId], shadow_uProjectCenters[shadow_uLightId]);\n }\n if (shadow_uUseShadowMap) {\n for (int i = 0; i < max_lights; i++) {\n if(i < int(shadow_uLightCount)) {\n vec4 shadowMap_position = project_common_position_to_clipspace(position_commonspace, shadow_uViewProjectionMatrices[i], shadow_uProjectCenters[i]);\n shadow_vPosition[i] = (shadowMap_position.xyz / shadowMap_position.w + 1.0) / 2.0;\n }\n }\n }\n return gl_Position;\n}\n`;\n\nconst fs = `\nconst int max_lights = 2;\nuniform bool shadow_uDrawShadowMap;\nuniform bool shadow_uUseShadowMap;\nuniform sampler2D shadow_uShadowMap0;\nuniform sampler2D shadow_uShadowMap1;\nuniform vec4 shadow_uColor;\nuniform float shadow_uLightCount;\n\nvarying vec3 shadow_vPosition[max_lights];\n\nconst vec4 bitPackShift = vec4(1.0, 255.0, 65025.0, 16581375.0);\nconst vec4 bitUnpackShift = 1.0 / bitPackShift;\nconst vec4 bitMask = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n\nfloat shadow_getShadowWeight(vec3 position, sampler2D shadowMap) {\n vec4 rgbaDepth = texture2D(shadowMap, position.xy);\n\n float z = dot(rgbaDepth, bitUnpackShift);\n return smoothstep(0.001, 0.01, position.z - z);\n}\n\nvec4 shadow_filterShadowColor(vec4 color) {\n if (shadow_uDrawShadowMap) {\n vec4 rgbaDepth = fract(gl_FragCoord.z * bitPackShift);\n rgbaDepth -= rgbaDepth.gbaa * bitMask;\n return rgbaDepth;\n }\n if (shadow_uUseShadowMap) {\n float shadowAlpha = 0.0;\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[0], shadow_uShadowMap0);\n if(shadow_uLightCount > 1.0) {\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[1], shadow_uShadowMap1);\n }\n shadowAlpha *= shadow_uColor.a / shadow_uLightCount;\n float blendedAlpha = shadowAlpha + color.a * (1.0 - shadowAlpha);\n\n return vec4(\n mix(color.rgb, shadow_uColor.rgb, shadowAlpha / blendedAlpha),\n blendedAlpha\n );\n }\n return color;\n}\n`;\n\nconst getMemoizedViewportCenterPosition = memoize(getViewportCenterPosition);\nconst getMemoizedViewProjectionMatrices = memoize(getViewProjectionMatrices);\n\nconst DEFAULT_SHADOW_COLOR = [0, 0, 0, 1.0];\nconst VECTOR_TO_POINT_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0];\n\ntype ShadowModuleSettings = {\n viewport: Viewport;\n shadowEnabled?: boolean;\n drawToShadowMap?: boolean;\n shadowMaps?: Texture2D[];\n dummyShadowMap?: Texture2D;\n shadowColor?: number[];\n shadowMatrices?: Matrix4[];\n shadowLightId?: number;\n};\n\nfunction screenToCommonSpace(xyz: number[], pixelUnprojectionMatrix: number[]): number[] {\n const [x, y, z] = xyz;\n const coord = pixelsToWorld([x, y, z], pixelUnprojectionMatrix);\n\n if (Number.isFinite(z)) {\n return coord;\n }\n return [coord[0], coord[1], 0];\n}\n\nfunction getViewportCenterPosition({\n viewport,\n center\n}: {\n viewport: Viewport;\n center: NumericArray;\n}): NumericArray {\n return new Matrix4(viewport.viewProjectionMatrix).invert().transform(center);\n}\n\nfunction getViewProjectionMatrices({\n viewport,\n shadowMatrices\n}: {\n viewport: Viewport;\n shadowMatrices: Matrix4[];\n}): Matrix4[] {\n const projectionMatrices: Matrix4[] = [];\n const pixelUnprojectionMatrix = viewport.pixelUnprojectionMatrix;\n const farZ = viewport.isGeospatial ? undefined : 1;\n const corners = [\n [0, 0, farZ], // top left ground\n [viewport.width, 0, farZ], // top right ground\n [0, viewport.height, farZ], // bottom left ground\n [viewport.width, viewport.height, farZ], // bottom right ground\n [0, 0, -1], // top left near\n [viewport.width, 0, -1], // top right near\n [0, viewport.height, -1], // bottom left near\n [viewport.width, viewport.height, -1] // bottom right near\n ].map(pixel =>\n // @ts-expect-error z may be undefined\n screenToCommonSpace(pixel, pixelUnprojectionMatrix)\n );\n\n for (const shadowMatrix of shadowMatrices) {\n const viewMatrix = shadowMatrix.clone().translate(new Vector3(viewport.center).negate());\n const positions = corners.map(corner => viewMatrix.transform(corner));\n const projectionMatrix = new Matrix4().ortho({\n left: Math.min(...positions.map(position => position[0])),\n right: Math.max(...positions.map(position => position[0])),\n bottom: Math.min(...positions.map(position => position[1])),\n top: Math.max(...positions.map(position => position[1])),\n near: Math.min(...positions.map(position => -position[2])),\n far: Math.max(...positions.map(position => -position[2]))\n });\n projectionMatrices.push(projectionMatrix.multiplyRight(shadowMatrix));\n }\n return projectionMatrices;\n}\n\n/* eslint-disable camelcase */\nfunction createShadowUniforms(\n opts: ShadowModuleSettings,\n context: ProjectUniforms\n): Record {\n const {shadowEnabled = true} = opts;\n if (!shadowEnabled || !opts.shadowMatrices || !opts.shadowMatrices.length) {\n return {\n shadow_uDrawShadowMap: false,\n shadow_uUseShadowMap: false\n };\n }\n const uniforms = {\n shadow_uDrawShadowMap: Boolean(opts.drawToShadowMap),\n shadow_uUseShadowMap: opts.shadowMaps ? opts.shadowMaps.length > 0 : false,\n shadow_uColor: opts.shadowColor || DEFAULT_SHADOW_COLOR,\n shadow_uLightId: opts.shadowLightId || 0,\n shadow_uLightCount: opts.shadowMatrices.length\n };\n\n const center = getMemoizedViewportCenterPosition({\n viewport: opts.viewport,\n center: context.project_uCenter\n });\n\n const projectCenters: NumericArray[] = [];\n const viewProjectionMatrices = getMemoizedViewProjectionMatrices({\n shadowMatrices: opts.shadowMatrices,\n viewport: opts.viewport\n }).slice();\n\n for (let i = 0; i < opts.shadowMatrices.length; i++) {\n const viewProjectionMatrix = viewProjectionMatrices[i];\n const viewProjectionMatrixCentered = viewProjectionMatrix\n .clone()\n .translate(new Vector3(opts.viewport.center).negate());\n\n if (\n context.project_uCoordinateSystem === COORDINATE_SYSTEM.LNGLAT &&\n context.project_uProjectionMode === PROJECTION_MODE.WEB_MERCATOR\n ) {\n viewProjectionMatrices[i] = viewProjectionMatrixCentered;\n projectCenters[i] = center;\n } else {\n viewProjectionMatrices[i] = viewProjectionMatrix\n .clone()\n .multiplyRight(VECTOR_TO_POINT_MATRIX);\n projectCenters[i] = viewProjectionMatrixCentered.transform(center);\n }\n }\n\n for (let i = 0; i < viewProjectionMatrices.length; i++) {\n uniforms[`shadow_uViewProjectionMatrices[${i}]`] = viewProjectionMatrices[i];\n uniforms[`shadow_uProjectCenters[${i}]`] = projectCenters[i];\n\n if (opts.shadowMaps && opts.shadowMaps.length > 0) {\n uniforms[`shadow_uShadowMap${i}`] = opts.shadowMaps[i];\n } else {\n uniforms[`shadow_uShadowMap${i}`] = opts.dummyShadowMap;\n }\n }\n return uniforms;\n}\n\nexport default {\n name: 'shadow',\n dependencies: [project],\n vs,\n fs,\n inject: {\n 'vs:DECKGL_FILTER_GL_POSITION': `\n position = shadow_setVertexPosition(geometry.position);\n `,\n 'fs:DECKGL_FILTER_COLOR': `\n color = shadow_filterShadowColor(color);\n `\n },\n getUniforms: (opts = {}, context = {}) => {\n if (\n 'viewport' in opts &&\n (opts.drawToShadowMap || (opts.shadowMaps && opts.shadowMaps.length > 0))\n ) {\n // @ts-expect-error if opts.viewport is defined, context should contain the project module's uniforms\n return createShadowUniforms(opts, context);\n }\n return {};\n }\n} as ShaderModule;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable complexity, camelcase */\n\nimport * as mat4 from 'gl-matrix/mat4';\nimport * as vec4 from 'gl-matrix/vec4';\n\nimport {COORDINATE_SYSTEM, PROJECTION_MODE} from '../../lib/constants';\n\nimport memoize from '../../utils/memoize';\n\nimport type Viewport from '../../viewports/viewport';\nimport type {CoordinateSystem} from '../../lib/constants';\nimport type {NumericArray} from '../../types/types';\n\ntype Vec3 = [number, number, number];\ntype Vec4 = [number, number, number, number];\n\n// To quickly set a vector to zero\nconst ZERO_VECTOR: Vec4 = [0, 0, 0, 0];\n// 4x4 matrix that drops 4th component of vector\nconst VECTOR_TO_POINT_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0];\nconst IDENTITY_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\nconst DEFAULT_PIXELS_PER_UNIT2: Vec3 = [0, 0, 0];\nconst DEFAULT_COORDINATE_ORIGIN: Vec3 = [0, 0, 0];\n\nconst getMemoizedViewportUniforms = memoize(calculateViewportUniforms);\n\nexport function getOffsetOrigin(\n viewport: Viewport,\n coordinateSystem: CoordinateSystem,\n coordinateOrigin: Vec3 = DEFAULT_COORDINATE_ORIGIN\n): {\n geospatialOrigin: Vec3 | null;\n shaderCoordinateOrigin: Vec3;\n offsetMode: boolean;\n} {\n if (coordinateOrigin.length < 3) {\n coordinateOrigin = [coordinateOrigin[0], coordinateOrigin[1], 0];\n }\n\n let shaderCoordinateOrigin = coordinateOrigin;\n let geospatialOrigin: Vec3 | null;\n let offsetMode = true;\n\n if (\n coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS ||\n coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS\n ) {\n geospatialOrigin = coordinateOrigin;\n } else {\n geospatialOrigin = viewport.isGeospatial\n ? // @ts-expect-error longitude and latitude are not defined on the base Viewport, but is expected on geospatial viewports\n [Math.fround(viewport.longitude), Math.fround(viewport.latitude), 0]\n : null;\n }\n\n switch (viewport.projectionMode) {\n case PROJECTION_MODE.WEB_MERCATOR:\n if (\n coordinateSystem === COORDINATE_SYSTEM.LNGLAT ||\n coordinateSystem === COORDINATE_SYSTEM.CARTESIAN\n ) {\n geospatialOrigin = [0, 0, 0];\n offsetMode = false;\n }\n break;\n\n case PROJECTION_MODE.WEB_MERCATOR_AUTO_OFFSET:\n if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT) {\n // viewport center in world space\n // @ts-expect-error when using LNGLAT coordinates, we expect the viewport to be geospatial, in which case geospatialOrigin is defined\n shaderCoordinateOrigin = geospatialOrigin;\n } else if (coordinateSystem === COORDINATE_SYSTEM.CARTESIAN) {\n // viewport center in common space\n shaderCoordinateOrigin = [\n Math.fround(viewport.center[0]),\n Math.fround(viewport.center[1]),\n 0\n ];\n // Geospatial origin (wgs84) must match shaderCoordinateOrigin (common)\n geospatialOrigin = viewport.unprojectPosition(shaderCoordinateOrigin);\n shaderCoordinateOrigin[0] -= coordinateOrigin[0];\n shaderCoordinateOrigin[1] -= coordinateOrigin[1];\n shaderCoordinateOrigin[2] -= coordinateOrigin[2];\n }\n break;\n\n case PROJECTION_MODE.IDENTITY:\n shaderCoordinateOrigin = viewport.position.map(Math.fround) as Vec3;\n shaderCoordinateOrigin[2] = shaderCoordinateOrigin[2] || 0;\n break;\n\n case PROJECTION_MODE.GLOBE:\n offsetMode = false;\n geospatialOrigin = null;\n break;\n\n default:\n // Unknown projection mode\n offsetMode = false;\n }\n\n return {geospatialOrigin, shaderCoordinateOrigin, offsetMode};\n}\n\n// The code that utilizes Matrix4 does the same calculation as their mat4 counterparts,\n// has lower performance but provides error checking.\nfunction calculateMatrixAndOffset(\n viewport: Viewport,\n coordinateSystem: CoordinateSystem,\n coordinateOrigin: Vec3\n): {\n viewMatrix: NumericArray;\n viewProjectionMatrix: NumericArray;\n projectionCenter: Vec4;\n originCommon: Vec4;\n cameraPosCommon: Vec3;\n shaderCoordinateOrigin: Vec3;\n geospatialOrigin: Vec3 | null;\n} {\n const {viewMatrixUncentered, projectionMatrix} = viewport;\n let {viewMatrix, viewProjectionMatrix} = viewport;\n\n let projectionCenter = ZERO_VECTOR;\n let originCommon: Vec4 = ZERO_VECTOR;\n let cameraPosCommon: Vec3 = viewport.cameraPosition as Vec3;\n const {geospatialOrigin, shaderCoordinateOrigin, offsetMode} = getOffsetOrigin(\n viewport,\n coordinateSystem,\n coordinateOrigin\n );\n\n if (offsetMode) {\n // Calculate transformed projectionCenter (using 64 bit precision JS)\n // This is the key to offset mode precision\n // (avoids doing this addition in 32 bit precision in GLSL)\n // @ts-expect-error the 4th component is assigned below\n originCommon = viewport.projectPosition(geospatialOrigin || shaderCoordinateOrigin);\n\n cameraPosCommon = [\n cameraPosCommon[0] - originCommon[0],\n cameraPosCommon[1] - originCommon[1],\n cameraPosCommon[2] - originCommon[2]\n ];\n\n originCommon[3] = 1;\n\n // projectionCenter = new Matrix4(viewProjectionMatrix)\n // .transformVector([positionPixels[0], positionPixels[1], 0.0, 1.0]);\n projectionCenter = vec4.transformMat4([], originCommon, viewProjectionMatrix);\n\n // Always apply uncentered projection matrix if available (shader adds center)\n viewMatrix = viewMatrixUncentered || viewMatrix;\n\n // Zero out 4th coordinate (\"after\" model matrix) - avoids further translations\n // viewMatrix = new Matrix4(viewMatrixUncentered || viewMatrix)\n // .multiplyRight(VECTOR_TO_POINT_MATRIX);\n viewProjectionMatrix = mat4.multiply([], projectionMatrix, viewMatrix);\n viewProjectionMatrix = mat4.multiply([], viewProjectionMatrix, VECTOR_TO_POINT_MATRIX);\n }\n\n return {\n viewMatrix,\n viewProjectionMatrix,\n projectionCenter,\n originCommon,\n cameraPosCommon,\n shaderCoordinateOrigin,\n geospatialOrigin\n };\n}\n\nexport type ProjectUniforms = {\n project_uCoordinateSystem: number;\n project_uProjectionMode: number;\n project_uCoordinateOrigin: Vec3;\n project_uCommonOrigin: Vec3;\n project_uCenter: Vec4;\n // Backward compatibility\n // TODO: remove in v9\n project_uPseudoMeters: boolean;\n\n // Screen size\n project_uViewportSize: [number, number];\n project_uDevicePixelRatio: number;\n\n project_uFocalDistance: number;\n project_uCommonUnitsPerMeter: Vec3;\n project_uCommonUnitsPerWorldUnit: Vec3;\n project_uCommonUnitsPerWorldUnit2: Vec3;\n /** 2^zoom */\n project_uScale: number;\n project_uWrapLongitude: boolean;\n\n project_uViewProjectionMatrix: NumericArray;\n project_uModelMatrix: NumericArray;\n\n // This is for lighting calculations\n project_uCameraPosition: Vec3;\n};\n\nexport type ProjectModuleSettings = {\n viewport: Viewport;\n devicePixelRatio?: number;\n modelMatrix?: NumericArray | null;\n coordinateSystem?: CoordinateSystem;\n coordinateOrigin?: Vec3;\n autoWrapLongitude?: boolean;\n};\n\n/**\n * Returns uniforms for shaders based on current projection\n * includes: projection matrix suitable for shaders\n *\n * TODO - Ensure this works with any viewport, not just WebMercatorViewports\n *\n * @param {WebMercatorViewport} viewport -\n * @return {Float32Array} - 4x4 projection matrix that can be used in shaders\n */\nexport function getUniformsFromViewport({\n viewport,\n devicePixelRatio = 1,\n modelMatrix = null,\n // Match Layer.defaultProps\n coordinateSystem = COORDINATE_SYSTEM.DEFAULT,\n coordinateOrigin = DEFAULT_COORDINATE_ORIGIN,\n autoWrapLongitude = false\n}: ProjectModuleSettings): ProjectUniforms {\n if (coordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n coordinateSystem = viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN;\n }\n\n const uniforms = getMemoizedViewportUniforms({\n viewport,\n devicePixelRatio,\n coordinateSystem,\n coordinateOrigin\n });\n\n uniforms.project_uWrapLongitude = autoWrapLongitude;\n uniforms.project_uModelMatrix = modelMatrix || IDENTITY_MATRIX;\n\n return uniforms;\n}\n\nfunction calculateViewportUniforms({\n viewport,\n devicePixelRatio,\n coordinateSystem,\n coordinateOrigin\n}: {\n viewport: Viewport;\n devicePixelRatio: number;\n coordinateSystem: CoordinateSystem;\n coordinateOrigin: Vec3;\n}): ProjectUniforms {\n const {\n projectionCenter,\n viewProjectionMatrix,\n originCommon,\n cameraPosCommon,\n shaderCoordinateOrigin,\n geospatialOrigin\n } = calculateMatrixAndOffset(viewport, coordinateSystem, coordinateOrigin);\n\n // Calculate projection pixels per unit\n const distanceScales = viewport.getDistanceScales();\n\n const viewportSize: [number, number] = [\n viewport.width * devicePixelRatio,\n viewport.height * devicePixelRatio\n ];\n\n // Distance at which screen pixels are projected.\n // Used to scale sizes in clipspace to match screen pixels.\n // When using Viewport class's default projection matrix, this yields 1 for orthographic\n // and `viewport.focalDistance` for perspective views\n const focalDistance =\n vec4.transformMat4([], [0, 0, -viewport.focalDistance, 1], viewport.projectionMatrix)[3] || 1;\n\n const uniforms: ProjectUniforms = {\n // Projection mode values\n project_uCoordinateSystem: coordinateSystem,\n project_uProjectionMode: viewport.projectionMode,\n project_uCoordinateOrigin: shaderCoordinateOrigin,\n project_uCommonOrigin: originCommon.slice(0, 3) as Vec3,\n project_uCenter: projectionCenter,\n\n // Backward compatibility\n // TODO: remove in v9\n // @ts-expect-error _pseudoMeters is only defined on WebMercator viewport\n project_uPseudoMeters: Boolean(viewport._pseudoMeters),\n\n // Screen size\n project_uViewportSize: viewportSize,\n project_uDevicePixelRatio: devicePixelRatio,\n\n project_uFocalDistance: focalDistance,\n project_uCommonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3,\n project_uCommonUnitsPerWorldUnit: distanceScales.unitsPerMeter as Vec3,\n project_uCommonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2,\n project_uScale: viewport.scale, // This is the mercator scale (2 ** zoom)\n project_uWrapLongitude: false,\n\n project_uViewProjectionMatrix: viewProjectionMatrix,\n project_uModelMatrix: IDENTITY_MATRIX,\n\n // This is for lighting calculations\n project_uCameraPosition: cameraPosCommon\n };\n\n if (geospatialOrigin) {\n // Get high-precision DistanceScales from geospatial viewport\n // TODO: stricter types in Viewport classes\n const distanceScalesAtOrigin = viewport.getDistanceScales(geospatialOrigin) as {\n unitsPerMeter: Vec3;\n metersPerUnit: Vec3;\n unitsPerMeter2: Vec3;\n unitsPerDegree: Vec3;\n degreesPerUnit: Vec3;\n unitsPerDegree2: Vec3;\n };\n switch (coordinateSystem) {\n case COORDINATE_SYSTEM.METER_OFFSETS:\n uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerMeter;\n uniforms.project_uCommonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerMeter2;\n break;\n\n case COORDINATE_SYSTEM.LNGLAT:\n case COORDINATE_SYSTEM.LNGLAT_OFFSETS:\n // @ts-expect-error _pseudoMeters only exists on WebMercatorView\n if (!viewport._pseudoMeters) {\n uniforms.project_uCommonUnitsPerMeter = distanceScalesAtOrigin.unitsPerMeter;\n }\n uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerDegree;\n uniforms.project_uCommonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerDegree2;\n break;\n\n // a.k.a \"preprojected\" positions\n case COORDINATE_SYSTEM.CARTESIAN:\n uniforms.project_uCommonUnitsPerWorldUnit = [1, 1, distanceScalesAtOrigin.unitsPerMeter[2]];\n uniforms.project_uCommonUnitsPerWorldUnit2 = [\n 0,\n 0,\n distanceScalesAtOrigin.unitsPerMeter2[2]\n ];\n break;\n\n default:\n break;\n }\n }\n\n return uniforms;\n}\n","import type Viewport from '../viewports/viewport';\n\nexport default abstract class ViewState implements IViewState {\n private _viewportProps: Required;\n private _state: State;\n\n constructor(props: Required, state: State) {\n this._viewportProps = this.applyConstraints(props);\n this._state = state;\n }\n\n getViewportProps(): Required {\n return this._viewportProps;\n }\n\n getState(): State {\n return this._state;\n }\n\n abstract applyConstraints(props: Required): Required;\n\n abstract shortestPathFrom(viewState: T): Props;\n\n abstract panStart(params: {pos: [number, number]}): T;\n abstract pan({pos, startPos}: {pos: [number, number]; startPos?: [number, number]}): T;\n abstract panEnd(): T;\n\n abstract rotateStart(params: {pos: [number, number]}): T;\n abstract rotate(params: {pos?: [number, number]; deltaAngleX?: number; deltaAngleY: number}): T;\n abstract rotateEnd(): T;\n\n abstract zoomStart({pos}: {pos: [number, number]}): T;\n abstract zoom({\n pos,\n startPos,\n scale\n }: {\n pos: [number, number];\n startPos?: [number, number];\n scale: number;\n }): T;\n abstract zoomEnd(): T;\n\n abstract zoomIn(speed?: number): T;\n abstract zoomOut(speed?: number): T;\n\n abstract moveLeft(speed?: number): T;\n abstract moveRight(speed?: number): T;\n abstract moveUp(speed?: number): T;\n abstract moveDown(speed?: number): T;\n\n abstract rotateLeft(speed?: number): T;\n abstract rotateRight(speed?: number): T;\n abstract rotateUp(speed?: number): T;\n abstract rotateDown(speed?: number): T;\n}\n\nexport interface IViewState {\n makeViewport?: (props: Record) => Viewport;\n\n getViewportProps(): Record;\n\n getState(): Record;\n\n shortestPathFrom(viewState: T): Record;\n\n panStart(params: {pos: [number, number]}): T;\n pan({pos, startPos}: {pos: [number, number]; startPos?: [number, number]}): T;\n panEnd(): T;\n\n rotateStart(params: {pos: [number, number]}): T;\n rotate(params: {pos?: [number, number]; deltaAngleX?: number; deltaAngleY?: number}): T;\n rotateEnd(): T;\n\n zoomStart({pos}: {pos: [number, number]}): T;\n zoom({\n pos,\n startPos,\n scale\n }: {\n pos: [number, number];\n startPos?: [number, number];\n scale: number;\n }): T;\n zoomEnd(): T;\n\n zoomIn(speed?: number): T;\n zoomOut(speed?: number): T;\n\n moveLeft(speed?: number): T;\n moveRight(speed?: number): T;\n moveUp(speed?: number): T;\n moveDown(speed?: number): T;\n\n rotateLeft(speed?: number): T;\n rotateRight(speed?: number): T;\n rotateUp(speed?: number): T;\n rotateDown(speed?: number): T;\n}\n","import { concatenateArrayBuffersAsync } from '@loaders.gl/loader-utils';\nimport { isResponse, isReadableStream, isAsyncIterable, isIterable, isIterator, isBlob, isBuffer } from '../../javascript-utils/is-type';\nimport { makeIterator } from '../../iterators/make-iterator/make-iterator';\nimport { checkResponse, makeResponse } from '../utils/response-utils';\nconst ERR_DATA = 'Cannot convert supplied data type';\nexport function getArrayBufferOrStringFromDataSync(data, loader, options) {\n if (loader.text && typeof data === 'string') {\n return data;\n }\n\n if (isBuffer(data)) {\n data = data.buffer;\n }\n\n if (data instanceof ArrayBuffer) {\n const arrayBuffer = data;\n\n if (loader.text && !loader.binary) {\n const textDecoder = new TextDecoder('utf8');\n return textDecoder.decode(arrayBuffer);\n }\n\n return arrayBuffer;\n }\n\n if (ArrayBuffer.isView(data)) {\n if (loader.text && !loader.binary) {\n const textDecoder = new TextDecoder('utf8');\n return textDecoder.decode(data);\n }\n\n let arrayBuffer = data.buffer;\n const byteLength = data.byteLength || data.length;\n\n if (data.byteOffset !== 0 || byteLength !== arrayBuffer.byteLength) {\n arrayBuffer = arrayBuffer.slice(data.byteOffset, data.byteOffset + byteLength);\n }\n\n return arrayBuffer;\n }\n\n throw new Error(ERR_DATA);\n}\nexport async function getArrayBufferOrStringFromData(data, loader, options) {\n const isArrayBuffer = data instanceof ArrayBuffer || ArrayBuffer.isView(data);\n\n if (typeof data === 'string' || isArrayBuffer) {\n return getArrayBufferOrStringFromDataSync(data, loader, options);\n }\n\n if (isBlob(data)) {\n data = await makeResponse(data);\n }\n\n if (isResponse(data)) {\n const response = data;\n await checkResponse(response);\n return loader.binary ? await response.arrayBuffer() : await response.text();\n }\n\n if (isReadableStream(data)) {\n data = makeIterator(data, options);\n }\n\n if (isIterable(data) || isAsyncIterable(data)) {\n return concatenateArrayBuffersAsync(data);\n }\n\n throw new Error(ERR_DATA);\n}\nexport async function getAsyncIterableFromData(data, options) {\n if (isIterator(data)) {\n return data;\n }\n\n if (isResponse(data)) {\n const response = data;\n await checkResponse(response);\n const body = await response.body;\n return makeIterator(body, options);\n }\n\n if (isBlob(data) || isReadableStream(data)) {\n return makeIterator(data, options);\n }\n\n if (isAsyncIterable(data)) {\n return data[Symbol.asyncIterator]();\n }\n\n return getIterableFromData(data);\n}\nexport async function getReadableStream(data) {\n if (isReadableStream(data)) {\n return data;\n }\n\n if (isResponse(data)) {\n return data.body;\n }\n\n const response = await makeResponse(data);\n return response.body;\n}\n\nfunction getIterableFromData(data) {\n if (ArrayBuffer.isView(data)) {\n return function* oneChunk() {\n yield data.buffer;\n }();\n }\n\n if (data instanceof ArrayBuffer) {\n return function* oneChunk() {\n yield data;\n }();\n }\n\n if (isIterator(data)) {\n return data;\n }\n\n if (isIterable(data)) {\n return data[Symbol.iterator]();\n }\n\n throw new Error(ERR_DATA);\n}\n//# sourceMappingURL=get-data.js.map","const DEFAULT_CHUNK_SIZE = 256 * 1024;\nexport function* makeArrayBufferIterator(arrayBuffer, options = {}) {\n const {\n chunkSize = DEFAULT_CHUNK_SIZE\n } = options;\n let byteOffset = 0;\n\n while (byteOffset < arrayBuffer.byteLength) {\n const chunkByteLength = Math.min(arrayBuffer.byteLength - byteOffset, chunkSize);\n const chunk = new ArrayBuffer(chunkByteLength);\n const sourceArray = new Uint8Array(arrayBuffer, byteOffset, chunkByteLength);\n const chunkArray = new Uint8Array(chunk);\n chunkArray.set(sourceArray);\n byteOffset += chunkByteLength;\n yield chunk;\n }\n}\n//# sourceMappingURL=make-array-buffer-iterator.js.map","import { isBrowser, toArrayBuffer } from '@loaders.gl/loader-utils';\nexport function makeStreamIterator(stream, options) {\n return isBrowser ? makeBrowserStreamIterator(stream, options) : makeNodeStreamIterator(stream, options);\n}\n\nasync function* makeBrowserStreamIterator(stream, options) {\n const reader = stream.getReader();\n let nextBatchPromise;\n\n try {\n while (true) {\n const currentBatchPromise = nextBatchPromise || reader.read();\n\n if (options !== null && options !== void 0 && options._streamReadAhead) {\n nextBatchPromise = reader.read();\n }\n\n const {\n done,\n value\n } = await currentBatchPromise;\n\n if (done) {\n return;\n }\n\n yield toArrayBuffer(value);\n }\n } catch (error) {\n reader.releaseLock();\n }\n}\n\nasync function* makeNodeStreamIterator(stream, options) {\n for await (const chunk of stream) {\n yield toArrayBuffer(chunk);\n }\n}\n//# sourceMappingURL=make-stream-iterator.js.map","import { makeStringIterator } from './make-string-iterator';\nimport { makeArrayBufferIterator } from './make-array-buffer-iterator';\nimport { makeBlobIterator } from './make-blob-iterator';\nimport { makeStreamIterator } from './make-stream-iterator';\nimport { isBlob, isReadableStream, isResponse } from '../../javascript-utils/is-type';\nexport function makeIterator(data, options) {\n if (typeof data === 'string') {\n return makeStringIterator(data, options);\n }\n\n if (data instanceof ArrayBuffer) {\n return makeArrayBufferIterator(data, options);\n }\n\n if (isBlob(data)) {\n return makeBlobIterator(data, options);\n }\n\n if (isReadableStream(data)) {\n return makeStreamIterator(data, options);\n }\n\n if (isResponse(data)) {\n const response = data;\n return makeStreamIterator(response.body, options);\n }\n\n throw new Error('makeIterator');\n}\n//# sourceMappingURL=make-iterator.js.map","const DEFAULT_CHUNK_SIZE = 256 * 1024;\nexport function* makeStringIterator(string, options) {\n const chunkSize = (options === null || options === void 0 ? void 0 : options.chunkSize) || DEFAULT_CHUNK_SIZE;\n let offset = 0;\n const textEncoder = new TextEncoder();\n\n while (offset < string.length) {\n const chunkLength = Math.min(string.length - offset, chunkSize);\n const chunk = string.slice(offset, offset + chunkLength);\n offset += chunkLength;\n yield textEncoder.encode(chunk);\n }\n}\n//# sourceMappingURL=make-string-iterator.js.map","const DEFAULT_CHUNK_SIZE = 1024 * 1024;\nexport async function* makeBlobIterator(blob, options) {\n const chunkSize = (options === null || options === void 0 ? void 0 : options.chunkSize) || DEFAULT_CHUNK_SIZE;\n let offset = 0;\n\n while (offset < blob.size) {\n const end = offset + chunkSize;\n const chunk = await blob.slice(offset, end).arrayBuffer();\n offset = end;\n yield chunk;\n }\n}\n//# sourceMappingURL=make-blob-iterator.js.map","/**\n * The _model_module_version/_view_module_version this package implements.\n *\n * The html widget manager assumes that this is the same as the npm package\n * version number.\n */\n\nexport const MODULE_VERSION =\n typeof __VERSION__ === 'undefined' ? 'untranspiled source' : __VERSION__;\nexport const MODULE_NAME = '@deck.gl/jupyter-widget';\n","/*\r\n Copyright 2013 Daniel Wirtz \r\n Copyright 2009 The Closure Library Authors. All Rights Reserved.\r\n\r\n Licensed under the Apache License, Version 2.0 (the \"License\");\r\n you may not use this file except in compliance with the License.\r\n You may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n Unless required by applicable law or agreed to in writing, software\r\n distributed under the License is distributed on an \"AS-IS\" BASIS,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n See the License for the specific language governing permissions and\r\n limitations under the License.\r\n */\r\n\r\n/**\r\n * @license long.js (c) 2013 Daniel Wirtz \r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/long.js for details\r\n */\r\n(function(global, factory) {\r\n\r\n /* AMD */ if (typeof define === 'function' && define[\"amd\"])\r\n define([], factory);\r\n /* CommonJS */ else if (typeof require === 'function' && typeof module === \"object\" && module && module[\"exports\"])\r\n module[\"exports\"] = factory();\r\n /* Global */ else\r\n (global[\"dcodeIO\"] = global[\"dcodeIO\"] || {})[\"Long\"] = factory();\r\n\r\n})(this, function() {\r\n \"use strict\";\r\n\r\n /**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @constructor\r\n */\r\n function Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n }\r\n\r\n // The internal representation of a long is the two given signed, 32-bit values.\r\n // We use 32-bit pieces because these are the size of integers on which\r\n // Javascript performs bit-operations. For operations like addition and\r\n // multiplication, we split each number into 16 bit pieces, which can easily be\r\n // multiplied within Javascript's floating-point representation without overflow\r\n // or change in sign.\r\n //\r\n // In the algorithms below, we frequently reduce the negative case to the\r\n // positive case by negating the input(s) and then post-processing the result.\r\n // Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n // a positive number, it overflows back into a negative). Not handling this\r\n // case would often result in infinite recursion.\r\n //\r\n // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n // methods on which they depend.\r\n\r\n /**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\n Long.prototype.__isLong__;\r\n\r\n Object.defineProperty(Long.prototype, \"__isLong__\", {\r\n value: true,\r\n enumerable: false,\r\n configurable: false\r\n });\r\n\r\n /**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\n function isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n }\r\n\r\n /**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\n Long.isLong = isLong;\r\n\r\n /**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\n var INT_CACHE = {};\r\n\r\n /**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\n var UINT_CACHE = {};\r\n\r\n /**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromInt = fromInt;\r\n\r\n /**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromNumber(value, unsigned) {\r\n if (isNaN(value) || !isFinite(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n }\r\n\r\n /**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromNumber = fromNumber;\r\n\r\n /**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n }\r\n\r\n /**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromBits = fromBits;\r\n\r\n /**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\n var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n /**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromString = fromString;\r\n\r\n /**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromValue(val) {\r\n if (val /* is compatible */ instanceof Long)\r\n return val;\r\n if (typeof val === 'number')\r\n return fromNumber(val);\r\n if (typeof val === 'string')\r\n return fromString(val);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, val.unsigned);\r\n }\r\n\r\n /**\r\n * Converts the specified value to a Long.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @returns {!Long}\r\n */\r\n Long.fromValue = fromValue;\r\n\r\n // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n // no runtime penalty for these.\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_16_DBL = 1 << 16;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_24_DBL = 1 << 24;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n /**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var ZERO = fromInt(0);\r\n\r\n /**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\n Long.ZERO = ZERO;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var UZERO = fromInt(0, true);\r\n\r\n /**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\n Long.UZERO = UZERO;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var ONE = fromInt(1);\r\n\r\n /**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\n Long.ONE = ONE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var UONE = fromInt(1, true);\r\n\r\n /**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\n Long.UONE = UONE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var NEG_ONE = fromInt(-1);\r\n\r\n /**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\n Long.NEG_ONE = NEG_ONE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n /**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\n Long.MAX_VALUE = MAX_VALUE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n /**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\n Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n /**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\n Long.MIN_VALUE = MIN_VALUE;\r\n\r\n /**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\n var LongPrototype = Long.prototype;\r\n\r\n /**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\n LongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n };\r\n\r\n /**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\n LongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n };\r\n\r\n /**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\n LongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\n LongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n };\r\n\r\n /**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\n LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n };\r\n\r\n /**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\n LongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n };\r\n\r\n /**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\n LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n };\r\n\r\n /**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\n LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.eq = LongPrototype.equals;\r\n\r\n /**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n };\r\n\r\n /**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.neq = LongPrototype.notEquals;\r\n\r\n /**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lt = LongPrototype.lessThan;\r\n\r\n /**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n /**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n /**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n /**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\n LongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n };\r\n\r\n /**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\n LongPrototype.comp = LongPrototype.compare;\r\n\r\n /**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\n LongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n };\r\n\r\n /**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\n LongPrototype.neg = LongPrototype.negate;\r\n\r\n /**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\n LongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\n LongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n };\r\n\r\n /**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\n LongPrototype.sub = LongPrototype.subtract;\r\n\r\n /**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\n LongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\n LongPrototype.mul = LongPrototype.multiply;\r\n\r\n /**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\n LongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n };\r\n\r\n /**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\n LongPrototype.div = LongPrototype.divide;\r\n\r\n /**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\n LongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n return this.sub(this.div(divisor).mul(divisor));\r\n };\r\n\r\n /**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\n LongPrototype.mod = LongPrototype.modulo;\r\n\r\n /**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\n LongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\n LongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\n LongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\n LongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n /**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n /**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n };\r\n\r\n /**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n /**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\n LongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n };\r\n\r\n /**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\n LongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n };\r\n\r\n /**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\n LongPrototype.toBytes = function(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n }\r\n\r\n /**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\n LongPrototype.toBytesLE = function() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n (lo >>> 8) & 0xff,\r\n (lo >>> 16) & 0xff,\r\n (lo >>> 24) & 0xff,\r\n hi & 0xff,\r\n (hi >>> 8) & 0xff,\r\n (hi >>> 16) & 0xff,\r\n (hi >>> 24) & 0xff\r\n ];\r\n }\r\n\r\n /**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\n LongPrototype.toBytesBE = function() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n (hi >>> 24) & 0xff,\r\n (hi >>> 16) & 0xff,\r\n (hi >>> 8) & 0xff,\r\n hi & 0xff,\r\n (lo >>> 24) & 0xff,\r\n (lo >>> 16) & 0xff,\r\n (lo >>> 8) & 0xff,\r\n lo & 0xff\r\n ];\r\n }\r\n\r\n return Long;\r\n});\r\n","import {COORDINATE_SYSTEM, createIterable} from '@deck.gl/core';\n\n/* eslint-disable max-statements, complexity, camelcase */\nconst RADIAN_PER_DEGREE = Math.PI / 180;\nconst modelMatrix = new Float32Array(16);\nconst valueArray = new Float32Array(12);\n\nfunction calculateTransformMatrix(targetMatrix, orientation, scale) {\n const pitch = orientation[0] * RADIAN_PER_DEGREE;\n const yaw = orientation[1] * RADIAN_PER_DEGREE;\n const roll = orientation[2] * RADIAN_PER_DEGREE;\n\n const sr = Math.sin(roll);\n const sp = Math.sin(pitch);\n const sw = Math.sin(yaw);\n\n const cr = Math.cos(roll);\n const cp = Math.cos(pitch);\n const cw = Math.cos(yaw);\n\n const scx = scale[0];\n const scy = scale[1];\n const scz = scale[2];\n\n targetMatrix[0] = scx * cw * cp; // 0,0\n targetMatrix[1] = scx * sw * cp; // 1,0\n targetMatrix[2] = scx * -sp; // 2,0\n targetMatrix[3] = scy * (-sw * cr + cw * sp * sr); // 0,1\n targetMatrix[4] = scy * (cw * cr + sw * sp * sr); // 1,1\n targetMatrix[5] = scy * cp * sr; // 2,1\n targetMatrix[6] = scz * (sw * sr + cw * sp * cr); // 0,2\n targetMatrix[7] = scz * (-cw * sr + sw * sp * cr); // 1,2\n targetMatrix[8] = scz * cp * cr; // 2,2\n}\n\nfunction getExtendedMat3FromMat4(mat4) {\n mat4[0] = mat4[0];\n mat4[1] = mat4[1];\n mat4[2] = mat4[2];\n mat4[3] = mat4[4];\n mat4[4] = mat4[5];\n mat4[5] = mat4[6];\n mat4[6] = mat4[8];\n mat4[7] = mat4[9];\n mat4[8] = mat4[10];\n mat4[9] = mat4[12];\n mat4[10] = mat4[13];\n mat4[11] = mat4[14];\n\n return mat4.subarray(0, 12);\n}\n\nexport const MATRIX_ATTRIBUTES = {\n size: 12,\n accessor: ['getOrientation', 'getScale', 'getTranslation', 'getTransformMatrix'],\n shaderAttributes: {\n instanceModelMatrix__LOCATION_0: {\n size: 3,\n elementOffset: 0\n },\n instanceModelMatrix__LOCATION_1: {\n size: 3,\n elementOffset: 3\n },\n instanceModelMatrix__LOCATION_2: {\n size: 3,\n elementOffset: 6\n },\n instanceTranslation: {\n size: 3,\n elementOffset: 9\n }\n } as const,\n\n update(attribute, {startRow, endRow}) {\n // @ts-expect-error: \"this\" will be bound to a layer when this function is called\n const {data, getOrientation, getScale, getTranslation, getTransformMatrix} = this.props;\n\n const arrayMatrix = Array.isArray(getTransformMatrix);\n const constantMatrix = arrayMatrix && getTransformMatrix.length === 16;\n const constantScale = Array.isArray(getScale);\n const constantOrientation = Array.isArray(getOrientation);\n const constantTranslation = Array.isArray(getTranslation);\n\n const hasMatrix = constantMatrix || (!arrayMatrix && Boolean(getTransformMatrix(data[0])));\n\n if (hasMatrix) {\n attribute.constant = constantMatrix;\n } else {\n attribute.constant = constantOrientation && constantScale && constantTranslation;\n }\n\n const instanceModelMatrixData = attribute.value;\n\n if (attribute.constant) {\n let matrix;\n\n if (hasMatrix) {\n modelMatrix.set(getTransformMatrix);\n matrix = getExtendedMat3FromMat4(modelMatrix);\n } else {\n matrix = valueArray;\n\n const orientation = getOrientation;\n const scale = getScale;\n\n calculateTransformMatrix(matrix, orientation, scale);\n matrix.set(getTranslation, 9);\n }\n\n attribute.value = new Float32Array(matrix);\n } else {\n let i = startRow * attribute.size;\n const {iterable, objectInfo} = createIterable(data, startRow, endRow);\n for (const object of iterable) {\n objectInfo.index++;\n let matrix;\n\n if (hasMatrix) {\n modelMatrix.set(\n constantMatrix ? getTransformMatrix : getTransformMatrix(object, objectInfo)\n );\n matrix = getExtendedMat3FromMat4(modelMatrix);\n } else {\n matrix = valueArray;\n\n const orientation = constantOrientation\n ? getOrientation\n : getOrientation(object, objectInfo);\n const scale = constantScale ? getScale : getScale(object, objectInfo);\n\n calculateTransformMatrix(matrix, orientation, scale);\n matrix.set(constantTranslation ? getTranslation : getTranslation(object, objectInfo), 9);\n }\n\n instanceModelMatrixData[i++] = matrix[0];\n instanceModelMatrixData[i++] = matrix[1];\n instanceModelMatrixData[i++] = matrix[2];\n instanceModelMatrixData[i++] = matrix[3];\n instanceModelMatrixData[i++] = matrix[4];\n instanceModelMatrixData[i++] = matrix[5];\n instanceModelMatrixData[i++] = matrix[6];\n instanceModelMatrixData[i++] = matrix[7];\n instanceModelMatrixData[i++] = matrix[8];\n instanceModelMatrixData[i++] = matrix[9];\n instanceModelMatrixData[i++] = matrix[10];\n instanceModelMatrixData[i++] = matrix[11];\n }\n }\n }\n};\n\n// only apply composeModelMatrix when in cartesian or meter_offsets coordinate system\n// with `composeModelMatrix` enabled, the rotation part of the layer's modelMatrix will be composed to instance's transformations\n// since rotating latitude and longitude can not provide meaningful results, hence `composeModelMatrix` is disabled\n// when in LNGLAT and LNGLAT_OFFSET coordinates.\nexport function shouldComposeModelMatrix(viewport, coordinateSystem) {\n return (\n coordinateSystem === COORDINATE_SYSTEM.CARTESIAN ||\n coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS ||\n (coordinateSystem === COORDINATE_SYSTEM.DEFAULT && !viewport.isGeospatial)\n );\n}\n","/* global process, document */\nimport {loadCSS} from './css-utils';\n\n// SSR safe import (ensures this file can be imported under Node.js e.g. for tests)\n// From https://github.com/mapbox/mapbox-gl-js/issues/4593#issuecomment-546290823\n// eslint-disable-next-line no-undef\nlet mapboxgl;\n\nif (process.browser) {\n mapboxgl = require('mapbox-gl');\n}\n\nconst MAPBOX_CSS_URL = 'https://api.tiles.mapbox.com/mapbox-gl-js/v1.2.1/mapbox-gl.css';\n\nexport default mapboxgl;\n\nexport function loadMapboxCSS(url = MAPBOX_CSS_URL) {\n loadCSS(url);\n}\n\n/**\n * Hides elements in the mapbox-gl.js library and adds pydeck tag\n */\nexport function modifyMapboxElements() {\n const classes = ['mapboxgl-missing-css'];\n for (const c of classes) {\n const el = document.getElementsByClassName(c)[0];\n if (el && el.style) {\n el.style.display = 'none';\n }\n }\n}\n","import { log } from '@luma.gl/gltools';\nimport { Stats } from '@probe.gl/stats';\nimport { isBrowser } from '@probe.gl/env';\nconst VERSION = typeof \"8.5.16\" !== 'undefined' ? \"8.5.16\" : 'untranspiled source';\nconst STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';\nexport class StatsManager {\n constructor() {\n this.stats = new Map();\n }\n\n get(name) {\n if (!this.stats.has(name)) {\n this.stats.set(name, new Stats({\n id: name\n }));\n }\n\n return this.stats.get(name);\n }\n\n}\nconst lumaStats = new StatsManager();\n\nif (globalThis.luma && globalThis.luma.VERSION !== VERSION) {\n throw new Error(\"luma.gl - multiple VERSIONs detected: \".concat(globalThis.luma.VERSION, \" vs \").concat(VERSION));\n}\n\nif (!globalThis.luma) {\n if (isBrowser()) {\n log.log(1, \"luma.gl \".concat(VERSION, \" - \").concat(STARTUP_MESSAGE))();\n }\n\n globalThis.luma = globalThis.luma || {\n VERSION,\n version: VERSION,\n log,\n stats: lumaStats,\n globals: {\n modules: {},\n nodeIO: {}\n }\n };\n}\n\nexport { lumaStats };\nexport default globalThis.luma;\n//# sourceMappingURL=init.js.map","export class Worker {}\nexport const parentPort = null;\n//# sourceMappingURL=worker_threads-browser.js.map","import { assert } from '../env-utils/assert';\nconst workerURLCache = new Map();\nexport function getLoadableWorkerURL(props) {\n assert(props.source && !props.url || !props.source && props.url);\n let workerURL = workerURLCache.get(props.source || props.url);\n\n if (!workerURL) {\n if (props.url) {\n workerURL = getLoadableWorkerURLFromURL(props.url);\n workerURLCache.set(props.url, workerURL);\n }\n\n if (props.source) {\n workerURL = getLoadableWorkerURLFromSource(props.source);\n workerURLCache.set(props.source, workerURL);\n }\n }\n\n assert(workerURL);\n return workerURL;\n}\n\nfunction getLoadableWorkerURLFromURL(url) {\n if (!url.startsWith('http')) {\n return url;\n }\n\n const workerSource = buildScriptSource(url);\n return getLoadableWorkerURLFromSource(workerSource);\n}\n\nfunction getLoadableWorkerURLFromSource(workerSource) {\n const blob = new Blob([workerSource], {\n type: 'application/javascript'\n });\n return URL.createObjectURL(blob);\n}\n\nfunction buildScriptSource(workerUrl) {\n return \"try {\\n importScripts('\".concat(workerUrl, \"');\\n} catch (error) {\\n console.error(error);\\n throw error;\\n}\");\n}\n//# sourceMappingURL=get-loadable-worker-url.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Worker as NodeWorker } from '../node/worker_threads';\nimport { isBrowser } from '../env-utils/globals';\nimport { assert } from '../env-utils/assert';\nimport { getLoadableWorkerURL } from '../worker-utils/get-loadable-worker-url';\nimport { getTransferList } from '../worker-utils/get-transfer-list';\n\nconst NOOP = () => {};\n\nexport default class WorkerThread {\n static isSupported() {\n return typeof Worker !== 'undefined' && isBrowser || typeof NodeWorker !== 'undefined' && !isBrowser;\n }\n\n constructor(props) {\n _defineProperty(this, \"name\", void 0);\n\n _defineProperty(this, \"source\", void 0);\n\n _defineProperty(this, \"url\", void 0);\n\n _defineProperty(this, \"terminated\", false);\n\n _defineProperty(this, \"worker\", void 0);\n\n _defineProperty(this, \"onMessage\", void 0);\n\n _defineProperty(this, \"onError\", void 0);\n\n _defineProperty(this, \"_loadableURL\", '');\n\n const {\n name,\n source,\n url\n } = props;\n assert(source || url);\n this.name = name;\n this.source = source;\n this.url = url;\n this.onMessage = NOOP;\n\n this.onError = error => console.log(error);\n\n this.worker = isBrowser ? this._createBrowserWorker() : this._createNodeWorker();\n }\n\n destroy() {\n this.onMessage = NOOP;\n this.onError = NOOP;\n this.worker.terminate();\n this.terminated = true;\n }\n\n get isRunning() {\n return Boolean(this.onMessage);\n }\n\n postMessage(data, transferList) {\n transferList = transferList || getTransferList(data);\n this.worker.postMessage(data, transferList);\n }\n\n _getErrorFromErrorEvent(event) {\n let message = 'Failed to load ';\n message += \"worker \".concat(this.name, \" from \").concat(this.url, \". \");\n\n if (event.message) {\n message += \"\".concat(event.message, \" in \");\n }\n\n if (event.lineno) {\n message += \":\".concat(event.lineno, \":\").concat(event.colno);\n }\n\n return new Error(message);\n }\n\n _createBrowserWorker() {\n this._loadableURL = getLoadableWorkerURL({\n source: this.source,\n url: this.url\n });\n const worker = new Worker(this._loadableURL, {\n name: this.name\n });\n\n worker.onmessage = event => {\n if (!event.data) {\n this.onError(new Error('No data received'));\n } else {\n this.onMessage(event.data);\n }\n };\n\n worker.onerror = error => {\n this.onError(this._getErrorFromErrorEvent(error));\n this.terminated = true;\n };\n\n worker.onmessageerror = event => console.error(event);\n\n return worker;\n }\n\n _createNodeWorker() {\n let worker;\n\n if (this.url) {\n const absolute = this.url.includes(':/') || this.url.startsWith('/');\n const url = absolute ? this.url : \"./\".concat(this.url);\n worker = new NodeWorker(url, {\n eval: false\n });\n } else if (this.source) {\n worker = new NodeWorker(this.source, {\n eval: true\n });\n } else {\n throw new Error('no worker');\n }\n\n worker.on('message', data => {\n this.onMessage(data);\n });\n worker.on('error', error => {\n this.onError(error);\n });\n worker.on('exit', code => {});\n return worker;\n }\n\n}\n//# sourceMappingURL=worker-thread.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { assert } from '../env-utils/assert';\nexport default class WorkerJob {\n constructor(jobName, workerThread) {\n _defineProperty(this, \"name\", void 0);\n\n _defineProperty(this, \"workerThread\", void 0);\n\n _defineProperty(this, \"isRunning\", true);\n\n _defineProperty(this, \"result\", void 0);\n\n _defineProperty(this, \"_resolve\", () => {});\n\n _defineProperty(this, \"_reject\", () => {});\n\n this.name = jobName;\n this.workerThread = workerThread;\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n\n postMessage(type, payload) {\n this.workerThread.postMessage({\n source: 'loaders.gl',\n type,\n payload\n });\n }\n\n done(value) {\n assert(this.isRunning);\n this.isRunning = false;\n\n this._resolve(value);\n }\n\n error(error) {\n assert(this.isRunning);\n this.isRunning = false;\n\n this._reject(error);\n }\n\n}\n//# sourceMappingURL=worker-job.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { isMobile } from '../env-utils/globals';\nimport WorkerThread from './worker-thread';\nimport WorkerJob from './worker-job';\nexport default class WorkerPool {\n static isSupported() {\n return WorkerThread.isSupported();\n }\n\n constructor(props) {\n _defineProperty(this, \"name\", 'unnamed');\n\n _defineProperty(this, \"source\", void 0);\n\n _defineProperty(this, \"url\", void 0);\n\n _defineProperty(this, \"maxConcurrency\", 1);\n\n _defineProperty(this, \"maxMobileConcurrency\", 1);\n\n _defineProperty(this, \"onDebug\", () => {});\n\n _defineProperty(this, \"reuseWorkers\", true);\n\n _defineProperty(this, \"props\", {});\n\n _defineProperty(this, \"jobQueue\", []);\n\n _defineProperty(this, \"idleQueue\", []);\n\n _defineProperty(this, \"count\", 0);\n\n _defineProperty(this, \"isDestroyed\", false);\n\n this.source = props.source;\n this.url = props.url;\n this.setProps(props);\n }\n\n destroy() {\n this.idleQueue.forEach(worker => worker.destroy());\n this.isDestroyed = true;\n }\n\n setProps(props) {\n this.props = { ...this.props,\n ...props\n };\n\n if (props.name !== undefined) {\n this.name = props.name;\n }\n\n if (props.maxConcurrency !== undefined) {\n this.maxConcurrency = props.maxConcurrency;\n }\n\n if (props.maxMobileConcurrency !== undefined) {\n this.maxMobileConcurrency = props.maxMobileConcurrency;\n }\n\n if (props.reuseWorkers !== undefined) {\n this.reuseWorkers = props.reuseWorkers;\n }\n\n if (props.onDebug !== undefined) {\n this.onDebug = props.onDebug;\n }\n }\n\n async startJob(name, onMessage = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {\n const startPromise = new Promise(onStart => {\n this.jobQueue.push({\n name,\n onMessage,\n onError,\n onStart\n });\n return this;\n });\n\n this._startQueuedJob();\n\n return await startPromise;\n }\n\n async _startQueuedJob() {\n if (!this.jobQueue.length) {\n return;\n }\n\n const workerThread = this._getAvailableWorker();\n\n if (!workerThread) {\n return;\n }\n\n const queuedJob = this.jobQueue.shift();\n\n if (queuedJob) {\n this.onDebug({\n message: 'Starting job',\n name: queuedJob.name,\n workerThread,\n backlog: this.jobQueue.length\n });\n const job = new WorkerJob(queuedJob.name, workerThread);\n\n workerThread.onMessage = data => queuedJob.onMessage(job, data.type, data.payload);\n\n workerThread.onError = error => queuedJob.onError(job, error);\n\n queuedJob.onStart(job);\n\n try {\n await job.result;\n } finally {\n this.returnWorkerToQueue(workerThread);\n }\n }\n }\n\n returnWorkerToQueue(worker) {\n const shouldDestroyWorker = this.isDestroyed || !this.reuseWorkers || this.count > this._getMaxConcurrency();\n\n if (shouldDestroyWorker) {\n worker.destroy();\n this.count--;\n } else {\n this.idleQueue.push(worker);\n }\n\n if (!this.isDestroyed) {\n this._startQueuedJob();\n }\n }\n\n _getAvailableWorker() {\n if (this.idleQueue.length > 0) {\n return this.idleQueue.shift() || null;\n }\n\n if (this.count < this._getMaxConcurrency()) {\n this.count++;\n const name = \"\".concat(this.name.toLowerCase(), \" (#\").concat(this.count, \" of \").concat(this.maxConcurrency, \")\");\n return new WorkerThread({\n name,\n source: this.source,\n url: this.url\n });\n }\n\n return null;\n }\n\n _getMaxConcurrency() {\n return isMobile ? this.maxMobileConcurrency : this.maxConcurrency;\n }\n\n}\n//# sourceMappingURL=worker-pool.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport WorkerPool from './worker-pool';\nimport WorkerThread from './worker-thread';\nconst DEFAULT_PROPS = {\n maxConcurrency: 3,\n maxMobileConcurrency: 1,\n reuseWorkers: true,\n onDebug: () => {}\n};\nexport default class WorkerFarm {\n static isSupported() {\n return WorkerThread.isSupported();\n }\n\n static getWorkerFarm(props = {}) {\n WorkerFarm._workerFarm = WorkerFarm._workerFarm || new WorkerFarm({});\n\n WorkerFarm._workerFarm.setProps(props);\n\n return WorkerFarm._workerFarm;\n }\n\n constructor(props) {\n _defineProperty(this, \"props\", void 0);\n\n _defineProperty(this, \"workerPools\", new Map());\n\n this.props = { ...DEFAULT_PROPS\n };\n this.setProps(props);\n this.workerPools = new Map();\n }\n\n destroy() {\n for (const workerPool of this.workerPools.values()) {\n workerPool.destroy();\n }\n\n this.workerPools = new Map();\n }\n\n setProps(props) {\n this.props = { ...this.props,\n ...props\n };\n\n for (const workerPool of this.workerPools.values()) {\n workerPool.setProps(this._getWorkerPoolProps());\n }\n }\n\n getWorkerPool(options) {\n const {\n name,\n source,\n url\n } = options;\n let workerPool = this.workerPools.get(name);\n\n if (!workerPool) {\n workerPool = new WorkerPool({\n name,\n source,\n url\n });\n workerPool.setProps(this._getWorkerPoolProps());\n this.workerPools.set(name, workerPool);\n }\n\n return workerPool;\n }\n\n _getWorkerPoolProps() {\n return {\n maxConcurrency: this.props.maxConcurrency,\n maxMobileConcurrency: this.props.maxMobileConcurrency,\n reuseWorkers: this.props.reuseWorkers,\n onDebug: this.props.onDebug\n };\n }\n\n}\n\n_defineProperty(WorkerFarm, \"_workerFarm\", void 0);\n//# sourceMappingURL=worker-farm.js.map","export async function* makeTextDecoderIterator(arrayBufferIterator, options = {}) {\n const textDecoder = new TextDecoder(undefined, options);\n\n for await (const arrayBuffer of arrayBufferIterator) {\n yield typeof arrayBuffer === 'string' ? arrayBuffer : textDecoder.decode(arrayBuffer, {\n stream: true\n });\n }\n}\nexport async function* makeTextEncoderIterator(textIterator) {\n const textEncoder = new TextEncoder();\n\n for await (const text of textIterator) {\n yield typeof text === 'string' ? textEncoder.encode(text) : text;\n }\n}\nexport async function* makeLineIterator(textIterator) {\n let previous = '';\n\n for await (const textChunk of textIterator) {\n previous += textChunk;\n let eolIndex;\n\n while ((eolIndex = previous.indexOf('\\n')) >= 0) {\n const line = previous.slice(0, eolIndex + 1);\n previous = previous.slice(eolIndex + 1);\n yield line;\n }\n }\n\n if (previous.length > 0) {\n yield previous;\n }\n}\nexport async function* makeNumberedLineIterator(lineIterator) {\n let counter = 1;\n\n for await (const line of lineIterator) {\n yield {\n counter,\n line\n };\n counter++;\n }\n}\n//# sourceMappingURL=text-iterators.js.map","export function getFirstCharacters(data, length = 5) {\n if (typeof data === 'string') {\n return data.slice(0, length);\n } else if (ArrayBuffer.isView(data)) {\n return getMagicString(data.buffer, data.byteOffset, length);\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n return getMagicString(data, byteOffset, length);\n }\n\n return '';\n}\nexport function getMagicString(arrayBuffer, byteOffset, length) {\n if (arrayBuffer.byteLength <= byteOffset + length) {\n return '';\n }\n\n const dataView = new DataView(arrayBuffer);\n let magic = '';\n\n for (let i = 0; i < length; i++) {\n magic += String.fromCharCode(dataView.getUint8(byteOffset + i));\n }\n\n return magic;\n}\n//# sourceMappingURL=get-first-characters.js.map","export default function getHiResTimestamp() {\n let timestamp;\n\n if (typeof window !== 'undefined' && window.performance) {\n timestamp = window.performance.now();\n } else if (typeof process !== 'undefined' && process.hrtime) {\n const timeParts = process.hrtime();\n timestamp = timeParts[0] * 1000 + timeParts[1] / 1e6;\n } else {\n timestamp = Date.now();\n }\n\n return timestamp;\n}\n//# sourceMappingURL=hi-res-timestamp.js.map","import {COMPONENT_SYMBOL} from './constants';\nimport {PropType} from './prop-types';\n\nexport function validateProps(props) {\n const propTypes = getPropTypes(props);\n\n for (const propName in propTypes) {\n const propType = propTypes[propName];\n const {validate} = propType;\n if (validate && !validate(props[propName], propType)) {\n throw new Error(`Invalid prop ${propName}: ${props[propName]}`);\n }\n }\n}\n\n// Returns an object with \"change flags\", either false or strings indicating reason for change\nexport function diffProps(\n props,\n oldProps\n): {\n dataChanged: string | false | {startRow: number; endRow?: number}[];\n propsChanged: string | false;\n updateTriggersChanged: Record | false;\n extensionsChanged: boolean;\n transitionsChanged: Record | false;\n} {\n // First check if any props have changed (ignore props that will be examined separately)\n const propsChangedReason = compareProps({\n newProps: props,\n oldProps,\n propTypes: getPropTypes(props),\n ignoreProps: {data: null, updateTriggers: null, extensions: null, transitions: null}\n });\n\n // Now check if any data related props have changed\n const dataChangedReason = diffDataProps(props, oldProps);\n\n // Check update triggers to determine if any attributes need regeneration\n // Note - if data has changed, all attributes will need regeneration, so skip this step\n let updateTriggersChangedReason: false | string | Record = false;\n if (!dataChangedReason) {\n updateTriggersChangedReason = diffUpdateTriggers(props, oldProps);\n }\n\n return {\n dataChanged: dataChangedReason,\n propsChanged: propsChangedReason,\n updateTriggersChanged: updateTriggersChangedReason,\n extensionsChanged: diffExtensions(props, oldProps),\n transitionsChanged: diffTransitions(props, oldProps)\n };\n}\n\nfunction diffTransitions(props, oldProps): false | Record {\n if (!props.transitions) {\n return false;\n }\n const result: Record = {};\n const propTypes = getPropTypes(props);\n let changed = false;\n\n for (const key in props.transitions) {\n const propType = propTypes[key];\n const type = propType && propType.type;\n const isTransitionable = type === 'number' || type === 'color' || type === 'array';\n if (isTransitionable && comparePropValues(props[key], oldProps[key], propType)) {\n result[key] = true;\n changed = true;\n }\n }\n return changed ? result : false;\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * @param {Object} opt.oldProps - object with old key/value pairs\n * @param {Object} opt.newProps - object with new key/value pairs\n * @param {Object} opt.ignoreProps={} - object, keys that should not be compared\n * @returns {null|String} - null when values of all keys are strictly equal.\n * if unequal, returns a string explaining what changed.\n */\n/* eslint-disable max-statements, max-depth, complexity */\n/*\n * Note: for better performance, this function assumes that both oldProps and newProps\n inherit the same prototype (defaultProps). That is, if neither object contains own\n property , assume `oldProps.` and `newProps.` are equal.\n */\nexport function compareProps({\n newProps,\n oldProps,\n ignoreProps = {},\n propTypes = {},\n triggerName = 'props'\n}): string | false {\n // shallow equality => deep equality\n if (oldProps === newProps) {\n return false;\n }\n\n // TODO - do we need these checks? Should never happen...\n if (typeof newProps !== 'object' || newProps === null) {\n return `${triggerName} changed shallowly`;\n }\n\n if (typeof oldProps !== 'object' || oldProps === null) {\n return `${triggerName} changed shallowly`;\n }\n\n // Compare explicitly defined new props against old/default values\n for (const key of Object.keys(newProps)) {\n if (!(key in ignoreProps)) {\n if (!(key in oldProps)) {\n return `${triggerName}.${key} added`;\n }\n const changed = comparePropValues(newProps[key], oldProps[key], propTypes[key]);\n if (changed) {\n return `${triggerName}.${key} ${changed}`;\n }\n }\n }\n\n // Test if any old props have been dropped\n for (const key of Object.keys(oldProps)) {\n if (!(key in ignoreProps)) {\n if (!(key in newProps)) {\n return `${triggerName}.${key} dropped`;\n }\n if (!Object.hasOwnProperty.call(newProps, key)) {\n // Compare dropped old prop against default value\n const changed = comparePropValues(newProps[key], oldProps[key], propTypes[key]);\n if (changed) {\n return `${triggerName}.${key} ${changed}`;\n }\n }\n }\n }\n\n return false;\n}\n/* eslint-enable max-statements, max-depth, complexity */\n\n// HELPERS\nfunction comparePropValues(newProp, oldProp, propType) {\n // If prop type has an equal function, invoke it\n let equal = propType && propType.equal;\n if (equal && !equal(newProp, oldProp, propType)) {\n return 'changed deeply';\n }\n\n if (!equal) {\n // If object has an equals function, invoke it\n equal = newProp && oldProp && newProp.equals;\n if (equal && !equal.call(newProp, oldProp)) {\n return 'changed deeply';\n }\n }\n\n if (!equal && oldProp !== newProp) {\n return 'changed shallowly';\n }\n\n return null;\n}\n\n// The comparison of the data prop requires special handling\n// the dataComparator should be used if supplied\nfunction diffDataProps(props, oldProps): string | false | {startRow: number; endRow?: number}[] {\n if (oldProps === null) {\n return 'oldProps is null, initial diff';\n }\n\n let dataChanged: string | false | {startRow: number; endRow?: number}[] = false;\n // Support optional app defined comparison of data\n const {dataComparator, _dataDiff} = props;\n if (dataComparator) {\n if (!dataComparator(props.data, oldProps.data)) {\n dataChanged = 'Data comparator detected a change';\n }\n // Otherwise, do a shallow equal on props\n } else if (props.data !== oldProps.data) {\n dataChanged = 'A new data container was supplied';\n }\n if (dataChanged && _dataDiff) {\n dataChanged = _dataDiff(props.data, oldProps.data) || dataChanged;\n }\n\n return dataChanged;\n}\n\n// Checks if any update triggers have changed\n// also calls callback to invalidate attributes accordingly.\nfunction diffUpdateTriggers(props, oldProps): Record | false {\n if (oldProps === null) {\n return {all: true};\n }\n\n // If the 'all' updateTrigger fires, ignore testing others\n if ('all' in props.updateTriggers) {\n const diffReason = diffUpdateTrigger(props, oldProps, 'all');\n if (diffReason) {\n return {all: true};\n }\n }\n\n const reason: Record = {};\n let changed = false;\n // If the 'all' updateTrigger didn't fire, need to check all others\n for (const triggerName in props.updateTriggers) {\n if (triggerName !== 'all') {\n const diffReason = diffUpdateTrigger(props, oldProps, triggerName);\n if (diffReason) {\n reason[triggerName] = true;\n changed = true;\n }\n }\n }\n\n return changed ? reason : false;\n}\n\n// Returns true if any extensions have changed\nfunction diffExtensions(props, oldProps): boolean {\n if (oldProps === null) {\n return true;\n }\n\n const oldExtensions = oldProps.extensions;\n const {extensions} = props;\n\n if (extensions === oldExtensions) {\n return false;\n }\n if (!oldExtensions || !extensions) {\n return true;\n }\n if (extensions.length !== oldExtensions.length) {\n return true;\n }\n for (let i = 0; i < extensions.length; i++) {\n if (!extensions[i].equals(oldExtensions[i])) {\n return true;\n }\n }\n return false;\n}\n\nfunction diffUpdateTrigger(props, oldProps, triggerName) {\n let newTriggers = props.updateTriggers[triggerName];\n newTriggers = newTriggers === undefined || newTriggers === null ? {} : newTriggers;\n let oldTriggers = oldProps.updateTriggers[triggerName];\n oldTriggers = oldTriggers === undefined || oldTriggers === null ? {} : oldTriggers;\n const diffReason = compareProps({\n oldProps: oldTriggers,\n newProps: newTriggers,\n triggerName\n });\n return diffReason;\n}\n\nfunction getPropTypes(props): Record {\n const layer = props[COMPONENT_SYMBOL];\n const LayerType = layer && layer.constructor;\n return LayerType ? LayerType._propTypes : {};\n}\n","import {default as LayersPass} from './layers-pass';\nimport {\n Framebuffer,\n Texture2D,\n Renderbuffer,\n withParameters,\n cssToDeviceRatio\n} from '@luma.gl/core';\n\nexport default class ShadowPass extends LayersPass {\n shadowMap: Texture2D;\n depthBuffer: Renderbuffer;\n fbo: Framebuffer;\n\n constructor(\n gl: WebGLRenderingContext,\n props?: {\n id;\n }\n ) {\n super(gl, props);\n\n // The shadowMap texture\n this.shadowMap = new Texture2D(gl, {\n width: 1,\n height: 1,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.LINEAR,\n [gl.TEXTURE_MAG_FILTER]: gl.LINEAR,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n });\n\n this.depthBuffer = new Renderbuffer(gl, {\n format: gl.DEPTH_COMPONENT16,\n width: 1,\n height: 1\n });\n\n this.fbo = new Framebuffer(gl, {\n id: 'shadowmap',\n width: 1,\n height: 1,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: this.shadowMap,\n // Depth attachment has to be specified for depth test to work\n [gl.DEPTH_ATTACHMENT]: this.depthBuffer\n }\n });\n }\n\n render(params) {\n const target = this.fbo;\n\n withParameters(\n this.gl,\n {\n depthRange: [0, 1],\n depthTest: true,\n blend: false,\n clearColor: [1, 1, 1, 1]\n },\n () => {\n const viewport = params.viewports[0];\n const pixelRatio = cssToDeviceRatio(this.gl);\n const width = viewport.width * pixelRatio;\n const height = viewport.height * pixelRatio;\n if (width !== target.width || height !== target.height) {\n target.resize({width, height});\n }\n\n super.render({...params, target, pass: 'shadow'});\n }\n );\n }\n\n shouldDrawLayer(layer) {\n return layer.props.shadowEnabled !== false;\n }\n\n getModuleParameters() {\n return {\n drawToShadowMap: true\n };\n }\n\n delete() {\n if (this.fbo) {\n this.fbo.delete();\n this.fbo = null;\n }\n\n if (this.shadowMap) {\n this.shadowMap.delete();\n this.shadowMap = null;\n }\n\n if (this.depthBuffer) {\n this.depthBuffer.delete();\n this.depthBuffer = null;\n }\n }\n}\n","import {Texture2D, ProgramManager} from '@luma.gl/core';\nimport {AmbientLight} from './ambient-light';\nimport {DirectionalLight} from './directional-light';\nimport {PointLight} from './point-light';\nimport {Matrix4, Vector3} from '@math.gl/core';\nimport ShadowPass from '../../passes/shadow-pass';\nimport shadow from '../../shaderlib/shadow/shadow';\n\nimport type Layer from '../../lib/layer';\nimport type {Effect, PreRenderOptions} from '../../lib/effect';\n\nconst DEFAULT_AMBIENT_LIGHT_PROPS = {color: [255, 255, 255], intensity: 1.0};\nconst DEFAULT_DIRECTIONAL_LIGHT_PROPS = [\n {\n color: [255, 255, 255],\n intensity: 1.0,\n direction: [-1, 3, -1]\n },\n {\n color: [255, 255, 255],\n intensity: 0.9,\n direction: [1, -8, -2.5]\n }\n];\nconst DEFAULT_SHADOW_COLOR = [0, 0, 0, 200 / 255];\n\n// Class to manage ambient, point and directional light sources in deck\nexport default class LightingEffect implements Effect {\n id = 'lighting-effect';\n props = null;\n shadowColor: number[] = DEFAULT_SHADOW_COLOR;\n\n private shadow: boolean;\n private ambientLight: AmbientLight | null = null;\n private directionalLights: DirectionalLight[] = [];\n private pointLights: PointLight[] = [];\n private shadowPasses: ShadowPass[] = [];\n private shadowMaps: Texture2D[] = [];\n private dummyShadowMap: Texture2D | null = null;\n private programManager?: ProgramManager;\n private shadowMatrices?: Matrix4[];\n\n constructor(props: Record = {}) {\n for (const key in props) {\n const lightSource = props[key];\n\n switch (lightSource.type) {\n case 'ambient':\n this.ambientLight = lightSource;\n break;\n\n case 'directional':\n this.directionalLights.push(lightSource as DirectionalLight);\n break;\n\n case 'point':\n this.pointLights.push(lightSource as PointLight);\n break;\n default:\n }\n }\n this._applyDefaultLights();\n\n this.shadow = this.directionalLights.some(light => light.shadow);\n }\n\n preRender(\n gl: WebGLRenderingContext,\n {layers, layerFilter, viewports, onViewportActive, views}: PreRenderOptions\n ) {\n if (!this.shadow) return;\n\n // create light matrix every frame to make sure always updated from light source\n this.shadowMatrices = this._calculateMatrices();\n\n if (this.shadowPasses.length === 0) {\n this._createShadowPasses(gl);\n }\n if (!this.programManager) {\n // TODO - support multiple contexts\n this.programManager = ProgramManager.getDefaultProgramManager(gl);\n if (shadow) {\n this.programManager.addDefaultModule(shadow);\n }\n }\n\n if (!this.dummyShadowMap) {\n this.dummyShadowMap = new Texture2D(gl, {\n width: 1,\n height: 1\n });\n }\n\n for (let i = 0; i < this.shadowPasses.length; i++) {\n const shadowPass = this.shadowPasses[i];\n shadowPass.render({\n layers,\n layerFilter,\n viewports,\n onViewportActive,\n views,\n moduleParameters: {\n shadowLightId: i,\n dummyShadowMap: this.dummyShadowMap,\n shadowMatrices: this.shadowMatrices\n }\n });\n }\n }\n\n getModuleParameters(layer: Layer) {\n const parameters: {\n lightSources?: {\n ambientLight: AmbientLight | null;\n directionalLights: DirectionalLight[];\n pointLights: PointLight[];\n };\n shadowMaps?: Texture2D[];\n dummyShadowMap?: Texture2D;\n shadowColor?: number[];\n shadowMatrices?: Matrix4[];\n } = this.shadow\n ? {\n shadowMaps: this.shadowMaps,\n dummyShadowMap: this.dummyShadowMap,\n shadowColor: this.shadowColor,\n shadowMatrices: this.shadowMatrices\n }\n : {};\n\n // when not rendering to screen, turn off lighting by adding empty light source object\n // lights shader module relies on the `lightSources` to turn on/off lighting\n parameters.lightSources = {\n ambientLight: this.ambientLight,\n directionalLights: this.directionalLights.map(directionalLight =>\n directionalLight.getProjectedLight({layer})\n ),\n pointLights: this.pointLights.map(pointLight => pointLight.getProjectedLight({layer}))\n };\n\n return parameters;\n }\n\n cleanup(): void {\n for (const shadowPass of this.shadowPasses) {\n shadowPass.delete();\n }\n this.shadowPasses.length = 0;\n this.shadowMaps.length = 0;\n\n if (this.dummyShadowMap) {\n this.dummyShadowMap.delete();\n this.dummyShadowMap = null;\n }\n\n if (this.shadow && this.programManager) {\n this.programManager.removeDefaultModule(shadow);\n this.programManager = null;\n }\n }\n\n private _calculateMatrices(): Matrix4[] {\n const lightMatrices: Matrix4[] = [];\n for (const light of this.directionalLights) {\n const viewMatrix = new Matrix4().lookAt({\n eye: new Vector3(light.direction).negate()\n });\n\n lightMatrices.push(viewMatrix);\n }\n return lightMatrices;\n }\n\n private _createShadowPasses(gl: WebGLRenderingContext): void {\n for (let i = 0; i < this.directionalLights.length; i++) {\n const shadowPass = new ShadowPass(gl);\n this.shadowPasses[i] = shadowPass;\n this.shadowMaps[i] = shadowPass.shadowMap;\n }\n }\n\n private _applyDefaultLights(): void {\n const {ambientLight, pointLights, directionalLights} = this;\n if (!ambientLight && pointLights.length === 0 && directionalLights.length === 0) {\n this.ambientLight = new AmbientLight(DEFAULT_AMBIENT_LIGHT_PROPS);\n this.directionalLights.push(\n new DirectionalLight(DEFAULT_DIRECTIONAL_LIGHT_PROPS[0]),\n new DirectionalLight(DEFAULT_DIRECTIONAL_LIGHT_PROPS[1])\n );\n }\n }\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__133__;","import isElectron from './is-electron';\nexport default function isBrowser() {\n const isNode = typeof process === 'object' && String(process) === '[object process]' && !process.browser;\n return !isNode || isElectron();\n}\nexport function isBrowserMainThread() {\n return isBrowser() && typeof document !== 'undefined';\n}\n//# sourceMappingURL=is-browser.js.map","import { log } from '@luma.gl/gltools';\nexport function checkProps(className, props, propChecks) {\n const {\n removedProps = {},\n deprecatedProps = {},\n replacedProps = {}\n } = propChecks;\n\n for (const propName in removedProps) {\n if (propName in props) {\n const replacementProp = removedProps[propName];\n const replacement = replacementProp ? \"\".concat(className, \".\").concat(removedProps[propName]) : 'N/A';\n log.removed(\"\".concat(className, \".\").concat(propName), replacement)();\n }\n }\n\n for (const propName in deprecatedProps) {\n if (propName in props) {\n const replacementProp = deprecatedProps[propName];\n log.deprecated(\"\".concat(className, \".\").concat(propName), \"\".concat(className, \".\").concat(replacementProp))();\n }\n }\n\n let newProps = null;\n\n for (const propName in replacedProps) {\n if (propName in props) {\n const replacementProp = replacedProps[propName];\n log.deprecated(\"\".concat(className, \".\").concat(propName), \"\".concat(className, \".\").concat(replacementProp))();\n newProps = newProps || Object.assign({}, props);\n newProps[replacementProp] = props[propName];\n delete newProps[propName];\n }\n }\n\n return newProps || props;\n}\n//# sourceMappingURL=check-props.js.map","export default function assert(condition, message) {\n if (!condition) {\n throw new Error(\"math.gl assertion \".concat(message));\n }\n}\n//# sourceMappingURL=assert.js.map","/**\n * Projection utils\n * TODO: move to Viewport class?\n */\nimport {COORDINATE_SYSTEM} from '../../lib/constants';\nimport {getOffsetOrigin} from './viewport-uniforms';\nimport WebMercatorViewport from '../../viewports/web-mercator-viewport';\n\nimport * as vec4 from 'gl-matrix/vec4';\nimport * as vec3 from 'gl-matrix/vec3';\nimport {addMetersToLngLat} from '@math.gl/web-mercator';\n\nimport type {CoordinateSystem} from '../../lib/constants';\nimport type Viewport from '../../viewports/viewport';\nimport type {NumericArray} from '../../types/types';\n\n// In project.glsl, offset modes calculate z differently from LNG_LAT mode.\n// offset modes apply the y adjustment (unitsPerMeter2) when projecting z\n// LNG_LAT mode only use the linear scale.\nfunction lngLatZToWorldPosition(\n lngLatZ: [number, number, number],\n viewport: Viewport,\n offsetMode: boolean = false\n): [number, number, number] {\n const p = viewport.projectPosition(lngLatZ);\n\n // TODO - avoid using instanceof\n if (offsetMode && viewport instanceof WebMercatorViewport) {\n const [longitude, latitude, z = 0] = lngLatZ;\n const distanceScales = viewport.getDistanceScales([longitude, latitude]);\n p[2] = z * distanceScales.unitsPerMeter[2];\n }\n return p;\n}\n\nfunction normalizeParameters(opts: {\n viewport: Viewport;\n coordinateSystem: CoordinateSystem;\n coordinateOrigin: [number, number, number];\n modelMatrix?: NumericArray | null;\n fromCoordinateSystem?: CoordinateSystem;\n fromCoordinateOrigin?: [number, number, number];\n}): {\n viewport: Viewport;\n coordinateSystem: CoordinateSystem;\n coordinateOrigin: [number, number, number];\n modelMatrix?: NumericArray | null;\n fromCoordinateSystem: CoordinateSystem;\n fromCoordinateOrigin: [number, number, number];\n} {\n const {viewport, modelMatrix, coordinateOrigin} = opts;\n let {coordinateSystem, fromCoordinateSystem, fromCoordinateOrigin} = opts;\n\n if (coordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n coordinateSystem = viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN;\n }\n\n if (fromCoordinateSystem === undefined) {\n fromCoordinateSystem = coordinateSystem;\n }\n if (fromCoordinateOrigin === undefined) {\n fromCoordinateOrigin = coordinateOrigin;\n }\n\n return {\n viewport,\n coordinateSystem,\n coordinateOrigin,\n modelMatrix,\n fromCoordinateSystem,\n fromCoordinateOrigin\n };\n}\n\n/** Get the common space position from world coordinates in the given coordinate system */\nexport function getWorldPosition(\n position: number[],\n {\n viewport,\n modelMatrix,\n coordinateSystem,\n coordinateOrigin,\n offsetMode\n }: {\n viewport: Viewport;\n modelMatrix?: NumericArray | null;\n coordinateSystem: CoordinateSystem;\n coordinateOrigin: [number, number, number];\n offsetMode?: boolean;\n }\n): [number, number, number] {\n let [x, y, z = 0] = position;\n\n if (modelMatrix) {\n [x, y, z] = vec4.transformMat4([], [x, y, z, 1.0], modelMatrix);\n }\n\n switch (coordinateSystem) {\n case COORDINATE_SYSTEM.LNGLAT:\n return lngLatZToWorldPosition([x, y, z], viewport, offsetMode);\n\n case COORDINATE_SYSTEM.LNGLAT_OFFSETS:\n return lngLatZToWorldPosition(\n [x + coordinateOrigin[0], y + coordinateOrigin[1], z + (coordinateOrigin[2] || 0)],\n viewport,\n offsetMode\n );\n\n case COORDINATE_SYSTEM.METER_OFFSETS:\n return lngLatZToWorldPosition(\n addMetersToLngLat(coordinateOrigin, [x, y, z]) as [number, number, number],\n viewport,\n offsetMode\n );\n\n case COORDINATE_SYSTEM.CARTESIAN:\n default:\n return viewport.isGeospatial\n ? [x + coordinateOrigin[0], y + coordinateOrigin[1], z + coordinateOrigin[2]]\n : viewport.projectPosition([x, y, z]);\n }\n}\n\n/**\n * Equivalent to project_position in project.glsl\n * projects a user supplied position to world position directly with or without\n * a reference coordinate system\n */\nexport function projectPosition(\n position: number[],\n params: {\n /** The current viewport */\n viewport: Viewport;\n /** The reference coordinate system used to align world position */\n coordinateSystem: CoordinateSystem;\n /** The reference coordinate origin used to align world position */\n coordinateOrigin: [number, number, number];\n /** The model matrix of the supplied position */\n modelMatrix?: NumericArray | null;\n /** The coordinate system that the supplied position is in. Default to the same as `coordinateSystem`. */\n fromCoordinateSystem?: CoordinateSystem;\n /** The coordinate origin that the supplied position is in. Default to the same as `coordinateOrigin`. */\n fromCoordinateOrigin?: [number, number, number];\n }\n): [number, number, number] {\n const {\n viewport,\n coordinateSystem,\n coordinateOrigin,\n modelMatrix,\n fromCoordinateSystem,\n fromCoordinateOrigin\n } = normalizeParameters(params);\n\n const {geospatialOrigin, shaderCoordinateOrigin, offsetMode} = getOffsetOrigin(\n viewport,\n coordinateSystem,\n coordinateOrigin\n );\n\n const worldPosition = getWorldPosition(position, {\n viewport,\n modelMatrix,\n coordinateSystem: fromCoordinateSystem,\n coordinateOrigin: fromCoordinateOrigin,\n offsetMode\n });\n\n if (offsetMode) {\n const positionCommonSpace = viewport.projectPosition(\n geospatialOrigin || shaderCoordinateOrigin\n );\n vec3.sub(worldPosition, worldPosition, positionCommonSpace);\n }\n\n return worldPosition;\n}\n","export default \"#if (defined(SHADER_TYPE_FRAGMENT) && defined(LIGHTING_FRAGMENT)) || (defined(SHADER_TYPE_VERTEX) && defined(LIGHTING_VERTEX))\\n\\nstruct AmbientLight {\\n vec3 color;\\n};\\n\\nstruct PointLight {\\n vec3 color;\\n vec3 position;\\n vec3 attenuation;\\n};\\n\\nstruct DirectionalLight {\\n vec3 color;\\n vec3 direction;\\n};\\n\\nuniform AmbientLight lighting_uAmbientLight;\\nuniform PointLight lighting_uPointLight[MAX_LIGHTS];\\nuniform DirectionalLight lighting_uDirectionalLight[MAX_LIGHTS];\\nuniform int lighting_uPointLightCount;\\nuniform int lighting_uDirectionalLightCount;\\n\\nuniform bool lighting_uEnabled;\\n\\nfloat getPointLightAttenuation(PointLight pointLight, float distance) {\\n return pointLight.attenuation.x\\n + pointLight.attenuation.y * distance\\n + pointLight.attenuation.z * distance * distance;\\n}\\n\\n#endif\\n\";\n//# sourceMappingURL=lights.glsl.js.map","import lightingShader from './lights.glsl';\nconst INITIAL_MODULE_OPTIONS = {\n lightSources: {}\n};\n\nfunction convertColor() {\n let {\n color = [0, 0, 0],\n intensity = 1.0\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return color.map(component => component * intensity / 255.0);\n}\n\nfunction getLightSourceUniforms(_ref) {\n let {\n ambientLight,\n pointLights = [],\n directionalLights = []\n } = _ref;\n const lightSourceUniforms = {};\n\n if (ambientLight) {\n lightSourceUniforms['lighting_uAmbientLight.color'] = convertColor(ambientLight);\n } else {\n lightSourceUniforms['lighting_uAmbientLight.color'] = [0, 0, 0];\n }\n\n pointLights.forEach((pointLight, index) => {\n lightSourceUniforms[\"lighting_uPointLight[\".concat(index, \"].color\")] = convertColor(pointLight);\n lightSourceUniforms[\"lighting_uPointLight[\".concat(index, \"].position\")] = pointLight.position;\n lightSourceUniforms[\"lighting_uPointLight[\".concat(index, \"].attenuation\")] = pointLight.attenuation || [1, 0, 0];\n });\n lightSourceUniforms.lighting_uPointLightCount = pointLights.length;\n directionalLights.forEach((directionalLight, index) => {\n lightSourceUniforms[\"lighting_uDirectionalLight[\".concat(index, \"].color\")] = convertColor(directionalLight);\n lightSourceUniforms[\"lighting_uDirectionalLight[\".concat(index, \"].direction\")] = directionalLight.direction;\n });\n lightSourceUniforms.lighting_uDirectionalLightCount = directionalLights.length;\n return lightSourceUniforms;\n}\n\nfunction getUniforms() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : INITIAL_MODULE_OPTIONS;\n\n if ('lightSources' in opts) {\n const {\n ambientLight,\n pointLights,\n directionalLights\n } = opts.lightSources || {};\n const hasLights = ambientLight || pointLights && pointLights.length > 0 || directionalLights && directionalLights.length > 0;\n\n if (!hasLights) {\n return {\n lighting_uEnabled: false\n };\n }\n\n return Object.assign({}, getLightSourceUniforms({\n ambientLight,\n pointLights,\n directionalLights\n }), {\n lighting_uEnabled: true\n });\n }\n\n if ('lights' in opts) {\n const lightSources = {\n pointLights: [],\n directionalLights: []\n };\n\n for (const light of opts.lights || []) {\n switch (light.type) {\n case 'ambient':\n lightSources.ambientLight = light;\n break;\n\n case 'directional':\n lightSources.directionalLights.push(light);\n break;\n\n case 'point':\n lightSources.pointLights.push(light);\n break;\n\n default:\n }\n }\n\n return getUniforms({\n lightSources\n });\n }\n\n return {};\n}\n\nexport const lights = {\n name: 'lights',\n vs: lightingShader,\n fs: lightingShader,\n getUniforms,\n defines: {\n MAX_LIGHTS: 3\n }\n};\n//# sourceMappingURL=lights.js.map","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","import { assert } from '../env-utils/assert';\nexport function padToNBytes(byteLength, padding) {\n assert(byteLength >= 0);\n assert(padding > 0);\n return byteLength + (padding - 1) & ~(padding - 1);\n}\nexport function copyArrayBuffer(targetBuffer, sourceBuffer, byteOffset, byteLength = sourceBuffer.byteLength) {\n const targetArray = new Uint8Array(targetBuffer, byteOffset, byteLength);\n const sourceArray = new Uint8Array(sourceBuffer);\n targetArray.set(sourceArray);\n return targetBuffer;\n}\nexport function copyToArray(source, target, targetOffset) {\n let sourceArray;\n\n if (source instanceof ArrayBuffer) {\n sourceArray = new Uint8Array(source);\n } else {\n const srcByteOffset = source.byteOffset;\n const srcByteLength = source.byteLength;\n sourceArray = new Uint8Array(source.buffer || source.arrayBuffer, srcByteOffset, srcByteLength);\n }\n\n target.set(sourceArray, targetOffset);\n return targetOffset + padToNBytes(sourceArray.byteLength, 4);\n}\n//# sourceMappingURL=memory-copy-utils.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable max-len */\n\nexport {default as SimpleMeshLayer} from './simple-mesh-layer/simple-mesh-layer';\nexport {default as ScenegraphLayer} from './scenegraph-layer/scenegraph-layer';\n\nexport type {ScenegraphLayerProps} from './scenegraph-layer/scenegraph-layer';\nexport type {SimpleMeshLayerProps} from './simple-mesh-layer/simple-mesh-layer';\n","const DEFAULT_LIGHT_COLOR = [255, 255, 255];\nconst DEFAULT_LIGHT_INTENSITY = 1.0;\n\nlet idCount = 0;\n\nexport type AmbientLightOptions = {\n id?: string;\n /** Light color, [r, g, b] in the 0-255 range\n * @default [255, 255, 255]\n */\n color?: number[];\n /** Light intensity, higher number is brighter\n * @default 1.0\n */\n intensity?: number;\n};\n\nexport class AmbientLight {\n id: string;\n color: number[];\n intensity: number;\n type = 'ambient';\n\n constructor(props: AmbientLightOptions = {}) {\n const {color = DEFAULT_LIGHT_COLOR} = props;\n const {intensity = DEFAULT_LIGHT_INTENSITY} = props;\n\n this.id = props.id || `ambient-${idCount++}`;\n this.color = color;\n this.intensity = intensity;\n }\n}\n","import View, {CommonViewState} from './view';\nimport WebMercatorViewport from '../viewports/web-mercator-viewport';\nimport MapController from '../controllers/map-controller';\n\nimport type {NumericArray} from '../types/types';\n\nexport type MapViewState = {\n /** Longitude of the map center */\n longitude: number;\n /** Latitude of the map center */\n latitude: number;\n /** Zoom level */\n zoom: number;\n /** Pitch (tilt) of the map, in degrees. `0` looks top down */\n pitch?: number;\n /** Bearing (rotation) of the map, in degrees. `0` is north up */\n bearing?: number;\n /** Min zoom, default `0` */\n minZoom?: number;\n /** Max zoom, default `20` */\n maxZoom?: number;\n /** Min pitch, default `0` */\n minPitch?: number;\n /** Max pitch, default `60` */\n maxPitch?: number;\n /** Viewport center offsets from lng, lat in meters */\n position?: number[];\n} & CommonViewState;\n\ntype MapViewProps = {\n /** Whether to render multiple copies of the map at low zoom levels. Default `false`. */\n repeat?: boolean;\n /** Scaler for the near plane, 1 unit equals to the height of the viewport. Default to `0.1`. Overwrites the `near` parameter. */\n nearZMultiplier?: boolean;\n /** Scaler for the far plane, 1 unit equals to the distance from the camera to the top edge of the screen. Default to `1.01`. Overwrites the `far` parameter. */\n farZMultiplier?: boolean;\n /** Custom projection matrix */\n projectionMatrix?: NumericArray;\n /** Field of view covered by the camera, in the perspective case. In degrees. If not supplied, will be calculated from `altitude`. */\n fovy?: number;\n /** Distance of the camera relative to viewport height. Default `1.5`. */\n altitude?: number;\n /** Whether to create an orthographic or perspective projection matrix. Default is `false` (perspective projection). */\n orthographic?: boolean;\n};\n\nexport default class MapView extends View {\n static displayName = 'MapView';\n\n get ViewportType() {\n return WebMercatorViewport;\n }\n\n get ControllerType() {\n return MapController;\n }\n}\n","import Transition, {TransitionSettings as BaseTransitionSettings} from '../transitions/transition';\nimport TransitionInterpolator from '../transitions/transition-interpolator';\nimport type {IViewState} from './view-state';\n\nimport type {Timeline} from '@luma.gl/core';\nimport type {InteractionState} from './controller';\n\nconst noop = () => {};\n\n// Enums cannot be directly exported as they are not transpiled correctly into ES5, see https://github.com/visgl/deck.gl/issues/7130\nexport const TRANSITION_EVENTS = {\n BREAK: 1,\n SNAP_TO_END: 2,\n IGNORE: 3\n} as const;\n\ntype TransitionEvent = 1 | 2 | 3;\n\nexport type TransitionProps = {\n /** Transition duration in milliseconds, default value 0, implies no transition. When using `FlyToInterpolator`, it can also be set to `'auto'`. */\n transitionDuration?: number | 'auto';\n /** An interpolator object that defines the transition behavior between two viewports. */\n transitionInterpolator?: TransitionInterpolator;\n /** Easing function that can be used to achieve effects like \"Ease-In-Cubic\", \"Ease-Out-Cubic\", etc. Default value performs Linear easing. */\n transitionEasing?: (t: number) => number;\n /** Controls how to process a new view state change that occurs during an existing transition. */\n transitionInterruption?: TransitionEvent;\n /** Callback fired when requested transition starts. */\n onTransitionStart?: (transition: Transition) => void;\n /** Callback fired when requested transition is interrupted. */\n onTransitionInterrupt?: (transition: Transition) => void;\n /** Callback fired when requested transition ends. */\n onTransitionEnd?: (transition: Transition) => void;\n};\n\nconst DEFAULT_EASING = t => t;\nconst DEFAULT_INTERRUPTION = TRANSITION_EVENTS.BREAK;\n\ntype TransitionSettings = BaseTransitionSettings & {\n interpolator: TransitionInterpolator;\n easing: (t: number) => number;\n interruption: TransitionEvent;\n startProps: Record;\n endProps: Record;\n};\n\nexport default class TransitionManager> {\n getControllerState: (props: any) => ControllerState;\n props?: TransitionProps;\n propsInTransition: Record | null;\n transition: Transition;\n onViewStateChange: (params: {\n viewState: Record;\n oldViewState: Record;\n }) => void;\n onStateChange: (state: InteractionState) => void;\n\n constructor(opts: {\n timeline: Timeline;\n getControllerState: (props: any) => ControllerState;\n onViewStateChange?: (params: {\n viewState: Record;\n oldViewState: Record;\n }) => void;\n onStateChange?: (state: InteractionState) => void;\n }) {\n this.getControllerState = opts.getControllerState;\n this.propsInTransition = null;\n this.transition = new Transition(opts.timeline);\n\n this.onViewStateChange = opts.onViewStateChange || noop;\n this.onStateChange = opts.onStateChange || noop;\n }\n\n finalize(): void {\n this.transition.cancel();\n }\n\n // Returns current transitioned viewport.\n getViewportInTransition(): Record | null {\n return this.propsInTransition;\n }\n\n // Process the vewiport change, either ignore or trigger a new transition.\n // Return true if a new transition is triggered, false otherwise.\n processViewStateChange(nextProps: TransitionProps) {\n let transitionTriggered = false;\n const currentProps = this.props;\n // Set this.props here as '_triggerTransition' calls '_updateViewport' that uses this.props.\n this.props = nextProps;\n\n // NOTE: Be cautious re-ordering statements in this function.\n if (!currentProps || this._shouldIgnoreViewportChange(currentProps, nextProps)) {\n return false;\n }\n\n if (this._isTransitionEnabled(nextProps)) {\n let startProps = currentProps;\n if (this.transition.inProgress) {\n const {interruption, endProps} = this.transition.settings as TransitionSettings;\n startProps = {\n ...currentProps,\n ...(interruption === TRANSITION_EVENTS.SNAP_TO_END\n ? endProps\n : this.propsInTransition || currentProps)\n };\n }\n\n this._triggerTransition(startProps, nextProps);\n\n transitionTriggered = true;\n } else {\n this.transition.cancel();\n }\n\n return transitionTriggered;\n }\n\n updateTransition() {\n this.transition.update();\n }\n\n // Helper methods\n\n _isTransitionEnabled(props: TransitionProps): boolean {\n const {transitionDuration, transitionInterpolator} = props;\n return (\n ((transitionDuration as number) > 0 || transitionDuration === 'auto') &&\n Boolean(transitionInterpolator)\n );\n }\n\n _isUpdateDueToCurrentTransition(props: TransitionProps): boolean {\n if (this.transition.inProgress && this.propsInTransition) {\n return (this.transition.settings as TransitionSettings).interpolator.arePropsEqual(\n props,\n this.propsInTransition\n );\n }\n return false;\n }\n\n _shouldIgnoreViewportChange(currentProps: TransitionProps, nextProps: TransitionProps): boolean {\n if (this.transition.inProgress) {\n // Ignore update if it is requested to be ignored\n return (\n (this.transition.settings as TransitionSettings).interruption ===\n TRANSITION_EVENTS.IGNORE ||\n // Ignore update if it is due to current active transition.\n this._isUpdateDueToCurrentTransition(nextProps)\n );\n }\n if (this._isTransitionEnabled(nextProps)) {\n // Ignore if none of the viewport props changed.\n return (nextProps.transitionInterpolator as TransitionInterpolator).arePropsEqual(\n currentProps,\n nextProps\n );\n }\n return true;\n }\n\n _triggerTransition(startProps: TransitionProps, endProps: TransitionProps): void {\n const startViewstate = this.getControllerState(startProps);\n const endViewStateProps = this.getControllerState(endProps).shortestPathFrom(startViewstate);\n\n // update transitionDuration for 'auto' mode\n const transitionInterpolator = endProps.transitionInterpolator as TransitionInterpolator;\n const duration = transitionInterpolator.getDuration\n ? transitionInterpolator.getDuration(startProps, endProps)\n : (endProps.transitionDuration as number);\n\n if (duration === 0) {\n return;\n }\n\n const initialProps = transitionInterpolator.initializeProps(startProps, endViewStateProps);\n\n this.propsInTransition = {};\n const transitionSettings: TransitionSettings = {\n duration,\n easing: endProps.transitionEasing || DEFAULT_EASING,\n interpolator: transitionInterpolator,\n interruption: endProps.transitionInterruption || DEFAULT_INTERRUPTION,\n\n startProps: initialProps.start,\n endProps: initialProps.end,\n\n onStart: endProps.onTransitionStart,\n onUpdate: this._onTransitionUpdate,\n onInterrupt: this._onTransitionEnd(endProps.onTransitionInterrupt),\n onEnd: this._onTransitionEnd(endProps.onTransitionEnd)\n };\n this.transition.start(transitionSettings);\n\n this.onStateChange({inTransition: true});\n\n this.updateTransition();\n }\n\n _onTransitionEnd(callback?: (transition: Transition) => void) {\n return transition => {\n this.propsInTransition = null;\n\n this.onStateChange({\n inTransition: false,\n isZooming: false,\n isPanning: false,\n isRotating: false\n });\n\n callback?.(transition);\n };\n }\n\n _onTransitionUpdate = transition => {\n // NOTE: Be cautious re-ordering statements in this function.\n const {\n time,\n settings: {interpolator, startProps, endProps, duration, easing}\n } = transition;\n const t = easing(time / duration);\n const viewport = interpolator.interpolateProps(startProps, endProps, t);\n\n // This gurantees all props (e.g. bearing, longitude) are normalized\n // So when viewports are compared they are in same range.\n this.propsInTransition = this.getControllerState({\n ...this.props,\n ...viewport\n }).getViewportProps();\n\n this.onViewStateChange({\n viewState: this.propsInTransition,\n oldViewState: this.props as TransitionProps\n });\n };\n}\n","const DEFAULT_VERSION = 'latest';\nexport const VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : DEFAULT_VERSION;\n\nif (typeof \"3.2.10\" === 'undefined') {\n console.error('loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.');\n}\n//# sourceMappingURL=version.js.map","import { concatenateArrayBuffers } from '../binary-utils/array-buffer-utils';\nexport async function forEach(iterator, visitor) {\n while (true) {\n const {\n done,\n value\n } = await iterator.next();\n\n if (done) {\n iterator.return();\n return;\n }\n\n const cancel = visitor(value);\n\n if (cancel) {\n return;\n }\n }\n}\nexport async function concatenateArrayBuffersAsync(asyncIterator) {\n const arrayBuffers = [];\n\n for await (const chunk of asyncIterator) {\n arrayBuffers.push(chunk);\n }\n\n return concatenateArrayBuffers(...arrayBuffers);\n}\nexport async function concatenateStringsAsync(asyncIterator) {\n const strings = [];\n\n for await (const chunk of asyncIterator) {\n strings.push(chunk);\n }\n\n return strings.join('');\n}\n//# sourceMappingURL=async-iteration.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {ProgramManager} from '@luma.gl/core';\nimport {gouraudLighting, phongLighting} from '@luma.gl/core';\nimport project from './project/project';\nimport project32 from './project32/project32';\nimport shadow from './shadow/shadow';\nimport picking from './picking/picking';\n\nconst DEFAULT_MODULES = [project];\n\nconst SHADER_HOOKS = [\n 'vs:DECKGL_FILTER_SIZE(inout vec3 size, VertexGeometry geometry)',\n 'vs:DECKGL_FILTER_GL_POSITION(inout vec4 position, VertexGeometry geometry)',\n 'vs:DECKGL_FILTER_COLOR(inout vec4 color, VertexGeometry geometry)',\n 'fs:DECKGL_FILTER_COLOR(inout vec4 color, FragmentGeometry geometry)'\n];\n\nexport function createProgramManager(gl) {\n const programManager = ProgramManager.getDefaultProgramManager(gl);\n\n for (const shaderModule of DEFAULT_MODULES) {\n programManager.addDefaultModule(shaderModule);\n }\n for (const shaderHook of SHADER_HOOKS) {\n programManager.addShaderHook(shaderHook);\n }\n\n return programManager;\n}\n\nexport {picking, project, project32, gouraudLighting, phongLighting, shadow};\n\n// Useful for custom shader modules\nexport type {ProjectUniforms} from './project/viewport-uniforms';\n\n// TODO - these should be imported from luma.gl\n/* eslint-disable camelcase */\nexport type PickingUniforms = {\n picking_uActive: boolean;\n picking_uAttribute: boolean;\n picking_uSelectedColor: [number, number, number];\n picking_uSelectedColorValid: boolean;\n picking_uHighlightColor: [number, number, number, number];\n};\n\nexport type LightingModuleSettings = {\n material:\n | boolean\n | {\n ambient?: number;\n diffuse?: number;\n shininess?: number;\n specularColor?: [number, number, number];\n };\n};\n","import View, {CommonViewState} from './view';\nimport OrthographicViewport from '../viewports/orthographic-viewport';\nimport OrthographicController from '../controllers/orthographic-controller';\n\nexport type OrthographicViewState = {\n /** The world position at the center of the viewport. Default `[0, 0, 0]`. */\n target?: [number, number, number] | [number, number];\n /** The zoom level of the viewport. `zoom: 0` maps one unit distance to one pixel on screen, and increasing `zoom` by `1` scales the same object to twice as large.\n * To apply independent zoom levels to the X and Y axes, supply an array `[zoomX, zoomY]`. Default `0`. */\n zoom?: number | [number, number];\n /** The min zoom level of the viewport. Default `-Infinity`. */\n minZoom?: number;\n /** The max zoom level of the viewport. Default `Infinity`. */\n maxZoom?: number;\n} & CommonViewState;\n\ntype OrthographicViewProps = {\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Whether to use top-left coordinates (`true`) or bottom-left coordinates (`false`). Default `true`. */\n flipY?: boolean;\n};\n\nexport default class OrthographicView extends View {\n static displayName = 'OrthographicView';\n\n get ViewportType() {\n return OrthographicViewport;\n }\n\n get ControllerType() {\n return OrthographicController;\n }\n}\n","import Viewport from '../viewports/viewport';\n\nimport {Matrix4, clamp} from '@math.gl/core';\nimport {pixelsToWorld} from '@math.gl/web-mercator';\nimport * as vec2 from 'gl-matrix/vec2';\n\nimport type {Padding} from './viewport';\n\nconst viewMatrix = new Matrix4().lookAt({eye: [0, 0, 1]});\n\nfunction getProjectionMatrix({\n width,\n height,\n near,\n far,\n padding\n}: {\n width: number;\n height: number;\n near: number;\n far: number;\n padding: Padding | null;\n}) {\n let left = -width / 2;\n let right = width / 2;\n let bottom = -height / 2;\n let top = height / 2;\n if (padding) {\n const {left: l = 0, right: r = 0, top: t = 0, bottom: b = 0} = padding;\n const offsetX = clamp((l + width - r) / 2, 0, width) - width / 2;\n const offsetY = clamp((t + height - b) / 2, 0, height) - height / 2;\n left -= offsetX;\n right -= offsetX;\n bottom += offsetY;\n top += offsetY;\n }\n\n return new Matrix4().ortho({\n left,\n right,\n bottom,\n top,\n near,\n far\n });\n}\n\nexport type OrthographicViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** The world position at the center of the viewport. Default `[0, 0, 0]`. */\n target?: [number, number, number] | [number, number];\n /** The zoom level of the viewport. `zoom: 0` maps one unit distance to one pixel on screen, and increasing `zoom` by `1` scales the same object to twice as large.\n * To apply independent zoom levels to the X and Y axes, supply an array `[zoomX, zoomY]`. Default `0`. */\n zoom?: number | [number, number];\n /** Padding around the viewport, in pixels. */\n padding?: Padding | null;\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Whether to use top-left coordinates (`true`) or bottom-left coordinates (`false`). Default `true`. */\n flipY?: boolean;\n};\n\nexport default class OrthographicViewport extends Viewport {\n constructor(props: OrthographicViewportOptions) {\n const {\n width,\n height,\n near = 0.1,\n far = 1000,\n zoom = 0,\n target = [0, 0, 0],\n padding = null,\n flipY = true\n } = props;\n const zoomX = Array.isArray(zoom) ? zoom[0] : zoom;\n const zoomY = Array.isArray(zoom) ? zoom[1] : zoom;\n const zoom_ = Math.min(zoomX, zoomY);\n const scale = Math.pow(2, zoom_);\n\n let distanceScales;\n if (zoomX !== zoomY) {\n const scaleX = Math.pow(2, zoomX);\n const scaleY = Math.pow(2, zoomY);\n\n distanceScales = {\n unitsPerMeter: [scaleX / scale, scaleY / scale, 1],\n metersPerUnit: [scale / scaleX, scale / scaleY, 1]\n };\n }\n\n super({\n ...props,\n // in case viewState contains longitude/latitude values,\n // make sure that the base Viewport class does not treat this as a geospatial viewport\n longitude: undefined,\n position: target,\n viewMatrix: viewMatrix.clone().scale([scale, scale * (flipY ? -1 : 1), scale]),\n projectionMatrix: getProjectionMatrix({\n width: width || 1,\n height: height || 1,\n padding,\n near,\n far\n }),\n zoom: zoom_,\n distanceScales\n });\n }\n\n projectFlat([X, Y]: number[]): [number, number] {\n const {unitsPerMeter} = this.distanceScales;\n return [X * unitsPerMeter[0], Y * unitsPerMeter[1]];\n }\n\n unprojectFlat([x, y]: number[]): [number, number] {\n const {metersPerUnit} = this.distanceScales;\n return [x * metersPerUnit[0], y * metersPerUnit[1]];\n }\n\n /* Needed by LinearInterpolator */\n panByPosition(coords: number[], pixel: number[]): OrthographicViewportOptions {\n const fromLocation = pixelsToWorld(pixel, this.pixelUnprojectionMatrix);\n const toLocation = this.projectFlat(coords);\n\n const translate = vec2.add([], toLocation, vec2.negate([], fromLocation));\n const newCenter = vec2.add([], this.center, translate);\n\n return {target: this.unprojectFlat(newCenter)};\n }\n}\n","import {clamp} from '@math.gl/core';\nimport Controller from './controller';\nimport {OrbitState} from './orbit-controller';\nimport LinearInterpolator from '../transitions/linear-interpolator';\n\nclass OrthographicState extends OrbitState {\n zoomAxis: 'X' | 'Y' | 'all';\n\n constructor(props) {\n super(props);\n\n this.zoomAxis = props.zoomAxis || 'all';\n }\n\n _calculateNewZoom({scale, startZoom}) {\n const {maxZoom, minZoom} = this.getViewportProps();\n if (startZoom === undefined) {\n startZoom = this.getViewportProps().zoom;\n }\n let deltaZoom = Math.log2(scale);\n if (Array.isArray(startZoom)) {\n let [newZoomX, newZoomY] = startZoom;\n switch (this.zoomAxis) {\n case 'X':\n // Scale x only\n newZoomX = clamp(newZoomX + deltaZoom, minZoom, maxZoom);\n break;\n case 'Y':\n // Scale y only\n newZoomY = clamp(newZoomY + deltaZoom, minZoom, maxZoom);\n break;\n default:\n // Lock aspect ratio\n let z = Math.min(newZoomX + deltaZoom, newZoomY + deltaZoom);\n if (z < minZoom) {\n deltaZoom += minZoom - z;\n }\n z = Math.max(newZoomX + deltaZoom, newZoomY + deltaZoom);\n if (z > maxZoom) {\n deltaZoom += maxZoom - z;\n }\n newZoomX += deltaZoom;\n newZoomY += deltaZoom;\n }\n return [newZoomX, newZoomY];\n }\n // Ignore `zoomAxis`\n // `LinearTransitionInterpolator` does not support interpolation between a number and an array\n // So if zoom is a number (legacy use case), new zoom still has to be a number\n return clamp(startZoom + deltaZoom, minZoom, maxZoom);\n }\n}\n\nexport default class OrthographicController extends Controller {\n ControllerState = OrthographicState;\n transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator(['target', 'zoom'])\n };\n dragMode: 'pan' | 'rotate' = 'pan';\n\n _onPanRotate() {\n // No rotation in orthographic view\n return false;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nconst ERR_NOT_OBJECT = 'count(): argument not an object';\nconst ERR_NOT_CONTAINER = 'count(): argument not a container';\n\n/**\n * Deduces numer of elements in a JavaScript container.\n * - Auto-deduction for ES6 containers that define a count() method\n * - Auto-deduction for ES6 containers that define a size member\n * - Auto-deduction for Classic Arrays via the built-in length attribute\n * - Also handles objects, although note that this an O(N) operation\n */\nexport function count(container: any): number {\n if (!isObject(container)) {\n throw new Error(ERR_NOT_OBJECT);\n }\n\n // Check if ES6 collection \"count\" function is available\n if (typeof container.count === 'function') {\n return container.count();\n }\n\n // Check if ES6 collection \"size\" attribute is set\n if (Number.isFinite(container.size)) {\n return container.size;\n }\n\n // Check if array length attribute is set\n // Note: checking this last since some ES6 collections (Immutable.js)\n // emit profuse warnings when trying to access `length` attribute\n if (Number.isFinite(container.length)) {\n return container.length;\n }\n\n // Note that getting the count of an object is O(N)\n if (isPlainObject(container)) {\n return Object.keys(container).length;\n }\n\n throw new Error(ERR_NOT_CONTAINER);\n}\n\n/**\n * Checks if argument is a plain object (not a class or array etc)\n * @param {*} value - JavaScript value to be tested\n * @return {Boolean} - true if argument is a plain JavaScript object\n */\nfunction isPlainObject(value) {\n return value !== null && typeof value === 'object' && value.constructor === Object;\n}\n\n/**\n * Checks if argument is an indexable object (not a primitive value, nor null)\n * @param {*} value - JavaScript value to be tested\n * @return {Boolean} - true if argument is a JavaScript object\n */\nfunction isObject(value) {\n return value !== null && typeof value === 'object';\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// Merge two luma.gl shader descriptors\nexport function mergeShaders(target, source) {\n if (!source) {\n return target;\n }\n const result = {...target, ...source};\n\n if ('defines' in source) {\n result.defines = {...target.defines, ...source.defines};\n }\n if ('modules' in source) {\n result.modules = (target.modules || []).concat(source.modules);\n\n // Hack: prject32 and project64 cannot co-exist\n if (source.modules.some(module => module.name === 'project64')) {\n const index = result.modules.findIndex(module => module.name === 'project32');\n if (index >= 0) {\n result.modules.splice(index, 1);\n }\n }\n }\n if ('inject' in source) {\n if (!target.inject) {\n result.inject = source.inject;\n } else {\n const mergedInjection = {...target.inject};\n for (const key in source.inject) {\n mergedInjection[key] = (mergedInjection[key] || '') + source.inject[key];\n }\n result.inject = mergedInjection;\n }\n }\n return result;\n}\n","import {Matrix4} from '@math.gl/core';\nimport Viewport from './viewport';\nimport {PROJECTION_MODE} from '../lib/constants';\n\nimport * as vec3 from 'gl-matrix/vec3';\nimport * as vec4 from 'gl-matrix/vec4';\n\nconst DEGREES_TO_RADIANS = Math.PI / 180;\nconst RADIANS_TO_DEGREES = 180 / Math.PI;\nconst EARTH_RADIUS = 6370972;\nconst GLOBE_RADIUS = 256;\n\nfunction getDistanceScales() {\n const unitsPerMeter = GLOBE_RADIUS / EARTH_RADIUS;\n const unitsPerDegree = (Math.PI / 180) * GLOBE_RADIUS;\n\n return {\n unitsPerMeter: [unitsPerMeter, unitsPerMeter, unitsPerMeter],\n unitsPerMeter2: [0, 0, 0],\n metersPerUnit: [1 / unitsPerMeter, 1 / unitsPerMeter, 1 / unitsPerMeter],\n unitsPerDegree: [unitsPerDegree, unitsPerDegree, unitsPerMeter],\n unitsPerDegree2: [0, 0, 0],\n degreesPerUnit: [1 / unitsPerDegree, 1 / unitsPerDegree, 1 / unitsPerMeter]\n };\n}\n\nexport type GlobeViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** Longitude in degrees */\n longitude?: number;\n /** Latitude in degrees */\n latitude?: number;\n /** Camera altitude relative to the viewport height, used to control the FOV. Default `1.5` */\n altitude?: number;\n /* Meter offsets of the viewport center from lng, lat */\n position?: number[];\n /** Zoom level */\n zoom?: number;\n /** Use orthographic projection */\n orthographic?: boolean;\n /** Scaler for the near plane, 1 unit equals to the height of the viewport. Default `0.1` */\n nearZMultiplier?: number;\n /** Scaler for the far plane, 1 unit equals to the distance from the camera to the edge of the screen. Default `2` */\n farZMultiplier?: number;\n /** The resolution at which to turn flat features into 3D meshes, in degrees. Smaller numbers will generate more detailed mesh. Default `10` */\n resolution?: number;\n};\n\nexport default class GlobeViewport extends Viewport {\n // @ts-ignore\n longitude: number;\n // @ts-ignore\n latitude: number;\n resolution: number;\n\n constructor(opts: GlobeViewportOptions = {}) {\n const {\n latitude = 0,\n longitude = 0,\n zoom = 0,\n nearZMultiplier = 0.1,\n farZMultiplier = 2,\n resolution = 10\n } = opts;\n\n let {height, altitude = 1.5} = opts;\n\n height = height || 1;\n altitude = Math.max(0.75, altitude);\n\n // Calculate view matrix\n const viewMatrix = new Matrix4().lookAt({eye: [0, -altitude, 0], up: [0, 0, 1]});\n const scale = Math.pow(2, zoom);\n viewMatrix.rotateX(latitude * DEGREES_TO_RADIANS);\n viewMatrix.rotateZ(-longitude * DEGREES_TO_RADIANS);\n viewMatrix.scale(scale / height);\n\n const halfFov = Math.atan(0.5 / altitude);\n const relativeScale = (GLOBE_RADIUS * 2 * scale) / height;\n\n super({\n ...opts,\n // x, y, width,\n height,\n\n // view matrix\n viewMatrix,\n longitude,\n latitude,\n zoom,\n\n // projection matrix parameters\n distanceScales: getDistanceScales(),\n fovyRadians: halfFov * 2,\n focalDistance: altitude,\n near: nearZMultiplier,\n far: Math.min(2, 1 / relativeScale + 1) * altitude * farZMultiplier\n });\n\n this.latitude = latitude;\n this.longitude = longitude;\n this.resolution = resolution;\n }\n\n get projectionMode() {\n return PROJECTION_MODE.GLOBE;\n }\n\n getDistanceScales() {\n return this.distanceScales;\n }\n\n getBounds(options: {z?: number} = {}): [number, number, number, number] {\n const unprojectOption = {targetZ: options.z || 0};\n\n const left = this.unproject([0, this.height / 2], unprojectOption);\n const top = this.unproject([this.width / 2, 0], unprojectOption);\n const right = this.unproject([this.width, this.height / 2], unprojectOption);\n const bottom = this.unproject([this.width / 2, this.height], unprojectOption);\n\n if (right[0] < this.longitude) right[0] += 360;\n if (left[0] > this.longitude) left[0] -= 360;\n\n return [\n Math.min(left[0], right[0], top[0], bottom[0]),\n Math.min(left[1], right[1], top[1], bottom[1]),\n Math.max(left[0], right[0], top[0], bottom[0]),\n Math.max(left[1], right[1], top[1], bottom[1])\n ];\n }\n\n unproject(\n xyz: number[],\n {topLeft = true, targetZ}: {topLeft?: boolean; targetZ?: number} = {}\n ): number[] {\n const [x, y, z] = xyz;\n\n const y2 = topLeft ? y : this.height - y;\n const {pixelUnprojectionMatrix} = this;\n\n let coord;\n if (Number.isFinite(z)) {\n // Has depth component\n coord = transformVector(pixelUnprojectionMatrix, [x, y2, z, 1]);\n } else {\n // since we don't know the correct projected z value for the point,\n // unproject two points to get a line and then find the point on that line that intersects with the sphere\n const coord0 = transformVector(pixelUnprojectionMatrix, [x, y2, -1, 1]);\n const coord1 = transformVector(pixelUnprojectionMatrix, [x, y2, 1, 1]);\n\n const lt = ((targetZ || 0) / EARTH_RADIUS + 1) * GLOBE_RADIUS;\n const lSqr = vec3.sqrLen(vec3.sub([], coord0, coord1));\n const l0Sqr = vec3.sqrLen(coord0);\n const l1Sqr = vec3.sqrLen(coord1);\n const sSqr = (4 * l0Sqr * l1Sqr - (lSqr - l0Sqr - l1Sqr) ** 2) / 16;\n const dSqr = (4 * sSqr) / lSqr;\n const r0 = Math.sqrt(l0Sqr - dSqr);\n const dr = Math.sqrt(Math.max(0, lt * lt - dSqr));\n const t = (r0 - dr) / Math.sqrt(lSqr);\n\n coord = vec3.lerp([], coord0, coord1, t);\n }\n const [X, Y, Z] = this.unprojectPosition(coord);\n\n if (Number.isFinite(z)) {\n return [X, Y, Z];\n }\n return Number.isFinite(targetZ) ? [X, Y, targetZ as number] : [X, Y];\n }\n\n projectPosition(xyz: number[]): [number, number, number] {\n const [lng, lat, Z = 0] = xyz;\n const lambda = lng * DEGREES_TO_RADIANS;\n const phi = lat * DEGREES_TO_RADIANS;\n const cosPhi = Math.cos(phi);\n const D = (Z / EARTH_RADIUS + 1) * GLOBE_RADIUS;\n\n return [Math.sin(lambda) * cosPhi * D, -Math.cos(lambda) * cosPhi * D, Math.sin(phi) * D];\n }\n\n unprojectPosition(xyz: number[]): [number, number, number] {\n const [x, y, z] = xyz;\n const D = vec3.len(xyz);\n const phi = Math.asin(z / D);\n const lambda = Math.atan2(x, -y);\n\n const lng = lambda * RADIANS_TO_DEGREES;\n const lat = phi * RADIANS_TO_DEGREES;\n const Z = (D / GLOBE_RADIUS - 1) * EARTH_RADIUS;\n return [lng, lat, Z];\n }\n\n projectFlat(xyz: number[]): [number, number] {\n return xyz as [number, number];\n }\n\n unprojectFlat(xyz: number[]): [number, number] {\n return xyz as [number, number];\n }\n\n panByPosition(coords: number[], pixel: number[]): GlobeViewportOptions {\n const fromPosition = this.unproject(pixel);\n return {\n longitude: coords[0] - fromPosition[0] + this.longitude,\n latitude: coords[1] - fromPosition[1] + this.latitude\n };\n }\n}\n\nfunction transformVector(matrix: number[], vector: number[]): number[] {\n const result = vec4.transformMat4([], vector, matrix);\n vec4.scale(result, result, 1 / result[3]);\n return result;\n}\n","import {lerp} from '@math.gl/core';\nimport Transition from './transition';\n\nexport default class CPUInterpolationTransition extends Transition {\n get value() {\n return this._value;\n }\n\n _onUpdate() {\n const {\n time,\n settings: {fromValue, toValue, duration, easing}\n } = this;\n const t = easing(time / duration);\n this._value = lerp(fromValue, toValue, t);\n }\n}\n","import Transition from './transition';\n\nconst EPSILON = 1e-5;\n\n/*\n * Calculate the next value in the spring transition\n * @param prev {Number} - previous value\n * @param cur {Number} - current value\n * @param dest {Number} - destination value\n * @param damping {Number}\n * @param stiffness {Number}\n */\nfunction updateSpringElement(prev, cur, dest, damping, stiffness) {\n const velocity = cur - prev;\n const delta = dest - cur;\n const spring = delta * stiffness;\n const damper = -velocity * damping;\n return spring + damper + velocity + cur;\n}\n\n/*\n * Calculate the next value in the spring transition\n * @param prev {Number|Array} - previous value\n * @param cur {Number|Array} - current value\n * @param dest {Number|Array} - destination value\n * @param damping {Number}\n * @param stiffness {Number}\n */\nfunction updateSpring(prev, cur, dest, damping, stiffness) {\n if (Array.isArray(dest)) {\n const next = [];\n for (let i = 0; i < dest.length; i++) {\n next[i] = updateSpringElement(prev[i], cur[i], dest[i], damping, stiffness);\n }\n return next;\n }\n return updateSpringElement(prev, cur, dest, damping, stiffness);\n}\n\n/*\n * Calculate the distance between two numbers or two vectors\n */\nfunction distance(value1, value2) {\n if (Array.isArray(value1)) {\n let distanceSquare = 0;\n for (let i = 0; i < value1.length; i++) {\n const d = value1[i] - value2[i];\n distanceSquare += d * d;\n }\n return Math.sqrt(distanceSquare);\n }\n return Math.abs(value1 - value2);\n}\n\nexport default class CPUSpringTransition extends Transition {\n get value() {\n return this._currValue;\n }\n\n _onUpdate() {\n // TODO - use timeline\n // const {time} = this;\n\n const {fromValue, toValue, damping, stiffness} = this.settings;\n const {_prevValue = fromValue, _currValue = fromValue} = this;\n let nextValue = updateSpring(_prevValue, _currValue, toValue, damping, stiffness);\n const delta = distance(nextValue, toValue);\n const velocity = distance(nextValue, _currValue);\n\n if (delta < EPSILON && velocity < EPSILON) {\n nextValue = toValue;\n this.end();\n }\n\n this._prevValue = _currValue;\n this._currValue = nextValue;\n }\n}\n","import {normalizeTransitionSettings} from './attribute/attribute-transition-utils';\nimport CPUInterpolationTransition from '../transitions/cpu-interpolation-transition';\nimport CPUSpringTransition from '../transitions/cpu-spring-transition';\nimport log from '../utils/log';\n\nconst TRANSITION_TYPES = {\n interpolation: CPUInterpolationTransition,\n spring: CPUSpringTransition\n};\n\nexport default class UniformTransitionManager {\n constructor(timeline) {\n this.transitions = new Map();\n this.timeline = timeline;\n }\n\n get active() {\n return this.transitions.size > 0;\n }\n\n add(key, fromValue, toValue, settings) {\n const {transitions} = this;\n if (transitions.has(key)) {\n const transition = transitions.get(key);\n // value may not be available if `update()` has not been called. Fallback to `fromValue`\n const {value = transition.settings.fromValue} = transition;\n // start from interrupted position\n fromValue = value;\n this.remove(key);\n }\n\n settings = normalizeTransitionSettings(settings);\n if (!settings) {\n return;\n }\n\n const TransitionType = TRANSITION_TYPES[settings.type];\n if (!TransitionType) {\n log.error(`unsupported transition type '${settings.type}'`)();\n return;\n }\n const transition = new TransitionType(this.timeline);\n transition.start({\n ...settings,\n fromValue,\n toValue\n });\n transitions.set(key, transition);\n }\n\n remove(key) {\n const {transitions} = this;\n if (transitions.has(key)) {\n transitions.get(key).cancel();\n transitions.delete(key);\n }\n }\n\n update() {\n const propsInTransition = {};\n\n for (const [key, transition] of this.transitions) {\n transition.update();\n propsInTransition[key] = transition.value;\n if (!transition.inProgress) {\n // transition ended\n this.remove(key);\n }\n }\n\n return propsInTransition;\n }\n\n clear() {\n for (const key of this.transitions.keys()) {\n this.remove(key);\n }\n }\n}\n","import {Texture2D} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nimport type Layer from '../lib/layer';\n\nconst DEFAULT_TEXTURE_PARAMETERS: Record = {\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR_MIPMAP_LINEAR,\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n};\n\n// Track the textures that are created by us. They need to be released when they are no longer used.\nconst internalTextures: Record = {};\n\nexport function createTexture(layer: Layer, image: any): Texture2D | null {\n const gl = layer.context && layer.context.gl;\n if (!gl || !image) {\n return null;\n }\n\n // image could be one of:\n // - Texture2D\n // - Browser object: Image, ImageData, ImageData, HTMLCanvasElement, HTMLVideoElement, ImageBitmap\n // - Plain object: {width: , height: , data: }\n if (image instanceof Texture2D) {\n return image;\n } else if (image.constructor && image.constructor.name !== 'Object') {\n // Browser object\n image = {data: image};\n }\n\n let specialTextureParameters: Record | null = null;\n if (image.compressed) {\n specialTextureParameters = {\n [GL.TEXTURE_MIN_FILTER]: image.data.length > 1 ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR\n };\n }\n\n const texture = new Texture2D(gl, {\n ...image,\n parameters: {\n ...DEFAULT_TEXTURE_PARAMETERS,\n ...specialTextureParameters,\n // @ts-expect-error textureParameter may not be defined\n ...layer.props.textureParameters\n }\n });\n // Track this texture\n internalTextures[texture.id] = true;\n return texture;\n}\n\nexport function destroyTexture(texture: Texture2D) {\n if (!texture || !(texture instanceof Texture2D)) {\n return;\n }\n if (internalTextures[texture.id]) {\n texture.delete();\n delete internalTextures[texture.id];\n }\n}\n","import {createTexture, destroyTexture} from '../utils/texture';\nimport {deepEqual} from '../utils/deep-equal';\n\nimport type Component from './component';\nimport type {Color, Texture} from '../types/layer-props';\n\ntype BasePropType = {\n value: ValueT;\n async?: boolean;\n validate?: (value: any, propType: PropType) => boolean;\n equal?: (value1: ValueT, value2: ValueT, propType: PropType) => boolean;\n};\n\n/**\n * Normalized prop type definition\n */\nexport type PropType = BasePropType & {\n type: string;\n name: string;\n transform?: (value: any, propType: PropType, component: Component) => any;\n release?: (value: any, propType: PropType, component: Component) => void;\n};\n\ntype DefaultProp =\n | T\n | DeprecatedProp\n | BooleanPropType\n | NumberPropType\n | ColorPropType\n | ImagePropType\n | DataPropType\n | ArrayPropType\n | ObjectPropType\n | AccessorPropType\n | FunctionPropType;\n\nexport type DefaultProps> = {\n [propName in keyof T]?: DefaultProp[propName]>;\n};\n\ntype BooleanPropType = BasePropType & {\n type: 'boolean';\n};\ntype NumberPropType = BasePropType & {\n type: 'number';\n min?: number;\n max?: number;\n};\ntype ColorPropType = BasePropType & {\n type: 'color';\n optional?: boolean;\n};\ntype ArrayPropType = BasePropType & {\n type: 'array';\n optional?: boolean;\n compare?: boolean;\n};\ntype AccessorPropType = BasePropType & {\n type: 'accessor';\n};\ntype FunctionPropType = BasePropType & {\n type: 'function';\n optional?: boolean;\n compare?: boolean;\n};\ntype DataPropType = BasePropType & {\n type: 'data';\n};\ntype ImagePropType = BasePropType & {\n type: 'image';\n};\ntype ObjectPropType = BasePropType & {\n type: 'object';\n optional?: boolean;\n compare?: boolean;\n};\ntype DeprecatedProp = {\n deprecatedFor?: string | string[];\n};\ntype PropTypeDef =\n | DeprecatedProp\n | boolean\n | BooleanPropType\n | number\n | NumberPropType\n | string\n | DataPropType\n | number[]\n | ColorPropType\n | ArrayPropType\n | AccessorPropType\n | FunctionPropType\n | ImagePropType\n | ObjectPropType\n | null;\n\nconst TYPE_DEFINITIONS = {\n boolean: {\n validate(value, propType: BooleanPropType) {\n return true;\n },\n equal(value1, value2, propType: BooleanPropType) {\n return Boolean(value1) === Boolean(value2);\n }\n },\n number: {\n validate(value, propType: NumberPropType) {\n return (\n Number.isFinite(value) &&\n (!('max' in propType) || value <= propType.max!) &&\n (!('min' in propType) || value >= propType.min!)\n );\n }\n },\n color: {\n validate(value, propType: ColorPropType) {\n return (\n (propType.optional && !value) ||\n (isArray(value) && (value.length === 3 || value.length === 4))\n );\n },\n equal(value1, value2, propType: ColorPropType) {\n return arrayEqual(value1, value2);\n }\n },\n accessor: {\n validate(value, propType: AccessorPropType) {\n const valueType = getTypeOf(value);\n return valueType === 'function' || valueType === getTypeOf(propType.value);\n },\n equal(value1, value2, propType: AccessorPropType) {\n if (typeof value2 === 'function') {\n return true;\n }\n return arrayEqual(value1, value2);\n }\n },\n array: {\n validate(value, propType: ArrayPropType) {\n return (propType.optional && !value) || isArray(value);\n },\n equal(value1, value2, propType: ArrayPropType) {\n return propType.compare ? arrayEqual(value1, value2) : value1 === value2;\n }\n },\n object: {\n equal(value1, value2, propType: ObjectPropType) {\n return propType.compare ? deepEqual(value1, value2) : value1 === value2;\n }\n },\n function: {\n validate(value, propType: FunctionPropType) {\n return (propType.optional && !value) || typeof value === 'function';\n },\n equal(value1, value2, propType: FunctionPropType) {\n return !propType.compare || value1 === value2;\n }\n },\n data: {\n transform: (value, propType: DataPropType, component) => {\n const {dataTransform} = component.props;\n return dataTransform && value ? dataTransform(value) : value;\n }\n },\n image: {\n transform: (value, propType: ImagePropType, component) => {\n return createTexture(component, value);\n },\n release: value => {\n destroyTexture(value);\n }\n }\n} as const;\n\nfunction arrayEqual(array1, array2) {\n if (array1 === array2) {\n return true;\n }\n if (!isArray(array1) || !isArray(array2)) {\n return false;\n }\n const len = array1.length;\n if (len !== array2.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n return true;\n}\n\nexport function parsePropTypes(propDefs: Record): {\n propTypes: Record;\n defaultProps: Record;\n deprecatedProps: Record;\n} {\n const propTypes = {};\n const defaultProps = {};\n const deprecatedProps = {};\n\n for (const [propName, propDef] of Object.entries(propDefs)) {\n const deprecated = (propDef as DeprecatedProp)?.deprecatedFor;\n if (deprecated) {\n deprecatedProps[propName] = Array.isArray(deprecated) ? deprecated : [deprecated];\n } else {\n const propType = parsePropType(propName, propDef);\n propTypes[propName] = propType;\n defaultProps[propName] = propType.value;\n }\n }\n return {propTypes, defaultProps, deprecatedProps};\n}\n\n// Parses one property definition entry. Either contains:\n// * a valid prop type object ({type, ...})\n// * or just a default value, in which case type and name inference is used\nfunction parsePropType(name: string, propDef: PropTypeDef): PropType {\n switch (getTypeOf(propDef)) {\n case 'object':\n return normalizePropDefinition(name, propDef);\n\n case 'array':\n return normalizePropDefinition(name, {type: 'array', value: propDef, compare: false});\n\n case 'boolean':\n return normalizePropDefinition(name, {type: 'boolean', value: propDef});\n\n case 'number':\n return normalizePropDefinition(name, {type: 'number', value: propDef});\n\n case 'function':\n // return guessFunctionType(name, propDef);\n return normalizePropDefinition(name, {type: 'function', value: propDef, compare: true});\n\n default:\n return {name, type: 'unknown', value: propDef};\n }\n}\n\nfunction normalizePropDefinition(name, propDef): PropType {\n if (!('type' in propDef)) {\n if (!('value' in propDef)) {\n // If no type and value this object is likely the value\n return {name, type: 'object', value: propDef};\n }\n return {name, type: getTypeOf(propDef.value), ...propDef};\n }\n return {name, ...TYPE_DEFINITIONS[propDef.type], ...propDef};\n}\n\nfunction isArray(value: any): boolean {\n return Array.isArray(value) || ArrayBuffer.isView(value);\n}\n\n// improved version of javascript typeof that can distinguish arrays and null values\nfunction getTypeOf(value: any): string {\n if (isArray(value)) {\n return 'array';\n }\n if (value === null) {\n return 'null';\n }\n return typeof value;\n}\n","import log from '../utils/log';\nimport {isAsyncIterable} from '../utils/iterable-utils';\nimport {parsePropTypes} from './prop-types';\nimport {\n COMPONENT_SYMBOL,\n ASYNC_ORIGINAL_SYMBOL,\n ASYNC_RESOLVED_SYMBOL,\n ASYNC_DEFAULTS_SYMBOL\n} from './constants';\nimport {StatefulComponentProps} from './component';\nimport type Component from './component';\n\n// Create a property object\nexport function createProps(\n component: Component,\n propObjects: Partial[]\n): StatefulComponentProps {\n // Get default prop object (a prototype chain for now)\n const propsPrototype = getPropsPrototype(component.constructor);\n\n // Create a new prop object with default props object in prototype chain\n const propsInstance = Object.create(propsPrototype);\n\n // Props need a back pointer to the owning component\n propsInstance[COMPONENT_SYMBOL] = component;\n // The supplied (original) values for those async props that are set to url strings or Promises.\n // In this case, the actual (i.e. resolved) values are looked up from component.internalState\n propsInstance[ASYNC_ORIGINAL_SYMBOL] = {};\n // Note: the actual (resolved) values for props that are NOT set to urls or Promises.\n // in this case the values are served directly from this map\n propsInstance[ASYNC_RESOLVED_SYMBOL] = {};\n\n // \"Copy\" all sync props\n for (let i = 0; i < propObjects.length; ++i) {\n const props = propObjects[i];\n // Do not use Object.assign here to avoid Symbols in props overwriting our private fields\n // This might happen if one of the arguments is another props instance\n for (const key in props) {\n propsInstance[key] = props[key];\n }\n }\n\n // Props must be immutable\n Object.freeze(propsInstance);\n\n return propsInstance;\n}\n\n// Return precalculated defaultProps and propType objects if available\n// build them if needed\nfunction getPropsPrototype(componentClass) {\n const defaultProps = getOwnProperty(componentClass, '_mergedDefaultProps');\n if (!defaultProps) {\n createPropsPrototypeAndTypes(componentClass);\n return componentClass._mergedDefaultProps;\n }\n return defaultProps;\n}\n\n// Build defaultProps and propType objects by walking component prototype chain\nfunction createPropsPrototypeAndTypes(componentClass) {\n const parent = componentClass.prototype;\n if (!parent) {\n return;\n }\n\n const parentClass = Object.getPrototypeOf(componentClass);\n const parentDefaultProps = getPropsPrototype(parentClass);\n\n // Parse propTypes from Component.defaultProps\n const componentDefaultProps = getOwnProperty(componentClass, 'defaultProps') || {};\n const componentPropDefs = parsePropTypes(componentDefaultProps);\n\n // Create any necessary property descriptors and create the default prop object\n // Assign merged default props\n const defaultProps = createPropsPrototype(\n componentPropDefs.defaultProps,\n parentDefaultProps,\n componentClass\n );\n\n // Create a merged type object\n const propTypes = {...parentClass._propTypes, ...componentPropDefs.propTypes};\n // Add getters/setters for async props\n addAsyncPropsToPropPrototype(defaultProps, propTypes);\n\n // Create a map for prop whose default value is a callback\n const deprecatedProps = {\n ...parentClass._deprecatedProps,\n ...componentPropDefs.deprecatedProps\n };\n // Add setters for deprecated props\n addDeprecatedPropsToPropPrototype(defaultProps, deprecatedProps);\n\n // Store the precalculated props\n componentClass._mergedDefaultProps = defaultProps;\n componentClass._propTypes = propTypes;\n componentClass._deprecatedProps = deprecatedProps;\n}\n\n// Builds a pre-merged default props object that component props can inherit from\nfunction createPropsPrototype(props, parentProps, componentClass) {\n const defaultProps = Object.create(null);\n\n Object.assign(defaultProps, parentProps, props);\n\n // Avoid freezing `id` prop\n const id = getComponentName(componentClass);\n delete props.id;\n\n Object.defineProperties(defaultProps, {\n // `id` is treated specially because layer might need to override it\n id: {\n writable: true,\n value: id\n }\n });\n\n return defaultProps;\n}\n\nfunction addDeprecatedPropsToPropPrototype(defaultProps, deprecatedProps) {\n for (const propName in deprecatedProps) {\n /* eslint-disable accessor-pairs */\n Object.defineProperty(defaultProps, propName, {\n enumerable: false,\n set(newValue) {\n const nameStr = `${this.id}: ${propName}`;\n\n for (const newPropName of deprecatedProps[propName]) {\n if (!hasOwnProperty(this, newPropName)) {\n this[newPropName] = newValue;\n }\n }\n\n log.deprecated(nameStr, deprecatedProps[propName].join('/'))();\n }\n });\n /* eslint-enable accessor-pairs */\n }\n}\n\n// Create descriptors for overridable props\nfunction addAsyncPropsToPropPrototype(defaultProps, propTypes) {\n const defaultValues = {};\n\n const descriptors = {};\n\n // Move async props into shadow values\n for (const propName in propTypes) {\n const propType = propTypes[propName];\n const {name, value} = propType;\n\n // Note: async is ES7 keyword, can't destructure\n if (propType.async) {\n defaultValues[name] = value;\n descriptors[name] = getDescriptorForAsyncProp(name);\n }\n }\n\n // Default \"resolved\" values for async props, returned if value not yet resolved/set.\n defaultProps[ASYNC_DEFAULTS_SYMBOL] = defaultValues;\n // Shadowed object, just to make sure \"early indexing\" into the instance does not fail\n defaultProps[ASYNC_ORIGINAL_SYMBOL] = {};\n\n Object.defineProperties(defaultProps, descriptors);\n}\n\n// Helper: Configures getter and setter for one async prop\nfunction getDescriptorForAsyncProp(name) {\n return {\n enumerable: true,\n // Save the provided value for async props in a special map\n set(newValue) {\n if (\n typeof newValue === 'string' ||\n newValue instanceof Promise ||\n isAsyncIterable(newValue)\n ) {\n this[ASYNC_ORIGINAL_SYMBOL][name] = newValue;\n } else {\n this[ASYNC_RESOLVED_SYMBOL][name] = newValue;\n }\n },\n // Only the component's state knows the true value of async prop\n get() {\n if (this[ASYNC_RESOLVED_SYMBOL]) {\n // Prop value isn't async, so just return it\n if (name in this[ASYNC_RESOLVED_SYMBOL]) {\n const value = this[ASYNC_RESOLVED_SYMBOL][name];\n\n return value || this[ASYNC_DEFAULTS_SYMBOL][name];\n }\n\n if (name in this[ASYNC_ORIGINAL_SYMBOL]) {\n // It's an async prop value: look into component state\n const state = this[COMPONENT_SYMBOL] && this[COMPONENT_SYMBOL].internalState;\n if (state && state.hasAsyncProp(name)) {\n return state.getAsyncProp(name) || this[ASYNC_DEFAULTS_SYMBOL][name];\n }\n }\n }\n\n // the prop is not supplied, or\n // component not yet initialized/matched, return the component's default value for the prop\n return this[ASYNC_DEFAULTS_SYMBOL][name];\n }\n };\n}\n\n// HELPER METHODS\n\nfunction hasOwnProperty(object, prop) {\n return Object.prototype.hasOwnProperty.call(object, prop);\n}\n\n// Constructors have their super class constructors as prototypes\nfunction getOwnProperty(object, prop) {\n return hasOwnProperty(object, prop) && object[prop];\n}\n\nfunction getComponentName(componentClass) {\n const componentName =\n getOwnProperty(componentClass, 'layerName') || getOwnProperty(componentClass, 'componentName');\n if (!componentName) {\n log.once(0, `${componentClass.name}.componentName not specified`)();\n }\n return componentName || componentClass.name;\n}\n","import {\n COMPONENT_SYMBOL,\n ASYNC_ORIGINAL_SYMBOL,\n ASYNC_RESOLVED_SYMBOL,\n ASYNC_DEFAULTS_SYMBOL\n} from './constants';\nimport {createProps} from './create-props';\n\nlet counter = 0;\n\nexport type StatefulComponentProps = PropsT & {\n id: string;\n [COMPONENT_SYMBOL]: Component;\n [ASYNC_DEFAULTS_SYMBOL]: Partial;\n [ASYNC_ORIGINAL_SYMBOL]: Partial;\n [ASYNC_RESOLVED_SYMBOL]: Partial;\n};\n\nexport default class Component {\n static componentName: string = 'Component';\n static defaultProps: Readonly<{}> = {};\n\n id: string;\n props: StatefulComponentProps;\n count: number;\n\n constructor(...propObjects: Partial[]) {\n // Merge supplied props with default props and freeze them.\n /* eslint-disable prefer-spread */\n this.props = createProps(this, propObjects);\n /* eslint-enable prefer-spread */\n\n this.id = this.props.id; // The layer's id, used for matching with layers from last render cycle\n this.count = counter++; // Keep track of how many layer instances you are generating\n }\n\n // clone this layer with modified props\n clone(newProps: Partial) {\n const {props} = this;\n\n // Async props cannot be copied with Object.assign, copy them separately\n const asyncProps: Partial = {};\n\n // See async props definition in create-props.js\n for (const key in props[ASYNC_DEFAULTS_SYMBOL]) {\n if (key in props[ASYNC_RESOLVED_SYMBOL]) {\n asyncProps[key] = props[ASYNC_RESOLVED_SYMBOL][key];\n } else if (key in props[ASYNC_ORIGINAL_SYMBOL]) {\n asyncProps[key] = props[ASYNC_ORIGINAL_SYMBOL][key];\n }\n }\n\n // Some custom layer implementation may not support multiple arguments in the constructor\n // @ts-ignore\n return new this.constructor({...props, ...asyncProps, ...newProps});\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {isAsyncIterable} from '../utils/iterable-utils';\nimport {ASYNC_ORIGINAL_SYMBOL, ASYNC_RESOLVED_SYMBOL, ASYNC_DEFAULTS_SYMBOL} from './constants';\nimport type Component from './component';\nimport {PropType} from './prop-types';\n\nconst EMPTY_PROPS = Object.freeze({});\n\ntype AsyncPropState = {\n type: PropType;\n lastValue: any;\n resolvedValue: any;\n pendingLoadCount: number;\n resolvedLoadCount: number;\n};\n\nexport default class ComponentState {\n component: ComponentT;\n onAsyncPropUpdated: (propName: string, value: any) => void;\n\n private asyncProps: Partial>;\n private oldProps: ComponentT['props'] | null;\n private oldAsyncProps: ComponentT['props'] | null;\n\n constructor(component: ComponentT) {\n this.component = component;\n this.asyncProps = {}; // Prop values that the layer sees\n this.onAsyncPropUpdated = () => {};\n this.oldProps = null; // Last props before update\n this.oldAsyncProps = null; // Last props before update, with async values copied.\n }\n\n finalize() {\n for (const propName in this.asyncProps) {\n const asyncProp = this.asyncProps[propName];\n if (asyncProp && asyncProp.type && asyncProp.type.release) {\n // Release any resources created by transforms\n asyncProp.type.release(\n asyncProp.resolvedValue,\n asyncProp.type,\n this.component as Component\n );\n }\n }\n }\n\n /* Layer-facing props API */\n\n getOldProps(): ComponentT['props'] | typeof EMPTY_PROPS {\n return this.oldAsyncProps || this.oldProps || EMPTY_PROPS;\n }\n\n resetOldProps() {\n this.oldAsyncProps = null;\n this.oldProps = this.component.props;\n }\n\n // Checks if a prop is overridden\n hasAsyncProp(propName: string): boolean {\n return propName in this.asyncProps;\n }\n\n // Returns value of an overriden prop\n getAsyncProp(propName: string): any {\n const asyncProp = this.asyncProps[propName];\n return asyncProp && asyncProp.resolvedValue;\n }\n\n isAsyncPropLoading(propName?: string): boolean {\n if (propName) {\n const asyncProp = this.asyncProps[propName];\n return Boolean(\n asyncProp &&\n asyncProp.pendingLoadCount > 0 &&\n asyncProp.pendingLoadCount !== asyncProp.resolvedLoadCount\n );\n }\n for (const key in this.asyncProps) {\n if (this.isAsyncPropLoading(key)) {\n return true;\n }\n }\n return false;\n }\n\n // Without changing the original prop value, swap out the data resolution under the hood\n reloadAsyncProp(propName: string, value: any) {\n this._watchPromise(propName, Promise.resolve(value));\n }\n\n // Updates all async/overridden props (when new props come in)\n // Checks if urls have changed, starts loading, or removes override\n setAsyncProps(props: ComponentT['props']) {\n // NOTE: prop param and default values are only support for testing\n const resolvedValues = props[ASYNC_RESOLVED_SYMBOL] || {};\n const originalValues = props[ASYNC_ORIGINAL_SYMBOL] || props;\n const defaultValues = props[ASYNC_DEFAULTS_SYMBOL] || {};\n\n // TODO - use async props from the layer's prop types\n for (const propName in resolvedValues) {\n const value = resolvedValues[propName];\n this._createAsyncPropData(propName, defaultValues[propName]);\n this._updateAsyncProp(propName, value);\n // Use transformed value\n resolvedValues[propName] = this.getAsyncProp(propName);\n }\n\n for (const propName in originalValues) {\n const value = originalValues[propName];\n // Makes sure a record exists for this prop\n this._createAsyncPropData(propName, defaultValues[propName]);\n this._updateAsyncProp(propName, value);\n }\n }\n\n /* Placeholder methods for subclassing */\n\n protected _fetch(propName: string, url: string): any {\n return null;\n }\n\n protected _onResolve(propName: string, value: any) {} // eslint-disable-line @typescript-eslint/no-empty-function\n\n protected _onError(propName: string, error: Error) {} // eslint-disable-line @typescript-eslint/no-empty-function\n\n // Intercept strings (URLs) and Promises and activates loading and prop rewriting\n private _updateAsyncProp(propName: string, value: any) {\n if (!this._didAsyncInputValueChange(propName, value)) {\n return;\n }\n\n // interpret value string as url and start a new load tracked by a promise\n if (typeof value === 'string') {\n value = this._fetch(propName, value);\n }\n\n // interprets promise and track the \"loading\"\n if (value instanceof Promise) {\n this._watchPromise(propName, value);\n return;\n }\n\n if (isAsyncIterable(value)) {\n this._resolveAsyncIterable(propName, value); // eslint-disable-line @typescript-eslint/no-floating-promises\n return;\n }\n\n // else, normal, non-async value. Just store value for now\n this._setPropValue(propName, value);\n }\n\n // Whenever async props are changing, we need to make a copy of oldProps\n // otherwise the prop rewriting will affect the value both in props and oldProps.\n // While the copy is relatively expensive, this only happens on load completion.\n private _freezeAsyncOldProps() {\n if (!this.oldAsyncProps && this.oldProps) {\n // 1. inherit all synchronous props from oldProps\n // 2. reconfigure the async prop descriptors to fixed values\n this.oldAsyncProps = Object.create(this.oldProps);\n for (const propName in this.asyncProps) {\n Object.defineProperty(this.oldAsyncProps, propName, {\n enumerable: true,\n value: this.oldProps[propName]\n });\n }\n }\n }\n\n // Checks if an input value actually changed (to avoid reloading/rewatching promises/urls)\n private _didAsyncInputValueChange(propName: string, value: any): boolean {\n // @ts-ignore\n const asyncProp: AsyncPropState = this.asyncProps[propName];\n if (value === asyncProp.resolvedValue || value === asyncProp.lastValue) {\n return false;\n }\n asyncProp.lastValue = value;\n return true;\n }\n\n // Set normal, non-async value\n private _setPropValue(propName: string, value: any) {\n // Save the current value before overwriting so that diffProps can access both\n this._freezeAsyncOldProps();\n\n const asyncProp = this.asyncProps[propName];\n if (asyncProp) {\n value = this._postProcessValue(asyncProp, value);\n asyncProp.resolvedValue = value;\n asyncProp.pendingLoadCount++;\n asyncProp.resolvedLoadCount = asyncProp.pendingLoadCount;\n }\n }\n\n // Set a just resolved async value, calling onAsyncPropUpdates if value changes asynchronously\n private _setAsyncPropValue(propName: string, value: any, loadCount: number) {\n // Only update if loadCount is larger or equal to resolvedLoadCount\n // otherwise a more recent load has already completed\n const asyncProp = this.asyncProps[propName];\n if (asyncProp && loadCount >= asyncProp.resolvedLoadCount && value !== undefined) {\n // Save the current value before overwriting so that diffProps can access both\n this._freezeAsyncOldProps();\n\n asyncProp.resolvedValue = value;\n asyncProp.resolvedLoadCount = loadCount;\n\n // Call callback to inform listener\n this.onAsyncPropUpdated(propName, value);\n }\n }\n\n // Tracks a promise, sets the prop when loaded, handles load count\n private _watchPromise(propName: string, promise: Promise) {\n const asyncProp = this.asyncProps[propName];\n if (asyncProp) {\n asyncProp.pendingLoadCount++;\n const loadCount = asyncProp.pendingLoadCount;\n promise\n .then(data => {\n data = this._postProcessValue(asyncProp, data);\n this._setAsyncPropValue(propName, data, loadCount);\n this._onResolve(propName, data);\n })\n .catch(error => {\n this._onError(propName, error);\n });\n }\n }\n\n private async _resolveAsyncIterable(\n propName: string,\n iterable: AsyncIterable\n ): Promise {\n if (propName !== 'data') {\n // we only support data as async iterable\n this._setPropValue(propName, iterable);\n return;\n }\n\n const asyncProp = this.asyncProps[propName];\n if (!asyncProp) {\n return;\n }\n\n asyncProp.pendingLoadCount++;\n const loadCount = asyncProp.pendingLoadCount;\n let data: any[] = [];\n let count = 0;\n\n for await (const chunk of iterable) {\n // @ts-expect-error (2339) dataTransform is not decared in base component props\n const {dataTransform} = this.component.props;\n if (dataTransform) {\n data = dataTransform(chunk, data) as any[];\n } else {\n data = data.concat(chunk);\n }\n\n // Used by the default _dataDiff function\n Object.defineProperty(data, '__diff', {\n enumerable: false,\n value: [{startRow: count, endRow: data.length}]\n });\n\n count = data.length;\n this._setAsyncPropValue(propName, data, loadCount);\n }\n\n this._onResolve(propName, data);\n }\n\n // Give the app a chance to post process the loaded data\n private _postProcessValue(asyncProp, value: any) {\n const propType = asyncProp.type;\n if (propType) {\n if (propType.release) {\n propType.release(asyncProp.resolvedValue, propType, this.component);\n }\n if (propType.transform) {\n return propType.transform(value, propType, this.component);\n }\n }\n return value;\n }\n\n // Creating an asyncProp record if needed\n private _createAsyncPropData(propName: string, defaultValue: any) {\n const asyncProp = this.asyncProps[propName];\n if (!asyncProp) {\n // @ts-expect-error\n const propTypes = this.component && this.component.constructor._propTypes;\n // assert(defaultValue !== undefined);\n this.asyncProps[propName] = {\n type: propTypes && propTypes[propName],\n lastValue: null, // Supplied prop value (can be url/promise, not visible to layer)\n resolvedValue: defaultValue, // Resolved prop value (valid data, can be \"shown\" to layer)\n pendingLoadCount: 0, // How many loads have been issued\n resolvedLoadCount: 0 // Latest resolved load, (earlier loads will be ignored)\n };\n }\n }\n}\n","import ComponentState from '../lifecycle/component-state';\n\nimport type Layer from './layer';\nimport type AttributeManager from './attribute/attribute-manager';\nimport type Viewport from '../viewports/viewport';\nimport type UniformTransitionManager from './uniform-transition-manager';\n\nexport type ChangeFlags = {\n // Primary changeFlags, can be strings stating reason for change\n dataChanged: string | false | {startRow: number; endRow?: number}[];\n propsChanged: string | false;\n updateTriggersChanged: Record | false;\n extensionsChanged: boolean;\n viewportChanged: boolean;\n stateChanged: boolean;\n\n // Derived changeFlags\n propsOrDataChanged: boolean;\n somethingChanged: boolean;\n};\n\nexport default class LayerState extends ComponentState {\n attributeManager: AttributeManager | null;\n needsRedraw: boolean;\n needsUpdate: boolean;\n /**\n * Sublayers rendered in a previous cycle\n */\n subLayers: Layer[] | null;\n /**\n * If the layer is using the shared instancedPickingColors buffer\n */\n usesPickingColorCache: boolean;\n /**\n * Dirty flags of the layer's props and state\n */\n changeFlags!: ChangeFlags;\n\n /** The last viewport rendered by this layer */\n viewport?: Viewport;\n\n uniformTransitions!: UniformTransitionManager;\n /** Populated during uniform transition to replace user-supplied values */\n propsInTransition?: LayerT['props'];\n\n constructor({\n attributeManager,\n layer\n }: {\n attributeManager: AttributeManager | null;\n layer: LayerT;\n }) {\n super(layer);\n this.attributeManager = attributeManager;\n this.needsRedraw = true;\n this.needsUpdate = true;\n this.subLayers = null;\n this.usesPickingColorCache = false;\n }\n\n get layer(): LayerT {\n return this.component;\n }\n\n set layer(layer: LayerT) {\n this.component = layer;\n }\n\n /* Override base Component methods with Layer-specific handling */\n\n protected _fetch(propName, url: string) {\n const fetch = this.component.props.fetch;\n if (fetch) {\n return fetch(url, {propName, layer: this.layer});\n }\n return super._fetch(propName, url);\n }\n\n protected _onResolve(propName: string, value: any) {\n const onDataLoad = this.component.props.onDataLoad;\n if (propName === 'data' && onDataLoad) {\n onDataLoad(value, {propName, layer: this.layer});\n }\n }\n\n protected _onError(propName: string, error: Error) {\n this.layer.raiseError(error, `loading ${propName} of ${this.layer}`);\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* eslint-disable react/no-direct-mutation-state */\nimport {COORDINATE_SYSTEM, OPERATION} from './constants';\nimport AttributeManager from './attribute/attribute-manager';\nimport UniformTransitionManager from './uniform-transition-manager';\nimport {diffProps, validateProps} from '../lifecycle/props';\nimport {LIFECYCLE, Lifecycle} from '../lifecycle/constants';\nimport {count} from '../utils/count';\nimport log from '../utils/log';\nimport debug from '../debug';\nimport GL from '@luma.gl/constants';\nimport {withParameters, setParameters} from '@luma.gl/core';\nimport assert from '../utils/assert';\nimport memoize from '../utils/memoize';\nimport {mergeShaders} from '../utils/shader';\nimport {projectPosition, getWorldPosition} from '../shaderlib/project/project-functions';\nimport typedArrayManager from '../utils/typed-array-manager';\n\nimport Component from '../lifecycle/component';\nimport LayerState, {ChangeFlags} from './layer-state';\n\nimport {worldToPixels} from '@math.gl/web-mercator';\n\nimport {load} from '@loaders.gl/core';\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {CoordinateSystem} from './constants';\nimport type Attribute from './attribute/attribute';\nimport type {Model} from '@luma.gl/engine';\nimport type {PickingInfo, GetPickingInfoParams} from './picking/pick-info';\nimport type Viewport from '../viewports/viewport';\nimport type {NumericArray} from '../types/types';\nimport type {DefaultProps} from '../lifecycle/prop-types';\nimport type {LayerProps} from '../types/layer-props';\nimport type {LayerContext} from './layer-manager';\n\nconst TRACE_CHANGE_FLAG = 'layer.changeFlag';\nconst TRACE_INITIALIZE = 'layer.initialize';\nconst TRACE_UPDATE = 'layer.update';\nconst TRACE_FINALIZE = 'layer.finalize';\nconst TRACE_MATCHED = 'layer.matched';\n\nconst MAX_PICKING_COLOR_CACHE_SIZE = 2 ** 24 - 1;\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n// Only compare the same two viewports once\nconst areViewportsEqual = memoize(\n ({oldViewport, viewport}: {oldViewport: Viewport; viewport: Viewport}): boolean => {\n return oldViewport.equals(viewport);\n }\n);\n\nlet pickingColorCache = new Uint8ClampedArray(0);\n\nconst defaultProps: DefaultProps = {\n // data: Special handling for null, see below\n data: {type: 'data', value: EMPTY_ARRAY, async: true},\n dataComparator: {type: 'function', value: null, compare: false, optional: true},\n _dataDiff: {\n type: 'function',\n // @ts-ignore __diff is not defined on data\n value: data => data && data.__diff,\n compare: false,\n optional: true\n },\n dataTransform: {type: 'function', value: null, compare: false, optional: true},\n onDataLoad: {type: 'function', value: null, compare: false, optional: true},\n onError: {type: 'function', value: null, compare: false, optional: true},\n fetch: {\n type: 'function',\n value: (\n url: string,\n {\n propName,\n layer,\n loaders,\n loadOptions,\n signal\n }: {\n propName: string;\n layer: LayerT;\n loaders?: Loader[];\n loadOptions?: any;\n signal?: AbortSignal;\n }\n ) => {\n const {resourceManager} = layer.context;\n loadOptions = loadOptions || layer.getLoadOptions();\n loaders = loaders || layer.props.loaders;\n if (signal) {\n loadOptions = {\n ...loadOptions,\n fetch: {\n ...loadOptions?.fetch,\n signal\n }\n };\n }\n\n let inResourceManager = resourceManager.contains(url);\n\n if (!inResourceManager && !loadOptions) {\n // If there is no layer-specific load options, then attempt to cache this resource in the data manager\n resourceManager.add({resourceId: url, data: load(url, loaders), persistent: false});\n inResourceManager = true;\n }\n if (inResourceManager) {\n return resourceManager.subscribe({\n resourceId: url,\n onChange: data => layer.internalState?.reloadAsyncProp(propName, data),\n consumerId: layer.id,\n requestId: propName\n });\n }\n\n return load(url, loaders, loadOptions);\n },\n compare: false\n },\n updateTriggers: {}, // Update triggers: a core change detection mechanism in deck.gl\n\n visible: true,\n pickable: false,\n opacity: {type: 'number', min: 0, max: 1, value: 1},\n operation: OPERATION.DRAW,\n\n onHover: {type: 'function', value: null, compare: false, optional: true},\n onClick: {type: 'function', value: null, compare: false, optional: true},\n onDragStart: {type: 'function', value: null, compare: false, optional: true},\n onDrag: {type: 'function', value: null, compare: false, optional: true},\n onDragEnd: {type: 'function', value: null, compare: false, optional: true},\n\n coordinateSystem: COORDINATE_SYSTEM.DEFAULT,\n coordinateOrigin: {type: 'array', value: [0, 0, 0], compare: true},\n modelMatrix: {type: 'array', value: null, compare: true, optional: true},\n wrapLongitude: false,\n positionFormat: 'XYZ',\n colorFormat: 'RGBA',\n\n parameters: {type: 'object', value: {}, optional: true, compare: true},\n transitions: null,\n extensions: [],\n loaders: {type: 'array', value: [], optional: true, compare: true},\n\n // Offset depth based on layer index to avoid z-fighting.\n // Negative values pull layer towards the camera\n // https://www.opengl.org/archives/resources/faq/technical/polygonoffset.htm\n getPolygonOffset: {\n type: 'function',\n value: ({layerIndex}) => [0, -layerIndex * 100],\n compare: false\n },\n\n // Selection/Highlighting\n highlightedObjectIndex: null,\n autoHighlight: false,\n highlightColor: {type: 'accessor', value: [0, 0, 128, 128]}\n};\n\nexport type UpdateParameters = {\n props: LayerT['props'];\n oldProps: LayerT['props'];\n context: LayerContext;\n changeFlags: ChangeFlags;\n};\n\nexport default abstract class Layer extends Component> {\n static defaultProps = defaultProps;\n static layerName: string = 'Layer';\n\n internalState: LayerState | null = null;\n lifecycle: Lifecycle = LIFECYCLE.NO_STATE; // Helps track and debug the life cycle of the layers\n\n // context and state can technically be null before a layer is initialized/matched.\n // However, they are most extensively accessed in a layer's lifecycle methods, where they are always defined.\n // Checking for null state constantly in layer implementation is unnecessarily verbose.\n context!: LayerContext; // Will reference layer manager's context, contains state shared by layers\n state!: Record; // Will be set to the shared layer state object during layer matching\n\n parent: Layer | null = null;\n\n get root(): Layer {\n // eslint-disable-next-line\n let layer: Layer = this;\n while (layer.parent) {\n layer = layer.parent;\n }\n return layer;\n }\n\n toString(): string {\n const className = (this.constructor as typeof Layer).layerName || this.constructor.name;\n return `${className}({id: '${this.props.id}'})`;\n }\n\n // Public API for users\n\n /** Projects a point with current view state from the current layer's coordinate system to screen */\n project(xyz: number[]): number[] {\n assert(this.internalState);\n const viewport = this.internalState.viewport || this.context.viewport;\n\n const worldPosition = getWorldPosition(xyz, {\n viewport,\n modelMatrix: this.props.modelMatrix,\n coordinateOrigin: this.props.coordinateOrigin,\n coordinateSystem: this.props.coordinateSystem\n });\n const [x, y, z] = worldToPixels(worldPosition, viewport.pixelProjectionMatrix);\n return xyz.length === 2 ? [x, y] : [x, y, z];\n }\n\n /** Unprojects a screen pixel to the current view's default coordinate system\n Note: this does not reverse `project`. */\n unproject(xy: number[]): number[] {\n assert(this.internalState);\n const viewport = this.internalState.viewport || this.context.viewport;\n return viewport.unproject(xy);\n }\n\n /** Projects a point with current view state from the current layer's coordinate system to the world space */\n projectPosition(\n xyz: number[],\n params?: {\n /** The viewport to use */\n viewport?: Viewport;\n /** The coordinate system that the supplied position is in. Default to the same as `coordinateSystem`. */\n fromCoordinateSystem?: CoordinateSystem;\n /** The coordinate origin that the supplied position is in. Default to the same as `coordinateOrigin`. */\n fromCoordinateOrigin?: [number, number, number];\n }\n ): [number, number, number] {\n assert(this.internalState);\n const viewport = this.internalState.viewport || this.context.viewport;\n\n return projectPosition(xyz, {\n viewport,\n modelMatrix: this.props.modelMatrix,\n coordinateOrigin: this.props.coordinateOrigin,\n coordinateSystem: this.props.coordinateSystem,\n ...params\n });\n }\n\n // Public API for custom layer implementation\n\n /** `true` if this layer renders other layers */\n get isComposite(): boolean {\n return false;\n }\n\n /** Updates selected state members and marks the layer for redraw */\n setState(partialState: any): void {\n this.setChangeFlags({stateChanged: true});\n Object.assign(this.state, partialState);\n this.setNeedsRedraw();\n }\n\n /** Sets the redraw flag for this layer, will trigger a redraw next animation frame */\n setNeedsRedraw(): void {\n if (this.internalState) {\n this.internalState.needsRedraw = true;\n }\n }\n\n /** Mark this layer as needs a deep update */\n setNeedsUpdate() {\n if (this.internalState) {\n this.context.layerManager.setNeedsUpdate(String(this));\n this.internalState.needsUpdate = true;\n }\n }\n\n /** Returns true if all async resources are loaded */\n get isLoaded(): boolean {\n return this.internalState ? !this.internalState.isAsyncPropLoading() : false;\n }\n\n /** Returns true if using shader-based WGS84 longitude wrapping */\n get wrapLongitude(): boolean {\n return this.props.wrapLongitude;\n }\n\n /** Returns true if the layer is visible in the picking pass */\n isPickable(): boolean {\n return this.props.pickable && this.props.visible;\n }\n\n /** Returns an array of models used by this layer, can be overriden by layer subclass */\n getModels(): Model[] {\n return (this.state && (this.state.models || (this.state.model && [this.state.model]))) || [];\n }\n\n /** Update shader module parameters */\n setModuleParameters(moduleParameters: any): void {\n for (const model of this.getModels()) {\n model.updateModuleSettings(moduleParameters);\n }\n }\n\n /** Returns the attribute manager of this layer */\n getAttributeManager(): AttributeManager | null {\n return this.internalState && this.internalState.attributeManager;\n }\n\n /** Returns the most recent layer that matched to this state\n (When reacting to an async event, this layer may no longer be the latest) */\n getCurrentLayer(): Layer | null {\n return this.internalState && this.internalState.layer;\n }\n\n /** Returns the default parse options for async props */\n getLoadOptions(): any {\n return this.props.loadOptions;\n }\n\n use64bitPositions(): boolean {\n const {coordinateSystem} = this.props;\n return (\n coordinateSystem === COORDINATE_SYSTEM.DEFAULT ||\n coordinateSystem === COORDINATE_SYSTEM.LNGLAT ||\n coordinateSystem === COORDINATE_SYSTEM.CARTESIAN\n );\n }\n\n // Event handling\n onHover(info: PickingInfo, pickingEvent): boolean {\n if (this.props.onHover) {\n return this.props.onHover(info, pickingEvent) || false;\n }\n return false;\n }\n\n onClick(info: PickingInfo, pickingEvent): boolean {\n if (this.props.onClick) {\n return this.props.onClick(info, pickingEvent) || false;\n }\n return false;\n }\n\n // Returns the picking color that doesn't match any subfeature\n // Use if some graphics do not belong to any pickable subfeature\n // @return {Array} - a black color\n nullPickingColor() {\n return [0, 0, 0];\n }\n\n // Returns the picking color that doesn't match any subfeature\n // Use if some graphics do not belong to any pickable subfeature\n encodePickingColor(i, target: number[] = []): number[] {\n target[0] = (i + 1) & 255;\n target[1] = ((i + 1) >> 8) & 255;\n target[2] = (((i + 1) >> 8) >> 8) & 255;\n return target;\n }\n\n // Returns the index corresponding to a picking color that doesn't match any subfeature\n // @param {Uint8Array} color - color array to be decoded\n // @return {Array} - the decoded picking color\n decodePickingColor(color) {\n assert(color instanceof Uint8Array);\n const [i1, i2, i3] = color;\n // 1 was added to seperate from no selection\n const index = i1 + i2 * 256 + i3 * 65536 - 1;\n return index;\n }\n\n /** Deduces number of instances. Intention is to support:\n - Explicit setting of numInstances\n - Auto-deduction for ES6 containers that define a size member\n - Auto-deduction for Classic Arrays via the built-in length attribute\n - Auto-deduction via arrays */\n getNumInstances(): number {\n // First Check if app has provided an explicit value\n if (Number.isFinite(this.props.numInstances)) {\n return this.props.numInstances as number;\n }\n\n // Second check if the layer has set its own value\n if (this.state && this.state.numInstances !== undefined) {\n return this.state.numInstances;\n }\n\n // Use container library to get a count for any ES6 container or object\n return count(this.props.data);\n }\n\n /** Buffer layout describes how many attribute values are packed for each data object\n The default (null) is one value each object.\n Some data formats (e.g. paths, polygons) have various length. Their buffer layout\n is in the form of [L0, L1, L2, ...] */\n getStartIndices(): NumericArray | null {\n // First Check if startIndices is provided as an explicit value\n if (this.props.startIndices) {\n return this.props.startIndices;\n }\n\n // Second check if the layer has set its own value\n if (this.state && this.state.startIndices) {\n return this.state.startIndices;\n }\n\n return null;\n }\n\n // Default implementation\n // Sublayers chould override this method to provide an accurate calculation of the bounds\n getBounds(): [number[], number[]] | null {\n const attributeManager = this.getAttributeManager();\n if (!attributeManager) return null;\n const {positions, instancePositions} = attributeManager.attributes;\n return (positions || instancePositions)?.getBounds();\n }\n\n // / LIFECYCLE METHODS - overridden by the layer subclasses\n\n /** Called once to set up the initial state. Layers can create WebGL resources here. */\n abstract initializeState(context: LayerContext): void;\n\n getShaders(shaders: any): any {\n for (const extension of this.props.extensions) {\n shaders = mergeShaders(shaders, extension.getShaders.call(this, extension));\n }\n return shaders;\n }\n\n /** Controls if updateState should be called. By default returns true if any prop has changed */\n shouldUpdateState(params: UpdateParameters>): boolean {\n return params.changeFlags.propsOrDataChanged;\n }\n\n /* eslint-disable-next-line complexity */\n /** Default implementation, all attributes will be invalidated and updated when data changes */\n updateState(params: UpdateParameters>): void {\n const attributeManager = this.getAttributeManager();\n const {dataChanged} = params.changeFlags;\n if (dataChanged && attributeManager) {\n if (Array.isArray(dataChanged)) {\n // is partial update\n for (const dataRange of dataChanged) {\n attributeManager.invalidateAll(dataRange);\n }\n } else {\n attributeManager.invalidateAll();\n }\n }\n\n const {props, oldProps} = params;\n const neededPickingBuffer =\n Number.isInteger(oldProps.highlightedObjectIndex) || oldProps.pickable;\n const needPickingBuffer = Number.isInteger(props.highlightedObjectIndex) || props.pickable;\n if (neededPickingBuffer !== needPickingBuffer && attributeManager) {\n const {pickingColors, instancePickingColors} = attributeManager.attributes;\n const pickingColorsAttribute = pickingColors || instancePickingColors;\n if (pickingColorsAttribute) {\n if (needPickingBuffer && pickingColorsAttribute.constant) {\n pickingColorsAttribute.constant = false;\n attributeManager.invalidate(pickingColorsAttribute.id);\n }\n if (!pickingColorsAttribute.value && !needPickingBuffer) {\n pickingColorsAttribute.constant = true;\n pickingColorsAttribute.value = [0, 0, 0];\n }\n }\n }\n }\n\n /** Called once when layer is no longer matched and state will be discarded. Layers can destroy WebGL resources here. */\n finalizeState(context: LayerContext): void {\n for (const model of this.getModels()) {\n model.delete();\n }\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.finalize();\n }\n if (this.context) {\n this.context.resourceManager.unsubscribe({consumerId: this.id});\n }\n if (this.internalState) {\n this.internalState.uniformTransitions.clear();\n this.internalState.finalize();\n }\n }\n\n // If state has a model, draw it with supplied uniforms\n draw(opts) {\n for (const model of this.getModels()) {\n model.draw(opts);\n }\n }\n\n // called to populate the info object that is passed to the event handler\n // @return null to cancel event\n getPickingInfo({info, mode, sourceLayer}: GetPickingInfoParams) {\n const {index} = info;\n\n if (index >= 0) {\n // If props.data is an indexable array, get the object\n if (Array.isArray(this.props.data)) {\n info.object = this.props.data[index];\n }\n }\n\n return info;\n }\n\n // END LIFECYCLE METHODS\n\n // / INTERNAL METHODS - called by LayerManager, DeckRenderer and DeckPicker\n\n /** (Internal) Propagate an error event through the system */\n raiseError(error: Error, message: string): void {\n if (message) {\n error.message = `${message}: ${error.message}`;\n }\n if (!this.props.onError?.(error)) {\n this.context?.onError?.(error, this);\n }\n }\n\n /** (Internal) Checks if this layer needs redraw */\n getNeedsRedraw(\n opts: {\n /** Reset redraw flags to false after the check */\n clearRedrawFlags: boolean;\n } = {clearRedrawFlags: false}\n ): string | false {\n return this._getNeedsRedraw(opts);\n }\n\n /** (Internal) Checks if this layer needs a deep update */\n needsUpdate(): boolean {\n if (!this.internalState) {\n return false;\n }\n\n // Call subclass lifecycle method\n return (\n this.internalState.needsUpdate ||\n this.hasUniformTransition() ||\n this.shouldUpdateState(this._getUpdateParams())\n );\n // End lifecycle method\n }\n\n /** Checks if this layer has ongoing uniform transition */\n hasUniformTransition(): boolean {\n return this.internalState?.uniformTransitions.active || false;\n }\n\n /** Called when this layer is rendered into the given viewport */\n activateViewport(viewport: Viewport): void {\n if (!this.internalState) {\n return;\n }\n\n const oldViewport = this.internalState.viewport;\n this.internalState.viewport = viewport;\n\n if (!oldViewport || !areViewportsEqual({oldViewport, viewport})) {\n this.setChangeFlags({viewportChanged: true});\n\n if (this.isComposite) {\n if (this.needsUpdate()) {\n // Composite layers may add/remove sublayers on viewport change\n // Because we cannot change the layers list during a draw cycle, we don't want to update sublayers right away\n // This will not call update immediately, but mark the layerManager as needs update on the next frame\n this.setNeedsUpdate();\n }\n } else {\n this._update();\n }\n }\n }\n\n /** Default implementation of attribute invalidation, can be redefined */\n protected invalidateAttribute(name = 'all'): void {\n const attributeManager = this.getAttributeManager();\n if (!attributeManager) {\n return;\n }\n\n if (name === 'all') {\n attributeManager.invalidateAll();\n } else {\n attributeManager.invalidate(name);\n }\n }\n\n /** Send updated attributes to the WebGL model */\n protected updateAttributes(changedAttributes: {[id: string]: Attribute}) {\n for (const model of this.getModels()) {\n this._setModelAttributes(model, changedAttributes);\n }\n }\n\n /** Recalculate any attributes if needed */\n protected _updateAttributes(): void {\n const attributeManager = this.getAttributeManager();\n if (!attributeManager) {\n return;\n }\n const props = this.props;\n\n // Figure out data length\n const numInstances = this.getNumInstances();\n const startIndices = this.getStartIndices();\n\n attributeManager.update({\n data: props.data,\n numInstances,\n startIndices,\n props,\n transitions: props.transitions,\n // @ts-ignore (TS2339) property attribute is not present on some acceptable data types\n buffers: props.data.attributes,\n context: this\n });\n\n const changedAttributes = attributeManager.getChangedAttributes({clearChangedFlags: true});\n this.updateAttributes(changedAttributes);\n }\n\n /** Update attribute transitions. This is called in drawLayer, no model updates required. */\n private _updateAttributeTransition() {\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.updateTransition();\n }\n }\n\n /** Update uniform (prop) transitions. This is called in updateState, may result in model updates. */\n private _updateUniformTransition(): Layer['props'] {\n // @ts-ignore (TS2339) internalState is alwasy defined when this method is called\n const {uniformTransitions} = this.internalState;\n if (uniformTransitions.active) {\n // clone props\n const propsInTransition = uniformTransitions.update();\n const props = Object.create(this.props);\n for (const key in propsInTransition) {\n Object.defineProperty(props, key, {value: propsInTransition[key]});\n }\n return props;\n }\n return this.props;\n }\n\n /** Updater for the automatically populated instancePickingColors attribute */\n protected calculateInstancePickingColors(\n attribute: Attribute,\n {numInstances}: {numInstances: number}\n ) {\n if (attribute.constant) {\n return;\n }\n\n // calculateInstancePickingColors always generates the same sequence.\n // pickingColorCache saves the largest generated sequence for reuse\n const cacheSize = Math.floor(pickingColorCache.length / 3);\n\n // Record when using the picking buffer cache, so that layers can always point at the most recently allocated cache\n // @ts-ignore (TS2531) internalState is always defined when this method is called\n this.internalState.usesPickingColorCache = true;\n\n if (cacheSize < numInstances) {\n if (numInstances > MAX_PICKING_COLOR_CACHE_SIZE) {\n log.warn(\n 'Layer has too many data objects. Picking might not be able to distinguish all objects.'\n )();\n }\n\n pickingColorCache = typedArrayManager.allocate(pickingColorCache, numInstances, {\n size: 3,\n copy: true,\n maxCount: Math.max(numInstances, MAX_PICKING_COLOR_CACHE_SIZE)\n });\n\n // If the attribute is larger than the cache, resize the cache and populate the missing chunk\n const newCacheSize = Math.floor(pickingColorCache.length / 3);\n const pickingColor = [];\n for (let i = cacheSize; i < newCacheSize; i++) {\n this.encodePickingColor(i, pickingColor);\n pickingColorCache[i * 3 + 0] = pickingColor[0];\n pickingColorCache[i * 3 + 1] = pickingColor[1];\n pickingColorCache[i * 3 + 2] = pickingColor[2];\n }\n }\n\n attribute.value = pickingColorCache.subarray(0, numInstances * 3);\n }\n\n /** Apply changed attributes to */\n protected _setModelAttributes(\n model: Model,\n changedAttributes: {\n [id: string]: Attribute;\n }\n ) {\n const attributeManager = this.getAttributeManager();\n // @ts-ignore luma.gl type issue\n const excludeAttributes = model.userData.excludeAttributes || {};\n // @ts-ignore (TS2531) this method is only called internally with attributeManager defined\n const shaderAttributes = attributeManager.getShaderAttributes(\n changedAttributes,\n excludeAttributes\n );\n\n model.setAttributes(shaderAttributes);\n }\n\n /** (Internal) Sets the picking color at the specified index to null picking color. Used for multi-depth picking.\n This method may be overriden by layer implementations */\n disablePickingIndex(objectIndex: number): void {\n this._disablePickingIndex(objectIndex);\n }\n\n // TODO - simplify subclassing interface\n protected _disablePickingIndex(objectIndex: number): void {\n // @ts-ignore (TS2531) this method is only called internally with attributeManager defined\n const {pickingColors, instancePickingColors} = this.getAttributeManager().attributes;\n const colors = pickingColors || instancePickingColors;\n if (!colors) {\n return;\n }\n\n const start = colors.getVertexOffset(objectIndex);\n const end = colors.getVertexOffset(objectIndex + 1);\n\n // Fill the sub buffer with 0s\n colors.buffer.subData({\n data: new Uint8Array(end - start),\n offset: start // 1 byte per element\n });\n }\n\n /** (Internal) Re-enable all picking indices after multi-depth picking */\n restorePickingColors(): void {\n // @ts-ignore (TS2531) this method is only called internally with attributeManager defined\n const {pickingColors, instancePickingColors} = this.getAttributeManager().attributes;\n const colors = pickingColors || instancePickingColors;\n if (!colors) {\n return;\n }\n // The picking color cache may have been freed and then reallocated. This ensures we read from the currently allocated cache.\n if (\n // @ts-ignore (TS2531) this method is only called internally with internalState defined\n this.internalState.usesPickingColorCache &&\n (colors.value as Uint8ClampedArray).buffer !== pickingColorCache.buffer\n ) {\n colors.value = pickingColorCache.subarray(0, (colors.value as Uint8ClampedArray).length);\n }\n colors.updateSubBuffer({startOffset: 0});\n }\n\n /* eslint-disable max-statements */\n /* (Internal) Called by layer manager when a new layer is found */\n _initialize() {\n assert(!this.internalState); // finalized layer cannot be reused\n assert(Number.isFinite(this.props.coordinateSystem)); // invalid coordinateSystem\n\n debug(TRACE_INITIALIZE, this);\n\n const attributeManager = this._getAttributeManager();\n\n if (attributeManager) {\n // All instanced layers get instancePickingColors attribute by default\n // Their shaders can use it to render a picking scene\n // TODO - this slightly slows down non instanced layers\n attributeManager.addInstanced({\n instancePickingColors: {\n type: GL.UNSIGNED_BYTE,\n size: 3,\n noAlloc: true,\n // Updaters are always called with `this` pointing to the layer\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateInstancePickingColors\n }\n });\n }\n\n this.internalState = new LayerState({\n attributeManager,\n layer: this\n });\n this._clearChangeFlags(); // populate this.internalState.changeFlags\n\n this.state = {};\n // for backwards compatibility with older layers\n // TODO - remove in next release\n /* eslint-disable accessor-pairs */\n Object.defineProperty(this.state, 'attributeManager', {\n get: () => {\n log.deprecated('layer.state.attributeManager', 'layer.getAttributeManager()')();\n return attributeManager;\n }\n });\n /* eslint-enable accessor-pairs */\n\n this.internalState.layer = this;\n this.internalState.uniformTransitions = new UniformTransitionManager(this.context.timeline);\n this.internalState.onAsyncPropUpdated = this._onAsyncPropUpdated.bind(this);\n\n // Ensure any async props are updated\n this.internalState.setAsyncProps(this.props);\n\n // Call subclass lifecycle methods\n this.initializeState(this.context);\n\n // Initialize extensions\n for (const extension of this.props.extensions) {\n extension.initializeState.call(this, this.context, extension);\n }\n // End subclass lifecycle methods\n\n // initializeState callback tends to clear state\n this.setChangeFlags({\n dataChanged: 'init',\n propsChanged: 'init',\n viewportChanged: true,\n extensionsChanged: true\n });\n\n this._update();\n }\n\n /** (Internal) Called by layer manager to transfer state from an old layer */\n _transferState(oldLayer: Layer): void {\n debug(TRACE_MATCHED, this, this === oldLayer);\n\n const {state, internalState} = oldLayer;\n\n if (this === oldLayer) {\n return;\n }\n\n // Move internalState\n this.internalState = internalState as LayerState;\n this.internalState.layer = this;\n\n // Move state\n this.state = state;\n // We keep the state ref on old layers to support async actions\n // oldLayer.state = null;\n\n // Ensure any async props are updated\n this.internalState.setAsyncProps(this.props);\n\n this._diffProps(this.props, this.internalState.getOldProps() as Layer['props']);\n }\n\n /** (Internal) Called by layer manager when a new layer is added or an existing layer is matched with a new instance */\n _update(): void {\n // Call subclass lifecycle method\n const stateNeedsUpdate = this.needsUpdate();\n // End lifecycle method\n debug(TRACE_UPDATE, this, stateNeedsUpdate);\n\n if (!stateNeedsUpdate) {\n return;\n }\n\n const currentProps = this.props;\n const context = this.context;\n const internalState = this.internalState as LayerState;\n\n const currentViewport = context.viewport;\n const propsInTransition = this._updateUniformTransition();\n internalState.propsInTransition = propsInTransition;\n // Overwrite this.context.viewport during update to use the last activated viewport on this layer\n // In multi-view applications, a layer may only be drawn in one of the views\n // Which would make the \"active\" viewport different from the shared context\n context.viewport = internalState.viewport || currentViewport;\n // Overwrite this.props during update to use in-transition prop values\n this.props = propsInTransition;\n\n try {\n const updateParams = this._getUpdateParams();\n const oldModels = this.getModels();\n\n // Safely call subclass lifecycle methods\n if (context.gl) {\n this.updateState(updateParams);\n } else {\n try {\n this.updateState(updateParams);\n } catch (error) {\n // ignore error if gl context is missing\n }\n }\n // Execute extension updates\n for (const extension of this.props.extensions) {\n extension.updateState.call(this, updateParams, extension);\n }\n\n const modelChanged = this.getModels()[0] !== oldModels[0];\n this._postUpdate(updateParams, modelChanged);\n // End subclass lifecycle methods\n } finally {\n // Restore shared context\n context.viewport = currentViewport;\n this.props = currentProps;\n this._clearChangeFlags();\n internalState.needsUpdate = false;\n internalState.resetOldProps();\n }\n }\n /* eslint-enable max-statements */\n\n /** (Internal) Called by manager when layer is about to be disposed \n Note: not guaranteed to be called on application shutdown */\n _finalize(): void {\n debug(TRACE_FINALIZE, this);\n\n // Call subclass lifecycle method\n this.finalizeState(this.context);\n // Finalize extensions\n for (const extension of this.props.extensions) {\n extension.finalizeState.call(this, extension);\n }\n }\n\n // Calculates uniforms\n _drawLayer({\n moduleParameters = null,\n uniforms = {},\n parameters = {}\n }: {\n moduleParameters: any;\n uniforms: any;\n parameters: any;\n }): void {\n this._updateAttributeTransition();\n\n const currentProps = this.props;\n const context = this.context;\n // Overwrite this.props during redraw to use in-transition prop values\n // `internalState.propsInTransition` could be missing if `updateState` failed\n // @ts-ignore (TS2339) internalState is alwasy defined when this method is called\n this.props = this.internalState.propsInTransition || currentProps;\n\n const opacity = this.props.opacity;\n // apply gamma to opacity to make it visually \"linear\"\n uniforms.opacity = Math.pow(opacity, 1 / 2.2);\n\n try {\n // TODO/ib - hack move to luma Model.draw\n if (moduleParameters) {\n this.setModuleParameters(moduleParameters);\n }\n\n // Apply polygon offset to avoid z-fighting\n // TODO - move to draw-layers\n const {getPolygonOffset} = this.props;\n const offsets = (getPolygonOffset && getPolygonOffset(uniforms)) || [0, 0];\n\n setParameters(context.gl, {polygonOffset: offsets});\n\n // Call subclass lifecycle method\n withParameters(context.gl, parameters, () => {\n const opts = {moduleParameters, uniforms, parameters, context};\n\n // extensions\n for (const extension of this.props.extensions) {\n extension.draw.call(this, opts, extension);\n }\n\n this.draw(opts);\n });\n } finally {\n this.props = currentProps;\n }\n\n // End lifecycle method\n }\n\n // Helper methods\n /** Returns the current change flags */\n getChangeFlags(): ChangeFlags | undefined {\n return this.internalState?.changeFlags;\n }\n\n /* eslint-disable complexity */\n /** Dirty some change flags, will be handled by updateLayer */\n setChangeFlags(flags: Partial): void {\n if (!this.internalState) {\n return;\n }\n const {changeFlags} = this.internalState;\n\n /* eslint-disable no-fallthrough, max-depth */\n for (const key in flags) {\n if (flags[key]) {\n let flagChanged = false;\n switch (key) {\n case 'dataChanged':\n // changeFlags.dataChanged may be `false`, a string (reason) or an array of ranges\n const dataChangedReason = flags[key];\n const prevDataChangedReason = changeFlags[key];\n if (dataChangedReason && Array.isArray(prevDataChangedReason)) {\n // Merge partial updates\n changeFlags.dataChanged = Array.isArray(dataChangedReason)\n ? prevDataChangedReason.concat(dataChangedReason)\n : dataChangedReason;\n flagChanged = true;\n }\n\n default:\n if (!changeFlags[key]) {\n changeFlags[key] = flags[key];\n flagChanged = true;\n }\n }\n if (flagChanged) {\n debug(TRACE_CHANGE_FLAG, this, key, flags);\n }\n }\n }\n /* eslint-enable no-fallthrough, max-depth */\n\n // Update composite flags\n const propsOrDataChanged = Boolean(\n changeFlags.dataChanged ||\n changeFlags.updateTriggersChanged ||\n changeFlags.propsChanged ||\n changeFlags.extensionsChanged\n );\n changeFlags.propsOrDataChanged = propsOrDataChanged;\n changeFlags.somethingChanged =\n propsOrDataChanged || changeFlags.viewportChanged || changeFlags.stateChanged;\n }\n /* eslint-enable complexity */\n\n /** Clear all changeFlags, typically after an update */\n private _clearChangeFlags(): void {\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n this.internalState.changeFlags = {\n dataChanged: false,\n propsChanged: false,\n updateTriggersChanged: false,\n viewportChanged: false,\n stateChanged: false,\n extensionsChanged: false,\n propsOrDataChanged: false,\n somethingChanged: false\n };\n }\n\n /** Compares the layers props with old props from a matched older layer\n and extracts change flags that describe what has change so that state\n can be update correctly with minimal effort */\n private _diffProps(newProps: Layer['props'], oldProps: Layer['props']) {\n const changeFlags = diffProps(newProps, oldProps);\n\n // iterate over changedTriggers\n if (changeFlags.updateTriggersChanged) {\n for (const key in changeFlags.updateTriggersChanged) {\n if (changeFlags.updateTriggersChanged[key]) {\n this.invalidateAttribute(key);\n }\n }\n }\n\n // trigger uniform transitions\n if (changeFlags.transitionsChanged) {\n for (const key in changeFlags.transitionsChanged) {\n // prop changed and transition is enabled\n // @ts-ignore (TS2531) internalState is always defined when this method is called\n this.internalState.uniformTransitions.add(\n key,\n oldProps[key],\n newProps[key],\n newProps.transitions?.[key]\n );\n }\n }\n\n return this.setChangeFlags(changeFlags);\n }\n\n /** (Internal) called by layer manager to perform extra props validation (in development only) */\n validateProps(): void {\n validateProps(this.props);\n }\n\n /** (Internal) Called by deck picker when the hovered object changes to update the auto highlight */\n updateAutoHighlight(info: PickingInfo): void {\n if (this.props.autoHighlight && !Number.isInteger(this.props.highlightedObjectIndex)) {\n this._updateAutoHighlight(info);\n }\n }\n\n // May be overriden by subclasses\n\n // TODO - simplify subclassing interface\n /** Update picking module parameters to highlight the hovered object */\n protected _updateAutoHighlight(info: PickingInfo): void {\n const pickingModuleParameters: any = {\n pickingSelectedColor: info.picked ? info.color : null\n };\n const {highlightColor} = this.props;\n if (info.picked && typeof highlightColor === 'function') {\n pickingModuleParameters.pickingHighlightColor = highlightColor(info);\n }\n this.setModuleParameters(pickingModuleParameters);\n // setModuleParameters does not trigger redraw\n this.setNeedsRedraw();\n }\n\n /** Create new attribute manager */\n protected _getAttributeManager(): AttributeManager | null {\n const context = this.context;\n return new AttributeManager(context.gl, {\n id: this.props.id,\n stats: context.stats,\n timeline: context.timeline\n });\n }\n\n // Private methods\n\n /** Called after updateState to perform common tasks */\n protected _postUpdate(updateParams: UpdateParameters>, forceUpdate: boolean) {\n const {props, oldProps} = updateParams;\n\n this.setNeedsRedraw();\n // Check if attributes need recalculation\n this._updateAttributes();\n\n // Note: Automatic instance count update only works for single layers\n const {model} = this.state;\n model?.setInstanceCount(this.getNumInstances());\n\n // Set picking module parameters to match props\n const {autoHighlight, highlightedObjectIndex, highlightColor} = props;\n if (\n forceUpdate ||\n oldProps.autoHighlight !== autoHighlight ||\n oldProps.highlightedObjectIndex !== highlightedObjectIndex ||\n oldProps.highlightColor !== highlightColor\n ) {\n const parameters: any = {};\n if (!autoHighlight) {\n parameters.pickingSelectedColor = null;\n }\n if (Array.isArray(highlightColor)) {\n parameters.pickingHighlightColor = highlightColor;\n }\n\n // highlightedObjectIndex will overwrite any settings from auto highlighting.\n if (Number.isInteger(highlightedObjectIndex)) {\n parameters.pickingSelectedColor =\n Number.isFinite(highlightedObjectIndex) && (highlightedObjectIndex as number) >= 0\n ? this.encodePickingColor(highlightedObjectIndex)\n : null;\n }\n\n this.setModuleParameters(parameters);\n }\n }\n\n private _getUpdateParams(): UpdateParameters> {\n return {\n props: this.props,\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n oldProps: this.internalState.getOldProps() as PropsT,\n context: this.context,\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n changeFlags: this.internalState.changeFlags\n };\n }\n\n /** Checks state of attributes and model */\n private _getNeedsRedraw(opts: {clearRedrawFlags: boolean}): string | false {\n // this method may be called by the render loop as soon a the layer\n // has been created, so guard against uninitialized state\n if (!this.internalState) {\n return false;\n }\n\n let redraw: string | false = false;\n redraw = redraw || (this.internalState.needsRedraw && this.id);\n this.internalState.needsRedraw = this.internalState.needsRedraw && !opts.clearRedrawFlags;\n\n // TODO - is attribute manager needed? - Model should be enough.\n const attributeManager = this.getAttributeManager();\n const attributeManagerNeedsRedraw = attributeManager\n ? attributeManager.getNeedsRedraw(opts)\n : false;\n redraw = redraw || attributeManagerNeedsRedraw;\n\n return redraw;\n }\n\n /** Callback when asyn prop is loaded */\n private _onAsyncPropUpdated(): void {\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n this._diffProps(this.props, this.internalState.getOldProps());\n this.setNeedsUpdate();\n }\n}\n","/* eslint-disable complexity */\nimport type DataColumn from './data-column';\nimport type {BufferAccessor, ShaderAttributeOptions} from './data-column';\nimport type {Buffer} from '@luma.gl/webgl';\nimport type {NumericArray} from '../../types/types';\n\nexport interface IShaderAttribute {\n value: NumericArray | null;\n getValue(): [Buffer, BufferAccessor] | NumericArray | null;\n}\n\n/* This class creates a luma.gl-compatible \"view\" on top of a DataColumn instance */\nexport default class ShaderAttribute implements IShaderAttribute {\n opts: ShaderAttributeOptions;\n source: DataColumn;\n\n constructor(dataColumn: DataColumn, opts: ShaderAttributeOptions) {\n // Options that cannot be changed later\n this.opts = opts;\n this.source = dataColumn;\n }\n\n get value(): NumericArray | null {\n return this.source.value;\n }\n\n getValue(): [Buffer, BufferAccessor] | NumericArray | null {\n const buffer = this.source.getBuffer();\n const accessor = this.getAccessor();\n if (buffer) {\n return [buffer, accessor];\n }\n\n const {value} = this.source;\n const {size} = accessor;\n let constantValue = value;\n\n if (value && value.length !== size) {\n constantValue = new Float32Array(size);\n // initiate offset values\n const index = accessor.elementOffset || 0; // element offset\n for (let i = 0; i < size; ++i) {\n constantValue[i] = value[index + i];\n }\n }\n\n return constantValue;\n }\n\n getAccessor() {\n return {\n // source data accessor\n ...this.source.getAccessor(),\n // shader attribute overrides\n ...this.opts\n };\n }\n}\n","/* eslint-disable complexity */\nimport GL from '@luma.gl/constants';\nimport {hasFeature, FEATURES, Buffer} from '@luma.gl/core';\nimport ShaderAttribute, {IShaderAttribute} from './shader-attribute';\nimport {glArrayFromType} from './gl-utils';\nimport typedArrayManager from '../../utils/typed-array-manager';\nimport {toDoublePrecisionArray} from '../../utils/math-utils';\nimport log from '../../utils/log';\n\nimport type {Buffer as LumaBuffer} from '@luma.gl/webgl';\nimport type {TypedArray, NumericArray, TypedArrayConstructor} from '../../types/types';\n\nexport type BufferAccessor = {\n /** A WebGL data type, see [vertexAttribPointer](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer#parameters). */\n type?: number;\n /** The number of elements per vertex attribute. */\n size?: number;\n /** 1 if instanced. */\n divisor?: number;\n /** Offset of the first vertex attribute into the buffer, in bytes. */\n offset?: number;\n /** The offset between the beginning of consecutive vertex attributes, in bytes. */\n stride?: number;\n /** Whether data values should be normalized. Note that all color attributes in deck.gl layers are normalized by default. */\n normalized?: boolean;\n integer?: boolean;\n};\n\nexport type ShaderAttributeOptions = Partial & {\n offset: number;\n stride: number;\n vertexOffset?: number;\n elementOffset?: number;\n};\n\nfunction getStride(accessor: DataColumnSettings): number {\n return accessor.stride || accessor.size * accessor.bytesPerElement;\n}\n\nfunction resolveShaderAttribute(\n baseAccessor: DataColumnSettings,\n shaderAttributeOptions: Partial\n): ShaderAttributeOptions {\n if (shaderAttributeOptions.offset) {\n log.removed('shaderAttribute.offset', 'vertexOffset, elementOffset')();\n }\n\n // All shader attributes share the parent's stride\n const stride = getStride(baseAccessor);\n // `vertexOffset` is used to access the neighboring vertex's value\n // e.g. `nextPositions` in polygon\n const vertexOffset =\n shaderAttributeOptions.vertexOffset !== undefined\n ? shaderAttributeOptions.vertexOffset\n : baseAccessor.vertexOffset || 0;\n // `elementOffset` is defined when shader attribute's size is smaller than the parent's\n // e.g. `translations` in transform matrix\n const elementOffset = shaderAttributeOptions.elementOffset || 0;\n const offset =\n // offsets defined by the attribute\n vertexOffset * stride +\n elementOffset * baseAccessor.bytesPerElement +\n // offsets defined by external buffers if any\n (baseAccessor.offset || 0);\n\n return {\n ...shaderAttributeOptions,\n offset,\n stride\n };\n}\n\nfunction resolveDoublePrecisionShaderAttributes(\n baseAccessor: DataColumnSettings,\n shaderAttributeOptions: Partial\n): {\n high: ShaderAttributeOptions;\n low: ShaderAttributeOptions;\n} {\n const resolvedOptions = resolveShaderAttribute(baseAccessor, shaderAttributeOptions);\n\n return {\n high: resolvedOptions,\n low: {\n ...resolvedOptions,\n offset: resolvedOptions.offset + baseAccessor.size * 4\n }\n };\n}\n\nexport type DataColumnOptions = Options &\n BufferAccessor & {\n id?: string;\n vertexOffset?: number;\n fp64?: boolean;\n logicalType?: number;\n isIndexed?: boolean;\n defaultValue?: number | number[];\n };\n\ntype DataColumnSettings = DataColumnOptions & {\n type: number;\n size: number;\n logicalType?: number;\n bytesPerElement: number;\n defaultValue: number[];\n defaultType: TypedArrayConstructor;\n};\n\ntype DataColumnInternalState = State & {\n externalBuffer: LumaBuffer | null;\n bufferAccessor: DataColumnSettings;\n allocatedValue: TypedArray | null;\n numInstances: number;\n bounds: [number[], number[]] | null;\n constant: boolean;\n};\n\nexport default class DataColumn implements IShaderAttribute {\n gl: WebGLRenderingContext;\n id: string;\n size: number;\n settings: DataColumnSettings;\n value: NumericArray | null;\n doublePrecision: boolean;\n\n protected _buffer: LumaBuffer | null;\n protected state: DataColumnInternalState;\n\n /* eslint-disable max-statements */\n constructor(gl: WebGLRenderingContext, opts: DataColumnOptions, state: State) {\n this.gl = gl;\n this.id = opts.id || '';\n this.size = opts.size || 1;\n\n const logicalType = opts.logicalType || opts.type;\n const doublePrecision = logicalType === GL.DOUBLE;\n\n let {defaultValue} = opts;\n defaultValue = Number.isFinite(defaultValue)\n ? [defaultValue]\n : defaultValue || new Array(this.size).fill(0);\n\n let bufferType: number;\n if (doublePrecision) {\n bufferType = GL.FLOAT;\n } else if (!logicalType && opts.isIndexed) {\n bufferType =\n gl && hasFeature(gl, FEATURES.ELEMENT_INDEX_UINT32) ? GL.UNSIGNED_INT : GL.UNSIGNED_SHORT;\n } else {\n bufferType = logicalType || GL.FLOAT;\n }\n\n // This is the attribute type defined by the layer\n // If an external buffer is provided, this.type may be overwritten\n // But we always want to use defaultType for allocation\n let defaultType = glArrayFromType(logicalType || bufferType || GL.FLOAT);\n this.doublePrecision = doublePrecision;\n\n // `fp64: false` tells a double-precision attribute to allocate Float32Arrays\n // by default when using auto-packing. This is more efficient in use cases where\n // high precision is unnecessary, but the `64Low` attribute is still required\n // by the shader.\n if (doublePrecision && opts.fp64 === false) {\n defaultType = Float32Array;\n }\n\n this.value = null;\n this.settings = {\n ...opts,\n defaultType,\n defaultValue: defaultValue as number[],\n logicalType,\n type: bufferType,\n size: this.size,\n bytesPerElement: defaultType.BYTES_PER_ELEMENT\n };\n this.state = {\n ...state,\n externalBuffer: null,\n bufferAccessor: this.settings,\n allocatedValue: null,\n numInstances: 0,\n bounds: null,\n constant: false\n };\n this._buffer = null;\n }\n /* eslint-enable max-statements */\n\n get isConstant(): boolean {\n return this.state.constant;\n }\n\n get buffer(): LumaBuffer {\n if (!this._buffer) {\n const {isIndexed, type} = this.settings;\n this._buffer = new Buffer(this.gl, {\n id: this.id,\n target: isIndexed ? GL.ELEMENT_ARRAY_BUFFER : GL.ARRAY_BUFFER,\n accessor: {type}\n }) as LumaBuffer;\n }\n return this._buffer;\n }\n\n get byteOffset(): number {\n const accessor = this.getAccessor();\n if (accessor.vertexOffset) {\n return accessor.vertexOffset * getStride(accessor);\n }\n return 0;\n }\n\n get numInstances(): number {\n return this.state.numInstances;\n }\n\n set numInstances(n: number) {\n this.state.numInstances = n;\n }\n\n delete(): void {\n if (this._buffer) {\n this._buffer.delete();\n this._buffer = null;\n }\n typedArrayManager.release(this.state.allocatedValue);\n }\n\n getShaderAttributes(\n id: string,\n options: Partial | null\n ): Record {\n if (this.doublePrecision) {\n const shaderAttributes = {};\n const isBuffer64Bit = this.value instanceof Float64Array;\n\n const doubleShaderAttributeDefs = resolveDoublePrecisionShaderAttributes(\n this.getAccessor(),\n options || {}\n );\n\n shaderAttributes[id] = new ShaderAttribute(this, doubleShaderAttributeDefs.high);\n shaderAttributes[`${id}64Low`] = isBuffer64Bit\n ? new ShaderAttribute(this, doubleShaderAttributeDefs.low)\n : new Float32Array(this.size); // use constant for low part if buffer is 32-bit\n return shaderAttributes;\n }\n if (options) {\n const shaderAttributeDef = resolveShaderAttribute(this.getAccessor(), options);\n return {[id]: new ShaderAttribute(this, shaderAttributeDef)};\n }\n return {[id]: this};\n }\n\n getBuffer(): LumaBuffer | null {\n if (this.state.constant) {\n return null;\n }\n return this.state.externalBuffer || this._buffer;\n }\n\n getValue(): [LumaBuffer, BufferAccessor] | NumericArray | null {\n if (this.state.constant) {\n return this.value;\n }\n return [this.getBuffer() as LumaBuffer, this.getAccessor() as BufferAccessor];\n }\n\n getAccessor(): DataColumnSettings {\n return this.state.bufferAccessor;\n }\n\n // Returns [min: Array(size), max: Array(size)]\n /* eslint-disable max-depth */\n getBounds(): [number[], number[]] | null {\n if (this.state.bounds) {\n return this.state.bounds;\n }\n let result: [number[], number[]] | null = null;\n if (this.state.constant && this.value) {\n const min = Array.from(this.value);\n result = [min, min];\n } else {\n const {value, numInstances, size} = this;\n const len = numInstances * size;\n if (value && len && value.length >= len) {\n const min = new Array(size).fill(Infinity);\n const max = new Array(size).fill(-Infinity);\n for (let i = 0; i < len; ) {\n for (let j = 0; j < size; j++) {\n const v = value[i++];\n if (v < min[j]) min[j] = v;\n if (v > max[j]) max[j] = v;\n }\n }\n result = [min, max];\n }\n }\n this.state.bounds = result;\n return result;\n }\n\n // returns true if success\n // eslint-disable-next-line max-statements\n setData(\n data:\n | TypedArray\n | LumaBuffer\n | ({\n constant?: boolean;\n value?: NumericArray;\n buffer?: LumaBuffer;\n } & Partial)\n ): boolean {\n const {state} = this;\n\n let opts: {\n constant?: boolean;\n value?: NumericArray;\n buffer?: LumaBuffer;\n } & Partial;\n if (ArrayBuffer.isView(data)) {\n opts = {value: data};\n } else if (data instanceof Buffer) {\n opts = {buffer: data as LumaBuffer};\n } else {\n opts = data;\n }\n\n const accessor: DataColumnSettings = {...this.settings, ...opts};\n state.bufferAccessor = accessor;\n state.bounds = null; // clear cached bounds\n\n if (opts.constant) {\n // set constant\n let value = opts.value as NumericArray;\n value = this._normalizeValue(value, [], 0);\n if (this.settings.normalized) {\n value = this.normalizeConstant(value);\n }\n const hasChanged = !state.constant || !this._areValuesEqual(value, this.value);\n\n if (!hasChanged) {\n return false;\n }\n state.externalBuffer = null;\n state.constant = true;\n this.value = value;\n } else if (opts.buffer) {\n const buffer = opts.buffer;\n state.externalBuffer = buffer;\n state.constant = false;\n this.value = opts.value || null;\n const isBuffer64Bit = opts.value instanceof Float64Array;\n\n // Copy the type of the buffer into the accessor\n // @ts-ignore\n accessor.type = opts.type || buffer.accessor.type;\n // @ts-ignore\n accessor.bytesPerElement = buffer.accessor.BYTES_PER_ELEMENT * (isBuffer64Bit ? 2 : 1);\n accessor.stride = getStride(accessor);\n } else if (opts.value) {\n this._checkExternalBuffer(opts);\n\n let value = opts.value as TypedArray;\n state.externalBuffer = null;\n state.constant = false;\n this.value = value;\n\n accessor.bytesPerElement = value.BYTES_PER_ELEMENT;\n accessor.stride = getStride(accessor);\n\n const {buffer, byteOffset} = this;\n\n if (this.doublePrecision && value instanceof Float64Array) {\n value = toDoublePrecisionArray(value, accessor);\n }\n\n // A small over allocation is used as safety margin\n // Shader attributes may try to access this buffer with bigger offsets\n const requiredBufferSize = value.byteLength + byteOffset + accessor.stride * 2;\n if (buffer.byteLength < requiredBufferSize) {\n buffer.reallocate(requiredBufferSize);\n }\n // Hack: force Buffer to infer data type\n buffer.setAccessor(null);\n buffer.subData({data: value, offset: byteOffset});\n // @ts-ignore\n accessor.type = opts.type || buffer.accessor.type;\n }\n\n return true;\n }\n\n updateSubBuffer(\n opts: {\n startOffset?: number;\n endOffset?: number;\n } = {}\n ): void {\n this.state.bounds = null; // clear cached bounds\n\n const value = this.value as TypedArray;\n const {startOffset = 0, endOffset} = opts;\n this.buffer.subData({\n data:\n this.doublePrecision && value instanceof Float64Array\n ? toDoublePrecisionArray(value, {\n size: this.size,\n startIndex: startOffset,\n endIndex: endOffset\n })\n : value.subarray(startOffset, endOffset),\n offset: startOffset * value.BYTES_PER_ELEMENT + this.byteOffset\n });\n }\n\n allocate(numInstances: number, copy: boolean = false): boolean {\n const {state} = this;\n const oldValue = state.allocatedValue;\n\n // Allocate at least one element to ensure a valid buffer\n const value = typedArrayManager.allocate(oldValue, numInstances + 1, {\n size: this.size,\n type: this.settings.defaultType,\n copy\n });\n\n this.value = value;\n\n const {buffer, byteOffset} = this;\n\n if (buffer.byteLength < value.byteLength + byteOffset) {\n buffer.reallocate(value.byteLength + byteOffset);\n\n if (copy && oldValue) {\n // Upload the full existing attribute value to the GPU, so that updateBuffer\n // can choose to only update a partial range.\n // TODO - copy old buffer to new buffer on the GPU\n buffer.subData({\n data:\n oldValue instanceof Float64Array ? toDoublePrecisionArray(oldValue, this) : oldValue,\n offset: byteOffset\n });\n }\n }\n\n state.allocatedValue = value;\n state.constant = false;\n state.externalBuffer = null;\n state.bufferAccessor = this.settings;\n return true;\n }\n\n // PRIVATE HELPER METHODS\n protected _checkExternalBuffer(opts: {value?: NumericArray; normalized?: boolean}): void {\n const {value} = opts;\n if (!ArrayBuffer.isView(value)) {\n throw new Error(`Attribute ${this.id} value is not TypedArray`);\n }\n const ArrayType = this.settings.defaultType;\n\n let illegalArrayType = false;\n if (this.doublePrecision) {\n // not 32bit or 64bit\n illegalArrayType = value.BYTES_PER_ELEMENT < 4;\n }\n if (illegalArrayType) {\n throw new Error(`Attribute ${this.id} does not support ${value.constructor.name}`);\n }\n if (!(value instanceof ArrayType) && this.settings.normalized && !('normalized' in opts)) {\n log.warn(`Attribute ${this.id} is normalized`)();\n }\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer\n normalizeConstant(value: NumericArray): NumericArray {\n switch (this.settings.type) {\n case GL.BYTE:\n // normalize [-128, 127] to [-1, 1]\n return new Float32Array(value).map(x => ((x + 128) / 255) * 2 - 1);\n\n case GL.SHORT:\n // normalize [-32768, 32767] to [-1, 1]\n return new Float32Array(value).map(x => ((x + 32768) / 65535) * 2 - 1);\n\n case GL.UNSIGNED_BYTE:\n // normalize [0, 255] to [0, 1]\n return new Float32Array(value).map(x => x / 255);\n\n case GL.UNSIGNED_SHORT:\n // normalize [0, 65535] to [0, 1]\n return new Float32Array(value).map(x => x / 65535);\n\n default:\n // No normalization for gl.FLOAT and gl.HALF_FLOAT\n return value;\n }\n }\n\n /* check user supplied values and apply fallback */\n protected _normalizeValue(value: any, out: NumericArray, start: number): NumericArray {\n const {defaultValue, size} = this.settings;\n\n if (Number.isFinite(value)) {\n out[start] = value;\n return out;\n }\n if (!value) {\n out[start] = defaultValue[0];\n return out;\n }\n\n // Important - switch cases are 5x more performant than a for loop!\n /* eslint-disable no-fallthrough, default-case */\n switch (size) {\n case 4:\n out[start + 3] = Number.isFinite(value[3]) ? value[3] : defaultValue[3];\n case 3:\n out[start + 2] = Number.isFinite(value[2]) ? value[2] : defaultValue[2];\n case 2:\n out[start + 1] = Number.isFinite(value[1]) ? value[1] : defaultValue[1];\n case 1:\n out[start + 0] = Number.isFinite(value[0]) ? value[0] : defaultValue[0];\n break;\n\n default:\n // In the rare case where the attribute size > 4, do it the slow way\n // This is used for e.g. transform matrices\n let i = size;\n while (--i >= 0) {\n out[start + i] = Number.isFinite(value[i]) ? value[i] : defaultValue[i];\n }\n }\n\n return out;\n }\n\n protected _areValuesEqual(value1: any, value2: any): boolean {\n if (!value1 || !value2) {\n return false;\n }\n const {size} = this;\n for (let i = 0; i < size; i++) {\n if (value1[i] !== value2[i]) {\n return false;\n }\n }\n return true;\n }\n}\n","import GL from '@luma.gl/constants';\nimport type {TypedArrayConstructor} from '../../types/types';\n\n/* eslint-disable complexity */\nexport function glArrayFromType(glType: number): TypedArrayConstructor {\n // Sorted in some order of likelihood to reduce amount of comparisons\n switch (glType) {\n case GL.FLOAT:\n return Float32Array;\n case GL.DOUBLE:\n return Float64Array;\n case GL.UNSIGNED_SHORT:\n case GL.UNSIGNED_SHORT_5_6_5:\n case GL.UNSIGNED_SHORT_4_4_4_4:\n case GL.UNSIGNED_SHORT_5_5_5_1:\n return Uint16Array;\n case GL.UNSIGNED_INT:\n return Uint32Array;\n case GL.UNSIGNED_BYTE:\n return Uint8ClampedArray;\n case GL.BYTE:\n return Int8Array;\n case GL.SHORT:\n return Int16Array;\n case GL.INT:\n return Int32Array;\n default:\n throw new Error('Unknown GL type');\n }\n}\n/* eslint-enable complexity */\n","/*\n * range (Array)\n * + start (Number) - the start index (incl.)\n * + end (Number) - the end index (excl.)\n * rangeList (Array) - array of sorted, combined ranges\n */\nexport const EMPTY = [];\nexport const FULL = [[0, Infinity]];\n\n// Insert a range into a range collection\nexport function add(rangeList, range) {\n // Noop if range collection already covers all\n if (rangeList === FULL) {\n return rangeList;\n }\n\n // Validate the input range\n if (range[0] < 0) {\n range[0] = 0;\n }\n if (range[0] >= range[1]) {\n return rangeList;\n }\n\n // TODO - split off to tree-shakable Range class\n const newRangeList: number[] = [];\n const len = rangeList.length;\n let insertPosition = 0;\n\n for (let i = 0; i < len; i++) {\n const range0 = rangeList[i];\n\n if (range0[1] < range[0]) {\n // the current range is to the left of the new range\n newRangeList.push(range0);\n insertPosition = i + 1;\n } else if (range0[0] > range[1]) {\n // the current range is to the right of the new range\n newRangeList.push(range0);\n } else {\n range = [Math.min(range0[0], range[0]), Math.max(range0[1], range[1])];\n }\n }\n newRangeList.splice(insertPosition, 0, range);\n return newRangeList;\n}\n","/* eslint-disable complexity */\nimport DataColumn, {DataColumnOptions, ShaderAttributeOptions, BufferAccessor} from './data-column';\nimport {IShaderAttribute} from './shader-attribute';\nimport assert from '../../utils/assert';\nimport {createIterable, getAccessorFromBuffer} from '../../utils/iterable-utils';\nimport {fillArray} from '../../utils/flatten';\nimport * as range from '../../utils/range';\nimport {normalizeTransitionSettings, TransitionSettings} from './attribute-transition-utils';\nimport type {Buffer} from '@luma.gl/webgl';\n\nimport type {NumericArray, TypedArray} from '../../types/types';\n\nexport type Accessor = (\n object: DataType,\n context: {\n data: any;\n index: number;\n target: number[];\n }\n) => ReturnType;\n\nexport type Updater = (\n attribute: Attribute,\n {\n data,\n startRow,\n endRow,\n props,\n numInstances\n }: {\n data: any;\n startRow: number;\n endRow: number;\n props: any;\n numInstances: number;\n }\n) => void;\n\nexport type AttributeOptions = DataColumnOptions<{\n transition?: boolean | Partial;\n noAlloc?: boolean;\n update?: Updater;\n accessor?: Accessor | string | string[];\n transform?: (value: any) => any;\n shaderAttributes?: Record>;\n}>;\n\nexport type BinaryAttribute = Partial & {value?: TypedArray; buffer?: Buffer};\n\ntype AttributeInternalState = {\n startIndices: NumericArray | null;\n /** Legacy: external binary supplied via attribute name */\n lastExternalBuffer: TypedArray | Buffer | BinaryAttribute | null;\n /** External binary supplied via accessor name */\n binaryValue: TypedArray | Buffer | BinaryAttribute | null;\n binaryAccessor: Accessor | null;\n needsUpdate: string | boolean;\n needsRedraw: string | boolean;\n updateRanges: number[][];\n};\n\nexport default class Attribute extends DataColumn {\n /** Legacy approach to set attribute value - read `isConstant` instead for attribute state */\n constant: boolean = false;\n\n constructor(gl: WebGLRenderingContext, opts: AttributeOptions) {\n super(gl, opts, {\n startIndices: null,\n lastExternalBuffer: null,\n binaryValue: null,\n binaryAccessor: null,\n needsUpdate: true,\n needsRedraw: false,\n updateRanges: range.FULL\n });\n\n // eslint-disable-next-line\n this.settings.update = opts.update || (opts.accessor ? this._autoUpdater : undefined);\n\n Object.seal(this.settings);\n Object.seal(this.state);\n\n // Check all fields and generate helpful error messages\n this._validateAttributeUpdaters();\n }\n\n get startIndices(): NumericArray | null {\n return this.state.startIndices;\n }\n\n set startIndices(layout: NumericArray | null) {\n this.state.startIndices = layout;\n }\n\n needsUpdate(): string | boolean {\n return this.state.needsUpdate;\n }\n\n needsRedraw({clearChangedFlags = false}: {clearChangedFlags?: boolean} = {}): string | boolean {\n const needsRedraw = this.state.needsRedraw;\n this.state.needsRedraw = needsRedraw && !clearChangedFlags;\n return needsRedraw;\n }\n\n getUpdateTriggers(): string[] {\n const {accessor} = this.settings;\n\n // Backards compatibility: allow attribute name to be used as update trigger key\n return [this.id].concat((typeof accessor !== 'function' && accessor) || []);\n }\n\n supportsTransition(): boolean {\n return Boolean(this.settings.transition);\n }\n\n // Resolve transition settings object if transition is enabled, otherwise `null`\n getTransitionSetting(opts: Record): TransitionSettings | null {\n if (!opts || !this.supportsTransition()) {\n return null;\n }\n const {accessor} = this.settings;\n // TODO: have the layer resolve these transition settings itself?\n const layerSettings = this.settings.transition;\n // these are the transition settings passed in by the user\n const userSettings = Array.isArray(accessor)\n ? // @ts-ignore\n opts[accessor.find(a => opts[a])]\n : // @ts-ignore\n opts[accessor];\n\n // Shorthand: use duration instead of parameter object\n return normalizeTransitionSettings(userSettings, layerSettings);\n }\n\n setNeedsUpdate(reason: string = this.id, dataRange?: {startRow?: number; endRow?: number}): void {\n this.state.needsUpdate = this.state.needsUpdate || reason;\n this.setNeedsRedraw(reason);\n if (dataRange) {\n const {startRow = 0, endRow = Infinity} = dataRange;\n this.state.updateRanges = range.add(this.state.updateRanges, [startRow, endRow]);\n } else {\n this.state.updateRanges = range.FULL;\n }\n }\n\n clearNeedsUpdate(): void {\n this.state.needsUpdate = false;\n this.state.updateRanges = range.EMPTY;\n }\n\n setNeedsRedraw(reason: string = this.id): void {\n this.state.needsRedraw = this.state.needsRedraw || reason;\n }\n\n allocate(numInstances: number): boolean {\n const {state, settings} = this;\n\n if (settings.noAlloc) {\n // Data is provided through a Buffer object.\n return false;\n }\n\n if (settings.update) {\n super.allocate(numInstances, state.updateRanges !== range.FULL);\n return true;\n }\n\n return false;\n }\n\n updateBuffer({\n numInstances,\n data,\n props,\n context\n }: {\n numInstances: number;\n data: any;\n props: any;\n context: any;\n }): boolean {\n if (!this.needsUpdate()) {\n return false;\n }\n\n const {\n state: {updateRanges},\n settings: {update, noAlloc}\n } = this;\n\n let updated = true;\n if (update) {\n // Custom updater - typically for non-instanced layers\n for (const [startRow, endRow] of updateRanges) {\n update.call(context, this, {data, startRow, endRow, props, numInstances});\n }\n if (!this.value) {\n // no value was assigned during update\n } else if (\n this.constant ||\n this.buffer.byteLength < (this.value as TypedArray).byteLength + this.byteOffset\n ) {\n this.setData({\n value: this.value,\n constant: this.constant\n });\n // Setting attribute.constant in updater is a legacy approach that interferes with allocation in the next cycle\n // Respect it here but reset after use\n this.constant = false;\n } else {\n for (const [startRow, endRow] of updateRanges) {\n const startOffset = Number.isFinite(startRow) ? this.getVertexOffset(startRow) : 0;\n const endOffset = Number.isFinite(endRow)\n ? this.getVertexOffset(endRow)\n : noAlloc || !Number.isFinite(numInstances)\n ? this.value.length\n : numInstances * this.size;\n\n super.updateSubBuffer({startOffset, endOffset});\n }\n }\n this._checkAttributeArray();\n } else {\n updated = false;\n }\n\n this.clearNeedsUpdate();\n this.setNeedsRedraw();\n\n return updated;\n }\n\n // Use generic value\n // Returns true if successful\n setConstantValue(value?: NumericArray): boolean {\n if (value === undefined || typeof value === 'function') {\n return false;\n }\n\n const hasChanged = this.setData({constant: true, value});\n\n if (hasChanged) {\n this.setNeedsRedraw();\n }\n this.clearNeedsUpdate();\n return true;\n }\n\n // Use external buffer\n // Returns true if successful\n // eslint-disable-next-line max-statements\n setExternalBuffer(buffer?: TypedArray | Buffer | BinaryAttribute): boolean {\n const {state} = this;\n\n if (!buffer) {\n state.lastExternalBuffer = null;\n return false;\n }\n\n this.clearNeedsUpdate();\n\n if (state.lastExternalBuffer === buffer) {\n return true;\n }\n state.lastExternalBuffer = buffer;\n this.setNeedsRedraw();\n this.setData(buffer);\n return true;\n }\n\n // Binary value is a typed array packed from mapping the source data with the accessor\n // If the returned value from the accessor is the same as the attribute value, set it directly\n // Otherwise use the auto updater for transform/normalization\n setBinaryValue(\n buffer?: TypedArray | Buffer | BinaryAttribute,\n startIndices: NumericArray | null = null\n ): boolean {\n const {state, settings} = this;\n\n if (!buffer) {\n state.binaryValue = null;\n state.binaryAccessor = null;\n return false;\n }\n\n if (settings.noAlloc) {\n // Let the layer handle this\n return false;\n }\n\n if (state.binaryValue === buffer) {\n this.clearNeedsUpdate();\n return true;\n }\n state.binaryValue = buffer;\n this.setNeedsRedraw();\n\n const needsUpdate = settings.transform || startIndices !== this.startIndices;\n\n if (needsUpdate) {\n if (ArrayBuffer.isView(buffer)) {\n buffer = {value: buffer};\n }\n const binaryValue = buffer as BinaryAttribute;\n assert(ArrayBuffer.isView(binaryValue.value), `invalid ${settings.accessor}`);\n const needsNormalize = Boolean(binaryValue.size) && binaryValue.size !== this.size;\n\n state.binaryAccessor = getAccessorFromBuffer(binaryValue.value, {\n size: binaryValue.size || this.size,\n stride: binaryValue.stride,\n offset: binaryValue.offset,\n startIndices: startIndices as NumericArray,\n nested: needsNormalize\n });\n // Fall through to auto updater\n return false;\n }\n\n this.clearNeedsUpdate();\n this.setData(buffer);\n return true;\n }\n\n getVertexOffset(row: number): number {\n const {startIndices} = this;\n const vertexIndex = startIndices ? startIndices[row] : row;\n return vertexIndex * this.size;\n }\n\n getShaderAttributes(): Record {\n const shaderAttributeDefs = this.settings.shaderAttributes || {[this.id]: null};\n const shaderAttributes: Record = {};\n\n for (const shaderAttributeName in shaderAttributeDefs) {\n Object.assign(\n shaderAttributes,\n super.getShaderAttributes(shaderAttributeName, shaderAttributeDefs[shaderAttributeName])\n );\n }\n\n return shaderAttributes;\n }\n\n /* eslint-disable max-depth, max-statements */\n private _autoUpdater(\n attribute: Attribute,\n {\n data,\n startRow,\n endRow,\n props,\n numInstances\n }: {\n data: any;\n startRow: number;\n endRow: number;\n props: any;\n numInstances: number;\n }\n ): void {\n if (attribute.constant) {\n return;\n }\n const {settings, state, value, size, startIndices} = attribute;\n\n const {accessor, transform} = settings;\n const accessorFunc: Accessor =\n state.binaryAccessor ||\n // @ts-ignore\n (typeof accessor === 'function' ? accessor : props[accessor]);\n\n assert(typeof accessorFunc === 'function', `accessor \"${accessor}\" is not a function`);\n\n let i = attribute.getVertexOffset(startRow);\n const {iterable, objectInfo} = createIterable(data, startRow, endRow);\n for (const object of iterable) {\n objectInfo.index++;\n\n let objectValue = accessorFunc(object, objectInfo);\n if (transform) {\n // transform callbacks could be bound to a particular layer instance.\n // always point `this` to the current layer.\n objectValue = transform.call(this, objectValue);\n }\n\n if (startIndices) {\n const numVertices =\n (objectInfo.index < startIndices.length - 1\n ? startIndices[objectInfo.index + 1]\n : numInstances) - startIndices[objectInfo.index];\n if (objectValue && Array.isArray(objectValue[0])) {\n let startIndex = i;\n for (const item of objectValue) {\n attribute._normalizeValue(item, value as TypedArray, startIndex);\n startIndex += size;\n }\n } else if (objectValue && objectValue.length > size) {\n (value as TypedArray).set(objectValue, i);\n } else {\n attribute._normalizeValue(objectValue, objectInfo.target, 0);\n fillArray({\n target: value,\n source: objectInfo.target,\n start: i,\n count: numVertices\n });\n }\n i += numVertices * size;\n } else {\n attribute._normalizeValue(objectValue, value as TypedArray, i);\n i += size;\n }\n }\n }\n /* eslint-enable max-depth, max-statements */\n\n // Validate deck.gl level fields\n private _validateAttributeUpdaters() {\n const {settings} = this;\n\n // Check that 'update' is a valid function\n const hasUpdater = settings.noAlloc || typeof settings.update === 'function';\n if (!hasUpdater) {\n throw new Error(`Attribute ${this.id} missing update or accessor`);\n }\n }\n\n // check that the first few elements of the attribute are reasonable\n /* eslint-disable no-fallthrough */\n private _checkAttributeArray() {\n const {value} = this;\n const limit = Math.min(4, this.size);\n if (value && value.length >= limit) {\n let valid = true;\n switch (limit) {\n case 4:\n valid = valid && Number.isFinite(value[3]);\n case 3:\n valid = valid && Number.isFinite(value[2]);\n case 2:\n valid = valid && Number.isFinite(value[1]);\n case 1:\n valid = valid && Number.isFinite(value[0]);\n break;\n default:\n valid = false;\n }\n\n if (!valid) {\n throw new Error(`Illegal attribute generated for ${this.id}`);\n }\n }\n }\n /* eslint-enable no-fallthrough */\n}\n","import GL from '@luma.gl/constants';\nimport {Buffer, Transform} from '@luma.gl/core';\nimport Attribute from '../lib/attribute/attribute';\nimport {\n padBuffer,\n getAttributeTypeFromSize,\n getSourceBufferAttribute,\n getAttributeBufferLength,\n cycleBuffers,\n InterpolationTransitionSettings\n} from '../lib/attribute/attribute-transition-utils';\nimport Transition from './transition';\n\nimport type {Timeline, Transform as LumaTransform} from '@luma.gl/engine';\nimport type {Buffer as LumaBuffer} from '@luma.gl/webgl';\nimport type {NumericArray} from '../types/types';\nimport type GPUTransition from './gpu-transition';\n\nexport default class GPUInterpolationTransition implements GPUTransition {\n gl: WebGLRenderingContext;\n type = 'interpolation';\n attributeInTransition: Attribute;\n\n private settings?: InterpolationTransitionSettings;\n private attribute: Attribute;\n private transition: Transition;\n private currentStartIndices: NumericArray | null;\n private currentLength: number;\n private transform: LumaTransform;\n private buffers: LumaBuffer[];\n\n constructor({\n gl,\n attribute,\n timeline\n }: {\n gl: WebGLRenderingContext;\n attribute: Attribute;\n timeline: Timeline;\n }) {\n this.gl = gl;\n this.transition = new Transition(timeline);\n this.attribute = attribute;\n // this is the attribute we return during the transition - note: if it is a constant\n // attribute, it will be converted and returned as a regular attribute\n // `attribute.userData` is the original options passed when constructing the attribute.\n // This ensures that we set the proper `doublePrecision` flag and shader attributes.\n this.attributeInTransition = new Attribute(gl, attribute.settings);\n this.currentStartIndices = attribute.startIndices;\n // storing currentLength because this.buffer may be larger than the actual length we want to use\n // this is because we only reallocate buffers when they grow, not when they shrink,\n // due to performance costs\n this.currentLength = 0;\n this.transform = getTransform(gl, attribute);\n const bufferOpts = {\n byteLength: 0,\n usage: GL.DYNAMIC_COPY\n };\n this.buffers = [\n new Buffer(gl, bufferOpts), // from\n new Buffer(gl, bufferOpts) // current\n ];\n }\n\n get inProgress(): boolean {\n return this.transition.inProgress;\n }\n\n // this is called when an attribute's values have changed and\n // we need to start animating towards the new values\n // this also correctly resizes / pads the transform's buffers\n // in case the attribute's buffer has changed in length or in\n // startIndices\n start(transitionSettings: InterpolationTransitionSettings, numInstances: number): void {\n if (transitionSettings.duration <= 0) {\n this.transition.cancel();\n return;\n }\n this.settings = transitionSettings;\n\n const {gl, buffers, attribute} = this;\n // Alternate between two buffers when new transitions start.\n // Last destination buffer is used as an attribute (from state),\n // And the other buffer is now the current buffer.\n cycleBuffers(buffers);\n\n const padBufferOpts = {\n numInstances,\n attribute,\n fromLength: this.currentLength,\n fromStartIndices: this.currentStartIndices,\n getData: transitionSettings.enter\n };\n\n for (const buffer of buffers) {\n padBuffer({buffer, ...padBufferOpts});\n }\n\n this.currentStartIndices = attribute.startIndices;\n this.currentLength = getAttributeBufferLength(attribute, numInstances);\n this.attributeInTransition.setData({\n buffer: buffers[1],\n // Hack: Float64Array is required for double-precision attributes\n // to generate correct shader attributes\n value: attribute.value as NumericArray\n });\n\n this.transition.start(transitionSettings);\n\n this.transform.update({\n elementCount: Math.floor(this.currentLength / attribute.size),\n sourceBuffers: {\n aFrom: buffers[0],\n aTo: getSourceBufferAttribute(gl, attribute)\n },\n feedbackBuffers: {\n vCurrent: buffers[1]\n }\n });\n }\n\n update(): boolean {\n const updated = this.transition.update();\n if (updated) {\n const {duration, easing} = this.settings as InterpolationTransitionSettings;\n const {time} = this.transition;\n let t = time / duration;\n if (easing) {\n t = easing(t);\n }\n this.transform.run({\n uniforms: {time: t}\n });\n }\n return updated;\n }\n\n cancel(): void {\n this.transition.cancel();\n this.transform.delete();\n for (const buffer of this.buffers) {\n buffer.delete();\n }\n this.buffers.length = 0;\n }\n}\n\nconst vs = `\n#define SHADER_NAME interpolation-transition-vertex-shader\n\nuniform float time;\nattribute ATTRIBUTE_TYPE aFrom;\nattribute ATTRIBUTE_TYPE aTo;\nvarying ATTRIBUTE_TYPE vCurrent;\n\nvoid main(void) {\n vCurrent = mix(aFrom, aTo, time);\n gl_Position = vec4(0.0);\n}\n`;\n\nfunction getTransform(gl: WebGLRenderingContext, attribute: Attribute): LumaTransform {\n const attributeType = getAttributeTypeFromSize(attribute.size);\n return new Transform(gl, {\n vs,\n defines: {\n ATTRIBUTE_TYPE: attributeType\n },\n varyings: ['vCurrent']\n });\n}\n","import {Transform} from '@luma.gl/core';\nimport GPUInterpolationTransition from '../../transitions/gpu-interpolation-transition';\nimport GPUSpringTransition from '../../transitions/gpu-spring-transition';\nimport log from '../../utils/log';\n\nimport type {TransitionSettings} from './attribute-transition-utils';\nimport type Attribute from './attribute';\nimport type {Timeline} from '@luma.gl/engine';\nimport type GPUTransition from '../../transitions/gpu-transition';\nimport type {ConstructorOf} from '../../types/types';\n\nconst TRANSITION_TYPES: Record> = {\n interpolation: GPUInterpolationTransition,\n spring: GPUSpringTransition\n};\n\nexport default class AttributeTransitionManager {\n id: string;\n isSupported: boolean;\n\n private gl: WebGLRenderingContext;\n private timeline?: Timeline;\n\n private transitions: {[id: string]: GPUTransition};\n private needsRedraw: boolean;\n private numInstances: number;\n\n constructor(\n gl: WebGLRenderingContext,\n {\n id,\n timeline\n }: {\n id: string;\n timeline?: Timeline;\n }\n ) {\n this.id = id;\n this.gl = gl;\n this.timeline = timeline;\n\n this.transitions = {};\n this.needsRedraw = false;\n this.numInstances = 1;\n\n this.isSupported = Transform.isSupported(gl);\n }\n\n finalize(): void {\n for (const attributeName in this.transitions) {\n this._removeTransition(attributeName);\n }\n }\n\n /* Public methods */\n\n // Called when attribute manager updates\n // Check the latest attributes for updates.\n update({\n attributes,\n transitions,\n numInstances\n }: {\n attributes: {[id: string]: Attribute};\n transitions: any;\n numInstances: number;\n }): void {\n // Transform class will crash if elementCount is 0\n this.numInstances = numInstances || 1;\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const settings = attribute.getTransitionSetting(transitions);\n\n // this attribute might not support transitions?\n if (!settings) continue; // eslint-disable-line no-continue\n this._updateAttribute(attributeName, attribute, settings);\n }\n\n for (const attributeName in this.transitions) {\n const attribute = attributes[attributeName];\n if (!attribute || !attribute.getTransitionSetting(transitions)) {\n // Animated attribute has been removed\n this._removeTransition(attributeName);\n }\n }\n }\n\n // Returns `true` if attribute is transition-enabled\n hasAttribute(attributeName: string): boolean {\n const transition = this.transitions[attributeName];\n return transition && transition.inProgress;\n }\n\n // Get all the animated attributes\n getAttributes(): {[id: string]: Attribute} {\n const animatedAttributes = {};\n\n for (const attributeName in this.transitions) {\n const transition = this.transitions[attributeName];\n if (transition.inProgress) {\n animatedAttributes[attributeName] = transition.attributeInTransition;\n }\n }\n\n return animatedAttributes;\n }\n\n /* eslint-disable max-statements */\n // Called every render cycle, run transform feedback\n // Returns `true` if anything changes\n run(): boolean {\n if (!this.isSupported || this.numInstances === 0) {\n return false;\n }\n\n for (const attributeName in this.transitions) {\n const updated = this.transitions[attributeName].update();\n if (updated) {\n this.needsRedraw = true;\n }\n }\n\n const needsRedraw = this.needsRedraw;\n this.needsRedraw = false;\n return needsRedraw;\n }\n /* eslint-enable max-statements */\n\n /* Private methods */\n private _removeTransition(attributeName: string): void {\n this.transitions[attributeName].cancel();\n delete this.transitions[attributeName];\n }\n\n // Check an attributes for updates\n // Returns a transition object if a new transition is triggered.\n private _updateAttribute(\n attributeName: string,\n attribute: Attribute,\n settings: TransitionSettings\n ): void {\n const transition = this.transitions[attributeName];\n // an attribute can change transition type when it updates\n // let's remove the transition when that happens so we can create the new transition type\n // TODO: when switching transition types, make sure to carry over the attribute's\n // previous buffers, currentLength, startIndices, etc, to be used as the starting point\n // for the next transition\n let isNew = !transition || transition.type !== settings.type;\n if (isNew) {\n if (!this.isSupported) {\n log.warn(\n `WebGL2 not supported by this browser. Transition for ${attributeName} is disabled.`\n )();\n return;\n }\n\n if (transition) {\n this._removeTransition(attributeName);\n }\n\n const TransitionType = TRANSITION_TYPES[settings.type];\n if (TransitionType) {\n this.transitions[attributeName] = new TransitionType({\n attribute,\n timeline: this.timeline,\n gl: this.gl\n });\n } else {\n log.error(`unsupported transition type '${settings.type}'`)();\n isNew = false;\n }\n }\n\n if (isNew || attribute.needsRedraw()) {\n this.needsRedraw = true;\n this.transitions[attributeName].start(settings, this.numInstances);\n }\n }\n}\n","/* eslint-disable complexity, max-statements, max-params */\nimport GL from '@luma.gl/constants';\nimport {Buffer, Transform, Framebuffer, Texture2D, readPixelsToArray} from '@luma.gl/core';\nimport {\n padBuffer,\n getAttributeTypeFromSize,\n getSourceBufferAttribute,\n getAttributeBufferLength,\n cycleBuffers,\n SpringTransitionSettings\n} from '../lib/attribute/attribute-transition-utils';\nimport Attribute from '../lib/attribute/attribute';\nimport Transition from './transition';\n\nimport type {Timeline, Transform as LumaTransform} from '@luma.gl/engine';\nimport type {\n Buffer as LumaBuffer,\n Framebuffer as LumaFramebuffer,\n Texture2D as LumaTexture2D\n} from '@luma.gl/webgl';\nimport type {NumericArray} from '../types/types';\nimport type GPUTransition from './gpu-transition';\n\nexport default class GPUSpringTransition implements GPUTransition {\n gl: WebGLRenderingContext;\n type = 'spring';\n attributeInTransition: Attribute;\n\n private settings?: SpringTransitionSettings;\n private attribute: Attribute;\n private transition: Transition;\n private currentStartIndices: NumericArray | null;\n private currentLength: number;\n private texture: LumaTexture2D;\n private framebuffer: LumaFramebuffer;\n private transform: LumaTransform;\n private buffers: LumaBuffer[];\n\n constructor({\n gl,\n attribute,\n timeline\n }: {\n gl: WebGLRenderingContext;\n attribute: Attribute;\n timeline: Timeline;\n }) {\n this.gl = gl;\n this.type = 'spring';\n this.transition = new Transition(timeline);\n this.attribute = attribute;\n // this is the attribute we return during the transition - note: if it is a constant\n // attribute, it will be converted and returned as a regular attribute\n // `attribute.userData` is the original options passed when constructing the attribute.\n // This ensures that we set the proper `doublePrecision` flag and shader attributes.\n this.attributeInTransition = new Attribute(gl, {...attribute.settings, normalized: false});\n this.currentStartIndices = attribute.startIndices;\n // storing currentLength because this.buffer may be larger than the actual length we want to use\n // this is because we only reallocate buffers when they grow, not when they shrink,\n // due to performance costs\n this.currentLength = 0;\n this.texture = getTexture(gl);\n this.framebuffer = getFramebuffer(gl, this.texture);\n this.transform = getTransform(gl, attribute, this.framebuffer);\n const bufferOpts = {\n byteLength: 0,\n usage: GL.DYNAMIC_COPY\n };\n this.buffers = [\n new Buffer(gl, bufferOpts), // previous\n new Buffer(gl, bufferOpts), // current\n new Buffer(gl, bufferOpts) // next\n ];\n }\n\n get inProgress(): boolean {\n return this.transition.inProgress;\n }\n\n // this is called when an attribute's values have changed and\n // we need to start animating towards the new values\n // this also correctly resizes / pads the transform's buffers\n // in case the attribute's buffer has changed in length or in\n // startIndices\n start(transitionSettings: SpringTransitionSettings, numInstances: number): void {\n const {gl, buffers, attribute} = this;\n const padBufferOpts = {\n numInstances,\n attribute,\n fromLength: this.currentLength,\n fromStartIndices: this.currentStartIndices,\n getData: transitionSettings.enter\n };\n\n for (const buffer of buffers) {\n padBuffer({buffer, ...padBufferOpts});\n }\n\n this.settings = transitionSettings;\n this.currentStartIndices = attribute.startIndices;\n this.currentLength = getAttributeBufferLength(attribute, numInstances);\n this.attributeInTransition.setData({\n buffer: buffers[1],\n // Hack: Float64Array is required for double-precision attributes\n // to generate correct shader attributes\n value: attribute.value as NumericArray\n });\n\n // when an attribute changes values, a new transition is started. These\n // are properties that we have to store on this.transition but can change\n // when new transitions are started, so we have to keep them up-to-date.\n // this.transition.start() takes the latest settings and updates them.\n this.transition.start({...transitionSettings, duration: Infinity});\n\n this.transform.update({\n elementCount: Math.floor(this.currentLength / attribute.size),\n sourceBuffers: {\n aTo: getSourceBufferAttribute(gl, attribute)\n }\n });\n }\n\n update() {\n const {buffers, transform, framebuffer, transition} = this;\n const updated = transition.update();\n if (!updated) {\n return false;\n }\n const settings = this.settings as SpringTransitionSettings;\n\n transform.update({\n sourceBuffers: {\n aPrev: buffers[0],\n aCur: buffers[1]\n },\n feedbackBuffers: {\n vNext: buffers[2]\n }\n });\n transform.run({\n framebuffer,\n discard: false,\n clearRenderTarget: true,\n uniforms: {\n stiffness: settings.stiffness,\n damping: settings.damping\n },\n parameters: {\n depthTest: false,\n blend: true,\n viewport: [0, 0, 1, 1],\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: [GL.MAX, GL.MAX]\n }\n });\n\n cycleBuffers(buffers);\n this.attributeInTransition.setData({\n buffer: buffers[1],\n // Hack: Float64Array is required for double-precision attributes\n // to generate correct shader attributes\n value: this.attribute.value as NumericArray\n });\n\n const isTransitioning = readPixelsToArray(framebuffer)[0] > 0;\n\n if (!isTransitioning) {\n transition.end();\n }\n\n return true;\n }\n\n cancel() {\n this.transition.cancel();\n this.transform.delete();\n for (const buffer of this.buffers) {\n buffer.delete();\n }\n this.buffers.length = 0;\n this.texture.delete();\n this.framebuffer.delete();\n }\n}\n\nfunction getTransform(\n gl: WebGLRenderingContext,\n attribute: Attribute,\n framebuffer: LumaFramebuffer\n): LumaTransform {\n const attributeType = getAttributeTypeFromSize(attribute.size);\n return new Transform(gl, {\n framebuffer,\n vs: `\n#define SHADER_NAME spring-transition-vertex-shader\n\n#define EPSILON 0.00001\n\nuniform float stiffness;\nuniform float damping;\nattribute ATTRIBUTE_TYPE aPrev;\nattribute ATTRIBUTE_TYPE aCur;\nattribute ATTRIBUTE_TYPE aTo;\nvarying ATTRIBUTE_TYPE vNext;\nvarying float vIsTransitioningFlag;\n\nATTRIBUTE_TYPE getNextValue(ATTRIBUTE_TYPE cur, ATTRIBUTE_TYPE prev, ATTRIBUTE_TYPE dest) {\n ATTRIBUTE_TYPE velocity = cur - prev;\n ATTRIBUTE_TYPE delta = dest - cur;\n ATTRIBUTE_TYPE spring = delta * stiffness;\n ATTRIBUTE_TYPE damper = velocity * -1.0 * damping;\n return spring + damper + velocity + cur;\n}\n\nvoid main(void) {\n bool isTransitioning = length(aCur - aPrev) > EPSILON || length(aTo - aCur) > EPSILON;\n vIsTransitioningFlag = isTransitioning ? 1.0 : 0.0;\n\n vNext = getNextValue(aCur, aPrev, aTo);\n gl_Position = vec4(0, 0, 0, 1);\n gl_PointSize = 100.0;\n}\n`,\n fs: `\n#define SHADER_NAME spring-transition-is-transitioning-fragment-shader\n\nvarying float vIsTransitioningFlag;\n\nvoid main(void) {\n if (vIsTransitioningFlag == 0.0) {\n discard;\n }\n gl_FragColor = vec4(1.0);\n}`,\n defines: {\n ATTRIBUTE_TYPE: attributeType\n },\n varyings: ['vNext']\n });\n}\n\nfunction getTexture(gl: WebGLRenderingContext): LumaTexture2D {\n return new Texture2D(gl, {\n data: new Uint8Array(4),\n format: GL.RGBA,\n type: GL.UNSIGNED_BYTE,\n border: 0,\n mipmaps: false,\n dataFormat: GL.RGBA,\n width: 1,\n height: 1\n });\n}\n\nfunction getFramebuffer(gl: WebGLRenderingContext, texture: LumaTexture2D): LumaFramebuffer {\n return new Framebuffer(gl, {\n id: 'spring-transition-is-transitioning-framebuffer',\n width: 1,\n height: 1,\n attachments: {\n [GL.COLOR_ATTACHMENT0]: texture\n }\n });\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* eslint-disable guard-for-in */\nimport Attribute, {AttributeOptions} from './attribute';\nimport {IShaderAttribute} from './shader-attribute';\nimport log from '../../utils/log';\nimport debug from '../../debug';\nimport {NumericArray} from '../../types/types';\n\nimport AttributeTransitionManager from './attribute-transition-manager';\n\nimport type {Stat} from 'probe.gl';\nimport type {Timeline} from '@luma.gl/engine';\n\nconst TRACE_INVALIDATE = 'attributeManager.invalidate';\nconst TRACE_UPDATE_START = 'attributeManager.updateStart';\nconst TRACE_UPDATE_END = 'attributeManager.updateEnd';\nconst TRACE_ATTRIBUTE_UPDATE_START = 'attribute.updateStart';\nconst TRACE_ATTRIBUTE_ALLOCATE = 'attribute.allocate';\nconst TRACE_ATTRIBUTE_UPDATE_END = 'attribute.updateEnd';\n\nexport default class AttributeManager {\n /**\n * @classdesc\n * Automated attribute generation and management. Suitable when a set of\n * vertex shader attributes are generated by iteration over a data array,\n * and updates to these attributes are needed either when the data itself\n * changes, or when other data relevant to the calculations change.\n *\n * - First the application registers descriptions of its dynamic vertex\n * attributes using AttributeManager.add().\n * - Then, when any change that affects attributes is detected by the\n * application, the app will call AttributeManager.invalidate().\n * - Finally before it renders, it calls AttributeManager.update() to\n * ensure that attributes are automatically rebuilt if anything has been\n * invalidated.\n *\n * The application provided update functions describe how attributes\n * should be updated from a data array and are expected to traverse\n * that data array (or iterable) and fill in the attribute's typed array.\n *\n * Note that the attribute manager intentionally does not do advanced\n * change detection, but instead makes it easy to build such detection\n * by offering the ability to \"invalidate\" each attribute separately.\n */\n id: string;\n gl: WebGLRenderingContext;\n attributes: Record;\n updateTriggers: {[name: string]: string[]};\n needsRedraw: string | boolean;\n userData: any;\n\n private stats?: Stat;\n private attributeTransitionManager: AttributeTransitionManager;\n\n constructor(\n gl: WebGLRenderingContext,\n {\n id = 'attribute-manager',\n stats,\n timeline\n }: {\n id?: string;\n stats?: Stat;\n timeline?: Timeline;\n } = {}\n ) {\n this.id = id;\n this.gl = gl;\n\n this.attributes = {};\n\n this.updateTriggers = {};\n this.needsRedraw = true;\n\n this.userData = {};\n this.stats = stats;\n\n this.attributeTransitionManager = new AttributeTransitionManager(gl, {\n id: `${id}-transitions`,\n timeline\n });\n\n // For debugging sanity, prevent uninitialized members\n Object.seal(this);\n }\n\n finalize() {\n for (const attributeName in this.attributes) {\n this.attributes[attributeName].delete();\n }\n this.attributeTransitionManager.finalize();\n }\n\n // Returns the redraw flag, optionally clearing it.\n // Redraw flag will be set if any attributes attributes changed since\n // flag was last cleared.\n //\n // @param {String} [clearRedrawFlags=false] - whether to clear the flag\n // @return {false|String} - reason a redraw is needed.\n getNeedsRedraw(opts: {clearRedrawFlags?: boolean} = {clearRedrawFlags: false}): string | false {\n const redraw = this.needsRedraw;\n this.needsRedraw = this.needsRedraw && !opts.clearRedrawFlags;\n return redraw && this.id;\n }\n\n // Sets the redraw flag.\n // @param {Boolean} redraw=true\n setNeedsRedraw() {\n this.needsRedraw = true;\n }\n\n // Adds attributes\n add(attributes: {[id: string]: AttributeOptions}) {\n this._add(attributes);\n }\n\n // Adds attributes\n addInstanced(attributes: {[id: string]: AttributeOptions}) {\n this._add(attributes, {instanced: 1});\n }\n\n /**\n * Removes attributes\n * Takes an array of attribute names and delete them from\n * the attribute map if they exists\n *\n * @example\n * attributeManager.remove(['position']);\n *\n * @param {Object} attributeNameArray - attribute name array (see above)\n */\n remove(attributeNameArray: string[]) {\n for (const name of attributeNameArray) {\n if (this.attributes[name] !== undefined) {\n this.attributes[name].delete();\n delete this.attributes[name];\n }\n }\n }\n\n // Marks an attribute for update\n invalidate(triggerName: string, dataRange?: {startRow?: number; endRow?: number}) {\n const invalidatedAttributes = this._invalidateTrigger(triggerName, dataRange);\n // For performance tuning\n debug(TRACE_INVALIDATE, this, triggerName, invalidatedAttributes);\n }\n\n invalidateAll(dataRange?: {startRow?: number; endRow?: number}) {\n for (const attributeName in this.attributes) {\n this.attributes[attributeName].setNeedsUpdate(attributeName, dataRange);\n }\n // For performance tuning\n debug(TRACE_INVALIDATE, this, 'all');\n }\n\n // Ensure all attribute buffers are updated from props or data.\n update({\n data,\n numInstances,\n startIndices = null,\n transitions,\n props = {},\n buffers = {},\n context = {}\n }: {\n data: any;\n numInstances: number;\n startIndices?: NumericArray | null;\n transitions: any;\n props: any;\n buffers: any;\n context: any;\n }) {\n // keep track of whether some attributes are updated\n let updated = false;\n\n debug(TRACE_UPDATE_START, this);\n if (this.stats) {\n this.stats.get('Update Attributes').timeStart();\n }\n\n for (const attributeName in this.attributes) {\n const attribute = this.attributes[attributeName];\n const accessorName = attribute.settings.accessor;\n attribute.startIndices = startIndices;\n attribute.numInstances = numInstances;\n\n if (props[attributeName]) {\n log.removed(`props.${attributeName}`, `data.attributes.${attributeName}`)();\n }\n\n if (attribute.setExternalBuffer(buffers[attributeName])) {\n // Step 1: try update attribute directly from external buffers\n } else if (\n attribute.setBinaryValue(\n typeof accessorName === 'string' ? buffers[accessorName] : undefined,\n data.startIndices\n )\n ) {\n // Step 2: try set packed value from external typed array\n } else if (\n typeof accessorName === 'string' &&\n !buffers[accessorName] &&\n attribute.setConstantValue(props[accessorName])\n ) {\n // Step 3: try set constant value from props\n // Note: if buffers[accessorName] is supplied, ignore props[accessorName]\n // This may happen when setBinaryValue falls through to use the auto updater\n } else if (attribute.needsUpdate()) {\n // Step 4: update via updater callback\n updated = true;\n this._updateAttribute({\n attribute,\n numInstances,\n data,\n props,\n context\n });\n }\n\n this.needsRedraw = this.needsRedraw || attribute.needsRedraw();\n }\n\n if (updated) {\n // Only initiate alloc/update (and logging) if actually needed\n debug(TRACE_UPDATE_END, this, numInstances);\n }\n\n if (this.stats) {\n this.stats.get('Update Attributes').timeEnd();\n }\n\n this.attributeTransitionManager.update({\n attributes: this.attributes,\n numInstances,\n transitions\n });\n }\n\n // Update attribute transition to the current timestamp\n // Returns `true` if any transition is in progress\n updateTransition() {\n const {attributeTransitionManager} = this;\n const transitionUpdated = attributeTransitionManager.run();\n this.needsRedraw = this.needsRedraw || transitionUpdated;\n return transitionUpdated;\n }\n\n /**\n * Returns all attribute descriptors\n * Note: Format matches luma.gl Model/Program.setAttributes()\n * @return {Object} attributes - descriptors\n */\n getAttributes(): {[id: string]: Attribute} {\n return this.attributes;\n }\n\n /**\n * Returns changed attribute descriptors\n * This indicates which WebGLBuffers need to be updated\n * @return {Object} attributes - descriptors\n */\n getChangedAttributes(opts: {clearChangedFlags?: boolean} = {clearChangedFlags: false}): {\n [id: string]: Attribute;\n } {\n const {attributes, attributeTransitionManager} = this;\n\n const changedAttributes = {...attributeTransitionManager.getAttributes()};\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n if (attribute.needsRedraw(opts) && !attributeTransitionManager.hasAttribute(attributeName)) {\n changedAttributes[attributeName] = attribute;\n }\n }\n\n return changedAttributes;\n }\n\n // Returns shader attributes\n getShaderAttributes(\n attributes?: {[id: string]: Attribute},\n excludeAttributes: Record = {}\n ): {[id: string]: IShaderAttribute} {\n if (!attributes) {\n attributes = this.getAttributes();\n }\n const shaderAttributes = {};\n for (const attributeName in attributes) {\n if (!excludeAttributes[attributeName]) {\n Object.assign(shaderAttributes, attributes[attributeName].getShaderAttributes());\n }\n }\n return shaderAttributes;\n }\n\n // PRIVATE METHODS\n\n // Used to register an attribute\n private _add(attributes: {[id: string]: AttributeOptions}, extraProps: any = {}) {\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n\n // Initialize the attribute descriptor, with WebGL and metadata fields\n this.attributes[attributeName] = this._createAttribute(attributeName, attribute, extraProps);\n }\n\n this._mapUpdateTriggersToAttributes();\n }\n /* eslint-enable max-statements */\n\n private _createAttribute(name: string, attribute: AttributeOptions, extraProps: any) {\n // For expected default values see:\n // https://github.com/visgl/luma.gl/blob/1affe21352e289eeaccee2a876865138858a765c/modules/webgl/src/classes/accessor.js#L5-L13\n // and https://deck.gl/docs/api-reference/core/attribute-manager#add\n const props: AttributeOptions = {\n ...attribute,\n id: name,\n size: (attribute.isIndexed && 1) || attribute.size || 1,\n divisor: extraProps.instanced ? 1 : attribute.divisor || 0\n };\n\n return new Attribute(this.gl, props);\n }\n\n // build updateTrigger name to attribute name mapping\n private _mapUpdateTriggersToAttributes() {\n const triggers: {[name: string]: string[]} = {};\n\n for (const attributeName in this.attributes) {\n const attribute = this.attributes[attributeName];\n attribute.getUpdateTriggers().forEach(triggerName => {\n if (!triggers[triggerName]) {\n triggers[triggerName] = [];\n }\n triggers[triggerName].push(attributeName);\n });\n }\n\n this.updateTriggers = triggers;\n }\n\n private _invalidateTrigger(\n triggerName: string,\n dataRange?: {startRow?: number; endRow?: number}\n ): string[] {\n const {attributes, updateTriggers} = this;\n const invalidatedAttributes = updateTriggers[triggerName];\n\n if (invalidatedAttributes) {\n invalidatedAttributes.forEach(name => {\n const attribute = attributes[name];\n if (attribute) {\n attribute.setNeedsUpdate(attribute.id, dataRange);\n }\n });\n }\n return invalidatedAttributes;\n }\n\n private _updateAttribute(opts: {\n attribute: Attribute;\n numInstances: number;\n data: any;\n props: any;\n context: any;\n }) {\n const {attribute, numInstances} = opts;\n debug(TRACE_ATTRIBUTE_UPDATE_START, attribute);\n\n if (attribute.constant) {\n // The attribute is flagged as constant outside of an update cycle\n // Skip allocation and updater call\n attribute.setConstantValue(attribute.value as NumericArray);\n return;\n }\n\n if (attribute.allocate(numInstances)) {\n debug(TRACE_ATTRIBUTE_ALLOCATE, attribute, numInstances);\n }\n\n // Calls update on any buffers that need update\n const updated = attribute.updateBuffer(opts);\n if (updated) {\n this.needsRedraw = true;\n debug(TRACE_ATTRIBUTE_UPDATE_END, attribute, numInstances);\n }\n }\n}\n","const INF = 1e20;\n\nexport default class TinySDF {\n constructor({\n fontSize = 24,\n buffer = 3,\n radius = 8,\n cutoff = 0.25,\n fontFamily = 'sans-serif',\n fontWeight = 'normal',\n fontStyle = 'normal'\n } = {}) {\n this.buffer = buffer;\n this.cutoff = cutoff;\n this.radius = radius;\n\n // make the canvas size big enough to both have the specified buffer around the glyph\n // for \"halo\", and account for some glyphs possibly being larger than their font size\n const size = this.size = fontSize + buffer * 4;\n\n const canvas = this._createCanvas(size);\n const ctx = this.ctx = canvas.getContext('2d', {willReadFrequently: true});\n ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`;\n\n ctx.textBaseline = 'alphabetic';\n ctx.textAlign = 'left'; // Necessary so that RTL text doesn't have different alignment\n ctx.fillStyle = 'black';\n\n // temporary arrays for the distance transform\n this.gridOuter = new Float64Array(size * size);\n this.gridInner = new Float64Array(size * size);\n this.f = new Float64Array(size);\n this.z = new Float64Array(size + 1);\n this.v = new Uint16Array(size);\n }\n\n _createCanvas(size) {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = size;\n return canvas;\n }\n\n draw(char) {\n const {\n width: glyphAdvance,\n actualBoundingBoxAscent,\n actualBoundingBoxDescent,\n actualBoundingBoxLeft,\n actualBoundingBoxRight\n } = this.ctx.measureText(char);\n\n // The integer/pixel part of the top alignment is encoded in metrics.glyphTop\n // The remainder is implicitly encoded in the rasterization\n const glyphTop = Math.ceil(actualBoundingBoxAscent);\n const glyphLeft = 0;\n\n // If the glyph overflows the canvas size, it will be clipped at the bottom/right\n const glyphWidth = Math.min(this.size - this.buffer, Math.ceil(actualBoundingBoxRight - actualBoundingBoxLeft));\n const glyphHeight = Math.min(this.size - this.buffer, glyphTop + Math.ceil(actualBoundingBoxDescent));\n\n const width = glyphWidth + 2 * this.buffer;\n const height = glyphHeight + 2 * this.buffer;\n\n const len = Math.max(width * height, 0);\n const data = new Uint8ClampedArray(len);\n const glyph = {data, width, height, glyphWidth, glyphHeight, glyphTop, glyphLeft, glyphAdvance};\n if (glyphWidth === 0 || glyphHeight === 0) return glyph;\n\n const {ctx, buffer, gridInner, gridOuter} = this;\n ctx.clearRect(buffer, buffer, glyphWidth, glyphHeight);\n ctx.fillText(char, buffer, buffer + glyphTop);\n const imgData = ctx.getImageData(buffer, buffer, glyphWidth, glyphHeight);\n\n // Initialize grids outside the glyph range to alpha 0\n gridOuter.fill(INF, 0, len);\n gridInner.fill(0, 0, len);\n\n for (let y = 0; y < glyphHeight; y++) {\n for (let x = 0; x < glyphWidth; x++) {\n const a = imgData.data[4 * (y * glyphWidth + x) + 3] / 255; // alpha value\n if (a === 0) continue; // empty pixels\n\n const j = (y + buffer) * width + x + buffer;\n\n if (a === 1) { // fully drawn pixels\n gridOuter[j] = 0;\n gridInner[j] = INF;\n\n } else { // aliased pixels\n const d = 0.5 - a;\n gridOuter[j] = d > 0 ? d * d : 0;\n gridInner[j] = d < 0 ? d * d : 0;\n }\n }\n }\n\n edt(gridOuter, 0, 0, width, height, width, this.f, this.v, this.z);\n edt(gridInner, buffer, buffer, glyphWidth, glyphHeight, width, this.f, this.v, this.z);\n\n for (let i = 0; i < len; i++) {\n const d = Math.sqrt(gridOuter[i]) - Math.sqrt(gridInner[i]);\n data[i] = Math.round(255 - 255 * (d / this.radius + this.cutoff));\n }\n\n return glyph;\n }\n}\n\n// 2D Euclidean squared distance transform by Felzenszwalb & Huttenlocher https://cs.brown.edu/~pff/papers/dt-final.pdf\nfunction edt(data, x0, y0, width, height, gridSize, f, v, z) {\n for (let x = x0; x < x0 + width; x++) edt1d(data, y0 * gridSize + x, gridSize, height, f, v, z);\n for (let y = y0; y < y0 + height; y++) edt1d(data, y * gridSize + x0, 1, width, f, v, z);\n}\n\n// 1D squared distance transform\nfunction edt1d(grid, offset, stride, length, f, v, z) {\n v[0] = 0;\n z[0] = -INF;\n z[1] = INF;\n f[0] = grid[offset];\n\n for (let q = 1, k = 0, s = 0; q < length; q++) {\n f[q] = grid[offset + q * stride];\n const q2 = q * q;\n do {\n const r = v[k];\n s = (f[q] - f[r] + q2 - r * r) / (q - r) / 2;\n } while (s <= z[k] && --k > -1);\n\n k++;\n v[k] = q;\n z[k] = s;\n z[k + 1] = INF;\n }\n\n for (let q = 0, k = 0; q < length; q++) {\n while (z[k + 1] < q) k++;\n const r = v[k];\n const qr = q - r;\n grid[offset + q * stride] = f[r] + qr * qr;\n }\n}\n","/* eslint-disable max-statements, max-params, complexity, max-depth */\n// TODO merge with icon-layer/icon-manager\nimport {log} from '@deck.gl/core';\nimport type {NumericArray} from '@math.gl/core';\n\nconst MISSING_CHAR_WIDTH = 32;\nconst SINGLE_LINE = [];\n\nexport type Character = {\n x: number;\n y: number;\n width: number;\n height: number;\n layoutWidth: number;\n layoutHeight: number;\n layoutOffsetY?: number;\n};\n\nexport type CharacterMapping = Record;\n\nexport function nextPowOfTwo(number: number): number {\n return Math.pow(2, Math.ceil(Math.log2(number)));\n}\n\n/**\n * Generate character mapping table or update from an existing mapping table\n */\nexport function buildMapping({\n characterSet,\n getFontWidth,\n fontHeight,\n buffer,\n maxCanvasWidth,\n mapping = {},\n xOffset = 0,\n yOffset = 0\n}: {\n /** list of characters */\n characterSet: Set;\n /** function to get width of each character */\n getFontWidth: (char: string) => number;\n /** height of font */\n fontHeight: number;\n /** bleeding buffer surround each character */\n buffer: number;\n /** max width of font atlas */\n maxCanvasWidth: number;\n /** cached mapping table */\n mapping?: CharacterMapping;\n /** x position of last character in the existing mapping table */\n xOffset?: number;\n /** y position of last character in the existing mapping table */\n yOffset?: number;\n}): {\n /** new mapping table */\n mapping: CharacterMapping;\n /** x position of last character in the new mapping table */\n xOffset: number;\n /** y position of last character in the new mapping table */\n yOffset: number;\n /** height of the font atlas canvas, power of 2 */\n canvasHeight: number;\n} {\n let row = 0;\n // continue from x position of last character in the old mapping\n let x = xOffset;\n const rowHeight = fontHeight + buffer * 2;\n\n for (const char of characterSet) {\n if (!mapping[char]) {\n // measure texts\n // TODO - use Advanced text metrics when they are adopted:\n // https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics\n const width = getFontWidth(char);\n\n if (x + width + buffer * 2 > maxCanvasWidth) {\n x = 0;\n row++;\n }\n mapping[char] = {\n x: x + buffer,\n y: yOffset + row * rowHeight + buffer,\n width,\n height: rowHeight,\n layoutWidth: width,\n layoutHeight: fontHeight\n };\n x += width + buffer * 2;\n }\n }\n\n return {\n mapping,\n xOffset: x,\n yOffset: yOffset + row * rowHeight,\n canvasHeight: nextPowOfTwo(yOffset + (row + 1) * rowHeight)\n };\n}\n\nfunction getTextWidth(\n text: string[],\n startIndex: number,\n endIndex: number,\n mapping: CharacterMapping\n): number {\n let width = 0;\n for (let i = startIndex; i < endIndex; i++) {\n const character = text[i];\n width += mapping[character]?.layoutWidth || 0;\n }\n\n return width;\n}\n\nfunction breakAll(\n text: string[],\n startIndex: number,\n endIndex: number,\n maxWidth: number,\n iconMapping: CharacterMapping,\n target: number[]\n): number {\n let rowStartCharIndex = startIndex;\n let rowOffsetLeft = 0;\n\n for (let i = startIndex; i < endIndex; i++) {\n // 2. figure out where to break lines\n const textWidth = getTextWidth(text, i, i + 1, iconMapping);\n if (rowOffsetLeft + textWidth > maxWidth) {\n if (rowStartCharIndex < i) {\n target.push(i);\n }\n rowStartCharIndex = i;\n rowOffsetLeft = 0;\n }\n rowOffsetLeft += textWidth;\n }\n\n return rowOffsetLeft;\n}\n\nfunction breakWord(\n text: string[],\n startIndex: number,\n endIndex: number,\n maxWidth: number,\n iconMapping: CharacterMapping,\n target: number[]\n): number {\n let rowStartCharIndex = startIndex;\n let groupStartCharIndex = startIndex;\n let groupEndCharIndex = startIndex;\n let rowOffsetLeft = 0;\n\n for (let i = startIndex; i < endIndex; i++) {\n // 1. break text into word groups\n // - if current char is white space\n // - else if next char is white space\n // - else if reach last char\n if (text[i] === ' ') {\n groupEndCharIndex = i + 1;\n } else if (text[i + 1] === ' ' || i + 1 === endIndex) {\n groupEndCharIndex = i + 1;\n }\n\n if (groupEndCharIndex > groupStartCharIndex) {\n // 2. break text into next row at maxWidth\n let groupWidth = getTextWidth(text, groupStartCharIndex, groupEndCharIndex, iconMapping);\n if (rowOffsetLeft + groupWidth > maxWidth) {\n if (rowStartCharIndex < groupStartCharIndex) {\n target.push(groupStartCharIndex);\n rowStartCharIndex = groupStartCharIndex;\n rowOffsetLeft = 0;\n }\n\n // if a single text group is bigger than maxWidth, then `break-all`\n if (groupWidth > maxWidth) {\n groupWidth = breakAll(\n text,\n groupStartCharIndex,\n groupEndCharIndex,\n maxWidth,\n iconMapping,\n target\n );\n // move reference to last row\n rowStartCharIndex = target[target.length - 1];\n }\n }\n groupStartCharIndex = groupEndCharIndex;\n rowOffsetLeft += groupWidth;\n }\n }\n\n return rowOffsetLeft;\n}\n\n/**\n * Wrap the given text so that each line does not exceed the given max width.\n * Returns a list of indices where line breaks should be inserted.\n */\nexport function autoWrapping(\n text: string[],\n wordBreak: 'break-all' | 'break-word',\n maxWidth: number,\n iconMapping: CharacterMapping,\n startIndex: number = 0,\n endIndex: number\n): number[] {\n if (endIndex === undefined) {\n endIndex = text.length;\n }\n const result = [];\n if (wordBreak === 'break-all') {\n breakAll(text, startIndex, endIndex, maxWidth, iconMapping, result);\n } else {\n breakWord(text, startIndex, endIndex, maxWidth, iconMapping, result);\n }\n return result;\n}\n\nfunction transformRow(\n line: string[],\n startIndex: number,\n endIndex: number,\n iconMapping: CharacterMapping,\n leftOffsets: number[],\n rowSize: [number, number]\n) {\n let x = 0;\n let rowHeight = 0;\n\n for (let i = startIndex; i < endIndex; i++) {\n const character = line[i];\n const frame = iconMapping[character];\n if (frame) {\n if (!rowHeight) {\n // frame.height should be a constant\n rowHeight = frame.layoutHeight;\n }\n leftOffsets[i] = x + frame.layoutWidth / 2;\n x += frame.layoutWidth;\n } else {\n log.warn(`Missing character: ${character} (${character.codePointAt(0)})`)();\n leftOffsets[i] = x;\n x += MISSING_CHAR_WIDTH;\n }\n }\n\n rowSize[0] = x;\n rowSize[1] = rowHeight;\n}\n\n/**\n * Transform a text paragraph to an array of characters, each character contains\n */\nexport function transformParagraph(\n paragraph: string,\n /** CSS line-height */\n lineHeight: number,\n /** CSS word-break option */\n wordBreak: 'break-word' | 'break-all',\n /** CSS max-width */\n maxWidth: number,\n /** character mapping table for retrieving a character from font atlas */\n iconMapping: CharacterMapping\n): {\n /** x position of each character */\n x: number[];\n /** y position of each character */\n y: number[];\n /** the current row width of each character */\n rowWidth: number[];\n /** the width and height of the paragraph */\n size: [number, number];\n} {\n // Break into an array of characters\n // When dealing with double-length unicode characters, `str.length` or `str[i]` do not work\n const characters = Array.from(paragraph);\n const numCharacters = characters.length;\n const x = new Array(numCharacters) as number[];\n const y = new Array(numCharacters) as number[];\n const rowWidth = new Array(numCharacters) as number[];\n const autoWrappingEnabled =\n (wordBreak === 'break-word' || wordBreak === 'break-all') && isFinite(maxWidth) && maxWidth > 0;\n\n // maxWidth and height of the paragraph\n const size: [number, number] = [0, 0];\n const rowSize: [number, number] = [0, 0];\n let rowOffsetTop = 0;\n let lineStartIndex = 0;\n let lineEndIndex = 0;\n\n for (let i = 0; i <= numCharacters; i++) {\n const char = characters[i];\n if (char === '\\n' || i === numCharacters) {\n lineEndIndex = i;\n }\n\n if (lineEndIndex > lineStartIndex) {\n const rows = autoWrappingEnabled\n ? autoWrapping(characters, wordBreak, maxWidth, iconMapping, lineStartIndex, lineEndIndex)\n : SINGLE_LINE;\n\n for (let rowIndex = 0; rowIndex <= rows.length; rowIndex++) {\n const rowStart = rowIndex === 0 ? lineStartIndex : rows[rowIndex - 1];\n const rowEnd = rowIndex < rows.length ? rows[rowIndex] : lineEndIndex;\n\n transformRow(characters, rowStart, rowEnd, iconMapping, x, rowSize);\n for (let j = rowStart; j < rowEnd; j++) {\n const char = characters[j];\n const layoutOffsetY = iconMapping[char]?.layoutOffsetY || 0;\n y[j] = rowOffsetTop + rowSize[1] / 2 + layoutOffsetY;\n rowWidth[j] = rowSize[0];\n }\n\n rowOffsetTop = rowOffsetTop + rowSize[1] * lineHeight;\n size[0] = Math.max(size[0], rowSize[0]);\n }\n lineStartIndex = lineEndIndex;\n }\n\n if (char === '\\n') {\n // Make sure result.length matches paragraph.length\n x[lineStartIndex] = 0;\n y[lineStartIndex] = 0;\n rowWidth[lineStartIndex] = 0;\n lineStartIndex++;\n }\n }\n\n // last row\n size[1] = rowOffsetTop;\n return {x, y, rowWidth, size};\n}\n\nexport function getTextFromBuffer({\n value,\n length,\n stride,\n offset,\n startIndices,\n characterSet\n}: {\n value: Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array;\n length: number;\n stride?: number;\n offset?: number;\n startIndices: NumericArray;\n characterSet?: Set;\n}): {\n texts: string[];\n characterCount: number;\n} {\n const bytesPerElement = value.BYTES_PER_ELEMENT;\n const elementStride = stride ? stride / bytesPerElement : 1;\n const elementOffset = offset ? offset / bytesPerElement : 0;\n const characterCount =\n startIndices[length] || Math.ceil((value.length - elementOffset) / elementStride);\n const autoCharacterSet = characterSet && new Set();\n\n const texts = new Array(length);\n\n let codes = value;\n if (elementStride > 1 || elementOffset > 0) {\n const ArrayType = value.constructor as\n | Uint8ArrayConstructor\n | Uint8ClampedArrayConstructor\n | Uint16ArrayConstructor\n | Uint32ArrayConstructor;\n codes = new ArrayType(characterCount);\n for (let i = 0; i < characterCount; i++) {\n codes[i] = value[i * elementStride + elementOffset];\n }\n }\n\n for (let index = 0; index < length; index++) {\n const startIndex = startIndices[index];\n const endIndex = startIndices[index + 1] || characterCount;\n const codesAtIndex = codes.subarray(startIndex, endIndex);\n // @ts-ignore TS wants the argument to be number[] but typed array works too\n texts[index] = String.fromCodePoint.apply(null, codesAtIndex);\n if (autoCharacterSet) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n codesAtIndex.forEach(autoCharacterSet.add, autoCharacterSet);\n }\n }\n\n if (autoCharacterSet) {\n for (const charCode of autoCharacterSet) {\n characterSet.add(String.fromCodePoint(charCode));\n }\n }\n\n return {texts, characterCount};\n}\n","/**\n * LRU Cache class with limit\n *\n * Update order for each get/set operation\n * Delete oldest when reach given limit\n */\n\nexport default class LRUCache {\n private limit: number;\n private _cache: Record = {};\n /** access/update order, first item is oldest, last item is newest */\n private _order: string[] = [];\n\n constructor(limit: number = 5) {\n this.limit = limit;\n }\n\n get(key: string): ValueT {\n const value = this._cache[key];\n if (value) {\n // update order\n this._deleteOrder(key);\n this._appendOrder(key);\n }\n return value;\n }\n\n set(key: string, value: ValueT): void {\n if (!this._cache[key]) {\n // if reach limit, delete the oldest\n if (Object.keys(this._cache).length === this.limit) {\n this.delete(this._order[0]);\n }\n\n this._cache[key] = value;\n this._appendOrder(key);\n } else {\n // if found in cache, delete the old one, insert new one to the first of list\n this.delete(key);\n\n this._cache[key] = value;\n this._appendOrder(key);\n }\n }\n\n delete(key: string): void {\n const value = this._cache[key];\n if (value) {\n delete this._cache[key];\n this._deleteOrder(key);\n }\n }\n\n private _deleteOrder(key: string): void {\n const index = this._order.indexOf(key);\n if (index >= 0) {\n this._order.splice(index, 1);\n }\n }\n\n private _appendOrder(key: string): void {\n this._order.push(key);\n }\n}\n","/* global document */\nimport TinySDF from '@mapbox/tiny-sdf';\n\nimport {log} from '@deck.gl/core';\n\nimport {buildMapping, CharacterMapping} from './utils';\nimport LRUCache from './lru-cache';\n\nimport type {Texture} from '@deck.gl/core';\n\nfunction getDefaultCharacterSet() {\n const charSet: string[] = [];\n for (let i = 32; i < 128; i++) {\n charSet.push(String.fromCharCode(i));\n }\n return charSet;\n}\n\nexport type FontSettings = {\n /** CSS font family\n * @default 'Monaco, monospace'\n */\n fontFamily?: string;\n /** CSS font weight\n * @default 'normal'\n */\n fontWeight?: string | number;\n /** Specifies a list of characters to include in the font.\n * @default (ASCII characters 32-128)\n */\n characterSet?: Set | string[] | string;\n /** Font size in pixels. This option is only applied for generating `fontAtlas`, it does not impact the size of displayed text labels. Larger `fontSize` will give you a sharper look when rendering text labels with very large font sizes. But larger `fontSize` requires more time and space to generate the `fontAtlas`.\n * @default 64\n */\n fontSize?: number;\n /** Whitespace buffer around each side of the character. In general, bigger `fontSize` requires bigger `buffer`. Increase `buffer` will add more space between each character when layout `characterSet` in `fontAtlas`. This option could be tuned to provide sufficient space for drawing each character and avoiding overlapping of neighboring characters.\n * @default 4\n */\n buffer?: number;\n /** Flag to enable / disable `sdf`. [`sdf` (Signed Distance Fields)](http://cs.brown.edu/people/pfelzens/papers/dt-final.pdf) will provide a sharper look when rendering with very large or small font sizes. `TextLayer` integrates with [`TinySDF`](https://github.com/mapbox/tiny-sdf) which implements the `sdf` algorithm.\n * @default false\n */\n sdf?: boolean;\n /** How much of the radius (relative) is used for the inside part the glyph. Bigger `cutoff` makes character thinner. Smaller `cutoff` makes character look thicker. Only applies when `sdf: true`.\n * @default 0.25\n */\n cutoff?: number;\n /** How many pixels around the glyph shape to use for encoding distance. Bigger radius yields higher quality outcome. Only applies when `sdf: true`.\n * @default 12\n */\n radius?: number;\n /** How much smoothing to apply to the text edges. Only applies when `sdf: true`.\n * @default 0.1\n */\n smoothing?: number;\n};\n\nexport const DEFAULT_FONT_SETTINGS: Required = {\n fontFamily: 'Monaco, monospace',\n fontWeight: 'normal',\n characterSet: getDefaultCharacterSet(),\n fontSize: 64,\n buffer: 4,\n sdf: false,\n cutoff: 0.25,\n radius: 12,\n smoothing: 0.1\n};\n\nconst MAX_CANVAS_WIDTH = 1024;\n\nconst BASELINE_SCALE = 0.9;\nconst HEIGHT_SCALE = 1.2;\n\n// only preserve latest three fontAtlas\nconst CACHE_LIMIT = 3;\n\ntype FontAtlas = {\n /** x position of last character in mapping */\n xOffset: number;\n /** y position of last character in mapping */\n yOffset: number;\n /** bounding box of each character in the texture */\n mapping: CharacterMapping;\n /** packed texture */\n data: HTMLCanvasElement;\n /** texture width */\n width: number;\n /** texture height */\n height: number;\n};\n\nlet cache = new LRUCache(CACHE_LIMIT);\n\n/**\n * get all the chars not in cache\n * @returns chars not in cache\n */\nfunction getNewChars(cacheKey: string, characterSet: Set | string[] | string): Set {\n let newCharSet: Set;\n if (typeof characterSet === 'string') {\n newCharSet = new Set(Array.from(characterSet));\n } else {\n newCharSet = new Set(characterSet);\n }\n\n const cachedFontAtlas = cache.get(cacheKey);\n if (!cachedFontAtlas) {\n return newCharSet;\n }\n\n for (const char in cachedFontAtlas.mapping) {\n if (newCharSet.has(char)) {\n newCharSet.delete(char);\n }\n }\n return newCharSet;\n}\n\nfunction populateAlphaChannel(alphaChannel: Uint8ClampedArray, imageData: ImageData): void {\n // populate distance value from tinySDF to image alpha channel\n for (let i = 0; i < alphaChannel.length; i++) {\n imageData.data[4 * i + 3] = alphaChannel[i];\n }\n}\n\nfunction setTextStyle(\n ctx: CanvasRenderingContext2D,\n fontFamily: string,\n fontSize: number,\n fontWeight: string | number\n): void {\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`;\n ctx.fillStyle = '#000';\n ctx.textBaseline = 'alphabetic';\n ctx.textAlign = 'left';\n}\n\n/**\n * Sets the Font Atlas LRU Cache Limit\n * @param {number} limit LRU Cache limit\n */\nexport function setFontAtlasCacheLimit(limit: number): void {\n log.assert(Number.isFinite(limit) && limit >= CACHE_LIMIT, 'Invalid cache limit');\n\n cache = new LRUCache(limit);\n}\n\nexport default class FontAtlasManager {\n /** Font settings */\n props: Required = {...DEFAULT_FONT_SETTINGS};\n\n /** Cache key of the current font atlas */\n private _key?: string;\n /** The current font atlas */\n private _atlas?: FontAtlas;\n\n get texture(): Texture | undefined {\n return this._atlas;\n }\n\n get mapping(): CharacterMapping | undefined {\n return this._atlas && this._atlas.mapping;\n }\n\n get scale(): number {\n const {fontSize, buffer} = this.props;\n return (fontSize * HEIGHT_SCALE + buffer * 2) / fontSize;\n }\n\n setProps(props: FontSettings = {}) {\n Object.assign(this.props, props);\n\n // update cache key\n this._key = this._getKey();\n\n const charSet = getNewChars(this._key, this.props.characterSet);\n const cachedFontAtlas = cache.get(this._key);\n\n // if a fontAtlas associated with the new settings is cached and\n // there are no new chars\n if (cachedFontAtlas && charSet.size === 0) {\n // update texture with cached fontAtlas\n if (this._atlas !== cachedFontAtlas) {\n this._atlas = cachedFontAtlas;\n }\n return;\n }\n\n // update fontAtlas with new settings\n const fontAtlas = this._generateFontAtlas(charSet, cachedFontAtlas);\n this._atlas = fontAtlas;\n\n // update cache\n cache.set(this._key, fontAtlas);\n }\n\n // eslint-disable-next-line max-statements\n private _generateFontAtlas(characterSet: Set, cachedFontAtlas?: FontAtlas): FontAtlas {\n const {fontFamily, fontWeight, fontSize, buffer, sdf, radius, cutoff} = this.props;\n let canvas = cachedFontAtlas && cachedFontAtlas.data;\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.width = MAX_CANVAS_WIDTH;\n }\n const ctx = canvas.getContext('2d')!;\n\n setTextStyle(ctx, fontFamily, fontSize, fontWeight);\n\n // 1. build mapping\n const {mapping, canvasHeight, xOffset, yOffset} = buildMapping({\n getFontWidth: char => ctx.measureText(char).width,\n fontHeight: fontSize * HEIGHT_SCALE,\n buffer,\n characterSet,\n maxCanvasWidth: MAX_CANVAS_WIDTH,\n ...(cachedFontAtlas && {\n mapping: cachedFontAtlas.mapping,\n xOffset: cachedFontAtlas.xOffset,\n yOffset: cachedFontAtlas.yOffset\n })\n });\n\n // 2. update canvas\n // copy old canvas data to new canvas only when height changed\n if (canvas.height !== canvasHeight) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n canvas.height = canvasHeight;\n ctx.putImageData(imageData, 0, 0);\n }\n setTextStyle(ctx, fontFamily, fontSize, fontWeight);\n\n // 3. layout characters\n if (sdf) {\n const tinySDF = new TinySDF({\n fontSize,\n buffer,\n radius,\n cutoff,\n fontFamily,\n fontWeight: `${fontWeight}`\n });\n\n for (const char of characterSet) {\n const {data, width, height, glyphTop} = tinySDF.draw(char);\n mapping[char].width = width;\n mapping[char].layoutOffsetY = fontSize * BASELINE_SCALE - glyphTop;\n\n const imageData = ctx.createImageData(width, height);\n populateAlphaChannel(data, imageData);\n ctx.putImageData(imageData, mapping[char].x, mapping[char].y);\n }\n } else {\n for (const char of characterSet) {\n ctx.fillText(char, mapping[char].x, mapping[char].y + buffer + fontSize * BASELINE_SCALE);\n }\n }\n\n return {\n xOffset,\n yOffset,\n mapping,\n data: canvas,\n width: canvas.width,\n height: canvas.height\n };\n }\n\n private _getKey(): string {\n const {fontFamily, fontWeight, fontSize, buffer, sdf, radius, cutoff} = this.props;\n if (sdf) {\n return `${fontFamily} ${fontWeight} ${fontSize} ${buffer} ${radius} ${cutoff}`;\n }\n return `${fontFamily} ${fontWeight} ${fontSize} ${buffer}`;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {CompositeLayer, createIterable} from '@deck.gl/core';\nimport MultiIconLayer from './multi-icon-layer/multi-icon-layer';\nimport FontAtlasManager, {\n DEFAULT_FONT_SETTINGS,\n setFontAtlasCacheLimit\n} from './font-atlas-manager';\nimport {transformParagraph, getTextFromBuffer} from './utils';\n\nimport TextBackgroundLayer from './text-background-layer/text-background-layer';\n\nimport type {FontSettings} from './font-atlas-manager';\nimport type {\n LayerProps,\n Accessor,\n AccessorFunction,\n Unit,\n Position,\n Color,\n UpdateParameters,\n GetPickingInfoParams,\n PickingInfo,\n DefaultProps\n} from '@deck.gl/core';\n\nconst TEXT_ANCHOR = {\n start: 1,\n middle: 0,\n end: -1\n} as const;\n\nconst ALIGNMENT_BASELINE = {\n top: 1,\n center: 0,\n bottom: -1\n} as const;\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst DEFAULT_LINE_HEIGHT = 1.0;\n\ntype _TextLayerProps = {\n /** If `true`, the text always faces camera. Otherwise the text faces up (z).\n * @default true\n */\n billboard?: boolean;\n /**\n * Text size multiplier.\n * @default 1\n */\n sizeScale?: number;\n /**\n * The units of the size, one of `'meters'`, `'common'`, and `'pixels'`.\n * @default 'pixels'\n */\n sizeUnits?: Unit;\n /**\n * The minimum size in pixels. When using non-pixel `sizeUnits`, this prop can be used to prevent the icon from getting too small when zoomed out.\n * @default 0\n */\n sizeMinPixels?: number;\n /**\n * The maximum size in pixels. When using non-pixel `sizeUnits`, this prop can be used to prevent the icon from getting too big when zoomed in.\n * @default Number.MAX_SAFE_INTEGER\n */\n sizeMaxPixels?: number;\n\n /** Whether to render background for the text blocks.\n * @default false\n */\n background?: boolean;\n /** Background color accessor.\n * @default [255, 255, 255, 255]\n */\n getBackgroundColor?: Accessor;\n /** Border color accessor.\n * @default [0, 0, 0, 255]\n */\n getBorderColor?: Accessor;\n /** Border width accessor.\n * @default 0\n */\n getBorderWidth?: Accessor;\n /**\n * The padding of the background..\n * If an array of 2 is supplied, it is interpreted as `[padding_x, padding_y]` in pixels.\n * If an array of 4 is supplied, it is interpreted as `[padding_left, padding_top, padding_right, padding_bottom]` in pixels.\n * @default [0, 0, 0, 0]\n */\n backgroundPadding?: [number, number] | [number, number, number, number];\n /**\n * Specifies a list of characters to include in the font. If set to 'auto', will be automatically generated from the data set.\n * @default (ASCII characters 32-128)\n */\n characterSet?: FontSettings['characterSet'] | 'auto';\n /** CSS font family\n * @default 'Monaco, monospace'\n */\n fontFamily?: FontSettings['fontFamily'];\n /** CSS font weight\n * @default 'normal'\n */\n fontWeight?: FontSettings['fontWeight'];\n /** A unitless number that will be multiplied with the current font size to set the line height.\n * @default 'normal'\n */\n lineHeight?: number;\n /**\n * Width of outline around the text, relative to the font size. Only effective if `fontSettings.sdf` is `true`.\n * @default 0\n */\n outlineWidth?: number;\n /**\n * Color of outline around the text, in `[r, g, b, [a]]`. Each channel is a number between 0-255 and `a` is 255 if not supplied.\n * @default [0, 0, 0, 255]\n */\n outlineColor?: Color;\n /**\n * Advance options for fine tuning the appearance and performance of the generated shared `fontAtlas`.\n */\n fontSettings?: FontSettings;\n /**\n * Available options are `break-all` and `break-word`. A valid `maxWidth` has to be provided to use `wordBreak`.\n * @default 'break-word'\n */\n wordBreak?: 'break-word' | 'break-all';\n /**\n * `maxWidth` is used together with `break-word` for wrapping text. The value of `maxWidth` specifies the width limit to break the text into multiple lines.\n * @default -1\n */\n maxWidth?: number;\n /**\n * Label text accessor\n */\n getText?: AccessorFunction;\n /**\n * Anchor position accessor\n */\n getPosition?: Accessor;\n /**\n * Label color accessor\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n /**\n * Label size accessor\n * @default 32\n */\n getSize?: Accessor;\n /**\n * Label rotation accessor, in degrees\n * @default 0\n */\n getAngle?: Accessor;\n /**\n * Horizontal alignment accessor\n * @default 'middle'\n */\n getTextAnchor?: Accessor;\n /**\n * Vertical alignment accessor\n * @default 'center'\n */\n getAlignmentBaseline?: Accessor;\n /**\n * Label offset from the anchor position, [x, y] in pixels\n * @default [0, 0]\n */\n getPixelOffset?: Accessor;\n /**\n * @deprecated Use `background` and `getBackgroundColor` instead\n */\n backgroundColor?: Color;\n};\n\nexport type TextLayerProps = _TextLayerProps & LayerProps;\n\nconst defaultProps: DefaultProps = {\n billboard: true,\n sizeScale: 1,\n sizeUnits: 'pixels',\n sizeMinPixels: 0,\n sizeMaxPixels: Number.MAX_SAFE_INTEGER,\n\n background: false,\n getBackgroundColor: {type: 'accessor', value: [255, 255, 255, 255]},\n getBorderColor: {type: 'accessor', value: DEFAULT_COLOR},\n getBorderWidth: {type: 'accessor', value: 0},\n backgroundPadding: {type: 'array', value: [0, 0, 0, 0]},\n\n characterSet: {type: 'object', value: DEFAULT_FONT_SETTINGS.characterSet},\n fontFamily: DEFAULT_FONT_SETTINGS.fontFamily,\n fontWeight: DEFAULT_FONT_SETTINGS.fontWeight,\n lineHeight: DEFAULT_LINE_HEIGHT,\n outlineWidth: {type: 'number', value: 0, min: 0},\n outlineColor: {type: 'color', value: DEFAULT_COLOR},\n fontSettings: {},\n\n // auto wrapping options\n wordBreak: 'break-word',\n maxWidth: {type: 'number', value: -1},\n\n getText: {type: 'accessor', value: x => x.text},\n getPosition: {type: 'accessor', value: x => x.position},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n getSize: {type: 'accessor', value: 32},\n getAngle: {type: 'accessor', value: 0},\n getTextAnchor: {type: 'accessor', value: 'middle'},\n getAlignmentBaseline: {type: 'accessor', value: 'center'},\n getPixelOffset: {type: 'accessor', value: [0, 0]},\n\n // deprecated\n backgroundColor: {deprecatedFor: ['background', 'getBackgroundColor']}\n};\n\n/** Render text labels at given coordinates. */\nexport default class TextLayer extends CompositeLayer<\n ExtraPropsT & Required<_TextLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'TextLayer';\n\n state!: {\n styleVersion: number;\n fontAtlasManager: FontAtlasManager;\n characterSet?: Set;\n startIndices?: number[];\n numInstances?: number;\n getText?: AccessorFunction;\n };\n\n initializeState() {\n this.state = {\n styleVersion: 0,\n fontAtlasManager: new FontAtlasManager()\n };\n }\n\n // eslint-disable-next-line complexity\n updateState(params: UpdateParameters) {\n const {props, oldProps, changeFlags} = params;\n const textChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getText));\n\n if (textChanged) {\n this._updateText();\n }\n\n const fontChanged = this._updateFontAtlas();\n\n const styleChanged =\n fontChanged ||\n props.lineHeight !== oldProps.lineHeight ||\n props.wordBreak !== oldProps.wordBreak ||\n props.maxWidth !== oldProps.maxWidth;\n\n if (styleChanged) {\n this.setState({\n styleVersion: this.state.styleVersion + 1\n });\n }\n }\n\n getPickingInfo({info}: GetPickingInfoParams): PickingInfo {\n // because `TextLayer` assign the same pickingInfoIndex for one text label,\n // here info.index refers the index of text label in props.data\n info.object = info.index >= 0 ? this.props.data[info.index] : null;\n return info;\n }\n\n /** Returns true if font has changed */\n private _updateFontAtlas(): boolean {\n const {fontSettings, fontFamily, fontWeight} = this.props;\n const {fontAtlasManager, characterSet} = this.state;\n\n const fontProps = {\n ...fontSettings,\n characterSet,\n fontFamily,\n fontWeight\n };\n\n if (!fontAtlasManager.mapping) {\n // This is the first update\n fontAtlasManager.setProps(fontProps);\n return true;\n }\n\n for (const key in fontProps) {\n if (fontProps[key] !== fontAtlasManager.props[key]) {\n fontAtlasManager.setProps(fontProps);\n return true;\n }\n }\n\n return false;\n }\n\n // Text strings are variable width objects\n // Count characters and start offsets\n private _updateText() {\n const {data, characterSet} = this.props;\n const textBuffer = (data as any).attributes?.getText;\n let {getText} = this.props;\n let startIndices: number[] = (data as any).startIndices;\n let numInstances: number;\n\n const autoCharacterSet = characterSet === 'auto' && new Set();\n\n if (textBuffer && startIndices) {\n const {texts, characterCount} = getTextFromBuffer({\n ...(ArrayBuffer.isView(textBuffer) ? {value: textBuffer} : textBuffer),\n // @ts-ignore if data.attribute is defined then length is expected\n length: data.length,\n startIndices,\n characterSet: autoCharacterSet\n });\n numInstances = characterCount;\n getText = (_, {index}) => texts[index];\n } else {\n const {iterable, objectInfo} = createIterable(data);\n startIndices = [0];\n numInstances = 0;\n\n for (const object of iterable) {\n objectInfo.index++;\n // Break into an array of characters\n // When dealing with double-length unicode characters, `str.length` or `str[i]` do not work\n const text = Array.from(getText(object, objectInfo) || '');\n if (autoCharacterSet) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n text.forEach(autoCharacterSet.add, autoCharacterSet);\n }\n numInstances += text.length;\n startIndices.push(numInstances);\n }\n }\n\n this.setState({\n getText,\n startIndices,\n numInstances,\n characterSet: autoCharacterSet || characterSet\n });\n }\n\n // Returns the x, y offsets of each character in a text string\n private getBoundingRect: AccessorFunction = (\n object,\n objectInfo\n ) => {\n const iconMapping = this.state.fontAtlasManager.mapping!;\n const getText = this.state.getText!;\n const {wordBreak, maxWidth, lineHeight, getTextAnchor, getAlignmentBaseline} = this.props;\n\n const paragraph = getText(object, objectInfo) || '';\n const {\n size: [width, height]\n } = transformParagraph(paragraph, lineHeight, wordBreak, maxWidth, iconMapping);\n const anchorX =\n TEXT_ANCHOR[\n typeof getTextAnchor === 'function' ? getTextAnchor(object, objectInfo) : getTextAnchor\n ];\n const anchorY =\n ALIGNMENT_BASELINE[\n typeof getAlignmentBaseline === 'function'\n ? getAlignmentBaseline(object, objectInfo)\n : getAlignmentBaseline\n ];\n\n return [((anchorX - 1) * width) / 2, ((anchorY - 1) * height) / 2, width, height];\n };\n\n // Returns the x, y, w, h of each text object\n private getIconOffsets: AccessorFunction = (object, objectInfo) => {\n const iconMapping = this.state.fontAtlasManager.mapping!;\n const getText = this.state.getText!;\n const {wordBreak, maxWidth, lineHeight, getTextAnchor, getAlignmentBaseline} = this.props;\n\n const paragraph = getText(object, objectInfo) || '';\n const {\n x,\n y,\n rowWidth,\n size: [width, height]\n } = transformParagraph(paragraph, lineHeight, wordBreak, maxWidth, iconMapping);\n const anchorX =\n TEXT_ANCHOR[\n typeof getTextAnchor === 'function' ? getTextAnchor(object, objectInfo) : getTextAnchor\n ];\n const anchorY =\n ALIGNMENT_BASELINE[\n typeof getAlignmentBaseline === 'function'\n ? getAlignmentBaseline(object, objectInfo)\n : getAlignmentBaseline\n ];\n\n const numCharacters = x.length;\n const offsets = new Array(numCharacters * 2);\n let index = 0;\n\n for (let i = 0; i < numCharacters; i++) {\n // For a multi-line object, offset in x-direction needs consider\n // the row offset in the paragraph and the object offset in the row\n const rowOffset = ((1 - anchorX) * (width - rowWidth[i])) / 2;\n offsets[index++] = ((anchorX - 1) * width) / 2 + rowOffset + x[i];\n offsets[index++] = ((anchorY - 1) * height) / 2 + y[i];\n }\n return offsets;\n };\n\n renderLayers() {\n const {\n startIndices,\n numInstances,\n getText,\n fontAtlasManager: {scale, texture, mapping},\n styleVersion\n } = this.state;\n\n const {\n data,\n _dataDiff,\n getPosition,\n getColor,\n getSize,\n getAngle,\n getPixelOffset,\n getBackgroundColor,\n getBorderColor,\n getBorderWidth,\n backgroundPadding,\n background,\n billboard,\n fontSettings,\n outlineWidth,\n outlineColor,\n sizeScale,\n sizeUnits,\n sizeMinPixels,\n sizeMaxPixels,\n transitions,\n updateTriggers\n } = this.props;\n\n const CharactersLayerClass = this.getSubLayerClass('characters', MultiIconLayer);\n const BackgroundLayerClass = this.getSubLayerClass('background', TextBackgroundLayer);\n\n return [\n background &&\n new BackgroundLayerClass(\n {\n // background props\n getFillColor: getBackgroundColor,\n getLineColor: getBorderColor,\n getLineWidth: getBorderWidth,\n padding: backgroundPadding,\n\n // props shared with characters layer\n getPosition,\n getSize,\n getAngle,\n getPixelOffset,\n billboard,\n sizeScale: sizeScale / this.state.fontAtlasManager.props.fontSize,\n sizeUnits,\n sizeMinPixels,\n sizeMaxPixels,\n\n transitions: transitions && {\n getPosition: transitions.getPosition,\n getAngle: transitions.getAngle,\n getSize: transitions.getSize,\n getFillColor: transitions.getBackgroundColor,\n getLineColor: transitions.getBorderColor,\n getLineWidth: transitions.getBorderWidth,\n getPixelOffset: transitions.getPixelOffset\n }\n },\n this.getSubLayerProps({\n id: 'background',\n updateTriggers: {\n getPosition: updateTriggers.getPosition,\n getAngle: updateTriggers.getAngle,\n getSize: updateTriggers.getSize,\n getFillColor: updateTriggers.getBackgroundColor,\n getLineColor: updateTriggers.getBorderColor,\n getLineWidth: updateTriggers.getBorderWidth,\n getPixelOffset: updateTriggers.getPixelOffset,\n getBoundingRect: {\n getText: updateTriggers.getText,\n getTextAnchor: updateTriggers.getTextAnchor,\n getAlignmentBaseline: updateTriggers.getAlignmentBaseline,\n styleVersion\n }\n }\n }),\n {\n data:\n // @ts-ignore (2339) attribute is not defined on all data types\n data.attributes && data.attributes.background\n ? // @ts-ignore (2339) attribute is not defined on all data types\n {length: data.length, attributes: data.attributes.background}\n : data,\n _dataDiff,\n // Maintain the same background behavior as <=8.3. Remove in v9?\n autoHighlight: false,\n getBoundingRect: this.getBoundingRect\n }\n ),\n new CharactersLayerClass(\n {\n sdf: fontSettings.sdf,\n smoothing: Number.isFinite(fontSettings.smoothing)\n ? fontSettings.smoothing\n : DEFAULT_FONT_SETTINGS.smoothing,\n outlineWidth: outlineWidth / (fontSettings.radius || DEFAULT_FONT_SETTINGS.radius),\n outlineColor,\n iconAtlas: texture,\n iconMapping: mapping,\n\n getPosition,\n getColor,\n getSize,\n getAngle,\n getPixelOffset,\n\n billboard,\n sizeScale: sizeScale * scale,\n sizeUnits,\n sizeMinPixels: sizeMinPixels * scale,\n sizeMaxPixels: sizeMaxPixels * scale,\n\n transitions: transitions && {\n getPosition: transitions.getPosition,\n getAngle: transitions.getAngle,\n getColor: transitions.getColor,\n getSize: transitions.getSize,\n getPixelOffset: transitions.getPixelOffset\n }\n },\n this.getSubLayerProps({\n id: 'characters',\n updateTriggers: {\n getIcon: updateTriggers.getText,\n getPosition: updateTriggers.getPosition,\n getAngle: updateTriggers.getAngle,\n getColor: updateTriggers.getColor,\n getSize: updateTriggers.getSize,\n getPixelOffset: updateTriggers.getPixelOffset,\n getIconOffsets: {\n getText: updateTriggers.getText,\n getTextAnchor: updateTriggers.getTextAnchor,\n getAlignmentBaseline: updateTriggers.getAlignmentBaseline,\n styleVersion\n }\n }\n }),\n {\n data,\n _dataDiff,\n startIndices,\n numInstances,\n getIconOffsets: this.getIconOffsets,\n getIcon: getText\n }\n )\n ];\n }\n\n static set fontAtlasCacheLimit(limit: number) {\n setFontAtlasCacheLimit(limit);\n }\n}\n","import {log, BinaryAttribute} from '@deck.gl/core';\nimport {Geometry, uid} from '@luma.gl/core';\nimport {modifyPolygonWindingDirection, WINDING} from '@math.gl/polygon';\n\ntype ColumnGeometryProps = {\n id?: string;\n radius: number;\n height?: number;\n nradial?: number;\n vertices?: number[];\n};\n\nexport default class ColumnGeometry extends Geometry {\n constructor(props: ColumnGeometryProps) {\n const {id = uid('column-geometry')} = props;\n const {indices, attributes} = tesselateColumn(props);\n super({\n ...props,\n id,\n indices,\n attributes\n });\n }\n}\n\n/* eslint-disable max-statements, complexity */\nfunction tesselateColumn(props: ColumnGeometryProps): {\n indices: Uint16Array;\n attributes: Record;\n} {\n const {radius, height = 1, nradial = 10} = props;\n let {vertices} = props;\n\n if (vertices) {\n log.assert(vertices.length >= nradial); // `vertices` must contain at least `diskResolution` points\n vertices = vertices.flatMap(v => [v[0], v[1]]);\n modifyPolygonWindingDirection(vertices, WINDING.COUNTER_CLOCKWISE);\n }\n\n const isExtruded = height > 0;\n const vertsAroundEdge = nradial + 1; // loop\n const numVertices = isExtruded\n ? vertsAroundEdge * 3 + 1 // top, side top edge, side bottom edge, one additional degenerage vertex\n : nradial; // top\n\n const stepAngle = (Math.PI * 2) / nradial;\n\n // Used for wireframe\n const indices = new Uint16Array(isExtruded ? nradial * 3 * 2 : 0); // top loop, side vertical, bottom loop\n\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n\n let i = 0;\n\n // side tesselation: 0, 1, 2, 3, 4, 5, ...\n //\n // 0 - 2 - 4 ... top\n // | / | / |\n // 1 - 3 - 5 ... bottom\n //\n if (isExtruded) {\n for (let j = 0; j < vertsAroundEdge; j++) {\n const a = j * stepAngle;\n const vertexIndex = j % nradial;\n const sin = Math.sin(a);\n const cos = Math.cos(a);\n\n for (let k = 0; k < 2; k++) {\n positions[i + 0] = vertices ? vertices[vertexIndex * 2] : cos * radius;\n positions[i + 1] = vertices ? vertices[vertexIndex * 2 + 1] : sin * radius;\n positions[i + 2] = (1 / 2 - k) * height;\n\n normals[i + 0] = vertices ? vertices[vertexIndex * 2] : cos;\n normals[i + 1] = vertices ? vertices[vertexIndex * 2 + 1] : sin;\n\n i += 3;\n }\n }\n\n // duplicate the last vertex to create proper degenerate triangle.\n positions[i + 0] = positions[i - 3];\n positions[i + 1] = positions[i - 2];\n positions[i + 2] = positions[i - 1];\n i += 3;\n }\n\n // The column geometry is rendered as a triangle strip, so\n // in order to render sides and top in one go we need to use degenerate triangles.\n // Duplicate last vertex of side trinagles and first vertex of the top cap to preserve winding order.\n\n // top tesselation: 0, -1, 1, -2, 2, -3, 3, ...\n //\n // 0 -- 1\n // / \\\n // -1 2\n // | |\n // -2 3\n // \\ /\n // -3 -- 4\n //\n for (let j = isExtruded ? 0 : 1; j < vertsAroundEdge; j++) {\n const v = Math.floor(j / 2) * Math.sign(0.5 - (j % 2));\n const a = v * stepAngle;\n const vertexIndex = (v + nradial) % nradial;\n const sin = Math.sin(a);\n const cos = Math.cos(a);\n\n positions[i + 0] = vertices ? vertices[vertexIndex * 2] : cos * radius;\n positions[i + 1] = vertices ? vertices[vertexIndex * 2 + 1] : sin * radius;\n positions[i + 2] = height / 2;\n\n normals[i + 2] = 1;\n\n i += 3;\n }\n\n if (isExtruded) {\n let index = 0;\n for (let j = 0; j < nradial; j++) {\n // top loop\n indices[index++] = j * 2 + 0;\n indices[index++] = j * 2 + 2;\n // side vertical\n indices[index++] = j * 2 + 0;\n indices[index++] = j * 2 + 1;\n // bottom loop\n indices[index++] = j * 2 + 1;\n indices[index++] = j * 2 + 3;\n }\n }\n\n return {\n indices,\n attributes: {\n POSITION: {size: 3, value: positions},\n NORMAL: {size: 3, value: normals}\n }\n };\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Layer,\n project32,\n gouraudLighting,\n phongLighting,\n picking,\n UNIT,\n LayerProps,\n UpdateParameters,\n Unit,\n AccessorFunction,\n Position,\n Accessor,\n Color,\n Material,\n DefaultProps\n} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, isWebGL2, hasFeature, FEATURES} from '@luma.gl/core';\nimport ColumnGeometry from './column-geometry';\n\nimport vs from './column-layer-vertex.glsl';\nimport fs from './column-layer-fragment.glsl';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n diskResolution: {type: 'number', min: 4, value: 20},\n vertices: null,\n radius: {type: 'number', min: 0, value: 1000},\n angle: {type: 'number', value: 0},\n offset: {type: 'array', value: [0, 0]},\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n elevationScale: {type: 'number', min: 0, value: 1},\n radiusUnits: 'meters',\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n\n extruded: true,\n wireframe: false,\n filled: true,\n stroked: false,\n\n getPosition: {type: 'accessor', value: x => x.position},\n getFillColor: {type: 'accessor', value: DEFAULT_COLOR},\n getLineColor: {type: 'accessor', value: DEFAULT_COLOR},\n getLineWidth: {type: 'accessor', value: 1},\n getElevation: {type: 'accessor', value: 1000},\n material: true,\n getColor: {deprecatedFor: ['getFillColor', 'getLineColor']}\n};\n\n/** All properties supported by ColumnLayer. */\nexport type ColumnLayerProps = _ColumnLayerProps & LayerProps;\n\n/** Properties added by ColumnLayer. */\ntype _ColumnLayerProps = {\n /**\n * The number of sides to render the disk as.\n * @default 20\n */\n diskResolution?: number;\n\n /**\n * isk size in units specified by `radiusUnits`.\n * @default 1000\n */\n radius?: number;\n\n /**\n * Disk rotation, counter-clockwise in degrees.\n * @default 0\n */\n angle?: number;\n\n /**\n * Replace the default geometry (regular polygon that fits inside the unit circle) with a custom one.\n * @default null\n */\n vertices: Position[] | null;\n\n /**\n * Disk offset from the position, relative to the radius.\n * @default [0,0]\n */\n offset?: [number, number];\n\n /**\n * Radius multiplier, between 0 - 1\n * @default 1\n */\n coverage?: number;\n\n /**\n * Column elevation multiplier.\n * @default 1\n */\n elevationScale?: number;\n\n /**\n * Whether to draw a filled column (solid fill).\n * @default true\n */\n filled?: boolean;\n\n /**\n * Whether to draw an outline around the disks.\n * @default false\n */\n stroked?: boolean;\n\n /**\n * Whether to extrude the columns. If set to `false`, all columns will be rendered as flat polygons.\n * @default true\n */\n extruded?: boolean;\n\n /**\n * Whether to generate a line wireframe of the column.\n * @default false\n */\n wireframe?: boolean;\n\n /**\n * If `true`, the vertical surfaces of the columns use [flat shading](https://en.wikipedia.org/wiki/Shading#Flat_vs._smooth_shading).\n * @default false\n */\n flatShading?: boolean;\n\n /**\n * The units of the radius.\n * @default 'meters'\n */\n radiusUnits?: Unit;\n\n /**\n * The units of the line width.\n * @default 'meters'\n */\n lineWidthUnits?: Unit;\n\n /**\n * The line width multiplier that multiplied to all outlines.\n * @default 1\n */\n lineWidthScale?: number;\n\n /**\n * The minimum outline width in pixels.\n * @default 0\n */\n lineWidthMinPixels?: number;\n\n /**\n * The maximum outline width in pixels.\n * @default Number.MAX_SAFE_INTEGER\n */\n lineWidthMaxPixels?: number;\n\n /**\n * Material settings for lighting effect. Applies if `extruded: true`.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n\n /**\n * Method called to retrieve the position of each column.\n * @default object => object.position\n */\n getPosition?: AccessorFunction;\n\n /**\n * @deprecated Use getFilledColor and getLineColor instead\n */\n getColor?: Accessor;\n\n /**\n * Fill collor value or accessor.\n * @default [0, 0, 0, 255]\n */\n getFillColor?: Accessor;\n\n /**\n * Line color value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getLineColor?: Accessor;\n\n /**\n * The elevation of each cell in meters.\n * @default 1000\n */\n getElevation?: Accessor;\n\n /**\n * The width of the outline of the column, in units specified by `lineWidthUnits`.\n *\n * @default 1\n */\n getLineWidth?: Accessor;\n};\n\n/** Render extruded cylinders (tessellated regular polygons) at given coordinates. */\nexport default class ColumnLayer extends Layer<\n ExtraPropsT & Required<_ColumnLayerProps>\n> {\n static layerName = 'ColumnLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const {gl} = this.context;\n const transpileToGLSL100 = !isWebGL2(gl);\n const defines: Record = {};\n\n const useDerivatives = this.props.flatShading && hasFeature(gl, FEATURES.GLSL_DERIVATIVES);\n if (useDerivatives) {\n defines.FLAT_SHADING = 1;\n }\n return super.getShaders({\n vs,\n fs,\n defines,\n transpileToGLSL100,\n modules: [project32, useDerivatives ? phongLighting : gouraudLighting, picking]\n });\n }\n\n /**\n * DeckGL calls initializeState when GL context is available\n * Essentially a deferred constructor\n */\n initializeState() {\n const attributeManager = this.getAttributeManager()!;\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceElevations: {\n size: 1,\n transition: true,\n accessor: 'getElevation'\n },\n instanceFillColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getFillColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceLineColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getLineColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceStrokeWidths: {\n size: 1,\n accessor: 'getLineWidth',\n transition: true\n }\n });\n /* eslint-enable max-len */\n }\n\n updateState(params: UpdateParameters): void {\n super.updateState(params);\n\n const {props, oldProps, changeFlags} = params;\n const regenerateModels =\n changeFlags.extensionsChanged || props.flatShading !== oldProps.flatShading;\n\n if (regenerateModels) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n\n if (\n regenerateModels ||\n props.diskResolution !== oldProps.diskResolution ||\n props.vertices !== oldProps.vertices ||\n (props.extruded || props.stroked) !== (oldProps.extruded || oldProps.stroked)\n ) {\n this._updateGeometry(props);\n }\n }\n\n getGeometry(diskResolution: number, vertices: number[] | undefined, hasThinkness: boolean) {\n const geometry = new ColumnGeometry({\n radius: 1,\n height: hasThinkness ? 2 : 0,\n vertices,\n nradial: diskResolution\n });\n\n let meanVertexDistance = 0;\n if (vertices) {\n for (let i = 0; i < diskResolution; i++) {\n const p = vertices[i];\n const d = Math.sqrt(p[0] * p[0] + p[1] * p[1]);\n meanVertexDistance += d / diskResolution;\n }\n } else {\n meanVertexDistance = 1;\n }\n this.setState({\n edgeDistance: Math.cos(Math.PI / diskResolution) * meanVertexDistance\n });\n\n return geometry;\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n isInstanced: true\n });\n }\n\n protected _updateGeometry({diskResolution, vertices, extruded, stroked}) {\n const geometry: any = this.getGeometry(diskResolution, vertices, extruded || stroked);\n\n this.setState({\n fillVertexCount: geometry.attributes.POSITION.value.length / 3,\n wireframeVertexCount: geometry.indices.value.length\n });\n\n this.state.model.setProps({geometry});\n }\n\n draw({uniforms}) {\n const {\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n radiusUnits,\n elevationScale,\n extruded,\n filled,\n stroked,\n wireframe,\n offset,\n coverage,\n radius,\n angle\n } = this.props;\n const {model, fillVertexCount, wireframeVertexCount, edgeDistance} = this.state;\n\n model.setUniforms(uniforms).setUniforms({\n radius,\n angle: (angle / 180) * Math.PI,\n offset,\n extruded,\n stroked,\n coverage,\n elevationScale,\n edgeDistance,\n radiusUnits: UNIT[radiusUnits],\n widthUnits: UNIT[lineWidthUnits],\n widthScale: lineWidthScale,\n widthMinPixels: lineWidthMinPixels,\n widthMaxPixels: lineWidthMaxPixels\n });\n\n // When drawing 3d: draw wireframe first so it doesn't get occluded by depth test\n if (extruded && wireframe) {\n model.setProps({isIndexed: true});\n model\n .setVertexCount(wireframeVertexCount)\n .setDrawMode(GL.LINES)\n .setUniforms({isStroke: true})\n .draw();\n }\n if (filled) {\n model.setProps({isIndexed: false});\n model\n .setVertexCount(fillVertexCount)\n .setDrawMode(GL.TRIANGLE_STRIP)\n .setUniforms({isStroke: false})\n .draw();\n }\n // When drawing 2d: draw fill before stroke so that the outline is always on top\n if (!extruded && stroked) {\n model.setProps({isIndexed: false});\n // The width of the stroke is achieved by flattening the side of the cylinder.\n // Skip the last 1/3 of the vertices which is the top.\n model\n .setVertexCount((fillVertexCount * 2) / 3)\n .setDrawMode(GL.TRIANGLE_STRIP)\n .setUniforms({isStroke: true})\n .draw();\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `#version 300 es\n\n#define SHADER_NAME column-layer-vertex-shader\n\nin vec3 positions;\nin vec3 normals;\n\nin vec3 instancePositions;\nin float instanceElevations;\nin vec3 instancePositions64Low;\nin vec4 instanceFillColors;\nin vec4 instanceLineColors;\nin float instanceStrokeWidths;\n\nin vec3 instancePickingColors;\n\n// Custom uniforms\nuniform float opacity;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\nuniform bool extruded;\nuniform bool stroked;\nuniform bool isStroke;\nuniform float coverage;\nuniform float elevationScale;\nuniform float edgeDistance;\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\nuniform int radiusUnits;\nuniform int widthUnits;\n\n// Result\nout vec4 vColor;\n#ifdef FLAT_SHADING\nout vec4 position_commonspace;\n#endif\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n\n vec4 color = isStroke ? instanceLineColors : instanceFillColors;\n // rotate primitive position and normal\n mat2 rotationMatrix = mat2(cos(angle), sin(angle), -sin(angle), cos(angle));\n\n // calculate elevation, if 3d not enabled set to 0\n // cylindar gemoetry height are between -1.0 to 1.0, transform it to between 0, 1\n float elevation = 0.0;\n // calculate stroke offset\n float strokeOffsetRatio = 1.0;\n\n if (extruded) {\n elevation = instanceElevations * (positions.z + 1.0) / 2.0 * elevationScale;\n } else if (stroked) {\n float widthPixels = clamp(\n project_size_to_pixel(instanceStrokeWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels) / 2.0;\n float halfOffset = project_pixel_size(widthPixels) / project_size(edgeDistance * coverage * radius);\n if (isStroke) {\n strokeOffsetRatio -= sign(positions.z) * halfOffset;\n } else {\n strokeOffsetRatio -= halfOffset;\n }\n }\n\n // if alpha == 0.0 or z < 0.0, do not render element\n float shouldRender = float(color.a > 0.0 && instanceElevations >= 0.0);\n float dotRadius = radius * coverage * shouldRender;\n\n geometry.pickingColor = instancePickingColors;\n\n // project center of column\n vec3 centroidPosition = vec3(instancePositions.xy, instancePositions.z + elevation);\n vec3 centroidPosition64Low = instancePositions64Low;\n vec2 offset = (rotationMatrix * positions.xy * strokeOffsetRatio + offset) * dotRadius;\n if (radiusUnits == UNIT_METERS) {\n offset = project_size(offset);\n }\n vec3 pos = vec3(offset, 0.);\n DECKGL_FILTER_SIZE(pos, geometry);\n\n gl_Position = project_position_to_clipspace(centroidPosition, centroidPosition64Low, pos, geometry.position);\n geometry.normal = project_normal(vec3(rotationMatrix * normals.xy, normals.z));\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Light calculations\n if (extruded && !isStroke) {\n#ifdef FLAT_SHADING\n position_commonspace = geometry.position;\n vColor = vec4(color.rgb, color.a * opacity);\n#else\n vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal);\n vColor = vec4(lightColor, color.a * opacity);\n#endif\n } else {\n vColor = vec4(color.rgb, color.a * opacity);\n }\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `#version 300 es\n#define SHADER_NAME column-layer-fragment-shader\n\nprecision highp float;\n\nuniform vec3 project_uCameraPosition;\nuniform bool extruded;\nuniform bool isStroke;\n\nout vec4 fragColor;\n\nin vec4 vColor;\n#ifdef FLAT_SHADING\nin vec4 position_commonspace;\n#endif\n\nvoid main(void) {\n fragColor = vColor;\n#ifdef FLAT_SHADING\n if (extruded && !isStroke && !picking_uActive) {\n vec3 normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n fragColor.rgb = lighting_getLightColor(vColor.rgb, project_uCameraPosition, position_commonspace.xyz, normal);\n }\n#endif\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {Layer, project32, picking, UNIT} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './scatterplot-layer-vertex.glsl';\nimport fs from './scatterplot-layer-fragment.glsl';\n\nimport type {\n LayerProps,\n UpdateParameters,\n Accessor,\n Unit,\n Position,\n Color,\n DefaultProps\n} from '@deck.gl/core';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\n/** All props supported by the ScatterplotLayer */\nexport type ScatterplotLayerProps = _ScatterplotLayerProps & LayerProps;\n\n/** Props added by the ScatterplotLayer */\ntype _ScatterplotLayerProps = {\n /**\n * The units of the radius, one of `'meters'`, `'common'`, and `'pixels'`.\n * @default 'meters'\n */\n radiusUnits?: Unit;\n /**\n * Radius multiplier.\n * @default 1\n */\n radiusScale?: number;\n /**\n * The minimum radius in pixels. This prop can be used to prevent the circle from getting too small when zoomed out.\n * @default 0\n */\n radiusMinPixels?: number;\n /**\n * The maximum radius in pixels. This prop can be used to prevent the circle from getting too big when zoomed in.\n * @default Number.MAX_SAFE_INTEGER\n */\n radiusMaxPixels?: number;\n\n /**\n * The units of the stroke width, one of `'meters'`, `'common'`, and `'pixels'`.\n * @default 'meters'\n */\n lineWidthUnits?: Unit;\n /**\n * Stroke width multiplier.\n * @default 1\n */\n lineWidthScale?: number;\n /**\n * The minimum stroke width in pixels. This prop can be used to prevent the line from getting too thin when zoomed out.\n * @default 0\n */\n lineWidthMinPixels?: number;\n /**\n * The maximum stroke width in pixels. This prop can be used to prevent the circle from getting too thick when zoomed in.\n * @default Number.MAX_SAFE_INTEGER\n */\n lineWidthMaxPixels?: number;\n\n /**\n * Draw the outline of points.\n * @default false\n */\n stroked?: boolean;\n /**\n * Draw the filled area of points.\n * @default true\n */\n filled?: boolean;\n /**\n * If `true`, rendered circles always face the camera. If `false` circles face up (i.e. are parallel with the ground plane).\n * @default false\n */\n billboard?: boolean;\n /**\n * If `true`, circles are rendered with smoothed edges. If `false`, circles are rendered with rough edges. Antialiasing can cause artifacts on edges of overlapping circles.\n * @default true\n */\n antialiasing?: boolean;\n\n /**\n * Center position accessor.\n */\n getPosition?: Accessor;\n /**\n * Radius accessor.\n * @default 1\n */\n getRadius?: Accessor;\n /**\n * Fill color accessor.\n * @default [0, 0, 0, 255]\n */\n getFillColor?: Accessor;\n /**\n * Stroke color accessor.\n * @default [0, 0, 0, 255]\n */\n getLineColor?: Accessor;\n /**\n * Stroke width accessor.\n * @default 1\n */\n getLineWidth?: Accessor;\n /**\n * @deprecated Use `getLineWidth` instead\n */\n strokeWidth?: number;\n /**\n * @deprecated Use `stroked` instead\n */\n outline?: boolean;\n /**\n * @deprecated Use `getFillColor` and `getLineColor` instead\n */\n getColor?: Accessor;\n};\n\nconst defaultProps: DefaultProps = {\n radiusUnits: 'meters',\n radiusScale: {type: 'number', min: 0, value: 1},\n radiusMinPixels: {type: 'number', min: 0, value: 0}, // min point radius in pixels\n radiusMaxPixels: {type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER}, // max point radius in pixels\n\n lineWidthUnits: 'meters',\n lineWidthScale: {type: 'number', min: 0, value: 1},\n lineWidthMinPixels: {type: 'number', min: 0, value: 0},\n lineWidthMaxPixels: {type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER},\n\n stroked: false,\n filled: true,\n billboard: false,\n antialiasing: true,\n\n getPosition: {type: 'accessor', value: x => x.position},\n getRadius: {type: 'accessor', value: 1},\n getFillColor: {type: 'accessor', value: DEFAULT_COLOR},\n getLineColor: {type: 'accessor', value: DEFAULT_COLOR},\n getLineWidth: {type: 'accessor', value: 1},\n\n // deprecated\n strokeWidth: {deprecatedFor: 'getLineWidth'},\n outline: {deprecatedFor: 'stroked'},\n getColor: {deprecatedFor: ['getFillColor', 'getLineColor']}\n};\n\n/** Render circles at given coordinates. */\nexport default class ScatterplotLayer extends Layer<\n ExtraPropsT & Required<_ScatterplotLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName: string = 'ScatterplotLayer';\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]});\n }\n\n initializeState() {\n this.getAttributeManager()!.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceRadius: {\n size: 1,\n transition: true,\n accessor: 'getRadius',\n defaultValue: 1\n },\n instanceFillColors: {\n size: this.props.colorFormat.length,\n transition: true,\n normalized: true,\n type: GL.UNSIGNED_BYTE,\n accessor: 'getFillColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineColors: {\n size: this.props.colorFormat.length,\n transition: true,\n normalized: true,\n type: GL.UNSIGNED_BYTE,\n accessor: 'getLineColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineWidths: {\n size: 1,\n transition: true,\n accessor: 'getLineWidth',\n defaultValue: 1\n }\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n\n if (params.changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n }\n\n draw({uniforms}) {\n const {\n radiusUnits,\n radiusScale,\n radiusMinPixels,\n radiusMaxPixels,\n stroked,\n filled,\n billboard,\n antialiasing,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels\n } = this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n stroked: stroked ? 1 : 0,\n filled,\n billboard,\n antialiasing,\n radiusUnits: UNIT[radiusUnits],\n radiusScale,\n radiusMinPixels,\n radiusMaxPixels,\n lineWidthUnits: UNIT[lineWidthUnits],\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels\n })\n .draw();\n }\n\n protected _getModel(gl) {\n // a square that minimally cover the unit circle\n const positions = [-1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0];\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_FAN,\n vertexCount: 4,\n attributes: {\n positions: {size: 3, value: new Float32Array(positions)}\n }\n }),\n isInstanced: true\n });\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME scatterplot-layer-vertex-shader\n\nattribute vec3 positions;\n\nattribute vec3 instancePositions;\nattribute vec3 instancePositions64Low;\nattribute float instanceRadius;\nattribute float instanceLineWidths;\nattribute vec4 instanceFillColors;\nattribute vec4 instanceLineColors;\nattribute vec3 instancePickingColors;\n\nuniform float opacity;\nuniform float radiusScale;\nuniform float radiusMinPixels;\nuniform float radiusMaxPixels;\nuniform float lineWidthScale;\nuniform float lineWidthMinPixels;\nuniform float lineWidthMaxPixels;\nuniform float stroked;\nuniform bool filled;\nuniform bool antialiasing;\nuniform bool billboard;\nuniform int radiusUnits;\nuniform int lineWidthUnits;\n\nvarying vec4 vFillColor;\nvarying vec4 vLineColor;\nvarying vec2 unitPosition;\nvarying float innerUnitRadius;\nvarying float outerRadiusPixels;\n\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n\n // Multiply out radius and clamp to limits\n outerRadiusPixels = clamp(\n project_size_to_pixel(radiusScale * instanceRadius, radiusUnits),\n radiusMinPixels, radiusMaxPixels\n );\n \n // Multiply out line width and clamp to limits\n float lineWidthPixels = clamp(\n project_size_to_pixel(lineWidthScale * instanceLineWidths, lineWidthUnits),\n lineWidthMinPixels, lineWidthMaxPixels\n );\n\n // outer radius needs to offset by half stroke width\n outerRadiusPixels += stroked * lineWidthPixels / 2.0;\n\n // Expand geometry to accomodate edge smoothing\n float edgePadding = antialiasing ? (outerRadiusPixels + SMOOTH_EDGE_RADIUS) / outerRadiusPixels : 1.0;\n\n // position on the containing square in [-1, 1] space\n unitPosition = edgePadding * positions.xy;\n geometry.uv = unitPosition;\n geometry.pickingColor = instancePickingColors;\n\n innerUnitRadius = 1.0 - stroked * lineWidthPixels / outerRadiusPixels;\n \n if (billboard) {\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position);\n vec3 offset = edgePadding * positions * outerRadiusPixels;\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\n } else {\n vec3 offset = edgePadding * positions * project_pixel_size(outerRadiusPixels);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset, geometry.position);\n }\n\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Apply opacity to instance color, or return instance picking color\n vFillColor = vec4(instanceFillColors.rgb, instanceFillColors.a * opacity);\n DECKGL_FILTER_COLOR(vFillColor, geometry);\n vLineColor = vec4(instanceLineColors.rgb, instanceLineColors.a * opacity);\n DECKGL_FILTER_COLOR(vLineColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME scatterplot-layer-fragment-shader\n\nprecision highp float;\n\nuniform bool filled;\nuniform float stroked;\nuniform bool antialiasing;\n\nvarying vec4 vFillColor;\nvarying vec4 vLineColor;\nvarying vec2 unitPosition;\nvarying float innerUnitRadius;\nvarying float outerRadiusPixels;\n\nvoid main(void) {\n geometry.uv = unitPosition;\n\n float distToCenter = length(unitPosition) * outerRadiusPixels;\n float inCircle = antialiasing ? \n smoothedge(distToCenter, outerRadiusPixels) : \n step(distToCenter, outerRadiusPixels);\n\n if (inCircle == 0.0) {\n discard;\n }\n\n if (stroked > 0.5) {\n float isLine = antialiasing ? \n smoothedge(innerUnitRadius * outerRadiusPixels, distToCenter) :\n step(innerUnitRadius * outerRadiusPixels, distToCenter);\n\n if (filled) {\n gl_FragColor = mix(vFillColor, vLineColor, isLine);\n } else {\n if (isLine == 0.0) {\n discard;\n }\n gl_FragColor = vec4(vLineColor.rgb, vLineColor.a * isLine);\n }\n } else if (filled) {\n gl_FragColor = vFillColor;\n } else {\n discard;\n }\n\n gl_FragColor.a *= inCircle;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","import {Layer, project32, picking, UNIT} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './text-background-layer-vertex.glsl';\nimport fs from './text-background-layer-fragment.glsl';\n\nimport type {\n LayerProps,\n Accessor,\n Unit,\n Position,\n Color,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\n\ntype _TextBackgroundLayerProps = {\n billboard?: boolean;\n sizeScale?: number;\n sizeUnits?: Unit;\n sizeMinPixels?: number;\n sizeMaxPixels?: number;\n\n padding?: [number, number] | [number, number, number, number];\n\n getPosition?: Accessor;\n getSize?: Accessor;\n getAngle?: Accessor;\n getPixelOffset?: Accessor;\n getBoundingRect?: Accessor;\n getFillColor?: Accessor;\n getLineColor?: Accessor;\n getLineWidth?: Accessor;\n};\n\nexport type TextBackgroundLayerProps = _TextBackgroundLayerProps &\n LayerProps;\n\nconst defaultProps: DefaultProps = {\n billboard: true,\n sizeScale: 1,\n sizeUnits: 'pixels',\n sizeMinPixels: 0,\n sizeMaxPixels: Number.MAX_SAFE_INTEGER,\n\n padding: {type: 'array', value: [0, 0, 0, 0]},\n\n getPosition: {type: 'accessor', value: x => x.position},\n getSize: {type: 'accessor', value: 1},\n getAngle: {type: 'accessor', value: 0},\n getPixelOffset: {type: 'accessor', value: [0, 0]},\n getBoundingRect: {type: 'accessor', value: [0, 0, 0, 0]},\n getFillColor: {type: 'accessor', value: [0, 0, 0, 255]},\n getLineColor: {type: 'accessor', value: [0, 0, 0, 255]},\n getLineWidth: {type: 'accessor', value: 1}\n};\n\nexport default class TextBackgroundLayer extends Layer<\n ExtraPropsT & Required<_TextBackgroundLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'TextBackgroundLayer';\n\n state!: {\n model: Model;\n };\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]});\n }\n\n initializeState() {\n this.getAttributeManager()!.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceSizes: {\n size: 1,\n transition: true,\n accessor: 'getSize',\n defaultValue: 1\n },\n instanceAngles: {\n size: 1,\n transition: true,\n accessor: 'getAngle'\n },\n instanceRects: {\n size: 4,\n accessor: 'getBoundingRect'\n },\n instancePixelOffsets: {\n size: 2,\n transition: true,\n accessor: 'getPixelOffset'\n },\n instanceFillColors: {\n size: 4,\n transition: true,\n normalized: true,\n type: GL.UNSIGNED_BYTE,\n accessor: 'getFillColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineColors: {\n size: 4,\n transition: true,\n normalized: true,\n type: GL.UNSIGNED_BYTE,\n accessor: 'getLineColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineWidths: {\n size: 1,\n transition: true,\n accessor: 'getLineWidth',\n defaultValue: 1\n }\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n const {changeFlags} = params;\n if (changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n }\n\n draw({uniforms}) {\n const {billboard, sizeScale, sizeUnits, sizeMinPixels, sizeMaxPixels, getLineWidth} =\n this.props;\n let {padding} = this.props;\n\n if (padding.length < 4) {\n padding = [padding[0], padding[1], padding[0], padding[1]];\n }\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n billboard,\n stroked: Boolean(getLineWidth),\n padding,\n sizeUnits: UNIT[sizeUnits],\n sizeScale,\n sizeMinPixels,\n sizeMaxPixels\n })\n .draw();\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n // a square that minimally cover the unit circle\n const positions = [0, 0, 1, 0, 1, 1, 0, 1];\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_FAN,\n vertexCount: 4,\n attributes: {\n positions: {size: 2, value: new Float32Array(positions)}\n }\n }),\n isInstanced: true\n });\n }\n}\n","export default `\\\n#define SHADER_NAME text-background-layer-vertex-shader\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute vec3 instancePositions64Low;\nattribute vec4 instanceRects;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec2 instancePixelOffsets;\nattribute float instanceLineWidths;\nattribute vec4 instanceFillColors;\nattribute vec4 instanceLineColors;\nattribute vec3 instancePickingColors;\n\nuniform bool billboard;\nuniform float opacity;\nuniform float sizeScale;\nuniform float sizeMinPixels;\nuniform float sizeMaxPixels;\nuniform vec4 padding;\nuniform int sizeUnits;\n\nvarying vec4 vFillColor;\nvarying vec4 vLineColor;\nvarying float vLineWidth;\nvarying vec2 uv;\nvarying vec2 dimensions;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = radians(angle);\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n geometry.uv = positions;\n geometry.pickingColor = instancePickingColors;\n uv = positions;\n vLineWidth = instanceLineWidths;\n\n // convert size in meters to pixels, then scaled and clamp\n\n // project meters to pixels and clamp to limits\n float sizePixels = clamp(\n project_size_to_pixel(instanceSizes * sizeScale, sizeUnits),\n sizeMinPixels, sizeMaxPixels\n );\n\n dimensions = instanceRects.zw * sizePixels + padding.xy + padding.zw;\n\n vec2 pixelOffset = (positions * instanceRects.zw + instanceRects.xy) * sizePixels + mix(-padding.xy, padding.zw, positions);\n pixelOffset = rotate_by_angle(pixelOffset, instanceAngles);\n pixelOffset += instancePixelOffsets;\n pixelOffset.y *= -1.0;\n\n if (billboard) {\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position);\n vec3 offset = vec3(pixelOffset, 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\n } else {\n vec3 offset_common = vec3(project_pixel_size(pixelOffset), 0.0);\n DECKGL_FILTER_SIZE(offset_common, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset_common, geometry.position);\n }\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Apply opacity to instance color, or return instance picking color\n vFillColor = vec4(instanceFillColors.rgb, instanceFillColors.a * opacity);\n DECKGL_FILTER_COLOR(vFillColor, geometry);\n vLineColor = vec4(instanceLineColors.rgb, instanceLineColors.a * opacity);\n DECKGL_FILTER_COLOR(vLineColor, geometry);\n}\n`;\n","export default `\\\n#define SHADER_NAME text-background-layer-fragment-shader\n\nprecision highp float;\n\nuniform bool stroked;\n\nvarying vec4 vFillColor;\nvarying vec4 vLineColor;\nvarying float vLineWidth;\nvarying vec2 uv;\nvarying vec2 dimensions;\n\nvoid main(void) {\n geometry.uv = uv;\n\n vec2 pixelPosition = uv * dimensions;\n if (stroked) {\n float distToEdge = min(\n min(pixelPosition.x, dimensions.x - pixelPosition.x),\n min(pixelPosition.y, dimensions.y - pixelPosition.y)\n );\n float isBorder = smoothedge(distToEdge, vLineWidth);\n gl_FragColor = mix(vFillColor, vLineColor, isBorder);\n } else {\n gl_FragColor = vFillColor;\n }\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","import {load} from '@loaders.gl/core';\n\nimport type {ResourceManagerContext} from './resource-manager';\n\nexport type ResourceSubscriber = {\n onChange: (data: T | Promise) => void;\n};\n\nexport default class Resource {\n id: string;\n context: ResourceManagerContext;\n isLoaded!: boolean;\n persistent?: boolean;\n\n private _loadCount: number = 0;\n private _subscribers = new Set>();\n private _data!: T | Promise | string;\n private _loader?: Promise;\n private _error?: Error;\n private _content?: T;\n\n constructor(id: string, data: T | Promise | string, context: ResourceManagerContext) {\n this.id = id;\n this.context = context;\n\n this.setData(data);\n }\n\n // consumer: {onChange: Function}\n subscribe(consumer: ResourceSubscriber): void {\n this._subscribers.add(consumer);\n }\n\n unsubscribe(consumer: ResourceSubscriber): void {\n this._subscribers.delete(consumer);\n }\n\n inUse(): boolean {\n return this._subscribers.size > 0;\n }\n\n delete(): void {\n // Remove any resources created\n }\n\n getData(): T | Promise {\n return this.isLoaded\n ? this._error\n ? Promise.reject(this._error)\n : this._content!\n : this._loader!.then(() => this.getData());\n }\n\n setData(data: any, forceUpdate?: boolean) {\n if (data === this._data && !forceUpdate) {\n return;\n }\n this._data = data;\n const loadCount = ++this._loadCount;\n\n let loader = data;\n if (typeof data === 'string') {\n loader = load(data);\n }\n if (loader instanceof Promise) {\n this.isLoaded = false;\n this._loader = loader\n .then(result => {\n // check if source has changed\n if (this._loadCount === loadCount) {\n this.isLoaded = true;\n this._error = undefined;\n this._content = result;\n }\n })\n .catch(error => {\n if (this._loadCount === loadCount) {\n this.isLoaded = true;\n this._error = error || true;\n }\n });\n } else {\n this.isLoaded = true;\n this._error = undefined;\n this._content = data;\n }\n\n for (const subscriber of this._subscribers) {\n subscriber.onChange(this.getData());\n }\n }\n}\n","/* global setTimeout */\nimport Resource from './resource';\nimport type {ResourceSubscriber} from './resource';\n\nexport type ResourceManagerContext = {\n gl: WebGLRenderingContext;\n resourceManager: ResourceManager;\n};\n\nexport default class ResourceManager {\n protocol: string;\n\n private _context: ResourceManagerContext;\n private _resources: Record;\n private _consumers: Record<\n string,\n Record<\n string,\n ResourceSubscriber & {\n resourceId: string;\n }\n >\n >;\n private _pruneRequest: number | null;\n\n constructor({gl, protocol}) {\n this.protocol = protocol || 'resource://';\n\n this._context = {\n gl,\n resourceManager: this\n };\n this._resources = {};\n this._consumers = {};\n\n this._pruneRequest = null;\n }\n\n contains(resourceId: string): boolean {\n if (resourceId.startsWith(this.protocol)) {\n return true;\n }\n return resourceId in this._resources;\n }\n\n add({\n resourceId,\n data,\n forceUpdate = false,\n persistent = true\n }: {\n resourceId: string;\n data: any;\n forceUpdate?: boolean;\n persistent?: boolean;\n }) {\n let res = this._resources[resourceId];\n\n if (res) {\n res.setData(data, forceUpdate);\n } else {\n res = new Resource(resourceId, data, this._context);\n this._resources[resourceId] = res;\n }\n // persistent resources can only be removed by calling `remove`\n // non-persistent resources may be released when there are no more consumers\n res.persistent = persistent;\n }\n\n remove(resourceId: string): void {\n const res = this._resources[resourceId];\n\n if (res) {\n res.delete();\n delete this._resources[resourceId];\n }\n }\n\n unsubscribe({consumerId}: {consumerId: string}): void {\n const consumer = this._consumers[consumerId];\n if (consumer) {\n for (const requestId in consumer) {\n const request = consumer[requestId];\n const resource = this._resources[request.resourceId];\n if (resource) {\n resource.unsubscribe(request);\n }\n }\n delete this._consumers[consumerId];\n this.prune();\n }\n }\n\n subscribe({\n resourceId,\n onChange,\n consumerId,\n requestId = 'default'\n }: {\n resourceId: string;\n onChange: (data: T | Promise) => void;\n consumerId: string;\n requestId: string;\n }): T | Promise | undefined {\n const {_resources: resources, protocol} = this;\n if (resourceId.startsWith(protocol)) {\n resourceId = resourceId.replace(protocol, '');\n if (!resources[resourceId]) {\n // Add placeholder. When this resource becomes available, the consumer will be notified.\n this.add({resourceId, data: null, persistent: false});\n }\n }\n const res: Resource = resources[resourceId];\n this._track(consumerId, requestId, res, onChange);\n if (res) {\n return res.getData();\n }\n\n return undefined;\n }\n\n prune(): void {\n if (!this._pruneRequest) {\n // prune() may be called multiple times in the same animation frame.\n // Batch multiple requests together\n // @ts-ignore setTimeout returns NodeJS.Timeout in node\n this._pruneRequest = setTimeout(() => this._prune(), 0);\n }\n }\n\n finalize(): void {\n for (const key in this._resources) {\n this._resources[key].delete();\n }\n }\n\n private _track(\n consumerId: string,\n requestId: string,\n resource: Resource,\n onChange: (data: any) => void\n ) {\n const consumers = this._consumers;\n const consumer = (consumers[consumerId] = consumers[consumerId] || {});\n const request = consumer[requestId] || {};\n\n const oldResource = request.resourceId && this._resources[request.resourceId];\n if (oldResource) {\n oldResource.unsubscribe(request);\n this.prune();\n }\n if (resource) {\n consumer[requestId] = request;\n request.onChange = onChange;\n request.resourceId = resource.id;\n resource.subscribe(request);\n }\n }\n\n private _prune(): void {\n this._pruneRequest = null;\n\n for (const key of Object.keys(this._resources)) {\n const res = this._resources[key];\n if (!res.persistent && !res.inUse()) {\n res.delete();\n delete this._resources[key];\n }\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {Timeline} from '@luma.gl/core';\nimport {LIFECYCLE} from '../lifecycle/constants';\nimport log from '../utils/log';\nimport debug from '../debug';\nimport {flatten} from '../utils/flatten';\nimport {Stats} from '@probe.gl/stats';\nimport ResourceManager from './resource/resource-manager';\n\nimport Viewport from '../viewports/viewport';\nimport {createProgramManager} from '../shaderlib';\n\nimport type Layer from './layer';\nimport type CompositeLayer from './composite-layer';\nimport type Deck from './deck';\nimport type {ProgramManager} from '@luma.gl/engine';\n\nconst TRACE_SET_LAYERS = 'layerManager.setLayers';\nconst TRACE_ACTIVATE_VIEWPORT = 'layerManager.activateViewport';\n\nexport type LayerContext = {\n layerManager: LayerManager;\n resourceManager: ResourceManager;\n deck?: Deck;\n gl: WebGLRenderingContext;\n programManager: ProgramManager;\n stats: Stats;\n viewport: Viewport;\n timeline: Timeline;\n mousePosition: {x: number; y: number} | null;\n userData: any;\n onError?: (error: Error, source: Layer) => void;\n};\n\nexport type LayersList = (Layer | undefined | false | null | LayersList)[];\n\nexport default class LayerManager {\n layers: Layer[];\n context: LayerContext;\n resourceManager: ResourceManager;\n\n private _lastRenderedLayers: LayersList = [];\n private _needsRedraw: string | false = false;\n private _needsUpdate: string | false = false;\n private _nextLayers: LayersList | null = null;\n private _debug: boolean = false;\n\n // eslint-disable-next-line\n constructor(\n gl,\n {\n deck,\n stats,\n viewport,\n timeline\n }: {\n deck?: Deck;\n stats?: Stats;\n viewport?: Viewport;\n timeline?: Timeline;\n } = {}\n ) {\n // Currently deck.gl expects the DeckGL.layers array to be different\n // whenever React rerenders. If the same layers array is used, the\n // LayerManager's diffing algorithm will generate a fatal error and\n // break the rendering.\n\n // `this._lastRenderedLayers` stores the UNFILTERED layers sent\n // down to LayerManager, so that `layers` reference can be compared.\n // If it's the same across two React render calls, the diffing logic\n // will be skipped.\n this.layers = [];\n this.resourceManager = new ResourceManager({gl, protocol: 'deck://'});\n\n this.context = {\n mousePosition: null,\n userData: {},\n layerManager: this,\n gl,\n deck,\n // Enabling luma.gl Program caching using private API (_cachePrograms)\n programManager: gl && createProgramManager(gl),\n stats: stats || new Stats({id: 'deck.gl'}),\n // Make sure context.viewport is not empty on the first layer initialization\n viewport: viewport || new Viewport({id: 'DEFAULT-INITIAL-VIEWPORT'}), // Current viewport, exposed to layers for project* function\n timeline: timeline || new Timeline(),\n resourceManager: this.resourceManager,\n onError: undefined\n };\n\n Object.seal(this);\n }\n\n /** Method to call when the layer manager is not needed anymore. */\n finalize() {\n this.resourceManager.finalize();\n // Finalize all layers\n for (const layer of this.layers) {\n this._finalizeLayer(layer);\n }\n }\n\n /** Check if a redraw is needed */\n needsRedraw(\n opts: {\n /** Reset redraw flags to false after the call */\n clearRedrawFlags: boolean;\n } = {clearRedrawFlags: false}\n ): string | false {\n let redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n\n // This layers list doesn't include sublayers, relying on composite layers\n for (const layer of this.layers) {\n // Call every layer to clear their flags\n const layerNeedsRedraw = layer.getNeedsRedraw(opts);\n redraw = redraw || layerNeedsRedraw;\n }\n\n return redraw;\n }\n\n /** Check if a deep update of all layers is needed */\n needsUpdate(): string | false {\n if (this._nextLayers && this._nextLayers !== this._lastRenderedLayers) {\n // New layers array may be the same as the old one if `setProps` is called by React\n return 'layers changed';\n }\n return this._needsUpdate;\n }\n\n /** Layers will be redrawn (in next animation frame) */\n setNeedsRedraw(reason: string): void {\n this._needsRedraw = this._needsRedraw || reason;\n }\n\n /** Layers will be updated deeply (in next animation frame)\n Potentially regenerating attributes and sub layers */\n setNeedsUpdate(reason: string): void {\n this._needsUpdate = this._needsUpdate || reason;\n }\n\n /** Gets a list of currently rendered layers. Optionally filter by id. */\n getLayers({layerIds}: {layerIds?: string[]} = {}): Layer[] {\n // Filtering by layerId compares beginning of strings, so that sublayers will be included\n // Dependes on the convention of adding suffixes to the parent's layer name\n return layerIds\n ? this.layers.filter(layer => layerIds.find(layerId => layer.id.indexOf(layerId) === 0))\n : this.layers;\n }\n\n /** Set props needed for layer rendering and picking. */\n setProps(props: any): void {\n if ('debug' in props) {\n this._debug = props.debug;\n }\n\n // A way for apps to add data to context that can be accessed in layers\n if ('userData' in props) {\n this.context.userData = props.userData;\n }\n\n // New layers will be processed in `updateLayers` in the next update cycle\n if ('layers' in props) {\n this._nextLayers = props.layers;\n }\n\n if ('onError' in props) {\n this.context.onError = props.onError;\n }\n }\n\n /** Supply a new layer list, initiating sublayer generation and layer matching */\n setLayers(newLayers: LayersList, reason?: string): void {\n debug(TRACE_SET_LAYERS, this, reason, newLayers);\n\n this._lastRenderedLayers = newLayers;\n\n const flatLayers = flatten(newLayers, Boolean) as Layer[];\n\n for (const layer of flatLayers) {\n layer.context = this.context;\n }\n\n this._updateLayers(this.layers, flatLayers);\n }\n\n /** Update layers from last cycle if `setNeedsUpdate()` has been called */\n updateLayers(): void {\n // NOTE: For now, even if only some layer has changed, we update all layers\n // to ensure that layer id maps etc remain consistent even if different\n // sublayers are rendered\n const reason = this.needsUpdate();\n if (reason) {\n this.setNeedsRedraw(`updating layers: ${reason}`);\n // Force a full update\n this.setLayers(this._nextLayers || this._lastRenderedLayers, reason);\n }\n // Updated, clear the backlog\n this._nextLayers = null;\n }\n\n //\n // INTERNAL METHODS\n //\n\n /** Make a viewport \"current\" in layer context, updating viewportChanged flags */\n activateViewport = (viewport: Viewport) => {\n debug(TRACE_ACTIVATE_VIEWPORT, this, viewport);\n if (viewport) {\n this.context.viewport = viewport;\n }\n };\n\n private _handleError(stage: string, error: Error, layer: Layer) {\n layer.raiseError(error, `${stage} of ${layer}`);\n }\n\n // TODO - mark layers with exceptions as bad and remove from rendering cycle?\n /** Match all layers, checking for caught errors\n to avoid having an exception in one layer disrupt other layers */\n private _updateLayers(oldLayers: Layer[], newLayers: Layer[]): void {\n // Create old layer map\n const oldLayerMap: {[layerId: string]: Layer | null} = {};\n for (const oldLayer of oldLayers) {\n if (oldLayerMap[oldLayer.id]) {\n log.warn(`Multiple old layers with same id ${oldLayer.id}`)();\n } else {\n oldLayerMap[oldLayer.id] = oldLayer;\n }\n }\n\n // Allocate array for generated layers\n const generatedLayers: Layer[] = [];\n\n // Match sublayers\n this._updateSublayersRecursively(newLayers, oldLayerMap, generatedLayers);\n\n // Finalize unmatched layers\n this._finalizeOldLayers(oldLayerMap);\n\n let needsUpdate: string | false = false;\n for (const layer of generatedLayers) {\n if (layer.hasUniformTransition()) {\n needsUpdate = `Uniform transition in ${layer}`;\n break;\n }\n }\n\n this._needsUpdate = needsUpdate;\n this.layers = generatedLayers;\n }\n\n /* eslint-disable complexity,max-statements */\n // Note: adds generated layers to `generatedLayers` array parameter\n private _updateSublayersRecursively(\n newLayers: Layer[],\n oldLayerMap: {[layerId: string]: Layer | null},\n generatedLayers: Layer[]\n ) {\n for (const newLayer of newLayers) {\n newLayer.context = this.context;\n\n // Given a new coming layer, find its matching old layer (if any)\n const oldLayer = oldLayerMap[newLayer.id];\n if (oldLayer === null) {\n // null, rather than undefined, means this id was originally there\n log.warn(`Multiple new layers with same id ${newLayer.id}`)();\n }\n // Remove the old layer from candidates, as it has been matched with this layer\n oldLayerMap[newLayer.id] = null;\n\n let sublayers: Layer[] | null = null;\n\n // We must not generate exceptions until after layer matching is complete\n try {\n if (this._debug && oldLayer !== newLayer) {\n newLayer.validateProps();\n }\n\n if (!oldLayer) {\n this._initializeLayer(newLayer);\n } else {\n this._transferLayerState(oldLayer, newLayer);\n this._updateLayer(newLayer);\n }\n generatedLayers.push(newLayer);\n\n // Call layer lifecycle method: render sublayers\n sublayers = newLayer.isComposite ? (newLayer as CompositeLayer).getSubLayers() : null;\n // End layer lifecycle method: render sublayers\n } catch (err) {\n this._handleError('matching', err as Error, newLayer); // Record first exception\n }\n\n if (sublayers) {\n this._updateSublayersRecursively(sublayers, oldLayerMap, generatedLayers);\n }\n }\n }\n /* eslint-enable complexity,max-statements */\n\n // Finalize any old layers that were not matched\n private _finalizeOldLayers(oldLayerMap: {[layerId: string]: Layer | null}): void {\n for (const layerId in oldLayerMap) {\n const layer = oldLayerMap[layerId];\n if (layer) {\n this._finalizeLayer(layer);\n }\n }\n }\n\n // / EXCEPTION SAFE LAYER ACCESS\n\n /** Safely initializes a single layer, calling layer methods */\n private _initializeLayer(layer: Layer): void {\n try {\n layer._initialize();\n layer.lifecycle = LIFECYCLE.INITIALIZED;\n } catch (err) {\n this._handleError('initialization', err as Error, layer);\n // TODO - what should the lifecycle state be here? LIFECYCLE.INITIALIZATION_FAILED?\n }\n }\n\n /** Transfer state from one layer to a newer version */\n private _transferLayerState(oldLayer: Layer, newLayer: Layer): void {\n newLayer._transferState(oldLayer);\n newLayer.lifecycle = LIFECYCLE.MATCHED;\n\n if (newLayer !== oldLayer) {\n oldLayer.lifecycle = LIFECYCLE.AWAITING_GC;\n }\n }\n\n /** Safely updates a single layer, cleaning all flags */\n private _updateLayer(layer: Layer): void {\n try {\n layer._update();\n } catch (err) {\n this._handleError('update', err as Error, layer);\n }\n }\n\n /** Safely finalizes a single layer, removing all resources */\n private _finalizeLayer(layer: Layer): void {\n this._needsRedraw = this._needsRedraw || `finalized ${layer}`;\n\n layer.lifecycle = LIFECYCLE.AWAITING_FINALIZATION;\n\n try {\n layer._finalize();\n layer.lifecycle = LIFECYCLE.FINALIZED;\n } catch (err) {\n this._handleError('finalization', err as Error, layer);\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {log} from '@deck.gl/core';\nimport IconLayer from '../../icon-layer/icon-layer';\n\nimport fs from './multi-icon-layer-fragment.glsl';\n\nimport type {IconLayerProps} from '../../icon-layer/icon-layer';\nimport type {Accessor, Color, UpdateParameters, DefaultProps} from '@deck.gl/core';\nimport {Character} from '../utils';\n\n// TODO expose as layer properties\nconst DEFAULT_BUFFER = 192.0 / 256;\nconst EMPTY_ARRAY = [];\n\ntype _MultiIconLayerProps = {\n getIconOffsets?: Accessor;\n sdf?: boolean;\n smoothing?: number;\n outlineWidth?: number;\n outlineColor?: Color;\n};\n\nexport type MultiIconLayerProps = _MultiIconLayerProps & IconLayerProps;\n\nconst defaultProps: DefaultProps = {\n getIconOffsets: {type: 'accessor', value: x => x.offsets},\n alphaCutoff: 0.001,\n smoothing: 0.1,\n outlineWidth: 0,\n outlineColor: {type: 'color', value: [0, 0, 0, 255]}\n};\n\nexport default class MultiIconLayer extends IconLayer<\n DataT,\n ExtraPropsT & Required<_MultiIconLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'MultiIconLayer';\n\n state!: IconLayer['state'] & {\n outlineColor: Color;\n };\n\n getShaders() {\n return {...super.getShaders(), fs};\n }\n\n initializeState() {\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n attributeManager!.addInstanced({\n instanceOffsets: {\n size: 2,\n accessor: 'getIconOffsets'\n },\n instancePickingColors: {\n type: GL.UNSIGNED_BYTE,\n size: 3,\n accessor: (object, {index, target: value}) => this.encodePickingColor(index, value)\n }\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n const {props, oldProps} = params;\n let {outlineColor} = props;\n\n if (outlineColor !== oldProps.outlineColor) {\n outlineColor = outlineColor.map(x => x / 255) as Color;\n outlineColor[3] = Number.isFinite(outlineColor[3]) ? outlineColor[3] : 1;\n\n this.setState({\n outlineColor\n });\n }\n if (!props.sdf && props.outlineWidth) {\n log.warn(`${this.id}: fontSettings.sdf is required to render outline`)();\n }\n }\n\n draw(params) {\n const {sdf, smoothing, outlineWidth} = this.props;\n const {outlineColor} = this.state;\n const outlineBuffer = outlineWidth\n ? Math.max(smoothing, DEFAULT_BUFFER * (1 - outlineWidth))\n : -1;\n\n params.uniforms = {\n ...params.uniforms,\n // Refer the following doc about gamma and buffer\n // https://blog.mapbox.com/drawing-text-with-signed-distance-fields-in-mapbox-gl-b0933af6f817\n buffer: DEFAULT_BUFFER,\n outlineBuffer,\n gamma: smoothing,\n sdf: Boolean(sdf),\n outlineColor\n };\n\n super.draw(params);\n\n // draw text without outline on top to ensure a thick outline won't occlude other characters\n if (sdf && outlineWidth) {\n const {iconManager} = this.state;\n const iconsTexture = iconManager.getTexture();\n\n if (iconsTexture) {\n this.state.model.draw({uniforms: {outlineBuffer: DEFAULT_BUFFER}});\n }\n }\n }\n\n protected getInstanceOffset(icons: string): number[] {\n return icons ? Array.from(icons).flatMap(icon => super.getInstanceOffset(icon)) : EMPTY_ARRAY;\n }\n\n getInstanceColorMode(icons: string): number {\n return 1; // mask\n }\n\n getInstanceIconFrame(icons: string): number[] {\n return icons\n ? Array.from(icons).flatMap(icon => super.getInstanceIconFrame(icon))\n : EMPTY_ARRAY;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME multi-icon-layer-fragment-shader\n\nprecision highp float;\n\nuniform float opacity;\nuniform sampler2D iconsTexture;\nuniform float gamma;\nuniform bool sdf;\nuniform float alphaCutoff;\nuniform float buffer;\nuniform float outlineBuffer;\nuniform vec4 outlineColor;\n\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\nvarying vec2 uv;\n\nvoid main(void) {\n geometry.uv = uv;\n\n if (!picking_uActive) {\n float alpha = texture2D(iconsTexture, vTextureCoords).a;\n vec4 color = vColor;\n\n // if enable sdf (signed distance fields)\n if (sdf) {\n float distance = alpha;\n alpha = smoothstep(buffer - gamma, buffer + gamma, distance);\n\n if (outlineBuffer > 0.0) {\n float inFill = alpha;\n float inBorder = smoothstep(outlineBuffer - gamma, outlineBuffer + gamma, distance);\n color = mix(outlineColor, vColor, inFill);\n alpha = inBorder;\n }\n }\n\n // Take the global opacity and the alpha from color into account for the alpha component\n float a = alpha * color.a;\n \n if (a < alphaCutoff) {\n discard;\n }\n\n gl_FragColor = vec4(color.rgb, a * opacity);\n }\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","import {OPERATION} from '../lib/constants';\nimport LayersPass from './layers-pass';\n\nexport default class DrawLayersPass extends LayersPass {\n shouldDrawLayer(layer) {\n return layer.props.operation === OPERATION.DRAW;\n }\n}\n","import debug from '../debug';\nimport DrawLayersPass from '../passes/draw-layers-pass';\nimport PickLayersPass from '../passes/pick-layers-pass';\nimport {Framebuffer} from '@luma.gl/core';\n\nconst TRACE_RENDER_LAYERS = 'deckRenderer.renderLayers';\n\nexport default class DeckRenderer {\n constructor(gl) {\n this.gl = gl;\n this.layerFilter = null;\n this.drawPickingColors = false;\n this.drawLayersPass = new DrawLayersPass(gl);\n this.pickLayersPass = new PickLayersPass(gl);\n this.renderCount = 0;\n this._needsRedraw = 'Initial render';\n this.renderBuffers = [];\n this.lastPostProcessEffect = null;\n }\n\n setProps(props) {\n if ('layerFilter' in props && this.layerFilter !== props.layerFilter) {\n this.layerFilter = props.layerFilter;\n this._needsRedraw = 'layerFilter changed';\n }\n\n if ('drawPickingColors' in props && this.drawPickingColors !== props.drawPickingColors) {\n this.drawPickingColors = props.drawPickingColors;\n this._needsRedraw = 'drawPickingColors changed';\n }\n }\n\n /*\n target,\n layers,\n viewports,\n onViewportActive,\n views,\n redrawReason,\n clearCanvas,\n effects,\n pass,\n stats\n */\n renderLayers(opts) {\n const layerPass = this.drawPickingColors ? this.pickLayersPass : this.drawLayersPass;\n\n opts.layerFilter = opts.layerFilter || this.layerFilter;\n opts.effects = opts.effects || [];\n opts.target = opts.target || Framebuffer.getDefaultFramebuffer(this.gl);\n\n this._preRender(opts.effects, opts);\n\n const outputBuffer = this.lastPostProcessEffect ? this.renderBuffers[0] : opts.target;\n const renderStats = layerPass.render({...opts, target: outputBuffer});\n\n this._postRender(opts.effects, opts);\n\n this.renderCount++;\n\n debug(TRACE_RENDER_LAYERS, this, renderStats, opts);\n }\n\n needsRedraw(opts = {clearRedrawFlags: false}) {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n\n finalize() {\n const {renderBuffers} = this;\n for (const buffer of renderBuffers) {\n buffer.delete();\n }\n renderBuffers.length = 0;\n }\n\n // Private\n _preRender(effects, opts) {\n let lastPostProcessEffect = null;\n\n for (const effect of effects) {\n effect.preRender(this.gl, opts);\n if (effect.postRender) {\n lastPostProcessEffect = effect;\n }\n }\n\n if (lastPostProcessEffect) {\n this._resizeRenderBuffers();\n }\n this.lastPostProcessEffect = lastPostProcessEffect;\n }\n\n _resizeRenderBuffers() {\n const {renderBuffers} = this;\n if (renderBuffers.length === 0) {\n renderBuffers.push(new Framebuffer(this.gl), new Framebuffer(this.gl));\n }\n for (const buffer of renderBuffers) {\n buffer.resize();\n }\n }\n\n _postRender(effects, opts) {\n const {renderBuffers} = this;\n const params = {\n inputBuffer: renderBuffers[0],\n swapBuffer: renderBuffers[1],\n target: null\n };\n for (const effect of effects) {\n if (effect.postRender) {\n if (effect === this.lastPostProcessEffect) {\n params.target = opts.target;\n effect.postRender(this.gl, params);\n break;\n }\n const buffer = effect.postRender(this.gl, params);\n params.inputBuffer = buffer;\n params.swapBuffer = buffer === renderBuffers[0] ? renderBuffers[1] : renderBuffers[0];\n }\n }\n }\n}\n","/* global document */\nconst state = {\n onIninitialize: _ => _,\n onFinalize: _ => _,\n onMessage: null\n};\n\nexport default class Transport {\n static setCallbacks({onInitialize, onFinalize, onMessage}) {\n if (onInitialize) {\n state.onInitialize = onInitialize;\n }\n if (onFinalize) {\n state.onFinalize = onFinalize;\n }\n if (onMessage) {\n state.onMessage = onMessage;\n }\n // this._flushQueuedConnections();\n }\n\n constructor(name = 'Transport') {\n this.name = name;\n this._messageQueue = [];\n this.userData = {};\n }\n\n /**\n * Return a root DOM element for this transport connection\n * @return {HTMLElement} default implementation returns document.body\n * Jupyter Notebook transports will return an element associated with the notebook cell\n */\n getRootDOMElement() {\n return typeof document !== 'undefined' ? document.body : null;\n }\n\n /**\n * Back-channel messaging\n */\n sendJSONMessage() {\n // eslint-disable-next-line\n console.error('Back-channel not implemented for this transport');\n }\n\n /**\n * Back-channel messaging\n */\n sendBinaryMessage() {\n // eslint-disable-next-line\n console.error('Back-channel not implemented for this transport');\n }\n\n //\n // API for transports (not intended for apps)\n //\n\n _initialize(options = {}) {\n const message = {transport: this, ...options};\n state.onInitialize(message);\n\n // console.debug('Resolving init promise', options); // eslint-disable-line\n // this._initResolvers.resolve(message);\n }\n\n _finalize(options = {}) {\n const message = {transport: this, ...options};\n\n // TODO - could potentially be called without Initialize being called\n state.onFinalize(message);\n this._destroyed = true;\n }\n\n _messageReceived(message = {}) {\n message = {transport: this, ...message};\n\n // TODO - this function could potentially be called before callback registered/ Initialize called\n // if (!state.onMessage) {\n // console.error('Queueing transport message', message); // eslint-disable-line\n // this._messageQueue.push(message);\n // return;\n // }\n\n console.debug('Delivering transport message', message); // eslint-disable-line\n state.onMessage(message);\n }\n\n /*\n // This tries to handle the case that a transport connection initializes before the application\n // has set the callbacks.\n // Note: It is not clear that this can actually happen in the in initial Jupyter widget transport\n _flushQueuedConnections() {\n if (onInitialize) {\n state._initPromise.then(initArgs => {\n onInitialize(initArgs);\n\n if (state._onMessage) {\n // Send any queued messages\n let message;\n while ((message = this._messageQueue.pop())) {\n console.debug('Delivering queued transport message', message); // eslint-disable-line\n this._onMessage(message);\n }\n }\n });\n }\n }\n */\n\n static _stringifyJSONSafe(v) {\n const cache = new Set();\n return JSON.stringify(v, (key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (cache.has(value)) {\n // Circular reference found\n try {\n // If this value does not reference a parent it can be deduped\n return JSON.parse(JSON.stringify(value));\n } catch (err) {\n // discard key if value cannot be deduped\n return undefined;\n }\n }\n // Store value in our set\n cache.add(value);\n }\n return value;\n });\n }\n}\n","export default function isElectron(mockUserAgent) {\n if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') {\n return true;\n }\n\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && Boolean(process.versions.electron)) {\n return true;\n }\n\n const realUserAgent = typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent;\n const userAgent = mockUserAgent || realUserAgent;\n\n if (userAgent && userAgent.indexOf('Electron') >= 0) {\n return true;\n }\n\n return false;\n}\n//# sourceMappingURL=is-electron.js.map","import { log } from '@luma.gl/gltools';\nexport function stubRemovedMethods(instance, className, version, methodNames) {\n const upgradeMessage = \"See luma.gl \".concat(version, \" Upgrade Guide at https://luma.gl/docs/upgrade-guide\");\n const prototype = Object.getPrototypeOf(instance);\n methodNames.forEach(methodName => {\n if (prototype.methodName) {\n return;\n }\n\n prototype[methodName] = () => {\n log.removed(\"Calling removed method \".concat(className, \".\").concat(methodName, \": \"), upgradeMessage)();\n throw new Error(methodName);\n };\n });\n}\n//# sourceMappingURL=stub-methods.js.map","import MathArray from './math-array';\nimport { checkNumber } from '../../lib/validators';\nimport { config } from '../../lib/common';\nexport default class Matrix extends MathArray {\n toString() {\n let string = '[';\n\n if (config.printRowMajor) {\n string += 'row-major:';\n\n for (let row = 0; row < this.RANK; ++row) {\n for (let col = 0; col < this.RANK; ++col) {\n string += \" \".concat(this[col * this.RANK + row]);\n }\n }\n } else {\n string += 'column-major:';\n\n for (let i = 0; i < this.ELEMENTS; ++i) {\n string += \" \".concat(this[i]);\n }\n }\n\n string += ']';\n return string;\n }\n\n getElementIndex(row, col) {\n return col * this.RANK + row;\n }\n\n getElement(row, col) {\n return this[col * this.RANK + row];\n }\n\n setElement(row, col, value) {\n this[col * this.RANK + row] = checkNumber(value);\n return this;\n }\n\n getColumn(columnIndex, result = new Array(this.RANK).fill(-0)) {\n const firstIndex = columnIndex * this.RANK;\n\n for (let i = 0; i < this.RANK; ++i) {\n result[i] = this[firstIndex + i];\n }\n\n return result;\n }\n\n setColumn(columnIndex, columnVector) {\n const firstIndex = columnIndex * this.RANK;\n\n for (let i = 0; i < this.RANK; ++i) {\n this[firstIndex + i] = columnVector[i];\n }\n\n return this;\n }\n\n}\n//# sourceMappingURL=matrix.js.map","export default class Pass {\n id: string;\n gl: WebGLRenderingContext;\n props: any;\n\n constructor(gl: WebGLRenderingContext, props: {id: string} = {id: 'pass'}) {\n const {id} = props;\n this.id = id; // id of this pass\n this.gl = gl;\n this.props = {...props};\n }\n\n setProps(props): void {\n Object.assign(this.props, props);\n }\n\n render(params): void {} // eslint-disable-line @typescript-eslint/no-empty-function\n\n cleanup() {} // eslint-disable-line @typescript-eslint/no-empty-function\n}\n","export function getTransferList(object, recursive = true, transfers) {\n const transfersSet = transfers || new Set();\n\n if (!object) {} else if (isTransferable(object)) {\n transfersSet.add(object);\n } else if (isTransferable(object.buffer)) {\n transfersSet.add(object.buffer);\n } else if (ArrayBuffer.isView(object)) {} else if (recursive && typeof object === 'object') {\n for (const key in object) {\n getTransferList(object[key], recursive, transfersSet);\n }\n }\n\n return transfers === undefined ? Array.from(transfersSet) : [];\n}\n\nfunction isTransferable(object) {\n if (!object) {\n return false;\n }\n\n if (object instanceof ArrayBuffer) {\n return true;\n }\n\n if (typeof MessagePort !== 'undefined' && object instanceof MessagePort) {\n return true;\n }\n\n if (typeof ImageBitmap !== 'undefined' && object instanceof ImageBitmap) {\n return true;\n }\n\n if (typeof OffscreenCanvas !== 'undefined' && object instanceof OffscreenCanvas) {\n return true;\n }\n\n return false;\n}\n\nexport function getTransferListForWriter(object) {\n if (object === null) {\n return {};\n }\n\n const clone = Object.assign({}, object);\n Object.keys(clone).forEach(key => {\n if (typeof object[key] === 'object' && !ArrayBuffer.isView(object[key])) {\n clone[key] = getTransferListForWriter(object[key]);\n } else if (typeof clone[key] === 'function' || clone[key] instanceof RegExp) {\n clone[key] = {};\n } else {\n clone[key] = object[key];\n }\n });\n return clone;\n}\n//# sourceMappingURL=get-transfer-list.js.map","import LayersPass, {LayersPassRenderOptions, RenderStats, Rect} from './layers-pass';\nimport {withParameters} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport {OPERATION} from '../lib/constants';\nimport log from '../utils/log';\n\nimport type {Framebuffer} from '@luma.gl/core';\nimport type Viewport from '../viewports/viewport';\nimport type Layer from '../lib/layer';\n\nconst PICKING_PARAMETERS = {\n blendFunc: [GL.ONE, GL.ZERO, GL.CONSTANT_ALPHA, GL.ZERO],\n blendEquation: GL.FUNC_ADD\n};\n\ntype PickLayersPassRenderOptions = LayersPassRenderOptions & {\n pickingFBO: Framebuffer;\n deviceRect: Rect;\n pickZ: boolean;\n};\n\ntype EncodedPickingColors = {\n a: number;\n layer: Layer;\n viewports: Viewport[];\n};\n\nexport type PickingColorDecoder = (pickedColor: number[] | Uint8Array) =>\n | {\n pickedLayer: Layer;\n pickedViewports: Viewport[];\n pickedObjectIndex: number;\n }\n | undefined;\n\nexport default class PickLayersPass extends LayersPass {\n private pickZ?: boolean;\n private _colors: {\n byLayer: Map;\n byAlpha: EncodedPickingColors[];\n } | null = null;\n\n render(props: PickLayersPassRenderOptions) {\n if (props.pickingFBO) {\n // When drawing into an off-screen buffer, use the alpha channel to encode layer index\n return this._drawPickingBuffer(props);\n }\n // When drawing to screen (debug mode), do not use the alpha channel so that result is always visible\n return super.render(props);\n }\n\n // Private\n // Draws list of layers and viewports into the picking buffer\n // Note: does not sample the buffer, that has to be done by the caller\n _drawPickingBuffer({\n layers,\n layerFilter,\n views,\n viewports,\n onViewportActive,\n pickingFBO,\n deviceRect: {x, y, width, height},\n cullRect,\n effects,\n pass = 'picking',\n pickZ\n }: PickLayersPassRenderOptions): {\n decodePickingColor: PickingColorDecoder | null;\n stats: RenderStats;\n } {\n const gl = this.gl;\n this.pickZ = pickZ;\n\n // Track encoded layer indices\n const encodedColors = pickZ\n ? null\n : {\n byLayer: new Map(),\n byAlpha: []\n };\n // Temporarily store it on the instance so that it can be accessed by this.getLayerParameters\n this._colors = encodedColors;\n\n // Make sure we clear scissor test and fbo bindings in case of exceptions\n // We are only interested in one pixel, no need to render anything else\n // Note that the callback here is called synchronously.\n // Set blend mode for picking\n // always overwrite existing pixel with [r,g,b,layerIndex]\n const renderStatus = withParameters(\n gl,\n {\n scissorTest: true,\n scissor: [x, y, width, height],\n clearColor: [0, 0, 0, 0],\n // When used as Mapbox custom layer, the context state may be dirty\n // TODO - Remove when mapbox fixes this issue\n // https://github.com/mapbox/mapbox-gl-js/issues/7801\n depthMask: true,\n depthTest: true,\n depthRange: [0, 1],\n colorMask: [true, true, true, true],\n // Blending\n ...PICKING_PARAMETERS,\n blend: !pickZ\n },\n () =>\n super.render({\n target: pickingFBO,\n layers,\n layerFilter,\n views,\n viewports,\n onViewportActive,\n cullRect,\n effects: effects?.filter(e => e.useInPicking),\n pass\n })\n );\n\n // Clear the temp field\n this._colors = null;\n const decodePickingColor = encodedColors && decodeColor.bind(null, encodedColors);\n return {decodePickingColor, stats: renderStatus};\n }\n\n protected shouldDrawLayer(layer: Layer): boolean {\n return layer.props.pickable && layer.props.operation === OPERATION.DRAW;\n }\n\n protected getModuleParameters() {\n return {\n pickingActive: 1,\n pickingAttribute: this.pickZ,\n // turn off lighting by adding empty light source object\n // lights shader module relies on the `lightSources` to turn on/off lighting\n lightSources: {}\n };\n }\n\n protected getLayerParameters(layer: Layer, layerIndex: number, viewport: Viewport): any {\n const pickParameters = {...layer.props.parameters};\n\n if (!this._colors) {\n pickParameters.blend = false;\n } else {\n Object.assign(pickParameters, PICKING_PARAMETERS);\n pickParameters.blend = true;\n pickParameters.blendColor = encodeColor(this._colors, layer, viewport);\n }\n\n return pickParameters;\n }\n}\n\n// Assign an unique alpha value for each pickable layer and track the encoding in the cache object\n// Returns normalized blend color\nfunction encodeColor(\n encoded: {\n byLayer: Map;\n byAlpha: EncodedPickingColors[];\n },\n layer: Layer,\n viewport: Viewport\n): number[] {\n const {byLayer, byAlpha} = encoded;\n let a;\n\n // Encode layerIndex in the alpha channel\n // TODO - combine small layers to better utilize the picking color space\n let entry = byLayer.get(layer);\n if (entry) {\n entry.viewports.push(viewport);\n a = entry.a;\n } else {\n a = byLayer.size + 1;\n if (a <= 255) {\n entry = {a, layer, viewports: [viewport]};\n byLayer.set(layer, entry);\n byAlpha[a] = entry;\n } else {\n log.warn('Too many pickable layers, only picking the first 255')();\n a = 0;\n }\n }\n return [0, 0, 0, a / 255];\n}\n\n// Given a picked color, retrieve the corresponding layer and viewports from cache\nfunction decodeColor(\n encoded: {\n byLayer: Map;\n byAlpha: EncodedPickingColors[];\n },\n pickedColor: number[] | Uint8Array\n):\n | {\n pickedLayer: Layer;\n pickedViewports: Viewport[];\n pickedObjectIndex: number;\n }\n | undefined {\n const entry = encoded.byAlpha[pickedColor[3]];\n return (\n entry && {\n pickedLayer: entry.layer,\n pickedViewports: entry.viewports,\n pickedObjectIndex: entry.layer.decodePickingColor(pickedColor)\n }\n );\n}\n","const BIG_ENDIAN = false;\nconst LITTLE_ENDIAN = true;\nexport function getBinaryImageMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n return getPngMetadata(dataView) || getJpegMetadata(dataView) || getGifMetadata(dataView) || getBmpMetadata(dataView);\n}\n\nfunction getPngMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n const isPng = dataView.byteLength >= 24 && dataView.getUint32(0, BIG_ENDIAN) === 0x89504e47;\n\n if (!isPng) {\n return null;\n }\n\n return {\n mimeType: 'image/png',\n width: dataView.getUint32(16, BIG_ENDIAN),\n height: dataView.getUint32(20, BIG_ENDIAN)\n };\n}\n\nfunction getGifMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n const isGif = dataView.byteLength >= 10 && dataView.getUint32(0, BIG_ENDIAN) === 0x47494638;\n\n if (!isGif) {\n return null;\n }\n\n return {\n mimeType: 'image/gif',\n width: dataView.getUint16(6, LITTLE_ENDIAN),\n height: dataView.getUint16(8, LITTLE_ENDIAN)\n };\n}\n\nexport function getBmpMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n const isBmp = dataView.byteLength >= 14 && dataView.getUint16(0, BIG_ENDIAN) === 0x424d && dataView.getUint32(2, LITTLE_ENDIAN) === dataView.byteLength;\n\n if (!isBmp) {\n return null;\n }\n\n return {\n mimeType: 'image/bmp',\n width: dataView.getUint32(18, LITTLE_ENDIAN),\n height: dataView.getUint32(22, LITTLE_ENDIAN)\n };\n}\n\nfunction getJpegMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n const isJpeg = dataView.byteLength >= 3 && dataView.getUint16(0, BIG_ENDIAN) === 0xffd8 && dataView.getUint8(2) === 0xff;\n\n if (!isJpeg) {\n return null;\n }\n\n const {\n tableMarkers,\n sofMarkers\n } = getJpegMarkers();\n let i = 2;\n\n while (i + 9 < dataView.byteLength) {\n const marker = dataView.getUint16(i, BIG_ENDIAN);\n\n if (sofMarkers.has(marker)) {\n return {\n mimeType: 'image/jpeg',\n height: dataView.getUint16(i + 5, BIG_ENDIAN),\n width: dataView.getUint16(i + 7, BIG_ENDIAN)\n };\n }\n\n if (!tableMarkers.has(marker)) {\n return null;\n }\n\n i += 2;\n i += dataView.getUint16(i, BIG_ENDIAN);\n }\n\n return null;\n}\n\nfunction getJpegMarkers() {\n const tableMarkers = new Set([0xffdb, 0xffc4, 0xffcc, 0xffdd, 0xfffe]);\n\n for (let i = 0xffe0; i < 0xfff0; ++i) {\n tableMarkers.add(i);\n }\n\n const sofMarkers = new Set([0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc9, 0xffca, 0xffcb, 0xffcd, 0xffce, 0xffcf, 0xffde]);\n return {\n tableMarkers,\n sofMarkers\n };\n}\n\nfunction toDataView(data) {\n if (data instanceof DataView) {\n return data;\n }\n\n if (ArrayBuffer.isView(data)) {\n return new DataView(data.buffer);\n }\n\n if (data instanceof ArrayBuffer) {\n return new DataView(data);\n }\n\n throw new Error('toDataView');\n}\n//# sourceMappingURL=binary-image-api.js.map","// Assume data array is sorted by \n// Replaces the specified range with a new subarray\n// Mutates the data array\n// Returns {startRow, endRow} of the inserted items\nexport function replaceInRange({\n data,\n getIndex,\n dataRange,\n replace\n}: {\n data: any[];\n getIndex: (d: any) => number;\n dataRange: {startRow?: number; endRow?: number};\n replace: any[];\n}): {startRow: Number; endRow: number} {\n const {startRow = 0, endRow = Infinity} = dataRange;\n const count = data.length;\n let replaceStart = count;\n let replaceEnd = count;\n for (let i = 0; i < count; i++) {\n const row = getIndex(data[i]);\n if (replaceStart > i && row >= startRow) {\n replaceStart = i;\n }\n if (row >= endRow) {\n replaceEnd = i;\n break;\n }\n }\n let index = replaceStart;\n const dataLengthChanged = replaceEnd - replaceStart !== replace.length;\n // Save the items after replaceEnd before we overwrite data\n const endChunk = dataLengthChanged ? data.slice(replaceEnd) : undefined;\n // Insert new items\n for (let i = 0; i < replace.length; i++) {\n data[index++] = replace[i];\n }\n if (endChunk) {\n // Append items after replaceEnd\n for (let i = 0; i < endChunk.length; i++) {\n data[index++] = endChunk[i];\n }\n // Trim additional items\n data.length = index;\n }\n\n return {\n startRow: replaceStart,\n endRow: replaceStart + replace.length\n };\n}\n","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties;","/* global document */\n// TODO - make sure this can be called multiple times without adding elements\nexport function loadCSS(url) {\n const link = document.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n document.getElementsByTagName('head')[0].appendChild(link);\n}\n\nexport function createContainer(width, height) {\n const container = document.createElement('div');\n container.style.width = Number.isFinite(width) ? `${width}px` : width;\n container.style.height = `${height}px`;\n container.style.position = 'relative';\n return container;\n}\n","export const VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : 'latest';\n//# sourceMappingURL=version.js.map","import { VERSION } from './lib/utils/version';\nconst DEFAULT_DRACO_OPTIONS = {\n draco: {\n decoderType: typeof WebAssembly === 'object' ? 'wasm' : 'js',\n libraryPath: 'libs/',\n extraAttributes: {},\n attributeNameEntry: undefined\n }\n};\nexport const DracoLoader = {\n name: 'Draco',\n id: 'draco',\n module: 'draco',\n shapes: ['mesh'],\n version: VERSION,\n worker: true,\n extensions: ['drc'],\n mimeTypes: ['application/octet-stream'],\n binary: true,\n tests: ['DRACO'],\n options: DEFAULT_DRACO_OPTIONS\n};\nexport const _TypecheckDracoLoader = DracoLoader;\n//# sourceMappingURL=draco-loader.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { assert } from '../../utils/assert';\nexport default class Schema {\n constructor(fields, metadata) {\n _defineProperty(this, \"fields\", void 0);\n\n _defineProperty(this, \"metadata\", void 0);\n\n assert(Array.isArray(fields));\n checkNames(fields);\n this.fields = fields;\n this.metadata = metadata || new Map();\n }\n\n compareTo(other) {\n if (this.metadata !== other.metadata) {\n return false;\n }\n\n if (this.fields.length !== other.fields.length) {\n return false;\n }\n\n for (let i = 0; i < this.fields.length; ++i) {\n if (!this.fields[i].compareTo(other.fields[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n select(...columnNames) {\n const nameMap = Object.create(null);\n\n for (const name of columnNames) {\n nameMap[name] = true;\n }\n\n const selectedFields = this.fields.filter(field => nameMap[field.name]);\n return new Schema(selectedFields, this.metadata);\n }\n\n selectAt(...columnIndices) {\n const selectedFields = columnIndices.map(index => this.fields[index]).filter(Boolean);\n return new Schema(selectedFields, this.metadata);\n }\n\n assign(schemaOrFields) {\n let fields;\n let metadata = this.metadata;\n\n if (schemaOrFields instanceof Schema) {\n const otherSchema = schemaOrFields;\n fields = otherSchema.fields;\n metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherSchema.metadata);\n } else {\n fields = schemaOrFields;\n }\n\n const fieldMap = Object.create(null);\n\n for (const field of this.fields) {\n fieldMap[field.name] = field;\n }\n\n for (const field of fields) {\n fieldMap[field.name] = field;\n }\n\n const mergedFields = Object.values(fieldMap);\n return new Schema(mergedFields, metadata);\n }\n\n}\n\nfunction checkNames(fields) {\n const usedNames = {};\n\n for (const field of fields) {\n if (usedNames[field.name]) {\n console.warn('Schema: duplicated field name', field.name, field);\n }\n\n usedNames[field.name] = true;\n }\n}\n\nfunction mergeMaps(m1, m2) {\n return new Map([...(m1 || new Map()), ...(m2 || new Map())]);\n}\n//# sourceMappingURL=schema.js.map","export function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'loader assertion failed.');\n }\n}\n//# sourceMappingURL=assert.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Field {\n constructor(name, type, nullable = false, metadata = new Map()) {\n _defineProperty(this, \"name\", void 0);\n\n _defineProperty(this, \"type\", void 0);\n\n _defineProperty(this, \"nullable\", void 0);\n\n _defineProperty(this, \"metadata\", void 0);\n\n this.name = name;\n this.type = type;\n this.nullable = nullable;\n this.metadata = metadata;\n }\n\n get typeId() {\n return this.type && this.type.typeId;\n }\n\n clone() {\n return new Field(this.name, this.type, this.nullable, this.metadata);\n }\n\n compareTo(other) {\n return this.name === other.name && this.type === other.type && this.nullable === other.nullable && this.metadata === other.metadata;\n }\n\n toString() {\n return \"\".concat(this.type).concat(this.nullable ? ', nullable' : '').concat(this.metadata ? \", metadata: \".concat(this.metadata) : '');\n }\n\n}\n//# sourceMappingURL=field.js.map","export let Type;\n\n(function (Type) {\n Type[Type[\"NONE\"] = 0] = \"NONE\";\n Type[Type[\"Null\"] = 1] = \"Null\";\n Type[Type[\"Int\"] = 2] = \"Int\";\n Type[Type[\"Float\"] = 3] = \"Float\";\n Type[Type[\"Binary\"] = 4] = \"Binary\";\n Type[Type[\"Utf8\"] = 5] = \"Utf8\";\n Type[Type[\"Bool\"] = 6] = \"Bool\";\n Type[Type[\"Decimal\"] = 7] = \"Decimal\";\n Type[Type[\"Date\"] = 8] = \"Date\";\n Type[Type[\"Time\"] = 9] = \"Time\";\n Type[Type[\"Timestamp\"] = 10] = \"Timestamp\";\n Type[Type[\"Interval\"] = 11] = \"Interval\";\n Type[Type[\"List\"] = 12] = \"List\";\n Type[Type[\"Struct\"] = 13] = \"Struct\";\n Type[Type[\"Union\"] = 14] = \"Union\";\n Type[Type[\"FixedSizeBinary\"] = 15] = \"FixedSizeBinary\";\n Type[Type[\"FixedSizeList\"] = 16] = \"FixedSizeList\";\n Type[Type[\"Map\"] = 17] = \"Map\";\n Type[Type[\"Dictionary\"] = -1] = \"Dictionary\";\n Type[Type[\"Int8\"] = -2] = \"Int8\";\n Type[Type[\"Int16\"] = -3] = \"Int16\";\n Type[Type[\"Int32\"] = -4] = \"Int32\";\n Type[Type[\"Int64\"] = -5] = \"Int64\";\n Type[Type[\"Uint8\"] = -6] = \"Uint8\";\n Type[Type[\"Uint16\"] = -7] = \"Uint16\";\n Type[Type[\"Uint32\"] = -8] = \"Uint32\";\n Type[Type[\"Uint64\"] = -9] = \"Uint64\";\n Type[Type[\"Float16\"] = -10] = \"Float16\";\n Type[Type[\"Float32\"] = -11] = \"Float32\";\n Type[Type[\"Float64\"] = -12] = \"Float64\";\n Type[Type[\"DateDay\"] = -13] = \"DateDay\";\n Type[Type[\"DateMillisecond\"] = -14] = \"DateMillisecond\";\n Type[Type[\"TimestampSecond\"] = -15] = \"TimestampSecond\";\n Type[Type[\"TimestampMillisecond\"] = -16] = \"TimestampMillisecond\";\n Type[Type[\"TimestampMicrosecond\"] = -17] = \"TimestampMicrosecond\";\n Type[Type[\"TimestampNanosecond\"] = -18] = \"TimestampNanosecond\";\n Type[Type[\"TimeSecond\"] = -19] = \"TimeSecond\";\n Type[Type[\"TimeMillisecond\"] = -20] = \"TimeMillisecond\";\n Type[Type[\"TimeMicrosecond\"] = -21] = \"TimeMicrosecond\";\n Type[Type[\"TimeNanosecond\"] = -22] = \"TimeNanosecond\";\n Type[Type[\"DenseUnion\"] = -23] = \"DenseUnion\";\n Type[Type[\"SparseUnion\"] = -24] = \"SparseUnion\";\n Type[Type[\"IntervalDayTime\"] = -25] = \"IntervalDayTime\";\n Type[Type[\"IntervalYearMonth\"] = -26] = \"IntervalYearMonth\";\n})(Type || (Type = {}));\n//# sourceMappingURL=enum.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nlet _Symbol$toStringTag, _Symbol$toStringTag2, _Symbol$toStringTag3, _Symbol$toStringTag4, _Symbol$toStringTag5, _Symbol$toStringTag6, _Symbol$toStringTag7, _Symbol$toStringTag8;\n\nimport { Type } from './enum';\nexport { Type } from './enum';\nexport class DataType {\n static isNull(x) {\n return x && x.typeId === Type.Null;\n }\n\n static isInt(x) {\n return x && x.typeId === Type.Int;\n }\n\n static isFloat(x) {\n return x && x.typeId === Type.Float;\n }\n\n static isBinary(x) {\n return x && x.typeId === Type.Binary;\n }\n\n static isUtf8(x) {\n return x && x.typeId === Type.Utf8;\n }\n\n static isBool(x) {\n return x && x.typeId === Type.Bool;\n }\n\n static isDecimal(x) {\n return x && x.typeId === Type.Decimal;\n }\n\n static isDate(x) {\n return x && x.typeId === Type.Date;\n }\n\n static isTime(x) {\n return x && x.typeId === Type.Time;\n }\n\n static isTimestamp(x) {\n return x && x.typeId === Type.Timestamp;\n }\n\n static isInterval(x) {\n return x && x.typeId === Type.Interval;\n }\n\n static isList(x) {\n return x && x.typeId === Type.List;\n }\n\n static isStruct(x) {\n return x && x.typeId === Type.Struct;\n }\n\n static isUnion(x) {\n return x && x.typeId === Type.Union;\n }\n\n static isFixedSizeBinary(x) {\n return x && x.typeId === Type.FixedSizeBinary;\n }\n\n static isFixedSizeList(x) {\n return x && x.typeId === Type.FixedSizeList;\n }\n\n static isMap(x) {\n return x && x.typeId === Type.Map;\n }\n\n static isDictionary(x) {\n return x && x.typeId === Type.Dictionary;\n }\n\n get typeId() {\n return Type.NONE;\n }\n\n compareTo(other) {\n return this === other;\n }\n\n}\nexport class Null extends DataType {\n get typeId() {\n return Type.Null;\n }\n\n get [Symbol.toStringTag]() {\n return 'Null';\n }\n\n toString() {\n return 'Null';\n }\n\n}\nexport class Bool extends DataType {\n get typeId() {\n return Type.Bool;\n }\n\n get [Symbol.toStringTag]() {\n return 'Bool';\n }\n\n toString() {\n return 'Bool';\n }\n\n}\n_Symbol$toStringTag = Symbol.toStringTag;\nexport class Int extends DataType {\n constructor(isSigned, bitWidth) {\n super();\n\n _defineProperty(this, \"isSigned\", void 0);\n\n _defineProperty(this, \"bitWidth\", void 0);\n\n this.isSigned = isSigned;\n this.bitWidth = bitWidth;\n }\n\n get typeId() {\n return Type.Int;\n }\n\n get [_Symbol$toStringTag]() {\n return 'Int';\n }\n\n toString() {\n return \"\".concat(this.isSigned ? 'I' : 'Ui', \"nt\").concat(this.bitWidth);\n }\n\n}\nexport class Int8 extends Int {\n constructor() {\n super(true, 8);\n }\n\n}\nexport class Int16 extends Int {\n constructor() {\n super(true, 16);\n }\n\n}\nexport class Int32 extends Int {\n constructor() {\n super(true, 32);\n }\n\n}\nexport class Int64 extends Int {\n constructor() {\n super(true, 64);\n }\n\n}\nexport class Uint8 extends Int {\n constructor() {\n super(false, 8);\n }\n\n}\nexport class Uint16 extends Int {\n constructor() {\n super(false, 16);\n }\n\n}\nexport class Uint32 extends Int {\n constructor() {\n super(false, 32);\n }\n\n}\nexport class Uint64 extends Int {\n constructor() {\n super(false, 64);\n }\n\n}\nconst Precision = {\n HALF: 16,\n SINGLE: 32,\n DOUBLE: 64\n};\n_Symbol$toStringTag2 = Symbol.toStringTag;\nexport class Float extends DataType {\n constructor(precision) {\n super();\n\n _defineProperty(this, \"precision\", void 0);\n\n this.precision = precision;\n }\n\n get typeId() {\n return Type.Float;\n }\n\n get [_Symbol$toStringTag2]() {\n return 'Float';\n }\n\n toString() {\n return \"Float\".concat(this.precision);\n }\n\n}\nexport class Float16 extends Float {\n constructor() {\n super(Precision.HALF);\n }\n\n}\nexport class Float32 extends Float {\n constructor() {\n super(Precision.SINGLE);\n }\n\n}\nexport class Float64 extends Float {\n constructor() {\n super(Precision.DOUBLE);\n }\n\n}\nexport class Binary extends DataType {\n constructor() {\n super();\n }\n\n get typeId() {\n return Type.Binary;\n }\n\n toString() {\n return 'Binary';\n }\n\n get [Symbol.toStringTag]() {\n return 'Binary';\n }\n\n}\nexport class Utf8 extends DataType {\n get typeId() {\n return Type.Utf8;\n }\n\n get [Symbol.toStringTag]() {\n return 'Utf8';\n }\n\n toString() {\n return 'Utf8';\n }\n\n}\nconst DateUnit = {\n DAY: 0,\n MILLISECOND: 1\n};\n_Symbol$toStringTag3 = Symbol.toStringTag;\nexport class Date extends DataType {\n constructor(unit) {\n super();\n\n _defineProperty(this, \"unit\", void 0);\n\n this.unit = unit;\n }\n\n get typeId() {\n return Type.Date;\n }\n\n get [_Symbol$toStringTag3]() {\n return 'Date';\n }\n\n toString() {\n return \"Date\".concat((this.unit + 1) * 32, \"<\").concat(DateUnit[this.unit], \">\");\n }\n\n}\nexport class DateDay extends Date {\n constructor() {\n super(DateUnit.DAY);\n }\n\n}\nexport class DateMillisecond extends Date {\n constructor() {\n super(DateUnit.MILLISECOND);\n }\n\n}\nconst TimeUnit = {\n SECOND: 1,\n MILLISECOND: 1e3,\n MICROSECOND: 1e6,\n NANOSECOND: 1e9\n};\n_Symbol$toStringTag4 = Symbol.toStringTag;\nexport class Time extends DataType {\n constructor(unit, bitWidth) {\n super();\n\n _defineProperty(this, \"unit\", void 0);\n\n _defineProperty(this, \"bitWidth\", void 0);\n\n this.unit = unit;\n this.bitWidth = bitWidth;\n }\n\n get typeId() {\n return Type.Time;\n }\n\n toString() {\n return \"Time\".concat(this.bitWidth, \"<\").concat(TimeUnit[this.unit], \">\");\n }\n\n get [_Symbol$toStringTag4]() {\n return 'Time';\n }\n\n}\nexport class TimeSecond extends Time {\n constructor() {\n super(TimeUnit.SECOND, 32);\n }\n\n}\nexport class TimeMillisecond extends Time {\n constructor() {\n super(TimeUnit.MILLISECOND, 32);\n }\n\n}\n_Symbol$toStringTag5 = Symbol.toStringTag;\nexport class Timestamp extends DataType {\n constructor(unit, timezone = null) {\n super();\n\n _defineProperty(this, \"unit\", void 0);\n\n _defineProperty(this, \"timezone\", void 0);\n\n this.unit = unit;\n this.timezone = timezone;\n }\n\n get typeId() {\n return Type.Timestamp;\n }\n\n get [_Symbol$toStringTag5]() {\n return 'Timestamp';\n }\n\n toString() {\n return \"Timestamp<\".concat(TimeUnit[this.unit]).concat(this.timezone ? \", \".concat(this.timezone) : '', \">\");\n }\n\n}\nexport class TimestampSecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.SECOND, timezone);\n }\n\n}\nexport class TimestampMillisecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.MILLISECOND, timezone);\n }\n\n}\nexport class TimestampMicrosecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.MICROSECOND, timezone);\n }\n\n}\nexport class TimestampNanosecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.NANOSECOND, timezone);\n }\n\n}\nconst IntervalUnit = {\n DAY_TIME: 0,\n YEAR_MONTH: 1\n};\n_Symbol$toStringTag6 = Symbol.toStringTag;\nexport class Interval extends DataType {\n constructor(unit) {\n super();\n\n _defineProperty(this, \"unit\", void 0);\n\n this.unit = unit;\n }\n\n get typeId() {\n return Type.Interval;\n }\n\n get [_Symbol$toStringTag6]() {\n return 'Interval';\n }\n\n toString() {\n return \"Interval<\".concat(IntervalUnit[this.unit], \">\");\n }\n\n}\nexport class IntervalDayTime extends Interval {\n constructor() {\n super(IntervalUnit.DAY_TIME);\n }\n\n}\nexport class IntervalYearMonth extends Interval {\n constructor() {\n super(IntervalUnit.YEAR_MONTH);\n }\n\n}\n_Symbol$toStringTag7 = Symbol.toStringTag;\nexport class FixedSizeList extends DataType {\n constructor(listSize, child) {\n super();\n\n _defineProperty(this, \"listSize\", void 0);\n\n _defineProperty(this, \"children\", void 0);\n\n this.listSize = listSize;\n this.children = [child];\n }\n\n get typeId() {\n return Type.FixedSizeList;\n }\n\n get valueType() {\n return this.children[0].type;\n }\n\n get valueField() {\n return this.children[0];\n }\n\n get [_Symbol$toStringTag7]() {\n return 'FixedSizeList';\n }\n\n toString() {\n return \"FixedSizeList[\".concat(this.listSize, \"]<\").concat(this.valueType, \">\");\n }\n\n}\n_Symbol$toStringTag8 = Symbol.toStringTag;\nexport class Struct extends DataType {\n constructor(children) {\n super();\n\n _defineProperty(this, \"children\", void 0);\n\n this.children = children;\n }\n\n get typeId() {\n return Type.Struct;\n }\n\n toString() {\n return \"Struct<{\".concat(this.children.map(f => \"\".concat(f.name, \":\").concat(f.type)).join(', '), \"}>\");\n }\n\n get [_Symbol$toStringTag8]() {\n return 'Struct';\n }\n\n}\n//# sourceMappingURL=type.js.map","import { Schema, Field, FixedSizeList } from '../../lib/schema/schema';\nimport { getArrowTypeFromTypedArray } from '../../lib/arrow/arrow-like-type-utils';\nexport function deduceMeshSchema(attributes, metadata) {\n const fields = deduceMeshFields(attributes);\n return new Schema(fields, metadata);\n}\nexport function deduceMeshField(attributeName, attribute, optionalMetadata) {\n const type = getArrowTypeFromTypedArray(attribute.value);\n const metadata = optionalMetadata ? optionalMetadata : makeMeshAttributeMetadata(attribute);\n const field = new Field(attributeName, new FixedSizeList(attribute.size, new Field('value', type)), false, metadata);\n return field;\n}\n\nfunction deduceMeshFields(attributes) {\n const fields = [];\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n fields.push(deduceMeshField(attributeName, attribute));\n }\n\n return fields;\n}\n\nexport function makeMeshAttributeMetadata(attribute) {\n const result = new Map();\n\n if ('byteOffset' in attribute) {\n result.set('byteOffset', attribute.byteOffset.toString(10));\n }\n\n if ('byteStride' in attribute) {\n result.set('byteStride', attribute.byteStride.toString(10));\n }\n\n if ('normalized' in attribute) {\n result.set('normalized', attribute.normalized.toString());\n }\n\n return result;\n}\n//# sourceMappingURL=deduce-mesh-schema.js.map","import { Float32, Float64, Int16, Int32, Int8, Uint16, Uint32, Uint8 } from '../schema/schema';\nexport function getArrowTypeFromTypedArray(array) {\n switch (array.constructor) {\n case Int8Array:\n return new Int8();\n\n case Uint8Array:\n return new Uint8();\n\n case Int16Array:\n return new Int16();\n\n case Uint16Array:\n return new Uint16();\n\n case Int32Array:\n return new Int32();\n\n case Uint32Array:\n return new Uint32();\n\n case Float32Array:\n return new Float32();\n\n case Float64Array:\n return new Float64();\n\n default:\n throw new Error('array type not supported');\n }\n}\n//# sourceMappingURL=arrow-like-type-utils.js.map","import { deduceMeshField } from '@loaders.gl/schema';\nimport { Schema } from '@loaders.gl/schema';\nexport function getDracoSchema(attributes, loaderData, indices) {\n const metadataMap = makeMetadata(loaderData.metadata);\n const fields = [];\n const namedLoaderDataAttributes = transformAttributesLoaderData(loaderData.attributes);\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const field = getArrowFieldFromAttribute(attributeName, attribute, namedLoaderDataAttributes[attributeName]);\n fields.push(field);\n }\n\n if (indices) {\n const indicesField = getArrowFieldFromAttribute('indices', indices);\n fields.push(indicesField);\n }\n\n return new Schema(fields, metadataMap);\n}\n\nfunction transformAttributesLoaderData(loaderData) {\n const result = {};\n\n for (const key in loaderData) {\n const dracoAttribute = loaderData[key];\n result[dracoAttribute.name || 'undefined'] = dracoAttribute;\n }\n\n return result;\n}\n\nfunction getArrowFieldFromAttribute(attributeName, attribute, loaderData) {\n const metadataMap = loaderData ? makeMetadata(loaderData.metadata) : undefined;\n const field = deduceMeshField(attributeName, attribute, metadataMap);\n return field;\n}\n\nfunction makeMetadata(metadata) {\n const metadataMap = new Map();\n\n for (const key in metadata) {\n metadataMap.set(\"\".concat(key, \".string\"), JSON.stringify(metadata[key]));\n }\n\n return metadataMap;\n}\n//# sourceMappingURL=get-draco-schema.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { getMeshBoundingBox } from '@loaders.gl/schema';\nimport { getDracoSchema } from './utils/get-draco-schema';\nconst GEOMETRY_TYPE = {\n TRIANGULAR_MESH: 0,\n POINT_CLOUD: 1\n};\nconst DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP = {\n POSITION: 'POSITION',\n NORMAL: 'NORMAL',\n COLOR: 'COLOR_0',\n TEX_COORD: 'TEXCOORD_0'\n};\nconst DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP = {\n 1: Int8Array,\n 2: Uint8Array,\n 3: Int16Array,\n 4: Uint16Array,\n 5: Int32Array,\n 6: Uint32Array,\n 9: Float32Array\n};\nconst INDEX_ITEM_SIZE = 4;\nexport default class DracoParser {\n constructor(draco) {\n _defineProperty(this, \"draco\", void 0);\n\n _defineProperty(this, \"decoder\", void 0);\n\n _defineProperty(this, \"metadataQuerier\", void 0);\n\n this.draco = draco;\n this.decoder = new this.draco.Decoder();\n this.metadataQuerier = new this.draco.MetadataQuerier();\n }\n\n destroy() {\n this.draco.destroy(this.decoder);\n this.draco.destroy(this.metadataQuerier);\n }\n\n parseSync(arrayBuffer, options = {}) {\n const buffer = new this.draco.DecoderBuffer();\n buffer.Init(new Int8Array(arrayBuffer), arrayBuffer.byteLength);\n\n this._disableAttributeTransforms(options);\n\n const geometry_type = this.decoder.GetEncodedGeometryType(buffer);\n const dracoGeometry = geometry_type === this.draco.TRIANGULAR_MESH ? new this.draco.Mesh() : new this.draco.PointCloud();\n\n try {\n let dracoStatus;\n\n switch (geometry_type) {\n case this.draco.TRIANGULAR_MESH:\n dracoStatus = this.decoder.DecodeBufferToMesh(buffer, dracoGeometry);\n break;\n\n case this.draco.POINT_CLOUD:\n dracoStatus = this.decoder.DecodeBufferToPointCloud(buffer, dracoGeometry);\n break;\n\n default:\n throw new Error('DRACO: Unknown geometry type.');\n }\n\n if (!dracoStatus.ok() || !dracoGeometry.ptr) {\n const message = \"DRACO decompression failed: \".concat(dracoStatus.error_msg());\n throw new Error(message);\n }\n\n const loaderData = this._getDracoLoaderData(dracoGeometry, geometry_type, options);\n\n const geometry = this._getMeshData(dracoGeometry, loaderData, options);\n\n const boundingBox = getMeshBoundingBox(geometry.attributes);\n const schema = getDracoSchema(geometry.attributes, loaderData, geometry.indices);\n const data = {\n loader: 'draco',\n loaderData,\n header: {\n vertexCount: dracoGeometry.num_points(),\n boundingBox\n },\n ...geometry,\n schema\n };\n return data;\n } finally {\n this.draco.destroy(buffer);\n\n if (dracoGeometry) {\n this.draco.destroy(dracoGeometry);\n }\n }\n }\n\n _getDracoLoaderData(dracoGeometry, geometry_type, options) {\n const metadata = this._getTopLevelMetadata(dracoGeometry);\n\n const attributes = this._getDracoAttributes(dracoGeometry, options);\n\n return {\n geometry_type,\n num_attributes: dracoGeometry.num_attributes(),\n num_points: dracoGeometry.num_points(),\n num_faces: dracoGeometry instanceof this.draco.Mesh ? dracoGeometry.num_faces() : 0,\n metadata,\n attributes\n };\n }\n\n _getDracoAttributes(dracoGeometry, options) {\n const dracoAttributes = {};\n\n for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {\n const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attributeId);\n\n const metadata = this._getAttributeMetadata(dracoGeometry, attributeId);\n\n dracoAttributes[dracoAttribute.unique_id()] = {\n unique_id: dracoAttribute.unique_id(),\n attribute_type: dracoAttribute.attribute_type(),\n data_type: dracoAttribute.data_type(),\n num_components: dracoAttribute.num_components(),\n byte_offset: dracoAttribute.byte_offset(),\n byte_stride: dracoAttribute.byte_stride(),\n normalized: dracoAttribute.normalized(),\n attribute_index: attributeId,\n metadata\n };\n\n const quantization = this._getQuantizationTransform(dracoAttribute, options);\n\n if (quantization) {\n dracoAttributes[dracoAttribute.unique_id()].quantization_transform = quantization;\n }\n\n const octahedron = this._getOctahedronTransform(dracoAttribute, options);\n\n if (octahedron) {\n dracoAttributes[dracoAttribute.unique_id()].octahedron_transform = octahedron;\n }\n }\n\n return dracoAttributes;\n }\n\n _getMeshData(dracoGeometry, loaderData, options) {\n const attributes = this._getMeshAttributes(loaderData, dracoGeometry, options);\n\n const positionAttribute = attributes.POSITION;\n\n if (!positionAttribute) {\n throw new Error('DRACO: No position attribute found.');\n }\n\n if (dracoGeometry instanceof this.draco.Mesh) {\n switch (options.topology) {\n case 'triangle-strip':\n return {\n topology: 'triangle-strip',\n mode: 4,\n attributes,\n indices: {\n value: this._getTriangleStripIndices(dracoGeometry),\n size: 1\n }\n };\n\n case 'triangle-list':\n default:\n return {\n topology: 'triangle-list',\n mode: 5,\n attributes,\n indices: {\n value: this._getTriangleListIndices(dracoGeometry),\n size: 1\n }\n };\n }\n }\n\n return {\n topology: 'point-list',\n mode: 0,\n attributes\n };\n }\n\n _getMeshAttributes(loaderData, dracoGeometry, options) {\n const attributes = {};\n\n for (const loaderAttribute of Object.values(loaderData.attributes)) {\n const attributeName = this._deduceAttributeName(loaderAttribute, options);\n\n loaderAttribute.name = attributeName;\n\n const {\n value,\n size\n } = this._getAttributeValues(dracoGeometry, loaderAttribute);\n\n attributes[attributeName] = {\n value,\n size,\n byteOffset: loaderAttribute.byte_offset,\n byteStride: loaderAttribute.byte_stride,\n normalized: loaderAttribute.normalized\n };\n }\n\n return attributes;\n }\n\n _getTriangleListIndices(dracoGeometry) {\n const numFaces = dracoGeometry.num_faces();\n const numIndices = numFaces * 3;\n const byteLength = numIndices * INDEX_ITEM_SIZE;\n\n const ptr = this.draco._malloc(byteLength);\n\n try {\n this.decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);\n return new Uint32Array(this.draco.HEAPF32.buffer, ptr, numIndices).slice();\n } finally {\n this.draco._free(ptr);\n }\n }\n\n _getTriangleStripIndices(dracoGeometry) {\n const dracoArray = new this.draco.DracoInt32Array();\n\n try {\n this.decoder.GetTriangleStripsFromMesh(dracoGeometry, dracoArray);\n return getUint32Array(dracoArray);\n } finally {\n this.draco.destroy(dracoArray);\n }\n }\n\n _getAttributeValues(dracoGeometry, attribute) {\n const TypedArrayCtor = DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP[attribute.data_type];\n const numComponents = attribute.num_components;\n const numPoints = dracoGeometry.num_points();\n const numValues = numPoints * numComponents;\n const byteLength = numValues * TypedArrayCtor.BYTES_PER_ELEMENT;\n const dataType = getDracoDataType(this.draco, TypedArrayCtor);\n let value;\n\n const ptr = this.draco._malloc(byteLength);\n\n try {\n const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attribute.attribute_index);\n this.decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, dracoAttribute, dataType, byteLength, ptr);\n value = new TypedArrayCtor(this.draco.HEAPF32.buffer, ptr, numValues).slice();\n } finally {\n this.draco._free(ptr);\n }\n\n return {\n value,\n size: numComponents\n };\n }\n\n _deduceAttributeName(attribute, options) {\n const uniqueId = attribute.unique_id;\n\n for (const [attributeName, attributeUniqueId] of Object.entries(options.extraAttributes || {})) {\n if (attributeUniqueId === uniqueId) {\n return attributeName;\n }\n }\n\n const thisAttributeType = attribute.attribute_type;\n\n for (const dracoAttributeConstant in DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP) {\n const attributeType = this.draco[dracoAttributeConstant];\n\n if (attributeType === thisAttributeType) {\n return DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP[dracoAttributeConstant];\n }\n }\n\n const entryName = options.attributeNameEntry || 'name';\n\n if (attribute.metadata[entryName]) {\n return attribute.metadata[entryName].string;\n }\n\n return \"CUSTOM_ATTRIBUTE_\".concat(uniqueId);\n }\n\n _getTopLevelMetadata(dracoGeometry) {\n const dracoMetadata = this.decoder.GetMetadata(dracoGeometry);\n return this._getDracoMetadata(dracoMetadata);\n }\n\n _getAttributeMetadata(dracoGeometry, attributeId) {\n const dracoMetadata = this.decoder.GetAttributeMetadata(dracoGeometry, attributeId);\n return this._getDracoMetadata(dracoMetadata);\n }\n\n _getDracoMetadata(dracoMetadata) {\n if (!dracoMetadata || !dracoMetadata.ptr) {\n return {};\n }\n\n const result = {};\n const numEntries = this.metadataQuerier.NumEntries(dracoMetadata);\n\n for (let entryIndex = 0; entryIndex < numEntries; entryIndex++) {\n const entryName = this.metadataQuerier.GetEntryName(dracoMetadata, entryIndex);\n result[entryName] = this._getDracoMetadataField(dracoMetadata, entryName);\n }\n\n return result;\n }\n\n _getDracoMetadataField(dracoMetadata, entryName) {\n const dracoArray = new this.draco.DracoInt32Array();\n\n try {\n this.metadataQuerier.GetIntEntryArray(dracoMetadata, entryName, dracoArray);\n const intArray = getInt32Array(dracoArray);\n return {\n int: this.metadataQuerier.GetIntEntry(dracoMetadata, entryName),\n string: this.metadataQuerier.GetStringEntry(dracoMetadata, entryName),\n double: this.metadataQuerier.GetDoubleEntry(dracoMetadata, entryName),\n intArray\n };\n } finally {\n this.draco.destroy(dracoArray);\n }\n }\n\n _disableAttributeTransforms(options) {\n const {\n quantizedAttributes = [],\n octahedronAttributes = []\n } = options;\n const skipAttributes = [...quantizedAttributes, ...octahedronAttributes];\n\n for (const dracoAttributeName of skipAttributes) {\n this.decoder.SkipAttributeTransform(this.draco[dracoAttributeName]);\n }\n }\n\n _getQuantizationTransform(dracoAttribute, options) {\n const {\n quantizedAttributes = []\n } = options;\n const attribute_type = dracoAttribute.attribute_type();\n const skip = quantizedAttributes.map(type => this.decoder[type]).includes(attribute_type);\n\n if (skip) {\n const transform = new this.draco.AttributeQuantizationTransform();\n\n try {\n if (transform.InitFromAttribute(dracoAttribute)) {\n return {\n quantization_bits: transform.quantization_bits(),\n range: transform.range(),\n min_values: new Float32Array([1, 2, 3]).map(i => transform.min_value(i))\n };\n }\n } finally {\n this.draco.destroy(transform);\n }\n }\n\n return null;\n }\n\n _getOctahedronTransform(dracoAttribute, options) {\n const {\n octahedronAttributes = []\n } = options;\n const attribute_type = dracoAttribute.attribute_type();\n const octahedron = octahedronAttributes.map(type => this.decoder[type]).includes(attribute_type);\n\n if (octahedron) {\n const transform = new this.draco.AttributeQuantizationTransform();\n\n try {\n if (transform.InitFromAttribute(dracoAttribute)) {\n return {\n quantization_bits: transform.quantization_bits()\n };\n }\n } finally {\n this.draco.destroy(transform);\n }\n }\n\n return null;\n }\n\n}\n\nfunction getDracoDataType(draco, attributeType) {\n switch (attributeType) {\n case Float32Array:\n return draco.DT_FLOAT32;\n\n case Int8Array:\n return draco.DT_INT8;\n\n case Int16Array:\n return draco.DT_INT16;\n\n case Int32Array:\n return draco.DT_INT32;\n\n case Uint8Array:\n return draco.DT_UINT8;\n\n case Uint16Array:\n return draco.DT_UINT16;\n\n case Uint32Array:\n return draco.DT_UINT32;\n\n default:\n return draco.DT_INVALID;\n }\n}\n\nfunction getInt32Array(dracoArray) {\n const numValues = dracoArray.size();\n const intArray = new Int32Array(numValues);\n\n for (let i = 0; i < numValues; i++) {\n intArray[i] = dracoArray.GetValue(i);\n }\n\n return intArray;\n}\n\nfunction getUint32Array(dracoArray) {\n const numValues = dracoArray.size();\n const intArray = new Int32Array(numValues);\n\n for (let i = 0; i < numValues; i++) {\n intArray[i] = dracoArray.GetValue(i);\n }\n\n return intArray;\n}\n//# sourceMappingURL=draco-parser.js.map","export function getMeshSize(attributes) {\n let size = 0;\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n\n if (ArrayBuffer.isView(attribute)) {\n size += attribute.byteLength * attribute.BYTES_PER_ELEMENT;\n }\n }\n\n return size;\n}\nexport function getMeshBoundingBox(attributes) {\n let minX = Infinity;\n let minY = Infinity;\n let minZ = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let maxZ = -Infinity;\n const positions = attributes.POSITION ? attributes.POSITION.value : [];\n const len = positions && positions.length;\n\n for (let i = 0; i < len; i += 3) {\n const x = positions[i];\n const y = positions[i + 1];\n const z = positions[i + 2];\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n minZ = z < minZ ? z : minZ;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n maxZ = z > maxZ ? z : maxZ;\n }\n\n return [[minX, minY, minZ], [maxX, maxY, maxZ]];\n}\n//# sourceMappingURL=mesh-utils.js.map","import { loadLibrary } from '@loaders.gl/worker-utils';\nconst DRACO_VERSION = '1.4.1';\nconst DRACO_JS_DECODER_URL = \"https://www.gstatic.com/draco/versioned/decoders/\".concat(DRACO_VERSION, \"/draco_decoder.js\");\nconst DRACO_WASM_WRAPPER_URL = \"https://www.gstatic.com/draco/versioned/decoders/\".concat(DRACO_VERSION, \"/draco_wasm_wrapper.js\");\nconst DRACO_WASM_DECODER_URL = \"https://www.gstatic.com/draco/versioned/decoders/\".concat(DRACO_VERSION, \"/draco_decoder.wasm\");\nconst DRACO_ENCODER_URL = \"https://raw.githubusercontent.com/google/draco/\".concat(DRACO_VERSION, \"/javascript/draco_encoder.js\");\nlet loadDecoderPromise;\nlet loadEncoderPromise;\nexport async function loadDracoDecoderModule(options) {\n const modules = options.modules || {};\n\n if (modules.draco3d) {\n loadDecoderPromise = loadDecoderPromise || modules.draco3d.createDecoderModule({}).then(draco => {\n return {\n draco\n };\n });\n } else {\n loadDecoderPromise = loadDecoderPromise || loadDracoDecoder(options);\n }\n\n return await loadDecoderPromise;\n}\nexport async function loadDracoEncoderModule(options) {\n const modules = options.modules || {};\n\n if (modules.draco3d) {\n loadEncoderPromise = loadEncoderPromise || modules.draco3d.createEncoderModule({}).then(draco => {\n return {\n draco\n };\n });\n } else {\n loadEncoderPromise = loadEncoderPromise || loadDracoEncoder(options);\n }\n\n return await loadEncoderPromise;\n}\n\nasync function loadDracoDecoder(options) {\n let DracoDecoderModule;\n let wasmBinary;\n\n switch (options.draco && options.draco.decoderType) {\n case 'js':\n DracoDecoderModule = await loadLibrary(DRACO_JS_DECODER_URL, 'draco', options);\n break;\n\n case 'wasm':\n default:\n [DracoDecoderModule, wasmBinary] = await Promise.all([await loadLibrary(DRACO_WASM_WRAPPER_URL, 'draco', options), await loadLibrary(DRACO_WASM_DECODER_URL, 'draco', options)]);\n }\n\n DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;\n return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);\n}\n\nfunction initializeDracoDecoder(DracoDecoderModule, wasmBinary) {\n const options = {};\n\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise(resolve => {\n DracoDecoderModule({ ...options,\n onModuleLoaded: draco => resolve({\n draco\n })\n });\n });\n}\n\nasync function loadDracoEncoder(options) {\n let DracoEncoderModule = await loadLibrary(DRACO_ENCODER_URL, 'draco', options);\n DracoEncoderModule = DracoEncoderModule || globalThis.DracoEncoderModule;\n return new Promise(resolve => {\n DracoEncoderModule({\n onModuleLoaded: draco => resolve({\n draco\n })\n });\n });\n}\n//# sourceMappingURL=draco-module-loader.js.map","import { DracoLoader as DracoWorkerLoader } from './draco-loader';\nimport DracoParser from './lib/draco-parser';\nimport { loadDracoDecoderModule } from './lib/draco-module-loader';\nimport { VERSION } from './lib/utils/version';\nimport { isBrowser } from '@loaders.gl/worker-utils';\nexport { DracoWriter } from './draco-writer';\nexport const DracoWriterWorker = {\n id: isBrowser ? 'draco-writer' : 'draco-writer-nodejs',\n name: 'Draco compressed geometry writer',\n module: 'draco',\n version: VERSION,\n worker: true,\n options: {\n draco: {},\n source: null\n }\n};\nexport { DracoWorkerLoader };\nexport const DracoLoader = { ...DracoWorkerLoader,\n parse\n};\n\nasync function parse(arrayBuffer, options) {\n const {\n draco\n } = await loadDracoDecoderModule(options);\n const dracoParser = new DracoParser(draco);\n\n try {\n return dracoParser.parseSync(arrayBuffer, options === null || options === void 0 ? void 0 : options.draco);\n } finally {\n dracoParser.destroy();\n }\n}\n\nexport const _TypecheckDracoLoader = DracoLoader;\n//# sourceMappingURL=index.js.map","let arrayBuffer = null;\nexport function getScratchArrayBuffer(byteLength) {\n if (!arrayBuffer || arrayBuffer.byteLength < byteLength) {\n arrayBuffer = new ArrayBuffer(byteLength);\n }\n\n return arrayBuffer;\n}\nexport function getScratchArray(Type, length) {\n const scratchArrayBuffer = getScratchArrayBuffer(Type.BYTES_PER_ELEMENT * length);\n return new Type(scratchArrayBuffer, 0, length);\n}\nexport function fillArray(_ref) {\n let {\n target,\n source,\n start = 0,\n count = 1\n } = _ref;\n const length = source.length;\n const total = count * length;\n let copied = 0;\n\n for (let i = start; copied < length; copied++) {\n target[i++] = source[copied];\n }\n\n while (copied < total) {\n if (copied < total - copied) {\n target.copyWithin(start + copied, start, start + copied);\n copied *= 2;\n } else {\n target.copyWithin(start + copied, start, start + total - copied);\n copied = total;\n }\n }\n\n return target;\n}\n//# sourceMappingURL=array-utils-flat.js.map","import Resource from './resource';\nimport Buffer from './buffer';\nimport { isWebGL2 } from '@luma.gl/gltools';\nimport { getScratchArray, fillArray } from '../utils/array-utils-flat';\nimport { assert } from '../utils/assert';\nimport { getBrowser } from '@probe.gl/env';\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\nexport default class VertexArrayObject extends Resource {\n get [Symbol.toStringTag]() {\n return 'VertexArrayObject';\n }\n\n static isSupported(gl) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (options.constantAttributeZero) {\n return isWebGL2(gl) || getBrowser() === 'Chrome';\n }\n\n return true;\n }\n\n static getDefaultArray(gl) {\n gl.luma = gl.luma || {};\n\n if (!gl.luma.defaultVertexArray) {\n gl.luma.defaultVertexArray = new VertexArrayObject(gl, {\n handle: null,\n isDefaultArray: true\n });\n }\n\n return gl.luma.defaultVertexArray;\n }\n\n static getMaxAttributes(gl) {\n VertexArrayObject.MAX_ATTRIBUTES = VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(34921);\n return VertexArrayObject.MAX_ATTRIBUTES;\n }\n\n static setConstant(gl, location, array) {\n switch (array.constructor) {\n case Float32Array:\n VertexArrayObject._setConstantFloatArray(gl, location, array);\n\n break;\n\n case Int32Array:\n VertexArrayObject._setConstantIntArray(gl, location, array);\n\n break;\n\n case Uint32Array:\n VertexArrayObject._setConstantUintArray(gl, location, array);\n\n break;\n\n default:\n assert(false);\n }\n }\n\n constructor(gl) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const id = opts.id || opts.program && opts.program.id;\n super(gl, Object.assign({}, opts, {\n id\n }));\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = opts.isDefaultArray || false;\n this.gl2 = gl;\n this.initialize(opts);\n Object.seal(this);\n }\n\n delete() {\n super.delete();\n\n if (this.buffer) {\n this.buffer.delete();\n }\n\n return this;\n }\n\n get MAX_ATTRIBUTES() {\n return VertexArrayObject.getMaxAttributes(this.gl);\n }\n\n initialize() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.setProps(props);\n }\n\n setProps(props) {\n return this;\n }\n\n setElementBuffer() {\n let elementBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n assert(!elementBuffer || elementBuffer.target === 34963, ERR_ELEMENTS);\n this.bind(() => {\n this.gl.bindBuffer(34963, elementBuffer ? elementBuffer.handle : null);\n });\n return this;\n }\n\n setBuffer(location, buffer, accessor) {\n if (buffer.target === 34963) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {\n size,\n type,\n stride,\n offset,\n normalized,\n integer,\n divisor\n } = accessor;\n const {\n gl,\n gl2\n } = this;\n location = Number(location);\n this.bind(() => {\n gl.bindBuffer(34962, buffer.handle);\n\n if (integer) {\n assert(isWebGL2(gl));\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n });\n return this;\n }\n\n enable(location) {\n let enable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n const disablingAttributeZero = !enable && location === 0 && !VertexArrayObject.isSupported(this.gl, {\n constantAttributeZero: true\n });\n\n if (!disablingAttributeZero) {\n location = Number(location);\n this.bind(() => enable ? this.gl.enableVertexAttribArray(location) : this.gl.disableVertexAttribArray(location));\n }\n\n return this;\n }\n\n getConstantBuffer(elementCount, value) {\n const constantValue = this._normalizeConstantArrayValue(value);\n\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n let updateNeeded = !this.buffer;\n this.buffer = this.buffer || new Buffer(this.gl, byteLength);\n updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);\n updateNeeded = updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);\n\n if (updateNeeded) {\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({\n target: typedArray,\n source: constantValue,\n start: 0,\n count: length\n });\n this.buffer.subData(typedArray);\n this.bufferValue = value;\n }\n\n return this.buffer;\n }\n\n _normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n\n return arrayValue;\n }\n\n _compareConstantArrayValues(v1, v2) {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n static _setConstantFloatArray(gl, location, array) {\n switch (array.length) {\n case 1:\n gl.vertexAttrib1fv(location, array);\n break;\n\n case 2:\n gl.vertexAttrib2fv(location, array);\n break;\n\n case 3:\n gl.vertexAttrib3fv(location, array);\n break;\n\n case 4:\n gl.vertexAttrib4fv(location, array);\n break;\n\n default:\n assert(false);\n }\n }\n\n static _setConstantIntArray(gl, location, array) {\n assert(isWebGL2(gl));\n\n switch (array.length) {\n case 1:\n gl.vertexAttribI1iv(location, array);\n break;\n\n case 2:\n gl.vertexAttribI2iv(location, array);\n break;\n\n case 3:\n gl.vertexAttribI3iv(location, array);\n break;\n\n case 4:\n gl.vertexAttribI4iv(location, array);\n break;\n\n default:\n assert(false);\n }\n }\n\n static _setConstantUintArray(gl, location, array) {\n assert(isWebGL2(gl));\n\n switch (array.length) {\n case 1:\n gl.vertexAttribI1uiv(location, array);\n break;\n\n case 2:\n gl.vertexAttribI2uiv(location, array);\n break;\n\n case 3:\n gl.vertexAttribI3uiv(location, array);\n break;\n\n case 4:\n gl.vertexAttribI4uiv(location, array);\n break;\n\n default:\n assert(false);\n }\n }\n\n _createHandle() {\n const gl2 = this.gl;\n return gl2.createVertexArray();\n }\n\n _deleteHandle(handle) {\n this.gl2.deleteVertexArray(handle);\n return [this.elements];\n }\n\n _bindHandle(handle) {\n this.gl2.bindVertexArray(handle);\n }\n\n _getParameter(pname, _ref) {\n let {\n location\n } = _ref;\n assert(Number.isFinite(location));\n return this.bind(() => {\n switch (pname) {\n case 34373:\n return this.gl.getVertexAttribOffset(location, pname);\n\n default:\n return this.gl.getVertexAttrib(location, pname);\n }\n });\n }\n\n}\n//# sourceMappingURL=vertex-array-object.js.map","import { log } from '@luma.gl/gltools';\nimport Accessor from './accessor';\nimport Buffer from './buffer';\nimport VertexArrayObject from './vertex-array-object';\nimport { assert } from '../utils/assert';\nimport { stubRemovedMethods } from '../utils/stub-methods';\nconst ERR_ATTRIBUTE_TYPE = 'VertexArray: attributes must be Buffers or constants (i.e. typed array)';\nconst MULTI_LOCATION_ATTRIBUTE_REGEXP = /^(.+)__LOCATION_([0-9]+)$/;\nconst DEPRECATIONS_V6 = ['setBuffers', 'setGeneric', 'clearBindings', 'setLocations', 'setGenericValues', 'setDivisor', 'enable', 'disable'];\nexport default class VertexArray {\n constructor(gl) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const id = opts.id || opts.program && opts.program.id;\n this.id = id;\n this.gl = gl;\n this.configuration = null;\n this.elements = null;\n this.elementsAccessor = null;\n this.values = null;\n this.accessors = null;\n this.unused = null;\n this.drawParams = null;\n this.buffer = null;\n this.attributes = {};\n this.vertexArrayObject = new VertexArrayObject(gl);\n stubRemovedMethods(this, 'VertexArray', 'v6.0', DEPRECATIONS_V6);\n this.initialize(opts);\n Object.seal(this);\n }\n\n delete() {\n if (this.buffer) {\n this.buffer.delete();\n }\n\n this.vertexArrayObject.delete();\n }\n\n initialize() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.reset();\n this.configuration = null;\n this.bindOnUse = false;\n return this.setProps(props);\n }\n\n reset() {\n this.elements = null;\n this.elementsAccessor = null;\n const {\n MAX_ATTRIBUTES\n } = this.vertexArrayObject;\n this.values = new Array(MAX_ATTRIBUTES).fill(null);\n this.accessors = new Array(MAX_ATTRIBUTES).fill(null);\n this.unused = {};\n this.drawParams = null;\n return this;\n }\n\n setProps(props) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n\n if ('attributes' in props) {\n this.setAttributes(props.attributes);\n }\n\n if ('elements' in props) {\n this.setElementBuffer(props.elements);\n }\n\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n\n return this;\n }\n\n clearDrawParams() {\n this.drawParams = null;\n }\n\n getDrawParams() {\n this.drawParams = this.drawParams || this._updateDrawParams();\n return this.drawParams;\n }\n\n setAttributes(attributes) {\n Object.assign(this.attributes, attributes);\n this.vertexArrayObject.bind(() => {\n for (const locationOrName in attributes) {\n const value = attributes[locationOrName];\n\n this._setAttribute(locationOrName, value);\n }\n\n this.gl.bindBuffer(34962, null);\n });\n return this;\n }\n\n setElementBuffer() {\n let elementBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n let accessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.elements = elementBuffer;\n this.elementsAccessor = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setElementBuffer(elementBuffer, accessor);\n return this;\n }\n\n setBuffer(locationOrName, buffer) {\n let appAccessor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (buffer.target === 34963) {\n return this.setElementBuffer(buffer, appAccessor);\n }\n\n const {\n location,\n accessor\n } = this._resolveLocationAndAccessor(locationOrName, buffer, buffer.accessor, appAccessor);\n\n if (location >= 0) {\n this.values[location] = buffer;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setBuffer(location, buffer, accessor);\n }\n\n return this;\n }\n\n setConstant(locationOrName, arrayValue) {\n let appAccessor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n const {\n location,\n accessor\n } = this._resolveLocationAndAccessor(locationOrName, arrayValue, Object.assign({\n size: arrayValue.length\n }, appAccessor));\n\n if (location >= 0) {\n arrayValue = this.vertexArrayObject._normalizeConstantArrayValue(arrayValue);\n this.values[location] = arrayValue;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.enable(location, false);\n }\n\n return this;\n }\n\n unbindBuffers() {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.vertexArrayObject.setElementBuffer(null);\n }\n\n this.buffer = this.buffer || new Buffer(this.gl, {\n accessor: {\n size: 4\n }\n });\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n if (this.values[location] instanceof Buffer) {\n this.gl.disableVertexAttribArray(location);\n this.gl.bindBuffer(34962, this.buffer.handle);\n this.gl.vertexAttribPointer(location, 1, 5126, false, 0, 0);\n }\n }\n });\n return this;\n }\n\n bindBuffers() {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.setElementBuffer(this.elements);\n }\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n const buffer = this.values[location];\n\n if (buffer instanceof Buffer) {\n this.setBuffer(location, buffer);\n }\n }\n });\n return this;\n }\n\n bindForDraw(vertexCount, instanceCount, func) {\n let value;\n this.vertexArrayObject.bind(() => {\n this._setConstantAttributes(vertexCount, instanceCount);\n\n value = func();\n });\n return value;\n }\n\n _resolveLocationAndAccessor(locationOrName, value, valueAccessor, appAccessor) {\n const INVALID_RESULT = {\n location: -1,\n accessor: null\n };\n\n const {\n location,\n name\n } = this._getAttributeIndex(locationOrName);\n\n if (!Number.isFinite(location) || location < 0) {\n this.unused[locationOrName] = value;\n log.once(3, () => \"unused value \".concat(locationOrName, \" in \").concat(this.id))();\n return INVALID_RESULT;\n }\n\n const accessInfo = this._getAttributeInfo(name || location);\n\n if (!accessInfo) {\n return INVALID_RESULT;\n }\n\n const currentAccessor = this.accessors[location] || {};\n const accessor = Accessor.resolve(accessInfo.accessor, currentAccessor, valueAccessor, appAccessor);\n const {\n size,\n type\n } = accessor;\n assert(Number.isFinite(size) && Number.isFinite(type));\n return {\n location,\n accessor\n };\n }\n\n _getAttributeInfo(attributeName) {\n return this.configuration && this.configuration.getAttributeInfo(attributeName);\n }\n\n _getAttributeIndex(locationOrName) {\n const location = Number(locationOrName);\n\n if (Number.isFinite(location)) {\n return {\n location\n };\n }\n\n const multiLocation = MULTI_LOCATION_ATTRIBUTE_REGEXP.exec(locationOrName);\n const name = multiLocation ? multiLocation[1] : locationOrName;\n const locationOffset = multiLocation ? Number(multiLocation[2]) : 0;\n\n if (this.configuration) {\n return {\n location: this.configuration.getAttributeLocation(name) + locationOffset,\n name\n };\n }\n\n return {\n location: -1\n };\n }\n\n _setAttribute(locationOrName, value) {\n if (value instanceof Buffer) {\n this.setBuffer(locationOrName, value);\n } else if (Array.isArray(value) && value.length && value[0] instanceof Buffer) {\n const buffer = value[0];\n const accessor = value[1];\n this.setBuffer(locationOrName, buffer, accessor);\n } else if (ArrayBuffer.isView(value) || Array.isArray(value)) {\n const constant = value;\n this.setConstant(locationOrName, constant);\n } else if (value.buffer instanceof Buffer) {\n const accessor = value;\n this.setBuffer(locationOrName, accessor.buffer, accessor);\n } else {\n throw new Error(ERR_ATTRIBUTE_TYPE);\n }\n }\n\n _setConstantAttributes(vertexCount, instanceCount) {\n const elementCount = Math.max(vertexCount | 0, instanceCount | 0);\n let constant = this.values[0];\n\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttributeZero(constant, elementCount);\n }\n\n for (let location = 1; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n constant = this.values[location];\n\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttribute(location, constant);\n }\n }\n }\n\n _setConstantAttributeZero(constant, elementCount) {\n if (VertexArrayObject.isSupported(this.gl, {\n constantAttributeZero: true\n })) {\n this._setConstantAttribute(0, constant);\n\n return;\n }\n\n const buffer = this.vertexArrayObject.getConstantBuffer(elementCount, constant);\n this.vertexArrayObject.setBuffer(0, buffer, this.accessors[0]);\n }\n\n _setConstantAttribute(location, constant) {\n VertexArrayObject.setConstant(this.gl, location, constant);\n }\n\n _updateDrawParams() {\n const drawParams = {\n isIndexed: false,\n isInstanced: false,\n indexCount: Infinity,\n vertexCount: Infinity,\n instanceCount: Infinity\n };\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n this._updateDrawParamsForLocation(drawParams, location);\n }\n\n if (this.elements) {\n drawParams.elementCount = this.elements.getElementCount(this.elements.accessor);\n drawParams.isIndexed = true;\n drawParams.indexType = this.elementsAccessor.type || this.elements.accessor.type;\n drawParams.indexOffset = this.elementsAccessor.offset || 0;\n }\n\n if (drawParams.indexCount === Infinity) {\n drawParams.indexCount = 0;\n }\n\n if (drawParams.vertexCount === Infinity) {\n drawParams.vertexCount = 0;\n }\n\n if (drawParams.instanceCount === Infinity) {\n drawParams.instanceCount = 0;\n }\n\n return drawParams;\n }\n\n _updateDrawParamsForLocation(drawParams, location) {\n const value = this.values[location];\n const accessor = this.accessors[location];\n\n if (!value) {\n return;\n }\n\n const {\n divisor\n } = accessor;\n const isInstanced = divisor > 0;\n drawParams.isInstanced = drawParams.isInstanced || isInstanced;\n\n if (value instanceof Buffer) {\n const buffer = value;\n\n if (isInstanced) {\n const instanceCount = buffer.getVertexCount(accessor);\n drawParams.instanceCount = Math.min(drawParams.instanceCount, instanceCount);\n } else {\n const vertexCount = buffer.getVertexCount(accessor);\n drawParams.vertexCount = Math.min(drawParams.vertexCount, vertexCount);\n }\n }\n }\n\n setElements() {\n let elementBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n let accessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n log.deprecated('setElements', 'setElementBuffer')();\n return this.setElementBuffer(elementBuffer, accessor);\n }\n\n}\n//# sourceMappingURL=vertex-array.js.map","function formatArrayValue(v, opts) {\n const {\n maxElts = 16,\n size = 1\n } = opts;\n let string = '[';\n\n for (let i = 0; i < v.length && i < maxElts; ++i) {\n if (i > 0) {\n string += \",\".concat(i % size === 0 ? ' ' : '');\n }\n\n string += formatValue(v[i], opts);\n }\n\n const terminator = v.length > maxElts ? '...' : ']';\n return \"\".concat(string).concat(terminator);\n}\n\nexport function formatValue(v) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const EPSILON = 1e-16;\n const {\n isInteger = false\n } = opts;\n\n if (Array.isArray(v) || ArrayBuffer.isView(v)) {\n return formatArrayValue(v, opts);\n }\n\n if (!Number.isFinite(v)) {\n return String(v);\n }\n\n if (Math.abs(v) < EPSILON) {\n return isInteger ? '0' : '0.';\n }\n\n if (isInteger) {\n return v.toFixed(0);\n }\n\n if (Math.abs(v) > 100 && Math.abs(v) < 10000) {\n return v.toFixed(0);\n }\n\n const string = v.toPrecision(2);\n const decimal = string.indexOf('.0');\n return decimal === string.length - 2 ? string.slice(0, -1) : string;\n}\n//# sourceMappingURL=format-value.js.map","import Buffer from '../classes/buffer';\nimport { getKey } from '../webgl-utils/constants-to-keys';\nimport { getCompositeGLType } from '../webgl-utils/attribute-utils';\nimport { formatValue } from '../utils/format-value';\nexport function getDebugTableForVertexArray(_ref) {\n let {\n vertexArray,\n header = 'Attributes'\n } = _ref;\n\n if (!vertexArray.configuration) {\n return {};\n }\n\n const table = {};\n\n if (vertexArray.elements) {\n table.ELEMENT_ARRAY_BUFFER = getDebugTableRow(vertexArray, vertexArray.elements, null, header);\n }\n\n const attributes = vertexArray.values;\n\n for (const attributeLocation in attributes) {\n const info = vertexArray._getAttributeInfo(attributeLocation);\n\n if (info) {\n let rowHeader = \"\".concat(attributeLocation, \": \").concat(info.name);\n const accessor = vertexArray.accessors[info.location];\n\n if (accessor) {\n rowHeader = \"\".concat(attributeLocation, \": \").concat(getGLSLDeclaration(info.name, accessor));\n }\n\n table[rowHeader] = getDebugTableRow(vertexArray, attributes[attributeLocation], accessor, header);\n }\n }\n\n return table;\n}\n\nfunction getDebugTableRow(vertexArray, attribute, accessor, header) {\n const {\n gl\n } = vertexArray;\n\n if (!attribute) {\n return {\n [header]: 'null',\n 'Format ': 'N/A'\n };\n }\n\n let type = 'NOT PROVIDED';\n let size = 1;\n let verts = 0;\n let bytes = 0;\n let isInteger;\n let marker;\n let value;\n\n if (accessor) {\n type = accessor.type;\n size = accessor.size;\n type = String(type).replace('Array', '');\n isInteger = type.indexOf('nt') !== -1;\n }\n\n if (attribute instanceof Buffer) {\n const buffer = attribute;\n const {\n data,\n changed\n } = buffer.getDebugData();\n marker = changed ? '*' : '';\n value = data;\n bytes = buffer.byteLength;\n verts = bytes / data.BYTES_PER_ELEMENT / size;\n let format;\n\n if (accessor) {\n const instanced = accessor.divisor > 0;\n format = \"\".concat(instanced ? 'I ' : 'P ', \" \").concat(verts, \" (x\").concat(size, \"=\").concat(bytes, \" bytes \").concat(getKey(gl, type), \")\");\n } else {\n isInteger = true;\n format = \"\".concat(bytes, \" bytes\");\n }\n\n return {\n [header]: \"\".concat(marker).concat(formatValue(value, {\n size,\n isInteger\n })),\n 'Format ': format\n };\n }\n\n value = attribute;\n size = attribute.length;\n type = String(attribute.constructor.name).replace('Array', '');\n isInteger = type.indexOf('nt') !== -1;\n return {\n [header]: \"\".concat(formatValue(value, {\n size,\n isInteger\n }), \" (constant)\"),\n 'Format ': \"\".concat(size, \"x\").concat(type, \" (constant)\")\n };\n}\n\nfunction getGLSLDeclaration(name, accessor) {\n const {\n type,\n size\n } = accessor;\n const typeAndName = getCompositeGLType(type, size);\n return typeAndName ? \"\".concat(name, \" (\").concat(typeAndName.name, \")\") : name;\n}\n//# sourceMappingURL=debug-vertex-array.js.map","import { assert } from '../utils/assert';\nimport { formatValue } from '../utils/format-value';\nexport function getDebugTableForUniforms(_ref) {\n let {\n header = 'Uniforms',\n program,\n uniforms,\n undefinedOnly = false\n } = _ref;\n assert(program);\n const SHADER_MODULE_UNIFORM_REGEXP = '.*_.*';\n const PROJECT_MODULE_UNIFORM_REGEXP = '.*Matrix';\n const uniformLocations = program._uniformSetters;\n const table = {};\n const uniformNames = Object.keys(uniformLocations).sort();\n let count = 0;\n\n for (const uniformName of uniformNames) {\n if (!uniformName.match(SHADER_MODULE_UNIFORM_REGEXP) && !uniformName.match(PROJECT_MODULE_UNIFORM_REGEXP)) {\n if (addUniformToTable({\n table,\n header,\n uniforms,\n uniformName,\n undefinedOnly\n })) {\n count++;\n }\n }\n }\n\n for (const uniformName of uniformNames) {\n if (uniformName.match(PROJECT_MODULE_UNIFORM_REGEXP)) {\n if (addUniformToTable({\n table,\n header,\n uniforms,\n uniformName,\n undefinedOnly\n })) {\n count++;\n }\n }\n }\n\n for (const uniformName of uniformNames) {\n if (!table[uniformName]) {\n if (addUniformToTable({\n table,\n header,\n uniforms,\n uniformName,\n undefinedOnly\n })) {\n count++;\n }\n }\n }\n\n let unusedCount = 0;\n const unusedTable = {};\n\n if (!undefinedOnly) {\n for (const uniformName in uniforms) {\n const uniform = uniforms[uniformName];\n\n if (!table[uniformName]) {\n unusedCount++;\n unusedTable[uniformName] = {\n Type: \"NOT USED: \".concat(uniform),\n [header]: formatValue(uniform)\n };\n }\n }\n }\n\n return {\n table,\n count,\n unusedTable,\n unusedCount\n };\n}\n\nfunction addUniformToTable(_ref2) {\n let {\n table,\n header,\n uniforms,\n uniformName,\n undefinedOnly\n } = _ref2;\n const value = uniforms[uniformName];\n const isDefined = isUniformDefined(value);\n\n if (!undefinedOnly || !isDefined) {\n table[uniformName] = {\n [header]: isDefined ? formatValue(value) : 'N/A',\n 'Uniform Type': isDefined ? value : 'NOT PROVIDED'\n };\n return true;\n }\n\n return false;\n}\n\nfunction isUniformDefined(value) {\n return value !== undefined && value !== null;\n}\n//# sourceMappingURL=debug-uniforms.js.map","import { getCompositeGLType } from '../webgl-utils/attribute-utils';\nexport function getDebugTableForProgramConfiguration(config) {\n const table = {};\n const header = \"Accessors for \".concat(config.id);\n\n for (const attributeInfo of config.attributeInfos) {\n if (attributeInfo) {\n const glslDeclaration = getGLSLDeclaration(attributeInfo);\n table[\"in \".concat(glslDeclaration)] = {\n [header]: JSON.stringify(attributeInfo.accessor)\n };\n }\n }\n\n for (const varyingInfo of config.varyingInfos) {\n if (varyingInfo) {\n const glslDeclaration = getGLSLDeclaration(varyingInfo);\n table[\"out \".concat(glslDeclaration)] = {\n [header]: JSON.stringify(varyingInfo.accessor)\n };\n }\n }\n\n return table;\n}\n\nfunction getGLSLDeclaration(attributeInfo) {\n const {\n type,\n size\n } = attributeInfo.accessor;\n const typeAndName = getCompositeGLType(type, size);\n\n if (typeAndName) {\n return \"\".concat(typeAndName.name, \" \").concat(attributeInfo.name);\n }\n\n return attributeInfo.name;\n}\n//# sourceMappingURL=debug-program-configuration.js.map","import { Buffer, assert } from '@luma.gl/webgl';\nconst GLTF_TO_LUMA_ATTRIBUTE_MAP = {\n POSITION: 'positions',\n NORMAL: 'normals',\n COLOR_0: 'colors',\n TEXCOORD_0: 'texCoords',\n TEXCOORD_1: 'texCoords1',\n TEXCOORD_2: 'texCoords2'\n};\nexport function getBuffersFromGeometry(gl, geometry, options) {\n const buffers = {};\n let indices = geometry.indices;\n\n for (const name in geometry.attributes) {\n const attribute = geometry.attributes[name];\n const remappedName = mapAttributeName(name, options);\n\n if (name === 'indices') {\n indices = attribute;\n } else if (attribute.constant) {\n buffers[remappedName] = attribute.value;\n } else {\n const typedArray = attribute.value;\n const accessor = { ...attribute\n };\n delete accessor.value;\n buffers[remappedName] = [new Buffer(gl, typedArray), accessor];\n inferAttributeAccessor(name, accessor);\n }\n }\n\n if (indices) {\n const data = indices.value || indices;\n assert(data instanceof Uint16Array || data instanceof Uint32Array, 'attribute array for \"indices\" must be of integer type');\n const accessor = {\n size: 1,\n isIndexed: indices.isIndexed === undefined ? true : indices.isIndexed\n };\n buffers.indices = [new Buffer(gl, {\n data,\n target: 34963\n }), accessor];\n }\n\n return buffers;\n}\n\nfunction mapAttributeName(name, options) {\n const {\n attributeMap = GLTF_TO_LUMA_ATTRIBUTE_MAP\n } = options || {};\n return attributeMap && attributeMap[name] || name;\n}\n\nexport function inferAttributeAccessor(attributeName, attribute) {\n let category;\n\n switch (attributeName) {\n case 'texCoords':\n case 'texCoord1':\n case 'texCoord2':\n case 'texCoord3':\n category = 'uvs';\n break;\n\n case 'vertices':\n case 'positions':\n case 'normals':\n case 'pickingColors':\n category = 'vectors';\n break;\n\n default:\n }\n\n switch (category) {\n case 'vectors':\n attribute.size = attribute.size || 3;\n break;\n\n case 'uvs':\n attribute.size = attribute.size || 2;\n break;\n\n default:\n }\n\n assert(Number.isFinite(attribute.size), \"attribute \".concat(attributeName, \" needs size\"));\n}\n//# sourceMappingURL=model-utils.js.map","import { isWebGL } from '@luma.gl/gltools';\nimport ProgramManager from './program-manager';\nimport { Program, VertexArray, clear, TransformFeedback, Buffer, log, isObjectEmpty, uid, assert } from '@luma.gl/webgl';\nimport { getDebugTableForUniforms, getDebugTableForVertexArray, getDebugTableForProgramConfiguration } from '@luma.gl/webgl';\nimport { getBuffersFromGeometry } from './model-utils';\nconst LOG_DRAW_PRIORITY = 2;\nconst LOG_DRAW_TIMEOUT = 10000;\nconst ERR_MODEL_PARAMS = 'Model needs drawMode and vertexCount';\n\nconst NOOP = () => {};\n\nconst DRAW_PARAMS = {};\nexport default class Model {\n constructor(gl) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n id = uid('model')\n } = props;\n assert(isWebGL(gl));\n this.id = id;\n this.gl = gl;\n this.id = props.id || uid('Model');\n this.lastLogTime = 0;\n this.animated = false;\n this.initialize(props);\n }\n\n initialize(props) {\n this.props = {};\n this.programManager = props.programManager || ProgramManager.getDefaultProgramManager(this.gl);\n this._programManagerState = -1;\n this._managedProgram = false;\n const {\n program = null,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = props;\n this.programProps = {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n };\n this.program = null;\n this.vertexArray = null;\n this._programDirty = true;\n this.userData = {};\n this.needsRedraw = true;\n this._attributes = {};\n this.attributes = {};\n this.uniforms = {};\n this.pickable = true;\n\n this._checkProgram();\n\n this.setUniforms(Object.assign({}, this.getModuleUniforms(props.moduleSettings)));\n this.drawMode = props.drawMode !== undefined ? props.drawMode : 4;\n this.vertexCount = props.vertexCount || 0;\n this.geometryBuffers = {};\n this.isInstanced = props.isInstanced || props.instanced || props.instanceCount > 0;\n\n this._setModelProps(props);\n\n this.geometry = {};\n assert(this.drawMode !== undefined && Number.isFinite(this.vertexCount), ERR_MODEL_PARAMS);\n }\n\n setProps(props) {\n this._setModelProps(props);\n }\n\n delete() {\n for (const key in this._attributes) {\n if (this._attributes[key] !== this.attributes[key]) {\n this._attributes[key].delete();\n }\n }\n\n if (this._managedProgram) {\n this.programManager.release(this.program);\n this._managedProgram = false;\n }\n\n this.vertexArray.delete();\n\n this._deleteGeometryBuffers();\n }\n\n getDrawMode() {\n return this.drawMode;\n }\n\n getVertexCount() {\n return this.vertexCount;\n }\n\n getInstanceCount() {\n return this.instanceCount;\n }\n\n getAttributes() {\n return this.attributes;\n }\n\n getProgram() {\n return this.program;\n }\n\n setProgram(props) {\n const {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = props;\n this.programProps = {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n };\n this._programDirty = true;\n }\n\n getUniforms() {\n return this.uniforms;\n }\n\n setDrawMode(drawMode) {\n this.drawMode = drawMode;\n return this;\n }\n\n setVertexCount(vertexCount) {\n assert(Number.isFinite(vertexCount));\n this.vertexCount = vertexCount;\n return this;\n }\n\n setInstanceCount(instanceCount) {\n assert(Number.isFinite(instanceCount));\n this.instanceCount = instanceCount;\n return this;\n }\n\n setGeometry(geometry) {\n this.drawMode = geometry.drawMode;\n this.vertexCount = geometry.getVertexCount();\n\n this._deleteGeometryBuffers();\n\n this.geometryBuffers = getBuffersFromGeometry(this.gl, geometry);\n this.vertexArray.setAttributes(this.geometryBuffers);\n return this;\n }\n\n setAttributes() {\n let attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (isObjectEmpty(attributes)) {\n return this;\n }\n\n const normalizedAttributes = {};\n\n for (const name in attributes) {\n const attribute = attributes[name];\n normalizedAttributes[name] = attribute.getValue ? attribute.getValue() : attribute;\n }\n\n this.vertexArray.setAttributes(normalizedAttributes);\n return this;\n }\n\n setUniforms() {\n let uniforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n Object.assign(this.uniforms, uniforms);\n return this;\n }\n\n getModuleUniforms(opts) {\n this._checkProgram();\n\n const getUniforms = this.programManager.getUniforms(this.program);\n\n if (getUniforms) {\n return getUniforms(opts);\n }\n\n return {};\n }\n\n updateModuleSettings(opts) {\n const uniforms = this.getModuleUniforms(opts || {});\n return this.setUniforms(uniforms);\n }\n\n clear(opts) {\n clear(this.program.gl, opts);\n return this;\n }\n\n draw() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._checkProgram();\n\n const {\n moduleSettings = null,\n framebuffer,\n uniforms = {},\n attributes = {},\n transformFeedback = this.transformFeedback,\n parameters = {},\n vertexArray = this.vertexArray\n } = opts;\n this.setAttributes(attributes);\n this.updateModuleSettings(moduleSettings);\n this.setUniforms(uniforms);\n let logPriority;\n\n if (log.priority >= LOG_DRAW_PRIORITY) {\n logPriority = this._logDrawCallStart(LOG_DRAW_PRIORITY);\n }\n\n const drawParams = this.vertexArray.getDrawParams();\n const {\n isIndexed = drawParams.isIndexed,\n indexType = drawParams.indexType,\n indexOffset = drawParams.indexOffset,\n vertexArrayInstanced = drawParams.isInstanced\n } = this.props;\n\n if (vertexArrayInstanced && !this.isInstanced) {\n log.warn('Found instanced attributes on non-instanced model', this.id)();\n }\n\n const {\n isInstanced,\n instanceCount\n } = this;\n const {\n onBeforeRender = NOOP,\n onAfterRender = NOOP\n } = this.props;\n onBeforeRender();\n this.program.setUniforms(this.uniforms);\n const didDraw = this.program.draw(Object.assign(DRAW_PARAMS, opts, {\n logPriority,\n uniforms: null,\n framebuffer,\n parameters,\n drawMode: this.getDrawMode(),\n vertexCount: this.getVertexCount(),\n vertexArray,\n transformFeedback,\n isIndexed,\n indexType,\n isInstanced,\n instanceCount,\n offset: isIndexed ? indexOffset : 0\n }));\n onAfterRender();\n\n if (log.priority >= LOG_DRAW_PRIORITY) {\n this._logDrawCallEnd(logPriority, vertexArray, framebuffer);\n }\n\n return didDraw;\n }\n\n transform() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n discard = true,\n feedbackBuffers,\n unbindModels = []\n } = opts;\n let {\n parameters\n } = opts;\n\n if (feedbackBuffers) {\n this._setFeedbackBuffers(feedbackBuffers);\n }\n\n if (discard) {\n parameters = Object.assign({}, parameters, {\n [35977]: discard\n });\n }\n\n unbindModels.forEach(model => model.vertexArray.unbindBuffers());\n\n try {\n this.draw(Object.assign({}, opts, {\n parameters\n }));\n } finally {\n unbindModels.forEach(model => model.vertexArray.bindBuffers());\n }\n\n return this;\n }\n\n render() {\n let uniforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n log.warn('Model.render() is deprecated. Use Model.setUniforms() and Model.draw()')();\n return this.setUniforms(uniforms).draw();\n }\n\n _setModelProps(props) {\n Object.assign(this.props, props);\n\n if ('uniforms' in props) {\n this.setUniforms(props.uniforms);\n }\n\n if ('pickable' in props) {\n this.pickable = props.pickable;\n }\n\n if ('instanceCount' in props) {\n this.instanceCount = props.instanceCount;\n }\n\n if ('geometry' in props) {\n this.setGeometry(props.geometry);\n }\n\n if ('attributes' in props) {\n this.setAttributes(props.attributes);\n }\n\n if ('_feedbackBuffers' in props) {\n this._setFeedbackBuffers(props._feedbackBuffers);\n }\n }\n\n _checkProgram() {\n const needsUpdate = this._programDirty || this.programManager.stateHash !== this._programManagerState;\n\n if (!needsUpdate) {\n return;\n }\n\n let {\n program\n } = this.programProps;\n\n if (program) {\n this._managedProgram = false;\n } else {\n const {\n vs,\n fs,\n modules,\n inject,\n defines,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = this.programProps;\n program = this.programManager.get({\n vs,\n fs,\n modules,\n inject,\n defines,\n varyings,\n bufferMode,\n transpileToGLSL100\n });\n\n if (this.program && this._managedProgram) {\n this.programManager.release(this.program);\n }\n\n this._programManagerState = this.programManager.stateHash;\n this._managedProgram = true;\n }\n\n assert(program instanceof Program, 'Model needs a program');\n this._programDirty = false;\n\n if (program === this.program) {\n return;\n }\n\n this.program = program;\n\n if (this.vertexArray) {\n this.vertexArray.setProps({\n program: this.program,\n attributes: this.vertexArray.attributes\n });\n } else {\n this.vertexArray = new VertexArray(this.gl, {\n program: this.program\n });\n }\n\n this.setUniforms(Object.assign({}, this.getModuleUniforms()));\n }\n\n _deleteGeometryBuffers() {\n for (const name in this.geometryBuffers) {\n const buffer = this.geometryBuffers[name][0] || this.geometryBuffers[name];\n\n if (buffer instanceof Buffer) {\n buffer.delete();\n }\n }\n }\n\n _setAnimationProps(animationProps) {\n if (this.animated) {\n assert(animationProps, 'Model.draw(): animated uniforms but no animationProps');\n }\n }\n\n _setFeedbackBuffers() {\n let feedbackBuffers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (isObjectEmpty(feedbackBuffers)) {\n return this;\n }\n\n const {\n gl\n } = this.program;\n this.transformFeedback = this.transformFeedback || new TransformFeedback(gl, {\n program: this.program\n });\n this.transformFeedback.setBuffers(feedbackBuffers);\n return this;\n }\n\n _logDrawCallStart(logLevel) {\n const logDrawTimeout = logLevel > 3 ? 0 : LOG_DRAW_TIMEOUT;\n\n if (Date.now() - this.lastLogTime < logDrawTimeout) {\n return undefined;\n }\n\n this.lastLogTime = Date.now();\n log.group(LOG_DRAW_PRIORITY, \">>> DRAWING MODEL \".concat(this.id), {\n collapsed: log.level <= 2\n })();\n return logLevel;\n }\n\n _logDrawCallEnd(logLevel, vertexArray, uniforms, framebuffer) {\n if (logLevel === undefined) {\n return;\n }\n\n const attributeTable = getDebugTableForVertexArray({\n vertexArray,\n header: \"\".concat(this.id, \" attributes\"),\n attributes: this._attributes\n });\n const {\n table: uniformTable,\n unusedTable,\n unusedCount\n } = getDebugTableForUniforms({\n header: \"\".concat(this.id, \" uniforms\"),\n program: this.program,\n uniforms: Object.assign({}, this.program.uniforms, uniforms)\n });\n const {\n table: missingTable,\n count: missingCount\n } = getDebugTableForUniforms({\n header: \"\".concat(this.id, \" uniforms\"),\n program: this.program,\n uniforms: Object.assign({}, this.program.uniforms, uniforms),\n undefinedOnly: true\n });\n\n if (missingCount > 0) {\n log.log('MISSING UNIFORMS', Object.keys(missingTable))();\n }\n\n if (unusedCount > 0) {\n log.log('UNUSED UNIFORMS', Object.keys(unusedTable))();\n }\n\n const configTable = getDebugTableForProgramConfiguration(this.vertexArray.configuration);\n log.table(logLevel, attributeTable)();\n log.table(logLevel, uniformTable)();\n log.table(logLevel + 1, configTable)();\n\n if (framebuffer) {\n framebuffer.log({\n logLevel: LOG_DRAW_PRIORITY,\n message: \"Rendered to \".concat(framebuffer.id)\n });\n }\n\n log.groupEnd(LOG_DRAW_PRIORITY)();\n }\n\n}\n//# sourceMappingURL=model.js.map","export default function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'shadertools: assertion failed.');\n }\n}\n//# sourceMappingURL=assert.js.map","import { assertWebGL2Context, withParameters } from '@luma.gl/gltools';\nimport { assert } from '../utils/assert';\nconst GL_DEPTH_BUFFER_BIT = 0x00000100;\nconst GL_STENCIL_BUFFER_BIT = 0x00000400;\nconst GL_COLOR_BUFFER_BIT = 0x00004000;\nconst GL_COLOR = 0x1800;\nconst GL_DEPTH = 0x1801;\nconst GL_STENCIL = 0x1802;\nconst GL_DEPTH_STENCIL = 0x84f9;\nconst ERR_ARGUMENTS = 'clear: bad arguments';\nexport function clear(gl) {\n let {\n framebuffer = null,\n color = null,\n depth = null,\n stencil = null\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const parameters = {};\n\n if (framebuffer) {\n parameters.framebuffer = framebuffer;\n }\n\n let clearFlags = 0;\n\n if (color) {\n clearFlags |= GL_COLOR_BUFFER_BIT;\n\n if (color !== true) {\n parameters.clearColor = color;\n }\n }\n\n if (depth) {\n clearFlags |= GL_DEPTH_BUFFER_BIT;\n\n if (depth !== true) {\n parameters.clearDepth = depth;\n }\n }\n\n if (stencil) {\n clearFlags |= GL_STENCIL_BUFFER_BIT;\n\n if (depth !== true) {\n parameters.clearStencil = depth;\n }\n }\n\n assert(clearFlags !== 0, ERR_ARGUMENTS);\n withParameters(gl, parameters, () => {\n gl.clear(clearFlags);\n });\n}\nexport function clearBuffer(gl) {\n let {\n framebuffer = null,\n buffer = GL_COLOR,\n drawBuffer = 0,\n value = [0, 0, 0, 0]\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n assertWebGL2Context(gl);\n withParameters(gl, {\n framebuffer\n }, () => {\n switch (buffer) {\n case GL_COLOR:\n switch (value.constructor) {\n case Int32Array:\n gl.clearBufferiv(buffer, drawBuffer, value);\n break;\n\n case Uint32Array:\n gl.clearBufferuiv(buffer, drawBuffer, value);\n break;\n\n case Float32Array:\n default:\n gl.clearBufferfv(buffer, drawBuffer, value);\n }\n\n break;\n\n case GL_DEPTH:\n gl.clearBufferfv(GL_DEPTH, 0, [value]);\n break;\n\n case GL_STENCIL:\n gl.clearBufferiv(GL_STENCIL, 0, [value]);\n break;\n\n case GL_DEPTH_STENCIL:\n const [depth, stencil] = value;\n gl.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);\n break;\n\n default:\n assert(false, ERR_ARGUMENTS);\n }\n });\n}\n//# sourceMappingURL=clear.js.map","import Framebuffer from '../classes/framebuffer';\nimport Texture2D from '../classes/texture-2d';\nexport const FEATURES = {\n WEBGL2: 'WEBGL2',\n VERTEX_ARRAY_OBJECT: 'VERTEX_ARRAY_OBJECT',\n TIMER_QUERY: 'TIMER_QUERY',\n INSTANCED_RENDERING: 'INSTANCED_RENDERING',\n MULTIPLE_RENDER_TARGETS: 'MULTIPLE_RENDER_TARGETS',\n ELEMENT_INDEX_UINT32: 'ELEMENT_INDEX_UINT32',\n BLEND_EQUATION_MINMAX: 'BLEND_EQUATION_MINMAX',\n FLOAT_BLEND: 'FLOAT_BLEND',\n COLOR_ENCODING_SRGB: 'COLOR_ENCODING_SRGB',\n TEXTURE_DEPTH: 'TEXTURE_DEPTH',\n TEXTURE_FLOAT: 'TEXTURE_FLOAT',\n TEXTURE_HALF_FLOAT: 'TEXTURE_HALF_FLOAT',\n TEXTURE_FILTER_LINEAR_FLOAT: 'TEXTURE_FILTER_LINEAR_FLOAT',\n TEXTURE_FILTER_LINEAR_HALF_FLOAT: 'TEXTURE_FILTER_LINEAR_HALF_FLOAT',\n TEXTURE_FILTER_ANISOTROPIC: 'TEXTURE_FILTER_ANISOTROPIC',\n COLOR_ATTACHMENT_RGBA32F: 'COLOR_ATTACHMENT_RGBA32F',\n COLOR_ATTACHMENT_FLOAT: 'COLOR_ATTACHMENT_FLOAT',\n COLOR_ATTACHMENT_HALF_FLOAT: 'COLOR_ATTACHMENT_HALF_FLOAT',\n GLSL_FRAG_DATA: 'GLSL_FRAG_DATA',\n GLSL_FRAG_DEPTH: 'GLSL_FRAG_DEPTH',\n GLSL_DERIVATIVES: 'GLSL_DERIVATIVES',\n GLSL_TEXTURE_LOD: 'GLSL_TEXTURE_LOD'\n};\n\nfunction checkFloat32ColorAttachment(gl) {\n const testTexture = new Texture2D(gl, {\n format: 6408,\n type: 5126,\n dataFormat: 6408\n });\n const testFb = new Framebuffer(gl, {\n id: \"test-framebuffer\",\n check: false,\n attachments: {\n [36064]: testTexture\n }\n });\n const status = testFb.getStatus();\n testTexture.delete();\n testFb.delete();\n return status === 36053;\n}\n\nexport default {\n [FEATURES.WEBGL2]: [false, true],\n [FEATURES.VERTEX_ARRAY_OBJECT]: ['OES_vertex_array_object', true],\n [FEATURES.TIMER_QUERY]: ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2'],\n [FEATURES.INSTANCED_RENDERING]: ['ANGLE_instanced_arrays', true],\n [FEATURES.MULTIPLE_RENDER_TARGETS]: ['WEBGL_draw_buffers', true],\n [FEATURES.ELEMENT_INDEX_UINT32]: ['OES_element_index_uint', true],\n [FEATURES.BLEND_EQUATION_MINMAX]: ['EXT_blend_minmax', true],\n [FEATURES.FLOAT_BLEND]: ['EXT_float_blend'],\n [FEATURES.COLOR_ENCODING_SRGB]: ['EXT_sRGB', true],\n [FEATURES.TEXTURE_DEPTH]: ['WEBGL_depth_texture', true],\n [FEATURES.TEXTURE_FLOAT]: ['OES_texture_float', true],\n [FEATURES.TEXTURE_HALF_FLOAT]: ['OES_texture_half_float', true],\n [FEATURES.TEXTURE_FILTER_LINEAR_FLOAT]: ['OES_texture_float_linear'],\n [FEATURES.TEXTURE_FILTER_LINEAR_HALF_FLOAT]: ['OES_texture_half_float_linear'],\n [FEATURES.TEXTURE_FILTER_ANISOTROPIC]: ['EXT_texture_filter_anisotropic'],\n [FEATURES.COLOR_ATTACHMENT_RGBA32F]: [checkFloat32ColorAttachment, 'EXT_color_buffer_float'],\n [FEATURES.COLOR_ATTACHMENT_FLOAT]: [false, 'EXT_color_buffer_float'],\n [FEATURES.COLOR_ATTACHMENT_HALF_FLOAT]: ['EXT_color_buffer_half_float'],\n [FEATURES.GLSL_FRAG_DATA]: ['WEBGL_draw_buffers', true],\n [FEATURES.GLSL_FRAG_DEPTH]: ['EXT_frag_depth', true],\n [FEATURES.GLSL_DERIVATIVES]: ['OES_standard_derivatives', true],\n [FEATURES.GLSL_TEXTURE_LOD]: ['EXT_shader_texture_lod', true]\n};\n//# sourceMappingURL=webgl-features-table.js.map","import { assert } from '../env-utils/assert';\nimport { VERSION as __VERSION__ } from '../env-utils/version';\nconst NPM_TAG = 'latest';\nconst VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : NPM_TAG;\nexport function getWorkerName(worker) {\n const warning = worker.version !== VERSION ? \" (worker-utils@\".concat(VERSION, \")\") : '';\n return \"\".concat(worker.name, \"@\").concat(worker.version).concat(warning);\n}\nexport function getWorkerURL(worker, options = {}) {\n const workerOptions = options[worker.id] || {};\n const workerFile = \"\".concat(worker.id, \"-worker.js\");\n let url = workerOptions.workerUrl;\n\n if (!url && worker.id === 'compression') {\n url = options.workerUrl;\n }\n\n if (options._workerType === 'test') {\n url = \"modules/\".concat(worker.module, \"/dist/\").concat(workerFile);\n }\n\n if (!url) {\n let version = worker.version;\n\n if (version === 'latest') {\n version = NPM_TAG;\n }\n\n const versionTag = version ? \"@\".concat(version) : '';\n url = \"https://unpkg.com/@loaders.gl/\".concat(worker.module).concat(versionTag, \"/dist/\").concat(workerFile);\n }\n\n assert(url);\n return url;\n}\n//# sourceMappingURL=get-worker-url.js.map","import { MODULE_INJECTORS_VS, MODULE_INJECTORS_FS } from '../modules/module-injectors';\nimport { VERTEX_SHADER, FRAGMENT_SHADER } from './constants';\nimport { assert } from '../utils';\nconst MODULE_INJECTORS = {\n [VERTEX_SHADER]: MODULE_INJECTORS_VS,\n [FRAGMENT_SHADER]: MODULE_INJECTORS_FS\n};\nexport const DECLARATION_INJECT_MARKER = '__LUMA_INJECT_DECLARATIONS__';\nconst REGEX_START_OF_MAIN = /void\\s+main\\s*\\([^)]*\\)\\s*\\{\\n?/;\nconst REGEX_END_OF_MAIN = /}\\n?[^{}]*$/;\nconst fragments = [];\nexport default function injectShader(source, type, inject) {\n let injectStandardStubs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n const isVertex = type === VERTEX_SHADER;\n\n for (const key in inject) {\n const fragmentData = inject[key];\n fragmentData.sort((a, b) => a.order - b.order);\n fragments.length = fragmentData.length;\n\n for (let i = 0, len = fragmentData.length; i < len; ++i) {\n fragments[i] = fragmentData[i].injection;\n }\n\n const fragmentString = \"\".concat(fragments.join('\\n'), \"\\n\");\n\n switch (key) {\n case 'vs:#decl':\n if (isVertex) {\n source = source.replace(DECLARATION_INJECT_MARKER, fragmentString);\n }\n\n break;\n\n case 'vs:#main-start':\n if (isVertex) {\n source = source.replace(REGEX_START_OF_MAIN, match => match + fragmentString);\n }\n\n break;\n\n case 'vs:#main-end':\n if (isVertex) {\n source = source.replace(REGEX_END_OF_MAIN, match => fragmentString + match);\n }\n\n break;\n\n case 'fs:#decl':\n if (!isVertex) {\n source = source.replace(DECLARATION_INJECT_MARKER, fragmentString);\n }\n\n break;\n\n case 'fs:#main-start':\n if (!isVertex) {\n source = source.replace(REGEX_START_OF_MAIN, match => match + fragmentString);\n }\n\n break;\n\n case 'fs:#main-end':\n if (!isVertex) {\n source = source.replace(REGEX_END_OF_MAIN, match => fragmentString + match);\n }\n\n break;\n\n default:\n source = source.replace(key, match => match + fragmentString);\n }\n }\n\n source = source.replace(DECLARATION_INJECT_MARKER, '');\n\n if (injectStandardStubs) {\n source = source.replace(/\\}\\s*$/, match => match + MODULE_INJECTORS[type]);\n }\n\n return source;\n}\nexport function combineInjects(injects) {\n const result = {};\n assert(Array.isArray(injects) && injects.length > 1);\n injects.forEach(inject => {\n for (const key in inject) {\n result[key] = result[key] ? \"\".concat(result[key], \"\\n\").concat(inject[key]) : inject[key];\n }\n });\n return result;\n}\n//# sourceMappingURL=inject-shader.js.map","export const MODULE_INJECTORS_VS = \"#ifdef MODULE_LOGDEPTH\\n logdepth_adjustPosition(gl_Position);\\n#endif\\n\";\nexport const MODULE_INJECTORS_FS = \"#ifdef MODULE_MATERIAL\\n gl_FragColor = material_filterColor(gl_FragColor);\\n#endif\\n\\n#ifdef MODULE_LIGHTING\\n gl_FragColor = lighting_filterColor(gl_FragColor);\\n#endif\\n\\n#ifdef MODULE_FOG\\n gl_FragColor = fog_filterColor(gl_FragColor);\\n#endif\\n\\n#ifdef MODULE_PICKING\\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\\n#endif\\n\\n#ifdef MODULE_LOGDEPTH\\n logdepth_setFragDepth();\\n#endif\\n\";\n//# sourceMappingURL=module-injectors.js.map","import { isBrowser } from '@loaders.gl/worker-utils';\nimport { WorkerFarm, getWorkerURL } from '@loaders.gl/worker-utils';\nexport function canParseWithWorker(loader, options) {\n if (!WorkerFarm.isSupported()) {\n return false;\n }\n\n if (!isBrowser && !(options !== null && options !== void 0 && options._nodeWorkers)) {\n return false;\n }\n\n return loader.worker && (options === null || options === void 0 ? void 0 : options.worker);\n}\nexport async function parseWithWorker(loader, data, options, context, parseOnMainThread) {\n const name = loader.id;\n const url = getWorkerURL(loader, options);\n const workerFarm = WorkerFarm.getWorkerFarm(options);\n const workerPool = workerFarm.getWorkerPool({\n name,\n url\n });\n options = JSON.parse(JSON.stringify(options));\n context = JSON.parse(JSON.stringify(context || {}));\n const job = await workerPool.startJob('process-on-worker', onMessage.bind(null, parseOnMainThread));\n job.postMessage('process', {\n input: data,\n options,\n context\n });\n const result = await job.result;\n return await result.result;\n}\n\nasync function onMessage(parseOnMainThread, job, type, payload) {\n switch (type) {\n case 'done':\n job.done(payload);\n break;\n\n case 'error':\n job.error(new Error(payload.error));\n break;\n\n case 'process':\n const {\n id,\n input,\n options\n } = payload;\n\n try {\n const result = await parseOnMainThread(input, options);\n job.postMessage('done', {\n id,\n result\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n job.postMessage('error', {\n id,\n error: message\n });\n }\n\n break;\n\n default:\n console.warn(\"parse-with-worker unknown message \".concat(type));\n }\n}\n//# sourceMappingURL=parse-with-worker.js.map","export default function assert(condition, message = '') {\n if (!condition) {\n throw new Error(`JSON conversion error ${message}`);\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/**\n * Access properties of nested containers using dot-path notation\n * Returns `undefined` if any container is not valid, instead of throwing\n * @param {Object} container - container that supports get\n * @param {String|*} compositeKey - key to access, can be '.'-separated string\n * @return {*} - value in the final key of the nested container, or `undefined`\n */\nexport function get(container, compositeKey) {\n // Split the key into subkeys\n const keyList = getKeys(compositeKey);\n // Recursively get the value of each key;\n let value = container;\n for (const key of keyList) {\n // If any intermediate subfield is not an object, return undefined\n value = isObject(value) ? value[key] : undefined;\n }\n return value;\n}\n\n/**\n * Checks if argument is an \"indexable\" object (not a primitive value, nor null)\n * @param {*} value - JavaScript value to be tested\n * @return {Boolean} - true if argument is a JavaScript object\n */\nfunction isObject(value) {\n return value !== null && typeof value === 'object';\n}\n\n// Cache key to key arrays for speed\nconst keyMap = {};\n\n// Takes a string of '.' separated keys and returns an array of keys\n// - 'feature.geometry.type' => ['feature', 'geometry', 'type']\n// - 'feature' => ['feature']\nfunction getKeys(compositeKey) {\n if (typeof compositeKey === 'string') {\n // else assume string and split around dots\n let keyList = keyMap[compositeKey];\n if (!keyList) {\n keyList = compositeKey.split('.');\n keyMap[compositeKey] = keyList;\n }\n return keyList;\n }\n // Wrap in array if needed\n return Array.isArray(compositeKey) ? compositeKey : [compositeKey];\n}\n","import {get} from '../utils/get';\n\n// expression-eval: Small jsep based expression parser that supports array and object indexing\nimport expressionEval from 'expression-eval';\n\nconst cachedExpressionMap = {\n '-': object => object\n};\n\n// Calculates an accessor function from a JSON string\n// '-' : x => x\n// 'a.b.c': x => x.a.b.c\nexport default function parseExpressionString(propValue, configuration) {\n // NOTE: Can be null which represents invalid function. Return null so that prop can be omitted\n if (propValue in cachedExpressionMap) {\n return cachedExpressionMap[propValue];\n }\n\n let func;\n // Compile with expression-eval\n const ast = expressionEval.parse(propValue);\n if (!ast.right && !ast.left && ast.type === 'Identifier') {\n func = row => {\n return get(row, propValue);\n };\n } else {\n // NOTE: To avoid security risks, the arguments passed to the\n // compiled expression must only give access to pure data (no globals etc)\n // We disable function call syntax\n traverse(ast, node => {\n if (node.type === 'CallExpression') {\n throw new Error('Function calls not allowed in JSON expressions');\n }\n });\n // TODO Something like `expressionEval.eval(ast, {row});` would be useful for unpacking arrays\n func = row => {\n return expressionEval.eval(ast, row);\n };\n }\n\n // Cache the compiled function\n cachedExpressionMap[propValue] = func;\n return func;\n}\n\n// Helper function to search all nodes in AST returned by expressionEval\n// eslint-disable-next-line complexity\nfunction traverse(node, visitor) {\n if (Array.isArray(node)) {\n node.forEach(element => traverse(element, visitor));\n } else if (node && typeof node === 'object') {\n if (node.type) {\n visitor(node);\n }\n for (const key in node) {\n traverse(node[key], visitor);\n }\n }\n}\n","const FUNCTION_IDENTIFIER = '@@=';\nconst CONSTANT_IDENTIFIER = '@@#';\nconst TYPE_KEY = '@@type';\nconst FUNCTION_KEY = '@@function';\n\nexport {FUNCTION_IDENTIFIER, CONSTANT_IDENTIFIER, TYPE_KEY, FUNCTION_KEY};\n","// TODO - default parsing code should not be part of the configuration.\nimport parseExpressionString from './helpers/parse-expression-string';\nimport assert from './utils/assert';\n\nimport {TYPE_KEY, FUNCTION_KEY} from './syntactic-sugar';\n\nconst isObject = value => value && typeof value === 'object';\n\nexport default class JSONConfiguration {\n constructor(...configurations) {\n // Initialize config with default values\n this.typeKey = TYPE_KEY;\n this.functionKey = FUNCTION_KEY;\n this.log = console; // eslint-disable-line\n this.classes = {};\n this.reactComponents = {};\n this.enumerations = {};\n this.constants = {};\n this.functions = {};\n // TODO - this needs to be simpler, function conversion should be built in\n this.convertFunction = parseExpressionString;\n this.preProcessClassProps = (Class, props) => props;\n this.postProcessConvertedJson = json => json;\n\n for (const configuration of configurations) {\n this.merge(configuration);\n }\n }\n\n merge(configuration) {\n for (const key in configuration) {\n switch (key) {\n // DEPRECATED = For backwards compatibility, add views and layers to classes;\n case 'layers':\n case 'views':\n Object.assign(this.classes, configuration[key]);\n break;\n default:\n // Store configuration as root fields (this.classes, ...)\n if (key in this) {\n const value = configuration[key];\n this[key] = isObject(this[key]) ? Object.assign(this[key], value) : value;\n }\n }\n }\n }\n\n validate(configuration) {\n assert(!this.typeKey || typeof this.typeKey === 'string');\n assert(isObject(this.classes));\n return true;\n }\n}\n","import parseExpressionString from './parse-expression-string';\n\nimport {FUNCTION_IDENTIFIER} from '../syntactic-sugar';\n\nfunction hasFunctionIdentifier(value) {\n return typeof value === 'string' && value.startsWith(FUNCTION_IDENTIFIER);\n}\n\nfunction trimFunctionIdentifier(value) {\n return value.replace(FUNCTION_IDENTIFIER, '');\n}\n\n// Try to determine if any props are function valued\n// and if so convert their string values to functions\nexport default function convertFunctions(props, configuration) {\n // Use deck.gl prop types if available.\n const replacedProps = {};\n for (const propName in props) {\n let propValue = props[propName];\n\n // Parse string valued expressions\n const isFunction = hasFunctionIdentifier(propValue);\n\n if (isFunction) {\n // Parse string as \"expression\", return equivalent JavaScript function\n propValue = trimFunctionIdentifier(propValue);\n propValue = parseExpressionString(propValue, configuration);\n }\n\n replacedProps[propName] = propValue;\n }\n\n return replacedProps;\n}\n","import convertFunctions from './convert-functions';\n\n// This attempts to instantiate a class, either as a class or as a React component\nexport function instantiateClass(type, props, configuration) {\n // Find the class\n const Class = configuration.classes[type];\n const Component = configuration.reactComponents[type];\n\n // Check that the class is in the configuration.\n if (!Class && !Component) {\n const {log} = configuration; // eslint-disable-line\n if (log) {\n const stringProps = JSON.stringify(props, null, 0).slice(0, 40);\n log.warn(`JSON converter: No registered class of type ${type}(${stringProps}...) `);\n }\n return null;\n }\n\n if (Class) {\n return instantiateJavaScriptClass(Class, props, configuration);\n }\n\n return instantiateReactComponent(Component, props, configuration);\n}\n\nfunction instantiateJavaScriptClass(Class, props, configuration) {\n if (configuration.preProcessClassProps) {\n props = configuration.preProcessClassProps(Class, props, configuration);\n }\n props = convertFunctions(props, configuration);\n return new Class(props);\n}\n\nfunction instantiateReactComponent(Component, props, configuration) {\n const {React} = configuration;\n const {children = []} = props;\n delete props.children;\n if (configuration.preProcessClassProps) {\n props = configuration.preProcessClassProps(Component, props, configuration);\n }\n\n props = convertFunctions(props, configuration);\n\n return React.createElement(Component, props, children);\n}\n","// Converts JSON to props (\"hydrating\" classes, resolving enums and functions etc).\n// Lightly processes `json` props, transform string values, and extract `views` and `layers`\n// See: https://github.com/visgl/deck.gl/blob/master/dev-docs/RFCs/v6.1/json-layers-rfc.md\n//\n// NOTES:\n// * This is intended to provide minimal necessary processing required to support\n// existing deck.gl props via JSON. This is not an implementation of alternate JSON schemas.\n// * Optionally, error checking could be applied, but ideally should leverage\n// non-JSON specific mechanisms like prop types.\n\nimport assert from './utils/assert';\nimport JSONConfiguration from './json-configuration';\nimport {instantiateClass} from './helpers/instantiate-class';\nimport {executeFunction} from './helpers/execute-function';\n\nimport {FUNCTION_IDENTIFIER, CONSTANT_IDENTIFIER, FUNCTION_KEY} from './syntactic-sugar';\nimport parseJSON from './helpers/parse-json';\n\nconst isObject = value => value && typeof value === 'object';\n\nexport default class JSONConverter {\n constructor(props) {\n this.log = console; // eslint-disable-line\n this.configuration = {};\n this.onJSONChange = () => {};\n this.json = null;\n this.convertedJson = null;\n this.setProps(props);\n }\n\n finalize() {}\n\n setProps(props) {\n // HANDLE CONFIGURATION PROPS\n if ('configuration' in props) {\n // Accept object or `JSONConfiguration`\n this.configuration =\n props.configuration instanceof JSONConfiguration\n ? props.configuration\n : new JSONConfiguration(props.configuration);\n }\n\n if ('onJSONChange' in props) {\n this.onJSONChange = props.onJSONChange;\n }\n }\n\n mergeConfiguration(config) {\n this.configuration.merge(config);\n }\n\n convert(json) {\n // Use shallow equality to ensure we only convert same json once\n if (!json || json === this.json) {\n return this.convertedJson;\n }\n // Save json for shallow diffing\n this.json = json;\n\n // Accept JSON strings by parsing them\n const parsedJSON = parseJSON(json);\n\n // Convert the JSON\n let convertedJson = convertJSON(parsedJSON, this.configuration);\n\n convertedJson = this.configuration.postProcessConvertedJson(convertedJson);\n\n this.convertedJson = convertedJson;\n return convertedJson;\n }\n\n // DEPRECATED: Backwards compatibility\n convertJson(json) {\n return this.convert(json);\n }\n}\n\nfunction convertJSON(json, configuration) {\n // Fixup configuration\n configuration = new JSONConfiguration(configuration);\n return convertJSONRecursively(json, '', configuration);\n}\n\n// Converts JSON to props (\"hydrating\" classes, resolving enums and functions etc).\nfunction convertJSONRecursively(json, key, configuration) {\n if (Array.isArray(json)) {\n return json.map((element, i) => convertJSONRecursively(element, String(i), configuration));\n }\n\n // If object.type is in configuration, instantiate\n if (isClassInstance(json, configuration)) {\n return convertClassInstance(json, configuration);\n }\n\n if (isObject(json)) {\n // If object.function is in configuration, convert object to function\n if (FUNCTION_KEY in json) {\n return convertFunctionObject(json, configuration);\n }\n return convertPlainObject(json, configuration);\n }\n\n // Single value\n if (typeof json === 'string') {\n return convertString(json, key, configuration);\n }\n\n // Return unchanged (number, boolean, ...)\n return json;\n}\n\n// Returns true if an object has a `type` field\nfunction isClassInstance(json, configuration) {\n const {typeKey} = configuration;\n const isClass = isObject(json) && Boolean(json[typeKey]);\n return isClass;\n}\n\nfunction convertClassInstance(json, configuration) {\n // Extract the class type field\n const {typeKey} = configuration;\n const type = json[typeKey];\n\n // Prepare a props object and ensure all values have been converted\n let props = {...json};\n delete props[typeKey];\n\n props = convertPlainObject(props, configuration);\n\n return instantiateClass(type, props, configuration);\n}\n\n// Plain JS object, embed functions.\nfunction convertFunctionObject(json, configuration) {\n // Extract the target function field\n const {functionKey} = configuration;\n const targetFunction = json[functionKey];\n\n // Prepare a props object and ensure all values have been converted\n let props = {...json};\n delete props[functionKey];\n\n props = convertPlainObject(props, configuration);\n\n return executeFunction(targetFunction, props, configuration);\n}\n\n// Plain JS object, convert each key and return.\nfunction convertPlainObject(json, configuration) {\n assert(isObject(json));\n\n const result = {};\n for (const key in json) {\n const value = json[key];\n result[key] = convertJSONRecursively(value, key, configuration);\n }\n return result;\n}\n\n// Convert one string value in an object\n// TODO - We could also support string syntax for hydrating other types, like regexps...\n// But no current use case\nfunction convertString(string, key, configuration) {\n // Here the JSON value is supposed to be treated as a function\n if (string.startsWith(FUNCTION_IDENTIFIER) && configuration.convertFunction) {\n string = string.replace(FUNCTION_IDENTIFIER, '');\n return configuration.convertFunction(string, configuration);\n }\n if (string.startsWith(CONSTANT_IDENTIFIER)) {\n string = string.replace(CONSTANT_IDENTIFIER, '');\n if (configuration.constants[string]) {\n return configuration.constants[string];\n }\n // enum\n const [enumVarName, enumValName] = string.split('.');\n return configuration.enumerations[enumVarName][enumValName];\n }\n return string;\n}\n","// Accept JSON strings by parsing them\n// TODO - use a parser that provides meaninful error messages\nexport default function parseJSON(json) {\n return typeof json === 'string' ? JSON.parse(json) : json;\n}\n","// This attempts to execute a function\nexport function executeFunction(targetFunction, props, configuration) {\n // Find the function\n const matchedFunction = configuration.functions[targetFunction];\n\n // Check that the function is in the configuration.\n if (!matchedFunction) {\n const {log} = configuration; // eslint-disable-line\n if (log) {\n const stringProps = JSON.stringify(props, null, 0).slice(0, 40);\n log.warn(`JSON converter: No registered function ${targetFunction}(${stringProps}...) `);\n }\n return null;\n }\n\n return matchedFunction(props);\n}\n","// TODO - can we reuse the core util? Assuming we don't want to export it\n\n/* eslint-disable complexity */\n\n// Compares two objects to see if their keys are shallowly equal\nexport function shallowEqualObjects(a, b) {\n if (a === b) {\n return true;\n }\n\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) {\n return false;\n }\n\n if (Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n\n for (const key in a) {\n if (!(key in b) || a[key] !== b[key]) {\n return false;\n }\n }\n for (const key in b) {\n if (!(key in a)) {\n return false;\n }\n }\n return true;\n}\n","// @deck.gl/json: top-level exports\n\n// Generic JSON converter, usable by other wrapper modules\nexport {default as JSONConverter} from './json-converter';\nexport {default as JSONConfiguration} from './json-configuration';\n\n// Transports\nexport {default as Transport} from './transports/transport';\n\n// Helpers\nexport {default as _convertFunctions} from './helpers/convert-functions';\nexport {default as _parseExpressionString} from './helpers/parse-expression-string';\nexport {shallowEqualObjects as _shallowEqualObjects} from './utils/shallow-equal-objects';\n","// Jupyter Widget based Transport implementation\n\nimport {Transport} from '@deck.gl/json';\n\n/**\n * A Transport subclass for communicating with Jupyter kernels\n * via the Jupyter Widget API.\n */\nexport default class JupyterTransport extends Transport {\n constructor() {\n super('Jupyter Transport (JavaScript <=> Jupyter Kernel)');\n this.jupyterModel = null; // Set manually by the Jupyter Widget View\n this.jupyterView = null; // Set manually by the Jupyter Widget View\n }\n\n getRootDOMElement() {\n return this.jupyterView.el;\n }\n\n /**\n * back-channel messaging for event handling etc\n */\n sendJSONMessage(type, data) {\n const string = Transport._stringifyJSONSafe({type, data});\n this.jupyterModel.send(string);\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport Layer, {UpdateParameters} from './layer';\nimport debug from '../debug';\nimport {flatten} from '../utils/flatten';\n\nimport type AttributeManager from './attribute/attribute-manager';\nimport type {PickingInfo, GetPickingInfoParams} from './picking/pick-info';\nimport type {FilterContext} from '../passes/layers-pass';\nimport type {LayersList, LayerContext} from './layer-manager';\nimport type {CompositeLayerProps, Accessor, AccessorContext} from '../types/layer-props';\nimport {ConstructorOf} from '../types/types';\n\nconst TRACE_RENDER_LAYERS = 'compositeLayer.renderLayers';\n\nexport default abstract class CompositeLayer extends Layer<\n PropsT & Required\n> {\n static layerName: string = 'CompositeLayer';\n\n /** `true` if this layer renders other layers */\n get isComposite(): boolean {\n return true;\n }\n\n /** Returns true if all async resources are loaded */\n get isLoaded(): boolean {\n return super.isLoaded && this.getSubLayers().every(layer => layer.isLoaded);\n }\n\n /** Return last rendered sub layers */\n getSubLayers(): Layer[] {\n return (this.internalState && this.internalState.subLayers) || [];\n }\n\n // initializeState is usually not needed for composite layers\n // Provide empty definition to disable check for missing definition\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n initializeState(context: LayerContext): void {}\n\n /** Updates selected state members and marks the composite layer to need rerender */\n setState(updateObject: any): void {\n super.setState(updateObject);\n // Trigger a layer update\n // Although conceptually layer.draw and compositeLayer.renderLayers are equivalent,\n // they are executed during different lifecycles.\n // draw can be called without calling updateState (e.g. most viewport changes),\n // while renderLayers can only be called during a recursive layer update.\n this.setNeedsUpdate();\n }\n\n /** called to augment the info object that is bubbled up from a sublayer\n override Layer.getPickingInfo() because decoding / setting uniform do\n not apply to a composite layer. */\n getPickingInfo({info}: GetPickingInfoParams): PickingInfo {\n const {object} = info;\n const isDataWrapped =\n object && object.__source && object.__source.parent && object.__source.parent.id === this.id;\n\n if (!isDataWrapped) {\n return info;\n }\n\n // override object with picked data\n info.object = object.__source.object;\n info.index = object.__source.index;\n\n return info;\n }\n\n // Implement to generate subLayers\n abstract renderLayers(): Layer | null | LayersList;\n\n /**\n * Filters sub layers at draw time. Return true if the sub layer should be drawn.\n */\n filterSubLayer(context: FilterContext): boolean {\n return true;\n }\n\n /** Returns true if sub layer needs to be rendered */\n protected shouldRenderSubLayer(subLayerId: string, data: any): boolean {\n return data && data.length;\n }\n\n /** Returns sub layer class for a specific sublayer */\n protected getSubLayerClass(\n subLayerId: string,\n DefaultLayerClass: ConstructorOf\n ): ConstructorOf {\n const {_subLayerProps: overridingProps} = this.props;\n\n return (\n (overridingProps &&\n overridingProps[subLayerId] &&\n (overridingProps[subLayerId].type as ConstructorOf)) ||\n DefaultLayerClass\n );\n }\n\n /** When casting user data into another format to pass to sublayers,\n add reference to the original object and object index */\n protected getSubLayerRow(row: T, sourceObject: any, sourceObjectIndex: number): T {\n // @ts-ignore (TS2339) adding undefined property\n row.__source = {\n parent: this,\n object: sourceObject,\n index: sourceObjectIndex\n };\n return row;\n }\n\n /** Some composite layers cast user data into another format before passing to sublayers\n We need to unwrap them before calling the accessor so that they see the original data\n objects */\n protected getSubLayerAccessor(accessor: Accessor): Accessor {\n if (typeof accessor === 'function') {\n const objectInfo: AccessorContext = {\n index: -1,\n // @ts-ignore accessing resolved data\n data: this.props.data,\n target: []\n };\n return (x: any, i: AccessorContext) => {\n if (x && x.__source) {\n objectInfo.index = x.__source.index;\n // @ts-ignore (TS2349) Out is never a function\n return accessor(x.__source.object as In, objectInfo);\n }\n // @ts-ignore (TS2349) Out is never a function\n return accessor(x as In, i);\n };\n }\n return accessor;\n }\n\n // eslint-disable-next-line complexity\n /** Returns sub layer props for a specific sublayer */\n protected getSubLayerProps(\n sublayerProps: {\n id?: string;\n updateTriggers?: Record;\n [propName: string]: any;\n } = {}\n ): any {\n const {\n opacity,\n pickable,\n visible,\n parameters,\n getPolygonOffset,\n highlightedObjectIndex,\n autoHighlight,\n highlightColor,\n coordinateSystem,\n coordinateOrigin,\n wrapLongitude,\n positionFormat,\n modelMatrix,\n extensions,\n fetch,\n operation,\n _subLayerProps: overridingProps\n } = this.props;\n const newProps = {\n id: '',\n updateTriggers: {},\n opacity,\n pickable,\n visible,\n parameters,\n getPolygonOffset,\n highlightedObjectIndex,\n autoHighlight,\n highlightColor,\n coordinateSystem,\n coordinateOrigin,\n wrapLongitude,\n positionFormat,\n modelMatrix,\n extensions,\n fetch,\n operation\n };\n\n const overridingSublayerProps =\n overridingProps && sublayerProps.id && overridingProps[sublayerProps.id];\n const overridingSublayerTriggers =\n overridingSublayerProps && overridingSublayerProps.updateTriggers;\n const sublayerId = sublayerProps.id || 'sublayer';\n\n if (overridingSublayerProps) {\n // @ts-ignore (TS2339) hidden property\n const propTypes = this.constructor._propTypes;\n const subLayerPropTypes = sublayerProps.type ? sublayerProps.type._propTypes : {};\n for (const key in overridingSublayerProps) {\n const propType = subLayerPropTypes[key] || propTypes[key];\n // eslint-disable-next-line\n if (propType && propType.type === 'accessor') {\n overridingSublayerProps[key] = this.getSubLayerAccessor(overridingSublayerProps[key]);\n }\n }\n }\n\n Object.assign(\n newProps,\n sublayerProps,\n // experimental feature that allows users to override sublayer props via parent layer prop\n overridingSublayerProps\n );\n newProps.id = `${this.props.id}-${sublayerId}`;\n newProps.updateTriggers = {\n all: this.props.updateTriggers?.all,\n ...sublayerProps.updateTriggers,\n ...overridingSublayerTriggers\n };\n\n // Pass through extension props\n // @ts-ignore (TS2532) extensions is always defined after merging with default props\n for (const extension of extensions) {\n const passThroughProps = extension.getSubLayerProps.call(this, extension);\n if (passThroughProps) {\n Object.assign(newProps, passThroughProps, {\n updateTriggers: Object.assign(newProps.updateTriggers, passThroughProps.updateTriggers)\n });\n }\n }\n\n return newProps;\n }\n\n /** Update sub layers to highlight the hovered object */\n protected _updateAutoHighlight(info: PickingInfo): void {\n for (const layer of this.getSubLayers()) {\n layer.updateAutoHighlight(info);\n }\n }\n\n /** Override base Layer method */\n protected _getAttributeManager(): AttributeManager | null {\n return null;\n }\n\n /** (Internal) Called after an update to rerender sub layers */\n protected _postUpdate(updateParams: UpdateParameters, forceUpdate: boolean) {\n // @ts-ignore (TS2531) this method is only called internally when internalState is defined\n let subLayers = this.internalState.subLayers as Layer[];\n const shouldUpdate = !subLayers || this.needsUpdate();\n if (shouldUpdate) {\n const subLayersList = this.renderLayers();\n // Flatten the returned array, removing any null, undefined or false\n // this allows layers to render sublayers conditionally\n // (see CompositeLayer.renderLayers docs)\n subLayers = flatten(subLayersList, Boolean) as Layer[];\n // @ts-ignore (TS2531) this method is only called internally when internalState is defined\n this.internalState.subLayers = subLayers;\n }\n debug(TRACE_RENDER_LAYERS, this, shouldUpdate, subLayers);\n\n // populate reference to parent layer (this layer)\n // NOTE: needs to be done even when reusing layers as the parent may have changed\n for (const layer of subLayers) {\n layer.parent = this;\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {deepEqual} from '../utils/deep-equal';\nimport log from '../utils/log';\nimport {flatten} from '../utils/flatten';\n\nimport type Controller from '../controllers/controller';\nimport type {ViewStateChangeParameters, InteractionState} from '../controllers/controller';\nimport type Viewport from '../viewports/viewport';\nimport type View from '../views/view';\nimport type {Timeline} from '@luma.gl/engine';\nimport type {EventManager} from 'mjolnir.js';\nimport type {ConstructorOf} from '../types/types';\n\nexport default class ViewManager {\n width: number;\n height: number;\n views: View[];\n viewState: any;\n controllers: {[viewId: string]: Controller | null};\n timeline: Timeline;\n\n private _viewports: Viewport[];\n private _viewportMap: {[viewId: string]: Viewport};\n private _isUpdating: boolean;\n private _needsRedraw: string | false;\n private _needsUpdate: string | false;\n private _eventManager: EventManager;\n private _eventCallbacks: {\n onViewStateChange?: (params: ViewStateChangeParameters & {viewId: string}) => void;\n onInteractionStateChange?: (state: InteractionState) => void;\n };\n\n constructor(props: {\n // Initial options\n timeline: Timeline;\n eventManager: EventManager;\n onViewStateChange?: (params: ViewStateChangeParameters & {viewId: string}) => void;\n onInteractionStateChange?: (state: InteractionState) => void;\n // Props\n views?: View[];\n viewState?: any;\n width?: number;\n height?: number;\n }) {\n // List of view descriptors, gets re-evaluated when width/height changes\n this.views = [];\n this.width = 100;\n this.height = 100;\n this.viewState = {};\n this.controllers = {};\n this.timeline = props.timeline;\n\n this._viewports = []; // Generated viewports\n this._viewportMap = {};\n this._isUpdating = false;\n this._needsRedraw = 'First render';\n this._needsUpdate = 'Initialize';\n\n this._eventManager = props.eventManager;\n this._eventCallbacks = {\n onViewStateChange: props.onViewStateChange,\n onInteractionStateChange: props.onInteractionStateChange\n };\n\n Object.seal(this);\n\n // Init with default map viewport\n this.setProps(props);\n }\n\n /** Remove all resources and event listeners */\n finalize(): void {\n for (const key in this.controllers) {\n const controller = this.controllers[key];\n if (controller) {\n controller.finalize();\n }\n }\n this.controllers = {};\n }\n\n /** Check if a redraw is needed */\n needsRedraw(\n opts: {\n /** Reset redraw flags to false */\n clearRedrawFlags?: boolean;\n } = {clearRedrawFlags: false}\n ): string | false {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n\n /** Mark the manager as dirty. Will rebuild all viewports and update controllers. */\n setNeedsUpdate(reason: string): void {\n this._needsUpdate = this._needsUpdate || reason;\n this._needsRedraw = this._needsRedraw || reason;\n }\n\n /** Checks each viewport for transition updates */\n updateViewStates(): void {\n for (const viewId in this.controllers) {\n const controller = this.controllers[viewId];\n if (controller) {\n controller.updateTransition();\n }\n }\n }\n\n /** Get a set of viewports for a given width and height\n * TODO - Intention is for deck.gl to autodeduce width and height and drop the need for props\n * @param rect (object, optional) - filter the viewports\n * + not provided - return all viewports\n * + {x, y} - only return viewports that contain this pixel\n * + {x, y, width, height} - only return viewports that overlap with this rectangle\n */\n getViewports(rect?: {x: number; y: number; width?: number; height?: number}): Viewport[] {\n if (rect) {\n return this._viewports.filter(viewport => viewport.containsPixel(rect));\n }\n return this._viewports;\n }\n\n /** Get a map of all views */\n getViews(): {[viewId: string]: View} {\n const viewMap = {};\n this.views.forEach(view => {\n viewMap[view.id] = view;\n });\n return viewMap;\n }\n\n /** Resolves a viewId string to a View */\n getView(viewId: string): View | undefined {\n return this.views.find(view => view.id === viewId);\n }\n\n /** Returns the viewState for a specific viewId. Matches the viewState by\n 1. view.viewStateId\n 2. view.id\n 3. root viewState\n then applies the view's filter if any */\n getViewState(viewOrViewId: string | View): any {\n const view: View | undefined =\n typeof viewOrViewId === 'string' ? this.getView(viewOrViewId) : viewOrViewId;\n // Backward compatibility: view state for single view\n const viewState = (view && this.viewState[view.getViewStateId()]) || this.viewState;\n return view ? view.filterViewState(viewState) : viewState;\n }\n\n getViewport(viewId: string): Viewport | undefined {\n return this._viewportMap[viewId];\n }\n\n /**\n * Unproject pixel coordinates on screen onto world coordinates,\n * (possibly [lon, lat]) on map.\n * - [x, y] => [lng, lat]\n * - [x, y, z] => [lng, lat, Z]\n * @param {Array} xyz -\n * @param {Object} opts - options\n * @param {Object} opts.topLeft=true - Whether origin is top left\n * @return {Array|null} - [lng, lat, Z] or [X, Y, Z]\n */\n unproject(xyz: number[], opts?: {topLeft?: boolean}): number[] | null {\n const viewports = this.getViewports();\n const pixel = {x: xyz[0], y: xyz[1]};\n for (let i = viewports.length - 1; i >= 0; --i) {\n const viewport = viewports[i];\n if (viewport.containsPixel(pixel)) {\n const p = xyz.slice();\n p[0] -= viewport.x;\n p[1] -= viewport.y;\n return viewport.unproject(p, opts);\n }\n }\n return null;\n }\n\n /** Update the manager with new Deck props */\n setProps(props: {views?: View[]; viewState?: any; width?: number; height?: number}) {\n if (props.views) {\n this._setViews(props.views);\n }\n\n if (props.viewState) {\n this._setViewState(props.viewState);\n }\n\n if ('width' in props || 'height' in props) {\n this._setSize(props.width as number, props.height as number);\n }\n\n // Important: avoid invoking _update() inside itself\n // Nested updates result in unexpected side effects inside _rebuildViewports()\n // when using auto control in pure-js\n if (!this._isUpdating) {\n this._update();\n }\n }\n\n //\n // PRIVATE METHODS\n //\n\n private _update(): void {\n this._isUpdating = true;\n\n // Only rebuild viewports if the update flag is set\n if (this._needsUpdate) {\n this._needsUpdate = false;\n this._rebuildViewports();\n }\n\n // If viewport transition(s) are triggered during viewports update, controller(s)\n // will immediately call `onViewStateChange` which calls `viewManager.setProps` again.\n if (this._needsUpdate) {\n this._needsUpdate = false;\n this._rebuildViewports();\n }\n\n this._isUpdating = false;\n }\n\n private _setSize(width: number, height: number): void {\n if (width !== this.width || height !== this.height) {\n this.width = width;\n this.height = height;\n this.setNeedsUpdate('Size changed');\n }\n }\n\n // Update the view descriptor list and set change flag if needed\n // Does not actually rebuild the `Viewport`s until `getViewports` is called\n private _setViews(views: View[]): void {\n views = flatten(views, Boolean);\n\n const viewsChanged = this._diffViews(views, this.views);\n if (viewsChanged) {\n this.setNeedsUpdate('views changed');\n }\n\n this.views = views;\n }\n\n private _setViewState(viewState: any): void {\n if (viewState) {\n const viewStateChanged = !deepEqual(viewState, this.viewState);\n\n if (viewStateChanged) {\n this.setNeedsUpdate('viewState changed');\n }\n\n this.viewState = viewState;\n } else {\n log.warn('missing `viewState` or `initialViewState`')();\n }\n }\n\n private _onViewStateChange(viewId: string, event: ViewStateChangeParameters) {\n if (this._eventCallbacks.onViewStateChange) {\n this._eventCallbacks.onViewStateChange({...event, viewId});\n }\n }\n\n private _createController(\n view: View,\n props: {id: string; type: ConstructorOf>}\n ): Controller {\n const Controller = props.type;\n\n const controller = new Controller({\n timeline: this.timeline,\n eventManager: this._eventManager,\n // Set an internal callback that calls the prop callback if provided\n onViewStateChange: this._onViewStateChange.bind(this, props.id),\n onStateChange: this._eventCallbacks.onInteractionStateChange,\n makeViewport: viewState =>\n this.getView(view.id)?.makeViewport({\n viewState,\n width: this.width,\n height: this.height\n })\n });\n\n return controller;\n }\n\n private _updateController(\n view: View,\n viewState: any,\n viewport: Viewport,\n controller?: Controller | null\n ): Controller | null {\n const controllerProps = view.controller;\n if (controllerProps) {\n const resolvedProps = {\n ...viewState,\n ...controllerProps,\n id: view.id,\n x: viewport.x,\n y: viewport.y,\n width: viewport.width,\n height: viewport.height\n };\n\n // TODO - check if view / controller type has changed, and replace the controller\n if (!controller) {\n controller = this._createController(view, resolvedProps);\n }\n if (controller) {\n controller.setProps(resolvedProps);\n }\n return controller;\n }\n return null;\n }\n\n // Rebuilds viewports from descriptors towards a certain window size\n private _rebuildViewports(): void {\n const {views} = this;\n\n const oldControllers = this.controllers;\n this._viewports = [];\n this.controllers = {};\n\n let invalidateControllers = false;\n // Create controllers in reverse order, so that views on top receive events first\n for (let i = views.length; i--; ) {\n const view = views[i];\n const viewState = this.getViewState(view);\n const viewport = view.makeViewport({viewState, width: this.width, height: this.height});\n\n let oldController = oldControllers[view.id];\n const hasController = Boolean(view.controller);\n if (hasController && !oldController) {\n // When a new controller is added, invalidate all controllers below it so that\n // events are registered in the correct order\n invalidateControllers = true;\n }\n if ((invalidateControllers || !hasController) && oldController) {\n // Remove and reattach invalidated controller\n oldController.finalize();\n oldController = null;\n }\n\n // Update the controller\n this.controllers[view.id] = this._updateController(view, viewState, viewport, oldController);\n\n this._viewports.unshift(viewport);\n }\n\n // Remove unused controllers\n for (const id in oldControllers) {\n const oldController = oldControllers[id];\n if (oldController && !this.controllers[id]) {\n oldController.finalize();\n }\n }\n\n this._buildViewportMap();\n }\n\n _buildViewportMap(): void {\n // Build a view id to view index\n this._viewportMap = {};\n this._viewports.forEach(viewport => {\n if (viewport.id) {\n // TODO - issue warning if multiple viewports use same id\n this._viewportMap[viewport.id] = this._viewportMap[viewport.id] || viewport;\n }\n });\n }\n\n // Check if viewport array has changed, returns true if any change\n // Note that descriptors can be the same\n _diffViews(newViews: View[], oldViews: View[]): boolean {\n if (newViews.length !== oldViews.length) {\n return true;\n }\n\n return newViews.some((_, i) => !newViews[i].equals(oldViews[i]));\n }\n}\n","import {Framebuffer, Texture2D, withParameters} from '@luma.gl/core';\nimport {OPERATION} from '../lib/constants';\nimport LayersPass from './layers-pass';\n\nimport type {LayersPassRenderOptions} from './layers-pass';\n\ntype MaskPassRenderOptions = LayersPassRenderOptions & {\n /** The channel to render into, 0:red, 1:green, 2:blue, 3:alpha */\n channel: number;\n};\n\nexport default class MaskPass extends LayersPass {\n maskMap: Texture2D;\n fbo: Framebuffer;\n\n constructor(gl, props: {id: string; mapSize?: number}) {\n super(gl, props);\n\n const {mapSize = 2048} = props;\n\n this.maskMap = new Texture2D(gl, {\n width: mapSize,\n height: mapSize,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.LINEAR,\n [gl.TEXTURE_MAG_FILTER]: gl.LINEAR,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n });\n\n this.fbo = new Framebuffer(gl, {\n id: 'maskmap',\n width: mapSize,\n height: mapSize,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: this.maskMap\n }\n });\n }\n\n render(options: MaskPassRenderOptions) {\n const gl = this.gl;\n\n const colorMask = [false, false, false, false];\n colorMask[options.channel] = true;\n\n return withParameters(\n gl,\n {\n clearColor: [255, 255, 255, 255],\n blend: true,\n blendFunc: [gl.ZERO, gl.ONE],\n blendEquation: gl.FUNC_SUBTRACT,\n colorMask,\n depthTest: false\n },\n () => super.render({...options, target: this.fbo, pass: 'mask'})\n );\n }\n\n shouldDrawLayer(layer) {\n return layer.props.operation === OPERATION.MASK;\n }\n\n delete() {\n this.fbo.delete();\n this.maskMap.delete();\n }\n}\n","import {Texture2D} from '@luma.gl/core';\n// import {readPixelsToArray} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport MaskPass from '../../passes/mask-pass';\nimport {OPERATION} from '../../lib/constants';\nimport {getMaskBounds, getMaskViewport} from './utils';\nimport log from '../../utils/log';\n\nimport type {Effect, PreRenderOptions} from '../../lib/effect';\nimport type Layer from '../../lib/layer';\nimport type Viewport from '../../viewports/viewport';\nimport type {MaskBounds} from './utils';\nimport type {CoordinateSystem} from '../../lib/constants';\n\ntype Mask = {\n /** The channel index */\n index: number;\n bounds: MaskBounds;\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\ntype Channel = {\n id: string;\n index: number;\n layers: Layer[];\n bounds: MaskBounds;\n maskBounds: MaskBounds;\n layerBounds: MaskBounds[];\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\n// Class to manage mask effect\nexport default class MaskEffect implements Effect {\n id = 'mask-effect';\n props = null;\n useInPicking = true;\n\n private dummyMaskMap?: Texture2D;\n private channels: (Channel | null)[] = [];\n private masks: Record | null = null;\n private maskPass?: MaskPass;\n private maskMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {layers, layerFilter, viewports, onViewportActive, views}: PreRenderOptions\n ): void {\n if (!this.dummyMaskMap) {\n this.dummyMaskMap = new Texture2D(gl, {\n width: 1,\n height: 1\n });\n }\n\n const maskLayers = layers.filter(l => l.props.visible && l.props.operation === OPERATION.MASK);\n if (maskLayers.length === 0) {\n this.masks = null;\n this.channels.length = 0;\n return;\n }\n this.masks = {};\n\n if (!this.maskPass) {\n this.maskPass = new MaskPass(gl, {id: 'default-mask'});\n this.maskMap = this.maskPass.maskMap;\n }\n\n // Map layers to channels\n const channelMap = this._sortMaskChannels(maskLayers);\n // TODO - support multiple views\n const viewport = viewports[0];\n const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);\n\n for (const maskId in channelMap) {\n this._renderChannel(channelMap[maskId], {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n }\n\n // // Debug show FBO contents on screen\n // const color = readPixelsToArray(this.maskMap);\n // let canvas = document.getElementById('fbo-canvas');\n // if (!canvas) {\n // canvas = document.createElement('canvas');\n // canvas.id = 'fbo-canvas';\n // canvas.width = this.maskMap.width;\n // canvas.height = this.maskMap.height;\n // canvas.style.zIndex = 100;\n // canvas.style.position = 'absolute';\n // canvas.style.right = 0;\n // canvas.style.border = 'blue 1px solid';\n // canvas.style.width = '256px';\n // canvas.style.transform = 'scaleY(-1)';\n // document.body.appendChild(canvas);\n // }\n // const ctx = canvas.getContext('2d');\n // const imageData = ctx.createImageData(this.maskMap.width, this.maskMap.height);\n // for (let i = 0; i < color.length; i += 4) {\n // imageData.data[i + 0] = color[i + 0];\n // imageData.data[i + 1] = color[i + 1];\n // imageData.data[i + 2] = color[i + 2];\n // imageData.data[i + 3] = color[i + 3] + 128;\n // }\n // ctx.putImageData(imageData, 0, 0);\n }\n\n private _renderChannel(\n channelInfo: Channel,\n {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ) {\n const oldChannelInfo = this.channels[channelInfo.index];\n if (!oldChannelInfo) {\n return;\n }\n\n const maskChanged =\n // If a channel is new\n channelInfo === oldChannelInfo ||\n // If sublayers have changed\n oldChannelInfo.layers.length !== channelInfo.layers.length ||\n // If a sublayer's positions have been updated, the cached bounds will change shallowly\n channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);\n\n channelInfo.bounds = oldChannelInfo.bounds;\n channelInfo.maskBounds = oldChannelInfo.maskBounds;\n this.channels[channelInfo.index] = channelInfo;\n\n if (maskChanged || viewportChanged) {\n // Recalculate mask bounds\n this.lastViewport = viewport;\n\n channelInfo.bounds = getMaskBounds({layers: channelInfo.layers, viewport});\n\n if (maskChanged || !equals(channelInfo.bounds, oldChannelInfo.bounds)) {\n // Rerender mask FBO\n const {maskPass, maskMap} = this;\n\n const maskViewport = getMaskViewport({\n bounds: channelInfo.bounds,\n viewport,\n width: maskMap.width,\n height: maskMap.height\n });\n\n channelInfo.maskBounds = maskViewport ? maskViewport.getBounds() : [0, 0, 1, 1];\n\n // @ts-ignore (2532) This method is only called from preRender where maskPass is defined\n maskPass.render({\n pass: 'mask',\n channel: channelInfo.index,\n layers: channelInfo.layers,\n layerFilter,\n viewports: maskViewport ? [maskViewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n devicePixelRatio: 1\n }\n });\n }\n }\n\n // @ts-ignore (2532) This method is only called from preRender where masks is defined\n this.masks[channelInfo.id] = {\n index: channelInfo.index,\n bounds: channelInfo.maskBounds,\n coordinateOrigin: channelInfo.coordinateOrigin,\n coordinateSystem: channelInfo.coordinateSystem\n };\n }\n\n /**\n * Find a channel to render each mask into\n * If a maskId already exists, diff and update the existing channel\n * Otherwise replace a removed mask\n * Otherwise create a new channel\n * Returns a map from mask layer id to channel info\n */\n private _sortMaskChannels(maskLayers: Layer[]): Record {\n const channelMap = {};\n let channelCount = 0;\n for (const layer of maskLayers) {\n const {id} = layer.root;\n let channelInfo = channelMap[id];\n if (!channelInfo) {\n if (++channelCount > 4) {\n log.warn('Too many mask layers. The max supported is 4')();\n continue; // eslint-disable-line no-continue\n }\n channelInfo = {\n id,\n index: this.channels.findIndex(c => c?.id === id),\n layers: [],\n layerBounds: [],\n coordinateOrigin: layer.root.props.coordinateOrigin,\n coordinateSystem: layer.root.props.coordinateSystem\n };\n channelMap[id] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n }\n\n for (let i = 0; i < 4; i++) {\n const channelInfo = this.channels[i];\n if (!channelInfo || !(channelInfo.id in channelMap)) {\n // The mask id at this channel no longer exists\n this.channels[i] = null;\n }\n }\n\n for (const maskId in channelMap) {\n const channelInfo = channelMap[maskId];\n\n if (channelInfo.index < 0) {\n channelInfo.index = this.channels.findIndex(c => !c);\n this.channels[channelInfo.index] = channelInfo;\n }\n }\n return channelMap;\n }\n\n getModuleParameters(): {\n maskMap: Texture2D;\n maskChannels: Record | null;\n } {\n return {\n maskMap: this.masks ? this.maskMap : this.dummyMaskMap,\n maskChannels: this.masks\n };\n }\n\n cleanup(): void {\n if (this.dummyMaskMap) {\n this.dummyMaskMap.delete();\n this.dummyMaskMap = undefined;\n }\n\n if (this.maskPass) {\n this.maskPass.delete();\n this.maskPass = undefined;\n this.maskMap = undefined;\n }\n\n this.lastViewport = undefined;\n this.masks = null;\n this.channels.length = 0;\n }\n}\n","import log from '../../utils/log';\nimport OrthographicView from '../../views/orthographic-view';\nimport WebMercatorViewport from '../../viewports/web-mercator-viewport';\nimport {fitBounds} from '@math.gl/web-mercator';\n\nimport type Layer from '../../lib/layer';\nimport type Viewport from '../../viewports/viewport';\n\nexport type MaskBounds = [number, number, number, number];\n\n/*\n * Compute the bounds of the mask in world space, such that it covers an\n * area currently visible (extended by a buffer) or the area of the masking\n * data, whichever is smaller\n */\nexport function getMaskBounds({\n layers,\n viewport\n}: {\n layers: Layer[];\n viewport: Viewport;\n}): MaskBounds {\n // Join the bounds of layer data\n let bounds: MaskBounds | null = null;\n for (const layer of layers) {\n const subLayerBounds = layer.getBounds();\n if (subLayerBounds) {\n if (bounds) {\n bounds[0] = Math.min(bounds[0], subLayerBounds[0][0]);\n bounds[1] = Math.min(bounds[1], subLayerBounds[0][1]);\n bounds[2] = Math.max(bounds[2], subLayerBounds[1][0]);\n bounds[3] = Math.max(bounds[3], subLayerBounds[1][1]);\n } else {\n bounds = [\n subLayerBounds[0][0],\n subLayerBounds[0][1],\n subLayerBounds[1][0],\n subLayerBounds[1][1]\n ];\n }\n }\n }\n const viewportBounds = viewport.getBounds();\n if (!bounds) {\n return viewportBounds;\n }\n\n // Expand viewport bounds by 2X. Heurestically chosen to avoid masking\n // errors when mask is partially out of view\n const paddedBounds = _doubleBounds(viewportBounds);\n\n // When bounds of the mask are smaller than the viewport bounds simply use\n // mask bounds, so as to maximize resolution & avoid mask rerenders\n if (\n bounds[2] - bounds[0] < paddedBounds[2] - paddedBounds[0] ||\n bounds[3] - bounds[1] < paddedBounds[3] - paddedBounds[1]\n ) {\n return bounds;\n }\n\n // As viewport shrinks, to avoid pixelation along mask edges\n // we need to reduce the bounds and only render the visible portion\n // of the mask.\n // We pad the viewport bounds to capture the section\n // of the mask just outside the viewport to correctly maskByInstance.\n // Intersect mask & padded viewport bounds\n bounds[0] = Math.max(bounds[0], paddedBounds[0]);\n bounds[1] = Math.max(bounds[1], paddedBounds[1]);\n bounds[2] = Math.min(bounds[2], paddedBounds[2]);\n bounds[3] = Math.min(bounds[3], paddedBounds[3]);\n return bounds;\n}\n\n/*\n * Compute viewport to render the mask into, covering the given bounds\n */\nexport function getMaskViewport({\n bounds,\n viewport,\n width,\n height\n}: {\n bounds: MaskBounds;\n viewport: Viewport;\n width: number;\n height: number;\n}): Viewport | null {\n if (bounds[2] <= bounds[0] || bounds[3] <= bounds[1]) {\n return null;\n }\n\n if (viewport.resolution !== undefined) {\n log.warn('MaskExtension is not supported in GlobeView')();\n return null;\n }\n\n // Single pixel border to prevent mask bleeding at edge of texture\n const padding = 1;\n width -= padding * 2;\n height -= padding * 2;\n\n if (viewport.isGeospatial) {\n const {longitude, latitude, zoom} = fitBounds({\n width,\n height,\n bounds: [\n [bounds[0], bounds[1]],\n [bounds[2], bounds[3]]\n ],\n maxZoom: 20\n });\n return new WebMercatorViewport({\n longitude,\n latitude,\n zoom,\n x: padding,\n y: padding,\n width,\n height\n });\n }\n\n const center = [(bounds[0] + bounds[2]) / 2, (bounds[1] + bounds[3]) / 2, 0];\n const scale = Math.min(\n 1048576, // maxZoom of 20: Math.pow(2, 20) = 1048576\n width / (bounds[2] - bounds[0]),\n height / (bounds[3] - bounds[1])\n );\n\n return new OrthographicView({\n x: padding,\n y: padding\n }).makeViewport({\n width,\n height,\n viewState: {\n target: center,\n zoom: Math.log2(scale)\n }\n });\n}\n\nfunction _doubleBounds(bounds: MaskBounds): MaskBounds {\n const size = {\n x: bounds[2] - bounds[0],\n y: bounds[3] - bounds[1]\n };\n const center = {\n x: bounds[0] + 0.5 * size.x,\n y: bounds[1] + 0.5 * size.y\n };\n return [center.x - size.x, center.y - size.y, center.x + size.x, center.y + size.y];\n}\n","import {deepEqual} from '../utils/deep-equal';\nimport LightingEffect from '../effects/lighting/lighting-effect';\nimport MaskEffect from '../effects/mask/mask-effect';\nimport type {Effect} from './effect';\n\nconst DEFAULT_LIGHTING_EFFECT = new LightingEffect();\n\nexport default class EffectManager {\n effects: Effect[];\n _internalEffects: Effect[];\n _needsRedraw: false | string;\n\n constructor() {\n this.effects = [];\n this._internalEffects = [];\n this._needsRedraw = 'Initial render';\n this.setEffects();\n }\n\n setProps(props) {\n if ('effects' in props) {\n if (props.effects.length !== this.effects.length || !deepEqual(props.effects, this.effects)) {\n this.setEffects(props.effects);\n this._needsRedraw = 'effects changed';\n }\n }\n }\n\n needsRedraw(opts = {clearRedrawFlags: false}): false | string {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n\n getEffects() {\n return this._internalEffects;\n }\n\n finalize() {\n this.cleanup();\n }\n\n // Private\n setEffects(effects: Effect[] = []) {\n this.cleanup();\n this.effects = effects;\n\n this._internalEffects = effects.slice();\n // Unique MaskEffect per EffectManager as GL context may be different\n this._internalEffects.push(new MaskEffect());\n if (!effects.some(effect => effect instanceof LightingEffect)) {\n this._internalEffects.push(DEFAULT_LIGHTING_EFFECT);\n }\n }\n\n cleanup() {\n for (const effect of this.effects) {\n effect.cleanup();\n }\n\n for (const effect of this._internalEffects) {\n effect.cleanup();\n }\n this.effects.length = 0;\n this._internalEffects.length = 0;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport log from '../../utils/log';\nimport type Layer from '../layer';\nimport type Viewport from '../../viewports/viewport';\nimport type {PickingColorDecoder} from '../../passes/pick-layers-pass';\n\nexport type PickedPixel = {\n pickedColor: Uint8Array | null;\n pickedLayer?: Layer;\n pickedViewports?: Viewport[];\n pickedX?: number;\n pickedY?: number;\n pickedObjectIndex: number;\n};\n\nconst NO_PICKED_OBJECT = {\n pickedColor: null,\n pickedObjectIndex: -1\n};\n\n/* eslint-disable max-depth, max-statements */\n/**\n * Pick at a specified pixel with a tolerance radius\n * Returns the closest object to the pixel in shape `{pickedColor, pickedLayer, pickedObjectIndex}`\n */\nexport function getClosestObject({\n pickedColors,\n decodePickingColor,\n deviceX,\n deviceY,\n deviceRadius,\n deviceRect\n}: {\n pickedColors: Uint8Array;\n decodePickingColor: PickingColorDecoder;\n deviceX: number;\n deviceY: number;\n deviceRadius: number;\n deviceRect: {x: number; y: number; width: number; height: number};\n}): PickedPixel {\n // Traverse all pixels in picking results and find the one closest to the supplied\n // [deviceX, deviceY]\n const {x, y, width, height} = deviceRect;\n let minSquareDistanceToCenter = deviceRadius * deviceRadius;\n let closestPixelIndex = -1;\n let i = 0;\n\n for (let row = 0; row < height; row++) {\n const dy = row + y - deviceY;\n const dy2 = dy * dy;\n\n if (dy2 > minSquareDistanceToCenter) {\n // skip this row\n i += 4 * width;\n } else {\n for (let col = 0; col < width; col++) {\n // Decode picked layer from color\n const pickedLayerIndex = pickedColors[i + 3] - 1;\n\n if (pickedLayerIndex >= 0) {\n const dx = col + x - deviceX;\n const d2 = dx * dx + dy2;\n\n if (d2 <= minSquareDistanceToCenter) {\n minSquareDistanceToCenter = d2;\n closestPixelIndex = i;\n }\n }\n i += 4;\n }\n }\n }\n\n if (closestPixelIndex >= 0) {\n // Decode picked object index from color\n const pickedColor = pickedColors.slice(closestPixelIndex, closestPixelIndex + 4);\n const pickedObject = decodePickingColor(pickedColor);\n if (pickedObject) {\n const dy = Math.floor(closestPixelIndex / 4 / width);\n const dx = closestPixelIndex / 4 - dy * width;\n return {\n ...pickedObject,\n pickedColor,\n pickedX: x + dx,\n pickedY: y + dy\n };\n }\n log.error('Picked non-existent layer. Is picking buffer corrupt?')();\n }\n return NO_PICKED_OBJECT;\n}\n\n/**\n * Examines a picking buffer for unique colors\n * Returns array of unique objects in shape `{x, y, pickedColor, pickedLayer, pickedObjectIndex}`\n */\nexport function getUniqueObjects({\n pickedColors,\n decodePickingColor\n}: {\n pickedColors: Uint8Array;\n decodePickingColor: PickingColorDecoder;\n}): PickedPixel[] {\n const uniqueColors = new Map();\n\n // Traverse all pixels in picking results and get unique colors\n if (pickedColors) {\n for (let i = 0; i < pickedColors.length; i += 4) {\n // Decode picked layer from color\n const pickedLayerIndex = pickedColors[i + 3] - 1;\n\n if (pickedLayerIndex >= 0) {\n const pickedColor = pickedColors.slice(i, i + 4);\n const colorKey = pickedColor.join(',');\n // eslint-disable-next-line\n if (!uniqueColors.has(colorKey)) {\n const pickedObject = decodePickingColor(pickedColor);\n // eslint-disable-next-line\n if (pickedObject) {\n uniqueColors.set(colorKey, {\n ...pickedObject,\n color: pickedColor\n });\n } else {\n log.error('Picked non-existent layer. Is picking buffer corrupt?')();\n }\n }\n }\n }\n }\n\n return Array.from(uniqueColors.values());\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type Layer from '../layer';\nimport type Viewport from '../../viewports/viewport';\nimport type {PickedPixel} from './query-object';\n\nexport interface PickingInfo {\n color: Uint8Array | null;\n layer: Layer | null;\n sourceLayer?: Layer | null;\n viewport?: Viewport;\n index: number;\n picked: boolean;\n object?: any;\n x: number;\n y: number;\n pixel?: [number, number];\n coordinate?: number[];\n devicePixel?: [number, number];\n pixelRatio: number;\n}\n\nexport interface GetPickingInfoParams {\n info: PickingInfo;\n mode: string;\n sourceLayer: Layer | null;\n}\n\n/** Generates some basic information of the picking action: x, y, coordinates etc.\n * Regardless if anything is picked\n */\nexport function getEmptyPickingInfo({\n pickInfo,\n viewports,\n pixelRatio,\n x,\n y,\n z\n}: {\n pickInfo?: PickedPixel;\n viewports: Viewport[];\n pixelRatio: number;\n x: number;\n y: number;\n z?: number;\n}): PickingInfo {\n // If more than one viewports are used in the picking pass, locate the viewport that\n // drew the picked pixel\n let pickedViewport = viewports[0];\n if (viewports.length > 1) {\n // Find the viewport that contain the picked pixel\n pickedViewport = getViewportFromCoordinates(pickInfo?.pickedViewports || viewports, {x, y});\n }\n let coordinate: number[] | undefined;\n if (pickedViewport) {\n const point = [x - pickedViewport.x, y - pickedViewport.y];\n if (z !== undefined) {\n point[2] = z;\n }\n coordinate = pickedViewport.unproject(point);\n }\n\n return {\n color: null,\n layer: null,\n viewport: pickedViewport,\n index: -1,\n picked: false,\n x,\n y,\n pixel: [x, y],\n coordinate,\n devicePixel:\n pickInfo && 'pickedX' in pickInfo\n ? [pickInfo.pickedX as number, pickInfo.pickedY as number]\n : undefined,\n pixelRatio\n };\n}\n\n/* eslint-disable max-depth */\n/** Generates the picking info of a picking operation */\nexport function processPickInfo(opts: {\n pickInfo: PickedPixel;\n lastPickedInfo: {\n index: number;\n layerId: string | null;\n info: PickingInfo | null;\n };\n mode: string;\n layers: Layer[];\n viewports: Viewport[];\n pixelRatio: number;\n x: number;\n y: number;\n z?: number;\n}): Map {\n const {pickInfo, lastPickedInfo, mode, layers} = opts;\n const {pickedColor, pickedLayer, pickedObjectIndex} = pickInfo;\n\n const affectedLayers = pickedLayer ? [pickedLayer] : [];\n\n if (mode === 'hover') {\n // only invoke onHover events if picked object has changed\n const lastPickedPixelIndex = lastPickedInfo.index;\n const lastPickedLayerId = lastPickedInfo.layerId;\n const pickedLayerId = pickedLayer ? pickedLayer.props.id : null;\n\n // proceed only if picked object changed\n if (pickedLayerId !== lastPickedLayerId || pickedObjectIndex !== lastPickedPixelIndex) {\n if (pickedLayerId !== lastPickedLayerId) {\n // We cannot store a ref to lastPickedLayer in the context because\n // the state of an outdated layer is no longer valid\n // and the props may have changed\n const lastPickedLayer = layers.find(layer => layer.props.id === lastPickedLayerId);\n if (lastPickedLayer) {\n // Let leave event fire before enter event\n affectedLayers.unshift(lastPickedLayer);\n }\n }\n\n // Update layer manager context\n lastPickedInfo.layerId = pickedLayerId;\n lastPickedInfo.index = pickedObjectIndex;\n lastPickedInfo.info = null;\n }\n }\n\n const baseInfo = getEmptyPickingInfo(opts);\n\n // Use a Map to store all picking infos.\n // The following two forEach loops are the result of\n // https://github.com/visgl/deck.gl/issues/443\n // Please be very careful when changing this pattern\n const infos = new Map();\n\n // Make sure infos always contain something even if no layer is affected\n infos.set(null, baseInfo);\n\n affectedLayers.forEach(layer => {\n let info = {...baseInfo};\n\n if (layer === pickedLayer) {\n info.color = pickedColor;\n info.index = pickedObjectIndex;\n info.picked = true;\n }\n\n info = getLayerPickingInfo({layer, info, mode});\n const rootLayer = info.layer as Layer;\n\n if (layer === pickedLayer && mode === 'hover') {\n lastPickedInfo.info = info;\n }\n\n // This guarantees that there will be only one copy of info for\n // one composite layer\n infos.set(rootLayer.id, info);\n\n if (mode === 'hover') {\n rootLayer.updateAutoHighlight(info);\n }\n });\n\n return infos;\n}\n\n/** Walk up the layer composite chain to populate the info object */\nexport function getLayerPickingInfo({\n layer,\n info,\n mode\n}: {\n layer: Layer;\n info: PickingInfo;\n mode: string;\n}): PickingInfo {\n while (layer && info) {\n // For a composite layer, sourceLayer will point to the sublayer\n // where the event originates from.\n // It provides additional context for the composite layer's\n // getPickingInfo() method to populate the info object\n const sourceLayer = info.layer || null;\n info.sourceLayer = sourceLayer;\n info.layer = layer;\n // layer.pickLayer() function requires a non-null ```layer.state```\n // object to function properly. So the layer referenced here\n // must be the \"current\" layer, not an \"out-dated\" / \"invalidated\" layer\n info = layer.getPickingInfo({info, mode, sourceLayer});\n layer = layer.parent as Layer;\n }\n return info;\n}\n\n/** Indentifies which viewport, if any corresponds to x and y\n If multiple viewports contain the target pixel, last viewport drawn is returend\n Returns first viewport if no match */\nfunction getViewportFromCoordinates(\n viewports: Viewport[],\n pixel: {x: number; y: number}\n): Viewport {\n // find the last viewport that contains the pixel\n for (let i = viewports.length - 1; i >= 0; i--) {\n const viewport = viewports[i];\n if (viewport.containsPixel(pixel)) {\n return viewport;\n }\n }\n return viewports[0];\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Framebuffer,\n Texture2D,\n isWebGL2,\n readPixelsToArray,\n cssToDeviceRatio,\n cssToDevicePixels\n} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport PickLayersPass, {PickingColorDecoder} from '../passes/pick-layers-pass';\nimport {getClosestObject, getUniqueObjects, PickedPixel} from './picking/query-object';\nimport {\n processPickInfo,\n getLayerPickingInfo,\n getEmptyPickingInfo,\n PickingInfo\n} from './picking/pick-info';\n\nimport type {Framebuffer as LumaFramebuffer} from '@luma.gl/webgl';\nimport type {FilterContext, Rect} from '../passes/layers-pass';\nimport type Layer from './layer';\nimport type {Effect} from './effect';\nimport type View from '../views/view';\nimport type Viewport from '../viewports/viewport';\n\nexport type PickByPointOptions = {\n x: number;\n y: number;\n radius?: number;\n depth?: number;\n mode?: string;\n unproject3D?: boolean;\n};\n\nexport type PickByRectOptions = {\n x: number;\n y: number;\n width?: number;\n height?: number;\n mode?: string;\n maxObjects?: number | null;\n};\n\ntype PickOperationContext = {\n layers: Layer[];\n views: Record;\n viewports: Viewport[];\n onViewportActive: (viewport: Viewport) => void;\n effects: Effect[];\n};\n\n/** Manages picking in a Deck context */\nexport default class DeckPicker {\n gl: WebGLRenderingContext;\n pickingFBO?: LumaFramebuffer;\n depthFBO?: LumaFramebuffer;\n pickLayersPass: PickLayersPass;\n layerFilter?: (context: FilterContext) => boolean;\n\n /** Identifiers of the previously picked object, for callback tracking and auto highlight */\n lastPickedInfo: {\n index: number;\n layerId: string | null;\n info: PickingInfo | null;\n };\n\n _pickable: boolean = true;\n\n constructor(gl: WebGLRenderingContext) {\n this.gl = gl;\n this.pickLayersPass = new PickLayersPass(gl);\n this.lastPickedInfo = {\n index: -1,\n layerId: null,\n info: null\n };\n }\n\n setProps(props: any): void {\n if ('layerFilter' in props) {\n this.layerFilter = props.layerFilter;\n }\n\n if ('_pickable' in props) {\n this._pickable = props._pickable;\n }\n }\n\n finalize() {\n if (this.pickingFBO) {\n this.pickingFBO.delete();\n }\n if (this.depthFBO) {\n this.depthFBO.color.delete();\n this.depthFBO.delete();\n }\n }\n\n /** Pick the closest info at given coordinate */\n pickObject(opts: PickByPointOptions & PickOperationContext) {\n return this._pickClosestObject(opts);\n }\n\n /** Get all unique infos within a bounding box */\n pickObjects(opts: PickByRectOptions & PickOperationContext) {\n return this._pickVisibleObjects(opts);\n }\n\n // Returns a new picking info object by assuming the last picked object is still picked\n getLastPickedObject({x, y, layers, viewports}, lastPickedInfo = this.lastPickedInfo.info) {\n const lastPickedLayerId = lastPickedInfo && lastPickedInfo.layer && lastPickedInfo.layer.id;\n const lastPickedViewportId =\n lastPickedInfo && lastPickedInfo.viewport && lastPickedInfo.viewport.id;\n const layer = lastPickedLayerId ? layers.find(l => l.id === lastPickedLayerId) : null;\n const viewport =\n (lastPickedViewportId && viewports.find(v => v.id === lastPickedViewportId)) || viewports[0];\n const coordinate = viewport && viewport.unproject([x - viewport.x, y - viewport.y]);\n\n const info = {\n x,\n y,\n viewport,\n coordinate,\n layer\n };\n\n return {...lastPickedInfo, ...info};\n }\n\n // Private\n\n /** Ensures that picking framebuffer exists and matches the canvas size */\n _resizeBuffer() {\n const {gl} = this;\n\n // Create a frame buffer if not already available\n if (!this.pickingFBO) {\n this.pickingFBO = new Framebuffer(gl);\n\n if (Framebuffer.isSupported(gl, {colorBufferFloat: true})) {\n const depthFBO = new Framebuffer(gl);\n depthFBO.attach({\n [GL.COLOR_ATTACHMENT0]: new Texture2D(gl, {\n format: isWebGL2(gl) ? GL.RGBA32F : GL.RGBA,\n type: GL.FLOAT\n })\n });\n this.depthFBO = depthFBO;\n }\n }\n // Resize it to current canvas size (this is a noop if size hasn't changed)\n this.pickingFBO?.resize({width: gl.canvas.width, height: gl.canvas.height});\n this.depthFBO?.resize({width: gl.canvas.width, height: gl.canvas.height});\n }\n\n /** Preliminary filtering of the layers list. Skid picking pass if no layer is pickable. */\n _getPickable(layers: Layer[]): Layer[] | null {\n if (this._pickable === false) {\n return null;\n }\n const pickableLayers = layers.filter(layer => layer.isPickable() && !layer.isComposite);\n return pickableLayers.length ? pickableLayers : null;\n }\n\n // eslint-disable-next-line max-statements,complexity\n /** Pick the closest object at the given coordinate */\n _pickClosestObject({\n layers,\n views,\n viewports,\n x,\n y,\n radius = 0,\n depth = 1,\n mode = 'query',\n unproject3D,\n onViewportActive,\n effects\n }: PickByPointOptions & PickOperationContext): {\n result: PickingInfo[];\n emptyInfo: PickingInfo;\n } {\n const pickableLayers = this._getPickable(layers);\n const pixelRatio = cssToDeviceRatio(this.gl);\n\n if (!pickableLayers) {\n return {\n result: [],\n emptyInfo: getEmptyPickingInfo({viewports, x, y, pixelRatio})\n };\n }\n\n this._resizeBuffer();\n\n // Convert from canvas top-left to WebGL bottom-left coordinates\n // Top-left coordinates [x, y] to bottom-left coordinates [deviceX, deviceY]\n // And compensate for pixelRatio\n const devicePixelRange = cssToDevicePixels(this.gl, [x, y], true);\n const devicePixel = [\n devicePixelRange.x + Math.floor(devicePixelRange.width / 2),\n devicePixelRange.y + Math.floor(devicePixelRange.height / 2)\n ];\n\n const deviceRadius = Math.round(radius * pixelRatio);\n const {width, height} = this.pickingFBO as LumaFramebuffer;\n const deviceRect = this._getPickingRect({\n deviceX: devicePixel[0],\n deviceY: devicePixel[1],\n deviceRadius,\n deviceWidth: width,\n deviceHeight: height\n });\n\n const cullRect: Rect = {\n x: x - radius,\n y: y - radius,\n width: radius * 2 + 1,\n height: radius * 2 + 1\n };\n\n let infos: Map;\n const result: PickingInfo[] = [];\n const affectedLayers = new Set();\n\n for (let i = 0; i < depth; i++) {\n let pickInfo: PickedPixel;\n\n if (deviceRect) {\n const pickedResult = this._drawAndSample({\n layers: pickableLayers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect,\n effects,\n pass: `picking:${mode}`\n });\n\n pickInfo = getClosestObject({\n ...pickedResult,\n deviceX: devicePixel[0],\n deviceY: devicePixel[1],\n deviceRadius,\n deviceRect\n });\n } else {\n pickInfo = {\n pickedColor: null,\n pickedObjectIndex: -1\n };\n }\n\n let z;\n if (pickInfo.pickedLayer && unproject3D && this.depthFBO) {\n const pickedResultPass2 = this._drawAndSample(\n {\n layers: [pickInfo.pickedLayer],\n views,\n viewports,\n onViewportActive,\n deviceRect: {\n x: pickInfo.pickedX as number,\n y: pickInfo.pickedY as number,\n width: 1,\n height: 1\n },\n cullRect,\n effects,\n pass: `picking:${mode}:z`\n },\n true\n );\n // picked value is in common space (pixels) from the camera target (viewport.position)\n // convert it to meters from the ground\n z = pickedResultPass2.pickedColors[0];\n }\n\n // Only exclude if we need to run picking again.\n // We need to run picking again if an object is detected AND\n // we have not exhausted the requested depth.\n if (pickInfo.pickedLayer && i + 1 < depth) {\n affectedLayers.add(pickInfo.pickedLayer);\n pickInfo.pickedLayer.disablePickingIndex(pickInfo.pickedObjectIndex);\n }\n\n // This logic needs to run even if no object is picked.\n infos = processPickInfo({\n pickInfo,\n lastPickedInfo: this.lastPickedInfo,\n mode,\n layers: pickableLayers,\n viewports,\n x,\n y,\n z,\n pixelRatio\n });\n\n for (const info of infos.values()) {\n if (info.layer) {\n result.push(info);\n }\n }\n\n // If no object is picked stop.\n if (!pickInfo.pickedColor) {\n break;\n }\n }\n\n // reset only affected buffers\n for (const layer of affectedLayers) {\n layer.restorePickingColors();\n }\n\n return {result, emptyInfo: infos!.get(null) as PickingInfo};\n }\n\n /** Pick all objects within the given bounding box */\n _pickVisibleObjects({\n layers,\n views,\n viewports,\n x,\n y,\n width = 1,\n height = 1,\n mode = 'query',\n maxObjects = null,\n onViewportActive,\n effects\n }: PickByRectOptions & PickOperationContext): PickingInfo[] {\n const pickableLayers = this._getPickable(layers);\n\n if (!pickableLayers) {\n return [];\n }\n\n this._resizeBuffer();\n // Convert from canvas top-left to WebGL bottom-left coordinates\n // And compensate for pixelRatio\n const pixelRatio = cssToDeviceRatio(this.gl);\n const leftTop = cssToDevicePixels(this.gl, [x, y], true);\n\n // take left and top (y inverted in device pixels) from start location\n const deviceLeft = leftTop.x;\n const deviceTop = leftTop.y + leftTop.height;\n\n // take right and bottom (y inverted in device pixels) from end location\n const rightBottom = cssToDevicePixels(this.gl, [x + width, y + height], true);\n const deviceRight = rightBottom.x + rightBottom.width;\n const deviceBottom = rightBottom.y;\n\n const deviceRect = {\n x: deviceLeft,\n y: deviceBottom,\n // deviceTop and deviceRight represent the first pixel outside the desired rect\n width: deviceRight - deviceLeft,\n height: deviceTop - deviceBottom\n };\n\n const pickedResult = this._drawAndSample({\n layers: pickableLayers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect: {x, y, width, height},\n effects,\n pass: `picking:${mode}`\n });\n\n const pickInfos = getUniqueObjects(pickedResult);\n\n // Only return unique infos, identified by info.object\n const uniqueInfos = new Map();\n\n const isMaxObjects = Number.isFinite(maxObjects);\n\n for (let i = 0; i < pickInfos.length; i++) {\n if (isMaxObjects && maxObjects && uniqueInfos.size >= maxObjects) {\n break;\n }\n const pickInfo = pickInfos[i];\n let info: PickingInfo = {\n color: pickInfo.pickedColor,\n layer: null,\n index: pickInfo.pickedObjectIndex,\n picked: true,\n x,\n y,\n pixelRatio\n };\n\n info = getLayerPickingInfo({layer: pickInfo.pickedLayer as Layer, info, mode});\n if (!uniqueInfos.has(info.object)) {\n uniqueInfos.set(info.object, info);\n }\n }\n\n return Array.from(uniqueInfos.values());\n }\n\n /** Renders layers into the picking buffer with picking colors and read the pixels. */\n _drawAndSample(params: {\n deviceRect: Rect;\n pass: string;\n layers: Layer[];\n views: Record;\n viewports: Viewport[];\n onViewportActive: (viewport: Viewport) => void;\n cullRect?: Rect;\n effects: Effect[];\n }): {\n pickedColors: Uint8Array;\n decodePickingColor: PickingColorDecoder;\n };\n\n /** Renders layers into the picking buffer with encoded z values and read the pixels. */\n _drawAndSample(\n params: {\n deviceRect: Rect;\n pass: string;\n layers: Layer[];\n views: Record;\n viewports: Viewport[];\n onViewportActive: (viewport: Viewport) => void;\n cullRect?: Rect;\n effects: Effect[];\n },\n pickZ: true\n ): {\n pickedColors: Float32Array;\n decodePickingColor: null;\n };\n\n _drawAndSample(\n {\n layers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect,\n effects,\n pass\n }: {\n deviceRect: Rect;\n pass: string;\n layers: Layer[];\n views: Record;\n viewports: Viewport[];\n onViewportActive: (viewport: Viewport) => void;\n cullRect?: Rect;\n effects: Effect[];\n },\n pickZ: boolean = false\n ): {\n pickedColors: Uint8Array | Float32Array;\n decodePickingColor: PickingColorDecoder | null;\n } {\n const pickingFBO = pickZ ? this.depthFBO : this.pickingFBO;\n\n const {decodePickingColor} = this.pickLayersPass.render({\n layers,\n layerFilter: this.layerFilter,\n views,\n viewports,\n onViewportActive,\n pickingFBO,\n deviceRect,\n cullRect,\n effects,\n pass,\n pickZ\n });\n\n // Read from an already rendered picking buffer\n // Returns an Uint8ClampedArray of picked pixels\n const {x, y, width, height} = deviceRect;\n const pickedColors = new (pickZ ? Float32Array : Uint8Array)(width * height * 4);\n readPixelsToArray(pickingFBO, {\n sourceX: x,\n sourceY: y,\n sourceWidth: width,\n sourceHeight: height,\n target: pickedColors\n });\n\n return {pickedColors, decodePickingColor};\n }\n\n // Calculate a picking rect centered on deviceX and deviceY and clipped to device\n // Returns null if pixel is outside of device\n _getPickingRect({\n deviceX,\n deviceY,\n deviceRadius,\n deviceWidth,\n deviceHeight\n }: {\n deviceX: number;\n deviceY: number;\n deviceRadius: number;\n deviceWidth: number;\n deviceHeight: number;\n }): Rect | null {\n // Create a box of size `radius * 2 + 1` centered at [deviceX, deviceY]\n const x = Math.max(0, deviceX - deviceRadius);\n const y = Math.max(0, deviceY - deviceRadius);\n const width = Math.min(deviceWidth, deviceX + deviceRadius + 1) - x;\n const height = Math.min(deviceHeight, deviceY + deviceRadius + 1) - y;\n\n // x, y out of bounds.\n if (width <= 0 || height <= 0) {\n return null;\n }\n\n return {x, y, width, height};\n }\n}\n","// Copyright (c) 2015 - 2019 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* global document */\nconst defaultStyle: Partial = {\n zIndex: '1',\n position: 'absolute',\n pointerEvents: 'none',\n color: '#a0a7b4',\n backgroundColor: '#29323c',\n padding: '10px',\n top: '0',\n left: '0',\n display: 'none'\n};\n\nexport type TooltipContent =\n | null\n | string\n | {\n text?: string;\n html?: string;\n className?: string;\n style?: Partial;\n };\n\nexport default class Tooltip {\n private el: HTMLDivElement | null = null;\n\n isVisible: boolean = false;\n\n constructor(canvas: HTMLCanvasElement) {\n const canvasParent = canvas.parentElement;\n if (canvasParent) {\n this.el = document.createElement('div');\n this.el.className = 'deck-tooltip';\n Object.assign(this.el.style, defaultStyle);\n canvasParent.appendChild(this.el);\n }\n }\n\n setTooltip(displayInfo: TooltipContent, x?: number, y?: number): void {\n const el = this.el;\n if (!el) {\n return;\n }\n\n if (typeof displayInfo === 'string') {\n el.innerText = displayInfo;\n } else if (!displayInfo) {\n this.isVisible = false;\n el.style.display = 'none';\n return;\n } else {\n if (displayInfo.text) {\n el.innerText = displayInfo.text;\n }\n if (displayInfo.html) {\n el.innerHTML = displayInfo.html;\n }\n if (displayInfo.className) {\n el.className = displayInfo.className;\n }\n Object.assign(el.style, displayInfo.style);\n }\n this.isVisible = true;\n el.style.display = 'block';\n el.style.transform = `translate(${x}px, ${y}px)`;\n }\n\n remove(): void {\n if (this.el) {\n this.el.remove();\n this.el = null;\n }\n }\n}\n","import Resource from './resource';\nimport { FEATURES, hasFeatures } from '../features';\nimport { isWebGL2 } from '@luma.gl/gltools';\nimport { assert } from '../utils/assert';\nconst GL_QUERY_RESULT = 0x8866;\nconst GL_QUERY_RESULT_AVAILABLE = 0x8867;\nconst GL_TIME_ELAPSED_EXT = 0x88bf;\nconst GL_GPU_DISJOINT_EXT = 0x8fbb;\nconst GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8c88;\nconst GL_ANY_SAMPLES_PASSED = 0x8c2f;\nconst GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8d6a;\nexport default class Query extends Resource {\n get [Symbol.toStringTag]() {\n return 'Query';\n }\n\n static isSupported(gl) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n const webgl2 = isWebGL2(gl);\n const hasTimerQuery = hasFeatures(gl, FEATURES.TIMER_QUERY);\n let supported = webgl2 || hasTimerQuery;\n\n for (const key of opts) {\n switch (key) {\n case 'queries':\n supported = supported && webgl2;\n break;\n\n case 'timers':\n supported = supported && hasTimerQuery;\n break;\n\n default:\n assert(false);\n }\n }\n\n return supported;\n }\n\n constructor(gl) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(gl, opts);\n this.target = null;\n this._queryPending = false;\n this._pollingPromise = null;\n Object.seal(this);\n }\n\n beginTimeElapsedQuery() {\n return this.begin(GL_TIME_ELAPSED_EXT);\n }\n\n beginOcclusionQuery() {\n let {\n conservative = false\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.begin(conservative ? GL_ANY_SAMPLES_PASSED_CONSERVATIVE : GL_ANY_SAMPLES_PASSED);\n }\n\n beginTransformFeedbackQuery() {\n return this.begin(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);\n }\n\n begin(target) {\n if (this._queryPending) {\n return this;\n }\n\n this.target = target;\n this.gl2.beginQuery(this.target, this.handle);\n return this;\n }\n\n end() {\n if (this._queryPending) {\n return this;\n }\n\n if (this.target) {\n this.gl2.endQuery(this.target);\n this.target = null;\n this._queryPending = true;\n }\n\n return this;\n }\n\n isResultAvailable() {\n if (!this._queryPending) {\n return false;\n }\n\n const resultAvailable = this.gl2.getQueryParameter(this.handle, GL_QUERY_RESULT_AVAILABLE);\n\n if (resultAvailable) {\n this._queryPending = false;\n }\n\n return resultAvailable;\n }\n\n isTimerDisjoint() {\n return this.gl2.getParameter(GL_GPU_DISJOINT_EXT);\n }\n\n getResult() {\n return this.gl2.getQueryParameter(this.handle, GL_QUERY_RESULT);\n }\n\n getTimerMilliseconds() {\n return this.getResult() / 1e6;\n }\n\n createPoll() {\n let limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;\n\n if (this._pollingPromise) {\n return this._pollingPromise;\n }\n\n let counter = 0;\n this._pollingPromise = new Promise((resolve, reject) => {\n const poll = () => {\n if (this.isResultAvailable()) {\n resolve(this.getResult());\n this._pollingPromise = null;\n } else if (counter++ > limit) {\n reject('Timed out');\n this._pollingPromise = null;\n } else {\n requestAnimationFrame(poll);\n }\n };\n\n requestAnimationFrame(poll);\n });\n return this._pollingPromise;\n }\n\n _createHandle() {\n return Query.isSupported(this.gl) ? this.gl2.createQuery() : null;\n }\n\n _deleteHandle() {\n this.gl2.deleteQuery(this.handle);\n }\n\n}\n//# sourceMappingURL=query.js.map","import { isWebGL, createGLContext, instrumentGLContext, resizeGLContext, resetParameters } from '@luma.gl/gltools';\nimport { requestAnimationFrame, cancelAnimationFrame, Query, lumaStats, Framebuffer, log, assert } from '@luma.gl/webgl';\nimport { isBrowser } from '@probe.gl/env';\nconst isPage = isBrowser() && typeof document !== 'undefined';\nlet statIdCounter = 0;\nexport default class AnimationLoop {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n onCreateContext = opts => createGLContext(opts),\n onAddHTML = null,\n onInitialize = () => {},\n onRender = () => {},\n onFinalize = () => {},\n onError,\n gl = null,\n glOptions = {},\n debug = false,\n createFramebuffer = false,\n autoResizeViewport = true,\n autoResizeDrawingBuffer = true,\n stats = lumaStats.get(\"animation-loop-\".concat(statIdCounter++))\n } = props;\n let {\n useDevicePixels = true\n } = props;\n\n if ('useDevicePixelRatio' in props) {\n log.deprecated('useDevicePixelRatio', 'useDevicePixels')();\n useDevicePixels = props.useDevicePixelRatio;\n }\n\n this.props = {\n onCreateContext,\n onAddHTML,\n onInitialize,\n onRender,\n onFinalize,\n onError,\n gl,\n glOptions,\n debug,\n createFramebuffer\n };\n this.gl = gl;\n this.needsRedraw = null;\n this.timeline = null;\n this.stats = stats;\n this.cpuTime = this.stats.get('CPU Time');\n this.gpuTime = this.stats.get('GPU Time');\n this.frameRate = this.stats.get('Frame Rate');\n this._initialized = false;\n this._running = false;\n this._animationFrameId = null;\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._cpuStartTime = 0;\n this.setProps({\n autoResizeViewport,\n autoResizeDrawingBuffer,\n useDevicePixels\n });\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n this._pageLoadPromise = null;\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n\n delete() {\n this.stop();\n\n this._setDisplay(null);\n }\n\n setNeedsRedraw(reason) {\n assert(typeof reason === 'string');\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n\n setProps(props) {\n if ('autoResizeViewport' in props) {\n this.autoResizeViewport = props.autoResizeViewport;\n }\n\n if ('autoResizeDrawingBuffer' in props) {\n this.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;\n }\n\n if ('useDevicePixels' in props) {\n this.useDevicePixels = props.useDevicePixels;\n }\n\n return this;\n }\n\n start() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (this._running) {\n return this;\n }\n\n this._running = true;\n\n const startPromise = this._getPageLoadPromise().then(() => {\n if (!this._running || this._initialized) {\n return null;\n }\n\n this._createWebGLContext(opts);\n\n this._createFramebuffer();\n\n this._startEventHandling();\n\n this._initializeCallbackData();\n\n this._updateCallbackData();\n\n this._resizeCanvasDrawingBuffer();\n\n this._resizeViewport();\n\n this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;\n this._initialized = true;\n return this.onInitialize(this.animationProps);\n }).then(appContext => {\n if (this._running) {\n this._addCallbackData(appContext || {});\n\n if (appContext !== false) {\n this._startLoop();\n }\n }\n });\n\n if (this.props.onError) {\n startPromise.catch(this.props.onError);\n }\n\n return this;\n }\n\n redraw() {\n if (this.isContextLost()) {\n return this;\n }\n\n this._beginTimers();\n\n this._setupFrame();\n\n this._updateCallbackData();\n\n this._renderFrame(this.animationProps);\n\n this._clearNeedsRedraw();\n\n if (this.offScreen && this.gl.commit) {\n this.gl.commit();\n }\n\n if (this._resolveNextFrame) {\n this._resolveNextFrame(this);\n\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n }\n\n this._endTimers();\n\n return this;\n }\n\n stop() {\n if (this._running) {\n this._finalizeCallbackData();\n\n this._cancelAnimationFrame(this._animationFrameId);\n\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._animationFrameId = null;\n this._running = false;\n }\n\n return this;\n }\n\n attachTimeline(timeline) {\n this.timeline = timeline;\n return this.timeline;\n }\n\n detachTimeline() {\n this.timeline = null;\n }\n\n waitForRender() {\n this.setNeedsRedraw('waitForRender');\n\n if (!this._nextFramePromise) {\n this._nextFramePromise = new Promise(resolve => {\n this._resolveNextFrame = resolve;\n });\n }\n\n return this._nextFramePromise;\n }\n\n async toDataURL() {\n this.setNeedsRedraw('toDataURL');\n await this.waitForRender();\n return this.gl.canvas.toDataURL();\n }\n\n isContextLost() {\n return this.gl.isContextLost();\n }\n\n onCreateContext() {\n return this.props.onCreateContext(...arguments);\n }\n\n onInitialize() {\n return this.props.onInitialize(...arguments);\n }\n\n onRender() {\n return this.props.onRender(...arguments);\n }\n\n onFinalize() {\n return this.props.onFinalize(...arguments);\n }\n\n getHTMLControlValue(id) {\n let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n const element = document.getElementById(id);\n return element ? Number(element.value) : defaultValue;\n }\n\n setViewParameters() {\n log.removed('AnimationLoop.setViewParameters', 'AnimationLoop.setProps')();\n return this;\n }\n\n _startLoop() {\n const renderFrame = () => {\n if (!this._running) {\n return;\n }\n\n this.redraw();\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n };\n\n this._cancelAnimationFrame(this._animationFrameId);\n\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n }\n\n _getPageLoadPromise() {\n if (!this._pageLoadPromise) {\n this._pageLoadPromise = isPage ? new Promise((resolve, reject) => {\n if (isPage && document.readyState === 'complete') {\n resolve(document);\n return;\n }\n\n window.addEventListener('load', () => {\n resolve(document);\n });\n }) : Promise.resolve({});\n }\n\n return this._pageLoadPromise;\n }\n\n _setDisplay(display) {\n if (this.display) {\n this.display.delete();\n this.display.animationLoop = null;\n }\n\n if (display) {\n display.animationLoop = this;\n }\n\n this.display = display;\n }\n\n _cancelAnimationFrame(animationFrameId) {\n if (this.display && this.display.cancelAnimationFrame) {\n return this.display.cancelAnimationFrame(animationFrameId);\n }\n\n return cancelAnimationFrame(animationFrameId);\n }\n\n _requestAnimationFrame(renderFrameCallback) {\n if (this._running) {\n if (this.display && this.display.requestAnimationFrame) {\n return this.display.requestAnimationFrame(renderFrameCallback);\n }\n\n return requestAnimationFrame(renderFrameCallback);\n }\n\n return undefined;\n }\n\n _renderFrame() {\n if (this.display) {\n this.display._renderFrame(...arguments);\n\n return;\n }\n\n this.onRender(...arguments);\n }\n\n _clearNeedsRedraw() {\n this.needsRedraw = null;\n }\n\n _setupFrame() {\n this._resizeCanvasDrawingBuffer();\n\n this._resizeViewport();\n\n this._resizeFramebuffer();\n }\n\n _initializeCallbackData() {\n this.animationProps = {\n gl: this.gl,\n stop: this.stop,\n canvas: this.gl.canvas,\n framebuffer: this.framebuffer,\n useDevicePixels: this.useDevicePixels,\n needsRedraw: null,\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n time: 0,\n _timeline: this.timeline,\n _loop: this,\n _animationLoop: this,\n _mousePosition: null\n };\n }\n\n _updateCallbackData() {\n const {\n width,\n height,\n aspect\n } = this._getSizeAndAspect();\n\n if (width !== this.animationProps.width || height !== this.animationProps.height) {\n this.setNeedsRedraw('drawing buffer resized');\n }\n\n if (aspect !== this.animationProps.aspect) {\n this.setNeedsRedraw('drawing buffer aspect changed');\n }\n\n this.animationProps.width = width;\n this.animationProps.height = height;\n this.animationProps.aspect = aspect;\n this.animationProps.needsRedraw = this.needsRedraw;\n this.animationProps.engineTime = Date.now() - this.animationProps.startTime;\n\n if (this.timeline) {\n this.timeline.update(this.animationProps.engineTime);\n }\n\n this.animationProps.tick = Math.floor(this.animationProps.time / 1000 * 60);\n this.animationProps.tock++;\n this.animationProps.time = this.timeline ? this.timeline.getTime() : this.animationProps.engineTime;\n this.animationProps._offScreen = this.offScreen;\n }\n\n _finalizeCallbackData() {\n this.onFinalize(this.animationProps);\n }\n\n _addCallbackData(appContext) {\n if (typeof appContext === 'object' && appContext !== null) {\n this.animationProps = Object.assign({}, this.animationProps, appContext);\n }\n }\n\n _createWebGLContext(opts) {\n this.offScreen = opts.canvas && typeof OffscreenCanvas !== 'undefined' && opts.canvas instanceof OffscreenCanvas;\n opts = Object.assign({}, opts, this.props.glOptions);\n this.gl = this.props.gl ? instrumentGLContext(this.props.gl, opts) : this.onCreateContext(opts);\n\n if (!isWebGL(this.gl)) {\n throw new Error('AnimationLoop.onCreateContext - illegal context returned');\n }\n\n resetParameters(this.gl);\n\n this._createInfoDiv();\n }\n\n _createInfoDiv() {\n if (this.gl.canvas && this.props.onAddHTML) {\n const wrapperDiv = document.createElement('div');\n document.body.appendChild(wrapperDiv);\n wrapperDiv.style.position = 'relative';\n const div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '10px';\n div.style.bottom = '10px';\n div.style.width = '300px';\n div.style.background = 'white';\n wrapperDiv.appendChild(this.gl.canvas);\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n\n _getSizeAndAspect() {\n const width = this.gl.drawingBufferWidth;\n const height = this.gl.drawingBufferHeight;\n let aspect = 1;\n const {\n canvas\n } = this.gl;\n\n if (canvas && canvas.clientHeight) {\n aspect = canvas.clientWidth / canvas.clientHeight;\n } else if (width > 0 && height > 0) {\n aspect = width / height;\n }\n\n return {\n width,\n height,\n aspect\n };\n }\n\n _resizeViewport() {\n if (this.autoResizeViewport) {\n this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);\n }\n }\n\n _resizeCanvasDrawingBuffer() {\n if (this.autoResizeDrawingBuffer) {\n resizeGLContext(this.gl, {\n useDevicePixels: this.useDevicePixels\n });\n }\n }\n\n _createFramebuffer() {\n if (this.props.createFramebuffer) {\n this.framebuffer = new Framebuffer(this.gl);\n }\n }\n\n _resizeFramebuffer() {\n if (this.framebuffer) {\n this.framebuffer.resize({\n width: this.gl.drawingBufferWidth,\n height: this.gl.drawingBufferHeight\n });\n }\n }\n\n _beginTimers() {\n this.frameRate.timeEnd();\n this.frameRate.timeStart();\n\n if (this._gpuTimeQuery && this._gpuTimeQuery.isResultAvailable() && !this._gpuTimeQuery.isTimerDisjoint()) {\n this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());\n }\n\n if (this._gpuTimeQuery) {\n this._gpuTimeQuery.beginTimeElapsedQuery();\n }\n\n this.cpuTime.timeStart();\n }\n\n _endTimers() {\n this.cpuTime.timeEnd();\n\n if (this._gpuTimeQuery) {\n this._gpuTimeQuery.end();\n }\n }\n\n _startEventHandling() {\n const {\n canvas\n } = this.gl;\n\n if (canvas) {\n canvas.addEventListener('mousemove', this._onMousemove);\n canvas.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n _onMousemove(e) {\n this.animationProps._mousePosition = [e.offsetX, e.offsetY];\n }\n\n _onMouseleave(e) {\n this.animationProps._mousePosition = null;\n }\n\n}\n//# sourceMappingURL=animation-loop.js.map","export function requestAnimationFrame(callback) {\n return typeof window !== 'undefined' && window.requestAnimationFrame ? window.requestAnimationFrame(callback) : setTimeout(callback, 1000 / 60);\n}\nexport function cancelAnimationFrame(timerId) {\n return typeof window !== 'undefined' && window.cancelAnimationFrame ? window.cancelAnimationFrame(timerId) : clearTimeout(timerId);\n}\n//# sourceMappingURL=request-animation-frame.js.map","/**\n * This file contains overrides the default\n * hammer.js functions to add our own utility\n */\n/* eslint-disable */\n/* Hammer.js constants */\nconst INPUT_START = 1;\nconst INPUT_MOVE = 2;\nconst INPUT_END = 4;\nconst MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n/**\n * Helper function that returns true if any element in an array meets given criteria.\n * Because older browsers do not support `Array.prototype.some`\n * @params array {Array}\n * @params predict {Function}\n */\nfunction some(array, predict) {\n for (let i = 0; i < array.length; i++) {\n if (predict(array[i])) {\n return true;\n }\n }\n return false;\n}\n/* eslint-disable no-invalid-this */\nexport function enhancePointerEventInput(PointerEventInput) {\n const oldHandler = PointerEventInput.prototype.handler;\n // overrides PointerEventInput.handler to accept right mouse button\n PointerEventInput.prototype.handler = function handler(ev) {\n const store = this.store;\n // Allow non-left mouse buttons through\n if (ev.button > 0 && ev.type === 'pointerdown') {\n if (!some(store, e => e.pointerId === ev.pointerId)) {\n store.push(ev);\n }\n }\n oldHandler.call(this, ev);\n };\n}\n// overrides MouseInput.handler to accept right mouse button\nexport function enhanceMouseInput(MouseInput) {\n MouseInput.prototype.handler = function handler(ev) {\n let eventType = MOUSE_INPUT_MAP[ev.type];\n // on start we want to have the mouse button down\n if (eventType & INPUT_START && ev.button >= 0) {\n this.pressed = true;\n }\n if (eventType & INPUT_MOVE && ev.which === 0) {\n eventType = INPUT_END;\n }\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: 'mouse',\n srcEvent: ev\n });\n };\n}\n//# sourceMappingURL=hammer-overrides.js.map","import hammerjs from 'hammerjs';\nimport { enhancePointerEventInput, enhanceMouseInput } from './hammer-overrides';\nenhancePointerEventInput(hammerjs.PointerEventInput);\nenhanceMouseInput(hammerjs.MouseInput);\nexport const Manager = hammerjs.Manager;\nexport default hammerjs;\n//# sourceMappingURL=hammer.browser.js.map","export default class Input {\n constructor(element, callback, options) {\n this.element = element;\n this.callback = callback;\n this.options = { enable: true, ...options };\n }\n}\n//# sourceMappingURL=input.js.map","import Hammer from './utils/hammer';\n// This module contains constants that must be conditionally required\n// due to `window`/`document` references downstream.\nexport const RECOGNIZERS = Hammer\n ? [\n [Hammer.Pan, { event: 'tripan', pointers: 3, threshold: 0, enable: false }],\n [Hammer.Rotate, { enable: false }],\n [Hammer.Pinch, { enable: false }],\n [Hammer.Swipe, { enable: false }],\n [Hammer.Pan, { threshold: 0, enable: false }],\n [Hammer.Press, { enable: false }],\n [Hammer.Tap, { event: 'doubletap', taps: 2, enable: false }],\n // TODO - rename to 'tap' and 'singletap' in the next major release\n [Hammer.Tap, { event: 'anytap', enable: false }],\n [Hammer.Tap, { enable: false }]\n ]\n : null;\n// Recognize the following gestures even if a given recognizer succeeds\nexport const RECOGNIZER_COMPATIBLE_MAP = {\n tripan: ['rotate', 'pinch', 'pan'],\n rotate: ['pinch'],\n pinch: ['pan'],\n pan: ['press', 'doubletap', 'anytap', 'tap'],\n doubletap: ['anytap'],\n anytap: ['tap']\n};\n// Recognize the folling gestures only if a given recognizer fails\nexport const RECOGNIZER_FALLBACK_MAP = {\n doubletap: ['tap']\n};\n/**\n * Only one set of basic input events will be fired by Hammer.js:\n * either pointer, touch, or mouse, depending on system support.\n * In order to enable an application to be agnostic of system support,\n * alias basic input events into \"classes\" of events: down, move, and up.\n * See `_onBasicInput()` for usage of these aliases.\n */\nexport const BASIC_EVENT_ALIASES = {\n pointerdown: 'pointerdown',\n pointermove: 'pointermove',\n pointerup: 'pointerup',\n touchstart: 'pointerdown',\n touchmove: 'pointermove',\n touchend: 'pointerup',\n mousedown: 'pointerdown',\n mousemove: 'pointermove',\n mouseup: 'pointerup'\n};\nexport const INPUT_EVENT_TYPES = {\n KEY_EVENTS: ['keydown', 'keyup'],\n MOUSE_EVENTS: ['mousedown', 'mousemove', 'mouseup', 'mouseover', 'mouseout', 'mouseleave'],\n WHEEL_EVENTS: [\n // Chrome, Safari\n 'wheel',\n // IE\n 'mousewheel'\n ]\n};\n/**\n * \"Gestural\" events are those that have semantic meaning beyond the basic input event,\n * e.g. a click or tap is a sequence of `down` and `up` events with no `move` event in between.\n * Hammer.js handles these with its Recognizer system;\n * this block maps event names to the Recognizers required to detect the events.\n */\nexport const EVENT_RECOGNIZER_MAP = {\n tap: 'tap',\n anytap: 'anytap',\n doubletap: 'doubletap',\n press: 'press',\n pinch: 'pinch',\n pinchin: 'pinch',\n pinchout: 'pinch',\n pinchstart: 'pinch',\n pinchmove: 'pinch',\n pinchend: 'pinch',\n pinchcancel: 'pinch',\n rotate: 'rotate',\n rotatestart: 'rotate',\n rotatemove: 'rotate',\n rotateend: 'rotate',\n rotatecancel: 'rotate',\n tripan: 'tripan',\n tripanstart: 'tripan',\n tripanmove: 'tripan',\n tripanup: 'tripan',\n tripandown: 'tripan',\n tripanleft: 'tripan',\n tripanright: 'tripan',\n tripanend: 'tripan',\n tripancancel: 'tripan',\n pan: 'pan',\n panstart: 'pan',\n panmove: 'pan',\n panup: 'pan',\n pandown: 'pan',\n panleft: 'pan',\n panright: 'pan',\n panend: 'pan',\n pancancel: 'pan',\n swipe: 'swipe',\n swipeleft: 'swipe',\n swiperight: 'swipe',\n swipeup: 'swipe',\n swipedown: 'swipe'\n};\n/**\n * Map gestural events typically provided by browsers\n * that are not reported in 'hammer.input' events\n * to corresponding Hammer.js gestures.\n */\nexport const GESTURE_EVENT_ALIASES = {\n click: 'tap',\n anyclick: 'anytap',\n dblclick: 'doubletap',\n mousedown: 'pointerdown',\n mousemove: 'pointermove',\n mouseup: 'pointerup',\n mouseover: 'pointerover',\n mouseout: 'pointerout',\n mouseleave: 'pointerleave'\n};\n//# sourceMappingURL=constants.js.map","import Input from './input';\nimport { INPUT_EVENT_TYPES } from '../constants';\nimport { window, userAgent, passiveSupported } from '../utils/globals';\nconst firefox = userAgent.indexOf('firefox') !== -1;\nconst { WHEEL_EVENTS } = INPUT_EVENT_TYPES;\nconst EVENT_TYPE = 'wheel';\n// Constants for normalizing input delta\nconst WHEEL_DELTA_MAGIC_SCALER = 4.000244140625;\nconst WHEEL_DELTA_PER_LINE = 40;\n// Slow down zoom if shift key is held for more precise zooming\nconst SHIFT_MULTIPLIER = 0.25;\nexport default class WheelInput extends Input {\n constructor(element, callback, options) {\n super(element, callback, options);\n /* eslint-disable complexity, max-statements */\n this.handleEvent = (event) => {\n if (!this.options.enable) {\n return;\n }\n let value = event.deltaY;\n if (window.WheelEvent) {\n // Firefox doubles the values on retina screens...\n if (firefox && event.deltaMode === window.WheelEvent.DOM_DELTA_PIXEL) {\n value /= window.devicePixelRatio;\n }\n if (event.deltaMode === window.WheelEvent.DOM_DELTA_LINE) {\n value *= WHEEL_DELTA_PER_LINE;\n }\n }\n if (value !== 0 && value % WHEEL_DELTA_MAGIC_SCALER === 0) {\n // This one is definitely a mouse wheel event.\n // Normalize this value to match trackpad.\n value = Math.floor(value / WHEEL_DELTA_MAGIC_SCALER);\n }\n if (event.shiftKey && value) {\n value = value * SHIFT_MULTIPLIER;\n }\n this.callback({\n type: EVENT_TYPE,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n delta: -value,\n srcEvent: event,\n pointerType: 'mouse',\n target: event.target\n });\n };\n this.events = (this.options.events || []).concat(WHEEL_EVENTS);\n this.events.forEach(event => element.addEventListener(event, this.handleEvent, passiveSupported ? { passive: false } : false));\n }\n destroy() {\n this.events.forEach(event => this.element.removeEventListener(event, this.handleEvent));\n }\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType, enabled) {\n if (eventType === EVENT_TYPE) {\n this.options.enable = enabled;\n }\n }\n}\n//# sourceMappingURL=wheel-input.js.map","import Input from './input';\nimport { INPUT_EVENT_TYPES } from '../constants';\nconst { MOUSE_EVENTS } = INPUT_EVENT_TYPES;\nconst MOVE_EVENT_TYPE = 'pointermove';\nconst OVER_EVENT_TYPE = 'pointerover';\nconst OUT_EVENT_TYPE = 'pointerout';\nconst ENTER_EVENT_TYPE = 'pointerenter';\nconst LEAVE_EVENT_TYPE = 'pointerleave';\n/**\n * Hammer.js swallows 'move' events (for pointer/touch/mouse)\n * when the pointer is not down. This class sets up a handler\n * specifically for these events to work around this limitation.\n * Note that this could be extended to more intelligently handle\n * move events across input types, e.g. storing multiple simultaneous\n * pointer/touch events, calculating speed/direction, etc.\n */\nexport default class MoveInput extends Input {\n constructor(element, callback, options) {\n super(element, callback, options);\n this.handleEvent = (event) => {\n this.handleOverEvent(event);\n this.handleOutEvent(event);\n this.handleEnterEvent(event);\n this.handleLeaveEvent(event);\n this.handleMoveEvent(event);\n };\n this.pressed = false;\n const { enable } = this.options;\n this.enableMoveEvent = enable;\n this.enableLeaveEvent = enable;\n this.enableEnterEvent = enable;\n this.enableOutEvent = enable;\n this.enableOverEvent = enable;\n this.events = (this.options.events || []).concat(MOUSE_EVENTS);\n this.events.forEach(event => element.addEventListener(event, this.handleEvent));\n }\n destroy() {\n this.events.forEach(event => this.element.removeEventListener(event, this.handleEvent));\n }\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType, enabled) {\n if (eventType === MOVE_EVENT_TYPE) {\n this.enableMoveEvent = enabled;\n }\n if (eventType === OVER_EVENT_TYPE) {\n this.enableOverEvent = enabled;\n }\n if (eventType === OUT_EVENT_TYPE) {\n this.enableOutEvent = enabled;\n }\n if (eventType === ENTER_EVENT_TYPE) {\n this.enableEnterEvent = enabled;\n }\n if (eventType === LEAVE_EVENT_TYPE) {\n this.enableLeaveEvent = enabled;\n }\n }\n handleOverEvent(event) {\n if (this.enableOverEvent) {\n if (event.type === 'mouseover') {\n this._emit(OVER_EVENT_TYPE, event);\n }\n }\n }\n handleOutEvent(event) {\n if (this.enableOutEvent) {\n if (event.type === 'mouseout') {\n this._emit(OUT_EVENT_TYPE, event);\n }\n }\n }\n handleEnterEvent(event) {\n if (this.enableEnterEvent) {\n if (event.type === 'mouseenter') {\n this._emit(ENTER_EVENT_TYPE, event);\n }\n }\n }\n handleLeaveEvent(event) {\n if (this.enableLeaveEvent) {\n if (event.type === 'mouseleave') {\n this._emit(LEAVE_EVENT_TYPE, event);\n }\n }\n }\n handleMoveEvent(event) {\n if (this.enableMoveEvent) {\n switch (event.type) {\n case 'mousedown':\n if (event.button >= 0) {\n // Button is down\n this.pressed = true;\n }\n break;\n case 'mousemove':\n // Move events use `which` to track the button being pressed\n if (event.which === 0) {\n // Button is not down\n this.pressed = false;\n }\n if (!this.pressed) {\n // Drag events are emitted by hammer already\n // we just need to emit the move event on hover\n this._emit(MOVE_EVENT_TYPE, event);\n }\n break;\n case 'mouseup':\n this.pressed = false;\n break;\n default:\n }\n }\n }\n _emit(type, event) {\n this.callback({\n type,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n srcEvent: event,\n pointerType: 'mouse',\n target: event.target\n });\n }\n}\n//# sourceMappingURL=move-input.js.map","import Input from './input';\nimport { INPUT_EVENT_TYPES } from '../constants';\nconst { KEY_EVENTS } = INPUT_EVENT_TYPES;\nconst DOWN_EVENT_TYPE = 'keydown';\nconst UP_EVENT_TYPE = 'keyup';\nexport default class KeyInput extends Input {\n constructor(element, callback, options) {\n super(element, callback, options);\n this.handleEvent = (event) => {\n // Ignore if focused on text input\n const targetElement = (event.target || event.srcElement);\n if ((targetElement.tagName === 'INPUT' && targetElement.type === 'text') ||\n targetElement.tagName === 'TEXTAREA') {\n return;\n }\n if (this.enableDownEvent && event.type === 'keydown') {\n this.callback({\n type: DOWN_EVENT_TYPE,\n srcEvent: event,\n key: event.key,\n target: event.target\n });\n }\n if (this.enableUpEvent && event.type === 'keyup') {\n this.callback({\n type: UP_EVENT_TYPE,\n srcEvent: event,\n key: event.key,\n target: event.target\n });\n }\n };\n this.enableDownEvent = this.options.enable;\n this.enableUpEvent = this.options.enable;\n this.events = (this.options.events || []).concat(KEY_EVENTS);\n element.tabIndex = this.options.tabIndex || 0;\n element.style.outline = 'none';\n this.events.forEach(event => element.addEventListener(event, this.handleEvent));\n }\n destroy() {\n this.events.forEach(event => this.element.removeEventListener(event, this.handleEvent));\n }\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType, enabled) {\n if (eventType === DOWN_EVENT_TYPE) {\n this.enableDownEvent = enabled;\n }\n if (eventType === UP_EVENT_TYPE) {\n this.enableUpEvent = enabled;\n }\n }\n}\n//# sourceMappingURL=key-input.js.map","import Input from './input';\nconst EVENT_TYPE = 'contextmenu';\nexport default class ContextmenuInput extends Input {\n constructor(element, callback, options) {\n super(element, callback, options);\n this.handleEvent = (event) => {\n if (!this.options.enable) {\n return;\n }\n this.callback({\n type: EVENT_TYPE,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n srcEvent: event,\n pointerType: 'mouse',\n target: event.target\n });\n };\n element.addEventListener('contextmenu', this.handleEvent);\n }\n destroy() {\n this.element.removeEventListener('contextmenu', this.handleEvent);\n }\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType, enabled) {\n if (eventType === EVENT_TYPE) {\n this.options.enable = enabled;\n }\n }\n}\n//# sourceMappingURL=contextmenu-input.js.map","/* Constants */\nconst DOWN_EVENT = 1;\nconst MOVE_EVENT = 2;\nconst UP_EVENT = 4;\nconst MOUSE_EVENTS = {\n pointerdown: DOWN_EVENT,\n pointermove: MOVE_EVENT,\n pointerup: UP_EVENT,\n mousedown: DOWN_EVENT,\n mousemove: MOVE_EVENT,\n mouseup: UP_EVENT\n};\n// MouseEvent.which https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which\nconst MOUSE_EVENT_WHICH_LEFT = 1;\nconst MOUSE_EVENT_WHICH_MIDDLE = 2;\nconst MOUSE_EVENT_WHICH_RIGHT = 3;\n// MouseEvent.button https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\nconst MOUSE_EVENT_BUTTON_LEFT = 0;\nconst MOUSE_EVENT_BUTTON_MIDDLE = 1;\nconst MOUSE_EVENT_BUTTON_RIGHT = 2;\n// MouseEvent.buttons https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\nconst MOUSE_EVENT_BUTTONS_LEFT_MASK = 1;\nconst MOUSE_EVENT_BUTTONS_RIGHT_MASK = 2;\nconst MOUSE_EVENT_BUTTONS_MIDDLE_MASK = 4;\n/**\n * Extract the involved mouse button\n */\nexport function whichButtons(event) {\n const eventType = MOUSE_EVENTS[event.srcEvent.type];\n if (!eventType) {\n // Not a mouse evet\n return null;\n }\n const { buttons, button, which } = event.srcEvent;\n let leftButton = false;\n let middleButton = false;\n let rightButton = false;\n if (\n // button is up, need to find out which one was pressed before\n eventType === UP_EVENT ||\n // moving but does not support `buttons` API\n (eventType === MOVE_EVENT && !Number.isFinite(buttons))) {\n leftButton = which === MOUSE_EVENT_WHICH_LEFT;\n middleButton = which === MOUSE_EVENT_WHICH_MIDDLE;\n rightButton = which === MOUSE_EVENT_WHICH_RIGHT;\n }\n else if (eventType === MOVE_EVENT) {\n leftButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_LEFT_MASK);\n middleButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_MIDDLE_MASK);\n rightButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_RIGHT_MASK);\n }\n else if (eventType === DOWN_EVENT) {\n leftButton = button === MOUSE_EVENT_BUTTON_LEFT;\n middleButton = button === MOUSE_EVENT_BUTTON_MIDDLE;\n rightButton = button === MOUSE_EVENT_BUTTON_RIGHT;\n }\n return { leftButton, middleButton, rightButton };\n}\n/**\n * Calculate event position relative to the root element\n */\nexport function getOffsetPosition(event, rootElement) {\n const center = event.center;\n // `center` is a hammer.js event property\n if (!center) {\n // Not a gestural event\n return null;\n }\n const rect = rootElement.getBoundingClientRect();\n // Fix scale for map affected by a CSS transform.\n // See https://stackoverflow.com/a/26893663/3528533\n const scaleX = rect.width / rootElement.offsetWidth || 1;\n const scaleY = rect.height / rootElement.offsetHeight || 1;\n // Calculate center relative to the root element\n const offsetCenter = {\n x: (center.x - rect.left - rootElement.clientLeft) / scaleX,\n y: (center.y - rect.top - rootElement.clientTop) / scaleY\n };\n return { center, offsetCenter };\n}\n//# sourceMappingURL=event-utils.js.map","import { whichButtons, getOffsetPosition } from './event-utils';\nconst DEFAULT_OPTIONS = {\n srcElement: 'root',\n priority: 0\n};\nexport default class EventRegistrar {\n constructor(eventManager) {\n /**\n * Handles hammerjs event\n */\n this.handleEvent = (event) => {\n if (this.isEmpty()) {\n return;\n }\n const mjolnirEvent = this._normalizeEvent(event);\n let target = event.srcEvent.target;\n while (target && target !== mjolnirEvent.rootElement) {\n this._emit(mjolnirEvent, target);\n if (mjolnirEvent.handled) {\n return;\n }\n target = target.parentNode;\n }\n this._emit(mjolnirEvent, 'root');\n };\n this.eventManager = eventManager;\n this.handlers = [];\n // Element -> handler map\n this.handlersByElement = new Map();\n this._active = false;\n }\n // Returns true if there are no non-passive handlers\n isEmpty() {\n return !this._active;\n }\n add(type, handler, options, once = false, passive = false) {\n const { handlers, handlersByElement } = this;\n let opts = DEFAULT_OPTIONS;\n if (typeof options === 'string' || (options && options.addEventListener)) {\n // is DOM element, backward compatibility\n // @ts-ignore\n opts = { ...DEFAULT_OPTIONS, srcElement: options };\n }\n else if (options) {\n opts = { ...DEFAULT_OPTIONS, ...options };\n }\n let entries = handlersByElement.get(opts.srcElement);\n if (!entries) {\n entries = [];\n handlersByElement.set(opts.srcElement, entries);\n }\n const entry = {\n type,\n handler,\n srcElement: opts.srcElement,\n priority: opts.priority\n };\n if (once) {\n entry.once = true;\n }\n if (passive) {\n entry.passive = true;\n }\n handlers.push(entry);\n this._active = this._active || !entry.passive;\n // Sort handlers by descending priority\n // Handlers with the same priority are excuted in the order of registration\n let insertPosition = entries.length - 1;\n while (insertPosition >= 0) {\n if (entries[insertPosition].priority >= entry.priority) {\n break;\n }\n insertPosition--;\n }\n entries.splice(insertPosition + 1, 0, entry);\n }\n remove(type, handler) {\n const { handlers, handlersByElement } = this;\n for (let i = handlers.length - 1; i >= 0; i--) {\n const entry = handlers[i];\n if (entry.type === type && entry.handler === handler) {\n handlers.splice(i, 1);\n const entries = handlersByElement.get(entry.srcElement);\n entries.splice(entries.indexOf(entry), 1);\n if (entries.length === 0) {\n handlersByElement.delete(entry.srcElement);\n }\n }\n }\n this._active = handlers.some(entry => !entry.passive);\n }\n /**\n * Invoke handlers on a particular element\n */\n _emit(event, srcElement) {\n const entries = this.handlersByElement.get(srcElement);\n if (entries) {\n let immediatePropagationStopped = false;\n // Prevents the current event from bubbling up\n const stopPropagation = () => {\n event.handled = true;\n };\n // Prevent any remaining listeners from being called\n const stopImmediatePropagation = () => {\n event.handled = true;\n immediatePropagationStopped = true;\n };\n const entriesToRemove = [];\n for (let i = 0; i < entries.length; i++) {\n const { type, handler, once } = entries[i];\n handler({\n ...event,\n // @ts-ignore\n type,\n stopPropagation,\n stopImmediatePropagation\n });\n if (once) {\n entriesToRemove.push(entries[i]);\n }\n if (immediatePropagationStopped) {\n break;\n }\n }\n for (let i = 0; i < entriesToRemove.length; i++) {\n const { type, handler } = entriesToRemove[i];\n this.remove(type, handler);\n }\n }\n }\n /**\n * Normalizes hammerjs and custom events to have predictable fields.\n */\n _normalizeEvent(event) {\n const rootElement = this.eventManager.getElement();\n return {\n ...event,\n ...whichButtons(event),\n ...getOffsetPosition(event, rootElement),\n preventDefault: () => {\n event.srcEvent.preventDefault();\n },\n stopImmediatePropagation: null,\n stopPropagation: null,\n handled: false,\n rootElement\n };\n }\n}\n//# sourceMappingURL=event-registrar.js.map","import { Manager } from './utils/hammer';\nimport WheelInput from './inputs/wheel-input';\nimport MoveInput from './inputs/move-input';\nimport KeyInput from './inputs/key-input';\nimport ContextmenuInput from './inputs/contextmenu-input';\nimport EventRegistrar from './utils/event-registrar';\nimport { BASIC_EVENT_ALIASES, EVENT_RECOGNIZER_MAP, GESTURE_EVENT_ALIASES, RECOGNIZERS, RECOGNIZER_COMPATIBLE_MAP, RECOGNIZER_FALLBACK_MAP } from './constants';\nconst DEFAULT_OPTIONS = {\n // event handlers\n events: null,\n // custom recognizers\n recognizers: null,\n recognizerOptions: {},\n // Manager class\n Manager,\n // allow browser default touch action\n // https://github.com/uber/react-map-gl/issues/506\n touchAction: 'none',\n tabIndex: 0\n};\n// Unified API for subscribing to events about both\n// basic input events (e.g. 'mousemove', 'touchstart', 'wheel')\n// and gestural input (e.g. 'click', 'tap', 'panstart').\n// Delegates gesture related event registration and handling to Hammer.js.\nexport default class EventManager {\n constructor(element = null, options) {\n /**\n * Handle basic events using the 'hammer.input' Hammer.js API:\n * Before running Recognizers, Hammer emits a 'hammer.input' event\n * with the basic event info. This function emits all basic events\n * aliased to the \"class\" of event received.\n * See constants.BASIC_EVENT_CLASSES basic event class definitions.\n */\n this._onBasicInput = (event) => {\n const { srcEvent } = event;\n const alias = BASIC_EVENT_ALIASES[srcEvent.type];\n if (alias) {\n // fire all events aliased to srcEvent.type\n this.manager.emit(alias, event);\n }\n };\n /**\n * Handle events not supported by Hammer.js,\n * and pipe back out through same (Hammer) channel used by other events.\n */\n this._onOtherEvent = (event) => {\n // console.log('onotherevent', event.type, event)\n this.manager.emit(event.type, event);\n };\n this.options = { ...DEFAULT_OPTIONS, ...options };\n this.events = new Map();\n this.setElement(element);\n // Register all passed events.\n const { events } = this.options;\n if (events) {\n this.on(events);\n }\n }\n getElement() {\n return this.element;\n }\n setElement(element) {\n if (this.element) {\n // unregister all events\n this.destroy();\n }\n this.element = element;\n if (!element) {\n return;\n }\n const { options } = this;\n const ManagerClass = options.Manager;\n this.manager = new ManagerClass(element, {\n touchAction: options.touchAction,\n recognizers: options.recognizers || RECOGNIZERS\n }).on('hammer.input', this._onBasicInput);\n if (!options.recognizers) {\n // Set default recognize withs\n // http://hammerjs.github.io/recognize-with/\n Object.keys(RECOGNIZER_COMPATIBLE_MAP).forEach(name => {\n const recognizer = this.manager.get(name);\n if (recognizer) {\n RECOGNIZER_COMPATIBLE_MAP[name].forEach(otherName => {\n recognizer.recognizeWith(otherName);\n });\n }\n });\n }\n // Set recognizer options\n for (const recognizerName in options.recognizerOptions) {\n const recognizer = this.manager.get(recognizerName);\n if (recognizer) {\n const recognizerOption = options.recognizerOptions[recognizerName];\n // `enable` is managed by the event registrations\n delete recognizerOption.enable;\n recognizer.set(recognizerOption);\n }\n }\n // Handle events not handled by Hammer.js:\n // - mouse wheel\n // - pointer/touch/mouse move\n this.wheelInput = new WheelInput(element, this._onOtherEvent, {\n enable: false\n });\n this.moveInput = new MoveInput(element, this._onOtherEvent, {\n enable: false\n });\n this.keyInput = new KeyInput(element, this._onOtherEvent, {\n enable: false,\n tabIndex: options.tabIndex\n });\n this.contextmenuInput = new ContextmenuInput(element, this._onOtherEvent, {\n enable: false\n });\n // Register all existing events\n for (const [eventAlias, eventRegistrar] of this.events) {\n if (!eventRegistrar.isEmpty()) {\n // Enable recognizer for this event.\n this._toggleRecognizer(eventRegistrar.recognizerName, true);\n this.manager.on(eventAlias, eventRegistrar.handleEvent);\n }\n }\n }\n // Tear down internal event management implementations.\n destroy() {\n if (this.element) {\n // wheelInput etc. are created in setElement() and therefore\n // cannot exist if there is no element\n this.wheelInput.destroy();\n this.moveInput.destroy();\n this.keyInput.destroy();\n this.contextmenuInput.destroy();\n this.manager.destroy();\n this.wheelInput = null;\n this.moveInput = null;\n this.keyInput = null;\n this.contextmenuInput = null;\n this.manager = null;\n this.element = null;\n }\n }\n /** Register an event handler function to be called on `event` */\n on(event, handler, opts) {\n this._addEventHandler(event, handler, opts, false);\n }\n once(event, handler, opts) {\n this._addEventHandler(event, handler, opts, true);\n }\n watch(event, handler, opts) {\n this._addEventHandler(event, handler, opts, false, true);\n }\n off(event, handler) {\n this._removeEventHandler(event, handler);\n }\n /*\n * Enable/disable recognizer for the given event\n */\n _toggleRecognizer(name, enabled) {\n const { manager } = this;\n if (!manager) {\n return;\n }\n const recognizer = manager.get(name);\n // @ts-ignore\n if (recognizer && recognizer.options.enable !== enabled) {\n recognizer.set({ enable: enabled });\n const fallbackRecognizers = RECOGNIZER_FALLBACK_MAP[name];\n if (fallbackRecognizers && !this.options.recognizers) {\n // Set default require failures\n // http://hammerjs.github.io/require-failure/\n fallbackRecognizers.forEach(otherName => {\n const otherRecognizer = manager.get(otherName);\n if (enabled) {\n // Wait for this recognizer to fail\n otherRecognizer.requireFailure(name);\n /**\n * This seems to be a bug in hammerjs:\n * requireFailure() adds both ways\n * dropRequireFailure() only drops one way\n * https://github.com/hammerjs/hammer.js/blob/master/src/recognizerjs/\n recognizer-constructor.js#L136\n */\n recognizer.dropRequireFailure(otherName);\n }\n else {\n // Do not wait for this recognizer to fail\n otherRecognizer.dropRequireFailure(name);\n }\n });\n }\n }\n this.wheelInput.enableEventType(name, enabled);\n this.moveInput.enableEventType(name, enabled);\n this.keyInput.enableEventType(name, enabled);\n this.contextmenuInput.enableEventType(name, enabled);\n }\n /**\n * Process the event registration for a single event + handler.\n */\n _addEventHandler(event, handler, opts, once, passive) {\n if (typeof event !== 'string') {\n // @ts-ignore\n opts = handler;\n // If `event` is a map, call `on()` for each entry.\n for (const eventName in event) {\n this._addEventHandler(eventName, event[eventName], opts, once, passive);\n }\n return;\n }\n const { manager, events } = this;\n // Alias to a recognized gesture as necessary.\n const eventAlias = GESTURE_EVENT_ALIASES[event] || event;\n let eventRegistrar = events.get(eventAlias);\n if (!eventRegistrar) {\n eventRegistrar = new EventRegistrar(this);\n events.set(eventAlias, eventRegistrar);\n // Enable recognizer for this event.\n eventRegistrar.recognizerName = EVENT_RECOGNIZER_MAP[eventAlias] || eventAlias;\n // Listen to the event\n if (manager) {\n manager.on(eventAlias, eventRegistrar.handleEvent);\n }\n }\n eventRegistrar.add(event, handler, opts, once, passive);\n if (!eventRegistrar.isEmpty()) {\n this._toggleRecognizer(eventRegistrar.recognizerName, true);\n }\n }\n /**\n * Process the event deregistration for a single event + handler.\n */\n _removeEventHandler(event, handler) {\n if (typeof event !== 'string') {\n // If `event` is a map, call `off()` for each entry.\n for (const eventName in event) {\n this._removeEventHandler(eventName, event[eventName]);\n }\n return;\n }\n const { events } = this;\n // Alias to a recognized gesture as necessary.\n const eventAlias = GESTURE_EVENT_ALIASES[event] || event;\n const eventRegistrar = events.get(eventAlias);\n if (!eventRegistrar) {\n return;\n }\n eventRegistrar.remove(event, handler);\n if (eventRegistrar.isEmpty()) {\n const { recognizerName } = eventRegistrar;\n // Disable recognizer if no more handlers are attached to its events\n let isRecognizerUsed = false;\n for (const eh of events.values()) {\n if (eh.recognizerName === recognizerName && !eh.isEmpty()) {\n isRecognizerUsed = true;\n break;\n }\n }\n if (!isRecognizerUsed) {\n this._toggleRecognizer(recognizerName, false);\n }\n }\n }\n}\n//# sourceMappingURL=event-manager.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport LayerManager from './layer-manager';\nimport ViewManager from './view-manager';\nimport MapView from '../views/map-view';\nimport EffectManager from './effect-manager';\nimport DeckRenderer from './deck-renderer';\nimport DeckPicker from './deck-picker';\nimport Tooltip from './tooltip';\nimport log from '../utils/log';\nimport {deepEqual} from '../utils/deep-equal';\nimport typedArrayManager from '../utils/typed-array-manager';\nimport deckGlobal from './init';\n\nimport {getBrowser} from '@probe.gl/env';\nimport GL from '@luma.gl/constants';\nimport {\n AnimationLoop,\n createGLContext,\n instrumentGLContext,\n setParameters,\n Timeline,\n lumaStats\n} from '@luma.gl/core';\nimport {Stats} from '@probe.gl/stats';\nimport {EventManager} from 'mjolnir.js';\n\nimport assert from '../utils/assert';\nimport {EVENTS} from './constants';\n\nimport type {Effect} from './effect';\nimport type {FilterContext} from '../passes/layers-pass';\nimport type Layer from './layer';\nimport type View from '../views/view';\nimport type Viewport from '../viewports/viewport';\nimport type {RecognizerOptions, MjolnirGestureEvent, MjolnirPointerEvent} from 'mjolnir.js';\nimport type {Framebuffer} from '@luma.gl/core';\nimport type {TypedArrayManagerOptions} from '../utils/typed-array-manager';\nimport type {ViewStateChangeParameters, InteractionState} from '../controllers/controller';\nimport type {PickingInfo} from './picking/pick-info';\nimport type {PickByPointOptions, PickByRectOptions} from './deck-picker';\nimport type {LayersList} from './layer-manager';\nimport type {TooltipContent} from './tooltip';\n\n/* global document */\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n\nconst getCursor = ({isDragging}) => (isDragging ? 'grabbing' : 'grab');\n\nexport type DeckMetrics = {\n fps: number;\n setPropsTime: number;\n updateAttributesTime: number;\n framesRedrawn: number;\n pickTime: number;\n pickCount: number;\n gpuTime: number;\n gpuTimePerFrame: number;\n cpuTime: number;\n cpuTimePerFrame: number;\n bufferMemory: number;\n textureMemory: number;\n renderbufferMemory: number;\n gpuMemory: number;\n};\n\ntype CursorState = {\n /** Whether the cursor is over a pickable object */\n isHovering: boolean;\n /** Whether the cursor is down */\n isDragging: boolean;\n};\n\nexport type DeckProps = {\n /** Id of this Deck instance */\n id?: string;\n /** Width of the canvas, a number in pixels or a valid CSS string.\n * @default `'100%'`\n */\n width?: string | number | null;\n /** Height of the canvas, a number in pixels or a valid CSS string.\n * @default `'100%'`\n */\n height?: string | number | null;\n /** Additional CSS styles for the canvas. */\n style?: Partial | null;\n\n /** Controls the resolution of drawing buffer used for rendering.\n * @default `true` (use browser devicePixelRatio)\n */\n useDevicePixels?: boolean | number;\n /** Extra pixels around the pointer to include while picking.\n * @default `0`\n */\n pickingRadius?: number;\n\n /** WebGL parameters to be set before each frame is rendered.\n * @see https://github.com/visgl/luma.gl/blob/8.5-release/modules/gltools/docs/api-reference/parameter-setting.md#parameters\n */\n parameters?: any;\n /** If supplied, will be called before a layer is drawn to determine whether it should be rendered. */\n layerFilter?: ((context: FilterContext) => boolean) | null;\n\n /** The container to append the auto-created canvas to.\n * @default `document.body`\n */\n parent?: HTMLDivElement | null;\n /** The canvas to render into.\n * Can be either a HTMLCanvasElement or the element id.\n * Will be auto-created if not supplied.\n */\n canvas?: HTMLCanvasElement | string | null;\n /** WebGL context. Will be auto-created if not supplied. */\n gl?: WebGLRenderingContext | null;\n /** Additional options used when creating the WebGL context. */\n glOptions?: WebGLContextAttributes;\n\n /**\n * The array of Layer instances to be rendered.\n * Nested arrays are accepted, as well as falsy values (`null`, `false`, `undefined`)\n */\n layers?: LayersList;\n /** The array of effects to be rendered. A lighting effect will be added if an empty array is supplied. */\n effects?: Effect[];\n /** A single View instance, or an array of `View` instances.\n * @default `new MapView()`\n */\n views?: View | View[] | null;\n /** Options for viewport interactivity, e.g. pan, rotate and zoom with mouse, touch and keyboard.\n * This is a shorthand for defining interaction with the `views` prop if you are using the default view (i.e. a single `MapView`)\n */\n controller?: View['props']['controller'];\n /**\n * An object that describes the view state for each view in the `views` prop.\n * Use if the camera state should be managed external to the `Deck` instance.\n */\n viewState?: any;\n /**\n * If provided, the `Deck` instance will track camera state changes automatically,\n * with `initialViewState` as its initial settings.\n */\n initialViewState?: any;\n\n /** Allow browser default touch actions.\n * @default `'none'`\n */\n touchAction?: string;\n /** Set Hammer.js recognizer options for gesture recognition. See documentation for details. */\n eventRecognizerOptions?: {\n [type: string]: RecognizerOptions;\n };\n\n /** (Experimental) Render to a custom frame buffer other than to screen. */\n _framebuffer?: Framebuffer | null;\n /** (Experimental) Forces deck.gl to redraw layers every animation frame. */\n _animate?: boolean;\n /** (Experimental) If set to `false`, force disables all picking features, disregarding the `pickable` prop set in any layer. */\n _pickable?: boolean;\n /** (Experimental) Fine-tune attribute memory usage. See documentation for details. */\n _typedArrayManagerProps?: TypedArrayManagerOptions;\n\n /** Called once the WebGL context has been initiated. */\n onWebGLInitialized?: (gl: WebGLRenderingContext) => void;\n /** Called when the canvas resizes. */\n onResize?: (dimensions: {width: number; height: number}) => void;\n /** Called when the user has interacted with the deck.gl canvas, e.g. using mouse, touch or keyboard. */\n onViewStateChange?: (params: ViewStateChangeParameters & {viewId: string}) => any;\n /** Called when the user has interacted with the deck.gl canvas, e.g. using mouse, touch or keyboard. */\n onInteractionStateChange?: (state: InteractionState) => void;\n /** Called just before the canvas rerenders. */\n onBeforeRender?: (context: {gl: WebGLRenderingContext}) => void;\n /** Called right after the canvas rerenders. */\n onAfterRender?: (context: {gl: WebGLRenderingContext}) => void;\n /** Called once after gl context and all Deck components are created. */\n onLoad?: () => void;\n /** Called if deck.gl encounters an error.\n * If this callback is set to `null`, errors are silently ignored.\n * @default `console.error`\n */\n onError?: ((error: Error, layer?: Layer) => void) | null;\n /** Called when the pointer moves over the canvas. */\n onHover?: ((info: PickingInfo, event: MjolnirPointerEvent) => void) | null;\n /** Called when clicking on the canvas. */\n onClick?: ((info: PickingInfo, event: MjolnirGestureEvent) => void) | null;\n /** Called when the user starts dragging on the canvas. */\n onDragStart?: ((info: PickingInfo, event: MjolnirGestureEvent) => void) | null;\n /** Called when dragging the canvas. */\n onDrag?: ((info: PickingInfo, event: MjolnirGestureEvent) => void) | null;\n /** Called when the user releases from dragging the canvas. */\n onDragEnd?: ((info: PickingInfo, event: MjolnirGestureEvent) => void) | null;\n\n /** (Experimental) Replace the default redraw procedure */\n _customRender?: ((reason: string) => void) | null;\n /** (Experimental) Called once every second with performance metrics. */\n _onMetrics?: ((metrics: DeckMetrics) => void) | null;\n\n /** A custom callback to retrieve the cursor type. */\n getCursor?: (state: CursorState) => string;\n /** Callback that takes a hovered-over point and renders a tooltip. */\n getTooltip?: ((info: PickingInfo) => TooltipContent) | null;\n\n /** (Debug) Flag to enable WebGL debug mode. Requires importing `@luma.gl/debug`. */\n debug?: boolean;\n /** (Debug) Render the picking buffer to screen. */\n drawPickingColors?: boolean;\n};\n\nconst defaultProps = {\n id: '',\n width: '100%',\n height: '100%',\n style: null,\n viewState: null,\n initialViewState: null,\n pickingRadius: 0,\n layerFilter: null,\n glOptions: {},\n parameters: {},\n parent: null,\n gl: null,\n canvas: null,\n layers: [],\n effects: [],\n views: null,\n controller: null, // Rely on external controller, e.g. react-map-gl\n useDevicePixels: true,\n touchAction: 'none',\n eventRecognizerOptions: {},\n _framebuffer: null,\n _animate: false,\n _pickable: true,\n _typedArrayManagerProps: {},\n _customRender: null,\n\n onWebGLInitialized: noop,\n onResize: noop,\n onViewStateChange: noop,\n onInteractionStateChange: noop,\n onBeforeRender: noop,\n onAfterRender: noop,\n onLoad: noop,\n onError: (error: Error) => log.error(error.message)(),\n onHover: null,\n onClick: null,\n onDragStart: null,\n onDrag: null,\n onDragEnd: null,\n _onMetrics: null,\n\n getCursor,\n getTooltip: null,\n\n debug: false,\n drawPickingColors: false\n};\n\n/* eslint-disable max-statements */\nexport default class Deck {\n static defaultProps = defaultProps;\n // This is used to defeat tree shaking of init.js\n // https://github.com/visgl/deck.gl/issues/3213\n static VERSION = deckGlobal.VERSION;\n\n readonly props: Required;\n readonly width: number = 0;\n readonly height: number = 0;\n // Allows attaching arbitrary data to the instance\n readonly userData: Record = {};\n\n protected canvas: HTMLCanvasElement | null = null;\n protected viewManager: ViewManager | null = null;\n protected layerManager: LayerManager | null = null;\n protected effectManager: EffectManager | null = null;\n protected deckRenderer: DeckRenderer | null = null;\n protected deckPicker: DeckPicker | null = null;\n protected eventManager: EventManager | null = null;\n protected tooltip: Tooltip | null = null;\n protected metrics: DeckMetrics;\n protected animationLoop: AnimationLoop;\n protected stats: Stats;\n\n /** Internal view state if no callback is supplied */\n protected viewState: any;\n protected cursorState: CursorState;\n\n private _needsRedraw: false | string;\n private _pickRequest: {\n mode: string;\n event: MjolnirPointerEvent | null;\n x: number;\n y: number;\n radius: number;\n };\n /**\n * Pick and store the object under the pointer on `pointerdown`.\n * This object is reused for subsequent `onClick` and `onDrag*` callbacks.\n */\n private _lastPointerDownInfo: PickingInfo | null = null;\n private _metricsCounter: number;\n\n constructor(props: DeckProps) {\n this.props = {...defaultProps, ...props};\n props = this.props;\n\n this._needsRedraw = 'Initial render';\n this._pickRequest = {\n mode: 'hover',\n x: -1,\n y: -1,\n radius: 0,\n event: null\n };\n\n this.cursorState = {\n isHovering: false,\n isDragging: false\n };\n\n if (props.viewState && props.initialViewState) {\n log.warn(\n 'View state tracking is disabled. Use either `initialViewState` for auto update or `viewState` for manual update.'\n )();\n }\n if (getBrowser() === 'IE') {\n log.warn('IE 11 is not supported')();\n }\n this.viewState = props.initialViewState;\n\n if (!props.gl) {\n // Note: LayerManager creation deferred until gl context available\n if (typeof document !== 'undefined') {\n this.canvas = this._createCanvas(props);\n }\n }\n this.animationLoop = this._createAnimationLoop(props);\n\n this.stats = new Stats({id: 'deck.gl'});\n this.metrics = {\n fps: 0,\n setPropsTime: 0,\n updateAttributesTime: 0,\n framesRedrawn: 0,\n pickTime: 0,\n pickCount: 0,\n gpuTime: 0,\n gpuTimePerFrame: 0,\n cpuTime: 0,\n cpuTimePerFrame: 0,\n bufferMemory: 0,\n textureMemory: 0,\n renderbufferMemory: 0,\n gpuMemory: 0\n };\n this._metricsCounter = 0;\n\n this.setProps(props);\n\n // UNSAFE/experimental prop: only set at initialization to avoid performance hit\n if (props._typedArrayManagerProps) {\n typedArrayManager.setOptions(props._typedArrayManagerProps);\n }\n\n this.animationLoop.start();\n }\n\n /** Stop rendering and dispose all resources */\n finalize() {\n this.animationLoop.stop();\n this.animationLoop = null;\n this._lastPointerDownInfo = null;\n\n this.layerManager?.finalize();\n this.layerManager = null;\n\n this.viewManager?.finalize();\n this.viewManager = null;\n\n this.effectManager?.finalize();\n this.effectManager = null;\n\n this.deckRenderer?.finalize();\n this.deckRenderer = null;\n\n this.deckPicker?.finalize();\n this.deckPicker = null;\n\n this.eventManager?.destroy();\n this.eventManager = null;\n\n this.tooltip?.remove();\n this.tooltip = null;\n\n if (!this.props.canvas && !this.props.gl && this.canvas) {\n // remove internally created canvas\n this.canvas.parentElement?.removeChild(this.canvas);\n this.canvas = null;\n }\n }\n\n /** Partially update props */\n setProps(props: DeckProps): void {\n this.stats.get('setProps Time').timeStart();\n\n if ('onLayerHover' in props) {\n log.removed('onLayerHover', 'onHover')();\n }\n if ('onLayerClick' in props) {\n log.removed('onLayerClick', 'onClick')();\n }\n if (props.initialViewState && !deepEqual(this.props.initialViewState, props.initialViewState)) {\n // Overwrite internal view state\n this.viewState = props.initialViewState;\n }\n\n // Merge with existing props\n Object.assign(this.props, props);\n\n // Update CSS size of canvas\n this._setCanvasSize(this.props);\n\n // We need to overwrite CSS style width and height with actual, numeric values\n const resolvedProps: Required & {\n width: number;\n height: number;\n views: View[];\n viewState: Record;\n } = Object.create(this.props);\n Object.assign(resolvedProps, {\n views: this._getViews(),\n width: this.width,\n height: this.height,\n viewState: this._getViewState()\n });\n\n // Update the animation loop\n this.animationLoop.setProps(resolvedProps);\n\n // If initialized, update sub manager props\n if (this.layerManager) {\n this.viewManager!.setProps(resolvedProps);\n // Make sure that any new layer gets initialized with the current viewport\n this.layerManager.activateViewport(this.getViewports()[0]);\n this.layerManager.setProps(resolvedProps);\n this.effectManager!.setProps(resolvedProps);\n this.deckRenderer!.setProps(resolvedProps);\n this.deckPicker!.setProps(resolvedProps);\n }\n\n this.stats.get('setProps Time').timeEnd();\n }\n\n // Public API\n\n /**\n * Check if a redraw is needed\n * @returns `false` or a string summarizing the redraw reason\n */\n needsRedraw(\n opts: {\n /** Reset the redraw flag afterwards. Default `true` */\n clearRedrawFlags: boolean;\n } = {clearRedrawFlags: false}\n ): false | string {\n if (!this.layerManager) {\n // Not initialized or already finalized\n return false;\n }\n if (this.props._animate) {\n return 'Deck._animate';\n }\n\n let redraw: false | string = this._needsRedraw;\n\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n\n const viewManagerNeedsRedraw = this.viewManager!.needsRedraw(opts);\n const layerManagerNeedsRedraw = this.layerManager.needsRedraw(opts);\n const effectManagerNeedsRedraw = this.effectManager!.needsRedraw(opts);\n const deckRendererNeedsRedraw = this.deckRenderer!.needsRedraw(opts);\n\n redraw =\n redraw ||\n viewManagerNeedsRedraw ||\n layerManagerNeedsRedraw ||\n effectManagerNeedsRedraw ||\n deckRendererNeedsRedraw;\n return redraw;\n }\n\n /**\n * Redraw the GL context\n * @param reason If not provided, only redraw if deemed necessary. Otherwise redraw regardless of internal states.\n * @returns\n */\n redraw(reason?: string): void {\n if (!this.layerManager) {\n // Not yet initialized\n return;\n }\n // Check if we need to redraw\n let redrawReason = this.needsRedraw({clearRedrawFlags: true});\n // User-supplied should take precedent, however the redraw flags get cleared regardless\n redrawReason = reason || redrawReason;\n\n if (!redrawReason) {\n return;\n }\n\n this.stats.get('Redraw Count').incrementCount();\n if (this.props._customRender) {\n this.props._customRender(redrawReason);\n } else {\n this._drawLayers(redrawReason);\n }\n }\n\n /** Flag indicating that the Deck instance has initialized its resources and it's safe to call public methods. */\n get isInitialized(): boolean {\n return this.viewManager !== null;\n }\n\n /** Get a list of views that are currently rendered */\n getViews(): View[] {\n assert(this.viewManager);\n return this.viewManager.views;\n }\n\n /** Get a list of viewports that are currently rendered.\n * @param rect If provided, only returns viewports within the given bounding box.\n */\n getViewports(rect?: {x: number; y: number; width?: number; height?: number}): Viewport[] {\n assert(this.viewManager);\n return this.viewManager.getViewports(rect);\n }\n\n /** Query the object rendered on top at a given point */\n pickObject(opts: {\n /** x position in pixels */\n x: number;\n /** y position in pixels */\n y: number;\n /** Radius of tolerance in pixels. Default `0`. */\n radius?: number;\n /** A list of layer ids to query from. If not specified, then all pickable and visible layers are queried. */\n layerIds?: string[];\n /** If `true`, `info.coordinate` will be a 3D point by unprojecting the `x, y` screen coordinates onto the picked geometry. Default `false`. */\n unproject3D?: boolean;\n }): PickingInfo | null {\n const infos = this._pick('pickObject', 'pickObject Time', opts).result;\n return infos.length ? infos[0] : null;\n }\n\n /* Query all rendered objects at a given point */\n pickMultipleObjects(opts: {\n /** x position in pixels */\n x: number;\n /** y position in pixels */\n y: number;\n /** Radius of tolerance in pixels. Default `0`. */\n radius?: number;\n /** Specifies the max number of objects to return. Default `10`. */\n depth?: number;\n /** A list of layer ids to query from. If not specified, then all pickable and visible layers are queried. */\n layerIds?: string[];\n /** If `true`, `info.coordinate` will be a 3D point by unprojecting the `x, y` screen coordinates onto the picked geometry. Default `false`. */\n unproject3D?: boolean;\n }): PickingInfo[] {\n opts.depth = opts.depth || 10;\n return this._pick('pickObject', 'pickMultipleObjects Time', opts).result;\n }\n\n /* Query all objects rendered on top within a bounding box */\n pickObjects(opts: {\n /** Left of the bounding box in pixels */\n x: number;\n /** Top of the bounding box in pixels */\n y: number;\n /** Width of the bounding box in pixels. Default `1` */\n width?: number;\n /** Height of the bounding box in pixels. Default `1` */\n height?: number;\n /** A list of layer ids to query from. If not specified, then all pickable and visible layers are queried. */\n layerIds?: string[];\n /** If specified, limits the number of objects that can be returned. */\n maxObjects?: number | null;\n }): PickingInfo[] {\n return this._pick('pickObjects', 'pickObjects Time', opts);\n }\n\n /** Experimental\n * Add a global resource for sharing among layers\n */\n _addResources(\n resources: {\n [id: string]: any;\n },\n forceUpdate = false\n ) {\n for (const id in resources) {\n this.layerManager!.resourceManager.add({resourceId: id, data: resources[id], forceUpdate});\n }\n }\n\n /** Experimental\n * Remove a global resource\n */\n _removeResources(resourceIds: string[]) {\n for (const id of resourceIds) {\n this.layerManager!.resourceManager.remove(id);\n }\n }\n\n // Private Methods\n\n private _pick(\n method: 'pickObject',\n statKey: string,\n opts: PickByPointOptions & {layerIds?: string[]}\n ): {\n result: PickingInfo[];\n emptyInfo: PickingInfo;\n };\n private _pick(\n method: 'pickObjects',\n statKey: string,\n opts: PickByRectOptions & {layerIds?: string[]}\n ): PickingInfo[];\n\n private _pick(\n method: 'pickObject' | 'pickObjects',\n statKey: string,\n opts: (PickByPointOptions | PickByRectOptions) & {layerIds?: string[]}\n ) {\n assert(this.deckPicker);\n\n const {stats} = this;\n\n stats.get('Pick Count').incrementCount();\n stats.get(statKey).timeStart();\n\n const infos = this.deckPicker[method]({\n // layerManager, viewManager and effectManager are always defined if deckPicker is\n layers: this.layerManager!.getLayers(opts),\n views: this.viewManager!.getViews(),\n viewports: this.getViewports(opts),\n onViewportActive: this.layerManager!.activateViewport,\n effects: this.effectManager!.getEffects(),\n ...opts\n });\n\n stats.get(statKey).timeEnd();\n\n return infos;\n }\n\n /** Resolve props.canvas to element */\n private _createCanvas(props: DeckProps): HTMLCanvasElement {\n let canvas = props.canvas;\n\n // TODO EventManager should accept element id\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas) as HTMLCanvasElement;\n assert(canvas);\n }\n\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = props.id || 'deckgl-overlay';\n const parent = props.parent || document.body;\n parent.appendChild(canvas);\n }\n\n Object.assign(canvas.style, props.style);\n\n return canvas;\n }\n\n /** Updates canvas width and/or height, if provided as props */\n private _setCanvasSize(props: Required): void {\n if (!this.canvas) {\n return;\n }\n\n const {width, height} = props;\n // Set size ONLY if props are being provided, otherwise let canvas be layouted freely\n if (width || width === 0) {\n const cssWidth = Number.isFinite(width) ? `${width}px` : (width as string);\n this.canvas.style.width = cssWidth;\n }\n if (height || height === 0) {\n const cssHeight = Number.isFinite(height) ? `${height}px` : (height as string);\n // Note: position==='absolute' required for height 100% to work\n this.canvas.style.position = props.style?.position || 'absolute';\n this.canvas.style.height = cssHeight;\n }\n }\n\n /** If canvas size has changed, reads out the new size and update */\n private _updateCanvasSize(): void {\n const {canvas} = this;\n if (!canvas) {\n return;\n }\n // Fallback to width/height when clientWidth/clientHeight are 0 or undefined.\n const newWidth = canvas.clientWidth || canvas.width;\n const newHeight = canvas.clientHeight || canvas.height;\n if (newWidth !== this.width || newHeight !== this.height) {\n // @ts-expect-error private assign to read-only property\n this.width = newWidth;\n // @ts-expect-error private assign to read-only property\n this.height = newHeight;\n this.viewManager?.setProps({width: newWidth, height: newHeight});\n this.props.onResize({width: newWidth, height: newHeight});\n }\n }\n\n private _createAnimationLoop(props: DeckProps): AnimationLoop {\n const {\n width,\n height,\n gl,\n glOptions,\n debug,\n onError,\n onBeforeRender,\n onAfterRender,\n useDevicePixels\n } = props;\n\n return new AnimationLoop({\n width,\n height,\n useDevicePixels,\n autoResizeViewport: false,\n gl,\n onCreateContext: opts =>\n createGLContext({\n ...glOptions,\n ...opts,\n canvas: this.canvas,\n debug,\n onContextLost: () => this._onContextLost()\n }),\n onInitialize: context => this._setGLContext(context.gl),\n onRender: this._onRenderFrame.bind(this),\n onBeforeRender,\n onAfterRender,\n onError\n });\n }\n\n // Get the most relevant view state: props.viewState, if supplied, shadows internal viewState\n // TODO: For backwards compatibility ensure numeric width and height is added to the viewState\n private _getViewState(): Record {\n return this.props.viewState || this.viewState;\n }\n\n // Get the view descriptor list\n private _getViews(): View[] {\n // Default to a full screen map view port\n let views = this.props.views || [new MapView({id: 'default-view'})];\n views = Array.isArray(views) ? views : [views];\n if (views.length && this.props.controller) {\n // Backward compatibility: support controller prop\n views[0].props.controller = this.props.controller;\n }\n return views;\n }\n\n private _onContextLost() {\n const {onError} = this.props;\n if (this.animationLoop && onError) {\n onError(new Error('WebGL context is lost'));\n }\n }\n\n // The `pointermove` event may fire multiple times in between two animation frames,\n // it's a waste of time to run picking without rerender. Instead we save the last pick\n // request and only do it once on the next animation frame.\n /** Internal use only: event handler for pointerdown */\n _onPointerMove = (event: MjolnirPointerEvent) => {\n const {_pickRequest} = this;\n if (event.type === 'pointerleave') {\n _pickRequest.x = -1;\n _pickRequest.y = -1;\n _pickRequest.radius = 0;\n } else if (event.leftButton || event.rightButton) {\n // Do not trigger onHover callbacks if mouse button is down.\n return;\n } else {\n const pos = event.offsetCenter;\n // Do not trigger callbacks when click/hover position is invalid. Doing so will cause a\n // assertion error when attempting to unproject the position.\n if (!pos) {\n return;\n }\n _pickRequest.x = pos.x;\n _pickRequest.y = pos.y;\n _pickRequest.radius = this.props.pickingRadius;\n }\n\n if (this.layerManager) {\n this.layerManager.context.mousePosition = {x: _pickRequest.x, y: _pickRequest.y};\n }\n\n _pickRequest.event = event;\n };\n\n /** Actually run picking */\n private _pickAndCallback() {\n const {_pickRequest} = this;\n\n if (_pickRequest.event) {\n // Perform picking\n const {result, emptyInfo} = this._pick('pickObject', 'pickObject Time', _pickRequest);\n this.cursorState.isHovering = result.length > 0;\n\n // There are 4 possible scenarios:\n // result is [outInfo, pickedInfo] (moved from one pickable layer to another)\n // result is [outInfo] (moved outside of a pickable layer)\n // result is [pickedInfo] (moved into or over a pickable layer)\n // result is [] (nothing is or was picked)\n //\n // `layer.props.onHover` should be called on all affected layers (out/over)\n // `deck.props.onHover` should be called with the picked info if any, or empty info otherwise\n // `deck.props.getTooltip` should be called with the picked info if any, or empty info otherwise\n\n // Execute callbacks\n let pickedInfo = emptyInfo;\n let handled = false;\n for (const info of result) {\n pickedInfo = info;\n handled = info.layer?.onHover(info, _pickRequest.event) || handled;\n }\n if (!handled && this.props.onHover) {\n this.props.onHover(pickedInfo, _pickRequest.event);\n }\n\n // Update tooltip\n if (this.props.getTooltip && this.tooltip) {\n const displayInfo = this.props.getTooltip(pickedInfo);\n this.tooltip.setTooltip(displayInfo, pickedInfo.x, pickedInfo.y);\n }\n\n // Clear pending pickRequest\n _pickRequest.event = null;\n }\n }\n\n private _updateCursor(): void {\n const container = this.props.parent || this.canvas;\n if (container) {\n container.style.cursor = this.props.getCursor(this.cursorState);\n }\n }\n\n private _setGLContext(gl: WebGLRenderingContext) {\n if (this.layerManager) {\n return;\n }\n\n // if external context...\n if (!this.canvas) {\n this.canvas = gl.canvas;\n instrumentGLContext(gl, {enable: true, copyState: true});\n }\n\n this.tooltip = new Tooltip(this.canvas);\n\n setParameters(gl, {\n blend: true,\n blendFunc: [GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA, GL.ONE, GL.ONE_MINUS_SRC_ALPHA],\n polygonOffsetFill: true,\n depthTest: true,\n depthFunc: GL.LEQUAL\n });\n\n this.props.onWebGLInitialized(gl);\n\n // timeline for transitions\n const timeline = new Timeline();\n timeline.play();\n this.animationLoop.attachTimeline(timeline);\n\n this.eventManager = new EventManager(this.props.parent || gl.canvas, {\n touchAction: this.props.touchAction,\n recognizerOptions: this.props.eventRecognizerOptions,\n events: {\n pointerdown: this._onPointerDown,\n pointermove: this._onPointerMove,\n pointerleave: this._onPointerMove\n }\n });\n for (const eventType in EVENTS) {\n this.eventManager.on(eventType as keyof typeof EVENTS, this._onEvent);\n }\n\n this.viewManager = new ViewManager({\n timeline,\n eventManager: this.eventManager,\n onViewStateChange: this._onViewStateChange.bind(this),\n onInteractionStateChange: this._onInteractionStateChange.bind(this),\n views: this._getViews(),\n viewState: this._getViewState(),\n width: this.width,\n height: this.height\n });\n\n // viewManager must be initialized before layerManager\n // layerManager depends on viewport created by viewManager.\n const viewport = this.viewManager.getViewports()[0];\n\n // Note: avoid React setState due GL animation loop / setState timing issue\n this.layerManager = new LayerManager(gl, {\n deck: this,\n stats: this.stats,\n viewport,\n timeline\n });\n\n this.effectManager = new EffectManager();\n\n this.deckRenderer = new DeckRenderer(gl);\n\n this.deckPicker = new DeckPicker(gl);\n\n this.setProps(this.props);\n\n this._updateCanvasSize();\n this.props.onLoad();\n }\n\n /** Internal only: default render function (redraw all layers and views) */\n _drawLayers(\n redrawReason: string,\n renderOptions?: {\n target?: Framebuffer;\n layerFilter?: (context: FilterContext) => boolean;\n layers?: Layer[];\n viewports?: Viewport[];\n views?: {[viewId: string]: View};\n pass?: string;\n effects?: Effect[];\n clearStack?: boolean;\n clearCanvas?: boolean;\n }\n ) {\n const {gl} = this.layerManager!.context;\n\n setParameters(gl, this.props.parameters);\n\n this.props.onBeforeRender({gl});\n\n this.deckRenderer!.renderLayers({\n target: this.props._framebuffer,\n layers: this.layerManager!.getLayers(),\n viewports: this.viewManager!.getViewports(),\n onViewportActive: this.layerManager!.activateViewport,\n views: this.viewManager!.getViews(),\n pass: 'screen',\n redrawReason,\n effects: this.effectManager!.getEffects(),\n ...renderOptions\n });\n\n this.props.onAfterRender({gl});\n }\n\n // Callbacks\n\n private _onRenderFrame(animationProps: any) {\n this._getFrameStats();\n\n // Log perf stats every second\n if (this._metricsCounter++ % 60 === 0) {\n this._getMetrics();\n this.stats.reset();\n log.table(4, this.metrics)();\n\n // Experimental: report metrics\n if (this.props._onMetrics) {\n this.props._onMetrics(this.metrics);\n }\n }\n\n this._updateCanvasSize();\n\n this._updateCursor();\n\n // If view state has changed, clear tooltip\n if (this.tooltip!.isVisible && this.viewManager!.needsRedraw()) {\n this.tooltip!.setTooltip(null);\n }\n\n // Update layers if needed (e.g. some async prop has loaded)\n // Note: This can trigger a redraw\n this.layerManager!.updateLayers();\n\n // Perform picking request if any\n this._pickAndCallback();\n\n // Redraw if necessary\n this.redraw();\n\n // Update viewport transition if needed\n // Note: this can trigger `onViewStateChange`, and affect layers\n // We want to defer these changes to the next frame\n if (this.viewManager) {\n this.viewManager.updateViewStates();\n }\n }\n\n // Callbacks\n\n private _onViewStateChange(params: ViewStateChangeParameters & {viewId: string}) {\n // Let app know that view state is changing, and give it a chance to change it\n const viewState = this.props.onViewStateChange(params) || params.viewState;\n\n // If initialViewState was set on creation, auto track position\n if (this.viewState) {\n this.viewState = {...this.viewState, [params.viewId]: viewState};\n if (!this.props.viewState) {\n // Apply internal view state\n if (this.viewManager) {\n this.viewManager.setProps({viewState: this.viewState});\n }\n }\n }\n }\n\n private _onInteractionStateChange(interactionState: InteractionState) {\n this.cursorState.isDragging = interactionState.isDragging || false;\n this.props.onInteractionStateChange(interactionState);\n }\n\n /** Internal use only: event handler for click & drag */\n _onEvent = (event: MjolnirGestureEvent) => {\n const eventOptions = EVENTS[event.type];\n const pos = event.offsetCenter;\n\n if (!eventOptions || !pos || !this.layerManager) {\n return;\n }\n\n // Reuse last picked object\n const layers = this.layerManager.getLayers();\n const info = this.deckPicker!.getLastPickedObject(\n {\n x: pos.x,\n y: pos.y,\n layers,\n viewports: this.getViewports(pos)\n },\n this._lastPointerDownInfo\n );\n\n const {layer} = info;\n const layerHandler =\n layer && (layer[eventOptions.handler] || layer.props[eventOptions.handler]);\n const rootHandler = this.props[eventOptions.handler];\n let handled = false;\n\n if (layerHandler) {\n handled = layerHandler.call(layer, info, event);\n }\n if (!handled && rootHandler) {\n rootHandler(info, event);\n }\n };\n\n /** Internal use only: evnet handler for pointerdown */\n _onPointerDown = (event: MjolnirPointerEvent) => {\n const pos = event.offsetCenter;\n const pickedInfo = this._pick('pickObject', 'pickObject Time', {\n x: pos.x,\n y: pos.y,\n radius: this.props.pickingRadius\n });\n this._lastPointerDownInfo = pickedInfo.result[0] || pickedInfo.emptyInfo;\n };\n\n private _getFrameStats(): void {\n const {stats} = this;\n stats.get('frameRate').timeEnd();\n stats.get('frameRate').timeStart();\n\n // Get individual stats from luma.gl so reset works\n const animationLoopStats = this.animationLoop.stats;\n stats.get('GPU Time').addTime(animationLoopStats.get('GPU Time').lastTiming);\n stats.get('CPU Time').addTime(animationLoopStats.get('CPU Time').lastTiming);\n }\n\n private _getMetrics(): void {\n const {metrics, stats} = this;\n metrics.fps = stats.get('frameRate').getHz();\n metrics.setPropsTime = stats.get('setProps Time').time;\n metrics.updateAttributesTime = stats.get('Update Attributes').time;\n metrics.framesRedrawn = stats.get('Redraw Count').count;\n metrics.pickTime =\n stats.get('pickObject Time').time +\n stats.get('pickMultipleObjects Time').time +\n stats.get('pickObjects Time').time;\n metrics.pickCount = stats.get('Pick Count').count;\n\n // Luma stats\n metrics.gpuTime = stats.get('GPU Time').time;\n metrics.cpuTime = stats.get('CPU Time').time;\n metrics.gpuTimePerFrame = stats.get('GPU Time').getAverageTime();\n metrics.cpuTimePerFrame = stats.get('CPU Time').getAverageTime();\n\n const memoryStats = lumaStats.get('Memory Usage');\n metrics.bufferMemory = memoryStats.get('Buffer Memory').count;\n metrics.textureMemory = memoryStats.get('Texture Memory').count;\n metrics.renderbufferMemory = memoryStats.get('Renderbuffer Memory').count;\n metrics.gpuMemory = memoryStats.get('GPU Memory').count;\n }\n}\n","import type {Loader} from '@loaders.gl/loader-utils';\n\nfunction isJSON(text: string): boolean {\n const firstChar = text[0];\n const lastChar = text[text.length - 1];\n return (firstChar === '{' && lastChar === '}') || (firstChar === '[' && lastChar === ']');\n}\n\n// A light weight version instead of @loaders.gl/json (stream processing etc.)\nexport default {\n id: 'JSON',\n name: 'JSON',\n module: '',\n version: '',\n options: {},\n extensions: ['json', 'geojson'],\n mimeTypes: ['application/json', 'application/geo+json'],\n testText: isJSON,\n parseTextSync: JSON.parse\n} as Loader;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {registerLoaders} from '@loaders.gl/core';\nimport {ImageLoader} from '@loaders.gl/images';\n\nimport log from '../utils/log';\nimport {register} from '../debug';\nimport jsonLoader from '../utils/json-loader';\n\n// Version detection using babel plugin\n// Fallback for tests and SSR since global variable is defined by Webpack.\nconst version =\n // @ts-expect-error __VERSION__ is replaced during transpilation\n typeof __VERSION__ !== 'undefined'\n ? // @ts-expect-error\n __VERSION__\n : globalThis.DECK_VERSION || 'untranspiled source';\n\n// Note: a `deck` object not created by deck.gl may exist in the global scope\nconst existingVersion = globalThis.deck && globalThis.deck.VERSION;\n\nif (existingVersion && existingVersion !== version) {\n throw new Error(`deck.gl - multiple versions detected: ${existingVersion} vs ${version}`);\n}\n\nif (!existingVersion) {\n log.log(1, `deck.gl ${version}`)();\n\n globalThis.deck = {\n ...globalThis.deck,\n VERSION: version,\n version,\n log,\n // experimental\n _registerLoggers: register\n };\n\n registerLoaders([\n jsonLoader,\n // @ts-expect-error non-standard Loader format\n [ImageLoader, {imagebitmap: {premultiplyAlpha: 'none'}}]\n ]);\n}\n\nexport default globalThis.deck;\n","'use strict';\n\nmodule.exports = Pbf;\n\nvar ieee754 = require('ieee754');\n\nfunction Pbf(buf) {\n this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);\n this.pos = 0;\n this.type = 0;\n this.length = this.buf.length;\n}\n\nPbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum\nPbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64\nPbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields\nPbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32\n\nvar SHIFT_LEFT_32 = (1 << 16) * (1 << 16),\n SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\n\n// Threshold chosen based on both benchmarking and knowledge about browser string\n// data structures (which currently switch structure types at 12 bytes or more)\nvar TEXT_DECODER_MIN_LENGTH = 12;\nvar utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf8');\n\nPbf.prototype = {\n\n destroy: function() {\n this.buf = null;\n },\n\n // === READING =================================================================\n\n readFields: function(readField, result, end) {\n end = end || this.length;\n\n while (this.pos < end) {\n var val = this.readVarint(),\n tag = val >> 3,\n startPos = this.pos;\n\n this.type = val & 0x7;\n readField(tag, result, this);\n\n if (this.pos === startPos) this.skip(val);\n }\n return result;\n },\n\n readMessage: function(readField, result) {\n return this.readFields(readField, result, this.readVarint() + this.pos);\n },\n\n readFixed32: function() {\n var val = readUInt32(this.buf, this.pos);\n this.pos += 4;\n return val;\n },\n\n readSFixed32: function() {\n var val = readInt32(this.buf, this.pos);\n this.pos += 4;\n return val;\n },\n\n // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)\n\n readFixed64: function() {\n var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n this.pos += 8;\n return val;\n },\n\n readSFixed64: function() {\n var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n this.pos += 8;\n return val;\n },\n\n readFloat: function() {\n var val = ieee754.read(this.buf, this.pos, true, 23, 4);\n this.pos += 4;\n return val;\n },\n\n readDouble: function() {\n var val = ieee754.read(this.buf, this.pos, true, 52, 8);\n this.pos += 8;\n return val;\n },\n\n readVarint: function(isSigned) {\n var buf = this.buf,\n val, b;\n\n b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) return val;\n b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) return val;\n b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;\n b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;\n b = buf[this.pos]; val |= (b & 0x0f) << 28;\n\n return readVarintRemainder(val, isSigned, this);\n },\n\n readVarint64: function() { // for compatibility with v2.0.1\n return this.readVarint(true);\n },\n\n readSVarint: function() {\n var num = this.readVarint();\n return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding\n },\n\n readBoolean: function() {\n return Boolean(this.readVarint());\n },\n\n readString: function() {\n var end = this.readVarint() + this.pos;\n var pos = this.pos;\n this.pos = end;\n\n if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) {\n // longer strings are fast with the built-in browser TextDecoder API\n return readUtf8TextDecoder(this.buf, pos, end);\n }\n // short strings are fast with our custom implementation\n return readUtf8(this.buf, pos, end);\n },\n\n readBytes: function() {\n var end = this.readVarint() + this.pos,\n buffer = this.buf.subarray(this.pos, end);\n this.pos = end;\n return buffer;\n },\n\n // verbose for performance reasons; doesn't affect gzipped size\n\n readPackedVarint: function(arr, isSigned) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned));\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readVarint(isSigned));\n return arr;\n },\n readPackedSVarint: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readSVarint());\n return arr;\n },\n readPackedBoolean: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readBoolean());\n return arr;\n },\n readPackedFloat: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readFloat());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readFloat());\n return arr;\n },\n readPackedDouble: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readDouble());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readDouble());\n return arr;\n },\n readPackedFixed32: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readFixed32());\n return arr;\n },\n readPackedSFixed32: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readSFixed32());\n return arr;\n },\n readPackedFixed64: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readFixed64());\n return arr;\n },\n readPackedSFixed64: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readSFixed64());\n return arr;\n },\n\n skip: function(val) {\n var type = val & 0x7;\n if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}\n else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;\n else if (type === Pbf.Fixed32) this.pos += 4;\n else if (type === Pbf.Fixed64) this.pos += 8;\n else throw new Error('Unimplemented type: ' + type);\n },\n\n // === WRITING =================================================================\n\n writeTag: function(tag, type) {\n this.writeVarint((tag << 3) | type);\n },\n\n realloc: function(min) {\n var length = this.length || 16;\n\n while (length < this.pos + min) length *= 2;\n\n if (length !== this.length) {\n var buf = new Uint8Array(length);\n buf.set(this.buf);\n this.buf = buf;\n this.length = length;\n }\n },\n\n finish: function() {\n this.length = this.pos;\n this.pos = 0;\n return this.buf.subarray(0, this.length);\n },\n\n writeFixed32: function(val) {\n this.realloc(4);\n writeInt32(this.buf, val, this.pos);\n this.pos += 4;\n },\n\n writeSFixed32: function(val) {\n this.realloc(4);\n writeInt32(this.buf, val, this.pos);\n this.pos += 4;\n },\n\n writeFixed64: function(val) {\n this.realloc(8);\n writeInt32(this.buf, val & -1, this.pos);\n writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n this.pos += 8;\n },\n\n writeSFixed64: function(val) {\n this.realloc(8);\n writeInt32(this.buf, val & -1, this.pos);\n writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n this.pos += 8;\n },\n\n writeVarint: function(val) {\n val = +val || 0;\n\n if (val > 0xfffffff || val < 0) {\n writeBigVarint(val, this);\n return;\n }\n\n this.realloc(4);\n\n this.buf[this.pos++] = val & 0x7f | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n this.buf[this.pos++] = (val >>> 7) & 0x7f;\n },\n\n writeSVarint: function(val) {\n this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);\n },\n\n writeBoolean: function(val) {\n this.writeVarint(Boolean(val));\n },\n\n writeString: function(str) {\n str = String(str);\n this.realloc(str.length * 4);\n\n this.pos++; // reserve 1 byte for short string length\n\n var startPos = this.pos;\n // write the string directly to the buffer and see how much was written\n this.pos = writeUtf8(this.buf, str, this.pos);\n var len = this.pos - startPos;\n\n if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n // finally, write the message length in the reserved place and restore the position\n this.pos = startPos - 1;\n this.writeVarint(len);\n this.pos += len;\n },\n\n writeFloat: function(val) {\n this.realloc(4);\n ieee754.write(this.buf, val, this.pos, true, 23, 4);\n this.pos += 4;\n },\n\n writeDouble: function(val) {\n this.realloc(8);\n ieee754.write(this.buf, val, this.pos, true, 52, 8);\n this.pos += 8;\n },\n\n writeBytes: function(buffer) {\n var len = buffer.length;\n this.writeVarint(len);\n this.realloc(len);\n for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];\n },\n\n writeRawMessage: function(fn, obj) {\n this.pos++; // reserve 1 byte for short message length\n\n // write the message directly to the buffer and see how much was written\n var startPos = this.pos;\n fn(obj, this);\n var len = this.pos - startPos;\n\n if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n // finally, write the message length in the reserved place and restore the position\n this.pos = startPos - 1;\n this.writeVarint(len);\n this.pos += len;\n },\n\n writeMessage: function(tag, fn, obj) {\n this.writeTag(tag, Pbf.Bytes);\n this.writeRawMessage(fn, obj);\n },\n\n writePackedVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr); },\n writePackedSVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr); },\n writePackedBoolean: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr); },\n writePackedFloat: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr); },\n writePackedDouble: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr); },\n writePackedFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr); },\n writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); },\n writePackedFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr); },\n writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); },\n\n writeBytesField: function(tag, buffer) {\n this.writeTag(tag, Pbf.Bytes);\n this.writeBytes(buffer);\n },\n writeFixed32Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed32);\n this.writeFixed32(val);\n },\n writeSFixed32Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed32);\n this.writeSFixed32(val);\n },\n writeFixed64Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed64);\n this.writeFixed64(val);\n },\n writeSFixed64Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed64);\n this.writeSFixed64(val);\n },\n writeVarintField: function(tag, val) {\n this.writeTag(tag, Pbf.Varint);\n this.writeVarint(val);\n },\n writeSVarintField: function(tag, val) {\n this.writeTag(tag, Pbf.Varint);\n this.writeSVarint(val);\n },\n writeStringField: function(tag, str) {\n this.writeTag(tag, Pbf.Bytes);\n this.writeString(str);\n },\n writeFloatField: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed32);\n this.writeFloat(val);\n },\n writeDoubleField: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed64);\n this.writeDouble(val);\n },\n writeBooleanField: function(tag, val) {\n this.writeVarintField(tag, Boolean(val));\n }\n};\n\nfunction readVarintRemainder(l, s, p) {\n var buf = p.buf,\n h, b;\n\n b = buf[p.pos++]; h = (b & 0x70) >> 4; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 3; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);\n\n throw new Error('Expected varint not more than 10 bytes');\n}\n\nfunction readPackedEnd(pbf) {\n return pbf.type === Pbf.Bytes ?\n pbf.readVarint() + pbf.pos : pbf.pos + 1;\n}\n\nfunction toNum(low, high, isSigned) {\n if (isSigned) {\n return high * 0x100000000 + (low >>> 0);\n }\n\n return ((high >>> 0) * 0x100000000) + (low >>> 0);\n}\n\nfunction writeBigVarint(val, pbf) {\n var low, high;\n\n if (val >= 0) {\n low = (val % 0x100000000) | 0;\n high = (val / 0x100000000) | 0;\n } else {\n low = ~(-val % 0x100000000);\n high = ~(-val / 0x100000000);\n\n if (low ^ 0xffffffff) {\n low = (low + 1) | 0;\n } else {\n low = 0;\n high = (high + 1) | 0;\n }\n }\n\n if (val >= 0x10000000000000000 || val < -0x10000000000000000) {\n throw new Error('Given varint doesn\\'t fit into 10 bytes');\n }\n\n pbf.realloc(10);\n\n writeBigVarintLow(low, high, pbf);\n writeBigVarintHigh(high, pbf);\n}\n\nfunction writeBigVarintLow(low, high, pbf) {\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos] = low & 0x7f;\n}\n\nfunction writeBigVarintHigh(high, pbf) {\n var lsb = (high & 0x07) << 4;\n\n pbf.buf[pbf.pos++] |= lsb | ((high >>>= 3) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f;\n}\n\nfunction makeRoomForExtraLength(startPos, len, pbf) {\n var extraLen =\n len <= 0x3fff ? 1 :\n len <= 0x1fffff ? 2 :\n len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));\n\n // if 1 byte isn't enough for encoding message length, shift the data to the right\n pbf.realloc(extraLen);\n for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];\n}\n\nfunction writePackedVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]); }\nfunction writePackedSVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]); }\nfunction writePackedFloat(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]); }\nfunction writePackedDouble(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]); }\nfunction writePackedBoolean(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]); }\nfunction writePackedFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]); }\nfunction writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }\nfunction writePackedFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]); }\nfunction writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }\n\n// Buffer code below from https://github.com/feross/buffer, MIT-licensed\n\nfunction readUInt32(buf, pos) {\n return ((buf[pos]) |\n (buf[pos + 1] << 8) |\n (buf[pos + 2] << 16)) +\n (buf[pos + 3] * 0x1000000);\n}\n\nfunction writeInt32(buf, val, pos) {\n buf[pos] = val;\n buf[pos + 1] = (val >>> 8);\n buf[pos + 2] = (val >>> 16);\n buf[pos + 3] = (val >>> 24);\n}\n\nfunction readInt32(buf, pos) {\n return ((buf[pos]) |\n (buf[pos + 1] << 8) |\n (buf[pos + 2] << 16)) +\n (buf[pos + 3] << 24);\n}\n\nfunction readUtf8(buf, pos, end) {\n var str = '';\n var i = pos;\n\n while (i < end) {\n var b0 = buf[i];\n var c = null; // codepoint\n var bytesPerSequence =\n b0 > 0xEF ? 4 :\n b0 > 0xDF ? 3 :\n b0 > 0xBF ? 2 : 1;\n\n if (i + bytesPerSequence > end) break;\n\n var b1, b2, b3;\n\n if (bytesPerSequence === 1) {\n if (b0 < 0x80) {\n c = b0;\n }\n } else if (bytesPerSequence === 2) {\n b1 = buf[i + 1];\n if ((b1 & 0xC0) === 0x80) {\n c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);\n if (c <= 0x7F) {\n c = null;\n }\n }\n } else if (bytesPerSequence === 3) {\n b1 = buf[i + 1];\n b2 = buf[i + 2];\n if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {\n c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);\n if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {\n c = null;\n }\n }\n } else if (bytesPerSequence === 4) {\n b1 = buf[i + 1];\n b2 = buf[i + 2];\n b3 = buf[i + 3];\n if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);\n if (c <= 0xFFFF || c >= 0x110000) {\n c = null;\n }\n }\n }\n\n if (c === null) {\n c = 0xFFFD;\n bytesPerSequence = 1;\n\n } else if (c > 0xFFFF) {\n c -= 0x10000;\n str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);\n c = 0xDC00 | c & 0x3FF;\n }\n\n str += String.fromCharCode(c);\n i += bytesPerSequence;\n }\n\n return str;\n}\n\nfunction readUtf8TextDecoder(buf, pos, end) {\n return utf8TextDecoder.decode(buf.subarray(pos, end));\n}\n\nfunction writeUtf8(buf, str, pos) {\n for (var i = 0, c, lead; i < str.length; i++) {\n c = str.charCodeAt(i); // code point\n\n if (c > 0xD7FF && c < 0xE000) {\n if (lead) {\n if (c < 0xDC00) {\n buf[pos++] = 0xEF;\n buf[pos++] = 0xBF;\n buf[pos++] = 0xBD;\n lead = c;\n continue;\n } else {\n c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;\n lead = null;\n }\n } else {\n if (c > 0xDBFF || (i + 1 === str.length)) {\n buf[pos++] = 0xEF;\n buf[pos++] = 0xBF;\n buf[pos++] = 0xBD;\n } else {\n lead = c;\n }\n continue;\n }\n } else if (lead) {\n buf[pos++] = 0xEF;\n buf[pos++] = 0xBF;\n buf[pos++] = 0xBD;\n lead = null;\n }\n\n if (c < 0x80) {\n buf[pos++] = c;\n } else {\n if (c < 0x800) {\n buf[pos++] = c >> 0x6 | 0xC0;\n } else {\n if (c < 0x10000) {\n buf[pos++] = c >> 0xC | 0xE0;\n } else {\n buf[pos++] = c >> 0x12 | 0xF0;\n buf[pos++] = c >> 0xC & 0x3F | 0x80;\n }\n buf[pos++] = c >> 0x6 & 0x3F | 0x80;\n }\n buf[pos++] = c & 0x3F | 0x80;\n }\n }\n return pos;\n}\n","const jsep = require('jsep');\n\n/**\n * Evaluation code from JSEP project, under MIT License.\n * Copyright (c) 2013 Stephen Oney, http://jsep.from.so/\n */\n\nconst binops = {\n '||': function (a, b) { return a || b; },\n '&&': function (a, b) { return a && b; },\n '|': function (a, b) { return a | b; },\n '^': function (a, b) { return a ^ b; },\n '&': function (a, b) { return a & b; },\n '==': function (a, b) { return a == b; }, // jshint ignore:line\n '!=': function (a, b) { return a != b; }, // jshint ignore:line\n '===': function (a, b) { return a === b; },\n '!==': function (a, b) { return a !== b; },\n '<': function (a, b) { return a < b; },\n '>': function (a, b) { return a > b; },\n '<=': function (a, b) { return a <= b; },\n '>=': function (a, b) { return a >= b; },\n '<<': function (a, b) { return a << b; },\n '>>': function (a, b) { return a >> b; },\n '>>>': function (a, b) { return a >>> b; },\n '+': function (a, b) { return a + b; },\n '-': function (a, b) { return a - b; },\n '*': function (a, b) { return a * b; },\n '/': function (a, b) { return a / b; },\n '%': function (a, b) { return a % b; }\n};\n\nconst unops = {\n '-' : function (a) { return -a; },\n '+' : function (a) { return +a; },\n '~' : function (a) { return ~a; },\n '!' : function (a) { return !a; },\n};\n\nfunction evaluateArray ( list, context ) {\n return list.map(function (v) { return evaluate(v, context); });\n}\n\nasync function evaluateArrayAsync( list, context ) {\n const res = await Promise.all(list.map((v) => evaluateAsync(v, context)));\n return res;\n}\n\nfunction evaluateMember ( node, context ) {\n const object = evaluate(node.object, context);\n if ( node.computed ) {\n return [object, object[evaluate(node.property, context)]];\n } else {\n return [object, object[node.property.name]];\n }\n}\n\nasync function evaluateMemberAsync( node, context ) {\n const object = await evaluateAsync(node.object, context);\n if ( node.computed) {\n return [object, object[await evaluateAsync(node.property, context)]];\n } else {\n return [object, object[node.property.name]];\n }\n}\n\nfunction evaluate ( node, context ) {\n\n switch ( node.type ) {\n\n case 'ArrayExpression':\n return evaluateArray( node.elements, context );\n\n case 'BinaryExpression':\n return binops[ node.operator ]( evaluate( node.left, context ), evaluate( node.right, context ) );\n\n case 'CallExpression':\n let caller, fn, assign;\n if (node.callee.type === 'MemberExpression') {\n assign = evaluateMember( node.callee, context );\n caller = assign[0];\n fn = assign[1];\n } else {\n fn = evaluate( node.callee, context );\n }\n if (typeof fn !== 'function') { return undefined; }\n return fn.apply( caller, evaluateArray( node.arguments, context ) );\n\n case 'ConditionalExpression':\n return evaluate( node.test, context )\n ? evaluate( node.consequent, context )\n : evaluate( node.alternate, context );\n\n case 'Identifier':\n return context[node.name];\n\n case 'Literal':\n return node.value;\n\n case 'LogicalExpression':\n if (node.operator === '||') {\n return evaluate( node.left, context ) || evaluate( node.right, context );\n } else if (node.operator === '&&') {\n return evaluate( node.left, context ) && evaluate( node.right, context );\n }\n return binops[ node.operator ]( evaluate( node.left, context ), evaluate( node.right, context ) );\n\n case 'MemberExpression':\n return evaluateMember(node, context)[1];\n\n case 'ThisExpression':\n return context;\n\n case 'UnaryExpression':\n return unops[ node.operator ]( evaluate( node.argument, context ) );\n\n default:\n return undefined;\n }\n\n}\n\nasync function evaluateAsync( node, context ) {\n\n switch ( node.type ) {\n\n case 'ArrayExpression':\n return await evaluateArrayAsync( node.elements, context );\n\n case 'BinaryExpression': {\n const [left, right] = await Promise.all([\n evaluateAsync( node.left, context ),\n evaluateAsync( node.right, context )\n ]);\n return binops[ node.operator ]( left, right );\n }\n\n case 'CallExpression':\n let caller, fn, assign;\n if (node.callee.type === 'MemberExpression') {\n assign = await evaluateMemberAsync( node.callee, context );\n caller = assign[0];\n fn = assign[1];\n } else {\n fn = await evaluateAsync( node.callee, context );\n }\n if (typeof fn !== 'function') {\n return undefined;\n }\n return await fn.apply(\n caller,\n await evaluateArrayAsync( node.arguments, context )\n );\n\n case 'ConditionalExpression':\n return (await evaluateAsync( node.test, context ))\n ? await evaluateAsync( node.consequent, context )\n : await evaluateAsync( node.alternate, context );\n\n case 'Identifier':\n return context[node.name];\n\n case 'Literal':\n return node.value;\n\n case 'LogicalExpression': {\n if (node.operator === '||') {\n return (\n (await evaluateAsync( node.left, context )) ||\n (await evaluateAsync( node.right, context ))\n );\n } else if (node.operator === '&&') {\n return (\n (await evaluateAsync( node.left, context )) &&\n (await evaluateAsync( node.right, context ))\n );\n }\n\n const [left, right] = await Promise.all([\n evaluateAsync( node.left, context ),\n evaluateAsync( node.right, context )\n ]);\n\n return binops[ node.operator ]( left, right );\n }\n\n case 'MemberExpression':\n return (await evaluateMemberAsync(node, context))[1];\n\n case 'ThisExpression':\n return context;\n\n case 'UnaryExpression':\n return unops[ node.operator ](await evaluateAsync( node.argument, context ));\n\n default:\n return undefined;\n }\n}\n\nfunction compile (expression) {\n return evaluate.bind(null, jsep(expression));\n}\n\nfunction compileAsync(expression) {\n return evaluateAsync.bind(null, jsep(expression));\n}\n\nmodule.exports = {\n parse: jsep,\n eval: evaluate,\n evalAsync: evaluateAsync,\n compile: compile,\n compileAsync: compileAsync\n};\n","import ShaderModule from './shader-module';\nimport { assert } from '../utils';\nexport function resolveModules(modules) {\n return getShaderDependencies(instantiateModules(modules));\n}\n\nfunction getShaderDependencies(modules) {\n const moduleMap = {};\n const moduleDepth = {};\n getDependencyGraph({\n modules,\n level: 0,\n moduleMap,\n moduleDepth\n });\n return Object.keys(moduleDepth).sort((a, b) => moduleDepth[b] - moduleDepth[a]).map(name => moduleMap[name]);\n}\n\nfunction getDependencyGraph(_ref) {\n let {\n modules,\n level,\n moduleMap,\n moduleDepth\n } = _ref;\n\n if (level >= 5) {\n throw new Error('Possible loop in shader dependency graph');\n }\n\n for (const module of modules) {\n moduleMap[module.name] = module;\n\n if (moduleDepth[module.name] === undefined || moduleDepth[module.name] < level) {\n moduleDepth[module.name] = level;\n }\n }\n\n for (const module of modules) {\n if (module.dependencies) {\n getDependencyGraph({\n modules: module.dependencies,\n level: level + 1,\n moduleMap,\n moduleDepth\n });\n }\n }\n}\n\nfunction instantiateModules(modules, seen) {\n return modules.map(module => {\n if (module instanceof ShaderModule) {\n return module;\n }\n\n assert(typeof module !== 'string', \"Shader module use by name is deprecated. Import shader module '\".concat(module, \"' and use it directly.\"));\n assert(module.name, 'shader module has no name');\n module = new ShaderModule(module);\n module.dependencies = instantiateModules(module.dependencies);\n return module;\n });\n}\n\nexport const TEST_EXPORTS = {\n getShaderDependencies,\n getDependencyGraph\n};\n//# sourceMappingURL=resolve-modules.js.map","export default function isOldIE() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const navigator = typeof window !== 'undefined' ? window.navigator || {} : {};\n const userAgent = opts.userAgent || navigator.userAgent || '';\n const isMSIE = userAgent.indexOf('MSIE ') !== -1;\n const isTrident = userAgent.indexOf('Trident/') !== -1;\n return isMSIE || isTrident;\n}\n//# sourceMappingURL=is-old-ie.js.map","import isOldIE from './is-old-ie';\nimport assert from './assert';\nconst GL_VENDOR = 0x1f00;\nconst GL_RENDERER = 0x1f01;\nconst GL_VERSION = 0x1f02;\nconst GL_SHADING_LANGUAGE_VERSION = 0x8b8c;\nconst WEBGL_FEATURES = {\n GLSL_FRAG_DATA: ['WEBGL_draw_buffers', true],\n GLSL_FRAG_DEPTH: ['EXT_frag_depth', true],\n GLSL_DERIVATIVES: ['OES_standard_derivatives', true],\n GLSL_TEXTURE_LOD: ['EXT_shader_texture_lod', true]\n};\nconst FEATURES = {};\nObject.keys(WEBGL_FEATURES).forEach(key => {\n FEATURES[key] = key;\n});\nexport { FEATURES };\n\nfunction isWebGL2(gl) {\n if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {\n return true;\n }\n\n return Boolean(gl && gl._version === 2);\n}\n\nexport function getContextInfo(gl) {\n const info = gl.getExtension('WEBGL_debug_renderer_info');\n const vendor = gl.getParameter(info && info.UNMASKED_VENDOR_WEBGL || GL_VENDOR);\n const renderer = gl.getParameter(info && info.UNMASKED_RENDERER_WEBGL || GL_RENDERER);\n const gpuVendor = identifyGPUVendor(vendor, renderer);\n const gpuInfo = {\n gpuVendor,\n vendor,\n renderer,\n version: gl.getParameter(GL_VERSION),\n shadingLanguageVersion: gl.getParameter(GL_SHADING_LANGUAGE_VERSION)\n };\n return gpuInfo;\n}\n\nfunction identifyGPUVendor(vendor, renderer) {\n if (vendor.match(/NVIDIA/i) || renderer.match(/NVIDIA/i)) {\n return 'NVIDIA';\n }\n\n if (vendor.match(/INTEL/i) || renderer.match(/INTEL/i)) {\n return 'INTEL';\n }\n\n if (vendor.match(/AMD/i) || renderer.match(/AMD/i) || vendor.match(/ATI/i) || renderer.match(/ATI/i)) {\n return 'AMD';\n }\n\n return 'UNKNOWN GPU';\n}\n\nconst compiledGlslExtensions = {};\nexport function canCompileGLGSExtension(gl, cap) {\n let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n if (!isOldIE(opts)) {\n return true;\n }\n\n if (cap in compiledGlslExtensions) {\n return compiledGlslExtensions[cap];\n }\n\n const extensionName = feature[0];\n const behavior = opts.behavior || 'enable';\n const source = \"#extension GL_\".concat(extensionName, \" : \").concat(behavior, \"\\nvoid main(void) {}\");\n const shader = gl.createShader(35633);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const canCompile = gl.getShaderParameter(shader, 35713);\n gl.deleteShader(shader);\n compiledGlslExtensions[cap] = canCompile;\n return canCompile;\n}\n\nfunction getFeature(gl, cap) {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n const extensionName = isWebGL2(gl) ? feature[1] || feature[0] : feature[0];\n const value = typeof extensionName === 'string' ? Boolean(gl.getExtension(extensionName)) : extensionName;\n assert(value === false || value === true);\n return value;\n}\n\nexport function hasFeatures(gl, features) {\n features = Array.isArray(features) ? features : [features];\n return features.every(feature => getFeature(gl, feature));\n}\n//# sourceMappingURL=webgl-info.js.map","function testVariable(qualifier) {\n return new RegExp(\"\\\\b\".concat(qualifier, \"[ \\\\t]+(\\\\w+[ \\\\t]+\\\\w+(\\\\[\\\\w+\\\\])?;)\"), 'g');\n}\n\nconst ES300_REPLACEMENTS = [[/^(#version[ \\t]+(100|300[ \\t]+es))?[ \\t]*\\n/, '#version 300 es\\n'], [/\\btexture(2D|2DProj|Cube)Lod(EXT)?\\(/g, 'textureLod('], [/\\btexture(2D|2DProj|Cube)(EXT)?\\(/g, 'texture(']];\nconst ES300_VERTEX_REPLACEMENTS = [...ES300_REPLACEMENTS, [testVariable('attribute'), 'in $1'], [testVariable('varying'), 'out $1']];\nconst ES300_FRAGMENT_REPLACEMENTS = [...ES300_REPLACEMENTS, [testVariable('varying'), 'in $1']];\nconst ES100_REPLACEMENTS = [[/^#version[ \\t]+300[ \\t]+es/, '#version 100'], [/\\btexture(2D|2DProj|Cube)Lod\\(/g, 'texture$1LodEXT('], [/\\btexture\\(/g, 'texture2D('], [/\\btextureLod\\(/g, 'texture2DLodEXT(']];\nconst ES100_VERTEX_REPLACEMENTS = [...ES100_REPLACEMENTS, [testVariable('in'), 'attribute $1'], [testVariable('out'), 'varying $1']];\nconst ES100_FRAGMENT_REPLACEMENTS = [...ES100_REPLACEMENTS, [testVariable('in'), 'varying $1']];\nconst ES100_FRAGMENT_OUTPUT_NAME = 'gl_FragColor';\nconst ES300_FRAGMENT_OUTPUT_REGEX = /\\bout[ \\t]+vec4[ \\t]+(\\w+)[ \\t]*;\\n?/;\nconst REGEX_START_OF_MAIN = /void\\s+main\\s*\\([^)]*\\)\\s*\\{\\n?/;\nexport default function transpileShader(source, targetGLSLVersion, isVertex) {\n switch (targetGLSLVersion) {\n case 300:\n return isVertex ? convertShader(source, ES300_VERTEX_REPLACEMENTS) : convertFragmentShaderTo300(source);\n\n case 100:\n return isVertex ? convertShader(source, ES100_VERTEX_REPLACEMENTS) : convertFragmentShaderTo100(source);\n\n default:\n throw new Error(\"unknown GLSL version \".concat(targetGLSLVersion));\n }\n}\n\nfunction convertShader(source, replacements) {\n for (const [pattern, replacement] of replacements) {\n source = source.replace(pattern, replacement);\n }\n\n return source;\n}\n\nfunction convertFragmentShaderTo300(source) {\n source = convertShader(source, ES300_FRAGMENT_REPLACEMENTS);\n const outputMatch = source.match(ES300_FRAGMENT_OUTPUT_REGEX);\n\n if (outputMatch) {\n const outputName = outputMatch[1];\n source = source.replace(new RegExp(\"\\\\b\".concat(ES100_FRAGMENT_OUTPUT_NAME, \"\\\\b\"), 'g'), outputName);\n } else {\n const outputName = 'fragmentColor';\n source = source.replace(REGEX_START_OF_MAIN, match => \"out vec4 \".concat(outputName, \";\\n\").concat(match)).replace(new RegExp(\"\\\\b\".concat(ES100_FRAGMENT_OUTPUT_NAME, \"\\\\b\"), 'g'), outputName);\n }\n\n return source;\n}\n\nfunction convertFragmentShaderTo100(source) {\n source = convertShader(source, ES100_FRAGMENT_REPLACEMENTS);\n const outputMatch = source.match(ES300_FRAGMENT_OUTPUT_REGEX);\n\n if (outputMatch) {\n const outputName = outputMatch[1];\n source = source.replace(ES300_FRAGMENT_OUTPUT_REGEX, '').replace(new RegExp(\"\\\\b\".concat(outputName, \"\\\\b\"), 'g'), ES100_FRAGMENT_OUTPUT_NAME);\n }\n\n return source;\n}\n//# sourceMappingURL=transpile-shader.js.map","import { VERTEX_SHADER, FRAGMENT_SHADER } from './constants';\nimport { resolveModules } from './resolve-modules';\nimport { getPlatformShaderDefines, getVersionDefines } from './platform-defines';\nimport injectShader, { DECLARATION_INJECT_MARKER } from './inject-shader';\nimport transpileShader from './transpile-shader';\nimport { assert } from '../utils';\nconst INJECT_SHADER_DECLARATIONS = \"\\n\\n\".concat(DECLARATION_INJECT_MARKER, \"\\n\\n\");\nconst SHADER_TYPE = {\n [VERTEX_SHADER]: 'vertex',\n [FRAGMENT_SHADER]: 'fragment'\n};\nconst FRAGMENT_SHADER_PROLOGUE = \"precision highp float;\\n\\n\";\nexport function assembleShaders(gl, opts) {\n const {\n vs,\n fs\n } = opts;\n const modules = resolveModules(opts.modules || []);\n return {\n gl,\n vs: assembleShader(gl, Object.assign({}, opts, {\n source: vs,\n type: VERTEX_SHADER,\n modules\n })),\n fs: assembleShader(gl, Object.assign({}, opts, {\n source: fs,\n type: FRAGMENT_SHADER,\n modules\n })),\n getUniforms: assembleGetUniforms(modules)\n };\n}\n\nfunction assembleShader(gl, _ref) {\n let {\n id,\n source,\n type,\n modules,\n defines = {},\n hookFunctions = [],\n inject = {},\n transpileToGLSL100 = false,\n prologue = true,\n log\n } = _ref;\n assert(typeof source === 'string', 'shader source must be a string');\n const isVertex = type === VERTEX_SHADER;\n const sourceLines = source.split('\\n');\n let glslVersion = 100;\n let versionLine = '';\n let coreSource = source;\n\n if (sourceLines[0].indexOf('#version ') === 0) {\n glslVersion = 300;\n versionLine = sourceLines[0];\n coreSource = sourceLines.slice(1).join('\\n');\n } else {\n versionLine = \"#version \".concat(glslVersion);\n }\n\n const allDefines = {};\n modules.forEach(module => {\n Object.assign(allDefines, module.getDefines());\n });\n Object.assign(allDefines, defines);\n let assembledSource = prologue ? \"\".concat(versionLine, \"\\n\").concat(getShaderName({\n id,\n source,\n type\n }), \"\\n\").concat(getShaderType({\n type\n }), \"\\n\").concat(getPlatformShaderDefines(gl), \"\\n\").concat(getVersionDefines(gl, glslVersion, !isVertex), \"\\n\").concat(getApplicationDefines(allDefines), \"\\n\").concat(isVertex ? '' : FRAGMENT_SHADER_PROLOGUE, \"\\n\") : \"\".concat(versionLine, \"\\n\");\n const hookFunctionMap = normalizeHookFunctions(hookFunctions);\n const hookInjections = {};\n const declInjections = {};\n const mainInjections = {};\n\n for (const key in inject) {\n const injection = typeof inject[key] === 'string' ? {\n injection: inject[key],\n order: 0\n } : inject[key];\n const match = key.match(/^(v|f)s:(#)?([\\w-]+)$/);\n\n if (match) {\n const hash = match[2];\n const name = match[3];\n\n if (hash) {\n if (name === 'decl') {\n declInjections[key] = [injection];\n } else {\n mainInjections[key] = [injection];\n }\n } else {\n hookInjections[key] = [injection];\n }\n } else {\n mainInjections[key] = [injection];\n }\n }\n\n for (const module of modules) {\n if (log) {\n module.checkDeprecations(coreSource, log);\n }\n\n const moduleSource = module.getModuleSource(type, glslVersion);\n assembledSource += moduleSource;\n const injections = module.injections[type];\n\n for (const key in injections) {\n const match = key.match(/^(v|f)s:#([\\w-]+)$/);\n\n if (match) {\n const name = match[2];\n const injectionType = name === 'decl' ? declInjections : mainInjections;\n injectionType[key] = injectionType[key] || [];\n injectionType[key].push(injections[key]);\n } else {\n hookInjections[key] = hookInjections[key] || [];\n hookInjections[key].push(injections[key]);\n }\n }\n }\n\n assembledSource += INJECT_SHADER_DECLARATIONS;\n assembledSource = injectShader(assembledSource, type, declInjections);\n assembledSource += getHookFunctions(hookFunctionMap[type], hookInjections);\n assembledSource += coreSource;\n assembledSource = injectShader(assembledSource, type, mainInjections);\n assembledSource = transpileShader(assembledSource, transpileToGLSL100 ? 100 : glslVersion, isVertex);\n return assembledSource;\n}\n\nfunction assembleGetUniforms(modules) {\n return function getUniforms(opts) {\n const uniforms = {};\n\n for (const module of modules) {\n const moduleUniforms = module.getUniforms(opts, uniforms);\n Object.assign(uniforms, moduleUniforms);\n }\n\n return uniforms;\n };\n}\n\nfunction getShaderType(_ref2) {\n let {\n type\n } = _ref2;\n return \"\\n#define SHADER_TYPE_\".concat(SHADER_TYPE[type].toUpperCase(), \"\\n\");\n}\n\nfunction getShaderName(_ref3) {\n let {\n id,\n source,\n type\n } = _ref3;\n const injectShaderName = id && typeof id === 'string' && source.indexOf('SHADER_NAME') === -1;\n return injectShaderName ? \"\\n#define SHADER_NAME \".concat(id, \"_\").concat(SHADER_TYPE[type], \"\\n\\n\") : '';\n}\n\nfunction getApplicationDefines() {\n let defines = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let count = 0;\n let sourceText = '';\n\n for (const define in defines) {\n if (count === 0) {\n sourceText += '\\n// APPLICATION DEFINES\\n';\n }\n\n count++;\n const value = defines[define];\n\n if (value || Number.isFinite(value)) {\n sourceText += \"#define \".concat(define.toUpperCase(), \" \").concat(defines[define], \"\\n\");\n }\n }\n\n if (count === 0) {\n sourceText += '\\n';\n }\n\n return sourceText;\n}\n\nfunction getHookFunctions(hookFunctions, hookInjections) {\n let result = '';\n\n for (const hookName in hookFunctions) {\n const hookFunction = hookFunctions[hookName];\n result += \"void \".concat(hookFunction.signature, \" {\\n\");\n\n if (hookFunction.header) {\n result += \" \".concat(hookFunction.header);\n }\n\n if (hookInjections[hookName]) {\n const injections = hookInjections[hookName];\n injections.sort((a, b) => a.order - b.order);\n\n for (const injection of injections) {\n result += \" \".concat(injection.injection, \"\\n\");\n }\n }\n\n if (hookFunction.footer) {\n result += \" \".concat(hookFunction.footer);\n }\n\n result += '}\\n';\n }\n\n return result;\n}\n\nfunction normalizeHookFunctions(hookFunctions) {\n const result = {\n vs: {},\n fs: {}\n };\n hookFunctions.forEach(hook => {\n let opts;\n\n if (typeof hook !== 'string') {\n opts = hook;\n hook = opts.hook;\n } else {\n opts = {};\n }\n\n hook = hook.trim();\n const [stage, signature] = hook.split(':');\n const name = hook.replace(/\\(.+/, '');\n result[stage][name] = Object.assign(opts, {\n signature\n });\n });\n return result;\n}\n//# sourceMappingURL=assemble-shaders.js.map","import { getContextInfo, hasFeatures, canCompileGLGSExtension, FEATURES } from '../utils/webgl-info';\nexport function getPlatformShaderDefines(gl) {\n const debugInfo = getContextInfo(gl);\n\n switch (debugInfo.gpuVendor.toLowerCase()) {\n case 'nvidia':\n return \"#define NVIDIA_GPU\\n// Nvidia optimizes away the calculation necessary for emulated fp64\\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\\n\";\n\n case 'intel':\n return \"#define INTEL_GPU\\n// Intel optimizes away the calculation necessary for emulated fp64\\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\\n// Intel's built-in 'tan' function doesn't have acceptable precision\\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\\n\";\n\n case 'amd':\n return \"#define AMD_GPU\\n\";\n\n default:\n return \"#define DEFAULT_GPU\\n// Prevent driver from optimizing away the calculation necessary for emulated fp64\\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\\n// Intel's built-in 'tan' function doesn't have acceptable precision\\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\\n\";\n }\n}\nexport function getVersionDefines(gl, glslVersion, isFragment) {\n let versionDefines = \"#if (__VERSION__ > 120)\\n\\n# define FEATURE_GLSL_DERIVATIVES\\n# define FEATURE_GLSL_DRAW_BUFFERS\\n# define FEATURE_GLSL_FRAG_DEPTH\\n# define FEATURE_GLSL_TEXTURE_LOD\\n\\n// DEPRECATED FLAGS, remove in v9\\n# define FRAG_DEPTH\\n# define DERIVATIVES\\n# define DRAW_BUFFERS\\n# define TEXTURE_LOD\\n\\n#endif // __VERSION\\n\";\n\n if (hasFeatures(gl, FEATURES.GLSL_FRAG_DEPTH)) {\n versionDefines += \"\\n// FRAG_DEPTH => gl_FragDepth is available\\n#ifdef GL_EXT_frag_depth\\n#extension GL_EXT_frag_depth : enable\\n# define FEATURE_GLSL_FRAG_DEPTH\\n# define FRAG_DEPTH\\n# define gl_FragDepth gl_FragDepthEXT\\n#endif\\n\";\n }\n\n if (hasFeatures(gl, FEATURES.GLSL_DERIVATIVES) && canCompileGLGSExtension(gl, FEATURES.GLSL_DERIVATIVES)) {\n versionDefines += \"\\n// DERIVATIVES => dxdF, dxdY and fwidth are available\\n#ifdef GL_OES_standard_derivatives\\n#extension GL_OES_standard_derivatives : enable\\n# define FEATURE_GLSL_DERIVATIVES\\n# define DERIVATIVES\\n#endif\\n\";\n }\n\n if (hasFeatures(gl, FEATURES.GLSL_FRAG_DATA) && canCompileGLGSExtension(gl, FEATURES.GLSL_FRAG_DATA, {\n behavior: 'require'\n })) {\n versionDefines += \"\\n// DRAW_BUFFERS => gl_FragData[] is available\\n#ifdef GL_EXT_draw_buffers\\n#extension GL_EXT_draw_buffers : require\\n#define FEATURE_GLSL_DRAW_BUFFERS\\n#define DRAW_BUFFERS\\n#endif\\n\";\n }\n\n if (hasFeatures(gl, FEATURES.GLSL_TEXTURE_LOD)) {\n versionDefines += \"// TEXTURE_LOD => texture2DLod etc are available\\n#ifdef GL_EXT_shader_texture_lod\\n#extension GL_EXT_shader_texture_lod : enable\\n\\n# define FEATURE_GLSL_TEXTURE_LOD\\n# define TEXTURE_LOD\\n\\n#endif\\n\";\n }\n\n return versionDefines;\n}\n//# sourceMappingURL=platform-defines.js.map","import { assembleShaders } from '@luma.gl/shadertools';\nimport { Program } from '@luma.gl/webgl';\nexport default class ProgramManager {\n static getDefaultProgramManager(gl) {\n gl.luma = gl.luma || {};\n gl.luma.defaultProgramManager = gl.luma.defaultProgramManager || new ProgramManager(gl);\n return gl.luma.defaultProgramManager;\n }\n\n constructor(gl) {\n this.gl = gl;\n this._programCache = {};\n this._getUniforms = {};\n this._registeredModules = {};\n this._hookFunctions = [];\n this._defaultModules = [];\n this._hashes = {};\n this._hashCounter = 0;\n this.stateHash = 0;\n this._useCounts = {};\n }\n\n addDefaultModule(module) {\n if (!this._defaultModules.find(m => m.name === module.name)) {\n this._defaultModules.push(module);\n }\n\n this.stateHash++;\n }\n\n removeDefaultModule(module) {\n const moduleName = typeof module === 'string' ? module : module.name;\n this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);\n this.stateHash++;\n }\n\n addShaderHook(hook, opts) {\n if (opts) {\n hook = Object.assign(opts, {\n hook\n });\n }\n\n this._hookFunctions.push(hook);\n\n this.stateHash++;\n }\n\n get() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n vs = '',\n fs = '',\n defines = {},\n inject = {},\n varyings = [],\n bufferMode = 0x8c8d,\n transpileToGLSL100 = false\n } = props;\n\n const modules = this._getModuleList(props.modules);\n\n const vsHash = this._getHash(vs);\n\n const fsHash = this._getHash(fs);\n\n const moduleHashes = modules.map(m => this._getHash(m.name)).sort();\n const varyingHashes = varyings.map(v => this._getHash(v));\n const defineKeys = Object.keys(defines).sort();\n const injectKeys = Object.keys(inject).sort();\n const defineHashes = [];\n const injectHashes = [];\n\n for (const key of defineKeys) {\n defineHashes.push(this._getHash(key));\n defineHashes.push(this._getHash(defines[key]));\n }\n\n for (const key of injectKeys) {\n injectHashes.push(this._getHash(key));\n injectHashes.push(this._getHash(inject[key]));\n }\n\n const hash = \"\".concat(vsHash, \"/\").concat(fsHash, \"D\").concat(defineHashes.join('/'), \"M\").concat(moduleHashes.join('/'), \"I\").concat(injectHashes.join('/'), \"V\").concat(varyingHashes.join('/'), \"H\").concat(this.stateHash, \"B\").concat(bufferMode).concat(transpileToGLSL100 ? 'T' : '');\n\n if (!this._programCache[hash]) {\n const assembled = assembleShaders(this.gl, {\n vs,\n fs,\n modules,\n inject,\n defines,\n hookFunctions: this._hookFunctions,\n transpileToGLSL100\n });\n this._programCache[hash] = new Program(this.gl, {\n hash,\n vs: assembled.vs,\n fs: assembled.fs,\n varyings,\n bufferMode\n });\n\n this._getUniforms[hash] = assembled.getUniforms || (x => {});\n\n this._useCounts[hash] = 0;\n }\n\n this._useCounts[hash]++;\n return this._programCache[hash];\n }\n\n getUniforms(program) {\n return this._getUniforms[program.hash] || null;\n }\n\n release(program) {\n const hash = program.hash;\n this._useCounts[hash]--;\n\n if (this._useCounts[hash] === 0) {\n this._programCache[hash].delete();\n\n delete this._programCache[hash];\n delete this._getUniforms[hash];\n delete this._useCounts[hash];\n }\n }\n\n _getHash(key) {\n if (this._hashes[key] === undefined) {\n this._hashes[key] = this._hashCounter++;\n }\n\n return this._hashes[key];\n }\n\n _getModuleList() {\n let appModules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n const modules = new Array(this._defaultModules.length + appModules.length);\n const seen = {};\n let count = 0;\n\n for (let i = 0, len = this._defaultModules.length; i < len; ++i) {\n const module = this._defaultModules[i];\n const name = module.name;\n modules[count++] = module;\n seen[name] = true;\n }\n\n for (let i = 0, len = appModules.length; i < len; ++i) {\n const module = appModules[i];\n const name = module.name;\n\n if (!seen[name]) {\n modules[count++] = module;\n seen[name] = true;\n }\n }\n\n modules.length = count;\n return modules;\n }\n\n}\n//# sourceMappingURL=program-manager.js.map","const TYPE_DEFINITIONS = {\n number: {\n validate(value, propType) {\n return Number.isFinite(value) && (!('max' in propType) || value <= propType.max) && (!('min' in propType) || value >= propType.min);\n }\n\n },\n array: {\n validate(value, propType) {\n return Array.isArray(value) || ArrayBuffer.isView(value);\n }\n\n }\n};\nexport function parsePropTypes(propDefs) {\n const propTypes = {};\n\n for (const propName in propDefs) {\n const propDef = propDefs[propName];\n const propType = parsePropType(propDef);\n propTypes[propName] = propType;\n }\n\n return propTypes;\n}\n\nfunction parsePropType(propDef) {\n let type = getTypeOf(propDef);\n\n if (type === 'object') {\n if (!propDef) {\n return {\n type: 'object',\n value: null\n };\n }\n\n if ('type' in propDef) {\n return Object.assign({}, propDef, TYPE_DEFINITIONS[propDef.type]);\n }\n\n if (!('value' in propDef)) {\n return {\n type: 'object',\n value: propDef\n };\n }\n\n type = getTypeOf(propDef.value);\n return Object.assign({\n type\n }, propDef, TYPE_DEFINITIONS[type]);\n }\n\n return Object.assign({\n type,\n value: propDef\n }, TYPE_DEFINITIONS[type]);\n}\n\nfunction getTypeOf(value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return 'array';\n }\n\n return typeof value;\n}\n//# sourceMappingURL=prop-types.js.map","import { assert } from '../utils';\nimport { parsePropTypes } from './filters/prop-types';\nconst VERTEX_SHADER = 'vs';\nconst FRAGMENT_SHADER = 'fs';\nexport default class ShaderModule {\n constructor(_ref) {\n let {\n name,\n vs,\n fs,\n dependencies = [],\n uniforms,\n getUniforms,\n deprecations = [],\n defines = {},\n inject = {},\n vertexShader,\n fragmentShader\n } = _ref;\n assert(typeof name === 'string');\n this.name = name;\n this.vs = vs || vertexShader;\n this.fs = fs || fragmentShader;\n this.getModuleUniforms = getUniforms;\n this.dependencies = dependencies;\n this.deprecations = this._parseDeprecationDefinitions(deprecations);\n this.defines = defines;\n this.injections = normalizeInjections(inject);\n\n if (uniforms) {\n this.uniforms = parsePropTypes(uniforms);\n }\n }\n\n getModuleSource(type) {\n let moduleSource;\n\n switch (type) {\n case VERTEX_SHADER:\n moduleSource = this.vs || '';\n break;\n\n case FRAGMENT_SHADER:\n moduleSource = this.fs || '';\n break;\n\n default:\n assert(false);\n }\n\n return \"#define MODULE_\".concat(this.name.toUpperCase().replace(/[^0-9a-z]/gi, '_'), \"\\n\").concat(moduleSource, \"// END MODULE_\").concat(this.name, \"\\n\\n\");\n }\n\n getUniforms(opts, uniforms) {\n if (this.getModuleUniforms) {\n return this.getModuleUniforms(opts, uniforms);\n }\n\n if (this.uniforms) {\n return this._defaultGetUniforms(opts);\n }\n\n return {};\n }\n\n getDefines() {\n return this.defines;\n }\n\n checkDeprecations(shaderSource, log) {\n this.deprecations.forEach(def => {\n if (def.regex.test(shaderSource)) {\n if (def.deprecated) {\n log.deprecated(def.old, def.new)();\n } else {\n log.removed(def.old, def.new)();\n }\n }\n });\n }\n\n _parseDeprecationDefinitions(deprecations) {\n deprecations.forEach(def => {\n switch (def.type) {\n case 'function':\n def.regex = new RegExp(\"\\\\b\".concat(def.old, \"\\\\(\"));\n break;\n\n default:\n def.regex = new RegExp(\"\".concat(def.type, \" \").concat(def.old, \";\"));\n }\n });\n return deprecations;\n }\n\n _defaultGetUniforms() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const uniforms = {};\n const propTypes = this.uniforms;\n\n for (const key in propTypes) {\n const propDef = propTypes[key];\n\n if (key in opts && !propDef.private) {\n if (propDef.validate) {\n assert(propDef.validate(opts[key], propDef), \"\".concat(this.name, \": invalid \").concat(key));\n }\n\n uniforms[key] = opts[key];\n } else {\n uniforms[key] = propDef.value;\n }\n }\n\n return uniforms;\n }\n\n}\nexport function normalizeShaderModule(module) {\n if (!module.normalized) {\n module.normalized = true;\n\n if (module.uniforms && !module.getUniforms) {\n const shaderModule = new ShaderModule(module);\n module.getUniforms = shaderModule.getUniforms.bind(shaderModule);\n }\n }\n\n return module;\n}\n\nfunction normalizeInjections(injections) {\n const result = {\n vs: {},\n fs: {}\n };\n\n for (const hook in injections) {\n let injection = injections[hook];\n const stage = hook.slice(0, 2);\n\n if (typeof injection === 'string') {\n injection = {\n order: 0,\n injection\n };\n }\n\n result[stage][hook] = injection;\n }\n\n return result;\n}\n//# sourceMappingURL=shader-module.js.map","import { assert } from '../utils/assert';\nexport function glFormatToComponents(format) {\n switch (format) {\n case 6406:\n case 33326:\n case 6403:\n return 1;\n\n case 33328:\n case 33319:\n return 2;\n\n case 6407:\n case 34837:\n return 3;\n\n case 6408:\n case 34836:\n return 4;\n\n default:\n assert(false);\n return 0;\n }\n}\nexport function glTypeToBytes(type) {\n switch (type) {\n case 5121:\n return 1;\n\n case 33635:\n case 32819:\n case 32820:\n return 2;\n\n case 5126:\n return 4;\n\n default:\n assert(false);\n return 0;\n }\n}\n//# sourceMappingURL=format-utils.js.map","import Buffer from './buffer';\nimport Framebuffer from './framebuffer';\nimport Texture from './texture';\nimport { assertWebGL2Context, withParameters, log } from '@luma.gl/gltools';\nimport { flipRows, scalePixels } from '../webgl-utils/typed-array-utils';\nimport { getTypedArrayFromGLType, getGLTypeFromTypedArray } from '../webgl-utils/typed-array-utils';\nimport { glFormatToComponents, glTypeToBytes } from '../webgl-utils/format-utils';\nimport { toFramebuffer } from '../webgl-utils/texture-utils';\nimport { assert } from '../utils/assert';\nexport function readPixelsToArray(source) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n sourceX = 0,\n sourceY = 0,\n sourceFormat = 6408\n } = options;\n let {\n sourceAttachment = 36064,\n target = null,\n sourceWidth,\n sourceHeight,\n sourceType\n } = options;\n const {\n framebuffer,\n deleteFramebuffer\n } = getFramebuffer(source);\n assert(framebuffer);\n const {\n gl,\n handle,\n attachments\n } = framebuffer;\n sourceWidth = sourceWidth || framebuffer.width;\n sourceHeight = sourceHeight || framebuffer.height;\n\n if (sourceAttachment === 36064 && handle === null) {\n sourceAttachment = 1028;\n }\n\n assert(attachments[sourceAttachment]);\n sourceType = sourceType || attachments[sourceAttachment].type;\n target = getPixelArray(target, sourceType, sourceFormat, sourceWidth, sourceHeight);\n sourceType = sourceType || getGLTypeFromTypedArray(target);\n const prevHandle = gl.bindFramebuffer(36160, handle);\n gl.readPixels(sourceX, sourceY, sourceWidth, sourceHeight, sourceFormat, sourceType, target);\n gl.bindFramebuffer(36160, prevHandle || null);\n\n if (deleteFramebuffer) {\n framebuffer.delete();\n }\n\n return target;\n}\nexport function readPixelsToBuffer(source, _ref) {\n let {\n sourceX = 0,\n sourceY = 0,\n sourceFormat = 6408,\n target = null,\n targetByteOffset = 0,\n sourceWidth,\n sourceHeight,\n sourceType\n } = _ref;\n const {\n framebuffer,\n deleteFramebuffer\n } = getFramebuffer(source);\n assert(framebuffer);\n sourceWidth = sourceWidth || framebuffer.width;\n sourceHeight = sourceHeight || framebuffer.height;\n const gl2 = assertWebGL2Context(framebuffer.gl);\n sourceType = sourceType || (target ? target.type : 5121);\n\n if (!target) {\n const components = glFormatToComponents(sourceFormat);\n const byteCount = glTypeToBytes(sourceType);\n const byteLength = targetByteOffset + sourceWidth * sourceHeight * components * byteCount;\n target = new Buffer(gl2, {\n byteLength,\n accessor: {\n type: sourceType,\n size: components\n }\n });\n }\n\n target.bind({\n target: 35051\n });\n withParameters(gl2, {\n framebuffer\n }, () => {\n gl2.readPixels(sourceX, sourceY, sourceWidth, sourceHeight, sourceFormat, sourceType, targetByteOffset);\n });\n target.unbind({\n target: 35051\n });\n\n if (deleteFramebuffer) {\n framebuffer.delete();\n }\n\n return target;\n}\nexport function copyToDataUrl(source) {\n let {\n sourceAttachment = 36064,\n targetMaxHeight = Number.MAX_SAFE_INTEGER\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let data = readPixelsToArray(source, {\n sourceAttachment\n });\n let {\n width,\n height\n } = source;\n\n while (height > targetMaxHeight) {\n ({\n data,\n width,\n height\n } = scalePixels({\n data,\n width,\n height\n }));\n }\n\n flipRows({\n data,\n width,\n height\n });\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const context = canvas.getContext('2d');\n const imageData = context.createImageData(width, height);\n imageData.data.set(data);\n context.putImageData(imageData, 0, 0);\n return canvas.toDataURL();\n}\nexport function copyToImage(source) {\n let {\n sourceAttachment = 36064,\n targetImage = null\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const dataUrl = copyToDataUrl(source, {\n sourceAttachment\n });\n targetImage = targetImage || new Image();\n targetImage.src = dataUrl;\n return targetImage;\n}\nexport function copyToTexture(source, target) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const {\n sourceX = 0,\n sourceY = 0,\n targetMipmaplevel = 0,\n targetInternalFormat = 6408\n } = options;\n let {\n targetX,\n targetY,\n targetZ,\n width,\n height\n } = options;\n const {\n framebuffer,\n deleteFramebuffer\n } = getFramebuffer(source);\n assert(framebuffer);\n const {\n gl,\n handle\n } = framebuffer;\n const isSubCopy = typeof targetX !== 'undefined' || typeof targetY !== 'undefined' || typeof targetZ !== 'undefined';\n targetX = targetX || 0;\n targetY = targetY || 0;\n targetZ = targetZ || 0;\n const prevHandle = gl.bindFramebuffer(36160, handle);\n assert(target);\n let texture = null;\n\n if (target instanceof Texture) {\n texture = target;\n width = Number.isFinite(width) ? width : texture.width;\n height = Number.isFinite(height) ? height : texture.height;\n texture.bind(0);\n target = texture.target;\n }\n\n if (!isSubCopy) {\n gl.copyTexImage2D(target, targetMipmaplevel, targetInternalFormat, sourceX, sourceY, width, height, 0);\n } else {\n switch (target) {\n case 3553:\n case 34067:\n gl.copyTexSubImage2D(target, targetMipmaplevel, targetX, targetY, sourceX, sourceY, width, height);\n break;\n\n case 35866:\n case 32879:\n const gl2 = assertWebGL2Context(gl);\n gl2.copyTexSubImage3D(target, targetMipmaplevel, targetX, targetY, targetZ, sourceX, sourceY, width, height);\n break;\n\n default:\n }\n }\n\n if (texture) {\n texture.unbind();\n }\n\n gl.bindFramebuffer(36160, prevHandle || null);\n\n if (deleteFramebuffer) {\n framebuffer.delete();\n }\n\n return texture;\n}\nexport function blit(source, target) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const {\n sourceX0 = 0,\n sourceY0 = 0,\n targetX0 = 0,\n targetY0 = 0,\n color = true,\n depth = false,\n stencil = false,\n filter = 9728\n } = options;\n let {\n sourceX1,\n sourceY1,\n targetX1,\n targetY1,\n sourceAttachment = 36064,\n mask = 0\n } = options;\n const {\n framebuffer: srcFramebuffer,\n deleteFramebuffer: deleteSrcFramebuffer\n } = getFramebuffer(source);\n const {\n framebuffer: dstFramebuffer,\n deleteFramebuffer: deleteDstFramebuffer\n } = getFramebuffer(target);\n assert(srcFramebuffer);\n assert(dstFramebuffer);\n const {\n gl,\n handle,\n width,\n height,\n readBuffer\n } = dstFramebuffer;\n const gl2 = assertWebGL2Context(gl);\n\n if (!srcFramebuffer.handle && sourceAttachment === 36064) {\n sourceAttachment = 1028;\n }\n\n if (color) {\n mask |= 16384;\n }\n\n if (depth) {\n mask |= 256;\n }\n\n if (stencil) {\n mask |= 1024;\n }\n\n if (deleteSrcFramebuffer || deleteDstFramebuffer) {\n if (mask & (256 | 1024)) {\n mask = 16384;\n log.warn('Blitting from or into a Texture object, forcing mask to GL.COLOR_BUFFER_BIT')();\n }\n }\n\n assert(mask);\n sourceX1 = sourceX1 === undefined ? srcFramebuffer.width : sourceX1;\n sourceY1 = sourceY1 === undefined ? srcFramebuffer.height : sourceY1;\n targetX1 = targetX1 === undefined ? width : targetX1;\n targetY1 = targetY1 === undefined ? height : targetY1;\n const prevDrawHandle = gl.bindFramebuffer(36009, handle);\n const prevReadHandle = gl.bindFramebuffer(36008, srcFramebuffer.handle);\n gl2.readBuffer(sourceAttachment);\n gl2.blitFramebuffer(sourceX0, sourceY0, sourceX1, sourceY1, targetX0, targetY0, targetX1, targetY1, mask, filter);\n gl2.readBuffer(readBuffer);\n gl2.bindFramebuffer(36008, prevReadHandle || null);\n gl2.bindFramebuffer(36009, prevDrawHandle || null);\n\n if (deleteSrcFramebuffer) {\n srcFramebuffer.delete();\n }\n\n if (deleteDstFramebuffer) {\n dstFramebuffer.delete();\n }\n\n return dstFramebuffer;\n}\n\nfunction getFramebuffer(source) {\n if (!(source instanceof Framebuffer)) {\n return {\n framebuffer: toFramebuffer(source),\n deleteFramebuffer: true\n };\n }\n\n return {\n framebuffer: source,\n deleteFramebuffer: false\n };\n}\n\nfunction getPixelArray(pixelArray, type, format, width, height) {\n if (pixelArray) {\n return pixelArray;\n }\n\n type = type || 5121;\n const ArrayType = getTypedArrayFromGLType(type, {\n clamped: false\n });\n const components = glFormatToComponents(format);\n return new ArrayType(width * height * components);\n}\n//# sourceMappingURL=copy-and-blit.js.map","import { isBlob } from '../../javascript-utils/is-type';\nimport { isLoaderObject } from '../loader-utils/normalize-loader';\nimport { getFetchFunction } from '../loader-utils/option-utils';\nimport { parse } from './parse';\nexport async function load(url, loaders, options, context) {\n if (!Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined;\n options = loaders;\n loaders = undefined;\n }\n\n const fetch = getFetchFunction(options);\n let data = url;\n\n if (typeof url === 'string') {\n data = await fetch(url);\n }\n\n if (isBlob(url)) {\n data = await fetch(url);\n }\n\n return await parse(data, loaders, options);\n}\n//# sourceMappingURL=load.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport project from '../project/project';\nimport type {ShaderModule} from '../../types/types';\n\nconst vs = `\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64Low, vec3 offset, out vec4 commonPosition\n) {\n vec3 projectedPosition = project_position(position, position64Low);\n mat3 rotation;\n if (project_needs_rotation(projectedPosition, rotation)) {\n // offset is specified as ENU\n // when in globe projection, rotate offset so that the ground alighs with the surface of the globe\n offset = rotation * offset;\n }\n commonPosition = vec4(projectedPosition + offset, 1.0);\n return project_common_position_to_clipspace(commonPosition);\n}\n\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64Low, vec3 offset\n) {\n vec4 commonPosition;\n return project_position_to_clipspace(position, position64Low, offset, commonPosition);\n}\n`;\n\nexport default {\n name: 'project32',\n dependencies: [project],\n vs\n} as ShaderModule;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {deepEqual} from '../utils/deep-equal';\nimport type Layer from './layer';\nimport type CompositeLayer from './composite-layer';\nimport type {UpdateParameters} from './layer';\nimport type {LayerContext} from './layer-manager';\n\nexport default abstract class LayerExtension {\n /**\n * Note that defaultProps of a LayerExtension does not behave like defaultProps of a Layer:\n - The default values are not automatically merged with user-supplied props when the layer is constructed\n - The types are not used during props diff\n * Currently they are only used in getSubLayerProps\n * TODO: find a more consistent solution\n */\n static defaultProps: any = {};\n opts!: OptionsT;\n\n constructor(opts?: OptionsT) {\n if (opts) {\n this.opts = opts;\n }\n }\n\n /** Returns true if two extensions are equivalent */\n equals(extension: LayerExtension): boolean {\n if (this === extension) {\n return true;\n }\n\n return this.constructor === extension.constructor && deepEqual(this.opts, extension.opts);\n }\n\n /** Only called if attached to a primitive layer */\n getShaders(this: Layer, extension: this): any {\n return null;\n }\n\n /** Only called if attached to a CompositeLayer */\n getSubLayerProps(this: CompositeLayer, extension: this): any {\n const {defaultProps} = extension.constructor as typeof LayerExtension;\n const newProps = {\n updateTriggers: {}\n };\n\n /* eslint-disable max-depth */\n for (const key in defaultProps) {\n if (key in this.props) {\n const propDef = defaultProps[key];\n const propValue = this.props[key];\n newProps[key] = propValue;\n if (propDef && propDef.type === 'accessor') {\n newProps.updateTriggers[key] = this.props.updateTriggers[key];\n if (typeof propValue === 'function') {\n newProps[key] = this.getSubLayerAccessor(propValue);\n }\n }\n }\n }\n /* eslint-enable max-depth */\n return newProps;\n }\n\n /* eslint-disable @typescript-eslint/no-empty-function */\n initializeState(this: Layer, context: LayerContext, extension: this): void {}\n\n updateState(this: Layer, params: UpdateParameters, extension: this): void {}\n\n draw(this: Layer, params: any, extension: this): void {}\n\n finalizeState(this: Layer, context: LayerContext, extension: this): void {}\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {createIterable, getAccessorFromBuffer} from './iterable-utils';\nimport defaultTypedArrayManager from './typed-array-manager';\nimport assert from './assert';\n\nimport {Buffer} from '@luma.gl/webgl';\n\nimport type {BinaryAttribute} from '../lib/attribute/attribute';\nimport type {TypedArray} from '../types/types';\nimport type {AccessorFunction} from '../types/layer-props';\nimport type {TypedArrayManager} from './typed-array-manager';\n\ntype ExternalBuffer = TypedArray | Buffer | BinaryAttribute;\n\ntype TesselatorOptions = ExtraOptionsT & {\n attributes?: Record;\n getGeometry?: AccessorFunction;\n data?: any;\n buffers?: Record;\n geometryBuffer?: ExternalBuffer;\n positionFormat?: 'XY' | 'XYZ';\n dataChanged?: {startRow: number; endRow?: number}[] | string | false;\n normalize?: boolean;\n};\n\nexport type GeometryUpdateContext = {\n vertexStart: number;\n indexStart: number;\n geometrySize: number;\n geometryIndex: number;\n};\n\nexport default abstract class Tesselator {\n opts: TesselatorOptions;\n typedArrayManager: TypedArrayManager;\n indexStarts: number[] = [0];\n vertexStarts: number[] = [0];\n vertexCount: number = 0;\n instanceCount: number = 0;\n attributes: Record;\n\n protected _attributeDefs: any;\n protected data: any;\n protected getGeometry?: AccessorFunction | null;\n protected geometryBuffer?: ExternalBuffer;\n protected buffers!: Record;\n protected positionSize!: number;\n protected normalize!: boolean;\n\n constructor(opts: TesselatorOptions) {\n const {attributes = {}} = opts;\n\n this.typedArrayManager = defaultTypedArrayManager;\n this.attributes = {};\n this._attributeDefs = attributes;\n this.opts = opts;\n\n this.updateGeometry(opts);\n }\n\n /* Public methods */\n updateGeometry(opts: TesselatorOptions): void {\n Object.assign(this.opts, opts);\n const {\n data,\n buffers = {},\n getGeometry,\n geometryBuffer,\n positionFormat,\n dataChanged,\n normalize = true\n } = this.opts;\n this.data = data;\n this.getGeometry = getGeometry;\n this.positionSize =\n // @ts-ignore (2339) when geometryBuffer is a luma Buffer, size falls back to positionFormat\n (geometryBuffer && geometryBuffer.size) || (positionFormat === 'XY' ? 2 : 3);\n this.buffers = buffers;\n this.normalize = normalize;\n\n // Handle external logical value\n if (geometryBuffer) {\n assert(data.startIndices); // binary data missing startIndices\n this.getGeometry = this.getGeometryFromBuffer(geometryBuffer);\n\n if (!normalize) {\n // skip packing and set attribute value directly\n // TODO - avoid mutating user-provided object\n buffers.positions = geometryBuffer;\n }\n }\n this.geometryBuffer = buffers.positions;\n\n if (Array.isArray(dataChanged)) {\n // is partial update\n for (const dataRange of dataChanged as {startRow: number; endRow?: number}[]) {\n this._rebuildGeometry(dataRange);\n }\n } else {\n this._rebuildGeometry();\n }\n }\n\n updatePartialGeometry({startRow, endRow}: {startRow: number; endRow: number}): void {\n this._rebuildGeometry({startRow, endRow});\n }\n\n // Subclass interface\n\n /** Convert geometry to a uniform shape */\n protected abstract normalizeGeometry(geometry: GeometryT): NormalizedGeometryT;\n\n /** Update the positions buffer of a single geometry */\n protected abstract updateGeometryAttributes(\n geometry: NormalizedGeometryT | null,\n context: GeometryUpdateContext\n );\n\n /** Get the number of vertices in a geometry */\n protected abstract getGeometrySize(geometry: NormalizedGeometryT): number;\n\n protected getGeometryFromBuffer(\n geometryBuffer: ExternalBuffer\n ): AccessorFunction | null {\n const value = (geometryBuffer as BinaryAttribute).value || geometryBuffer;\n if (!ArrayBuffer.isView(value)) {\n // Cannot read binary geometries\n return null;\n }\n\n // @ts-ignore (2322) NumericArray not assignable to GeometryT\n return getAccessorFromBuffer(value, {\n size: this.positionSize,\n offset: (geometryBuffer as BinaryAttribute).offset,\n stride: (geometryBuffer as BinaryAttribute).stride,\n startIndices: this.data.startIndices\n });\n }\n\n /* Private utility methods */\n private _allocate(instanceCount: number, copy: boolean): void {\n // allocate attributes\n const {attributes, buffers, _attributeDefs, typedArrayManager} = this;\n for (const name in _attributeDefs) {\n if (name in buffers) {\n // Use external buffer\n typedArrayManager.release(attributes[name]);\n attributes[name] = null;\n } else {\n const def = _attributeDefs[name];\n // If dataRange is supplied, this is a partial update.\n // In case we need to reallocate the typed array, it will need the old values copied\n // before performing partial update.\n def.copy = copy;\n\n attributes[name] = typedArrayManager.allocate(attributes[name], instanceCount, def);\n }\n }\n }\n\n /**\n * Visit all objects\n * `data` is expected to be an iterable consistent with the base Layer expectation\n */\n private _forEachGeometry(\n visitor: (geometry: GeometryT | null, index: number) => void,\n startRow: number,\n endRow: number\n ): void {\n const {data, getGeometry} = this;\n const {iterable, objectInfo} = createIterable(data, startRow, endRow);\n for (const object of iterable) {\n objectInfo.index++;\n const geometry = getGeometry ? getGeometry(object, objectInfo) : null;\n visitor(geometry, objectInfo.index);\n }\n }\n\n /* eslint-disable complexity,max-statements */\n private _rebuildGeometry(dataRange?: {startRow: number; endRow?: number}): void {\n if (!this.data) {\n return;\n }\n\n let {indexStarts, vertexStarts, instanceCount} = this;\n const {data, geometryBuffer} = this;\n const {startRow = 0, endRow = Infinity} = dataRange || {};\n\n const normalizedData: Record = {};\n\n if (!dataRange) {\n // Full update - regenerate buffer layout from scratch\n indexStarts = [0];\n vertexStarts = [0];\n }\n if (this.normalize || !geometryBuffer) {\n this._forEachGeometry(\n (geometry: GeometryT | null, dataIndex: number) => {\n const normalizedGeometry = geometry && this.normalizeGeometry(geometry);\n normalizedData[dataIndex] = normalizedGeometry;\n vertexStarts[dataIndex + 1] =\n vertexStarts[dataIndex] +\n (normalizedGeometry ? this.getGeometrySize(normalizedGeometry) : 0);\n },\n startRow,\n endRow\n );\n // count instances\n instanceCount = vertexStarts[vertexStarts.length - 1];\n } else {\n // assume user provided data is already normalized\n vertexStarts = data.startIndices;\n instanceCount = vertexStarts[data.length] || 0;\n\n if (ArrayBuffer.isView(geometryBuffer)) {\n instanceCount = instanceCount || geometryBuffer.length / this.positionSize;\n } else if (geometryBuffer instanceof Buffer) {\n // @ts-expect-error (2339) accessor is not typed\n const byteStride = geometryBuffer.accessor.stride || this.positionSize * 4;\n instanceCount = instanceCount || geometryBuffer.byteLength / byteStride;\n } else if (geometryBuffer.buffer) {\n const byteStride = geometryBuffer.stride || this.positionSize * 4;\n instanceCount = instanceCount || geometryBuffer.buffer.byteLength / byteStride;\n } else if (geometryBuffer.value) {\n const bufferValue = geometryBuffer.value;\n const elementStride =\n // @ts-ignore (2339) if stride is not specified, will fall through to positionSize\n geometryBuffer.stride / bufferValue.BYTES_PER_ELEMENT || this.positionSize;\n instanceCount = instanceCount || bufferValue.length / elementStride;\n }\n }\n\n // allocate attributes\n this._allocate(instanceCount, Boolean(dataRange));\n\n this.indexStarts = indexStarts;\n this.vertexStarts = vertexStarts;\n this.instanceCount = instanceCount;\n\n // @ts-ignore (2739) context will be populated in the loop\n const context: GeometryUpdateContext = {};\n\n this._forEachGeometry(\n (geometry: GeometryT | null, dataIndex: number) => {\n const normalizedGeometry =\n normalizedData[dataIndex] ||\n // @ts-expect-error (2352) GeometryT cannot be casted to NormalizedGeometryT. We are assuming the user passed already normalized data if opts.normalize is set to false.\n (geometry as NormalizedGeometryT);\n context.vertexStart = vertexStarts[dataIndex];\n context.indexStart = indexStarts[dataIndex];\n const vertexEnd =\n dataIndex < vertexStarts.length - 1 ? vertexStarts[dataIndex + 1] : instanceCount;\n context.geometrySize = vertexEnd - vertexStarts[dataIndex];\n context.geometryIndex = dataIndex;\n this.updateGeometryAttributes(normalizedGeometry, context);\n },\n startRow,\n endRow\n );\n\n this.vertexCount = indexStarts[indexStarts.length - 1];\n }\n}\n","import { WorkerFarm } from '@loaders.gl/worker-utils';\nimport { isBrowser } from '../env-utils/globals';\nexport function canEncodeWithWorker(writer, options) {\n if (!WorkerFarm.isSupported()) {\n return false;\n }\n\n if (!isBrowser && !(options !== null && options !== void 0 && options._nodeWorkers)) {\n return false;\n }\n\n return writer.worker && (options === null || options === void 0 ? void 0 : options.worker);\n}\n//# sourceMappingURL=encode-with-worker.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Stats } from '@probe.gl/stats';\nconst STAT_QUEUED_REQUESTS = 'Queued Requests';\nconst STAT_ACTIVE_REQUESTS = 'Active Requests';\nconst STAT_CANCELLED_REQUESTS = 'Cancelled Requests';\nconst STAT_QUEUED_REQUESTS_EVER = 'Queued Requests Ever';\nconst STAT_ACTIVE_REQUESTS_EVER = 'Active Requests Ever';\nconst DEFAULT_PROPS = {\n id: 'request-scheduler',\n throttleRequests: true,\n maxRequests: 6\n};\nexport default class RequestScheduler {\n constructor(props = {}) {\n _defineProperty(this, \"props\", void 0);\n\n _defineProperty(this, \"stats\", void 0);\n\n _defineProperty(this, \"activeRequestCount\", 0);\n\n _defineProperty(this, \"requestQueue\", []);\n\n _defineProperty(this, \"requestMap\", new Map());\n\n _defineProperty(this, \"deferredUpdate\", null);\n\n this.props = { ...DEFAULT_PROPS,\n ...props\n };\n this.stats = new Stats({\n id: this.props.id\n });\n this.stats.get(STAT_QUEUED_REQUESTS);\n this.stats.get(STAT_ACTIVE_REQUESTS);\n this.stats.get(STAT_CANCELLED_REQUESTS);\n this.stats.get(STAT_QUEUED_REQUESTS_EVER);\n this.stats.get(STAT_ACTIVE_REQUESTS_EVER);\n }\n\n scheduleRequest(handle, getPriority = () => 0) {\n if (!this.props.throttleRequests) {\n return Promise.resolve({\n done: () => {}\n });\n }\n\n if (this.requestMap.has(handle)) {\n return this.requestMap.get(handle);\n }\n\n const request = {\n handle,\n priority: 0,\n getPriority\n };\n const promise = new Promise(resolve => {\n request.resolve = resolve;\n return request;\n });\n this.requestQueue.push(request);\n this.requestMap.set(handle, promise);\n\n this._issueNewRequests();\n\n return promise;\n }\n\n _issueRequest(request) {\n const {\n handle,\n resolve\n } = request;\n let isDone = false;\n\n const done = () => {\n if (!isDone) {\n isDone = true;\n this.requestMap.delete(handle);\n this.activeRequestCount--;\n\n this._issueNewRequests();\n }\n };\n\n this.activeRequestCount++;\n return resolve ? resolve({\n done\n }) : Promise.resolve({\n done\n });\n }\n\n _issueNewRequests() {\n if (!this.deferredUpdate) {\n this.deferredUpdate = setTimeout(() => this._issueNewRequestsAsync(), 0);\n }\n }\n\n _issueNewRequestsAsync() {\n this.deferredUpdate = null;\n const freeSlots = Math.max(this.props.maxRequests - this.activeRequestCount, 0);\n\n if (freeSlots === 0) {\n return;\n }\n\n this._updateAllRequests();\n\n for (let i = 0; i < freeSlots; ++i) {\n const request = this.requestQueue.shift();\n\n if (request) {\n this._issueRequest(request);\n }\n }\n }\n\n _updateAllRequests() {\n const requestQueue = this.requestQueue;\n\n for (let i = 0; i < requestQueue.length; ++i) {\n const request = requestQueue[i];\n\n if (!this._updateRequest(request)) {\n requestQueue.splice(i, 1);\n this.requestMap.delete(request.handle);\n i--;\n }\n }\n\n requestQueue.sort((a, b) => a.priority - b.priority);\n }\n\n _updateRequest(request) {\n request.priority = request.getPriority(request.handle);\n\n if (request.priority < 0) {\n request.resolve(null);\n return false;\n }\n\n return true;\n }\n\n}\n//# sourceMappingURL=request-scheduler.js.map","const VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : 'latest';\nexport const JSONLoader = {\n name: 'JSON',\n id: 'json',\n module: 'json',\n version: VERSION,\n extensions: ['json', 'geojson'],\n mimeTypes: ['application/json'],\n category: 'json',\n text: true,\n parseTextSync,\n parse: async arrayBuffer => parseTextSync(new TextDecoder().decode(arrayBuffer)),\n options: {}\n};\n\nfunction parseTextSync(text) {\n return JSON.parse(text);\n}\n\nexport const _typecheckJSONLoader = JSONLoader;\n//# sourceMappingURL=json-loader.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {CubeGeometry} from '@luma.gl/core';\nimport {UNIT} from '@deck.gl/core';\nimport ColumnLayer, {ColumnLayerProps} from './column-layer';\n\nimport type {DefaultProps} from '@deck.gl/core';\n\nconst defaultProps: DefaultProps = {\n cellSize: {type: 'number', min: 0, value: 1000},\n offset: {type: 'array', value: [1, 1]}\n};\n\n/** All properties supported by GridCellLayer. */\nexport type GridCellLayerProps = _GridCellLayerProps & ColumnLayerProps;\n\n/** Properties added by GridCellLayer. */\ntype _GridCellLayerProps = {\n /**\n * @default 1000\n */\n cellSize?: number;\n};\n\nexport default class GridCellLayer extends ColumnLayer<\n DataT,\n ExtraPropsT & Required<_GridCellLayerProps>\n> {\n static layerName = 'GridCellLayer';\n static defaultProps = defaultProps;\n\n getGeometry(diskResolution) {\n return new CubeGeometry();\n }\n\n draw({uniforms}) {\n const {elevationScale, extruded, offset, coverage, cellSize, angle, radiusUnits} = this.props;\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n radius: cellSize / 2,\n radiusUnits: UNIT[radiusUnits],\n angle,\n offset,\n extruded,\n coverage,\n elevationScale,\n edgeDistance: 1,\n isWireframe: false\n })\n .draw();\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Accessor,\n AccessorFunction,\n Color,\n CompositeLayer,\n CompositeLayerProps,\n createIterable,\n Layer,\n LayersList,\n log,\n Unit,\n Material,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport SolidPolygonLayer from '../solid-polygon-layer/solid-polygon-layer';\nimport PathLayer from '../path-layer/path-layer';\nimport * as Polygon from '../solid-polygon-layer/polygon';\nimport {replaceInRange} from '../utils';\n\n/**\n * All properties supported by `PolygonLayer`.\n */\nexport type PolygonLayerProps = _PolygonLayerProps & CompositeLayerProps;\n\n/**\n * Properties added by `PolygonLayer`.\n */\ntype _PolygonLayerProps = {\n /**\n * Whether to draw an outline around the polygon (solid fill).\n *\n * Note that both the outer polygon as well the outlines of any holes will be drawn.\n *\n * @default true\n */\n stroked?: boolean;\n\n /**\n * Whether to draw a filled polygon (solid fill).\n *\n * Note that only the area between the outer polygon and any holes will be filled.\n *\n * @default true\n */\n filled?: boolean;\n\n /**\n * Whether to extrude the polygons.\n *\n * Based on the elevations provided by the `getElevation` accessor.\n *\n * If set to `false`, all polygons will be flat, this generates less geometry and is faster\n * than simply returning 0 from getElevation.\n *\n * @default false\n */\n extruded?: boolean;\n\n /**\n * Elevation multiplier.\n *\n * The final elevation is calculated by `elevationScale * getElevation(d)`.\n * `elevationScale` is a handy property to scale all elevation without updating the data.\n *\n * @default 1\n */\n elevationScale?: number;\n\n /**\n * Whether to generate a line wireframe of the hexagon.\n *\n * The outline will have \"horizontal\" lines closing the top and bottom polygons and a vertical\n * line (a \"strut\") for each vertex on the polygon.\n *\n * @default false\n */\n wireframe?: boolean;\n\n /**\n * The units of the line width, one of `meters`, `common`, and `pixels`.\n *\n * @default 'meters'\n * @see Unit.\n */\n lineWidthUnits?: Unit;\n\n /**\n * The line width multiplier that multiplied to all outlines of `Polygon` and `MultiPolygon`\n * features if the stroked attribute is true.\n *\n * @default 1\n */\n lineWidthScale?: number;\n\n /**\n * The minimum line width in pixels.\n *\n * @default 0\n */\n lineWidthMinPixels?: number;\n\n /**\n * The maximum line width in pixels\n *\n * @default Number.MAX_SAFE_INTEGER\n */\n lineWidthMaxPixels?: number;\n\n /**\n * Type of joint. If `true`, draw round joints. Otherwise draw miter joints.\n *\n * @default false\n */\n lineJointRounded?: boolean;\n\n /**\n * The maximum extent of a joint in ratio to the stroke width.\n *\n * Only works if `lineJointRounded` is false.\n *\n * @default 4\n */\n lineMiterLimit?: number;\n\n lineDashJustified?: boolean;\n\n /** Called on each object in the data stream to retrieve its corresponding polygon. */\n getPolygon?: AccessorFunction;\n\n /**\n * Fill collor value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getFillColor?: Accessor;\n\n /**\n * Line color value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getLineColor?: Accessor;\n\n /**\n * Line width value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getLineWidth?: Accessor;\n\n /**\n * Elevation valur or accessor.\n *\n * Only used if `extruded: true`.\n *\n * @default 1000\n */\n getElevation?: Accessor;\n\n /**\n * This property has been moved to `PathStyleExtension`.\n *\n * @deprecated\n */\n getLineDashArray?: Accessor | null;\n\n /**\n * If `false`, will skip normalizing the coordinates returned by `getPolygon`.\n *\n * **Note**: This prop is experimental\n *\n * @default true\n */\n _normalize?: boolean;\n\n /**\n * Specifies the winding order of rings in the polygon data.\n *\n * **Note**: This prop is experimental\n *\n * @default 'CW'\n */\n _windingOrder?: 'CW' | 'CCW';\n\n /**\n * Material settings for lighting effect. Applies if `extruded: true`.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n};\n\nconst defaultLineColor: [number, number, number, number] = [0, 0, 0, 255];\nconst defaultFillColor: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n stroked: true,\n filled: true,\n extruded: false,\n elevationScale: 1,\n wireframe: false,\n _normalize: true,\n _windingOrder: 'CW',\n\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n lineJointRounded: false,\n lineMiterLimit: 4,\n\n getPolygon: {type: 'accessor', value: f => f.polygon},\n // Polygon fill color\n getFillColor: {type: 'accessor', value: defaultFillColor},\n // Point, line and polygon outline color\n getLineColor: {type: 'accessor', value: defaultLineColor},\n // Line and polygon outline accessors\n getLineWidth: {type: 'accessor', value: 1},\n // Polygon extrusion accessor\n getElevation: {type: 'accessor', value: 1000},\n\n // Optional material for 'lighting' shader module\n material: true\n};\n\n/** A composite layer that renders filled, stroked and/or extruded polygons. */\nexport default class PolygonLayer extends CompositeLayer<\n Required<_PolygonLayerProps> & ExtraProps\n> {\n static layerName = 'PolygonLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n this.state = {\n paths: []\n };\n\n if (this.props.getLineDashArray) {\n log.removed('getLineDashArray', 'PathStyleExtension')();\n }\n }\n\n updateState({changeFlags}: UpdateParameters) {\n const geometryChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPolygon));\n\n if (geometryChanged && Array.isArray(changeFlags.dataChanged)) {\n const paths = this.state.paths.slice();\n const pathsDiff = changeFlags.dataChanged.map(dataRange =>\n replaceInRange({\n data: paths,\n getIndex: p => p.__source.index,\n dataRange,\n replace: this._getPaths(dataRange)\n })\n );\n this.setState({paths, pathsDiff});\n } else if (geometryChanged) {\n this.setState({\n paths: this._getPaths(),\n pathsDiff: null\n });\n }\n }\n\n private _getPaths(dataRange: {startRow?: number; endRow?: number} = {}): {path: number[]}[] {\n const {data, getPolygon, positionFormat, _normalize} = this.props;\n const paths: {path: number[]}[] = [];\n const positionSize = positionFormat === 'XY' ? 2 : 3;\n const {startRow, endRow} = dataRange;\n\n const {iterable, objectInfo} = createIterable(data, startRow, endRow);\n for (const object of iterable) {\n objectInfo.index++;\n let polygon = getPolygon(object, objectInfo);\n if (_normalize) {\n polygon = Polygon.normalize(polygon, positionSize);\n }\n const {holeIndices} = polygon;\n const positions = polygon.positions || polygon;\n\n if (holeIndices) {\n // split the positions array into `holeIndices.length + 1` rings\n // holeIndices[-1] falls back to 0\n // holeIndices[holeIndices.length] falls back to positions.length\n for (let i = 0; i <= holeIndices.length; i++) {\n const path = positions.slice(holeIndices[i - 1] || 0, holeIndices[i] || positions.length);\n paths.push(this.getSubLayerRow({path}, object, objectInfo.index));\n }\n } else {\n paths.push(this.getSubLayerRow({path: positions}, object, objectInfo.index));\n }\n }\n return paths;\n }\n\n /* eslint-disable complexity */\n renderLayers(): Layer | null | LayersList {\n // Layer composition props\n const {\n data,\n _dataDiff,\n stroked,\n filled,\n extruded,\n wireframe,\n _normalize,\n _windingOrder,\n elevationScale,\n transitions,\n positionFormat\n } = this.props;\n\n // Rendering props underlying layer\n const {\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n lineJointRounded,\n lineMiterLimit,\n lineDashJustified\n } = this.props;\n\n // Accessor props for underlying layers\n const {\n getFillColor,\n getLineColor,\n getLineWidth,\n getLineDashArray,\n getElevation,\n getPolygon,\n updateTriggers,\n material\n } = this.props;\n\n const {paths, pathsDiff} = this.state;\n\n const FillLayer = this.getSubLayerClass('fill', SolidPolygonLayer);\n const StrokeLayer = this.getSubLayerClass('stroke', PathLayer);\n\n // Filled Polygon Layer\n const polygonLayer =\n this.shouldRenderSubLayer('fill', paths) &&\n new FillLayer(\n {\n _dataDiff,\n extruded,\n elevationScale,\n\n filled,\n wireframe,\n _normalize,\n _windingOrder,\n\n getElevation,\n getFillColor,\n getLineColor: extruded && wireframe ? getLineColor : defaultLineColor,\n\n material,\n transitions\n },\n this.getSubLayerProps({\n id: 'fill',\n updateTriggers: updateTriggers && {\n getPolygon: updateTriggers.getPolygon,\n getElevation: updateTriggers.getElevation,\n getFillColor: updateTriggers.getFillColor,\n // using a legacy API to invalid lineColor attributes\n // if (extruded && wireframe) has changed\n lineColors: extruded && wireframe,\n getLineColor: updateTriggers.getLineColor\n }\n }),\n {\n data,\n positionFormat,\n getPolygon\n }\n );\n\n // Polygon line layer\n const polygonLineLayer =\n !extruded &&\n stroked &&\n this.shouldRenderSubLayer('stroke', paths) &&\n new StrokeLayer(\n {\n _dataDiff: pathsDiff && (() => pathsDiff),\n widthUnits: lineWidthUnits,\n widthScale: lineWidthScale,\n widthMinPixels: lineWidthMinPixels,\n widthMaxPixels: lineWidthMaxPixels,\n jointRounded: lineJointRounded,\n miterLimit: lineMiterLimit,\n dashJustified: lineDashJustified,\n\n // Already normalized\n _pathType: 'loop',\n\n transitions: transitions && {\n getWidth: transitions.getLineWidth,\n getColor: transitions.getLineColor,\n getPath: transitions.getPolygon\n },\n\n getColor: this.getSubLayerAccessor(getLineColor),\n getWidth: this.getSubLayerAccessor(getLineWidth),\n getDashArray: this.getSubLayerAccessor(getLineDashArray)\n },\n this.getSubLayerProps({\n id: 'stroke',\n updateTriggers: updateTriggers && {\n getWidth: updateTriggers.getLineWidth,\n getColor: updateTriggers.getLineColor,\n getDashArray: updateTriggers.getLineDashArray\n }\n }),\n {\n data: paths,\n positionFormat,\n getPath: x => x.path\n }\n );\n\n return [\n // If not extruded: flat fill layer is drawn below outlines\n !extruded && polygonLayer,\n polygonLineLayer,\n // If extruded: draw fill layer last for correct blending behavior\n extruded && polygonLayer\n ];\n }\n /* eslint-enable complexity */\n}\n","import { getFirstCharacters } from '../binary-utils/get-first-characters';\nexport function parseJSON(string) {\n try {\n return JSON.parse(string);\n } catch (_) {\n throw new Error(\"Failed to parse JSON from data starting with \\\"\".concat(getFirstCharacters(string), \"\\\"\"));\n }\n}\n//# sourceMappingURL=parse-json.js.map","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","import { Vector3, Matrix4 } from '@math.gl/core';\nimport { assert, uid } from '@luma.gl/webgl';\nexport default class ScenegraphNode {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n id\n } = props;\n this.id = id || uid(this.constructor.name);\n this.display = true;\n this.position = new Vector3();\n this.rotation = new Vector3();\n this.scale = new Vector3(1, 1, 1);\n this.matrix = new Matrix4();\n this.userData = {};\n this.props = {};\n\n this._setScenegraphNodeProps(props);\n }\n\n delete() {}\n\n setProps(props) {\n this._setScenegraphNodeProps(props);\n\n return this;\n }\n\n toString() {\n return \"{type: ScenegraphNode, id: \".concat(this.id, \")}\");\n }\n\n setPosition(position) {\n assert(position.length === 3, 'setPosition requires vector argument');\n this.position = position;\n return this;\n }\n\n setRotation(rotation) {\n assert(rotation.length === 3, 'setRotation requires vector argument');\n this.rotation = rotation;\n return this;\n }\n\n setScale(scale) {\n assert(scale.length === 3, 'setScale requires vector argument');\n this.scale = scale;\n return this;\n }\n\n setMatrix(matrix) {\n let copyMatrix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (copyMatrix) {\n this.matrix.copy(matrix);\n } else {\n this.matrix = matrix;\n }\n }\n\n setMatrixComponents(_ref) {\n let {\n position,\n rotation,\n scale,\n update = true\n } = _ref;\n\n if (position) {\n this.setPosition(position);\n }\n\n if (rotation) {\n this.setRotation(rotation);\n }\n\n if (scale) {\n this.setScale(scale);\n }\n\n if (update) {\n this.updateMatrix();\n }\n\n return this;\n }\n\n updateMatrix() {\n const pos = this.position;\n const rot = this.rotation;\n const scale = this.scale;\n this.matrix.identity();\n this.matrix.translate(pos);\n this.matrix.rotateXYZ(rot);\n this.matrix.scale(scale);\n return this;\n }\n\n update() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n position,\n rotation,\n scale\n } = options;\n\n if (position) {\n this.setPosition(position);\n }\n\n if (rotation) {\n this.setRotation(rotation);\n }\n\n if (scale) {\n this.setScale(scale);\n }\n\n this.updateMatrix();\n return this;\n }\n\n getCoordinateUniforms(viewMatrix, modelMatrix) {\n assert(viewMatrix);\n modelMatrix = modelMatrix || this.matrix;\n const worldMatrix = new Matrix4(viewMatrix).multiplyRight(modelMatrix);\n const worldInverse = worldMatrix.invert();\n const worldInverseTranspose = worldInverse.transpose();\n return {\n viewMatrix,\n modelMatrix,\n objectMatrix: modelMatrix,\n worldMatrix,\n worldInverseMatrix: worldInverse,\n worldInverseTransposeMatrix: worldInverseTranspose\n };\n }\n\n _setScenegraphNodeProps(props) {\n if ('display' in props) {\n this.display = props.display;\n }\n\n if ('position' in props) {\n this.setPosition(props.position);\n }\n\n if ('rotation' in props) {\n this.setRotation(props.rotation);\n }\n\n if ('scale' in props) {\n this.setScale(props.scale);\n }\n\n if ('matrix' in props) {\n this.setMatrix(props.matrix);\n }\n\n Object.assign(this.props, props);\n }\n\n}\n//# sourceMappingURL=scenegraph-node.js.map","import { Matrix4 } from '@math.gl/core';\nimport { log } from '@luma.gl/webgl';\nimport ScenegraphNode from './scenegraph-node';\nexport default class GroupNode extends ScenegraphNode {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n props = Array.isArray(props) ? {\n children: props\n } : props;\n const {\n children = []\n } = props;\n log.assert(children.every(child => child instanceof ScenegraphNode), 'every child must an instance of ScenegraphNode');\n super(props);\n this.children = children;\n }\n\n add() {\n for (var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++) {\n children[_key] = arguments[_key];\n }\n\n for (const child of children) {\n if (Array.isArray(child)) {\n this.add(...child);\n } else {\n this.children.push(child);\n }\n }\n\n return this;\n }\n\n remove(child) {\n const children = this.children;\n const indexOf = children.indexOf(child);\n\n if (indexOf > -1) {\n children.splice(indexOf, 1);\n }\n\n return this;\n }\n\n removeAll() {\n this.children = [];\n return this;\n }\n\n delete() {\n this.children.forEach(child => child.delete());\n this.removeAll();\n super.delete();\n }\n\n traverse(visitor) {\n let {\n worldMatrix = new Matrix4()\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const modelMatrix = new Matrix4(worldMatrix).multiplyRight(this.matrix);\n\n for (const child of this.children) {\n if (child instanceof GroupNode) {\n child.traverse(visitor, {\n worldMatrix: modelMatrix\n });\n } else {\n visitor(child, {\n worldMatrix: modelMatrix\n });\n }\n }\n }\n\n}\n//# sourceMappingURL=group-node.js.map","import { assert, log } from '@luma.gl/webgl';\nimport { Matrix4, Quaternion } from '@math.gl/core';\nexport const ATTRIBUTE_TYPE_TO_COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\nexport const ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\n\nfunction accessorToJsArray(accessor) {\n if (!accessor._animation) {\n const ArrayType = ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY[accessor.componentType];\n const components = ATTRIBUTE_TYPE_TO_COMPONENTS[accessor.type];\n const length = components * accessor.count;\n const {\n buffer,\n byteOffset\n } = accessor.bufferView.data;\n const array = new ArrayType(buffer, byteOffset + (accessor.byteOffset || 0), length);\n\n if (components === 1) {\n accessor._animation = Array.from(array);\n } else {\n const slicedArray = [];\n\n for (let i = 0; i < array.length; i += components) {\n slicedArray.push(Array.from(array.slice(i, i + components)));\n }\n\n accessor._animation = slicedArray;\n }\n }\n\n return accessor._animation;\n}\n\nconst helperMatrix = new Matrix4();\n\nfunction applyTranslationRotationScale(gltfNode, node) {\n node.matrix.identity();\n\n if (gltfNode.translation) {\n node.matrix.translate(gltfNode.translation);\n }\n\n if (gltfNode.rotation) {\n const rotationMatrix = helperMatrix.fromQuaternion(gltfNode.rotation);\n node.matrix.multiplyRight(rotationMatrix);\n }\n\n if (gltfNode.scale) {\n node.matrix.scale(gltfNode.scale);\n }\n}\n\nconst quaternion = new Quaternion();\n\nfunction linearInterpolate(target, path, start, stop, ratio) {\n if (path === 'rotation') {\n quaternion.slerp({\n start,\n target: stop,\n ratio\n });\n\n for (let i = 0; i < quaternion.length; i++) {\n target[path][i] = quaternion[i];\n }\n } else {\n for (let i = 0; i < start.length; i++) {\n target[path][i] = ratio * stop[i] + (1 - ratio) * start[i];\n }\n }\n}\n\nfunction cubicsplineInterpolate(target, path, _ref) {\n let {\n p0,\n outTangent0,\n inTangent1,\n p1,\n tDiff,\n ratio: t\n } = _ref;\n\n for (let i = 0; i < target[path].length; i++) {\n const m0 = outTangent0[i] * tDiff;\n const m1 = inTangent1[i] * tDiff;\n target[path][i] = (2 * Math.pow(t, 3) - 3 * Math.pow(t, 2) + 1) * p0[i] + (Math.pow(t, 3) - 2 * Math.pow(t, 2) + t) * m0 + (-2 * Math.pow(t, 3) + 3 * Math.pow(t, 2)) * p1[i] + (Math.pow(t, 3) - Math.pow(t, 2)) * m1;\n }\n}\n\nfunction stepInterpolate(target, path, value) {\n for (let i = 0; i < value.length; i++) {\n target[path][i] = value[i];\n }\n}\n\nfunction interpolate(time, _ref2, target, path) {\n let {\n input,\n interpolation,\n output\n } = _ref2;\n const maxTime = input[input.length - 1];\n const animationTime = time % maxTime;\n const nextIndex = input.findIndex(t => t >= animationTime);\n const previousIndex = Math.max(0, nextIndex - 1);\n\n if (!Array.isArray(target[path])) {\n switch (path) {\n case 'translation':\n target[path] = [0, 0, 0];\n break;\n\n case 'rotation':\n target[path] = [0, 0, 0, 1];\n break;\n\n case 'scale':\n target[path] = [1, 1, 1];\n break;\n\n default:\n log.warn(\"Bad animation path \".concat(path))();\n }\n }\n\n assert(target[path].length === output[previousIndex].length);\n const previousTime = input[previousIndex];\n const nextTime = input[nextIndex];\n\n switch (interpolation) {\n case 'STEP':\n stepInterpolate(target, path, output[previousIndex]);\n break;\n\n case 'LINEAR':\n if (nextTime > previousTime) {\n const ratio = (animationTime - previousTime) / (nextTime - previousTime);\n linearInterpolate(target, path, output[previousIndex], output[nextIndex], ratio);\n }\n\n break;\n\n case 'CUBICSPLINE':\n if (nextTime > previousTime) {\n const ratio = (animationTime - previousTime) / (nextTime - previousTime);\n const tDiff = nextTime - previousTime;\n const p0 = output[3 * previousIndex + 1];\n const outTangent0 = output[3 * previousIndex + 2];\n const inTangent1 = output[3 * nextIndex + 0];\n const p1 = output[3 * nextIndex + 1];\n cubicsplineInterpolate(target, path, {\n p0,\n outTangent0,\n inTangent1,\n p1,\n tDiff,\n ratio\n });\n }\n\n break;\n\n default:\n log.warn(\"Interpolation \".concat(interpolation, \" not supported\"))();\n break;\n }\n}\n\nclass GLTFAnimation {\n constructor(props) {\n this.startTime = 0;\n this.playing = true;\n this.speed = 1;\n this.channels = [];\n Object.assign(this, props);\n }\n\n animate(timeMs) {\n if (!this.playing) {\n return;\n }\n\n const absTime = timeMs / 1000;\n const time = (absTime - this.startTime) * this.speed;\n this.channels.forEach(_ref3 => {\n let {\n sampler,\n target,\n path\n } = _ref3;\n interpolate(time, sampler, target, path);\n applyTranslationRotationScale(target, target._node);\n });\n }\n\n}\n\nexport default class GLTFAnimator {\n constructor(gltf) {\n this.animations = gltf.animations.map((animation, index) => {\n const name = animation.name || \"Animation-\".concat(index);\n const samplers = animation.samplers.map(_ref4 => {\n let {\n input,\n interpolation = 'LINEAR',\n output\n } = _ref4;\n return {\n input: accessorToJsArray(gltf.accessors[input]),\n interpolation,\n output: accessorToJsArray(gltf.accessors[output])\n };\n });\n const channels = animation.channels.map(_ref5 => {\n let {\n sampler,\n target\n } = _ref5;\n return {\n sampler: samplers[sampler],\n target: gltf.nodes[target.node],\n path: target.path\n };\n });\n return new GLTFAnimation({\n name,\n channels\n });\n });\n }\n\n animate(time) {\n this.setTime(time);\n }\n\n setTime(time) {\n this.animations.forEach(animation => animation.animate(time));\n }\n\n getAnimations() {\n return this.animations;\n }\n\n}\n//# sourceMappingURL=gltf-animator.js.map","import { Model } from '@luma.gl/engine';\nimport ScenegraphNode from './scenegraph-node';\nexport default class ModelNode extends ScenegraphNode {\n constructor(gl) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(props);\n this.onBeforeRender = null;\n this.AfterRender = null;\n\n if (gl instanceof Model) {\n this.model = gl;\n\n this._setModelNodeProps(props);\n } else {\n this.model = new Model(gl, props);\n }\n\n this.managedResources = props.managedResources || [];\n }\n\n setProps(props) {\n super.setProps(props);\n\n this._setModelNodeProps(props);\n\n return this;\n }\n\n delete() {\n if (this.model) {\n this.model.delete();\n this.model = null;\n }\n\n this.managedResources.forEach(resource => resource.delete());\n this.managedResources = [];\n }\n\n draw() {\n return this.model.draw(...arguments);\n }\n\n setUniforms() {\n this.model.setUniforms(...arguments);\n return this;\n }\n\n setAttributes() {\n this.model.setAttributes(...arguments);\n return this;\n }\n\n updateModuleSettings() {\n this.model.updateModuleSettings(...arguments);\n return this;\n }\n\n _setModelNodeProps(props) {\n this.model.setProps(props);\n }\n\n}\n//# sourceMappingURL=model-node.js.map","import { isWebGL2 } from '@luma.gl/gltools';\nimport { log } from '@luma.gl/webgl';\nimport { pbr } from '@luma.gl/shadertools';\nimport ModelNode from '../scenegraph/model-node';\nimport GLTFMaterialParser from './gltf-material-parser';\nconst vs = \"\\n#if (__VERSION__ < 300)\\n #define _attr attribute\\n#else\\n #define _attr in\\n#endif\\n\\n _attr vec4 POSITION;\\n\\n #ifdef HAS_NORMALS\\n _attr vec4 NORMAL;\\n #endif\\n\\n #ifdef HAS_TANGENTS\\n _attr vec4 TANGENT;\\n #endif\\n\\n #ifdef HAS_UV\\n _attr vec2 TEXCOORD_0;\\n #endif\\n\\n void main(void) {\\n vec4 _NORMAL = vec4(0.);\\n vec4 _TANGENT = vec4(0.);\\n vec2 _TEXCOORD_0 = vec2(0.);\\n\\n #ifdef HAS_NORMALS\\n _NORMAL = NORMAL;\\n #endif\\n\\n #ifdef HAS_TANGENTS\\n _TANGENT = TANGENT;\\n #endif\\n\\n #ifdef HAS_UV\\n _TEXCOORD_0 = TEXCOORD_0;\\n #endif\\n\\n pbr_setPositionNormalTangentUV(POSITION, _NORMAL, _TANGENT, _TEXCOORD_0);\\n gl_Position = u_MVPMatrix * POSITION;\\n }\\n\";\nconst fs = \"\\n#if (__VERSION__ < 300)\\n #define fragmentColor gl_FragColor\\n#else\\n out vec4 fragmentColor;\\n#endif\\n\\n void main(void) {\\n fragmentColor = pbr_filterColor(vec4(0));\\n }\\n\";\n\nfunction addVersionToShader(gl, source) {\n if (isWebGL2(gl)) {\n return \"#version 300 es\\n\".concat(source);\n }\n\n return source;\n}\n\nexport default function createGLTFModel(gl, options) {\n const {\n id,\n drawMode,\n vertexCount,\n attributes,\n modelOptions\n } = options;\n const materialParser = new GLTFMaterialParser(gl, options);\n log.info(4, 'createGLTFModel defines: ', materialParser.defines)();\n const managedResources = [];\n managedResources.push(...materialParser.generatedTextures);\n managedResources.push(...Object.values(attributes).map(attribute => attribute.buffer));\n const model = new ModelNode(gl, Object.assign({\n id,\n drawMode,\n vertexCount,\n modules: [pbr],\n defines: materialParser.defines,\n parameters: materialParser.parameters,\n vs: addVersionToShader(gl, vs),\n fs: addVersionToShader(gl, fs),\n managedResources\n }, modelOptions));\n model.setProps({\n attributes\n });\n model.setUniforms(materialParser.uniforms);\n return model;\n}\n//# sourceMappingURL=create-gltf-model.js.map","import { Matrix4 } from '@math.gl/core';\nimport { Buffer, Accessor, log } from '@luma.gl/webgl';\nimport GroupNode from '../scenegraph/group-node';\nimport GLTFAnimator from './gltf-animator';\nimport createGLTFModel from './create-gltf-model';\nconst ATTRIBUTE_TYPE_TO_COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\nconst DEFAULT_OPTIONS = {\n modelOptions: {},\n pbrDebug: false,\n imageBasedLightingEnvironment: null,\n lights: true,\n useTangents: false\n};\nexport default class GLTFInstantiator {\n constructor(gl) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.gl = gl;\n this.options = Object.assign({}, DEFAULT_OPTIONS, options);\n }\n\n instantiate(gltf) {\n this.gltf = gltf;\n const scenes = (gltf.scenes || []).map(scene => this.createScene(scene));\n return scenes;\n }\n\n createAnimator() {\n if (Array.isArray(this.gltf.animations)) {\n return new GLTFAnimator(this.gltf);\n }\n\n return null;\n }\n\n createScene(gltfScene) {\n const gltfNodes = gltfScene.nodes || [];\n const nodes = gltfNodes.map(node => this.createNode(node));\n const scene = new GroupNode({\n id: gltfScene.name || gltfScene.id,\n children: nodes\n });\n return scene;\n }\n\n createNode(gltfNode) {\n if (!gltfNode._node) {\n const gltfChildren = gltfNode.children || [];\n const children = gltfChildren.map(child => this.createNode(child));\n\n if (gltfNode.mesh) {\n children.push(this.createMesh(gltfNode.mesh));\n }\n\n const node = new GroupNode({\n id: gltfNode.name || gltfNode.id,\n children\n });\n\n if (gltfNode.matrix) {\n node.setMatrix(gltfNode.matrix);\n } else {\n node.matrix.identity();\n\n if (gltfNode.translation) {\n node.matrix.translate(gltfNode.translation);\n }\n\n if (gltfNode.rotation) {\n const rotationMatrix = new Matrix4().fromQuaternion(gltfNode.rotation);\n node.matrix.multiplyRight(rotationMatrix);\n }\n\n if (gltfNode.scale) {\n node.matrix.scale(gltfNode.scale);\n }\n }\n\n gltfNode._node = node;\n }\n\n return gltfNode._node;\n }\n\n createMesh(gltfMesh) {\n if (!gltfMesh._mesh) {\n const gltfPrimitives = gltfMesh.primitives || [];\n const primitives = gltfPrimitives.map((gltfPrimitive, i) => this.createPrimitive(gltfPrimitive, i, gltfMesh));\n const mesh = new GroupNode({\n id: gltfMesh.name || gltfMesh.id,\n children: primitives\n });\n gltfMesh._mesh = mesh;\n }\n\n return gltfMesh._mesh;\n }\n\n getVertexCount(attributes) {\n log.warn('getVertexCount() not found')();\n }\n\n createPrimitive(gltfPrimitive, i, gltfMesh) {\n return createGLTFModel(this.gl, Object.assign({\n id: gltfPrimitive.name || \"\".concat(gltfMesh.name || gltfMesh.id, \"-primitive-\").concat(i),\n drawMode: gltfPrimitive.mode || 4,\n vertexCount: gltfPrimitive.indices ? gltfPrimitive.indices.count : this.getVertexCount(gltfPrimitive.attributes),\n attributes: this.createAttributes(gltfPrimitive.attributes, gltfPrimitive.indices),\n material: gltfPrimitive.material\n }, this.options));\n }\n\n createAttributes(attributes, indices) {\n const loadedAttributes = {};\n Object.keys(attributes).forEach(attrName => {\n loadedAttributes[attrName] = this.createAccessor(attributes[attrName], this.createBuffer(attributes[attrName], this.gl.ARRAY_BUFFER));\n });\n\n if (indices) {\n loadedAttributes.indices = this.createAccessor(indices, this.createBuffer(indices, this.gl.ELEMENT_ARRAY_BUFFER));\n }\n\n log.info(4, 'glTF Attributes', {\n attributes,\n indices,\n generated: loadedAttributes\n })();\n return loadedAttributes;\n }\n\n createBuffer(attribute, target) {\n if (!attribute.bufferView) {\n attribute.bufferView = {};\n }\n\n const {\n bufferView\n } = attribute;\n\n if (!bufferView.lumaBuffers) {\n bufferView.lumaBuffers = {};\n }\n\n if (!bufferView.lumaBuffers[target]) {\n bufferView.lumaBuffers[target] = new Buffer(this.gl, {\n id: \"from-\".concat(bufferView.id),\n data: bufferView.data || attribute.value,\n target\n });\n }\n\n return bufferView.lumaBuffers[target];\n }\n\n createAccessor(accessor, buffer) {\n return new Accessor({\n buffer,\n offset: accessor.byteOffset || 0,\n stride: accessor.bufferView.byteStride || 0,\n type: accessor.componentType,\n size: ATTRIBUTE_TYPE_TO_COMPONENTS[accessor.type]\n });\n }\n\n createSampler(gltfSampler) {\n return gltfSampler;\n }\n\n needsPOT() {\n return false;\n }\n\n}\n//# sourceMappingURL=gltf-instantiator.js.map","/* global requestAnimationFrame */\nimport type {GroupNode, ModelNode} from '@luma.gl/experimental';\n\nexport async function waitForGLTFAssets(gltfObjects: {scenes: GroupNode[]}): Promise {\n const remaining: any[] = [];\n\n gltfObjects.scenes.forEach(scene => {\n scene.traverse((model: ModelNode) => {\n Object.values(model.model.getUniforms()).forEach((uniform: any) => {\n if (uniform.loaded === false) {\n remaining.push(uniform);\n }\n });\n });\n });\n\n return await waitWhileCondition(() => remaining.some(uniform => !uniform.loaded));\n}\n\nasync function waitWhileCondition(condition: () => boolean): Promise {\n while (condition()) {\n await new Promise(resolve => requestAnimationFrame(resolve));\n }\n}\n","// Copyright (c) 2019 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {Layer, project32, picking, log} from '@deck.gl/core';\nimport {isWebGL2} from '@luma.gl/core';\nimport {pbr} from '@luma.gl/shadertools';\nimport {\n ScenegraphNode,\n GroupNode,\n GLTFAnimator,\n GLTFEnvironment,\n createGLTFObjects\n} from '@luma.gl/experimental';\nimport GL from '@luma.gl/constants';\nimport {GLTFLoader} from '@loaders.gl/gltf';\nimport {waitForGLTFAssets} from './gltf-utils';\n\nimport {MATRIX_ATTRIBUTES, shouldComposeModelMatrix} from '../utils/matrix';\n\nimport vs from './scenegraph-layer-vertex.glsl';\nimport fs from './scenegraph-layer-fragment.glsl';\n\nimport type {\n UpdateParameters,\n LayerContext,\n LayerProps,\n Position,\n Color,\n Accessor,\n DefaultProps\n} from '@deck.gl/core';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [255, 255, 255, 255];\n\nexport type ScenegraphLayerProps = _ScenegraphLayerProps & LayerProps;\n\ntype _ScenegraphLayerProps = {\n // TODO - define in luma.gl\n /**\n * A url for a glTF model or scenegraph loaded via a [scenegraph loader](https://loaders.gl/docs/specifications/category-scenegraph)\n */\n scenegraph: any;\n /**\n * Create a luma.gl GroupNode from the resolved scenegraph prop\n */\n getScene?: (\n scenegraph: any,\n context: {gl: WebGLRenderingContext; layer: ScenegraphLayer}\n ) => GroupNode;\n /**\n * Create a luma.gl GLTFAnimator from the resolved scenegraph prop\n */\n getAnimator?: (\n scenegraph: any,\n context: {gl: WebGLRenderingContext; layer: ScenegraphLayer}\n ) => GLTFAnimator;\n /**\n * (Experimental) animation configurations. Requires `_animate` on deck object.\n */\n _animations?: {\n [name: number | string | '*']: {\n /** If the animation is playing */\n playing?: boolean;\n /** Start time of the animation, default `0` */\n startTime?: number;\n /** Speed multiplier of the animation, default `1` */\n speed?: number;\n };\n } | null;\n /**\n * (Experimental) lighting mode\n * @default 'flat'\n */\n _lighting?: 'flat' | 'pbr';\n /**\n * (Experimental) lighting environment. Requires `_lighting` to be `'pbr'`.\n */\n _imageBasedLightingEnvironment?:\n | null\n | GLTFEnvironment\n | ((context: {gl: WebGLRenderingContext; layer: ScenegraphLayer}) => GLTFEnvironment);\n\n /** Anchor position accessor. */\n getPosition?: Accessor;\n /** Color value or accessor.\n * @default [255, 255, 255, 255]\n */\n getColor?: Accessor;\n /**\n * Orientation in [pitch, yaw, roll] in degrees.\n * @see https://en.wikipedia.org/wiki/Euler_angles\n * @default [0, 0, 0]\n */\n getOrientation?: Accessor;\n /**\n * Scaling factor of the model along each axis.\n * @default [1, 1, 1]\n */\n getScale?: Accessor;\n /**\n * Translation from the anchor point, [x, y, z] in meters.\n * @default [0, 0, 0]\n */\n getTranslation?: Accessor;\n /**\n * TransformMatrix. If specified, `getOrientation`, `getScale` and `getTranslation` are ignored.\n */\n getTransformMatrix?: Accessor;\n /**\n * Multiplier to scale each geometry by.\n * @default 1\n */\n sizeScale?: number;\n /**\n * The minimum size in pixels for one unit of the scene.\n * @default 0\n */\n sizeMinPixels?: number;\n /**\n * The maximum size in pixels for one unit of the scene.\n * @default Number.MAX_SAFE_INTEGER\n */\n sizeMaxPixels?: number;\n};\n\nconst defaultProps: DefaultProps = {\n scenegraph: {type: 'object', value: null, async: true},\n getScene: gltf => {\n if (gltf && gltf.scenes) {\n // gltf post processor replaces `gltf.scene` number with the scene `object`\n return typeof gltf.scene === 'object' ? gltf.scene : gltf.scenes[gltf.scene || 0];\n }\n return gltf;\n },\n getAnimator: scenegraph => scenegraph && scenegraph.animator,\n _animations: null,\n\n sizeScale: {type: 'number', value: 1, min: 0},\n sizeMinPixels: {type: 'number', min: 0, value: 0},\n sizeMaxPixels: {type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER},\n\n getPosition: {type: 'accessor', value: x => x.position},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n\n // flat or pbr\n _lighting: 'flat',\n // _lighting must be pbr for this to work\n _imageBasedLightingEnvironment: null,\n\n // yaw, pitch and roll are in degrees\n // https://en.wikipedia.org/wiki/Euler_angles\n // [pitch, yaw, roll]\n getOrientation: {type: 'accessor', value: [0, 0, 0]},\n getScale: {type: 'accessor', value: [1, 1, 1]},\n getTranslation: {type: 'accessor', value: [0, 0, 0]},\n // 4x4 matrix\n getTransformMatrix: {type: 'accessor', value: []},\n\n loaders: [GLTFLoader]\n};\n\n/** Render a number of instances of a complete glTF scenegraph. */\nexport default class ScenegraphLayer extends Layer<\n ExtraPropsT & Required<_ScenegraphLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'ScenegraphLayer';\n\n state!: {\n scenegraph: GroupNode;\n animator: GLTFAnimator;\n attributesAvailable?: boolean;\n };\n\n getShaders() {\n const modules = [project32, picking];\n\n if (this.props._lighting === 'pbr') {\n modules.push(pbr);\n }\n\n return {vs, fs, modules};\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager();\n // attributeManager is always defined for primitive layers\n attributeManager!.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n accessor: 'getPosition',\n transition: true\n },\n instanceColors: {\n type: GL.UNSIGNED_BYTE,\n size: this.props.colorFormat.length,\n accessor: 'getColor',\n normalized: true,\n defaultValue: DEFAULT_COLOR,\n transition: true\n },\n instanceModelMatrix: MATRIX_ATTRIBUTES\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n const {props, oldProps} = params;\n\n if (props.scenegraph !== oldProps.scenegraph) {\n this._updateScenegraph();\n } else if (props._animations !== oldProps._animations) {\n this._applyAnimationsProp(this.state.scenegraph, this.state.animator, props._animations);\n }\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n this._deleteScenegraph();\n }\n\n private _updateScenegraph(): void {\n const props = this.props;\n const {gl} = this.context;\n let scenegraphData: any = null;\n if (props.scenegraph instanceof ScenegraphNode) {\n // Signature 1: props.scenegraph is a proper luma.gl Scenegraph\n scenegraphData = {scenes: [props.scenegraph]};\n } else if (props.scenegraph && !props.scenegraph.gltf) {\n // Converts loaders.gl gltf to luma.gl scenegraph using the undocumented @luma.gl/experimental function\n const gltf = props.scenegraph;\n const gltfObjects = createGLTFObjects(gl, gltf, this._getModelOptions());\n scenegraphData = {gltf, ...gltfObjects};\n\n waitForGLTFAssets(gltfObjects).then(() => this.setNeedsRedraw()); // eslint-disable-line @typescript-eslint/no-floating-promises\n } else if (props.scenegraph) {\n // DEPRECATED PATH: Assumes this data was loaded through GLTFScenegraphLoader\n log.deprecated(\n 'ScenegraphLayer.props.scenegraph',\n 'Use GLTFLoader instead of GLTFScenegraphLoader'\n )();\n scenegraphData = props.scenegraph;\n }\n\n const options = {layer: this, gl};\n const scenegraph = props.getScene(scenegraphData, options);\n const animator = props.getAnimator(scenegraphData, options);\n\n if (scenegraph instanceof ScenegraphNode) {\n this._deleteScenegraph();\n this._applyAllAttributes(scenegraph);\n this._applyAnimationsProp(scenegraph, animator, props._animations);\n this.setState({scenegraph, animator});\n } else if (scenegraph !== null) {\n log.warn('invalid scenegraph:', scenegraph)();\n }\n }\n\n private _applyAllAttributes(scenegraph: GroupNode): void {\n if (this.state.attributesAvailable) {\n // attributeManager is always defined for primitive layers\n const allAttributes = this.getAttributeManager()!.getAttributes();\n scenegraph.traverse(model => {\n this._setModelAttributes(model.model, allAttributes);\n });\n }\n }\n\n private _applyAnimationsProp(\n scenegraph: GroupNode,\n animator: GLTFAnimator,\n animationsProp: any\n ): void {\n if (!scenegraph || !animator || !animationsProp) {\n return;\n }\n\n const animations = animator.getAnimations();\n\n // sort() to ensure '*' comes first so that other values can override\n Object.keys(animationsProp)\n .sort()\n .forEach(key => {\n // Key can be:\n // - number for index number\n // - name for animation name\n // - * to affect all animations\n const value = animationsProp[key];\n\n if (key === '*') {\n animations.forEach(animation => {\n Object.assign(animation, value);\n });\n } else if (Number.isFinite(Number(key))) {\n const number = Number(key);\n if (number >= 0 && number < animations.length) {\n Object.assign(animations[number], value);\n } else {\n log.warn(`animation ${key} not found`)();\n }\n } else {\n const findResult = animations.find(({name}) => name === key);\n if (findResult) {\n Object.assign(findResult, value);\n } else {\n log.warn(`animation ${key} not found`)();\n }\n }\n });\n }\n\n private _deleteScenegraph(): void {\n const {scenegraph} = this.state;\n if (scenegraph instanceof ScenegraphNode) {\n scenegraph.delete();\n }\n }\n\n private _getModelOptions(): any {\n const {_imageBasedLightingEnvironment} = this.props;\n\n let env: GLTFEnvironment | null = null;\n if (_imageBasedLightingEnvironment) {\n if (typeof _imageBasedLightingEnvironment === 'function') {\n env = _imageBasedLightingEnvironment({gl: this.context.gl, layer: this});\n } else {\n env = _imageBasedLightingEnvironment;\n }\n }\n\n return {\n gl: this.context.gl,\n waitForFullLoad: true,\n imageBasedLightingEnvironment: env,\n modelOptions: {\n isInstanced: true,\n transpileToGLSL100: !isWebGL2(this.context.gl),\n ...this.getShaders()\n },\n // tangents are not supported\n useTangents: false\n };\n }\n\n updateAttributes(changedAttributes) {\n this.setState({attributesAvailable: true});\n if (!this.state.scenegraph) return;\n\n this.state.scenegraph.traverse(model => {\n this._setModelAttributes(model.model, changedAttributes);\n });\n }\n\n draw({moduleParameters = null, parameters = {}, context}) {\n if (!this.state.scenegraph) return;\n\n if (this.props._animations && this.state.animator) {\n this.state.animator.animate(context.timeline.getTime());\n this.setNeedsRedraw();\n }\n\n const {viewport} = this.context;\n const {sizeScale, sizeMinPixels, sizeMaxPixels, opacity, coordinateSystem} = this.props;\n const numInstances = this.getNumInstances();\n this.state.scenegraph.traverse((model, {worldMatrix}) => {\n model.model.setInstanceCount(numInstances);\n model.updateModuleSettings(moduleParameters);\n model.draw({\n parameters,\n uniforms: {\n sizeScale,\n opacity,\n sizeMinPixels,\n sizeMaxPixels,\n composeModelMatrix: shouldComposeModelMatrix(viewport, coordinateSystem),\n sceneModelMatrix: worldMatrix,\n // Needed for PBR (TODO: find better way to get it)\n // eslint-disable-next-line camelcase\n u_Camera: model.model.getUniforms().project_uCameraPosition\n }\n });\n });\n }\n}\n","export default `\\\n#version 300 es\n\n// Instance attributes\nin vec3 instancePositions;\nin vec3 instancePositions64Low;\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nin mat3 instanceModelMatrix;\nin vec3 instanceTranslation;\n\n// Uniforms\nuniform float sizeScale;\nuniform float sizeMinPixels;\nuniform float sizeMaxPixels;\nuniform mat4 sceneModelMatrix;\nuniform bool composeModelMatrix;\n\n// Attributes\nin vec4 POSITION;\n\n#ifdef HAS_UV\n in vec2 TEXCOORD_0;\n#endif\n\n#ifdef MODULE_PBR\n #ifdef HAS_NORMALS\n in vec4 NORMAL;\n #endif\n#endif\n\n// Varying\nout vec4 vColor;\n\n// MODULE_PBR contains all the varying definitions needed\n#ifndef MODULE_PBR\n #ifdef HAS_UV\n out vec2 vTEXCOORD_0;\n #endif\n#endif\n\n// Main\nvoid main(void) {\n #if defined(HAS_UV) && !defined(MODULE_PBR)\n vTEXCOORD_0 = TEXCOORD_0;\n geometry.uv = vTEXCOORD_0;\n #endif\n\n geometry.worldPosition = instancePositions;\n geometry.pickingColor = instancePickingColors;\n\n vec3 normal = vec3(0.0, 0.0, 1.0);\n #ifdef MODULE_PBR\n #ifdef HAS_NORMALS\n normal = instanceModelMatrix * (sceneModelMatrix * vec4(NORMAL.xyz, 0.0)).xyz;\n #endif\n #endif\n\n float originalSize = project_size_to_pixel(sizeScale);\n float clampedSize = clamp(originalSize, sizeMinPixels, sizeMaxPixels);\n\n vec3 pos = (instanceModelMatrix * (sceneModelMatrix * POSITION).xyz) * sizeScale * (clampedSize / originalSize) + instanceTranslation;\n if(composeModelMatrix) {\n DECKGL_FILTER_SIZE(pos, geometry);\n // using instancePositions as world coordinates\n // when using globe mode, this branch does not re-orient the model to align with the surface of the earth\n // call project_normal before setting position to avoid rotation\n geometry.normal = project_normal(normal);\n gl_Position = project_position_to_clipspace(pos + instancePositions, instancePositions64Low, vec3(0.0), geometry.position);\n }\n else {\n pos = project_size(pos);\n DECKGL_FILTER_SIZE(pos, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, pos, geometry.position);\n geometry.normal = project_normal(normal);\n }\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n #ifdef MODULE_PBR\n // set PBR data\n pbr_vPosition = geometry.position.xyz;\n #ifdef HAS_NORMALS\n pbr_vNormal = geometry.normal;\n #endif\n\n #ifdef HAS_UV\n pbr_vUV = TEXCOORD_0;\n #else\n pbr_vUV = vec2(0., 0.);\n #endif\n geometry.uv = pbr_vUV;\n #endif\n\n vColor = instanceColors;\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","export default `\\\n#version 300 es\n\n// Uniforms\nuniform float opacity;\n\n// Varying\nin vec4 vColor;\n\nout vec4 fragmentColor;\n\n// MODULE_PBR contains all the varying definitions needed\n#ifndef MODULE_PBR\n #if defined(HAS_UV) && defined(HAS_BASECOLORMAP)\n in vec2 vTEXCOORD_0;\n uniform sampler2D u_BaseColorSampler;\n #endif\n#endif\n\nvoid main(void) {\n #ifdef MODULE_PBR\n fragmentColor = vColor * pbr_filterColor(vec4(0));\n geometry.uv = pbr_vUV;\n #else\n #if defined(HAS_UV) && defined(HAS_BASECOLORMAP)\n fragmentColor = vColor * texture2D(u_BaseColorSampler, vTEXCOORD_0);\n geometry.uv = vTEXCOORD_0;\n #else\n fragmentColor = vColor;\n #endif\n #endif\n\n fragmentColor.a *= opacity;\n DECKGL_FILTER_COLOR(fragmentColor, geometry);\n}\n`;\n","import GLTFInstantiator from './gltf-instantiator';\nexport default function createGLTFObjects(gl, gltf, options) {\n const instantiator = new GLTFInstantiator(gl, options);\n const scenes = instantiator.instantiate(gltf);\n const animator = instantiator.createAnimator();\n return {\n scenes,\n animator\n };\n}\n//# sourceMappingURL=create-gltf-objects.js.map","// This module implement some utility functions to work with\n// the geojson-binary format defined at loaders.gl:\n// https://github.com/visgl/loaders.gl/blob/master/modules/gis/docs/api-reference/geojson-to-binary.md\n\nimport {\n BinaryFeatures,\n BinaryLineFeatures,\n BinaryPointFeatures,\n BinaryPolygonFeatures,\n Feature\n} from '@loaders.gl/schema';\n\nexport type BinaryFeatureTypes = BinaryPointFeatures | BinaryLineFeatures | BinaryPolygonFeatures;\n\ntype FeaureOnlyProperties = Pick;\n\n/**\n * Return the feature for an accesor\n */\nexport function binaryToFeatureForAccesor(\n data: BinaryFeatureTypes,\n index: number\n): FeaureOnlyProperties | null {\n if (!data) {\n return null;\n }\n\n const featureIndex = 'startIndices' in data ? (data as any).startIndices[index] : index;\n const geometryIndex = data.featureIds.value[featureIndex];\n\n if (featureIndex !== -1) {\n return getPropertiesForIndex(data, geometryIndex, featureIndex);\n }\n\n return null;\n}\n\nfunction getPropertiesForIndex(\n data: BinaryFeatureTypes,\n propertiesIndex: number,\n numericPropsIndex: number\n): FeaureOnlyProperties {\n const feature = {\n properties: {...data.properties[propertiesIndex]}\n };\n\n for (const prop in data.numericProps) {\n feature.properties[prop] = data.numericProps[prop].value[numericPropsIndex];\n }\n\n return feature;\n}\n\n// Custom picking color to keep binary indexes\nexport function calculatePickingColors(\n geojsonBinary: BinaryFeatures,\n encodePickingColor: (id: number, result: number[]) => void\n): Record {\n const pickingColors: Record = {\n points: null,\n lines: null,\n polygons: null\n };\n for (const key in pickingColors) {\n const featureIds = geojsonBinary[key].globalFeatureIds.value;\n pickingColors[key] = new Uint8ClampedArray(featureIds.length * 3);\n const pickingColor = [];\n for (let i = 0; i < featureIds.length; i++) {\n encodePickingColor(featureIds[i], pickingColor);\n pickingColors[key]![i * 3 + 0] = pickingColor[0];\n pickingColors[key]![i * 3 + 1] = pickingColor[1];\n pickingColors[key]![i * 3 + 2] = pickingColor[2];\n }\n }\n\n return pickingColors;\n}\n","import {CompositeLayer, Layer} from '@deck.gl/core';\n\nimport IconLayer from '../icon-layer/icon-layer';\nimport ScatterplotLayer from '../scatterplot-layer/scatterplot-layer';\nimport TextLayer from '../text-layer/text-layer';\nimport PathLayer from '../path-layer/path-layer';\nimport SolidPolygonLayer from '../solid-polygon-layer/solid-polygon-layer';\n\nexport const POINT_LAYER = {\n circle: {\n type: ScatterplotLayer,\n props: {\n filled: 'filled',\n stroked: 'stroked',\n\n lineWidthMaxPixels: 'lineWidthMaxPixels',\n lineWidthMinPixels: 'lineWidthMinPixels',\n lineWidthScale: 'lineWidthScale',\n lineWidthUnits: 'lineWidthUnits',\n pointRadiusMaxPixels: 'radiusMaxPixels',\n pointRadiusMinPixels: 'radiusMinPixels',\n pointRadiusScale: 'radiusScale',\n pointRadiusUnits: 'radiusUnits',\n pointAntialiasing: 'antialiasing',\n pointBillboard: 'billboard',\n\n getFillColor: 'getFillColor',\n getLineColor: 'getLineColor',\n getLineWidth: 'getLineWidth',\n getPointRadius: 'getRadius'\n }\n },\n icon: {\n type: IconLayer,\n props: {\n iconAtlas: 'iconAtlas',\n iconMapping: 'iconMapping',\n\n iconSizeMaxPixels: 'sizeMaxPixels',\n iconSizeMinPixels: 'sizeMinPixels',\n iconSizeScale: 'sizeScale',\n iconSizeUnits: 'sizeUnits',\n iconAlphaCutoff: 'alphaCutoff',\n iconBillboard: 'billboard',\n\n getIcon: 'getIcon',\n getIconAngle: 'getAngle',\n getIconColor: 'getColor',\n getIconPixelOffset: 'getPixelOffset',\n getIconSize: 'getSize'\n }\n },\n text: {\n type: TextLayer,\n props: {\n textSizeMaxPixels: 'sizeMaxPixels',\n textSizeMinPixels: 'sizeMinPixels',\n textSizeScale: 'sizeScale',\n textSizeUnits: 'sizeUnits',\n\n textBackground: 'background',\n textBackgroundPadding: 'backgroundPadding',\n textFontFamily: 'fontFamily',\n textFontWeight: 'fontWeight',\n textLineHeight: 'lineHeight',\n textMaxWidth: 'maxWidth',\n textOutlineColor: 'outlineColor',\n textOutlineWidth: 'outlineWidth',\n textWordBreak: 'wordBreak',\n textCharacterSet: 'characterSet',\n textBillboard: 'billboard',\n textFontSettings: 'fontSettings',\n\n getText: 'getText',\n getTextAngle: 'getAngle',\n getTextColor: 'getColor',\n getTextPixelOffset: 'getPixelOffset',\n getTextSize: 'getSize',\n getTextAnchor: 'getTextAnchor',\n getTextAlignmentBaseline: 'getAlignmentBaseline',\n getTextBackgroundColor: 'getBackgroundColor',\n getTextBorderColor: 'getBorderColor',\n getTextBorderWidth: 'getBorderWidth'\n }\n }\n};\n\nexport const LINE_LAYER = {\n type: PathLayer,\n props: {\n lineWidthUnits: 'widthUnits',\n lineWidthScale: 'widthScale',\n lineWidthMinPixels: 'widthMinPixels',\n lineWidthMaxPixels: 'widthMaxPixels',\n lineJointRounded: 'jointRounded',\n lineCapRounded: 'capRounded',\n lineMiterLimit: 'miterLimit',\n lineBillboard: 'billboard',\n\n getLineColor: 'getColor',\n getLineWidth: 'getWidth'\n }\n};\n\nexport const POLYGON_LAYER = {\n type: SolidPolygonLayer,\n props: {\n extruded: 'extruded',\n filled: 'filled',\n wireframe: 'wireframe',\n elevationScale: 'elevationScale',\n material: 'material',\n _full3d: '_full3d',\n\n getElevation: 'getElevation',\n getFillColor: 'getFillColor',\n getLineColor: 'getLineColor'\n }\n};\n\nexport function getDefaultProps({\n type,\n props\n}: {\n type: typeof Layer;\n props: Record;\n}): Record {\n const result = {};\n for (const key in props) {\n result[key] = type.defaultProps[props[key]];\n }\n return result;\n}\n\nexport function forwardProps(\n layer: CompositeLayer,\n mapping: Record\n): Record {\n const {transitions, updateTriggers} = layer.props;\n const result: Record = {\n updateTriggers: {},\n transitions: transitions && {\n getPosition: transitions.geometry\n }\n };\n\n for (const sourceKey in mapping) {\n const targetKey = mapping[sourceKey];\n let value = layer.props[sourceKey];\n if (sourceKey.startsWith('get')) {\n // isAccessor\n value = (layer as any).getSubLayerAccessor(value);\n result.updateTriggers[targetKey] = updateTriggers[sourceKey];\n if (transitions) {\n result.transitions[targetKey] = transitions[sourceKey];\n }\n }\n result[targetKey] = value;\n }\n return result;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {log} from '@deck.gl/core';\nimport type {\n Feature,\n GeoJSON,\n GeoJsonGeometryTypes,\n LineString,\n MultiLineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon\n} from 'geojson';\n\ntype SupportedGeometry = Point | MultiPoint | LineString | MultiLineString | Polygon | MultiPolygon;\n\nexport type SeparatedGeometries = {\n pointFeatures: {geometry: Point}[];\n lineFeatures: {geometry: LineString}[];\n polygonFeatures: {geometry: Polygon}[];\n polygonOutlineFeatures: {geometry: LineString}[];\n};\n\n/**\n * \"Normalizes\" complete or partial GeoJSON data into iterable list of features\n * Can accept GeoJSON geometry or \"Feature\", \"FeatureCollection\" in addition\n * to plain arrays and iterables.\n * Works by extracting the feature array or wrapping single objects in an array,\n * so that subsequent code can simply iterate over features.\n *\n * @param {object} geojson - geojson data\n * @param {Object|Array} data - geojson object (FeatureCollection, Feature or\n * Geometry) or array of features\n * @return {Array|\"iteratable\"} - iterable list of features\n */\nexport function getGeojsonFeatures(geojson: GeoJSON): Feature[] {\n // If array, assume this is a list of features\n if (Array.isArray(geojson)) {\n return geojson;\n }\n\n log.assert(geojson.type, 'GeoJSON does not have type');\n\n switch (geojson.type) {\n case 'Feature':\n // Wrap the feature in a 'Features' array\n return [geojson];\n case 'FeatureCollection':\n // Just return the 'Features' array from the collection\n log.assert(Array.isArray(geojson.features), 'GeoJSON does not have features array');\n return geojson.features;\n default:\n // Assume it's a geometry, we'll check type in separateGeojsonFeatures\n // Wrap the geometry object in a 'Feature' object and wrap in an array\n return [{geometry: geojson}] as Feature[];\n }\n}\n\n// Linearize\nexport function separateGeojsonFeatures(\n features: Feature[],\n wrapFeature: (row: T, sourceObject: any, sourceObjectIndex: number) => T,\n dataRange: {startRow?: number; endRow?: number} = {}\n): SeparatedGeometries {\n const separated: SeparatedGeometries = {\n pointFeatures: [],\n lineFeatures: [],\n polygonFeatures: [],\n polygonOutlineFeatures: []\n };\n const {startRow = 0, endRow = features.length} = dataRange;\n\n for (let featureIndex = startRow; featureIndex < endRow; featureIndex++) {\n const feature = features[featureIndex];\n const {geometry} = feature;\n\n if (!geometry) {\n // geometry can be null per specification\n continue;\n }\n\n if (geometry.type === 'GeometryCollection') {\n log.assert(Array.isArray(geometry.geometries), 'GeoJSON does not have geometries array');\n const {geometries} = geometry;\n for (let i = 0; i < geometries.length; i++) {\n const subGeometry = geometries[i];\n separateGeometry(\n subGeometry as SupportedGeometry,\n separated,\n wrapFeature,\n feature,\n featureIndex\n );\n }\n } else {\n separateGeometry(geometry, separated, wrapFeature, feature, featureIndex);\n }\n }\n\n return separated;\n}\n\nfunction separateGeometry(\n geometry: SupportedGeometry,\n separated: SeparatedGeometries,\n wrapFeature: (row: T, sourceObject: any, sourceObjectIndex: number) => T,\n sourceFeature: Feature,\n sourceFeatureIndex: number\n) {\n const {type, coordinates} = geometry;\n const {pointFeatures, lineFeatures, polygonFeatures, polygonOutlineFeatures} = separated;\n\n if (!validateGeometry(type, coordinates)) {\n // Avoid hard failure if some features are malformed\n log.warn(`${type} coordinates are malformed`)();\n return;\n }\n\n // Split each feature, but keep track of the source feature and index (for Multi* geometries)\n switch (type) {\n case 'Point':\n pointFeatures.push(\n wrapFeature(\n {\n geometry\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n break;\n case 'MultiPoint':\n coordinates.forEach(point => {\n pointFeatures.push(\n wrapFeature(\n {\n geometry: {type: 'Point', coordinates: point}\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n });\n break;\n case 'LineString':\n lineFeatures.push(\n wrapFeature(\n {\n geometry\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n break;\n case 'MultiLineString':\n // Break multilinestrings into multiple lines\n coordinates.forEach(path => {\n lineFeatures.push(\n wrapFeature(\n {\n geometry: {type: 'LineString', coordinates: path}\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n });\n break;\n case 'Polygon':\n polygonFeatures.push(\n wrapFeature(\n {\n geometry\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n // Break polygon into multiple lines\n coordinates.forEach(path => {\n polygonOutlineFeatures.push(\n wrapFeature(\n {\n geometry: {type: 'LineString', coordinates: path}\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n });\n break;\n case 'MultiPolygon':\n // Break multipolygons into multiple polygons\n coordinates.forEach(polygon => {\n polygonFeatures.push(\n wrapFeature(\n {\n geometry: {type: 'Polygon', coordinates: polygon}\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n // Break polygon into multiple lines\n polygon.forEach(path => {\n polygonOutlineFeatures.push(\n wrapFeature(\n {\n geometry: {type: 'LineString', coordinates: path}\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n });\n });\n break;\n default:\n }\n}\n\n/**\n * Simple GeoJSON validation util. For perf reasons we do not validate against the full spec,\n * only the following:\n - geometry.type is supported\n - geometry.coordinate has correct nesting level\n */\nconst COORDINATE_NEST_LEVEL: Record = {\n Point: 1,\n MultiPoint: 2,\n LineString: 2,\n MultiLineString: 3,\n Polygon: 3,\n MultiPolygon: 4\n};\n\nexport function validateGeometry(type: GeoJsonGeometryTypes, coordinates: any): boolean {\n let nestLevel = COORDINATE_NEST_LEVEL[type] as number;\n\n log.assert(nestLevel, `Unknown GeoJSON type ${type}`);\n\n while (coordinates && --nestLevel > 0) {\n coordinates = coordinates[0];\n }\n\n return coordinates && Number.isFinite(coordinates[0]);\n}\n","import {BinaryAttribute, LayerData, LayerProps} from '@deck.gl/core';\nimport {PolygonLayerProps, ScatterplotLayerProps} from '..';\nimport {calculatePickingColors} from './geojson-binary';\nimport {BinaryFeatures} from '@loaders.gl/schema';\nimport {SeparatedGeometries} from './geojson';\n\n// TODO: PathLayer is not yet typed\ntype PathLayerProps = LayerProps & Record;\n\ntype SubLayersProps = {\n points: Partial;\n lines: Partial;\n polygons: Partial;\n polygonsOutline: Partial;\n};\n\ntype ExtendedBinaryFeatures = {\n [P in keyof BinaryFeatures]: BinaryFeatures[P] & {attributes?: Record};\n};\n\nfunction createEmptyLayerProps(): SubLayersProps {\n return {\n points: {},\n lines: {},\n polygons: {},\n polygonsOutline: {}\n };\n}\n\nfunction getCoordinates(f) {\n return f.geometry.coordinates;\n}\n\nexport function createLayerPropsFromFeatures(\n features: SeparatedGeometries,\n featuresDiff\n): SubLayersProps {\n const layerProps = createEmptyLayerProps();\n const {pointFeatures, lineFeatures, polygonFeatures, polygonOutlineFeatures} = features;\n\n layerProps.points.data = pointFeatures;\n layerProps.points._dataDiff = featuresDiff.pointFeatures && (() => featuresDiff.pointFeatures);\n layerProps.points.getPosition = getCoordinates;\n\n layerProps.lines.data = lineFeatures;\n layerProps.lines._dataDiff = featuresDiff.lineFeatures && (() => featuresDiff.lineFeatures);\n layerProps.lines.getPath = getCoordinates;\n\n layerProps.polygons.data = polygonFeatures;\n layerProps.polygons._dataDiff =\n featuresDiff.polygonFeatures && (() => featuresDiff.polygonFeatures);\n layerProps.polygons.getPolygon = getCoordinates;\n\n layerProps.polygonsOutline.data = polygonOutlineFeatures;\n layerProps.polygonsOutline._dataDiff =\n featuresDiff.polygonOutlineFeatures && (() => featuresDiff.polygonOutlineFeatures);\n layerProps.polygonsOutline.getPath = getCoordinates;\n\n return layerProps;\n}\n\nexport function createLayerPropsFromBinary(\n geojsonBinary: Required,\n encodePickingColor\n): SubLayersProps {\n // The binary data format is documented here\n // https://github.com/visgl/loaders.gl/blob/master/modules/gis/docs/api-reference/geojson-to-binary.md\n // It is the default output from the `MVTLoader` and can also be obtained\n // from GeoJSON by using the `geojsonToBinary` utility function.\n const layerProps = createEmptyLayerProps();\n const {points, lines, polygons} = geojsonBinary;\n\n const customPickingColors = calculatePickingColors(geojsonBinary, encodePickingColor);\n\n layerProps.points.data = {\n length: points.positions.value.length / points.positions.size,\n attributes: {\n ...points.attributes,\n getPosition: points.positions,\n instancePickingColors: {\n size: 3,\n value: customPickingColors.points!\n }\n },\n properties: points.properties,\n numericProps: points.numericProps,\n featureIds: points.featureIds\n } as LayerData;\n\n layerProps.lines.data = {\n length: lines.pathIndices.value.length - 1,\n startIndices: lines.pathIndices.value,\n attributes: {\n ...lines.attributes,\n getPath: lines.positions,\n instancePickingColors: {\n size: 3,\n value: customPickingColors.lines!\n }\n },\n properties: lines.properties,\n numericProps: lines.numericProps,\n featureIds: lines.featureIds\n } as LayerData;\n layerProps.lines._pathType = 'open';\n\n layerProps.polygons.data = {\n length: polygons.polygonIndices.value.length - 1,\n startIndices: polygons.polygonIndices.value,\n attributes: {\n ...polygons.attributes,\n getPolygon: polygons.positions,\n pickingColors: {\n size: 3,\n value: customPickingColors.polygons!\n }\n },\n properties: polygons.properties,\n numericProps: polygons.numericProps,\n featureIds: polygons.featureIds\n } as LayerData;\n layerProps.polygons._normalize = false;\n if (polygons.triangles) {\n (layerProps.polygons.data as any).attributes.indices = polygons.triangles.value;\n }\n\n layerProps.polygonsOutline.data = {\n length: polygons.primitivePolygonIndices.value.length - 1,\n startIndices: polygons.primitivePolygonIndices.value,\n attributes: {\n ...polygons.attributes,\n getPath: polygons.positions,\n instancePickingColors: {\n size: 3,\n value: customPickingColors.polygons!\n }\n },\n properties: polygons.properties,\n numericProps: polygons.numericProps,\n featureIds: polygons.featureIds\n } as LayerData;\n layerProps.polygonsOutline._pathType = 'open';\n\n return layerProps;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Accessor,\n Color,\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n PickingInfo,\n Unit,\n Material,\n UpdateParameters,\n _ConstructorOf,\n DefaultProps\n} from '@deck.gl/core';\n\nimport type {BinaryFeatures} from '@loaders.gl/schema';\nimport type {Feature} from 'geojson';\n\nimport {replaceInRange} from '../utils';\nimport {BinaryFeatureTypes, binaryToFeatureForAccesor} from './geojson-binary';\nimport {\n POINT_LAYER,\n LINE_LAYER,\n POLYGON_LAYER,\n getDefaultProps,\n forwardProps\n} from './sub-layer-map';\n\nimport {getGeojsonFeatures, SeparatedGeometries, separateGeojsonFeatures} from './geojson';\nimport {createLayerPropsFromFeatures, createLayerPropsFromBinary} from './geojson-layer-props';\n\n/** All properties supported by GeoJsonLayer */\nexport type GeoJsonLayerProps = _GeoJsonLayerProps &\n CompositeLayerProps;\n\n/** Properties added by GeoJsonLayer */\nexport type _GeoJsonLayerProps = {\n /**\n * How to render Point and MultiPoint features in the data.\n *\n * Supported types are:\n * * `'circle'`\n * * `'icon'`\n * * `'text'`\n *\n * @default 'circle'\n */\n pointType?: string;\n} & _GeoJsonLayerFillProps &\n _GeoJsonLayerStrokeProps &\n _GeoJsonLayer3DProps &\n _GeoJsonLayerPointCircleProps &\n _GeojsonLayerIconPointProps &\n _GeojsonLayerTextPointProps;\n\n/** GeoJsonLayer fill options. */\ntype _GeoJsonLayerFillProps = {\n /**\n * Whether to draw a filled polygon (solid fill).\n *\n * Note that only the area between the outer polygon and any holes will be filled.\n *\n * @default true\n */\n filled?: boolean;\n\n /**\n * Fill collor value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getFillColor?: Accessor;\n};\n\n/** GeoJsonLayer stroke options. */\ntype _GeoJsonLayerStrokeProps = {\n /**\n * Whether to draw an outline around the polygon (solid fill).\n *\n * Note that both the outer polygon as well the outlines of any holes will be drawn.\n *\n * @default true\n */\n stroked?: boolean;\n\n /**\n * Line color value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getLineColor?: Accessor;\n\n /**\n * Line width value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getLineWidth?: Accessor;\n\n /**\n * The units of the line width, one of `meters`, `common`, and `pixels`.\n *\n * @default 'meters'\n * @see Unit.\n */\n lineWidthUnits?: Unit;\n\n /**\n * A multiplier that is applied to all line widths\n *\n * @default 1\n */\n lineWidthScale?: number;\n\n /**\n * The minimum line width in pixels.\n *\n * @default 0\n */\n lineWidthMinPixels?: number;\n\n /**\n * The maximum line width in pixels\n *\n * @default Number.MAX_SAFE_INTEGER\n */\n lineWidthMaxPixels?: number;\n\n /**\n * Type of joint. If `true`, draw round joints. Otherwise draw miter joints.\n *\n * @default false\n */\n lineJointRounded?: boolean;\n\n /**\n * The maximum extent of a joint in ratio to the stroke width.\n *\n * Only works if `lineJointRounded` is false.\n *\n * @default 4\n */\n lineMiterLimit?: number;\n\n /**\n * Type of line caps.\n *\n * If `true`, draw round caps. Otherwise draw square caps.\n *\n * @default false\n */\n lineCapRounded?: boolean;\n\n /**\n * If `true`, extrude the line in screen space (width always faces the camera).\n * If `false`, the width always faces up.\n *\n * @default false\n */\n lineBillboard?: boolean;\n};\n\n/** GeoJsonLayer 3D options. */\ntype _GeoJsonLayer3DProps = {\n /**\n * Extrude Polygon and MultiPolygon features along the z-axis if set to true\n *\n * Based on the elevations provided by the `getElevation` accessor.\n *\n * @default false\n */\n extruded?: boolean;\n\n /**\n * Whether to generate a line wireframe of the hexagon.\n *\n * @default false\n */\n wireframe?: boolean;\n\n /**\n * (Experimental) This prop is only effective with `XYZ` data.\n * When true, polygon tesselation will be performed on the plane with the largest area, instead of the xy plane.\n * @default false\n */\n _full3d?: boolean;\n\n /**\n * Elevation valur or accessor.\n *\n * Only used if `extruded: true`.\n *\n * @default 1000\n */\n getElevation?: Accessor;\n\n /**\n * Elevation multiplier.\n *\n * The final elevation is calculated by `elevationScale * getElevation(d)`.\n * `elevationScale` is a handy property to scale all elevation without updating the data.\n *\n * @default 1\n */\n elevationScale?: boolean;\n\n /**\n * Material settings for lighting effect. Applies to extruded polgons.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n};\n\n/** GeoJsonLayer Properties forwarded to `ScatterPlotLayer` if `pointType` is `'circle'` */\nexport type _GeoJsonLayerPointCircleProps = {\n getPointRadius?: Accessor;\n pointRadiusUnits?: Unit;\n pointRadiusScale?: number;\n pointRadiusMinPixels?: number;\n pointRadiusMaxPixels?: number;\n pointAntialiasing?: boolean;\n pointBillboard?: boolean;\n\n /** @deprecated use getPointRadius */\n getRadius?: Accessor;\n};\n\n/** GeoJsonLayer properties forwarded to `IconLayer` if `pointType` is `'icon'` */\ntype _GeojsonLayerIconPointProps = {\n iconAtlas?: any;\n iconMapping?: any;\n getIcon?: Accessor;\n getIconSize?: Accessor;\n getIconColor?: Accessor;\n getIconAngle?: Accessor;\n getIconPixelOffset?: Accessor;\n iconSizeUnits?: Unit;\n iconSizeScale?: number;\n iconSizeMinPixels?: number;\n iconSizeMaxPixels?: number;\n iconBillboard?: boolean;\n iconAlphaCutoff?: number;\n};\n\n/** GeoJsonLayer properties forwarded to `TextLayer` if `pointType` is `'text'` */\ntype _GeojsonLayerTextPointProps = {\n getText?: Accessor;\n getTextColor?: Accessor;\n getTextAngle?: Accessor;\n getTextSize?: Accessor;\n getTextAnchor?: Accessor;\n getTextAlignmentBaseline?: Accessor;\n getTextPixelOffset?: Accessor;\n getTextBackgroundColor?: Accessor;\n getTextBorderColor?: Accessor;\n getTextBorderWidth?: Accessor;\n textSizeUnits?: Unit;\n textSizeScale?: number;\n textSizeMinPixels?: number;\n textSizeMaxPixels?: number;\n textCharacterSet?: any;\n textFontFamily?: string;\n textFontWeight?: number;\n textLineHeight?: number;\n textMaxWidth?: number;\n textWordBreak?: string; // TODO\n textBackground?: boolean;\n textBackgroundPadding?: number[];\n textOutlineColor?: Color;\n textOutlineWidth?: number;\n textBillboard?: boolean;\n textFontSettings?: any;\n};\n\nconst FEATURE_TYPES = ['points', 'linestrings', 'polygons'];\n\nconst defaultProps: DefaultProps = {\n ...getDefaultProps(POINT_LAYER.circle),\n ...getDefaultProps(POINT_LAYER.icon),\n ...getDefaultProps(POINT_LAYER.text),\n ...getDefaultProps(LINE_LAYER),\n ...getDefaultProps(POLYGON_LAYER),\n\n // Overwrite sub layer defaults\n stroked: true,\n filled: true,\n extruded: false,\n wireframe: false,\n _full3d: false,\n iconAtlas: {type: 'object', value: null},\n iconMapping: {type: 'object', value: {}},\n getIcon: {type: 'accessor', value: f => f.properties.icon},\n getText: {type: 'accessor', value: f => f.properties.text},\n\n // Self props\n pointType: 'circle',\n\n // TODO: deprecated, remove in v9\n getRadius: {deprecatedFor: 'getPointRadius'}\n};\n\ntype GeoJsonPickingInfo = PickingInfo & {\n featureType?: string | null;\n info?: any;\n};\n\n/** Render GeoJSON formatted data as polygons, lines and points (circles, icons and/or texts). */\nexport default class GeoJsonLayer<\n DataT extends Feature = Feature,\n ExtraProps = {}\n> extends CompositeLayer> & ExtraProps> {\n static layerName = 'GeoJsonLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n this.state = {\n layerProps: {},\n features: {}\n };\n }\n\n updateState({props, changeFlags}: UpdateParameters): void {\n if (!changeFlags.dataChanged) {\n return;\n }\n const {data} = this.props;\n const binary =\n data && 'points' in (data as {}) && 'polygons' in (data as {}) && 'lines' in (data as {});\n\n this.setState({binary});\n\n if (binary) {\n this._updateStateBinary({props, changeFlags});\n } else {\n this._updateStateJSON({props, changeFlags});\n }\n }\n\n private _updateStateBinary({props, changeFlags}): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const layerProps = createLayerPropsFromBinary(props.data, this.encodePickingColor);\n this.setState({layerProps});\n }\n\n private _updateStateJSON({props, changeFlags}): void {\n const features: Feature[] = getGeojsonFeatures(props.data) as any;\n const wrapFeature = this.getSubLayerRow.bind(this);\n let newFeatures: SeparatedGeometries = {} as SeparatedGeometries;\n const featuresDiff = {};\n\n if (Array.isArray(changeFlags.dataChanged)) {\n const oldFeatures = this.state.features;\n for (const key in oldFeatures) {\n newFeatures[key] = oldFeatures[key].slice();\n featuresDiff[key] = [];\n }\n\n for (const dataRange of changeFlags.dataChanged) {\n const partialFeatures = separateGeojsonFeatures(features, wrapFeature, dataRange);\n for (const key in oldFeatures) {\n featuresDiff[key].push(\n replaceInRange({\n data: newFeatures[key],\n getIndex: f => f.__source.index,\n dataRange,\n replace: partialFeatures[key]\n })\n );\n }\n }\n } else {\n newFeatures = separateGeojsonFeatures(features, wrapFeature);\n }\n\n const layerProps = createLayerPropsFromFeatures(newFeatures, featuresDiff);\n\n this.setState({\n features: newFeatures,\n featuresDiff,\n layerProps\n });\n }\n\n getPickingInfo(params): GeoJsonPickingInfo {\n const info = super.getPickingInfo(params) as GeoJsonPickingInfo;\n const {index, sourceLayer} = info;\n info.featureType = FEATURE_TYPES.find(ft => sourceLayer!.id.startsWith(`${this.id}-${ft}-`));\n if (index >= 0 && sourceLayer!.id.startsWith(`${this.id}-points-text`) && this.state.binary) {\n info.index = (this.props.data as BinaryFeatures).points!.globalFeatureIds.value[index];\n }\n return info;\n }\n\n _updateAutoHighlight(info: GeoJsonPickingInfo): void {\n // All sub layers except the points layer use source feature index to encode the picking color\n // The points layer uses indices from the points data array.\n const pointLayerIdPrefix = `${this.id}-points-`;\n const sourceIsPoints = info.featureType === 'points';\n for (const layer of this.getSubLayers()) {\n if (layer.id.startsWith(pointLayerIdPrefix) === sourceIsPoints) {\n layer.updateAutoHighlight(info);\n }\n }\n }\n\n private _renderPolygonLayer(): Layer | null {\n const {extruded, wireframe} = this.props;\n const {layerProps} = this.state;\n const id = 'polygons-fill';\n\n const PolygonFillLayer =\n this.shouldRenderSubLayer(id, layerProps.polygons.data) &&\n this.getSubLayerClass(id, POLYGON_LAYER.type);\n\n if (PolygonFillLayer) {\n const forwardedProps = forwardProps(this, POLYGON_LAYER.props);\n // Avoid building the lineColors attribute if wireframe is off\n const useLineColor = extruded && wireframe;\n if (!useLineColor) {\n delete forwardedProps.getLineColor;\n }\n // using a legacy API to invalid lineColor attributes\n forwardedProps.updateTriggers.lineColors = useLineColor;\n\n return new PolygonFillLayer(\n forwardedProps,\n this.getSubLayerProps({\n id,\n updateTriggers: forwardedProps.updateTriggers\n }),\n layerProps.polygons\n );\n }\n return null;\n }\n\n private _renderLineLayers(): (Layer | false)[] | null {\n const {extruded, stroked} = this.props;\n const {layerProps} = this.state;\n const polygonStrokeLayerId = 'polygons-stroke';\n const lineStringsLayerId = 'linestrings';\n\n const PolygonStrokeLayer =\n !extruded &&\n stroked &&\n this.shouldRenderSubLayer(polygonStrokeLayerId, layerProps.polygonsOutline.data) &&\n this.getSubLayerClass(polygonStrokeLayerId, LINE_LAYER.type);\n const LineStringsLayer =\n this.shouldRenderSubLayer(lineStringsLayerId, layerProps.lines.data) &&\n this.getSubLayerClass(lineStringsLayerId, LINE_LAYER.type);\n\n if (PolygonStrokeLayer || LineStringsLayer) {\n const forwardedProps = forwardProps(this, LINE_LAYER.props);\n\n return [\n PolygonStrokeLayer &&\n new PolygonStrokeLayer(\n forwardedProps,\n this.getSubLayerProps({\n id: polygonStrokeLayerId,\n updateTriggers: forwardedProps.updateTriggers\n }),\n layerProps.polygonsOutline\n ),\n\n LineStringsLayer &&\n new LineStringsLayer(\n forwardedProps,\n this.getSubLayerProps({\n id: lineStringsLayerId,\n updateTriggers: forwardedProps.updateTriggers\n }),\n layerProps.lines\n )\n ];\n }\n return null;\n }\n\n private _renderPointLayers(): Layer[] | null {\n const {pointType} = this.props;\n const {layerProps, binary} = this.state;\n let {highlightedObjectIndex} = this.props;\n\n if (!binary && Number.isFinite(highlightedObjectIndex)) {\n highlightedObjectIndex = layerProps.points.data.findIndex(\n d => d.__source.index === highlightedObjectIndex\n );\n }\n\n // Avoid duplicate sub layer ids\n const types = new Set(pointType.split('+'));\n const pointLayers: Layer[] = [];\n for (const type of types) {\n const id = `points-${type}`;\n const PointLayerMapping = POINT_LAYER[type];\n const PointsLayer: _ConstructorOf =\n PointLayerMapping &&\n this.shouldRenderSubLayer(id, layerProps.points.data) &&\n this.getSubLayerClass(id, PointLayerMapping.type);\n if (PointsLayer) {\n const forwardedProps = forwardProps(this, PointLayerMapping.props);\n let pointsLayerProps = layerProps.points;\n\n if (type === 'text' && binary) {\n // Picking colors are per-point but for text per-character are required\n // getPickingInfo() maps back to the correct index\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {instancePickingColors, ...rest} = pointsLayerProps.data.attributes;\n pointsLayerProps = {\n ...pointsLayerProps,\n data: {...pointsLayerProps.data, attributes: rest}\n };\n }\n\n pointLayers.push(\n new PointsLayer(\n forwardedProps,\n this.getSubLayerProps({\n id,\n updateTriggers: forwardedProps.updateTriggers,\n highlightedObjectIndex\n }),\n pointsLayerProps\n )\n );\n }\n }\n return pointLayers;\n }\n\n renderLayers() {\n const {extruded} = this.props;\n\n const polygonFillLayer = this._renderPolygonLayer();\n const lineLayers = this._renderLineLayers();\n const pointLayers = this._renderPointLayers();\n\n return [\n // If not extruded: flat fill layer is drawn below outlines\n !extruded && polygonFillLayer,\n lineLayers,\n pointLayers,\n // If extruded: draw fill layer last for correct blending behavior\n extruded && polygonFillLayer\n ];\n }\n\n protected getSubLayerAccessor(accessor: Accessor): Accessor {\n const {binary} = this.state;\n if (!binary || typeof accessor !== 'function') {\n return super.getSubLayerAccessor(accessor);\n }\n\n return (object, info) => {\n const {data, index} = info;\n const feature = binaryToFeatureForAccesor(data as unknown as BinaryFeatureTypes, index);\n // @ts-ignore (TS2349) accessor is always function\n return accessor(feature, info);\n };\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Layer,\n project32,\n picking,\n UNIT,\n UpdateParameters,\n LayerProps,\n Unit,\n AccessorFunction,\n Position,\n Accessor,\n Color,\n DefaultProps\n} from '@deck.gl/core';\n\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './arc-layer-vertex.glsl';\nimport fs from './arc-layer-fragment.glsl';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n getSourcePosition: {type: 'accessor', value: x => x.sourcePosition},\n getTargetPosition: {type: 'accessor', value: x => x.targetPosition},\n getSourceColor: {type: 'accessor', value: DEFAULT_COLOR},\n getTargetColor: {type: 'accessor', value: DEFAULT_COLOR},\n getWidth: {type: 'accessor', value: 1},\n getHeight: {type: 'accessor', value: 1},\n getTilt: {type: 'accessor', value: 0},\n\n greatCircle: false,\n\n widthUnits: 'pixels',\n widthScale: {type: 'number', value: 1, min: 0},\n widthMinPixels: {type: 'number', value: 0, min: 0},\n widthMaxPixels: {type: 'number', value: Number.MAX_SAFE_INTEGER, min: 0}\n};\n\n/** All properties supported by ArcLayer. */\nexport type ArcLayerProps = _ArcLayerProps & LayerProps;\n\n/** Properties added by ArcLayer. */\ntype _ArcLayerProps = {\n /**\n * If `true`, create the arc along the shortest path on the earth surface.\n * @default false\n */\n greatCircle?: boolean;\n\n /**\n * The units of the line width, one of `'meters'`, `'common'`, and `'pixels'`\n * @default 'pixels'\n */\n widthUnits?: Unit;\n\n /**\n * The scaling multiplier for the width of each line.\n * @default 1\n */\n widthScale?: number;\n\n /**\n * The minimum line width in pixels.\n * @default 0\n */\n widthMinPixels?: number;\n\n /**\n * The maximum line width in pixels.\n * @default Number.MAX_SAFE_INTEGER\n */\n widthMaxPixels?: number;\n\n /**\n * Method called to retrieve the source position of each object.\n * @default object => object.sourcePosition\n */\n getSourcePosition?: AccessorFunction;\n\n /**\n * Method called to retrieve the target position of each object.\n * @default object => object.targetPosition\n */\n getTargetPosition?: AccessorFunction;\n\n /**\n * The rgba color is in the format of `[r, g, b, [a]]`.\n * @default [0, 0, 0, 255]\n */\n getSourceColor?: Accessor;\n\n /**\n * The rgba color is in the format of `[r, g, b, [a]]`.\n * @default [0, 0, 0, 255]\n */\n getTargetColor?: Accessor;\n\n /**\n * The line width of each object, in units specified by `widthUnits`.\n * @default 1\n */\n getWidth?: Accessor;\n\n /**\n * Multiplier of layer height. `0` will make the layer flat.\n * @default 1\n */\n getHeight?: Accessor;\n\n /**\n * Use to tilt the arc to the side if you have multiple arcs with the same source and target positions.\n * @default 0\n */\n getTilt?: Accessor;\n};\n\n/** Render raised arcs joining pairs of source and target coordinates. */\nexport default class ArcLayer extends Layer<\n ExtraPropsT & Required<_ArcLayerProps>\n> {\n static layerName = 'ArcLayer';\n static defaultProps = defaultProps;\n\n state!: Layer['state'] & {\n model?: Model;\n };\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]}); // 'project' module added by default.\n }\n\n // This layer has its own wrapLongitude logic\n get wrapLongitude() {\n return false;\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager()!;\n\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n instanceSourcePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getSourcePosition'\n },\n instanceTargetPositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getTargetPosition'\n },\n instanceSourceColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getSourceColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceTargetColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getTargetColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceWidths: {\n size: 1,\n transition: true,\n accessor: 'getWidth',\n defaultValue: 1\n },\n instanceHeights: {\n size: 1,\n transition: true,\n accessor: 'getHeight',\n defaultValue: 1\n },\n instanceTilts: {\n size: 1,\n transition: true,\n accessor: 'getTilt',\n defaultValue: 0\n }\n });\n /* eslint-enable max-len */\n }\n\n updateState(opts: UpdateParameters): void {\n super.updateState(opts);\n // Re-generate model if geometry changed\n if (opts.changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n }\n\n draw({uniforms}) {\n const {widthUnits, widthScale, widthMinPixels, widthMaxPixels, greatCircle, wrapLongitude} =\n this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n greatCircle,\n widthUnits: UNIT[widthUnits],\n widthScale,\n widthMinPixels,\n widthMaxPixels,\n useShortestPath: wrapLongitude\n })\n .draw();\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n let positions: number[] = [];\n const NUM_SEGMENTS = 50;\n /*\n * (0, -1)-------------_(1, -1)\n * | _,-\" |\n * o _,-\" o\n * | _,-\" |\n * (0, 1)\"-------------(1, 1)\n */\n for (let i = 0; i < NUM_SEGMENTS; i++) {\n positions = positions.concat([i, 1, 0, i, -1, 0]);\n }\n\n const model = new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_STRIP,\n attributes: {\n positions: new Float32Array(positions)\n }\n }),\n isInstanced: true\n });\n\n model.setUniforms({numSegments: NUM_SEGMENTS});\n\n return model;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME arc-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec4 instanceSourceColors;\nattribute vec4 instanceTargetColors;\nattribute vec3 instanceSourcePositions;\nattribute vec3 instanceSourcePositions64Low;\nattribute vec3 instanceTargetPositions;\nattribute vec3 instanceTargetPositions64Low;\nattribute vec3 instancePickingColors;\nattribute float instanceWidths;\nattribute float instanceHeights;\nattribute float instanceTilts;\n\nuniform bool greatCircle;\nuniform bool useShortestPath;\nuniform float numSegments;\nuniform float opacity;\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\nuniform int widthUnits;\n\nvarying vec4 vColor;\nvarying vec2 uv;\nvarying float isValid;\n\nfloat paraboloid(float distance, float sourceZ, float targetZ, float ratio) {\n // d: distance on the xy plane\n // r: ratio of the current point\n // p: ratio of the peak of the arc\n // h: height multiplier\n // z = f(r) = sqrt(r * (p * 2 - r)) * d * h\n // f(0) = 0\n // f(1) = dz\n\n float deltaZ = targetZ - sourceZ;\n float dh = distance * instanceHeights;\n if (dh == 0.0) {\n return sourceZ + deltaZ * ratio;\n }\n float unitZ = deltaZ / dh;\n float p2 = unitZ * unitZ + 1.0;\n\n // sqrt does not deal with negative values, manually flip source and target if delta.z < 0\n float dir = step(deltaZ, 0.0);\n float z0 = mix(sourceZ, targetZ, dir);\n float r = mix(ratio, 1.0 - ratio, dir);\n return sqrt(r * (p2 - r)) * dh + z0;\n}\n\n// offset vector by strokeWidth pixels\n// offset_direction is -1 (left) or 1 (right)\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) {\n // normalized direction of the line\n vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);\n // rotate by 90 degrees\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n return dir_screenspace * offset_direction * width / 2.0;\n}\n\nfloat getSegmentRatio(float index) {\n return smoothstep(0.0, 1.0, index / (numSegments - 1.0));\n}\n\nvec3 interpolateFlat(vec3 source, vec3 target, float segmentRatio) {\n float distance = length(source.xy - target.xy);\n float z = paraboloid(distance, source.z, target.z, segmentRatio);\n\n float tiltAngle = radians(instanceTilts);\n vec2 tiltDirection = normalize(target.xy - source.xy);\n vec2 tilt = vec2(-tiltDirection.y, tiltDirection.x) * z * sin(tiltAngle);\n\n return vec3(\n mix(source.xy, target.xy, segmentRatio) + tilt,\n z * cos(tiltAngle)\n );\n}\n\n/* Great circle interpolation\n * http://www.movable-type.co.uk/scripts/latlong.html\n */\nfloat getAngularDist (vec2 source, vec2 target) {\n vec2 sourceRadians = radians(source);\n vec2 targetRadians = radians(target);\n vec2 sin_half_delta = sin((sourceRadians - targetRadians) / 2.0);\n vec2 shd_sq = sin_half_delta * sin_half_delta;\n\n float a = shd_sq.y + cos(sourceRadians.y) * cos(targetRadians.y) * shd_sq.x;\n return 2.0 * asin(sqrt(a));\n}\n\nvec3 interpolateGreatCircle(vec3 source, vec3 target, vec3 source3D, vec3 target3D, float angularDist, float t) {\n vec2 lngLat;\n\n // if the angularDist is PI, linear interpolation is applied. otherwise, use spherical interpolation\n if(abs(angularDist - PI) < 0.001) {\n lngLat = (1.0 - t) * source.xy + t * target.xy;\n } else {\n float a = sin((1.0 - t) * angularDist);\n float b = sin(t * angularDist);\n vec3 p = source3D.yxz * a + target3D.yxz * b;\n lngLat = degrees(vec2(atan(p.y, -p.x), atan(p.z, length(p.xy))));\n }\n\n float z = paraboloid(angularDist * EARTH_RADIUS, source.z, target.z, t);\n\n return vec3(lngLat, z);\n}\n\n/* END GREAT CIRCLE */\n\nvoid main(void) {\n geometry.worldPosition = instanceSourcePositions;\n geometry.worldPositionAlt = instanceTargetPositions;\n\n float segmentIndex = positions.x;\n float segmentRatio = getSegmentRatio(segmentIndex);\n float prevSegmentRatio = getSegmentRatio(max(0.0, segmentIndex - 1.0));\n float nextSegmentRatio = getSegmentRatio(min(numSegments - 1.0, segmentIndex + 1.0));\n\n // if it's the first point, use next - current as direction\n // otherwise use current - prev\n float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));\n isValid = 1.0;\n\n uv = vec2(segmentRatio, positions.y);\n geometry.uv = uv;\n geometry.pickingColor = instancePickingColors;\n\n vec4 curr;\n vec4 next;\n vec3 source;\n vec3 target;\n\n if ((greatCircle || project_uProjectionMode == PROJECTION_MODE_GLOBE) && project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n source = project_globe_(vec3(instanceSourcePositions.xy, 0.0));\n target = project_globe_(vec3(instanceTargetPositions.xy, 0.0));\n float angularDist = getAngularDist(instanceSourcePositions.xy, instanceTargetPositions.xy);\n\n vec3 prevPos = interpolateGreatCircle(instanceSourcePositions, instanceTargetPositions, source, target, angularDist, prevSegmentRatio);\n vec3 currPos = interpolateGreatCircle(instanceSourcePositions, instanceTargetPositions, source, target, angularDist, segmentRatio);\n vec3 nextPos = interpolateGreatCircle(instanceSourcePositions, instanceTargetPositions, source, target, angularDist, nextSegmentRatio);\n\n if (abs(currPos.x - prevPos.x) > 180.0) {\n indexDir = -1.0;\n isValid = 0.0;\n } else if (abs(currPos.x - nextPos.x) > 180.0) {\n indexDir = 1.0;\n isValid = 0.0;\n }\n nextPos = indexDir < 0.0 ? prevPos : nextPos;\n nextSegmentRatio = indexDir < 0.0 ? prevSegmentRatio : nextSegmentRatio;\n\n if (isValid == 0.0) {\n // split at the 180th meridian\n nextPos.x += nextPos.x > 0.0 ? -360.0 : 360.0;\n float t = ((currPos.x > 0.0 ? 180.0 : -180.0) - currPos.x) / (nextPos.x - currPos.x);\n currPos = mix(currPos, nextPos, t);\n segmentRatio = mix(segmentRatio, nextSegmentRatio, t);\n }\n\n vec3 currPos64Low = mix(instanceSourcePositions64Low, instanceTargetPositions64Low, segmentRatio);\n vec3 nextPos64Low = mix(instanceSourcePositions64Low, instanceTargetPositions64Low, nextSegmentRatio);\n \n curr = project_position_to_clipspace(currPos, currPos64Low, vec3(0.0), geometry.position);\n next = project_position_to_clipspace(nextPos, nextPos64Low, vec3(0.0));\n \n } else {\n vec3 source_world = instanceSourcePositions;\n vec3 target_world = instanceTargetPositions;\n if (useShortestPath) {\n source_world.x = mod(source_world.x + 180., 360.0) - 180.;\n target_world.x = mod(target_world.x + 180., 360.0) - 180.;\n\n float deltaLng = target_world.x - source_world.x;\n if (deltaLng > 180.) target_world.x -= 360.;\n if (deltaLng < -180.) source_world.x -= 360.;\n }\n source = project_position(source_world, instanceSourcePositions64Low);\n target = project_position(target_world, instanceTargetPositions64Low);\n\n // common x at longitude=-180\n float antiMeridianX = 0.0;\n\n if (useShortestPath) {\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\n antiMeridianX = -(project_uCoordinateOrigin.x + 180.) / 360. * TILE_SIZE;\n }\n float thresholdRatio = (antiMeridianX - source.x) / (target.x - source.x);\n\n if (prevSegmentRatio <= thresholdRatio && nextSegmentRatio > thresholdRatio) {\n isValid = 0.0;\n indexDir = sign(segmentRatio - thresholdRatio);\n segmentRatio = thresholdRatio;\n }\n }\n\n nextSegmentRatio = indexDir < 0.0 ? prevSegmentRatio : nextSegmentRatio;\n vec3 currPos = interpolateFlat(source, target, segmentRatio);\n vec3 nextPos = interpolateFlat(source, target, nextSegmentRatio);\n\n if (useShortestPath) {\n if (nextPos.x < antiMeridianX) {\n currPos.x += TILE_SIZE;\n nextPos.x += TILE_SIZE;\n }\n }\n\n curr = project_common_position_to_clipspace(vec4(currPos, 1.0));\n next = project_common_position_to_clipspace(vec4(nextPos, 1.0));\n geometry.position = vec4(currPos, 1.0);\n }\n\n // Multiply out width and clamp to limits\n // mercator pixels are interpreted as screen pixels\n float widthPixels = clamp(\n project_size_to_pixel(instanceWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels\n );\n\n // extrude\n vec3 offset = vec3(\n getExtrusionOffset((next.xy - curr.xy) * indexDir, positions.y, widthPixels),\n 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position = curr + vec4(project_pixel_size_to_clipspace(offset.xy), 0.0, 0.0);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vec4 color = mix(instanceSourceColors, instanceTargetColors, segmentRatio);\n vColor = vec4(color.rgb, color.a * opacity);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME arc-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying vec2 uv;\nvarying float isValid;\n\nvoid main(void) {\n if (isValid == 0.0) {\n discard;\n }\n\n gl_FragColor = vColor;\n geometry.uv = uv;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Layer,\n project32,\n picking,\n UNIT,\n LayerProps,\n Unit,\n Position,\n Accessor,\n Color,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './line-layer-vertex.glsl';\nimport fs from './line-layer-fragment.glsl';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n getSourcePosition: {type: 'accessor', value: x => x.sourcePosition},\n getTargetPosition: {type: 'accessor', value: x => x.targetPosition},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n getWidth: {type: 'accessor', value: 1},\n\n widthUnits: 'pixels',\n widthScale: {type: 'number', value: 1, min: 0},\n widthMinPixels: {type: 'number', value: 0, min: 0},\n widthMaxPixels: {type: 'number', value: Number.MAX_SAFE_INTEGER, min: 0}\n};\n\n/** All properties supported by LineLayer. */\nexport type LineLayerProps = _LineLayerProps & LayerProps;\n\n/** Properties added by LineLayer. */\ntype _LineLayerProps = {\n /**\n * The units of the line width, one of `'meters'`, `'common'`, and `'pixels'`.\n * @default 'pixels'\n */\n widthUnits?: Unit;\n\n /**\n * The scaling multiplier for the width of each line.\n * @default 1\n */\n widthScale?: number;\n\n /**\n * The minimum line width in pixels.\n * @default 0\n */\n widthMinPixels?: number;\n\n /**\n * The maximum line width in pixels.\n * @default Number.MAX_SAFE_INTEGER\n */\n widthMaxPixels?: number;\n\n /**\n * Source position of each object.\n * @default object => object.sourcePosition\n */\n getSourcePosition?: Accessor;\n\n /**\n * Target position of each object.\n * @default object => object.targetPosition\n */\n getTargetPosition?: Accessor;\n\n /**\n * The rgba color is in the format of `[r, g, b, [a]]`.\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n\n /**\n * Width of each object\n * @default 1\n */\n getWidth?: Accessor;\n};\n\n/**\n * A layer that renders straight lines joining pairs of source and target coordinates.\n */\nexport default class LineLayer extends Layer<\n ExtraProps & Required<_LineLayerProps>\n> {\n static layerName = 'LineLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]});\n }\n\n // This layer has its own wrapLongitude logic\n get wrapLongitude(): boolean {\n return false;\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager()!;\n\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n instanceSourcePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getSourcePosition'\n },\n instanceTargetPositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getTargetPosition'\n },\n instanceColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceWidths: {\n size: 1,\n transition: true,\n accessor: 'getWidth',\n defaultValue: 1\n }\n });\n /* eslint-enable max-len */\n }\n\n updateState(params: UpdateParameters): void {\n super.updateState(params);\n\n if (params.changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n }\n\n draw({uniforms}): void {\n const {widthUnits, widthScale, widthMinPixels, widthMaxPixels, wrapLongitude} = this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n widthUnits: UNIT[widthUnits],\n widthScale,\n widthMinPixels,\n widthMaxPixels,\n useShortestPath: wrapLongitude ? 1 : 0\n })\n .draw();\n\n if (wrapLongitude) {\n // Render a second copy for the clipped lines at the 180th meridian\n this.state.model\n .setUniforms({\n useShortestPath: -1\n })\n .draw();\n }\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n /*\n * (0, -1)-------------_(1, -1)\n * | _,-\" |\n * o _,-\" o\n * | _,-\" |\n * (0, 1)\"-------------(1, 1)\n */\n const positions = [0, -1, 0, 0, 1, 0, 1, -1, 0, 1, 1, 0];\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_STRIP,\n attributes: {\n positions: new Float32Array(positions)\n }\n }),\n isInstanced: true\n });\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME line-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 instanceSourcePositions;\nattribute vec3 instanceTargetPositions;\nattribute vec3 instanceSourcePositions64Low;\nattribute vec3 instanceTargetPositions64Low;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute float instanceWidths;\n\nuniform float opacity;\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\nuniform float useShortestPath;\nuniform int widthUnits;\n\nvarying vec4 vColor;\nvarying vec2 uv;\n\n// offset vector by strokeWidth pixels\n// offset_direction is -1 (left) or 1 (right)\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) {\n // normalized direction of the line\n vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);\n // rotate by 90 degrees\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n return dir_screenspace * offset_direction * width / 2.0;\n}\n\nvec3 splitLine(vec3 a, vec3 b, float x) {\n float t = (x - a.x) / (b.x - a.x);\n return vec3(x, mix(a.yz, b.yz, t));\n}\n\nvoid main(void) {\n geometry.worldPosition = instanceSourcePositions;\n geometry.worldPositionAlt = instanceTargetPositions;\n\n vec3 source_world = instanceSourcePositions;\n vec3 target_world = instanceTargetPositions;\n vec3 source_world_64low = instanceSourcePositions64Low;\n vec3 target_world_64low = instanceTargetPositions64Low;\n\n if (useShortestPath > 0.5 || useShortestPath < -0.5) {\n source_world.x = mod(source_world.x + 180., 360.0) - 180.;\n target_world.x = mod(target_world.x + 180., 360.0) - 180.;\n float deltaLng = target_world.x - source_world.x;\n\n if (deltaLng * useShortestPath > 180.) {\n source_world.x += 360. * useShortestPath;\n source_world = splitLine(source_world, target_world, 180. * useShortestPath);\n source_world_64low = vec3(0.0);\n } else if (deltaLng * useShortestPath < -180.) {\n target_world.x += 360. * useShortestPath;\n target_world = splitLine(source_world, target_world, 180. * useShortestPath);\n target_world_64low = vec3(0.0);\n } else if (useShortestPath < 0.) {\n // Line is not split, abort\n gl_Position = vec4(0.);\n return;\n }\n }\n\n // Position\n vec4 source_commonspace;\n vec4 target_commonspace;\n vec4 source = project_position_to_clipspace(source_world, source_world_64low, vec3(0.), source_commonspace);\n vec4 target = project_position_to_clipspace(target_world, target_world_64low, vec3(0.), target_commonspace);\n \n // linear interpolation of source & target to pick right coord\n float segmentIndex = positions.x;\n vec4 p = mix(source, target, segmentIndex);\n geometry.position = mix(source_commonspace, target_commonspace, segmentIndex);\n uv = positions.xy;\n geometry.uv = uv;\n geometry.pickingColor = instancePickingColors;\n\n // Multiply out width and clamp to limits\n float widthPixels = clamp(\n project_size_to_pixel(instanceWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels\n );\n\n // extrude\n vec3 offset = vec3(\n getExtrusionOffset(target.xy - source.xy, positions.y, widthPixels),\n 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position = p + vec4(project_pixel_size_to_clipspace(offset.xy), 0.0, 0.0);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Color\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME line-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying vec2 uv;\n\nvoid main(void) {\n geometry.uv = uv;\n\n gl_FragColor = vColor;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Layer,\n project32,\n gouraudLighting,\n picking,\n UNIT,\n LayerProps,\n UpdateParameters,\n Unit,\n AccessorFunction,\n Position,\n Accessor,\n Color,\n Material,\n DefaultProps\n} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './point-cloud-layer-vertex.glsl';\nimport fs from './point-cloud-layer-fragment.glsl';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\nconst DEFAULT_NORMAL: [number, number, number] = [0, 0, 1];\n\nconst defaultProps: DefaultProps = {\n sizeUnits: 'pixels',\n pointSize: {type: 'number', min: 0, value: 10}, // point radius in pixels\n\n getPosition: {type: 'accessor', value: x => x.position},\n getNormal: {type: 'accessor', value: DEFAULT_NORMAL},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n\n material: true,\n\n // Depreated\n radiusPixels: {deprecatedFor: 'pointSize'}\n};\n\n// support loaders.gl point cloud format\nfunction normalizeData(data) {\n const {header, attributes} = data;\n if (!header || !attributes) {\n return;\n }\n\n data.length = header.vertexCount;\n\n if (attributes.POSITION) {\n attributes.instancePositions = attributes.POSITION;\n }\n if (attributes.NORMAL) {\n attributes.instanceNormals = attributes.NORMAL;\n }\n if (attributes.COLOR_0) {\n attributes.instanceColors = attributes.COLOR_0;\n }\n}\n\n/** All properties supported by PointCloudLayer. */\nexport type PointCloudLayerProps = _PointCloudLayerProps & LayerProps;\n\n/** Properties added by PointCloudLayer. */\ntype _PointCloudLayerProps = {\n /**\n * The units of the point size, one of `'meters'`, `'common'`, and `'pixels'`.\n * @default 'pixels'\n */\n sizeUnits?: Unit;\n\n /**\n * Global radius of all points, in units specified by `sizeUnits`\n * @default 10\n */\n pointSize?: number;\n\n /**\n * @deprecated Use `pointSize` instead\n */\n radiusPixels?: number;\n\n /**\n * Material settings for lighting effect.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n\n /**\n * Method called to retrieve the position of each object.\n * @default object => object.position\n */\n getPosition?: AccessorFunction;\n\n /**\n * The normal of each object, in `[nx, ny, nz]`.\n * @default [0, 0, 1]\n */\n getNormal?: Accessor;\n\n /**\n * The rgba color is in the format of `[r, g, b, [a]]`\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n};\n\n/** Render a point cloud with 3D positions, normals and colors. */\nexport default class PointCloudLayer extends Layer<\n ExtraPropsT & Required<_PointCloudLayerProps>\n> {\n static layerName = 'PointCloudLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, gouraudLighting, picking]});\n }\n\n initializeState() {\n this.getAttributeManager()!.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceNormals: {\n size: 3,\n transition: true,\n accessor: 'getNormal',\n defaultValue: DEFAULT_NORMAL\n },\n instanceColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getColor',\n defaultValue: DEFAULT_COLOR\n }\n });\n }\n\n updateState(params: UpdateParameters): void {\n const {changeFlags, props} = params;\n super.updateState(params);\n if (changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n if (changeFlags.dataChanged) {\n normalizeData(props.data);\n }\n }\n\n draw({uniforms}) {\n const {pointSize, sizeUnits} = this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n sizeUnits: UNIT[sizeUnits],\n radiusPixels: pointSize\n })\n .draw();\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n // a triangle that minimally cover the unit circle\n const positions: number[] = [];\n for (let i = 0; i < 3; i++) {\n const angle = (i / 3) * Math.PI * 2;\n positions.push(Math.cos(angle) * 2, Math.sin(angle) * 2, 0);\n }\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLES,\n attributes: {\n positions: new Float32Array(positions)\n }\n }),\n isInstanced: true\n });\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME point-cloud-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 instanceNormals;\nattribute vec4 instanceColors;\nattribute vec3 instancePositions;\nattribute vec3 instancePositions64Low;\nattribute vec3 instancePickingColors;\n\nuniform float opacity;\nuniform float radiusPixels;\nuniform int sizeUnits;\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n geometry.normal = project_normal(instanceNormals);\n\n // position on the containing square in [-1, 1] space\n unitPosition = positions.xy;\n geometry.uv = unitPosition;\n geometry.pickingColor = instancePickingColors;\n\n // Find the center of the point and add the current vertex\n vec3 offset = vec3(positions.xy * project_size_to_pixel(radiusPixels, sizeUnits), 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.), geometry.position);\n gl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Apply lighting\n vec3 lightColor = lighting_getLightColor(instanceColors.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal);\n\n // Apply opacity to instance color, or return instance picking color\n vColor = vec4(lightColor, instanceColors.a * opacity);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME point-cloud-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\n\nvoid main(void) {\n geometry.uv = unitPosition;\n\n float distToCenter = length(unitPosition);\n\n if (distToCenter > 1.0) {\n discard;\n }\n\n gl_FragColor = vColor;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Note: This file will either be moved back to deck.gl or reformatted to web-monorepo standards\n// Disabling lint temporarily to facilitate copying code in and out of this repo\n/* eslint-disable */\n\n// Copyright (c) 2015 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Layer,\n project32,\n phongLighting,\n picking,\n DefaultProps,\n log,\n LayerContext,\n Material\n} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry, Texture2D, isWebGL2} from '@luma.gl/core';\nimport {hasFeature, FEATURES} from '@luma.gl/webgl';\n\nimport {MATRIX_ATTRIBUTES, shouldComposeModelMatrix} from '../utils/matrix';\n\nimport vs from './simple-mesh-layer-vertex.glsl';\nimport fs from './simple-mesh-layer-fragment.glsl';\n\nimport type {LayerProps, UpdateParameters, Accessor, Position, Color, Texture} from '@deck.gl/core';\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport type {Geometry as GeometryType} from '@luma.gl/engine';\nimport {GLTFMaterialParser} from '@luma.gl/experimental';\n\nfunction validateGeometryAttributes(attributes: Record, useMeshColors: boolean): void {\n const hasColorAttribute = attributes.COLOR_0 || attributes.colors;\n const useColorAttribute = hasColorAttribute && useMeshColors;\n if (!useColorAttribute) {\n attributes.colors = {constant: true, value: new Float32Array([1, 1, 1])};\n }\n log.assert(\n attributes.positions || attributes.POSITION,\n 'no \"postions\" or \"POSITION\" attribute in mesh'\n );\n}\n\n/*\n * Convert mesh data into geometry\n * @returns {Geometry} geometry\n */\nfunction getGeometry(data: Mesh, useMeshColors: boolean): Geometry {\n if ((data as any).attributes) {\n validateGeometryAttributes((data as any).attributes, useMeshColors);\n if (data instanceof Geometry) {\n return data;\n } else {\n return new Geometry(data);\n }\n } else if ((data as MeshAttributes).positions || (data as MeshAttributes).POSITION) {\n validateGeometryAttributes(data, useMeshColors);\n return new Geometry({\n attributes: data\n });\n }\n throw Error('Invalid mesh');\n}\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\ntype Mesh =\n | GeometryType\n | {\n attributes: MeshAttributes;\n indices?: MeshAttribute;\n }\n | MeshAttributes;\n\ntype _SimpleMeshLayerProps = {\n mesh: string | Mesh | Promise | null;\n texture?: string | Texture | Promise;\n /** Customize the [texture parameters](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texParameter). */\n textureParameters?: Record | null;\n\n /** Anchor position accessor. */\n getPosition?: Accessor;\n /** Color value or accessor.\n * If `mesh` does not contain vertex colors, use this color to render each object.\n * If `mesh` contains vertex colors, then the two colors are mixed together.\n * Use `[255, 255, 255]` to use the original mesh colors.\n * If `texture` is assigned, then both colors will be ignored.\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n /**\n * Orientation in [pitch, yaw, roll] in degrees.\n * @see https://en.wikipedia.org/wiki/Euler_angles\n * @default [0, 0, 0]\n */\n getOrientation?: Accessor;\n /**\n * Scaling factor of the model along each axis.\n * @default [1, 1, 1]\n */\n getScale?: Accessor;\n /**\n * Translation from the anchor point, [x, y, z] in meters.\n * @default [0, 0, 0]\n */\n getTranslation?: Accessor;\n /**\n * TransformMatrix. If specified, `getOrientation`, `getScale` and `getTranslation` are ignored.\n */\n getTransformMatrix?: Accessor;\n /**\n * Multiplier to scale each geometry by.\n * @default 1\n */\n sizeScale?: number;\n /**\n * @deprecated Whether to color pixels using vertex colors supplied in the mesh (the `COLOR_0` or `colors` attribute).\n * If set to `false` vertex colors will be ignored.\n * This prop will be removed and set to always true in the next major release.\n * @default false\n */\n _useMeshColors?: boolean;\n\n /**\n * (Experimental) If rendering only one instance of the mesh, set this to false to treat mesh positions\n * as deltas of the world coordinates of the anchor.\n * E.g. in LNGLAT coordinates, mesh positions are interpreted as meter offsets by default.\n * setting _instanced to false interpreted mesh positions as lnglat deltas.\n * @default true\n */\n _instanced?: true; // TODO - formalize API\n /**\n * Whether to render the mesh in wireframe mode.\n * @default false\n */\n wireframe?: false;\n /**\n * Material props for lighting effect.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting#constructing-a-material-instance\n */\n material?: Material;\n};\n\nexport type SimpleMeshLayerProps = _SimpleMeshLayerProps & LayerProps;\n\nconst defaultProps: DefaultProps = {\n mesh: {type: 'object', value: null, async: true},\n texture: {type: 'image', value: null, async: true},\n sizeScale: {type: 'number', value: 1, min: 0},\n // Whether the color attribute in a mesh will be used\n // This prop will be removed and set to true in next major release\n _useMeshColors: {type: 'boolean', value: false},\n\n // _instanced is a hack to use world position instead of meter offsets in mesh\n // TODO - formalize API\n _instanced: true,\n // NOTE(Tarek): Quick and dirty wireframe. Just draws\n // the same mesh with LINE_STRIPS. Won't follow edges\n // of the original mesh.\n wireframe: false,\n // Optional material for 'lighting' shader module\n material: true,\n getPosition: {type: 'accessor', value: x => x.position},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n\n // yaw, pitch and roll are in degrees\n // https://en.wikipedia.org/wiki/Euler_angles\n // [pitch, yaw, roll]\n getOrientation: {type: 'accessor', value: [0, 0, 0]},\n getScale: {type: 'accessor', value: [1, 1, 1]},\n getTranslation: {type: 'accessor', value: [0, 0, 0]},\n // 4x4 matrix\n getTransformMatrix: {type: 'accessor', value: []}\n};\n\n/** Render a number of instances of an arbitrary 3D geometry. */\nexport default class SimpleMeshLayer extends Layer<\n ExtraPropsT & Required<_SimpleMeshLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'SimpleMeshLayer';\n\n state!: {\n materialParser?: GLTFMaterialParser;\n model?: Model;\n emptyTexture: Texture2D;\n hasNormals?: boolean;\n };\n\n getShaders() {\n const transpileToGLSL100 = !isWebGL2(this.context.gl);\n\n const defines: any = {};\n\n if (hasFeature(this.context.gl, FEATURES.GLSL_DERIVATIVES)) {\n defines.DERIVATIVES_AVAILABLE = 1;\n }\n\n return super.getShaders({\n vs,\n fs,\n modules: [project32, phongLighting, picking],\n transpileToGLSL100,\n defines\n });\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager();\n // attributeManager is always defined in a primitive layer\n attributeManager!.addInstanced({\n instancePositions: {\n transition: true,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n size: 3,\n accessor: 'getPosition'\n },\n instanceColors: {\n type: GL.UNSIGNED_BYTE,\n transition: true,\n size: this.props.colorFormat.length,\n normalized: true,\n accessor: 'getColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceModelMatrix: MATRIX_ATTRIBUTES\n });\n\n this.setState({\n // Avoid luma.gl's missing uniform warning\n // TODO - add feature to luma.gl to specify ignored uniforms?\n emptyTexture: new Texture2D(this.context.gl, {\n data: new Uint8Array(4),\n width: 1,\n height: 1\n })\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n\n const {props, oldProps, changeFlags} = params;\n if (props.mesh !== oldProps.mesh || changeFlags.extensionsChanged) {\n this.state.model?.delete();\n if (props.mesh) {\n this.state.model = this.getModel(props.mesh as Mesh);\n\n const attributes = (props.mesh as any).attributes || props.mesh;\n this.setState({\n hasNormals: Boolean(attributes.NORMAL || attributes.normals)\n });\n }\n // attributeManager is always defined in a primitive layer\n this.getAttributeManager()!.invalidateAll();\n }\n\n if (props.texture !== oldProps.texture) {\n this.setTexture(props.texture);\n }\n\n if (this.state.model) {\n this.state.model.setDrawMode(this.props.wireframe ? GL.LINE_STRIP : GL.TRIANGLES);\n }\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n\n this.state.emptyTexture.delete();\n }\n\n draw({uniforms}) {\n if (!this.state.model) {\n return;\n }\n\n const {viewport} = this.context;\n const {sizeScale, coordinateSystem, _instanced} = this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n sizeScale,\n composeModelMatrix: !_instanced || shouldComposeModelMatrix(viewport, coordinateSystem),\n flatShading: !this.state.hasNormals\n })\n .draw();\n }\n\n protected getModel(mesh: Mesh): Model {\n const model = new Model(this.context.gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: getGeometry(mesh, this.props._useMeshColors),\n isInstanced: true\n });\n\n const {texture} = this.props;\n const {emptyTexture} = this.state;\n model.setUniforms({\n sampler: texture || emptyTexture,\n hasTexture: Boolean(texture)\n });\n\n return model;\n }\n\n private setTexture(texture: Texture2D): void {\n const {emptyTexture, model} = this.state;\n\n // props.mesh may not be ready at this time.\n // The sampler will be set when `getModel` is called\n if (model) {\n model.setUniforms({\n sampler: texture || emptyTexture,\n hasTexture: Boolean(texture)\n });\n }\n }\n}\n","export default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-vs\n\n// Scale the model\nuniform float sizeScale;\nuniform bool composeModelMatrix;\n\n// Primitive attributes\nin vec3 positions;\nin vec3 normals;\nin vec3 colors;\nin vec2 texCoords;\n\n// Instance attributes\nin vec3 instancePositions;\nin vec3 instancePositions64Low;\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nin mat3 instanceModelMatrix;\nin vec3 instanceTranslation;\n\n// Outputs to fragment shader\nout vec2 vTexCoord;\nout vec3 cameraPosition;\nout vec3 normals_commonspace;\nout vec4 position_commonspace;\nout vec4 vColor;\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n geometry.uv = texCoords;\n geometry.pickingColor = instancePickingColors;\n\n vTexCoord = texCoords;\n cameraPosition = project_uCameraPosition;\n vColor = vec4(colors * instanceColors.rgb, instanceColors.a);\n\n vec3 pos = (instanceModelMatrix * positions) * sizeScale + instanceTranslation;\n\n if (composeModelMatrix) {\n DECKGL_FILTER_SIZE(pos, geometry);\n // using instancePositions as world coordinates\n // when using globe mode, this branch does not re-orient the model to align with the surface of the earth\n // call project_normal before setting position to avoid rotation\n normals_commonspace = project_normal(instanceModelMatrix * normals);\n gl_Position = project_position_to_clipspace(pos + instancePositions, instancePositions64Low, vec3(0.0), position_commonspace);\n geometry.position = position_commonspace;\n }\n else {\n pos = project_size(pos);\n DECKGL_FILTER_SIZE(pos, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, pos, position_commonspace);\n geometry.position = position_commonspace;\n normals_commonspace = project_normal(instanceModelMatrix * normals);\n }\n\n geometry.normal = normals_commonspace;\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","export default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-fs\n\nprecision highp float;\n\nuniform bool hasTexture;\nuniform sampler2D sampler;\nuniform bool flatShading;\nuniform float opacity;\n\nin vec2 vTexCoord;\nin vec3 cameraPosition;\nin vec3 normals_commonspace;\nin vec4 position_commonspace;\nin vec4 vColor;\n\nout vec4 fragColor;\n\nvoid main(void) {\n geometry.uv = vTexCoord;\n\n vec3 normal;\n if (flatShading) {\n\n// NOTE(Tarek): This is necessary because\n// headless.gl reports the extension as\n// available but does not support it in\n// the shader.\n#ifdef DERIVATIVES_AVAILABLE\n normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n#else\n normal = vec3(0.0, 0.0, 1.0);\n#endif\n } else {\n normal = normals_commonspace;\n }\n\n vec4 color = hasTexture ? texture(sampler, vTexCoord) : vColor;\n vec3 lightColor = lighting_getLightColor(color.rgb, cameraPosition, position_commonspace.xyz, normal);\n fragColor = vec4(lightColor, color.a * opacity);\n\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n","const DEFAULT_HIGHLIGHT_COLOR = new Uint8Array([0, 255, 255, 255]);\nconst DEFAULT_MODULE_OPTIONS = {\n pickingSelectedColor: null,\n pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR,\n pickingActive: false,\n pickingAttribute: false\n};\n\nfunction getUniforms() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_MODULE_OPTIONS;\n const uniforms = {};\n\n if (opts.pickingSelectedColor !== undefined) {\n if (!opts.pickingSelectedColor) {\n uniforms.picking_uSelectedColorValid = 0;\n } else {\n const selectedColor = opts.pickingSelectedColor.slice(0, 3);\n uniforms.picking_uSelectedColorValid = 1;\n uniforms.picking_uSelectedColor = selectedColor;\n }\n }\n\n if (opts.pickingHighlightColor) {\n const color = Array.from(opts.pickingHighlightColor, x => x / 255);\n\n if (!Number.isFinite(color[3])) {\n color[3] = 1;\n }\n\n uniforms.picking_uHighlightColor = color;\n }\n\n if (opts.pickingActive !== undefined) {\n uniforms.picking_uActive = Boolean(opts.pickingActive);\n uniforms.picking_uAttribute = Boolean(opts.pickingAttribute);\n }\n\n return uniforms;\n}\n\nconst vs = \"uniform bool picking_uActive;\\nuniform bool picking_uAttribute;\\nuniform vec3 picking_uSelectedColor;\\nuniform bool picking_uSelectedColorValid;\\n\\nout vec4 picking_vRGBcolor_Avalid;\\n\\nconst float COLOR_SCALE = 1. / 255.;\\n\\nbool picking_isColorValid(vec3 color) {\\n return dot(color, vec3(1.0)) > 0.001;\\n}\\n\\nbool isVertexPicked(vec3 vertexColor) {\\n return\\n picking_uSelectedColorValid &&\\n !picking_isColorValid(abs(vertexColor - picking_uSelectedColor));\\n}\\n\\nvoid picking_setPickingColor(vec3 pickingColor) {\\n if (picking_uActive) {\\n picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));\\n\\n if (!picking_uAttribute) {\\n picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;\\n }\\n } else {\\n picking_vRGBcolor_Avalid.a = float(isVertexPicked(pickingColor));\\n }\\n}\\n\\nvoid picking_setPickingAttribute(float value) {\\n if (picking_uAttribute) {\\n picking_vRGBcolor_Avalid.r = value;\\n }\\n}\\nvoid picking_setPickingAttribute(vec2 value) {\\n if (picking_uAttribute) {\\n picking_vRGBcolor_Avalid.rg = value;\\n }\\n}\\nvoid picking_setPickingAttribute(vec3 value) {\\n if (picking_uAttribute) {\\n picking_vRGBcolor_Avalid.rgb = value;\\n }\\n}\\n\";\nconst fs = \"uniform bool picking_uActive;\\nuniform vec3 picking_uSelectedColor;\\nuniform vec4 picking_uHighlightColor;\\n\\nin vec4 picking_vRGBcolor_Avalid;\\nvec4 picking_filterHighlightColor(vec4 color) {\\n if (picking_uActive) {\\n return color;\\n }\\n bool selected = bool(picking_vRGBcolor_Avalid.a);\\n\\n if (selected) {\\n float highLightAlpha = picking_uHighlightColor.a;\\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\\n float highLightRatio = highLightAlpha / blendedAlpha;\\n\\n vec3 blendedRGB = mix(color.rgb, picking_uHighlightColor.rgb, highLightRatio);\\n return vec4(blendedRGB, blendedAlpha);\\n } else {\\n return color;\\n }\\n}\\nvec4 picking_filterPickingColor(vec4 color) {\\n if (picking_uActive) {\\n if (picking_vRGBcolor_Avalid.a == 0.0) {\\n discard;\\n }\\n return picking_vRGBcolor_Avalid;\\n }\\n return color;\\n}\\nvec4 picking_filterColor(vec4 color) {\\n vec4 highightColor = picking_filterHighlightColor(color);\\n return picking_filterPickingColor(highightColor);\\n}\\n\\n\";\nexport const picking = {\n name: 'picking',\n vs,\n fs,\n getUniforms\n};\n//# sourceMappingURL=picking.js.map","import {picking} from '@luma.gl/core';\nimport type {ShaderModule} from '../../types/types';\n\ntype PickingModuleSettings = {\n /** Set to a picking color to visually highlight that item */\n pickingSelectedColor?: [number, number, number] | null;\n /** Color of the highlight */\n pickingHighlightColor?: [number, number, number, number];\n /** Set to true when rendering to off-screen \"picking\" buffer */\n pickingActive?: boolean;\n /** Set to true when picking an attribute value instead of object index */\n pickingAttribute?: boolean;\n};\n\nexport default {\n inject: {\n 'vs:DECKGL_FILTER_GL_POSITION': `\n // for picking depth values\n picking_setPickingAttribute(position.z / position.w);\n `,\n 'vs:DECKGL_FILTER_COLOR': `\n picking_setPickingColor(geometry.pickingColor);\n `,\n 'fs:DECKGL_FILTER_COLOR': {\n order: 99,\n injection: `\n // use highlight color if this fragment belongs to the selected object.\n color = picking_filterHighlightColor(color);\n\n // use picking color if rendering to picking FBO.\n color = picking_filterPickingColor(color);\n `\n }\n },\n ...picking\n} as ShaderModule;\n","export default \"\\nuniform float lighting_uAmbient;\\nuniform float lighting_uDiffuse;\\nuniform float lighting_uShininess;\\nuniform vec3 lighting_uSpecularColor;\\n\\nvec3 lighting_getLightColor(vec3 surfaceColor, vec3 light_direction, vec3 view_direction, vec3 normal_worldspace, vec3 color) {\\n vec3 halfway_direction = normalize(light_direction + view_direction);\\n float lambertian = dot(light_direction, normal_worldspace);\\n float specular = 0.0;\\n if (lambertian > 0.0) {\\n float specular_angle = max(dot(normal_worldspace, halfway_direction), 0.0);\\n specular = pow(specular_angle, lighting_uShininess);\\n }\\n lambertian = max(lambertian, 0.0);\\n return (lambertian * lighting_uDiffuse * surfaceColor + specular * lighting_uSpecularColor) * color;\\n}\\n\\nvec3 lighting_getLightColor(vec3 surfaceColor, vec3 cameraPosition, vec3 position_worldspace, vec3 normal_worldspace) {\\n vec3 lightColor = surfaceColor;\\n\\n if (lighting_uEnabled) {\\n vec3 view_direction = normalize(cameraPosition - position_worldspace);\\n lightColor = lighting_uAmbient * surfaceColor * lighting_uAmbientLight.color;\\n\\n for (int i = 0; i < MAX_LIGHTS; i++) {\\n if (i >= lighting_uPointLightCount) {\\n break;\\n }\\n PointLight pointLight = lighting_uPointLight[i];\\n vec3 light_position_worldspace = pointLight.position;\\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color);\\n }\\n\\n for (int i = 0; i < MAX_LIGHTS; i++) {\\n if (i >= lighting_uDirectionalLightCount) {\\n break;\\n }\\n DirectionalLight directionalLight = lighting_uDirectionalLight[i];\\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\\n }\\n }\\n return lightColor;\\n}\\n\\nvec3 lighting_getSpecularLightColor(vec3 cameraPosition, vec3 position_worldspace, vec3 normal_worldspace) {\\n vec3 lightColor = vec3(0, 0, 0);\\n vec3 surfaceColor = vec3(0, 0, 0);\\n\\n if (lighting_uEnabled) {\\n vec3 view_direction = normalize(cameraPosition - position_worldspace);\\n\\n for (int i = 0; i < MAX_LIGHTS; i++) {\\n if (i >= lighting_uPointLightCount) {\\n break;\\n }\\n PointLight pointLight = lighting_uPointLight[i];\\n vec3 light_position_worldspace = pointLight.position;\\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color);\\n }\\n\\n for (int i = 0; i < MAX_LIGHTS; i++) {\\n if (i >= lighting_uDirectionalLightCount) {\\n break;\\n }\\n DirectionalLight directionalLight = lighting_uDirectionalLight[i];\\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\\n }\\n }\\n return lightColor;\\n}\\n\";\n//# sourceMappingURL=phong-lighting.glsl.js.map","import { lights } from '../lights/lights';\nimport lightingShader from './phong-lighting.glsl';\nconst INITIAL_MODULE_OPTIONS = {};\n\nfunction getMaterialUniforms(material) {\n const {\n ambient = 0.35,\n diffuse = 0.6,\n shininess = 32,\n specularColor = [30, 30, 30]\n } = material;\n return {\n lighting_uAmbient: ambient,\n lighting_uDiffuse: diffuse,\n lighting_uShininess: shininess,\n lighting_uSpecularColor: specularColor.map(x => x / 255)\n };\n}\n\nfunction getUniforms() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : INITIAL_MODULE_OPTIONS;\n\n if (!('material' in opts)) {\n return {};\n }\n\n const {\n material\n } = opts;\n\n if (!material) {\n return {\n lighting_uEnabled: false\n };\n }\n\n return getMaterialUniforms(material);\n}\n\nexport const gouraudLighting = {\n name: 'gouraud-lighting',\n dependencies: [lights],\n vs: lightingShader,\n defines: {\n LIGHTING_VERTEX: 1\n },\n getUniforms\n};\nexport const phongLighting = {\n name: 'phong-lighting',\n dependencies: [lights],\n fs: lightingShader,\n defines: {\n LIGHTING_FRAGMENT: 1\n },\n getUniforms\n};\n//# sourceMappingURL=phong-lighting.js.map","import Texture2D from '../classes/texture-2d';\nimport TextureCube from '../classes/texture-cube';\nimport Texture3D from '../classes/texture-3d';\nimport Framebuffer from '../classes/framebuffer';\nimport { assert } from '../utils/assert';\nexport function cloneTextureFrom(refTexture, overrides) {\n assert(refTexture instanceof Texture2D || refTexture instanceof TextureCube || refTexture instanceof Texture3D);\n const TextureType = refTexture.constructor;\n const {\n gl,\n width,\n height,\n format,\n type,\n dataFormat,\n border,\n mipmaps\n } = refTexture;\n const textureOptions = Object.assign({\n width,\n height,\n format,\n type,\n dataFormat,\n border,\n mipmaps\n }, overrides);\n return new TextureType(gl, textureOptions);\n}\nexport function toFramebuffer(texture, opts) {\n const {\n gl,\n width,\n height,\n id\n } = texture;\n const framebuffer = new Framebuffer(gl, Object.assign({}, opts, {\n id: \"framebuffer-for-\".concat(id),\n width,\n height,\n attachments: {\n [36064]: texture\n }\n }));\n return framebuffer;\n}\n//# sourceMappingURL=texture-utils.js.map","import { log, assertWebGLContext } from '@luma.gl/gltools';\nimport Texture from './texture';\nconst FACES = [34069, 34070, 34071, 34072, 34073, 34074];\nexport default class TextureCube extends Texture {\n get [Symbol.toStringTag]() {\n return 'TextureCube';\n }\n\n constructor(gl) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n assertWebGLContext(gl);\n super(gl, Object.assign({}, props, {\n target: 34067\n }));\n this.initialize(props);\n Object.seal(this);\n }\n\n initialize() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n mipmaps = true,\n parameters = {}\n } = props;\n this.opts = props;\n this.setCubeMapImageData(props).then(() => {\n this.loaded = true;\n\n if (mipmaps) {\n this.generateMipmap(props);\n }\n\n this.setParameters(parameters);\n });\n return this;\n }\n\n subImage(_ref) {\n let {\n face,\n data,\n x = 0,\n y = 0,\n mipmapLevel = 0\n } = _ref;\n return this._subImage({\n target: face,\n data,\n x,\n y,\n mipmapLevel\n });\n }\n\n async setCubeMapImageData(_ref2) {\n let {\n width,\n height,\n pixels,\n data,\n border = 0,\n format = 6408,\n type = 5121\n } = _ref2;\n const {\n gl\n } = this;\n const imageDataMap = pixels || data;\n const resolvedFaces = await Promise.all(FACES.map(face => {\n const facePixels = imageDataMap[face];\n return Promise.all(Array.isArray(facePixels) ? facePixels : [facePixels]);\n }));\n this.bind();\n FACES.forEach((face, index) => {\n if (resolvedFaces[index].length > 1 && this.opts.mipmaps !== false) {\n log.warn(\"\".concat(this.id, \" has mipmap and multiple LODs.\"))();\n }\n\n resolvedFaces[index].forEach((image, lodLevel) => {\n if (width && height) {\n gl.texImage2D(face, lodLevel, format, width, height, border, format, type, image);\n } else {\n gl.texImage2D(face, lodLevel, format, format, type, image);\n }\n });\n });\n this.unbind();\n }\n\n setImageDataForFace(options) {\n const {\n face,\n width,\n height,\n pixels,\n data,\n border = 0,\n format = 6408,\n type = 5121\n } = options;\n const {\n gl\n } = this;\n const imageData = pixels || data;\n this.bind();\n\n if (imageData instanceof Promise) {\n imageData.then(resolvedImageData => this.setImageDataForFace(Object.assign({}, options, {\n face,\n data: resolvedImageData,\n pixels: resolvedImageData\n })));\n } else if (this.width || this.height) {\n gl.texImage2D(face, 0, format, width, height, border, format, type, imageData);\n } else {\n gl.texImage2D(face, 0, format, format, type, imageData);\n }\n\n return this;\n }\n\n}\nTextureCube.FACES = FACES;\n//# sourceMappingURL=texture-cube.js.map","import { isWebGL2, assertWebGL2Context, withParameters } from '@luma.gl/gltools';\nimport Texture from './texture';\nimport { DATA_FORMAT_CHANNELS, TYPE_SIZES } from './texture-formats';\nimport Buffer from './buffer';\nexport default class Texture3D extends Texture {\n get [Symbol.toStringTag]() {\n return 'Texture3D';\n }\n\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n assertWebGL2Context(gl);\n props = Object.assign({\n depth: 1\n }, props, {\n target: 32879,\n unpackFlipY: false\n });\n super(gl, props);\n this.initialize(props);\n Object.seal(this);\n }\n\n setImageData(_ref) {\n let {\n level = 0,\n dataFormat = 6408,\n width,\n height,\n depth = 1,\n border = 0,\n format,\n type = 5121,\n offset = 0,\n data,\n parameters = {}\n } = _ref;\n\n this._trackDeallocatedMemory('Texture');\n\n this.gl.bindTexture(this.target, this.handle);\n withParameters(this.gl, parameters, () => {\n if (ArrayBuffer.isView(data)) {\n this.gl.texImage3D(this.target, level, dataFormat, width, height, depth, border, format, type, data);\n }\n\n if (data instanceof Buffer) {\n this.gl.bindBuffer(35052, data.handle);\n this.gl.texImage3D(this.target, level, dataFormat, width, height, depth, border, format, type, offset);\n }\n });\n\n if (data && data.byteLength) {\n this._trackAllocatedMemory(data.byteLength, 'Texture');\n } else {\n const channels = DATA_FORMAT_CHANNELS[this.dataFormat] || 4;\n const channelSize = TYPE_SIZES[this.type] || 1;\n\n this._trackAllocatedMemory(this.width * this.height * this.depth * channels * channelSize, 'Texture');\n }\n\n this.loaded = true;\n return this;\n }\n\n}\n//# sourceMappingURL=texture-3d.js.map","import isElectron from './is-electron';\nexport default function isBrowser() {\n const isNode = typeof process === 'object' && String(process) === '[object process]' && !process.browser;\n return !isNode || isElectron();\n}\nexport function isBrowserMainThread() {\n return isBrowser() && typeof document !== 'undefined';\n}\n//# sourceMappingURL=is-browser.js.map","export default function isElectron(mockUserAgent) {\n if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') {\n return true;\n }\n\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && Boolean(process.versions.electron)) {\n return true;\n }\n\n const realUserAgent = typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent;\n const userAgent = mockUserAgent || realUserAgent;\n\n if (userAgent && userAgent.indexOf('Electron') >= 0) {\n return true;\n }\n\n return false;\n}\n//# sourceMappingURL=is-electron.js.map","function _asyncIterator(iterable) {\n var method;\n\n if (typeof Symbol !== \"undefined\") {\n if (Symbol.asyncIterator) {\n method = iterable[Symbol.asyncIterator];\n if (method != null) return method.call(iterable);\n }\n\n if (Symbol.iterator) {\n method = iterable[Symbol.iterator];\n if (method != null) return method.call(iterable);\n }\n }\n\n throw new TypeError(\"Object is not async iterable\");\n}\n\nmodule.exports = _asyncIterator;","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport PropTypes from 'prop-types';\nimport { document } from '../utils/globals';\n\nfunction noop() {}\n\nfunction defaultOnError(event) {\n if (event) {\n console.error(event.error);\n }\n}\n\nvar propTypes = {\n container: PropTypes.object,\n gl: PropTypes.object,\n mapboxApiAccessToken: PropTypes.string,\n mapboxApiUrl: PropTypes.string,\n attributionControl: PropTypes.bool,\n preserveDrawingBuffer: PropTypes.bool,\n reuseMaps: PropTypes.bool,\n transformRequest: PropTypes.func,\n mapOptions: PropTypes.object,\n mapStyle: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n visible: PropTypes.bool,\n asyncRender: PropTypes.bool,\n onLoad: PropTypes.func,\n onError: PropTypes.func,\n width: PropTypes.number,\n height: PropTypes.number,\n viewState: PropTypes.object,\n longitude: PropTypes.number,\n latitude: PropTypes.number,\n zoom: PropTypes.number,\n bearing: PropTypes.number,\n pitch: PropTypes.number,\n altitude: PropTypes.number\n};\nvar defaultProps = {\n container: document.body,\n mapboxApiAccessToken: getAccessToken(),\n mapboxApiUrl: 'https://api.mapbox.com',\n preserveDrawingBuffer: false,\n attributionControl: true,\n reuseMaps: false,\n mapOptions: {},\n mapStyle: 'mapbox://styles/mapbox/light-v8',\n visible: true,\n asyncRender: false,\n onLoad: noop,\n onError: defaultOnError,\n width: 0,\n height: 0,\n longitude: 0,\n latitude: 0,\n zoom: 0,\n bearing: 0,\n pitch: 0,\n altitude: 1.5\n};\nexport function getAccessToken() {\n var accessToken = null;\n\n if (typeof window !== 'undefined' && window.location) {\n var match = window.location.search.match(/access_token=([^&\\/]*)/);\n accessToken = match && match[1];\n }\n\n if (!accessToken && typeof process !== 'undefined') {\n accessToken = accessToken || process.env.MapboxAccessToken || process.env.REACT_APP_MAPBOX_ACCESS_TOKEN;\n }\n\n return accessToken || 'no-token';\n}\n\nfunction checkPropTypes(props) {\n var component = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'component';\n\n if (props.debug) {\n PropTypes.checkPropTypes(propTypes, props, 'prop', component);\n }\n}\n\nvar Mapbox = function () {\n function Mapbox(props) {\n var _this = this;\n\n _classCallCheck(this, Mapbox);\n\n _defineProperty(this, \"mapboxgl\", void 0);\n\n _defineProperty(this, \"props\", defaultProps);\n\n _defineProperty(this, \"_map\", null);\n\n _defineProperty(this, \"width\", 0);\n\n _defineProperty(this, \"height\", 0);\n\n _defineProperty(this, \"_fireLoadEvent\", function () {\n _this.props.onLoad({\n type: 'load',\n target: _this._map\n });\n });\n\n if (!props.mapboxgl) {\n throw new Error('Mapbox not available');\n }\n\n this.mapboxgl = props.mapboxgl;\n\n if (!Mapbox.initialized) {\n Mapbox.initialized = true;\n\n this._checkStyleSheet(this.mapboxgl.version);\n }\n\n this._initialize(props);\n }\n\n _createClass(Mapbox, [{\n key: \"finalize\",\n value: function finalize() {\n this._destroy();\n\n return this;\n }\n }, {\n key: \"setProps\",\n value: function setProps(props) {\n this._update(this.props, props);\n\n return this;\n }\n }, {\n key: \"resize\",\n value: function resize() {\n this._map.resize();\n\n return this;\n }\n }, {\n key: \"redraw\",\n value: function redraw() {\n var map = this._map;\n\n if (map.style) {\n if (map._frame) {\n map._frame.cancel();\n\n map._frame = null;\n }\n\n map._render();\n }\n }\n }, {\n key: \"getMap\",\n value: function getMap() {\n return this._map;\n }\n }, {\n key: \"_reuse\",\n value: function _reuse(props) {\n this._map = Mapbox.savedMap;\n\n var oldContainer = this._map.getContainer();\n\n var newContainer = props.container;\n newContainer.classList.add('mapboxgl-map');\n\n while (oldContainer.childNodes.length > 0) {\n newContainer.appendChild(oldContainer.childNodes[0]);\n }\n\n this._map._container = newContainer;\n Mapbox.savedMap = null;\n\n if (props.mapStyle) {\n this._map.setStyle(props.mapStyle, {\n diff: false\n });\n }\n\n if (this._map.isStyleLoaded()) {\n this._fireLoadEvent();\n } else {\n this._map.once('styledata', this._fireLoadEvent);\n }\n }\n }, {\n key: \"_create\",\n value: function _create(props) {\n if (props.reuseMaps && Mapbox.savedMap) {\n this._reuse(props);\n } else {\n if (props.gl) {\n var getContext = HTMLCanvasElement.prototype.getContext;\n\n HTMLCanvasElement.prototype.getContext = function () {\n HTMLCanvasElement.prototype.getContext = getContext;\n return props.gl;\n };\n }\n\n var mapOptions = {\n container: props.container,\n center: [0, 0],\n zoom: 8,\n pitch: 0,\n bearing: 0,\n maxZoom: 24,\n style: props.mapStyle,\n interactive: false,\n trackResize: false,\n attributionControl: props.attributionControl,\n preserveDrawingBuffer: props.preserveDrawingBuffer\n };\n\n if (props.transformRequest) {\n mapOptions.transformRequest = props.transformRequest;\n }\n\n this._map = new this.mapboxgl.Map(Object.assign({}, mapOptions, props.mapOptions));\n\n this._map.once('load', props.onLoad);\n\n this._map.on('error', props.onError);\n }\n\n return this;\n }\n }, {\n key: \"_destroy\",\n value: function _destroy() {\n if (!this._map) {\n return;\n }\n\n if (!Mapbox.savedMap) {\n Mapbox.savedMap = this._map;\n\n this._map.off('load', this.props.onLoad);\n\n this._map.off('error', this.props.onError);\n\n this._map.off('styledata', this._fireLoadEvent);\n } else {\n this._map.remove();\n }\n\n this._map = null;\n }\n }, {\n key: \"_initialize\",\n value: function _initialize(props) {\n var _this2 = this;\n\n props = Object.assign({}, defaultProps, props);\n checkPropTypes(props, 'Mapbox');\n this.mapboxgl.accessToken = props.mapboxApiAccessToken || defaultProps.mapboxApiAccessToken;\n this.mapboxgl.baseApiUrl = props.mapboxApiUrl;\n\n this._create(props);\n\n var _props = props,\n container = _props.container;\n Object.defineProperty(container, 'offsetWidth', {\n get: function get() {\n return _this2.width;\n }\n });\n Object.defineProperty(container, 'clientWidth', {\n get: function get() {\n return _this2.width;\n }\n });\n Object.defineProperty(container, 'offsetHeight', {\n get: function get() {\n return _this2.height;\n }\n });\n Object.defineProperty(container, 'clientHeight', {\n get: function get() {\n return _this2.height;\n }\n });\n\n var canvas = this._map.getCanvas();\n\n if (canvas) {\n canvas.style.outline = 'none';\n }\n\n this._updateMapViewport({}, props);\n\n this._updateMapSize({}, props);\n\n this.props = props;\n }\n }, {\n key: \"_update\",\n value: function _update(oldProps, newProps) {\n if (!this._map) {\n return;\n }\n\n newProps = Object.assign({}, this.props, newProps);\n checkPropTypes(newProps, 'Mapbox');\n\n var viewportChanged = this._updateMapViewport(oldProps, newProps);\n\n var sizeChanged = this._updateMapSize(oldProps, newProps);\n\n if (!newProps.asyncRender && (viewportChanged || sizeChanged)) {\n this.redraw();\n }\n\n this.props = newProps;\n }\n }, {\n key: \"_updateMapSize\",\n value: function _updateMapSize(oldProps, newProps) {\n var sizeChanged = oldProps.width !== newProps.width || oldProps.height !== newProps.height;\n\n if (sizeChanged) {\n this.width = newProps.width;\n this.height = newProps.height;\n this.resize();\n }\n\n return sizeChanged;\n }\n }, {\n key: \"_updateMapViewport\",\n value: function _updateMapViewport(oldProps, newProps) {\n var oldViewState = this._getViewState(oldProps);\n\n var newViewState = this._getViewState(newProps);\n\n var viewportChanged = newViewState.latitude !== oldViewState.latitude || newViewState.longitude !== oldViewState.longitude || newViewState.zoom !== oldViewState.zoom || newViewState.pitch !== oldViewState.pitch || newViewState.bearing !== oldViewState.bearing || newViewState.altitude !== oldViewState.altitude;\n\n if (viewportChanged) {\n this._map.jumpTo(this._viewStateToMapboxProps(newViewState));\n\n if (newViewState.altitude !== oldViewState.altitude) {\n this._map.transform.altitude = newViewState.altitude;\n }\n }\n\n return viewportChanged;\n }\n }, {\n key: \"_getViewState\",\n value: function _getViewState(props) {\n var _ref = props.viewState || props,\n longitude = _ref.longitude,\n latitude = _ref.latitude,\n zoom = _ref.zoom,\n _ref$pitch = _ref.pitch,\n pitch = _ref$pitch === void 0 ? 0 : _ref$pitch,\n _ref$bearing = _ref.bearing,\n bearing = _ref$bearing === void 0 ? 0 : _ref$bearing,\n _ref$altitude = _ref.altitude,\n altitude = _ref$altitude === void 0 ? 1.5 : _ref$altitude;\n\n return {\n longitude: longitude,\n latitude: latitude,\n zoom: zoom,\n pitch: pitch,\n bearing: bearing,\n altitude: altitude\n };\n }\n }, {\n key: \"_checkStyleSheet\",\n value: function _checkStyleSheet() {\n var mapboxVersion = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '0.47.0';\n\n if (typeof document === 'undefined') {\n return;\n }\n\n try {\n var testElement = document.createElement('div');\n testElement.className = 'mapboxgl-map';\n testElement.style.display = 'none';\n document.body.append(testElement);\n var isCssLoaded = window.getComputedStyle(testElement).position !== 'static';\n\n if (!isCssLoaded) {\n var link = document.createElement('link');\n link.setAttribute('rel', 'stylesheet');\n link.setAttribute('type', 'text/css');\n link.setAttribute('href', \"https://api.tiles.mapbox.com/mapbox-gl-js/v\".concat(mapboxVersion, \"/mapbox-gl.css\"));\n document.head.append(link);\n }\n } catch (error) {}\n }\n }, {\n key: \"_viewStateToMapboxProps\",\n value: function _viewStateToMapboxProps(viewState) {\n return {\n center: [viewState.longitude, viewState.latitude],\n zoom: viewState.zoom,\n bearing: viewState.bearing,\n pitch: viewState.pitch\n };\n }\n }]);\n\n return Mapbox;\n}();\n\n_defineProperty(Mapbox, \"initialized\", false);\n\n_defineProperty(Mapbox, \"propTypes\", propTypes);\n\n_defineProperty(Mapbox, \"defaultProps\", defaultProps);\n\n_defineProperty(Mapbox, \"savedMap\", null);\n\nexport { Mapbox as default };\n//# sourceMappingURL=mapbox.js.map","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim | 0);\n triangles.push(ear.i / dim | 0);\n triangles.push(next.i / dim | 0);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n var p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim | 0);\n triangles.push(p.i / dim | 0);\n triangles.push(b.i / dim | 0);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = 0;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","const t=new Uint8Array([0]),e=[171,75,84,88,32,50,48,187,13,10,26,10];var n,i,s,a,r,o,l,f;!function(t){t[t.NONE=0]=\"NONE\",t[t.BASISLZ=1]=\"BASISLZ\",t[t.ZSTD=2]=\"ZSTD\",t[t.ZLIB=3]=\"ZLIB\"}(n||(n={})),function(t){t[t.BASICFORMAT=0]=\"BASICFORMAT\"}(i||(i={})),function(t){t[t.UNSPECIFIED=0]=\"UNSPECIFIED\",t[t.ETC1S=163]=\"ETC1S\",t[t.UASTC=166]=\"UASTC\"}(s||(s={})),function(t){t[t.UNSPECIFIED=0]=\"UNSPECIFIED\",t[t.SRGB=1]=\"SRGB\"}(a||(a={})),function(t){t[t.UNSPECIFIED=0]=\"UNSPECIFIED\",t[t.LINEAR=1]=\"LINEAR\",t[t.SRGB=2]=\"SRGB\",t[t.ITU=3]=\"ITU\",t[t.NTSC=4]=\"NTSC\",t[t.SLOG=5]=\"SLOG\",t[t.SLOG2=6]=\"SLOG2\"}(r||(r={})),function(t){t[t.ALPHA_STRAIGHT=0]=\"ALPHA_STRAIGHT\",t[t.ALPHA_PREMULTIPLIED=1]=\"ALPHA_PREMULTIPLIED\"}(o||(o={})),function(t){t[t.RGB=0]=\"RGB\",t[t.RRR=3]=\"RRR\",t[t.GGG=4]=\"GGG\",t[t.AAA=15]=\"AAA\"}(l||(l={})),function(t){t[t.RGB=0]=\"RGB\",t[t.RGBA=3]=\"RGBA\",t[t.RRR=4]=\"RRR\",t[t.RRRG=5]=\"RRRG\"}(f||(f={}));class U{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=n.NONE,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:i.BASICFORMAT,versionNumber:2,descriptorBlockSize:40,colorModel:s.UNSPECIFIED,colorPrimaries:a.SRGB,transferFunction:a.SRGB,flags:o.ALPHA_STRAIGHT,texelBlockDimension:{x:4,y:4,z:1,w:1},bytesPlane:[],samples:[]}],this.keyValue={},this.globalData=null}}class c{constructor(t,e,n,i){this._dataView=new DataView(t.buffer,t.byteOffset+e,n),this._littleEndian=i,this._offset=0}_nextUint8(){const t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){const t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){const t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){const t=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,t}_skip(t){return this._offset+=t,this}_scan(t,e=0){const n=this._offset;let i=0;for(;this._dataView.getUint8(this._offset)!==e&&i 2 && arguments[2] !== undefined ? arguments[2] : null;\n const parameters = gltfTexture.texture && gltfTexture.texture.sampler && gltfTexture.texture.sampler.parameters || {};\n const image = gltfTexture.texture.source.image;\n let textureOptions;\n let specialTextureParameters = {};\n\n if (image.compressed) {\n textureOptions = image;\n specialTextureParameters = {\n [this.gl.TEXTURE_MIN_FILTER]: image.data.length > 1 ? this.gl.LINEAR_MIPMAP_NEAREST : this.gl.LINEAR\n };\n } else {\n textureOptions = {\n data: image\n };\n }\n\n const texture = new Texture2D(this.gl, {\n id: gltfTexture.name || gltfTexture.id,\n parameters: { ...parameters,\n ...specialTextureParameters\n },\n pixelStore: {\n [this.gl.UNPACK_FLIP_Y_WEBGL]: false\n },\n ...textureOptions\n });\n this.uniforms[name] = texture;\n this.defineIfPresent(define, define);\n this.generatedTextures.push(texture);\n }\n\n parsePbrMetallicRoughness(pbrMetallicRoughness) {\n if (pbrMetallicRoughness.baseColorTexture) {\n this.parseTexture(pbrMetallicRoughness.baseColorTexture, 'u_BaseColorSampler', 'HAS_BASECOLORMAP');\n }\n\n this.uniforms.u_BaseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];\n\n if (pbrMetallicRoughness.metallicRoughnessTexture) {\n this.parseTexture(pbrMetallicRoughness.metallicRoughnessTexture, 'u_MetallicRoughnessSampler', 'HAS_METALROUGHNESSMAP');\n }\n\n const {\n metallicFactor = 1,\n roughnessFactor = 1\n } = pbrMetallicRoughness;\n this.uniforms.u_MetallicRoughnessValues = [metallicFactor, roughnessFactor];\n }\n\n parseMaterial(material) {\n this.uniforms.pbr_uUnlit = Boolean(material.unlit);\n\n if (material.pbrMetallicRoughness) {\n this.parsePbrMetallicRoughness(material.pbrMetallicRoughness);\n }\n\n if (material.normalTexture) {\n this.parseTexture(material.normalTexture, 'u_NormalSampler', 'HAS_NORMALMAP');\n const {\n scale = 1\n } = material.normalTexture;\n this.uniforms.u_NormalScale = scale;\n }\n\n if (material.occlusionTexture) {\n this.parseTexture(material.occlusionTexture, 'u_OcclusionSampler', 'HAS_OCCLUSIONMAP');\n const {\n strength = 1\n } = material.occlusionTexture;\n this.uniforms.u_OcclusionStrength = strength;\n }\n\n if (material.emissiveTexture) {\n this.parseTexture(material.emissiveTexture, 'u_EmissiveSampler', 'HAS_EMISSIVEMAP');\n this.uniforms.u_EmissiveFactor = material.emissiveFactor || [0, 0, 0];\n }\n\n if (material.alphaMode === 'MASK') {\n const {\n alphaCutoff = 0.5\n } = material;\n this.defines.ALPHA_CUTOFF = 1;\n this.uniforms.u_AlphaCutoff = alphaCutoff;\n } else if (material.alphaMode === 'BLEND') {\n log.warn('BLEND alphaMode might not work well because it requires mesh sorting')();\n Object.assign(this.parameters, {\n blend: true,\n blendEquation: this.gl.FUNC_ADD,\n blendFunc: [this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA, this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA]\n });\n }\n }\n\n delete() {\n this.generatedTextures.forEach(texture => texture.delete());\n }\n\n}\n//# sourceMappingURL=gltf-material-parser.js.map","import WEBGL_FEATURES from './webgl-features-table';\nimport { isWebGL2, log } from '@luma.gl/gltools';\nimport { assert } from '../utils/assert';\nconst LOG_UNSUPPORTED_FEATURE = 2;\nexport function hasFeature(gl, feature) {\n return hasFeatures(gl, feature);\n}\nexport function hasFeatures(gl, features) {\n features = Array.isArray(features) ? features : [features];\n return features.every(feature => {\n return isFeatureSupported(gl, feature);\n });\n}\nexport function getFeatures(gl) {\n gl.luma = gl.luma || {};\n gl.luma.caps = gl.luma.caps || {};\n\n for (const cap in WEBGL_FEATURES) {\n if (gl.luma.caps[cap] === undefined) {\n gl.luma.caps[cap] = isFeatureSupported(gl, cap);\n }\n }\n\n return gl.luma.caps;\n}\n\nfunction isFeatureSupported(gl, cap) {\n gl.luma = gl.luma || {};\n gl.luma.caps = gl.luma.caps || {};\n\n if (gl.luma.caps[cap] === undefined) {\n gl.luma.caps[cap] = queryFeature(gl, cap);\n }\n\n if (!gl.luma.caps[cap]) {\n log.log(LOG_UNSUPPORTED_FEATURE, \"Feature: \".concat(cap, \" not supported\"))();\n }\n\n return gl.luma.caps[cap];\n}\n\nfunction queryFeature(gl, cap) {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n let isSupported;\n const featureDefinition = isWebGL2(gl) ? feature[1] || feature[0] : feature[0];\n\n if (typeof featureDefinition === 'function') {\n isSupported = featureDefinition(gl);\n } else if (Array.isArray(featureDefinition)) {\n isSupported = true;\n\n for (const extension of featureDefinition) {\n isSupported = isSupported && Boolean(gl.getExtension(extension));\n }\n } else if (typeof featureDefinition === 'string') {\n isSupported = Boolean(gl.getExtension(featureDefinition));\n } else if (typeof featureDefinition === 'boolean') {\n isSupported = featureDefinition;\n } else {\n assert(false);\n }\n\n return isSupported;\n}\n//# sourceMappingURL=features.js.map","/* global window, document */\n\n// See https://github.com/jupyter-widgets/widget-ts-cookiecutter/blob/master/%7B%7Bcookiecutter.github_project_name%7D%7D/src/extension.ts\n// Entry point for the Jupyter Notebook bundle containing custom Backbone model and view definitions.\n\n// Some static assets may be required by the custom widget javascript. The base\n// url for the notebook is not known at build time and is therefore computed dynamically.\nconst dataBaseUrl = document.body && document.body.getAttribute('data-base-url');\nif (dataBaseUrl) {\n window.__webpack_public_path__ = `${dataBaseUrl}nbextensions/pydeck/nb_extension`;\n}\n\n// Initialize the transport\nconst {jupyterTransport} = require('./lib/jupyter-transport').default;\n\nlet JupyterTransportModel = null;\nlet JupyterTransportView = null;\ntry {\n JupyterTransportModel = require('./lib/jupyter-transport-model').default;\n JupyterTransportView = require('./lib/jupyter-transport-view').default;\n} catch (err) {\n // Note: Happens in the to_html() case\n}\n\nconst {MODULE_VERSION, MODULE_NAME} = require('./version');\n\n// TODO - this should be placed in a separate module `@deck.gl/playground`\nconst {createDeck, updateDeck} = require('./playground/create-deck');\nconst {initPlayground} = require('./playground');\ninitPlayground();\n\nmodule.exports = {\n // Transports\n jupyterTransport,\n\n // Jupyter Hooks\n MODULE_VERSION,\n MODULE_NAME,\n JupyterTransportModel,\n JupyterTransportView,\n\n // For to_html()...\n initPlayground,\n // TODO - use playground?\n createDeck,\n updateDeck\n};\n","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var getPrototypeOf = require(\"./getPrototypeOf\");\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nmodule.exports = _superPropBase;","import {DOMWidgetView} from '@jupyter-widgets/base';\nimport JupyterTransport from './jupyter-transport';\n\nexport default class JupyterTransportView extends DOMWidgetView {\n initialize() {\n this.listenTo(this.model, 'destroy', this.remove);\n\n // TODO - is there any variable information on the model we can use to\n // give an interesting name or id to this instance?\n this.transport = new JupyterTransport();\n\n // Expose Jupyter internals to enable work-arounds\n this.transport.jupyterModel = this.model;\n this.transport.jupyterView = this;\n this.transport._initialize();\n super.initialize.apply(this, arguments);\n }\n\n remove() {\n if (this.transport) {\n this.transport._finalize();\n this.transport.jupyterModel = null;\n this.transport.jupyterView = null;\n this.transport = null;\n }\n }\n\n render() {\n super.render();\n\n this.model.on('change:json_input', this.onJsonChanged.bind(this));\n this.model.on('change:data_buffer', this.onDataBufferChanged.bind(this));\n\n this.onDataBufferChanged();\n }\n\n onJsonChanged() {\n const json = JSON.parse(this.model.get('json_input'));\n this.transport._messageReceived({type: 'json', json});\n }\n\n onDataBufferChanged() {\n const json = this.model.get('json_input');\n const dataBuffer = this.model.get('data_buffer');\n\n if (json && dataBuffer) {\n this.transport._messageReceived({\n type: 'json-with-binary',\n json,\n binary: dataBuffer\n });\n } else {\n this.transport._messageReceived({type: 'json', json});\n }\n }\n}\n","// We use `require` here because luma and deck core must be imported before `global`\nconst LumaGL = require('./lumagl');\nconst deckGLCore = require('../src');\n\nconst DeckGL = require('./deckgl').default;\nconst {registerLoaders, load, parse, fetchFile} = require('@loaders.gl/core');\n\n/* global window, global */\nconst _global = typeof window === 'undefined' ? global : window;\n_global.deck = _global.deck || {};\n_global.luma = _global.luma || {};\n_global.loaders = _global.loaders || {};\n\nObject.assign(_global.deck, deckGLCore, {DeckGL});\nObject.assign(_global.luma, LumaGL);\nObject.assign(_global.loaders, {registerLoaders, load, parse, fetchFile});\n\nmodule.exports = _global.deck;\n","function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nmodule.exports = _arrayWithoutHoles;","function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nmodule.exports = _nonIterableSpread;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nmodule.exports = _nonIterableRest;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","/* global window, document */\n/* eslint-disable max-statements */\nimport Mapbox from 'react-map-gl/dist/esm/mapbox/mapbox';\n\nimport {Deck} from '../src';\n\nconst CANVAS_STYLE = {\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%'\n};\n\n// Create canvas elements for map and deck\nfunction createCanvas(props) {\n let {container = document.body} = props;\n\n if (typeof container === 'string') {\n container = document.getElementById(container);\n }\n\n if (!container) {\n throw Error('Deck: container not found');\n }\n\n // Add DOM elements\n const containerStyle = window.getComputedStyle(container);\n if (containerStyle.position === 'static') {\n container.style.position = 'relative';\n }\n\n const mapCanvas = document.createElement('div');\n container.appendChild(mapCanvas);\n Object.assign(mapCanvas.style, CANVAS_STYLE);\n\n const deckCanvas = document.createElement('canvas');\n container.appendChild(deckCanvas);\n Object.assign(deckCanvas.style, CANVAS_STYLE);\n\n return {container, mapCanvas, deckCanvas};\n}\n\n/**\n * @params container (Element) - DOM element to add deck.gl canvas to\n * @params map (Object) - map API. Set to falsy to disable\n */\nexport default class DeckGL extends Deck {\n constructor(props = {}) {\n if (typeof document === 'undefined') {\n // Not browser\n throw Error('Deck can only be used in the browser');\n }\n\n const {mapCanvas, deckCanvas} = createCanvas(props);\n\n const viewState = props.viewState || props.initialViewState;\n const isMap = Number.isFinite(viewState && viewState.latitude);\n const {map = window.mapboxgl} = props;\n\n super({canvas: deckCanvas, ...props});\n\n if (map && map.Map) {\n // Default create mapbox map\n this._map =\n isMap &&\n new Mapbox({\n ...props,\n viewState,\n container: mapCanvas,\n mapboxgl: map\n });\n } else {\n this._map = map;\n }\n\n // Update base map\n this._onBeforeRender = params => {\n this.onBeforeRender(params);\n if (this._map) {\n const viewport = this.getViewports()[0];\n this._map.setProps({\n width: viewport.width,\n height: viewport.height,\n viewState: viewport\n });\n }\n };\n }\n\n getMapboxMap() {\n return this._map && this._map.getMap();\n }\n\n finalize() {\n if (this._map) {\n this._map.finalize();\n }\n\n super.finalize();\n }\n\n setProps(props) {\n // Replace user callback with our own\n // `setProps` is first called in parent class constructor\n // During which this._onBeforeRender is not defined\n // It is called a second time in _onRendererInitialized with all current props\n if (\n 'onBeforeRender' in props &&\n this._onBeforeRender &&\n props.onBeforeRender !== this._onBeforeRender\n ) {\n this.onBeforeRender = props.onBeforeRender;\n props.onBeforeRender = this._onBeforeRender;\n }\n if ('mapStyle' in props && this._map) {\n this._map._map.setStyle(props.mapStyle);\n }\n\n super.setProps(props);\n }\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","// JavaScript Expression Parser (JSEP) 0.3.4\r\n// JSEP may be freely distributed under the MIT License\r\n// http://jsep.from.so/\r\n\r\n/*global module: true, exports: true, console: true */\r\n(function (root) {\r\n\t'use strict';\r\n\t// Node Types\r\n\t// ----------\r\n\r\n\t// This is the full set of types that any JSEP node can be.\r\n\t// Store them here to save space when minified\r\n\tvar COMPOUND = 'Compound',\r\n\t\tIDENTIFIER = 'Identifier',\r\n\t\tMEMBER_EXP = 'MemberExpression',\r\n\t\tLITERAL = 'Literal',\r\n\t\tTHIS_EXP = 'ThisExpression',\r\n\t\tCALL_EXP = 'CallExpression',\r\n\t\tUNARY_EXP = 'UnaryExpression',\r\n\t\tBINARY_EXP = 'BinaryExpression',\r\n\t\tLOGICAL_EXP = 'LogicalExpression',\r\n\t\tCONDITIONAL_EXP = 'ConditionalExpression',\r\n\t\tARRAY_EXP = 'ArrayExpression',\r\n\r\n\t\tPERIOD_CODE = 46, // '.'\r\n\t\tCOMMA_CODE = 44, // ','\r\n\t\tSQUOTE_CODE = 39, // single quote\r\n\t\tDQUOTE_CODE = 34, // double quotes\r\n\t\tOPAREN_CODE = 40, // (\r\n\t\tCPAREN_CODE = 41, // )\r\n\t\tOBRACK_CODE = 91, // [\r\n\t\tCBRACK_CODE = 93, // ]\r\n\t\tQUMARK_CODE = 63, // ?\r\n\t\tSEMCOL_CODE = 59, // ;\r\n\t\tCOLON_CODE = 58, // :\r\n\r\n\t\tthrowError = function(message, index) {\r\n\t\t\tvar error = new Error(message + ' at character ' + index);\r\n\t\t\terror.index = index;\r\n\t\t\terror.description = message;\r\n\t\t\tthrow error;\r\n\t\t},\r\n\r\n\t// Operations\r\n\t// ----------\r\n\r\n\t// Set `t` to `true` to save space (when minified, not gzipped)\r\n\t\tt = true,\r\n\t// Use a quickly-accessible map to store all of the unary operators\r\n\t// Values are set to `true` (it really doesn't matter)\r\n\t\tunary_ops = {'-': t, '!': t, '~': t, '+': t},\r\n\t// Also use a map for the binary operations but set their values to their\r\n\t// binary precedence for quick reference:\r\n\t// see [Order of operations](http://en.wikipedia.org/wiki/Order_of_operations#Programming_language)\r\n\t\tbinary_ops = {\r\n\t\t\t'||': 1, '&&': 2, '|': 3, '^': 4, '&': 5,\r\n\t\t\t'==': 6, '!=': 6, '===': 6, '!==': 6,\r\n\t\t\t'<': 7, '>': 7, '<=': 7, '>=': 7,\r\n\t\t\t'<<':8, '>>': 8, '>>>': 8,\r\n\t\t\t'+': 9, '-': 9,\r\n\t\t\t'*': 10, '/': 10, '%': 10\r\n\t\t},\r\n\t// Get return the longest key length of any object\r\n\t\tgetMaxKeyLen = function(obj) {\r\n\t\t\tvar max_len = 0, len;\r\n\t\t\tfor(var key in obj) {\r\n\t\t\t\tif((len = key.length) > max_len && obj.hasOwnProperty(key)) {\r\n\t\t\t\t\tmax_len = len;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn max_len;\r\n\t\t},\r\n\t\tmax_unop_len = getMaxKeyLen(unary_ops),\r\n\t\tmax_binop_len = getMaxKeyLen(binary_ops),\r\n\t// Literals\r\n\t// ----------\r\n\t// Store the values to return for the various literals we may encounter\r\n\t\tliterals = {\r\n\t\t\t'true': true,\r\n\t\t\t'false': false,\r\n\t\t\t'null': null\r\n\t\t},\r\n\t// Except for `this`, which is special. This could be changed to something like `'self'` as well\r\n\t\tthis_str = 'this',\r\n\t// Returns the precedence of a binary operator or `0` if it isn't a binary operator\r\n\t\tbinaryPrecedence = function(op_val) {\r\n\t\t\treturn binary_ops[op_val] || 0;\r\n\t\t},\r\n\t// Utility function (gets called from multiple places)\r\n\t// Also note that `a && b` and `a || b` are *logical* expressions, not binary expressions\r\n\t\tcreateBinaryExpression = function (operator, left, right) {\r\n\t\t\tvar type = (operator === '||' || operator === '&&') ? LOGICAL_EXP : BINARY_EXP;\r\n\t\t\treturn {\r\n\t\t\t\ttype: type,\r\n\t\t\t\toperator: operator,\r\n\t\t\t\tleft: left,\r\n\t\t\t\tright: right\r\n\t\t\t};\r\n\t\t},\r\n\t\t// `ch` is a character code in the next three functions\r\n\t\tisDecimalDigit = function(ch) {\r\n\t\t\treturn (ch >= 48 && ch <= 57); // 0...9\r\n\t\t},\r\n\t\tisIdentifierStart = function(ch) {\r\n\t\t\treturn (ch === 36) || (ch === 95) || // `$` and `_`\r\n\t\t\t\t\t(ch >= 65 && ch <= 90) || // A...Z\r\n\t\t\t\t\t(ch >= 97 && ch <= 122) || // a...z\r\n (ch >= 128 && !binary_ops[String.fromCharCode(ch)]); // any non-ASCII that is not an operator\r\n\t\t},\r\n\t\tisIdentifierPart = function(ch) {\r\n\t\t\treturn (ch === 36) || (ch === 95) || // `$` and `_`\r\n\t\t\t\t\t(ch >= 65 && ch <= 90) || // A...Z\r\n\t\t\t\t\t(ch >= 97 && ch <= 122) || // a...z\r\n\t\t\t\t\t(ch >= 48 && ch <= 57) || // 0...9\r\n (ch >= 128 && !binary_ops[String.fromCharCode(ch)]); // any non-ASCII that is not an operator\r\n\t\t},\r\n\r\n\t\t// Parsing\r\n\t\t// -------\r\n\t\t// `expr` is a string with the passed in expression\r\n\t\tjsep = function(expr) {\r\n\t\t\t// `index` stores the character number we are currently at while `length` is a constant\r\n\t\t\t// All of the gobbles below will modify `index` as we move along\r\n\t\t\tvar index = 0,\r\n\t\t\t\tcharAtFunc = expr.charAt,\r\n\t\t\t\tcharCodeAtFunc = expr.charCodeAt,\r\n\t\t\t\texprI = function(i) { return charAtFunc.call(expr, i); },\r\n\t\t\t\texprICode = function(i) { return charCodeAtFunc.call(expr, i); },\r\n\t\t\t\tlength = expr.length,\r\n\r\n\t\t\t\t// Push `index` up to the next non-space character\r\n\t\t\t\tgobbleSpaces = function() {\r\n\t\t\t\t\tvar ch = exprICode(index);\r\n\t\t\t\t\t// space or tab\r\n\t\t\t\t\twhile(ch === 32 || ch === 9 || ch === 10 || ch === 13) {\r\n\t\t\t\t\t\tch = exprICode(++index);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// The main parsing function. Much of this code is dedicated to ternary expressions\r\n\t\t\t\tgobbleExpression = function() {\r\n\t\t\t\t\tvar test = gobbleBinaryExpression(),\r\n\t\t\t\t\t\tconsequent, alternate;\r\n\t\t\t\t\tgobbleSpaces();\r\n\t\t\t\t\tif(exprICode(index) === QUMARK_CODE) {\r\n\t\t\t\t\t\t// Ternary expression: test ? consequent : alternate\r\n\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\tconsequent = gobbleExpression();\r\n\t\t\t\t\t\tif(!consequent) {\r\n\t\t\t\t\t\t\tthrowError('Expected expression', index);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgobbleSpaces();\r\n\t\t\t\t\t\tif(exprICode(index) === COLON_CODE) {\r\n\t\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\t\talternate = gobbleExpression();\r\n\t\t\t\t\t\t\tif(!alternate) {\r\n\t\t\t\t\t\t\t\tthrowError('Expected expression', index);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\ttype: CONDITIONAL_EXP,\r\n\t\t\t\t\t\t\t\ttest: test,\r\n\t\t\t\t\t\t\t\tconsequent: consequent,\r\n\t\t\t\t\t\t\t\talternate: alternate\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthrowError('Expected :', index);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn test;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Search for the operation portion of the string (e.g. `+`, `===`)\r\n\t\t\t\t// Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)\r\n\t\t\t\t// and move down from 3 to 2 to 1 character until a matching binary operation is found\r\n\t\t\t\t// then, return that binary operation\r\n\t\t\t\tgobbleBinaryOp = function() {\r\n\t\t\t\t\tgobbleSpaces();\r\n\t\t\t\t\tvar biop, to_check = expr.substr(index, max_binop_len), tc_len = to_check.length;\r\n\t\t\t\t\twhile(tc_len > 0) {\r\n\t\t\t\t\t\t// Don't accept a binary op when it is an identifier.\r\n\t\t\t\t\t\t// Binary ops that start with a identifier-valid character must be followed\r\n\t\t\t\t\t\t// by a non identifier-part valid character\r\n\t\t\t\t\t\tif(binary_ops.hasOwnProperty(to_check) && (\r\n\t\t\t\t\t\t\t!isIdentifierStart(exprICode(index)) ||\r\n\t\t\t\t\t\t\t(index+to_check.length< expr.length && !isIdentifierPart(exprICode(index+to_check.length)))\r\n\t\t\t\t\t\t)) {\r\n\t\t\t\t\t\t\tindex += tc_len;\r\n\t\t\t\t\t\t\treturn to_check;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tto_check = to_check.substr(0, --tc_len);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// This function is responsible for gobbling an individual expression,\r\n\t\t\t\t// e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`\r\n\t\t\t\tgobbleBinaryExpression = function() {\r\n\t\t\t\t\tvar ch_i, node, biop, prec, stack, biop_info, left, right, i;\r\n\r\n\t\t\t\t\t// First, try to get the leftmost thing\r\n\t\t\t\t\t// Then, check to see if there's a binary operator operating on that leftmost thing\r\n\t\t\t\t\tleft = gobbleToken();\r\n\t\t\t\t\tbiop = gobbleBinaryOp();\r\n\r\n\t\t\t\t\t// If there wasn't a binary operator, just return the leftmost node\r\n\t\t\t\t\tif(!biop) {\r\n\t\t\t\t\t\treturn left;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Otherwise, we need to start a stack to properly place the binary operations in their\r\n\t\t\t\t\t// precedence structure\r\n\t\t\t\t\tbiop_info = { value: biop, prec: binaryPrecedence(biop)};\r\n\r\n\t\t\t\t\tright = gobbleToken();\r\n\t\t\t\t\tif(!right) {\r\n\t\t\t\t\t\tthrowError(\"Expected expression after \" + biop, index);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstack = [left, biop_info, right];\r\n\r\n\t\t\t\t\t// Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)\r\n\t\t\t\t\twhile((biop = gobbleBinaryOp())) {\r\n\t\t\t\t\t\tprec = binaryPrecedence(biop);\r\n\r\n\t\t\t\t\t\tif(prec === 0) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbiop_info = { value: biop, prec: prec };\r\n\r\n\t\t\t\t\t\t// Reduce: make a binary expression from the three topmost entries.\r\n\t\t\t\t\t\twhile ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\r\n\t\t\t\t\t\t\tright = stack.pop();\r\n\t\t\t\t\t\t\tbiop = stack.pop().value;\r\n\t\t\t\t\t\t\tleft = stack.pop();\r\n\t\t\t\t\t\t\tnode = createBinaryExpression(biop, left, right);\r\n\t\t\t\t\t\t\tstack.push(node);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tnode = gobbleToken();\r\n\t\t\t\t\t\tif(!node) {\r\n\t\t\t\t\t\t\tthrowError(\"Expected expression after \" + biop, index);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstack.push(biop_info, node);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ti = stack.length - 1;\r\n\t\t\t\t\tnode = stack[i];\r\n\t\t\t\t\twhile(i > 1) {\r\n\t\t\t\t\t\tnode = createBinaryExpression(stack[i - 1].value, stack[i - 2], node);\r\n\t\t\t\t\t\ti -= 2;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn node;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// An individual part of a binary expression:\r\n\t\t\t\t// e.g. `foo.bar(baz)`, `1`, `\"abc\"`, `(a % 2)` (because it's in parenthesis)\r\n\t\t\t\tgobbleToken = function() {\r\n\t\t\t\t\tvar ch, to_check, tc_len;\r\n\r\n\t\t\t\t\tgobbleSpaces();\r\n\t\t\t\t\tch = exprICode(index);\r\n\r\n\t\t\t\t\tif(isDecimalDigit(ch) || ch === PERIOD_CODE) {\r\n\t\t\t\t\t\t// Char code 46 is a dot `.` which can start off a numeric literal\r\n\t\t\t\t\t\treturn gobbleNumericLiteral();\r\n\t\t\t\t\t} else if(ch === SQUOTE_CODE || ch === DQUOTE_CODE) {\r\n\t\t\t\t\t\t// Single or double quotes\r\n\t\t\t\t\t\treturn gobbleStringLiteral();\r\n\t\t\t\t\t} else if (ch === OBRACK_CODE) {\r\n\t\t\t\t\t\treturn gobbleArray();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tto_check = expr.substr(index, max_unop_len);\r\n\t\t\t\t\t\ttc_len = to_check.length;\r\n\t\t\t\t\t\twhile(tc_len > 0) {\r\n\t\t\t\t\t\t// Don't accept an unary op when it is an identifier.\r\n\t\t\t\t\t\t// Unary ops that start with a identifier-valid character must be followed\r\n\t\t\t\t\t\t// by a non identifier-part valid character\r\n\t\t\t\t\t\t\tif(unary_ops.hasOwnProperty(to_check) && (\r\n\t\t\t\t\t\t\t\t!isIdentifierStart(exprICode(index)) ||\r\n\t\t\t\t\t\t\t\t(index+to_check.length < expr.length && !isIdentifierPart(exprICode(index+to_check.length)))\r\n\t\t\t\t\t\t\t)) {\r\n\t\t\t\t\t\t\t\tindex += tc_len;\r\n\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\ttype: UNARY_EXP,\r\n\t\t\t\t\t\t\t\t\toperator: to_check,\r\n\t\t\t\t\t\t\t\t\targument: gobbleToken(),\r\n\t\t\t\t\t\t\t\t\tprefix: true\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tto_check = to_check.substr(0, --tc_len);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (isIdentifierStart(ch) || ch === OPAREN_CODE) { // open parenthesis\r\n\t\t\t\t\t\t\t// `foo`, `bar.baz`\r\n\t\t\t\t\t\t\treturn gobbleVariable();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t},\r\n\t\t\t\t// Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to\r\n\t\t\t\t// keep track of everything in the numeric literal and then calling `parseFloat` on that string\r\n\t\t\t\tgobbleNumericLiteral = function() {\r\n\t\t\t\t\tvar number = '', ch, chCode;\r\n\t\t\t\t\twhile(isDecimalDigit(exprICode(index))) {\r\n\t\t\t\t\t\tnumber += exprI(index++);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(exprICode(index) === PERIOD_CODE) { // can start with a decimal marker\r\n\t\t\t\t\t\tnumber += exprI(index++);\r\n\r\n\t\t\t\t\t\twhile(isDecimalDigit(exprICode(index))) {\r\n\t\t\t\t\t\t\tnumber += exprI(index++);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tch = exprI(index);\r\n\t\t\t\t\tif(ch === 'e' || ch === 'E') { // exponent marker\r\n\t\t\t\t\t\tnumber += exprI(index++);\r\n\t\t\t\t\t\tch = exprI(index);\r\n\t\t\t\t\t\tif(ch === '+' || ch === '-') { // exponent sign\r\n\t\t\t\t\t\t\tnumber += exprI(index++);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\twhile(isDecimalDigit(exprICode(index))) { //exponent itself\r\n\t\t\t\t\t\t\tnumber += exprI(index++);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(!isDecimalDigit(exprICode(index-1)) ) {\r\n\t\t\t\t\t\t\tthrowError('Expected exponent (' + number + exprI(index) + ')', index);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tchCode = exprICode(index);\r\n\t\t\t\t\t// Check to make sure this isn't a variable name that start with a number (123abc)\r\n\t\t\t\t\tif(isIdentifierStart(chCode)) {\r\n\t\t\t\t\t\tthrowError('Variable names cannot start with a number (' +\r\n\t\t\t\t\t\t\t\t\tnumber + exprI(index) + ')', index);\r\n\t\t\t\t\t} else if(chCode === PERIOD_CODE) {\r\n\t\t\t\t\t\tthrowError('Unexpected period', index);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\ttype: LITERAL,\r\n\t\t\t\t\t\tvalue: parseFloat(number),\r\n\t\t\t\t\t\traw: number\r\n\t\t\t\t\t};\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Parses a string literal, staring with single or double quotes with basic support for escape codes\r\n\t\t\t\t// e.g. `\"hello world\"`, `'this is\\nJSEP'`\r\n\t\t\t\tgobbleStringLiteral = function() {\r\n\t\t\t\t\tvar str = '', quote = exprI(index++), closed = false, ch;\r\n\r\n\t\t\t\t\twhile(index < length) {\r\n\t\t\t\t\t\tch = exprI(index++);\r\n\t\t\t\t\t\tif(ch === quote) {\r\n\t\t\t\t\t\t\tclosed = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t} else if(ch === '\\\\') {\r\n\t\t\t\t\t\t\t// Check for all of the common escape codes\r\n\t\t\t\t\t\t\tch = exprI(index++);\r\n\t\t\t\t\t\t\tswitch(ch) {\r\n\t\t\t\t\t\t\t\tcase 'n': str += '\\n'; break;\r\n\t\t\t\t\t\t\t\tcase 'r': str += '\\r'; break;\r\n\t\t\t\t\t\t\t\tcase 't': str += '\\t'; break;\r\n\t\t\t\t\t\t\t\tcase 'b': str += '\\b'; break;\r\n\t\t\t\t\t\t\t\tcase 'f': str += '\\f'; break;\r\n\t\t\t\t\t\t\t\tcase 'v': str += '\\x0B'; break;\r\n\t\t\t\t\t\t\t\tdefault : str += ch;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += ch;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!closed) {\r\n\t\t\t\t\t\tthrowError('Unclosed quote after \"'+str+'\"', index);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\ttype: LITERAL,\r\n\t\t\t\t\t\tvalue: str,\r\n\t\t\t\t\t\traw: quote + str + quote\r\n\t\t\t\t\t};\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Gobbles only identifiers\r\n\t\t\t\t// e.g.: `foo`, `_value`, `$x1`\r\n\t\t\t\t// Also, this function checks if that identifier is a literal:\r\n\t\t\t\t// (e.g. `true`, `false`, `null`) or `this`\r\n\t\t\t\tgobbleIdentifier = function() {\r\n\t\t\t\t\tvar ch = exprICode(index), start = index, identifier;\r\n\r\n\t\t\t\t\tif(isIdentifierStart(ch)) {\r\n\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrowError('Unexpected ' + exprI(index), index);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\twhile(index < length) {\r\n\t\t\t\t\t\tch = exprICode(index);\r\n\t\t\t\t\t\tif(isIdentifierPart(ch)) {\r\n\t\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tidentifier = expr.slice(start, index);\r\n\r\n\t\t\t\t\tif(literals.hasOwnProperty(identifier)) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttype: LITERAL,\r\n\t\t\t\t\t\t\tvalue: literals[identifier],\r\n\t\t\t\t\t\t\traw: identifier\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else if(identifier === this_str) {\r\n\t\t\t\t\t\treturn { type: THIS_EXP };\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttype: IDENTIFIER,\r\n\t\t\t\t\t\t\tname: identifier\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Gobbles a list of arguments within the context of a function call\r\n\t\t\t\t// or array literal. This function also assumes that the opening character\r\n\t\t\t\t// `(` or `[` has already been gobbled, and gobbles expressions and commas\r\n\t\t\t\t// until the terminator character `)` or `]` is encountered.\r\n\t\t\t\t// e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`\r\n\t\t\t\tgobbleArguments = function(termination) {\r\n\t\t\t\t\tvar ch_i, args = [], node, closed = false;\r\n\t\t\t\t\twhile(index < length) {\r\n\t\t\t\t\t\tgobbleSpaces();\r\n\t\t\t\t\t\tch_i = exprICode(index);\r\n\t\t\t\t\t\tif(ch_i === termination) { // done parsing\r\n\t\t\t\t\t\t\tclosed = true;\r\n\t\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t} else if (ch_i === COMMA_CODE) { // between expressions\r\n\t\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tnode = gobbleExpression();\r\n\t\t\t\t\t\t\tif(!node || node.type === COMPOUND) {\r\n\t\t\t\t\t\t\t\tthrowError('Expected comma', index);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\targs.push(node);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!closed) {\r\n\t\t\t\t\t\tthrowError('Expected ' + String.fromCharCode(termination), index);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn args;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Gobble a non-literal variable name. This variable name may include properties\r\n\t\t\t\t// e.g. `foo`, `bar.baz`, `foo['bar'].baz`\r\n\t\t\t\t// It also gobbles function calls:\r\n\t\t\t\t// e.g. `Math.acos(obj.angle)`\r\n\t\t\t\tgobbleVariable = function() {\r\n\t\t\t\t\tvar ch_i, node;\r\n\t\t\t\t\tch_i = exprICode(index);\r\n\r\n\t\t\t\t\tif(ch_i === OPAREN_CODE) {\r\n\t\t\t\t\t\tnode = gobbleGroup();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnode = gobbleIdentifier();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgobbleSpaces();\r\n\t\t\t\t\tch_i = exprICode(index);\r\n\t\t\t\t\twhile(ch_i === PERIOD_CODE || ch_i === OBRACK_CODE || ch_i === OPAREN_CODE) {\r\n\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\tif(ch_i === PERIOD_CODE) {\r\n\t\t\t\t\t\t\tgobbleSpaces();\r\n\t\t\t\t\t\t\tnode = {\r\n\t\t\t\t\t\t\t\ttype: MEMBER_EXP,\r\n\t\t\t\t\t\t\t\tcomputed: false,\r\n\t\t\t\t\t\t\t\tobject: node,\r\n\t\t\t\t\t\t\t\tproperty: gobbleIdentifier()\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t} else if(ch_i === OBRACK_CODE) {\r\n\t\t\t\t\t\t\tnode = {\r\n\t\t\t\t\t\t\t\ttype: MEMBER_EXP,\r\n\t\t\t\t\t\t\t\tcomputed: true,\r\n\t\t\t\t\t\t\t\tobject: node,\r\n\t\t\t\t\t\t\t\tproperty: gobbleExpression()\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\tgobbleSpaces();\r\n\t\t\t\t\t\t\tch_i = exprICode(index);\r\n\t\t\t\t\t\t\tif(ch_i !== CBRACK_CODE) {\r\n\t\t\t\t\t\t\t\tthrowError('Unclosed [', index);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\t} else if(ch_i === OPAREN_CODE) {\r\n\t\t\t\t\t\t\t// A function call is being made; gobble all the arguments\r\n\t\t\t\t\t\t\tnode = {\r\n\t\t\t\t\t\t\t\ttype: CALL_EXP,\r\n\t\t\t\t\t\t\t\t'arguments': gobbleArguments(CPAREN_CODE),\r\n\t\t\t\t\t\t\t\tcallee: node\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgobbleSpaces();\r\n\t\t\t\t\t\tch_i = exprICode(index);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn node;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Responsible for parsing a group of things within parentheses `()`\r\n\t\t\t\t// This function assumes that it needs to gobble the opening parenthesis\r\n\t\t\t\t// and then tries to gobble everything within that parenthesis, assuming\r\n\t\t\t\t// that the next thing it should see is the close parenthesis. If not,\r\n\t\t\t\t// then the expression probably doesn't have a `)`\r\n\t\t\t\tgobbleGroup = function() {\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t\tvar node = gobbleExpression();\r\n\t\t\t\t\tgobbleSpaces();\r\n\t\t\t\t\tif(exprICode(index) === CPAREN_CODE) {\r\n\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\treturn node;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrowError('Unclosed (', index);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Responsible for parsing Array literals `[1, 2, 3]`\r\n\t\t\t\t// This function assumes that it needs to gobble the opening bracket\r\n\t\t\t\t// and then tries to gobble the expressions as arguments.\r\n\t\t\t\tgobbleArray = function() {\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\ttype: ARRAY_EXP,\r\n\t\t\t\t\t\telements: gobbleArguments(CBRACK_CODE)\r\n\t\t\t\t\t};\r\n\t\t\t\t},\r\n\r\n\t\t\t\tnodes = [], ch_i, node;\r\n\r\n\t\t\twhile(index < length) {\r\n\t\t\t\tch_i = exprICode(index);\r\n\r\n\t\t\t\t// Expressions can be separated by semicolons, commas, or just inferred without any\r\n\t\t\t\t// separators\r\n\t\t\t\tif(ch_i === SEMCOL_CODE || ch_i === COMMA_CODE) {\r\n\t\t\t\t\tindex++; // ignore separators\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Try to gobble each expression individually\r\n\t\t\t\t\tif((node = gobbleExpression())) {\r\n\t\t\t\t\t\tnodes.push(node);\r\n\t\t\t\t\t// If we weren't able to find a binary expression and are out of room, then\r\n\t\t\t\t\t// the expression passed in probably has too much\r\n\t\t\t\t\t} else if(index < length) {\r\n\t\t\t\t\t\tthrowError('Unexpected \"' + exprI(index) + '\"', index);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// If there's only one expression just try returning the expression\r\n\t\t\tif(nodes.length === 1) {\r\n\t\t\t\treturn nodes[0];\r\n\t\t\t} else {\r\n\t\t\t\treturn {\r\n\t\t\t\t\ttype: COMPOUND,\r\n\t\t\t\t\tbody: nodes\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t// To be filled in by the template\r\n\tjsep.version = '0.3.4';\r\n\tjsep.toString = function() { return 'JavaScript Expression Parser (JSEP) v' + jsep.version; };\r\n\r\n\t/**\r\n\t * @method jsep.addUnaryOp\r\n\t * @param {string} op_name The name of the unary op to add\r\n\t * @return jsep\r\n\t */\r\n\tjsep.addUnaryOp = function(op_name) {\r\n\t\tmax_unop_len = Math.max(op_name.length, max_unop_len);\r\n\t\tunary_ops[op_name] = t; return this;\r\n\t};\r\n\r\n\t/**\r\n\t * @method jsep.addBinaryOp\r\n\t * @param {string} op_name The name of the binary op to add\r\n\t * @param {number} precedence The precedence of the binary op (can be a float)\r\n\t * @return jsep\r\n\t */\r\n\tjsep.addBinaryOp = function(op_name, precedence) {\r\n\t\tmax_binop_len = Math.max(op_name.length, max_binop_len);\r\n\t\tbinary_ops[op_name] = precedence;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/**\r\n\t * @method jsep.addLiteral\r\n\t * @param {string} literal_name The name of the literal to add\r\n\t * @param {*} literal_value The value of the literal\r\n\t * @return jsep\r\n\t */\r\n\tjsep.addLiteral = function(literal_name, literal_value) {\r\n\t\tliterals[literal_name] = literal_value;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/**\r\n\t * @method jsep.removeUnaryOp\r\n\t * @param {string} op_name The name of the unary op to remove\r\n\t * @return jsep\r\n\t */\r\n\tjsep.removeUnaryOp = function(op_name) {\r\n\t\tdelete unary_ops[op_name];\r\n\t\tif(op_name.length === max_unop_len) {\r\n\t\t\tmax_unop_len = getMaxKeyLen(unary_ops);\r\n\t\t}\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/**\r\n\t * @method jsep.removeAllUnaryOps\r\n\t * @return jsep\r\n\t */\r\n\tjsep.removeAllUnaryOps = function() {\r\n\t\tunary_ops = {};\r\n\t\tmax_unop_len = 0;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/**\r\n\t * @method jsep.removeBinaryOp\r\n\t * @param {string} op_name The name of the binary op to remove\r\n\t * @return jsep\r\n\t */\r\n\tjsep.removeBinaryOp = function(op_name) {\r\n\t\tdelete binary_ops[op_name];\r\n\t\tif(op_name.length === max_binop_len) {\r\n\t\t\tmax_binop_len = getMaxKeyLen(binary_ops);\r\n\t\t}\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/**\r\n\t * @method jsep.removeAllBinaryOps\r\n\t * @return jsep\r\n\t */\r\n\tjsep.removeAllBinaryOps = function() {\r\n\t\tbinary_ops = {};\r\n\t\tmax_binop_len = 0;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/**\r\n\t * @method jsep.removeLiteral\r\n\t * @param {string} literal_name The name of the literal to remove\r\n\t * @return jsep\r\n\t */\r\n\tjsep.removeLiteral = function(literal_name) {\r\n\t\tdelete literals[literal_name];\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/**\r\n\t * @method jsep.removeAllLiterals\r\n\t * @return jsep\r\n\t */\r\n\tjsep.removeAllLiterals = function() {\r\n\t\tliterals = {};\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t// In desktop environments, have a way to restore the old value for `jsep`\r\n\tif (typeof exports === 'undefined') {\r\n\t\tvar old_jsep = root.jsep;\r\n\t\t// The star of the show! It's a function!\r\n\t\troot.jsep = jsep;\r\n\t\t// And a courteous function willing to move out of the way for other similarly-named objects!\r\n\t\tjsep.noConflict = function() {\r\n\t\t\tif(root.jsep === jsep) {\r\n\t\t\t\troot.jsep = old_jsep;\r\n\t\t\t}\r\n\t\t\treturn jsep;\r\n\t\t};\r\n\t} else {\r\n\t\t// In Node.JS environments\r\n\t\tif (typeof module !== 'undefined' && module.exports) {\r\n\t\t\texports = module.exports = jsep;\r\n\t\t} else {\r\n\t\t\texports.parse = jsep;\r\n\t\t}\r\n\t}\r\n}(this));\r\n","/* Mapbox GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/mapbox/mapbox-gl-js/blob/v1.6.1/LICENSE.txt */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\ntypeof define === 'function' && define.amd ? define(factory) :\n(global = global || self, global.mapboxgl = factory());\n}(this, (function () { 'use strict';\n\n/* eslint-disable */\n\nvar shared, worker, mapboxgl;\n// define gets called three times: one for each chunk. we rely on the order\n// they're imported to know which is which\nfunction define(_, chunk) {\nif (!shared) {\n shared = chunk;\n} else if (!worker) {\n worker = chunk;\n} else {\n var workerBundleString = 'var sharedChunk = {}; (' + shared + ')(sharedChunk); (' + worker + ')(sharedChunk);'\n\n var sharedChunk = {};\n shared(sharedChunk);\n mapboxgl = chunk(sharedChunk);\n mapboxgl.workerUrl = window.URL.createObjectURL(new Blob([workerBundleString], { type: 'text/javascript' }));\n}\n}\n\n\ndefine([\"exports\"],(function(t){\"use strict\";function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r=n;function n(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n;}n.prototype.sampleCurveX=function(t){return ((this.ax*t+this.bx)*t+this.cx)*t},n.prototype.sampleCurveY=function(t){return ((this.ay*t+this.by)*t+this.cy)*t},n.prototype.sampleCurveDerivativeX=function(t){return (3*this.ax*t+2*this.bx)*t+this.cx},n.prototype.solveCurveX=function(t,e){var r,n,i,a,o;for(void 0===e&&(e=1e-6),i=t,o=0;o<8;o++){if(a=this.sampleCurveX(i)-t,Math.abs(a)(n=1))return n;for(;ra?r=i:n=i,i=.5*(n-r)+r;}return i},n.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var i=a;function a(t,e){this.x=t,this.y=e;}function o(t,e){if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return !1;for(var r=0;r0;)e[r]=arguments[r+1];for(var n=0,i=e;n>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function d(t){return !!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function m(t,e){t.forEach((function(t){e[t]&&(e[t]=e[t].bind(e));}));}function v(t,e){return -1!==t.indexOf(e,t.length-e.length)}function g(t,e,r){var n={};for(var i in t)n[i]=e.call(r||this,t[i],i,t);return n}function x(t,e,r){var n={};for(var i in t)e.call(r||this,t[i],i,t)&&(n[i]=t[i]);return n}function b(t){return Array.isArray(t)?t.map(b):\"object\"==typeof t&&t?g(t,b):t}var _={};function w(t){_[t]||(\"undefined\"!=typeof console&&console.warn(t),_[t]=!0);}function A(t,e,r){return (r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function S(t){for(var e=0,r=0,n=t.length,i=n-1,a=void 0,o=void 0;r@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)(?:\\=(?:([^\\x00-\\x20\\(\\)<>@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)|(?:\\\"((?:[^\"\\\\]|\\\\.)*)\\\")))?/g,(function(t,r,n,i){var a=n||i;return e[r]=!a||a.toLowerCase(),\"\"})),e[\"max-age\"]){var r=parseInt(e[\"max-age\"],10);isNaN(r)?delete e[\"max-age\"]:e[\"max-age\"]=r;}return e}var z=null;function C(t){if(null==z){var e=t.navigator?t.navigator.userAgent:null;z=!!t.safari||!(!e||!(/\\b(iPad|iPhone|iPod)\\b/.test(e)||e.match(\"Safari\")&&!e.match(\"Chrome\")));}return z}function B(t){try{var e=self[t];return e.setItem(\"_mapbox_test_\",1),e.removeItem(\"_mapbox_test_\"),!0}catch(t){return !1}}var T,P,E,M,V=self.performance&&self.performance.now?self.performance.now.bind(self.performance):Date.now.bind(Date),F=self.requestAnimationFrame||self.mozRequestAnimationFrame||self.webkitRequestAnimationFrame||self.msRequestAnimationFrame,L=self.cancelAnimationFrame||self.mozCancelAnimationFrame||self.webkitCancelAnimationFrame||self.msCancelAnimationFrame,O={now:V,frame:function(t){var e=F(t);return {cancel:function(){return L(e)}}},getImageData:function(t,e){void 0===e&&(e=0);var r=self.document.createElement(\"canvas\"),n=r.getContext(\"2d\");if(!n)throw new Error(\"failed to create canvas 2d context\");return r.width=t.width,r.height=t.height,n.drawImage(t,0,0,t.width,t.height),n.getImageData(-e,-e,t.width+2*e,t.height+2*e)},resolveURL:function(t){return T||(T=self.document.createElement(\"a\")),T.href=t,T.href},hardwareConcurrency:self.navigator.hardwareConcurrency||4,get devicePixelRatio(){return self.devicePixelRatio},get prefersReducedMotion(){return !!self.matchMedia&&(null==P&&(P=self.matchMedia(\"(prefers-reduced-motion: reduce)\")),P.matches)}},D={API_URL:\"https://api.mapbox.com\",get EVENTS_URL(){return this.API_URL?0===this.API_URL.indexOf(\"https://api.mapbox.cn\")?\"https://events.mapbox.cn/events/v2\":0===this.API_URL.indexOf(\"https://api.mapbox.com\")?\"https://events.mapbox.com/events/v2\":null:null},FEEDBACK_URL:\"https://apps.mapbox.com/feedback\",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},R={supported:!1,testSupport:function(t){if(U||!M)return;j?q(t):E=t;}},U=!1,j=!1;function q(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,M),t.isContextLost())return;R.supported=!0;}catch(t){}t.deleteTexture(e),U=!0;}self.document&&((M=self.document.createElement(\"img\")).onload=function(){E&&q(E),E=null,j=!0;},M.onerror=function(){U=!0,E=null;},M.src=\"data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=\");var N=\"01\";var K=function(t,e){this._transformRequestFn=t,this._customAccessToken=e,this._createSkuToken();};function X(t){return 0===t.indexOf(\"mapbox:\")}K.prototype._createSkuToken=function(){var t=function(){for(var t=\"\",e=0;e<10;e++)t+=\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"[Math.floor(62*Math.random())];return {token:[\"1\",N,t].join(\"\"),tokenExpiresAt:Date.now()+432e5}}();this._skuToken=t.token,this._skuTokenExpiresAt=t.tokenExpiresAt;},K.prototype._isSkuTokenExpired=function(){return Date.now()>this._skuTokenExpiresAt},K.prototype.transformRequest=function(t,e){return this._transformRequestFn&&this._transformRequestFn(t,e)||{url:t}},K.prototype.normalizeStyleURL=function(t,e){if(!X(t))return t;var r=H(t);return r.path=\"/styles/v1\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},K.prototype.normalizeGlyphsURL=function(t,e){if(!X(t))return t;var r=H(t);return r.path=\"/fonts/v1\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},K.prototype.normalizeSourceURL=function(t,e){if(!X(t))return t;var r=H(t);return r.path=\"/v4/\"+r.authority+\".json\",r.params.push(\"secure\"),this._makeAPIURL(r,this._customAccessToken||e)},K.prototype.normalizeSpriteURL=function(t,e,r,n){var i=H(t);return X(t)?(i.path=\"/styles/v1\"+i.path+\"/sprite\"+e+r,this._makeAPIURL(i,this._customAccessToken||n)):(i.path+=\"\"+e+r,Y(i))},K.prototype.normalizeTileURL=function(t,e,r){if(this._isSkuTokenExpired()&&this._createSkuToken(),!e||!X(e))return t;var n=H(t),i=O.devicePixelRatio>=2||512===r?\"@2x\":\"\",a=R.supported?\".webp\":\"$1\";return n.path=n.path.replace(/(\\.(png|jpg)\\d*)(?=$)/,\"\"+i+a),n.path=n.path.replace(/^.+\\/v4\\//,\"/\"),n.path=\"/v4\"+n.path,D.REQUIRE_ACCESS_TOKEN&&(D.ACCESS_TOKEN||this._customAccessToken)&&this._skuToken&&n.params.push(\"sku=\"+this._skuToken),this._makeAPIURL(n,this._customAccessToken)},K.prototype.canonicalizeTileURL=function(t){var e=H(t);if(!e.path.match(/(^\\/v4\\/)/)||!e.path.match(/\\.[\\w]+$/))return t;var r=\"mapbox://tiles/\";r+=e.path.replace(\"/v4/\",\"\");var n=e.params.filter((function(t){return !t.match(/^access_token=/)}));return n.length&&(r+=\"?\"+n.join(\"&\")),r},K.prototype.canonicalizeTileset=function(t,e){if(!X(e))return t.tiles||[];for(var r=[],n=0,i=t.tiles;n=1&&self.localStorage.setItem(e,JSON.stringify(this.eventData));}catch(t){w(\"Unable to write to LocalStorage\");}},W.prototype.processRequests=function(t){},W.prototype.postEvent=function(t,e,r,n){var i=this;if(D.EVENTS_URL){var a=H(D.EVENTS_URL);a.params.push(\"access_token=\"+(n||D.ACCESS_TOKEN||\"\"));var o={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:\"mapbox-gl-js\",sdkVersion:\"1.6.1\",skuId:N,userId:this.anonId},s=e?c(o,e):o,u={url:Y(a),headers:{\"Content-Type\":\"text/plain\"},body:JSON.stringify([s])};this.pendingRequest=_t(u,(function(t){i.pendingRequest=null,r(t),i.saveEventData(),i.processRequests(n);}));}},W.prototype.queueRequest=function(t,e){this.queue.push(t),this.processRequests(e);};var Q,tt,et=function(t){function e(){t.call(this,\"map.load\"),this.success={},this.skuToken=\"\";}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postMapLoadEvent=function(t,e,r,n){this.skuToken=r,(D.EVENTS_URL&&n||D.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return X(t)||G(t)})))&&this.queueRequest({id:e,timestamp:Date.now()},n);},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){var r=this.queue.shift(),n=r.id,i=r.timestamp;n&&this.success[n]||(this.anonId||this.fetchEventData(),d(this.anonId)||(this.anonId=y()),this.postEvent(i,{skuToken:this.skuToken},(function(t){t||n&&(e.success[n]=!0);}),t));}},e}(W),rt=new(function(t){function e(e){t.call(this,\"appUserTurnstile\"),this._customAccessToken=e;}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postTurnstileEvent=function(t,e){D.EVENTS_URL&&D.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return X(t)||G(t)}))&&this.queueRequest(Date.now(),e);},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){this.anonId&&this.eventData.lastSuccess&&this.eventData.tokenU||this.fetchEventData();var r=$(D.ACCESS_TOKEN),n=r?r.u:D.ACCESS_TOKEN,i=n!==this.eventData.tokenU;d(this.anonId)||(this.anonId=y(),i=!0);var a=this.queue.shift();if(this.eventData.lastSuccess){var o=new Date(this.eventData.lastSuccess),s=new Date(a),u=(a-this.eventData.lastSuccess)/864e5;i=i||u>=1||u<-1||o.getDate()!==s.getDate();}else i=!0;if(!i)return this.processRequests();this.postEvent(a,{\"enabled.telemetry\":!1},(function(t){t||(e.eventData.lastSuccess=a,e.eventData.tokenU=n);}),t);}},e}(W)),nt=rt.postTurnstileEvent.bind(rt),it=new et,at=it.postMapLoadEvent.bind(it),ot=\"mapbox-tiles\",st=500,ut=50,lt=42e4;function pt(){self.caches&&!Q&&(Q=self.caches.open(ot));}function ct(t,e,r){if(pt(),Q){var n={status:e.status,statusText:e.statusText,headers:new self.Headers};e.headers.forEach((function(t,e){return n.headers.set(e,t)}));var i=I(e.headers.get(\"Cache-Control\")||\"\");if(!i[\"no-store\"])i[\"max-age\"]&&n.headers.set(\"Expires\",new Date(r+1e3*i[\"max-age\"]).toUTCString()),new Date(n.headers.get(\"Expires\")).getTime()-rDate.now()&&!r[\"no-cache\"]}(n);t.delete(r),i&&t.put(r,n.clone()),e(null,n,i);})).catch(e);})).catch(e);}var yt=1/0;var dt={Unknown:\"Unknown\",Style:\"Style\",Source:\"Source\",Tile:\"Tile\",Glyphs:\"Glyphs\",SpriteImage:\"SpriteImage\",SpriteJSON:\"SpriteJSON\",Image:\"Image\"};\"function\"==typeof Object.freeze&&Object.freeze(dt);var mt=function(t){function e(e,r,n){401===r&&G(n)&&(e+=\": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\"),t.call(this,e),this.status=r,this.url=n,this.name=this.constructor.name,this.message=e;}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toString=function(){return this.name+\": \"+this.message+\" (\"+this.status+\"): \"+this.url},e}(Error),vt=k()?function(){return self.worker&&self.worker.referrer}:function(){return (\"blob:\"===self.location.protocol?self.parent:self).location.href};function gt(t,e){var r,n=new self.AbortController,i=new self.Request(t.url,{method:t.method||\"GET\",body:t.body,credentials:t.credentials,headers:t.headers,referrer:vt(),signal:n.signal}),a=!1,o=!1,s=(r=i.url).indexOf(\"sku=\")>0&&G(r);\"json\"===t.type&&i.headers.set(\"Accept\",\"application/json\");var u=function(r,n,a){if(!o){if(r&&\"SecurityError\"!==r.message&&w(r),n&&a)return l(n);var u=Date.now();self.fetch(i).then((function(r){if(r.ok){var n=s?r.clone():null;return l(r,n,u)}return e(new mt(r.statusText,r.status,t.url))})).catch((function(t){20!==t.code&&e(new Error(t.message));}));}},l=function(r,n,s){(\"arrayBuffer\"===t.type?r.arrayBuffer():\"json\"===t.type?r.json():r.text()).then((function(t){o||(n&&s&&ct(i,n,s),a=!0,e(null,t,r.headers.get(\"Cache-Control\"),r.headers.get(\"Expires\")));})).catch((function(t){o||e(new Error(t.message));}));};return s?ft(i,u):u(null,null),{cancel:function(){o=!0,a||n.abort();}}}var xt=function(t,e){if(r=t.url,!(/^file:/.test(r)||/^file:/.test(vt())&&!/^\\w+:/.test(r))){if(self.fetch&&self.Request&&self.AbortController&&self.Request.prototype.hasOwnProperty(\"signal\"))return gt(t,e);if(k()&&self.worker&&self.worker.actor){return self.worker.actor.send(\"getResource\",t,e,void 0,!0)}}var r;return function(t,e){var r=new self.XMLHttpRequest;for(var n in r.open(t.method||\"GET\",t.url,!0),\"arrayBuffer\"===t.type&&(r.responseType=\"arraybuffer\"),t.headers)r.setRequestHeader(n,t.headers[n]);return \"json\"===t.type&&(r.responseType=\"text\",r.setRequestHeader(\"Accept\",\"application/json\")),r.withCredentials=\"include\"===t.credentials,r.onerror=function(){e(new Error(r.statusText));},r.onload=function(){if((r.status>=200&&r.status<300||0===r.status)&&null!==r.response){var n=r.response;if(\"json\"===t.type)try{n=JSON.parse(r.response);}catch(t){return e(t)}e(null,n,r.getResponseHeader(\"Cache-Control\"),r.getResponseHeader(\"Expires\"));}else e(new mt(r.statusText,r.status,t.url));},r.send(t.body),{cancel:function(){return r.abort()}}}(t,e)},bt=function(t,e){return xt(c(t,{type:\"arrayBuffer\"}),e)},_t=function(t,e){return xt(c(t,{method:\"POST\"}),e)};var wt,At;wt=[],At=0;var St=function(t,e){if(R.supported&&(t.headers||(t.headers={}),t.headers.accept=\"image/webp,*/*\"),At>=D.MAX_PARALLEL_IMAGE_REQUESTS){var r={requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled=!0;}};return wt.push(r),r}At++;var n=!1,i=function(){if(!n)for(n=!0,At--;wt.length&&At0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},Bt.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var Tt={$version:8,$root:{version:{required:!0,type:\"enum\",values:[8]},name:{type:\"string\"},metadata:{type:\"*\"},center:{type:\"array\",value:\"number\"},zoom:{type:\"number\"},bearing:{type:\"number\",default:0,period:360,units:\"degrees\"},pitch:{type:\"number\",default:0,units:\"degrees\"},light:{type:\"light\"},sources:{required:!0,type:\"sources\"},sprite:{type:\"string\"},glyphs:{type:\"string\"},transition:{type:\"transition\"},layers:{required:!0,type:\"array\",value:\"layer\"}},sources:{\"*\":{type:\"source\"}},source:[\"source_vector\",\"source_raster\",\"source_raster_dem\",\"source_geojson\",\"source_video\",\"source_image\"],source_vector:{type:{required:!0,type:\"enum\",values:{vector:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},attribution:{type:\"string\"},\"*\":{type:\"*\"}},source_raster:{type:{required:!0,type:\"enum\",values:{raster:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},attribution:{type:\"string\"},\"*\":{type:\"*\"}},source_raster_dem:{type:{required:!0,type:\"enum\",values:{\"raster-dem\":{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},attribution:{type:\"string\"},encoding:{type:\"enum\",values:{terrarium:{},mapbox:{}},default:\"mapbox\"},\"*\":{type:\"*\"}},source_geojson:{type:{required:!0,type:\"enum\",values:{geojson:{}}},data:{type:\"*\"},maxzoom:{type:\"number\",default:18},attribution:{type:\"string\"},buffer:{type:\"number\",default:128,maximum:512,minimum:0},tolerance:{type:\"number\",default:.375},cluster:{type:\"boolean\",default:!1},clusterRadius:{type:\"number\",default:50,minimum:0},clusterMaxZoom:{type:\"number\"},clusterProperties:{type:\"*\"},lineMetrics:{type:\"boolean\",default:!1},generateId:{type:\"boolean\",default:!1}},source_video:{type:{required:!0,type:\"enum\",values:{video:{}}},urls:{required:!0,type:\"array\",value:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},source_image:{type:{required:!0,type:\"enum\",values:{image:{}}},url:{required:!0,type:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},layer:{id:{type:\"string\",required:!0},type:{type:\"enum\",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},\"fill-extrusion\":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:\"*\"},source:{type:\"string\"},\"source-layer\":{type:\"string\"},minzoom:{type:\"number\",minimum:0,maximum:24},maxzoom:{type:\"number\",minimum:0,maximum:24},filter:{type:\"filter\"},layout:{type:\"layout\"},paint:{type:\"paint\"}},layout:[\"layout_fill\",\"layout_line\",\"layout_circle\",\"layout_heatmap\",\"layout_fill-extrusion\",\"layout_symbol\",\"layout_raster\",\"layout_hillshade\",\"layout_background\"],layout_background:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_fill:{\"fill-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_circle:{\"circle-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_heatmap:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},\"layout_fill-extrusion\":{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_line:{\"line-cap\":{type:\"enum\",values:{butt:{},round:{},square:{}},default:\"butt\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-join\":{type:\"enum\",values:{bevel:{},round:{},miter:{}},default:\"miter\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-miter-limit\":{type:\"number\",default:2,requires:[{\"line-join\":\"miter\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-round-limit\":{type:\"number\",default:1.05,requires:[{\"line-join\":\"round\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_symbol:{\"symbol-placement\":{type:\"enum\",values:{point:{},line:{},\"line-center\":{}},default:\"point\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-spacing\":{type:\"number\",default:250,minimum:1,units:\"pixels\",requires:[{\"symbol-placement\":\"line\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-avoid-edges\":{type:\"boolean\",default:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-z-order\":{type:\"enum\",values:{auto:{},\"viewport-y\":{},source:{}},default:\"auto\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-optional\":{type:\"boolean\",default:!1,requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-size\":{type:\"number\",default:1,minimum:0,units:\"factor of the original icon size\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-text-fit\":{type:\"enum\",values:{none:{},width:{},height:{},both:{}},default:\"none\",requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-text-fit-padding\":{type:\"array\",value:\"number\",length:4,default:[0,0,0,0],units:\"pixels\",requires:[\"icon-image\",\"text-field\",{\"icon-text-fit\":[\"both\",\"width\",\"height\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-image\":{type:\"resolvedImage\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-keep-upright\":{type:\"boolean\",default:!1,requires:[\"icon-image\",{\"icon-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-offset\":{type:\"array\",value:\"number\",length:2,default:[0,0],requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-field\":{type:\"formatted\",default:\"\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-font\":{type:\"array\",value:\"string\",default:[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-size\":{type:\"number\",default:16,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-width\":{type:\"number\",default:10,minimum:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-line-height\":{type:\"number\",default:1.2,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-letter-spacing\":{type:\"number\",default:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-justify\":{type:\"enum\",values:{auto:{},left:{},center:{},right:{}},default:\"center\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-radial-offset\":{type:\"number\",units:\"ems\",default:0,requires:[\"text-field\"],\"property-type\":\"data-driven\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]}},\"text-variable-anchor\":{type:\"array\",value:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"text-field\",{\"!\":\"text-variable-anchor\"}],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-angle\":{type:\"number\",default:45,units:\"degrees\",requires:[\"text-field\",{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-writing-mode\":{type:\"array\",value:\"enum\",values:{horizontal:{},vertical:{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-keep-upright\":{type:\"boolean\",default:!0,requires:[\"text-field\",{\"text-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-transform\":{type:\"enum\",values:{none:{},uppercase:{},lowercase:{}},default:\"none\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-offset\":{type:\"array\",value:\"number\",units:\"ems\",length:2,default:[0,0],requires:[\"text-field\",{\"!\":\"text-radial-offset\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-optional\":{type:\"boolean\",default:!1,requires:[\"text-field\",\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_raster:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_hillshade:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},filter:{type:\"array\",value:\"*\"},filter_operator:{type:\"enum\",values:{\"==\":{},\"!=\":{},\">\":{},\">=\":{},\"<\":{},\"<=\":{},in:{},\"!in\":{},all:{},any:{},none:{},has:{},\"!has\":{}}},geometry_type:{type:\"enum\",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:\"expression\"},stops:{type:\"array\",value:\"function_stop\"},base:{type:\"number\",default:1,minimum:0},property:{type:\"string\",default:\"$zoom\"},type:{type:\"enum\",values:{identity:{},exponential:{},interval:{},categorical:{}},default:\"exponential\"},colorSpace:{type:\"enum\",values:{rgb:{},lab:{},hcl:{}},default:\"rgb\"},default:{type:\"*\",required:!1}},function_stop:{type:\"array\",minimum:0,maximum:24,value:[\"number\",\"color\"],length:2},expression:{type:\"array\",value:\"*\",minimum:1},expression_name:{type:\"enum\",values:{let:{group:\"Variable binding\"},var:{group:\"Variable binding\"},literal:{group:\"Types\"},array:{group:\"Types\"},at:{group:\"Lookup\"},in:{group:\"Lookup\"},case:{group:\"Decision\"},match:{group:\"Decision\"},coalesce:{group:\"Decision\"},step:{group:\"Ramps, scales, curves\"},interpolate:{group:\"Ramps, scales, curves\"},\"interpolate-hcl\":{group:\"Ramps, scales, curves\"},\"interpolate-lab\":{group:\"Ramps, scales, curves\"},ln2:{group:\"Math\"},pi:{group:\"Math\"},e:{group:\"Math\"},typeof:{group:\"Types\"},string:{group:\"Types\"},number:{group:\"Types\"},boolean:{group:\"Types\"},object:{group:\"Types\"},collator:{group:\"Types\"},format:{group:\"Types\"},image:{group:\"Types\"},\"number-format\":{group:\"Types\"},\"to-string\":{group:\"Types\"},\"to-number\":{group:\"Types\"},\"to-boolean\":{group:\"Types\"},\"to-rgba\":{group:\"Color\"},\"to-color\":{group:\"Types\"},rgb:{group:\"Color\"},rgba:{group:\"Color\"},get:{group:\"Lookup\"},has:{group:\"Lookup\"},length:{group:\"Lookup\"},properties:{group:\"Feature data\"},\"feature-state\":{group:\"Feature data\"},\"geometry-type\":{group:\"Feature data\"},id:{group:\"Feature data\"},zoom:{group:\"Zoom\"},\"heatmap-density\":{group:\"Heatmap\"},\"line-progress\":{group:\"Feature data\"},accumulated:{group:\"Feature data\"},\"+\":{group:\"Math\"},\"*\":{group:\"Math\"},\"-\":{group:\"Math\"},\"/\":{group:\"Math\"},\"%\":{group:\"Math\"},\"^\":{group:\"Math\"},sqrt:{group:\"Math\"},log10:{group:\"Math\"},ln:{group:\"Math\"},log2:{group:\"Math\"},sin:{group:\"Math\"},cos:{group:\"Math\"},tan:{group:\"Math\"},asin:{group:\"Math\"},acos:{group:\"Math\"},atan:{group:\"Math\"},min:{group:\"Math\"},max:{group:\"Math\"},round:{group:\"Math\"},abs:{group:\"Math\"},ceil:{group:\"Math\"},floor:{group:\"Math\"},\"==\":{group:\"Decision\"},\"!=\":{group:\"Decision\"},\">\":{group:\"Decision\"},\"<\":{group:\"Decision\"},\">=\":{group:\"Decision\"},\"<=\":{group:\"Decision\"},all:{group:\"Decision\"},any:{group:\"Decision\"},\"!\":{group:\"Decision\"},\"is-supported-script\":{group:\"String\"},upcase:{group:\"String\"},downcase:{group:\"String\"},concat:{group:\"String\"},\"resolved-locale\":{group:\"String\"}}},light:{anchor:{type:\"enum\",default:\"viewport\",values:{map:{},viewport:{}},\"property-type\":\"data-constant\",transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]}},position:{type:\"array\",default:[1.15,210,30],length:3,value:\"number\",\"property-type\":\"data-constant\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]}},color:{type:\"color\",\"property-type\":\"data-constant\",default:\"#ffffff\",expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},intensity:{type:\"number\",\"property-type\":\"data-constant\",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0}},paint:[\"paint_fill\",\"paint_line\",\"paint_circle\",\"paint_heatmap\",\"paint_fill-extrusion\",\"paint_symbol\",\"paint_raster\",\"paint_hillshade\",\"paint_background\"],paint_fill:{\"fill-antialias\":{type:\"boolean\",default:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-outline-color\":{type:\"color\",transition:!0,requires:[{\"!\":\"fill-pattern\"},{\"fill-antialias\":!0}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"}},\"paint_fill-extrusion\":{\"fill-extrusion-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-extrusion-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-extrusion-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"fill-extrusion-height\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-base\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,requires:[\"fill-extrusion-height\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-vertical-gradient\":{type:\"boolean\",default:!0,transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_line:{\"line-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"line-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-width\":{type:\"number\",default:1,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-gap-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-offset\":{type:\"number\",default:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-dasharray\":{type:\"array\",value:\"number\",minimum:0,transition:!0,units:\"line widths\",requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"line-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"line-gradient\":{type:\"color\",transition:!1,requires:[{\"!\":\"line-dasharray\"},{\"!\":\"line-pattern\"},{source:\"geojson\",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:[\"line-progress\"]},\"property-type\":\"color-ramp\"}},paint_circle:{\"circle-radius\":{type:\"number\",default:5,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-blur\":{type:\"number\",default:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"circle-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-scale\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-stroke-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"}},paint_heatmap:{\"heatmap-radius\":{type:\"number\",default:30,minimum:1,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-weight\":{type:\"number\",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-intensity\":{type:\"number\",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"heatmap-color\":{type:\"color\",default:[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,\"rgba(0, 0, 255, 0)\",.1,\"royalblue\",.3,\"cyan\",.5,\"lime\",.7,\"yellow\",1,\"red\"],transition:!1,expression:{interpolated:!0,parameters:[\"heatmap-density\"]},\"property-type\":\"color-ramp\"},\"heatmap-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_symbol:{\"icon-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"icon-image\",\"icon-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-color\":{type:\"color\",default:\"#000000\",transition:!0,overridable:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"text-field\",\"text-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_raster:{\"raster-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-hue-rotate\":{type:\"number\",default:0,period:360,transition:!0,units:\"degrees\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-min\":{type:\"number\",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-max\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-saturation\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-contrast\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-resampling\":{type:\"enum\",values:{linear:{},nearest:{}},default:\"linear\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-fade-duration\":{type:\"number\",default:300,minimum:0,transition:!1,units:\"milliseconds\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_hillshade:{\"hillshade-illumination-direction\":{type:\"number\",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-exaggeration\":{type:\"number\",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-shadow-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-highlight-color\":{type:\"color\",default:\"#FFFFFF\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-accent-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_background:{\"background-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"background-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"background-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},transition:{duration:{type:\"number\",default:300,minimum:0,units:\"milliseconds\"},delay:{type:\"number\",default:0,minimum:0,units:\"milliseconds\"}},\"property-type\":{\"data-driven\":{type:\"property-type\"},\"cross-faded\":{type:\"property-type\"},\"cross-faded-data-driven\":{type:\"property-type\"},\"color-ramp\":{type:\"property-type\"},\"data-constant\":{type:\"property-type\"},constant:{type:\"property-type\"}}},Pt=function(t,e,r,n){this.message=(t?t+\": \":\"\")+r,n&&(this.identifier=n),null!=e&&e.__line__&&(this.line=e.__line__);};function Et(t){var e=t.key,r=t.value;return r?[new Pt(e,r,\"constants have been deprecated as of v8\")]:[]}function Mt(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n\":\"value\"===t.itemType.kind?\"array\":\"array<\"+e+\">\"}return t.kind}var Yt=[Dt,Rt,Ut,jt,qt,Zt,Nt,Jt(Kt),Gt];function $t(t,e){if(\"error\"===e.kind)return null;if(\"array\"===t.kind){if(\"array\"===e.kind&&(0===e.N&&\"value\"===e.itemType.kind||!$t(t.itemType,e.itemType))&&(\"number\"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if(\"value\"===t.kind)for(var r=0,n=Yt;r255?255:t}function i(t){return t<0?0:t>1?1:t}function a(t){return \"%\"===t[t.length-1]?n(parseFloat(t)/100*255):n(parseInt(t))}function o(t){return \"%\"===t[t.length-1]?i(parseFloat(t)/100):i(parseFloat(t))}function s(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor=function(t){var e,i=t.replace(/ /g,\"\").toLowerCase();if(i in r)return r[i].slice();if(\"#\"===i[0])return 4===i.length?(e=parseInt(i.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===i.length&&(e=parseInt(i.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var u=i.indexOf(\"(\"),l=i.indexOf(\")\");if(-1!==u&&l+1===i.length){var p=i.substr(0,u),c=i.substr(u+1,l-(u+1)).split(\",\"),h=1;switch(p){case\"rgba\":if(4!==c.length)return null;h=o(c.pop());case\"rgb\":return 3!==c.length?null:[a(c[0]),a(c[1]),a(c[2]),h];case\"hsla\":if(4!==c.length)return null;h=o(c.pop());case\"hsl\":if(3!==c.length)return null;var f=(parseFloat(c[0])%360+360)%360/360,y=o(c[1]),d=o(c[2]),m=d<=.5?d*(y+1):d+y-d*y,v=2*d-m;return [n(255*s(v,m,f+1/3)),n(255*s(v,m,f)),n(255*s(v,m,f-1/3)),h];default:return null}}return null};}catch(t){}})).parseCSSColor,Qt=function(t,e,r,n){void 0===n&&(n=1),this.r=t,this.g=e,this.b=r,this.a=n;};Qt.parse=function(t){if(t){if(t instanceof Qt)return t;if(\"string\"==typeof t){var e=Wt(t);if(e)return new Qt(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},Qt.prototype.toString=function(){var t=this.toArray(),e=t[0],r=t[1],n=t[2],i=t[3];return \"rgba(\"+Math.round(e)+\",\"+Math.round(r)+\",\"+Math.round(n)+\",\"+i+\")\"},Qt.prototype.toArray=function(){var t=this.r,e=this.g,r=this.b,n=this.a;return 0===n?[0,0,0,0]:[255*t/n,255*e/n,255*r/n,n]},Qt.black=new Qt(0,0,0,1),Qt.white=new Qt(1,1,1,1),Qt.transparent=new Qt(0,0,0,0),Qt.red=new Qt(1,0,0,1);var te=function(t,e,r){this.sensitivity=t?e?\"variant\":\"case\":e?\"accent\":\"base\",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:\"search\"});};te.prototype.compare=function(t,e){return this.collator.compare(t,e)},te.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var ee=function(t,e,r,n,i){this.text=t,this.image=e,this.scale=r,this.fontStack=n,this.textColor=i;},re=function(t){this.sections=t;};re.fromString=function(t){return new re([new ee(t,null,null,null,null)])},re.prototype.isEmpty=function(){return 0===this.sections.length||!this.sections.some((function(t){return 0!==t.text.length||t.image&&0!==t.image.name.length}))},re.factory=function(t){return t instanceof re?t:re.fromString(t)},re.prototype.toString=function(){return 0===this.sections.length?\"\":this.sections.map((function(t){return t.text})).join(\"\")},re.prototype.serialize=function(){for(var t=[\"format\"],e=0,r=this.sections;e=0&&t<=255&&\"number\"==typeof e&&e>=0&&e<=255&&\"number\"==typeof r&&r>=0&&r<=255?void 0===n||\"number\"==typeof n&&n>=0&&n<=1?null:\"Invalid rgba value [\"+[t,e,r,n].join(\", \")+\"]: 'a' must be between 0 and 1.\":\"Invalid rgba value [\"+(\"number\"==typeof n?[t,e,r,n]:[t,e,r]).join(\", \")+\"]: 'r', 'g', and 'b' must be between 0 and 255.\"}function ae(t){if(null===t)return Dt;if(\"string\"==typeof t)return Ut;if(\"boolean\"==typeof t)return jt;if(\"number\"==typeof t)return Rt;if(t instanceof Qt)return qt;if(t instanceof te)return Xt;if(t instanceof re)return Zt;if(t instanceof ne)return Gt;if(Array.isArray(t)){for(var e,r=t.length,n=0,i=t;n2){var s=t[1];if(\"string\"!=typeof s||!(s in le)||\"object\"===s)return e.error('The item type argument of \"array\" must be one of string, number, boolean',1);a=le[s],n++;}else a=Kt;if(t.length>3){if(null!==t[2]&&(\"number\"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to \"array\" must be a positive integer literal',2);o=t[2],n++;}r=Jt(a,o);}else r=le[i];for(var u=[];n1)&&e.push(n);}}return e.concat(this.args.map((function(t){return t.serialize()})))};var ce=function(t){this.type=Zt,this.sections=t;};ce.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var r=t[1];if(!Array.isArray(r)&&\"object\"==typeof r)return e.error(\"First argument must be an image or text section.\");for(var n=[],i=!1,a=1;a<=t.length-1;++a){var o=t[a];if(i&&\"object\"==typeof o&&!Array.isArray(o)){i=!1;var s=null;if(o[\"font-scale\"]&&!(s=e.parse(o[\"font-scale\"],1,Rt)))return null;var u=null;if(o[\"text-font\"]&&!(u=e.parse(o[\"text-font\"],1,Jt(Ut))))return null;var l=null;if(o[\"text-color\"]&&!(l=e.parse(o[\"text-color\"],1,qt)))return null;var p=n[n.length-1];p.scale=s,p.font=u,p.textColor=l;}else{var c=e.parse(t[a],1,Kt);if(!c)return null;var h=c.type.kind;if(\"string\"!==h&&\"value\"!==h&&\"null\"!==h&&\"resolvedImage\"!==h)return e.error(\"Formatted text type must be 'string', 'value', 'image' or 'null'.\");i=!0,n.push({content:c,scale:null,font:null,textColor:null});}}return new ce(n)},ce.prototype.evaluate=function(t){return new re(this.sections.map((function(e){var r=e.content.evaluate(t);return ae(r)===Gt?new ee(\"\",r,null,null,null):new ee(oe(r),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(\",\"):null,e.textColor?e.textColor.evaluate(t):null)})))},ce.prototype.eachChild=function(t){for(var e=0,r=this.sections;e-1&&(r=!0),new ne({name:e,available:r})},he.prototype.eachChild=function(t){t(this.input);},he.prototype.possibleOutputs=function(){return [void 0]},he.prototype.serialize=function(){return [\"image\",this.input.serialize()]};var fe={\"to-boolean\":jt,\"to-color\":qt,\"to-number\":Rt,\"to-string\":Ut},ye=function(t,e){this.type=t,this.args=e;};ye.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var r=t[0];if((\"to-boolean\"===r||\"to-string\"===r)&&2!==t.length)return e.error(\"Expected one argument.\");for(var n=fe[r],i=[],a=1;a4?\"Invalid rbga value \"+JSON.stringify(e)+\": expected an array containing either three or four numeric values.\":ie(e[0],e[1],e[2],e[3])))return new Qt(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new ue(r||\"Could not parse color from value '\"+(\"string\"==typeof e?e:String(JSON.stringify(e)))+\"'\")}if(\"number\"===this.type.kind){for(var o=null,s=0,u=this.args;s=0)return !1;var r=!0;return t.eachChild((function(t){r&&!_e(t,e)&&(r=!1);})),r}ge.parse=function(t,e){if(2!==t.length)return e.error(\"Expected one argument.\");var r=t[1];if(\"object\"!=typeof r||Array.isArray(r))return e.error(\"Collator options argument must be an object.\");var n=e.parse(void 0!==r[\"case-sensitive\"]&&r[\"case-sensitive\"],1,jt);if(!n)return null;var i=e.parse(void 0!==r[\"diacritic-sensitive\"]&&r[\"diacritic-sensitive\"],1,jt);if(!i)return null;var a=null;return r.locale&&!(a=e.parse(r.locale,1,Ut))?null:new ge(n,i,a)},ge.prototype.evaluate=function(t){return new te(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},ge.prototype.eachChild=function(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale&&t(this.locale);},ge.prototype.possibleOutputs=function(){return [void 0]},ge.prototype.serialize=function(){var t={};return t[\"case-sensitive\"]=this.caseSensitive.serialize(),t[\"diacritic-sensitive\"]=this.diacriticSensitive.serialize(),this.locale&&(t.locale=this.locale.serialize()),[\"collator\",t]};var we=function(t,e){this.type=e.type,this.name=t,this.boundExpression=e;};we.parse=function(t,e){if(2!==t.length||\"string\"!=typeof t[1])return e.error(\"'var' expression requires exactly one string literal argument.\");var r=t[1];return e.scope.has(r)?new we(r,e.scope.get(r)):e.error('Unknown variable \"'+r+'\". Make sure \"'+r+'\" has been bound in an enclosing \"let\" expression before using it.',1)},we.prototype.evaluate=function(t){return this.boundExpression.evaluate(t)},we.prototype.eachChild=function(){},we.prototype.possibleOutputs=function(){return [void 0]},we.prototype.serialize=function(){return [\"var\",this.name]};var Ae=function(t,e,r,n,i){void 0===e&&(e=[]),void 0===n&&(n=new Ot),void 0===i&&(i=[]),this.registry=t,this.path=e,this.key=e.map((function(t){return \"[\"+t+\"]\"})).join(\"\"),this.scope=n,this.errors=i,this.expectedType=r;};function Se(t,e){for(var r,n,i=t.length-1,a=0,o=i,s=0;a<=o;)if(r=t[s=Math.floor((a+o)/2)],n=t[s+1],r<=e){if(s===i||ee))throw new ue(\"Input is not a number.\");o=s-1;}return 0}Ae.prototype.parse=function(t,e,r,n,i){return void 0===i&&(i={}),e?this.concat(e,r,n)._parse(t,i):this._parse(t,i)},Ae.prototype._parse=function(t,e){function r(t,e,r){return \"assert\"===r?new pe(e,[t]):\"coerce\"===r?new ye(e,[t]):t}if(null!==t&&\"string\"!=typeof t&&\"boolean\"!=typeof t&&\"number\"!=typeof t||(t=[\"literal\",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].');var n=t[0];if(\"string\"!=typeof n)return this.error(\"Expression name must be a string, but found \"+typeof n+' instead. If you wanted a literal array, use [\"literal\", [...]].',0),null;var i=this.registry[n];if(i){var a=i.parse(t,this);if(!a)return null;if(this.expectedType){var o=this.expectedType,s=a.type;if(\"string\"!==o.kind&&\"number\"!==o.kind&&\"boolean\"!==o.kind&&\"object\"!==o.kind&&\"array\"!==o.kind||\"value\"!==s.kind)if(\"color\"!==o.kind&&\"formatted\"!==o.kind&&\"resolvedImage\"!==o.kind||\"value\"!==s.kind&&\"string\"!==s.kind){if(this.checkSubtype(o,s))return null}else a=r(a,o,e.typeAnnotation||\"coerce\");else a=r(a,o,e.typeAnnotation||\"assert\");}if(!(a instanceof se)&&\"resolvedImage\"!==a.type.kind&&function t(e){if(e instanceof we)return t(e.boundExpression);if(e instanceof ve&&\"error\"===e.name)return !1;if(e instanceof ge)return !1;var r=e instanceof ye||e instanceof pe;var n=!0;e.eachChild((function(e){n=r?n&&t(e):n&&e instanceof se;}));if(!n)return !1;return xe(e)&&_e(e,[\"zoom\",\"heatmap-density\",\"line-progress\",\"accumulated\",\"is-supported-script\"])}(a)){var u=new me;try{a=new se(a.type,a.evaluate(u));}catch(t){return this.error(t.message),null}}return a}return this.error('Unknown expression \"'+n+'\". If you wanted a literal array, use [\"literal\", [...]].',0)}return void 0===t?this.error(\"'undefined' value invalid. Use null instead.\"):\"object\"==typeof t?this.error('Bare objects invalid. Use [\"literal\", {...}] instead.'):this.error(\"Expected an array, but found \"+typeof t+\" instead.\")},Ae.prototype.concat=function(t,e,r){var n=\"number\"==typeof t?this.path.concat(t):this.path,i=r?this.scope.concat(r):this.scope;return new Ae(this.registry,n,e||null,i,this.errors)},Ae.prototype.error=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];var n=\"\"+this.key+e.map((function(t){return \"[\"+t+\"]\"})).join(\"\");this.errors.push(new Lt(n,t));},Ae.prototype.checkSubtype=function(t,e){var r=$t(t,e);return r&&this.error(r),r};var ke=function(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var n=0,i=r;n=o)return e.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.',u);var p=e.parse(s,l,i);if(!p)return null;i=i||p.type,n.push([o,p]);}return new ke(i,r,n)},ke.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;return n>=e[i-1]?r[i-1].evaluate(t):r[Se(e,n)].evaluate(t)},ke.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var ze=Object.freeze({__proto__:null,number:Ie,color:function(t,e,r){return new Qt(Ie(t.r,e.r,r),Ie(t.g,e.g,r),Ie(t.b,e.b,r),Ie(t.a,e.a,r))},array:function(t,e,r){return t.map((function(t,n){return Ie(t,e[n],r)}))}}),Ce=.95047,Be=1,Te=1.08883,Pe=4/29,Ee=6/29,Me=3*Ee*Ee,Ve=Ee*Ee*Ee,Fe=Math.PI/180,Le=180/Math.PI;function Oe(t){return t>Ve?Math.pow(t,1/3):t/Me+Pe}function De(t){return t>Ee?t*t*t:Me*(t-Pe)}function Re(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Ue(t){return (t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function je(t){var e=Ue(t.r),r=Ue(t.g),n=Ue(t.b),i=Oe((.4124564*e+.3575761*r+.1804375*n)/Ce),a=Oe((.2126729*e+.7151522*r+.072175*n)/Be);return {l:116*a-16,a:500*(i-a),b:200*(a-Oe((.0193339*e+.119192*r+.9503041*n)/Te)),alpha:t.a}}function qe(t){var e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=Be*De(e),r=Ce*De(r),n=Te*De(n),new Qt(Re(3.2404542*r-1.5371385*e-.4985314*n),Re(-.969266*r+1.8760108*e+.041556*n),Re(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}function Ne(t,e,r){var n=e-t;return t+r*(n>180||n<-180?n-360*Math.round(n/360):n)}var Ke={forward:je,reverse:qe,interpolate:function(t,e,r){return {l:Ie(t.l,e.l,r),a:Ie(t.a,e.a,r),b:Ie(t.b,e.b,r),alpha:Ie(t.alpha,e.alpha,r)}}},Xe={forward:function(t){var e=je(t),r=e.l,n=e.a,i=e.b,a=Math.atan2(i,n)*Le;return {h:a<0?a+360:a,c:Math.sqrt(n*n+i*i),l:r,alpha:t.a}},reverse:function(t){var e=t.h*Fe,r=t.c;return qe({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return {h:Ne(t.h,e.h,r),c:Ie(t.c,e.c,r),l:Ie(t.l,e.l,r),alpha:Ie(t.alpha,e.alpha,r)}}},Ze=Object.freeze({__proto__:null,lab:Ke,hcl:Xe}),Ge=function(t,e,r,n,i){this.type=t,this.operator=e,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(var a=0,o=i;a1})))return e.error(\"Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.\",1);n={name:\"cubic-bezier\",controlPoints:s};}if(t.length-1<4)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if((t.length-1)%2!=0)return e.error(\"Expected an even number of arguments.\");if(!(i=e.parse(i,2,Rt)))return null;var u=[],l=null;\"interpolate-hcl\"===r||\"interpolate-lab\"===r?l=qt:e.expectedType&&\"value\"!==e.expectedType.kind&&(l=e.expectedType);for(var p=0;p=c)return e.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.',f);var d=e.parse(h,y,l);if(!d)return null;l=l||d.type,u.push([c,d]);}return \"number\"===l.kind||\"color\"===l.kind||\"array\"===l.kind&&\"number\"===l.itemType.kind&&\"number\"==typeof l.N?new Ge(l,r,n,i,u):e.error(\"Type \"+Ht(l)+\" is not interpolatable.\")},Ge.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;if(n>=e[i-1])return r[i-1].evaluate(t);var a=Se(e,n),o=e[a],s=e[a+1],u=Ge.interpolationFactor(this.interpolation,n,o,s),l=r[a].evaluate(t),p=r[a+1].evaluate(t);return \"interpolate\"===this.operator?ze[this.type.kind.toLowerCase()](l,p,u):\"interpolate-hcl\"===this.operator?Xe.reverse(Xe.interpolate(Xe.forward(l),Xe.forward(p),u)):Ke.reverse(Ke.interpolate(Ke.forward(l),Ke.forward(p),u))},Ge.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e=r.length)throw new ue(\"Array index out of bounds: \"+e+\" > \"+(r.length-1)+\".\");if(e!==Math.floor(e))throw new ue(\"Array index must be an integer, but found \"+e+\" instead.\");return r[e]},$e.prototype.eachChild=function(t){t(this.index),t(this.input);},$e.prototype.possibleOutputs=function(){return [void 0]},$e.prototype.serialize=function(){return [\"at\",this.index.serialize(),this.input.serialize()]};var We=function(t,e){this.type=jt,this.needle=t,this.haystack=e;};We.parse=function(t,e){if(3!==t.length)return e.error(\"Expected 2 arguments, but found \"+(t.length-1)+\" instead.\");var r,n=e.parse(t[1],1,Kt),i=e.parse(t[2],2,Kt);return n&&i?\"boolean\"!==(r=n.type).kind&&\"string\"!==r.kind&&\"number\"!==r.kind&&\"null\"!==r.kind&&\"value\"!==r.kind?e.error(\"Expected first argument to be of type boolean, string, number or null, but found \"+Ht(n.type)+\" instead\"):new We(n,i):null},We.prototype.evaluate=function(t){var e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!e||!r)return !1;if(!function(t){return \"boolean\"==typeof t||\"string\"==typeof t||\"number\"==typeof t}(e))throw new ue(\"Expected first argument to be of type boolean, string or number, but found \"+Ht(ae(e))+\" instead.\");if(!function(t){return Array.isArray(t)||\"string\"==typeof t}(r))throw new ue(\"Expected second argument to be of type array or string, but found \"+Ht(ae(r))+\" instead.\");return r.indexOf(e)>=0},We.prototype.eachChild=function(t){t(this.needle),t(this.haystack);},We.prototype.possibleOutputs=function(){return [!0,!1]},We.prototype.serialize=function(){return [\"in\",this.needle.serialize(),this.haystack.serialize()]};var Qe=function(t,e,r,n,i,a){this.inputType=t,this.type=e,this.input=r,this.cases=n,this.outputs=i,this.otherwise=a;};Qe.parse=function(t,e){if(t.length<5)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if(t.length%2!=1)return e.error(\"Expected an even number of arguments.\");var r,n;e.expectedType&&\"value\"!==e.expectedType.kind&&(n=e.expectedType);for(var i={},a=[],o=2;oNumber.MAX_SAFE_INTEGER)return l.error(\"Branch labels must be integers no larger than \"+Number.MAX_SAFE_INTEGER+\".\");if(\"number\"==typeof h&&Math.floor(h)!==h)return l.error(\"Numeric branch labels must be integer values.\");if(r){if(l.checkSubtype(r,ae(h)))return null}else r=ae(h);if(void 0!==i[String(h)])return l.error(\"Branch labels must be unique.\");i[String(h)]=a.length;}var f=e.parse(u,o,n);if(!f)return null;n=n||f.type,a.push(f);}var y=e.parse(t[1],1,Kt);if(!y)return null;var d=e.parse(t[t.length-1],t.length-1,n);return d?\"value\"!==y.type.kind&&e.concat(1).checkSubtype(r,y.type)?null:new Qe(r,n,y,i,a,d):null},Qe.prototype.evaluate=function(t){var e=this.input.evaluate(t);return (ae(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},Qe.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise);},Qe.prototype.possibleOutputs=function(){var t;return (t=[]).concat.apply(t,this.outputs.map((function(t){return t.possibleOutputs()}))).concat(this.otherwise.possibleOutputs())},Qe.prototype.serialize=function(){for(var t=this,e=[\"match\",this.input.serialize()],r=[],n={},i=0,a=Object.keys(this.cases).sort();i\",(function(t,e,r){return e>r}),(function(t,e,r,n){return n.compare(e,r)>0})),ur=nr(\"<=\",(function(t,e,r){return e<=r}),(function(t,e,r,n){return n.compare(e,r)<=0})),lr=nr(\">=\",(function(t,e,r){return e>=r}),(function(t,e,r,n){return n.compare(e,r)>=0})),pr=function(t,e,r,n,i){this.type=Ut,this.number=t,this.locale=e,this.currency=r,this.minFractionDigits=n,this.maxFractionDigits=i;};pr.parse=function(t,e){if(3!==t.length)return e.error(\"Expected two arguments.\");var r=e.parse(t[1],1,Rt);if(!r)return null;var n=t[2];if(\"object\"!=typeof n||Array.isArray(n))return e.error(\"NumberFormat options argument must be an object.\");var i=null;if(n.locale&&!(i=e.parse(n.locale,1,Ut)))return null;var a=null;if(n.currency&&!(a=e.parse(n.currency,1,Ut)))return null;var o=null;if(n[\"min-fraction-digits\"]&&!(o=e.parse(n[\"min-fraction-digits\"],1,Rt)))return null;var s=null;return n[\"max-fraction-digits\"]&&!(s=e.parse(n[\"max-fraction-digits\"],1,Rt))?null:new pr(r,i,a,o,s)},pr.prototype.evaluate=function(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?\"currency\":\"decimal\",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},pr.prototype.eachChild=function(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits);},pr.prototype.possibleOutputs=function(){return [void 0]},pr.prototype.serialize=function(){var t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.minFractionDigits&&(t[\"min-fraction-digits\"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t[\"max-fraction-digits\"]=this.maxFractionDigits.serialize()),[\"number-format\",this.number.serialize(),t]};var cr=function(t){this.type=Rt,this.input=t;};cr.parse=function(t,e){if(2!==t.length)return e.error(\"Expected 1 argument, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1);return r?\"array\"!==r.type.kind&&\"string\"!==r.type.kind&&\"value\"!==r.type.kind?e.error(\"Expected argument of type string or array, but found \"+Ht(r.type)+\" instead.\"):new cr(r):null},cr.prototype.evaluate=function(t){var e=this.input.evaluate(t);if(\"string\"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new ue(\"Expected value to be of type string or array, but found \"+Ht(ae(e))+\" instead.\")},cr.prototype.eachChild=function(t){t(this.input);},cr.prototype.possibleOutputs=function(){return [void 0]},cr.prototype.serialize=function(){var t=[\"length\"];return this.eachChild((function(e){t.push(e.serialize());})),t};var hr={\"==\":ir,\"!=\":ar,\">\":sr,\"<\":or,\">=\":lr,\"<=\":ur,array:pe,at:$e,boolean:pe,case:tr,coalesce:He,collator:ge,format:ce,image:he,in:We,interpolate:Ge,\"interpolate-hcl\":Ge,\"interpolate-lab\":Ge,length:cr,let:Ye,literal:se,match:Qe,number:pe,\"number-format\":pr,object:pe,step:ke,string:pe,\"to-boolean\":ye,\"to-color\":ye,\"to-number\":ye,\"to-string\":ye,var:we};function fr(t,e){var r=e[0],n=e[1],i=e[2],a=e[3];r=r.evaluate(t),n=n.evaluate(t),i=i.evaluate(t);var o=a?a.evaluate(t):1,s=ie(r,n,i,o);if(s)throw new ue(s);return new Qt(r/255*o,n/255*o,i/255*o,o)}function yr(t,e){return t in e}function dr(t,e){var r=e[t];return void 0===r?null:r}function mr(t){return {type:t}}function vr(t){return {result:\"success\",value:t}}function gr(t){return {result:\"error\",value:t}}function xr(t){return \"data-driven\"===t[\"property-type\"]||\"cross-faded-data-driven\"===t[\"property-type\"]}function br(t){return !!t.expression&&t.expression.parameters.indexOf(\"zoom\")>-1}function _r(t){return !!t.expression&&t.expression.interpolated}function wr(t){return t instanceof Number?\"number\":t instanceof String?\"string\":t instanceof Boolean?\"boolean\":Array.isArray(t)?\"array\":null===t?\"null\":typeof t}function Ar(t){return \"object\"==typeof t&&null!==t&&!Array.isArray(t)}function Sr(t){return t}function kr(t,e,r){return void 0!==t?t:void 0!==e?e:void 0!==r?r:void 0}function Ir(t,e,r,n,i){return kr(typeof r===i?n[r]:void 0,t.default,e.default)}function zr(t,e,r){if(\"number\"!==wr(r))return kr(t.default,e.default);var n=t.stops.length;if(1===n)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];var i=Se(t.stops.map((function(t){return t[0]})),r);return t.stops[i][1]}function Cr(t,e,r){var n=void 0!==t.base?t.base:1;if(\"number\"!==wr(r))return kr(t.default,e.default);var i=t.stops.length;if(1===i)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[i-1][0])return t.stops[i-1][1];var a=Se(t.stops.map((function(t){return t[0]})),r),o=function(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}(r,n,t.stops[a][0],t.stops[a+1][0]),s=t.stops[a][1],u=t.stops[a+1][1],l=ze[e.type]||Sr;if(t.colorSpace&&\"rgb\"!==t.colorSpace){var p=Ze[t.colorSpace];l=function(t,e){return p.reverse(p.interpolate(p.forward(t),p.forward(e),o))};}return \"function\"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=s.evaluate.apply(void 0,t),n=u.evaluate.apply(void 0,t);if(void 0!==r&&void 0!==n)return l(r,n,o)}}:l(s,u,o)}function Br(t,e,r){return \"color\"===e.type?r=Qt.parse(r):\"formatted\"===e.type?r=re.fromString(r.toString()):\"resolvedImage\"===e.type?r=ne.fromString(r.toString()):wr(r)===e.type||\"enum\"===e.type&&e.values[r]||(r=void 0),kr(r,t.default,e.default)}ve.register(hr,{error:[{kind:\"error\"},[Ut],function(t,e){var r=e[0];throw new ue(r.evaluate(t))}],typeof:[Ut,[Kt],function(t,e){return Ht(ae(e[0].evaluate(t)))}],\"to-rgba\":[Jt(Rt,4),[qt],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[qt,[Rt,Rt,Rt],fr],rgba:[qt,[Rt,Rt,Rt,Rt],fr],has:{type:jt,overloads:[[[Ut],function(t,e){return yr(e[0].evaluate(t),t.properties())}],[[Ut,Nt],function(t,e){var r=e[0],n=e[1];return yr(r.evaluate(t),n.evaluate(t))}]]},get:{type:Kt,overloads:[[[Ut],function(t,e){return dr(e[0].evaluate(t),t.properties())}],[[Ut,Nt],function(t,e){var r=e[0],n=e[1];return dr(r.evaluate(t),n.evaluate(t))}]]},\"feature-state\":[Kt,[Ut],function(t,e){return dr(e[0].evaluate(t),t.featureState||{})}],properties:[Nt,[],function(t){return t.properties()}],\"geometry-type\":[Ut,[],function(t){return t.geometryType()}],id:[Kt,[],function(t){return t.id()}],zoom:[Rt,[],function(t){return t.globals.zoom}],\"heatmap-density\":[Rt,[],function(t){return t.globals.heatmapDensity||0}],\"line-progress\":[Rt,[],function(t){return t.globals.lineProgress||0}],accumulated:[Kt,[],function(t){return void 0===t.globals.accumulated?null:t.globals.accumulated}],\"+\":[Rt,mr(Rt),function(t,e){for(var r=0,n=0,i=e;n\":[jt,[Ut,Kt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>a}],\"filter-id->\":[jt,[Kt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>i}],\"filter-<=\":[jt,[Ut,Kt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<=a}],\"filter-id-<=\":[jt,[Kt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<=i}],\"filter->=\":[jt,[Ut,Kt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>=a}],\"filter-id->=\":[jt,[Kt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>=i}],\"filter-has\":[jt,[Kt],function(t,e){return e[0].value in t.properties()}],\"filter-has-id\":[jt,[],function(t){return null!==t.id()}],\"filter-type-in\":[jt,[Jt(Ut)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],\"filter-id-in\":[jt,[Jt(Kt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],\"filter-in-small\":[jt,[Ut,Jt(Kt)],function(t,e){var r=e[0];return e[1].value.indexOf(t.properties()[r.value])>=0}],\"filter-in-large\":[jt,[Ut,Jt(Kt)],function(t,e){var r=e[0],n=e[1];return function(t,e,r,n){for(;r<=n;){var i=r+n>>1;if(e[i]===t)return !0;e[i]>t?n=i-1:r=i+1;}return !1}(t.properties()[r.value],n.value,0,n.value.length-1)}],all:{type:jt,overloads:[[[jt,jt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)&&n.evaluate(t)}],[mr(jt),function(t,e){for(var r=0,n=e;r0&&\"string\"==typeof t[0]&&t[0]in hr}function Er(t,e){var r=new Ae(hr,[],e?function(t){var e={color:qt,string:Ut,number:Rt,enum:Ut,boolean:jt,formatted:Zt,resolvedImage:Gt};if(\"array\"===t.type)return Jt(e[t.value]||Kt,t.length);return e[t.type]}(e):void 0),n=r.parse(t,void 0,void 0,void 0,e&&\"string\"===e.type?{typeAnnotation:\"coerce\"}:void 0);return n?vr(new Tr(n,e)):gr(r.errors)}Tr.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this._evaluator.availableImages=n||null,this._evaluator.formattedSection=i,this.expression.evaluate(this._evaluator)},Tr.prototype.evaluate=function(t,e,r,n,i){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null,this._evaluator.availableImages=n||null,this._evaluator.formattedSection=i||null;try{var a=this.expression.evaluate(this._evaluator);if(null==a||\"number\"==typeof a&&a!=a)return this._defaultValue;if(this._enumValues&&!(a in this._enumValues))throw new ue(\"Expected value to be one of \"+Object.keys(this._enumValues).map((function(t){return JSON.stringify(t)})).join(\", \")+\", but found \"+JSON.stringify(a)+\" instead.\");return a}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,\"undefined\"!=typeof console&&console.warn(t.message)),this._defaultValue}};var Mr=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent=\"constant\"!==t&&!be(e.expression);};Mr.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i)},Mr.prototype.evaluate=function(t,e,r,n,i){return this._styleExpression.evaluate(t,e,r,n,i)};var Vr=function(t,e,r,n){this.kind=t,this.zoomStops=r,this._styleExpression=e,this.isStateDependent=\"camera\"!==t&&!be(e.expression),this.interpolationType=n;};function Fr(t,e){if(\"error\"===(t=Er(t,e)).result)return t;var r=t.value.expression,n=xe(r);if(!n&&!xr(e))return gr([new Lt(\"\",\"data expressions not supported\")]);var i=_e(r,[\"zoom\"]);if(!i&&!br(e))return gr([new Lt(\"\",\"zoom expressions not supported\")]);var a=function t(e){var r=null;if(e instanceof Ye)r=t(e.result);else if(e instanceof He)for(var n=0,i=e.args;nn.maximum?[new Pt(e,r,r+\" is greater than the maximum value \"+n.maximum)]:[]}function Ur(t){var e,r,n,i=t.valueSpec,a=Vt(t.value.type),o={},s=\"categorical\"!==a&&void 0===t.value.property,u=!s,l=\"array\"===wr(t.value.stops)&&\"array\"===wr(t.value.stops[0])&&\"object\"===wr(t.value.stops[0][0]),p=Or({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if(\"identity\"===a)return [new Pt(t.key,t.value,'identity function may not have a \"stops\" property')];var e=[],r=t.value;e=e.concat(Dr({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:c})),\"array\"===wr(r)&&0===r.length&&e.push(new Pt(t.key,r,\"array must have at least one stop\"));return e},default:function(t){return un({key:t.key,value:t.value,valueSpec:i,style:t.style,styleSpec:t.styleSpec})}}});return \"identity\"===a&&s&&p.push(new Pt(t.key,t.value,'missing required property \"property\"')),\"identity\"===a||t.value.stops||p.push(new Pt(t.key,t.value,'missing required property \"stops\"')),\"exponential\"===a&&t.valueSpec.expression&&!_r(t.valueSpec)&&p.push(new Pt(t.key,t.value,\"exponential functions not supported\")),t.styleSpec.$version>=8&&(u&&!xr(t.valueSpec)?p.push(new Pt(t.key,t.value,\"property functions not supported\")):s&&!br(t.valueSpec)&&p.push(new Pt(t.key,t.value,\"zoom functions not supported\"))),\"categorical\"!==a&&!l||void 0!==t.value.property||p.push(new Pt(t.key,t.value,'\"property\" property is required')),p;function c(t){var e=[],a=t.value,s=t.key;if(\"array\"!==wr(a))return [new Pt(s,a,\"array expected, \"+wr(a)+\" found\")];if(2!==a.length)return [new Pt(s,a,\"array length 2 expected, length \"+a.length+\" found\")];if(l){if(\"object\"!==wr(a[0]))return [new Pt(s,a,\"object expected, \"+wr(a[0])+\" found\")];if(void 0===a[0].zoom)return [new Pt(s,a,\"object stop key must have zoom\")];if(void 0===a[0].value)return [new Pt(s,a,\"object stop key must have value\")];if(n&&n>Vt(a[0].zoom))return [new Pt(s,a[0].zoom,\"stop zoom values must appear in ascending order\")];Vt(a[0].zoom)!==n&&(n=Vt(a[0].zoom),r=void 0,o={}),e=e.concat(Or({key:s+\"[0]\",value:a[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:Rr,value:h}}));}else e=e.concat(h({key:s+\"[0]\",value:a[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},a));return Pr(Ft(a[1]))?e.concat([new Pt(s+\"[1]\",a[1],\"expressions are not allowed in function stops.\")]):e.concat(un({key:s+\"[1]\",value:a[1],valueSpec:i,style:t.style,styleSpec:t.styleSpec}))}function h(t,n){var s=wr(t.value),u=Vt(t.value),l=null!==t.value?t.value:n;if(e){if(s!==e)return [new Pt(t.key,l,s+\" stop domain type must match previous stop domain type \"+e)]}else e=s;if(\"number\"!==s&&\"string\"!==s&&\"boolean\"!==s)return [new Pt(t.key,l,\"stop domain value must be a number, string, or boolean\")];if(\"number\"!==s&&\"categorical\"!==a){var p=\"number expected, \"+s+\" found\";return xr(i)&&void 0===a&&(p+='\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.'),[new Pt(t.key,l,p)]}return \"categorical\"!==a||\"number\"!==s||isFinite(u)&&Math.floor(u)===u?\"categorical\"!==a&&\"number\"===s&&void 0!==r&&u=2&&\"$id\"!==t[1]&&\"$type\"!==t[1];case\"in\":return t.length>=3&&Array.isArray(t[2]);case\"!in\":case\"!has\":case\"none\":return !1;case\"==\":case\"!=\":case\">\":case\">=\":case\"<\":case\"<=\":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case\"any\":case\"all\":for(var e=0,r=t.slice(1);ee?1:0}function Gr(t){if(!t)return !0;var e,r=t[0];return t.length<=1?\"any\"!==r:\"==\"===r?Jr(t[1],t[2],\"==\"):\"!=\"===r?$r(Jr(t[1],t[2],\"==\")):\"<\"===r||\">\"===r||\"<=\"===r||\">=\"===r?Jr(t[1],t[2],r):\"any\"===r?(e=t.slice(1),[\"any\"].concat(e.map(Gr))):\"all\"===r?[\"all\"].concat(t.slice(1).map(Gr)):\"none\"===r?[\"all\"].concat(t.slice(1).map(Gr).map($r)):\"in\"===r?Hr(t[1],t.slice(2)):\"!in\"===r?$r(Hr(t[1],t.slice(2))):\"has\"===r?Yr(t[1]):\"!has\"!==r||$r(Yr(t[1]))}function Jr(t,e,r){switch(t){case\"$type\":return [\"filter-type-\"+r,e];case\"$id\":return [\"filter-id-\"+r,e];default:return [\"filter-\"+r,t,e]}}function Hr(t,e){if(0===e.length)return !1;switch(t){case\"$type\":return [\"filter-type-in\",[\"literal\",e]];case\"$id\":return [\"filter-id-in\",[\"literal\",e]];default:return e.length>200&&!e.some((function(t){return typeof t!=typeof e[0]}))?[\"filter-in-large\",t,[\"literal\",e.sort(Zr)]]:[\"filter-in-small\",t,[\"literal\",e]]}}function Yr(t){switch(t){case\"$type\":return !0;case\"$id\":return [\"filter-has-id\"];default:return [\"filter-has\",t]}}function $r(t){return [\"!\",t]}function Wr(t){return Nr(Ft(t.value))?jr(Mt({},t,{expressionContext:\"filter\",valueSpec:{value:\"boolean\"}})):function t(e){var r=e.value;var n=e.key;if(\"array\"!==wr(r))return [new Pt(n,r,\"array expected, \"+wr(r)+\" found\")];var i=e.styleSpec;var a;var o=[];if(r.length<1)return [new Pt(n,r,\"filter array must have at least 1 element\")];o=o.concat(qr({key:n+\"[0]\",value:r[0],valueSpec:i.filter_operator,style:e.style,styleSpec:e.styleSpec}));switch(Vt(r[0])){case\"<\":case\"<=\":case\">\":case\">=\":r.length>=2&&\"$type\"===Vt(r[1])&&o.push(new Pt(n,r,'\"$type\" cannot be use with operator \"'+r[0]+'\"'));case\"==\":case\"!=\":3!==r.length&&o.push(new Pt(n,r,'filter array for operator \"'+r[0]+'\" must have 3 elements'));case\"in\":case\"!in\":r.length>=2&&\"string\"!==(a=wr(r[1]))&&o.push(new Pt(n+\"[1]\",r[1],\"string expected, \"+a+\" found\"));for(var s=2;s=p[f+0]&&n>=p[f+1])?(o[h]=!0,a.push(l[h])):o[h]=!1;}}},bn.prototype._forEachCell=function(t,e,r,n,i,a,o,s){for(var u=this._convertToCellCoord(t),l=this._convertToCellCoord(e),p=this._convertToCellCoord(r),c=this._convertToCellCoord(n),h=u;h<=p;h++)for(var f=l;f<=c;f++){var y=this.d*f+h;if((!s||s(this._convertFromCellCoord(h),this._convertFromCellCoord(f),this._convertFromCellCoord(h+1),this._convertFromCellCoord(f+1)))&&i.call(this,t,e,r,n,y,a,o,s))return}},bn.prototype._convertFromCellCoord=function(t){return (t-this.padding)/this.scale},bn.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},bn.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=xn+this.cells.length+1+1,r=0,n=0;n=0)){var c=t[p];l[p]=wn[u].shallow.indexOf(p)>=0?c:In(c,e);}t instanceof Error&&(l.message=t.message);}if(l.$name)throw new Error(\"$name property is reserved for worker serialization logic.\");return \"Object\"!==u&&(l.$name=u),l}throw new Error(\"can't serialize object of type \"+typeof t)}function zn(t){if(null==t||\"boolean\"==typeof t||\"number\"==typeof t||\"string\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||kn(t)||ArrayBuffer.isView(t)||t instanceof _n)return t;if(Array.isArray(t))return t.map(zn);if(\"object\"==typeof t){var e=t.$name||\"Object\",r=wn[e].klass;if(!r)throw new Error(\"can't deserialize unregistered class \"+e);if(r.deserialize)return r.deserialize(t);for(var n=Object.create(r.prototype),i=0,a=Object.keys(t);i=0?s:zn(s);}}return n}throw new Error(\"can't deserialize object of type \"+typeof t)}var Cn=function(){this.first=!0;};Cn.prototype.update=function(t,e){var r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},\"Arabic Supplement\":function(t){return t>=1872&&t<=1919},\"Arabic Extended-A\":function(t){return t>=2208&&t<=2303},\"Hangul Jamo\":function(t){return t>=4352&&t<=4607},\"Unified Canadian Aboriginal Syllabics\":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},\"Unified Canadian Aboriginal Syllabics Extended\":function(t){return t>=6320&&t<=6399},\"General Punctuation\":function(t){return t>=8192&&t<=8303},\"Letterlike Symbols\":function(t){return t>=8448&&t<=8527},\"Number Forms\":function(t){return t>=8528&&t<=8591},\"Miscellaneous Technical\":function(t){return t>=8960&&t<=9215},\"Control Pictures\":function(t){return t>=9216&&t<=9279},\"Optical Character Recognition\":function(t){return t>=9280&&t<=9311},\"Enclosed Alphanumerics\":function(t){return t>=9312&&t<=9471},\"Geometric Shapes\":function(t){return t>=9632&&t<=9727},\"Miscellaneous Symbols\":function(t){return t>=9728&&t<=9983},\"Miscellaneous Symbols and Arrows\":function(t){return t>=11008&&t<=11263},\"CJK Radicals Supplement\":function(t){return t>=11904&&t<=12031},\"Kangxi Radicals\":function(t){return t>=12032&&t<=12255},\"Ideographic Description Characters\":function(t){return t>=12272&&t<=12287},\"CJK Symbols and Punctuation\":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},\"Hangul Compatibility Jamo\":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},\"Bopomofo Extended\":function(t){return t>=12704&&t<=12735},\"CJK Strokes\":function(t){return t>=12736&&t<=12783},\"Katakana Phonetic Extensions\":function(t){return t>=12784&&t<=12799},\"Enclosed CJK Letters and Months\":function(t){return t>=12800&&t<=13055},\"CJK Compatibility\":function(t){return t>=13056&&t<=13311},\"CJK Unified Ideographs Extension A\":function(t){return t>=13312&&t<=19903},\"Yijing Hexagram Symbols\":function(t){return t>=19904&&t<=19967},\"CJK Unified Ideographs\":function(t){return t>=19968&&t<=40959},\"Yi Syllables\":function(t){return t>=40960&&t<=42127},\"Yi Radicals\":function(t){return t>=42128&&t<=42191},\"Hangul Jamo Extended-A\":function(t){return t>=43360&&t<=43391},\"Hangul Syllables\":function(t){return t>=44032&&t<=55215},\"Hangul Jamo Extended-B\":function(t){return t>=55216&&t<=55295},\"Private Use Area\":function(t){return t>=57344&&t<=63743},\"CJK Compatibility Ideographs\":function(t){return t>=63744&&t<=64255},\"Arabic Presentation Forms-A\":function(t){return t>=64336&&t<=65023},\"Vertical Forms\":function(t){return t>=65040&&t<=65055},\"CJK Compatibility Forms\":function(t){return t>=65072&&t<=65103},\"Small Form Variants\":function(t){return t>=65104&&t<=65135},\"Arabic Presentation Forms-B\":function(t){return t>=65136&&t<=65279},\"Halfwidth and Fullwidth Forms\":function(t){return t>=65280&&t<=65519}};function Tn(t){for(var e=0,r=t;e=65097&&t<=65103)||(!!Bn[\"CJK Compatibility Ideographs\"](t)||(!!Bn[\"CJK Compatibility\"](t)||(!!Bn[\"CJK Radicals Supplement\"](t)||(!!Bn[\"CJK Strokes\"](t)||(!(!Bn[\"CJK Symbols and Punctuation\"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||(!!Bn[\"CJK Unified Ideographs Extension A\"](t)||(!!Bn[\"CJK Unified Ideographs\"](t)||(!!Bn[\"Enclosed CJK Letters and Months\"](t)||(!!Bn[\"Hangul Compatibility Jamo\"](t)||(!!Bn[\"Hangul Jamo Extended-A\"](t)||(!!Bn[\"Hangul Jamo Extended-B\"](t)||(!!Bn[\"Hangul Jamo\"](t)||(!!Bn[\"Hangul Syllables\"](t)||(!!Bn.Hiragana(t)||(!!Bn[\"Ideographic Description Characters\"](t)||(!!Bn.Kanbun(t)||(!!Bn[\"Kangxi Radicals\"](t)||(!!Bn[\"Katakana Phonetic Extensions\"](t)||(!(!Bn.Katakana(t)||12540===t)||(!(!Bn[\"Halfwidth and Fullwidth Forms\"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||(!(!Bn[\"Small Form Variants\"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||(!!Bn[\"Unified Canadian Aboriginal Syllabics\"](t)||(!!Bn[\"Unified Canadian Aboriginal Syllabics Extended\"](t)||(!!Bn[\"Vertical Forms\"](t)||(!!Bn[\"Yijing Hexagram Symbols\"](t)||(!!Bn[\"Yi Syllables\"](t)||!!Bn[\"Yi Radicals\"](t))))))))))))))))))))))))))))))}function Mn(t){return !(En(t)||function(t){return !(!Bn[\"Latin-1 Supplement\"](t)||167!==t&&169!==t&&174!==t&&177!==t&&188!==t&&189!==t&&190!==t&&215!==t&&247!==t)||(!(!Bn[\"General Punctuation\"](t)||8214!==t&&8224!==t&&8225!==t&&8240!==t&&8241!==t&&8251!==t&&8252!==t&&8258!==t&&8263!==t&&8264!==t&&8265!==t&&8273!==t)||(!!Bn[\"Letterlike Symbols\"](t)||(!!Bn[\"Number Forms\"](t)||(!(!Bn[\"Miscellaneous Technical\"](t)||!(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215))||(!(!Bn[\"Control Pictures\"](t)||9251===t)||(!!Bn[\"Optical Character Recognition\"](t)||(!!Bn[\"Enclosed Alphanumerics\"](t)||(!!Bn[\"Geometric Shapes\"](t)||(!(!Bn[\"Miscellaneous Symbols\"](t)||t>=9754&&t<=9759)||(!(!Bn[\"Miscellaneous Symbols and Arrows\"](t)||!(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243))||(!!Bn[\"CJK Symbols and Punctuation\"](t)||(!!Bn.Katakana(t)||(!!Bn[\"Private Use Area\"](t)||(!!Bn[\"CJK Compatibility Forms\"](t)||(!!Bn[\"Small Form Variants\"](t)||(!!Bn[\"Halfwidth and Fullwidth Forms\"](t)||(8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)))))))))))))))))}(t))}function Vn(t){return t>=1424&&t<=2303||Bn[\"Arabic Presentation Forms-A\"](t)||Bn[\"Arabic Presentation Forms-B\"](t)}function Fn(t,e){return !(!e&&Vn(t))&&!(t>=2304&&t<=3583||t>=3840&&t<=4255||Bn.Khmer(t))}function Ln(t){for(var e=0,r=t;ethis.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}};var Yn=function(t,e){this.property=t,this.value=e,this.expression=function(t,e){if(Ar(t))return new Lr(t,e);if(Pr(t)){var r=Fr(t,e);if(\"error\"===r.result)throw new Error(r.value.map((function(t){return t.key+\": \"+t.message})).join(\", \"));return r.value}var n=t;return \"string\"==typeof t&&\"color\"===e.type&&(n=Qt.parse(t)),{kind:\"constant\",evaluate:function(){return n}}}(void 0===e?t.specification.default:e,t.specification);};Yn.prototype.isDataDriven=function(){return \"source\"===this.expression.kind||\"composite\"===this.expression.kind},Yn.prototype.possiblyEvaluate=function(t,e){return this.property.possiblyEvaluate(this,t,e)};var $n=function(t){this.property=t,this.value=new Yn(t,void 0);};$n.prototype.transitioned=function(t,e){return new Qn(this.property,this.value,e,c({},t.transition,this.transition),t.now)},$n.prototype.untransitioned=function(){return new Qn(this.property,this.value,null,{},0)};var Wn=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues);};Wn.prototype.getValue=function(t){return b(this._values[t].value.value)},Wn.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new $n(this._values[t].property)),this._values[t].value=new Yn(this._values[t].property,null===e?void 0:b(e));},Wn.prototype.getTransition=function(t){return b(this._values[t].transition)},Wn.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new $n(this._values[t].property)),this._values[t].transition=b(e)||void 0;},Wn.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);ethis.end)return this.prior=null,n;if(this.value.isDataDriven())return this.prior=null,n;if(r=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}(a))}return n};var ti=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues);};ti.prototype.possiblyEvaluate=function(t,e){for(var r=new ni(this._properties),n=0,i=Object.keys(this._values);nn.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},e.prototype.interpolate=function(t){return t},e}(ai),si=function(t){this.specification=t;};si.prototype.possiblyEvaluate=function(t,e,r){if(void 0!==t.value){if(\"constant\"===t.expression.kind){var n=t.expression.evaluate(e,null,{},r);return this._calculate(n,n,n,e)}return this._calculate(t.expression.evaluate(new Hn(Math.floor(e.zoom-1),e)),t.expression.evaluate(new Hn(Math.floor(e.zoom),e)),t.expression.evaluate(new Hn(Math.floor(e.zoom+1),e)),e)}},si.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},si.prototype.interpolate=function(t){return t};var ui=function(t){this.specification=t;};ui.prototype.possiblyEvaluate=function(t,e,r){return !!t.expression.evaluate(e,null,{},r)},ui.prototype.interpolate=function(){return !1};var li=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[],t){var r=t[e];r.specification.overridable&&this.overridableProperties.push(e);var n=this.defaultPropertyValues[e]=new Yn(r,void 0),i=this.defaultTransitionablePropertyValues[e]=new $n(r);this.defaultTransitioningPropertyValues[e]=i.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=n.possiblyEvaluate({});}};An(\"DataDrivenProperty\",ai),An(\"DataConstantProperty\",ii),An(\"CrossFadedDataDrivenProperty\",oi),An(\"CrossFadedProperty\",si),An(\"ColorRampProperty\",ui);var pi=function(t){function e(e,r){if(t.call(this),this.id=e.id,this.type=e.type,this._featureFilter=function(){return !0},\"custom\"!==e.type&&(e=e,this.metadata=e.metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,\"background\"!==e.type&&(this.source=e.source,this.sourceLayer=e[\"source-layer\"],this.filter=e.filter),r.layout&&(this._unevaluatedLayout=new ei(r.layout)),r.paint)){for(var n in this._transitionablePaint=new Wn(r.paint),e.paint)this.setPaintProperty(n,e.paint[n],{validate:!1});for(var i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned();}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return \"visibility\"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n=\"layers.\"+this.id+\".layout.\"+t;if(this._validate(mn,n,t,e,r))return}\"visibility\"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility=e;},e.prototype.getPaintProperty=function(t){return v(t,\"-transition\")?this._transitionablePaint.getTransition(t.slice(0,-\"-transition\".length)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n=\"layers.\"+this.id+\".paint.\"+t;if(this._validate(dn,n,t,e,r))return !1}if(v(t,\"-transition\"))return this._transitionablePaint.setTransition(t.slice(0,-\"-transition\".length),e||void 0),!1;var i=this._transitionablePaint._values[t],a=\"cross-faded-data-driven\"===i.property.specification[\"property-type\"],o=i.value.isDataDriven(),s=i.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);var u=this._transitionablePaint._values[t].value;return u.isDataDriven()||o||a||this._handleOverridablePaintPropertyUpdate(t,s,u)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype._handleOverridablePaintPropertyUpdate=function(t,e,r){return !1},e.prototype.isHidden=function(t){return !!(this.minzoom&&t=this.maxzoom)||\"none\"===this.visibility)},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint);},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t,e){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t,e)),this.paint=this._transitioningPaint.possiblyEvaluate(t,e);},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,\"source-layer\":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return this.visibility&&(t.layout=t.layout||{},t.layout.visibility=this.visibility),x(t,(function(t,e){return !(void 0===t||\"layout\"===e&&!Object.keys(t).length||\"paint\"===e&&!Object.keys(t).length)}))},e.prototype._validate=function(t,e,r,n,i){return void 0===i&&(i={}),(!i||!1!==i.validate)&&vn(this,t.call(fn,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:Tt,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D=function(){return !1},e.prototype.isTileClipped=function(){return !1},e.prototype.hasOffscreenPass=function(){return !1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof ri&&xr(e.property.specification)&&((\"source\"===e.value.kind||\"composite\"===e.value.kind)&&e.value.isStateDependent))return !0}return !1},e}(Bt),ci={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},hi=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8;},fi=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0);};function yi(t,e){void 0===e&&(e=1);var r=0,n=0;return {members:t.map((function(t){var i,a=(i=t.type,ci[i].BYTES_PER_ELEMENT),o=r=di(r,Math.max(e,a)),s=t.components||1;return n=Math.max(n,a),r+=a*s,{name:t.name,type:t.type,components:s,offset:o}})),size:di(r,Math.max(n,e)),alignment:e}}function di(t,e){return Math.ceil(t/e)*e}fi.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},fi.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},fi.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews());},fi.prototype.clear=function(){this.length=0;},fi.prototype.resize=function(t){this.reserve(t),this.length=t;},fi.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e);}},fi.prototype._refreshViews=function(){throw new Error(\"_refreshViews() must be implemented by each concrete StructArray layout\")};var mi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.int16[n+0]=e,this.int16[n+1]=r,t},e}(fi);mi.prototype.bytesPerElement=4,An(\"StructArrayLayout2i4\",mi);var vi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.int16[a+0]=e,this.int16[a+1]=r,this.int16[a+2]=n,this.int16[a+3]=i,t},e}(fi);vi.prototype.bytesPerElement=8,An(\"StructArrayLayout4i8\",vi);var gi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(fi);gi.prototype.bytesPerElement=12,An(\"StructArrayLayout2i4i12\",gi);var xi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=4*t,u=8*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.uint8[u+4]=n,this.uint8[u+5]=i,this.uint8[u+6]=a,this.uint8[u+7]=o,t},e}(fi);xi.prototype.bytesPerElement=8,An(\"StructArrayLayout2i4ub8\",xi);var bi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s){var u=this.length;return this.resize(u+1),this.emplace(u,t,e,r,n,i,a,o,s)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u){var l=8*t;return this.uint16[l+0]=e,this.uint16[l+1]=r,this.uint16[l+2]=n,this.uint16[l+3]=i,this.uint16[l+4]=a,this.uint16[l+5]=o,this.uint16[l+6]=s,this.uint16[l+7]=u,t},e}(fi);bi.prototype.bytesPerElement=16,An(\"StructArrayLayout8ui16\",bi);var _i=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l,p,c){var h=this.length;return this.resize(h+1),this.emplace(h,t,e,r,n,i,a,o,s,u,l,p,c)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p,c,h){var f=12*t;return this.int16[f+0]=e,this.int16[f+1]=r,this.int16[f+2]=n,this.int16[f+3]=i,this.uint16[f+4]=a,this.uint16[f+5]=o,this.uint16[f+6]=s,this.uint16[f+7]=u,this.int16[f+8]=l,this.int16[f+9]=p,this.int16[f+10]=c,this.int16[f+11]=h,t},e}(fi);_i.prototype.bytesPerElement=24,An(\"StructArrayLayout4i4ui4i24\",_i);var wi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.float32[i+0]=e,this.float32[i+1]=r,this.float32[i+2]=n,t},e}(fi);wi.prototype.bytesPerElement=12,An(\"StructArrayLayout3f12\",wi);var Ai=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint32[r+0]=e,t},e}(fi);Ai.prototype.bytesPerElement=4,An(\"StructArrayLayout1ul4\",Ai);var Si=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l,p){var c=this.length;return this.resize(c+1),this.emplace(c,t,e,r,n,i,a,o,s,u,l,p)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p,c){var h=12*t,f=6*t;return this.int16[h+0]=e,this.int16[h+1]=r,this.int16[h+2]=n,this.int16[h+3]=i,this.int16[h+4]=a,this.int16[h+5]=o,this.uint32[f+3]=s,this.uint16[h+8]=u,this.uint16[h+9]=l,this.int16[h+10]=p,this.int16[h+11]=c,t},e}(fi);Si.prototype.bytesPerElement=24,An(\"StructArrayLayout6i1ul2ui2i24\",Si);var ki=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(fi);ki.prototype.bytesPerElement=12,An(\"StructArrayLayout2i2i2i12\",ki);var Ii=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=12*t,o=3*t;return this.uint8[a+0]=e,this.uint8[a+1]=r,this.float32[o+1]=n,this.float32[o+2]=i,t},e}(fi);Ii.prototype.bytesPerElement=12,An(\"StructArrayLayout2ub2f12\",Ii);var zi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m){var v=this.length;return this.resize(v+1),this.emplace(v,t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v){var g=24*t,x=12*t,b=48*t;return this.int16[g+0]=e,this.int16[g+1]=r,this.uint16[g+2]=n,this.uint16[g+3]=i,this.uint32[x+2]=a,this.uint32[x+3]=o,this.uint32[x+4]=s,this.uint16[g+10]=u,this.uint16[g+11]=l,this.uint16[g+12]=p,this.float32[x+7]=c,this.float32[x+8]=h,this.uint8[b+36]=f,this.uint8[b+37]=y,this.uint8[b+38]=d,this.uint32[x+10]=m,this.int16[g+22]=v,t},e}(fi);zi.prototype.bytesPerElement=48,An(\"StructArrayLayout2i2ui3ul3ui2f3ub1ul1i48\",zi);var Ci=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,_,w,A,S,k){var I=this.length;return this.resize(I+1),this.emplace(I,t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,_,w,A,S,k)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,_,w,A,S,k,I){var z=30*t,C=15*t;return this.int16[z+0]=e,this.int16[z+1]=r,this.int16[z+2]=n,this.int16[z+3]=i,this.int16[z+4]=a,this.int16[z+5]=o,this.int16[z+6]=s,this.int16[z+7]=u,this.uint16[z+8]=l,this.uint16[z+9]=p,this.uint16[z+10]=c,this.uint16[z+11]=h,this.uint16[z+12]=f,this.uint16[z+13]=y,this.uint16[z+14]=d,this.uint16[z+15]=m,this.uint16[z+16]=v,this.uint16[z+17]=g,this.uint16[z+18]=x,this.uint16[z+19]=b,this.uint16[z+20]=_,this.uint16[z+21]=w,this.uint32[C+11]=A,this.float32[C+12]=S,this.float32[C+13]=k,this.float32[C+14]=I,t},e}(fi);Ci.prototype.bytesPerElement=60,An(\"StructArrayLayout8i14ui1ul3f60\",Ci);var Bi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.float32[r+0]=e,t},e}(fi);Bi.prototype.bytesPerElement=4,An(\"StructArrayLayout1f4\",Bi);var Ti=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.int16[i+0]=e,this.int16[i+1]=r,this.int16[i+2]=n,t},e}(fi);Ti.prototype.bytesPerElement=6,An(\"StructArrayLayout3i6\",Ti);var Pi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=2*t,a=4*t;return this.uint32[i+0]=e,this.uint16[a+2]=r,this.uint16[a+3]=n,t},e}(fi);Pi.prototype.bytesPerElement=8,An(\"StructArrayLayout1ul2ui8\",Pi);var Ei=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.uint16[i+0]=e,this.uint16[i+1]=r,this.uint16[i+2]=n,t},e}(fi);Ei.prototype.bytesPerElement=6,An(\"StructArrayLayout3ui6\",Ei);var Mi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.uint16[n+0]=e,this.uint16[n+1]=r,t},e}(fi);Mi.prototype.bytesPerElement=4,An(\"StructArrayLayout2ui4\",Mi);var Vi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint16[r+0]=e,t},e}(fi);Vi.prototype.bytesPerElement=2,An(\"StructArrayLayout1ui2\",Vi);var Fi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.float32[n+0]=e,this.float32[n+1]=r,t},e}(fi);Fi.prototype.bytesPerElement=8,An(\"StructArrayLayout2f8\",Fi);var Li=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.float32[a+0]=e,this.float32[a+1]=r,this.float32[a+2]=n,this.float32[a+3]=i,t},e}(fi);Li.prototype.bytesPerElement=16,An(\"StructArrayLayout4f16\",Li);var Oi=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},radius:{configurable:!0},signedDistanceFromAnchor:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorPointX.set=function(t){this._structArray.int16[this._pos2+0]=t;},r.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorPointY.set=function(t){this._structArray.int16[this._pos2+1]=t;},r.x1.get=function(){return this._structArray.int16[this._pos2+2]},r.x1.set=function(t){this._structArray.int16[this._pos2+2]=t;},r.y1.get=function(){return this._structArray.int16[this._pos2+3]},r.y1.set=function(t){this._structArray.int16[this._pos2+3]=t;},r.x2.get=function(){return this._structArray.int16[this._pos2+4]},r.x2.set=function(t){this._structArray.int16[this._pos2+4]=t;},r.y2.get=function(){return this._structArray.int16[this._pos2+5]},r.y2.set=function(t){this._structArray.int16[this._pos2+5]=t;},r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t;},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+8]=t;},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t;},r.radius.get=function(){return this._structArray.int16[this._pos2+10]},r.radius.set=function(t){this._structArray.int16[this._pos2+10]=t;},r.signedDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+11]},r.signedDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+11]=t;},r.anchorPoint.get=function(){return new i(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(hi);Oi.prototype.size=24;var Di=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Oi(this,t)},e}(Si);An(\"CollisionBoxArray\",Di);var Ri=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},placedOrientation:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0},associatedIconIndex:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t;},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t;},r.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.glyphStartIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t;},r.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},r.numGlyphs.set=function(t){this._structArray.uint16[this._pos2+3]=t;},r.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},r.vertexStartIndex.set=function(t){this._structArray.uint32[this._pos4+2]=t;},r.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.lineStartIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t;},r.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},r.lineLength.set=function(t){this._structArray.uint32[this._pos4+4]=t;},r.segment.get=function(){return this._structArray.uint16[this._pos2+10]},r.segment.set=function(t){this._structArray.uint16[this._pos2+10]=t;},r.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},r.lowerSize.set=function(t){this._structArray.uint16[this._pos2+11]=t;},r.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},r.upperSize.set=function(t){this._structArray.uint16[this._pos2+12]=t;},r.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},r.lineOffsetX.set=function(t){this._structArray.float32[this._pos4+7]=t;},r.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},r.lineOffsetY.set=function(t){this._structArray.float32[this._pos4+8]=t;},r.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},r.writingMode.set=function(t){this._structArray.uint8[this._pos1+36]=t;},r.placedOrientation.get=function(){return this._structArray.uint8[this._pos1+37]},r.placedOrientation.set=function(t){this._structArray.uint8[this._pos1+37]=t;},r.hidden.get=function(){return this._structArray.uint8[this._pos1+38]},r.hidden.set=function(t){this._structArray.uint8[this._pos1+38]=t;},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+10]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+10]=t;},r.associatedIconIndex.get=function(){return this._structArray.int16[this._pos2+22]},r.associatedIconIndex.set=function(t){this._structArray.int16[this._pos2+22]=t;},Object.defineProperties(e.prototype,r),e}(hi);Ri.prototype.size=48;var Ui=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Ri(this,t)},e}(zi);An(\"PlacedSymbolArray\",Ui);var ji=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},placedIconSymbolIndex:{configurable:!0},verticalPlacedIconSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},verticalTextBoxStartIndex:{configurable:!0},verticalTextBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},verticalIconBoxStartIndex:{configurable:!0},verticalIconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},numVerticalIconVertices:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},textOffset0:{configurable:!0},textOffset1:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t;},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t;},r.rightJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},r.rightJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+2]=t;},r.centerJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},r.centerJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+3]=t;},r.leftJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+4]},r.leftJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+4]=t;},r.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+5]},r.verticalPlacedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+5]=t;},r.placedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+6]},r.placedIconSymbolIndex.set=function(t){this._structArray.int16[this._pos2+6]=t;},r.verticalPlacedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+7]},r.verticalPlacedIconSymbolIndex.set=function(t){this._structArray.int16[this._pos2+7]=t;},r.key.get=function(){return this._structArray.uint16[this._pos2+8]},r.key.set=function(t){this._structArray.uint16[this._pos2+8]=t;},r.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.textBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t;},r.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+10]},r.textBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+10]=t;},r.verticalTextBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+11]},r.verticalTextBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+11]=t;},r.verticalTextBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+12]},r.verticalTextBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+12]=t;},r.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+13]},r.iconBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+13]=t;},r.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+14]},r.iconBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+14]=t;},r.verticalIconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+15]},r.verticalIconBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+15]=t;},r.verticalIconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+16]},r.verticalIconBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+16]=t;},r.featureIndex.get=function(){return this._structArray.uint16[this._pos2+17]},r.featureIndex.set=function(t){this._structArray.uint16[this._pos2+17]=t;},r.numHorizontalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+18]},r.numHorizontalGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+18]=t;},r.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+19]},r.numVerticalGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+19]=t;},r.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+20]},r.numIconVertices.set=function(t){this._structArray.uint16[this._pos2+20]=t;},r.numVerticalIconVertices.get=function(){return this._structArray.uint16[this._pos2+21]},r.numVerticalIconVertices.set=function(t){this._structArray.uint16[this._pos2+21]=t;},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+11]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+11]=t;},r.textBoxScale.get=function(){return this._structArray.float32[this._pos4+12]},r.textBoxScale.set=function(t){this._structArray.float32[this._pos4+12]=t;},r.textOffset0.get=function(){return this._structArray.float32[this._pos4+13]},r.textOffset0.set=function(t){this._structArray.float32[this._pos4+13]=t;},r.textOffset1.get=function(){return this._structArray.float32[this._pos4+14]},r.textOffset1.set=function(t){this._structArray.float32[this._pos4+14]=t;},Object.defineProperties(e.prototype,r),e}(hi);ji.prototype.size=60;var qi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new ji(this,t)},e}(Ci);An(\"SymbolInstanceArray\",qi);var Ni=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={offsetX:{configurable:!0}};return r.offsetX.get=function(){return this._structArray.float32[this._pos4+0]},r.offsetX.set=function(t){this._structArray.float32[this._pos4+0]=t;},Object.defineProperties(e.prototype,r),e}(hi);Ni.prototype.size=4;var Ki=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e.prototype.get=function(t){return new Ni(this,t)},e}(Bi);An(\"GlyphOffsetArray\",Ki);var Xi=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={x:{configurable:!0},y:{configurable:!0},tileUnitDistanceFromAnchor:{configurable:!0}};return r.x.get=function(){return this._structArray.int16[this._pos2+0]},r.x.set=function(t){this._structArray.int16[this._pos2+0]=t;},r.y.get=function(){return this._structArray.int16[this._pos2+1]},r.y.set=function(t){this._structArray.int16[this._pos2+1]=t;},r.tileUnitDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+2]},r.tileUnitDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+2]=t;},Object.defineProperties(e.prototype,r),e}(hi);Xi.prototype.size=6;var Zi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e.prototype.get=function(t){return new Xi(this,t)},e}(Ti);An(\"SymbolLineVertexArray\",Zi);var Gi=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+0]=t;},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t;},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+3]=t;},Object.defineProperties(e.prototype,r),e}(hi);Gi.prototype.size=8;var Ji=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Gi(this,t)},e}(Pi);An(\"FeatureIndexArray\",Ji);var Hi=yi([{name:\"a_pos\",components:2,type:\"Int16\"}],4).members,Yi=function(t){void 0===t&&(t=[]),this.segments=t;};function $i(t,e){return 256*(t=l(Math.floor(t),0,255))+(e=l(Math.floor(e),0,255))}Yi.prototype.prepareSegment=function(t,e,r,n){var i=this.segments[this.segments.length-1];return t>Yi.MAX_VERTEX_ARRAY_LENGTH&&w(\"Max vertices per segment is \"+Yi.MAX_VERTEX_ARRAY_LENGTH+\": bucket requested \"+t),(!i||i.vertexLength+t>Yi.MAX_VERTEX_ARRAY_LENGTH||i.sortKey!==n)&&(i={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},void 0!==n&&(i.sortKey=n),this.segments.push(i)),i},Yi.prototype.get=function(){return this.segments},Yi.prototype.destroy=function(){for(var t=0,e=this.segments;t>1;this.ids[n]>=t?r=n:e=n+1;}for(var i=[];this.ids[e]===t;){var a=this.positions[3*e],o=this.positions[3*e+1],s=this.positions[3*e+2];i.push({index:a,start:o,end:s}),e++;}return i},Wi.serialize=function(t,e){var r=new Float64Array(t.ids),n=new Uint32Array(t.positions);return function t(e,r,n,i){if(n>=i)return;var a=e[n+i>>1];var o=n-1;var s=i+1;for(;;){do{o++;}while(e[o]a);if(o>=s)break;Qi(e,o,s),Qi(r,3*o,3*s),Qi(r,3*o+1,3*s+1),Qi(r,3*o+2,3*s+2);}t(e,r,n,s);t(e,r,s+1,i);}(r,n,0,r.length-1),e&&e.push(r.buffer,n.buffer),{ids:r,positions:n}},Wi.deserialize=function(t){var e=new Wi;return e.ids=t.ids,e.positions=t.positions,e.indexed=!0,e},An(\"FeaturePositionMap\",Wi);var ta=function(t,e){this.gl=t.gl,this.location=e;},ea=function(t){function e(e,r){t.call(this,e,r),this.current=0;}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1i(this.location,t));},e}(ta),ra=function(t){function e(e,r){t.call(this,e,r),this.current=0;}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t));},e}(ta),na=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0];}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]||(this.current=t,this.gl.uniform2f(this.location,t[0],t[1]));},e}(ta),ia=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0];}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]||(this.current=t,this.gl.uniform3f(this.location,t[0],t[1],t[2]));},e}(ta),aa=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0,0];}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]&&t[3]===this.current[3]||(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]));},e}(ta),oa=function(t){function e(e,r){t.call(this,e,r),this.current=Qt.transparent;}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t.r===this.current.r&&t.g===this.current.g&&t.b===this.current.b&&t.a===this.current.a||(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a));},e}(ta),sa=new Float32Array(16),ua=function(t){function e(e,r){t.call(this,e,r),this.current=sa;}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t[12]!==this.current[12]||t[0]!==this.current[0])return this.current=t,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e=1;e<16;e++)if(t[e]!==this.current[e]){this.current=t,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(ta);function la(t){return [$i(255*t.r,255*t.g),$i(255*t.b,255*t.a)]}var pa=function(t,e,r){this.value=t,this.names=e,this.uniformNames=this.names.map((function(t){return \"u_\"+t})),this.type=r,this.maxValue=-1/0;};pa.prototype.defines=function(){return this.names.map((function(t){return \"#define HAS_UNIFORM_u_\"+t}))},pa.prototype.setConstantPatternPositions=function(){},pa.prototype.populatePaintArray=function(){},pa.prototype.updatePaintArray=function(){},pa.prototype.upload=function(){},pa.prototype.destroy=function(){},pa.prototype.setUniforms=function(t,e,r,n){e.set(n.constantOr(this.value));},pa.prototype.getBinding=function(t,e){return \"color\"===this.type?new oa(t,e):new ra(t,e)},pa.serialize=function(t){var e=t.value,r=t.names,n=t.type;return {value:In(e),names:r,type:n}},pa.deserialize=function(t){var e=t.value,r=t.names,n=t.type;return new pa(zn(e),r,n)};var ca=function(t,e,r){this.value=t,this.names=e,this.uniformNames=this.names.map((function(t){return \"u_\"+t})),this.type=r,this.maxValue=-1/0,this.patternPositions={patternTo:null,patternFrom:null};};ca.prototype.defines=function(){return this.names.map((function(t){return \"#define HAS_UNIFORM_u_\"+t}))},ca.prototype.populatePaintArray=function(){},ca.prototype.updatePaintArray=function(){},ca.prototype.upload=function(){},ca.prototype.destroy=function(){},ca.prototype.setConstantPatternPositions=function(t,e){this.patternPositions.patternTo=t.tlbr,this.patternPositions.patternFrom=e.tlbr;},ca.prototype.setUniforms=function(t,e,r,n,i){var a=this.patternPositions;\"u_pattern_to\"===i&&a.patternTo&&e.set(a.patternTo),\"u_pattern_from\"===i&&a.patternFrom&&e.set(a.patternFrom);},ca.prototype.getBinding=function(t,e){return new aa(t,e)};var ha=function(t,e,r,n){this.expression=t,this.names=e,this.type=r,this.uniformNames=this.names.map((function(t){return \"a_\"+t})),this.maxValue=-1/0,this.paintVertexAttributes=e.map((function(t){return {name:\"a_\"+t,type:\"Float32\",components:\"color\"===r?2:1,offset:0}})),this.paintVertexArray=new n;};ha.prototype.defines=function(){return []},ha.prototype.setConstantPatternPositions=function(){},ha.prototype.populatePaintArray=function(t,e,r,n){var i=this.paintVertexArray,a=i.length;i.reserve(t);var o=this.expression.evaluate(new Hn(0),e,{},[],n);if(\"color\"===this.type)for(var s=la(o),u=a;u_a.max||o.y<_a.min||o.y>_a.max)&&(w(\"Geometry exceeds allowed extent, reduce your vector tile buffer size\"),o.x=l(o.x,_a.min,_a.max),o.y=l(o.y,_a.min,_a.max));}return r}function Aa(t,e,r,n,i){t.emplaceBack(2*e+(n+1)/2,2*r+(i+1)/2);}var Sa=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new mi,this.indexArray=new Ei,this.segments=new Yi,this.programConfigurations=new ma(Hi,t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}));};function ka(t,e){for(var r=0;r1){if(Ba(t,e))return !0;for(var n=0;n1?t.distSqr(r):t.distSqr(r.sub(e)._mult(i)._add(e))}function Ma(t,e){for(var r,n,i,a=!1,o=0;oe.y!=i.y>e.y&&e.x<(i.x-n.x)*(e.y-n.y)/(i.y-n.y)+n.x&&(a=!a);return a}function Va(t,e){for(var r=!1,n=0,i=t.length-1;ne.y!=o.y>e.y&&e.x<(o.x-a.x)*(e.y-a.y)/(o.y-a.y)+a.x&&(r=!r);}return r}function Fa(t,e,r){var n=r[0],i=r[2];if(t.xi.x&&e.x>i.x||t.yi.y&&e.y>i.y)return !1;var a=A(t,e,r[0]);return a!==A(t,e,r[1])||a!==A(t,e,r[2])||a!==A(t,e,r[3])}function La(t,e,r){var n=e.paint.get(t).value;return \"constant\"===n.kind?n.value:r.programConfigurations.get(e.id).binders[t].maxValue}function Oa(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function Da(t,e,r,n,a){if(!e[0]&&!e[1])return t;var o=i.convert(e)._mult(a);\"viewport\"===r&&o._rotate(-n);for(var s=[],u=0;u=xa||l<0||l>=xa)){var p=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray,t.sortKey),c=p.vertexLength;Aa(this.layoutVertexArray,u,l,-1,-1),Aa(this.layoutVertexArray,u,l,1,-1),Aa(this.layoutVertexArray,u,l,1,1),Aa(this.layoutVertexArray,u,l,-1,1),this.indexArray.emplaceBack(c,c+1,c+2),this.indexArray.emplaceBack(c,c+3,c+2),p.vertexLength+=4,p.primitiveLength+=2;}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{});},An(\"CircleBucket\",Sa,{omit:[\"layers\"]});var Ra=new li({\"circle-sort-key\":new ai(Tt.layout_circle[\"circle-sort-key\"])}),Ua={paint:new li({\"circle-radius\":new ai(Tt.paint_circle[\"circle-radius\"]),\"circle-color\":new ai(Tt.paint_circle[\"circle-color\"]),\"circle-blur\":new ai(Tt.paint_circle[\"circle-blur\"]),\"circle-opacity\":new ai(Tt.paint_circle[\"circle-opacity\"]),\"circle-translate\":new ii(Tt.paint_circle[\"circle-translate\"]),\"circle-translate-anchor\":new ii(Tt.paint_circle[\"circle-translate-anchor\"]),\"circle-pitch-scale\":new ii(Tt.paint_circle[\"circle-pitch-scale\"]),\"circle-pitch-alignment\":new ii(Tt.paint_circle[\"circle-pitch-alignment\"]),\"circle-stroke-width\":new ai(Tt.paint_circle[\"circle-stroke-width\"]),\"circle-stroke-color\":new ai(Tt.paint_circle[\"circle-stroke-color\"]),\"circle-stroke-opacity\":new ai(Tt.paint_circle[\"circle-stroke-opacity\"])}),layout:Ra},ja=\"undefined\"!=typeof Float32Array?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var t=arguments,e=0,r=arguments.length;r--;)e+=t[r]*t[r];return Math.sqrt(e)});var qa,Na;qa=new ja(3),ja!=Float32Array&&(qa[0]=0,qa[1]=0,qa[2]=0),Na=qa;function Ka(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}!function(){var t=function(){var t=new ja(4);return ja!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}();}();var Xa=function(t){function e(e){t.call(this,e,Ua);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Sa(t)},e.prototype.queryRadius=function(t){var e=t;return La(\"circle-radius\",this,e)+La(\"circle-stroke-width\",this,e)+Oa(this.paint.get(\"circle-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o,s){for(var u=Da(t,this.paint.get(\"circle-translate\"),this.paint.get(\"circle-translate-anchor\"),a.angle,o),l=this.paint.get(\"circle-radius\").evaluate(e,r)+this.paint.get(\"circle-stroke-width\").evaluate(e,r),p=\"map\"===this.paint.get(\"circle-pitch-alignment\"),c=p?u:function(t,e){return t.map((function(t){return Za(t,e)}))}(u,s),h=p?l*o:l,f=0,y=n;ft.width||i.height>t.height||r.x>t.width-i.width||r.y>t.height-i.height)throw new RangeError(\"out of range source coordinates for image copy\");if(i.width>e.width||i.height>e.height||n.x>e.width-i.width||n.y>e.height-i.height)throw new RangeError(\"out of range destination coordinates for image copy\");for(var o=t.data,s=e.data,u=0;u80*r){n=a=t[0],i=o=t[1];for(var y=r;ya&&(a=s),u>o&&(o=u);l=0!==(l=Math.max(a-n,o-i))?1/l:0;}return po(h,f,r,n,i,l),f}function uo(t,e,r,n,i){var a,o;if(i===Mo(t,e,r,n)>0)for(a=e;a=e;a-=n)o=To(a,t[a],t[a+1],o);return o&&So(o,o.next)&&(Po(o),o=o.next),o}function lo(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!So(n,n.next)&&0!==Ao(n.prev,n,n.next))n=n.next;else{if(Po(n),(n=e=n.prev)===n.next)break;r=!0;}}while(r||n!==e);return e}function po(t,e,r,n,i,a,o){if(t){!o&&a&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=xo(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next;}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,u,l=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e0||u>0&&n;)0!==s&&(0===u||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,u--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n;}a.nextZ=null,l*=2;}while(o>1)}(i);}(t,n,i,a);for(var s,u,l=t;t.prev!==t.next;)if(s=t.prev,u=t.next,a?ho(t,n,i,a):co(t))e.push(s.i/r),e.push(t.i/r),e.push(u.i/r),Po(t),t=u.next,l=u.next;else if((t=u)===l){o?1===o?po(t=fo(lo(t),e,r),e,r,n,i,a,2):2===o&&yo(t,e,r,n,i,a):po(lo(t),e,r,n,i,a,1);break}}}function co(t){var e=t.prev,r=t,n=t.next;if(Ao(e,r,n)>=0)return !1;for(var i=t.next.next;i!==t.prev;){if(_o(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&Ao(i.prev,i,i.next)>=0)return !1;i=i.next;}return !0}function ho(t,e,r,n){var i=t.prev,a=t,o=t.next;if(Ao(i,a,o)>=0)return !1;for(var s=i.xa.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,p=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,c=xo(s,u,e,r,n),h=xo(l,p,e,r,n),f=t.prevZ,y=t.nextZ;f&&f.z>=c&&y&&y.z<=h;){if(f!==t.prev&&f!==t.next&&_o(i.x,i.y,a.x,a.y,o.x,o.y,f.x,f.y)&&Ao(f.prev,f,f.next)>=0)return !1;if(f=f.prevZ,y!==t.prev&&y!==t.next&&_o(i.x,i.y,a.x,a.y,o.x,o.y,y.x,y.y)&&Ao(y.prev,y,y.next)>=0)return !1;y=y.nextZ;}for(;f&&f.z>=c;){if(f!==t.prev&&f!==t.next&&_o(i.x,i.y,a.x,a.y,o.x,o.y,f.x,f.y)&&Ao(f.prev,f,f.next)>=0)return !1;f=f.prevZ;}for(;y&&y.z<=h;){if(y!==t.prev&&y!==t.next&&_o(i.x,i.y,a.x,a.y,o.x,o.y,y.x,y.y)&&Ao(y.prev,y,y.next)>=0)return !1;y=y.nextZ;}return !0}function fo(t,e,r){var n=t;do{var i=n.prev,a=n.next.next;!So(i,a)&&ko(i,n,n.next,a)&&Co(i,a)&&Co(a,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),Po(n),Po(n.next),n=t=a),n=n.next;}while(n!==t);return lo(n)}function yo(t,e,r,n,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&wo(o,s)){var u=Bo(o,s);return o=lo(o,o.next),u=lo(u,u.next),po(o,e,r,n,i,a),void po(u,e,r,n,i,a)}s=s.next;}o=o.next;}while(o!==t)}function mo(t,e){return t.x-e.x}function vo(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x=n.x&&n.x>=p&&i!==n.x&&_o(ar.x||n.x===r.x&&go(r,n)))&&(r=n,h=u)),n=n.next;}while(n!==l);return r}(t,e)){var r=Bo(e,t);lo(r,r.next);}}function go(t,e){return Ao(t.prev,t,e.prev)<0&&Ao(e.next,t,t.next)<0}function xo(t,e,r,n,i){return (t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function bo(t){var e=t,r=t;do{(e.x=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function wo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&ko(r,r.next,t,e))return !0;r=r.next;}while(r!==t);return !1}(t,e)&&(Co(t,e)&&Co(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next;}while(r!==t);return n}(t,e)&&(Ao(t.prev,t,e.prev)||Ao(t,e.prev,e))||So(t,e)&&Ao(t.prev,t,t.next)>0&&Ao(e.prev,e,e.next)>0)}function Ao(t,e,r){return (e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function So(t,e){return t.x===e.x&&t.y===e.y}function ko(t,e,r,n){var i=zo(Ao(t,e,r)),a=zo(Ao(t,e,n)),o=zo(Ao(r,n,t)),s=zo(Ao(r,n,e));return i!==a&&o!==s||(!(0!==i||!Io(t,r,e))||(!(0!==a||!Io(t,n,e))||(!(0!==o||!Io(r,t,n))||!(0!==s||!Io(r,e,n)))))}function Io(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function zo(t){return t>0?1:t<0?-1:0}function Co(t,e){return Ao(t.prev,t,t.next)<0?Ao(t,e,t.next)>=0&&Ao(t,t.prev,e)>=0:Ao(t,e,t.prev)<0||Ao(t,t.next,e)<0}function Bo(t,e){var r=new Eo(t.i,t.x,t.y),n=new Eo(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function To(t,e,r,n){var i=new Eo(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function Po(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ);}function Eo(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1;}function Mo(t,e,r,n){for(var i=0,a=e,o=r-n;an;){if(i-n>600){var o=i-n+1,s=r-n+1,u=Math.log(o),l=.5*Math.exp(2*u/3),p=.5*Math.sqrt(u*l*(o-l)/o)*(s-o/2<0?-1:1),c=Math.max(n,Math.floor(r-s*l/o+p)),h=Math.min(i,Math.floor(r+(o-s)*l/o+p));t(e,r,c,h,a);}var f=e[r],y=n,d=i;for(Fo(e,n,r),a(e[i],f)>0&&Fo(e,n,i);y0;)d--;}0===a(e[n],f)?Fo(e,n,d):Fo(e,++d,i),d<=r&&(n=d+1),r<=d&&(i=d-1);}}(t,e,r||0,n||t.length-1,i||Lo);}function Fo(t,e,r){var n=t[e];t[e]=t[r],t[r]=n;}function Lo(t,e){return te?1:0}function Oo(t,e){var r=t.length;if(r<=1)return [t];for(var n,i,a=[],o=0;o1)for(var u=0;u0&&(n+=t[i-1].length,r.holes.push(n));}return r},ao.default=oo;var jo=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new mi,this.indexArray=new Ei,this.indexArray2=new Mi,this.programConfigurations=new ma(io,t.layers,t.zoom),this.segments=new Yi,this.segments2=new Yi,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}));};jo.prototype.populate=function(t,e){this.hasPattern=Ro(\"fill\",this.layers,e);for(var r=this.layers[0].layout.get(\"fill-sort-key\"),n=[],i=0,a=t;i>3;}if(a--,1===n||2===n)o+=t.readSVarint(),s+=t.readSVarint(),1===n&&(e&&u.push(e),e=[]),e.push(new i(o,s));else{if(7!==n)throw new Error(\"unknown command \"+n);e&&e.push(e[0].clone());}}return e&&u.push(e),u},Go.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,i=0,a=0,o=1/0,s=-1/0,u=1/0,l=-1/0;t.pos>3;}if(n--,1===r||2===r)(i+=t.readSVarint())s&&(s=i),(a+=t.readSVarint())l&&(l=a);else if(7!==r)throw new Error(\"unknown command \"+r)}return [o,u,s,l]},Go.prototype.toGeoJSON=function(t,e,r){var n,i,a=this.extent*Math.pow(2,r),o=this.extent*t,s=this.extent*e,u=this.loadGeometry(),l=Go.types[this.type];function p(t){for(var e=0;e>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null;}return e}(r));}function Qo(t,e,r){if(3===t){var n=new Yo(r,r.readVarint()+r.pos);n.length&&(e[n.name]=n);}}$o.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error(\"feature index out of bounds\");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new Zo(this._pbf,e,this.extent,this._keys,this._values)};var ts={VectorTile:function(t,e){this.layers=t.readFields(Qo,{},e);},VectorTileFeature:Zo,VectorTileLayer:Yo},es=ts.VectorTileFeature.types,rs=Math.pow(2,13);function ns(t,e,r,n,i,a,o,s){t.emplaceBack(e,r,2*Math.floor(n*rs)+o,i*rs*2,a*rs*2,Math.round(s));}var is=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new gi,this.indexArray=new Ei,this.programConfigurations=new ma(Xo,t.layers,t.zoom),this.segments=new Yi,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}));};function as(t,e){return t.x===e.x&&(t.x<0||t.x>xa)||t.y===e.y&&(t.y<0||t.y>xa)}function os(t){return t.every((function(t){return t.x<0}))||t.every((function(t){return t.x>xa}))||t.every((function(t){return t.y<0}))||t.every((function(t){return t.y>xa}))}is.prototype.populate=function(t,e){this.features=[],this.hasPattern=Ro(\"fill-extrusion\",this.layers,e);for(var r=0,n=t;r=1){var v=f[d-1];if(!as(m,v)){p.vertexLength+4>Yi.MAX_VERTEX_ARRAY_LENGTH&&(p=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var g=m.sub(v)._perp()._unit(),x=v.dist(m);y+x>32768&&(y=0),ns(this.layoutVertexArray,m.x,m.y,g.x,g.y,0,0,y),ns(this.layoutVertexArray,m.x,m.y,g.x,g.y,0,1,y),y+=x,ns(this.layoutVertexArray,v.x,v.y,g.x,g.y,0,0,y),ns(this.layoutVertexArray,v.x,v.y,g.x,g.y,0,1,y);var b=p.vertexLength;this.indexArray.emplaceBack(b,b+2,b+1),this.indexArray.emplaceBack(b+1,b+2,b+3),p.vertexLength+=4,p.primitiveLength+=2;}}}}if(p.vertexLength+s>Yi.MAX_VERTEX_ARRAY_LENGTH&&(p=this.segments.prepareSegment(s,this.layoutVertexArray,this.indexArray)),\"Polygon\"===es[t.type]){for(var _=[],w=[],A=p.vertexLength,S=0,k=o;S=2&&t[p-1].equals(t[p-2]);)p--;for(var c=0;c0;if(k&&x>c){var z=h.dist(d);if(z>2*f){var C=h.sub(h.sub(d)._mult(f/z)._round());this.updateDistance(d,C),this.addCurrentVertex(C,v,0,0,y),d=C;}}var B=d&&m,T=B?r:l?\"butt\":n;if(B&&\"round\"===T&&(Ai&&(T=\"bevel\"),\"bevel\"===T&&(A>2&&(T=\"flipbevel\"),A100)b=g.mult(-1);else{var P=A*v.add(g).mag()/v.sub(g).mag();b._perp()._mult(P*(I?-1:1));}this.addCurrentVertex(h,b,0,0,y),this.addCurrentVertex(h,b.mult(-1),0,0,y);}else if(\"bevel\"===T||\"fakeround\"===T){var E=-Math.sqrt(A*A-1),M=I?E:0,V=I?0:E;if(d&&this.addCurrentVertex(h,v,M,V,y),\"fakeround\"===T)for(var F=Math.round(180*S/Math.PI/20),L=1;L2*f){var q=h.add(m.sub(h)._mult(f/j)._round());this.updateDistance(h,q),this.addCurrentVertex(q,g,0,0,y),h=q;}}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,o,s);}},ds.prototype.addCurrentVertex=function(t,e,r,n,i,a){void 0===a&&(a=!1);var o=e.x+e.y*r,s=e.y-e.x*r,u=-e.x+e.y*n,l=-e.y-e.x*n;this.addHalfVertex(t,o,s,a,!1,r,i),this.addHalfVertex(t,u,l,a,!0,-n,i),this.distance>ys/2&&0===this.totalDistance&&(this.distance=0,this.addCurrentVertex(t,e,r,n,i,a));},ds.prototype.addHalfVertex=function(t,e,r,n,i,a,o){var s=t.x,u=t.y,l=.5*this.scaledDistance;this.layoutVertexArray.emplaceBack((s<<1)+(n?1:0),(u<<1)+(i?1:0),Math.round(63*e)+128,Math.round(63*r)+128,1+(0===a?0:a<0?-1:1)|(63&l)<<2,l>>6);var p=o.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,this.e2,p),o.primitiveLength++),i?this.e2=p:this.e1=p;},ds.prototype.updateDistance=function(t,e){this.distance+=t.dist(e),this.scaledDistance=this.totalDistance>0?(this.clipStart+(this.clipEnd-this.clipStart)*this.distance/this.totalDistance)*(ys-1):this.distance;},An(\"LineBucket\",ds,{omit:[\"layers\",\"patternFeatures\"]});var ms=new li({\"line-cap\":new ii(Tt.layout_line[\"line-cap\"]),\"line-join\":new ai(Tt.layout_line[\"line-join\"]),\"line-miter-limit\":new ii(Tt.layout_line[\"line-miter-limit\"]),\"line-round-limit\":new ii(Tt.layout_line[\"line-round-limit\"]),\"line-sort-key\":new ai(Tt.layout_line[\"line-sort-key\"])}),vs={paint:new li({\"line-opacity\":new ai(Tt.paint_line[\"line-opacity\"]),\"line-color\":new ai(Tt.paint_line[\"line-color\"]),\"line-translate\":new ii(Tt.paint_line[\"line-translate\"]),\"line-translate-anchor\":new ii(Tt.paint_line[\"line-translate-anchor\"]),\"line-width\":new ai(Tt.paint_line[\"line-width\"]),\"line-gap-width\":new ai(Tt.paint_line[\"line-gap-width\"]),\"line-offset\":new ai(Tt.paint_line[\"line-offset\"]),\"line-blur\":new ai(Tt.paint_line[\"line-blur\"]),\"line-dasharray\":new si(Tt.paint_line[\"line-dasharray\"]),\"line-pattern\":new oi(Tt.paint_line[\"line-pattern\"]),\"line-gradient\":new ui(Tt.paint_line[\"line-gradient\"])}),layout:ms},gs=new(function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(e,r){return r=new Hn(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate=function(e,r,n,i){return r=c({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,n,i)},e}(ai))(vs.paint.properties[\"line-width\"].specification);gs.useIntegerZoom=!0;var xs=function(t){function e(e){t.call(this,e,vs);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){\"line-gradient\"===t&&this._updateGradient();},e.prototype._updateGradient=function(){var t=this._transitionablePaint._values[\"line-gradient\"].value.expression;this.gradient=to(t,\"lineProgress\"),this.gradientTexture=null;},e.prototype.recalculate=function(e,r){t.prototype.recalculate.call(this,e,r),this.paint._values[\"line-floorwidth\"]=gs.possiblyEvaluate(this._transitioningPaint._values[\"line-width\"].value,e);},e.prototype.createBucket=function(t){return new ds(t)},e.prototype.queryRadius=function(t){var e=t,r=bs(La(\"line-width\",this,e),La(\"line-gap-width\",this,e)),n=La(\"line-offset\",this,e);return r/2+Math.abs(n)+Oa(this.paint.get(\"line-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,a,o,s){var u=Da(t,this.paint.get(\"line-translate\"),this.paint.get(\"line-translate-anchor\"),o.angle,s),l=s/2*bs(this.paint.get(\"line-width\").evaluate(e,r),this.paint.get(\"line-gap-width\").evaluate(e,r)),p=this.paint.get(\"line-offset\").evaluate(e,r);return p&&(n=function(t,e){for(var r=[],n=new i(0,0),a=0;a=3)for(var a=0;a0?e+2*t:t}var _s=yi([{name:\"a_pos_offset\",components:4,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint16\"},{name:\"a_pixeloffset\",components:4,type:\"Int16\"}],4),ws=yi([{name:\"a_projected_pos\",components:3,type:\"Float32\"}],4),As=(yi([{name:\"a_fade_opacity\",components:1,type:\"Uint32\"}],4),yi([{name:\"a_placed\",components:2,type:\"Uint8\"},{name:\"a_shift\",components:2,type:\"Float32\"}])),Ss=(yi([{type:\"Int16\",name:\"anchorPointX\"},{type:\"Int16\",name:\"anchorPointY\"},{type:\"Int16\",name:\"x1\"},{type:\"Int16\",name:\"y1\"},{type:\"Int16\",name:\"x2\"},{type:\"Int16\",name:\"y2\"},{type:\"Uint32\",name:\"featureIndex\"},{type:\"Uint16\",name:\"sourceLayerIndex\"},{type:\"Uint16\",name:\"bucketIndex\"},{type:\"Int16\",name:\"radius\"},{type:\"Int16\",name:\"signedDistanceFromAnchor\"}]),yi([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_anchor_pos\",components:2,type:\"Int16\"},{name:\"a_extrude\",components:2,type:\"Int16\"}],4)),ks=yi([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_anchor_pos\",components:2,type:\"Int16\"},{name:\"a_extrude\",components:2,type:\"Int16\"}],4);yi([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Uint16\",name:\"glyphStartIndex\"},{type:\"Uint16\",name:\"numGlyphs\"},{type:\"Uint32\",name:\"vertexStartIndex\"},{type:\"Uint32\",name:\"lineStartIndex\"},{type:\"Uint32\",name:\"lineLength\"},{type:\"Uint16\",name:\"segment\"},{type:\"Uint16\",name:\"lowerSize\"},{type:\"Uint16\",name:\"upperSize\"},{type:\"Float32\",name:\"lineOffsetX\"},{type:\"Float32\",name:\"lineOffsetY\"},{type:\"Uint8\",name:\"writingMode\"},{type:\"Uint8\",name:\"placedOrientation\"},{type:\"Uint8\",name:\"hidden\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Int16\",name:\"associatedIconIndex\"}]),yi([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Int16\",name:\"rightJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"centerJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"leftJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedTextSymbolIndex\"},{type:\"Int16\",name:\"placedIconSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedIconSymbolIndex\"},{type:\"Uint16\",name:\"key\"},{type:\"Uint16\",name:\"textBoxStartIndex\"},{type:\"Uint16\",name:\"textBoxEndIndex\"},{type:\"Uint16\",name:\"verticalTextBoxStartIndex\"},{type:\"Uint16\",name:\"verticalTextBoxEndIndex\"},{type:\"Uint16\",name:\"iconBoxStartIndex\"},{type:\"Uint16\",name:\"iconBoxEndIndex\"},{type:\"Uint16\",name:\"verticalIconBoxStartIndex\"},{type:\"Uint16\",name:\"verticalIconBoxEndIndex\"},{type:\"Uint16\",name:\"featureIndex\"},{type:\"Uint16\",name:\"numHorizontalGlyphVertices\"},{type:\"Uint16\",name:\"numVerticalGlyphVertices\"},{type:\"Uint16\",name:\"numIconVertices\"},{type:\"Uint16\",name:\"numVerticalIconVertices\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Float32\",name:\"textBoxScale\"},{type:\"Float32\",components:2,name:\"textOffset\"}]),yi([{type:\"Float32\",name:\"offsetX\"}]),yi([{type:\"Int16\",name:\"x\"},{type:\"Int16\",name:\"y\"},{type:\"Int16\",name:\"tileUnitDistanceFromAnchor\"}]);function Is(t,e,r){return t.sections.forEach((function(t){t.text=function(t,e,r){var n=e.layout.get(\"text-transform\").evaluate(r,{});return \"uppercase\"===n?t=t.toLocaleUpperCase():\"lowercase\"===n&&(t=t.toLocaleLowerCase()),Jn.applyArabicShaping&&(t=Jn.applyArabicShaping(t)),t}(t.text,e,r);})),t}var zs={\"!\":\"︕\",\"#\":\"#\",$:\"$\",\"%\":\"%\",\"&\":\"&\",\"(\":\"︵\",\")\":\"︶\",\"*\":\"*\",\"+\":\"+\",\",\":\"︐\",\"-\":\"︲\",\".\":\"・\",\"/\":\"/\",\":\":\"︓\",\";\":\"︔\",\"<\":\"︿\",\"=\":\"=\",\">\":\"﹀\",\"?\":\"︖\",\"@\":\"@\",\"[\":\"﹇\",\"\\\\\":\"\\",\"]\":\"﹈\",\"^\":\"^\",_:\"︳\",\"`\":\"`\",\"{\":\"︷\",\"|\":\"―\",\"}\":\"︸\",\"~\":\"~\",\"¢\":\"¢\",\"£\":\"£\",\"¥\":\"¥\",\"¦\":\"¦\",\"¬\":\"¬\",\"¯\":\" ̄\",\"–\":\"︲\",\"—\":\"︱\",\"‘\":\"﹃\",\"’\":\"﹄\",\"“\":\"﹁\",\"”\":\"﹂\",\"…\":\"︙\",\"‧\":\"・\",\"₩\":\"₩\",\"、\":\"︑\",\"。\":\"︒\",\"〈\":\"︿\",\"〉\":\"﹀\",\"《\":\"︽\",\"》\":\"︾\",\"「\":\"﹁\",\"」\":\"﹂\",\"『\":\"﹃\",\"』\":\"﹄\",\"【\":\"︻\",\"】\":\"︼\",\"〔\":\"︹\",\"〕\":\"︺\",\"〖\":\"︗\",\"〗\":\"︘\",\"!\":\"︕\",\"(\":\"︵\",\")\":\"︶\",\",\":\"︐\",\"-\":\"︲\",\".\":\"・\",\":\":\"︓\",\";\":\"︔\",\"<\":\"︿\",\">\":\"﹀\",\"?\":\"︖\",\"[\":\"﹇\",\"]\":\"﹈\",\"_\":\"︳\",\"{\":\"︷\",\"|\":\"―\",\"}\":\"︸\",\"⦅\":\"︵\",\"⦆\":\"︶\",\"。\":\"︒\",\"「\":\"﹁\",\"」\":\"﹂\"};var Cs=24,Bs=function(t,e,r,n,i){var a,o,s=8*i-n-1,u=(1<>1,p=-7,c=r?i-1:0,h=r?-1:1,f=t[e+c];for(c+=h,a=f&(1<<-p)-1,f>>=-p,p+=s;p>0;a=256*a+t[e+c],c+=h,p-=8);for(o=a&(1<<-p)-1,a>>=-p,p+=n;p>0;o=256*o+t[e+c],c+=h,p-=8);if(0===a)a=1-l;else{if(a===u)return o?NaN:1/0*(f?-1:1);o+=Math.pow(2,n),a-=l;}return (f?-1:1)*o*Math.pow(2,a-n)},Ts=function(t,e,r,n,i,a){var o,s,u,l=8*a-i-1,p=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:a-1,y=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=p):(o=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-o))<1&&(o--,u*=2),(e+=o+c>=1?h/u:h*Math.pow(2,1-c))*u>=2&&(o++,u/=2),o+c>=p?(s=0,o=p):o+c>=1?(s=(e*u-1)*Math.pow(2,i),o+=c):(s=e*Math.pow(2,c-1)*Math.pow(2,i),o=0));i>=8;t[r+f]=255&s,f+=y,s/=256,i-=8);for(o=o<0;t[r+f]=255&o,f+=y,o/=256,l-=8);t[r+f-y]|=128*d;},Ps=Es;function Es(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length;}Es.Varint=0,Es.Fixed64=1,Es.Bytes=2,Es.Fixed32=5;var Ms=\"undefined\"==typeof TextDecoder?null:new TextDecoder(\"utf8\");function Vs(t){return t.type===Es.Bytes?t.readVarint()+t.pos:t.pos+1}function Fs(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function Ls(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i];}function Os(t,e){for(var r=0;r>>8,t[r+2]=e>>>16,t[r+3]=e>>>24;}function Js(t,e){return (t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}Es.prototype={destroy:function(){this.buf=null;},readFields:function(t,e,r){for(r=r||this.length;this.pos>3,a=this.pos;this.type=7&n,t(i,e,this),this.pos===a&&this.skip(n);}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=Zs(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=Js(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=Zs(this.buf,this.pos)+4294967296*Zs(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=Zs(this.buf,this.pos)+4294967296*Js(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=Bs(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Bs(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return e=127&(r=n[this.pos++]),r<128?e:(e|=(127&(r=n[this.pos++]))<<7,r<128?e:(e|=(127&(r=n[this.pos++]))<<14,r<128?e:(e|=(127&(r=n[this.pos++]))<<21,r<128?e:function(t,e,r){var n,i,a=r.buf;if(i=a[r.pos++],n=(112&i)>>4,i<128)return Fs(t,n,e);if(i=a[r.pos++],n|=(127&i)<<3,i<128)return Fs(t,n,e);if(i=a[r.pos++],n|=(127&i)<<10,i<128)return Fs(t,n,e);if(i=a[r.pos++],n|=(127&i)<<17,i<128)return Fs(t,n,e);if(i=a[r.pos++],n|=(127&i)<<24,i<128)return Fs(t,n,e);if(i=a[r.pos++],n|=(1&i)<<31,i<128)return Fs(t,n,e);throw new Error(\"Expected varint not more than 10 bytes\")}(e|=(15&(r=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&Ms?function(t,e,r){return Ms.decode(t.subarray(e,r))}(this.buf,e,t):function(t,e,r){var n=\"\",i=e;for(;i239?4:u>223?3:u>191?2:1;if(i+p>r)break;1===p?u<128&&(l=u):2===p?128==(192&(a=t[i+1]))&&(l=(31&u)<<6|63&a)<=127&&(l=null):3===p?(a=t[i+1],o=t[i+2],128==(192&a)&&128==(192&o)&&((l=(15&u)<<12|(63&a)<<6|63&o)<=2047||l>=55296&&l<=57343)&&(l=null)):4===p&&(a=t[i+1],o=t[i+2],s=t[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&((l=(15&u)<<18|(63&a)<<12|(63&o)<<6|63&s)<=65535||l>=1114112)&&(l=null)),null===l?(l=65533,p=1):l>65535&&(l-=65536,n+=String.fromCharCode(l>>>10&1023|55296),l=56320|1023&l),n+=String.fromCharCode(l),i+=p;}return n}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==Es.Bytes)return t.push(this.readVarint(e));var r=Vs(this);for(t=t||[];this.pos127;);else if(e===Es.Bytes)this.pos=this.readVarint()+this.pos;else if(e===Es.Fixed32)this.pos+=4;else{if(e!==Es.Fixed64)throw new Error(\"Unimplemented type: \"+e);this.pos+=8;}},writeTag:function(t,e){this.writeVarint(t<<3|e);},realloc:function(t){for(var e=this.length||16;e268435455||t<0?function(t,e){var r,n;t>=0?(r=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,n=n+1|0));if(t>=0x10000000000000000||t<-0x10000000000000000)throw new Error(\"Given varint doesn't fit into 10 bytes\");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t;}(r,0,e),function(t,e){var r=(7&t)<<4;if(e.buf[e.pos++]|=r|((t>>>=3)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;e.buf[e.pos++]=127&t;}(n,e);}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))));},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t);},writeBoolean:function(t){this.writeVarint(Boolean(t));},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var n,i,a=0;a55295&&n<57344){if(!i){n>56319||a+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):i=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,i=n;continue}n=i-55296<<10|n-56320|65536,i=null;}else i&&(t[r++]=239,t[r++]=191,t[r++]=189,i=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128);}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&Ls(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r;},writeFloat:function(t){this.realloc(4),Ts(this.buf,t,this.pos,!0,23,4),this.pos+=4;},writeDouble:function(t){this.realloc(8),Ts(this.buf,t,this.pos,!0,52,8),this.pos+=8;},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r=128&&Ls(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n;},writeMessage:function(t,e,r){this.writeTag(t,Es.Bytes),this.writeRawMessage(e,r);},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,Os,e);},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,Ds,e);},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,js,e);},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,Rs,e);},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,Us,e);},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,qs,e);},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,Ns,e);},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,Ks,e);},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,Xs,e);},writeBytesField:function(t,e){this.writeTag(t,Es.Bytes),this.writeBytes(e);},writeFixed32Field:function(t,e){this.writeTag(t,Es.Fixed32),this.writeFixed32(e);},writeSFixed32Field:function(t,e){this.writeTag(t,Es.Fixed32),this.writeSFixed32(e);},writeFixed64Field:function(t,e){this.writeTag(t,Es.Fixed64),this.writeFixed64(e);},writeSFixed64Field:function(t,e){this.writeTag(t,Es.Fixed64),this.writeSFixed64(e);},writeVarintField:function(t,e){this.writeTag(t,Es.Varint),this.writeVarint(e);},writeSVarintField:function(t,e){this.writeTag(t,Es.Varint),this.writeSVarint(e);},writeStringField:function(t,e){this.writeTag(t,Es.Bytes),this.writeString(e);},writeFloatField:function(t,e){this.writeTag(t,Es.Fixed32),this.writeFloat(e);},writeDoubleField:function(t,e){this.writeTag(t,Es.Fixed64),this.writeDouble(e);},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e));}};var Hs=3;function Ys(t,e,r){1===t&&r.readMessage($s,e);}function $s(t,e,r){if(3===t){var n=r.readMessage(Ws,{}),i=n.id,a=n.bitmap,o=n.width,s=n.height,u=n.left,l=n.top,p=n.advance;e.push({id:i,bitmap:new $a({width:o+2*Hs,height:s+2*Hs},a),metrics:{width:o,height:s,left:u,top:l,advance:p}});}}function Ws(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint());}var Qs=Hs;function tu(t){for(var e=0,r=0,n=0,i=t;n=0;h--){var f=o[h];if(!(c.w>f.w||c.h>f.h)){if(c.x=f.x,c.y=f.y,u=Math.max(u,c.y+c.h),s=Math.max(s,c.x+c.w),c.w===f.w&&c.h===f.h){var y=o.pop();h0&&R>k&&(k=R);}else{var U=r[z.fontStack],j=U&&U[B];if(j&&j.rect)E=j.rect,P=j.metrics;else{var q=e[z.fontStack],N=q&&q[B];if(!N)continue;P=N.metrics;}T=(_-z.scale)*Cs;}F?(t.verticalizable=!0,S.push({glyph:B,imageName:M,x:h,y:f+T,vertical:F,scale:z.scale,fontStack:z.fontStack,sectionIndex:C,metrics:P,rect:E}),h+=V*z.scale+l):(S.push({glyph:B,imageName:M,x:h,y:f+T,vertical:F,scale:z.scale,fontStack:z.fontStack,sectionIndex:C,metrics:P,rect:E}),h+=P.advance*z.scale+l);}if(0!==S.length){var K=h-l;y=Math.max(K,y),gu(S,0,S.length-1,m,k);}h=0;var X=a*_+k;A.lineOffset=Math.max(k,w),f+=X,d=Math.max(X,d),++v;}else f+=a,++v;}var Z;var G=f-ou,J=vu(o),H=J.horizontalAlign,Y=J.verticalAlign;(function(t,e,r,n,i,a,o,s,u){var l=(e-r)*i,p=0;p=a!==o?-s*n-ou:(-n*u+.5)*o;for(var c=0,h=t;c=0&&n>=t&&pu[this.text.charCodeAt(n)];n--)r--;this.text=this.text.substring(t,r),this.sectionIndex=this.sectionIndex.slice(t,r);},uu.prototype.substring=function(t,e){var r=new uu;return r.text=this.text.substring(t,e),r.sectionIndex=this.sectionIndex.slice(t,e),r.sections=this.sections,r},uu.prototype.toString=function(){return this.text},uu.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce((function(e,r){return Math.max(e,t.sections[r].scale)}),0)},uu.prototype.addTextSection=function(t,e){this.text+=t.text,this.sections.push(su.forText(t.scale,t.fontStack||e));for(var r=this.sections.length-1,n=0;n=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID)};var pu={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},cu={};function hu(t,e,r,n,i,a){if(e.imageName){var o=n[e.imageName];return o?o.displaySize[0]*e.scale*Cs/a+i:0}var s=r[e.fontStack],u=s&&s[t];return u?u.metrics.advance*e.scale+i:0}function fu(t,e,r,n){var i=Math.pow(t-e,2);return n?t=0,c=0,h=0;h-r/2;){if(--o<0)return !1;s-=t[o].dist(a),a=t[o];}s+=t[o].dist(t[o+1]),o++;for(var u=[],l=0;sn;)l-=u.shift().angleDelta;if(l>i)return !1;o++,s+=c.dist(h);}return !0}function zu(t){for(var e=0,r=0;rl){var y=(l-u)/f,d=Ie(c.x,h.x,y),m=Ie(c.y,h.y,y),v=new bu(d,m,h.angleTo(c),p);return v._round(),!o||Iu(t,v,s,o,e)?v:void 0}u+=f;}}function Pu(t,e,r,n,i,a,o,s,u){var l=Cu(n,a,o),p=Bu(n,i),c=p*o,h=0===t[0].x||t[0].x===u||0===t[0].y||t[0].y===u;return e-c=0&&_=0&&w=0&&f+p<=c){var A=new bu(_,w,x,d);A._round(),i&&!Iu(e,A,o,i,a)||y.push(A);}}h+=g;}u||y.length||s||(y=t(e,h/2,n,i,a,o,s,!0,l));return y}(t,h?e/2*s%e:(p/2+2*a)*o*s%e,e,l,r,c,h,!1,u)}var Eu=eu;function Mu(t,e,r,n){var a=[],o=t.image,s=o.pixelRatio,u=o.paddedRect.w-2*Eu,l=o.paddedRect.h-2*Eu,p=t.right-t.left,c=t.bottom-t.top,h=o.stretchX||[[0,u]],f=o.stretchY||[[0,l]],y=function(t,e){return t+e[1]-e[0]},d=h.reduce(y,0),m=f.reduce(y,0),v=u-d,g=l-m,x=0,b=d,_=0,w=m,A=0,S=v,k=0,I=g;if(o.content&&n){var z=o.content;x=Vu(h,0,z[0]),_=Vu(f,0,z[1]),b=Vu(h,z[0],z[2]),w=Vu(f,z[1],z[3]),A=z[0]-x,k=z[1]-_,S=z[2]-z[0]-b,I=z[3]-z[1]-w;}var C=function(n,a,u,l){var h=Lu(n.stretch-x,b,p,t.left),f=Ou(n.fixed-A,S,n.stretch,d),y=Lu(a.stretch-_,w,c,t.top),v=Ou(a.fixed-k,I,a.stretch,m),g=Lu(u.stretch-x,b,p,t.left),z=Ou(u.fixed-A,S,u.stretch,d),C=Lu(l.stretch-_,w,c,t.top),B=Ou(l.fixed-k,I,l.stretch,m),T=new i(h,y),P=new i(g,y),E=new i(g,C),M=new i(h,C),V=new i(f/s,v/s),F=new i(z/s,B/s),L=e*Math.PI/180;if(L){var O=Math.sin(L),D=Math.cos(L),R=[D,-O,O,D];T._matMult(R),P._matMult(R),M._matMult(R),E._matMult(R);}var U=n.stretch+n.fixed,j=u.stretch+u.fixed,q=a.stretch+a.fixed,N=l.stretch+l.fixed;return {tl:T,tr:P,bl:M,br:E,tex:{x:o.paddedRect.x+Eu+U,y:o.paddedRect.y+Eu+q,w:j-U,h:N-q},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:V,pixelOffsetBR:F,minFontScaleX:S/s/p,minFontScaleY:I/s/c,isSDF:r}};if(n&&(o.stretchX||o.stretchY))for(var B=Fu(h,v,d),T=Fu(f,g,m),P=0;P0&&(g=Math.max(10*u,g),this._addLineCollisionCircles(t,e,r,r.segment,x,g,n,a,o,c));}else{if(h){var b=new i(d,f),_=new i(m,f),w=new i(d,y),A=new i(m,y),S=h*Math.PI/180;b._rotate(S),_._rotate(S),w._rotate(S),A._rotate(S),d=Math.min(b.x,_.x,w.x,A.x),m=Math.max(b.x,_.x,w.x,A.x),f=Math.min(b.y,_.y,w.y,A.y),y=Math.max(b.y,_.y,w.y,A.y);}t.emplaceBack(r.x,r.y,d,f,m,y,n,a,o,0,0);}this.boxEndIndex=t.length;};Du.prototype._addLineCollisionCircles=function(t,e,r,n,i,a,o,s,u,l){var p=a/2,c=Math.floor(i/p)||1,h=1+.4*Math.log(l)/Math.LN2,f=Math.floor(c*h/2),y=-a/2,d=r,m=n+1,v=y,g=-i/2,x=g-i/4;do{if(--m<0){if(v>g)return;m=0;break}v-=e[m].dist(d),d=e[m];}while(v>x);for(var b=e[m].dist(e[m+1]),_=-f;_i&&(A+=w-i),!(A=e.length)return;b=e[m].dist(e[m+1]);}var S=A-v,k=e[m],I=e[m+1].sub(k)._unit()._mult(S)._add(k)._round(),z=Math.abs(A-y)0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r);};function Uu(t,e){return te?1:0}function ju(t,e,r){void 0===e&&(e=1),void 0===r&&(r=!1);for(var n=1/0,a=1/0,o=-1/0,s=-1/0,u=t[0],l=0;lo)&&(o=p.x),(!l||p.y>s)&&(s=p.y);}var c=o-n,h=s-a,f=Math.min(c,h),y=f/2,d=new Ru([],qu);if(0===f)return new i(n,a);for(var m=n;mg.d||!g.d)&&(g=b,r&&console.log(\"found best %d after %d probes\",Math.round(1e4*b.d)/1e4,x)),b.max-g.d<=e||(y=b.h/2,d.push(new Nu(b.p.x-y,b.p.y-y,y,t)),d.push(new Nu(b.p.x+y,b.p.y-y,y,t)),d.push(new Nu(b.p.x-y,b.p.y+y,y,t)),d.push(new Nu(b.p.x+y,b.p.y+y,y,t)),x+=4);}return r&&(console.log(\"num probes: \"+x),console.log(\"best distance: \"+g.d)),g.p}function qu(t,e){return e.max-t.max}function Nu(t,e,r,n){this.p=new i(t,e),this.h=r,this.d=function(t,e){for(var r=!1,n=1/0,i=0;it.y!=p.y>t.y&&t.x<(p.x-l.x)*(t.y-l.y)/(p.y-l.y)+l.x&&(r=!r),n=Math.min(n,Ea(t,l,p));}return (r?1:-1)*Math.sqrt(n)}(this.p,n),this.max=this.d+this.h*Math.SQRT2;}Ru.prototype.push=function(t){this.data.push(t),this.length++,this._up(this.length-1);},Ru.prototype.pop=function(){if(0!==this.length){var t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}},Ru.prototype.peek=function(){return this.data[0]},Ru.prototype._up=function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var i=t-1>>1,a=e[i];if(r(n,a)>=0)break;e[t]=a,t=i;}e[t]=n;},Ru.prototype._down=function(t){for(var e=this.data,r=this.compare,n=this.length>>1,i=e[t];t=0)break;e[t]=o,t=a;}e[t]=i;};var Ku=e((function(t){t.exports=function(t,e){var r,n,i,a,o,s,u,l;for(r=3&t.length,n=t.length-r,i=e,o=3432918353,s=461845907,l=0;l>>16)*o&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295)<<13|i>>>19))+((5*(i>>>16)&65535)<<16)&4294967295))+((58964+(a>>>16)&65535)<<16);switch(u=0,r){case 3:u^=(255&t.charCodeAt(l+2))<<16;case 2:u^=(255&t.charCodeAt(l+1))<<8;case 1:i^=u=(65535&(u=(u=(65535&(u^=255&t.charCodeAt(l)))*o+(((u>>>16)*o&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295;}return i^=t.length,i=2246822507*(65535&(i^=i>>>16))+((2246822507*(i>>>16)&65535)<<16)&4294967295,i=3266489909*(65535&(i^=i>>>13))+((3266489909*(i>>>16)&65535)<<16)&4294967295,(i^=i>>>16)>>>0};})),Xu=e((function(t){t.exports=function(t,e){for(var r,n=t.length,i=e^n,a=0;n>=4;)r=1540483477*(65535&(r=255&t.charCodeAt(a)|(255&t.charCodeAt(++a))<<8|(255&t.charCodeAt(++a))<<16|(255&t.charCodeAt(++a))<<24))+((1540483477*(r>>>16)&65535)<<16),i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16)^(r=1540483477*(65535&(r^=r>>>24))+((1540483477*(r>>>16)&65535)<<16)),n-=4,++a;switch(n){case 3:i^=(255&t.charCodeAt(a+2))<<16;case 2:i^=(255&t.charCodeAt(a+1))<<8;case 1:i=1540483477*(65535&(i^=255&t.charCodeAt(a)))+((1540483477*(i>>>16)&65535)<<16);}return i=1540483477*(65535&(i^=i>>>13))+((1540483477*(i>>>16)&65535)<<16),(i^=i>>>15)>>>0};})),Zu=Ku,Gu=Ku,Ju=Xu;Zu.murmur3=Gu,Zu.murmur2=Ju;var Hu=7,Yu=Number.POSITIVE_INFINITY;function $u(t,e){return e[1]!==Yu?function(t,e,r){var n=0,i=0;switch(e=Math.abs(e),r=Math.abs(r),t){case\"top-right\":case\"top-left\":case\"top\":i=r-Hu;break;case\"bottom-right\":case\"bottom-left\":case\"bottom\":i=-r+Hu;}switch(t){case\"top-right\":case\"bottom-right\":case\"right\":n=-e;break;case\"top-left\":case\"bottom-left\":case\"left\":n=e;}return [n,i]}(t,e[0],e[1]):function(t,e){var r=0,n=0;e<0&&(e=0);var i=e/Math.sqrt(2);switch(t){case\"top-right\":case\"top-left\":n=i-Hu;break;case\"bottom-right\":case\"bottom-left\":n=-i+Hu;break;case\"bottom\":n=-e+Hu;break;case\"top\":n=e-Hu;}switch(t){case\"top-right\":case\"bottom-right\":r=-i;break;case\"top-left\":case\"bottom-left\":r=i;break;case\"left\":r=e;break;case\"right\":r=-e;}return [r,n]}(t,e[0])}function Wu(t){switch(t){case\"right\":case\"top-right\":case\"bottom-right\":return \"right\";case\"left\":case\"top-left\":case\"bottom-left\":return \"left\"}return \"center\"}var Qu=255,tl=Qu*_u;function el(t,e,r,n,a,o,s,u,l,p,c,h,f,y){var d=function(t,e,r,n,a,o,s,u){for(var l=n.layout.get(\"text-rotate\").evaluate(o,{})*Math.PI/180,p=[],c=0,h=e.positionedLines;ctl&&w(t.layerIds[0]+': Value for \"text-size\" is >= '+Qu+'. Reduce your \"text-size\".'):\"composite\"===m.kind&&((v=[_u*y.compositeTextSizes[0].evaluate(s,{}),_u*y.compositeTextSizes[1].evaluate(s,{})])[0]>tl||v[1]>tl)&&w(t.layerIds[0]+': Value for \"text-size\" is >= '+Qu+'. Reduce your \"text-size\".'),t.addSymbols(t.text,d,v,u,o,s,p,e,l.lineStartIndex,l.lineLength,f);for(var g=0,x=c;g=0;o--)if(n.dist(a[o])0)&&(\"constant\"!==i.value.kind||i.value.value.length>0),u=(\"constant\"!==o.value.kind||!!o.value.value)&&Object.keys(o.parameters).length>0,l=n.get(\"symbol-sort-key\");if(this.features=[],s||u){for(var p=e.iconDependencies,c=e.glyphDependencies,h=e.availableImages,f=new Hn(this.zoom),y=0,d=t;y=0;for(var B=0,T=b.sections;B=0;s--)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s>0&&(i+=e[s-1].dist(e[s]));for(var u=0;u0;this.addCollisionDebugVertices(o,s,u,l,p?n?this.textCollisionCircle:this.iconCollisionCircle:n?this.textCollisionBox:this.iconCollisionBox,a.anchorPoint,r,p);}},cl.prototype.generateCollisionDebugBuffers=function(){for(var t=0;t0},cl.prototype.hasIconData=function(){return this.icon.segments.get().length>0},cl.prototype.hasTextCollisionBoxData=function(){return this.textCollisionBox.segments.get().length>0},cl.prototype.hasIconCollisionBoxData=function(){return this.iconCollisionBox.segments.get().length>0},cl.prototype.hasTextCollisionCircleData=function(){return this.textCollisionCircle.segments.get().length>0},cl.prototype.hasIconCollisionCircleData=function(){return this.iconCollisionCircle.segments.get().length>0},cl.prototype.addIndicesForPlacedSymbol=function(t,e){for(var r=t.placedSymbolArray.get(e),n=r.vertexStartIndex+4*r.numGlyphs,i=r.vertexStartIndex;i1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var r=0,n=this.symbolInstanceIndexes;r=0&&n.indexOf(t)===r&&e.addIndicesForPlacedSymbol(e.text,t);})),a.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,a.verticalPlacedTextSymbolIndex),a.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,a.placedIconSymbolIndex),a.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,a.verticalPlacedIconSymbolIndex);}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray);}},An(\"SymbolBucket\",cl,{omit:[\"layers\",\"collisionBoxArray\",\"features\",\"compareText\"]}),cl.MAX_GLYPHS=65535,cl.addDynamicAttributes=sl;var hl=new li({\"symbol-placement\":new ii(Tt.layout_symbol[\"symbol-placement\"]),\"symbol-spacing\":new ii(Tt.layout_symbol[\"symbol-spacing\"]),\"symbol-avoid-edges\":new ii(Tt.layout_symbol[\"symbol-avoid-edges\"]),\"symbol-sort-key\":new ai(Tt.layout_symbol[\"symbol-sort-key\"]),\"symbol-z-order\":new ii(Tt.layout_symbol[\"symbol-z-order\"]),\"icon-allow-overlap\":new ii(Tt.layout_symbol[\"icon-allow-overlap\"]),\"icon-ignore-placement\":new ii(Tt.layout_symbol[\"icon-ignore-placement\"]),\"icon-optional\":new ii(Tt.layout_symbol[\"icon-optional\"]),\"icon-rotation-alignment\":new ii(Tt.layout_symbol[\"icon-rotation-alignment\"]),\"icon-size\":new ai(Tt.layout_symbol[\"icon-size\"]),\"icon-text-fit\":new ii(Tt.layout_symbol[\"icon-text-fit\"]),\"icon-text-fit-padding\":new ii(Tt.layout_symbol[\"icon-text-fit-padding\"]),\"icon-image\":new ai(Tt.layout_symbol[\"icon-image\"]),\"icon-rotate\":new ai(Tt.layout_symbol[\"icon-rotate\"]),\"icon-padding\":new ii(Tt.layout_symbol[\"icon-padding\"]),\"icon-keep-upright\":new ii(Tt.layout_symbol[\"icon-keep-upright\"]),\"icon-offset\":new ai(Tt.layout_symbol[\"icon-offset\"]),\"icon-anchor\":new ai(Tt.layout_symbol[\"icon-anchor\"]),\"icon-pitch-alignment\":new ii(Tt.layout_symbol[\"icon-pitch-alignment\"]),\"text-pitch-alignment\":new ii(Tt.layout_symbol[\"text-pitch-alignment\"]),\"text-rotation-alignment\":new ii(Tt.layout_symbol[\"text-rotation-alignment\"]),\"text-field\":new ai(Tt.layout_symbol[\"text-field\"]),\"text-font\":new ai(Tt.layout_symbol[\"text-font\"]),\"text-size\":new ai(Tt.layout_symbol[\"text-size\"]),\"text-max-width\":new ai(Tt.layout_symbol[\"text-max-width\"]),\"text-line-height\":new ii(Tt.layout_symbol[\"text-line-height\"]),\"text-letter-spacing\":new ai(Tt.layout_symbol[\"text-letter-spacing\"]),\"text-justify\":new ai(Tt.layout_symbol[\"text-justify\"]),\"text-radial-offset\":new ai(Tt.layout_symbol[\"text-radial-offset\"]),\"text-variable-anchor\":new ii(Tt.layout_symbol[\"text-variable-anchor\"]),\"text-anchor\":new ai(Tt.layout_symbol[\"text-anchor\"]),\"text-max-angle\":new ii(Tt.layout_symbol[\"text-max-angle\"]),\"text-writing-mode\":new ii(Tt.layout_symbol[\"text-writing-mode\"]),\"text-rotate\":new ai(Tt.layout_symbol[\"text-rotate\"]),\"text-padding\":new ii(Tt.layout_symbol[\"text-padding\"]),\"text-keep-upright\":new ii(Tt.layout_symbol[\"text-keep-upright\"]),\"text-transform\":new ai(Tt.layout_symbol[\"text-transform\"]),\"text-offset\":new ai(Tt.layout_symbol[\"text-offset\"]),\"text-allow-overlap\":new ii(Tt.layout_symbol[\"text-allow-overlap\"]),\"text-ignore-placement\":new ii(Tt.layout_symbol[\"text-ignore-placement\"]),\"text-optional\":new ii(Tt.layout_symbol[\"text-optional\"])}),fl={paint:new li({\"icon-opacity\":new ai(Tt.paint_symbol[\"icon-opacity\"]),\"icon-color\":new ai(Tt.paint_symbol[\"icon-color\"]),\"icon-halo-color\":new ai(Tt.paint_symbol[\"icon-halo-color\"]),\"icon-halo-width\":new ai(Tt.paint_symbol[\"icon-halo-width\"]),\"icon-halo-blur\":new ai(Tt.paint_symbol[\"icon-halo-blur\"]),\"icon-translate\":new ii(Tt.paint_symbol[\"icon-translate\"]),\"icon-translate-anchor\":new ii(Tt.paint_symbol[\"icon-translate-anchor\"]),\"text-opacity\":new ai(Tt.paint_symbol[\"text-opacity\"]),\"text-color\":new ai(Tt.paint_symbol[\"text-color\"],{runtimeType:qt,getOverride:function(t){return t.textColor},hasOverride:function(t){return !!t.textColor}}),\"text-halo-color\":new ai(Tt.paint_symbol[\"text-halo-color\"]),\"text-halo-width\":new ai(Tt.paint_symbol[\"text-halo-width\"]),\"text-halo-blur\":new ai(Tt.paint_symbol[\"text-halo-blur\"]),\"text-translate\":new ii(Tt.paint_symbol[\"text-translate\"]),\"text-translate-anchor\":new ii(Tt.paint_symbol[\"text-translate-anchor\"])}),layout:hl},yl=function(t){this.type=t.property.overrides?t.property.overrides.runtimeType:Dt,this.defaultValue=t;};yl.prototype.evaluate=function(t){if(t.formattedSection){var e=this.defaultValue.property.overrides;if(e&&e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default},yl.prototype.eachChild=function(t){this.defaultValue.isConstant()||t(this.defaultValue.value._styleExpression.expression);},yl.prototype.possibleOutputs=function(){return [void 0]},yl.prototype.serialize=function(){return null},An(\"FormatSectionOverride\",yl,{omit:[\"defaultValue\"]});var dl=function(t){function e(e){t.call(this,e,fl);}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e,r){if(t.prototype.recalculate.call(this,e,r),\"auto\"===this.layout.get(\"icon-rotation-alignment\")&&(\"point\"!==this.layout.get(\"symbol-placement\")?this.layout._values[\"icon-rotation-alignment\"]=\"map\":this.layout._values[\"icon-rotation-alignment\"]=\"viewport\"),\"auto\"===this.layout.get(\"text-rotation-alignment\")&&(\"point\"!==this.layout.get(\"symbol-placement\")?this.layout._values[\"text-rotation-alignment\"]=\"map\":this.layout._values[\"text-rotation-alignment\"]=\"viewport\"),\"auto\"===this.layout.get(\"text-pitch-alignment\")&&(this.layout._values[\"text-pitch-alignment\"]=this.layout.get(\"text-rotation-alignment\")),\"auto\"===this.layout.get(\"icon-pitch-alignment\")&&(this.layout._values[\"icon-pitch-alignment\"]=this.layout.get(\"icon-rotation-alignment\")),\"point\"===this.layout.get(\"symbol-placement\")){var n=this.layout.get(\"text-writing-mode\");if(n){for(var i=[],a=0,o=n;a\",targetMapId:n,sourceMapId:a.mapId});}}},Cl.prototype.receive=function(t){var e=t.data,r=e.id;if(r&&(!e.targetMapId||this.mapId===e.targetMapId))if(\"\"===e.type){delete this.tasks[r];var n=this.cancelCallbacks[r];delete this.cancelCallbacks[r],n&&n();}else k()||e.mustQueue?(this.tasks[r]=e,this.taskQueue.push(r),this.invoker.trigger()):this.processTask(r,e);},Cl.prototype.process=function(){if(this.taskQueue.length){var t=this.taskQueue.shift(),e=this.tasks[t];delete this.tasks[t],this.taskQueue.length&&this.invoker.trigger(),e&&this.processTask(t,e);}},Cl.prototype.processTask=function(t,e){var r=this;if(\"\"===e.type){var n=this.callbacks[t];delete this.callbacks[t],n&&(e.error?n(zn(e.error)):n(null,zn(e.data)));}else{var i=!1,a=C(this.globalScope)?void 0:[],o=e.hasCallback?function(e,n){i=!0,delete r.cancelCallbacks[t],r.target.postMessage({id:t,type:\"\",sourceMapId:r.mapId,error:e?In(e):null,data:In(n,a)},a);}:function(t){i=!0;},s=null,u=zn(e.data);if(this.parent[e.type])s=this.parent[e.type](e.sourceMapId,u,o);else if(this.parent.getWorkerSource){var l=e.type.split(\".\");s=this.parent.getWorkerSource(e.sourceMapId,l[0],u.source)[l[1]](u,o);}else o(new Error(\"Could not find function \"+e.type));!i&&s&&s.cancel&&(this.cancelCallbacks[t]=s.cancel);}},Cl.prototype.remove=function(){this.invoker.remove(),this.target.removeEventListener(\"message\",this.receive,!1);};var Tl=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]));};Tl.prototype.setNorthEast=function(t){return this._ne=t instanceof Pl?new Pl(t.lng,t.lat):Pl.convert(t),this},Tl.prototype.setSouthWest=function(t){return this._sw=t instanceof Pl?new Pl(t.lng,t.lat):Pl.convert(t),this},Tl.prototype.extend=function(t){var e,r,n=this._sw,i=this._ne;if(t instanceof Pl)e=t,r=t;else{if(!(t instanceof Tl))return Array.isArray(t)?t.every(Array.isArray)?this.extend(Tl.convert(t)):this.extend(Pl.convert(t)):this;if(e=t._sw,r=t._ne,!e||!r)return this}return n||i?(n.lng=Math.min(e.lng,n.lng),n.lat=Math.min(e.lat,n.lat),i.lng=Math.max(r.lng,i.lng),i.lat=Math.max(r.lat,i.lat)):(this._sw=new Pl(e.lng,e.lat),this._ne=new Pl(r.lng,r.lat)),this},Tl.prototype.getCenter=function(){return new Pl((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},Tl.prototype.getSouthWest=function(){return this._sw},Tl.prototype.getNorthEast=function(){return this._ne},Tl.prototype.getNorthWest=function(){return new Pl(this.getWest(),this.getNorth())},Tl.prototype.getSouthEast=function(){return new Pl(this.getEast(),this.getSouth())},Tl.prototype.getWest=function(){return this._sw.lng},Tl.prototype.getSouth=function(){return this._sw.lat},Tl.prototype.getEast=function(){return this._ne.lng},Tl.prototype.getNorth=function(){return this._ne.lat},Tl.prototype.toArray=function(){return [this._sw.toArray(),this._ne.toArray()]},Tl.prototype.toString=function(){return \"LngLatBounds(\"+this._sw.toString()+\", \"+this._ne.toString()+\")\"},Tl.prototype.isEmpty=function(){return !(this._sw&&this._ne)},Tl.prototype.contains=function(t){var e=Pl.convert(t),r=e.lng,n=e.lat,i=this._sw.lat<=n&&n<=this._ne.lat,a=this._sw.lng<=r&&r<=this._ne.lng;return this._sw.lng>this._ne.lng&&(a=this._sw.lng>=r&&r>=this._ne.lng),i&&a},Tl.convert=function(t){return !t||t instanceof Tl?t:new Tl(t)};var Pl=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid LngLat object: (\"+t+\", \"+e+\")\");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error(\"Invalid LngLat latitude value: must be between -90 and 90\")};Pl.prototype.wrap=function(){return new Pl(p(this.lng,-180,180),this.lat)},Pl.prototype.toArray=function(){return [this.lng,this.lat]},Pl.prototype.toString=function(){return \"LngLat(\"+this.lng+\", \"+this.lat+\")\"},Pl.prototype.toBounds=function(t){void 0===t&&(t=0);var e=360*t/40075017,r=e/Math.cos(Math.PI/180*this.lat);return new Tl(new Pl(this.lng-r,this.lat-e),new Pl(this.lng+r,this.lat+e))},Pl.convert=function(t){if(t instanceof Pl)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new Pl(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&\"object\"==typeof t&&null!==t)return new Pl(Number(\"lng\"in t?t.lng:t.lon),Number(t.lat));throw new Error(\"`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, an object {lon: , lat: }, or an array of [, ]\")};var El=2*Math.PI*6378137;function Ml(t){return El*Math.cos(t*Math.PI/180)}function Vl(t){return (180+t)/360}function Fl(t){return (180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function Ll(t,e){return t/Ml(e)}function Ol(t){var e=180-360*t;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}var Dl=function(t,e,r){void 0===r&&(r=0),this.x=+t,this.y=+e,this.z=+r;};Dl.fromLngLat=function(t,e){void 0===e&&(e=0);var r=Pl.convert(t);return new Dl(Vl(r.lng),Fl(r.lat),Ll(e,r.lat))},Dl.prototype.toLngLat=function(){return new Pl(360*this.x-180,Ol(this.y))},Dl.prototype.toAltitude=function(){return t=this.z,e=this.y,t*Ml(Ol(e));var t,e;},Dl.prototype.meterInMercatorCoordinateUnits=function(){return 1/El*(t=Ol(this.y),1/Math.cos(t*Math.PI/180));var t;};var Rl=function(t,e,r){this.z=t,this.x=e,this.y=r,this.key=ql(0,t,e,r);};Rl.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},Rl.prototype.url=function(t,e){var r,n,i,a,o,s=(r=this.x,n=this.y,i=this.z,a=Bl(256*r,256*(n=Math.pow(2,i)-n-1),i),o=Bl(256*(r+1),256*(n+1),i),a[0]+\",\"+a[1]+\",\"+o[0]+\",\"+o[1]),u=function(t,e,r){for(var n,i=\"\",a=t;a>0;a--)i+=(e&(n=1<this.canonical.z?new jl(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new jl(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},jl.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return !1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ>e&&t.canonical.y===this.canonical.y>>e},jl.prototype.children=function(t){if(this.overscaledZ>=t)return [new jl(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,r=2*this.canonical.x,n=2*this.canonical.y;return [new jl(e,this.wrap,e,r,n),new jl(e,this.wrap,e,r+1,n),new jl(e,this.wrap,e,r,n+1),new jl(e,this.wrap,e,r+1,n+1)]},jl.prototype.isLessThan=function(t){return this.wrapt.wrap)&&(this.overscaledZt.overscaledZ)&&(this.canonical.xt.canonical.x)&&this.canonical.y=this.dim+1||e<-1||e>=this.dim+1)throw new RangeError(\"out of range source coordinates for DEM data\");return (e+1)*this.stride+(t+1)},Nl.prototype._unpackMapbox=function(t,e,r){return (256*t*256+256*e+r)/10-1e4},Nl.prototype._unpackTerrarium=function(t,e,r){return 256*t+e+r/256-32768},Nl.prototype.getPixels=function(){return new Wa({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},Nl.prototype.backfillBorder=function(t,e,r){if(this.dim!==t.dim)throw new Error(\"dem dimension mismatch\");var n=e*this.dim,i=e*this.dim+this.dim,a=r*this.dim,o=r*this.dim+this.dim;switch(e){case-1:n=i-1;break;case 1:i=n+1;}switch(r){case-1:a=o-1;break;case 1:o=a+1;}for(var s=-e*this.dim,u=-r*this.dim,l=a;l=0)null!==this.deletedStates[t][n]&&(this.deletedStates[t][n]=this.deletedStates[t][n]||{},this.deletedStates[t][n][r]=null);else if(void 0!==e&&e>=0){if(this.stateChanges[t]&&this.stateChanges[t][n])for(r in this.deletedStates[t][n]={},this.stateChanges[t][n])this.deletedStates[t][n][r]=null;else this.deletedStates[t][n]=null;}else this.deletedStates[t]=null;}},Jl.prototype.getState=function(t,e){var r=String(e),n=this.state[t]||{},i=this.stateChanges[t]||{},a=c({},n[r],i[r]);if(null===this.deletedStates[t])return {};if(this.deletedStates[t]){var o=this.deletedStates[t][e];if(null===o)return {};for(var s in o)delete a[s];}return a},Jl.prototype.initializeTileState=function(t,e){t.setFeatureState(this.state,e);},Jl.prototype.coalesceChanges=function(t,e){var r={};for(var n in this.stateChanges){this.state[n]=this.state[n]||{};var i={};for(var a in this.stateChanges[n])this.state[n][a]||(this.state[n][a]={}),c(this.state[n][a],this.stateChanges[n][a]),i[a]=this.state[n][a];r[n]=i;}for(var o in this.deletedStates){this.state[o]=this.state[o]||{};var s={};if(null===this.deletedStates[o])for(var u in this.state[o])s[u]={},this.state[o][u]={};else for(var l in this.deletedStates[o]){if(null===this.deletedStates[o][l])this.state[o][l]={};else for(var p=0,h=Object.keys(this.deletedStates[o][l]);p=0&&p[3]>=0&&s.insert(o,p[0],p[1],p[2],p[3]);}},Hl.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new ts.VectorTile(new Ps(this.rawTileData)).layers,this.sourceLayerCoder=new Xl(this.vtLayers?Object.keys(this.vtLayers).sort():[\"_geojsonTileLayer\"])),this.vtLayers},Hl.prototype.query=function(t,e,r){var n=this;this.loadVTLayers();for(var a=t.params||{},o=xa/t.tileSize/t.scale,s=Xr(a.filter),u=t.queryGeometry,l=t.queryPadding*o,p=Yl(u),c=this.grid.query(p.minX-l,p.minY-l,p.maxX+l,p.maxY+l),h=Yl(t.cameraQueryGeometry),f=this.grid3D.query(h.minX-l,h.minY-l,h.maxX+l,h.maxY+l,(function(e,r,n,a){return function(t,e,r,n,a){for(var o=0,s=t;o=u.x&&a>=u.y)return !0}var l=[new i(e,r),new i(e,a),new i(n,a),new i(n,r)];if(t.length>2)for(var p=0,c=l;p=0)return !0;return !1}(a,u)){var l=this.sourceLayerCoder.decode(r),p=this.vtLayers[l].feature(n);if(i(new Hn(this.tileID.overscaledZ),p))for(var c=0;c>u.z,p=new i(u.x*l,u.y*l),c=new i(p.x+l,p.y+l),h=this.segments.prepareSegment(4,r,n);r.emplaceBack(p.x,p.y,p.x,p.y),r.emplaceBack(c.x,p.y,c.x,p.y),r.emplaceBack(p.x,c.y,p.x,c.y),r.emplaceBack(c.x,c.y,c.x,c.y);var f=h.vertexLength;n.emplaceBack(f,f+1,f+2),n.emplaceBack(f+1,f+2,f+3),h.vertexLength+=4,h.primitiveLength+=2;}this.maskedBoundsBuffer=e.createVertexBuffer(r,Kl.members),this.maskedIndexBuffer=e.createIndexBuffer(n);}},Wl.prototype.hasData=function(){return \"loaded\"===this.state||\"reloading\"===this.state||\"expired\"===this.state},Wl.prototype.patternsLoaded=function(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length},Wl.prototype.setExpiryData=function(t){var e=this.expirationTime;if(t.cacheControl){var r=I(t.cacheControl);r[\"max-age\"]&&(this.expirationTime=Date.now()+1e3*r[\"max-age\"]);}else t.expires&&(this.expirationTime=new Date(t.expires).getTime());if(this.expirationTime){var n=Date.now(),i=!1;if(this.expirationTime>n)i=!1;else if(e)if(this.expirationTimeut&&(t.getActor().send(\"enforceCacheSizeLimit\",st),yt=0);},t.clamp=l,t.clearTileCache=function(t){var e=self.caches.delete(ot);t&&e.catch(t).then((function(){return t()}));},t.clone=function(t){var e=new ja(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},t.clone$1=b,t.config=D,t.create=function(){var t=new ja(16);return ja!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},t.create$1=function(){var t=new ja(9);return ja!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t},t.create$2=function(){var t=new ja(4);return ja!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},t.createCommonjsModule=e,t.createExpression=Er,t.createLayout=yi,t.createStyleLayer=function(t){return \"custom\"===t.type?new bl(t):new _l[t.type](t)},t.deepEqual=o,t.ease=u,t.emitValidationErrors=vn,t.endsWith=v,t.enforceCacheSizeLimit=function(t){pt(),Q&&Q.then((function(e){e.keys().then((function(r){for(var n=0;n=xa||s.y<0||s.y>=xa||function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,_,A){var S,k,I,z,C,B=t.addToLineVertexArray(e,r),T=0,P=0,E=0,M=0,V=-1,F=-1,L={},O=Zu(\"\"),D=0,R=0;void 0===s._unevaluatedLayout.getValue(\"text-radial-offset\")?(S=s.layout.get(\"text-offset\").evaluate(b,{}).map((function(t){return t*Cs})),D=S[0],R=S[1]):(D=s.layout.get(\"text-radial-offset\").evaluate(b,{})*Cs,R=Yu);if(t.allowVerticalPlacement&&n.vertical){var U=s.layout.get(\"text-rotate\").evaluate(b,{})+90,j=n.vertical;z=new Du(u,r,e,l,p,c,j,h,f,y,t.overscaling,U),o&&(C=new Du(u,r,e,l,p,c,o,m,v,y,t.overscaling,U));}if(i){var q=s.layout.get(\"icon-rotate\").evaluate(b,{}),N=\"none\"!==s.layout.get(\"icon-text-fit\"),K=Mu(i,q,A,N),X=o?Mu(o,q,A,N):void 0;I=new Du(u,r,e,l,p,c,i,m,v,!1,t.overscaling,q),T=4*K.length;var Z=t.iconSizeData,G=null;\"source\"===Z.kind?(G=[_u*s.layout.get(\"icon-size\").evaluate(b,{})])[0]>tl&&w(t.layerIds[0]+': Value for \"icon-size\" is >= '+Qu+'. Reduce your \"icon-size\".'):\"composite\"===Z.kind&&((G=[_u*_.compositeIconSizes[0].evaluate(b,{}),_u*_.compositeIconSizes[1].evaluate(b,{})])[0]>tl||G[1]>tl)&&w(t.layerIds[0]+': Value for \"icon-size\" is >= '+Qu+'. Reduce your \"icon-size\".'),t.addSymbols(t.icon,K,G,x,g,b,!1,e,B.lineStartIndex,B.lineLength,-1),V=t.icon.placedSymbolArray.length-1,X&&(P=4*X.length,t.addSymbols(t.icon,X,G,x,g,b,au.vertical,e,B.lineStartIndex,B.lineLength,-1),F=t.icon.placedSymbolArray.length-1);}for(var J in n.horizontal){var H=n.horizontal[J];if(!k){O=Zu(H.text);var Y=s.layout.get(\"text-rotate\").evaluate(b,{});k=new Du(u,r,e,l,p,c,H,h,f,y,t.overscaling,Y);}var $=1===H.positionedLines.length;if(E+=el(t,e,H,a,s,y,b,d,B,n.vertical?au.horizontal:au.horizontalOnly,$?Object.keys(n.horizontal):[J],L,V,_),$)break}n.vertical&&(M+=el(t,e,n.vertical,a,s,y,b,d,B,au.vertical,[\"vertical\"],L,F,_));var W=k?k.boxStartIndex:t.collisionBoxArray.length,Q=k?k.boxEndIndex:t.collisionBoxArray.length,tt=z?z.boxStartIndex:t.collisionBoxArray.length,et=z?z.boxEndIndex:t.collisionBoxArray.length,rt=I?I.boxStartIndex:t.collisionBoxArray.length,nt=I?I.boxEndIndex:t.collisionBoxArray.length,it=C?C.boxStartIndex:t.collisionBoxArray.length,at=C?C.boxEndIndex:t.collisionBoxArray.length;t.glyphOffsetArray.length>=cl.MAX_GLYPHS&&w(\"Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907\");t.symbolInstances.emplaceBack(e.x,e.y,L.right>=0?L.right:-1,L.center>=0?L.center:-1,L.left>=0?L.left:-1,L.vertical||-1,V,F,O,W,Q,tt,et,rt,nt,it,at,l,E,M,T,P,0,h,D,R);}(t,s,i,r,n,a,h,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,v,_,k,l,x,A,I,y,e,o,p);};if(\"line\"===z)for(var P=0,E=function(t,e,r,n,a){for(var o=[],s=0;s=n&&h.x>=n||(c.x>=n?c=new i(n,c.y+(h.y-c.y)*((n-c.x)/(h.x-c.x)))._round():h.x>=n&&(h=new i(n,c.y+(h.y-c.y)*((n-c.x)/(h.x-c.x)))._round()),c.y>=a&&h.y>=a||(c.y>=a?c=new i(c.x+(h.x-c.x)*((a-c.y)/(h.y-c.y)),a)._round():h.y>=a&&(h=new i(c.x+(h.x-c.x)*((a-c.y)/(h.y-c.y)),a)._round()),l&&c.equals(l[l.length-1])||(l=[c],o.push(l)),l.push(h)))));}return o}(e.geometry,0,0,xa,xa);P1){var q=Tu(j,S,r.vertical||d,n,24,g);q&&T(j,q);}}else if(\"Polygon\"===e.type)for(var N=0,K=Oo(e.geometry,0);N=P.maxzoom))if(\"none\"!==P.visibility)a(_,this.zoom,i),(g[P.id]=P.createBucket({index:h.bucketLayerIDs.length,layers:_,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:w,sourceID:this.source})).populate(S,m),h.bucketLayerIDs.push(_.map((function(e){return e.id})));}}}var T=e.mapObject(m.glyphDependencies,(function(e){return Object.keys(e).map(Number)}));Object.keys(T).length?n.send(\"getGlyphs\",{uid:this.uid,stacks:T},(function(e,t){c||(c=e,p=t,C.call(l));})):p={};var L=Object.keys(m.iconDependencies);L.length?n.send(\"getImages\",{icons:L,source:this.source,tileID:this.tileID,type:\"icons\"},(function(e,t){c||(c=e,f=t,C.call(l));})):f={};var D=Object.keys(m.patternDependencies);function C(){if(c)return s(c);if(p&&f&&d){var t=new o(p),r=new e.ImageAtlas(f,d);for(var n in g){var l=g[n];l instanceof e.SymbolBucket?(a(l.layers,this.zoom,i),e.performSymbolLayout(l,p,t.positions,f,r.iconPositions,this.showCollisionBoxes)):l.hasPattern&&(l instanceof e.LineBucket||l instanceof e.FillBucket||l instanceof e.FillExtrusionBucket)&&(a(l.layers,this.zoom,i),l.addFeatures(m,r.patternPositions));}this.status=\"done\",s(null,{buckets:e.values(g).filter((function(e){return !e.isEmpty()})),featureIndex:h,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:t.image,imageAtlas:r,glyphMap:this.returnDependencies?p:null,iconMap:this.returnDependencies?f:null,glyphPositions:this.returnDependencies?t.positions:null});}}D.length?n.send(\"getImages\",{icons:D,source:this.source,tileID:this.tileID,type:\"patterns\"},(function(e,t){c||(c=e,d=t,C.call(l));})):d={},C.call(this);};var s=\"undefined\"!=typeof performance,l={getEntriesByName:function(e){return !!(s&&performance&&performance.getEntriesByName)&&performance.getEntriesByName(e)},mark:function(e){return !!(s&&performance&&performance.mark)&&performance.mark(e)},measure:function(e,t,r){return !!(s&&performance&&performance.measure)&&performance.measure(e,t,r)},clearMarks:function(e){return !!(s&&performance&&performance.clearMarks)&&performance.clearMarks(e)},clearMeasures:function(e){return !!(s&&performance&&performance.clearMeasures)&&performance.clearMeasures(e)}},u=function(e){this._marks={start:[e.url,\"start\"].join(\"#\"),end:[e.url,\"end\"].join(\"#\"),measure:e.url.toString()},l.mark(this._marks.start);};function h(t,r){var i=e.getArrayBuffer(t.request,(function(t,i,o,n){t?r(t):i&&r(null,{vectorTile:new e.vectorTile.VectorTile(new e.pbf(i)),rawData:i,cacheControl:o,expires:n});}));return function(){i.cancel(),r();}}u.prototype.finish=function(){l.mark(this._marks.end);var e=l.getEntriesByName(this._marks.measure);return 0===e.length&&(l.measure(this._marks.measure,this._marks.start,this._marks.end),e=l.getEntriesByName(this._marks.measure),l.clearMarks(this._marks.start),l.clearMarks(this._marks.end),l.clearMeasures(this._marks.measure)),e},l.Performance=u;var c=function(e,t,r,i){this.actor=e,this.layerIndex=t,this.availableImages=r,this.loadVectorData=i||h,this.loading={},this.loaded={};};c.prototype.loadTile=function(t,r){var i=this,o=t.uid;this.loading||(this.loading={});var a=!!(t&&t.request&&t.request.collectResourceTiming)&&new l.Performance(t.request),s=this.loading[o]=new n(t);s.abort=this.loadVectorData(t,(function(t,n){if(delete i.loading[o],t||!n)return s.status=\"done\",i.loaded[o]=s,r(t);var l=n.rawData,u={};n.expires&&(u.expires=n.expires),n.cacheControl&&(u.cacheControl=n.cacheControl);var h={};if(a){var c=a.finish();c&&(h.resourceTiming=JSON.parse(JSON.stringify(c)));}s.vectorTile=n.vectorTile,s.parse(n.vectorTile,i.layerIndex,i.availableImages,i.actor,(function(t,i){if(t||!i)return r(t);r(null,e.extend({rawTileData:l.slice(0)},i,u,h));})),i.loaded=i.loaded||{},i.loaded[o]=s;}));},c.prototype.reloadTile=function(e,t){var r=this,i=this.loaded,o=e.uid,n=this;if(i&&i[o]){var a=i[o];a.showCollisionBoxes=e.showCollisionBoxes;var s=function(e,i){var o=a.reloadCallback;o&&(delete a.reloadCallback,a.parse(a.vectorTile,n.layerIndex,r.availableImages,n.actor,o)),t(e,i);};\"parsing\"===a.status?a.reloadCallback=s:\"done\"===a.status&&(a.vectorTile?a.parse(a.vectorTile,this.layerIndex,this.availableImages,this.actor,s):s());}},c.prototype.abortTile=function(e,t){var r=this.loading,i=e.uid;r&&r[i]&&r[i].abort&&(r[i].abort(),delete r[i]),t();},c.prototype.removeTile=function(e,t){var r=this.loaded,i=e.uid;r&&r[i]&&delete r[i],t();};var p=function(){this.loaded={};};p.prototype.loadTile=function(t,r){var i=t.uid,o=t.encoding,n=t.rawImageData,a=new e.DEMData(i,n,o);this.loaded=this.loaded||{},this.loaded[i]=a,r(null,a);},p.prototype.removeTile=function(e){var t=this.loaded,r=e.uid;t&&t[r]&&delete t[r];};var f={RADIUS:6378137,FLATTENING:1/298.257223563,POLAR_RADIUS:6356752.3142};function d(e){var t=0;if(e&&e.length>0){t+=Math.abs(g(e[0]));for(var r=1;r2){for(a=0;a=0}(e)===t?e:e.reverse()}var M=e.vectorTile.VectorTileFeature.prototype.toGeoJSON,b=function(t){this._feature=t,this.extent=e.EXTENT,this.type=t.type,this.properties=t.tags,\"id\"in t&&!isNaN(t.id)&&(this.id=parseInt(t.id,10));};b.prototype.loadGeometry=function(){if(1===this._feature.type){for(var t=[],r=0,i=this._feature.geometry;r>31}function J(e,t){for(var r=e.loadGeometry(),i=e.type,o=0,n=0,a=r.length,s=0;s>1;!function e(t,r,i,o,n,a){for(;n>o;){if(n-o>600){var s=n-o+1,l=i-o+1,u=Math.log(s),h=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*h*(s-h)/s)*(l-s/2<0?-1:1),p=Math.max(o,Math.floor(i-l*h/s+c)),f=Math.min(n,Math.floor(i+(s-l)*h/s+c));e(t,r,i,p,f,a);}var d=r[2*i+a],g=o,m=n;for(j(t,r,o,i),r[2*n+a]>d&&j(t,r,o,n);gd;)m--;}r[2*o+a]===d?j(t,r,o,m):j(t,r,++m,n),m<=i&&(o=m+1),i<=m&&(n=m-1);}}(e,t,a,i,o,n%2),G(e,t,r,i,a-1,n+1),G(e,t,r,a+1,o,n+1);}}function j(e,t,r,i){Y(e,r,i),Y(t,2*r,2*i),Y(t,2*r+1,2*i+1);}function Y(e,t,r){var i=e[t];e[t]=e[r],e[r]=i;}function V(e,t,r,i){var o=e-r,n=t-i;return o*o+n*n}L.fromVectorTileJs=D,L.fromGeojsonVt=C,L.GeoJSONWrapper=O;var X=function(e){return e[0]},W=function(e){return e[1]},R=function(e,t,r,i,o){void 0===t&&(t=X),void 0===r&&(r=W),void 0===i&&(i=64),void 0===o&&(o=Float64Array),this.nodeSize=i,this.points=e;for(var n=e.length<65536?Uint16Array:Uint32Array,a=this.ids=new n(e.length),s=this.coords=new o(2*e.length),l=0;l=r&&s<=o&&l>=i&&l<=n&&h.push(e[d]);else{var g=Math.floor((f+p)/2);s=t[2*g],l=t[2*g+1],s>=r&&s<=o&&l>=i&&l<=n&&h.push(e[g]);var m=(c+1)%2;(0===c?r<=s:i<=l)&&(u.push(f),u.push(g-1),u.push(m)),(0===c?o>=s:n>=l)&&(u.push(g+1),u.push(p),u.push(m));}}return h}(this.ids,this.coords,e,t,r,i,this.nodeSize)},R.prototype.within=function(e,t,r){return function(e,t,r,i,o,n){for(var a=[0,e.length-1,0],s=[],l=o*o;a.length;){var u=a.pop(),h=a.pop(),c=a.pop();if(h-c<=n)for(var p=c;p<=h;p++)V(t[2*p],t[2*p+1],r,i)<=l&&s.push(e[p]);else{var f=Math.floor((c+h)/2),d=t[2*f],g=t[2*f+1];V(d,g,r,i)<=l&&s.push(e[f]);var m=(u+1)%2;(0===u?r-o<=d:i-o<=g)&&(a.push(c),a.push(f-1),a.push(m)),(0===u?r+o>=d:i+o>=g)&&(a.push(f+1),a.push(h),a.push(m));}}return s}(this.ids,this.coords,e,t,r,this.nodeSize)};var q={minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:function(e){return e}},U=function(e){this.options=re(Object.create(q),e),this.trees=new Array(this.options.maxZoom+1);};function $(e,t,r,i,o){return {x:e,y:t,zoom:1/0,id:r,parentId:-1,numPoints:i,properties:o}}function H(e,t){var r=e.geometry.coordinates,i=r[0],o=r[1];return {x:ee(i),y:te(o),zoom:1/0,index:t,parentId:-1}}function K(e){return {type:\"Feature\",id:e.id,properties:Q(e),geometry:{type:\"Point\",coordinates:[(i=e.x,360*(i-.5)),(t=e.y,r=(180-360*t)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var t,r,i;}function Q(e){var t=e.numPoints,r=t>=1e4?Math.round(t/1e3)+\"k\":t>=1e3?Math.round(t/100)/10+\"k\":t;return re(re({},e.properties),{cluster:!0,cluster_id:e.id,point_count:t,point_count_abbreviated:r})}function ee(e){return e/360+.5}function te(e){var t=Math.sin(e*Math.PI/180),r=.5-.25*Math.log((1+t)/(1-t))/Math.PI;return r<0?0:r>1?1:r}function re(e,t){for(var r in t)e[r]=t[r];return e}function ie(e){return e.x}function oe(e){return e.y}function ne(e,t,r,i,o,n){var a=o-r,s=n-i;if(0!==a||0!==s){var l=((e-r)*a+(t-i)*s)/(a*a+s*s);l>1?(r=o,i=n):l>0&&(r+=a*l,i+=s*l);}return (a=e-r)*a+(s=t-i)*s}function ae(e,t,r,i){var o={id:void 0===e?null:e,type:t,geometry:r,tags:i,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(e){var t=e.geometry,r=e.type;if(\"Point\"===r||\"MultiPoint\"===r||\"LineString\"===r)se(e,t);else if(\"Polygon\"===r||\"MultiLineString\"===r)for(var i=0;i0&&(a+=i?(o*u-l*n)/2:Math.sqrt(Math.pow(l-o,2)+Math.pow(u-n,2))),o=l,n=u;}var h=t.length-3;t[2]=1,function e(t,r,i,o){for(var n,a=o,s=i-r>>1,l=i-r,u=t[r],h=t[r+1],c=t[i],p=t[i+1],f=r+3;fa)n=f,a=d;else if(d===a){var g=Math.abs(f-s);go&&(n-r>3&&e(t,r,n,o),t[n+2]=a,i-n>3&&e(t,n,i,o));}(t,0,h,r),t[h+2]=1,t.size=Math.abs(a),t.start=0,t.end=t.size;}function ce(e,t,r,i){for(var o=0;o1?1:r}function de(e,t,r,i,o,n,a,s){if(i/=t,n>=(r/=t)&&a=i)return null;for(var l=[],u=0;u=r&&d=i)){var g=[];if(\"Point\"===p||\"MultiPoint\"===p)ge(c,g,r,i,o);else if(\"LineString\"===p)me(c,g,r,i,o,!1,s.lineMetrics);else if(\"MultiLineString\"===p)ye(c,g,r,i,o,!1);else if(\"Polygon\"===p)ye(c,g,r,i,o,!0);else if(\"MultiPolygon\"===p)for(var m=0;m=r&&a<=i&&(t.push(e[n]),t.push(e[n+1]),t.push(e[n+2]));}}function me(e,t,r,i,o,n,a){for(var s,l,u=ve(e),h=0===o?we:Se,c=e.start,p=0;pr&&(l=h(u,f,d,m,v,r),a&&(u.start=c+s*l)):y>i?x=r&&(l=h(u,f,d,m,v,r),w=!0),x>i&&y<=i&&(l=h(u,f,d,m,v,i),w=!0),!n&&w&&(a&&(u.end=c+s*l),t.push(u),u=ve(e)),a&&(c+=s);}var S=e.length-3;f=e[S],d=e[S+1],g=e[S+2],(y=0===o?f:d)>=r&&y<=i&&xe(u,f,d,g),S=u.length-3,n&&S>=3&&(u[S]!==u[0]||u[S+1]!==u[1])&&xe(u,u[0],u[1],u[2]),u.length&&t.push(u);}function ve(e){var t=[];return t.size=e.size,t.start=e.start,t.end=e.end,t}function ye(e,t,r,i,o,n){for(var a=0;aa.maxX&&(a.maxX=h),c>a.maxY&&(a.maxY=c);}return a}function Pe(e,t,r,i){var o=t.geometry,n=t.type,a=[];if(\"Point\"===n||\"MultiPoint\"===n)for(var s=0;s0&&t.size<(o?a:i))r.numPoints+=t.length/3;else{for(var s=[],l=0;la)&&(r.numSimplified++,s.push(t[l]),s.push(t[l+1])),r.numPoints++;o&&function(e,t){for(var r=0,i=0,o=e.length,n=o-2;i0===t)for(i=0,o=e.length;i24)throw new Error(\"maxZoom should be in the 0-24 range\");if(t.promoteId&&t.generateId)throw new Error(\"promoteId and generateId cannot be used together.\");var i=function(e,t){var r=[];if(\"FeatureCollection\"===e.type)for(var i=0;i=i;u--){var h=+Date.now();s=this._cluster(s,u),this.trees[u]=new R(s,ie,oe,n,Float32Array),r&&console.log(\"z%d: %d clusters in %dms\",u,s.length,+Date.now()-h);}return r&&console.timeEnd(\"total time\"),this},U.prototype.getClusters=function(e,t){var r=((e[0]+180)%360+360)%360-180,i=Math.max(-90,Math.min(90,e[1])),o=180===e[2]?180:((e[2]+180)%360+360)%360-180,n=Math.max(-90,Math.min(90,e[3]));if(e[2]-e[0]>=360)r=-180,o=180;else if(r>o){var a=this.getClusters([r,i,180,n],t),s=this.getClusters([-180,i,o,n],t);return a.concat(s)}for(var l=this.trees[this._limitZoom(t)],u=[],h=0,c=l.range(ee(r),te(n),ee(o),te(i));h1?this._map(u,!0):null,m=(l<<5)+(t+1)+this.points.length,v=0,y=c;v>5},U.prototype._getOriginZoom=function(e){return (e-this.points.length)%32},U.prototype._map=function(e,t){if(e.numPoints)return t?re({},e.properties):e.properties;var r=this.points[e.index].properties,i=this.options.map(r);return t&&i===r?re({},i):i},Le.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},Le.prototype.splitTile=function(e,t,r,i,o,n,a){for(var s=[e,t,r,i],l=this.options,u=l.debug;s.length;){i=s.pop(),r=s.pop(),t=s.pop(),e=s.pop();var h=1<1&&console.time(\"creation\"),p=this.tiles[c]=_e(e,t,r,i,l),this.tileCoords.push({z:t,x:r,y:i}),u)){u>1&&(console.log(\"tile z%d-%d-%d (features: %d, points: %d, simplified: %d)\",t,r,i,p.numFeatures,p.numPoints,p.numSimplified),console.timeEnd(\"creation\"));var f=\"z\"+t;this.stats[f]=(this.stats[f]||0)+1,this.total++;}if(p.source=e,o){if(t===l.maxZoom||t===o)continue;var d=1<1&&console.time(\"clipping\");var g,m,v,y,x,w,S=.5*l.buffer/l.extent,M=.5-S,b=.5+S,k=1+S;g=m=v=y=null,x=de(e,h,r-S,r+b,0,p.minX,p.maxX,l),w=de(e,h,r+M,r+k,0,p.minX,p.maxX,l),e=null,x&&(g=de(x,h,i-S,i+b,1,p.minY,p.maxY,l),m=de(x,h,i+M,i+k,1,p.minY,p.maxY,l),x=null),w&&(v=de(w,h,i-S,i+b,1,p.minY,p.maxY,l),y=de(w,h,i+M,i+k,1,p.minY,p.maxY,l),w=null),u>1&&console.timeEnd(\"clipping\"),s.push(g||[],t+1,2*r,2*i),s.push(m||[],t+1,2*r,2*i+1),s.push(v||[],t+1,2*r+1,2*i),s.push(y||[],t+1,2*r+1,2*i+1);}}},Le.prototype.getTile=function(e,t,r){var i=this.options,o=i.extent,n=i.debug;if(e<0||e>24)return null;var a=1<1&&console.log(\"drilling down to z%d-%d-%d\",e,t,r);for(var l,u=e,h=t,c=r;!l&&u>0;)u--,h=Math.floor(h/2),c=Math.floor(c/2),l=this.tiles[De(u,h,c)];return l&&l.source?(n>1&&console.log(\"found parent tile z%d-%d-%d\",u,h,c),n>1&&console.time(\"drilling down\"),this.splitTile(l.source,u,h,c,e,t,r),n>1&&console.timeEnd(\"drilling down\"),this.tiles[s]?ke(this.tiles[s],o):null):null};var Oe=function(t){function r(e,r,i,o){t.call(this,e,r,i,Ce),o&&(this.loadGeoJSON=o);}return t&&(r.__proto__=t),r.prototype=Object.create(t&&t.prototype),r.prototype.constructor=r,r.prototype.loadData=function(e,t){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=t,this._pendingLoadDataParams=e,this._state&&\"Idle\"!==this._state?this._state=\"NeedsLoadData\":(this._state=\"Coalescing\",this._loadData());},r.prototype._loadData=function(){var t=this;if(this._pendingCallback&&this._pendingLoadDataParams){var r=this._pendingCallback,i=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var o=!!(i&&i.request&&i.request.collectResourceTiming)&&new l.Performance(i.request);this.loadGeoJSON(i,(function(n,a){if(n||!a)return r(n);if(\"object\"!=typeof a)return r(new Error(\"Input data given to '\"+i.source+\"' is not a valid GeoJSON object.\"));y(a,!0);try{t._geoJSONIndex=i.cluster?new U(function(t){var r=t.superclusterOptions,i=t.clusterProperties;if(!i||!r)return r;for(var o={},n={},a={accumulated:null,zoom:0},s={properties:null},l=Object.keys(i),u=0,h=l;u=0?0:e.button},i.remove=function(t){t.parentNode&&t.parentNode.removeChild(t);};var p=function(e){function i(){e.call(this),this.images={},this.updatedImages={},this.callbackDispatchedThisFrame={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0;}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.isLoaded=function(){return this.loaded},i.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,i=this.requestors;e=0?1.2:1));}function g(t,e,i,o,r,a,n){for(var s=0;s65535)e(new Error(\"glyphs > 65535 not supported\"));else{var l=a.requests[s];l||(l=a.requests[s]=[],y.loadGlyphRange(i,s,o.url,o.requestManager,(function(t,e){if(e)for(var i in e)o._doesCharSupportLocalGlyph(+i)||(a.glyphs[+i]=e[+i]);for(var r=0,n=l;rthis.height)return t.warnOnce(\"LineAtlas out of space\"),null;for(var a=0,n=0;n=o&&e.x=r&&e.y0&&(l[new t.OverscaledTileID(e.overscaledZ,a,i.z,r,i.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,i.z,i.x,i.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,i.z,n,i.y-1).key]={backfilled:!1}),i.y+10&&(o.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event(\"data\",o));}}));},i.prototype.onAdd=function(t){this.map=t,this.load();},i.prototype.setData=function(e){var i=this;return this._data=e,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._updateWorkerData((function(e){if(e)i.fire(new t.ErrorEvent(e));else{var o={dataType:\"source\",sourceDataType:\"content\"};i._collectResourceTiming&&i._resourceTiming&&i._resourceTiming.length>0&&(o.resourceTiming=i._resourceTiming,i._resourceTiming=[]),i.fire(new t.Event(\"data\",o));}})),this},i.prototype.getClusterExpansionZoom=function(t,e){return this.actor.send(\"geojson.getClusterExpansionZoom\",{clusterId:t,source:this.id},e),this},i.prototype.getClusterChildren=function(t,e){return this.actor.send(\"geojson.getClusterChildren\",{clusterId:t,source:this.id},e),this},i.prototype.getClusterLeaves=function(t,e,i,o){return this.actor.send(\"geojson.getClusterLeaves\",{source:this.id,clusterId:t,limit:e,offset:i},o),this},i.prototype._updateWorkerData=function(e){var i=this;this._loaded=!1;var o=t.extend({},this.workerOptions),r=this._data;\"string\"==typeof r?(o.request=this.map._requestManager.transformRequest(t.browser.resolveURL(r),t.ResourceType.Source),o.request.collectResourceTiming=this._collectResourceTiming):o.data=JSON.stringify(r),this.actor.send(this.type+\".loadData\",o,(function(t,r){i._removed||r&&r.abandoned||(i._loaded=!0,r&&r.resourceTiming&&r.resourceTiming[i.id]&&(i._resourceTiming=r.resourceTiming[i.id].slice(0)),i.actor.send(i.type+\".coalesce\",{source:o.source},null),e(t));}));},i.prototype.loaded=function(){return this._loaded},i.prototype.loadTile=function(e,i){var o=this,r=e.actor?\"reloadTile\":\"loadTile\";e.actor=this.actor;var a={type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes};e.request=this.actor.send(r,a,(function(t,a){return delete e.request,e.unloadVectorData(),e.aborted?i(null):t?i(t):(e.loadVectorData(a,o.map.painter,\"reloadTile\"===r),i(null))}));},i.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.aborted=!0;},i.prototype.unloadTile=function(t){t.unloadVectorData(),t.clearMask(),this.actor.send(\"removeTile\",{uid:t.uid,type:this.type,source:this.id});},i.prototype.onRemove=function(){this._removed=!0,this.actor.send(\"removeSource\",{type:this.type,source:this.id});},i.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},i.prototype.hasTransition=function(){return !1},i}(t.Evented),M=function(e){function i(t,i,o,r){e.call(this),this.id=t,this.dispatcher=o,this.coordinates=i.coordinates,this.type=\"image\",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this._loaded=!1,this.setEventedParent(r),this.options=i;}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.load=function(e,i){var o=this;this._loaded=!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this.url=this.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),(function(r,a){o._loaded=!0,r?o.fire(new t.ErrorEvent(r)):a&&(o.image=a,e&&(o.coordinates=e),i&&i(),o._finishLoading());}));},i.prototype.loaded=function(){return this._loaded},i.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,(function(){e.texture=null;})),this):this},i.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})));},i.prototype.onAdd=function(t){this.map=t,this.load();},i.prototype.setCoordinates=function(e){var i=this;this.coordinates=e;var o=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var i=1/0,o=1/0,r=-1/0,a=-1/0,n=0,s=e;ni.end(0)?this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+this.id,null,\"Playback for this video can be set only between the \"+i.start(0)+\" and \"+i.end(0)+\"-second mark.\"))):this.video.currentTime=e;}},i.prototype.getVideo=function(){return this.video},i.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)));},i.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,i=e.gl;for(var o in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(i.LINEAR,i.CLAMP_TO_EDGE),i.texSubImage2D(i.TEXTURE_2D,0,0,0,i.RGBA,i.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,i.RGBA),this.texture.bind(i.LINEAR,i.CLAMP_TO_EDGE)),this.tiles){var r=this.tiles[o];\"loaded\"!==r.state&&(r.state=\"loaded\",r.texture=this.texture);}}},i.prototype.serialize=function(){return {type:\"video\",urls:this.urls,coordinates:this.coordinates}},i.prototype.hasTransition=function(){return this.video&&!this.video.paused},i}(M),A=function(e){function i(i,o,r,a){e.call(this,i,o,r,a),o.coordinates?Array.isArray(o.coordinates)&&4===o.coordinates.length&&!o.coordinates.some((function(t){return !Array.isArray(t)||2!==t.length||t.some((function(t){return \"number\"!=typeof t}))}))||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'\"coordinates\" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'missing required property \"coordinates\"'))),o.animate&&\"boolean\"!=typeof o.animate&&this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'optional \"animate\" property must be a boolean value'))),o.canvas?\"string\"==typeof o.canvas||o.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'\"canvas\" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'missing required property \"canvas\"'))),this.options=o,this.animate=void 0===o.animate||o.animate;}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.load=function(){this._loaded=!0,this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error(\"Canvas dimensions cannot be less than or equal to zero.\"))):(this.play=function(){this._playing=!0,this.map.triggerRepaint();},this.pause=function(){this._playing&&(this.prepare(),this._playing=!1);},this._finishLoading());},i.prototype.getCanvas=function(){return this.canvas},i.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play();},i.prototype.onRemove=function(){this.pause();},i.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var i=this.map.painter.context,o=i.gl;for(var r in this.boundsBuffer||(this.boundsBuffer=i.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(i,this.canvas,o.RGBA,{premultiply:!0}),this.tiles){var a=this.tiles[r];\"loaded\"!==a.state&&(a.state=\"loaded\",a.texture=this.texture);}}},i.prototype.serialize=function(){return {type:\"canvas\",coordinates:this.coordinates}},i.prototype.hasTransition=function(){return this._playing},i.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];tthis.max){var n=this._getAndRemoveByKey(this.order[0]);n&&this.onRemove(n);}return this},U.prototype.has=function(t){return t.wrapped().key in this.data},U.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},U.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},U.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},U.prototype.remove=function(t,e){if(!this.has(t))return this;var i=t.wrapped().key,o=void 0===e?0:this.data[i].indexOf(e),r=this.data[i][o];return this.data[i].splice(o,1),r.timeout&&clearTimeout(r.timeout),0===this.data[i].length&&delete this.data[i],this.onRemove(r.value),this.order.splice(this.order.indexOf(i),1),this},U.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e);}return this},U.prototype.filter=function(t){var e=[];for(var i in this.data)for(var o=0,r=this.data[i];o1||(Math.abs(i)>1&&(1===Math.abs(i+r)?i+=r:1===Math.abs(i-r)&&(i-=r)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,i,o),t.neighboringTiles&&t.neighboringTiles[a]&&(t.neighboringTiles[a].backfilled=!0)));}},i.prototype.getTile=function(t){return this.getTileByID(t.key)},i.prototype.getTileByID=function(t){return this._tiles[t]},i.prototype._retainLoadedChildren=function(t,e,i,o){for(var r in this._tiles){var a=this._tiles[r];if(!(o[r]||!a.hasData()||a.tileID.overscaledZ<=e||a.tileID.overscaledZ>i)){for(var n=a.tileID;a&&a.tileID.overscaledZ>e+1;){var s=a.tileID.scaledTo(a.tileID.overscaledZ-1);(a=this._tiles[s.key])&&a.hasData()&&(n=s);}for(var l=n;l.overscaledZ>e;)if(t[(l=l.scaledTo(l.overscaledZ-1)).key]){o[n.key]=n;break}}}},i.prototype.findLoadedParent=function(t,e){for(var i=t.overscaledZ-1;i>=e;i--){var o=t.scaledTo(i);if(!o)return;var r=String(o.key),a=this._tiles[r];if(a&&a.hasData())return a;if(this._cache.has(o))return this._cache.get(o)}},i.prototype.updateCacheSize=function(t){var e=(Math.ceil(t.width/this._source.tileSize)+1)*(Math.ceil(t.height/this._source.tileSize)+1),i=Math.floor(5*e),o=\"number\"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,i):i;this._cache.setMaxSize(o);},i.prototype.handleWrapJump=function(t){var e=(t-(void 0===this._prevLng?t:this._prevLng))/360,i=Math.round(e);if(this._prevLng=t,i){var o={};for(var r in this._tiles){var a=this._tiles[r];a.tileID=a.tileID.unwrapTo(a.tileID.wrap+i),o[a.tileID.key]=a;}for(var n in this._tiles=o,this._timers)clearTimeout(this._timers[n]),delete this._timers[n];for(var s in this._tiles){var l=this._tiles[s];this._setTileReloadTimer(s,l);}}},i.prototype.update=function(e){var o=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var r;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?r=e.getVisibleUnwrappedCoordinates(this._source.tileID).map((function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)})):(r=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(r=r.filter((function(t){return o._source.hasTile(t)})))):r=[];var a=e.coveringZoomLevel(this._source),n=Math.max(a-i.maxOverzooming,this._source.minzoom),s=Math.max(a+i.maxUnderzooming,this._source.minzoom),l=this._updateRetainedTiles(r,a);if(Dt(this._source.type)){for(var c={},u={},h=0,p=Object.keys(l);hthis._source.maxzoom){var m=_.children(this._source.maxzoom)[0],g=this.getTile(m);if(g&&g.hasData()){o[m.key]=m;continue}}else{var v=_.children(this._source.maxzoom);if(o[v[0].key]&&o[v[1].key]&&o[v[2].key]&&o[v[3].key])continue}for(var y=f.wasRequested(),x=_.overscaledZ-1;x>=a;--x){var b=_.scaledTo(x);if(r[b.key])break;if(r[b.key]=!0,!(f=this.getTile(b))&&y&&(f=this._addTile(b)),f&&(o[b.key]=b,y=f.wasRequested(),f.hasData()))break}}}return o},i.prototype._addTile=function(e){var i=this._tiles[e.key];if(i)return i;(i=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,i),i.tileID=e,this._state.initializeTileState(i,this.map?this.map.painter:null),this._cacheTimers[e.key]&&(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,i)));var o=Boolean(i);return o||(i=new t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(i,this._tileLoaded.bind(this,i,e.key,i.state))),i?(i.uses++,this._tiles[e.key]=i,o||this._source.fire(new t.Event(\"dataloading\",{tile:i,coord:i.tileID,dataType:\"source\"})),i):null},i.prototype._setTileReloadTimer=function(t,e){var i=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var o=e.getExpiryTimeout();o&&(this._timers[t]=setTimeout((function(){i._reloadTile(t,\"expired\"),delete i._timers[t];}),o));},i.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()&&\"reloading\"!==e.state?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))));},i.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset();},i.prototype.tilesIn=function(e,i,o){var r=this,a=[],n=this.transform;if(!n)return a;for(var s=o?n.getCameraQueryGeometry(e):e,l=e.map((function(t){return n.pointCoordinate(t)})),c=s.map((function(t){return n.pointCoordinate(t)})),u=this.getIds(),h=1/0,p=1/0,d=-1/0,_=-1/0,f=0,m=c;f=0&&g[1].y+m>=0){var v=l.map((function(t){return s.getTilePoint(t)})),y=c.map((function(t){return s.getTilePoint(t)}));a.push({tile:o,tileID:s,queryGeometry:v,cameraQueryGeometry:y,scale:f});}}},y=0;y=t.browser.now())return !0}return !1},i.prototype.setFeatureState=function(t,e,i){t=t||\"_geojsonTileLayer\",this._state.updateState(t,e,i);},i.prototype.removeFeatureState=function(t,e,i){t=t||\"_geojsonTileLayer\",this._state.removeFeatureState(t,e,i);},i.prototype.getFeatureState=function(t,e){return t=t||\"_geojsonTileLayer\",this._state.getState(t,e)},i.prototype.setDependencies=function(t,e,i){var o=this._tiles[t];o&&o.setDependencies(e,i);},i.prototype.reloadTilesForDependencies=function(t,e){for(var i in this._tiles){this._tiles[i].hasDependency(t,e)&&this._reloadTile(i,\"reloading\");}this._cache.filter((function(i){return !i.hasDependency(t,e)}));},i}(t.Evented);function Mt(t,e){return t%32-e%32||e-t}function Dt(t){return \"raster\"===t||\"image\"===t||\"video\"===t}function At(){return new t.window.Worker(cr.workerUrl)}Lt.maxOverzooming=10,Lt.maxUnderzooming=3;var Rt=function(){this.active={};};Rt.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length=-e[0]&&i<=e[0]&&o>=-e[1]&&o<=e[1]}function $t(e,i,o,r,a,n,s,l){var c=r?e.textSizeData:e.iconSizeData,u=t.evaluateSizeForZoom(c,o.transform.zoom),h=[256/o.width*2+1,256/o.height*2+1],p=r?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;p.clear();for(var d=e.lineVertexArray,_=r?e.text.placedSymbolArray:e.icon.placedSymbolArray,f=o.transform.width/o.transform.height,m=!1,g=0;g<_.length;g++){var v=_.get(g);if(v.hidden||v.writingMode===t.WritingMode.vertical&&!m)ne(v.numGlyphs,p);else{m=!1;var y=[v.anchorX,v.anchorY,0,1];if(t.transformMat4(y,y,i),Qt(y,h)){var x=.5+y[3]/o.transform.cameraToCenterDistance*.5,b=t.evaluateSizeForFeature(c,u,v),w=s?b*x:b/x,E=new t.Point(v.anchorX,v.anchorY),T=Jt(E,a).point,I={},C=ie(v,w,!1,l,i,a,n,e.glyphOffsetArray,d,p,T,E,I,f);m=C.useVertical,(C.notEnoughRoom||m||C.needsFlipping&&ie(v,w,!0,l,i,a,n,e.glyphOffsetArray,d,p,T,E,I,f).notEnoughRoom)&&ne(v.numGlyphs,p);}else ne(v.numGlyphs,p);}}r?e.text.dynamicLayoutVertexBuffer.updateData(p):e.icon.dynamicLayoutVertexBuffer.updateData(p);}function te(t,e,i,o,r,a,n,s,l,c,u,h){var p=s.glyphStartIndex+s.numGlyphs,d=s.lineStartIndex,_=s.lineStartIndex+s.lineLength,f=e.getoffsetX(s.glyphStartIndex),m=e.getoffsetX(p-1),g=re(t*f,i,o,r,a,n,s.segment,d,_,l,c,u,h);if(!g)return null;var v=re(t*m,i,o,r,a,n,s.segment,d,_,l,c,u,h);return v?{first:g,last:v}:null}function ee(e,i,o,r){if(e===t.WritingMode.horizontal&&Math.abs(o.y-i.y)>Math.abs(o.x-i.x)*r)return {useVertical:!0};return (e===t.WritingMode.vertical?i.yo.x)?{needsFlipping:!0}:null}function ie(e,i,o,r,a,n,s,l,c,u,h,p,d,_){var f,m=i/24,g=e.lineOffsetX*m,v=e.lineOffsetY*m;if(e.numGlyphs>1){var y=e.glyphStartIndex+e.numGlyphs,x=e.lineStartIndex,b=e.lineStartIndex+e.lineLength,w=te(m,l,g,v,o,h,p,e,c,n,d,!1);if(!w)return {notEnoughRoom:!0};var E=Jt(w.first.point,s).point,T=Jt(w.last.point,s).point;if(r&&!o){var I=ee(e.writingMode,E,T,_);if(I)return I}f=[w.first];for(var C=e.glyphStartIndex+1;C0?L.point:oe(p,z,S,1,a),D=ee(e.writingMode,S,M,_);if(D)return D}var A=re(m*l.getoffsetX(e.glyphStartIndex),g,v,o,h,p,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,c,n,d,!1);if(!A)return {notEnoughRoom:!0};f=[A];}for(var R=0,k=f;R0?1:-1,m=0;r&&(f*=-1,m=Math.PI),f<0&&(m+=Math.PI);for(var g=f>0?l+s:l+s+1,v=g,y=a,x=a,b=0,w=0,E=Math.abs(_);b+w<=E;){if((g+=f)=c)return null;if(x=y,void 0===(y=p[g])){var T=new t.Point(u.getx(g),u.gety(g)),I=Jt(T,h);if(I.signedDistanceFromCamera>0)y=p[g]=I.point;else{var C=g-f;y=oe(0===b?n:new t.Point(u.getx(C),u.gety(C)),T,x,E-b+1,h);}}b+=w,w=x.dist(y);}var S=(E-b)/w,P=y.sub(x),z=P.mult(S)._add(x);return z._add(P._unit()._perp()._mult(o*f)),{point:z,angle:m+Math.atan2(y.y-x.y,y.x-x.x),tileDistance:d?{prevTileDistance:g-f===v?0:u.gettileUnitDistanceFromAnchor(g-f),lastSegmentViewportDistance:E-b}:null}}Ht.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},Ht.prototype.insert=function(t,e,i,o,r){this._forEachCell(e,i,o,r,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(i),this.bboxes.push(o),this.bboxes.push(r);},Ht.prototype.insertCircle=function(t,e,i,o){this._forEachCell(e-o,i-o,e+o,i+o,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(i),this.circles.push(o);},Ht.prototype._insertBoxCell=function(t,e,i,o,r,a){this.boxCells[r].push(a);},Ht.prototype._insertCircleCell=function(t,e,i,o,r,a){this.circleCells[r].push(a);},Ht.prototype._query=function(t,e,i,o,r,a){if(i<0||t>this.width||o<0||e>this.height)return !r&&[];var n=[];if(t<=0&&e<=0&&this.width<=i&&this.height<=o){if(r)return !0;for(var s=0;s0:n},Ht.prototype._queryCircle=function(t,e,i,o,r){var a=t-i,n=t+i,s=e-i,l=e+i;if(n<0||a>this.width||l<0||s>this.height)return !o&&[];var c=[],u={hitTest:o,circle:{x:t,y:e,radius:i},seenUids:{box:{},circle:{}}};return this._forEachCell(a,s,n,l,this._queryCellCircle,c,u,r),o?c.length>0:c},Ht.prototype.query=function(t,e,i,o,r){return this._query(t,e,i,o,!1,r)},Ht.prototype.hitTest=function(t,e,i,o,r){return this._query(t,e,i,o,!0,r)},Ht.prototype.hitTestCircle=function(t,e,i,o){return this._queryCircle(t,e,i,!0,o)},Ht.prototype._queryCell=function(t,e,i,o,r,a,n,s){var l=n.seenUids,c=this.boxCells[r];if(null!==c)for(var u=this.bboxes,h=0,p=c;h=u[_+0]&&o>=u[_+1]&&(!s||s(this.boxKeys[d]))){if(n.hitTest)return a.push(!0),!0;a.push({key:this.boxKeys[d],x1:u[_],y1:u[_+1],x2:u[_+2],y2:u[_+3]});}}}var f=this.circleCells[r];if(null!==f)for(var m=this.circles,g=0,v=f;gn*n+s*s},Ht.prototype._circleAndRectCollide=function(t,e,i,o,r,a,n){var s=(a-o)/2,l=Math.abs(t-(o+s));if(l>s+i)return !1;var c=(n-r)/2,u=Math.abs(e-(r+c));if(u>c+i)return !1;if(l<=s||u<=c)return !0;var h=l-s,p=u-c;return h*h+p*p<=i*i};var ae=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function ne(t,e){for(var i=0;iS)ce(e,P,!1);else{var A=this.projectPoint(c,z,L),R=M*T;if(_.length>0){var k=A.x-_[_.length-4],B=A.y-_[_.length-3];if(R*R*2>k*k+B*B)if(P+8-C&&O=this.screenRightBoundary||o<100||e>this.screenBottomBoundary},le.prototype.isInsideGrid=function(t,e,i,o){return i>=0&&t=0&&e0)return this.prevPlacement&&this.prevPlacement.variableOffsets[h.crossTileID]&&this.prevPlacement.placements[h.crossTileID]&&this.prevPlacement.placements[h.crossTileID].text&&(f=this.prevPlacement.variableOffsets[h.crossTileID].anchor),this.variableOffsets[h.crossTileID]={textOffset:m,width:i,height:o,anchor:t,textBoxScale:r,prevAnchor:f},this.markUsedJustification(p,t,h,d),p.allowVerticalPlacement&&(this.markUsedOrientation(p,d,h),this.placedOrientations[h.crossTileID]=d),{shift:g,placedGlyphBoxes:v}},ve.prototype.placeLayerBucket=function(e,i,o,r,a,n,s,l,c,u){var h=this,p=e.layers[0].layout,d=t.evaluateSizeForZoom(e.textSizeData,this.transform.zoom),_=p.get(\"text-optional\"),f=p.get(\"icon-optional\"),m=p.get(\"text-allow-overlap\"),g=p.get(\"icon-allow-overlap\"),v=m&&(g||!e.hasIconData()||f),y=g&&(m||!e.hasTextData()||_),x=this.collisionGroups.get(e.sourceID),b=\"map\"===p.get(\"text-rotation-alignment\"),w=\"map\"===p.get(\"text-pitch-alignment\"),E=\"none\"!==p.get(\"icon-text-fit\"),T=\"viewport-y\"===p.get(\"symbol-z-order\");!e.collisionArrays&&u&&e.deserializeCollisionBoxes(u);var I=function(r,u){if(!c[r.crossTileID])if(l)h.placements[r.crossTileID]=new de(!1,!1,!1);else{var T,I=!1,C=!1,S=!0,P=null,z={box:null,offscreen:null},L={box:null,offscreen:null},M=null,D=null,A=0,R=0,k=0;u.textFeatureIndex&&(A=u.textFeatureIndex),u.verticalTextFeatureIndex&&(R=u.verticalTextFeatureIndex);var B=u.textBox;if(B){var O=function(i){var o=t.WritingMode.horizontal;if(e.allowVerticalPlacement&&!i&&h.prevPlacement){var a=h.prevPlacement.placedOrientations[r.crossTileID];a&&(h.placedOrientations[r.crossTileID]=a,o=a,h.markUsedOrientation(e,o,r));}return o},F=function(i,o){if(e.allowVerticalPlacement&&r.numVerticalGlyphVertices>0&&u.verticalTextBox)for(var a=0,n=e.writingModes;a0&&(U=U.filter((function(t){return t!==N.anchor}))).unshift(N.anchor);}var Z=function(t,o,a){for(var s=t.x2-t.x1,l=t.y2-t.y1,c=r.textBoxScale,u=E&&!g?o:null,p={box:[],offscreen:!1},d=m?2*U.length:U.length,_=0;_=U.length,y=h.attemptAnchorPlacement(f,t,s,l,c,b,w,n,i,x,v,r,e,a,u);if(y&&(p=y.placedGlyphBoxes)&&p.box&&p.box.length){I=!0,P=y.shift;break}}return p};F((function(){return Z(B,u.iconBox,t.WritingMode.horizontal)}),(function(){var i=u.verticalTextBox,o=z&&z.box&&z.box.length;return e.allowVerticalPlacement&&!o&&r.numVerticalGlyphVertices>0&&i?Z(i,u.verticalIconBox,t.WritingMode.vertical):{box:null,offscreen:null}})),z&&(I=z.box,S=z.offscreen);var q=O(z&&z.box);if(!I&&h.prevPlacement){var j=h.prevPlacement.variableOffsets[r.crossTileID];j&&(h.variableOffsets[r.crossTileID]=j,h.markUsedJustification(e,j.anchor,r,q));}}else{var V=function(t,o){var a=h.collisionIndex.placeCollisionBox(t,p.get(\"text-allow-overlap\"),n,i,x.predicate);return a&&a.box&&a.box.length&&(h.markUsedOrientation(e,o,r),h.placedOrientations[r.crossTileID]=o),a};F((function(){return V(B,t.WritingMode.horizontal)}),(function(){var i=u.verticalTextBox;return e.allowVerticalPlacement&&r.numVerticalGlyphVertices>0&&i?V(i,t.WritingMode.vertical):{box:null,offscreen:null}})),O(z&&z.box&&z.box.length);}}I=(T=z)&&T.box&&T.box.length>0,S=T&&T.offscreen;var G=u.textCircles;if(G){var W=e.text.placedSymbolArray.get(r.centerJustifiedTextSymbolIndex),X=t.evaluateSizeForFeature(e.textSizeData,d,W);M=h.collisionIndex.placeCollisionCircles(G,p.get(\"text-allow-overlap\"),a,n,W,e.lineVertexArray,e.glyphOffsetArray,X,i,o,s,w,x.predicate),I=p.get(\"text-allow-overlap\")||M.circles.length>0,S=S&&M.offscreen;}if(u.iconFeatureIndex&&(k=u.iconFeatureIndex),u.iconBox){var H=function(t){var e=E&&P?ge(t,P.x,P.y,b,w,h.transform.angle):t;return h.collisionIndex.placeCollisionBox(e,p.get(\"icon-allow-overlap\"),n,i,x.predicate)};C=L&&L.box&&L.box.length&&u.verticalIconBox?(D=H(u.verticalIconBox)).box.length>0:(D=H(u.iconBox)).box.length>0,S=S&&D.offscreen;}var K=_||0===r.numHorizontalGlyphVertices&&0===r.numVerticalGlyphVertices,Y=f||0===r.numIconVertices;K||Y?Y?K||(C=C&&I):I=C&&I:C=I=C&&I,I&&T&&T.box&&(L&&L.box&&R?h.collisionIndex.insertCollisionBox(T.box,p.get(\"text-ignore-placement\"),e.bucketInstanceId,R,x.ID):h.collisionIndex.insertCollisionBox(T.box,p.get(\"text-ignore-placement\"),e.bucketInstanceId,A,x.ID)),C&&D&&h.collisionIndex.insertCollisionBox(D.box,p.get(\"icon-ignore-placement\"),e.bucketInstanceId,k,x.ID),I&&M&&h.collisionIndex.insertCollisionCircles(M.circles,p.get(\"text-ignore-placement\"),e.bucketInstanceId,A,x.ID),h.placements[r.crossTileID]=new de(I||v,C||y,S||e.justReloaded),c[r.crossTileID]=!0;}};if(T)for(var C=e.getSortedSymbolIndexes(this.transform.angle),S=C.length-1;S>=0;--S){var P=C[S];I(e.symbolInstances.get(P),e.collisionArrays[P]);}else for(var z=0;z=0&&(e.text.placedSymbolArray.get(c).crossTileID=a>=0&&c!==a?0:o.crossTileID);}},ve.prototype.markUsedOrientation=function(e,i,o){for(var r=i===t.WritingMode.horizontal||i===t.WritingMode.horizontalOnly?i:0,a=i===t.WritingMode.vertical?i:0,n=0,s=[o.leftJustifiedTextSymbolIndex,o.centerJustifiedTextSymbolIndex,o.rightJustifiedTextSymbolIndex];n0||l>0,y=a.numIconVertices>0,x=r.placedOrientations[a.crossTileID],b=x===t.WritingMode.vertical,w=x===t.WritingMode.horizontal||x===t.WritingMode.horizontalOnly;if(v){var E=Se(g.text),T=b?Pe:E;_(e.text,s,T);var I=w?Pe:E;_(e.text,l,I);var C=g.text.isHidden();[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t){t>=0&&(e.text.placedSymbolArray.get(t).hidden=C||b?1:0);})),a.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(a.verticalPlacedTextSymbolIndex).hidden=C||w?1:0);var S=r.variableOffsets[a.crossTileID];S&&r.markUsedJustification(e,S.anchor,a,x);var P=r.placedOrientations[a.crossTileID];P&&(r.markUsedJustification(e,\"left\",a,P),r.markUsedOrientation(e,P,a));}if(y){var z=Se(g.icon),L=!(p&&a.verticalPlacedIconSymbolIndex&&b);if(a.placedIconSymbolIndex>=0){var M=L?z:Pe;_(e.icon,a.numIconVertices,M),e.icon.placedSymbolArray.get(a.placedIconSymbolIndex).hidden=g.icon.isHidden();}if(a.verticalPlacedIconSymbolIndex>=0){var D=L?Pe:z;_(e.icon,a.numVerticalIconVertices,D),e.icon.placedSymbolArray.get(a.verticalPlacedIconSymbolIndex).hidden=g.icon.isHidden();}}if(e.hasIconCollisionBoxData()||e.hasIconCollisionCircleData()||e.hasTextCollisionBoxData()||e.hasTextCollisionCircleData()){var A=e.collisionArrays[o];if(A){var R=new t.Point(0,0);if(A.textBox||A.verticalTextBox){var k=!0;if(c){var B=r.variableOffsets[f];B?(R=me(B.anchor,B.width,B.height,B.textOffset,B.textBoxScale),u&&R._rotate(h?r.transform.angle:-r.transform.angle)):k=!1;}A.textBox&&ye(e.textCollisionBox.collisionVertexArray,g.text.placed,!k||b,R.x,R.y),A.verticalTextBox&&ye(e.textCollisionBox.collisionVertexArray,g.text.placed,!k||w,R.x,R.y);}var O=Boolean(!w&&A.verticalIconBox);A.iconBox&&ye(e.iconCollisionBox.collisionVertexArray,g.icon.placed,O,p?R.x:0,p?R.y:0),A.verticalIconBox&&ye(e.iconCollisionBox.collisionVertexArray,g.icon.placed,!O,p?R.x:0,p?R.y:0);var F=A.textCircles;if(F&&e.hasTextCollisionCircleData())for(var U=0;Ut},ve.prototype.setStale=function(){this.stale=!0;};var xe=Math.pow(2,25),be=Math.pow(2,24),we=Math.pow(2,17),Ee=Math.pow(2,16),Te=Math.pow(2,9),Ie=Math.pow(2,8),Ce=Math.pow(2,1);function Se(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,i=Math.floor(127*t.opacity);return i*xe+e*be+i*we+e*Ee+i*Te+e*Ie+i*Ce+e}var Pe=0,ze=function(){this._currentTileIndex=0,this._seenCrossTileIDs={};};ze.prototype.continuePlacement=function(t,e,i,o,r){for(;this._currentTileIndex2};this._currentPlacementIndex>=0;){var s=i[e[this._currentPlacementIndex]],l=this.placement.collisionIndex.transform.zoom;if(\"symbol\"===s.type&&(!s.minzoom||s.minzoom<=l)&&(!s.maxzoom||s.maxzoom>l)){if(this._inProgressLayer||(this._inProgressLayer=new ze),this._inProgressLayer.continuePlacement(o[s.source],this.placement,this._showCollisionBoxes,s,n))return;delete this._inProgressLayer;}this._currentPlacementIndex--;}this._done=!0;},Le.prototype.commit=function(t){return this.placement.commit(t),this.placement};var Me=512/t.EXTENT/2,De=function(t,e,i){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=i;for(var o=0;ot.overscaledZ)for(var s in n){var l=n[s];l.tileID.isChildOf(t)&&l.findMatches(e.symbolInstances,t,r);}else{var c=n[t.scaledTo(Number(a)).key];c&&c.findMatches(e.symbolInstances,t,r);}}for(var u=0;u1?\"@2x\":\"\",l=t.getJSON(i.transformRequest(i.normalizeSpriteURL(e,s,\".json\"),t.ResourceType.SpriteJSON),(function(t,e){l=null,n||(n=t,r=e,u());})),c=t.getImage(i.transformRequest(i.normalizeSpriteURL(e,s,\".png\"),t.ResourceType.SpriteImage),(function(t,e){c=null,n||(n=t,a=e,u());}));function u(){if(n)o(n);else if(r&&a){var e=t.browser.getImageData(a),i={};for(var s in r){var l=r[s],c=l.width,u=l.height,h=l.x,p=l.y,d=l.sdf,_=l.pixelRatio,f=l.stretchX,m=l.stretchY,g=l.content,v=new t.RGBAImage({width:c,height:u});t.RGBAImage.copy(e,v,{x:h,y:p},{x:0,y:0},{width:c,height:u}),i[s]={data:v,pixelRatio:_,sdf:d,stretchX:f,stretchY:m,content:g};}o(null,i);}}return {cancel:function(){l&&(l.cancel(),l=null),c&&(c.cancel(),c=null);}}}(e.sprite,this.map._requestManager,(function(e,i){if(o._spriteRequest=null,e)o.fire(new t.ErrorEvent(e));else if(i)for(var r in i)o.imageManager.addImage(r,i[r]);o.imageManager.setLoaded(!0),o.dispatcher.broadcast(\"setImages\",o.imageManager.listImages()),o.fire(new t.Event(\"data\",{dataType:\"style\"}));})):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var a=Ft(this.stylesheet.layers);this._order=a.map((function(t){return t.id})),this._layers={};for(var n=0,s=a;n0)throw new Error(\"Unimplemented: \"+r.map((function(t){return t.command})).join(\", \")+\".\");return o.forEach((function(t){\"setTransition\"!==t.command&&i[t.command].apply(i,t.args);})),this.stylesheet=e,!0},i.prototype.addImage=function(e,i){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"An image with this name already exists.\")));this.imageManager.addImage(e,i),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event(\"data\",{dataType:\"style\"}));},i.prototype.updateImage=function(t,e){this.imageManager.updateImage(t,e);},i.prototype.getImage=function(t){return this.imageManager.getImage(t)},i.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"No image with this name exists.\")));this.imageManager.removeImage(e),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event(\"data\",{dataType:\"style\"}));},i.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},i.prototype.addSource=function(e,i,o){var r=this;if(void 0===o&&(o={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error(\"There is already a source with this ID\");if(!i.type)throw new Error(\"The type property must be defined, but the only the following properties were given: \"+Object.keys(i).join(\", \")+\".\");if(!([\"vector\",\"raster\",\"geojson\",\"video\",\"image\"].indexOf(i.type)>=0)||!this._validate(t.validateStyle.source,\"sources.\"+e,i,null,o)){this.map&&this.map._collectResourceTiming&&(i.collectResourceTiming=!0);var a=this.sourceCaches[e]=new Lt(e,i,this.dispatcher);a.style=this,a.setEventedParent(this,(function(){return {isSourceLoaded:r.loaded(),source:a.serialize(),sourceId:e}})),a.onAdd(this.map),this._changed=!0;}},i.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error(\"There is no source with this ID\");for(var i in this._layers)if(this._layers[i].source===e)return this.fire(new t.ErrorEvent(new Error('Source \"'+e+'\" cannot be removed while layer \"'+i+'\" is using it.')));var o=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],o.fire(new t.Event(\"data\",{sourceDataType:\"metadata\",dataType:\"source\",sourceId:e})),o.setEventedParent(null),o.clearTiles(),o.onRemove&&o.onRemove(this.map),this._changed=!0;},i.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0;},i.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},i.prototype.addLayer=function(e,i,o){void 0===o&&(o={}),this._checkLoaded();var r=e.id;if(this.getLayer(r))this.fire(new t.ErrorEvent(new Error('Layer with id \"'+r+'\" already exists on this map')));else{var a;if(\"custom\"===e.type){if(Be(this,t.validateCustomStyleLayer(e)))return;a=t.createStyleLayer(e);}else{if(\"object\"==typeof e.source&&(this.addSource(r,e.source),e=t.clone$1(e),e=t.extend(e,{source:r})),this._validate(t.validateStyle.layer,\"layers.\"+r,e,{arrayIndex:-1},o))return;a=t.createStyleLayer(e),this._validateLayer(a),a.setEventedParent(this,{layer:{id:r}});}var n=i?this._order.indexOf(i):this._order.length;if(i&&-1===n)this.fire(new t.ErrorEvent(new Error('Layer with id \"'+i+'\" does not exist on this map.')));else{if(this._order.splice(n,0,r),this._layerOrderChanged=!0,this._layers[r]=a,this._removedLayers[r]&&a.source&&\"custom\"!==a.type){var s=this._removedLayers[r];delete this._removedLayers[r],s.type!==a.type?this._updatedSources[a.source]=\"clear\":(this._updatedSources[a.source]=\"reload\",this.sourceCaches[a.source].pause());}this._updateLayer(a),a.onAdd&&a.onAdd(this.map);}}},i.prototype.moveLayer=function(e,i){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==i){var o=this._order.indexOf(e);this._order.splice(o,1);var r=i?this._order.indexOf(i):this._order.length;i&&-1===r?this.fire(new t.ErrorEvent(new Error('Layer with id \"'+i+'\" does not exist on this map.'))):(this._order.splice(r,0,e),this._layerOrderChanged=!0);}}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be moved.\")));},i.prototype.removeLayer=function(e){this._checkLoaded();var i=this._layers[e];if(i){i.setEventedParent(null);var o=this._order.indexOf(e);this._order.splice(o,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=i,delete this._layers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],i.onRemove&&i.onRemove(this.map);}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be removed.\")));},i.prototype.getLayer=function(t){return this._layers[t]},i.prototype.setLayerZoomRange=function(e,i,o){this._checkLoaded();var r=this.getLayer(e);r?r.minzoom===i&&r.maxzoom===o||(null!=i&&(r.minzoom=i),null!=o&&(r.maxzoom=o),this._updateLayer(r)):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot have zoom extent.\")));},i.prototype.setFilter=function(e,i,o){void 0===o&&(o={}),this._checkLoaded();var r=this.getLayer(e);if(r){if(!t.deepEqual(r.filter,i))return null==i?(r.filter=void 0,void this._updateLayer(r)):void(this._validate(t.validateStyle.filter,\"layers.\"+r.id+\".filter\",i,null,o)||(r.filter=t.clone$1(i),this._updateLayer(r)))}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be filtered.\")));},i.prototype.getFilter=function(e){return t.clone$1(this.getLayer(e).filter)},i.prototype.setLayoutProperty=function(e,i,o,r){void 0===r&&(r={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getLayoutProperty(i),o)||(a.setLayoutProperty(i,o,r),this._updateLayer(a)):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be styled.\")));},i.prototype.getLayoutProperty=function(e,i){var o=this.getLayer(e);if(o)return o.getLayoutProperty(i);this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style.\")));},i.prototype.setPaintProperty=function(e,i,o,r){void 0===r&&(r={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getPaintProperty(i),o)||(a.setPaintProperty(i,o,r)&&this._updateLayer(a),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be styled.\")));},i.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},i.prototype.setFeatureState=function(e,i){this._checkLoaded();var o=e.source,r=e.sourceLayer,a=this.sourceCaches[o],n=parseInt(e.id,10);if(void 0!==a){var s=a.getSource().type;\"geojson\"===s&&r?this.fire(new t.ErrorEvent(new Error(\"GeoJSON sources cannot have a sourceLayer parameter.\"))):\"vector\"!==s||r?isNaN(n)||n<0?this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided and non-negative.\"))):a.setFeatureState(r,n,i):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")));}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+o+\"' does not exist in the map's style.\")));},i.prototype.removeFeatureState=function(e,i){this._checkLoaded();var o=e.source,r=this.sourceCaches[o];if(void 0!==r){var a=r.getSource().type,n=\"vector\"===a?e.sourceLayer:void 0,s=parseInt(e.id,10);\"vector\"!==a||n?void 0!==e.id&&isNaN(s)||s<0?this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be non-negative.\"))):i&&\"string\"!=typeof e.id&&\"number\"!=typeof e.id?this.fire(new t.ErrorEvent(new Error(\"A feature id is requred to remove its specific state property.\"))):r.removeFeatureState(n,s,i):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")));}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+o+\"' does not exist in the map's style.\")));},i.prototype.getFeatureState=function(e){this._checkLoaded();var i=e.source,o=e.sourceLayer,r=this.sourceCaches[i],a=parseInt(e.id,10);if(void 0!==r)if(\"vector\"!==r.getSource().type||o){if(!(isNaN(a)||a<0))return r.getFeatureState(o,a);this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided and non-negative.\")));}else this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")));else this.fire(new t.ErrorEvent(new Error(\"The source '\"+i+\"' does not exist in the map's style.\")));},i.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},i.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,(function(t){return t.serialize()})),layers:this._serializeLayers(this._order)},(function(t){return void 0!==t}))},i.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&\"raster\"!==this.sourceCaches[t.source].getSource().type&&(this._updatedSources[t.source]=\"reload\",this.sourceCaches[t.source].pause()),this._changed=!0;},i.prototype._flattenAndSortRenderedFeatures=function(t){for(var e=this,i=function(t){return \"fill-extrusion\"===e._layers[t].type},o={},r=[],a=this._order.length-1;a>=0;a--){var n=this._order[a];if(i(n)){o[n]=a;for(var s=0,l=t;s=0;_--){var f=this._order[_];if(i(f))for(var m=r.length-1;m>=0;m--){var g=r[m].feature;if(o[g.layer.id]<_)break;d.push(g),r.pop();}else for(var v=0,y=t;v 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}\",\"attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}\"),Ke=di(\"uniform float u_overscale_factor;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {float alpha=0.5;vec4 color=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {color=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {color*=.2;}float extrude_scale_length=length(v_extrude_scale);float extrude_length=length(v_extrude)*extrude_scale_length;float stroke_width=15.0*extrude_scale_length/u_overscale_factor;float radius=v_radius*extrude_scale_length;float distance_to_edge=abs(extrude_length-radius);float opacity_t=smoothstep(-stroke_width,0.0,-distance_to_edge);gl_FragColor=opacity_t*color;}\",\"attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);highp float padding_factor=1.2;gl_Position.xy+=a_extrude*u_extrude_scale*padding_factor*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;v_radius=abs(a_extrude.y);v_extrude=a_extrude*padding_factor;v_extrude_scale=u_extrude_scale*u_camera_to_center_distance*collision_perspective_ratio;}\"),Ye=di(\"uniform highp vec4 u_color;void main() {gl_FragColor=u_color;}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\"),Je=di(\"#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_FragColor=color*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position=u_matrix*vec4(a_pos,0,1);}\"),Qe=di(\"varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),$e=di(\"uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),ti=di(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}\"),ei=di(\"varying vec4 v_color;void main() {gl_FragColor=v_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\\n#pragma mapbox: define highp float base\\n#pragma mapbox: define highp float height\\n#pragma mapbox: define highp vec4 color\\nvoid main() {\\n#pragma mapbox: initialize highp float base\\n#pragma mapbox: initialize highp float height\\n#pragma mapbox: initialize highp vec4 color\\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}\"),ii=di(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec4 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\\n? a_pos\\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}\"),oi=di(\"#ifdef GL_ES\\nprecision highp float;\\n#endif\\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform float u_maxzoom;uniform vec4 u_unpack;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;data.a=-1.0;return dot(data,u_unpack)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggeration=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/ pow(2.0,(u_zoom-u_maxzoom)*exaggeration+19.2562-u_zoom);gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}\"),ri=di(\"uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\\n#define PI 3.141592653589793\\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}\"),ai=di(\"uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\"),ni=di(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp float v_lineprogress;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,vec2(v_lineprogress,0.5));gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define MAX_LINE_DISTANCE 32767.0\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_lineprogress;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_lineprogress=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0/MAX_LINE_DISTANCE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\"),si=di(\"uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec4 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x,1.0);float x_b=mod(v_linesofar/pattern_size_b.x,1.0);float y_a=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_a.y+2.0)/2.0)/pattern_size_a.y);float y_b=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_b.y+2.0)/2.0)/pattern_size_b.y);vec2 pos_a=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,vec2(x_a,y_a));vec2 pos_b=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,vec2(x_b,y_b));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);}\"),li=di(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}\"),ci=di(\"uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}\"),ui=di(\"uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_minFontScale=a_pixeloffset.zw/256.0;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset/16.0),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}\"),hi=di(\"#define SDF_PX 8.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale+a_pxoffset),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=a_tex/u_texsize;v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}\"),pi=di(\"#define SDF_PX 8.0\\n#define SDF 1.0\\n#define ICON 0.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat fade_opacity=v_data1[2];if (v_data1.w==ICON) {vec2 tex_icon=v_data0.zw;lowp float alpha=opacity*fade_opacity;gl_FragColor=texture2D(u_texture_icon,tex_icon)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\nreturn;}vec2 tex=v_data0.xy;float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_data1.x;float size=v_data1.y;float fontScale=size/24.0;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec2 u_texsize_icon;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);float is_sdf=a_size[0]-2.0*a_size_min;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=size/24.0;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0.xy=a_tex/u_texsize;v_data0.zw=a_tex/u_texsize_icon;v_data1=vec4(gamma_scale,size,interpolated_fade_opacity,is_sdf);}\");function di(t,e){var i=/#pragma mapbox: ([\\w]+) ([\\w]+) ([\\w]+) ([\\w]+)/g,o={};return {fragmentSource:t=t.replace(i,(function(t,e,i,r,a){return o[a]=!0,\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nvarying \"+i+\" \"+r+\" \"+a+\";\\n#else\\nuniform \"+i+\" \"+r+\" u_\"+a+\";\\n#endif\\n\":\"\\n#ifdef HAS_UNIFORM_u_\"+a+\"\\n \"+i+\" \"+r+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\"})),vertexSource:e=e.replace(i,(function(t,e,i,r,a){var n=\"float\"===r?\"vec2\":\"vec4\",s=a.match(/color/)?\"color\":n;return o[a]?\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nuniform lowp float u_\"+a+\"_t;\\nattribute \"+i+\" \"+n+\" a_\"+a+\";\\nvarying \"+i+\" \"+r+\" \"+a+\";\\n#else\\nuniform \"+i+\" \"+r+\" u_\"+a+\";\\n#endif\\n\":\"vec4\"===s?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n \"+a+\" = a_\"+a+\";\\n#else\\n \"+i+\" \"+r+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n \"+a+\" = unpack_mix_\"+s+\"(a_\"+a+\", u_\"+a+\"_t);\\n#else\\n \"+i+\" \"+r+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\":\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nuniform lowp float u_\"+a+\"_t;\\nattribute \"+i+\" \"+n+\" a_\"+a+\";\\n#else\\nuniform \"+i+\" \"+r+\" u_\"+a+\";\\n#endif\\n\":\"vec4\"===s?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n \"+i+\" \"+r+\" \"+a+\" = a_\"+a+\";\\n#else\\n \"+i+\" \"+r+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n \"+i+\" \"+r+\" \"+a+\" = unpack_mix_\"+s+\"(a_\"+a+\", u_\"+a+\"_t);\\n#else\\n \"+i+\" \"+r+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\"}))}}var _i=Object.freeze({__proto__:null,prelude:Ze,background:qe,backgroundPattern:je,circle:Ve,clippingMask:Ge,heatmap:We,heatmapTexture:Xe,collisionBox:He,collisionCircle:Ke,debug:Ye,fill:Je,fillOutline:Qe,fillOutlinePattern:$e,fillPattern:ti,fillExtrusion:ei,fillExtrusionPattern:ii,hillshadePrepare:oi,hillshade:ri,line:ai,lineGradient:ni,linePattern:si,lineSDF:li,raster:ci,symbolIcon:ui,symbolSDF:hi,symbolTextAndIcon:pi}),fi=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null;};fi.prototype.bind=function(t,e,i,o,r,a,n,s){this.context=t;for(var l=this.boundPaintVertexBuffers.length!==o.length,c=0;!l&&c>16,l>>16],u_pixel_coord_lower:[65535&s,65535&l]}}mi.prototype.draw=function(t,e,i,o,r,a,n,s,l,c,u,h,p,d,_,f){var m,g=t.gl;if(!this.failedToCreate){for(var v in t.program.set(this.program),t.setDepthMode(i),t.setStencilMode(o),t.setColorMode(r),t.setCullFace(a),this.fixedUniforms)this.fixedUniforms[v].set(n[v]);d&&d.setUniforms(t,this.binderUniforms,h,{zoom:p});for(var y=(m={},m[g.LINES]=2,m[g.TRIANGLES]=3,m[g.LINE_STRIP]=1,m)[e],x=0,b=u.get();x0?1-1/(1.001-n):-n),u_contrast_factor:(a=r.paint.get(\"raster-contrast\"),a>0?1/(1-a):1+a),u_spin_weights:Zi(r.paint.get(\"raster-hue-rotate\"))};var a,n;};function Zi(t){t*=Math.PI/180;var e=Math.sin(t),i=Math.cos(t);return [(2*i+1)/3,(-Math.sqrt(3)*e-i+1)/3,(Math.sqrt(3)*e-i+1)/3]}var qi=function(t,e,i,o,r,a,n,s,l,c){var u=r.transform;return {u_is_size_zoom_constant:+(\"constant\"===t||\"source\"===t),u_is_size_feature_constant:+(\"constant\"===t||\"camera\"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:u.cameraToCenterDistance,u_pitch:u.pitch/360*2*Math.PI,u_rotate_symbol:+i,u_aspect_ratio:u.width/u.height,u_fade_change:r.options.fadeDuration?r.symbolFadeChange:1,u_matrix:a,u_label_plane_matrix:n,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+o,u_texsize:c,u_texture:0}},ji=function(e,i,o,r,a,n,s,l,c,u,h){var p=a.transform;return t.extend(qi(e,i,o,r,a,n,s,l,c,u),{u_gamma_scale:r?Math.cos(p._pitch)*p.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+h})},Vi=function(e,i,o,r,a,n,s,l,c,u){return t.extend(ji(e,i,o,r,a,n,s,l,!0,c,!0),{u_texsize_icon:u,u_texture_icon:1})},Gi=function(t,e,i){return {u_matrix:t,u_opacity:e,u_color:i}},Wi=function(e,i,o,r,a,n){return t.extend(function(t,e,i,o){var r=i.imageManager.getPattern(t.from.toString()),a=i.imageManager.getPattern(t.to.toString()),n=i.imageManager.getPixelSize(),s=n.width,l=n.height,c=Math.pow(2,o.tileID.overscaledZ),u=o.tileSize*Math.pow(2,i.transform.tileZoom)/c,h=u*(o.tileID.canonical.x+o.tileID.wrap*c),p=u*o.tileID.canonical.y;return {u_image:0,u_pattern_tl_a:r.tl,u_pattern_br_a:r.br,u_pattern_tl_b:a.tl,u_pattern_br_b:a.br,u_texsize:[s,l],u_mix:e.t,u_pattern_size_a:r.displaySize,u_pattern_size_b:a.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/ue(o,1,i.transform.tileZoom),u_pixel_coord_upper:[h>>16,p>>16],u_pixel_coord_lower:[65535&h,65535&p]}}(r,n,o,a),{u_matrix:e,u_opacity:i})},Xi={fillExtrusion:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_lightpos:new t.Uniform3f(e,i.u_lightpos),u_lightintensity:new t.Uniform1f(e,i.u_lightintensity),u_lightcolor:new t.Uniform3f(e,i.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,i.u_vertical_gradient),u_opacity:new t.Uniform1f(e,i.u_opacity)}},fillExtrusionPattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_lightpos:new t.Uniform3f(e,i.u_lightpos),u_lightintensity:new t.Uniform1f(e,i.u_lightintensity),u_lightcolor:new t.Uniform3f(e,i.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,i.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,i.u_height_factor),u_image:new t.Uniform1i(e,i.u_image),u_texsize:new t.Uniform2f(e,i.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade),u_opacity:new t.Uniform1f(e,i.u_opacity)}},fill:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},fillPattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_image:new t.Uniform1i(e,i.u_image),u_texsize:new t.Uniform2f(e,i.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade)}},fillOutline:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_world:new t.Uniform2f(e,i.u_world)}},fillOutlinePattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_world:new t.Uniform2f(e,i.u_world),u_image:new t.Uniform1i(e,i.u_image),u_texsize:new t.Uniform2f(e,i.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade)}},circle:function(e,i){return {u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,i.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,i.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},collisionBox:Ii,collisionCircle:Ii,debug:function(e,i){return {u_color:new t.UniformColor(e,i.u_color),u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},clippingMask:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},heatmap:function(e,i){return {u_extrude_scale:new t.Uniform1f(e,i.u_extrude_scale),u_intensity:new t.Uniform1f(e,i.u_intensity),u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},heatmapTexture:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_world:new t.Uniform2f(e,i.u_world),u_image:new t.Uniform1i(e,i.u_image),u_color_ramp:new t.Uniform1i(e,i.u_color_ramp),u_opacity:new t.Uniform1f(e,i.u_opacity)}},hillshade:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_image:new t.Uniform1i(e,i.u_image),u_latrange:new t.Uniform2f(e,i.u_latrange),u_light:new t.Uniform2f(e,i.u_light),u_shadow:new t.UniformColor(e,i.u_shadow),u_highlight:new t.UniformColor(e,i.u_highlight),u_accent:new t.UniformColor(e,i.u_accent)}},hillshadePrepare:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_image:new t.Uniform1i(e,i.u_image),u_dimension:new t.Uniform2f(e,i.u_dimension),u_zoom:new t.Uniform1f(e,i.u_zoom),u_maxzoom:new t.Uniform1f(e,i.u_maxzoom),u_unpack:new t.Uniform4f(e,i.u_unpack)}},line:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels)}},lineGradient:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels),u_image:new t.Uniform1i(e,i.u_image)}},linePattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_texsize:new t.Uniform2f(e,i.u_texsize),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_image:new t.Uniform1i(e,i.u_image),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels),u_scale:new t.Uniform4f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade)}},lineSDF:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,i.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,i.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,i.u_sdfgamma),u_image:new t.Uniform1i(e,i.u_image),u_tex_y_a:new t.Uniform1f(e,i.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,i.u_tex_y_b),u_mix:new t.Uniform1f(e,i.u_mix)}},raster:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_tl_parent:new t.Uniform2f(e,i.u_tl_parent),u_scale_parent:new t.Uniform1f(e,i.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,i.u_buffer_scale),u_fade_t:new t.Uniform1f(e,i.u_fade_t),u_opacity:new t.Uniform1f(e,i.u_opacity),u_image0:new t.Uniform1i(e,i.u_image0),u_image1:new t.Uniform1i(e,i.u_image1),u_brightness_low:new t.Uniform1f(e,i.u_brightness_low),u_brightness_high:new t.Uniform1f(e,i.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,i.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,i.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,i.u_spin_weights)}},symbolIcon:function(e,i){return {u_is_size_zoom_constant:new t.Uniform1i(e,i.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,i.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,i.u_size_t),u_size:new t.Uniform1f(e,i.u_size),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,i.u_pitch),u_rotate_symbol:new t.Uniform1i(e,i.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,i.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,i.u_fade_change),u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,i.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,i.u_coord_matrix),u_is_text:new t.Uniform1f(e,i.u_is_text),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_texsize:new t.Uniform2f(e,i.u_texsize),u_texture:new t.Uniform1i(e,i.u_texture)}},symbolSDF:function(e,i){return {u_is_size_zoom_constant:new t.Uniform1i(e,i.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,i.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,i.u_size_t),u_size:new t.Uniform1f(e,i.u_size),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,i.u_pitch),u_rotate_symbol:new t.Uniform1i(e,i.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,i.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,i.u_fade_change),u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,i.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,i.u_coord_matrix),u_is_text:new t.Uniform1f(e,i.u_is_text),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_texsize:new t.Uniform2f(e,i.u_texsize),u_texture:new t.Uniform1i(e,i.u_texture),u_gamma_scale:new t.Uniform1f(e,i.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_is_halo:new t.Uniform1f(e,i.u_is_halo)}},symbolTextAndIcon:function(e,i){return {u_is_size_zoom_constant:new t.Uniform1i(e,i.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,i.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,i.u_size_t),u_size:new t.Uniform1f(e,i.u_size),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,i.u_pitch),u_rotate_symbol:new t.Uniform1i(e,i.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,i.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,i.u_fade_change),u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,i.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,i.u_coord_matrix),u_is_text:new t.Uniform1f(e,i.u_is_text),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_texsize:new t.Uniform2f(e,i.u_texsize),u_texsize_icon:new t.Uniform2f(e,i.u_texsize_icon),u_texture:new t.Uniform1i(e,i.u_texture),u_texture_icon:new t.Uniform1i(e,i.u_texture_icon),u_gamma_scale:new t.Uniform1f(e,i.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_is_halo:new t.Uniform1f(e,i.u_is_halo)}},background:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_opacity:new t.Uniform1f(e,i.u_opacity),u_color:new t.UniformColor(e,i.u_color)}},backgroundPattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_opacity:new t.Uniform1f(e,i.u_opacity),u_image:new t.Uniform1i(e,i.u_image),u_pattern_tl_a:new t.Uniform2f(e,i.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,i.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,i.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,i.u_pattern_br_b),u_texsize:new t.Uniform2f(e,i.u_texsize),u_mix:new t.Uniform1f(e,i.u_mix),u_pattern_size_a:new t.Uniform2f(e,i.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,i.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,i.u_scale_a),u_scale_b:new t.Uniform1f(e,i.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,i.u_tile_units_to_pixels)}}};function Hi(e,i){for(var o=e.sort((function(t,e){return t.tileID.isLessThan(e.tileID)?-1:e.tileID.isLessThan(t.tileID)?1:0})),r=0;r=0&&(f[g.associatedIconIndex]={shiftedAnchor:S,angle:P});}else ne(g.numGlyphs,d);}if(h){_.clear();for(var L=e.icon.placedSymbolArray,M=0;M0){var s=t.browser.now(),l=(s-e.timeAdded)/n,c=i?(s-i.timeAdded)/n:-1,u=o.getSource(),h=a.coveringZoomLevel({tileSize:u.tileSize,roundZoom:u.roundZoom}),p=!i||Math.abs(i.tileID.overscaledZ-h)>Math.abs(e.tileID.overscaledZ-h),d=p&&e.refreshedUponExpiration?1:t.clamp(p?l:1-c,0,1);return e.refreshedUponExpiration&&l>=1&&(e.refreshedUponExpiration=!1),i?{opacity:1,mix:1-d}:{opacity:d,mix:0}}return {opacity:1,mix:0}}function co(e,i,o){var r=e.context,a=r.gl,n=o.posMatrix,s=e.useProgram(\"debug\"),l=It.disabled,c=Ct.disabled,u=e.colorModeForRenderPass(),h=\"$debug\";s.draw(r,a.LINE_STRIP,l,c,u,Pt.disabled,Si(n,t.Color.red),h,e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);var p=i.getTileByID(o.key).latestRawTileData,d=p&&p.byteLength||0,_=Math.floor(d/1024),f=i.getTile(o).tileSize,m=512/Math.min(f,512),g=o.canonical.toString();o.overscaledZ!==o.canonical.z&&(g+=\" => \"+o.overscaledZ);for(var v=function(t,e,i,o){o=o||1;var r,a,n,s,l,c,u,h,p=[];for(r=0,a=t.length;r\":[24,[4,18,20,9,4,0]],\"?\":[18,[3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,-1,-1,9,2,8,1,9,0,10,1,9,2]],\"@\":[27,[18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,-1,-1,12,16,10,14,9,11,9,8,10,6,11,5,-1,-1,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,-1,-1,19,16,18,8,18,6,19,5]],A:[18,[9,21,1,0,-1,-1,9,21,17,0,-1,-1,4,7,14,7]],B:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,-1,-1,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0]],C:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5]],D:[21,[4,21,4,0,-1,-1,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0]],E:[19,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11,-1,-1,4,0,17,0]],F:[18,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11]],G:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,-1,-1,13,8,18,8]],H:[22,[4,21,4,0,-1,-1,18,21,18,0,-1,-1,4,11,18,11]],I:[8,[4,21,4,0]],J:[16,[12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7]],K:[21,[4,21,4,0,-1,-1,18,21,4,7,-1,-1,9,12,18,0]],L:[17,[4,21,4,0,-1,-1,4,0,16,0]],M:[24,[4,21,4,0,-1,-1,4,21,12,0,-1,-1,20,21,12,0,-1,-1,20,21,20,0]],N:[22,[4,21,4,0,-1,-1,4,21,18,0,-1,-1,18,21,18,0]],O:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21]],P:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10]],Q:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,-1,-1,12,4,18,-2]],R:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,-1,-1,11,11,18,0]],S:[20,[17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],T:[16,[8,21,8,0,-1,-1,1,21,15,21]],U:[22,[4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21]],V:[18,[1,21,9,0,-1,-1,17,21,9,0]],W:[24,[2,21,7,0,-1,-1,12,21,7,0,-1,-1,12,21,17,0,-1,-1,22,21,17,0]],X:[20,[3,21,17,0,-1,-1,17,21,3,0]],Y:[18,[1,21,9,11,9,0,-1,-1,17,21,9,11]],Z:[20,[17,21,3,0,-1,-1,3,21,17,21,-1,-1,3,0,17,0]],\"[\":[14,[4,25,4,-7,-1,-1,5,25,5,-7,-1,-1,4,25,11,25,-1,-1,4,-7,11,-7]],\"\\\\\":[14,[0,21,14,-3]],\"]\":[14,[9,25,9,-7,-1,-1,10,25,10,-7,-1,-1,3,25,10,25,-1,-1,3,-7,10,-7]],\"^\":[16,[6,15,8,18,10,15,-1,-1,3,12,8,17,13,12,-1,-1,8,17,8,0]],_:[16,[0,-2,16,-2]],\"`\":[10,[6,21,5,20,4,18,4,16,5,15,6,16,5,17]],a:[19,[15,14,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],b:[19,[4,21,4,0,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],c:[18,[15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],d:[19,[15,21,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],e:[18,[3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],f:[12,[10,21,8,21,6,20,5,17,5,0,-1,-1,2,14,9,14]],g:[19,[15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],h:[19,[4,21,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],i:[8,[3,21,4,20,5,21,4,22,3,21,-1,-1,4,14,4,0]],j:[10,[5,21,6,20,7,21,6,22,5,21,-1,-1,6,14,6,-3,5,-6,3,-7,1,-7]],k:[17,[4,21,4,0,-1,-1,14,14,4,4,-1,-1,8,8,15,0]],l:[8,[4,21,4,0]],m:[30,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0,-1,-1,15,10,18,13,20,14,23,14,25,13,26,10,26,0]],n:[19,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],o:[19,[8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14]],p:[19,[4,14,4,-7,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],q:[19,[15,14,15,-7,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],r:[13,[4,14,4,0,-1,-1,4,8,5,11,7,13,9,14,12,14]],s:[17,[14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3]],t:[12,[5,21,5,4,6,1,8,0,10,0,-1,-1,2,14,9,14]],u:[19,[4,14,4,4,5,1,7,0,10,0,12,1,15,4,-1,-1,15,14,15,0]],v:[16,[2,14,8,0,-1,-1,14,14,8,0]],w:[22,[3,14,7,0,-1,-1,11,14,7,0,-1,-1,11,14,15,0,-1,-1,19,14,15,0]],x:[17,[3,14,14,0,-1,-1,14,14,3,0]],y:[16,[2,14,8,0,-1,-1,14,14,8,0,6,-4,4,-6,2,-7,1,-7]],z:[17,[14,14,3,0,-1,-1,3,14,14,14,-1,-1,3,0,14,0]],\"{\":[14,[9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,-1,-1,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,-1,-1,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7]],\"|\":[8,[4,25,4,-7]],\"}\":[14,[5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,-1,-1,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,-1,-1,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7]],\"~\":[24,[3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,-1,-1,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]]};var ho={symbol:function(e,i,o,r,a){if(\"translucent\"===e.renderPass){var n=Ct.disabled,s=e.colorModeForRenderPass();o.layout.get(\"text-variable-anchor\")&&function(e,i,o,r,a,n,s){for(var l=i.transform,c=\"map\"===a,u=\"map\"===n,h=0,p=e;he.y){var i=t;t=e,e=i;}return {x0:t.x,y0:t.y,x1:e.x,y1:e.y,dx:e.x-t.x,dy:e.y-t.y}}function fo(t,e,i,o,r){var a=Math.max(i,Math.floor(e.y0)),n=Math.min(o,Math.ceil(e.y1));if(t.x0===e.x0&&t.y0===e.y0?t.x0+e.dy/t.dy*t.dx0,h=e.dx<0,p=a;pl.dy&&(n=s,s=l,l=n),s.dy>c.dy&&(n=s,s=c,c=n),l.dy>c.dy&&(n=l,l=c,c=n),s.dy&&fo(c,s,o,r,a),l.dy&&fo(c,l,o,r,a);}po.prototype.resize=function(e,i){var o=this.context.gl;if(this.width=e*t.browser.devicePixelRatio,this.height=i*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var r=0,a=this.style._order;r256&&this.clearStencil(),i.setColorMode(St.disabled),i.setDepthMode(It.disabled);var r=this.useProgram(\"clippingMask\");this._tileClippingMaskIDs={};for(var a=0,n=e;a256&&this.clearStencil();var t=this.nextStencilID++,e=this.context.gl;return new Ct({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},po.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new Ct({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},po.prototype.colorModeForRenderPass=function(){var e=this.context.gl;if(this._showOverdrawInspector){return new St([e.CONSTANT_COLOR,e.ONE],new t.Color(1/8,1/8,1/8,0),[!0,!0,!0,!0])}return \"opaque\"===this.renderPass?St.unblended:St.alphaBlended},po.prototype.depthModeForSublayer=function(t,e,i){if(!this.opaquePassEnabledForLayer())return It.disabled;var o=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new It(i||this.context.gl.LEQUAL,e,[o,o])},po.prototype.opaquePassEnabledForLayer=function(){return this.currentLayer=0;this.currentLayer--){var z=this.style._layers[r[this.currentLayer]],L=a[z.source],M=u[z.source];this._renderTileClippingMasks(z,M),this.renderLayer(this,L,z,M);}for(this.renderPass=\"translucent\",this.currentLayer=0;this.currentLayer0?e.pop():null},po.prototype.isPatternMissing=function(t){if(!t)return !1;var e=this.imageManager.getPattern(t.from.toString()),i=this.imageManager.getPattern(t.to.toString());return !e||!i},po.prototype.useProgram=function(t,e){void 0===e&&(e=this.emptyProgramConfiguration),this.cache=this.cache||{};var i=\"\"+t+(e.cacheKey||\"\")+(this._showOverdrawInspector?\"/overdraw\":\"\");return this.cache[i]||(this.cache[i]=new mi(this.context,_i[t],e,Xi[t],this._showOverdrawInspector)),this.cache[i]},po.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault();},po.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD);};var go=function(e,i,o,r,a){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===a||a,this._minZoom=e||0,this._maxZoom=i||22,this._minPitch=null==o?0:o,this._maxPitch=null==r?60:r,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._posMatrixCache={},this._alignedPosMatrixCache={};},vo={minZoom:{configurable:!0},maxZoom:{configurable:!0},minPitch:{configurable:!0},maxPitch:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerPoint:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};go.prototype.clone=function(){var t=new go(this._minZoom,this._maxZoom,this._minPitch,this.maxPitch,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._calcMatrices(),t},vo.minZoom.get=function(){return this._minZoom},vo.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t));},vo.maxZoom.get=function(){return this._maxZoom},vo.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t));},vo.minPitch.get=function(){return this._minPitch},vo.minPitch.set=function(t){this._minPitch!==t&&(this._minPitch=t,this.pitch=Math.max(this.pitch,t));},vo.maxPitch.get=function(){return this._maxPitch},vo.maxPitch.set=function(t){this._maxPitch!==t&&(this._maxPitch=t,this.pitch=Math.min(this.pitch,t));},vo.renderWorldCopies.get=function(){return this._renderWorldCopies},vo.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t;},vo.worldSize.get=function(){return this.tileSize*this.scale},vo.centerPoint.get=function(){return this.size._div(2)},vo.size.get=function(){return new t.Point(this.width,this.height)},vo.bearing.get=function(){return -this.angle/Math.PI*180},vo.bearing.set=function(e){var i=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==i&&(this._unmodified=!1,this.angle=i,this._calcMatrices(),this.rotationMatrix=t.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle));},vo.pitch.get=function(){return this._pitch/Math.PI*180},vo.pitch.set=function(e){var i=t.clamp(e,this.minPitch,this.maxPitch)/180*Math.PI;this._pitch!==i&&(this._unmodified=!1,this._pitch=i,this._calcMatrices());},vo.fov.get=function(){return this._fov/Math.PI*180},vo.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices());},vo.zoom.get=function(){return this._zoom},vo.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices());},vo.center.get=function(){return this._center},vo.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices());},go.prototype.coveringZoomLevel=function(t){var e=(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize));return Math.max(0,e)},go.prototype.getVisibleUnwrappedCoordinates=function(e){var i=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var o=this.pointCoordinate(new t.Point(0,0)),r=this.pointCoordinate(new t.Point(this.width,0)),a=this.pointCoordinate(new t.Point(this.width,this.height)),n=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(o.x,r.x,a.x,n.x)),l=Math.floor(Math.max(o.x,r.x,a.x,n.x)),c=s-1;c<=l+1;c++)0!==c&&i.push(new t.UnwrappedTileID(c,e));return i},go.prototype.coveringTiles=function(e){var i=this.coveringZoomLevel(e),o=i;if(void 0!==e.minzoom&&ie.maxzoom&&(i=e.maxzoom);var r=t.MercatorCoordinate.fromLngLat(this.center),a=Math.pow(2,i),n=new t.Point(a*r.x-.5,a*r.y-.5);return function(e,i,o,r){void 0===r&&(r=!0);var a=1<=0&&l<=a)for(c=i;cn&&(r=n-m);}if(this.lngRange){var g=d.x,v=c.x/2;g-vl&&(o=l-v);}void 0===o&&void 0===r||(this.center=this.unproject(new t.Point(void 0!==o?o:d.x,void 0!==r?r:d.y))),this._unmodified=u,this._constraining=!1;}},go.prototype._calcMatrices=function(){if(this.height){this.cameraToCenterDistance=.5/Math.tan(this._fov/2)*this.height;var e=this._fov/2,i=Math.PI/2+this._pitch,o=Math.sin(e)*this.cameraToCenterDistance/Math.sin(Math.PI-i-e),r=this.point,a=r.x,n=r.y,s=1.01*(Math.cos(Math.PI/2-this._pitch)*o+this.cameraToCenterDistance),l=this.height/50,c=new Float64Array(16);t.perspective(c,this._fov,this.width/this.height,l,s),t.scale(c,c,[1,-1,1]),t.translate(c,c,[0,0,-this.cameraToCenterDistance]),t.rotateX(c,c,this._pitch),t.rotateZ(c,c,this.angle),t.translate(c,c,[-a,-n,0]),this.mercatorMatrix=t.scale([],c,[this.worldSize,this.worldSize,this.worldSize]),t.scale(c,c,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=c;var u=this.width%2/2,h=this.height%2/2,p=Math.cos(this.angle),d=Math.sin(this.angle),_=a-Math.round(a)+p*u+d*h,f=n-Math.round(n)+p*h+d*u,m=new Float64Array(c);if(t.translate(m,m,[_>.5?_-1:_,f>.5?f-1:f,0]),this.alignedProjMatrix=m,c=t.create(),t.scale(c,c,[this.width/2,-this.height/2,1]),t.translate(c,c,[1,-1,0]),this.labelPlaneMatrix=c,c=t.create(),t.scale(c,c,[1,-1,1]),t.translate(c,c,[-1,-1,0]),t.scale(c,c,[2/this.width,2/this.height,1]),this.glCoordMatrix=c,this.pixelMatrix=t.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(c=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error(\"failed to invert matrix\");this.pixelMatrixInverse=c,this._posMatrixCache={},this._alignedPosMatrixCache={};}},go.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),i=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(i,i,this.pixelMatrix)[3]/this.cameraToCenterDistance},go.prototype.getCameraPoint=function(){var e=this._pitch,i=Math.tan(e)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,i))},go.prototype.getCameraQueryGeometry=function(e){var i=this.getCameraPoint();if(1===e.length)return [e[0],i];for(var o=i.x,r=i.y,a=i.x,n=i.y,s=0,l=e;s=3&&!t.some((function(t){return isNaN(t)}))&&(this._map.jumpTo({center:[+t[2],+t[1]],zoom:+t[0],bearing:+(t[3]||0),pitch:+(t[4]||0)}),!0)},yo.prototype._updateHashUnthrottled=function(){var e=this.getHashString();try{t.window.history.replaceState(t.window.history.state,\"\",e);}catch(t){}};var xo=function(e){function o(o,r,a,n){void 0===n&&(n={});var s=i.mousePos(r.getCanvasContainer(),a),l=r.unproject(s);e.call(this,o,t.extend({point:s,lngLat:l,originalEvent:a},n)),this._defaultPrevented=!1,this.target=r;}e&&(o.__proto__=e),o.prototype=Object.create(e&&e.prototype),o.prototype.constructor=o;var r={defaultPrevented:{configurable:!0}};return o.prototype.preventDefault=function(){this._defaultPrevented=!0;},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(o.prototype,r),o}(t.Event),bo=function(e){function o(o,r,a){var n=i.touchPos(r.getCanvasContainer(),a),s=n.map((function(t){return r.unproject(t)})),l=n.reduce((function(t,e,i,o){return t.add(e.div(o.length))}),new t.Point(0,0)),c=r.unproject(l);e.call(this,o,{points:n,point:l,lngLats:s,lngLat:c,originalEvent:a}),this._defaultPrevented=!1;}e&&(o.__proto__=e),o.prototype=Object.create(e&&e.prototype),o.prototype.constructor=o;var r={defaultPrevented:{configurable:!0}};return o.prototype.preventDefault=function(){this._defaultPrevented=!0;},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(o.prototype,r),o}(t.Event),wo=function(t){function e(e,i,o){t.call(this,e,{originalEvent:o}),this._defaultPrevented=!1;}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var i={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0;},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,i),e}(t.Event),Eo=function(e){this._map=e,this._el=e.getCanvasContainer(),this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=1/450,t.bindAll([\"_onWheel\",\"_onTimeout\",\"_onScrollFrame\",\"_onScrollFinished\"],this);};Eo.prototype.setZoomRate=function(t){this._defaultZoomRate=t;},Eo.prototype.setWheelZoomRate=function(t){this._wheelZoomRate=t;},Eo.prototype.isEnabled=function(){return !!this._enabled},Eo.prototype.isActive=function(){return !!this._active},Eo.prototype.isZooming=function(){return !!this._zooming},Eo.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&\"center\"===t.around);},Eo.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1);},Eo.prototype.onWheel=function(e){if(this.isEnabled()){var i=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,o=t.browser.now(),r=o-(this._lastWheelEventTime||0);this._lastWheelEventTime=o,0!==i&&i%4.000244140625==0?this._type=\"wheel\":0!==i&&Math.abs(i)<4?this._type=\"trackpad\":r>400?(this._type=null,this._lastValue=i,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(r*i)<200?\"trackpad\":\"wheel\",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,i+=this._lastValue)),e.shiftKey&&i&&(i/=4),this._type&&(this._lastWheelEvent=e,this._delta-=i,this.isActive()||this._start(e)),e.preventDefault();}},Eo.prototype._onTimeout=function(t){this._type=\"wheel\",this._delta-=this._lastValue,this.isActive()||this._start(t);},Eo.prototype._start=function(e){if(this._delta){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),this._active=!0,this.isZooming()||(this._zooming=!0,this._map.fire(new t.Event(\"movestart\",{originalEvent:e})),this._map.fire(new t.Event(\"zoomstart\",{originalEvent:e}))),this._finishTimeout&&clearTimeout(this._finishTimeout);var o=i.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(o)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame));}},Eo.prototype._onScrollFrame=function(){var e=this;if(this._frameId=null,this.isActive()){var i=this._map.transform;if(0!==this._delta){var o=\"wheel\"===this._type&&Math.abs(this._delta)>4.000244140625?this._wheelZoomRate:this._defaultZoomRate,r=2/(1+Math.exp(-Math.abs(this._delta*o)));this._delta<0&&0!==r&&(r=1/r);var a=\"number\"==typeof this._targetZoom?i.zoomScale(this._targetZoom):i.scale;this._targetZoom=Math.min(i.maxZoom,Math.max(i.minZoom,i.scaleZoom(a*r))),\"wheel\"===this._type&&(this._startZoom=i.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0;}var n=\"number\"==typeof this._targetZoom?this._targetZoom:i.zoom,s=this._startZoom,l=this._easing,c=!1;if(\"wheel\"===this._type&&s&&l){var u=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),h=l(u);i.zoom=t.number(s,n,h),u<1?this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame)):c=!0;}else i.zoom=n,c=!0;i.setLocationAtPoint(this._around,this._aroundPoint),this._map.fire(new t.Event(\"move\",{originalEvent:this._lastWheelEvent})),this._map.fire(new t.Event(\"zoom\",{originalEvent:this._lastWheelEvent})),c&&(this._active=!1,this._finishTimeout=setTimeout((function(){e._zooming=!1,e._map.fire(new t.Event(\"zoomend\",{originalEvent:e._lastWheelEvent})),e._map.fire(new t.Event(\"moveend\",{originalEvent:e._lastWheelEvent})),delete e._targetZoom;}),200));}},Eo.prototype._smoothOutEasing=function(e){var i=t.ease;if(this._prevEase){var o=this._prevEase,r=(t.browser.now()-o.start)/o.duration,a=o.easing(r+.01)-o.easing(r),n=.27/Math.sqrt(a*a+1e-4)*.01,s=Math.sqrt(.0729-n*n);i=t.bezier(n,s,.25,1);}return this._prevEase={start:t.browser.now(),duration:e,easing:i},i};var To=function(e,i){this._map=e,this._el=e.getCanvasContainer(),this._container=e.getContainer(),this._clickTolerance=i.clickTolerance||1,t.bindAll([\"_onMouseMove\",\"_onMouseUp\",\"_onKeyDown\"],this);};To.prototype.isEnabled=function(){return !!this._enabled},To.prototype.isActive=function(){return !!this._active},To.prototype.enable=function(){this.isEnabled()||(this._enabled=!0);},To.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1);},To.prototype.onMouseDown=function(e){this.isEnabled()&&e.shiftKey&&0===e.button&&(t.window.document.addEventListener(\"mousemove\",this._onMouseMove,!1),t.window.document.addEventListener(\"keydown\",this._onKeyDown,!1),t.window.document.addEventListener(\"mouseup\",this._onMouseUp,!1),i.disableDrag(),this._startPos=this._lastPos=i.mousePos(this._el,e),this._active=!0);},To.prototype._onMouseMove=function(t){var e=i.mousePos(this._el,t);if(!(this._lastPos.equals(e)||!this._box&&e.dist(this._startPos)180&&(d=180);var _=d/180;c+=h*d*(_/2),Math.abs(i._normalizeBearing(c,0))0&&i-e[0][0]>160;)e.shift();};var So={linearity:.3,easing:t.bezier(0,0,.3,1),maxSpeed:1400,deceleration:2500},Po=function(e,i){this._map=e,this._el=e.getCanvasContainer(),this._state=\"disabled\",this._clickTolerance=i.clickTolerance||1,this._inertiaOptions=So,t.bindAll([\"_onMove\",\"_onMouseUp\",\"_onTouchEnd\",\"_onBlur\",\"_onDragFrame\"],this);};Po.prototype.isEnabled=function(){return \"disabled\"!==this._state},Po.prototype.isActive=function(){return \"active\"===this._state},Po.prototype.enable=function(e){this.isEnabled()||(this._el.classList.add(\"mapboxgl-touch-drag-pan\"),this._state=\"enabled\",this._inertiaOptions=t.extend(So,e));},Po.prototype.disable=function(){if(this.isEnabled())switch(this._el.classList.remove(\"mapboxgl-touch-drag-pan\"),this._state){case\"active\":this._state=\"disabled\",this._unbind(),this._deactivate(),this._fireEvent(\"dragend\"),this._fireEvent(\"moveend\");break;case\"pending\":this._state=\"disabled\",this._unbind();break;default:this._state=\"disabled\";}},Po.prototype.onMouseDown=function(e){\"enabled\"===this._state&&(e.ctrlKey||0!==i.mouseButton(e)||(i.addEventListener(t.window.document,\"mousemove\",this._onMove,{capture:!0}),i.addEventListener(t.window.document,\"mouseup\",this._onMouseUp),this._start(e)));},Po.prototype.onTouchStart=function(e){this.isEnabled()&&(e.touches&&e.touches.length>1&&(\"pending\"===this._state||\"active\"===this._state)||(i.addEventListener(t.window.document,\"touchmove\",this._onMove,{capture:!0,passive:!1}),i.addEventListener(t.window.document,\"touchend\",this._onTouchEnd),this._start(e)));},Po.prototype._start=function(e){t.window.addEventListener(\"blur\",this._onBlur),this._state=\"pending\",this._startPos=this._mouseDownPos=this._prevPos=this._lastPos=i.mousePos(this._el,e),this._startTouch=this._lastTouch=t.window.TouchEvent&&e instanceof t.window.TouchEvent?i.touchPos(this._el,e):null,this._inertia=[[t.browser.now(),this._startPos]];},Po.prototype._touchesMatch=function(t,e){return !(!t||!e||t.length!==e.length)&&t.every((function(t,i){return e[i]===t}))},Po.prototype._onMove=function(e){e.preventDefault();var o=t.window.TouchEvent&&e instanceof t.window.TouchEvent?i.touchPos(this._el,e):null,r=i.mousePos(this._el,e);(o?this._touchesMatch(this._lastTouch,o):this._lastPos.equals(r))||\"pending\"===this._state&&r.dist(this._mouseDownPos)1&&i.addEventListener(t.window.document,\"touchend\",this._onTouchEnd);break;case\"pending\":this._state=\"enabled\",this._unbind();break;case\"enabled\":this._unbind();}},Po.prototype._onBlur=function(t){this._abort(t);},Po.prototype._unbind=function(){i.removeEventListener(t.window.document,\"touchmove\",this._onMove,{capture:!0,passive:!1}),i.removeEventListener(t.window.document,\"touchend\",this._onTouchEnd),i.removeEventListener(t.window.document,\"mousemove\",this._onMove,{capture:!0}),i.removeEventListener(t.window.document,\"mouseup\",this._onMouseUp),i.removeEventListener(t.window,\"blur\",this._onBlur);},Po.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._startPos,delete this._prevPos,delete this._mouseDownPos,delete this._lastPos,delete this._startTouch,delete this._lastTouch,delete this._shouldStart;},Po.prototype._inertialPan=function(t){this._fireEvent(\"dragend\",t),this._drainInertiaBuffer();var e=this._inertia;if(e.length<2)this._fireEvent(\"moveend\",t);else{var i=e[e.length-1],o=e[0],r=i[1].sub(o[1]),a=(i[0]-o[0])/1e3;if(0===a||i[1].equals(o[1]))this._fireEvent(\"moveend\",t);else{var n=this._inertiaOptions,s=n.linearity,l=n.easing,c=n.maxSpeed,u=n.deceleration,h=r.mult(s/a),p=h.mag();p>c&&(p=c,h._unit()._mult(p));var d=p/(u*s),_=h.mult(-d/2);this._map.panBy(_,{duration:1e3*d,easing:l,noMoveStart:!0},{originalEvent:t});}}},Po.prototype._fireEvent=function(e,i){return this._map.fire(new t.Event(e,i?{originalEvent:i}:{}))},Po.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,i=t.browser.now();e.length>0&&i-e[0][0]>160;)e.shift();};var zo=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll([\"_onKeyDown\"],this);};function Lo(t){return t*(2-t)}zo.prototype.isEnabled=function(){return !!this._enabled},zo.prototype.enable=function(){this.isEnabled()||(this._el.addEventListener(\"keydown\",this._onKeyDown,!1),this._enabled=!0);},zo.prototype.disable=function(){this.isEnabled()&&(this._el.removeEventListener(\"keydown\",this._onKeyDown),this._enabled=!1);},zo.prototype._onKeyDown=function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e=0,i=0,o=0,r=0,a=0;switch(t.keyCode){case 61:case 107:case 171:case 187:e=1;break;case 189:case 109:case 173:e=-1;break;case 37:t.shiftKey?i=-1:(t.preventDefault(),r=-1);break;case 39:t.shiftKey?i=1:(t.preventDefault(),r=1);break;case 38:t.shiftKey?o=1:(t.preventDefault(),a=-1);break;case 40:t.shiftKey?o=-1:(a=1,t.preventDefault());break;default:return}var n=this._map,s=n.getZoom(),l={duration:300,delayEndEvents:500,easing:Lo,zoom:e?Math.round(s)+e*(t.shiftKey?2:1):s,bearing:n.getBearing()+15*i,pitch:n.getPitch()+10*o,offset:[100*-r,100*-a],center:n.getCenter()};n.easeTo(l,{originalEvent:t});}};var Mo=function(e){this._map=e,t.bindAll([\"_onDblClick\",\"_onZoomEnd\"],this);};Mo.prototype.isEnabled=function(){return !!this._enabled},Mo.prototype.isActive=function(){return !!this._active},Mo.prototype.enable=function(){this.isEnabled()||(this._enabled=!0);},Mo.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1);},Mo.prototype.onTouchStart=function(t){var e=this;if(this.isEnabled()&&!(t.points.length>1))if(this._tapped){var i=t.points[0],o=this._tappedPoint;if(o&&o.dist(i)<=30){t.originalEvent.preventDefault();var r=function(){e._tapped&&e._zoom(t),e._map.off(\"touchcancel\",a),e._resetTapped();},a=function(){e._map.off(\"touchend\",r),e._resetTapped();};this._map.once(\"touchend\",r),this._map.once(\"touchcancel\",a);}else this._resetTapped();}else this._tappedPoint=t.points[0],this._tapped=setTimeout((function(){e._tapped=null,e._tappedPoint=null;}),300);},Mo.prototype._resetTapped=function(){clearTimeout(this._tapped),this._tapped=null,this._tappedPoint=null;},Mo.prototype.onDblClick=function(t){this.isEnabled()&&(t.originalEvent.preventDefault(),this._zoom(t));},Mo.prototype._zoom=function(t){this._active=!0,this._map.on(\"zoomend\",this._onZoomEnd),this._map.zoomTo(this._map.getZoom()+(t.originalEvent.shiftKey?-1:1),{around:t.lngLat},t);},Mo.prototype._onZoomEnd=function(){this._active=!1,this._map.off(\"zoomend\",this._onZoomEnd);};var Do=t.bezier(0,0,.15,1),Ao=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll([\"_onMove\",\"_onEnd\",\"_onTouchFrame\"],this);};Ao.prototype.isEnabled=function(){return !!this._enabled},Ao.prototype.enable=function(t){this.isEnabled()||(this._el.classList.add(\"mapboxgl-touch-zoom-rotate\"),this._enabled=!0,this._aroundCenter=!!t&&\"center\"===t.around);},Ao.prototype.disable=function(){this.isEnabled()&&(this._el.classList.remove(\"mapboxgl-touch-zoom-rotate\"),this._enabled=!1);},Ao.prototype.disableRotation=function(){this._rotationDisabled=!0;},Ao.prototype.enableRotation=function(){this._rotationDisabled=!1;},Ao.prototype.isActive=function(){return this.isEnabled()&&!!this._gestureIntent},Ao.prototype.onStart=function(e){if(this.isEnabled()&&2===e.touches.length){var o=i.mousePos(this._el,e.touches[0]),r=i.mousePos(this._el,e.touches[1]),a=o.add(r).div(2);this._startVec=o.sub(r),this._startAround=this._map.transform.pointLocation(a),this._gestureIntent=void 0,this._inertia=[],i.addEventListener(t.window.document,\"touchmove\",this._onMove,{passive:!1}),i.addEventListener(t.window.document,\"touchend\",this._onEnd);}},Ao.prototype._getTouchEventData=function(t){var e=i.mousePos(this._el,t.touches[0]),o=i.mousePos(this._el,t.touches[1]),r=e.sub(o);return {vec:r,center:e.add(o).div(2),scale:r.mag()/this._startVec.mag(),bearing:this._rotationDisabled?0:180*r.angleWith(this._startVec)/Math.PI}},Ao.prototype._onMove=function(e){if(2===e.touches.length){var i=this._getTouchEventData(e),o=i.vec,r=i.scale,a=i.bearing;if(!this._gestureIntent){var n=this._rotationDisabled&&1!==r||Math.abs(1-r)>.15;Math.abs(a)>10?this._gestureIntent=\"rotate\":n&&(this._gestureIntent=\"zoom\"),this._gestureIntent&&(this._map.fire(new t.Event(this._gestureIntent+\"start\",{originalEvent:e})),this._map.fire(new t.Event(\"movestart\",{originalEvent:e})),this._startVec=o);}this._lastTouchEvent=e,this._frameId||(this._frameId=this._map._requestRenderFrame(this._onTouchFrame)),e.preventDefault();}},Ao.prototype._onTouchFrame=function(){this._frameId=null;var e=this._gestureIntent;if(e){var i=this._map.transform;this._startScale||(this._startScale=i.scale,this._startBearing=i.bearing);var o=this._getTouchEventData(this._lastTouchEvent),r=o.center,a=o.bearing,n=o.scale,s=i.pointLocation(r),l=i.locationPoint(s);\"rotate\"===e&&(i.bearing=this._startBearing+a),i.zoom=i.scaleZoom(this._startScale*n),i.setLocationAtPoint(this._startAround,l),this._map.fire(new t.Event(e,{originalEvent:this._lastTouchEvent})),this._map.fire(new t.Event(\"move\",{originalEvent:this._lastTouchEvent})),this._drainInertiaBuffer(),this._inertia.push([t.browser.now(),n,r]);}},Ao.prototype._onEnd=function(e){i.removeEventListener(t.window.document,\"touchmove\",this._onMove,{passive:!1}),i.removeEventListener(t.window.document,\"touchend\",this._onEnd);var o=this._gestureIntent,r=this._startScale;if(this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._gestureIntent,delete this._startScale,delete this._startBearing,delete this._lastTouchEvent,o){this._map.fire(new t.Event(o+\"end\",{originalEvent:e})),this._drainInertiaBuffer();var a=this._inertia,n=this._map;if(a.length<2)n.snapToNorth({},{originalEvent:e});else{var s=a[a.length-1],l=a[0],c=n.transform.scaleZoom(r*s[1]),u=n.transform.scaleZoom(r*l[1]),h=c-u,p=(s[0]-l[0])/1e3,d=s[2];if(0!==p&&c!==u){var _=.15*h/p;Math.abs(_)>2.5&&(_=_>0?2.5:-2.5);var f=1e3*Math.abs(_/(12*.15)),m=c+_*f/2e3;n.easeTo({zoom:m,duration:f,easing:Do,around:this._aroundCenter?n.getCenter():n.unproject(d),noMoveStart:!0},{originalEvent:e});}else n.snapToNorth({},{originalEvent:e});}}},Ao.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,i=t.browser.now();e.length>2&&i-e[0][0]>160;)e.shift();};var Ro={scrollZoom:Eo,boxZoom:To,dragRotate:Co,dragPan:Po,keyboard:zo,doubleClickZoom:Mo,touchZoomRotate:Ao};var ko=function(e){function i(i,o){e.call(this),this._moving=!1,this._zooming=!1,this.transform=i,this._bearingSnap=o.bearingSnap,t.bindAll([\"_renderFrameCallback\"],this);}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.getCenter=function(){return new t.LngLat(this.transform.center.lng,this.transform.center.lat)},i.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},i.prototype.panBy=function(e,i,o){return e=t.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},i),o)},i.prototype.panTo=function(e,i,o){return this.easeTo(t.extend({center:e},i),o)},i.prototype.getZoom=function(){return this.transform.zoom},i.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},i.prototype.zoomTo=function(e,i,o){return this.easeTo(t.extend({zoom:e},i),o)},i.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},i.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},i.prototype.getBearing=function(){return this.transform.bearing},i.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},i.prototype.rotateTo=function(e,i,o){return this.easeTo(t.extend({bearing:e},i),o)},i.prototype.resetNorth=function(e,i){return this.rotateTo(0,t.extend({duration:1e3},e),i),this},i.prototype.resetNorthPitch=function(e,i){return this.easeTo(t.extend({bearing:0,pitch:0,duration:1e3},e),i),this},i.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())e?1:0})),[\"bottom\",\"left\",\"right\",\"top\"])){var n=this.transform,s=n.project(t.LngLat.convert(e)),l=n.project(t.LngLat.convert(i)),c=s.rotate(-o*Math.PI/180),u=l.rotate(-o*Math.PI/180),h=new t.Point(Math.max(c.x,u.x),Math.max(c.y,u.y)),p=new t.Point(Math.min(c.x,u.x),Math.min(c.y,u.y)),d=h.sub(p),_=(n.width-r.padding.left-r.padding.right)/d.x,f=(n.height-r.padding.top-r.padding.bottom)/d.y;if(!(f<0||_<0)){var m=Math.min(n.scaleZoom(n.scale*Math.min(_,f)),r.maxZoom),g=t.Point.convert(r.offset),v=(r.padding.left-r.padding.right)/2,y=(r.padding.top-r.padding.bottom)/2,x=new t.Point(g.x+v,g.y+y).mult(n.scale/n.zoomScale(m));return {center:n.unproject(s.add(l).div(2).sub(x)),zoom:m,bearing:o}}t.warnOnce(\"Map cannot fit within canvas with the given bounds, padding, and/or offset.\");}else t.warnOnce(\"options.padding must be a positive number, or an Object with keys 'bottom', 'left', 'right', 'top'\");},i.prototype.fitBounds=function(t,e,i){return this._fitInternal(this.cameraForBounds(t,e),e,i)},i.prototype.fitScreenCoordinates=function(e,i,o,r,a){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(i)),o,r),r,a)},i.prototype._fitInternal=function(e,i,o){return e?(i=t.extend(e,i)).linear?this.easeTo(i,o):this.flyTo(i,o):this},i.prototype.jumpTo=function(e,i){this.stop();var o=this.transform,r=!1,a=!1,n=!1;return \"zoom\"in e&&o.zoom!==+e.zoom&&(r=!0,o.zoom=+e.zoom),void 0!==e.center&&(o.center=t.LngLat.convert(e.center)),\"bearing\"in e&&o.bearing!==+e.bearing&&(a=!0,o.bearing=+e.bearing),\"pitch\"in e&&o.pitch!==+e.pitch&&(n=!0,o.pitch=+e.pitch),this.fire(new t.Event(\"movestart\",i)).fire(new t.Event(\"move\",i)),r&&this.fire(new t.Event(\"zoomstart\",i)).fire(new t.Event(\"zoom\",i)).fire(new t.Event(\"zoomend\",i)),a&&this.fire(new t.Event(\"rotatestart\",i)).fire(new t.Event(\"rotate\",i)).fire(new t.Event(\"rotateend\",i)),n&&this.fire(new t.Event(\"pitchstart\",i)).fire(new t.Event(\"pitch\",i)).fire(new t.Event(\"pitchend\",i)),this.fire(new t.Event(\"moveend\",i))},i.prototype.easeTo=function(e,i){var o=this;this.stop(),(!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate||!e.essential&&t.browser.prefersReducedMotion)&&(e.duration=0);var r=this.transform,a=this.getZoom(),n=this.getBearing(),s=this.getPitch(),l=\"zoom\"in e?+e.zoom:a,c=\"bearing\"in e?this._normalizeBearing(e.bearing,n):n,u=\"pitch\"in e?+e.pitch:s,h=r.centerPoint.add(t.Point.convert(e.offset)),p=r.pointLocation(h),d=t.LngLat.convert(e.center||p);this._normalizeCenter(d);var _,f,m=r.project(p),g=r.project(d).sub(m),v=r.zoomScale(l-a);return e.around&&(_=t.LngLat.convert(e.around),f=r.locationPoint(_)),this._zooming=l!==a,this._rotating=n!==c,this._pitching=u!==s,this._prepareEase(i,e.noMoveStart),clearTimeout(this._easeEndTimeoutID),this._ease((function(e){if(o._zooming&&(r.zoom=t.number(a,l,e)),o._rotating&&(r.bearing=t.number(n,c,e)),o._pitching&&(r.pitch=t.number(s,u,e)),_)r.setLocationAtPoint(_,f);else{var p=r.zoomScale(r.zoom-a),d=l>a?Math.min(2,v):Math.max(.5,v),y=Math.pow(d,1-e),x=r.unproject(m.add(g.mult(e*y)).mult(p));r.setLocationAtPoint(r.renderWorldCopies?x.wrap():x,h);}o._fireMoveEvents(i);}),(function(){e.delayEndEvents?o._easeEndTimeoutID=setTimeout((function(){return o._afterEase(i)}),e.delayEndEvents):o._afterEase(i);}),e),this},i.prototype._prepareEase=function(e,i){this._moving=!0,i||this.fire(new t.Event(\"movestart\",e)),this._zooming&&this.fire(new t.Event(\"zoomstart\",e)),this._rotating&&this.fire(new t.Event(\"rotatestart\",e)),this._pitching&&this.fire(new t.Event(\"pitchstart\",e));},i.prototype._fireMoveEvents=function(e){this.fire(new t.Event(\"move\",e)),this._zooming&&this.fire(new t.Event(\"zoom\",e)),this._rotating&&this.fire(new t.Event(\"rotate\",e)),this._pitching&&this.fire(new t.Event(\"pitch\",e));},i.prototype._afterEase=function(e){var i=this._zooming,o=this._rotating,r=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,i&&this.fire(new t.Event(\"zoomend\",e)),o&&this.fire(new t.Event(\"rotateend\",e)),r&&this.fire(new t.Event(\"pitchend\",e)),this.fire(new t.Event(\"moveend\",e));},i.prototype.flyTo=function(e,i){var o=this;if(!e.essential&&t.browser.prefersReducedMotion){var r=t.pick(e,[\"center\",\"zoom\",\"bearing\",\"pitch\",\"around\"]);return this.jumpTo(r,i)}this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var a=this.transform,n=this.getZoom(),s=this.getBearing(),l=this.getPitch(),c=\"zoom\"in e?t.clamp(+e.zoom,a.minZoom,a.maxZoom):n,u=\"bearing\"in e?this._normalizeBearing(e.bearing,s):s,h=\"pitch\"in e?+e.pitch:l,p=a.zoomScale(c-n),d=a.centerPoint.add(t.Point.convert(e.offset)),_=a.pointLocation(d),f=t.LngLat.convert(e.center||_);this._normalizeCenter(f);var m=a.project(_),g=a.project(f).sub(m),v=e.curve,y=Math.max(a.width,a.height),x=y/p,b=g.mag();if(\"minZoom\"in e){var w=t.clamp(Math.min(e.minZoom,n,c),a.minZoom,a.maxZoom),E=y/a.zoomScale(w-n);v=Math.sqrt(E/b*2);}var T=v*v;function I(t){var e=(x*x-y*y+(t?-1:1)*T*T*b*b)/(2*(t?x:y)*T*b);return Math.log(Math.sqrt(e*e+1)-e)}function C(t){return (Math.exp(t)-Math.exp(-t))/2}function S(t){return (Math.exp(t)+Math.exp(-t))/2}var P=I(0),z=function(t){return S(P)/S(P+v*t)},L=function(t){return y*((S(P)*(C(e=P+v*t)/S(e))-C(P))/T)/b;var e;},M=(I(1)-P)/v;if(Math.abs(b)<1e-6||!isFinite(M)){if(Math.abs(y-x)<1e-6)return this.easeTo(e,i);var D=xe.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=s!==u,this._pitching=h!==l,this._prepareEase(i,!1),this._ease((function(e){var r=e*M,p=1/z(r);a.zoom=1===e?c:n+a.scaleZoom(p),o._rotating&&(a.bearing=t.number(s,u,e)),o._pitching&&(a.pitch=t.number(l,h,e));var _=1===e?f:a.unproject(m.add(g.mult(L(r))).mult(p));a.setLocationAtPoint(a.renderWorldCopies?_.wrap():_,d),o._fireMoveEvents(i);}),(function(){return o._afterEase(i)}),e),this},i.prototype.isEasing=function(){return !!this._easeFrameId},i.prototype.stop=function(){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var t=this._onEaseEnd;delete this._onEaseEnd,t.call(this);}return this},i.prototype._ease=function(e,i,o){!1===o.animate||0===o.duration?(e(1),i()):(this._easeStart=t.browser.now(),this._easeOptions=o,this._onEaseFrame=e,this._onEaseEnd=i,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback));},i.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop();},i.prototype._normalizeBearing=function(e,i){e=t.wrap(e,-180,180);var o=Math.abs(e-i);return Math.abs(e-360-i)180?-360:i<-180?360:0;}},i}(t.Evented),Bo=function(e){void 0===e&&(e={}),this.options=e,t.bindAll([\"_updateEditLink\",\"_updateData\",\"_updateCompact\"],this);};Bo.prototype.getDefaultPosition=function(){return \"bottom-right\"},Bo.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-attrib\"),this._innerContainer=i.create(\"div\",\"mapboxgl-ctrl-attrib-inner\",this._container),e&&this._container.classList.add(\"mapboxgl-compact\"),this._updateAttributions(),this._updateEditLink(),this._map.on(\"styledata\",this._updateData),this._map.on(\"sourcedata\",this._updateData),this._map.on(\"moveend\",this._updateEditLink),void 0===e&&(this._map.on(\"resize\",this._updateCompact),this._updateCompact()),this._container},Bo.prototype.onRemove=function(){i.remove(this._container),this._map.off(\"styledata\",this._updateData),this._map.off(\"sourcedata\",this._updateData),this._map.off(\"moveend\",this._updateEditLink),this._map.off(\"resize\",this._updateCompact),this._map=void 0,this._attribHTML=void 0;},Bo.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(\".mapbox-improve-map\"));var i=[{key:\"owner\",value:this.styleOwner},{key:\"id\",value:this.styleId},{key:\"access_token\",value:this._map._requestManager._customAccessToken||t.config.ACCESS_TOKEN}];if(e){var o=i.reduce((function(t,e,o){return e.value&&(t+=e.key+\"=\"+e.value+(o=0)return !1;return !0}))).join(\" | \");n!==this._attribHTML&&(this._attribHTML=n,t.length?(this._innerContainer.innerHTML=n,this._container.classList.remove(\"mapboxgl-attrib-empty\")):this._container.classList.add(\"mapboxgl-attrib-empty\"),this._editLink=null);}},Bo.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add(\"mapboxgl-compact\"):this._container.classList.remove(\"mapboxgl-compact\");};var Oo=function(){t.bindAll([\"_updateLogo\"],this),t.bindAll([\"_updateCompact\"],this);};Oo.prototype.onAdd=function(t){this._map=t,this._container=i.create(\"div\",\"mapboxgl-ctrl\");var e=i.create(\"a\",\"mapboxgl-ctrl-logo\");return e.target=\"_blank\",e.rel=\"noopener nofollow\",e.href=\"https://www.mapbox.com/\",e.setAttribute(\"aria-label\",this._map._getUIString(\"LogoControl.Title\")),e.setAttribute(\"rel\",\"noopener nofollow\"),this._container.appendChild(e),this._container.style.display=\"none\",this._map.on(\"sourcedata\",this._updateLogo),this._updateLogo(),this._map.on(\"resize\",this._updateCompact),this._updateCompact(),this._container},Oo.prototype.onRemove=function(){i.remove(this._container),this._map.off(\"sourcedata\",this._updateLogo),this._map.off(\"resize\",this._updateCompact);},Oo.prototype.getDefaultPosition=function(){return \"bottom-left\"},Oo.prototype._updateLogo=function(t){t&&\"metadata\"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?\"block\":\"none\");},Oo.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t){if(t[e].getSource().mapbox_logo)return !0}return !1}},Oo.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add(\"mapboxgl-compact\"):e.classList.remove(\"mapboxgl-compact\");}};var Fo=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1;};Fo.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},Fo.prototype.remove=function(t){for(var e=this._currentlyRunning,i=0,o=e?this._queue.concat(e):this._queue;ie.maxZoom)throw new Error(\"maxZoom must be greater than or equal to minZoom\");if(null!=e.minPitch&&null!=e.maxPitch&&e.minPitch>e.maxPitch)throw new Error(\"maxPitch must be greater than or equal to minPitch\");if(null!=e.minPitch&&e.minPitchjo)throw new Error(\"maxPitch must be less than or equal to \"+jo);var a=new go(e.minZoom,e.maxZoom,e.minPitch,e.maxPitch,e.renderWorldCopies);if(o.call(this,a,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._antialias=e.antialias,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new Fo,this._controls=[],this._mapId=t.uniqueId(),this._locale=t.extend({},Uo,e.locale),this._requestManager=new t.RequestManager(e.transformRequest,e.accessToken),\"string\"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error(\"Container '\"+e.container+\"' not found.\")}else{if(!(e.container instanceof Zo))throw new Error(\"Invalid type: 'container' must be a String or HTMLElement.\");this._container=e.container;}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll([\"_onWindowOnline\",\"_onWindowResize\",\"_contextLost\",\"_contextRestored\"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error(\"Failed to initialize WebGL.\");this.on(\"move\",(function(){return r._update(!1)})),this.on(\"moveend\",(function(){return r._update(!1)})),this.on(\"zoom\",(function(){return r._update(!0)})),void 0!==t.window&&(t.window.addEventListener(\"online\",this._onWindowOnline,!1),t.window.addEventListener(\"resize\",this._onWindowResize,!1)),function(t,e){var o=t.getCanvasContainer(),r=null,a=!1,n=null;for(var s in Ro)t[s]=new Ro[s](t,e),e.interactive&&e[s]&&t[s].enable(e[s]);i.addEventListener(o,\"mouseout\",(function(e){t.fire(new xo(\"mouseout\",t,e));})),i.addEventListener(o,\"mousedown\",(function(r){a=!0,n=i.mousePos(o,r);var s=new xo(\"mousedown\",t,r);if(t.fire(s),s.defaultPrevented)return;e.interactive&&!t.doubleClickZoom.isActive()&&t.stop();t.boxZoom.onMouseDown(r),t.boxZoom.isActive()||t.dragPan.isActive()||t.dragRotate.onMouseDown(r);t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onMouseDown(r);})),i.addEventListener(o,\"mouseup\",(function(e){var i=t.dragRotate.isActive();r&&!i&&t.fire(new xo(\"contextmenu\",t,r));r=null,a=!1,t.fire(new xo(\"mouseup\",t,e));})),i.addEventListener(o,\"mousemove\",(function(e){if(t.dragPan.isActive())return;if(t.dragRotate.isActive())return;var i=e.target;for(;i&&i!==o;)i=i.parentNode;if(i!==o)return;t.fire(new xo(\"mousemove\",t,e));})),i.addEventListener(o,\"mouseover\",(function(e){var i=e.target;for(;i&&i!==o;)i=i.parentNode;if(i!==o)return;t.fire(new xo(\"mouseover\",t,e));})),i.addEventListener(o,\"touchstart\",(function(i){var o=new bo(\"touchstart\",t,i);if(t.fire(o),o.defaultPrevented)return;e.interactive&&t.stop();t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onTouchStart(i);t.touchZoomRotate.onStart(i),t.doubleClickZoom.onTouchStart(o);}),{passive:!1}),i.addEventListener(o,\"touchmove\",(function(e){t.fire(new bo(\"touchmove\",t,e));}),{passive:!1}),i.addEventListener(o,\"touchend\",(function(e){t.fire(new bo(\"touchend\",t,e));})),i.addEventListener(o,\"touchcancel\",(function(e){t.fire(new bo(\"touchcancel\",t,e));})),i.addEventListener(o,\"click\",(function(r){var a=i.mousePos(o,r);(!n||a.equals(n)||a.dist(n)-1&&this._controls.splice(i,1),e.onRemove(this),this},r.prototype.resize=function(e){var i=this._containerDimensions(),o=i[0],r=i[1];return this._resizeCanvas(o,r),this.transform.resize(o,r),this.painter.resize(o,r),this.fire(new t.Event(\"movestart\",e)).fire(new t.Event(\"move\",e)).fire(new t.Event(\"resize\",e)).fire(new t.Event(\"moveend\",e)),this},r.prototype.getBounds=function(){return this.transform.getBounds()},r.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},r.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},r.prototype.setMinZoom=function(t){if((t=null==t?-2:t)>=-2&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error(\"maxZoom must be greater than the current minZoom\")},r.prototype.getMaxZoom=function(){return this.transform.maxZoom},r.prototype.setMinPitch=function(t){if((t=null==t?qo:t)=qo&&t<=this.transform.maxPitch)return this.transform.minPitch=t,this._update(),this.getPitch()jo)throw new Error(\"maxPitch must be less than or equal to \"+jo);if(t>=this.transform.minPitch)return this.transform.maxPitch=t,this._update(),this.getPitch()>t&&this.setPitch(t),this;throw new Error(\"maxPitch must be greater than the current minPitch\")},r.prototype.getMaxPitch=function(){return this.transform.maxPitch},r.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},r.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},r.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},r.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},r.prototype.isMoving=function(){return this._moving||this.dragPan.isActive()||this.dragRotate.isActive()||this.scrollZoom.isActive()},r.prototype.isZooming=function(){return this._zooming||this.scrollZoom.isZooming()},r.prototype.isRotating=function(){return this._rotating||this.dragRotate.isActive()},r.prototype.on=function(t,e,i){var r=this;if(void 0===i)return o.prototype.on.call(this,t,e);var a=function(){var o;if(\"mouseenter\"===t||\"mouseover\"===t){var a=!1;return {layer:e,listener:i,delegates:{mousemove:function(o){var n=r.getLayer(e)?r.queryRenderedFeatures(o.point,{layers:[e]}):[];n.length?a||(a=!0,i.call(r,new xo(t,r,o.originalEvent,{features:n}))):a=!1;},mouseout:function(){a=!1;}}}}if(\"mouseleave\"===t||\"mouseout\"===t){var n=!1;return {layer:e,listener:i,delegates:{mousemove:function(o){(r.getLayer(e)?r.queryRenderedFeatures(o.point,{layers:[e]}):[]).length?n=!0:n&&(n=!1,i.call(r,new xo(t,r,o.originalEvent)));},mouseout:function(e){n&&(n=!1,i.call(r,new xo(t,r,e.originalEvent)));}}}}return {layer:e,listener:i,delegates:(o={},o[t]=function(t){var o=r.getLayer(e)?r.queryRenderedFeatures(t.point,{layers:[e]}):[];o.length&&(t.features=o,i.call(r,t),delete t.features);},o)}}();for(var n in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(a),a.delegates)this.on(n,a.delegates[n]);return this},r.prototype.off=function(t,e,i){if(void 0===i)return o.prototype.off.call(this,t,e);if(this._delegatedListeners&&this._delegatedListeners[t])for(var r=this._delegatedListeners[t],a=0;a180;){var s=o.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=o.width&&s.y<=o.height)break;e.lng>o.center.lng?e.lng-=360:e.lng+=360;}return e}Ho.prototype._updateZoomButtons=function(){var t=this._map.getZoom();this._zoomInButton.disabled=t===this._map.getMaxZoom(),this._zoomOutButton.disabled=t===this._map.getMinZoom();},Ho.prototype._rotateCompassArrow=function(){var t=this.options.visualizePitch?\"scale(\"+1/Math.pow(Math.cos(this._map.transform.pitch*(Math.PI/180)),.5)+\") rotateX(\"+this._map.transform.pitch+\"deg) rotateZ(\"+this._map.transform.angle*(180/Math.PI)+\"deg)\":\"rotate(\"+this._map.transform.angle*(180/Math.PI)+\"deg)\";this._compassIcon.style.transform=t;},Ho.prototype.onAdd=function(t){return this._map=t,this.options.showZoom&&(this._setButtonTitle(this._zoomInButton,\"ZoomIn\"),this._setButtonTitle(this._zoomOutButton,\"ZoomOut\"),this._map.on(\"zoom\",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass&&(this._setButtonTitle(this._compass,\"ResetBearing\"),this.options.visualizePitch&&this._map.on(\"pitch\",this._rotateCompassArrow),this._map.on(\"rotate\",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new Co(t,{button:\"left\",element:this._compass}),i.addEventListener(this._compass,\"mousedown\",this._handler.onMouseDown),i.addEventListener(this._compass,\"touchstart\",this._handler.onMouseDown,{passive:!1}),this._handler.enable()),this._container},Ho.prototype.onRemove=function(){i.remove(this._container),this.options.showZoom&&this._map.off(\"zoom\",this._updateZoomButtons),this.options.showCompass&&(this.options.visualizePitch&&this._map.off(\"pitch\",this._rotateCompassArrow),this._map.off(\"rotate\",this._rotateCompassArrow),i.removeEventListener(this._compass,\"mousedown\",this._handler.onMouseDown),i.removeEventListener(this._compass,\"touchstart\",this._handler.onMouseDown,{passive:!1}),this._handler.disable(),delete this._handler),delete this._map;},Ho.prototype._createButton=function(t,e){var o=i.create(\"button\",t,this._container);return o.type=\"button\",o.addEventListener(\"click\",e),o},Ho.prototype._setButtonTitle=function(t,e){var i=this._map._getUIString(\"NavigationControl.\"+e);t.title=i,t.setAttribute(\"aria-label\",i);};var Yo={center:\"translate(-50%,-50%)\",top:\"translate(-50%,0)\",\"top-left\":\"translate(0,0)\",\"top-right\":\"translate(-100%,0)\",bottom:\"translate(-50%,-100%)\",\"bottom-left\":\"translate(0,-100%)\",\"bottom-right\":\"translate(-100%,-100%)\",left:\"translate(0,-50%)\",right:\"translate(-100%,-50%)\"};function Jo(t,e,i){var o=t.classList;for(var r in Yo)o.remove(\"mapboxgl-\"+i+\"-anchor-\"+r);o.add(\"mapboxgl-\"+i+\"-anchor-\"+e);}var Qo,$o=function(e){function o(o,r){var a=this;if(e.call(this),(o instanceof t.window.HTMLElement||r)&&(o=t.extend({element:o},r)),t.bindAll([\"_update\",\"_onMove\",\"_onUp\",\"_addDragHandler\",\"_onMapClick\",\"_onKeyPress\"],this),this._anchor=o&&o.anchor||\"center\",this._color=o&&o.color||\"#3FB1CE\",this._draggable=o&&o.draggable||!1,this._state=\"inactive\",this._rotation=o&&o.rotation||0,this._rotationAlignment=o&&o.rotationAlignment||\"auto\",this._pitchAlignment=o&&o.pitchAlignment&&\"auto\"!==o.pitchAlignment?o.pitchAlignment:this._rotationAlignment,o&&o.element)this._element=o.element,this._offset=t.Point.convert(o&&o.offset||[0,0]);else{this._defaultMarker=!0,this._element=i.create(\"div\"),this._element.setAttribute(\"aria-label\",\"Map marker\");var n=i.createNS(\"http://www.w3.org/2000/svg\",\"svg\");n.setAttributeNS(null,\"display\",\"block\"),n.setAttributeNS(null,\"height\",\"41px\"),n.setAttributeNS(null,\"width\",\"27px\"),n.setAttributeNS(null,\"viewBox\",\"0 0 27 41\");var s=i.createNS(\"http://www.w3.org/2000/svg\",\"g\");s.setAttributeNS(null,\"stroke\",\"none\"),s.setAttributeNS(null,\"stroke-width\",\"1\"),s.setAttributeNS(null,\"fill\",\"none\"),s.setAttributeNS(null,\"fill-rule\",\"evenodd\");var l=i.createNS(\"http://www.w3.org/2000/svg\",\"g\");l.setAttributeNS(null,\"fill-rule\",\"nonzero\");var c=i.createNS(\"http://www.w3.org/2000/svg\",\"g\");c.setAttributeNS(null,\"transform\",\"translate(3.0, 29.0)\"),c.setAttributeNS(null,\"fill\",\"#000000\");for(var u=0,h=[{rx:\"10.5\",ry:\"5.25002273\"},{rx:\"10.5\",ry:\"5.25002273\"},{rx:\"9.5\",ry:\"4.77275007\"},{rx:\"8.5\",ry:\"4.29549936\"},{rx:\"7.5\",ry:\"3.81822308\"},{rx:\"6.5\",ry:\"3.34094679\"},{rx:\"5.5\",ry:\"2.86367051\"},{rx:\"4.5\",ry:\"2.38636864\"}];ue.getEast()||i.latitudee.getNorth())},o.prototype._setErrorState=function(){switch(this._watchState){case\"WAITING_ACTIVE\":this._watchState=\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"ACTIVE_LOCK\":this._watchState=\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\");break;case\"BACKGROUND\":this._watchState=\"BACKGROUND_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\");}},o.prototype._onSuccess=function(e){if(this._isOutOfMapMaxBounds(e))return this._setErrorState(),this.fire(new t.Event(\"outofmaxbounds\",e)),this._updateMarker(),void this._finish();if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":this._watchState=\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"BACKGROUND\":case\"BACKGROUND_ERROR\":this._watchState=\"BACKGROUND\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\");}this.options.showUserLocation&&\"OFF\"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&\"ACTIVE_LOCK\"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"geolocate\",e)),this._finish();},o.prototype._updateCamera=function(e){var i=new t.LngLat(e.coords.longitude,e.coords.latitude),o=e.coords.accuracy,r=this._map.getBearing(),a=t.extend({bearing:r},this.options.fitBoundsOptions);this._map.fitBounds(i.toBounds(o),a,{geolocateSource:!0});},o.prototype._updateMarker=function(t){t?this._userLocationDotMarker.setLngLat([t.coords.longitude,t.coords.latitude]).addTo(this._map):this._userLocationDotMarker.remove();},o.prototype._onError=function(e){if(this.options.trackUserLocation)if(1===e.code){this._watchState=\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.disabled=!0;var i=this._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.title=i,this._geolocateButton.setAttribute(\"aria-label\",i),void 0!==this._geolocationWatchID&&this._clearWatch();}else this._setErrorState();\"OFF\"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"error\",e)),this._finish();},o.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0;},o.prototype._setupUI=function(e){var o=this;if(this._container.addEventListener(\"contextmenu\",(function(t){return t.preventDefault()})),this._geolocateButton=i.create(\"button\",\"mapboxgl-ctrl-geolocate\",this._container),i.create(\"span\",\"mapboxgl-ctrl-icon\",this._geolocateButton).setAttribute(\"aria-hidden\",!0),this._geolocateButton.type=\"button\",!1===e){t.warnOnce(\"Geolocation support is not available so the GeolocateControl will be disabled.\");var r=this._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.disabled=!0,this._geolocateButton.title=r,this._geolocateButton.setAttribute(\"aria-label\",r);}else{var a=this._map._getUIString(\"GeolocateControl.FindMyLocation\");this._geolocateButton.title=a,this._geolocateButton.setAttribute(\"aria-label\",a);}this.options.trackUserLocation&&(this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this._watchState=\"OFF\"),this.options.showUserLocation&&(this._dotElement=i.create(\"div\",\"mapboxgl-user-location-dot\"),this._userLocationDotMarker=new $o(this._dotElement),this.options.trackUserLocation&&(this._watchState=\"OFF\")),this._geolocateButton.addEventListener(\"click\",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on(\"movestart\",(function(e){var i=e.originalEvent&&\"resize\"===e.originalEvent.type;e.geolocateSource||\"ACTIVE_LOCK\"!==o._watchState||i||(o._watchState=\"BACKGROUND\",o._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\"),o._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),o.fire(new t.Event(\"trackuserlocationend\")));}));},o.prototype.trigger=function(){if(!this._setup)return t.warnOnce(\"Geolocate control triggered before added to a map\"),!1;if(this.options.trackUserLocation){switch(this._watchState){case\"OFF\":this._watchState=\"WAITING_ACTIVE\",this.fire(new t.Event(\"trackuserlocationstart\"));break;case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":case\"BACKGROUND_ERROR\":this._watchState=\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this.fire(new t.Event(\"trackuserlocationend\"));break;case\"BACKGROUND\":this._watchState=\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event(\"trackuserlocationstart\"));}switch(this._watchState){case\"WAITING_ACTIVE\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_LOCK\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"BACKGROUND\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\");break;case\"BACKGROUND_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\");}\"OFF\"===this._watchState&&void 0!==this._geolocationWatchID?this._clearWatch():void 0===this._geolocationWatchID&&(this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"true\"),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,this.options.positionOptions));}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return !0},o.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this.options.showUserLocation&&this._updateMarker(null);},o}(t.Evented),ir={maxWidth:100,unit:\"metric\"},or=function(e){this.options=t.extend({},ir,e),t.bindAll([\"_onMove\",\"setUnit\"],this);};function rr(t,e,i){var o,r,a,n,s,l,c=i&&i.maxWidth||100,u=t._container.clientHeight/2,h=(o=t.unproject([0,u]),r=t.unproject([c,u]),a=Math.PI/180,n=o.lat*a,s=r.lat*a,l=Math.sin(n)*Math.sin(s)+Math.cos(n)*Math.cos(s)*Math.cos((r.lng-o.lng)*a),6371e3*Math.acos(Math.min(l,1)));if(i&&\"imperial\"===i.unit){var p=3.2808*h;if(p>5280)ar(e,c,p/5280,t._getUIString(\"ScaleControl.Miles\"));else ar(e,c,p,t._getUIString(\"ScaleControl.Feet\"));}else if(i&&\"nautical\"===i.unit){ar(e,c,h/1852,t._getUIString(\"ScaleControl.NauticalMiles\"));}else h>=1e3?ar(e,c,h/1e3,t._getUIString(\"ScaleControl.Kilometers\")):ar(e,c,h,t._getUIString(\"ScaleControl.Meters\"));}function ar(t,e,i,o){var r,a,n,s=(r=i,a=Math.pow(10,(\"\"+Math.floor(r)).length-1),n=(n=r/a)>=10?10:n>=5?5:n>=3?3:n>=2?2:n>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(n),a*n),l=s/i;t.style.width=e*l+\"px\",t.innerHTML=s+o;}or.prototype.getDefaultPosition=function(){return \"bottom-left\"},or.prototype._onMove=function(){rr(this._map,this._container,this.options);},or.prototype.onAdd=function(t){return this._map=t,this._container=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-scale\",t.getContainer()),this._map.on(\"move\",this._onMove),this._onMove(),this._container},or.prototype.onRemove=function(){i.remove(this._container),this._map.off(\"move\",this._onMove),this._map=void 0;},or.prototype.setUnit=function(t){this.options.unit=t,rr(this._map,this._container,this.options);};var nr=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce(\"Full screen control 'container' must be a DOM element.\")),t.bindAll([\"_onClickFullscreen\",\"_changeIcon\"],this),\"onfullscreenchange\"in t.window.document?this._fullscreenchange=\"fullscreenchange\":\"onmozfullscreenchange\"in t.window.document?this._fullscreenchange=\"mozfullscreenchange\":\"onwebkitfullscreenchange\"in t.window.document?this._fullscreenchange=\"webkitfullscreenchange\":\"onmsfullscreenchange\"in t.window.document&&(this._fullscreenchange=\"MSFullscreenChange\");};nr.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display=\"none\",t.warnOnce(\"This device does not support fullscreen mode.\")),this._controlContainer},nr.prototype.onRemove=function(){i.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon);},nr.prototype._checkFullscreenSupport=function(){return !!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},nr.prototype._setupUI=function(){var e=this._fullscreenButton=i.create(\"button\",\"mapboxgl-ctrl-fullscreen\",this._controlContainer);i.create(\"span\",\"mapboxgl-ctrl-icon\",e).setAttribute(\"aria-hidden\",!0),e.type=\"button\",this._updateTitle(),this._fullscreenButton.addEventListener(\"click\",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon);},nr.prototype._updateTitle=function(){var t=this._getTitle();this._fullscreenButton.setAttribute(\"aria-label\",t),this._fullscreenButton.title=t;},nr.prototype._getTitle=function(){return this._map._getUIString(this._isFullscreen()?\"FullscreenControl.Exit\":\"FullscreenControl.Enter\")},nr.prototype._isFullscreen=function(){return this._fullscreen},nr.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-shrink\"),this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-fullscreen\"),this._updateTitle());},nr.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen();};var sr={closeButton:!0,closeOnClick:!0,className:\"\",maxWidth:\"240px\"},lr=function(e){function o(i){e.call(this),this.options=t.extend(Object.create(sr),i),t.bindAll([\"_update\",\"_onClickClose\",\"remove\"],this);}return e&&(o.__proto__=e),o.prototype=Object.create(e&&e.prototype),o.prototype.constructor=o,o.prototype.addTo=function(e){var i=this;return this._map=e,this.options.closeOnClick&&this._map.on(\"click\",this._onClickClose),this._map.on(\"remove\",this.remove),this._update(),this._trackPointer?(this._map.on(\"mousemove\",(function(t){i._update(t.point);})),this._map.on(\"mouseup\",(function(t){i._update(t.point);})),this._container&&this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")):this._map.on(\"move\",this._update),this.fire(new t.Event(\"open\")),this},o.prototype.isOpen=function(){return !!this._map},o.prototype.remove=function(){return this._content&&i.remove(this._content),this._container&&(i.remove(this._container),delete this._container),this._map&&(this._map.off(\"move\",this._update),this._map.off(\"click\",this._onClickClose),this._map.off(\"remove\",this.remove),this._map.off(\"mousemove\"),delete this._map),this.fire(new t.Event(\"close\")),this},o.prototype.getLngLat=function(){return this._lngLat},o.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on(\"move\",this._update),this._map.off(\"mousemove\"),this._container&&this._container.classList.remove(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.remove(\"mapboxgl-track-pointer\")),this},o.prototype.trackPointer=function(){var t=this;return this._trackPointer=!0,this._pos=null,this._update(),this._map&&(this._map.off(\"move\",this._update),this._map.on(\"mousemove\",(function(e){t._update(e.point);})),this._map.on(\"drag\",(function(e){t._update(e.point);})),this._container&&this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")),this},o.prototype.getElement=function(){return this._container},o.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},o.prototype.setHTML=function(e){var i,o=t.window.document.createDocumentFragment(),r=t.window.document.createElement(\"body\");for(r.innerHTML=e;i=r.firstChild;)o.appendChild(i);return this.setDOMContent(o)},o.prototype.getMaxWidth=function(){return this._container.style.maxWidth},o.prototype.setMaxWidth=function(t){return this.options.maxWidth=t,this._update(),this},o.prototype.setDOMContent=function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},o.prototype.addClassName=function(t){this._container.classList.add(t);},o.prototype.removeClassName=function(t){this._container.classList.remove(t);},o.prototype.toggleClassName=function(t){return this._container.classList.toggle(t)},o.prototype._createContent=function(){this._content&&i.remove(this._content),this._content=i.create(\"div\",\"mapboxgl-popup-content\",this._container),this.options.closeButton&&(this._closeButton=i.create(\"button\",\"mapboxgl-popup-close-button\",this._content),this._closeButton.type=\"button\",this._closeButton.setAttribute(\"aria-label\",\"Close popup\"),this._closeButton.innerHTML=\"×\",this._closeButton.addEventListener(\"click\",this._onClickClose));},o.prototype._update=function(e){var o=this,r=this._lngLat||this._trackPointer;if(this._map&&r&&this._content&&(this._container||(this._container=i.create(\"div\",\"mapboxgl-popup\",this._map.getContainer()),this._tip=i.create(\"div\",\"mapboxgl-popup-tip\",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(\" \").forEach((function(t){return o._container.classList.add(t)})),this._trackPointer&&this._container.classList.add(\"mapboxgl-popup-track-pointer\")),this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer&&(this._lngLat=Ko(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||e)){var a=this._pos=this._trackPointer&&e?e:this._map.project(this._lngLat),n=this.options.anchor,s=function e(i){if(i){if(\"number\"==typeof i){var o=Math.round(Math.sqrt(.5*Math.pow(i,2)));return {center:new t.Point(0,0),top:new t.Point(0,i),\"top-left\":new t.Point(o,o),\"top-right\":new t.Point(-o,o),bottom:new t.Point(0,-i),\"bottom-left\":new t.Point(o,-o),\"bottom-right\":new t.Point(-o,-o),left:new t.Point(i,0),right:new t.Point(-i,0)}}if(i instanceof t.Point||Array.isArray(i)){var r=t.Point.convert(i);return {center:r,top:r,\"top-left\":r,\"top-right\":r,bottom:r,\"bottom-left\":r,\"bottom-right\":r,left:r,right:r}}return {center:t.Point.convert(i.center||[0,0]),top:t.Point.convert(i.top||[0,0]),\"top-left\":t.Point.convert(i[\"top-left\"]||[0,0]),\"top-right\":t.Point.convert(i[\"top-right\"]||[0,0]),bottom:t.Point.convert(i.bottom||[0,0]),\"bottom-left\":t.Point.convert(i[\"bottom-left\"]||[0,0]),\"bottom-right\":t.Point.convert(i[\"bottom-right\"]||[0,0]),left:t.Point.convert(i.left||[0,0]),right:t.Point.convert(i.right||[0,0])}}return e(new t.Point(0,0))}(this.options.offset);if(!n){var l,c=this._container.offsetWidth,u=this._container.offsetHeight;l=a.y+s.bottom.ythis._map.transform.height-u?[\"bottom\"]:[],a.xthis._map.transform.width-c/2&&l.push(\"right\"),n=0===l.length?\"bottom\":l.join(\"-\");}var h=a.add(s[n]).round();i.setTransform(this._container,Yo[n]+\" translate(\"+h.x+\"px,\"+h.y+\"px)\"),Jo(this._container,n,\"popup\");}},o.prototype._onClickClose=function(){this.remove();},o}(t.Evented);var cr={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,getRTLTextPluginStatus:t.getRTLTextPluginStatus,Map:Go,NavigationControl:Ho,GeolocateControl:er,AttributionControl:Bo,ScaleControl:or,FullscreenControl:nr,Popup:lr,Marker:$o,Style:Ue,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e;},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e;},get workerCount(){return Rt.workerCount},set workerCount(t){Rt.workerCount=t;},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e;},clearStorage:function(e){t.clearTileCache(e);},workerUrl:\"\"};return cr}));\n\n//\n\nreturn mapboxgl;\n\n})));\n//# sourceMappingURL=mapbox-gl.js.map\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {DefaultProps} from '@deck.gl/core';\nimport {ArcLayer, ArcLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps = {\n getHeight: {type: 'accessor', value: 0},\n greatCircle: true\n};\n\n/** All properties supported by GreatCircleLayer. */\nexport type GreatCircleLayerProps = ArcLayerProps;\n\n// This layer has been merged into the core ArcLayer\n// Keeping for backward-compatibility\n/** @deprecated Use ArcLayer with `greatCircle: true` instead */\nexport default class GreatCircleLayer extends ArcLayer<\n DataT,\n ExtraProps\n> {\n static layerName = 'GreatCircleLayer';\n static defaultProps: any = defaultProps;\n}\n","import {CompositeLayer, CompositeLayerProps, Layer, LayersList, DefaultProps} from '@deck.gl/core';\nimport {PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps = {\n ...PolygonLayer.defaultProps\n};\n\n/** All properties supported by GeoCellLayer. */\nexport type GeoCellLayerProps = PolygonLayerProps & CompositeLayerProps;\n\nexport default class GeoCellLayer extends CompositeLayer<\n Required> & ExtraProps\n> {\n static layerName = 'GeoCellLayer';\n static defaultProps = defaultProps;\n\n /** Implement to generate props to create geometry. */\n indexToBounds(): Partial | null {\n return null;\n }\n\n renderLayers(): Layer | null | LayersList {\n // Rendering props underlying layer\n const {\n elevationScale,\n extruded,\n wireframe,\n filled,\n stroked,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n lineJointRounded,\n lineMiterLimit,\n lineDashJustified,\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth\n } = this.props;\n\n // Accessor props for underlying layers\n const {updateTriggers, material, transitions} = this.props;\n\n // Filled Polygon Layer\n const CellLayer = this.getSubLayerClass('cell', PolygonLayer);\n return new CellLayer(\n {\n filled,\n wireframe,\n\n extruded,\n elevationScale,\n\n stroked,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n lineJointRounded,\n lineMiterLimit,\n lineDashJustified,\n\n material,\n transitions,\n\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth\n },\n this.getSubLayerProps({\n id: 'cell',\n updateTriggers: updateTriggers && {\n getElevation: updateTriggers.getElevation,\n getFillColor: updateTriggers.getFillColor,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n }\n }),\n this.indexToBounds()\n );\n }\n}\n","/*\nAdapted from s2-geometry\n\nISC License (ISC)\n\nCopyright (c) 2012-2016, Jon Atkins \nCopyright (c) 2016, AJ ONeal \n\nPermission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\n\nTHE 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.\n*/\n\nimport Long from 'long';\n\n//\n// Functional Style\n//\nconst FACE_BITS = 3;\nconst MAX_LEVEL = 30;\nconst POS_BITS = 2 * MAX_LEVEL + 1; // 61 (60 bits of data, 1 bit lsb marker)\nconst RADIAN_TO_DEGREE = 180 / Math.PI;\n\nexport function IJToST(\n ij: [number, number],\n order: number,\n offsets: [number, number]\n): [number, number] {\n const maxSize = 1 << order;\n\n return [(ij[0] + offsets[0]) / maxSize, (ij[1] + offsets[1]) / maxSize];\n}\n\nfunction singleSTtoUV(st: number): number {\n if (st >= 0.5) {\n return (1 / 3.0) * (4 * st * st - 1);\n }\n return (1 / 3.0) * (1 - 4 * (1 - st) * (1 - st));\n}\n\nexport function STToUV(st: [number, number]): [number, number] {\n return [singleSTtoUV(st[0]), singleSTtoUV(st[1])];\n}\n\nexport function FaceUVToXYZ(face: number, [u, v]: [number, number]): [number, number, number] {\n switch (face) {\n case 0:\n return [1, u, v];\n case 1:\n return [-u, 1, v];\n case 2:\n return [-u, -v, 1];\n case 3:\n return [-1, -v, -u];\n case 4:\n return [v, -1, -u];\n case 5:\n return [v, u, -1];\n default:\n throw new Error('Invalid face');\n }\n}\n\nexport function XYZToLngLat([x, y, z]: [number, number, number]): [number, number] {\n const lat = Math.atan2(z, Math.sqrt(x * x + y * y));\n const lng = Math.atan2(y, x);\n\n return [lng * RADIAN_TO_DEGREE, lat * RADIAN_TO_DEGREE];\n}\n\nexport function toHilbertQuadkey(idS: string): string {\n let bin = Long.fromString(idS, true, 10).toString(2);\n\n while (bin.length < FACE_BITS + POS_BITS) {\n // eslint-disable-next-line prefer-template\n bin = '0' + bin;\n }\n\n // MUST come AFTER binstr has been left-padded with '0's\n const lsbIndex = bin.lastIndexOf('1');\n // substr(start, len)\n // substring(start, end) // includes start, does not include end\n const faceB = bin.substring(0, 3);\n // posB will always be a multiple of 2 (or it's invalid)\n const posB = bin.substring(3, lsbIndex);\n const levelN = posB.length / 2;\n\n const faceS = Long.fromString(faceB, true, 2).toString(10);\n let posS = Long.fromString(posB, true, 2).toString(4);\n\n while (posS.length < levelN) {\n // eslint-disable-next-line prefer-template\n posS = '0' + posS;\n }\n\n return `${faceS}/${posS}`;\n}\n\nfunction rotateAndFlipQuadrant(n: number, point: [number, number], rx: number, ry: number): void {\n if (ry === 0) {\n if (rx === 1) {\n point[0] = n - 1 - point[0];\n point[1] = n - 1 - point[1];\n }\n\n const x = point[0];\n point[0] = point[1];\n point[1] = x;\n }\n}\n\nexport function FromHilbertQuadKey(hilbertQuadkey: string): {\n face: number;\n ij: [number, number];\n level: number;\n} {\n const parts = hilbertQuadkey.split('/');\n const face = parseInt(parts[0], 10);\n const position = parts[1];\n const maxLevel = position.length;\n const point = [0, 0] as [number, number];\n let level;\n\n for (let i = maxLevel - 1; i >= 0; i--) {\n level = maxLevel - i;\n const bit = position[i];\n let rx = 0;\n let ry = 0;\n if (bit === '1') {\n ry = 1;\n } else if (bit === '2') {\n rx = 1;\n ry = 1;\n } else if (bit === '3') {\n rx = 1;\n }\n\n const val = Math.pow(2, level - 1);\n rotateAndFlipQuadrant(val, point, rx, ry);\n\n point[0] += val * rx;\n point[1] += val * ry;\n }\n\n if (face % 2 === 1) {\n const t = point[0];\n point[0] = point[1];\n point[1] = t;\n }\n\n return {face, ij: point, level};\n}\n","// s2-geometry is a pure JavaScript port of Google/Niantic's S2 Geometry library\n// which is perfect since it works in the browser.\nimport {\n toHilbertQuadkey,\n FromHilbertQuadKey,\n IJToST,\n STToUV,\n FaceUVToXYZ,\n XYZToLngLat\n} from './s2-geometry';\nimport Long from 'long';\n\n/**\n * Given an S2 token this function convert the token to 64 bit id\n https://github.com/google/s2-geometry-library-java/blob/c04b68bf3197a9c34082327eeb3aec7ab7c85da1/src/com/google/common/geometry/S2CellId.java#L439\n * */\nfunction getIdFromToken(token: string): number {\n // pad token with zeros to make the length 16\n const paddedToken = token.padEnd(16, '0');\n return Long.fromString(paddedToken, 16);\n}\n\nconst MAX_RESOLUTION = 100;\n\n/* Adapted from s2-geometry's S2Cell.getCornerLatLngs */\n/* eslint-disable max-statements */\nfunction getGeoBounds({\n face,\n ij,\n level\n}: {\n face: number;\n ij: [number, number];\n level: number;\n}): Float64Array {\n const offsets = [\n [0, 0],\n [0, 1],\n [1, 1],\n [1, 0],\n [0, 0]\n ];\n\n // The S2 cell edge is curved: http://s2geometry.io/\n // This is more prominent at lower levels\n // resolution is the number of segments to generate per edge.\n // We exponentially reduce resolution as level increases so it doesn't affect perf\n // when there are a large number of cells\n const resolution = Math.max(1, Math.ceil(MAX_RESOLUTION * Math.pow(2, -level)));\n const result = new Float64Array(4 * resolution * 2 + 2);\n let ptIndex = 0;\n let prevLng = 0;\n\n for (let i = 0; i < 4; i++) {\n const offset = offsets[i].slice(0) as [number, number];\n const nextOffset = offsets[i + 1];\n const stepI = (nextOffset[0] - offset[0]) / resolution;\n const stepJ = (nextOffset[1] - offset[1]) / resolution;\n\n for (let j = 0; j < resolution; j++) {\n offset[0] += stepI;\n offset[1] += stepJ;\n // Cell can be represented by coordinates IJ, ST, UV, XYZ\n // http://s2geometry.io/devguide/s2cell_hierarchy#coordinate-systems\n const st = IJToST(ij, level, offset);\n const uv = STToUV(st);\n const xyz = FaceUVToXYZ(face, uv);\n const lngLat = XYZToLngLat(xyz);\n\n // Adjust longitude for Web Mercator projection\n if (Math.abs(lngLat[1]) > 89.999) {\n lngLat[0] = prevLng;\n }\n const deltaLng = lngLat[0] - prevLng;\n lngLat[0] += deltaLng > 180 ? -360 : deltaLng < -180 ? 360 : 0;\n\n result[ptIndex++] = lngLat[0];\n result[ptIndex++] = lngLat[1];\n prevLng = lngLat[0];\n }\n }\n // close the loop\n result[ptIndex++] = result[0];\n result[ptIndex++] = result[1];\n return result;\n}\n/* eslint-enable max-statements */\n\nexport function getS2QuadKey(token: string | number): string {\n if (typeof token === 'string') {\n if (token.indexOf('/') > 0) {\n // is Hilbert quad key\n return token;\n }\n // is S2 token\n token = getIdFromToken(token);\n }\n // is Long id\n return toHilbertQuadkey(token.toString());\n}\n\n/**\n * Get a polygon with corner coordinates for an s2 cell\n * @param {*} cell - This can be an S2 key or token\n * @return {Float64Array} - a simple polygon in flat array format: [lng0, lat0, lng1, lat1, ...]\n * - the polygon is closed, i.e. last coordinate is a copy of the first coordinate\n */\nexport function getS2Polygon(token: string | number): Float64Array {\n const key = getS2QuadKey(token);\n const s2cell = FromHilbertQuadKey(key);\n\n return getGeoBounds(s2cell);\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {getS2Polygon} from './s2-utils';\n\nconst defaultProps: DefaultProps = {\n getS2Token: {type: 'accessor', value: d => d.token}\n};\n\n/** All properties supported by S2Layer. */\nexport type S2LayerProps = _S2LayerProps & GeoCellLayerProps;\n\n/** Properties added by S2Layer. */\ntype _S2LayerProps = {\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `token` property of data object.\n */\n getS2Token?: AccessorFunction;\n};\n\n/** Render filled and/or stroked polygons based on the [S2](http://s2geometry.io/) geospatial indexing system. */\nexport default class S2Layer extends GeoCellLayer<\n DataT,\n Required<_S2LayerProps> & ExtraProps\n> {\n static layerName = 'S2Layer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial | null {\n const {data, getS2Token} = this.props;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n getPolygon: (x: DataT, objectInfo) => getS2Polygon(getS2Token(x, objectInfo))\n };\n }\n}\n","import {worldToLngLat} from '@math.gl/web-mercator';\n\nconst TILE_SIZE = 512;\n\nexport function quadkeyToWorldBounds(quadkey: string): [number[], number[]] {\n let x = 0;\n let y = 0;\n let mask = 1 << quadkey.length;\n const scale = mask / TILE_SIZE;\n\n for (let i = 0; i < quadkey.length; i++) {\n mask >>= 1;\n const q = parseInt(quadkey[i]);\n if (q % 2) x |= mask;\n if (q > 1) y |= mask;\n }\n return [\n [x / scale, TILE_SIZE - y / scale],\n [(x + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]\n ];\n}\n\nexport function getQuadkeyPolygon(quadkey: string): number[] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n","import {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {getQuadkeyPolygon} from './quadkey-utils';\n\nconst defaultProps: DefaultProps = {\n getQuadkey: {type: 'accessor', value: d => d.quadkey}\n};\n\n/** All properties supported by QuadkeyLayer. */\nexport type QuadkeyLayerProps = _QuadkeyLayerProps & GeoCellLayerProps;\n\n/** Properties added by QuadkeyLayer. */\ntype _QuadkeyLayerProps = {\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `quadkey` property of data object.\n */\n getQuadkey?: AccessorFunction;\n};\n\n/** Render filled and/or stroked polygons based on the [Quadkey](https://towardsdatascience.com/geospatial-indexing-with-quadkeys-d933dff01496) geospatial indexing system. */\nexport default class QuadkeyLayer extends GeoCellLayer<\n DataT,\n Required<_QuadkeyLayerProps> & ExtraProps\n> {\n static layerName = 'QuadkeyLayer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial | null {\n const {data, getQuadkey} = this.props;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n\n getPolygon: (x: DataT, objectInfo) => getQuadkeyPolygon(getQuadkey(x, objectInfo))\n };\n }\n}\n","/* eslint-env browser */\nimport {Layer, log} from '@deck.gl/core';\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {TileBoundingBox, TileIndex, TileLoadProps} from './types';\n\nexport type TileLoadDataProps = {\n requestScheduler: RequestScheduler;\n getData: (props: TileLoadProps) => Promise;\n onLoad: (tile: Tile2DHeader) => void;\n onError: (error: any, tile: Tile2DHeader) => void;\n};\n\nexport default class Tile2DHeader {\n index: TileIndex;\n isVisible: boolean;\n isSelected: boolean;\n parent: Tile2DHeader | null;\n children: Tile2DHeader[] | null;\n content: DataT | null;\n state?: number;\n layers?: Layer[] | null;\n\n id!: string; // assigned _always_ with result of `getTileId`\n bbox!: TileBoundingBox; // assigned _always_ with result of `getTileMetadata`\n zoom!: number; // assigned _always_ with result of `getTileZoom`\n userData?: Record; // _may be_ assigned with result of `getTileMetadata`\n\n private _abortController: AbortController | null;\n private _loader: Promise | undefined;\n private _loaderId: number;\n private _isLoaded: boolean;\n private _isCancelled: boolean;\n private _needsReload: boolean;\n\n constructor(index: TileIndex) {\n this.index = index;\n this.isVisible = false;\n this.isSelected = false;\n this.parent = null;\n this.children = [];\n\n this.content = null;\n\n this._loader = undefined;\n this._abortController = null;\n this._loaderId = 0;\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n }\n\n get data(): Promise | DataT | null {\n return this.isLoading && this._loader ? this._loader.then(() => this.data) : this.content;\n }\n\n get isLoaded(): boolean {\n return this._isLoaded && !this._needsReload;\n }\n\n get isLoading(): boolean {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n get needsReload(): boolean {\n return this._needsReload || this._isCancelled;\n }\n\n get byteLength(): number {\n const result = this.content ? (this.content as any).byteLength : 0;\n if (!Number.isFinite(result)) {\n log.error('byteLength not defined in tile data')();\n }\n return result;\n }\n\n /* eslint-disable max-statements */\n private async _loadData({\n getData,\n requestScheduler,\n onLoad,\n onError\n }: TileLoadDataProps): Promise {\n const {index, id, bbox, userData, zoom} = this;\n const loaderId = this._loaderId;\n\n this._abortController = new AbortController();\n const {signal} = this._abortController;\n\n // @ts-expect-error (2345) Argument of type '(tile: any) => 1 | -1' is not assignable ...\n const requestToken = await requestScheduler.scheduleRequest(this, tile => {\n return tile.isSelected ? 1 : -1;\n });\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n // A tile can be cancelled while being scheduled\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData: DataT | null = null;\n let error;\n try {\n tileData = await getData({index, id, bbox, userData, zoom, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n }\n\n // If loadData has been called with a newer version, discard the result from this operation\n if (loaderId !== this._loaderId) {\n return;\n }\n // Clear the `isLoading` flag\n this._loader = undefined;\n // Rewrite tile content with the result of getTileData if successful, or `null` in case of\n // error or cancellation\n this.content = tileData;\n // If cancelled, do not invoke the callbacks\n // Consider it loaded if we tried to cancel but `getTileData` still returned data\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n return;\n }\n this._isLoaded = true;\n this._isCancelled = false;\n\n if (error) {\n onError(error, this);\n } else {\n onLoad(this);\n }\n }\n\n loadData(opts: TileLoadDataProps): Promise {\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n this._loaderId++;\n this._loader = this._loadData(opts);\n return this._loader;\n }\n\n setNeedsReload(): void {\n if (this.isLoading) {\n this.abort();\n this._loader = undefined;\n }\n this._needsReload = true;\n }\n\n abort(): void {\n if (this.isLoaded) {\n return;\n }\n\n this._isCancelled = true;\n this._abortController?.abort();\n }\n}\n","export const INTERSECTION = {\n OUTSIDE: -1,\n INTERSECTING: 0,\n INSIDE: 1\n};\n//# sourceMappingURL=constants.js.map","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Vector3 } from '@math.gl/core';\nimport { INTERSECTION } from '../../constants';\nconst scratchVector = new Vector3();\nconst scratchNormal = new Vector3();\nexport default class AxisAlignedBoundingBox {\n constructor(minimum = [0, 0, 0], maximum = [0, 0, 0], center) {\n _defineProperty(this, \"center\", void 0);\n\n _defineProperty(this, \"halfDiagonal\", void 0);\n\n _defineProperty(this, \"minimum\", void 0);\n\n _defineProperty(this, \"maximum\", void 0);\n\n center = center || scratchVector.copy(minimum).add(maximum).scale(0.5);\n this.center = new Vector3(center);\n this.halfDiagonal = new Vector3(maximum).subtract(this.center);\n this.minimum = new Vector3(minimum);\n this.maximum = new Vector3(maximum);\n }\n\n clone() {\n return new AxisAlignedBoundingBox(this.minimum, this.maximum, this.center);\n }\n\n equals(right) {\n return this === right || Boolean(right) && this.minimum.equals(right.minimum) && this.maximum.equals(right.maximum);\n }\n\n transform(transform) {\n this.center.transformAsPoint(transform);\n this.halfDiagonal.transform(transform);\n this.minimum.transform(transform);\n this.maximum.transform(transform);\n return this;\n }\n\n intersectPlane(plane) {\n const {\n halfDiagonal\n } = this;\n const normal = scratchNormal.from(plane.normal);\n const e = halfDiagonal.x * Math.abs(normal.x) + halfDiagonal.y * Math.abs(normal.y) + halfDiagonal.z * Math.abs(normal.z);\n const s = this.center.dot(normal) + plane.distance;\n\n if (s - e > 0) {\n return INTERSECTION.INSIDE;\n }\n\n if (s + e < 0) {\n return INTERSECTION.OUTSIDE;\n }\n\n return INTERSECTION.INTERSECTING;\n }\n\n distanceTo(point) {\n return Math.sqrt(this.distanceSquaredTo(point));\n }\n\n distanceSquaredTo(point) {\n const offset = scratchVector.from(point).subtract(this.center);\n const {\n halfDiagonal\n } = this;\n let distanceSquared = 0.0;\n let d;\n d = Math.abs(offset.x) - halfDiagonal.x;\n\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n d = Math.abs(offset.y) - halfDiagonal.y;\n\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n d = Math.abs(offset.z) - halfDiagonal.z;\n\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n return distanceSquared;\n }\n\n}\n//# sourceMappingURL=axis-aligned-bounding-box.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Vector3 } from '@math.gl/core';\nimport * as mat4 from 'gl-matrix/mat4';\nimport { INTERSECTION } from '../../constants';\nconst scratchVector = new Vector3();\nconst scratchVector2 = new Vector3();\nexport default class BoundingSphere {\n constructor(center = [0, 0, 0], radius = 0.0) {\n _defineProperty(this, \"center\", void 0);\n\n _defineProperty(this, \"radius\", void 0);\n\n this.radius = -0;\n this.center = new Vector3();\n this.fromCenterRadius(center, radius);\n }\n\n fromCenterRadius(center, radius) {\n this.center.from(center);\n this.radius = radius;\n return this;\n }\n\n fromCornerPoints(corner, oppositeCorner) {\n oppositeCorner = scratchVector.from(oppositeCorner);\n this.center = new Vector3().from(corner).add(oppositeCorner).scale(0.5);\n this.radius = this.center.distance(oppositeCorner);\n return this;\n }\n\n equals(right) {\n return this === right || Boolean(right) && this.center.equals(right.center) && this.radius === right.radius;\n }\n\n clone() {\n return new BoundingSphere(this.center, this.radius);\n }\n\n union(boundingSphere) {\n const leftCenter = this.center;\n const leftRadius = this.radius;\n const rightCenter = boundingSphere.center;\n const rightRadius = boundingSphere.radius;\n const toRightCenter = scratchVector.copy(rightCenter).subtract(leftCenter);\n const centerSeparation = toRightCenter.magnitude();\n\n if (leftRadius >= centerSeparation + rightRadius) {\n return this.clone();\n }\n\n if (rightRadius >= centerSeparation + leftRadius) {\n return boundingSphere.clone();\n }\n\n const halfDistanceBetweenTangentPoints = (leftRadius + centerSeparation + rightRadius) * 0.5;\n scratchVector2.copy(toRightCenter).scale((-leftRadius + halfDistanceBetweenTangentPoints) / centerSeparation).add(leftCenter);\n this.center.copy(scratchVector2);\n this.radius = halfDistanceBetweenTangentPoints;\n return this;\n }\n\n expand(point) {\n const scratchPoint = scratchVector.from(point);\n const radius = scratchPoint.subtract(this.center).magnitude();\n\n if (radius > this.radius) {\n this.radius = radius;\n }\n\n return this;\n }\n\n transform(transform) {\n this.center.transform(transform);\n const scale = mat4.getScaling(scratchVector, transform);\n this.radius = Math.max(scale[0], Math.max(scale[1], scale[2])) * this.radius;\n return this;\n }\n\n distanceSquaredTo(point) {\n const d = this.distanceTo(point);\n return d * d;\n }\n\n distanceTo(point) {\n const scratchPoint = scratchVector.from(point);\n const delta = scratchPoint.subtract(this.center);\n return Math.max(0, delta.len() - this.radius);\n }\n\n intersectPlane(plane) {\n const center = this.center;\n const radius = this.radius;\n const normal = plane.normal;\n const distanceToPlane = normal.dot(center) + plane.distance;\n\n if (distanceToPlane < -radius) {\n return INTERSECTION.OUTSIDE;\n }\n\n if (distanceToPlane < radius) {\n return INTERSECTION.INTERSECTING;\n }\n\n return INTERSECTION.INSIDE;\n }\n\n}\n//# sourceMappingURL=bounding-sphere.js.map","import Matrix from './base/matrix';\nimport { checkVector } from '../lib/validators';\nimport { vec4_transformMat3 } from '../lib/gl-matrix-extras';\nimport * as mat3 from 'gl-matrix/mat3';\nimport * as vec2 from 'gl-matrix/vec2';\nimport * as vec3 from 'gl-matrix/vec3';\nvar INDICES;\n\n(function (INDICES) {\n INDICES[INDICES[\"COL0ROW0\"] = 0] = \"COL0ROW0\";\n INDICES[INDICES[\"COL0ROW1\"] = 1] = \"COL0ROW1\";\n INDICES[INDICES[\"COL0ROW2\"] = 2] = \"COL0ROW2\";\n INDICES[INDICES[\"COL1ROW0\"] = 3] = \"COL1ROW0\";\n INDICES[INDICES[\"COL1ROW1\"] = 4] = \"COL1ROW1\";\n INDICES[INDICES[\"COL1ROW2\"] = 5] = \"COL1ROW2\";\n INDICES[INDICES[\"COL2ROW0\"] = 6] = \"COL2ROW0\";\n INDICES[INDICES[\"COL2ROW1\"] = 7] = \"COL2ROW1\";\n INDICES[INDICES[\"COL2ROW2\"] = 8] = \"COL2ROW2\";\n})(INDICES || (INDICES = {}));\n\nconst IDENTITY_MATRIX = Object.freeze([1, 0, 0, 0, 1, 0, 0, 0, 1]);\nexport default class Matrix3 extends Matrix {\n static get IDENTITY() {\n return getIdentityMatrix();\n }\n\n static get ZERO() {\n return getZeroMatrix();\n }\n\n get ELEMENTS() {\n return 9;\n }\n\n get RANK() {\n return 3;\n }\n\n get INDICES() {\n return INDICES;\n }\n\n constructor(array, ...args) {\n super(-0, -0, -0, -0, -0, -0, -0, -0, -0);\n\n if (arguments.length === 1 && Array.isArray(array)) {\n this.copy(array);\n } else if (args.length > 0) {\n this.copy([array, ...args]);\n } else {\n this.identity();\n }\n }\n\n copy(array) {\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n this[3] = array[3];\n this[4] = array[4];\n this[5] = array[5];\n this[6] = array[6];\n this[7] = array[7];\n this[8] = array[8];\n return this.check();\n }\n\n identity() {\n return this.copy(IDENTITY_MATRIX);\n }\n\n fromObject(object) {\n return this.check();\n }\n\n fromQuaternion(q) {\n mat3.fromQuat(this, q);\n return this.check();\n }\n\n set(m00, m10, m20, m01, m11, m21, m02, m12, m22) {\n this[0] = m00;\n this[1] = m10;\n this[2] = m20;\n this[3] = m01;\n this[4] = m11;\n this[5] = m21;\n this[6] = m02;\n this[7] = m12;\n this[8] = m22;\n return this.check();\n }\n\n setRowMajor(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n this[0] = m00;\n this[1] = m10;\n this[2] = m20;\n this[3] = m01;\n this[4] = m11;\n this[5] = m21;\n this[6] = m02;\n this[7] = m12;\n this[8] = m22;\n return this.check();\n }\n\n determinant() {\n return mat3.determinant(this);\n }\n\n transpose() {\n mat3.transpose(this, this);\n return this.check();\n }\n\n invert() {\n mat3.invert(this, this);\n return this.check();\n }\n\n multiplyLeft(a) {\n mat3.multiply(this, a, this);\n return this.check();\n }\n\n multiplyRight(a) {\n mat3.multiply(this, this, a);\n return this.check();\n }\n\n rotate(radians) {\n mat3.rotate(this, this, radians);\n return this.check();\n }\n\n scale(factor) {\n if (Array.isArray(factor)) {\n mat3.scale(this, this, factor);\n } else {\n mat3.scale(this, this, [factor, factor]);\n }\n\n return this.check();\n }\n\n translate(vec) {\n mat3.translate(this, this, vec);\n return this.check();\n }\n\n transform(vector, result) {\n let out;\n\n switch (vector.length) {\n case 2:\n out = vec2.transformMat3(result || [-0, -0], vector, this);\n break;\n\n case 3:\n out = vec3.transformMat3(result || [-0, -0, -0], vector, this);\n break;\n\n case 4:\n out = vec4_transformMat3(result || [-0, -0, -0, -0], vector, this);\n break;\n\n default:\n throw new Error('Illegal vector');\n }\n\n checkVector(out, vector.length);\n return out;\n }\n\n transformVector(vector, result) {\n return this.transform(vector, result);\n }\n\n transformVector2(vector, result) {\n return this.transform(vector, result);\n }\n\n transformVector3(vector, result) {\n return this.transform(vector, result);\n }\n\n}\nlet ZERO_MATRIX3;\nlet IDENTITY_MATRIX3;\n\nfunction getZeroMatrix() {\n if (!ZERO_MATRIX3) {\n ZERO_MATRIX3 = new Matrix3([0, 0, 0, 0, 0, 0, 0, 0, 0]);\n Object.freeze(ZERO_MATRIX3);\n }\n\n return ZERO_MATRIX3;\n}\n\nfunction getIdentityMatrix() {\n if (!IDENTITY_MATRIX3) {\n IDENTITY_MATRIX3 = new Matrix3();\n Object.freeze(IDENTITY_MATRIX3);\n }\n\n return IDENTITY_MATRIX3;\n}\n//# sourceMappingURL=matrix3.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Vector3, Matrix3, Quaternion } from '@math.gl/core';\nimport BoundingSphere from './bounding-sphere';\nimport { INTERSECTION } from '../../constants';\nconst scratchVector3 = new Vector3();\nconst scratchOffset = new Vector3();\nconst scratchVectorU = new Vector3();\nconst scratchVectorV = new Vector3();\nconst scratchVectorW = new Vector3();\nconst scratchCorner = new Vector3();\nconst scratchToCenter = new Vector3();\nconst MATRIX3 = {\n COLUMN0ROW0: 0,\n COLUMN0ROW1: 1,\n COLUMN0ROW2: 2,\n COLUMN1ROW0: 3,\n COLUMN1ROW1: 4,\n COLUMN1ROW2: 5,\n COLUMN2ROW0: 6,\n COLUMN2ROW1: 7,\n COLUMN2ROW2: 8\n};\nexport default class OrientedBoundingBox {\n constructor(center = [0, 0, 0], halfAxes = [0, 0, 0, 0, 0, 0, 0, 0, 0]) {\n _defineProperty(this, \"center\", void 0);\n\n _defineProperty(this, \"halfAxes\", void 0);\n\n this.center = new Vector3().from(center);\n this.halfAxes = new Matrix3(halfAxes);\n }\n\n get halfSize() {\n const xAxis = this.halfAxes.getColumn(0);\n const yAxis = this.halfAxes.getColumn(1);\n const zAxis = this.halfAxes.getColumn(2);\n return [new Vector3(xAxis).len(), new Vector3(yAxis).len(), new Vector3(zAxis).len()];\n }\n\n get quaternion() {\n const xAxis = this.halfAxes.getColumn(0);\n const yAxis = this.halfAxes.getColumn(1);\n const zAxis = this.halfAxes.getColumn(2);\n const normXAxis = new Vector3(xAxis).normalize();\n const normYAxis = new Vector3(yAxis).normalize();\n const normZAxis = new Vector3(zAxis).normalize();\n return new Quaternion().fromMatrix3(new Matrix3([...normXAxis, ...normYAxis, ...normZAxis]));\n }\n\n fromCenterHalfSizeQuaternion(center, halfSize, quaternion) {\n const quaternionObject = new Quaternion(quaternion);\n const directionsMatrix = new Matrix3().fromQuaternion(quaternionObject);\n directionsMatrix[0] = directionsMatrix[0] * halfSize[0];\n directionsMatrix[1] = directionsMatrix[1] * halfSize[0];\n directionsMatrix[2] = directionsMatrix[2] * halfSize[0];\n directionsMatrix[3] = directionsMatrix[3] * halfSize[1];\n directionsMatrix[4] = directionsMatrix[4] * halfSize[1];\n directionsMatrix[5] = directionsMatrix[5] * halfSize[1];\n directionsMatrix[6] = directionsMatrix[6] * halfSize[2];\n directionsMatrix[7] = directionsMatrix[7] * halfSize[2];\n directionsMatrix[8] = directionsMatrix[8] * halfSize[2];\n this.center = new Vector3().from(center);\n this.halfAxes = directionsMatrix;\n return this;\n }\n\n clone() {\n return new OrientedBoundingBox(this.center, this.halfAxes);\n }\n\n equals(right) {\n return this === right || Boolean(right) && this.center.equals(right.center) && this.halfAxes.equals(right.halfAxes);\n }\n\n getBoundingSphere(result = new BoundingSphere()) {\n const halfAxes = this.halfAxes;\n const u = halfAxes.getColumn(0, scratchVectorU);\n const v = halfAxes.getColumn(1, scratchVectorV);\n const w = halfAxes.getColumn(2, scratchVectorW);\n const cornerVector = scratchVector3.copy(u).add(v).add(w);\n result.center.copy(this.center);\n result.radius = cornerVector.magnitude();\n return result;\n }\n\n intersectPlane(plane) {\n const center = this.center;\n const normal = plane.normal;\n const halfAxes = this.halfAxes;\n const normalX = normal.x;\n const normalY = normal.y;\n const normalZ = normal.z;\n const radEffective = Math.abs(normalX * halfAxes[MATRIX3.COLUMN0ROW0] + normalY * halfAxes[MATRIX3.COLUMN0ROW1] + normalZ * halfAxes[MATRIX3.COLUMN0ROW2]) + Math.abs(normalX * halfAxes[MATRIX3.COLUMN1ROW0] + normalY * halfAxes[MATRIX3.COLUMN1ROW1] + normalZ * halfAxes[MATRIX3.COLUMN1ROW2]) + Math.abs(normalX * halfAxes[MATRIX3.COLUMN2ROW0] + normalY * halfAxes[MATRIX3.COLUMN2ROW1] + normalZ * halfAxes[MATRIX3.COLUMN2ROW2]);\n const distanceToPlane = normal.dot(center) + plane.distance;\n\n if (distanceToPlane <= -radEffective) {\n return INTERSECTION.OUTSIDE;\n } else if (distanceToPlane >= radEffective) {\n return INTERSECTION.INSIDE;\n }\n\n return INTERSECTION.INTERSECTING;\n }\n\n distanceTo(point) {\n return Math.sqrt(this.distanceSquaredTo(point));\n }\n\n distanceSquaredTo(point) {\n const offset = scratchOffset.from(point).subtract(this.center);\n const halfAxes = this.halfAxes;\n const u = halfAxes.getColumn(0, scratchVectorU);\n const v = halfAxes.getColumn(1, scratchVectorV);\n const w = halfAxes.getColumn(2, scratchVectorW);\n const uHalf = u.magnitude();\n const vHalf = v.magnitude();\n const wHalf = w.magnitude();\n u.normalize();\n v.normalize();\n w.normalize();\n let distanceSquared = 0.0;\n let d;\n d = Math.abs(offset.dot(u)) - uHalf;\n\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n d = Math.abs(offset.dot(v)) - vHalf;\n\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n d = Math.abs(offset.dot(w)) - wHalf;\n\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n return distanceSquared;\n }\n\n computePlaneDistances(position, direction, result = [-0, -0]) {\n let minDist = Number.POSITIVE_INFINITY;\n let maxDist = Number.NEGATIVE_INFINITY;\n const center = this.center;\n const halfAxes = this.halfAxes;\n const u = halfAxes.getColumn(0, scratchVectorU);\n const v = halfAxes.getColumn(1, scratchVectorV);\n const w = halfAxes.getColumn(2, scratchVectorW);\n const corner = scratchCorner.copy(u).add(v).add(w).add(center);\n const toCenter = scratchToCenter.copy(corner).subtract(position);\n let mag = direction.dot(toCenter);\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n corner.copy(center).add(u).add(v).subtract(w);\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n corner.copy(center).add(u).subtract(v).add(w);\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n corner.copy(center).add(u).subtract(v).subtract(w);\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n center.copy(corner).subtract(u).add(v).add(w);\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n center.copy(corner).subtract(u).add(v).subtract(w);\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n center.copy(corner).subtract(u).subtract(v).add(w);\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n center.copy(corner).subtract(u).subtract(v).subtract(w);\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n result[0] = minDist;\n result[1] = maxDist;\n return result;\n }\n\n transform(transformation) {\n this.center.transformAsPoint(transformation);\n const xAxis = this.halfAxes.getColumn(0, scratchVectorU);\n xAxis.transformAsPoint(transformation);\n const yAxis = this.halfAxes.getColumn(1, scratchVectorV);\n yAxis.transformAsPoint(transformation);\n const zAxis = this.halfAxes.getColumn(2, scratchVectorW);\n zAxis.transformAsPoint(transformation);\n this.halfAxes = new Matrix3([...xAxis, ...yAxis, ...zAxis]);\n return this;\n }\n\n getTransform() {\n throw new Error('not implemented');\n }\n\n}\n//# sourceMappingURL=oriented-bounding-box.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Vector3, equals, assert } from '@math.gl/core';\nconst scratchPosition = new Vector3();\nconst scratchNormal = new Vector3();\nexport default class Plane {\n constructor(normal = [0, 0, 1], distance = 0) {\n _defineProperty(this, \"normal\", void 0);\n\n _defineProperty(this, \"distance\", void 0);\n\n this.normal = new Vector3();\n this.distance = -0;\n this.fromNormalDistance(normal, distance);\n }\n\n fromNormalDistance(normal, distance) {\n assert(Number.isFinite(distance));\n this.normal.from(normal).normalize();\n this.distance = distance;\n return this;\n }\n\n fromPointNormal(point, normal) {\n point = scratchPosition.from(point);\n this.normal.from(normal).normalize();\n const distance = -this.normal.dot(point);\n this.distance = distance;\n return this;\n }\n\n fromCoefficients(a, b, c, d) {\n this.normal.set(a, b, c);\n assert(equals(this.normal.len(), 1));\n this.distance = d;\n return this;\n }\n\n clone() {\n return new Plane(this.normal, this.distance);\n }\n\n equals(right) {\n return equals(this.distance, right.distance) && equals(this.normal, right.normal);\n }\n\n getPointDistance(point) {\n return this.normal.dot(point) + this.distance;\n }\n\n transform(matrix4) {\n const normal = scratchNormal.copy(this.normal).transformAsVector(matrix4).normalize();\n const point = this.normal.scale(-this.distance).transform(matrix4);\n return this.fromPointNormal(point, normal);\n }\n\n projectPointOntoPlane(point, result = [0, 0, 0]) {\n point = scratchPosition.from(point);\n const pointDistance = this.getPointDistance(point);\n const scaledNormal = scratchNormal.copy(this.normal).scale(pointDistance);\n return point.subtract(scaledNormal).to(result);\n }\n\n}\n//# sourceMappingURL=plane.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Vector3, assert } from '@math.gl/core';\nimport { INTERSECTION } from '../constants';\nimport Plane from './plane';\nconst faces = [new Vector3([1, 0, 0]), new Vector3([0, 1, 0]), new Vector3([0, 0, 1])];\nconst scratchPlaneCenter = new Vector3();\nconst scratchPlaneNormal = new Vector3();\nconst scratchPlane = new Plane(new Vector3(1.0, 0.0, 0.0), 0.0);\nexport default class CullingVolume {\n constructor(planes = []) {\n _defineProperty(this, \"planes\", void 0);\n\n this.planes = planes;\n }\n\n fromBoundingSphere(boundingSphere) {\n this.planes.length = 2 * faces.length;\n const center = boundingSphere.center;\n const radius = boundingSphere.radius;\n let planeIndex = 0;\n\n for (const faceNormal of faces) {\n let plane0 = this.planes[planeIndex];\n let plane1 = this.planes[planeIndex + 1];\n\n if (!plane0) {\n plane0 = this.planes[planeIndex] = new Plane();\n }\n\n if (!plane1) {\n plane1 = this.planes[planeIndex + 1] = new Plane();\n }\n\n const plane0Center = scratchPlaneCenter.copy(faceNormal).scale(-radius).add(center);\n const plane0Distance = -faceNormal.dot(plane0Center);\n plane0.fromPointNormal(plane0Center, faceNormal);\n const plane1Center = scratchPlaneCenter.copy(faceNormal).scale(radius).add(center);\n const negatedFaceNormal = scratchPlaneNormal.copy(faceNormal).negate();\n const plane1Distance = -negatedFaceNormal.dot(plane1Center);\n plane1.fromPointNormal(plane1Center, negatedFaceNormal);\n planeIndex += 2;\n }\n\n return this;\n }\n\n computeVisibility(boundingVolume) {\n let intersect = INTERSECTION.INSIDE;\n\n for (const plane of this.planes) {\n const result = boundingVolume.intersectPlane(plane);\n\n switch (result) {\n case INTERSECTION.OUTSIDE:\n return INTERSECTION.OUTSIDE;\n\n case INTERSECTION.INTERSECTING:\n intersect = INTERSECTION.INTERSECTING;\n break;\n\n default:\n }\n }\n\n return intersect;\n }\n\n computeVisibilityWithPlaneMask(boundingVolume, parentPlaneMask) {\n assert(Number.isFinite(parentPlaneMask), 'parentPlaneMask is required.');\n\n if (parentPlaneMask === CullingVolume.MASK_OUTSIDE || parentPlaneMask === CullingVolume.MASK_INSIDE) {\n return parentPlaneMask;\n }\n\n let mask = CullingVolume.MASK_INSIDE;\n const planes = this.planes;\n\n for (let k = 0; k < this.planes.length; ++k) {\n const flag = k < 31 ? 1 << k : 0;\n\n if (k < 31 && (parentPlaneMask & flag) === 0) {\n continue;\n }\n\n const plane = planes[k];\n const result = boundingVolume.intersectPlane(plane);\n\n if (result === INTERSECTION.OUTSIDE) {\n return CullingVolume.MASK_OUTSIDE;\n } else if (result === INTERSECTION.INTERSECTING) {\n mask |= flag;\n }\n }\n\n return mask;\n }\n\n}\n\n_defineProperty(CullingVolume, \"MASK_OUTSIDE\", 0xffffffff);\n\n_defineProperty(CullingVolume, \"MASK_INSIDE\", 0x00000000);\n\n_defineProperty(CullingVolume, \"MASK_INDETERMINATE\", 0x7fffffff);\n//# sourceMappingURL=culling-volume.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Vector3, Matrix4, assert } from '@math.gl/core';\nimport CullingVolume from './culling-volume';\nimport Plane from './plane';\nconst scratchPlaneUpVector = new Vector3();\nconst scratchPlaneRightVector = new Vector3();\nconst scratchPlaneNearCenter = new Vector3();\nconst scratchPlaneFarCenter = new Vector3();\nconst scratchPlaneNormal = new Vector3();\nexport default class PerspectiveOffCenterFrustum {\n constructor(options = {}) {\n _defineProperty(this, \"left\", void 0);\n\n _defineProperty(this, \"_left\", void 0);\n\n _defineProperty(this, \"right\", void 0);\n\n _defineProperty(this, \"_right\", void 0);\n\n _defineProperty(this, \"top\", void 0);\n\n _defineProperty(this, \"_top\", void 0);\n\n _defineProperty(this, \"bottom\", void 0);\n\n _defineProperty(this, \"_bottom\", void 0);\n\n _defineProperty(this, \"near\", void 0);\n\n _defineProperty(this, \"_near\", void 0);\n\n _defineProperty(this, \"far\", void 0);\n\n _defineProperty(this, \"_far\", void 0);\n\n _defineProperty(this, \"_cullingVolume\", new CullingVolume([new Plane(), new Plane(), new Plane(), new Plane(), new Plane(), new Plane()]));\n\n _defineProperty(this, \"_perspectiveMatrix\", new Matrix4());\n\n _defineProperty(this, \"_infinitePerspective\", new Matrix4());\n\n const {\n near = 1.0,\n far = 500000000.0\n } = options;\n this.left = options.left;\n this._left = undefined;\n this.right = options.right;\n this._right = undefined;\n this.top = options.top;\n this._top = undefined;\n this.bottom = options.bottom;\n this._bottom = undefined;\n this.near = near;\n this._near = near;\n this.far = far;\n this._far = far;\n }\n\n clone() {\n return new PerspectiveOffCenterFrustum({\n right: this.right,\n left: this.left,\n top: this.top,\n bottom: this.bottom,\n near: this.near,\n far: this.far\n });\n }\n\n equals(other) {\n return other && other instanceof PerspectiveOffCenterFrustum && this.right === other.right && this.left === other.left && this.top === other.top && this.bottom === other.bottom && this.near === other.near && this.far === other.far;\n }\n\n get projectionMatrix() {\n this._update();\n\n return this._perspectiveMatrix;\n }\n\n get infiniteProjectionMatrix() {\n this._update();\n\n return this._infinitePerspective;\n }\n\n computeCullingVolume(position, direction, up) {\n assert(position, 'position is required.');\n assert(direction, 'direction is required.');\n assert(up, 'up is required.');\n const planes = this._cullingVolume.planes;\n up = scratchPlaneUpVector.copy(up).normalize();\n const right = scratchPlaneRightVector.copy(direction).cross(up).normalize();\n const nearCenter = scratchPlaneNearCenter.copy(direction).multiplyByScalar(this.near).add(position);\n const farCenter = scratchPlaneFarCenter.copy(direction).multiplyByScalar(this.far).add(position);\n let normal = scratchPlaneNormal;\n normal.copy(right).multiplyByScalar(this.left).add(nearCenter).subtract(position).cross(up);\n planes[0].fromPointNormal(position, normal);\n normal.copy(right).multiplyByScalar(this.right).add(nearCenter).subtract(position).cross(up).negate();\n planes[1].fromPointNormal(position, normal);\n normal.copy(up).multiplyByScalar(this.bottom).add(nearCenter).subtract(position).cross(right).negate();\n planes[2].fromPointNormal(position, normal);\n normal.copy(up).multiplyByScalar(this.top).add(nearCenter).subtract(position).cross(right);\n planes[3].fromPointNormal(position, normal);\n normal = new Vector3().copy(direction);\n planes[4].fromPointNormal(nearCenter, normal);\n normal.negate();\n planes[5].fromPointNormal(farCenter, normal);\n return this._cullingVolume;\n }\n\n getPixelDimensions(drawingBufferWidth, drawingBufferHeight, distance, result) {\n this._update();\n\n assert(Number.isFinite(drawingBufferWidth) && Number.isFinite(drawingBufferHeight));\n assert(drawingBufferWidth > 0);\n assert(drawingBufferHeight > 0);\n assert(distance > 0);\n assert(result);\n const inverseNear = 1.0 / this.near;\n let tanTheta = this.top * inverseNear;\n const pixelHeight = 2.0 * distance * tanTheta / drawingBufferHeight;\n tanTheta = this.right * inverseNear;\n const pixelWidth = 2.0 * distance * tanTheta / drawingBufferWidth;\n result.x = pixelWidth;\n result.y = pixelHeight;\n return result;\n }\n\n _update() {\n assert(Number.isFinite(this.right) && Number.isFinite(this.left) && Number.isFinite(this.top) && Number.isFinite(this.bottom) && Number.isFinite(this.near) && Number.isFinite(this.far));\n const {\n top,\n bottom,\n right,\n left,\n near,\n far\n } = this;\n\n if (top !== this._top || bottom !== this._bottom || left !== this._left || right !== this._right || near !== this._near || far !== this._far) {\n assert(this.near > 0 && this.near < this.far, 'near must be greater than zero and less than far.');\n this._left = left;\n this._right = right;\n this._top = top;\n this._bottom = bottom;\n this._near = near;\n this._far = far;\n this._perspectiveMatrix = new Matrix4().frustum({\n left,\n right,\n bottom,\n top,\n near,\n far\n });\n this._infinitePerspective = new Matrix4().frustum({\n left,\n right,\n bottom,\n top,\n near,\n far: Infinity\n });\n }\n }\n\n}\n//# sourceMappingURL=perspective-off-center-frustum.js.map","import { Vector3 } from '@math.gl/core';\nimport BoundingSphere from '../bounding-volumes/bounding-sphere';\nconst fromPointsXMin = new Vector3();\nconst fromPointsYMin = new Vector3();\nconst fromPointsZMin = new Vector3();\nconst fromPointsXMax = new Vector3();\nconst fromPointsYMax = new Vector3();\nconst fromPointsZMax = new Vector3();\nconst fromPointsCurrentPos = new Vector3();\nconst fromPointsScratch = new Vector3();\nconst fromPointsRitterCenter = new Vector3();\nconst fromPointsMinBoxPt = new Vector3();\nconst fromPointsMaxBoxPt = new Vector3();\nconst fromPointsNaiveCenterScratch = new Vector3();\nconst volumeConstant = 4.0 / 3.0 * Math.PI;\nexport default function makeBoundingSphereFromPoints(positions, result = new BoundingSphere()) {\n if (!positions || positions.length === 0) {\n return result.fromCenterRadius([0, 0, 0], 0);\n }\n\n const currentPos = fromPointsCurrentPos.copy(positions[0]);\n const xMin = fromPointsXMin.copy(currentPos);\n const yMin = fromPointsYMin.copy(currentPos);\n const zMin = fromPointsZMin.copy(currentPos);\n const xMax = fromPointsXMax.copy(currentPos);\n const yMax = fromPointsYMax.copy(currentPos);\n const zMax = fromPointsZMax.copy(currentPos);\n\n for (const position of positions) {\n currentPos.copy(position);\n const x = currentPos.x;\n const y = currentPos.y;\n const z = currentPos.z;\n\n if (x < xMin.x) {\n xMin.copy(currentPos);\n }\n\n if (x > xMax.x) {\n xMax.copy(currentPos);\n }\n\n if (y < yMin.y) {\n yMin.copy(currentPos);\n }\n\n if (y > yMax.y) {\n yMax.copy(currentPos);\n }\n\n if (z < zMin.z) {\n zMin.copy(currentPos);\n }\n\n if (z > zMax.z) {\n zMax.copy(currentPos);\n }\n }\n\n const xSpan = fromPointsScratch.copy(xMax).subtract(xMin).magnitudeSquared();\n const ySpan = fromPointsScratch.copy(yMax).subtract(yMin).magnitudeSquared();\n const zSpan = fromPointsScratch.copy(zMax).subtract(zMin).magnitudeSquared();\n let diameter1 = xMin;\n let diameter2 = xMax;\n let maxSpan = xSpan;\n\n if (ySpan > maxSpan) {\n maxSpan = ySpan;\n diameter1 = yMin;\n diameter2 = yMax;\n }\n\n if (zSpan > maxSpan) {\n maxSpan = zSpan;\n diameter1 = zMin;\n diameter2 = zMax;\n }\n\n const ritterCenter = fromPointsRitterCenter;\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n let radiusSquared = fromPointsScratch.copy(diameter2).subtract(ritterCenter).magnitudeSquared();\n let ritterRadius = Math.sqrt(radiusSquared);\n const minBoxPt = fromPointsMinBoxPt;\n minBoxPt.x = xMin.x;\n minBoxPt.y = yMin.y;\n minBoxPt.z = zMin.z;\n const maxBoxPt = fromPointsMaxBoxPt;\n maxBoxPt.x = xMax.x;\n maxBoxPt.y = yMax.y;\n maxBoxPt.z = zMax.z;\n const naiveCenter = fromPointsNaiveCenterScratch.copy(minBoxPt).add(maxBoxPt).multiplyByScalar(0.5);\n let naiveRadius = 0;\n\n for (const position of positions) {\n currentPos.copy(position);\n const r = fromPointsScratch.copy(currentPos).subtract(naiveCenter).magnitude();\n\n if (r > naiveRadius) {\n naiveRadius = r;\n }\n\n const oldCenterToPointSquared = fromPointsScratch.copy(currentPos).subtract(ritterCenter).magnitudeSquared();\n\n if (oldCenterToPointSquared > radiusSquared) {\n const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n radiusSquared = ritterRadius * ritterRadius;\n const oldToNew = oldCenterToPoint - ritterRadius;\n ritterCenter.x = (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / oldCenterToPoint;\n ritterCenter.y = (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / oldCenterToPoint;\n ritterCenter.z = (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / oldCenterToPoint;\n }\n }\n\n if (ritterRadius < naiveRadius) {\n ritterCenter.to(result.center);\n result.radius = ritterRadius;\n } else {\n naiveCenter.to(result.center);\n result.radius = naiveRadius;\n }\n\n return result;\n}\n//# sourceMappingURL=bounding-sphere-from-points.js.map","export default {\n EPSILON1: 1e-1,\n EPSILON2: 1e-2,\n EPSILON3: 1e-3,\n EPSILON4: 1e-4,\n EPSILON5: 1e-5,\n EPSILON6: 1e-6,\n EPSILON7: 1e-7,\n EPSILON8: 1e-8,\n EPSILON9: 1e-9,\n EPSILON10: 1e-10,\n EPSILON11: 1e-11,\n EPSILON12: 1e-12,\n EPSILON13: 1e-13,\n EPSILON14: 1e-14,\n EPSILON15: 1e-15,\n EPSILON16: 1e-16,\n EPSILON17: 1e-17,\n EPSILON18: 1e-18,\n EPSILON19: 1e-19,\n EPSILON20: 1e-20,\n PI_OVER_TWO: Math.PI / 2,\n PI_OVER_FOUR: Math.PI / 4,\n PI_OVER_SIX: Math.PI / 6,\n TWO_PI: Math.PI * 2\n};\n//# sourceMappingURL=math-utils.js.map","import { Matrix3, _MathUtils } from '@math.gl/core';\nconst scratchMatrix = new Matrix3();\nconst scratchUnitary = new Matrix3();\nconst scratchDiagonal = new Matrix3();\nconst jMatrix = new Matrix3();\nconst jMatrixTranspose = new Matrix3();\nexport default function computeEigenDecomposition(matrix, result = {}) {\n const EIGEN_TOLERANCE = _MathUtils.EPSILON20;\n const EIGEN_MAX_SWEEPS = 10;\n let count = 0;\n let sweep = 0;\n const unitaryMatrix = scratchUnitary;\n const diagonalMatrix = scratchDiagonal;\n unitaryMatrix.identity();\n diagonalMatrix.copy(matrix);\n const epsilon = EIGEN_TOLERANCE * computeFrobeniusNorm(diagonalMatrix);\n\n while (sweep < EIGEN_MAX_SWEEPS && offDiagonalFrobeniusNorm(diagonalMatrix) > epsilon) {\n shurDecomposition(diagonalMatrix, jMatrix);\n jMatrixTranspose.copy(jMatrix).transpose();\n diagonalMatrix.multiplyRight(jMatrix);\n diagonalMatrix.multiplyLeft(jMatrixTranspose);\n unitaryMatrix.multiplyRight(jMatrix);\n\n if (++count > 2) {\n ++sweep;\n count = 0;\n }\n }\n\n result.unitary = unitaryMatrix.toTarget(result.unitary);\n result.diagonal = diagonalMatrix.toTarget(result.diagonal);\n return result;\n}\n\nfunction computeFrobeniusNorm(matrix) {\n let norm = 0.0;\n\n for (let i = 0; i < 9; ++i) {\n const temp = matrix[i];\n norm += temp * temp;\n }\n\n return Math.sqrt(norm);\n}\n\nconst rowVal = [1, 0, 0];\nconst colVal = [2, 2, 1];\n\nfunction offDiagonalFrobeniusNorm(matrix) {\n let norm = 0.0;\n\n for (let i = 0; i < 3; ++i) {\n const temp = matrix[scratchMatrix.getElementIndex(colVal[i], rowVal[i])];\n norm += 2.0 * temp * temp;\n }\n\n return Math.sqrt(norm);\n}\n\nfunction shurDecomposition(matrix, result) {\n const tolerance = _MathUtils.EPSILON15;\n let maxDiagonal = 0.0;\n let rotAxis = 1;\n\n for (let i = 0; i < 3; ++i) {\n const temp = Math.abs(matrix[scratchMatrix.getElementIndex(colVal[i], rowVal[i])]);\n\n if (temp > maxDiagonal) {\n rotAxis = i;\n maxDiagonal = temp;\n }\n }\n\n const p = rowVal[rotAxis];\n const q = colVal[rotAxis];\n let c = 1.0;\n let s = 0.0;\n\n if (Math.abs(matrix[scratchMatrix.getElementIndex(q, p)]) > tolerance) {\n const qq = matrix[scratchMatrix.getElementIndex(q, q)];\n const pp = matrix[scratchMatrix.getElementIndex(p, p)];\n const qp = matrix[scratchMatrix.getElementIndex(q, p)];\n const tau = (qq - pp) / 2.0 / qp;\n let t;\n\n if (tau < 0.0) {\n t = -1.0 / (-tau + Math.sqrt(1.0 + tau * tau));\n } else {\n t = 1.0 / (tau + Math.sqrt(1.0 + tau * tau));\n }\n\n c = 1.0 / Math.sqrt(1.0 + t * t);\n s = t * c;\n }\n\n Matrix3.IDENTITY.to(result);\n result[scratchMatrix.getElementIndex(p, p)] = result[scratchMatrix.getElementIndex(q, q)] = c;\n result[scratchMatrix.getElementIndex(q, p)] = s;\n result[scratchMatrix.getElementIndex(p, q)] = -s;\n return result;\n}\n//# sourceMappingURL=compute-eigen-decomposition.js.map","import { Vector3, Matrix3 } from '@math.gl/core';\nimport computeEigenDecomposition from './compute-eigen-decomposition';\nimport OrientedBoundingBox from '../bounding-volumes/oriented-bounding-box';\nimport AxisAlignedBoundingBox from '../bounding-volumes/axis-aligned-bounding-box';\nconst scratchVector2 = new Vector3();\nconst scratchVector3 = new Vector3();\nconst scratchVector4 = new Vector3();\nconst scratchVector5 = new Vector3();\nconst scratchVector6 = new Vector3();\nconst scratchCovarianceResult = new Matrix3();\nconst scratchEigenResult = {\n diagonal: new Matrix3(),\n unitary: new Matrix3()\n};\nexport function makeOrientedBoundingBoxFromPoints(positions, result = new OrientedBoundingBox()) {\n if (!positions || positions.length === 0) {\n result.halfAxes = new Matrix3([0, 0, 0, 0, 0, 0, 0, 0, 0]);\n result.center = new Vector3();\n return result;\n }\n\n const length = positions.length;\n const meanPoint = new Vector3(0, 0, 0);\n\n for (const position of positions) {\n meanPoint.add(position);\n }\n\n const invLength = 1.0 / length;\n meanPoint.multiplyByScalar(invLength);\n let exx = 0.0;\n let exy = 0.0;\n let exz = 0.0;\n let eyy = 0.0;\n let eyz = 0.0;\n let ezz = 0.0;\n\n for (const position of positions) {\n const p = scratchVector2.copy(position).subtract(meanPoint);\n exx += p.x * p.x;\n exy += p.x * p.y;\n exz += p.x * p.z;\n eyy += p.y * p.y;\n eyz += p.y * p.z;\n ezz += p.z * p.z;\n }\n\n exx *= invLength;\n exy *= invLength;\n exz *= invLength;\n eyy *= invLength;\n eyz *= invLength;\n ezz *= invLength;\n const covarianceMatrix = scratchCovarianceResult;\n covarianceMatrix[0] = exx;\n covarianceMatrix[1] = exy;\n covarianceMatrix[2] = exz;\n covarianceMatrix[3] = exy;\n covarianceMatrix[4] = eyy;\n covarianceMatrix[5] = eyz;\n covarianceMatrix[6] = exz;\n covarianceMatrix[7] = eyz;\n covarianceMatrix[8] = ezz;\n const {\n unitary\n } = computeEigenDecomposition(covarianceMatrix, scratchEigenResult);\n const rotation = result.halfAxes.copy(unitary);\n let v1 = rotation.getColumn(0, scratchVector4);\n let v2 = rotation.getColumn(1, scratchVector5);\n let v3 = rotation.getColumn(2, scratchVector6);\n let u1 = -Number.MAX_VALUE;\n let u2 = -Number.MAX_VALUE;\n let u3 = -Number.MAX_VALUE;\n let l1 = Number.MAX_VALUE;\n let l2 = Number.MAX_VALUE;\n let l3 = Number.MAX_VALUE;\n\n for (const position of positions) {\n scratchVector2.copy(position);\n u1 = Math.max(scratchVector2.dot(v1), u1);\n u2 = Math.max(scratchVector2.dot(v2), u2);\n u3 = Math.max(scratchVector2.dot(v3), u3);\n l1 = Math.min(scratchVector2.dot(v1), l1);\n l2 = Math.min(scratchVector2.dot(v2), l2);\n l3 = Math.min(scratchVector2.dot(v3), l3);\n }\n\n v1 = v1.multiplyByScalar(0.5 * (l1 + u1));\n v2 = v2.multiplyByScalar(0.5 * (l2 + u2));\n v3 = v3.multiplyByScalar(0.5 * (l3 + u3));\n result.center.copy(v1).add(v2).add(v3);\n const scale = scratchVector3.set(u1 - l1, u2 - l2, u3 - l3).multiplyByScalar(0.5);\n const scaleMatrix = new Matrix3([scale[0], 0, 0, 0, scale[1], 0, 0, 0, scale[2]]);\n result.halfAxes.multiplyRight(scaleMatrix);\n return result;\n}\nexport function makeAxisAlignedBoundingBoxFromPoints(positions, result = new AxisAlignedBoundingBox()) {\n if (!positions || positions.length === 0) {\n result.minimum.set(0, 0, 0);\n result.maximum.set(0, 0, 0);\n result.center.set(0, 0, 0);\n result.halfDiagonal.set(0, 0, 0);\n return result;\n }\n\n let minimumX = positions[0][0];\n let minimumY = positions[0][1];\n let minimumZ = positions[0][2];\n let maximumX = positions[0][0];\n let maximumY = positions[0][1];\n let maximumZ = positions[0][2];\n\n for (const p of positions) {\n const x = p[0];\n const y = p[1];\n const z = p[2];\n minimumX = Math.min(x, minimumX);\n maximumX = Math.max(x, maximumX);\n minimumY = Math.min(y, minimumY);\n maximumY = Math.max(y, maximumY);\n minimumZ = Math.min(z, minimumZ);\n maximumZ = Math.max(z, maximumZ);\n }\n\n result.minimum.set(minimumX, minimumY, minimumZ);\n result.maximum.set(maximumX, maximumY, maximumZ);\n result.center.copy(result.minimum).add(result.maximum).scale(0.5);\n result.halfDiagonal.copy(result.maximum).subtract(result.center);\n return result;\n}\n//# sourceMappingURL=bounding-box-from-points.js.map","/* eslint-disable complexity */\nimport {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [\n [0.5, 0.5],\n [0, 0],\n [0, 1],\n [1, 0],\n [1, 1]\n]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([\n [0, 0.5],\n [0.5, 0],\n [1, 0.5],\n [0.5, 1]\n]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([\n [0.25, 0.5],\n [0.75, 0.5]\n]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n x: number;\n y: number;\n z: number;\n\n private childVisible?: boolean;\n private selected?: boolean;\n\n private _children?: OSMNode[];\n\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n update(params: {\n viewport: Viewport;\n project: ((xyz: number[]) => number[]) | null;\n cullingVolume: CullingVolume;\n elevationBounds: ZRange;\n minZ: number;\n maxZ: number;\n bounds?: Bounds;\n offset: number;\n }) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result: OSMNode[] = []): OSMNode[] {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]: Bounds): boolean {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(\n zRange: ZRange,\n worldOffset: number,\n project: ((xyz: number[]) => number[]) | null\n ) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions: number[][] = [];\n for (const p of refPoints) {\n const lngLat: number[] = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange: ZRange | undefined,\n bounds?: Bounds\n): TileIndex[] {\n const project: ((xyz: number[]) => number[]) | null =\n viewport instanceof _GlobeViewport && viewport.resolution\n ? // eslint-disable-next-line @typescript-eslint/unbound-method\n viewport.projectPosition\n : null;\n\n // Get the culling volume of the current camera\n const planes: Plane[] = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;\n\n // Map extent to OSM position\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax] as ZRange,\n minZ,\n maxZ,\n bounds,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (\n viewport instanceof WebMercatorViewport &&\n viewport.subViewports &&\n viewport.subViewports.length > 1\n ) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n","import {Viewport} from '@deck.gl/core';\nimport {Matrix4} from '@math.gl/core';\nimport {getOSMTileIndices} from './tile-2d-traversal';\nimport {Bounds, GeoBoundingBox, TileBoundingBox, TileIndex, ZRange} from './types';\n\nconst TILE_SIZE = 512;\nconst DEFAULT_EXTENT: Bounds = [-Infinity, -Infinity, Infinity, Infinity];\n\nexport const urlType = {\n type: 'url',\n value: null,\n validate: (value, propType) =>\n (propType.optional && value === null) ||\n typeof value === 'string' ||\n (Array.isArray(value) && value.every(url => typeof url === 'string')),\n equals: (value1, value2) => {\n if (value1 === value2) {\n return true;\n }\n if (!Array.isArray(value1) || !Array.isArray(value2)) {\n return false;\n }\n const len = value1.length;\n if (len !== value2.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (value1[i] !== value2[i]) {\n return false;\n }\n }\n return true;\n }\n};\n\nfunction transformBox(bbox: Bounds, modelMatrix: Matrix4): Bounds {\n const transformedCoords = [\n // top-left\n modelMatrix.transformAsPoint([bbox[0], bbox[1]]),\n // top-right\n modelMatrix.transformAsPoint([bbox[2], bbox[1]]),\n // bottom-left\n modelMatrix.transformAsPoint([bbox[0], bbox[3]]),\n // bottom-right\n modelMatrix.transformAsPoint([bbox[2], bbox[3]])\n ];\n const transformedBox: Bounds = [\n // Minimum x coord\n Math.min(...transformedCoords.map(i => i[0])),\n // Minimum y coord\n Math.min(...transformedCoords.map(i => i[1])),\n // Max x coord\n Math.max(...transformedCoords.map(i => i[0])),\n // Max y coord\n Math.max(...transformedCoords.map(i => i[1]))\n ];\n return transformedBox;\n}\n\nfunction stringHash(s: string): number {\n return Math.abs(s.split('').reduce((a, b) => ((a << 5) - a + b.charCodeAt(0)) | 0, 0));\n}\n\nexport function getURLFromTemplate(\n template: string | string[],\n tile: {\n index: TileIndex;\n id: string;\n }\n): string | null {\n if (!template || !template.length) {\n return null;\n }\n const {index, id} = tile;\n\n if (Array.isArray(template)) {\n const i = stringHash(id) % template.length;\n template = template[i];\n }\n\n let url = template;\n for (const key of Object.keys(index)) {\n const regex = new RegExp(`{${key}}`, 'g');\n url = url.replace(regex, String(index[key]));\n }\n\n // Back-compatible support for {-y}\n if (Number.isInteger(index.y) && Number.isInteger(index.z)) {\n url = url.replace(/\\{-y\\}/g, String(Math.pow(2, index.z) - index.y - 1));\n }\n return url;\n}\n\n/**\n * gets the bounding box of a viewport\n */\nfunction getBoundingBox(viewport: Viewport, zRange: number[] | null, extent: Bounds): Bounds {\n let bounds;\n if (zRange && zRange.length === 2) {\n const [minZ, maxZ] = zRange;\n const bounds0 = viewport.getBounds({z: minZ});\n const bounds1 = viewport.getBounds({z: maxZ});\n bounds = [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n } else {\n bounds = viewport.getBounds();\n }\n if (!viewport.isGeospatial) {\n return [\n // Top corner should not be more then bottom corner in either direction\n Math.max(Math.min(bounds[0], extent[2]), extent[0]),\n Math.max(Math.min(bounds[1], extent[3]), extent[1]),\n // Bottom corner should not be less then top corner in either direction\n Math.min(Math.max(bounds[2], extent[0]), extent[2]),\n Math.min(Math.max(bounds[3], extent[1]), extent[3])\n ];\n }\n return [\n Math.max(bounds[0], extent[0]),\n Math.max(bounds[1], extent[1]),\n Math.min(bounds[2], extent[2]),\n Math.min(bounds[3], extent[3])\n ];\n}\n\n/** Get culling bounds in world space */\nexport function getCullBounds({\n viewport,\n z,\n cullRect\n}: {\n /** Current viewport */\n viewport: Viewport;\n /** Current z range */\n z: ZRange | number | undefined;\n /** Culling rectangle in screen space */\n cullRect: {x: number; y: number; width: number; height: number};\n}): [number, number, number, number] {\n const x = cullRect.x - viewport.x;\n const y = cullRect.y - viewport.y;\n const {width, height} = cullRect;\n\n if (!Array.isArray(z)) {\n const unprojectOption = {targetZ: z || 0};\n\n const topLeft = viewport.unproject([x, y], unprojectOption);\n const topRight = viewport.unproject([x + width, y], unprojectOption);\n const bottomLeft = viewport.unproject([x, y + height], unprojectOption);\n const bottomRight = viewport.unproject([x + width, y + height], unprojectOption);\n\n return [\n Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]),\n Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1])\n ];\n }\n\n const bounds0 = getCullBounds({viewport, z: z[0], cullRect});\n const bounds1 = getCullBounds({viewport, z: z[1], cullRect});\n\n return [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n}\n\nfunction getIndexingCoords(bbox: Bounds, scale: number, modelMatrixInverse?: Matrix4): Bounds {\n if (modelMatrixInverse) {\n const transformedTileIndex = transformBox(bbox, modelMatrixInverse).map(\n i => (i * scale) / TILE_SIZE\n );\n return transformedTileIndex as Bounds;\n }\n return bbox.map(i => (i * scale) / TILE_SIZE) as Bounds;\n}\n\nfunction getScale(z: number, tileSize: number): number {\n return (Math.pow(2, z) * TILE_SIZE) / tileSize;\n}\n\n// https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2\nexport function osmTile2lngLat(x: number, y: number, z: number): [number, number] {\n const scale = getScale(z, TILE_SIZE);\n const lng = (x / scale) * 360 - 180;\n const n = Math.PI - (2 * Math.PI * y) / scale;\n const lat = (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\n return [lng, lat];\n}\n\nfunction tile2XY(x: number, y: number, z: number, tileSize: number): [number, number] {\n const scale = getScale(z, tileSize);\n return [(x / scale) * TILE_SIZE, (y / scale) * TILE_SIZE];\n}\nexport function tileToBoundingBox(\n viewport: Viewport,\n x: number,\n y: number,\n z: number,\n tileSize: number = TILE_SIZE\n): TileBoundingBox {\n if (viewport.isGeospatial) {\n const [west, north] = osmTile2lngLat(x, y, z);\n const [east, south] = osmTile2lngLat(x + 1, y + 1, z);\n return {west, north, east, south};\n }\n const [left, top] = tile2XY(x, y, z, tileSize);\n const [right, bottom] = tile2XY(x + 1, y + 1, z, tileSize);\n return {left, top, right, bottom};\n}\n\nfunction getIdentityTileIndices(\n viewport: Viewport,\n z: number,\n tileSize: number,\n extent: Bounds,\n modelMatrixInverse?: Matrix4\n) {\n const bbox = getBoundingBox(viewport, null, extent);\n const scale = getScale(z, tileSize);\n const [minX, minY, maxX, maxY] = getIndexingCoords(bbox, scale, modelMatrixInverse);\n const indices: TileIndex[] = [];\n\n /*\n | TILE | TILE | TILE |\n |(minX) |(maxX)\n */\n for (let x = Math.floor(minX); x < maxX; x++) {\n for (let y = Math.floor(minY); y < maxY; y++) {\n indices.push({x, y, z});\n }\n }\n return indices;\n}\n\n/**\n * Returns all tile indices in the current viewport. If the current zoom level is smaller\n * than minZoom, return an empty array. If the current zoom level is greater than maxZoom,\n * return tiles that are on maxZoom.\n */\n// eslint-disable-next-line complexity\nexport function getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n extent,\n tileSize = TILE_SIZE,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset = 0\n}: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | undefined;\n extent?: Bounds;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n}) {\n let z = viewport.isGeospatial\n ? Math.round(viewport.zoom + Math.log2(TILE_SIZE / tileSize)) + zoomOffset\n : Math.ceil(viewport.zoom) + zoomOffset;\n if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {\n if (!extent) {\n return [];\n }\n z = minZoom;\n }\n if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n }\n let transformedExtent = extent;\n if (modelMatrix && modelMatrixInverse && extent && !viewport.isGeospatial) {\n transformedExtent = transformBox(extent, modelMatrix);\n }\n return viewport.isGeospatial\n ? getOSMTileIndices(viewport, z, zRange, extent)\n : getIdentityTileIndices(\n viewport,\n z,\n tileSize,\n transformedExtent || DEFAULT_EXTENT,\n modelMatrixInverse\n );\n}\n\n/**\n * Returns true if s is a valid URL template\n */\nexport function isURLTemplate(s: string): boolean {\n return /(?=.*{z})(?=.*{x})(?=.*({y}|{-y}))/.test(s);\n}\n\nexport function isGeoBoundingBox(v: any): v is GeoBoundingBox {\n return (\n Number.isFinite(v.west) &&\n Number.isFinite(v.north) &&\n Number.isFinite(v.east) &&\n Number.isFinite(v.south)\n );\n}\n","import Tile2DHeader from './tile-2d-header';\nimport {getTileIndices, tileToBoundingBox, getCullBounds} from './utils';\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4, equals} from '@math.gl/core';\nimport {Viewport} from '@deck.gl/core';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {TileLayerProps} from './tile-layer';\nimport {_memoize as memoize} from '@deck.gl/core';\n\n// bit masks\nconst TILE_STATE_VISITED = 1;\nconst TILE_STATE_VISIBLE = 2;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nexport type RefinementStrategyFunction = (tiles: Tile2DHeader[]) => void;\nexport type RefinementStrategy =\n | typeof STRATEGY_NEVER\n | typeof STRATEGY_REPLACE\n | typeof STRATEGY_DEFAULT\n | RefinementStrategyFunction;\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\n\nexport type Tileset2DProps = Pick<\n Required,\n | 'tileSize'\n | 'maxCacheSize'\n | 'maxCacheByteSize'\n | 'refinementStrategy'\n | 'extent'\n | 'maxZoom'\n | 'minZoom'\n | 'maxRequests'\n | 'zoomOffset'\n> & {\n getTileData: NonNullable;\n onTileLoad: (tile: Tile2DHeader) => void;\n onTileUnload: (tile: Tile2DHeader) => void;\n onTileError: (error: any, tile: Tile2DHeader) => void;\n};\n\n/**\n * Manages loading and purging of tile data. This class caches recently visited tiles\n * and only creates new tiles if they are present.\n */\nexport default class Tileset2D {\n private opts: Tileset2DProps;\n private _requestScheduler: RequestScheduler;\n private _cache: Map;\n private _dirty: boolean;\n private _tiles: Tile2DHeader[];\n\n private _cacheByteSize: number;\n private _viewport: Viewport | null;\n private _zRange?: ZRange;\n private _selectedTiles: Tile2DHeader[] | null;\n private _frameNumber: number;\n private _modelMatrix: Matrix4;\n private _modelMatrixInverse: Matrix4;\n\n private _maxZoom?: number;\n private _minZoom?: number;\n\n private onTileLoad: (tile: Tile2DHeader) => void;\n\n /**\n * Takes in a function that returns tile data, a cache size, and a max and a min zoom level.\n * Cache size defaults to 5 * number of tiles in the current viewport\n */\n constructor(opts: Tileset2DProps) {\n this.opts = opts;\n\n this.onTileLoad = tile => {\n this.opts.onTileLoad(tile);\n if (this.opts.maxCacheByteSize) {\n this._cacheByteSize += tile.byteLength;\n this._resizeCache();\n }\n };\n\n this._requestScheduler = new RequestScheduler({\n maxRequests: opts.maxRequests,\n throttleRequests: opts.maxRequests > 0\n });\n\n // Maps tile id in string {z}-{x}-{y} to a Tile object\n this._cache = new Map();\n this._tiles = [];\n this._dirty = false;\n this._cacheByteSize = 0;\n\n // Cache the last processed viewport\n this._viewport = null;\n this._selectedTiles = null;\n this._frameNumber = 0;\n\n this._modelMatrix = new Matrix4();\n this._modelMatrixInverse = new Matrix4();\n\n this.setOptions(opts);\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles(): Tile2DHeader[] | null {\n return this._selectedTiles;\n }\n\n get isLoaded(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n get needsReload(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.some(tile => tile.needsReload);\n }\n\n setOptions(opts: Tileset2DProps): void {\n Object.assign(this.opts, opts);\n if (Number.isFinite(opts.maxZoom)) {\n this._maxZoom = Math.floor(opts.maxZoom as number);\n }\n if (Number.isFinite(opts.minZoom)) {\n this._minZoom = Math.ceil(opts.minZoom as number);\n }\n }\n\n // Clean up any outstanding tile requests.\n finalize(): void {\n for (const tile of this._cache.values()) {\n if (tile.isLoading) {\n tile.abort();\n }\n }\n this._cache.clear();\n this._tiles = [];\n this._selectedTiles = null;\n }\n\n reloadAll(): void {\n for (const id of this._cache.keys()) {\n const tile = this._cache.get(id) as Tile2DHeader;\n if (!this._selectedTiles || !this._selectedTiles.includes(tile)) {\n this._cache.delete(id);\n } else {\n tile.setNeedsReload();\n }\n }\n }\n\n /**\n * Update the cache with the given viewport and model matrix and triggers callback onUpdate.\n */\n update(\n viewport: Viewport,\n {zRange, modelMatrix}: {zRange?: ZRange; modelMatrix?: Matrix4} = {}\n ): number {\n const modelMatrixAsMatrix4 = new Matrix4(modelMatrix);\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n if (\n !this._viewport ||\n !viewport.equals(this._viewport) ||\n !equals(this._zRange, zRange) ||\n isModelMatrixNew\n ) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\n this._zRange = zRange;\n const tileIndices = this.getTileIndices({\n viewport,\n maxZoom: this._maxZoom,\n minZoom: this._minZoom,\n zRange,\n modelMatrix: this._modelMatrix,\n modelMatrixInverse: this._modelMatrixInverse\n });\n this._selectedTiles = tileIndices.map(index => this._getTile(index, true));\n\n if (this._dirty) {\n // Some new tiles are added\n this._rebuildTree();\n }\n // Check for needed reloads explicitly even if the view/matrix has not changed.\n } else if (this.needsReload) {\n this._selectedTiles = this._selectedTiles!.map(tile => this._getTile(tile.index, true));\n }\n\n // Update tile states\n const changed = this.updateTileStates();\n this._pruneRequests();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n isTileVisible(\n tile: Tile2DHeader,\n cullRect?: {x: number; y: number; width: number; height: number}\n ): boolean {\n if (!tile.isVisible) {\n return false;\n }\n\n if (cullRect && this._viewport) {\n const [minX, minY, maxX, maxY] = getCullBounds({\n viewport: this._viewport,\n z: this._zRange,\n cullRect\n });\n const {bbox} = tile;\n if ('west' in bbox) {\n return bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;\n }\n // top/bottom could be swapped depending on the indexing system\n const y0 = Math.min(bbox.top, bbox.bottom);\n const y1 = Math.max(bbox.top, bbox.bottom);\n return bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;\n }\n return true;\n }\n\n /* Public interface for subclassing */\n\n /** Returns array of tile indices in the current viewport */\n getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n modelMatrix,\n modelMatrixInverse\n }: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | undefined;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n }): TileIndex[] {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent: extent as Bounds | undefined,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n /** Returns unique string key for a tile index */\n getTileId(index: TileIndex) {\n return `${index.x}-${index.y}-${index.z}`;\n }\n\n /** Returns a zoom level for a tile index */\n getTileZoom(index: TileIndex) {\n return index.z;\n }\n\n /** Returns additional metadata to add to tile, bbox by default */\n getTileMetadata(index: TileIndex): Record {\n const {tileSize} = this.opts;\n // @ts-expect-error\n return {bbox: tileToBoundingBox(this._viewport, index.x, index.y, index.z, tileSize)};\n }\n\n /** Returns index of the parent tile */\n getParentIndex(index: TileIndex) {\n const x = Math.floor(index.x / 2);\n const y = Math.floor(index.y / 2);\n const z = index.z - 1;\n return {x, y, z};\n }\n\n // Returns true if any tile's visibility changed\n private updateTileStates() {\n const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n const visibilities = new Array(this._cache.size);\n let i = 0;\n // Reset state\n for (const tile of this._cache.values()) {\n // save previous state\n visibilities[i++] = tile.isVisible;\n tile.isSelected = false;\n tile.isVisible = false;\n }\n // @ts-expect-error called only when _selectedTiles is already defined\n for (const tile of this._selectedTiles) {\n tile.isSelected = true;\n tile.isVisible = true;\n }\n\n // Strategy-specific state logic\n (typeof refinementStrategy === 'function'\n ? refinementStrategy\n : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));\n\n i = 0;\n // Check if any visibility has changed\n for (const tile of this._cache.values()) {\n if (visibilities[i++] !== tile.isVisible) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Private methods */\n\n private _getCullBounds = memoize(getCullBounds);\n\n private _pruneRequests(): void {\n const {maxRequests} = this.opts;\n\n const abortCandidates: Tile2DHeader[] = [];\n let ongoingRequestCount = 0;\n for (const tile of this._cache.values()) {\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift()!;\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n // This needs to be called every time some tiles have been added/removed from cache\n private _rebuildTree() {\n const {_cache} = this;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.parent = null;\n if (tile.children) {\n tile.children.length = 0;\n }\n }\n\n // Rebuild tree\n for (const tile of _cache.values()) {\n const parent = this._getNearestAncestor(tile);\n tile.parent = parent;\n if (parent?.children) {\n parent.children.push(tile);\n }\n }\n }\n\n /**\n * Clear tiles that are not visible when the cache is full\n */\n /* eslint-disable complexity */\n private _resizeCache() {\n const {_cache, opts} = this;\n\n const maxCacheSize =\n opts.maxCacheSize ||\n // @ts-expect-error called only when selectedTiles is initialized\n (opts.maxCacheByteSize ? Infinity : DEFAULT_CACHE_SCALE * this.selectedTiles.length);\n const maxCacheByteSize = opts.maxCacheByteSize || Infinity;\n\n const overflown = _cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;\n\n if (overflown) {\n for (const [id, tile] of _cache) {\n if (!tile.isVisible) {\n // delete tile\n this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;\n _cache.delete(id);\n this.opts.onTileUnload(tile);\n }\n if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {\n break;\n }\n }\n this._rebuildTree();\n this._dirty = true;\n }\n if (this._dirty) {\n // sort by zoom level so that smaller tiles are displayed on top\n this._tiles = Array.from(this._cache.values()).sort((t1, t2) => t1.zoom - t2.zoom);\n\n this._dirty = false;\n }\n }\n /* eslint-enable complexity */\n\n private _getTile(index: TileIndex, create: true): Tile2DHeader;\n private _getTile(index: TileIndex, create?: false): Tile2DHeader | undefined;\n private _getTile(index: TileIndex, create?: boolean): Tile2DHeader | undefined {\n const id = this.getTileId(index);\n let tile = this._cache.get(id);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new Tile2DHeader(index);\n Object.assign(tile, this.getTileMetadata(tile.index));\n Object.assign(tile, {id, zoom: this.getTileZoom(tile.index)});\n needsReload = true;\n this._cache.set(id, tile);\n this._dirty = true;\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n if (tile && needsReload) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n tile.loadData({\n getData: this.opts.getTileData,\n requestScheduler: this._requestScheduler,\n onLoad: this.onTileLoad,\n onError: this.opts.onTileError\n });\n }\n\n return tile;\n }\n\n _getNearestAncestor(tile: Tile2DHeader): Tile2DHeader | null {\n const {_minZoom = 0} = this;\n\n let index = tile.index;\n while (this.getTileZoom(index) > _minZoom) {\n index = this.getParentIndex(index);\n const parent = this._getTile(index);\n if (parent) {\n return parent;\n }\n }\n return null;\n }\n}\n\n/* -- Refinement strategies --*/\n/* eslint-disable max-depth */\n\n// For all the selected && pending tiles:\n// - pick the closest ancestor as placeholder\n// - if no ancestor is visible, pick the closest children as placeholder\nfunction updateTileStateDefault(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n for (const tile of allTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n }\n}\n\n// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder\nfunction updateTileStateReplace(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected) {\n getPlaceholderInAncestors(tile);\n }\n }\n // Always process parents first\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.zoom - t2.zoom);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n\n if (tile.children && (tile.isVisible || tile.state! & TILE_STATE_VISITED)) {\n // If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children\n for (const child of tile.children) {\n child.state = TILE_STATE_VISITED;\n }\n } else if (tile.isSelected) {\n getPlaceholderInChildren(tile);\n }\n }\n}\n\n// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.\nfunction getPlaceholderInAncestors(startTile: Tile2DHeader) {\n let tile: Tile2DHeader | null = startTile;\n while (tile) {\n if (tile.isLoaded || tile.content) {\n tile.state! |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n if (child.isLoaded || child.content) {\n child.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n }\n}\n","import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayerProps,\n UpdateParameters,\n PickingInfo,\n GetPickingInfoParams,\n DefaultProps,\n FilterContext,\n _flatten as flatten\n} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {LayersList} from '@deck.gl/core';\nimport Tile2DHeader from './tile-2d-header';\n\nimport Tileset2D, {RefinementStrategy, STRATEGY_DEFAULT, Tileset2DProps} from './tileset-2d';\nimport {TileLoadProps, ZRange} from './types';\nimport {urlType, getURLFromTemplate} from './utils';\n\nconst defaultProps: DefaultProps = {\n TilesetClass: Tileset2D,\n data: {type: 'data', value: []},\n dataComparator: urlType.equals,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},\n getTileData: {type: 'function', optional: true, value: null, compare: false},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null, compare: false},\n onTileLoad: {type: 'function', value: tile => {}, compare: false},\n onTileUnload: {type: 'function', value: tile => {}, compare: false},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err), compare: false},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\n/** All props supported by the TileLayer */\nexport type TileLayerProps = CompositeLayerProps & _TileLayerProps;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps = {\n /**\n * Optionally implement a custom indexing scheme.\n */\n TilesetClass: typeof Tileset2D;\n /**\n * Renders one or an array of Layer instances.\n */\n renderSubLayers?: (\n props: TileLayerProps & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader;\n }\n ) => Layer | null | LayersList;\n /**\n * If supplied, `getTileData` is called to retrieve the data of each tile.\n */\n getTileData?: ((props: TileLoadProps) => Promise | DataT) | null;\n\n /** Called when all tiles in the current viewport are loaded. */\n onViewportLoad?: ((tiles: Tile2DHeader[]) => void) | null;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader) => void;\n\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader) => void;\n\n /** Called when a tile failed to load. */\n onTileError?: (err: any) => void;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n\n /** The max zoom level of the layer's data.\n * @default null\n */\n maxZoom?: number | null;\n\n /** The min zoom level of the layer's data.\n * @default 0\n */\n minZoom?: number | null;\n\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n\n /**\n * The maximum memory used for caching tiles.\n *\n * @default null\n */\n maxCacheByteSize?: number | null;\n\n /**\n * How the tile layer refines the visibility of tiles.\n *\n * @default 'best-available'\n */\n refinementStrategy?: RefinementStrategy;\n\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n\n /**\n * The maximum number of concurrent getTileData calls.\n *\n * @default 6\n */\n maxRequests?: number;\n\n /**\n * This offset changes the zoom level at which the tiles are fetched.\n *\n * Needs to be an integer.\n *\n * @default 0\n */\n zoomOffset?: number;\n};\n\nexport type TiledPickingInfo = PickingInfo & {\n tile?: Tile2DHeader;\n};\n\n/**\n * The TileLayer is a composite layer that makes it possible to visualize very large datasets.\n *\n * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.\n */\nexport default class TileLayer extends CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps>\n> {\n static defaultProps = defaultProps as any;\n static layerName = 'TileLayer';\n\n initializeState() {\n this.state = {\n tileset: null,\n isLoaded: false\n };\n }\n\n finalizeState() {\n this.state?.tileset?.finalize();\n }\n\n get isLoaded(): boolean {\n return this.state?.tileset?.selectedTiles.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n );\n }\n\n shouldUpdateState({changeFlags}): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({changeFlags}: UpdateParameters) {\n let {tileset} = this.state;\n const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;\n const dataChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n if (!tileset) {\n tileset = new this.props.TilesetClass(this._getTilesetOptions());\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions());\n\n if (dataChanged) {\n // reload all tiles\n // use cached layers until new content is loaded\n tileset.reloadAll();\n } else {\n // some render options changed, regenerate sub layers now\n this.state.tileset.tiles.forEach(tile => {\n tile.layers = null;\n });\n }\n }\n\n this._updateTileset();\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = this.props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\n zoomOffset,\n\n getTileData: this.getTileData.bind(this),\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this)\n };\n }\n\n private _updateTileset(): void {\n const {tileset} = this.state;\n const {zRange, modelMatrix} = this.props;\n const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});\n const {isLoaded} = tileset;\n\n const loadingStateChanged = this.state.isLoaded !== isLoaded;\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n\n if (isLoaded && (loadingStateChanged || tilesetChanged)) {\n this._onViewportLoad();\n }\n\n if (tilesetChanged) {\n // Save the tileset frame number - trigger a rerender\n this.setState({frameNumber});\n }\n // Save the loaded state - should not trigger a rerender\n this.state.isLoaded = isLoaded;\n }\n\n _onViewportLoad(): void {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n onViewportLoad(tileset.selectedTiles);\n }\n }\n\n _onTileLoad(tile: Tile2DHeader): void {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error: any, tile: Tile2DHeader) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile: Tile2DHeader) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile: TileLoadProps): Promise | DataT | null {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (fetch && tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader;\n }\n ): Layer | null | LayersList {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Partial | null {\n return null;\n }\n\n getPickingInfo({info, sourceLayer}: GetPickingInfoParams): TiledPickingInfo {\n (info as any).tile = (sourceLayer as any).props.tile;\n return info;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n if (info.sourceLayer) {\n info.sourceLayer.updateAutoHighlight(info);\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n return this.state.tileset.tiles.map((tile: Tile2DHeader) => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n id: `${this.id}-${tile.id}`,\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = (flatten(layers, Boolean) as Layer<{tile?: Tile2DHeader}>[]).map(layer =>\n layer.clone({\n tile,\n ...subLayerProps\n })\n );\n } else if (\n subLayerProps &&\n tile.layers[0] &&\n Object.keys(subLayerProps).some(\n propName => tile.layers![0].props[propName] !== subLayerProps[propName]\n )\n ) {\n tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer, cullRect}: FilterContext) {\n const {tile} = (layer as Layer<{tile: Tile2DHeader}>).props;\n return this.state.tileset.isTileVisible(tile, cullRect);\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type {NumericArray} from '@math.gl/core';\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport {PathLayer, PathLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps = {\n fadeTrail: true,\n trailLength: {type: 'number', value: 120, min: 0},\n currentTime: {type: 'number', value: 0, min: 0},\n getTimestamps: {type: 'accessor', value: d => d.timestamps}\n};\n\n/** All properties supported by TripsLayer. */\nexport type TripsLayerProps = _TripsLayerProps & PathLayerProps;\n\n/** Properties added by TripsLayer. */\ntype _TripsLayerProps = {\n /**\n * Whether or not the path fades out.\n * @default true\n */\n fadeTrail?: boolean;\n /**\n * Trail length.\n * @default 120\n */\n trailLength?: number;\n /**\n * The current time of the frame.\n * @default 0\n */\n currentTime?: number;\n /**\n * Timestamp accessor.\n */\n getTimestamps?: AccessorFunction;\n};\n\n/** Render animated paths that represent vehicle trips. */\nexport default class TripsLayer extends PathLayer<\n DataT,\n Required<_TripsLayerProps> & ExtraProps\n> {\n static layerName = 'TripsLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n shaders.inject = {\n 'vs:#decl': `\\\nuniform float trailLength;\nattribute float instanceTimestamps;\nattribute float instanceNextTimestamps;\nvarying float vTime;\n`,\n // Timestamp of the vertex\n 'vs:#main-end': `\\\nvTime = instanceTimestamps + (instanceNextTimestamps - instanceTimestamps) * vPathPosition.y / vPathLength;\n`,\n 'fs:#decl': `\\\nuniform bool fadeTrail;\nuniform float trailLength;\nuniform float currentTime;\nvarying float vTime;\n`,\n // Drop the segments outside of the time window\n 'fs:#main-start': `\\\nif(vTime > currentTime || (fadeTrail && (vTime < currentTime - trailLength))) {\n discard;\n}\n`,\n // Fade the color (currentTime - 100%, end of trail - 0%)\n 'fs:DECKGL_FILTER_COLOR': `\\\nif(fadeTrail) {\n color.a *= 1.0 - (currentTime - vTime) / trailLength;\n}\n`\n };\n return shaders;\n }\n\n initializeState() {\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n attributeManager!.addInstanced({\n timestamps: {\n size: 1,\n accessor: 'getTimestamps',\n shaderAttributes: {\n instanceTimestamps: {\n vertexOffset: 0\n },\n instanceNextTimestamps: {\n vertexOffset: 1\n }\n }\n }\n });\n }\n\n draw(params) {\n const {fadeTrail, trailLength, currentTime} = this.props;\n\n params.uniforms = {\n ...params.uniforms,\n fadeTrail,\n trailLength,\n currentTime\n };\n\n super.draw(params);\n }\n}\n","var libh3 = function (libh3) {\n libh3 = libh3 || {};\n var Module = typeof libh3 !== \"undefined\" ? libh3 : {};\n var moduleOverrides = {};\n var key;\n\n for (key in Module) {\n if (Module.hasOwnProperty(key)) {\n moduleOverrides[key] = Module[key];\n }\n }\n\n var arguments_ = [];\n var scriptDirectory = \"\";\n\n function locateFile(path) {\n if (Module[\"locateFile\"]) {\n return Module[\"locateFile\"](path, scriptDirectory);\n }\n\n return scriptDirectory + path;\n }\n\n var readAsync;\n\n {\n if (document.currentScript) {\n scriptDirectory = document.currentScript.src;\n }\n\n if (scriptDirectory.indexOf(\"blob:\") !== 0) {\n scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf(\"/\") + 1);\n } else {\n scriptDirectory = \"\";\n }\n\n readAsync = function readAsync(url, onload, onerror) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, true);\n xhr.responseType = \"arraybuffer\";\n\n xhr.onload = function xhr_onload() {\n if (xhr.status == 200 || xhr.status == 0 && xhr.response) {\n onload(xhr.response);\n return;\n }\n\n var data = tryParseAsDataURI(url);\n\n if (data) {\n onload(data.buffer);\n return;\n }\n\n onerror();\n };\n\n xhr.onerror = onerror;\n xhr.send(null);\n };\n }\n\n var out = Module[\"print\"] || console.log.bind(console);\n var err = Module[\"printErr\"] || console.warn.bind(console);\n\n for (key in moduleOverrides) {\n if (moduleOverrides.hasOwnProperty(key)) {\n Module[key] = moduleOverrides[key];\n }\n }\n\n moduleOverrides = null;\n if (Module[\"arguments\"]) { arguments_ = Module[\"arguments\"]; }\n\n var tempRet0 = 0;\n\n var setTempRet0 = function (value) {\n tempRet0 = value;\n };\n\n var getTempRet0 = function () {\n return tempRet0;\n };\n\n var GLOBAL_BASE = 8;\n\n function setValue(ptr, value, type, noSafe) {\n type = type || \"i8\";\n if (type.charAt(type.length - 1) === \"*\") { type = \"i32\"; }\n\n switch (type) {\n case \"i1\":\n HEAP8[ptr >> 0] = value;\n break;\n\n case \"i8\":\n HEAP8[ptr >> 0] = value;\n break;\n\n case \"i16\":\n HEAP16[ptr >> 1] = value;\n break;\n\n case \"i32\":\n HEAP32[ptr >> 2] = value;\n break;\n\n case \"i64\":\n 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];\n break;\n\n case \"float\":\n HEAPF32[ptr >> 2] = value;\n break;\n\n case \"double\":\n HEAPF64[ptr >> 3] = value;\n break;\n\n default:\n abort(\"invalid type for setValue: \" + type);\n }\n }\n\n function getValue(ptr, type, noSafe) {\n type = type || \"i8\";\n if (type.charAt(type.length - 1) === \"*\") { type = \"i32\"; }\n\n switch (type) {\n case \"i1\":\n return HEAP8[ptr >> 0];\n\n case \"i8\":\n return HEAP8[ptr >> 0];\n\n case \"i16\":\n return HEAP16[ptr >> 1];\n\n case \"i32\":\n return HEAP32[ptr >> 2];\n\n case \"i64\":\n return HEAP32[ptr >> 2];\n\n case \"float\":\n return HEAPF32[ptr >> 2];\n\n case \"double\":\n return HEAPF64[ptr >> 3];\n\n default:\n abort(\"invalid type for getValue: \" + type);\n }\n\n return null;\n }\n\n var ABORT = false;\n\n function assert(condition, text) {\n if (!condition) {\n abort(\"Assertion failed: \" + text);\n }\n }\n\n function getCFunc(ident) {\n var func = Module[\"_\" + ident];\n assert(func, \"Cannot call unknown function \" + ident + \", make sure it is exported\");\n return func;\n }\n\n function ccall(ident, returnType, argTypes, args, opts) {\n var toC = {\n \"string\": function (str) {\n var ret = 0;\n\n if (str !== null && str !== undefined && str !== 0) {\n var len = (str.length << 2) + 1;\n ret = stackAlloc(len);\n stringToUTF8(str, ret, len);\n }\n\n return ret;\n },\n \"array\": function (arr) {\n var ret = stackAlloc(arr.length);\n writeArrayToMemory(arr, ret);\n return ret;\n }\n };\n\n function convertReturnValue(ret) {\n if (returnType === \"string\") { return UTF8ToString(ret); }\n if (returnType === \"boolean\") { return Boolean(ret); }\n return ret;\n }\n\n var func = getCFunc(ident);\n var cArgs = [];\n var stack = 0;\n\n if (args) {\n for (var i = 0; i < args.length; i++) {\n var converter = toC[argTypes[i]];\n\n if (converter) {\n if (stack === 0) { stack = stackSave(); }\n cArgs[i] = converter(args[i]);\n } else {\n cArgs[i] = args[i];\n }\n }\n }\n\n var ret = func.apply(null, cArgs);\n ret = convertReturnValue(ret);\n if (stack !== 0) { stackRestore(stack); }\n return ret;\n }\n\n function cwrap(ident, returnType, argTypes, opts) {\n argTypes = argTypes || [];\n var numericArgs = argTypes.every(function (type) {\n return type === \"number\";\n });\n var numericRet = returnType !== \"string\";\n\n if (numericRet && numericArgs && !opts) {\n return getCFunc(ident);\n }\n\n return function () {\n return ccall(ident, returnType, argTypes, arguments, opts);\n };\n }\n var UTF8Decoder = typeof TextDecoder !== \"undefined\" ? new TextDecoder(\"utf8\") : undefined;\n\n function UTF8ArrayToString(u8Array, idx, maxBytesToRead) {\n var endIdx = idx + maxBytesToRead;\n var endPtr = idx;\n\n while (u8Array[endPtr] && !(endPtr >= endIdx)) { ++endPtr; }\n\n if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\n return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\n } else {\n var str = \"\";\n\n while (idx < endPtr) {\n var u0 = u8Array[idx++];\n\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n\n var u1 = u8Array[idx++] & 63;\n\n if ((u0 & 224) == 192) {\n str += String.fromCharCode((u0 & 31) << 6 | u1);\n continue;\n }\n\n var u2 = u8Array[idx++] & 63;\n\n if ((u0 & 240) == 224) {\n u0 = (u0 & 15) << 12 | u1 << 6 | u2;\n } else {\n u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u8Array[idx++] & 63;\n }\n\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n var ch = u0 - 65536;\n str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);\n }\n }\n }\n\n return str;\n }\n\n function UTF8ToString(ptr, maxBytesToRead) {\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : \"\";\n }\n\n function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\n if (!(maxBytesToWrite > 0)) { return 0; }\n var startIdx = outIdx;\n var endIdx = outIdx + maxBytesToWrite - 1;\n\n for (var i = 0; i < str.length; ++i) {\n var u = str.charCodeAt(i);\n\n if (u >= 55296 && u <= 57343) {\n var u1 = str.charCodeAt(++i);\n u = 65536 + ((u & 1023) << 10) | u1 & 1023;\n }\n\n if (u <= 127) {\n if (outIdx >= endIdx) { break; }\n outU8Array[outIdx++] = u;\n } else if (u <= 2047) {\n if (outIdx + 1 >= endIdx) { break; }\n outU8Array[outIdx++] = 192 | u >> 6;\n outU8Array[outIdx++] = 128 | u & 63;\n } else if (u <= 65535) {\n if (outIdx + 2 >= endIdx) { break; }\n outU8Array[outIdx++] = 224 | u >> 12;\n outU8Array[outIdx++] = 128 | u >> 6 & 63;\n outU8Array[outIdx++] = 128 | u & 63;\n } else {\n if (outIdx + 3 >= endIdx) { break; }\n outU8Array[outIdx++] = 240 | u >> 18;\n outU8Array[outIdx++] = 128 | u >> 12 & 63;\n outU8Array[outIdx++] = 128 | u >> 6 & 63;\n outU8Array[outIdx++] = 128 | u & 63;\n }\n }\n\n outU8Array[outIdx] = 0;\n return outIdx - startIdx;\n }\n\n function stringToUTF8(str, outPtr, maxBytesToWrite) {\n return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\n }\n\n var UTF16Decoder = typeof TextDecoder !== \"undefined\" ? new TextDecoder(\"utf-16le\") : undefined;\n\n function writeArrayToMemory(array, buffer) {\n HEAP8.set(array, buffer);\n }\n\n function alignUp(x, multiple) {\n if (x % multiple > 0) {\n x += multiple - x % multiple;\n }\n\n return x;\n }\n\n var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\n\n function updateGlobalBufferAndViews(buf) {\n buffer = buf;\n Module[\"HEAP8\"] = HEAP8 = new Int8Array(buf);\n Module[\"HEAP16\"] = HEAP16 = new Int16Array(buf);\n Module[\"HEAP32\"] = HEAP32 = new Int32Array(buf);\n Module[\"HEAPU8\"] = HEAPU8 = new Uint8Array(buf);\n Module[\"HEAPU16\"] = HEAPU16 = new Uint16Array(buf);\n Module[\"HEAPU32\"] = HEAPU32 = new Uint32Array(buf);\n Module[\"HEAPF32\"] = HEAPF32 = new Float32Array(buf);\n Module[\"HEAPF64\"] = HEAPF64 = new Float64Array(buf);\n }\n\n var DYNAMIC_BASE = 5266928,\n DYNAMICTOP_PTR = 24016;\n var INITIAL_TOTAL_MEMORY = Module[\"TOTAL_MEMORY\"] || 33554432;\n\n if (Module[\"buffer\"]) {\n buffer = Module[\"buffer\"];\n } else {\n buffer = new ArrayBuffer(INITIAL_TOTAL_MEMORY);\n }\n\n INITIAL_TOTAL_MEMORY = buffer.byteLength;\n updateGlobalBufferAndViews(buffer);\n HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE;\n\n function callRuntimeCallbacks(callbacks) {\n while (callbacks.length > 0) {\n var callback = callbacks.shift();\n\n if (typeof callback == \"function\") {\n callback();\n continue;\n }\n\n var func = callback.func;\n\n if (typeof func === \"number\") {\n if (callback.arg === undefined) {\n Module[\"dynCall_v\"](func);\n } else {\n Module[\"dynCall_vi\"](func, callback.arg);\n }\n } else {\n func(callback.arg === undefined ? null : callback.arg);\n }\n }\n }\n\n var __ATPRERUN__ = [];\n var __ATINIT__ = [];\n var __ATMAIN__ = [];\n var __ATPOSTRUN__ = [];\n\n function preRun() {\n if (Module[\"preRun\"]) {\n if (typeof Module[\"preRun\"] == \"function\") { Module[\"preRun\"] = [Module[\"preRun\"]]; }\n\n while (Module[\"preRun\"].length) {\n addOnPreRun(Module[\"preRun\"].shift());\n }\n }\n\n callRuntimeCallbacks(__ATPRERUN__);\n }\n\n function initRuntime() {\n callRuntimeCallbacks(__ATINIT__);\n }\n\n function preMain() {\n callRuntimeCallbacks(__ATMAIN__);\n }\n\n function postRun() {\n if (Module[\"postRun\"]) {\n if (typeof Module[\"postRun\"] == \"function\") { Module[\"postRun\"] = [Module[\"postRun\"]]; }\n\n while (Module[\"postRun\"].length) {\n addOnPostRun(Module[\"postRun\"].shift());\n }\n }\n\n callRuntimeCallbacks(__ATPOSTRUN__);\n }\n\n function addOnPreRun(cb) {\n __ATPRERUN__.unshift(cb);\n }\n\n function addOnPostRun(cb) {\n __ATPOSTRUN__.unshift(cb);\n }\n\n var Math_abs = Math.abs;\n var Math_ceil = Math.ceil;\n var Math_floor = Math.floor;\n var Math_min = Math.min;\n var runDependencies = 0;\n var runDependencyWatcher = null;\n var dependenciesFulfilled = null;\n\n function addRunDependency(id) {\n runDependencies++;\n\n if (Module[\"monitorRunDependencies\"]) {\n Module[\"monitorRunDependencies\"](runDependencies);\n }\n }\n\n function removeRunDependency(id) {\n runDependencies--;\n\n if (Module[\"monitorRunDependencies\"]) {\n Module[\"monitorRunDependencies\"](runDependencies);\n }\n\n if (runDependencies == 0) {\n if (runDependencyWatcher !== null) {\n clearInterval(runDependencyWatcher);\n runDependencyWatcher = null;\n }\n\n if (dependenciesFulfilled) {\n var callback = dependenciesFulfilled;\n dependenciesFulfilled = null;\n callback();\n }\n }\n }\n\n Module[\"preloadedImages\"] = {};\n Module[\"preloadedAudios\"] = {};\n var memoryInitializer = null;\n var dataURIPrefix = \"data:application/octet-stream;base64,\";\n\n function isDataURI(filename) {\n return String.prototype.startsWith ? filename.startsWith(dataURIPrefix) : filename.indexOf(dataURIPrefix) === 0;\n }\n\n var tempDouble;\n var tempI64;\n memoryInitializer = \"data:application/octet-stream;base64,AAAAAAAAAAACAAAAAwAAAAEAAAAFAAAABAAAAAYAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAABAAAABAAAAAMAAAAGAAAABQAAAAIAAAAAAAAAAgAAAAMAAAABAAAABAAAAAYAAAAAAAAABQAAAAMAAAAGAAAABAAAAAUAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAAAAAAAgAAAAMAAAABAAAABQAAAAIAAAAAAAAAAQAAAAMAAAAGAAAABAAAAAYAAAAAAAAABQAAAAIAAAABAAAABAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAAAAAAAAAAAAIAAAAAAAAAAQAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABgAAAAAAAAAFAAAAAAAAAAAAAAAEAAAABQAAAAAAAAAAAAAAAAAAAAIAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAAAAAACAAAAAwAAAAQAAAAFAAAABgAAAAAAAAABAAAAAwAAAAQAAAAFAAAABgAAAAAAAAABAAAAAgAAAAQAAAAFAAAABgAAAAAAAAABAAAAAgAAAAMAAAAFAAAABgAAAAAAAAABAAAAAgAAAAMAAAAEAAAABgAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAABgAAAAAAAAADAAAAAgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAUAAAAEAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAEAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAACAAAABAAAAAMAAAAIAAAA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AAAAAAAAAAAAAAAABQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAAFAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAADAAAABQAAAAEAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAABQAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAABQAAAAAAAAAAAAAABQAAAAUAAAAAAAAAAAAAAP////8BAAAAAAAAAAMAAAAEAAAAAgAAAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAABQAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAQAAAP//////////AQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAIAAAAAAAAAAAAAAAEAAAACAAAABgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAoAAAACAAAAAAAAAAAAAAABAAAAAQAAAAUAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAIAAAAAAAAAAAAAAAEAAAADAAAABwAAAAYAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAHAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAABAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAgAAAAAAAAAAAAAAAQAAAAAAAAAJAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAwAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAgAAAAAAAAAAAAAAAQAAAAQAAAAIAAAACgAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAACAAAAAAAAAAAAAAABAAAACwAAAA8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA4AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAgAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAACAAAAAAAAAAAAAAABAAAADAAAABAAAAAMAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAEAAAAKAAAAEwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAgAAAAAAAAAAAAAAAQAAAA0AAAARAAAADQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABEAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAIAAAAAAAAAAAAAAAEAAAAOAAAAEgAAAA8AAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAPAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABMAAAACAAAAAAAAAAAAAAABAAAA//////////8TAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAASAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABIAAAAAAAAAGAAAAAAAAAAhAAAAAAAAAB4AAAAAAAAAIAAAAAMAAAAxAAAAAQAAADAAAAADAAAAMgAAAAMAAAAIAAAAAAAAAAUAAAAFAAAACgAAAAUAAAAWAAAAAAAAABAAAAAAAAAAEgAAAAAAAAApAAAAAQAAACEAAAAAAAAAHgAAAAAAAAAEAAAAAAAAAAAAAAAFAAAAAgAAAAUAAAAPAAAAAQAAAAgAAAAAAAAABQAAAAUAAAAfAAAAAQAAABYAAAAAAAAAEAAAAAAAAAACAAAAAAAAAAYAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAsAAAAAAAAAEQAAAAMAAAAYAAAAAQAAABcAAAADAAAAGQAAAAMAAAAAAAAAAAAAAAEAAAAFAAAACQAAAAUAAAAFAAAAAAAAAAIAAAAAAAAABgAAAAAAAAASAAAAAQAAAAoAAAAAAAAACwAAAAAAAAAEAAAAAQAAAAMAAAAFAAAABwAAAAUAAAAIAAAAAQAAAAAAAAAAAAAAAQAAAAUAAAAQAAAAAQAAAAUAAAAAAAAAAgAAAAAAAAAHAAAAAAAAABUAAAAAAAAAJgAAAAAAAAAJAAAAAAAAABMAAAAAAAAAIgAAAAMAAAAOAAAAAQAAABQAAAADAAAAJAAAAAMAAAADAAAAAAAAAA0AAAAFAAAAHQAAAAUAAAABAAAAAAAAAAcAAAAAAAAAFQAAAAAAAAAGAAAA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74auECWhw7+cjSACjzniv8CZ+wUhN9I/1uGEKzup6z+/GYr/04bavwmkNHp7xee/F2NMZVAA1z+82s+x2BLivwr2ytbJ9em/KwEH1sMS1r8yp/2LhTfev81i5RexJsy/BlIKPVwR5b95Wyu0/Qjnv5DjoT7YYcs/nBhKZ6zrwr8wRYS7Nebuv3OW6geh+Lu/SLrixebL3j+pcyymN9Xrv8rHIFfWehZAMBwUdlo0DECTUc17EOb2PxpVB1SWChdAzjbhb9pTDUDQhmdvECX5P9FlMKCC9+g/IIAzjELgE0DajDngMv8GQFhWDmDPjNs/y1guLh96EkAxPi8k7DIEQJCc4URlhRhA3eLKKLwkEECqpNAyTBD/P6xpjXcDiwVAFtl//cQm4z+Ibt3XKiYTQM7mCLUb3QdAoM1t8yVv7D8aLZv2Nk8UQEAJPV5nQwxAtSsfTCoE9z9TPjXLXIIWQBVanC5W9AtAYM3d7Adm9j++5mQz1FoWQBUThyaVBghAwH5muQsV7T89Q1qv82MUQJoWGOfNuBdAzrkClkmwDkDQjKq77t37Py+g0dtitsE/ZwAMTwVPEUBojepluNwBQGYbtuW+t9w/HNWIJs6MEkDTNuQUSlgEQKxktPP5TcQ/ixbLB8JjEUCwuWjXMQYCQAS/R09FkRdAowpiZjhhDkB7LmlczD/7P01iQmhhsAVAnrtTwDy84z/Z6jfQ2TgTQChOCXMnWwpAhrW3daoz8z/HYJvVPI4VQLT3ik5FcA5Angi7LOZd+z+NNVzDy5gXQBXdvVTFUA1AYNMgOeYe+T8+qHXGCwkXQKQTOKwa5AJA8gFVoEMW0T+FwzJyttIRQAEAAAD/////BwAAAP////8xAAAA/////1cBAAD/////YQkAAP////+nQQAA/////5HLAQD/////95AMAP/////B9lcAAAAAAAAAAAAAAAAAAgAAAP////8OAAAA/////2IAAAD/////rgIAAP/////CEgAA/////06DAAD/////IpcDAP/////uIRkA/////4LtrwAAAAAAAAAAAAAAAAAAAAAAAgAAAP//////////AQAAAAMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////wIAAAD//////////wEAAAAAAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA/////////////////////wEAAAD///////////////8CAAAA////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD///////////////////////////////8CAAAA////////////////AQAAAP////////////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAAAQAAAP//////////AgAAAP//////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAAEAAAD//////////wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAgAAAAAAAAACAAAAAQAAAAEAAAACAAAAAgAAAAAAAAAFAAAABQAAAAAAAAACAAAAAgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAABAAAAAgAAAAIAAAACAAAAAAAAAAUAAAAGAAAAAAAAAAIAAAACAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAEAAAADAAAAAgAAAAIAAAAAAAAABQAAAAcAAAAAAAAAAgAAAAIAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAACAAAAAQAAAAQAAAACAAAAAgAAAAAAAAAFAAAACAAAAAAAAAACAAAAAgAAAAMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAACAAAAAAAAAAIAAAABAAAAAAAAAAIAAAACAAAAAAAAAAUAAAAJAAAAAAAAAAIAAAACAAAAAwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAACAAAAAAAAAAMAAAAOAAAAAgAAAAAAAAACAAAAAwAAAAAAAAAAAAAAAgAAAAIAAAADAAAABgAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAgAAAAIAAAAAAAAAAwAAAAoAAAACAAAAAAAAAAIAAAADAAAAAQAAAAAAAAACAAAAAgAAAAMAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAgAAAAAAAAADAAAACwAAAAIAAAAAAAAAAgAAAAMAAAACAAAAAAAAAAIAAAACAAAAAwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAACAAAAAAAAAAMAAAAMAAAAAgAAAAAAAAACAAAAAwAAAAMAAAAAAAAAAgAAAAIAAAADAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAgAAAAIAAAAAAAAAAwAAAA0AAAACAAAAAAAAAAIAAAADAAAABAAAAAAAAAACAAAAAgAAAAMAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAgAAAAAAAAADAAAABgAAAAIAAAAAAAAAAgAAAAMAAAAPAAAAAAAAAAIAAAACAAAAAwAAAAsAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAIAAAACAAAAAAAAAAMAAAAHAAAAAgAAAAAAAAACAAAAAwAAABAAAAAAAAAAAgAAAAIAAAADAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAgAAAAIAAAAAAAAAAwAAAAgAAAACAAAAAAAAAAIAAAADAAAAEQAAAAAAAAACAAAAAgAAAAMAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAACAAAAAgAAAAAAAAADAAAACQAAAAIAAAAAAAAAAgAAAAMAAAASAAAAAAAAAAIAAAACAAAAAwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAACQAAAAIAAAACAAAAAAAAAAMAAAAFAAAAAgAAAAAAAAACAAAAAwAAABMAAAAAAAAAAgAAAAIAAAADAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAUAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////8AAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAQAAAAAAAAAFAAAAAQAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAABAAEAAAEBAAAAAAABAAAAAQAAAAEAAQAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAAAAQAAAAMAAAAOAAAABgAAAAsAAAACAAAABwAAAAEAAAAYAAAABQAAAAoAAAABAAAABgAAAAAAAAAmAAAABwAAAAwAAAADAAAACAAAAAIAAAAxAAAACQAAAA4AAAAAAAAABQAAAAQAAAA6AAAACAAAAA0AAAAEAAAACQAAAAMAAAA/AAAACwAAAAYAAAAPAAAACgAAABAAAABIAAAADAAAAAcAAAAQAAAACwAAABEAAABTAAAACgAAAAUAAAATAAAADgAAAA8AAABhAAAADQAAAAgAAAARAAAADAAAABIAAABrAAAADgAAAAkAAAASAAAADQAAABMAAAB1AAAADwAAABMAAAARAAAAEgAAABAAAAAHAAAABwAAAAEAAAACAAAABAAAAAMAAAAAAAAAAAAAAAcAAAADAAAAAQAAAAIAAAAFAAAABAAAAAAAAAAAAAAAYWxnb3MuYwBfcG9seWZpbGxJbnRlcm5hbABhZGphY2VudEZhY2VEaXJbdG1wRmlqay5mYWNlXVtmaWprLmZhY2VdID09IEtJAGZhY2VpamsuYwBfZmFjZUlqa1BlbnRUb0dlb0JvdW5kYXJ5AGFkamFjZW50RmFjZURpcltjZW50ZXJJSksuZmFjZV1bZmFjZTJdID09IEtJAF9mYWNlSWprVG9HZW9Cb3VuZGFyeQBwb2x5Z29uLT5uZXh0ID09IE5VTEwAbGlua2VkR2VvLmMAYWRkTmV3TGlua2VkUG9seWdvbgBuZXh0ICE9IE5VTEwAbG9vcCAhPSBOVUxMAGFkZE5ld0xpbmtlZExvb3AAcG9seWdvbi0+Zmlyc3QgPT0gTlVMTABhZGRMaW5rZWRMb29wAGNvb3JkICE9IE5VTEwAYWRkTGlua2VkQ29vcmQAbG9vcC0+Zmlyc3QgPT0gTlVMTABpbm5lckxvb3BzICE9IE5VTEwAbm9ybWFsaXplTXVsdGlQb2x5Z29uAGJib3hlcyAhPSBOVUxMAGNhbmRpZGF0ZXMgIT0gTlVMTABmaW5kUG9seWdvbkZvckhvbGUAY2FuZGlkYXRlQkJveGVzICE9IE5VTEwAcmV2RGlyICE9IElOVkFMSURfRElHSVQAbG9jYWxpai5jAGgzVG9Mb2NhbElqawBiYXNlQ2VsbCAhPSBvcmlnaW5CYXNlQ2VsbAAhKG9yaWdpbk9uUGVudCAmJiBpbmRleE9uUGVudCkAcGVudGFnb25Sb3RhdGlvbnMgPj0gMABkaXJlY3Rpb25Sb3RhdGlvbnMgPj0gMABiYXNlQ2VsbCA9PSBvcmlnaW5CYXNlQ2VsbABiYXNlQ2VsbCAhPSBJTlZBTElEX0JBU0VfQ0VMTABsb2NhbElqa1RvSDMAIV9pc0Jhc2VDZWxsUGVudGFnb24oYmFzZUNlbGwpAGJhc2VDZWxsUm90YXRpb25zID49IDAAd2l0aGluUGVudGFnb25Sb3RhdGlvbnMgPj0gMABncmFwaC0+YnVja2V0cyAhPSBOVUxMAHZlcnRleEdyYXBoLmMAaW5pdFZlcnRleEdyYXBoAG5vZGUgIT0gTlVMTABhZGRWZXJ0ZXhOb2Rl\";\n var tempDoublePtr = 24032;\n\n function demangle(func) {\n return func;\n }\n\n function demangleAll(text) {\n var regex = /\\b__Z[\\w\\d_]+/g;\n return text.replace(regex, function (x) {\n var y = demangle(x);\n return x === y ? x : y + \" [\" + x + \"]\";\n });\n }\n\n function jsStackTrace() {\n var err = new Error();\n\n if (!err.stack) {\n try {\n throw new Error(0);\n } catch (e) {\n err = e;\n }\n\n if (!err.stack) {\n return \"(no stack trace available)\";\n }\n }\n\n return err.stack.toString();\n }\n\n function stackTrace() {\n var js = jsStackTrace();\n if (Module[\"extraStackTrace\"]) { js += \"\\n\" + Module[\"extraStackTrace\"](); }\n return demangleAll(js);\n }\n\n function ___assert_fail(condition, filename, line, func) {\n abort(\"Assertion failed: \" + UTF8ToString(condition) + \", at: \" + [filename ? UTF8ToString(filename) : \"unknown filename\", line, func ? UTF8ToString(func) : \"unknown function\"]);\n }\n\n function _emscripten_get_heap_size() {\n return HEAP8.length;\n }\n\n function _emscripten_memcpy_big(dest, src, num) {\n HEAPU8.set(HEAPU8.subarray(src, src + num), dest);\n }\n\n function ___setErrNo(value) {\n if (Module[\"___errno_location\"]) { HEAP32[Module[\"___errno_location\"]() >> 2] = value; }\n return value;\n }\n\n function abortOnCannotGrowMemory(requestedSize) {\n abort(\"OOM\");\n }\n\n function emscripten_realloc_buffer(size) {\n try {\n var newBuffer = new ArrayBuffer(size);\n if (newBuffer.byteLength != size) { return; }\n new Int8Array(newBuffer).set(HEAP8);\n\n _emscripten_replace_memory(newBuffer);\n\n updateGlobalBufferAndViews(newBuffer);\n return 1;\n } catch (e) {}\n }\n\n function _emscripten_resize_heap(requestedSize) {\n var oldSize = _emscripten_get_heap_size();\n\n var PAGE_MULTIPLE = 16777216;\n var LIMIT = 2147483648 - PAGE_MULTIPLE;\n\n if (requestedSize > LIMIT) {\n return false;\n }\n\n var MIN_TOTAL_MEMORY = 16777216;\n var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY);\n\n while (newSize < requestedSize) {\n if (newSize <= 536870912) {\n newSize = alignUp(2 * newSize, PAGE_MULTIPLE);\n } else {\n newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\n }\n }\n\n var replacement = emscripten_realloc_buffer(newSize);\n\n if (!replacement) {\n return false;\n }\n\n return true;\n }\n\n var decodeBase64 = typeof atob === \"function\" ? atob : function (input) {\n var keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n var output = \"\";\n var chr1, chr2, chr3;\n var enc1, enc2, enc3, enc4;\n var i = 0;\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n do {\n enc1 = keyStr.indexOf(input.charAt(i++));\n enc2 = keyStr.indexOf(input.charAt(i++));\n enc3 = keyStr.indexOf(input.charAt(i++));\n enc4 = keyStr.indexOf(input.charAt(i++));\n chr1 = enc1 << 2 | enc2 >> 4;\n chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n chr3 = (enc3 & 3) << 6 | enc4;\n output = output + String.fromCharCode(chr1);\n\n if (enc3 !== 64) {\n output = output + String.fromCharCode(chr2);\n }\n\n if (enc4 !== 64) {\n output = output + String.fromCharCode(chr3);\n }\n } while (i < input.length);\n\n return output;\n };\n\n function intArrayFromBase64(s) {\n try {\n var decoded = decodeBase64(s);\n var bytes = new Uint8Array(decoded.length);\n\n for (var i = 0; i < decoded.length; ++i) {\n bytes[i] = decoded.charCodeAt(i);\n }\n\n return bytes;\n } catch (_) {\n throw new Error(\"Converting base64 string to bytes failed.\");\n }\n }\n\n function tryParseAsDataURI(filename) {\n if (!isDataURI(filename)) {\n return;\n }\n\n return intArrayFromBase64(filename.slice(dataURIPrefix.length));\n }\n\n var asmGlobalArg = {\n \"Math\": Math,\n \"Int8Array\": Int8Array,\n \"Int32Array\": Int32Array,\n \"Uint8Array\": Uint8Array,\n \"Float32Array\": Float32Array,\n \"Float64Array\": Float64Array\n };\n var asmLibraryArg = {\n \"a\": abort,\n \"b\": setTempRet0,\n \"c\": getTempRet0,\n \"d\": ___assert_fail,\n \"e\": ___setErrNo,\n \"f\": _emscripten_get_heap_size,\n \"g\": _emscripten_memcpy_big,\n \"h\": _emscripten_resize_heap,\n \"i\": abortOnCannotGrowMemory,\n \"j\": demangle,\n \"k\": demangleAll,\n \"l\": emscripten_realloc_buffer,\n \"m\": jsStackTrace,\n \"n\": stackTrace,\n \"o\": tempDoublePtr,\n \"p\": DYNAMICTOP_PTR\n }; // EMSCRIPTEN_START_ASM\n\n var asm =\n /** @suppress {uselessCode} */\n function (global, env, buffer) {\n \"almost asm\";\n\n var a = new global.Int8Array(buffer),\n b = new global.Int32Array(buffer),\n c = new global.Uint8Array(buffer),\n d = new global.Float32Array(buffer),\n e = new global.Float64Array(buffer),\n g = env.p | 0,\n p = global.Math.floor,\n q = global.Math.abs,\n r = global.Math.sqrt,\n s = global.Math.pow,\n t = global.Math.cos,\n u = global.Math.sin,\n v = global.Math.tan,\n w = global.Math.acos,\n x = global.Math.asin,\n y = global.Math.atan,\n z = global.Math.atan2,\n A = global.Math.ceil,\n B = global.Math.imul,\n C = global.Math.min,\n D = global.Math.clz32,\n F = env.b,\n G = env.c,\n H = env.d,\n I = env.e,\n J = env.f,\n K = env.g,\n L = env.h,\n M = env.i,\n S = 24048;\n\n function V(newBuffer) {\n a = new Int8Array(newBuffer);\n c = new Uint8Array(newBuffer);\n b = new Int32Array(newBuffer);\n d = new Float32Array(newBuffer);\n e = new Float64Array(newBuffer);\n buffer = newBuffer;\n return true;\n } // EMSCRIPTEN_START_FUNCS\n\n\n function W(a) {\n a = a | 0;\n var b = 0;\n b = S;\n S = S + a | 0;\n S = S + 15 & -16;\n return b | 0;\n }\n\n function X() {\n return S | 0;\n }\n\n function Y(a) {\n a = a | 0;\n S = a;\n }\n\n function Z(a, b) {\n a = a | 0;\n b = b | 0;\n S = a;\n }\n\n function _(a) {\n a = a | 0;\n return (B(a * 3 | 0, a + 1 | 0) | 0) + 1 | 0;\n }\n\n function $(a, b, c, d) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0;\n if (!(ba(a, b, c, d, 0) | 0)) { return; }\n f = (B(c * 3 | 0, c + 1 | 0) | 0) + 1 | 0;\n hd(d | 0, 0, f << 3 | 0) | 0;\n e = Yc(f, 4) | 0;\n if (!e) { return; }\n ca(a, b, c, d, e, f, 0);\n Xc(e);\n return;\n }\n\n function aa(a, b, c, d, e) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0;\n if (!(ba(a, b, c, d, e) | 0)) { return; }\n f = (B(c * 3 | 0, c + 1 | 0) | 0) + 1 | 0;\n hd(d | 0, 0, f << 3 | 0) | 0;\n\n if (e | 0) {\n hd(e | 0, 0, f << 2 | 0) | 0;\n ca(a, b, c, d, e, f, 0);\n return;\n }\n\n e = Yc(f, 4) | 0;\n if (!e) { return; }\n ca(a, b, c, d, e, f, 0);\n Xc(e);\n return;\n }\n\n function ba(a, c, d, e, f) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n f = f | 0;\n var g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0;\n o = S;\n S = S + 16 | 0;\n n = o;\n g = e;\n b[g >> 2] = a;\n b[g + 4 >> 2] = c;\n g = (f | 0) != 0;\n if (g) { b[f >> 2] = 0; }\n\n if (Fb(a, c) | 0) {\n n = 1;\n S = o;\n return n | 0;\n }\n\n b[n >> 2] = 0;\n\n a: do { if ((d | 0) >= 1) {\n if (g) {\n k = 0;\n l = 1;\n m = 1;\n h = 0;\n g = a;\n\n while (1) {\n if (!(h | k)) {\n g = da(g, c, 4, n) | 0;\n c = G() | 0;\n\n if ((g | 0) == 0 & (c | 0) == 0) {\n g = 2;\n break a;\n }\n\n if (Fb(g, c) | 0) {\n g = 1;\n break a;\n }\n }\n\n g = da(g, c, b[16 + (k << 2) >> 2] | 0, n) | 0;\n c = G() | 0;\n\n if ((g | 0) == 0 & (c | 0) == 0) {\n g = 2;\n break a;\n }\n\n a = e + (m << 3) | 0;\n b[a >> 2] = g;\n b[a + 4 >> 2] = c;\n b[f + (m << 2) >> 2] = l;\n h = h + 1 | 0;\n a = (h | 0) == (l | 0);\n i = k + 1 | 0;\n j = (i | 0) == 6;\n\n if (Fb(g, c) | 0) {\n g = 1;\n break a;\n }\n\n l = l + (j & a & 1) | 0;\n\n if ((l | 0) > (d | 0)) {\n g = 0;\n break;\n } else {\n k = a ? j ? 0 : i : k;\n m = m + 1 | 0;\n h = a ? 0 : h;\n }\n }\n } else {\n k = 0;\n l = 1;\n m = 1;\n h = 0;\n g = a;\n\n while (1) {\n if (!(h | k)) {\n g = da(g, c, 4, n) | 0;\n c = G() | 0;\n\n if ((g | 0) == 0 & (c | 0) == 0) {\n g = 2;\n break a;\n }\n\n if (Fb(g, c) | 0) {\n g = 1;\n break a;\n }\n }\n\n g = da(g, c, b[16 + (k << 2) >> 2] | 0, n) | 0;\n c = G() | 0;\n\n if ((g | 0) == 0 & (c | 0) == 0) {\n g = 2;\n break a;\n }\n\n a = e + (m << 3) | 0;\n b[a >> 2] = g;\n b[a + 4 >> 2] = c;\n h = h + 1 | 0;\n a = (h | 0) == (l | 0);\n i = k + 1 | 0;\n j = (i | 0) == 6;\n\n if (Fb(g, c) | 0) {\n g = 1;\n break a;\n }\n\n l = l + (j & a & 1) | 0;\n\n if ((l | 0) > (d | 0)) {\n g = 0;\n break;\n } else {\n k = a ? j ? 0 : i : k;\n m = m + 1 | 0;\n h = a ? 0 : h;\n }\n }\n }\n } else { g = 0; } } while (0);\n\n n = g;\n S = o;\n return n | 0;\n }\n\n function ca(a, c, d, e, f, g, h) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n f = f | 0;\n g = g | 0;\n h = h | 0;\n var i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0;\n m = S;\n S = S + 16 | 0;\n l = m;\n\n if ((a | 0) == 0 & (c | 0) == 0) {\n S = m;\n return;\n }\n\n i = bd(a | 0, c | 0, g | 0, ((g | 0) < 0) << 31 >> 31 | 0) | 0;\n G() | 0;\n j = e + (i << 3) | 0;\n n = j;\n o = b[n >> 2] | 0;\n n = b[n + 4 >> 2] | 0;\n k = (o | 0) == (a | 0) & (n | 0) == (c | 0);\n if (!((o | 0) == 0 & (n | 0) == 0 | k)) { do {\n i = (i + 1 | 0) % (g | 0) | 0;\n j = e + (i << 3) | 0;\n o = j;\n n = b[o >> 2] | 0;\n o = b[o + 4 >> 2] | 0;\n k = (n | 0) == (a | 0) & (o | 0) == (c | 0);\n } while (!((n | 0) == 0 & (o | 0) == 0 | k)); }\n i = f + (i << 2) | 0;\n\n if (k ? (b[i >> 2] | 0) <= (h | 0) : 0) {\n S = m;\n return;\n }\n\n o = j;\n b[o >> 2] = a;\n b[o + 4 >> 2] = c;\n b[i >> 2] = h;\n\n if ((h | 0) >= (d | 0)) {\n S = m;\n return;\n }\n\n o = h + 1 | 0;\n b[l >> 2] = 0;\n n = da(a, c, 2, l) | 0;\n ca(n, G() | 0, d, e, f, g, o);\n b[l >> 2] = 0;\n n = da(a, c, 3, l) | 0;\n ca(n, G() | 0, d, e, f, g, o);\n b[l >> 2] = 0;\n n = da(a, c, 1, l) | 0;\n ca(n, G() | 0, d, e, f, g, o);\n b[l >> 2] = 0;\n n = da(a, c, 5, l) | 0;\n ca(n, G() | 0, d, e, f, g, o);\n b[l >> 2] = 0;\n n = da(a, c, 4, l) | 0;\n ca(n, G() | 0, d, e, f, g, o);\n b[l >> 2] = 0;\n n = da(a, c, 6, l) | 0;\n ca(n, G() | 0, d, e, f, g, o);\n S = m;\n return;\n }\n\n function da(a, c, d, e) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0;\n\n if ((b[e >> 2] | 0) > 0) {\n f = 0;\n\n do {\n d = Pa(d) | 0;\n f = f + 1 | 0;\n } while ((f | 0) < (b[e >> 2] | 0));\n }\n\n i = cd(a | 0, c | 0, 45) | 0;\n G() | 0;\n j = i & 127;\n g = Lb(a, c) | 0;\n f = cd(a | 0, c | 0, 52) | 0;\n G() | 0;\n f = f & 15;\n\n a: do { if (!f) { h = 6; }else { while (1) {\n m = (15 - f | 0) * 3 | 0;\n n = cd(a | 0, c | 0, m | 0) | 0;\n G() | 0;\n n = n & 7;\n o = (Rb(f) | 0) == 0;\n f = f + -1 | 0;\n l = dd(7, 0, m | 0) | 0;\n c = c & ~(G() | 0);\n m = dd(b[(o ? 464 : 48) + (n * 28 | 0) + (d << 2) >> 2] | 0, 0, m | 0) | 0;\n k = G() | 0;\n d = b[(o ? 672 : 256) + (n * 28 | 0) + (d << 2) >> 2] | 0;\n a = m | a & ~l;\n c = k | c;\n\n if (!d) {\n d = 0;\n break a;\n }\n\n if (!f) {\n h = 6;\n break;\n }\n } } } while (0);\n\n if ((h | 0) == 6) {\n o = b[880 + (j * 28 | 0) + (d << 2) >> 2] | 0;\n n = dd(o | 0, 0, 45) | 0;\n a = n | a;\n c = G() | 0 | c & -1040385;\n d = b[4304 + (j * 28 | 0) + (d << 2) >> 2] | 0;\n\n if ((o & 127 | 0) == 127) {\n o = dd(b[880 + (j * 28 | 0) + 20 >> 2] | 0, 0, 45) | 0;\n c = G() | 0 | c & -1040385;\n d = b[4304 + (j * 28 | 0) + 20 >> 2] | 0;\n a = Nb(o | a, c) | 0;\n c = G() | 0;\n b[e >> 2] = (b[e >> 2] | 0) + 1;\n }\n }\n\n h = cd(a | 0, c | 0, 45) | 0;\n G() | 0;\n h = h & 127;\n\n b: do { if (!(la(h) | 0)) {\n if ((d | 0) > 0) {\n f = 0;\n\n do {\n a = Nb(a, c) | 0;\n c = G() | 0;\n f = f + 1 | 0;\n } while ((f | 0) != (d | 0));\n }\n } else {\n c: do { if ((Lb(a, c) | 0) == 1) {\n if ((j | 0) != (h | 0)) { if (ra(h, b[7728 + (j * 28 | 0) >> 2] | 0) | 0) {\n a = Pb(a, c) | 0;\n g = 1;\n c = G() | 0;\n break;\n } else {\n a = Nb(a, c) | 0;\n g = 1;\n c = G() | 0;\n break;\n } }\n\n switch (g | 0) {\n case 5:\n {\n a = Pb(a, c) | 0;\n c = G() | 0;\n b[e >> 2] = (b[e >> 2] | 0) + 5;\n g = 0;\n break c;\n }\n\n case 3:\n {\n a = Nb(a, c) | 0;\n c = G() | 0;\n b[e >> 2] = (b[e >> 2] | 0) + 1;\n g = 0;\n break c;\n }\n\n default:\n {\n n = 0;\n o = 0;\n F(n | 0);\n return o | 0;\n }\n }\n } else { g = 0; } } while (0);\n\n if ((d | 0) > 0) {\n f = 0;\n\n do {\n a = Mb(a, c) | 0;\n c = G() | 0;\n f = f + 1 | 0;\n } while ((f | 0) != (d | 0));\n }\n\n if ((j | 0) != (h | 0)) {\n if (!(ma(h) | 0)) {\n if ((g | 0) != 0 | (Lb(a, c) | 0) != 5) { break; }\n b[e >> 2] = (b[e >> 2] | 0) + 1;\n break;\n }\n\n switch (i & 127) {\n case 8:\n case 118:\n break b;\n\n default:\n\n }\n\n if ((Lb(a, c) | 0) != 3) { b[e >> 2] = (b[e >> 2] | 0) + 1; }\n }\n } } while (0);\n\n b[e >> 2] = ((b[e >> 2] | 0) + d | 0) % 6 | 0;\n n = c;\n o = a;\n F(n | 0);\n return o | 0;\n }\n\n function ea(a, c, d, e) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0;\n m = S;\n S = S + 16 | 0;\n l = m;\n\n if (!d) {\n l = e;\n b[l >> 2] = a;\n b[l + 4 >> 2] = c;\n l = 0;\n S = m;\n return l | 0;\n }\n\n b[l >> 2] = 0;\n\n a: do { if (!(Fb(a, c) | 0)) {\n g = (d | 0) > 0;\n\n if (g) {\n f = 0;\n k = a;\n\n do {\n k = da(k, c, 4, l) | 0;\n c = G() | 0;\n\n if ((k | 0) == 0 & (c | 0) == 0) {\n a = 2;\n break a;\n }\n\n f = f + 1 | 0;\n\n if (Fb(k, c) | 0) {\n a = 1;\n break a;\n }\n } while ((f | 0) < (d | 0));\n\n j = e;\n b[j >> 2] = k;\n b[j + 4 >> 2] = c;\n j = d + -1 | 0;\n\n if (g) {\n g = 0;\n h = 1;\n f = k;\n a = c;\n\n do {\n f = da(f, a, 2, l) | 0;\n a = G() | 0;\n\n if ((f | 0) == 0 & (a | 0) == 0) {\n a = 2;\n break a;\n }\n\n i = e + (h << 3) | 0;\n b[i >> 2] = f;\n b[i + 4 >> 2] = a;\n h = h + 1 | 0;\n\n if (Fb(f, a) | 0) {\n a = 1;\n break a;\n }\n\n g = g + 1 | 0;\n } while ((g | 0) < (d | 0));\n\n i = 0;\n g = h;\n\n do {\n f = da(f, a, 3, l) | 0;\n a = G() | 0;\n\n if ((f | 0) == 0 & (a | 0) == 0) {\n a = 2;\n break a;\n }\n\n h = e + (g << 3) | 0;\n b[h >> 2] = f;\n b[h + 4 >> 2] = a;\n g = g + 1 | 0;\n\n if (Fb(f, a) | 0) {\n a = 1;\n break a;\n }\n\n i = i + 1 | 0;\n } while ((i | 0) < (d | 0));\n\n h = 0;\n\n do {\n f = da(f, a, 1, l) | 0;\n a = G() | 0;\n\n if ((f | 0) == 0 & (a | 0) == 0) {\n a = 2;\n break a;\n }\n\n i = e + (g << 3) | 0;\n b[i >> 2] = f;\n b[i + 4 >> 2] = a;\n g = g + 1 | 0;\n\n if (Fb(f, a) | 0) {\n a = 1;\n break a;\n }\n\n h = h + 1 | 0;\n } while ((h | 0) < (d | 0));\n\n h = 0;\n\n do {\n f = da(f, a, 5, l) | 0;\n a = G() | 0;\n\n if ((f | 0) == 0 & (a | 0) == 0) {\n a = 2;\n break a;\n }\n\n i = e + (g << 3) | 0;\n b[i >> 2] = f;\n b[i + 4 >> 2] = a;\n g = g + 1 | 0;\n\n if (Fb(f, a) | 0) {\n a = 1;\n break a;\n }\n\n h = h + 1 | 0;\n } while ((h | 0) < (d | 0));\n\n h = 0;\n\n do {\n f = da(f, a, 4, l) | 0;\n a = G() | 0;\n\n if ((f | 0) == 0 & (a | 0) == 0) {\n a = 2;\n break a;\n }\n\n i = e + (g << 3) | 0;\n b[i >> 2] = f;\n b[i + 4 >> 2] = a;\n g = g + 1 | 0;\n\n if (Fb(f, a) | 0) {\n a = 1;\n break a;\n }\n\n h = h + 1 | 0;\n } while ((h | 0) < (d | 0));\n\n h = 0;\n\n while (1) {\n f = da(f, a, 6, l) | 0;\n a = G() | 0;\n\n if ((f | 0) == 0 & (a | 0) == 0) {\n a = 2;\n break a;\n }\n\n if ((h | 0) != (j | 0)) {\n i = e + (g << 3) | 0;\n b[i >> 2] = f;\n b[i + 4 >> 2] = a;\n if (!(Fb(f, a) | 0)) { g = g + 1 | 0; }else {\n a = 1;\n break a;\n }\n }\n\n h = h + 1 | 0;\n\n if ((h | 0) >= (d | 0)) {\n h = k;\n g = c;\n break;\n }\n }\n } else {\n h = k;\n f = k;\n g = c;\n a = c;\n }\n } else {\n h = e;\n b[h >> 2] = a;\n b[h + 4 >> 2] = c;\n h = a;\n f = a;\n g = c;\n a = c;\n }\n\n a = ((h | 0) != (f | 0) | (g | 0) != (a | 0)) & 1;\n } else { a = 1; } } while (0);\n\n l = a;\n S = m;\n return l | 0;\n }\n\n function fa(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n g = S;\n S = S + 48 | 0;\n f = g + 8 | 0;\n e = g;\n i = a;\n h = b[i + 4 >> 2] | 0;\n d = e;\n b[d >> 2] = b[i >> 2];\n b[d + 4 >> 2] = h;\n vc(e, f);\n f = ya(f, c) | 0;\n c = b[e >> 2] | 0;\n e = b[a + 8 >> 2] | 0;\n\n if ((e | 0) <= 0) {\n i = c;\n h = (f | 0) < (i | 0);\n i = h ? i : f;\n i = i + 12 | 0;\n S = g;\n return i | 0;\n }\n\n d = b[a + 12 >> 2] | 0;\n a = 0;\n\n do {\n c = (b[d + (a << 3) >> 2] | 0) + c | 0;\n a = a + 1 | 0;\n } while ((a | 0) < (e | 0));\n\n i = (f | 0) < (c | 0);\n i = i ? c : f;\n i = i + 12 | 0;\n S = g;\n return i | 0;\n }\n\n function ga(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0;\n i = S;\n S = S + 48 | 0;\n e = i + 8 | 0;\n f = i;\n\n if (!(ha(a, c, d) | 0)) {\n S = i;\n return;\n }\n\n j = a;\n g = b[j + 4 >> 2] | 0;\n h = f;\n b[h >> 2] = b[j >> 2];\n b[h + 4 >> 2] = g;\n vc(f, e);\n h = ya(e, c) | 0;\n c = b[f >> 2] | 0;\n g = b[a + 8 >> 2] | 0;\n\n if ((g | 0) > 0) {\n f = b[a + 12 >> 2] | 0;\n e = 0;\n\n do {\n c = (b[f + (e << 3) >> 2] | 0) + c | 0;\n e = e + 1 | 0;\n } while ((e | 0) != (g | 0));\n }\n\n c = (h | 0) < (c | 0) ? c : h;\n\n if ((c | 0) <= -12) {\n S = i;\n return;\n }\n\n j = c + 11 | 0;\n hd(d | 0, 0, (((j | 0) > 0 ? j : 0) << 3) + 8 | 0) | 0;\n S = i;\n return;\n }\n\n function ha(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0,\n p = 0,\n q = 0,\n r = 0,\n s = 0,\n t = 0,\n u = 0,\n v = 0,\n w = 0,\n x = 0,\n y = 0,\n z = 0,\n A = 0,\n B = 0,\n C = 0,\n D = 0,\n E = 0,\n F = 0,\n I = 0,\n J = 0;\n J = S;\n S = S + 112 | 0;\n D = J + 80 | 0;\n j = J + 72 | 0;\n E = J;\n F = J + 56 | 0;\n k = a + 8 | 0;\n I = Wc((b[k >> 2] << 5) + 32 | 0) | 0;\n if (!I) { H(22848, 22448, 800, 22456); }\n wc(a, I);\n g = a;\n e = b[g + 4 >> 2] | 0;\n i = j;\n b[i >> 2] = b[g >> 2];\n b[i + 4 >> 2] = e;\n vc(j, D);\n i = ya(D, c) | 0;\n e = b[j >> 2] | 0;\n g = b[k >> 2] | 0;\n\n if ((g | 0) > 0) {\n h = b[a + 12 >> 2] | 0;\n f = 0;\n\n do {\n e = (b[h + (f << 3) >> 2] | 0) + e | 0;\n f = f + 1 | 0;\n } while ((f | 0) != (g | 0));\n }\n\n i = (i | 0) < (e | 0) ? e : i;\n C = i + 12 | 0;\n f = Yc(C, 8) | 0;\n l = Yc(C, 8) | 0;\n b[D >> 2] = 0;\n A = a;\n B = b[A + 4 >> 2] | 0;\n e = j;\n b[e >> 2] = b[A >> 2];\n b[e + 4 >> 2] = B;\n e = ia(j, C, c, D, f, l) | 0;\n\n if (e | 0) {\n Xc(f);\n Xc(l);\n Xc(I);\n I = e;\n S = J;\n return I | 0;\n }\n\n a: do { if ((b[k >> 2] | 0) > 0) {\n g = a + 12 | 0;\n e = 0;\n\n while (1) {\n h = ia((b[g >> 2] | 0) + (e << 3) | 0, C, c, D, f, l) | 0;\n e = e + 1 | 0;\n if (h | 0) { break; }\n if ((e | 0) >= (b[k >> 2] | 0)) { break a; }\n }\n\n Xc(f);\n Xc(l);\n Xc(I);\n I = h;\n S = J;\n return I | 0;\n } } while (0);\n\n if ((i | 0) > -12) { hd(l | 0, 0, ((C | 0) > 1 ? C : 1) << 3 | 0) | 0; }\n\n b: do { if ((b[D >> 2] | 0) > 0) {\n B = ((C | 0) < 0) << 31 >> 31;\n v = f;\n w = l;\n x = f;\n y = f;\n z = l;\n A = f;\n e = f;\n r = f;\n s = l;\n t = l;\n u = l;\n f = l;\n\n c: while (1) {\n q = b[D >> 2] | 0;\n o = 0;\n p = 0;\n g = 0;\n\n while (1) {\n h = E;\n i = h + 56 | 0;\n\n do {\n b[h >> 2] = 0;\n h = h + 4 | 0;\n } while ((h | 0) < (i | 0));\n\n c = v + (o << 3) | 0;\n j = b[c >> 2] | 0;\n c = b[c + 4 >> 2] | 0;\n\n if (ba(j, c, 1, E, 0) | 0) {\n h = E;\n i = h + 56 | 0;\n\n do {\n b[h >> 2] = 0;\n h = h + 4 | 0;\n } while ((h | 0) < (i | 0));\n\n h = Yc(7, 4) | 0;\n\n if (h | 0) {\n ca(j, c, 1, E, h, 7, 0);\n Xc(h);\n }\n }\n\n n = 0;\n\n do {\n m = E + (n << 3) | 0;\n l = b[m >> 2] | 0;\n m = b[m + 4 >> 2] | 0;\n\n d: do { if (!((l | 0) == 0 & (m | 0) == 0)) {\n j = bd(l | 0, m | 0, C | 0, B | 0) | 0;\n G() | 0;\n h = d + (j << 3) | 0;\n i = h;\n c = b[i >> 2] | 0;\n i = b[i + 4 >> 2] | 0;\n\n if (!((c | 0) == 0 & (i | 0) == 0)) {\n k = 0;\n\n while (1) {\n if ((k | 0) > (C | 0)) { break c; }\n if ((c | 0) == (l | 0) & (i | 0) == (m | 0)) { break d; }\n j = (j + 1 | 0) % (C | 0) | 0;\n h = d + (j << 3) | 0;\n i = h;\n c = b[i >> 2] | 0;\n i = b[i + 4 >> 2] | 0;\n if ((c | 0) == 0 & (i | 0) == 0) { break; }else { k = k + 1 | 0; }\n }\n }\n\n if (!((l | 0) == 0 & (m | 0) == 0)) {\n Vb(l, m, F);\n\n if (xc(a, I, F) | 0) {\n k = h;\n b[k >> 2] = l;\n b[k + 4 >> 2] = m;\n k = w + (g << 3) | 0;\n b[k >> 2] = l;\n b[k + 4 >> 2] = m;\n g = g + 1 | 0;\n }\n }\n } } while (0);\n\n n = n + 1 | 0;\n } while (n >>> 0 < 7);\n\n p = p + 1 | 0;\n if ((p | 0) >= (q | 0)) { break; }else { o = o + 1 | 0; }\n }\n\n if ((q | 0) > 0) { hd(x | 0, 0, q << 3 | 0) | 0; }\n b[D >> 2] = g;\n\n if ((g | 0) > 0) {\n l = f;\n m = u;\n n = A;\n o = t;\n p = s;\n q = w;\n f = r;\n u = e;\n t = y;\n s = x;\n r = l;\n e = m;\n A = z;\n z = n;\n y = o;\n x = p;\n w = v;\n v = q;\n } else { break b; }\n }\n\n Xc(y);\n Xc(z);\n Xc(I);\n I = -1;\n S = J;\n return I | 0;\n } else { e = l; } } while (0);\n\n Xc(I);\n Xc(f);\n Xc(e);\n I = 0;\n S = J;\n return I | 0;\n }\n\n function ia(a, c, d, f, g, h) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n f = f | 0;\n g = g | 0;\n h = h | 0;\n var i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0,\n p = 0,\n q = 0,\n r = 0.0,\n s = 0,\n t = 0,\n u = 0,\n v = 0,\n w = 0,\n x = 0,\n y = 0,\n z = 0,\n A = 0,\n B = 0,\n C = 0,\n D = 0.0,\n E = 0.0;\n C = S;\n S = S + 48 | 0;\n y = C + 32 | 0;\n z = C + 16 | 0;\n A = C;\n i = b[a >> 2] | 0;\n\n if ((i | 0) <= 0) {\n B = 0;\n S = C;\n return B | 0;\n }\n\n t = a + 4 | 0;\n u = y + 8 | 0;\n v = z + 8 | 0;\n w = A + 8 | 0;\n x = ((c | 0) < 0) << 31 >> 31;\n s = 0;\n\n a: while (1) {\n j = b[t >> 2] | 0;\n q = j + (s << 4) | 0;\n b[y >> 2] = b[q >> 2];\n b[y + 4 >> 2] = b[q + 4 >> 2];\n b[y + 8 >> 2] = b[q + 8 >> 2];\n b[y + 12 >> 2] = b[q + 12 >> 2];\n\n if ((s | 0) == (i + -1 | 0)) {\n b[z >> 2] = b[j >> 2];\n b[z + 4 >> 2] = b[j + 4 >> 2];\n b[z + 8 >> 2] = b[j + 8 >> 2];\n b[z + 12 >> 2] = b[j + 12 >> 2];\n } else {\n q = j + (s + 1 << 4) | 0;\n b[z >> 2] = b[q >> 2];\n b[z + 4 >> 2] = b[q + 4 >> 2];\n b[z + 8 >> 2] = b[q + 8 >> 2];\n b[z + 12 >> 2] = b[q + 12 >> 2];\n }\n\n q = za(y, z, d) | 0;\n\n b: do { if ((q | 0) > 0) {\n r = +(q | 0);\n p = 0;\n\n c: while (1) {\n E = +(q - p | 0);\n D = +(p | 0);\n e[A >> 3] = +e[y >> 3] * E / r + +e[z >> 3] * D / r;\n e[w >> 3] = +e[u >> 3] * E / r + +e[v >> 3] * D / r;\n n = Sb(A, d) | 0;\n o = G() | 0;\n j = bd(n | 0, o | 0, c | 0, x | 0) | 0;\n G() | 0;\n i = h + (j << 3) | 0;\n k = i;\n l = b[k >> 2] | 0;\n k = b[k + 4 >> 2] | 0;\n\n d: do { if ((l | 0) == 0 & (k | 0) == 0) { B = 14; }else {\n m = 0;\n\n while (1) {\n if ((m | 0) > (c | 0)) {\n i = 1;\n break d;\n }\n\n if ((l | 0) == (n | 0) & (k | 0) == (o | 0)) {\n i = 7;\n break d;\n }\n\n j = (j + 1 | 0) % (c | 0) | 0;\n i = h + (j << 3) | 0;\n k = i;\n l = b[k >> 2] | 0;\n k = b[k + 4 >> 2] | 0;\n\n if ((l | 0) == 0 & (k | 0) == 0) {\n B = 14;\n break;\n } else { m = m + 1 | 0; }\n }\n } } while (0);\n\n if ((B | 0) == 14) {\n B = 0;\n if ((n | 0) == 0 & (o | 0) == 0) { i = 7; }else {\n b[i >> 2] = n;\n b[i + 4 >> 2] = o;\n i = b[f >> 2] | 0;\n m = g + (i << 3) | 0;\n b[m >> 2] = n;\n b[m + 4 >> 2] = o;\n b[f >> 2] = i + 1;\n i = 0;\n }\n }\n\n switch (i & 7) {\n case 7:\n case 0:\n break;\n\n default:\n break c;\n }\n\n p = p + 1 | 0;\n\n if ((q | 0) <= (p | 0)) {\n B = 8;\n break b;\n }\n }\n\n if (i | 0) {\n i = -1;\n B = 20;\n break a;\n }\n } else { B = 8; } } while (0);\n\n if ((B | 0) == 8) { B = 0; }\n s = s + 1 | 0;\n i = b[a >> 2] | 0;\n\n if ((s | 0) >= (i | 0)) {\n i = 0;\n B = 20;\n break;\n }\n }\n\n if ((B | 0) == 20) {\n S = C;\n return i | 0;\n }\n\n return 0;\n }\n\n function ja(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0;\n k = S;\n S = S + 176 | 0;\n j = k;\n\n if ((c | 0) < 1) {\n Mc(d, 0, 0);\n S = k;\n return;\n }\n\n h = a;\n h = cd(b[h >> 2] | 0, b[h + 4 >> 2] | 0, 52) | 0;\n G() | 0;\n Mc(d, (c | 0) > 6 ? c : 6, h & 15);\n h = 0;\n\n do {\n e = a + (h << 3) | 0;\n Wb(b[e >> 2] | 0, b[e + 4 >> 2] | 0, j);\n e = b[j >> 2] | 0;\n\n if ((e | 0) > 0) {\n i = 0;\n\n do {\n g = j + 8 + (i << 4) | 0;\n i = i + 1 | 0;\n e = j + 8 + (((i | 0) % (e | 0) | 0) << 4) | 0;\n f = Rc(d, e, g) | 0;\n if (!f) { Qc(d, g, e) | 0; }else { Pc(d, f) | 0; }\n e = b[j >> 2] | 0;\n } while ((i | 0) < (e | 0));\n }\n\n h = h + 1 | 0;\n } while ((h | 0) != (c | 0));\n\n S = k;\n return;\n }\n\n function ka(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0;\n g = S;\n S = S + 32 | 0;\n e = g;\n f = g + 16 | 0;\n ja(a, c, f);\n b[d >> 2] = 0;\n b[d + 4 >> 2] = 0;\n b[d + 8 >> 2] = 0;\n a = Oc(f) | 0;\n\n if (!a) {\n kc(d) | 0;\n Nc(f);\n S = g;\n return;\n }\n\n do {\n c = hc(d) | 0;\n\n do {\n ic(c, a) | 0;\n h = a + 16 | 0;\n b[e >> 2] = b[h >> 2];\n b[e + 4 >> 2] = b[h + 4 >> 2];\n b[e + 8 >> 2] = b[h + 8 >> 2];\n b[e + 12 >> 2] = b[h + 12 >> 2];\n Pc(f, a) | 0;\n a = Sc(f, e) | 0;\n } while ((a | 0) != 0);\n\n a = Oc(f) | 0;\n } while ((a | 0) != 0);\n\n kc(d) | 0;\n Nc(f);\n S = g;\n return;\n }\n\n function la(a) {\n a = a | 0;\n return b[7728 + (a * 28 | 0) + 16 >> 2] | 0;\n }\n\n function ma(a) {\n a = a | 0;\n return (a | 0) == 4 | (a | 0) == 117 | 0;\n }\n\n function na(a) {\n a = a | 0;\n return b[11152 + ((b[a >> 2] | 0) * 216 | 0) + ((b[a + 4 >> 2] | 0) * 72 | 0) + ((b[a + 8 >> 2] | 0) * 24 | 0) + (b[a + 12 >> 2] << 3) >> 2] | 0;\n }\n\n function oa(a) {\n a = a | 0;\n return b[11152 + ((b[a >> 2] | 0) * 216 | 0) + ((b[a + 4 >> 2] | 0) * 72 | 0) + ((b[a + 8 >> 2] | 0) * 24 | 0) + (b[a + 12 >> 2] << 3) + 4 >> 2] | 0;\n }\n\n function pa(a, c) {\n a = a | 0;\n c = c | 0;\n a = 7728 + (a * 28 | 0) | 0;\n b[c >> 2] = b[a >> 2];\n b[c + 4 >> 2] = b[a + 4 >> 2];\n b[c + 8 >> 2] = b[a + 8 >> 2];\n b[c + 12 >> 2] = b[a + 12 >> 2];\n return;\n }\n\n function qa(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0;\n\n if (c >>> 0 > 20) {\n c = -1;\n return c | 0;\n }\n\n do { if ((b[11152 + (c * 216 | 0) >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 8 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 16 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 24 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 32 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 40 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 48 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 56 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 64 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 72 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 80 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 88 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 96 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 104 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 112 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 120 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 128 >> 2] | 0) != (a | 0)) {\n if ((b[11152 + (c * 216 | 0) + 136 >> 2] | 0) == (a | 0)) {\n a = 2;\n d = 1;\n e = 2;\n } else {\n if ((b[11152 + (c * 216 | 0) + 144 >> 2] | 0) == (a | 0)) {\n a = 0;\n d = 2;\n e = 0;\n break;\n }\n\n if ((b[11152 + (c * 216 | 0) + 152 >> 2] | 0) == (a | 0)) {\n a = 0;\n d = 2;\n e = 1;\n break;\n }\n\n if ((b[11152 + (c * 216 | 0) + 160 >> 2] | 0) == (a | 0)) {\n a = 0;\n d = 2;\n e = 2;\n break;\n }\n\n if ((b[11152 + (c * 216 | 0) + 168 >> 2] | 0) == (a | 0)) {\n a = 1;\n d = 2;\n e = 0;\n break;\n }\n\n if ((b[11152 + (c * 216 | 0) + 176 >> 2] | 0) == (a | 0)) {\n a = 1;\n d = 2;\n e = 1;\n break;\n }\n\n if ((b[11152 + (c * 216 | 0) + 184 >> 2] | 0) == (a | 0)) {\n a = 1;\n d = 2;\n e = 2;\n break;\n }\n\n if ((b[11152 + (c * 216 | 0) + 192 >> 2] | 0) == (a | 0)) {\n a = 2;\n d = 2;\n e = 0;\n break;\n }\n\n if ((b[11152 + (c * 216 | 0) + 200 >> 2] | 0) == (a | 0)) {\n a = 2;\n d = 2;\n e = 1;\n break;\n }\n\n if ((b[11152 + (c * 216 | 0) + 208 >> 2] | 0) == (a | 0)) {\n a = 2;\n d = 2;\n e = 2;\n break;\n } else { a = -1; }\n\n return a | 0;\n }\n } else {\n a = 2;\n d = 1;\n e = 1;\n }\n } else {\n a = 2;\n d = 1;\n e = 0;\n }\n } else {\n a = 1;\n d = 1;\n e = 2;\n }\n } else {\n a = 1;\n d = 1;\n e = 1;\n }\n } else {\n a = 1;\n d = 1;\n e = 0;\n }\n } else {\n a = 0;\n d = 1;\n e = 2;\n }\n } else {\n a = 0;\n d = 1;\n e = 1;\n }\n } else {\n a = 0;\n d = 1;\n e = 0;\n }\n } else {\n a = 2;\n d = 0;\n e = 2;\n }\n } else {\n a = 2;\n d = 0;\n e = 1;\n }\n } else {\n a = 2;\n d = 0;\n e = 0;\n }\n } else {\n a = 1;\n d = 0;\n e = 2;\n }\n } else {\n a = 1;\n d = 0;\n e = 1;\n }\n } else {\n a = 1;\n d = 0;\n e = 0;\n }\n } else {\n a = 0;\n d = 0;\n e = 2;\n }\n } else {\n a = 0;\n d = 0;\n e = 1;\n }\n } else {\n a = 0;\n d = 0;\n e = 0;\n } } while (0);\n\n c = b[11152 + (c * 216 | 0) + (d * 72 | 0) + (a * 24 | 0) + (e << 3) + 4 >> 2] | 0;\n return c | 0;\n }\n\n function ra(a, c) {\n a = a | 0;\n c = c | 0;\n\n if ((b[7728 + (a * 28 | 0) + 20 >> 2] | 0) == (c | 0)) {\n c = 1;\n return c | 0;\n }\n\n c = (b[7728 + (a * 28 | 0) + 24 >> 2] | 0) == (c | 0);\n return c | 0;\n }\n\n function sa(a, c) {\n a = a | 0;\n c = c | 0;\n return b[880 + (a * 28 | 0) + (c << 2) >> 2] | 0;\n }\n\n function ta(a, c) {\n a = a | 0;\n c = c | 0;\n\n if ((b[880 + (a * 28 | 0) >> 2] | 0) == (c | 0)) {\n c = 0;\n return c | 0;\n }\n\n if ((b[880 + (a * 28 | 0) + 4 >> 2] | 0) == (c | 0)) {\n c = 1;\n return c | 0;\n }\n\n if ((b[880 + (a * 28 | 0) + 8 >> 2] | 0) == (c | 0)) {\n c = 2;\n return c | 0;\n }\n\n if ((b[880 + (a * 28 | 0) + 12 >> 2] | 0) == (c | 0)) {\n c = 3;\n return c | 0;\n }\n\n if ((b[880 + (a * 28 | 0) + 16 >> 2] | 0) == (c | 0)) {\n c = 4;\n return c | 0;\n }\n\n if ((b[880 + (a * 28 | 0) + 20 >> 2] | 0) == (c | 0)) {\n c = 5;\n return c | 0;\n } else { return ((b[880 + (a * 28 | 0) + 24 >> 2] | 0) == (c | 0) ? 6 : 7) | 0; }\n\n return 0;\n }\n\n function ua() {\n return 122;\n }\n\n function va(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0;\n c = 0;\n\n do {\n dd(c | 0, 0, 45) | 0;\n e = G() | 0 | 134225919;\n d = a + (c << 3) | 0;\n b[d >> 2] = -1;\n b[d + 4 >> 2] = e;\n c = c + 1 | 0;\n } while ((c | 0) != 122);\n\n return;\n }\n\n function wa(a) {\n a = a | 0;\n return +e[a + 16 >> 3] < +e[a + 24 >> 3] | 0;\n }\n\n function xa(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0.0,\n d = 0.0,\n f = 0.0;\n c = +e[b >> 3];\n\n if (!(c >= +e[a + 8 >> 3])) {\n b = 0;\n return b | 0;\n }\n\n if (!(c <= +e[a >> 3])) {\n b = 0;\n return b | 0;\n }\n\n d = +e[a + 16 >> 3];\n c = +e[a + 24 >> 3];\n f = +e[b + 8 >> 3];\n b = f >= c;\n a = f <= d & 1;\n\n if (d < c) {\n if (b) { a = 1; }\n } else if (!b) { a = 0; }\n\n b = (a | 0) != 0;\n return b | 0;\n }\n\n function ya(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0.0,\n l = 0.0;\n i = S;\n S = S + 288 | 0;\n d = i + 264 | 0;\n f = i + 96 | 0;\n g = i;\n h = g;\n j = h + 96 | 0;\n\n do {\n b[h >> 2] = 0;\n h = h + 4 | 0;\n } while ((h | 0) < (j | 0));\n\n _b(c, g);\n\n h = g;\n j = b[h >> 2] | 0;\n h = b[h + 4 >> 2] | 0;\n Vb(j, h, d);\n Wb(j, h, f);\n k = +jb(d, f + 8 | 0);\n e[d >> 3] = +e[a >> 3];\n h = d + 8 | 0;\n e[h >> 3] = +e[a + 16 >> 3];\n e[f >> 3] = +e[a + 8 >> 3];\n j = f + 8 | 0;\n e[j >> 3] = +e[a + 24 >> 3];\n l = +jb(d, f);\n j = ~~+A(+(l * l / +ed(+ +q(+((+e[h >> 3] - +e[j >> 3]) / (+e[d >> 3] - +e[f >> 3]))), 3.0) / (k * (k * 2.59807621135) * .8)));\n S = i;\n return ((j | 0) == 0 ? 1 : j) | 0;\n }\n\n function za(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0.0;\n i = S;\n S = S + 288 | 0;\n e = i + 264 | 0;\n f = i + 96 | 0;\n g = i;\n h = g;\n j = h + 96 | 0;\n\n do {\n b[h >> 2] = 0;\n h = h + 4 | 0;\n } while ((h | 0) < (j | 0));\n\n _b(d, g);\n\n j = g;\n h = b[j >> 2] | 0;\n j = b[j + 4 >> 2] | 0;\n Vb(h, j, e);\n Wb(h, j, f);\n k = +jb(e, f + 8 | 0);\n j = ~~+A(+(+jb(a, c) / (k * 2.0)));\n S = i;\n return ((j | 0) == 0 ? 1 : j) | 0;\n }\n\n function Aa(a, c, d, e) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n b[a >> 2] = c;\n b[a + 4 >> 2] = d;\n b[a + 8 >> 2] = e;\n return;\n }\n\n function Ba(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0.0,\n j = 0.0,\n k = 0.0,\n l = 0.0,\n m = 0,\n n = 0,\n o = 0.0;\n n = c + 8 | 0;\n b[n >> 2] = 0;\n k = +e[a >> 3];\n i = +q(+k);\n l = +e[a + 8 >> 3];\n j = +q(+l) / .8660254037844386;\n i = i + j * .5;\n d = ~~i;\n a = ~~j;\n i = i - +(d | 0);\n j = j - +(a | 0);\n\n do { if (i < .5) {\n if (i < .3333333333333333) {\n b[c >> 2] = d;\n\n if (j < (i + 1.0) * .5) {\n b[c + 4 >> 2] = a;\n break;\n } else {\n a = a + 1 | 0;\n b[c + 4 >> 2] = a;\n break;\n }\n } else {\n o = 1.0 - i;\n a = (!(j < o) & 1) + a | 0;\n b[c + 4 >> 2] = a;\n\n if (o <= j & j < i * 2.0) {\n d = d + 1 | 0;\n b[c >> 2] = d;\n break;\n } else {\n b[c >> 2] = d;\n break;\n }\n }\n } else {\n if (!(i < .6666666666666666)) {\n d = d + 1 | 0;\n b[c >> 2] = d;\n\n if (j < i * .5) {\n b[c + 4 >> 2] = a;\n break;\n } else {\n a = a + 1 | 0;\n b[c + 4 >> 2] = a;\n break;\n }\n }\n\n if (j < 1.0 - i) {\n b[c + 4 >> 2] = a;\n\n if (i * 2.0 + -1.0 < j) {\n b[c >> 2] = d;\n break;\n }\n } else {\n a = a + 1 | 0;\n b[c + 4 >> 2] = a;\n }\n\n d = d + 1 | 0;\n b[c >> 2] = d;\n } } while (0);\n\n do { if (k < 0.0) { if (!(a & 1)) {\n m = (a | 0) / 2 | 0;\n m = _c(d | 0, ((d | 0) < 0) << 31 >> 31 | 0, m | 0, ((m | 0) < 0) << 31 >> 31 | 0) | 0;\n d = ~~(+(d | 0) - (+(m >>> 0) + 4294967296.0 * +(G() | 0)) * 2.0);\n b[c >> 2] = d;\n break;\n } else {\n m = (a + 1 | 0) / 2 | 0;\n m = _c(d | 0, ((d | 0) < 0) << 31 >> 31 | 0, m | 0, ((m | 0) < 0) << 31 >> 31 | 0) | 0;\n d = ~~(+(d | 0) - ((+(m >>> 0) + 4294967296.0 * +(G() | 0)) * 2.0 + 1.0));\n b[c >> 2] = d;\n break;\n } } } while (0);\n\n m = c + 4 | 0;\n\n if (l < 0.0) {\n d = d - ((a << 1 | 1 | 0) / 2 | 0) | 0;\n b[c >> 2] = d;\n a = 0 - a | 0;\n b[m >> 2] = a;\n }\n\n f = a - d | 0;\n\n if ((d | 0) < 0) {\n g = 0 - d | 0;\n b[m >> 2] = f;\n b[n >> 2] = g;\n b[c >> 2] = 0;\n a = f;\n d = 0;\n } else { g = 0; }\n\n if ((a | 0) < 0) {\n d = d - a | 0;\n b[c >> 2] = d;\n g = g - a | 0;\n b[n >> 2] = g;\n b[m >> 2] = 0;\n a = 0;\n }\n\n h = d - g | 0;\n f = a - g | 0;\n\n if ((g | 0) < 0) {\n b[c >> 2] = h;\n b[m >> 2] = f;\n b[n >> 2] = 0;\n a = f;\n d = h;\n g = 0;\n }\n\n f = (a | 0) < (d | 0) ? a : d;\n f = (g | 0) < (f | 0) ? g : f;\n if ((f | 0) <= 0) { return; }\n b[c >> 2] = d - f;\n b[m >> 2] = a - f;\n b[n >> 2] = g - f;\n return;\n }\n\n function Ca(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0;\n c = b[a >> 2] | 0;\n h = a + 4 | 0;\n d = b[h >> 2] | 0;\n\n if ((c | 0) < 0) {\n d = d - c | 0;\n b[h >> 2] = d;\n g = a + 8 | 0;\n b[g >> 2] = (b[g >> 2] | 0) - c;\n b[a >> 2] = 0;\n c = 0;\n }\n\n if ((d | 0) < 0) {\n c = c - d | 0;\n b[a >> 2] = c;\n g = a + 8 | 0;\n f = (b[g >> 2] | 0) - d | 0;\n b[g >> 2] = f;\n b[h >> 2] = 0;\n d = 0;\n } else {\n f = a + 8 | 0;\n g = f;\n f = b[f >> 2] | 0;\n }\n\n if ((f | 0) < 0) {\n c = c - f | 0;\n b[a >> 2] = c;\n d = d - f | 0;\n b[h >> 2] = d;\n b[g >> 2] = 0;\n f = 0;\n }\n\n e = (d | 0) < (c | 0) ? d : c;\n e = (f | 0) < (e | 0) ? f : e;\n if ((e | 0) <= 0) { return; }\n b[a >> 2] = c - e;\n b[h >> 2] = d - e;\n b[g >> 2] = f - e;\n return;\n }\n\n function Da(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0.0,\n f = 0;\n f = b[a + 8 >> 2] | 0;\n d = +((b[a + 4 >> 2] | 0) - f | 0);\n e[c >> 3] = +((b[a >> 2] | 0) - f | 0) - d * .5;\n e[c + 8 >> 3] = d * .8660254037844386;\n return;\n }\n\n function Ea(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n b[d >> 2] = (b[c >> 2] | 0) + (b[a >> 2] | 0);\n b[d + 4 >> 2] = (b[c + 4 >> 2] | 0) + (b[a + 4 >> 2] | 0);\n b[d + 8 >> 2] = (b[c + 8 >> 2] | 0) + (b[a + 8 >> 2] | 0);\n return;\n }\n\n function Fa(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n b[d >> 2] = (b[a >> 2] | 0) - (b[c >> 2] | 0);\n b[d + 4 >> 2] = (b[a + 4 >> 2] | 0) - (b[c + 4 >> 2] | 0);\n b[d + 8 >> 2] = (b[a + 8 >> 2] | 0) - (b[c + 8 >> 2] | 0);\n return;\n }\n\n function Ga(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0;\n d = B(b[a >> 2] | 0, c) | 0;\n b[a >> 2] = d;\n d = a + 4 | 0;\n e = B(b[d >> 2] | 0, c) | 0;\n b[d >> 2] = e;\n a = a + 8 | 0;\n c = B(b[a >> 2] | 0, c) | 0;\n b[a >> 2] = c;\n return;\n }\n\n function Ha(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n h = b[a >> 2] | 0;\n i = (h | 0) < 0;\n e = (b[a + 4 >> 2] | 0) - (i ? h : 0) | 0;\n g = (e | 0) < 0;\n f = (g ? 0 - e | 0 : 0) + ((b[a + 8 >> 2] | 0) - (i ? h : 0)) | 0;\n d = (f | 0) < 0;\n a = d ? 0 : f;\n c = (g ? 0 : e) - (d ? f : 0) | 0;\n f = (i ? 0 : h) - (g ? e : 0) - (d ? f : 0) | 0;\n d = (c | 0) < (f | 0) ? c : f;\n d = (a | 0) < (d | 0) ? a : d;\n e = (d | 0) > 0;\n a = a - (e ? d : 0) | 0;\n c = c - (e ? d : 0) | 0;\n\n a: do { switch (f - (e ? d : 0) | 0) {\n case 0:\n switch (c | 0) {\n case 0:\n {\n i = (a | 0) == 0 ? 0 : (a | 0) == 1 ? 1 : 7;\n return i | 0;\n }\n\n case 1:\n {\n i = (a | 0) == 0 ? 2 : (a | 0) == 1 ? 3 : 7;\n return i | 0;\n }\n\n default:\n break a;\n }\n\n case 1:\n switch (c | 0) {\n case 0:\n {\n i = (a | 0) == 0 ? 4 : (a | 0) == 1 ? 5 : 7;\n return i | 0;\n }\n\n case 1:\n {\n if (!a) { a = 6; }else { break a; }\n return a | 0;\n }\n\n default:\n break a;\n }\n\n default:\n\n } } while (0);\n\n i = 7;\n return i | 0;\n }\n\n function Ia(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n h = a + 8 | 0;\n d = b[h >> 2] | 0;\n c = (b[a >> 2] | 0) - d | 0;\n i = a + 4 | 0;\n d = (b[i >> 2] | 0) - d | 0;\n e = Vc(+((c * 3 | 0) - d | 0) / 7.0) | 0;\n b[a >> 2] = e;\n c = Vc(+((d << 1) + c | 0) / 7.0) | 0;\n b[i >> 2] = c;\n b[h >> 2] = 0;\n d = c - e | 0;\n\n if ((e | 0) < 0) {\n g = 0 - e | 0;\n b[i >> 2] = d;\n b[h >> 2] = g;\n b[a >> 2] = 0;\n c = d;\n e = 0;\n d = g;\n } else { d = 0; }\n\n if ((c | 0) < 0) {\n e = e - c | 0;\n b[a >> 2] = e;\n d = d - c | 0;\n b[h >> 2] = d;\n b[i >> 2] = 0;\n c = 0;\n }\n\n g = e - d | 0;\n f = c - d | 0;\n\n if ((d | 0) < 0) {\n b[a >> 2] = g;\n b[i >> 2] = f;\n b[h >> 2] = 0;\n c = f;\n f = g;\n d = 0;\n } else { f = e; }\n\n e = (c | 0) < (f | 0) ? c : f;\n e = (d | 0) < (e | 0) ? d : e;\n if ((e | 0) <= 0) { return; }\n b[a >> 2] = f - e;\n b[i >> 2] = c - e;\n b[h >> 2] = d - e;\n return;\n }\n\n function Ja(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n h = a + 8 | 0;\n d = b[h >> 2] | 0;\n c = (b[a >> 2] | 0) - d | 0;\n i = a + 4 | 0;\n d = (b[i >> 2] | 0) - d | 0;\n e = Vc(+((c << 1) + d | 0) / 7.0) | 0;\n b[a >> 2] = e;\n c = Vc(+((d * 3 | 0) - c | 0) / 7.0) | 0;\n b[i >> 2] = c;\n b[h >> 2] = 0;\n d = c - e | 0;\n\n if ((e | 0) < 0) {\n g = 0 - e | 0;\n b[i >> 2] = d;\n b[h >> 2] = g;\n b[a >> 2] = 0;\n c = d;\n e = 0;\n d = g;\n } else { d = 0; }\n\n if ((c | 0) < 0) {\n e = e - c | 0;\n b[a >> 2] = e;\n d = d - c | 0;\n b[h >> 2] = d;\n b[i >> 2] = 0;\n c = 0;\n }\n\n g = e - d | 0;\n f = c - d | 0;\n\n if ((d | 0) < 0) {\n b[a >> 2] = g;\n b[i >> 2] = f;\n b[h >> 2] = 0;\n c = f;\n f = g;\n d = 0;\n } else { f = e; }\n\n e = (c | 0) < (f | 0) ? c : f;\n e = (d | 0) < (e | 0) ? d : e;\n if ((e | 0) <= 0) { return; }\n b[a >> 2] = f - e;\n b[i >> 2] = c - e;\n b[h >> 2] = d - e;\n return;\n }\n\n function Ka(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n c = b[a >> 2] | 0;\n h = a + 4 | 0;\n d = b[h >> 2] | 0;\n i = a + 8 | 0;\n e = b[i >> 2] | 0;\n f = d + (c * 3 | 0) | 0;\n b[a >> 2] = f;\n d = e + (d * 3 | 0) | 0;\n b[h >> 2] = d;\n c = (e * 3 | 0) + c | 0;\n b[i >> 2] = c;\n e = d - f | 0;\n\n if ((f | 0) < 0) {\n c = c - f | 0;\n b[h >> 2] = e;\n b[i >> 2] = c;\n b[a >> 2] = 0;\n d = e;\n e = 0;\n } else { e = f; }\n\n if ((d | 0) < 0) {\n e = e - d | 0;\n b[a >> 2] = e;\n c = c - d | 0;\n b[i >> 2] = c;\n b[h >> 2] = 0;\n d = 0;\n }\n\n g = e - c | 0;\n f = d - c | 0;\n\n if ((c | 0) < 0) {\n b[a >> 2] = g;\n b[h >> 2] = f;\n b[i >> 2] = 0;\n e = g;\n c = 0;\n } else { f = d; }\n\n d = (f | 0) < (e | 0) ? f : e;\n d = (c | 0) < (d | 0) ? c : d;\n if ((d | 0) <= 0) { return; }\n b[a >> 2] = e - d;\n b[h >> 2] = f - d;\n b[i >> 2] = c - d;\n return;\n }\n\n function La(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n f = b[a >> 2] | 0;\n h = a + 4 | 0;\n c = b[h >> 2] | 0;\n i = a + 8 | 0;\n d = b[i >> 2] | 0;\n e = (c * 3 | 0) + f | 0;\n f = d + (f * 3 | 0) | 0;\n b[a >> 2] = f;\n b[h >> 2] = e;\n c = (d * 3 | 0) + c | 0;\n b[i >> 2] = c;\n d = e - f | 0;\n\n if ((f | 0) < 0) {\n c = c - f | 0;\n b[h >> 2] = d;\n b[i >> 2] = c;\n b[a >> 2] = 0;\n f = 0;\n } else { d = e; }\n\n if ((d | 0) < 0) {\n f = f - d | 0;\n b[a >> 2] = f;\n c = c - d | 0;\n b[i >> 2] = c;\n b[h >> 2] = 0;\n d = 0;\n }\n\n g = f - c | 0;\n e = d - c | 0;\n\n if ((c | 0) < 0) {\n b[a >> 2] = g;\n b[h >> 2] = e;\n b[i >> 2] = 0;\n f = g;\n c = 0;\n } else { e = d; }\n\n d = (e | 0) < (f | 0) ? e : f;\n d = (c | 0) < (d | 0) ? c : d;\n if ((d | 0) <= 0) { return; }\n b[a >> 2] = f - d;\n b[h >> 2] = e - d;\n b[i >> 2] = c - d;\n return;\n }\n\n function Ma(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n if ((c + -1 | 0) >>> 0 >= 6) { return; }\n f = (b[15472 + (c * 12 | 0) >> 2] | 0) + (b[a >> 2] | 0) | 0;\n b[a >> 2] = f;\n i = a + 4 | 0;\n e = (b[15472 + (c * 12 | 0) + 4 >> 2] | 0) + (b[i >> 2] | 0) | 0;\n b[i >> 2] = e;\n h = a + 8 | 0;\n c = (b[15472 + (c * 12 | 0) + 8 >> 2] | 0) + (b[h >> 2] | 0) | 0;\n b[h >> 2] = c;\n d = e - f | 0;\n\n if ((f | 0) < 0) {\n c = c - f | 0;\n b[i >> 2] = d;\n b[h >> 2] = c;\n b[a >> 2] = 0;\n e = 0;\n } else {\n d = e;\n e = f;\n }\n\n if ((d | 0) < 0) {\n e = e - d | 0;\n b[a >> 2] = e;\n c = c - d | 0;\n b[h >> 2] = c;\n b[i >> 2] = 0;\n d = 0;\n }\n\n g = e - c | 0;\n f = d - c | 0;\n\n if ((c | 0) < 0) {\n b[a >> 2] = g;\n b[i >> 2] = f;\n b[h >> 2] = 0;\n e = g;\n c = 0;\n } else { f = d; }\n\n d = (f | 0) < (e | 0) ? f : e;\n d = (c | 0) < (d | 0) ? c : d;\n if ((d | 0) <= 0) { return; }\n b[a >> 2] = e - d;\n b[i >> 2] = f - d;\n b[h >> 2] = c - d;\n return;\n }\n\n function Na(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n f = b[a >> 2] | 0;\n h = a + 4 | 0;\n c = b[h >> 2] | 0;\n i = a + 8 | 0;\n d = b[i >> 2] | 0;\n e = c + f | 0;\n f = d + f | 0;\n b[a >> 2] = f;\n b[h >> 2] = e;\n c = d + c | 0;\n b[i >> 2] = c;\n d = e - f | 0;\n\n if ((f | 0) < 0) {\n c = c - f | 0;\n b[h >> 2] = d;\n b[i >> 2] = c;\n b[a >> 2] = 0;\n e = 0;\n } else {\n d = e;\n e = f;\n }\n\n if ((d | 0) < 0) {\n e = e - d | 0;\n b[a >> 2] = e;\n c = c - d | 0;\n b[i >> 2] = c;\n b[h >> 2] = 0;\n d = 0;\n }\n\n g = e - c | 0;\n f = d - c | 0;\n\n if ((c | 0) < 0) {\n b[a >> 2] = g;\n b[h >> 2] = f;\n b[i >> 2] = 0;\n e = g;\n c = 0;\n } else { f = d; }\n\n d = (f | 0) < (e | 0) ? f : e;\n d = (c | 0) < (d | 0) ? c : d;\n if ((d | 0) <= 0) { return; }\n b[a >> 2] = e - d;\n b[h >> 2] = f - d;\n b[i >> 2] = c - d;\n return;\n }\n\n function Oa(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n c = b[a >> 2] | 0;\n h = a + 4 | 0;\n e = b[h >> 2] | 0;\n i = a + 8 | 0;\n d = b[i >> 2] | 0;\n f = e + c | 0;\n b[a >> 2] = f;\n e = d + e | 0;\n b[h >> 2] = e;\n c = d + c | 0;\n b[i >> 2] = c;\n d = e - f | 0;\n\n if ((f | 0) < 0) {\n c = c - f | 0;\n b[h >> 2] = d;\n b[i >> 2] = c;\n b[a >> 2] = 0;\n e = 0;\n } else {\n d = e;\n e = f;\n }\n\n if ((d | 0) < 0) {\n e = e - d | 0;\n b[a >> 2] = e;\n c = c - d | 0;\n b[i >> 2] = c;\n b[h >> 2] = 0;\n d = 0;\n }\n\n g = e - c | 0;\n f = d - c | 0;\n\n if ((c | 0) < 0) {\n b[a >> 2] = g;\n b[h >> 2] = f;\n b[i >> 2] = 0;\n e = g;\n c = 0;\n } else { f = d; }\n\n d = (f | 0) < (e | 0) ? f : e;\n d = (c | 0) < (d | 0) ? c : d;\n if ((d | 0) <= 0) { return; }\n b[a >> 2] = e - d;\n b[h >> 2] = f - d;\n b[i >> 2] = c - d;\n return;\n }\n\n function Pa(a) {\n a = a | 0;\n\n switch (a | 0) {\n case 1:\n {\n a = 5;\n break;\n }\n\n case 5:\n {\n a = 4;\n break;\n }\n\n case 4:\n {\n a = 6;\n break;\n }\n\n case 6:\n {\n a = 2;\n break;\n }\n\n case 2:\n {\n a = 3;\n break;\n }\n\n case 3:\n {\n a = 1;\n break;\n }\n\n default:\n\n }\n\n return a | 0;\n }\n\n function Qa(a) {\n a = a | 0;\n\n switch (a | 0) {\n case 1:\n {\n a = 3;\n break;\n }\n\n case 3:\n {\n a = 2;\n break;\n }\n\n case 2:\n {\n a = 6;\n break;\n }\n\n case 6:\n {\n a = 4;\n break;\n }\n\n case 4:\n {\n a = 5;\n break;\n }\n\n case 5:\n {\n a = 1;\n break;\n }\n\n default:\n\n }\n\n return a | 0;\n }\n\n function Ra(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n c = b[a >> 2] | 0;\n h = a + 4 | 0;\n d = b[h >> 2] | 0;\n i = a + 8 | 0;\n e = b[i >> 2] | 0;\n f = d + (c << 1) | 0;\n b[a >> 2] = f;\n d = e + (d << 1) | 0;\n b[h >> 2] = d;\n c = (e << 1) + c | 0;\n b[i >> 2] = c;\n e = d - f | 0;\n\n if ((f | 0) < 0) {\n c = c - f | 0;\n b[h >> 2] = e;\n b[i >> 2] = c;\n b[a >> 2] = 0;\n d = e;\n e = 0;\n } else { e = f; }\n\n if ((d | 0) < 0) {\n e = e - d | 0;\n b[a >> 2] = e;\n c = c - d | 0;\n b[i >> 2] = c;\n b[h >> 2] = 0;\n d = 0;\n }\n\n g = e - c | 0;\n f = d - c | 0;\n\n if ((c | 0) < 0) {\n b[a >> 2] = g;\n b[h >> 2] = f;\n b[i >> 2] = 0;\n e = g;\n c = 0;\n } else { f = d; }\n\n d = (f | 0) < (e | 0) ? f : e;\n d = (c | 0) < (d | 0) ? c : d;\n if ((d | 0) <= 0) { return; }\n b[a >> 2] = e - d;\n b[h >> 2] = f - d;\n b[i >> 2] = c - d;\n return;\n }\n\n function Sa(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n f = b[a >> 2] | 0;\n h = a + 4 | 0;\n c = b[h >> 2] | 0;\n i = a + 8 | 0;\n d = b[i >> 2] | 0;\n e = (c << 1) + f | 0;\n f = d + (f << 1) | 0;\n b[a >> 2] = f;\n b[h >> 2] = e;\n c = (d << 1) + c | 0;\n b[i >> 2] = c;\n d = e - f | 0;\n\n if ((f | 0) < 0) {\n c = c - f | 0;\n b[h >> 2] = d;\n b[i >> 2] = c;\n b[a >> 2] = 0;\n f = 0;\n } else { d = e; }\n\n if ((d | 0) < 0) {\n f = f - d | 0;\n b[a >> 2] = f;\n c = c - d | 0;\n b[i >> 2] = c;\n b[h >> 2] = 0;\n d = 0;\n }\n\n g = f - c | 0;\n e = d - c | 0;\n\n if ((c | 0) < 0) {\n b[a >> 2] = g;\n b[h >> 2] = e;\n b[i >> 2] = 0;\n f = g;\n c = 0;\n } else { e = d; }\n\n d = (e | 0) < (f | 0) ? e : f;\n d = (c | 0) < (d | 0) ? c : d;\n if ((d | 0) <= 0) { return; }\n b[a >> 2] = f - d;\n b[h >> 2] = e - d;\n b[i >> 2] = c - d;\n return;\n }\n\n function Ta(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n h = (b[a >> 2] | 0) - (b[c >> 2] | 0) | 0;\n i = (h | 0) < 0;\n e = (b[a + 4 >> 2] | 0) - (b[c + 4 >> 2] | 0) - (i ? h : 0) | 0;\n g = (e | 0) < 0;\n f = (i ? 0 - h | 0 : 0) + (b[a + 8 >> 2] | 0) - (b[c + 8 >> 2] | 0) + (g ? 0 - e | 0 : 0) | 0;\n a = (f | 0) < 0;\n c = a ? 0 : f;\n d = (g ? 0 : e) - (a ? f : 0) | 0;\n f = (i ? 0 : h) - (g ? e : 0) - (a ? f : 0) | 0;\n a = (d | 0) < (f | 0) ? d : f;\n a = (c | 0) < (a | 0) ? c : a;\n e = (a | 0) > 0;\n c = c - (e ? a : 0) | 0;\n d = d - (e ? a : 0) | 0;\n a = f - (e ? a : 0) | 0;\n a = (a | 0) > -1 ? a : 0 - a | 0;\n d = (d | 0) > -1 ? d : 0 - d | 0;\n c = (c | 0) > -1 ? c : 0 - c | 0;\n c = (d | 0) > (c | 0) ? d : c;\n return ((a | 0) > (c | 0) ? a : c) | 0;\n }\n\n function Ua(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0;\n d = b[a + 8 >> 2] | 0;\n b[c >> 2] = (b[a >> 2] | 0) - d;\n b[c + 4 >> 2] = (b[a + 4 >> 2] | 0) - d;\n return;\n }\n\n function Va(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n e = b[a >> 2] | 0;\n b[c >> 2] = e;\n a = b[a + 4 >> 2] | 0;\n h = c + 4 | 0;\n b[h >> 2] = a;\n i = c + 8 | 0;\n b[i >> 2] = 0;\n d = a - e | 0;\n\n if ((e | 0) < 0) {\n a = 0 - e | 0;\n b[h >> 2] = d;\n b[i >> 2] = a;\n b[c >> 2] = 0;\n e = 0;\n } else {\n d = a;\n a = 0;\n }\n\n if ((d | 0) < 0) {\n e = e - d | 0;\n b[c >> 2] = e;\n a = a - d | 0;\n b[i >> 2] = a;\n b[h >> 2] = 0;\n d = 0;\n }\n\n g = e - a | 0;\n f = d - a | 0;\n\n if ((a | 0) < 0) {\n b[c >> 2] = g;\n b[h >> 2] = f;\n b[i >> 2] = 0;\n d = f;\n f = g;\n a = 0;\n } else { f = e; }\n\n e = (d | 0) < (f | 0) ? d : f;\n e = (a | 0) < (e | 0) ? a : e;\n if ((e | 0) <= 0) { return; }\n b[c >> 2] = f - e;\n b[h >> 2] = d - e;\n b[i >> 2] = a - e;\n return;\n }\n\n function Wa(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0;\n c = a + 8 | 0;\n f = b[c >> 2] | 0;\n d = f - (b[a >> 2] | 0) | 0;\n b[a >> 2] = d;\n e = a + 4 | 0;\n a = (b[e >> 2] | 0) - f | 0;\n b[e >> 2] = a;\n b[c >> 2] = 0 - (a + d);\n return;\n }\n\n function Xa(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n d = b[a >> 2] | 0;\n c = 0 - d | 0;\n b[a >> 2] = c;\n h = a + 8 | 0;\n b[h >> 2] = 0;\n i = a + 4 | 0;\n e = b[i >> 2] | 0;\n f = e + d | 0;\n\n if ((d | 0) > 0) {\n b[i >> 2] = f;\n b[h >> 2] = d;\n b[a >> 2] = 0;\n c = 0;\n e = f;\n } else { d = 0; }\n\n if ((e | 0) < 0) {\n g = c - e | 0;\n b[a >> 2] = g;\n d = d - e | 0;\n b[h >> 2] = d;\n b[i >> 2] = 0;\n f = g - d | 0;\n c = 0 - d | 0;\n\n if ((d | 0) < 0) {\n b[a >> 2] = f;\n b[i >> 2] = c;\n b[h >> 2] = 0;\n e = c;\n d = 0;\n } else {\n e = 0;\n f = g;\n }\n } else { f = c; }\n\n c = (e | 0) < (f | 0) ? e : f;\n c = (d | 0) < (c | 0) ? d : c;\n if ((c | 0) <= 0) { return; }\n b[a >> 2] = f - c;\n b[i >> 2] = e - c;\n b[h >> 2] = d - c;\n return;\n }\n\n function Ya(a, b, c) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n var d = 0,\n e = 0;\n d = S;\n S = S + 16 | 0;\n e = d;\n Za(a, b, c, e);\n Ba(e, c + 4 | 0);\n S = d;\n return;\n }\n\n function Za(a, c, d, f) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n f = f | 0;\n var g = 0.0,\n h = 0,\n i = 0.0,\n j = 0.0,\n k = 0;\n k = S;\n S = S + 32 | 0;\n h = k;\n Jc(a, h);\n b[d >> 2] = 0;\n g = +Ic(15888, h);\n i = +Ic(15912, h);\n\n if (i < g) {\n b[d >> 2] = 1;\n g = i;\n }\n\n i = +Ic(15936, h);\n\n if (i < g) {\n b[d >> 2] = 2;\n g = i;\n }\n\n i = +Ic(15960, h);\n\n if (i < g) {\n b[d >> 2] = 3;\n g = i;\n }\n\n i = +Ic(15984, h);\n\n if (i < g) {\n b[d >> 2] = 4;\n g = i;\n }\n\n i = +Ic(16008, h);\n\n if (i < g) {\n b[d >> 2] = 5;\n g = i;\n }\n\n i = +Ic(16032, h);\n\n if (i < g) {\n b[d >> 2] = 6;\n g = i;\n }\n\n i = +Ic(16056, h);\n\n if (i < g) {\n b[d >> 2] = 7;\n g = i;\n }\n\n i = +Ic(16080, h);\n\n if (i < g) {\n b[d >> 2] = 8;\n g = i;\n }\n\n i = +Ic(16104, h);\n\n if (i < g) {\n b[d >> 2] = 9;\n g = i;\n }\n\n i = +Ic(16128, h);\n\n if (i < g) {\n b[d >> 2] = 10;\n g = i;\n }\n\n i = +Ic(16152, h);\n\n if (i < g) {\n b[d >> 2] = 11;\n g = i;\n }\n\n i = +Ic(16176, h);\n\n if (i < g) {\n b[d >> 2] = 12;\n g = i;\n }\n\n i = +Ic(16200, h);\n\n if (i < g) {\n b[d >> 2] = 13;\n g = i;\n }\n\n i = +Ic(16224, h);\n\n if (i < g) {\n b[d >> 2] = 14;\n g = i;\n }\n\n i = +Ic(16248, h);\n\n if (i < g) {\n b[d >> 2] = 15;\n g = i;\n }\n\n i = +Ic(16272, h);\n\n if (i < g) {\n b[d >> 2] = 16;\n g = i;\n }\n\n i = +Ic(16296, h);\n\n if (i < g) {\n b[d >> 2] = 17;\n g = i;\n }\n\n i = +Ic(16320, h);\n\n if (i < g) {\n b[d >> 2] = 18;\n g = i;\n }\n\n i = +Ic(16344, h);\n\n if (i < g) {\n b[d >> 2] = 19;\n g = i;\n }\n\n i = +w(+(1.0 - g * .5));\n\n if (i < 1.0e-16) {\n b[f >> 2] = 0;\n b[f + 4 >> 2] = 0;\n b[f + 8 >> 2] = 0;\n b[f + 12 >> 2] = 0;\n S = k;\n return;\n }\n\n d = b[d >> 2] | 0;\n g = +e[16368 + (d * 24 | 0) >> 3];\n g = +gb(g - +gb(+lb(15568 + (d << 4) | 0, a)));\n if (!(Rb(c) | 0)) { j = g; }else { j = +gb(g + -.3334731722518321); }\n g = +v(+i) / .381966011250105;\n\n if ((c | 0) > 0) {\n h = 0;\n\n do {\n g = g * 2.6457513110645907;\n h = h + 1 | 0;\n } while ((h | 0) != (c | 0));\n }\n\n i = +t(+j) * g;\n e[f >> 3] = i;\n j = +u(+j) * g;\n e[f + 8 >> 3] = j;\n S = k;\n return;\n }\n\n function _a(a, c, d, f, g) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n f = f | 0;\n g = g | 0;\n var h = 0.0,\n i = 0.0;\n h = +Fc(a);\n\n if (h < 1.0e-16) {\n c = 15568 + (c << 4) | 0;\n b[g >> 2] = b[c >> 2];\n b[g + 4 >> 2] = b[c + 4 >> 2];\n b[g + 8 >> 2] = b[c + 8 >> 2];\n b[g + 12 >> 2] = b[c + 12 >> 2];\n return;\n }\n\n i = +z(+ +e[a + 8 >> 3], + +e[a >> 3]);\n\n if ((d | 0) > 0) {\n a = 0;\n\n do {\n h = h / 2.6457513110645907;\n a = a + 1 | 0;\n } while ((a | 0) != (d | 0));\n }\n\n if (!f) {\n h = +y(+(h * .381966011250105));\n if (Rb(d) | 0) { i = +gb(i + .3334731722518321); }\n } else {\n h = h / 3.0;\n d = (Rb(d) | 0) == 0;\n h = +y(+((d ? h : h / 2.6457513110645907) * .381966011250105));\n }\n\n mb(15568 + (c << 4) | 0, +gb(+e[16368 + (c * 24 | 0) >> 3] - i), h, g);\n return;\n }\n\n function $a(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0;\n e = S;\n S = S + 16 | 0;\n f = e;\n Da(a + 4 | 0, f);\n\n _a(f, b[a >> 2] | 0, c, 0, d);\n\n S = e;\n return;\n }\n\n function ab(a, c, d, f, g) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n f = f | 0;\n g = g | 0;\n var h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0,\n p = 0,\n q = 0,\n r = 0,\n s = 0,\n t = 0,\n u = 0,\n v = 0,\n w = 0,\n x = 0,\n y = 0,\n z = 0,\n A = 0,\n B = 0,\n C = 0,\n D = 0,\n E = 0,\n F = 0,\n G = 0,\n I = 0.0,\n J = 0.0;\n G = S;\n S = S + 272 | 0;\n h = G + 256 | 0;\n u = G + 240 | 0;\n D = G;\n E = G + 224 | 0;\n F = G + 208 | 0;\n v = G + 176 | 0;\n w = G + 160 | 0;\n x = G + 192 | 0;\n y = G + 144 | 0;\n z = G + 128 | 0;\n A = G + 112 | 0;\n B = G + 96 | 0;\n C = G + 80 | 0;\n b[h >> 2] = c;\n b[u >> 2] = b[a >> 2];\n b[u + 4 >> 2] = b[a + 4 >> 2];\n b[u + 8 >> 2] = b[a + 8 >> 2];\n b[u + 12 >> 2] = b[a + 12 >> 2];\n bb(u, h, D);\n b[g >> 2] = 0;\n u = f + d + ((f | 0) == 5 & 1) | 0;\n\n if ((u | 0) <= (d | 0)) {\n S = G;\n return;\n }\n\n k = b[h >> 2] | 0;\n l = E + 4 | 0;\n m = v + 4 | 0;\n n = d + 5 | 0;\n o = 16848 + (k << 2) | 0;\n p = 16928 + (k << 2) | 0;\n q = z + 8 | 0;\n r = A + 8 | 0;\n s = B + 8 | 0;\n t = F + 4 | 0;\n j = d;\n\n a: while (1) {\n i = D + (((j | 0) % 5 | 0) << 4) | 0;\n b[F >> 2] = b[i >> 2];\n b[F + 4 >> 2] = b[i + 4 >> 2];\n b[F + 8 >> 2] = b[i + 8 >> 2];\n b[F + 12 >> 2] = b[i + 12 >> 2];\n\n do {} while ((cb(F, k, 0, 1) | 0) == 2);\n\n if ((j | 0) > (d | 0) & (Rb(c) | 0) != 0) {\n b[v >> 2] = b[F >> 2];\n b[v + 4 >> 2] = b[F + 4 >> 2];\n b[v + 8 >> 2] = b[F + 8 >> 2];\n b[v + 12 >> 2] = b[F + 12 >> 2];\n Da(l, w);\n f = b[v >> 2] | 0;\n h = b[17008 + (f * 80 | 0) + (b[E >> 2] << 2) >> 2] | 0;\n b[v >> 2] = b[18608 + (f * 80 | 0) + (h * 20 | 0) >> 2];\n i = b[18608 + (f * 80 | 0) + (h * 20 | 0) + 16 >> 2] | 0;\n\n if ((i | 0) > 0) {\n a = 0;\n\n do {\n Na(m);\n a = a + 1 | 0;\n } while ((a | 0) < (i | 0));\n }\n\n i = 18608 + (f * 80 | 0) + (h * 20 | 0) + 4 | 0;\n b[x >> 2] = b[i >> 2];\n b[x + 4 >> 2] = b[i + 4 >> 2];\n b[x + 8 >> 2] = b[i + 8 >> 2];\n Ga(x, (b[o >> 2] | 0) * 3 | 0);\n Ea(m, x, m);\n Ca(m);\n Da(m, y);\n I = +(b[p >> 2] | 0);\n e[z >> 3] = I * 3.0;\n e[q >> 3] = 0.0;\n J = I * -1.5;\n e[A >> 3] = J;\n e[r >> 3] = I * 2.598076211353316;\n e[B >> 3] = J;\n e[s >> 3] = I * -2.598076211353316;\n\n switch (b[17008 + ((b[v >> 2] | 0) * 80 | 0) + (b[F >> 2] << 2) >> 2] | 0) {\n case 1:\n {\n a = A;\n f = z;\n break;\n }\n\n case 3:\n {\n a = B;\n f = A;\n break;\n }\n\n case 2:\n {\n a = z;\n f = B;\n break;\n }\n\n default:\n {\n a = 12;\n break a;\n }\n }\n\n Gc(w, y, f, a, C);\n\n _a(C, b[v >> 2] | 0, k, 1, g + 8 + (b[g >> 2] << 4) | 0);\n\n b[g >> 2] = (b[g >> 2] | 0) + 1;\n }\n\n if ((j | 0) < (n | 0)) {\n Da(t, v);\n\n _a(v, b[F >> 2] | 0, k, 1, g + 8 + (b[g >> 2] << 4) | 0);\n\n b[g >> 2] = (b[g >> 2] | 0) + 1;\n }\n b[E >> 2] = b[F >> 2];\n b[E + 4 >> 2] = b[F + 4 >> 2];\n b[E + 8 >> 2] = b[F + 8 >> 2];\n b[E + 12 >> 2] = b[F + 12 >> 2];\n j = j + 1 | 0;\n\n if ((j | 0) >= (u | 0)) {\n a = 3;\n break;\n }\n }\n\n if ((a | 0) == 3) {\n S = G;\n return;\n } else if ((a | 0) == 12) { H(22474, 22521, 581, 22531); }\n }\n\n function bb(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0;\n j = S;\n S = S + 128 | 0;\n e = j + 64 | 0;\n f = j;\n g = e;\n h = 20208;\n i = g + 60 | 0;\n\n do {\n b[g >> 2] = b[h >> 2];\n g = g + 4 | 0;\n h = h + 4 | 0;\n } while ((g | 0) < (i | 0));\n\n g = f;\n h = 20272;\n i = g + 60 | 0;\n\n do {\n b[g >> 2] = b[h >> 2];\n g = g + 4 | 0;\n h = h + 4 | 0;\n } while ((g | 0) < (i | 0));\n\n i = (Rb(b[c >> 2] | 0) | 0) == 0;\n e = i ? e : f;\n f = a + 4 | 0;\n Ra(f);\n Sa(f);\n\n if (Rb(b[c >> 2] | 0) | 0) {\n La(f);\n b[c >> 2] = (b[c >> 2] | 0) + 1;\n }\n\n b[d >> 2] = b[a >> 2];\n c = d + 4 | 0;\n Ea(f, e, c);\n Ca(c);\n b[d + 16 >> 2] = b[a >> 2];\n c = d + 20 | 0;\n Ea(f, e + 12 | 0, c);\n Ca(c);\n b[d + 32 >> 2] = b[a >> 2];\n c = d + 36 | 0;\n Ea(f, e + 24 | 0, c);\n Ca(c);\n b[d + 48 >> 2] = b[a >> 2];\n c = d + 52 | 0;\n Ea(f, e + 36 | 0, c);\n Ca(c);\n b[d + 64 >> 2] = b[a >> 2];\n d = d + 68 | 0;\n Ea(f, e + 48 | 0, d);\n Ca(d);\n S = j;\n return;\n }\n\n function cb(a, c, d, e) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0,\n p = 0;\n p = S;\n S = S + 32 | 0;\n n = p + 12 | 0;\n i = p;\n o = a + 4 | 0;\n m = b[16928 + (c << 2) >> 2] | 0;\n l = (e | 0) != 0;\n m = l ? m * 3 | 0 : m;\n f = b[o >> 2] | 0;\n k = a + 8 | 0;\n h = b[k >> 2] | 0;\n\n if (l) {\n g = a + 12 | 0;\n e = b[g >> 2] | 0;\n f = h + f + e | 0;\n\n if ((f | 0) == (m | 0)) {\n o = 1;\n S = p;\n return o | 0;\n } else { j = g; }\n } else {\n j = a + 12 | 0;\n e = b[j >> 2] | 0;\n f = h + f + e | 0;\n }\n\n if ((f | 0) <= (m | 0)) {\n o = 0;\n S = p;\n return o | 0;\n }\n\n do { if ((e | 0) > 0) {\n e = b[a >> 2] | 0;\n\n if ((h | 0) > 0) {\n g = 18608 + (e * 80 | 0) + 60 | 0;\n e = a;\n break;\n }\n\n e = 18608 + (e * 80 | 0) + 40 | 0;\n\n if (!d) {\n g = e;\n e = a;\n } else {\n Aa(n, m, 0, 0);\n Fa(o, n, i);\n Oa(i);\n Ea(i, n, o);\n g = e;\n e = a;\n }\n } else {\n g = 18608 + ((b[a >> 2] | 0) * 80 | 0) + 20 | 0;\n e = a;\n } } while (0);\n\n b[e >> 2] = b[g >> 2];\n f = g + 16 | 0;\n\n if ((b[f >> 2] | 0) > 0) {\n e = 0;\n\n do {\n Na(o);\n e = e + 1 | 0;\n } while ((e | 0) < (b[f >> 2] | 0));\n }\n\n a = g + 4 | 0;\n b[n >> 2] = b[a >> 2];\n b[n + 4 >> 2] = b[a + 4 >> 2];\n b[n + 8 >> 2] = b[a + 8 >> 2];\n c = b[16848 + (c << 2) >> 2] | 0;\n Ga(n, l ? c * 3 | 0 : c);\n Ea(o, n, o);\n Ca(o);\n if (l) { e = ((b[k >> 2] | 0) + (b[o >> 2] | 0) + (b[j >> 2] | 0) | 0) == (m | 0) ? 1 : 2; }else { e = 2; }\n o = e;\n S = p;\n return o | 0;\n }\n\n function db(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0;\n\n do { c = cb(a, b, 0, 1) | 0; } while ((c | 0) == 2);\n\n return c | 0;\n }\n\n function eb(a, c, d, f, g) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n f = f | 0;\n g = g | 0;\n var h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0,\n p = 0,\n q = 0,\n r = 0,\n s = 0,\n t = 0,\n u = 0,\n v = 0,\n w = 0,\n x = 0,\n y = 0,\n z = 0,\n A = 0,\n B = 0,\n C = 0.0,\n D = 0.0;\n B = S;\n S = S + 240 | 0;\n h = B + 224 | 0;\n x = B + 208 | 0;\n y = B;\n z = B + 192 | 0;\n A = B + 176 | 0;\n s = B + 160 | 0;\n t = B + 144 | 0;\n u = B + 128 | 0;\n v = B + 112 | 0;\n w = B + 96 | 0;\n b[h >> 2] = c;\n b[x >> 2] = b[a >> 2];\n b[x + 4 >> 2] = b[a + 4 >> 2];\n b[x + 8 >> 2] = b[a + 8 >> 2];\n b[x + 12 >> 2] = b[a + 12 >> 2];\n fb(x, h, y);\n b[g >> 2] = 0;\n r = f + d + ((f | 0) == 6 & 1) | 0;\n\n if ((r | 0) <= (d | 0)) {\n S = B;\n return;\n }\n\n k = b[h >> 2] | 0;\n l = d + 6 | 0;\n m = 16928 + (k << 2) | 0;\n n = t + 8 | 0;\n o = u + 8 | 0;\n p = v + 8 | 0;\n q = z + 4 | 0;\n i = 0;\n j = d;\n f = -1;\n\n a: while (1) {\n h = (j | 0) % 6 | 0;\n a = y + (h << 4) | 0;\n b[z >> 2] = b[a >> 2];\n b[z + 4 >> 2] = b[a + 4 >> 2];\n b[z + 8 >> 2] = b[a + 8 >> 2];\n b[z + 12 >> 2] = b[a + 12 >> 2];\n a = i;\n i = cb(z, k, 0, 1) | 0;\n\n if ((j | 0) > (d | 0) & (Rb(c) | 0) != 0 ? (a | 0) != 1 ? (b[z >> 2] | 0) != (f | 0) : 0 : 0) {\n Da(y + (((h + 5 | 0) % 6 | 0) << 4) + 4 | 0, A);\n Da(y + (h << 4) + 4 | 0, s);\n C = +(b[m >> 2] | 0);\n e[t >> 3] = C * 3.0;\n e[n >> 3] = 0.0;\n D = C * -1.5;\n e[u >> 3] = D;\n e[o >> 3] = C * 2.598076211353316;\n e[v >> 3] = D;\n e[p >> 3] = C * -2.598076211353316;\n h = b[x >> 2] | 0;\n\n switch (b[17008 + (h * 80 | 0) + (((f | 0) == (h | 0) ? b[z >> 2] | 0 : f) << 2) >> 2] | 0) {\n case 1:\n {\n a = u;\n f = t;\n break;\n }\n\n case 3:\n {\n a = v;\n f = u;\n break;\n }\n\n case 2:\n {\n a = t;\n f = v;\n break;\n }\n\n default:\n {\n a = 8;\n break a;\n }\n }\n\n Gc(A, s, f, a, w);\n\n if (!(Hc(A, w) | 0) ? !(Hc(s, w) | 0) : 0) {\n _a(w, b[x >> 2] | 0, k, 1, g + 8 + (b[g >> 2] << 4) | 0);\n\n b[g >> 2] = (b[g >> 2] | 0) + 1;\n }\n }\n\n if ((j | 0) < (l | 0)) {\n Da(q, A);\n\n _a(A, b[z >> 2] | 0, k, 1, g + 8 + (b[g >> 2] << 4) | 0);\n\n b[g >> 2] = (b[g >> 2] | 0) + 1;\n }\n\n j = j + 1 | 0;\n\n if ((j | 0) >= (r | 0)) {\n a = 3;\n break;\n } else { f = b[z >> 2] | 0; }\n }\n\n if ((a | 0) == 3) {\n S = B;\n return;\n } else if ((a | 0) == 8) { H(22557, 22521, 746, 22602); }\n }\n\n function fb(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0;\n j = S;\n S = S + 160 | 0;\n e = j + 80 | 0;\n f = j;\n g = e;\n h = 20336;\n i = g + 72 | 0;\n\n do {\n b[g >> 2] = b[h >> 2];\n g = g + 4 | 0;\n h = h + 4 | 0;\n } while ((g | 0) < (i | 0));\n\n g = f;\n h = 20416;\n i = g + 72 | 0;\n\n do {\n b[g >> 2] = b[h >> 2];\n g = g + 4 | 0;\n h = h + 4 | 0;\n } while ((g | 0) < (i | 0));\n\n i = (Rb(b[c >> 2] | 0) | 0) == 0;\n e = i ? e : f;\n f = a + 4 | 0;\n Ra(f);\n Sa(f);\n\n if (Rb(b[c >> 2] | 0) | 0) {\n La(f);\n b[c >> 2] = (b[c >> 2] | 0) + 1;\n }\n\n b[d >> 2] = b[a >> 2];\n c = d + 4 | 0;\n Ea(f, e, c);\n Ca(c);\n b[d + 16 >> 2] = b[a >> 2];\n c = d + 20 | 0;\n Ea(f, e + 12 | 0, c);\n Ca(c);\n b[d + 32 >> 2] = b[a >> 2];\n c = d + 36 | 0;\n Ea(f, e + 24 | 0, c);\n Ca(c);\n b[d + 48 >> 2] = b[a >> 2];\n c = d + 52 | 0;\n Ea(f, e + 36 | 0, c);\n Ca(c);\n b[d + 64 >> 2] = b[a >> 2];\n c = d + 68 | 0;\n Ea(f, e + 48 | 0, c);\n Ca(c);\n b[d + 80 >> 2] = b[a >> 2];\n d = d + 84 | 0;\n Ea(f, e + 60 | 0, d);\n Ca(d);\n S = j;\n return;\n }\n\n function gb(a) {\n a = +a;\n var b = 0.0;\n b = a < 0.0 ? a + 6.283185307179586 : a;\n return +(!(a >= 6.283185307179586) ? b : b + -6.283185307179586);\n }\n\n function hb(a, b) {\n a = a | 0;\n b = b | 0;\n\n if (!(+q(+(+e[a >> 3] - +e[b >> 3])) < 1.7453292519943298e-11)) {\n b = 0;\n return b | 0;\n }\n\n b = +q(+(+e[a + 8 >> 3] - +e[b + 8 >> 3])) < 1.7453292519943298e-11;\n return b | 0;\n }\n\n function ib(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0.0,\n d = 0.0,\n f = 0.0,\n g = 0.0;\n f = +e[b >> 3];\n d = +e[a >> 3];\n g = +u(+((f - d) * .5));\n c = +u(+((+e[b + 8 >> 3] - +e[a + 8 >> 3]) * .5));\n c = g * g + c * (+t(+f) * +t(+d) * c);\n return +(+z(+ +r(+c), + +r(+(1.0 - c))) * 2.0);\n }\n\n function jb(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0.0,\n d = 0.0,\n f = 0.0,\n g = 0.0;\n f = +e[b >> 3];\n d = +e[a >> 3];\n g = +u(+((f - d) * .5));\n c = +u(+((+e[b + 8 >> 3] - +e[a + 8 >> 3]) * .5));\n c = g * g + c * (+t(+f) * +t(+d) * c);\n return +(+z(+ +r(+c), + +r(+(1.0 - c))) * 2.0 * 6371.007180918475);\n }\n\n function kb(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0.0,\n d = 0.0,\n f = 0.0,\n g = 0.0;\n f = +e[b >> 3];\n d = +e[a >> 3];\n g = +u(+((f - d) * .5));\n c = +u(+((+e[b + 8 >> 3] - +e[a + 8 >> 3]) * .5));\n c = g * g + c * (+t(+f) * +t(+d) * c);\n return +(+z(+ +r(+c), + +r(+(1.0 - c))) * 2.0 * 6371.007180918475 * 1.0e3);\n }\n\n function lb(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0.0,\n d = 0.0,\n f = 0.0,\n g = 0.0,\n h = 0.0;\n g = +e[b >> 3];\n d = +t(+g);\n f = +e[b + 8 >> 3] - +e[a + 8 >> 3];\n h = d * +u(+f);\n c = +e[a >> 3];\n return + +z(+h, +(+u(+g) * +t(+c) - +t(+f) * (d * +u(+c))));\n }\n\n function mb(a, c, d, f) {\n a = a | 0;\n c = +c;\n d = +d;\n f = f | 0;\n var g = 0,\n h = 0.0,\n i = 0.0,\n j = 0.0;\n\n if (d < 1.0e-16) {\n b[f >> 2] = b[a >> 2];\n b[f + 4 >> 2] = b[a + 4 >> 2];\n b[f + 8 >> 2] = b[a + 8 >> 2];\n b[f + 12 >> 2] = b[a + 12 >> 2];\n return;\n }\n\n h = c < 0.0 ? c + 6.283185307179586 : c;\n h = !(c >= 6.283185307179586) ? h : h + -6.283185307179586;\n\n do { if (h < 1.0e-16) {\n c = +e[a >> 3] + d;\n e[f >> 3] = c;\n g = f;\n } else {\n g = +q(+(h + -3.141592653589793)) < 1.0e-16;\n c = +e[a >> 3];\n\n if (g) {\n c = c - d;\n e[f >> 3] = c;\n g = f;\n break;\n }\n\n i = +t(+d);\n d = +u(+d);\n c = i * +u(+c) + +t(+h) * (d * +t(+c));\n c = c > 1.0 ? 1.0 : c;\n c = +x(+(c < -1.0 ? -1.0 : c));\n e[f >> 3] = c;\n\n if (+q(+(c + -1.5707963267948966)) < 1.0e-16) {\n e[f >> 3] = 1.5707963267948966;\n e[f + 8 >> 3] = 0.0;\n return;\n }\n\n if (+q(+(c + 1.5707963267948966)) < 1.0e-16) {\n e[f >> 3] = -1.5707963267948966;\n e[f + 8 >> 3] = 0.0;\n return;\n }\n\n j = +t(+c);\n h = d * +u(+h) / j;\n d = +e[a >> 3];\n c = (i - +u(+c) * +u(+d)) / +t(+d) / j;\n i = h > 1.0 ? 1.0 : h;\n c = c > 1.0 ? 1.0 : c;\n c = +e[a + 8 >> 3] + +z(+(i < -1.0 ? -1.0 : i), +(c < -1.0 ? -1.0 : c));\n if (c > 3.141592653589793) { do { c = c + -6.283185307179586; } while (c > 3.141592653589793); }\n if (c < -3.141592653589793) { do { c = c + 6.283185307179586; } while (c < -3.141592653589793); }\n e[f + 8 >> 3] = c;\n return;\n } } while (0);\n\n if (+q(+(c + -1.5707963267948966)) < 1.0e-16) {\n e[g >> 3] = 1.5707963267948966;\n e[f + 8 >> 3] = 0.0;\n return;\n }\n\n if (+q(+(c + 1.5707963267948966)) < 1.0e-16) {\n e[g >> 3] = -1.5707963267948966;\n e[f + 8 >> 3] = 0.0;\n return;\n }\n\n c = +e[a + 8 >> 3];\n if (c > 3.141592653589793) { do { c = c + -6.283185307179586; } while (c > 3.141592653589793); }\n if (c < -3.141592653589793) { do { c = c + 6.283185307179586; } while (c < -3.141592653589793); }\n e[f + 8 >> 3] = c;\n return;\n }\n\n function nb(a) {\n a = a | 0;\n return + +e[20496 + (a << 3) >> 3];\n }\n\n function ob(a) {\n a = a | 0;\n return + +e[20624 + (a << 3) >> 3];\n }\n\n function pb(a) {\n a = a | 0;\n return + +e[20752 + (a << 3) >> 3];\n }\n\n function qb(a) {\n a = a | 0;\n return + +e[20880 + (a << 3) >> 3];\n }\n\n function rb(a) {\n a = a | 0;\n var c = 0;\n c = 21008 + (a << 3) | 0;\n a = b[c >> 2] | 0;\n F(b[c + 4 >> 2] | 0);\n return a | 0;\n }\n\n function sb(a, b, c) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n var d = 0.0,\n f = 0.0,\n g = 0.0,\n h = 0.0,\n i = 0.0,\n j = 0.0,\n k = 0.0,\n l = 0.0,\n m = 0.0,\n n = 0.0;\n n = +e[b >> 3];\n l = +e[a >> 3];\n j = +u(+((n - l) * .5));\n g = +e[b + 8 >> 3];\n k = +e[a + 8 >> 3];\n h = +u(+((g - k) * .5));\n i = +t(+l);\n m = +t(+n);\n h = j * j + h * (m * i * h);\n h = +z(+ +r(+h), + +r(+(1.0 - h))) * 2.0;\n j = +e[c >> 3];\n n = +u(+((j - n) * .5));\n d = +e[c + 8 >> 3];\n g = +u(+((d - g) * .5));\n f = +t(+j);\n g = n * n + g * (m * f * g);\n g = +z(+ +r(+g), + +r(+(1.0 - g))) * 2.0;\n j = +u(+((l - j) * .5));\n d = +u(+((k - d) * .5));\n d = j * j + d * (i * f * d);\n d = +z(+ +r(+d), + +r(+(1.0 - d))) * 2.0;\n f = (h + g + d) * .5;\n return +(+y(+ +r(+(+v(+(f * .5)) * +v(+((f - h) * .5)) * +v(+((f - g) * .5)) * +v(+((f - d) * .5))))) * 4.0);\n }\n\n function tb(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0.0,\n e = 0,\n f = 0,\n g = 0,\n h = 0;\n g = S;\n S = S + 192 | 0;\n e = g + 168 | 0;\n f = g;\n Vb(a, c, e);\n Wb(a, c, f);\n c = b[f >> 2] | 0;\n\n if ((c | 0) <= 0) {\n d = 0.0;\n S = g;\n return +d;\n }\n\n d = +sb(f + 8 | 0, f + 8 + (((c | 0) != 1 & 1) << 4) | 0, e) + 0.0;\n\n if ((c | 0) == 1) {\n S = g;\n return +d;\n }\n\n a = 1;\n\n do {\n h = a;\n a = a + 1 | 0;\n d = d + +sb(f + 8 + (h << 4) | 0, f + 8 + (((a | 0) % (c | 0) | 0) << 4) | 0, e);\n } while ((a | 0) < (c | 0));\n\n S = g;\n return +d;\n }\n\n function ub(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0.0,\n e = 0,\n f = 0,\n g = 0,\n h = 0;\n g = S;\n S = S + 192 | 0;\n e = g + 168 | 0;\n f = g;\n Vb(a, c, e);\n Wb(a, c, f);\n c = b[f >> 2] | 0;\n\n if ((c | 0) > 0) {\n d = +sb(f + 8 | 0, f + 8 + (((c | 0) != 1 & 1) << 4) | 0, e) + 0.0;\n\n if ((c | 0) != 1) {\n a = 1;\n\n do {\n h = a;\n a = a + 1 | 0;\n d = d + +sb(f + 8 + (h << 4) | 0, f + 8 + (((a | 0) % (c | 0) | 0) << 4) | 0, e);\n } while ((a | 0) < (c | 0));\n }\n } else { d = 0.0; }\n\n S = g;\n return +(d * 6371.007180918475 * 6371.007180918475);\n }\n\n function vb(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0.0,\n e = 0,\n f = 0,\n g = 0,\n h = 0;\n g = S;\n S = S + 192 | 0;\n e = g + 168 | 0;\n f = g;\n Vb(a, c, e);\n Wb(a, c, f);\n c = b[f >> 2] | 0;\n\n if ((c | 0) > 0) {\n d = +sb(f + 8 | 0, f + 8 + (((c | 0) != 1 & 1) << 4) | 0, e) + 0.0;\n\n if ((c | 0) != 1) {\n a = 1;\n\n do {\n h = a;\n a = a + 1 | 0;\n d = d + +sb(f + 8 + (h << 4) | 0, f + 8 + (((a | 0) % (c | 0) | 0) << 4) | 0, e);\n } while ((a | 0) < (c | 0));\n }\n } else { d = 0.0; }\n\n S = g;\n return +(d * 6371.007180918475 * 6371.007180918475 * 1.0e3 * 1.0e3);\n }\n\n function wb(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0.0,\n f = 0.0,\n g = 0.0,\n h = 0,\n i = 0,\n j = 0.0,\n k = 0.0,\n l = 0.0;\n i = S;\n S = S + 176 | 0;\n h = i;\n gc(a, c, h);\n a = b[h >> 2] | 0;\n\n if ((a | 0) <= 1) {\n g = 0.0;\n S = i;\n return +g;\n }\n\n c = a + -1 | 0;\n a = 0;\n d = 0.0;\n f = +e[h + 8 >> 3];\n g = +e[h + 16 >> 3];\n\n do {\n a = a + 1 | 0;\n k = f;\n f = +e[h + 8 + (a << 4) >> 3];\n l = +u(+((f - k) * .5));\n j = g;\n g = +e[h + 8 + (a << 4) + 8 >> 3];\n j = +u(+((g - j) * .5));\n j = l * l + j * (+t(+f) * +t(+k) * j);\n d = d + +z(+ +r(+j), + +r(+(1.0 - j))) * 2.0;\n } while ((a | 0) < (c | 0));\n\n S = i;\n return +d;\n }\n\n function xb(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0.0,\n f = 0.0,\n g = 0.0,\n h = 0,\n i = 0,\n j = 0.0,\n k = 0.0,\n l = 0.0;\n i = S;\n S = S + 176 | 0;\n h = i;\n gc(a, c, h);\n a = b[h >> 2] | 0;\n\n if ((a | 0) <= 1) {\n g = 0.0;\n S = i;\n return +g;\n }\n\n c = a + -1 | 0;\n a = 0;\n d = 0.0;\n f = +e[h + 8 >> 3];\n g = +e[h + 16 >> 3];\n\n do {\n a = a + 1 | 0;\n k = f;\n f = +e[h + 8 + (a << 4) >> 3];\n l = +u(+((f - k) * .5));\n j = g;\n g = +e[h + 8 + (a << 4) + 8 >> 3];\n j = +u(+((g - j) * .5));\n j = l * l + j * (+t(+k) * +t(+f) * j);\n d = d + +z(+ +r(+j), + +r(+(1.0 - j))) * 2.0;\n } while ((a | 0) != (c | 0));\n\n l = d * 6371.007180918475;\n S = i;\n return +l;\n }\n\n function yb(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0.0,\n f = 0.0,\n g = 0.0,\n h = 0,\n i = 0,\n j = 0.0,\n k = 0.0,\n l = 0.0;\n i = S;\n S = S + 176 | 0;\n h = i;\n gc(a, c, h);\n a = b[h >> 2] | 0;\n\n if ((a | 0) <= 1) {\n g = 0.0;\n S = i;\n return +g;\n }\n\n c = a + -1 | 0;\n a = 0;\n d = 0.0;\n f = +e[h + 8 >> 3];\n g = +e[h + 16 >> 3];\n\n do {\n a = a + 1 | 0;\n k = f;\n f = +e[h + 8 + (a << 4) >> 3];\n l = +u(+((f - k) * .5));\n j = g;\n g = +e[h + 8 + (a << 4) + 8 >> 3];\n j = +u(+((g - j) * .5));\n j = l * l + j * (+t(+k) * +t(+f) * j);\n d = d + +z(+ +r(+j), + +r(+(1.0 - j))) * 2.0;\n } while ((a | 0) != (c | 0));\n\n l = d * 6371.007180918475 * 1.0e3;\n S = i;\n return +l;\n }\n\n function zb(a, b) {\n a = a | 0;\n b = b | 0;\n b = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n return b & 15 | 0;\n }\n\n function Ab(a, b) {\n a = a | 0;\n b = b | 0;\n b = cd(a | 0, b | 0, 45) | 0;\n G() | 0;\n return b & 127 | 0;\n }\n\n function Bb(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0;\n\n if (!(0 == 0 & (b & -16777216 | 0) == 134217728)) {\n b = 0;\n return b | 0;\n }\n\n g = cd(a | 0, b | 0, 45) | 0;\n G() | 0;\n g = g & 127;\n\n if (g >>> 0 > 121) {\n b = 0;\n return b | 0;\n }\n\n c = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n c = c & 15;\n\n do { if (c | 0) {\n e = 1;\n d = 0;\n\n while (1) {\n f = cd(a | 0, b | 0, (15 - e | 0) * 3 | 0) | 0;\n G() | 0;\n f = f & 7;\n if ((f | 0) != 0 & (d ^ 1)) { if ((f | 0) == 1 & (la(g) | 0) != 0) {\n h = 0;\n d = 13;\n break;\n } else { d = 1; } }\n\n if ((f | 0) == 7) {\n h = 0;\n d = 13;\n break;\n }\n\n if (e >>> 0 < c >>> 0) { e = e + 1 | 0; }else {\n d = 9;\n break;\n }\n }\n\n if ((d | 0) == 9) {\n if ((c | 0) == 15) { h = 1; }else { break; }\n return h | 0;\n } else if ((d | 0) == 13) { return h | 0; }\n } } while (0);\n\n while (1) {\n h = cd(a | 0, b | 0, (14 - c | 0) * 3 | 0) | 0;\n G() | 0;\n\n if (!((h & 7 | 0) == 7 & 0 == 0)) {\n h = 0;\n d = 13;\n break;\n }\n\n if (c >>> 0 < 14) { c = c + 1 | 0; }else {\n h = 1;\n d = 13;\n break;\n }\n }\n\n if ((d | 0) == 13) { return h | 0; }\n return 0;\n }\n\n function Cb(a, b, c) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n var d = 0,\n e = 0;\n d = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n d = d & 15;\n\n if ((d | 0) >= (c | 0)) {\n if ((d | 0) != (c | 0)) { if (c >>> 0 <= 15) {\n e = dd(c | 0, 0, 52) | 0;\n a = e | a;\n b = G() | 0 | b & -15728641;\n if ((d | 0) > (c | 0)) { do {\n e = dd(7, 0, (14 - c | 0) * 3 | 0) | 0;\n c = c + 1 | 0;\n a = e | a;\n b = G() | 0 | b;\n } while ((c | 0) < (d | 0)); }\n } else {\n b = 0;\n a = 0;\n } }\n } else {\n b = 0;\n a = 0;\n }\n\n F(b | 0);\n return a | 0;\n }\n\n function Db(a, b, c) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n a = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n a = a & 15;\n\n if (!((c | 0) < 16 & (a | 0) <= (c | 0))) {\n c = 0;\n return c | 0;\n }\n\n c = tc(7, c - a | 0) | 0;\n return c | 0;\n }\n\n function Eb(a, c, d, e) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0;\n h = cd(a | 0, c | 0, 52) | 0;\n G() | 0;\n h = h & 15;\n if (!((d | 0) < 16 & (h | 0) <= (d | 0))) { return; }\n\n if ((h | 0) == (d | 0)) {\n d = e;\n b[d >> 2] = a;\n b[d + 4 >> 2] = c;\n return;\n }\n\n j = tc(7, d - h | 0) | 0;\n k = (j | 0) / 7 | 0;\n i = cd(a | 0, c | 0, 45) | 0;\n G() | 0;\n if (!(la(i & 127) | 0)) { g = 0; }else {\n a: do { if (!h) { f = 0; }else {\n g = 1;\n\n while (1) {\n f = cd(a | 0, c | 0, (15 - g | 0) * 3 | 0) | 0;\n G() | 0;\n f = f & 7;\n if (f | 0) { break a; }\n if (g >>> 0 < h >>> 0) { g = g + 1 | 0; }else {\n f = 0;\n break;\n }\n }\n } } while (0);\n\n g = (f | 0) == 0;\n }\n l = dd(h + 1 | 0, 0, 52) | 0;\n f = G() | 0 | c & -15728641;\n i = (14 - h | 0) * 3 | 0;\n c = dd(7, 0, i | 0) | 0;\n c = (l | a) & ~c;\n h = f & ~(G() | 0);\n Eb(c, h, d, e);\n f = e + (k << 3) | 0;\n\n if (!g) {\n l = dd(1, 0, i | 0) | 0;\n Eb(l | c, G() | 0 | h, d, f);\n l = f + (k << 3) | 0;\n j = dd(2, 0, i | 0) | 0;\n Eb(j | c, G() | 0 | h, d, l);\n l = l + (k << 3) | 0;\n j = dd(3, 0, i | 0) | 0;\n Eb(j | c, G() | 0 | h, d, l);\n l = l + (k << 3) | 0;\n j = dd(4, 0, i | 0) | 0;\n Eb(j | c, G() | 0 | h, d, l);\n l = l + (k << 3) | 0;\n j = dd(5, 0, i | 0) | 0;\n Eb(j | c, G() | 0 | h, d, l);\n j = dd(6, 0, i | 0) | 0;\n Eb(j | c, G() | 0 | h, d, l + (k << 3) | 0);\n return;\n }\n\n g = f + (k << 3) | 0;\n\n if ((j | 0) > 6) {\n j = f + 8 | 0;\n l = (g >>> 0 > j >>> 0 ? g : j) + -1 + (0 - f) | 0;\n hd(f | 0, 0, l + 8 & -8 | 0) | 0;\n f = j + (l >>> 3 << 3) | 0;\n }\n\n l = dd(2, 0, i | 0) | 0;\n Eb(l | c, G() | 0 | h, d, f);\n l = f + (k << 3) | 0;\n j = dd(3, 0, i | 0) | 0;\n Eb(j | c, G() | 0 | h, d, l);\n l = l + (k << 3) | 0;\n j = dd(4, 0, i | 0) | 0;\n Eb(j | c, G() | 0 | h, d, l);\n l = l + (k << 3) | 0;\n j = dd(5, 0, i | 0) | 0;\n Eb(j | c, G() | 0 | h, d, l);\n j = dd(6, 0, i | 0) | 0;\n Eb(j | c, G() | 0 | h, d, l + (k << 3) | 0);\n return;\n }\n\n function Fb(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0,\n d = 0,\n e = 0;\n e = cd(a | 0, b | 0, 45) | 0;\n G() | 0;\n\n if (!(la(e & 127) | 0)) {\n e = 0;\n return e | 0;\n }\n\n e = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n e = e & 15;\n\n a: do { if (!e) { c = 0; }else {\n d = 1;\n\n while (1) {\n c = cd(a | 0, b | 0, (15 - d | 0) * 3 | 0) | 0;\n G() | 0;\n c = c & 7;\n if (c | 0) { break a; }\n if (d >>> 0 < e >>> 0) { d = d + 1 | 0; }else {\n c = 0;\n break;\n }\n }\n } } while (0);\n\n e = (c | 0) == 0 & 1;\n return e | 0;\n }\n\n function Gb(a, b, c) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n var d = 0,\n e = 0;\n d = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n d = d & 15;\n\n if ((c | 0) < 16 & (d | 0) <= (c | 0)) {\n if ((d | 0) != (c | 0)) {\n e = dd(c | 0, 0, 52) | 0;\n a = e | a;\n b = G() | 0 | b & -15728641;\n if ((d | 0) < (c | 0)) { do {\n e = dd(7, 0, (14 - d | 0) * 3 | 0) | 0;\n d = d + 1 | 0;\n a = a & ~e;\n b = b & ~(G() | 0);\n } while ((d | 0) < (c | 0)); }\n }\n } else {\n b = 0;\n a = 0;\n }\n\n F(b | 0);\n return a | 0;\n }\n\n function Hb(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0,\n p = 0,\n q = 0,\n r = 0,\n s = 0,\n t = 0,\n u = 0,\n v = 0,\n w = 0,\n x = 0,\n y = 0,\n z = 0;\n\n if (!d) {\n y = 0;\n return y | 0;\n }\n\n f = a;\n e = b[f >> 2] | 0;\n f = b[f + 4 >> 2] | 0;\n\n if (0 == 0 & (f & 15728640 | 0) == 0) {\n if ((d | 0) <= 0) {\n y = 0;\n return y | 0;\n }\n\n y = c;\n b[y >> 2] = e;\n b[y + 4 >> 2] = f;\n\n if ((d | 0) == 1) {\n y = 0;\n return y | 0;\n }\n\n e = 1;\n\n do {\n w = a + (e << 3) | 0;\n x = b[w + 4 >> 2] | 0;\n y = c + (e << 3) | 0;\n b[y >> 2] = b[w >> 2];\n b[y + 4 >> 2] = x;\n e = e + 1 | 0;\n } while ((e | 0) != (d | 0));\n\n e = 0;\n return e | 0;\n }\n\n w = d << 3;\n x = Wc(w) | 0;\n\n if (!x) {\n y = -3;\n return y | 0;\n }\n\n gd(x | 0, a | 0, w | 0) | 0;\n v = Yc(d, 8) | 0;\n\n if (!v) {\n Xc(x);\n y = -3;\n return y | 0;\n }\n\n e = d;\n\n a: while (1) {\n h = x;\n l = b[h >> 2] | 0;\n h = b[h + 4 >> 2] | 0;\n t = cd(l | 0, h | 0, 52) | 0;\n G() | 0;\n t = t & 15;\n u = t + -1 | 0;\n s = (e | 0) > 0;\n\n b: do { if (s) {\n r = ((e | 0) < 0) << 31 >> 31;\n p = dd(u | 0, 0, 52) | 0;\n q = G() | 0;\n\n if (u >>> 0 > 15) {\n f = 0;\n a = l;\n d = h;\n\n while (1) {\n if (!((a | 0) == 0 & (d | 0) == 0)) {\n g = cd(a | 0, d | 0, 52) | 0;\n G() | 0;\n g = g & 15;\n i = (g | 0) < (u | 0);\n g = (g | 0) == (u | 0);\n k = i ? 0 : g ? a : 0;\n a = i ? 0 : g ? d : 0;\n d = bd(k | 0, a | 0, e | 0, r | 0) | 0;\n G() | 0;\n g = v + (d << 3) | 0;\n i = g;\n j = b[i >> 2] | 0;\n i = b[i + 4 >> 2] | 0;\n if ((j | 0) == 0 & (i | 0) == 0) { d = k; }else {\n p = 0;\n o = d;\n n = i;\n d = k;\n\n while (1) {\n if ((p | 0) > (e | 0)) {\n y = 41;\n break a;\n }\n\n if ((j | 0) == (d | 0) & (n & -117440513 | 0) == (a | 0)) {\n k = cd(j | 0, n | 0, 56) | 0;\n G() | 0;\n k = k & 7;\n m = k + 1 | 0;\n q = cd(j | 0, n | 0, 45) | 0;\n G() | 0;\n\n c: do { if (!(la(q & 127) | 0)) { i = 7; }else {\n j = cd(j | 0, n | 0, 52) | 0;\n G() | 0;\n j = j & 15;\n\n if (!j) {\n i = 6;\n break;\n }\n\n i = 1;\n\n while (1) {\n q = dd(7, 0, (15 - i | 0) * 3 | 0) | 0;\n\n if (!((q & d | 0) == 0 & ((G() | 0) & a | 0) == 0)) {\n i = 7;\n break c;\n }\n\n if (i >>> 0 < j >>> 0) { i = i + 1 | 0; }else {\n i = 6;\n break;\n }\n }\n } } while (0);\n\n if ((k + 2 | 0) >>> 0 > i >>> 0) {\n y = 51;\n break a;\n }\n\n q = dd(m | 0, 0, 56) | 0;\n a = G() | 0 | a & -117440513;\n i = g;\n b[i >> 2] = 0;\n b[i + 4 >> 2] = 0;\n i = o;\n d = q | d;\n } else { i = (o + 1 | 0) % (e | 0) | 0; }\n\n g = v + (i << 3) | 0;\n n = g;\n j = b[n >> 2] | 0;\n n = b[n + 4 >> 2] | 0;\n if ((j | 0) == 0 & (n | 0) == 0) { break; }else {\n p = p + 1 | 0;\n o = i;\n }\n }\n }\n q = g;\n b[q >> 2] = d;\n b[q + 4 >> 2] = a;\n }\n\n f = f + 1 | 0;\n if ((f | 0) >= (e | 0)) { break b; }\n d = x + (f << 3) | 0;\n a = b[d >> 2] | 0;\n d = b[d + 4 >> 2] | 0;\n }\n }\n\n f = 0;\n a = l;\n d = h;\n\n while (1) {\n if (!((a | 0) == 0 & (d | 0) == 0)) {\n i = cd(a | 0, d | 0, 52) | 0;\n G() | 0;\n i = i & 15;\n\n if ((i | 0) >= (u | 0)) {\n if ((i | 0) != (u | 0)) {\n a = a | p;\n d = d & -15728641 | q;\n\n if (i >>> 0 >= t >>> 0) {\n g = u;\n\n do {\n o = dd(7, 0, (14 - g | 0) * 3 | 0) | 0;\n g = g + 1 | 0;\n a = o | a;\n d = G() | 0 | d;\n } while (g >>> 0 < i >>> 0);\n }\n }\n } else {\n a = 0;\n d = 0;\n }\n\n i = bd(a | 0, d | 0, e | 0, r | 0) | 0;\n G() | 0;\n g = v + (i << 3) | 0;\n j = g;\n k = b[j >> 2] | 0;\n j = b[j + 4 >> 2] | 0;\n\n if (!((k | 0) == 0 & (j | 0) == 0)) {\n o = 0;\n\n while (1) {\n if ((o | 0) > (e | 0)) {\n y = 41;\n break a;\n }\n\n if ((k | 0) == (a | 0) & (j & -117440513 | 0) == (d | 0)) {\n m = cd(k | 0, j | 0, 56) | 0;\n G() | 0;\n m = m & 7;\n n = m + 1 | 0;\n z = cd(k | 0, j | 0, 45) | 0;\n G() | 0;\n\n d: do { if (!(la(z & 127) | 0)) { j = 7; }else {\n k = cd(k | 0, j | 0, 52) | 0;\n G() | 0;\n k = k & 15;\n\n if (!k) {\n j = 6;\n break;\n }\n\n j = 1;\n\n while (1) {\n z = dd(7, 0, (15 - j | 0) * 3 | 0) | 0;\n\n if (!((z & a | 0) == 0 & ((G() | 0) & d | 0) == 0)) {\n j = 7;\n break d;\n }\n\n if (j >>> 0 < k >>> 0) { j = j + 1 | 0; }else {\n j = 6;\n break;\n }\n }\n } } while (0);\n\n if ((m + 2 | 0) >>> 0 > j >>> 0) {\n y = 51;\n break a;\n }\n\n z = dd(n | 0, 0, 56) | 0;\n d = G() | 0 | d & -117440513;\n n = g;\n b[n >> 2] = 0;\n b[n + 4 >> 2] = 0;\n a = z | a;\n } else { i = (i + 1 | 0) % (e | 0) | 0; }\n\n g = v + (i << 3) | 0;\n j = g;\n k = b[j >> 2] | 0;\n j = b[j + 4 >> 2] | 0;\n if ((k | 0) == 0 & (j | 0) == 0) { break; }else { o = o + 1 | 0; }\n }\n }\n\n z = g;\n b[z >> 2] = a;\n b[z + 4 >> 2] = d;\n }\n\n f = f + 1 | 0;\n if ((f | 0) >= (e | 0)) { break b; }\n d = x + (f << 3) | 0;\n a = b[d >> 2] | 0;\n d = b[d + 4 >> 2] | 0;\n }\n } } while (0);\n\n if ((e + 5 | 0) >>> 0 < 11) {\n y = 99;\n break;\n }\n\n q = Yc((e | 0) / 6 | 0, 8) | 0;\n\n if (!q) {\n y = 58;\n break;\n }\n\n e: do { if (s) {\n o = 0;\n n = 0;\n\n do {\n i = v + (o << 3) | 0;\n a = i;\n f = b[a >> 2] | 0;\n a = b[a + 4 >> 2] | 0;\n\n if (!((f | 0) == 0 & (a | 0) == 0)) {\n j = cd(f | 0, a | 0, 56) | 0;\n G() | 0;\n j = j & 7;\n d = j + 1 | 0;\n k = a & -117440513;\n z = cd(f | 0, a | 0, 45) | 0;\n G() | 0;\n\n f: do { if (la(z & 127) | 0) {\n m = cd(f | 0, a | 0, 52) | 0;\n G() | 0;\n m = m & 15;\n\n if (m | 0) {\n g = 1;\n\n while (1) {\n z = dd(7, 0, (15 - g | 0) * 3 | 0) | 0;\n if (!((f & z | 0) == 0 & (k & (G() | 0) | 0) == 0)) { break f; }\n if (g >>> 0 < m >>> 0) { g = g + 1 | 0; }else { break; }\n }\n }\n\n a = dd(d | 0, 0, 56) | 0;\n f = a | f;\n a = G() | 0 | k;\n d = i;\n b[d >> 2] = f;\n b[d + 4 >> 2] = a;\n d = j + 2 | 0;\n } } while (0);\n\n if ((d | 0) == 7) {\n z = q + (n << 3) | 0;\n b[z >> 2] = f;\n b[z + 4 >> 2] = a & -117440513;\n n = n + 1 | 0;\n }\n }\n\n o = o + 1 | 0;\n } while ((o | 0) != (e | 0));\n\n if (s) {\n p = ((e | 0) < 0) << 31 >> 31;\n m = dd(u | 0, 0, 52) | 0;\n o = G() | 0;\n\n if (u >>> 0 > 15) {\n a = 0;\n f = 0;\n\n while (1) {\n do { if (!((l | 0) == 0 & (h | 0) == 0)) {\n j = cd(l | 0, h | 0, 52) | 0;\n G() | 0;\n j = j & 15;\n g = (j | 0) < (u | 0);\n j = (j | 0) == (u | 0);\n i = g ? 0 : j ? l : 0;\n j = g ? 0 : j ? h : 0;\n g = bd(i | 0, j | 0, e | 0, p | 0) | 0;\n G() | 0;\n d = 0;\n\n while (1) {\n if ((d | 0) > (e | 0)) {\n y = 98;\n break a;\n }\n\n z = v + (g << 3) | 0;\n k = b[z + 4 >> 2] | 0;\n\n if ((k & -117440513 | 0) == (j | 0) ? (b[z >> 2] | 0) == (i | 0) : 0) {\n y = 70;\n break;\n }\n\n g = (g + 1 | 0) % (e | 0) | 0;\n z = v + (g << 3) | 0;\n if ((b[z >> 2] | 0) == (i | 0) ? (b[z + 4 >> 2] | 0) == (j | 0) : 0) { break; }else { d = d + 1 | 0; }\n }\n\n if ((y | 0) == 70 ? (y = 0, 0 == 0 & (k & 117440512 | 0) == 100663296) : 0) { break; }\n z = c + (f << 3) | 0;\n b[z >> 2] = l;\n b[z + 4 >> 2] = h;\n f = f + 1 | 0;\n } } while (0);\n\n a = a + 1 | 0;\n\n if ((a | 0) >= (e | 0)) {\n e = n;\n break e;\n }\n\n h = x + (a << 3) | 0;\n l = b[h >> 2] | 0;\n h = b[h + 4 >> 2] | 0;\n }\n }\n\n a = 0;\n f = 0;\n\n while (1) {\n do { if (!((l | 0) == 0 & (h | 0) == 0)) {\n j = cd(l | 0, h | 0, 52) | 0;\n G() | 0;\n j = j & 15;\n if ((j | 0) >= (u | 0)) {\n if ((j | 0) != (u | 0)) {\n d = l | m;\n g = h & -15728641 | o;\n if (j >>> 0 < t >>> 0) { j = g; }else {\n i = u;\n\n do {\n z = dd(7, 0, (14 - i | 0) * 3 | 0) | 0;\n i = i + 1 | 0;\n d = z | d;\n g = G() | 0 | g;\n } while (i >>> 0 < j >>> 0);\n\n j = g;\n }\n } else {\n d = l;\n j = h;\n }\n } else {\n d = 0;\n j = 0;\n }\n i = bd(d | 0, j | 0, e | 0, p | 0) | 0;\n G() | 0;\n g = 0;\n\n while (1) {\n if ((g | 0) > (e | 0)) {\n y = 98;\n break a;\n }\n\n z = v + (i << 3) | 0;\n k = b[z + 4 >> 2] | 0;\n\n if ((k & -117440513 | 0) == (j | 0) ? (b[z >> 2] | 0) == (d | 0) : 0) {\n y = 93;\n break;\n }\n\n i = (i + 1 | 0) % (e | 0) | 0;\n z = v + (i << 3) | 0;\n if ((b[z >> 2] | 0) == (d | 0) ? (b[z + 4 >> 2] | 0) == (j | 0) : 0) { break; }else { g = g + 1 | 0; }\n }\n\n if ((y | 0) == 93 ? (y = 0, 0 == 0 & (k & 117440512 | 0) == 100663296) : 0) { break; }\n z = c + (f << 3) | 0;\n b[z >> 2] = l;\n b[z + 4 >> 2] = h;\n f = f + 1 | 0;\n } } while (0);\n\n a = a + 1 | 0;\n\n if ((a | 0) >= (e | 0)) {\n e = n;\n break e;\n }\n\n h = x + (a << 3) | 0;\n l = b[h >> 2] | 0;\n h = b[h + 4 >> 2] | 0;\n }\n } else {\n f = 0;\n e = n;\n }\n } else {\n f = 0;\n e = 0;\n } } while (0);\n\n hd(v | 0, 0, w | 0) | 0;\n gd(x | 0, q | 0, e << 3 | 0) | 0;\n Xc(q);\n if (!e) { break; }else { c = c + (f << 3) | 0; }\n }\n\n if ((y | 0) == 41) {\n Xc(x);\n Xc(v);\n z = -1;\n return z | 0;\n } else if ((y | 0) == 51) {\n Xc(x);\n Xc(v);\n z = -2;\n return z | 0;\n } else if ((y | 0) == 58) {\n Xc(x);\n Xc(v);\n z = -3;\n return z | 0;\n } else if ((y | 0) == 98) {\n Xc(q);\n Xc(x);\n Xc(v);\n z = -1;\n return z | 0;\n } else if ((y | 0) == 99) { gd(c | 0, x | 0, e << 3 | 0) | 0; }\n\n Xc(x);\n Xc(v);\n z = 0;\n return z | 0;\n }\n\n function Ib(a, c, d, e, f) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n f = f | 0;\n var g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0;\n\n if ((c | 0) <= 0) {\n f = 0;\n return f | 0;\n }\n\n if ((f | 0) >= 16) {\n g = 0;\n\n while (1) {\n l = a + (g << 3) | 0;\n\n if (!((b[l >> 2] | 0) == 0 & (b[l + 4 >> 2] | 0) == 0)) {\n g = 14;\n break;\n }\n\n g = g + 1 | 0;\n\n if ((g | 0) >= (c | 0)) {\n h = 0;\n g = 16;\n break;\n }\n }\n\n if ((g | 0) == 14) { return ((e | 0) > 0 ? -2 : -1) | 0; }else if ((g | 0) == 16) { return h | 0; }\n }\n\n g = 0;\n l = 0;\n\n a: while (1) {\n k = a + (l << 3) | 0;\n i = k;\n h = b[i >> 2] | 0;\n i = b[i + 4 >> 2] | 0;\n\n do { if (!((h | 0) == 0 & (i | 0) == 0)) {\n if ((g | 0) >= (e | 0)) {\n h = -1;\n g = 16;\n break a;\n }\n\n j = cd(h | 0, i | 0, 52) | 0;\n G() | 0;\n j = j & 15;\n\n if ((j | 0) > (f | 0)) {\n h = -2;\n g = 16;\n break a;\n }\n\n if ((j | 0) == (f | 0)) {\n k = d + (g << 3) | 0;\n b[k >> 2] = h;\n b[k + 4 >> 2] = i;\n g = g + 1 | 0;\n break;\n }\n\n h = (tc(7, f - j | 0) | 0) + g | 0;\n\n if ((h | 0) > (e | 0)) {\n h = -1;\n g = 16;\n break a;\n }\n\n Eb(b[k >> 2] | 0, b[k + 4 >> 2] | 0, f, d + (g << 3) | 0);\n g = h;\n } } while (0);\n\n l = l + 1 | 0;\n\n if ((l | 0) >= (c | 0)) {\n h = 0;\n g = 16;\n break;\n }\n }\n\n if ((g | 0) == 16) { return h | 0; }\n return 0;\n }\n\n function Jb(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0;\n\n if ((c | 0) <= 0) {\n d = 0;\n return d | 0;\n }\n\n if ((d | 0) >= 16) {\n e = 0;\n\n while (1) {\n h = a + (e << 3) | 0;\n\n if (!((b[h >> 2] | 0) == 0 & (b[h + 4 >> 2] | 0) == 0)) {\n e = -1;\n f = 13;\n break;\n }\n\n e = e + 1 | 0;\n\n if ((e | 0) >= (c | 0)) {\n e = 0;\n f = 13;\n break;\n }\n }\n\n if ((f | 0) == 13) { return e | 0; }\n }\n\n e = 0;\n h = 0;\n\n a: while (1) {\n f = a + (h << 3) | 0;\n g = b[f >> 2] | 0;\n f = b[f + 4 >> 2] | 0;\n\n do { if (!((g | 0) == 0 & (f | 0) == 0)) {\n f = cd(g | 0, f | 0, 52) | 0;\n G() | 0;\n f = f & 15;\n\n if ((f | 0) > (d | 0)) {\n e = -1;\n f = 13;\n break a;\n }\n\n if ((f | 0) == (d | 0)) {\n e = e + 1 | 0;\n break;\n } else {\n e = (tc(7, d - f | 0) | 0) + e | 0;\n break;\n }\n } } while (0);\n\n h = h + 1 | 0;\n\n if ((h | 0) >= (c | 0)) {\n f = 13;\n break;\n }\n }\n\n if ((f | 0) == 13) { return e | 0; }\n return 0;\n }\n\n function Kb(a, b) {\n a = a | 0;\n b = b | 0;\n b = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n return b & 1 | 0;\n }\n\n function Lb(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0,\n d = 0,\n e = 0;\n e = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n e = e & 15;\n\n if (!e) {\n e = 0;\n return e | 0;\n }\n\n d = 1;\n\n while (1) {\n c = cd(a | 0, b | 0, (15 - d | 0) * 3 | 0) | 0;\n G() | 0;\n c = c & 7;\n\n if (c | 0) {\n d = 5;\n break;\n }\n\n if (d >>> 0 < e >>> 0) { d = d + 1 | 0; }else {\n c = 0;\n d = 5;\n break;\n }\n }\n\n if ((d | 0) == 5) { return c | 0; }\n return 0;\n }\n\n function Mb(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n i = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n i = i & 15;\n\n if (!i) {\n h = b;\n i = a;\n F(h | 0);\n return i | 0;\n }\n\n h = 1;\n c = 0;\n\n while (1) {\n f = (15 - h | 0) * 3 | 0;\n d = dd(7, 0, f | 0) | 0;\n e = G() | 0;\n g = cd(a | 0, b | 0, f | 0) | 0;\n G() | 0;\n f = dd(Pa(g & 7) | 0, 0, f | 0) | 0;\n g = G() | 0;\n a = f | a & ~d;\n b = g | b & ~e;\n\n a: do { if (!c) { if (!((f & d | 0) == 0 & (g & e | 0) == 0)) {\n d = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n d = d & 15;\n if (!d) { c = 1; }else {\n c = 1;\n\n b: while (1) {\n g = cd(a | 0, b | 0, (15 - c | 0) * 3 | 0) | 0;\n G() | 0;\n\n switch (g & 7) {\n case 1:\n break b;\n\n case 0:\n break;\n\n default:\n {\n c = 1;\n break a;\n }\n }\n\n if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else {\n c = 1;\n break a;\n }\n }\n\n c = 1;\n\n while (1) {\n g = (15 - c | 0) * 3 | 0;\n e = cd(a | 0, b | 0, g | 0) | 0;\n G() | 0;\n f = dd(7, 0, g | 0) | 0;\n b = b & ~(G() | 0);\n g = dd(Pa(e & 7) | 0, 0, g | 0) | 0;\n a = a & ~f | g;\n b = b | (G() | 0);\n if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else {\n c = 1;\n break;\n }\n }\n }\n } else { c = 0; } } } while (0);\n\n if (h >>> 0 < i >>> 0) { h = h + 1 | 0; }else { break; }\n }\n\n F(b | 0);\n return a | 0;\n }\n\n function Nb(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0;\n d = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n d = d & 15;\n\n if (!d) {\n c = b;\n d = a;\n F(c | 0);\n return d | 0;\n }\n\n c = 1;\n\n while (1) {\n f = (15 - c | 0) * 3 | 0;\n g = cd(a | 0, b | 0, f | 0) | 0;\n G() | 0;\n e = dd(7, 0, f | 0) | 0;\n b = b & ~(G() | 0);\n f = dd(Pa(g & 7) | 0, 0, f | 0) | 0;\n a = f | a & ~e;\n b = G() | 0 | b;\n if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else { break; }\n }\n\n F(b | 0);\n return a | 0;\n }\n\n function Ob(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n i = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n i = i & 15;\n\n if (!i) {\n h = b;\n i = a;\n F(h | 0);\n return i | 0;\n }\n\n h = 1;\n c = 0;\n\n while (1) {\n f = (15 - h | 0) * 3 | 0;\n d = dd(7, 0, f | 0) | 0;\n e = G() | 0;\n g = cd(a | 0, b | 0, f | 0) | 0;\n G() | 0;\n f = dd(Qa(g & 7) | 0, 0, f | 0) | 0;\n g = G() | 0;\n a = f | a & ~d;\n b = g | b & ~e;\n\n a: do { if (!c) { if (!((f & d | 0) == 0 & (g & e | 0) == 0)) {\n d = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n d = d & 15;\n if (!d) { c = 1; }else {\n c = 1;\n\n b: while (1) {\n g = cd(a | 0, b | 0, (15 - c | 0) * 3 | 0) | 0;\n G() | 0;\n\n switch (g & 7) {\n case 1:\n break b;\n\n case 0:\n break;\n\n default:\n {\n c = 1;\n break a;\n }\n }\n\n if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else {\n c = 1;\n break a;\n }\n }\n\n c = 1;\n\n while (1) {\n e = (15 - c | 0) * 3 | 0;\n f = dd(7, 0, e | 0) | 0;\n g = b & ~(G() | 0);\n b = cd(a | 0, b | 0, e | 0) | 0;\n G() | 0;\n b = dd(Qa(b & 7) | 0, 0, e | 0) | 0;\n a = a & ~f | b;\n b = g | (G() | 0);\n if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else {\n c = 1;\n break;\n }\n }\n }\n } else { c = 0; } } } while (0);\n\n if (h >>> 0 < i >>> 0) { h = h + 1 | 0; }else { break; }\n }\n\n F(b | 0);\n return a | 0;\n }\n\n function Pb(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0;\n d = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n d = d & 15;\n\n if (!d) {\n c = b;\n d = a;\n F(c | 0);\n return d | 0;\n }\n\n c = 1;\n\n while (1) {\n g = (15 - c | 0) * 3 | 0;\n f = dd(7, 0, g | 0) | 0;\n e = b & ~(G() | 0);\n b = cd(a | 0, b | 0, g | 0) | 0;\n G() | 0;\n b = dd(Qa(b & 7) | 0, 0, g | 0) | 0;\n a = b | a & ~f;\n b = G() | 0 | e;\n if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else { break; }\n }\n\n F(b | 0);\n return a | 0;\n }\n\n function Qb(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0;\n j = S;\n S = S + 64 | 0;\n i = j + 40 | 0;\n e = j + 24 | 0;\n f = j + 12 | 0;\n g = j;\n dd(c | 0, 0, 52) | 0;\n d = G() | 0 | 134225919;\n\n if (!c) {\n if ((b[a + 4 >> 2] | 0) > 2) {\n h = 0;\n i = 0;\n F(h | 0);\n S = j;\n return i | 0;\n }\n\n if ((b[a + 8 >> 2] | 0) > 2) {\n h = 0;\n i = 0;\n F(h | 0);\n S = j;\n return i | 0;\n }\n\n if ((b[a + 12 >> 2] | 0) > 2) {\n h = 0;\n i = 0;\n F(h | 0);\n S = j;\n return i | 0;\n }\n\n dd(na(a) | 0, 0, 45) | 0;\n h = G() | 0 | d;\n i = -1;\n F(h | 0);\n S = j;\n return i | 0;\n }\n b[i >> 2] = b[a >> 2];\n b[i + 4 >> 2] = b[a + 4 >> 2];\n b[i + 8 >> 2] = b[a + 8 >> 2];\n b[i + 12 >> 2] = b[a + 12 >> 2];\n h = i + 4 | 0;\n\n if ((c | 0) > 0) {\n a = -1;\n\n while (1) {\n b[e >> 2] = b[h >> 2];\n b[e + 4 >> 2] = b[h + 4 >> 2];\n b[e + 8 >> 2] = b[h + 8 >> 2];\n\n if (!(c & 1)) {\n Ja(h);\n b[f >> 2] = b[h >> 2];\n b[f + 4 >> 2] = b[h + 4 >> 2];\n b[f + 8 >> 2] = b[h + 8 >> 2];\n La(f);\n } else {\n Ia(h);\n b[f >> 2] = b[h >> 2];\n b[f + 4 >> 2] = b[h + 4 >> 2];\n b[f + 8 >> 2] = b[h + 8 >> 2];\n Ka(f);\n }\n\n Fa(e, f, g);\n Ca(g);\n l = (15 - c | 0) * 3 | 0;\n k = dd(7, 0, l | 0) | 0;\n d = d & ~(G() | 0);\n l = dd(Ha(g) | 0, 0, l | 0) | 0;\n a = l | a & ~k;\n d = G() | 0 | d;\n if ((c | 0) > 1) { c = c + -1 | 0; }else { break; }\n }\n } else { a = -1; }\n\n a: do { if (((b[h >> 2] | 0) <= 2 ? (b[i + 8 >> 2] | 0) <= 2 : 0) ? (b[i + 12 >> 2] | 0) <= 2 : 0) {\n e = na(i) | 0;\n c = dd(e | 0, 0, 45) | 0;\n c = c | a;\n a = G() | 0 | d & -1040385;\n g = oa(i) | 0;\n\n if (!(la(e) | 0)) {\n if ((g | 0) <= 0) { break; }\n f = 0;\n\n while (1) {\n e = cd(c | 0, a | 0, 52) | 0;\n G() | 0;\n e = e & 15;\n\n if (e) {\n d = 1;\n\n while (1) {\n l = (15 - d | 0) * 3 | 0;\n i = cd(c | 0, a | 0, l | 0) | 0;\n G() | 0;\n k = dd(7, 0, l | 0) | 0;\n a = a & ~(G() | 0);\n l = dd(Pa(i & 7) | 0, 0, l | 0) | 0;\n c = c & ~k | l;\n a = a | (G() | 0);\n if (d >>> 0 < e >>> 0) { d = d + 1 | 0; }else { break; }\n }\n }\n\n f = f + 1 | 0;\n if ((f | 0) == (g | 0)) { break a; }\n }\n }\n\n f = cd(c | 0, a | 0, 52) | 0;\n G() | 0;\n f = f & 15;\n\n b: do { if (f) {\n d = 1;\n\n c: while (1) {\n l = cd(c | 0, a | 0, (15 - d | 0) * 3 | 0) | 0;\n G() | 0;\n\n switch (l & 7) {\n case 1:\n break c;\n\n case 0:\n break;\n\n default:\n break b;\n }\n\n if (d >>> 0 < f >>> 0) { d = d + 1 | 0; }else { break b; }\n }\n\n if (ra(e, b[i >> 2] | 0) | 0) {\n d = 1;\n\n while (1) {\n i = (15 - d | 0) * 3 | 0;\n k = dd(7, 0, i | 0) | 0;\n l = a & ~(G() | 0);\n a = cd(c | 0, a | 0, i | 0) | 0;\n G() | 0;\n a = dd(Qa(a & 7) | 0, 0, i | 0) | 0;\n c = c & ~k | a;\n a = l | (G() | 0);\n if (d >>> 0 < f >>> 0) { d = d + 1 | 0; }else { break; }\n }\n } else {\n d = 1;\n\n while (1) {\n l = (15 - d | 0) * 3 | 0;\n i = cd(c | 0, a | 0, l | 0) | 0;\n G() | 0;\n k = dd(7, 0, l | 0) | 0;\n a = a & ~(G() | 0);\n l = dd(Pa(i & 7) | 0, 0, l | 0) | 0;\n c = c & ~k | l;\n a = a | (G() | 0);\n if (d >>> 0 < f >>> 0) { d = d + 1 | 0; }else { break; }\n }\n }\n } } while (0);\n\n if ((g | 0) > 0) {\n d = 0;\n\n do {\n c = Mb(c, a) | 0;\n a = G() | 0;\n d = d + 1 | 0;\n } while ((d | 0) != (g | 0));\n }\n } else {\n c = 0;\n a = 0;\n } } while (0);\n\n k = a;\n l = c;\n F(k | 0);\n S = j;\n return l | 0;\n }\n\n function Rb(a) {\n a = a | 0;\n return (a | 0) % 2 | 0 | 0;\n }\n\n function Sb(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0;\n e = S;\n S = S + 16 | 0;\n d = e;\n\n if ((c >>> 0 <= 15 ? !((b[a + 4 >> 2] & 2146435072 | 0) == 2146435072) : 0) ? !((b[a + 8 + 4 >> 2] & 2146435072 | 0) == 2146435072) : 0) {\n Ya(a, c, d);\n c = Qb(d, c) | 0;\n a = G() | 0;\n } else {\n a = 0;\n c = 0;\n }\n\n F(a | 0);\n S = e;\n return c | 0;\n }\n\n function Tb(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0;\n f = d + 4 | 0;\n g = cd(a | 0, c | 0, 52) | 0;\n G() | 0;\n g = g & 15;\n h = cd(a | 0, c | 0, 45) | 0;\n G() | 0;\n e = (g | 0) == 0;\n\n if (!(la(h & 127) | 0)) {\n if (e) {\n h = 0;\n return h | 0;\n }\n\n if ((b[f >> 2] | 0) == 0 ? (b[d + 8 >> 2] | 0) == 0 : 0) { e = (b[d + 12 >> 2] | 0) != 0 & 1; }else { e = 1; }\n } else if (e) {\n h = 1;\n return h | 0;\n } else { e = 1; }\n\n d = 1;\n\n while (1) {\n if (!(d & 1)) { La(f); }else { Ka(f); }\n h = cd(a | 0, c | 0, (15 - d | 0) * 3 | 0) | 0;\n G() | 0;\n Ma(f, h & 7);\n if (d >>> 0 < g >>> 0) { d = d + 1 | 0; }else { break; }\n }\n\n return e | 0;\n }\n\n function Ub(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0;\n l = S;\n S = S + 16 | 0;\n j = l;\n k = cd(a | 0, c | 0, 45) | 0;\n G() | 0;\n k = k & 127;\n\n a: do { if ((la(k) | 0) != 0 ? (g = cd(a | 0, c | 0, 52) | 0, G() | 0, g = g & 15, (g | 0) != 0) : 0) {\n e = 1;\n\n b: while (1) {\n i = cd(a | 0, c | 0, (15 - e | 0) * 3 | 0) | 0;\n G() | 0;\n\n switch (i & 7) {\n case 5:\n break b;\n\n case 0:\n break;\n\n default:\n {\n e = c;\n break a;\n }\n }\n\n if (e >>> 0 < g >>> 0) { e = e + 1 | 0; }else {\n e = c;\n break a;\n }\n }\n\n f = 1;\n e = c;\n\n while (1) {\n c = (15 - f | 0) * 3 | 0;\n h = dd(7, 0, c | 0) | 0;\n i = e & ~(G() | 0);\n e = cd(a | 0, e | 0, c | 0) | 0;\n G() | 0;\n e = dd(Qa(e & 7) | 0, 0, c | 0) | 0;\n a = a & ~h | e;\n e = i | (G() | 0);\n if (f >>> 0 < g >>> 0) { f = f + 1 | 0; }else { break; }\n }\n } else { e = c; } } while (0);\n\n i = 7728 + (k * 28 | 0) | 0;\n b[d >> 2] = b[i >> 2];\n b[d + 4 >> 2] = b[i + 4 >> 2];\n b[d + 8 >> 2] = b[i + 8 >> 2];\n b[d + 12 >> 2] = b[i + 12 >> 2];\n\n if (!(Tb(a, e, d) | 0)) {\n S = l;\n return;\n }\n\n h = d + 4 | 0;\n b[j >> 2] = b[h >> 2];\n b[j + 4 >> 2] = b[h + 4 >> 2];\n b[j + 8 >> 2] = b[h + 8 >> 2];\n g = cd(a | 0, e | 0, 52) | 0;\n G() | 0;\n i = g & 15;\n if (!(g & 1)) { g = i; }else {\n La(h);\n g = i + 1 | 0;\n }\n if (!(la(k) | 0)) { e = 0; }else {\n c: do { if (!i) { e = 0; }else {\n c = 1;\n\n while (1) {\n f = cd(a | 0, e | 0, (15 - c | 0) * 3 | 0) | 0;\n G() | 0;\n f = f & 7;\n\n if (f | 0) {\n e = f;\n break c;\n }\n\n if (c >>> 0 < i >>> 0) { c = c + 1 | 0; }else {\n e = 0;\n break;\n }\n }\n } } while (0);\n\n e = (e | 0) == 4 & 1;\n }\n\n if (!(cb(d, g, e, 0) | 0)) {\n if ((g | 0) != (i | 0)) {\n b[h >> 2] = b[j >> 2];\n b[h + 4 >> 2] = b[j + 4 >> 2];\n b[h + 8 >> 2] = b[j + 8 >> 2];\n }\n } else {\n if (la(k) | 0) { do {} while ((cb(d, g, 0, 0) | 0) != 0); }\n if ((g | 0) != (i | 0)) { Ja(h); }\n }\n\n S = l;\n return;\n }\n\n function Vb(a, b, c) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n var d = 0,\n e = 0;\n d = S;\n S = S + 16 | 0;\n e = d;\n Ub(a, b, e);\n b = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n $a(e, b & 15, c);\n S = d;\n return;\n }\n\n function Wb(a, b, c) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n var d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0;\n g = S;\n S = S + 16 | 0;\n f = g;\n Ub(a, b, f);\n d = cd(a | 0, b | 0, 45) | 0;\n G() | 0;\n d = (la(d & 127) | 0) == 0;\n e = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n e = e & 15;\n\n a: do { if (!d) {\n if (e | 0) {\n d = 1;\n\n while (1) {\n h = dd(7, 0, (15 - d | 0) * 3 | 0) | 0;\n if (!((h & a | 0) == 0 & ((G() | 0) & b | 0) == 0)) { break a; }\n if (d >>> 0 < e >>> 0) { d = d + 1 | 0; }else { break; }\n }\n }\n\n ab(f, e, 0, 5, c);\n S = g;\n return;\n } } while (0);\n\n eb(f, e, 0, 6, c);\n S = g;\n return;\n }\n\n function Xb(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0,\n d = 0,\n e = 0;\n d = cd(a | 0, b | 0, 45) | 0;\n G() | 0;\n\n if (!(la(d & 127) | 0)) {\n d = 2;\n return d | 0;\n }\n\n d = cd(a | 0, b | 0, 52) | 0;\n G() | 0;\n d = d & 15;\n\n if (!d) {\n d = 5;\n return d | 0;\n }\n\n c = 1;\n\n while (1) {\n e = dd(7, 0, (15 - c | 0) * 3 | 0) | 0;\n\n if (!((e & a | 0) == 0 & ((G() | 0) & b | 0) == 0)) {\n c = 2;\n a = 6;\n break;\n }\n\n if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else {\n c = 5;\n a = 6;\n break;\n }\n }\n\n if ((a | 0) == 6) { return c | 0; }\n return 0;\n }\n\n function Yb(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0;\n m = S;\n S = S + 128 | 0;\n k = m + 112 | 0;\n g = m + 96 | 0;\n l = m;\n f = cd(a | 0, c | 0, 52) | 0;\n G() | 0;\n i = f & 15;\n b[k >> 2] = i;\n h = cd(a | 0, c | 0, 45) | 0;\n G() | 0;\n h = h & 127;\n\n a: do { if (la(h) | 0) {\n if (i | 0) {\n e = 1;\n\n while (1) {\n j = dd(7, 0, (15 - e | 0) * 3 | 0) | 0;\n\n if (!((j & a | 0) == 0 & ((G() | 0) & c | 0) == 0)) {\n f = 0;\n break a;\n }\n\n if (e >>> 0 < i >>> 0) { e = e + 1 | 0; }else { break; }\n }\n }\n\n if (!(f & 1)) {\n j = dd(i + 1 | 0, 0, 52) | 0;\n l = G() | 0 | c & -15728641;\n k = dd(7, 0, (14 - i | 0) * 3 | 0) | 0;\n Yb((j | a) & ~k, l & ~(G() | 0), d);\n S = m;\n return;\n } else { f = 1; }\n } else { f = 0; } } while (0);\n\n Ub(a, c, g);\n\n if (f) {\n bb(g, k, l);\n j = 5;\n } else {\n fb(g, k, l);\n j = 6;\n }\n\n b: do { if (la(h) | 0) {\n if (!i) { e = 20; }else {\n e = 1;\n\n while (1) {\n h = dd(7, 0, (15 - e | 0) * 3 | 0) | 0;\n\n if (!((h & a | 0) == 0 & ((G() | 0) & c | 0) == 0)) {\n e = 8;\n break b;\n }\n\n if (e >>> 0 < i >>> 0) { e = e + 1 | 0; }else {\n e = 20;\n break;\n }\n }\n }\n } else { e = 8; } } while (0);\n\n hd(d | 0, -1, e | 0) | 0;\n\n if (f) {\n f = 0;\n\n do {\n g = l + (f << 4) | 0;\n db(g, b[k >> 2] | 0) | 0;\n g = b[g >> 2] | 0;\n e = 0;\n\n while (1) {\n h = d + (e << 2) | 0;\n i = b[h >> 2] | 0;\n if ((i | 0) == -1 | (i | 0) == (g | 0)) { break; }else { e = e + 1 | 0; }\n }\n\n b[h >> 2] = g;\n f = f + 1 | 0;\n } while ((f | 0) != (j | 0));\n } else {\n f = 0;\n\n do {\n g = l + (f << 4) | 0;\n cb(g, b[k >> 2] | 0, 0, 1) | 0;\n g = b[g >> 2] | 0;\n e = 0;\n\n while (1) {\n h = d + (e << 2) | 0;\n i = b[h >> 2] | 0;\n if ((i | 0) == -1 | (i | 0) == (g | 0)) { break; }else { e = e + 1 | 0; }\n }\n\n b[h >> 2] = g;\n f = f + 1 | 0;\n } while ((f | 0) != (j | 0));\n }\n\n S = m;\n return;\n }\n\n function Zb() {\n return 12;\n }\n\n function _b(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0;\n dd(a | 0, 0, 52) | 0;\n i = G() | 0 | 134225919;\n\n if ((a | 0) < 1) {\n e = 0;\n d = 0;\n\n do {\n if (la(e) | 0) {\n dd(e | 0, 0, 45) | 0;\n h = i | (G() | 0);\n a = c + (d << 3) | 0;\n b[a >> 2] = -1;\n b[a + 4 >> 2] = h;\n d = d + 1 | 0;\n }\n\n e = e + 1 | 0;\n } while ((e | 0) != 122);\n\n return;\n }\n\n h = 0;\n d = 0;\n\n do {\n if (la(h) | 0) {\n dd(h | 0, 0, 45) | 0;\n e = 1;\n f = -1;\n g = i | (G() | 0);\n\n while (1) {\n j = dd(7, 0, (15 - e | 0) * 3 | 0) | 0;\n f = f & ~j;\n g = g & ~(G() | 0);\n if ((e | 0) == (a | 0)) { break; }else { e = e + 1 | 0; }\n }\n\n j = c + (d << 3) | 0;\n b[j >> 2] = f;\n b[j + 4 >> 2] = g;\n d = d + 1 | 0;\n }\n\n h = h + 1 | 0;\n } while ((h | 0) != 122);\n\n return;\n }\n\n function $b(a, c, d, e) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0;\n i = S;\n S = S + 64 | 0;\n h = i;\n\n if ((a | 0) == (d | 0) & (c | 0) == (e | 0) | (0 != 0 | (c & 2013265920 | 0) != 134217728 | (0 != 0 | (e & 2013265920 | 0) != 134217728))) {\n h = 0;\n S = i;\n return h | 0;\n }\n\n f = cd(a | 0, c | 0, 52) | 0;\n G() | 0;\n f = f & 15;\n g = cd(d | 0, e | 0, 52) | 0;\n G() | 0;\n\n if ((f | 0) != (g & 15 | 0)) {\n h = 0;\n S = i;\n return h | 0;\n }\n\n g = f + -1 | 0;\n\n if (f >>> 0 > 1 ? (k = Cb(a, c, g) | 0, j = G() | 0, g = Cb(d, e, g) | 0, (k | 0) == (g | 0) & (j | 0) == (G() | 0)) : 0) {\n g = (f ^ 15) * 3 | 0;\n f = cd(a | 0, c | 0, g | 0) | 0;\n G() | 0;\n f = f & 7;\n g = cd(d | 0, e | 0, g | 0) | 0;\n G() | 0;\n g = g & 7;\n\n if ((f | 0) == 0 | (g | 0) == 0) {\n k = 1;\n S = i;\n return k | 0;\n }\n\n if ((b[21136 + (f << 2) >> 2] | 0) == (g | 0)) {\n k = 1;\n S = i;\n return k | 0;\n }\n\n if ((b[21168 + (f << 2) >> 2] | 0) == (g | 0)) {\n k = 1;\n S = i;\n return k | 0;\n }\n }\n\n f = h;\n g = f + 56 | 0;\n\n do {\n b[f >> 2] = 0;\n f = f + 4 | 0;\n } while ((f | 0) < (g | 0));\n\n $(a, c, 1, h);\n k = h;\n\n if (((((!((b[k >> 2] | 0) == (d | 0) ? (b[k + 4 >> 2] | 0) == (e | 0) : 0) ? (k = h + 8 | 0, !((b[k >> 2] | 0) == (d | 0) ? (b[k + 4 >> 2] | 0) == (e | 0) : 0)) : 0) ? (k = h + 16 | 0, !((b[k >> 2] | 0) == (d | 0) ? (b[k + 4 >> 2] | 0) == (e | 0) : 0)) : 0) ? (k = h + 24 | 0, !((b[k >> 2] | 0) == (d | 0) ? (b[k + 4 >> 2] | 0) == (e | 0) : 0)) : 0) ? (k = h + 32 | 0, !((b[k >> 2] | 0) == (d | 0) ? (b[k + 4 >> 2] | 0) == (e | 0) : 0)) : 0) ? (k = h + 40 | 0, !((b[k >> 2] | 0) == (d | 0) ? (b[k + 4 >> 2] | 0) == (e | 0) : 0)) : 0) {\n f = h + 48 | 0;\n f = ((b[f >> 2] | 0) == (d | 0) ? (b[f + 4 >> 2] | 0) == (e | 0) : 0) & 1;\n } else { f = 1; }\n\n k = f;\n S = i;\n return k | 0;\n }\n\n function ac(a, c, d, e) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0;\n k = S;\n S = S + 16 | 0;\n h = k;\n\n if (!($b(a, c, d, e) | 0)) {\n i = 0;\n j = 0;\n F(i | 0);\n S = k;\n return j | 0;\n }\n\n i = c & -2130706433;\n f = (Fb(a, c) | 0) == 0;\n f = f ? 1 : 2;\n\n while (1) {\n b[h >> 2] = 0;\n l = da(a, c, f, h) | 0;\n g = f + 1 | 0;\n if ((l | 0) == (d | 0) & (G() | 0) == (e | 0)) { break; }\n if (g >>> 0 < 7) { f = g; }else {\n f = 0;\n a = 0;\n j = 6;\n break;\n }\n }\n\n if ((j | 0) == 6) {\n F(f | 0);\n S = k;\n return a | 0;\n }\n\n l = dd(f | 0, 0, 56) | 0;\n j = i | (G() | 0) | 268435456;\n l = a | l;\n F(j | 0);\n S = k;\n return l | 0;\n }\n\n function bc(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0;\n c = 0 == 0 & (b & 2013265920 | 0) == 268435456;\n F((c ? b & -2130706433 | 134217728 : 0) | 0);\n return (c ? a : 0) | 0;\n }\n\n function cc(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0,\n f = 0;\n e = S;\n S = S + 16 | 0;\n d = e;\n\n if (!(0 == 0 & (c & 2013265920 | 0) == 268435456)) {\n c = 0;\n d = 0;\n F(c | 0);\n S = e;\n return d | 0;\n }\n\n f = cd(a | 0, c | 0, 56) | 0;\n G() | 0;\n b[d >> 2] = 0;\n d = da(a, c & -2130706433 | 134217728, f & 7, d) | 0;\n c = G() | 0;\n F(c | 0);\n S = e;\n return d | 0;\n }\n\n function dc(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0;\n\n if (!(0 == 0 & (b & 2013265920 | 0) == 268435456)) {\n c = 0;\n return c | 0;\n }\n\n c = cd(a | 0, b | 0, 56) | 0;\n G() | 0;\n\n switch (c & 7) {\n case 0:\n case 7:\n {\n c = 0;\n return c | 0;\n }\n\n default:\n\n }\n\n c = b & -2130706433 | 134217728;\n\n if (0 == 0 & (b & 117440512 | 0) == 16777216 & (Fb(a, c) | 0) != 0) {\n c = 0;\n return c | 0;\n }\n\n c = Bb(a, c) | 0;\n return c | 0;\n }\n\n function ec(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n g = S;\n S = S + 16 | 0;\n e = g;\n h = 0 == 0 & (c & 2013265920 | 0) == 268435456;\n f = c & -2130706433 | 134217728;\n i = d;\n b[i >> 2] = h ? a : 0;\n b[i + 4 >> 2] = h ? f : 0;\n\n if (h) {\n c = cd(a | 0, c | 0, 56) | 0;\n G() | 0;\n b[e >> 2] = 0;\n a = da(a, f, c & 7, e) | 0;\n c = G() | 0;\n } else {\n a = 0;\n c = 0;\n }\n\n i = d + 8 | 0;\n b[i >> 2] = a;\n b[i + 4 >> 2] = c;\n S = g;\n return;\n }\n\n function fc(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0;\n f = (Fb(a, c) | 0) == 0;\n c = c & -2130706433;\n e = d;\n b[e >> 2] = f ? a : 0;\n b[e + 4 >> 2] = f ? c | 285212672 : 0;\n e = d + 8 | 0;\n b[e >> 2] = a;\n b[e + 4 >> 2] = c | 301989888;\n e = d + 16 | 0;\n b[e >> 2] = a;\n b[e + 4 >> 2] = c | 318767104;\n e = d + 24 | 0;\n b[e >> 2] = a;\n b[e + 4 >> 2] = c | 335544320;\n e = d + 32 | 0;\n b[e >> 2] = a;\n b[e + 4 >> 2] = c | 352321536;\n d = d + 40 | 0;\n b[d >> 2] = a;\n b[d + 4 >> 2] = c | 369098752;\n return;\n }\n\n function gc(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0;\n h = S;\n S = S + 16 | 0;\n g = h;\n e = cd(a | 0, c | 0, 56) | 0;\n G() | 0;\n i = 0 == 0 & (c & 2013265920 | 0) == 268435456;\n f = i ? a : 0;\n a = i ? c & -2130706433 | 134217728 : 0;\n c = Lc(f, a, e & 7) | 0;\n\n if ((c | 0) == -1) {\n b[d >> 2] = 0;\n S = h;\n return;\n }\n\n Ub(f, a, g);\n e = cd(f | 0, a | 0, 52) | 0;\n G() | 0;\n e = e & 15;\n if (!(Fb(f, a) | 0)) { eb(g, e, c, 2, d); }else { ab(g, e, c, 2, d); }\n S = h;\n return;\n }\n\n function hc(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0;\n c = Yc(1, 12) | 0;\n if (!c) { H(22691, 22646, 49, 22704); }\n d = a + 4 | 0;\n e = b[d >> 2] | 0;\n\n if (e | 0) {\n e = e + 8 | 0;\n b[e >> 2] = c;\n b[d >> 2] = c;\n return c | 0;\n }\n\n if (b[a >> 2] | 0) { H(22721, 22646, 61, 22744); }\n e = a;\n b[e >> 2] = c;\n b[d >> 2] = c;\n return c | 0;\n }\n\n function ic(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0;\n e = Wc(24) | 0;\n if (!e) { H(22758, 22646, 78, 22772); }\n b[e >> 2] = b[c >> 2];\n b[e + 4 >> 2] = b[c + 4 >> 2];\n b[e + 8 >> 2] = b[c + 8 >> 2];\n b[e + 12 >> 2] = b[c + 12 >> 2];\n b[e + 16 >> 2] = 0;\n c = a + 4 | 0;\n d = b[c >> 2] | 0;\n\n if (d | 0) {\n b[d + 16 >> 2] = e;\n b[c >> 2] = e;\n return e | 0;\n }\n\n if (b[a >> 2] | 0) { H(22787, 22646, 82, 22772); }\n b[a >> 2] = e;\n b[c >> 2] = e;\n return e | 0;\n }\n\n function jc(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0;\n if (!a) { return; }\n e = 1;\n\n while (1) {\n c = b[a >> 2] | 0;\n if (c | 0) { do {\n d = b[c >> 2] | 0;\n if (d | 0) { do {\n f = d;\n d = b[d + 16 >> 2] | 0;\n Xc(f);\n } while ((d | 0) != 0); }\n f = c;\n c = b[c + 8 >> 2] | 0;\n Xc(f);\n } while ((c | 0) != 0); }\n c = a;\n a = b[a + 8 >> 2] | 0;\n if (!e) { Xc(c); }\n if (!a) { break; }else { e = 0; }\n }\n\n return;\n }\n\n function kc(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n f = 0,\n g = 0,\n h = 0.0,\n i = 0,\n j = 0.0,\n k = 0.0,\n l = 0,\n m = 0,\n n = 0,\n o = 0,\n p = 0,\n r = 0,\n s = 0.0,\n t = 0.0,\n u = 0.0,\n v = 0.0,\n w = 0.0,\n x = 0.0,\n y = 0,\n z = 0,\n A = 0,\n B = 0,\n C = 0,\n D = 0,\n E = 0,\n F = 0,\n G = 0,\n I = 0,\n J = 0,\n K = 0;\n g = a + 8 | 0;\n\n if (b[g >> 2] | 0) {\n K = 1;\n return K | 0;\n }\n\n f = b[a >> 2] | 0;\n\n if (!f) {\n K = 0;\n return K | 0;\n }\n\n c = f;\n d = 0;\n\n do {\n d = d + 1 | 0;\n c = b[c + 8 >> 2] | 0;\n } while ((c | 0) != 0);\n\n if (d >>> 0 < 2) {\n K = 0;\n return K | 0;\n }\n\n I = Wc(d << 2) | 0;\n if (!I) { H(22807, 22646, 317, 22826); }\n G = Wc(d << 5) | 0;\n if (!G) { H(22848, 22646, 321, 22826); }\n b[a >> 2] = 0;\n z = a + 4 | 0;\n b[z >> 2] = 0;\n b[g >> 2] = 0;\n d = 0;\n F = 0;\n y = 0;\n n = 0;\n\n a: while (1) {\n m = b[f >> 2] | 0;\n\n if (m) {\n h = 0.0;\n i = m;\n\n do {\n k = +e[i + 8 >> 3];\n c = i;\n i = b[i + 16 >> 2] | 0;\n l = (i | 0) == 0;\n g = l ? m : i;\n j = +e[g + 8 >> 3];\n\n if (+q(+(k - j)) > 3.141592653589793) {\n K = 14;\n break;\n }\n\n h = h + (j - k) * (+e[c >> 3] + +e[g >> 3]);\n } while (!l);\n\n if ((K | 0) == 14) {\n K = 0;\n h = 0.0;\n c = m;\n\n do {\n x = +e[c + 8 >> 3];\n E = c + 16 | 0;\n D = b[E >> 2] | 0;\n D = (D | 0) == 0 ? m : D;\n w = +e[D + 8 >> 3];\n h = h + (+e[c >> 3] + +e[D >> 3]) * ((w < 0.0 ? w + 6.283185307179586 : w) - (x < 0.0 ? x + 6.283185307179586 : x));\n c = b[((c | 0) == 0 ? f : E) >> 2] | 0;\n } while ((c | 0) != 0);\n }\n\n if (h > 0.0) {\n b[I + (F << 2) >> 2] = f;\n F = F + 1 | 0;\n g = y;\n c = n;\n } else { K = 19; }\n } else { K = 19; }\n\n if ((K | 0) == 19) {\n K = 0;\n\n do { if (!d) {\n if (!n) {\n if (!(b[a >> 2] | 0)) {\n g = z;\n i = a;\n c = f;\n d = a;\n break;\n } else {\n K = 27;\n break a;\n }\n } else {\n g = z;\n i = n + 8 | 0;\n c = f;\n d = a;\n break;\n }\n } else {\n c = d + 8 | 0;\n\n if (b[c >> 2] | 0) {\n K = 21;\n break a;\n }\n\n d = Yc(1, 12) | 0;\n\n if (!d) {\n K = 23;\n break a;\n }\n\n b[c >> 2] = d;\n g = d + 4 | 0;\n i = d;\n c = n;\n } } while (0);\n\n b[i >> 2] = f;\n b[g >> 2] = f;\n i = G + (y << 5) | 0;\n l = b[f >> 2] | 0;\n\n if (l) {\n m = G + (y << 5) + 8 | 0;\n e[m >> 3] = 1797693134862315708145274.0e284;\n n = G + (y << 5) + 24 | 0;\n e[n >> 3] = 1797693134862315708145274.0e284;\n e[i >> 3] = -1797693134862315708145274.0e284;\n o = G + (y << 5) + 16 | 0;\n e[o >> 3] = -1797693134862315708145274.0e284;\n u = 1797693134862315708145274.0e284;\n v = -1797693134862315708145274.0e284;\n g = 0;\n p = l;\n k = 1797693134862315708145274.0e284;\n s = 1797693134862315708145274.0e284;\n t = -1797693134862315708145274.0e284;\n j = -1797693134862315708145274.0e284;\n\n while (1) {\n h = +e[p >> 3];\n x = +e[p + 8 >> 3];\n p = b[p + 16 >> 2] | 0;\n r = (p | 0) == 0;\n w = +e[(r ? l : p) + 8 >> 3];\n\n if (h < k) {\n e[m >> 3] = h;\n k = h;\n }\n\n if (x < s) {\n e[n >> 3] = x;\n s = x;\n }\n\n if (h > t) { e[i >> 3] = h; }else { h = t; }\n\n if (x > j) {\n e[o >> 3] = x;\n j = x;\n }\n\n u = x > 0.0 & x < u ? x : u;\n v = x < 0.0 & x > v ? x : v;\n g = g | +q(+(x - w)) > 3.141592653589793;\n if (r) { break; }else { t = h; }\n }\n\n if (g) {\n e[o >> 3] = v;\n e[n >> 3] = u;\n }\n } else {\n b[i >> 2] = 0;\n b[i + 4 >> 2] = 0;\n b[i + 8 >> 2] = 0;\n b[i + 12 >> 2] = 0;\n b[i + 16 >> 2] = 0;\n b[i + 20 >> 2] = 0;\n b[i + 24 >> 2] = 0;\n b[i + 28 >> 2] = 0;\n }\n\n g = y + 1 | 0;\n }\n\n E = f + 8 | 0;\n f = b[E >> 2] | 0;\n b[E >> 2] = 0;\n\n if (!f) {\n K = 45;\n break;\n } else {\n y = g;\n n = c;\n }\n }\n\n if ((K | 0) == 21) { H(22624, 22646, 35, 22658); }else if ((K | 0) == 23) { H(22678, 22646, 37, 22658); }else if ((K | 0) == 27) { H(22721, 22646, 61, 22744); }else if ((K | 0) == 45) {\n b: do { if ((F | 0) > 0) {\n E = (g | 0) == 0;\n C = g << 2;\n D = (a | 0) == 0;\n B = 0;\n c = 0;\n\n while (1) {\n A = b[I + (B << 2) >> 2] | 0;\n\n if (!E) {\n y = Wc(C) | 0;\n\n if (!y) {\n K = 50;\n break;\n }\n\n z = Wc(C) | 0;\n\n if (!z) {\n K = 52;\n break;\n }\n\n c: do { if (!D) {\n g = 0;\n d = 0;\n i = a;\n\n while (1) {\n f = G + (g << 5) | 0;\n\n if (lc(b[i >> 2] | 0, f, b[A >> 2] | 0) | 0) {\n b[y + (d << 2) >> 2] = i;\n b[z + (d << 2) >> 2] = f;\n r = d + 1 | 0;\n } else { r = d; }\n\n i = b[i + 8 >> 2] | 0;\n if (!i) { break; }else {\n g = g + 1 | 0;\n d = r;\n }\n }\n\n if ((r | 0) > 0) {\n f = b[y >> 2] | 0;\n if ((r | 0) == 1) { d = f; }else {\n o = 0;\n p = -1;\n d = f;\n n = f;\n\n while (1) {\n l = b[n >> 2] | 0;\n f = 0;\n i = 0;\n\n while (1) {\n g = b[b[y + (i << 2) >> 2] >> 2] | 0;\n if ((g | 0) == (l | 0)) { m = f; }else { m = f + ((lc(g, b[z + (i << 2) >> 2] | 0, b[l >> 2] | 0) | 0) & 1) | 0; }\n i = i + 1 | 0;\n if ((i | 0) == (r | 0)) { break; }else { f = m; }\n }\n\n g = (m | 0) > (p | 0);\n d = g ? n : d;\n f = o + 1 | 0;\n if ((f | 0) == (r | 0)) { break c; }\n o = f;\n p = g ? m : p;\n n = b[y + (f << 2) >> 2] | 0;\n }\n }\n } else { d = 0; }\n } else { d = 0; } } while (0);\n\n Xc(y);\n Xc(z);\n\n if (d) {\n g = d + 4 | 0;\n f = b[g >> 2] | 0;\n\n if (!f) {\n if (b[d >> 2] | 0) {\n K = 70;\n break;\n }\n } else { d = f + 8 | 0; }\n\n b[d >> 2] = A;\n b[g >> 2] = A;\n } else { K = 73; }\n } else { K = 73; }\n\n if ((K | 0) == 73) {\n K = 0;\n c = b[A >> 2] | 0;\n if (c | 0) { do {\n z = c;\n c = b[c + 16 >> 2] | 0;\n Xc(z);\n } while ((c | 0) != 0); }\n Xc(A);\n c = 2;\n }\n\n B = B + 1 | 0;\n\n if ((B | 0) >= (F | 0)) {\n J = c;\n break b;\n }\n }\n\n if ((K | 0) == 50) { H(22863, 22646, 249, 22882); }else if ((K | 0) == 52) { H(22901, 22646, 252, 22882); }else if ((K | 0) == 70) { H(22721, 22646, 61, 22744); }\n } else { J = 0; } } while (0);\n\n Xc(I);\n Xc(G);\n K = J;\n return K | 0;\n }\n return 0;\n }\n\n function lc(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var f = 0.0,\n g = 0.0,\n h = 0.0,\n i = 0.0,\n j = 0.0,\n k = 0.0,\n l = 0.0,\n m = 0;\n\n if (!(xa(c, d) | 0)) {\n a = 0;\n return a | 0;\n }\n\n c = wa(c) | 0;\n l = +e[d >> 3];\n f = +e[d + 8 >> 3];\n f = c & f < 0.0 ? f + 6.283185307179586 : f;\n a = b[a >> 2] | 0;\n\n if (!a) {\n a = 0;\n return a | 0;\n }\n\n if (c) {\n c = 0;\n d = a;\n\n a: while (1) {\n while (1) {\n i = +e[d >> 3];\n k = +e[d + 8 >> 3];\n d = d + 16 | 0;\n m = b[d >> 2] | 0;\n m = (m | 0) == 0 ? a : m;\n h = +e[m >> 3];\n g = +e[m + 8 >> 3];\n\n if (i > h) {\n j = i;\n i = k;\n } else {\n j = h;\n h = i;\n i = g;\n g = k;\n }\n\n if (!(l < h | l > j)) { break; }\n d = b[d >> 2] | 0;\n\n if (!d) {\n d = 22;\n break a;\n }\n }\n\n k = g < 0.0 ? g + 6.283185307179586 : g;\n i = i < 0.0 ? i + 6.283185307179586 : i;\n f = i == f | k == f ? f + -2.220446049250313e-16 : f;\n k = k + (l - h) / (j - h) * (i - k);\n if ((k < 0.0 ? k + 6.283185307179586 : k) > f) { c = c ^ 1; }\n d = b[d >> 2] | 0;\n\n if (!d) {\n d = 22;\n break;\n }\n }\n\n if ((d | 0) == 22) { return c | 0; }\n } else {\n c = 0;\n d = a;\n\n b: while (1) {\n while (1) {\n i = +e[d >> 3];\n k = +e[d + 8 >> 3];\n d = d + 16 | 0;\n m = b[d >> 2] | 0;\n m = (m | 0) == 0 ? a : m;\n h = +e[m >> 3];\n g = +e[m + 8 >> 3];\n\n if (i > h) {\n j = i;\n i = k;\n } else {\n j = h;\n h = i;\n i = g;\n g = k;\n }\n\n if (!(l < h | l > j)) { break; }\n d = b[d >> 2] | 0;\n\n if (!d) {\n d = 22;\n break b;\n }\n }\n\n f = i == f | g == f ? f + -2.220446049250313e-16 : f;\n if (g + (l - h) / (j - h) * (i - g) > f) { c = c ^ 1; }\n d = b[d >> 2] | 0;\n\n if (!d) {\n d = 22;\n break;\n }\n }\n\n if ((d | 0) == 22) { return c | 0; }\n }\n\n return 0;\n }\n\n function mc(c, d, e, f, g) {\n c = c | 0;\n d = d | 0;\n e = e | 0;\n f = f | 0;\n g = g | 0;\n var h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0,\n p = 0,\n q = 0,\n r = 0,\n s = 0,\n t = 0,\n u = 0;\n u = S;\n S = S + 32 | 0;\n t = u + 16 | 0;\n s = u;\n h = cd(c | 0, d | 0, 52) | 0;\n G() | 0;\n h = h & 15;\n p = cd(e | 0, f | 0, 52) | 0;\n G() | 0;\n\n if ((h | 0) != (p & 15 | 0)) {\n t = 1;\n S = u;\n return t | 0;\n }\n\n l = cd(c | 0, d | 0, 45) | 0;\n G() | 0;\n l = l & 127;\n m = cd(e | 0, f | 0, 45) | 0;\n G() | 0;\n m = m & 127;\n p = (l | 0) != (m | 0);\n\n if (p) {\n j = ta(l, m) | 0;\n\n if ((j | 0) == 7) {\n t = 2;\n S = u;\n return t | 0;\n }\n\n k = ta(m, l) | 0;\n if ((k | 0) == 7) { H(22925, 22949, 151, 22959); }else {\n q = j;\n i = k;\n }\n } else {\n q = 0;\n i = 0;\n }\n\n n = la(l) | 0;\n o = la(m) | 0;\n b[t >> 2] = 0;\n b[t + 4 >> 2] = 0;\n b[t + 8 >> 2] = 0;\n b[t + 12 >> 2] = 0;\n\n do { if (!q) {\n Tb(e, f, t) | 0;\n\n if ((n | 0) != 0 & (o | 0) != 0) {\n if ((m | 0) != (l | 0)) { H(23077, 22949, 243, 22959); }\n i = Lb(c, d) | 0;\n h = Lb(e, f) | 0;\n\n if (!(a[22032 + (i * 7 | 0) + h >> 0] | 0)) {\n i = b[21200 + (i * 28 | 0) + (h << 2) >> 2] | 0;\n\n if ((i | 0) > 0) {\n j = t + 4 | 0;\n h = 0;\n\n do {\n Oa(j);\n h = h + 1 | 0;\n } while ((h | 0) != (i | 0));\n\n r = 50;\n } else { r = 50; }\n } else { h = 5; }\n } else { r = 50; }\n } else {\n m = b[4304 + (l * 28 | 0) + (q << 2) >> 2] | 0;\n j = (m | 0) > 0;\n if (!o) {\n if (j) {\n l = 0;\n k = e;\n j = f;\n\n do {\n k = Pb(k, j) | 0;\n j = G() | 0;\n i = Qa(i) | 0;\n l = l + 1 | 0;\n } while ((l | 0) != (m | 0));\n\n m = i;\n l = k;\n k = j;\n } else {\n m = i;\n l = e;\n k = f;\n }\n } else if (j) {\n l = 0;\n k = e;\n j = f;\n\n do {\n k = Ob(k, j) | 0;\n j = G() | 0;\n i = Qa(i) | 0;\n if ((i | 0) == 1) { i = Qa(1) | 0; }\n l = l + 1 | 0;\n } while ((l | 0) != (m | 0));\n\n m = i;\n l = k;\n k = j;\n } else {\n m = i;\n l = e;\n k = f;\n }\n Tb(l, k, t) | 0;\n if (!p) { H(22972, 22949, 181, 22959); }\n j = (n | 0) != 0;\n i = (o | 0) != 0;\n if (j & i) { H(22999, 22949, 182, 22959); }\n if (!j) {\n if (i) {\n i = Lb(l, k) | 0;\n\n if (a[22032 + (i * 7 | 0) + m >> 0] | 0) {\n h = 4;\n break;\n }\n\n l = 0;\n k = b[21200 + (m * 28 | 0) + (i << 2) >> 2] | 0;\n r = 26;\n } else { i = 0; }\n } else {\n i = Lb(c, d) | 0;\n\n if (a[22032 + (i * 7 | 0) + q >> 0] | 0) {\n h = 3;\n break;\n }\n\n k = b[21200 + (i * 28 | 0) + (q << 2) >> 2] | 0;\n l = k;\n r = 26;\n }\n\n if ((r | 0) == 26) {\n if ((k | 0) <= -1) { H(23030, 22949, 212, 22959); }\n if ((l | 0) <= -1) { H(23053, 22949, 213, 22959); }\n\n if ((k | 0) > 0) {\n j = t + 4 | 0;\n i = 0;\n\n do {\n Oa(j);\n i = i + 1 | 0;\n } while ((i | 0) != (k | 0));\n\n i = l;\n } else { i = l; }\n }\n b[s >> 2] = 0;\n b[s + 4 >> 2] = 0;\n b[s + 8 >> 2] = 0;\n Ma(s, q);\n if (h | 0) { while (1) {\n if (!(Rb(h) | 0)) { La(s); }else { Ka(s); }\n if ((h | 0) > 1) { h = h + -1 | 0; }else { break; }\n } }\n\n if ((i | 0) > 0) {\n h = 0;\n\n do {\n Oa(s);\n h = h + 1 | 0;\n } while ((h | 0) != (i | 0));\n }\n\n r = t + 4 | 0;\n Ea(r, s, r);\n Ca(r);\n r = 50;\n } } while (0);\n\n if ((r | 0) == 50) {\n h = t + 4 | 0;\n b[g >> 2] = b[h >> 2];\n b[g + 4 >> 2] = b[h + 4 >> 2];\n b[g + 8 >> 2] = b[h + 8 >> 2];\n h = 0;\n }\n\n t = h;\n S = u;\n return t | 0;\n }\n\n function nc(a, c, d, e) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0,\n p = 0,\n q = 0,\n r = 0,\n s = 0,\n t = 0;\n p = S;\n S = S + 48 | 0;\n h = p + 36 | 0;\n i = p + 24 | 0;\n j = p + 12 | 0;\n k = p;\n g = cd(a | 0, c | 0, 52) | 0;\n G() | 0;\n g = g & 15;\n n = cd(a | 0, c | 0, 45) | 0;\n G() | 0;\n n = n & 127;\n l = la(n) | 0;\n dd(g | 0, 0, 52) | 0;\n r = G() | 0 | 134225919;\n q = e;\n b[q >> 2] = -1;\n b[q + 4 >> 2] = r;\n\n if (!g) {\n if ((b[d >> 2] | 0) > 1) {\n r = 1;\n S = p;\n return r | 0;\n }\n\n if ((b[d + 4 >> 2] | 0) > 1) {\n r = 1;\n S = p;\n return r | 0;\n }\n\n if ((b[d + 8 >> 2] | 0) > 1) {\n r = 1;\n S = p;\n return r | 0;\n }\n\n f = sa(n, Ha(d) | 0) | 0;\n\n if ((f | 0) == 127) {\n r = 1;\n S = p;\n return r | 0;\n }\n\n o = dd(f | 0, 0, 45) | 0;\n q = G() | 0;\n n = e;\n q = b[n + 4 >> 2] & -1040385 | q;\n r = e;\n b[r >> 2] = b[n >> 2] | o;\n b[r + 4 >> 2] = q;\n r = 0;\n S = p;\n return r | 0;\n }\n b[h >> 2] = b[d >> 2];\n b[h + 4 >> 2] = b[d + 4 >> 2];\n b[h + 8 >> 2] = b[d + 8 >> 2];\n\n while (1) {\n b[i >> 2] = b[h >> 2];\n b[i + 4 >> 2] = b[h + 4 >> 2];\n b[i + 8 >> 2] = b[h + 8 >> 2];\n\n if (!(Rb(g) | 0)) {\n Ja(h);\n b[j >> 2] = b[h >> 2];\n b[j + 4 >> 2] = b[h + 4 >> 2];\n b[j + 8 >> 2] = b[h + 8 >> 2];\n La(j);\n } else {\n Ia(h);\n b[j >> 2] = b[h >> 2];\n b[j + 4 >> 2] = b[h + 4 >> 2];\n b[j + 8 >> 2] = b[h + 8 >> 2];\n Ka(j);\n }\n\n Fa(i, j, k);\n Ca(k);\n q = e;\n s = b[q >> 2] | 0;\n q = b[q + 4 >> 2] | 0;\n t = (15 - g | 0) * 3 | 0;\n d = dd(7, 0, t | 0) | 0;\n q = q & ~(G() | 0);\n t = dd(Ha(k) | 0, 0, t | 0) | 0;\n q = G() | 0 | q;\n r = e;\n b[r >> 2] = t | s & ~d;\n b[r + 4 >> 2] = q;\n if ((g | 0) > 1) { g = g + -1 | 0; }else { break; }\n }\n\n a: do { if (((b[h >> 2] | 0) <= 1 ? (b[h + 4 >> 2] | 0) <= 1 : 0) ? (b[h + 8 >> 2] | 0) <= 1 : 0) {\n g = Ha(h) | 0;\n i = sa(n, g) | 0;\n if ((i | 0) == 127) { k = 0; }else { k = la(i) | 0; }\n\n b: do { if (!g) {\n if ((l | 0) != 0 & (k | 0) != 0) {\n t = Lb(a, c) | 0;\n g = e;\n g = 21408 + (t * 28 | 0) + ((Lb(b[g >> 2] | 0, b[g + 4 >> 2] | 0) | 0) << 2) | 0;\n g = b[g >> 2] | 0;\n if ((g | 0) <= -1) { H(23201, 22949, 433, 23134); }\n\n if (!g) {\n f = i;\n g = 55;\n } else {\n h = e;\n f = 0;\n d = b[h >> 2] | 0;\n h = b[h + 4 >> 2] | 0;\n\n do {\n d = Nb(d, h) | 0;\n h = G() | 0;\n t = e;\n b[t >> 2] = d;\n b[t + 4 >> 2] = h;\n f = f + 1 | 0;\n } while ((f | 0) < (g | 0));\n\n f = i;\n g = 54;\n }\n } else {\n f = i;\n g = 54;\n }\n } else {\n if (l) {\n h = 21408 + ((Lb(a, c) | 0) * 28 | 0) + (g << 2) | 0;\n h = b[h >> 2] | 0;\n\n if ((h | 0) > 0) {\n d = 0;\n\n do {\n g = Pa(g) | 0;\n d = d + 1 | 0;\n } while ((d | 0) != (h | 0));\n }\n\n if ((g | 0) == 1) {\n f = 3;\n break a;\n }\n\n d = sa(n, g) | 0;\n if ((d | 0) == 127) { H(23104, 22949, 376, 23134); }\n\n if (!(la(d) | 0)) {\n o = h;\n m = g;\n f = d;\n } else { H(23147, 22949, 377, 23134); }\n } else {\n o = 0;\n m = g;\n f = i;\n }\n\n j = b[4304 + (n * 28 | 0) + (m << 2) >> 2] | 0;\n if ((j | 0) <= -1) { H(23178, 22949, 384, 23134); }\n\n if (!k) {\n if ((o | 0) <= -1) { H(23030, 22949, 417, 23134); }\n\n if (o | 0) {\n h = e;\n g = 0;\n d = b[h >> 2] | 0;\n h = b[h + 4 >> 2] | 0;\n\n do {\n d = Nb(d, h) | 0;\n h = G() | 0;\n t = e;\n b[t >> 2] = d;\n b[t + 4 >> 2] = h;\n g = g + 1 | 0;\n } while ((g | 0) < (o | 0));\n }\n\n if ((j | 0) <= 0) {\n g = 54;\n break;\n }\n\n h = e;\n g = 0;\n d = b[h >> 2] | 0;\n h = b[h + 4 >> 2] | 0;\n\n while (1) {\n d = Nb(d, h) | 0;\n h = G() | 0;\n t = e;\n b[t >> 2] = d;\n b[t + 4 >> 2] = h;\n g = g + 1 | 0;\n\n if ((g | 0) == (j | 0)) {\n g = 54;\n break b;\n }\n }\n }\n\n i = ta(f, n) | 0;\n if ((i | 0) == 7) { H(22925, 22949, 393, 23134); }\n g = e;\n d = b[g >> 2] | 0;\n g = b[g + 4 >> 2] | 0;\n\n if ((j | 0) > 0) {\n h = 0;\n\n do {\n d = Nb(d, g) | 0;\n g = G() | 0;\n t = e;\n b[t >> 2] = d;\n b[t + 4 >> 2] = g;\n h = h + 1 | 0;\n } while ((h | 0) != (j | 0));\n }\n\n d = Lb(d, g) | 0;\n t = ma(f) | 0;\n d = b[(t ? 21824 : 21616) + (i * 28 | 0) + (d << 2) >> 2] | 0;\n if ((d | 0) <= -1) { H(23030, 22949, 412, 23134); }\n if (!d) { g = 54; }else {\n i = e;\n g = 0;\n h = b[i >> 2] | 0;\n i = b[i + 4 >> 2] | 0;\n\n do {\n h = Mb(h, i) | 0;\n i = G() | 0;\n t = e;\n b[t >> 2] = h;\n b[t + 4 >> 2] = i;\n g = g + 1 | 0;\n } while ((g | 0) < (d | 0));\n\n g = 54;\n }\n } } while (0);\n\n if ((g | 0) == 54) { if (k) { g = 55; } }\n\n if ((g | 0) == 55) {\n t = e;\n\n if ((Lb(b[t >> 2] | 0, b[t + 4 >> 2] | 0) | 0) == 1) {\n f = 4;\n break;\n }\n }\n\n t = e;\n r = b[t >> 2] | 0;\n t = b[t + 4 >> 2] & -1040385;\n s = dd(f | 0, 0, 45) | 0;\n t = t | (G() | 0);\n f = e;\n b[f >> 2] = r | s;\n b[f + 4 >> 2] = t;\n f = 0;\n } else { f = 2; } } while (0);\n\n t = f;\n S = p;\n return t | 0;\n }\n\n function oc(a, b, c, d, e) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0,\n g = 0;\n g = S;\n S = S + 16 | 0;\n f = g;\n a = mc(a, b, c, d, f) | 0;\n\n if (!a) {\n Ua(f, e);\n a = 0;\n }\n\n S = g;\n return a | 0;\n }\n\n function pc(a, b, c, d) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0;\n e = S;\n S = S + 16 | 0;\n f = e;\n Va(c, f);\n d = nc(a, b, f, d) | 0;\n S = e;\n return d | 0;\n }\n\n function qc(a, b, c, d) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0;\n g = S;\n S = S + 32 | 0;\n e = g + 12 | 0;\n f = g;\n if ((mc(a, b, a, b, e) | 0) == 0 ? (mc(a, b, c, d, f) | 0) == 0 : 0) { a = Ta(e, f) | 0; }else { a = -1; }\n S = g;\n return a | 0;\n }\n\n function rc(a, b, c, d) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0;\n g = S;\n S = S + 32 | 0;\n e = g + 12 | 0;\n f = g;\n if ((mc(a, b, a, b, e) | 0) == 0 ? (mc(a, b, c, d, f) | 0) == 0 : 0) { a = Ta(e, f) | 0; }else { a = -1; }\n S = g;\n return (a >>> 31 ^ 1) + a | 0;\n }\n\n function sc(a, c, d, e, f) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n f = f | 0;\n var g = 0,\n h = 0,\n i = 0.0,\n j = 0.0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0.0,\n p = 0.0,\n r = 0.0,\n s = 0,\n t = 0,\n u = 0,\n v = 0,\n w = 0,\n x = 0,\n y = 0.0;\n x = S;\n S = S + 48 | 0;\n g = x + 24 | 0;\n h = x + 12 | 0;\n w = x;\n\n if ((mc(a, c, a, c, g) | 0) == 0 ? (mc(a, c, d, e, h) | 0) == 0 : 0) {\n v = Ta(g, h) | 0;\n\n if ((v | 0) < 0) {\n w = v;\n S = x;\n return w | 0;\n }\n b[g >> 2] = 0;\n b[g + 4 >> 2] = 0;\n b[g + 8 >> 2] = 0;\n b[h >> 2] = 0;\n b[h + 4 >> 2] = 0;\n b[h + 8 >> 2] = 0;\n mc(a, c, a, c, g) | 0;\n mc(a, c, d, e, h) | 0;\n Wa(g);\n Wa(h);\n\n if (!v) {\n e = g + 4 | 0;\n n = g + 8 | 0;\n s = e;\n t = n;\n u = g;\n d = b[g >> 2] | 0;\n e = b[e >> 2] | 0;\n g = b[n >> 2] | 0;\n p = 0.0;\n r = 0.0;\n o = 0.0;\n } else {\n l = b[g >> 2] | 0;\n o = +(v | 0);\n s = g + 4 | 0;\n m = b[s >> 2] | 0;\n t = g + 8 | 0;\n n = b[t >> 2] | 0;\n u = g;\n d = l;\n e = m;\n g = n;\n p = +((b[h >> 2] | 0) - l | 0) / o;\n r = +((b[h + 4 >> 2] | 0) - m | 0) / o;\n o = +((b[h + 8 >> 2] | 0) - n | 0) / o;\n }\n\n b[w >> 2] = d;\n n = w + 4 | 0;\n b[n >> 2] = e;\n m = w + 8 | 0;\n b[m >> 2] = g;\n l = 0;\n\n while (1) {\n j = +(l | 0);\n y = p * j + +(d | 0);\n i = r * j + +(b[s >> 2] | 0);\n j = o * j + +(b[t >> 2] | 0);\n e = ~~+fd(+y);\n h = ~~+fd(+i);\n d = ~~+fd(+j);\n y = +q(+(+(e | 0) - y));\n i = +q(+(+(h | 0) - i));\n j = +q(+(+(d | 0) - j));\n\n do { if (!(y > i & y > j)) {\n k = 0 - e | 0;\n\n if (i > j) {\n g = k - d | 0;\n break;\n } else {\n g = h;\n d = k - h | 0;\n break;\n }\n } else {\n e = 0 - (h + d) | 0;\n g = h;\n } } while (0);\n\n b[w >> 2] = e;\n b[n >> 2] = g;\n b[m >> 2] = d;\n Xa(w);\n nc(a, c, w, f + (l << 3) | 0) | 0;\n if ((l | 0) == (v | 0)) { break; }\n l = l + 1 | 0;\n d = b[u >> 2] | 0;\n }\n\n w = 0;\n S = x;\n return w | 0;\n }\n\n w = -1;\n S = x;\n return w | 0;\n }\n\n function tc(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0;\n\n if (!b) {\n c = 1;\n return c | 0;\n }\n\n c = a;\n a = 1;\n\n do {\n a = B((b & 1 | 0) == 0 ? 1 : c, a) | 0;\n b = b >> 1;\n c = B(c, c) | 0;\n } while ((b | 0) != 0);\n\n return a | 0;\n }\n\n function uc(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var f = 0.0,\n g = 0.0,\n h = 0.0,\n i = 0.0,\n j = 0.0,\n k = 0.0,\n l = 0,\n m = 0,\n n = 0,\n o = 0.0;\n\n if (!(xa(c, d) | 0)) {\n n = 0;\n return n | 0;\n }\n\n c = wa(c) | 0;\n o = +e[d >> 3];\n f = +e[d + 8 >> 3];\n f = c & f < 0.0 ? f + 6.283185307179586 : f;\n n = b[a >> 2] | 0;\n\n if ((n | 0) <= 0) {\n n = 0;\n return n | 0;\n }\n\n m = b[a + 4 >> 2] | 0;\n\n if (c) {\n c = 0;\n d = -1;\n a = 0;\n\n a: while (1) {\n l = a;\n\n while (1) {\n i = +e[m + (l << 4) >> 3];\n k = +e[m + (l << 4) + 8 >> 3];\n a = (d + 2 | 0) % (n | 0) | 0;\n h = +e[m + (a << 4) >> 3];\n g = +e[m + (a << 4) + 8 >> 3];\n\n if (i > h) {\n j = i;\n i = k;\n } else {\n j = h;\n h = i;\n i = g;\n g = k;\n }\n\n if (!(o < h | o > j)) { break; }\n d = l + 1 | 0;\n\n if ((d | 0) < (n | 0)) {\n a = l;\n l = d;\n d = a;\n } else {\n d = 22;\n break a;\n }\n }\n\n k = g < 0.0 ? g + 6.283185307179586 : g;\n i = i < 0.0 ? i + 6.283185307179586 : i;\n f = i == f | k == f ? f + -2.220446049250313e-16 : f;\n k = k + (o - h) / (j - h) * (i - k);\n if ((k < 0.0 ? k + 6.283185307179586 : k) > f) { c = c ^ 1; }\n a = l + 1 | 0;\n\n if ((a | 0) >= (n | 0)) {\n d = 22;\n break;\n } else { d = l; }\n }\n\n if ((d | 0) == 22) { return c | 0; }\n } else {\n c = 0;\n d = -1;\n a = 0;\n\n b: while (1) {\n l = a;\n\n while (1) {\n i = +e[m + (l << 4) >> 3];\n k = +e[m + (l << 4) + 8 >> 3];\n a = (d + 2 | 0) % (n | 0) | 0;\n h = +e[m + (a << 4) >> 3];\n g = +e[m + (a << 4) + 8 >> 3];\n\n if (i > h) {\n j = i;\n i = k;\n } else {\n j = h;\n h = i;\n i = g;\n g = k;\n }\n\n if (!(o < h | o > j)) { break; }\n d = l + 1 | 0;\n\n if ((d | 0) < (n | 0)) {\n a = l;\n l = d;\n d = a;\n } else {\n d = 22;\n break b;\n }\n }\n\n f = i == f | g == f ? f + -2.220446049250313e-16 : f;\n if (g + (o - h) / (j - h) * (i - g) > f) { c = c ^ 1; }\n a = l + 1 | 0;\n\n if ((a | 0) >= (n | 0)) {\n d = 22;\n break;\n } else { d = l; }\n }\n\n if ((d | 0) == 22) { return c | 0; }\n }\n\n return 0;\n }\n\n function vc(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0.0,\n f = 0.0,\n g = 0.0,\n h = 0.0,\n i = 0.0,\n j = 0.0,\n k = 0.0,\n l = 0.0,\n m = 0.0,\n n = 0,\n o = 0,\n p = 0,\n r = 0,\n s = 0,\n t = 0,\n u = 0,\n v = 0;\n r = b[a >> 2] | 0;\n\n if (!r) {\n b[c >> 2] = 0;\n b[c + 4 >> 2] = 0;\n b[c + 8 >> 2] = 0;\n b[c + 12 >> 2] = 0;\n b[c + 16 >> 2] = 0;\n b[c + 20 >> 2] = 0;\n b[c + 24 >> 2] = 0;\n b[c + 28 >> 2] = 0;\n return;\n }\n\n s = c + 8 | 0;\n e[s >> 3] = 1797693134862315708145274.0e284;\n t = c + 24 | 0;\n e[t >> 3] = 1797693134862315708145274.0e284;\n e[c >> 3] = -1797693134862315708145274.0e284;\n u = c + 16 | 0;\n e[u >> 3] = -1797693134862315708145274.0e284;\n if ((r | 0) <= 0) { return; }\n o = b[a + 4 >> 2] | 0;\n l = 1797693134862315708145274.0e284;\n m = -1797693134862315708145274.0e284;\n n = 0;\n a = -1;\n h = 1797693134862315708145274.0e284;\n i = 1797693134862315708145274.0e284;\n k = -1797693134862315708145274.0e284;\n f = -1797693134862315708145274.0e284;\n p = 0;\n\n while (1) {\n d = +e[o + (p << 4) >> 3];\n j = +e[o + (p << 4) + 8 >> 3];\n a = a + 2 | 0;\n g = +e[o + (((a | 0) == (r | 0) ? 0 : a) << 4) + 8 >> 3];\n\n if (d < h) {\n e[s >> 3] = d;\n h = d;\n }\n\n if (j < i) {\n e[t >> 3] = j;\n i = j;\n }\n\n if (d > k) { e[c >> 3] = d; }else { d = k; }\n\n if (j > f) {\n e[u >> 3] = j;\n f = j;\n }\n\n l = j > 0.0 & j < l ? j : l;\n m = j < 0.0 & j > m ? j : m;\n n = n | +q(+(j - g)) > 3.141592653589793;\n a = p + 1 | 0;\n if ((a | 0) == (r | 0)) { break; }else {\n v = p;\n k = d;\n p = a;\n a = v;\n }\n }\n\n if (!n) { return; }\n e[u >> 3] = m;\n e[t >> 3] = l;\n return;\n }\n\n function wc(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n f = 0,\n g = 0,\n h = 0.0,\n i = 0.0,\n j = 0.0,\n k = 0.0,\n l = 0.0,\n m = 0.0,\n n = 0.0,\n o = 0.0,\n p = 0.0,\n r = 0,\n s = 0,\n t = 0,\n u = 0,\n v = 0,\n w = 0,\n x = 0,\n y = 0,\n z = 0,\n A = 0;\n r = b[a >> 2] | 0;\n\n if (r) {\n s = c + 8 | 0;\n e[s >> 3] = 1797693134862315708145274.0e284;\n t = c + 24 | 0;\n e[t >> 3] = 1797693134862315708145274.0e284;\n e[c >> 3] = -1797693134862315708145274.0e284;\n u = c + 16 | 0;\n e[u >> 3] = -1797693134862315708145274.0e284;\n\n if ((r | 0) > 0) {\n g = b[a + 4 >> 2] | 0;\n o = 1797693134862315708145274.0e284;\n p = -1797693134862315708145274.0e284;\n f = 0;\n d = -1;\n k = 1797693134862315708145274.0e284;\n l = 1797693134862315708145274.0e284;\n n = -1797693134862315708145274.0e284;\n i = -1797693134862315708145274.0e284;\n v = 0;\n\n while (1) {\n h = +e[g + (v << 4) >> 3];\n m = +e[g + (v << 4) + 8 >> 3];\n z = d + 2 | 0;\n j = +e[g + (((z | 0) == (r | 0) ? 0 : z) << 4) + 8 >> 3];\n\n if (h < k) {\n e[s >> 3] = h;\n k = h;\n }\n\n if (m < l) {\n e[t >> 3] = m;\n l = m;\n }\n\n if (h > n) { e[c >> 3] = h; }else { h = n; }\n\n if (m > i) {\n e[u >> 3] = m;\n i = m;\n }\n\n o = m > 0.0 & m < o ? m : o;\n p = m < 0.0 & m > p ? m : p;\n f = f | +q(+(m - j)) > 3.141592653589793;\n d = v + 1 | 0;\n if ((d | 0) == (r | 0)) { break; }else {\n z = v;\n n = h;\n v = d;\n d = z;\n }\n }\n\n if (f) {\n e[u >> 3] = p;\n e[t >> 3] = o;\n }\n }\n } else {\n b[c >> 2] = 0;\n b[c + 4 >> 2] = 0;\n b[c + 8 >> 2] = 0;\n b[c + 12 >> 2] = 0;\n b[c + 16 >> 2] = 0;\n b[c + 20 >> 2] = 0;\n b[c + 24 >> 2] = 0;\n b[c + 28 >> 2] = 0;\n }\n\n z = a + 8 | 0;\n d = b[z >> 2] | 0;\n if ((d | 0) <= 0) { return; }\n y = a + 12 | 0;\n x = 0;\n\n do {\n g = b[y >> 2] | 0;\n f = x;\n x = x + 1 | 0;\n t = c + (x << 5) | 0;\n u = b[g + (f << 3) >> 2] | 0;\n\n if (u) {\n v = c + (x << 5) + 8 | 0;\n e[v >> 3] = 1797693134862315708145274.0e284;\n a = c + (x << 5) + 24 | 0;\n e[a >> 3] = 1797693134862315708145274.0e284;\n e[t >> 3] = -1797693134862315708145274.0e284;\n w = c + (x << 5) + 16 | 0;\n e[w >> 3] = -1797693134862315708145274.0e284;\n\n if ((u | 0) > 0) {\n r = b[g + (f << 3) + 4 >> 2] | 0;\n o = 1797693134862315708145274.0e284;\n p = -1797693134862315708145274.0e284;\n g = 0;\n f = -1;\n s = 0;\n k = 1797693134862315708145274.0e284;\n l = 1797693134862315708145274.0e284;\n m = -1797693134862315708145274.0e284;\n i = -1797693134862315708145274.0e284;\n\n while (1) {\n h = +e[r + (s << 4) >> 3];\n n = +e[r + (s << 4) + 8 >> 3];\n f = f + 2 | 0;\n j = +e[r + (((f | 0) == (u | 0) ? 0 : f) << 4) + 8 >> 3];\n\n if (h < k) {\n e[v >> 3] = h;\n k = h;\n }\n\n if (n < l) {\n e[a >> 3] = n;\n l = n;\n }\n\n if (h > m) { e[t >> 3] = h; }else { h = m; }\n\n if (n > i) {\n e[w >> 3] = n;\n i = n;\n }\n\n o = n > 0.0 & n < o ? n : o;\n p = n < 0.0 & n > p ? n : p;\n g = g | +q(+(n - j)) > 3.141592653589793;\n f = s + 1 | 0;\n if ((f | 0) == (u | 0)) { break; }else {\n A = s;\n s = f;\n m = h;\n f = A;\n }\n }\n\n if (g) {\n e[w >> 3] = p;\n e[a >> 3] = o;\n }\n }\n } else {\n b[t >> 2] = 0;\n b[t + 4 >> 2] = 0;\n b[t + 8 >> 2] = 0;\n b[t + 12 >> 2] = 0;\n b[t + 16 >> 2] = 0;\n b[t + 20 >> 2] = 0;\n b[t + 24 >> 2] = 0;\n b[t + 28 >> 2] = 0;\n d = b[z >> 2] | 0;\n }\n } while ((x | 0) < (d | 0));\n\n return;\n }\n\n function xc(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0,\n g = 0;\n\n if (!(uc(a, c, d) | 0)) {\n f = 0;\n return f | 0;\n }\n\n f = a + 8 | 0;\n\n if ((b[f >> 2] | 0) <= 0) {\n f = 1;\n return f | 0;\n }\n\n e = a + 12 | 0;\n a = 0;\n\n while (1) {\n g = a;\n a = a + 1 | 0;\n\n if (uc((b[e >> 2] | 0) + (g << 3) | 0, c + (a << 5) | 0, d) | 0) {\n a = 0;\n e = 6;\n break;\n }\n\n if ((a | 0) >= (b[f >> 2] | 0)) {\n a = 1;\n e = 6;\n break;\n }\n }\n\n if ((e | 0) == 6) { return a | 0; }\n return 0;\n }\n\n function yc() {\n return 8;\n }\n\n function zc() {\n return 16;\n }\n\n function Ac() {\n return 168;\n }\n\n function Bc() {\n return 8;\n }\n\n function Cc() {\n return 16;\n }\n\n function Dc() {\n return 12;\n }\n\n function Ec() {\n return 8;\n }\n\n function Fc(a) {\n a = a | 0;\n var b = 0.0,\n c = 0.0;\n c = +e[a >> 3];\n b = +e[a + 8 >> 3];\n return + +r(+(c * c + b * b));\n }\n\n function Gc(a, b, c, d, f) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n d = d | 0;\n f = f | 0;\n var g = 0.0,\n h = 0.0,\n i = 0.0,\n j = 0.0,\n k = 0.0,\n l = 0.0,\n m = 0.0,\n n = 0.0;\n k = +e[a >> 3];\n j = +e[b >> 3] - k;\n i = +e[a + 8 >> 3];\n h = +e[b + 8 >> 3] - i;\n m = +e[c >> 3];\n g = +e[d >> 3] - m;\n n = +e[c + 8 >> 3];\n l = +e[d + 8 >> 3] - n;\n g = (g * (i - n) - (k - m) * l) / (j * l - h * g);\n e[f >> 3] = k + j * g;\n e[f + 8 >> 3] = i + h * g;\n return;\n }\n\n function Hc(a, b) {\n a = a | 0;\n b = b | 0;\n\n if (!(+e[a >> 3] == +e[b >> 3])) {\n b = 0;\n return b | 0;\n }\n\n b = +e[a + 8 >> 3] == +e[b + 8 >> 3];\n return b | 0;\n }\n\n function Ic(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0.0,\n d = 0.0,\n f = 0.0;\n f = +e[a >> 3] - +e[b >> 3];\n d = +e[a + 8 >> 3] - +e[b + 8 >> 3];\n c = +e[a + 16 >> 3] - +e[b + 16 >> 3];\n return +(f * f + d * d + c * c);\n }\n\n function Jc(a, b) {\n a = a | 0;\n b = b | 0;\n var c = 0.0,\n d = 0.0,\n f = 0.0;\n c = +e[a >> 3];\n d = +t(+c);\n c = +u(+c);\n e[b + 16 >> 3] = c;\n c = +e[a + 8 >> 3];\n f = d * +t(+c);\n e[b >> 3] = f;\n c = d * +u(+c);\n e[b + 8 >> 3] = c;\n return;\n }\n\n function Kc(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0;\n k = S;\n S = S + 32 | 0;\n f = k + 16 | 0;\n g = k;\n Ub(a, c, f);\n h = Ab(a, c) | 0;\n j = Lb(a, c) | 0;\n pa(h, g);\n c = qa(h, b[f >> 2] | 0) | 0;\n\n if (!(la(h) | 0)) {\n j = c;\n S = k;\n return j | 0;\n }\n\n do { switch (h | 0) {\n case 4:\n {\n a = 0;\n d = 14;\n break;\n }\n\n case 14:\n {\n a = 1;\n d = 14;\n break;\n }\n\n case 24:\n {\n a = 2;\n d = 14;\n break;\n }\n\n case 38:\n {\n a = 3;\n d = 14;\n break;\n }\n\n case 49:\n {\n a = 4;\n d = 14;\n break;\n }\n\n case 58:\n {\n a = 5;\n d = 14;\n break;\n }\n\n case 63:\n {\n a = 6;\n d = 14;\n break;\n }\n\n case 72:\n {\n a = 7;\n d = 14;\n break;\n }\n\n case 83:\n {\n a = 8;\n d = 14;\n break;\n }\n\n case 97:\n {\n a = 9;\n d = 14;\n break;\n }\n\n case 107:\n {\n a = 10;\n d = 14;\n break;\n }\n\n case 117:\n {\n a = 11;\n d = 14;\n break;\n }\n\n default:\n {\n i = 0;\n e = 0;\n }\n } } while (0);\n\n if ((d | 0) == 14) {\n i = b[22096 + (a * 24 | 0) + 8 >> 2] | 0;\n e = b[22096 + (a * 24 | 0) + 16 >> 2] | 0;\n }\n\n a = b[f >> 2] | 0;\n\n if ((a | 0) != (b[g >> 2] | 0)) {\n h = ma(h) | 0;\n a = b[f >> 2] | 0;\n if (h | (a | 0) == (e | 0)) { c = (c + 1 | 0) % 6 | 0; }\n }\n\n if ((j | 0) == 3 & (a | 0) == (e | 0)) {\n j = (c + 5 | 0) % 6 | 0;\n S = k;\n return j | 0;\n }\n\n if (!((j | 0) == 5 & (a | 0) == (i | 0))) {\n j = c;\n S = k;\n return j | 0;\n }\n\n j = (c + 1 | 0) % 6 | 0;\n S = k;\n return j | 0;\n }\n\n function Lc(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0,\n f = 0;\n e = Fb(a, c) | 0;\n\n if ((d + -1 | 0) >>> 0 > 5) {\n d = -1;\n return d | 0;\n }\n\n f = (e | 0) != 0;\n\n if ((d | 0) == 1 & f) {\n d = -1;\n return d | 0;\n }\n\n e = Kc(a, c) | 0;\n\n if (f) {\n d = (5 - e + (b[22384 + (d << 2) >> 2] | 0) | 0) % 5 | 0;\n return d | 0;\n } else {\n d = (6 - e + (b[22416 + (d << 2) >> 2] | 0) | 0) % 6 | 0;\n return d | 0;\n }\n\n return 0;\n }\n\n function Mc(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var e = 0;\n\n if ((c | 0) > 0) {\n e = Yc(c, 4) | 0;\n b[a >> 2] = e;\n if (!e) { H(23230, 23253, 40, 23267); }\n } else { b[a >> 2] = 0; }\n\n b[a + 4 >> 2] = c;\n b[a + 8 >> 2] = 0;\n b[a + 12 >> 2] = d;\n return;\n }\n\n function Nc(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0;\n g = a + 4 | 0;\n h = a + 12 | 0;\n i = a + 8 | 0;\n\n a: while (1) {\n d = b[g >> 2] | 0;\n c = 0;\n\n while (1) {\n if ((c | 0) >= (d | 0)) { break a; }\n f = b[a >> 2] | 0;\n j = b[f + (c << 2) >> 2] | 0;\n if (!j) { c = c + 1 | 0; }else { break; }\n }\n\n c = f + (~~(+q(+(+s(10.0, + +(15 - (b[h >> 2] | 0) | 0)) * (+e[j >> 3] + +e[j + 8 >> 3]))) % +(d | 0)) >>> 0 << 2) | 0;\n d = b[c >> 2] | 0;\n\n b: do { if (d | 0) {\n f = j + 32 | 0;\n if ((d | 0) == (j | 0)) { b[c >> 2] = b[f >> 2]; }else {\n d = d + 32 | 0;\n c = b[d >> 2] | 0;\n if (!c) { break; }\n\n while (1) {\n if ((c | 0) == (j | 0)) { break; }\n d = c + 32 | 0;\n c = b[d >> 2] | 0;\n if (!c) { break b; }\n }\n\n b[d >> 2] = b[f >> 2];\n }\n Xc(j);\n b[i >> 2] = (b[i >> 2] | 0) + -1;\n } } while (0);\n }\n\n Xc(b[a >> 2] | 0);\n return;\n }\n\n function Oc(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0;\n e = b[a + 4 >> 2] | 0;\n d = 0;\n\n while (1) {\n if ((d | 0) >= (e | 0)) {\n c = 0;\n d = 4;\n break;\n }\n\n c = b[(b[a >> 2] | 0) + (d << 2) >> 2] | 0;\n if (!c) { d = d + 1 | 0; }else {\n d = 4;\n break;\n }\n }\n\n if ((d | 0) == 4) { return c | 0; }\n return 0;\n }\n\n function Pc(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0,\n f = 0,\n g = 0,\n h = 0;\n d = ~~(+q(+(+s(10.0, + +(15 - (b[a + 12 >> 2] | 0) | 0)) * (+e[c >> 3] + +e[c + 8 >> 3]))) % +(b[a + 4 >> 2] | 0)) >>> 0;\n d = (b[a >> 2] | 0) + (d << 2) | 0;\n f = b[d >> 2] | 0;\n\n if (!f) {\n h = 1;\n return h | 0;\n }\n\n h = c + 32 | 0;\n\n do { if ((f | 0) != (c | 0)) {\n d = b[f + 32 >> 2] | 0;\n\n if (!d) {\n h = 1;\n return h | 0;\n }\n\n g = d;\n\n while (1) {\n if ((g | 0) == (c | 0)) {\n g = 8;\n break;\n }\n\n d = b[g + 32 >> 2] | 0;\n\n if (!d) {\n d = 1;\n g = 10;\n break;\n } else {\n f = g;\n g = d;\n }\n }\n\n if ((g | 0) == 8) {\n b[f + 32 >> 2] = b[h >> 2];\n break;\n } else if ((g | 0) == 10) { return d | 0; }\n } else { b[d >> 2] = b[h >> 2]; } } while (0);\n\n Xc(c);\n h = a + 8 | 0;\n b[h >> 2] = (b[h >> 2] | 0) + -1;\n h = 0;\n return h | 0;\n }\n\n function Qc(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var f = 0,\n g = 0,\n h = 0,\n i = 0;\n h = Wc(40) | 0;\n if (!h) { H(23283, 23253, 98, 23296); }\n b[h >> 2] = b[c >> 2];\n b[h + 4 >> 2] = b[c + 4 >> 2];\n b[h + 8 >> 2] = b[c + 8 >> 2];\n b[h + 12 >> 2] = b[c + 12 >> 2];\n g = h + 16 | 0;\n b[g >> 2] = b[d >> 2];\n b[g + 4 >> 2] = b[d + 4 >> 2];\n b[g + 8 >> 2] = b[d + 8 >> 2];\n b[g + 12 >> 2] = b[d + 12 >> 2];\n b[h + 32 >> 2] = 0;\n g = ~~(+q(+(+s(10.0, + +(15 - (b[a + 12 >> 2] | 0) | 0)) * (+e[c >> 3] + +e[c + 8 >> 3]))) % +(b[a + 4 >> 2] | 0)) >>> 0;\n g = (b[a >> 2] | 0) + (g << 2) | 0;\n f = b[g >> 2] | 0;\n\n do { if (!f) { b[g >> 2] = h; }else {\n while (1) {\n if (hb(f, c) | 0 ? hb(f + 16 | 0, d) | 0 : 0) { break; }\n g = b[f + 32 >> 2] | 0;\n f = (g | 0) == 0 ? f : g;\n\n if (!(b[f + 32 >> 2] | 0)) {\n i = 10;\n break;\n }\n }\n\n if ((i | 0) == 10) {\n b[f + 32 >> 2] = h;\n break;\n }\n\n Xc(h);\n i = f;\n return i | 0;\n } } while (0);\n\n i = a + 8 | 0;\n b[i >> 2] = (b[i >> 2] | 0) + 1;\n i = h;\n return i | 0;\n }\n\n function Rc(a, c, d) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n var f = 0,\n g = 0;\n g = ~~(+q(+(+s(10.0, + +(15 - (b[a + 12 >> 2] | 0) | 0)) * (+e[c >> 3] + +e[c + 8 >> 3]))) % +(b[a + 4 >> 2] | 0)) >>> 0;\n g = b[(b[a >> 2] | 0) + (g << 2) >> 2] | 0;\n\n if (!g) {\n d = 0;\n return d | 0;\n }\n\n if (!d) {\n a = g;\n\n while (1) {\n if (hb(a, c) | 0) {\n f = 10;\n break;\n }\n\n a = b[a + 32 >> 2] | 0;\n\n if (!a) {\n a = 0;\n f = 10;\n break;\n }\n }\n\n if ((f | 0) == 10) { return a | 0; }\n }\n\n a = g;\n\n while (1) {\n if (hb(a, c) | 0 ? hb(a + 16 | 0, d) | 0 : 0) {\n f = 10;\n break;\n }\n\n a = b[a + 32 >> 2] | 0;\n\n if (!a) {\n a = 0;\n f = 10;\n break;\n }\n }\n\n if ((f | 0) == 10) { return a | 0; }\n return 0;\n }\n\n function Sc(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0;\n d = ~~(+q(+(+s(10.0, + +(15 - (b[a + 12 >> 2] | 0) | 0)) * (+e[c >> 3] + +e[c + 8 >> 3]))) % +(b[a + 4 >> 2] | 0)) >>> 0;\n a = b[(b[a >> 2] | 0) + (d << 2) >> 2] | 0;\n\n if (!a) {\n d = 0;\n return d | 0;\n }\n\n while (1) {\n if (hb(a, c) | 0) {\n c = 5;\n break;\n }\n\n a = b[a + 32 >> 2] | 0;\n\n if (!a) {\n a = 0;\n c = 5;\n break;\n }\n }\n\n if ((c | 0) == 5) { return a | 0; }\n return 0;\n }\n\n function Tc() {\n return 23312;\n }\n\n function Uc(a) {\n a = +a;\n return + +id(+a);\n }\n\n function Vc(a) {\n a = +a;\n return ~~+Uc(a) | 0;\n }\n\n function Wc(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0,\n p = 0,\n q = 0,\n r = 0,\n s = 0,\n t = 0,\n u = 0,\n v = 0,\n w = 0;\n w = S;\n S = S + 16 | 0;\n n = w;\n\n do { if (a >>> 0 < 245) {\n k = a >>> 0 < 11 ? 16 : a + 11 & -8;\n a = k >>> 3;\n m = b[5829] | 0;\n d = m >>> a;\n\n if (d & 3 | 0) {\n c = (d & 1 ^ 1) + a | 0;\n a = 23356 + (c << 1 << 2) | 0;\n d = a + 8 | 0;\n e = b[d >> 2] | 0;\n f = e + 8 | 0;\n g = b[f >> 2] | 0;\n if ((g | 0) == (a | 0)) { b[5829] = m & ~(1 << c); }else {\n b[g + 12 >> 2] = a;\n b[d >> 2] = g;\n }\n v = c << 3;\n b[e + 4 >> 2] = v | 3;\n v = e + v + 4 | 0;\n b[v >> 2] = b[v >> 2] | 1;\n v = f;\n S = w;\n return v | 0;\n }\n\n l = b[5831] | 0;\n\n if (k >>> 0 > l >>> 0) {\n if (d | 0) {\n c = 2 << a;\n c = d << a & (c | 0 - c);\n c = (c & 0 - c) + -1 | 0;\n i = c >>> 12 & 16;\n c = c >>> i;\n d = c >>> 5 & 8;\n c = c >>> d;\n g = c >>> 2 & 4;\n c = c >>> g;\n a = c >>> 1 & 2;\n c = c >>> a;\n e = c >>> 1 & 1;\n e = (d | i | g | a | e) + (c >>> e) | 0;\n c = 23356 + (e << 1 << 2) | 0;\n a = c + 8 | 0;\n g = b[a >> 2] | 0;\n i = g + 8 | 0;\n d = b[i >> 2] | 0;\n\n if ((d | 0) == (c | 0)) {\n a = m & ~(1 << e);\n b[5829] = a;\n } else {\n b[d + 12 >> 2] = c;\n b[a >> 2] = d;\n a = m;\n }\n\n v = e << 3;\n h = v - k | 0;\n b[g + 4 >> 2] = k | 3;\n f = g + k | 0;\n b[f + 4 >> 2] = h | 1;\n b[g + v >> 2] = h;\n\n if (l | 0) {\n e = b[5834] | 0;\n c = l >>> 3;\n d = 23356 + (c << 1 << 2) | 0;\n c = 1 << c;\n\n if (!(a & c)) {\n b[5829] = a | c;\n c = d;\n a = d + 8 | 0;\n } else {\n a = d + 8 | 0;\n c = b[a >> 2] | 0;\n }\n\n b[a >> 2] = e;\n b[c + 12 >> 2] = e;\n b[e + 8 >> 2] = c;\n b[e + 12 >> 2] = d;\n }\n\n b[5831] = h;\n b[5834] = f;\n v = i;\n S = w;\n return v | 0;\n }\n\n g = b[5830] | 0;\n\n if (g) {\n d = (g & 0 - g) + -1 | 0;\n f = d >>> 12 & 16;\n d = d >>> f;\n e = d >>> 5 & 8;\n d = d >>> e;\n h = d >>> 2 & 4;\n d = d >>> h;\n i = d >>> 1 & 2;\n d = d >>> i;\n j = d >>> 1 & 1;\n j = b[23620 + ((e | f | h | i | j) + (d >>> j) << 2) >> 2] | 0;\n d = j;\n i = j;\n j = (b[j + 4 >> 2] & -8) - k | 0;\n\n while (1) {\n a = b[d + 16 >> 2] | 0;\n\n if (!a) {\n a = b[d + 20 >> 2] | 0;\n if (!a) { break; }\n }\n\n h = (b[a + 4 >> 2] & -8) - k | 0;\n f = h >>> 0 < j >>> 0;\n d = a;\n i = f ? a : i;\n j = f ? h : j;\n }\n\n h = i + k | 0;\n\n if (h >>> 0 > i >>> 0) {\n f = b[i + 24 >> 2] | 0;\n c = b[i + 12 >> 2] | 0;\n\n do { if ((c | 0) == (i | 0)) {\n a = i + 20 | 0;\n c = b[a >> 2] | 0;\n\n if (!c) {\n a = i + 16 | 0;\n c = b[a >> 2] | 0;\n\n if (!c) {\n d = 0;\n break;\n }\n }\n\n while (1) {\n e = c + 20 | 0;\n d = b[e >> 2] | 0;\n\n if (!d) {\n e = c + 16 | 0;\n d = b[e >> 2] | 0;\n if (!d) { break; }else {\n c = d;\n a = e;\n }\n } else {\n c = d;\n a = e;\n }\n }\n\n b[a >> 2] = 0;\n d = c;\n } else {\n d = b[i + 8 >> 2] | 0;\n b[d + 12 >> 2] = c;\n b[c + 8 >> 2] = d;\n d = c;\n } } while (0);\n\n do { if (f | 0) {\n c = b[i + 28 >> 2] | 0;\n a = 23620 + (c << 2) | 0;\n\n if ((i | 0) == (b[a >> 2] | 0)) {\n b[a >> 2] = d;\n\n if (!d) {\n b[5830] = g & ~(1 << c);\n break;\n }\n } else {\n v = f + 16 | 0;\n b[((b[v >> 2] | 0) == (i | 0) ? v : f + 20 | 0) >> 2] = d;\n if (!d) { break; }\n }\n\n b[d + 24 >> 2] = f;\n c = b[i + 16 >> 2] | 0;\n\n if (c | 0) {\n b[d + 16 >> 2] = c;\n b[c + 24 >> 2] = d;\n }\n\n c = b[i + 20 >> 2] | 0;\n\n if (c | 0) {\n b[d + 20 >> 2] = c;\n b[c + 24 >> 2] = d;\n }\n } } while (0);\n\n if (j >>> 0 < 16) {\n v = j + k | 0;\n b[i + 4 >> 2] = v | 3;\n v = i + v + 4 | 0;\n b[v >> 2] = b[v >> 2] | 1;\n } else {\n b[i + 4 >> 2] = k | 3;\n b[h + 4 >> 2] = j | 1;\n b[h + j >> 2] = j;\n\n if (l | 0) {\n e = b[5834] | 0;\n c = l >>> 3;\n d = 23356 + (c << 1 << 2) | 0;\n c = 1 << c;\n\n if (!(c & m)) {\n b[5829] = c | m;\n c = d;\n a = d + 8 | 0;\n } else {\n a = d + 8 | 0;\n c = b[a >> 2] | 0;\n }\n\n b[a >> 2] = e;\n b[c + 12 >> 2] = e;\n b[e + 8 >> 2] = c;\n b[e + 12 >> 2] = d;\n }\n\n b[5831] = j;\n b[5834] = h;\n }\n\n v = i + 8 | 0;\n S = w;\n return v | 0;\n } else { m = k; }\n } else { m = k; }\n } else { m = k; }\n } else if (a >>> 0 <= 4294967231) {\n a = a + 11 | 0;\n k = a & -8;\n e = b[5830] | 0;\n\n if (e) {\n f = 0 - k | 0;\n a = a >>> 8;\n if (a) {\n if (k >>> 0 > 16777215) { j = 31; }else {\n m = (a + 1048320 | 0) >>> 16 & 8;\n q = a << m;\n i = (q + 520192 | 0) >>> 16 & 4;\n q = q << i;\n j = (q + 245760 | 0) >>> 16 & 2;\n j = 14 - (i | m | j) + (q << j >>> 15) | 0;\n j = k >>> (j + 7 | 0) & 1 | j << 1;\n }\n } else { j = 0; }\n d = b[23620 + (j << 2) >> 2] | 0;\n\n a: do { if (!d) {\n d = 0;\n a = 0;\n q = 61;\n } else {\n a = 0;\n i = k << ((j | 0) == 31 ? 0 : 25 - (j >>> 1) | 0);\n g = 0;\n\n while (1) {\n h = (b[d + 4 >> 2] & -8) - k | 0;\n if (h >>> 0 < f >>> 0) { if (!h) {\n a = d;\n f = 0;\n q = 65;\n break a;\n } else {\n a = d;\n f = h;\n } }\n q = b[d + 20 >> 2] | 0;\n d = b[d + 16 + (i >>> 31 << 2) >> 2] | 0;\n g = (q | 0) == 0 | (q | 0) == (d | 0) ? g : q;\n\n if (!d) {\n d = g;\n q = 61;\n break;\n } else { i = i << 1; }\n }\n } } while (0);\n\n if ((q | 0) == 61) {\n if ((d | 0) == 0 & (a | 0) == 0) {\n a = 2 << j;\n a = (a | 0 - a) & e;\n\n if (!a) {\n m = k;\n break;\n }\n\n m = (a & 0 - a) + -1 | 0;\n h = m >>> 12 & 16;\n m = m >>> h;\n g = m >>> 5 & 8;\n m = m >>> g;\n i = m >>> 2 & 4;\n m = m >>> i;\n j = m >>> 1 & 2;\n m = m >>> j;\n d = m >>> 1 & 1;\n a = 0;\n d = b[23620 + ((g | h | i | j | d) + (m >>> d) << 2) >> 2] | 0;\n }\n\n if (!d) {\n i = a;\n h = f;\n } else { q = 65; }\n }\n\n if ((q | 0) == 65) {\n g = d;\n\n while (1) {\n m = (b[g + 4 >> 2] & -8) - k | 0;\n d = m >>> 0 < f >>> 0;\n f = d ? m : f;\n a = d ? g : a;\n d = b[g + 16 >> 2] | 0;\n if (!d) { d = b[g + 20 >> 2] | 0; }\n\n if (!d) {\n i = a;\n h = f;\n break;\n } else { g = d; }\n }\n }\n\n if (((i | 0) != 0 ? h >>> 0 < ((b[5831] | 0) - k | 0) >>> 0 : 0) ? (l = i + k | 0, l >>> 0 > i >>> 0) : 0) {\n g = b[i + 24 >> 2] | 0;\n c = b[i + 12 >> 2] | 0;\n\n do { if ((c | 0) == (i | 0)) {\n a = i + 20 | 0;\n c = b[a >> 2] | 0;\n\n if (!c) {\n a = i + 16 | 0;\n c = b[a >> 2] | 0;\n\n if (!c) {\n c = 0;\n break;\n }\n }\n\n while (1) {\n f = c + 20 | 0;\n d = b[f >> 2] | 0;\n\n if (!d) {\n f = c + 16 | 0;\n d = b[f >> 2] | 0;\n if (!d) { break; }else {\n c = d;\n a = f;\n }\n } else {\n c = d;\n a = f;\n }\n }\n\n b[a >> 2] = 0;\n } else {\n v = b[i + 8 >> 2] | 0;\n b[v + 12 >> 2] = c;\n b[c + 8 >> 2] = v;\n } } while (0);\n\n do { if (g) {\n a = b[i + 28 >> 2] | 0;\n d = 23620 + (a << 2) | 0;\n\n if ((i | 0) == (b[d >> 2] | 0)) {\n b[d >> 2] = c;\n\n if (!c) {\n e = e & ~(1 << a);\n b[5830] = e;\n break;\n }\n } else {\n v = g + 16 | 0;\n b[((b[v >> 2] | 0) == (i | 0) ? v : g + 20 | 0) >> 2] = c;\n if (!c) { break; }\n }\n\n b[c + 24 >> 2] = g;\n a = b[i + 16 >> 2] | 0;\n\n if (a | 0) {\n b[c + 16 >> 2] = a;\n b[a + 24 >> 2] = c;\n }\n\n a = b[i + 20 >> 2] | 0;\n\n if (a) {\n b[c + 20 >> 2] = a;\n b[a + 24 >> 2] = c;\n }\n } } while (0);\n\n b: do { if (h >>> 0 < 16) {\n v = h + k | 0;\n b[i + 4 >> 2] = v | 3;\n v = i + v + 4 | 0;\n b[v >> 2] = b[v >> 2] | 1;\n } else {\n b[i + 4 >> 2] = k | 3;\n b[l + 4 >> 2] = h | 1;\n b[l + h >> 2] = h;\n c = h >>> 3;\n\n if (h >>> 0 < 256) {\n d = 23356 + (c << 1 << 2) | 0;\n a = b[5829] | 0;\n c = 1 << c;\n\n if (!(a & c)) {\n b[5829] = a | c;\n c = d;\n a = d + 8 | 0;\n } else {\n a = d + 8 | 0;\n c = b[a >> 2] | 0;\n }\n\n b[a >> 2] = l;\n b[c + 12 >> 2] = l;\n b[l + 8 >> 2] = c;\n b[l + 12 >> 2] = d;\n break;\n }\n\n c = h >>> 8;\n if (c) {\n if (h >>> 0 > 16777215) { d = 31; }else {\n u = (c + 1048320 | 0) >>> 16 & 8;\n v = c << u;\n t = (v + 520192 | 0) >>> 16 & 4;\n v = v << t;\n d = (v + 245760 | 0) >>> 16 & 2;\n d = 14 - (t | u | d) + (v << d >>> 15) | 0;\n d = h >>> (d + 7 | 0) & 1 | d << 1;\n }\n } else { d = 0; }\n c = 23620 + (d << 2) | 0;\n b[l + 28 >> 2] = d;\n a = l + 16 | 0;\n b[a + 4 >> 2] = 0;\n b[a >> 2] = 0;\n a = 1 << d;\n\n if (!(e & a)) {\n b[5830] = e | a;\n b[c >> 2] = l;\n b[l + 24 >> 2] = c;\n b[l + 12 >> 2] = l;\n b[l + 8 >> 2] = l;\n break;\n }\n\n c = b[c >> 2] | 0;\n\n c: do { if ((b[c + 4 >> 2] & -8 | 0) != (h | 0)) {\n e = h << ((d | 0) == 31 ? 0 : 25 - (d >>> 1) | 0);\n\n while (1) {\n d = c + 16 + (e >>> 31 << 2) | 0;\n a = b[d >> 2] | 0;\n if (!a) { break; }\n\n if ((b[a + 4 >> 2] & -8 | 0) == (h | 0)) {\n c = a;\n break c;\n } else {\n e = e << 1;\n c = a;\n }\n }\n\n b[d >> 2] = l;\n b[l + 24 >> 2] = c;\n b[l + 12 >> 2] = l;\n b[l + 8 >> 2] = l;\n break b;\n } } while (0);\n\n u = c + 8 | 0;\n v = b[u >> 2] | 0;\n b[v + 12 >> 2] = l;\n b[u >> 2] = l;\n b[l + 8 >> 2] = v;\n b[l + 12 >> 2] = c;\n b[l + 24 >> 2] = 0;\n } } while (0);\n\n v = i + 8 | 0;\n S = w;\n return v | 0;\n } else { m = k; }\n } else { m = k; }\n } else { m = -1; } } while (0);\n\n d = b[5831] | 0;\n\n if (d >>> 0 >= m >>> 0) {\n c = d - m | 0;\n a = b[5834] | 0;\n\n if (c >>> 0 > 15) {\n v = a + m | 0;\n b[5834] = v;\n b[5831] = c;\n b[v + 4 >> 2] = c | 1;\n b[a + d >> 2] = c;\n b[a + 4 >> 2] = m | 3;\n } else {\n b[5831] = 0;\n b[5834] = 0;\n b[a + 4 >> 2] = d | 3;\n v = a + d + 4 | 0;\n b[v >> 2] = b[v >> 2] | 1;\n }\n\n v = a + 8 | 0;\n S = w;\n return v | 0;\n }\n\n h = b[5832] | 0;\n\n if (h >>> 0 > m >>> 0) {\n t = h - m | 0;\n b[5832] = t;\n v = b[5835] | 0;\n u = v + m | 0;\n b[5835] = u;\n b[u + 4 >> 2] = t | 1;\n b[v + 4 >> 2] = m | 3;\n v = v + 8 | 0;\n S = w;\n return v | 0;\n }\n\n if (!(b[5947] | 0)) {\n b[5949] = 4096;\n b[5948] = 4096;\n b[5950] = -1;\n b[5951] = -1;\n b[5952] = 0;\n b[5940] = 0;\n b[5947] = n & -16 ^ 1431655768;\n a = 4096;\n } else { a = b[5949] | 0; }\n\n i = m + 48 | 0;\n j = m + 47 | 0;\n g = a + j | 0;\n f = 0 - a | 0;\n k = g & f;\n\n if (k >>> 0 <= m >>> 0) {\n v = 0;\n S = w;\n return v | 0;\n }\n\n a = b[5939] | 0;\n\n if (a | 0 ? (l = b[5937] | 0, n = l + k | 0, n >>> 0 <= l >>> 0 | n >>> 0 > a >>> 0) : 0) {\n v = 0;\n S = w;\n return v | 0;\n }\n\n d: do { if (!(b[5940] & 4)) {\n d = b[5835] | 0;\n\n e: do { if (d) {\n e = 23764;\n\n while (1) {\n n = b[e >> 2] | 0;\n if (n >>> 0 <= d >>> 0 ? (n + (b[e + 4 >> 2] | 0) | 0) >>> 0 > d >>> 0 : 0) { break; }\n a = b[e + 8 >> 2] | 0;\n\n if (!a) {\n q = 128;\n break e;\n } else { e = a; }\n }\n\n c = g - h & f;\n\n if (c >>> 0 < 2147483647) {\n a = jd(c | 0) | 0;\n\n if ((a | 0) == ((b[e >> 2] | 0) + (b[e + 4 >> 2] | 0) | 0)) {\n if ((a | 0) != (-1 | 0)) {\n h = c;\n g = a;\n q = 145;\n break d;\n }\n } else {\n e = a;\n q = 136;\n }\n } else { c = 0; }\n } else { q = 128; } } while (0);\n\n do { if ((q | 0) == 128) {\n d = jd(0) | 0;\n\n if ((d | 0) != (-1 | 0) ? (c = d, o = b[5948] | 0, p = o + -1 | 0, c = ((p & c | 0) == 0 ? 0 : (p + c & 0 - o) - c | 0) + k | 0, o = b[5937] | 0, p = c + o | 0, c >>> 0 > m >>> 0 & c >>> 0 < 2147483647) : 0) {\n n = b[5939] | 0;\n\n if (n | 0 ? p >>> 0 <= o >>> 0 | p >>> 0 > n >>> 0 : 0) {\n c = 0;\n break;\n }\n\n a = jd(c | 0) | 0;\n\n if ((a | 0) == (d | 0)) {\n h = c;\n g = d;\n q = 145;\n break d;\n } else {\n e = a;\n q = 136;\n }\n } else { c = 0; }\n } } while (0);\n\n do { if ((q | 0) == 136) {\n d = 0 - c | 0;\n if (!(i >>> 0 > c >>> 0 & (c >>> 0 < 2147483647 & (e | 0) != (-1 | 0)))) { if ((e | 0) == (-1 | 0)) {\n c = 0;\n break;\n } else {\n h = c;\n g = e;\n q = 145;\n break d;\n } }\n a = b[5949] | 0;\n a = j - c + a & 0 - a;\n\n if (a >>> 0 >= 2147483647) {\n h = c;\n g = e;\n q = 145;\n break d;\n }\n\n if ((jd(a | 0) | 0) == (-1 | 0)) {\n jd(d | 0) | 0;\n c = 0;\n break;\n } else {\n h = a + c | 0;\n g = e;\n q = 145;\n break d;\n }\n } } while (0);\n\n b[5940] = b[5940] | 4;\n q = 143;\n } else {\n c = 0;\n q = 143;\n } } while (0);\n\n if (((q | 0) == 143 ? k >>> 0 < 2147483647 : 0) ? (t = jd(k | 0) | 0, p = jd(0) | 0, r = p - t | 0, s = r >>> 0 > (m + 40 | 0) >>> 0, !((t | 0) == (-1 | 0) | s ^ 1 | t >>> 0 < p >>> 0 & ((t | 0) != (-1 | 0) & (p | 0) != (-1 | 0)) ^ 1)) : 0) {\n h = s ? r : c;\n g = t;\n q = 145;\n }\n\n if ((q | 0) == 145) {\n c = (b[5937] | 0) + h | 0;\n b[5937] = c;\n if (c >>> 0 > (b[5938] | 0) >>> 0) { b[5938] = c; }\n j = b[5835] | 0;\n\n f: do { if (j) {\n c = 23764;\n\n while (1) {\n a = b[c >> 2] | 0;\n d = b[c + 4 >> 2] | 0;\n\n if ((g | 0) == (a + d | 0)) {\n q = 154;\n break;\n }\n\n e = b[c + 8 >> 2] | 0;\n if (!e) { break; }else { c = e; }\n }\n\n if (((q | 0) == 154 ? (u = c + 4 | 0, (b[c + 12 >> 2] & 8 | 0) == 0) : 0) ? g >>> 0 > j >>> 0 & a >>> 0 <= j >>> 0 : 0) {\n b[u >> 2] = d + h;\n v = (b[5832] | 0) + h | 0;\n t = j + 8 | 0;\n t = (t & 7 | 0) == 0 ? 0 : 0 - t & 7;\n u = j + t | 0;\n t = v - t | 0;\n b[5835] = u;\n b[5832] = t;\n b[u + 4 >> 2] = t | 1;\n b[j + v + 4 >> 2] = 40;\n b[5836] = b[5951];\n break;\n }\n\n if (g >>> 0 < (b[5833] | 0) >>> 0) { b[5833] = g; }\n d = g + h | 0;\n c = 23764;\n\n while (1) {\n if ((b[c >> 2] | 0) == (d | 0)) {\n q = 162;\n break;\n }\n\n a = b[c + 8 >> 2] | 0;\n if (!a) { break; }else { c = a; }\n }\n\n if ((q | 0) == 162 ? (b[c + 12 >> 2] & 8 | 0) == 0 : 0) {\n b[c >> 2] = g;\n l = c + 4 | 0;\n b[l >> 2] = (b[l >> 2] | 0) + h;\n l = g + 8 | 0;\n l = g + ((l & 7 | 0) == 0 ? 0 : 0 - l & 7) | 0;\n c = d + 8 | 0;\n c = d + ((c & 7 | 0) == 0 ? 0 : 0 - c & 7) | 0;\n k = l + m | 0;\n i = c - l - m | 0;\n b[l + 4 >> 2] = m | 3;\n\n g: do { if ((j | 0) == (c | 0)) {\n v = (b[5832] | 0) + i | 0;\n b[5832] = v;\n b[5835] = k;\n b[k + 4 >> 2] = v | 1;\n } else {\n if ((b[5834] | 0) == (c | 0)) {\n v = (b[5831] | 0) + i | 0;\n b[5831] = v;\n b[5834] = k;\n b[k + 4 >> 2] = v | 1;\n b[k + v >> 2] = v;\n break;\n }\n\n a = b[c + 4 >> 2] | 0;\n\n if ((a & 3 | 0) == 1) {\n h = a & -8;\n e = a >>> 3;\n\n h: do { if (a >>> 0 < 256) {\n a = b[c + 8 >> 2] | 0;\n d = b[c + 12 >> 2] | 0;\n\n if ((d | 0) == (a | 0)) {\n b[5829] = b[5829] & ~(1 << e);\n break;\n } else {\n b[a + 12 >> 2] = d;\n b[d + 8 >> 2] = a;\n break;\n }\n } else {\n g = b[c + 24 >> 2] | 0;\n a = b[c + 12 >> 2] | 0;\n\n do { if ((a | 0) == (c | 0)) {\n d = c + 16 | 0;\n e = d + 4 | 0;\n a = b[e >> 2] | 0;\n\n if (!a) {\n a = b[d >> 2] | 0;\n\n if (!a) {\n a = 0;\n break;\n }\n } else { d = e; }\n\n while (1) {\n f = a + 20 | 0;\n e = b[f >> 2] | 0;\n\n if (!e) {\n f = a + 16 | 0;\n e = b[f >> 2] | 0;\n if (!e) { break; }else {\n a = e;\n d = f;\n }\n } else {\n a = e;\n d = f;\n }\n }\n\n b[d >> 2] = 0;\n } else {\n v = b[c + 8 >> 2] | 0;\n b[v + 12 >> 2] = a;\n b[a + 8 >> 2] = v;\n } } while (0);\n\n if (!g) { break; }\n d = b[c + 28 >> 2] | 0;\n e = 23620 + (d << 2) | 0;\n\n do { if ((b[e >> 2] | 0) != (c | 0)) {\n v = g + 16 | 0;\n b[((b[v >> 2] | 0) == (c | 0) ? v : g + 20 | 0) >> 2] = a;\n if (!a) { break h; }\n } else {\n b[e >> 2] = a;\n if (a | 0) { break; }\n b[5830] = b[5830] & ~(1 << d);\n break h;\n } } while (0);\n\n b[a + 24 >> 2] = g;\n d = c + 16 | 0;\n e = b[d >> 2] | 0;\n\n if (e | 0) {\n b[a + 16 >> 2] = e;\n b[e + 24 >> 2] = a;\n }\n\n d = b[d + 4 >> 2] | 0;\n if (!d) { break; }\n b[a + 20 >> 2] = d;\n b[d + 24 >> 2] = a;\n } } while (0);\n\n c = c + h | 0;\n f = h + i | 0;\n } else { f = i; }\n\n c = c + 4 | 0;\n b[c >> 2] = b[c >> 2] & -2;\n b[k + 4 >> 2] = f | 1;\n b[k + f >> 2] = f;\n c = f >>> 3;\n\n if (f >>> 0 < 256) {\n d = 23356 + (c << 1 << 2) | 0;\n a = b[5829] | 0;\n c = 1 << c;\n\n if (!(a & c)) {\n b[5829] = a | c;\n c = d;\n a = d + 8 | 0;\n } else {\n a = d + 8 | 0;\n c = b[a >> 2] | 0;\n }\n\n b[a >> 2] = k;\n b[c + 12 >> 2] = k;\n b[k + 8 >> 2] = c;\n b[k + 12 >> 2] = d;\n break;\n }\n\n c = f >>> 8;\n\n do { if (!c) { e = 0; }else {\n if (f >>> 0 > 16777215) {\n e = 31;\n break;\n }\n\n u = (c + 1048320 | 0) >>> 16 & 8;\n v = c << u;\n t = (v + 520192 | 0) >>> 16 & 4;\n v = v << t;\n e = (v + 245760 | 0) >>> 16 & 2;\n e = 14 - (t | u | e) + (v << e >>> 15) | 0;\n e = f >>> (e + 7 | 0) & 1 | e << 1;\n } } while (0);\n\n c = 23620 + (e << 2) | 0;\n b[k + 28 >> 2] = e;\n a = k + 16 | 0;\n b[a + 4 >> 2] = 0;\n b[a >> 2] = 0;\n a = b[5830] | 0;\n d = 1 << e;\n\n if (!(a & d)) {\n b[5830] = a | d;\n b[c >> 2] = k;\n b[k + 24 >> 2] = c;\n b[k + 12 >> 2] = k;\n b[k + 8 >> 2] = k;\n break;\n }\n\n c = b[c >> 2] | 0;\n\n i: do { if ((b[c + 4 >> 2] & -8 | 0) != (f | 0)) {\n e = f << ((e | 0) == 31 ? 0 : 25 - (e >>> 1) | 0);\n\n while (1) {\n d = c + 16 + (e >>> 31 << 2) | 0;\n a = b[d >> 2] | 0;\n if (!a) { break; }\n\n if ((b[a + 4 >> 2] & -8 | 0) == (f | 0)) {\n c = a;\n break i;\n } else {\n e = e << 1;\n c = a;\n }\n }\n\n b[d >> 2] = k;\n b[k + 24 >> 2] = c;\n b[k + 12 >> 2] = k;\n b[k + 8 >> 2] = k;\n break g;\n } } while (0);\n\n u = c + 8 | 0;\n v = b[u >> 2] | 0;\n b[v + 12 >> 2] = k;\n b[u >> 2] = k;\n b[k + 8 >> 2] = v;\n b[k + 12 >> 2] = c;\n b[k + 24 >> 2] = 0;\n } } while (0);\n\n v = l + 8 | 0;\n S = w;\n return v | 0;\n }\n\n c = 23764;\n\n while (1) {\n a = b[c >> 2] | 0;\n if (a >>> 0 <= j >>> 0 ? (v = a + (b[c + 4 >> 2] | 0) | 0, v >>> 0 > j >>> 0) : 0) { break; }\n c = b[c + 8 >> 2] | 0;\n }\n\n f = v + -47 | 0;\n a = f + 8 | 0;\n a = f + ((a & 7 | 0) == 0 ? 0 : 0 - a & 7) | 0;\n f = j + 16 | 0;\n a = a >>> 0 < f >>> 0 ? j : a;\n c = a + 8 | 0;\n d = h + -40 | 0;\n t = g + 8 | 0;\n t = (t & 7 | 0) == 0 ? 0 : 0 - t & 7;\n u = g + t | 0;\n t = d - t | 0;\n b[5835] = u;\n b[5832] = t;\n b[u + 4 >> 2] = t | 1;\n b[g + d + 4 >> 2] = 40;\n b[5836] = b[5951];\n d = a + 4 | 0;\n b[d >> 2] = 27;\n b[c >> 2] = b[5941];\n b[c + 4 >> 2] = b[5942];\n b[c + 8 >> 2] = b[5943];\n b[c + 12 >> 2] = b[5944];\n b[5941] = g;\n b[5942] = h;\n b[5944] = 0;\n b[5943] = c;\n c = a + 24 | 0;\n\n do {\n u = c;\n c = c + 4 | 0;\n b[c >> 2] = 7;\n } while ((u + 8 | 0) >>> 0 < v >>> 0);\n\n if ((a | 0) != (j | 0)) {\n g = a - j | 0;\n b[d >> 2] = b[d >> 2] & -2;\n b[j + 4 >> 2] = g | 1;\n b[a >> 2] = g;\n c = g >>> 3;\n\n if (g >>> 0 < 256) {\n d = 23356 + (c << 1 << 2) | 0;\n a = b[5829] | 0;\n c = 1 << c;\n\n if (!(a & c)) {\n b[5829] = a | c;\n c = d;\n a = d + 8 | 0;\n } else {\n a = d + 8 | 0;\n c = b[a >> 2] | 0;\n }\n\n b[a >> 2] = j;\n b[c + 12 >> 2] = j;\n b[j + 8 >> 2] = c;\n b[j + 12 >> 2] = d;\n break;\n }\n\n c = g >>> 8;\n if (c) {\n if (g >>> 0 > 16777215) { e = 31; }else {\n u = (c + 1048320 | 0) >>> 16 & 8;\n v = c << u;\n t = (v + 520192 | 0) >>> 16 & 4;\n v = v << t;\n e = (v + 245760 | 0) >>> 16 & 2;\n e = 14 - (t | u | e) + (v << e >>> 15) | 0;\n e = g >>> (e + 7 | 0) & 1 | e << 1;\n }\n } else { e = 0; }\n d = 23620 + (e << 2) | 0;\n b[j + 28 >> 2] = e;\n b[j + 20 >> 2] = 0;\n b[f >> 2] = 0;\n c = b[5830] | 0;\n a = 1 << e;\n\n if (!(c & a)) {\n b[5830] = c | a;\n b[d >> 2] = j;\n b[j + 24 >> 2] = d;\n b[j + 12 >> 2] = j;\n b[j + 8 >> 2] = j;\n break;\n }\n\n c = b[d >> 2] | 0;\n\n j: do { if ((b[c + 4 >> 2] & -8 | 0) != (g | 0)) {\n e = g << ((e | 0) == 31 ? 0 : 25 - (e >>> 1) | 0);\n\n while (1) {\n d = c + 16 + (e >>> 31 << 2) | 0;\n a = b[d >> 2] | 0;\n if (!a) { break; }\n\n if ((b[a + 4 >> 2] & -8 | 0) == (g | 0)) {\n c = a;\n break j;\n } else {\n e = e << 1;\n c = a;\n }\n }\n\n b[d >> 2] = j;\n b[j + 24 >> 2] = c;\n b[j + 12 >> 2] = j;\n b[j + 8 >> 2] = j;\n break f;\n } } while (0);\n\n u = c + 8 | 0;\n v = b[u >> 2] | 0;\n b[v + 12 >> 2] = j;\n b[u >> 2] = j;\n b[j + 8 >> 2] = v;\n b[j + 12 >> 2] = c;\n b[j + 24 >> 2] = 0;\n }\n } else {\n v = b[5833] | 0;\n if ((v | 0) == 0 | g >>> 0 < v >>> 0) { b[5833] = g; }\n b[5941] = g;\n b[5942] = h;\n b[5944] = 0;\n b[5838] = b[5947];\n b[5837] = -1;\n b[5842] = 23356;\n b[5841] = 23356;\n b[5844] = 23364;\n b[5843] = 23364;\n b[5846] = 23372;\n b[5845] = 23372;\n b[5848] = 23380;\n b[5847] = 23380;\n b[5850] = 23388;\n b[5849] = 23388;\n b[5852] = 23396;\n b[5851] = 23396;\n b[5854] = 23404;\n b[5853] = 23404;\n b[5856] = 23412;\n b[5855] = 23412;\n b[5858] = 23420;\n b[5857] = 23420;\n b[5860] = 23428;\n b[5859] = 23428;\n b[5862] = 23436;\n b[5861] = 23436;\n b[5864] = 23444;\n b[5863] = 23444;\n b[5866] = 23452;\n b[5865] = 23452;\n b[5868] = 23460;\n b[5867] = 23460;\n b[5870] = 23468;\n b[5869] = 23468;\n b[5872] = 23476;\n b[5871] = 23476;\n b[5874] = 23484;\n b[5873] = 23484;\n b[5876] = 23492;\n b[5875] = 23492;\n b[5878] = 23500;\n b[5877] = 23500;\n b[5880] = 23508;\n b[5879] = 23508;\n b[5882] = 23516;\n b[5881] = 23516;\n b[5884] = 23524;\n b[5883] = 23524;\n b[5886] = 23532;\n b[5885] = 23532;\n b[5888] = 23540;\n b[5887] = 23540;\n b[5890] = 23548;\n b[5889] = 23548;\n b[5892] = 23556;\n b[5891] = 23556;\n b[5894] = 23564;\n b[5893] = 23564;\n b[5896] = 23572;\n b[5895] = 23572;\n b[5898] = 23580;\n b[5897] = 23580;\n b[5900] = 23588;\n b[5899] = 23588;\n b[5902] = 23596;\n b[5901] = 23596;\n b[5904] = 23604;\n b[5903] = 23604;\n v = h + -40 | 0;\n t = g + 8 | 0;\n t = (t & 7 | 0) == 0 ? 0 : 0 - t & 7;\n u = g + t | 0;\n t = v - t | 0;\n b[5835] = u;\n b[5832] = t;\n b[u + 4 >> 2] = t | 1;\n b[g + v + 4 >> 2] = 40;\n b[5836] = b[5951];\n } } while (0);\n\n c = b[5832] | 0;\n\n if (c >>> 0 > m >>> 0) {\n t = c - m | 0;\n b[5832] = t;\n v = b[5835] | 0;\n u = v + m | 0;\n b[5835] = u;\n b[u + 4 >> 2] = t | 1;\n b[v + 4 >> 2] = m | 3;\n v = v + 8 | 0;\n S = w;\n return v | 0;\n }\n }\n\n v = Tc() | 0;\n b[v >> 2] = 12;\n v = 0;\n S = w;\n return v | 0;\n }\n\n function Xc(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0,\n f = 0,\n g = 0,\n h = 0,\n i = 0,\n j = 0;\n if (!a) { return; }\n d = a + -8 | 0;\n f = b[5833] | 0;\n a = b[a + -4 >> 2] | 0;\n c = a & -8;\n j = d + c | 0;\n\n do { if (!(a & 1)) {\n e = b[d >> 2] | 0;\n if (!(a & 3)) { return; }\n h = d + (0 - e) | 0;\n g = e + c | 0;\n if (h >>> 0 < f >>> 0) { return; }\n\n if ((b[5834] | 0) == (h | 0)) {\n a = j + 4 | 0;\n c = b[a >> 2] | 0;\n\n if ((c & 3 | 0) != 3) {\n i = h;\n c = g;\n break;\n }\n\n b[5831] = g;\n b[a >> 2] = c & -2;\n b[h + 4 >> 2] = g | 1;\n b[h + g >> 2] = g;\n return;\n }\n\n d = e >>> 3;\n\n if (e >>> 0 < 256) {\n a = b[h + 8 >> 2] | 0;\n c = b[h + 12 >> 2] | 0;\n\n if ((c | 0) == (a | 0)) {\n b[5829] = b[5829] & ~(1 << d);\n i = h;\n c = g;\n break;\n } else {\n b[a + 12 >> 2] = c;\n b[c + 8 >> 2] = a;\n i = h;\n c = g;\n break;\n }\n }\n\n f = b[h + 24 >> 2] | 0;\n a = b[h + 12 >> 2] | 0;\n\n do { if ((a | 0) == (h | 0)) {\n c = h + 16 | 0;\n d = c + 4 | 0;\n a = b[d >> 2] | 0;\n\n if (!a) {\n a = b[c >> 2] | 0;\n\n if (!a) {\n a = 0;\n break;\n }\n } else { c = d; }\n\n while (1) {\n e = a + 20 | 0;\n d = b[e >> 2] | 0;\n\n if (!d) {\n e = a + 16 | 0;\n d = b[e >> 2] | 0;\n if (!d) { break; }else {\n a = d;\n c = e;\n }\n } else {\n a = d;\n c = e;\n }\n }\n\n b[c >> 2] = 0;\n } else {\n i = b[h + 8 >> 2] | 0;\n b[i + 12 >> 2] = a;\n b[a + 8 >> 2] = i;\n } } while (0);\n\n if (f) {\n c = b[h + 28 >> 2] | 0;\n d = 23620 + (c << 2) | 0;\n\n if ((b[d >> 2] | 0) == (h | 0)) {\n b[d >> 2] = a;\n\n if (!a) {\n b[5830] = b[5830] & ~(1 << c);\n i = h;\n c = g;\n break;\n }\n } else {\n i = f + 16 | 0;\n b[((b[i >> 2] | 0) == (h | 0) ? i : f + 20 | 0) >> 2] = a;\n\n if (!a) {\n i = h;\n c = g;\n break;\n }\n }\n\n b[a + 24 >> 2] = f;\n c = h + 16 | 0;\n d = b[c >> 2] | 0;\n\n if (d | 0) {\n b[a + 16 >> 2] = d;\n b[d + 24 >> 2] = a;\n }\n\n c = b[c + 4 >> 2] | 0;\n\n if (c) {\n b[a + 20 >> 2] = c;\n b[c + 24 >> 2] = a;\n i = h;\n c = g;\n } else {\n i = h;\n c = g;\n }\n } else {\n i = h;\n c = g;\n }\n } else {\n i = d;\n h = d;\n } } while (0);\n\n if (h >>> 0 >= j >>> 0) { return; }\n a = j + 4 | 0;\n e = b[a >> 2] | 0;\n if (!(e & 1)) { return; }\n\n if (!(e & 2)) {\n if ((b[5835] | 0) == (j | 0)) {\n j = (b[5832] | 0) + c | 0;\n b[5832] = j;\n b[5835] = i;\n b[i + 4 >> 2] = j | 1;\n if ((i | 0) != (b[5834] | 0)) { return; }\n b[5834] = 0;\n b[5831] = 0;\n return;\n }\n\n if ((b[5834] | 0) == (j | 0)) {\n j = (b[5831] | 0) + c | 0;\n b[5831] = j;\n b[5834] = h;\n b[i + 4 >> 2] = j | 1;\n b[h + j >> 2] = j;\n return;\n }\n\n f = (e & -8) + c | 0;\n d = e >>> 3;\n\n do { if (e >>> 0 < 256) {\n c = b[j + 8 >> 2] | 0;\n a = b[j + 12 >> 2] | 0;\n\n if ((a | 0) == (c | 0)) {\n b[5829] = b[5829] & ~(1 << d);\n break;\n } else {\n b[c + 12 >> 2] = a;\n b[a + 8 >> 2] = c;\n break;\n }\n } else {\n g = b[j + 24 >> 2] | 0;\n a = b[j + 12 >> 2] | 0;\n\n do { if ((a | 0) == (j | 0)) {\n c = j + 16 | 0;\n d = c + 4 | 0;\n a = b[d >> 2] | 0;\n\n if (!a) {\n a = b[c >> 2] | 0;\n\n if (!a) {\n d = 0;\n break;\n }\n } else { c = d; }\n\n while (1) {\n e = a + 20 | 0;\n d = b[e >> 2] | 0;\n\n if (!d) {\n e = a + 16 | 0;\n d = b[e >> 2] | 0;\n if (!d) { break; }else {\n a = d;\n c = e;\n }\n } else {\n a = d;\n c = e;\n }\n }\n\n b[c >> 2] = 0;\n d = a;\n } else {\n d = b[j + 8 >> 2] | 0;\n b[d + 12 >> 2] = a;\n b[a + 8 >> 2] = d;\n d = a;\n } } while (0);\n\n if (g | 0) {\n a = b[j + 28 >> 2] | 0;\n c = 23620 + (a << 2) | 0;\n\n if ((b[c >> 2] | 0) == (j | 0)) {\n b[c >> 2] = d;\n\n if (!d) {\n b[5830] = b[5830] & ~(1 << a);\n break;\n }\n } else {\n e = g + 16 | 0;\n b[((b[e >> 2] | 0) == (j | 0) ? e : g + 20 | 0) >> 2] = d;\n if (!d) { break; }\n }\n\n b[d + 24 >> 2] = g;\n a = j + 16 | 0;\n c = b[a >> 2] | 0;\n\n if (c | 0) {\n b[d + 16 >> 2] = c;\n b[c + 24 >> 2] = d;\n }\n\n a = b[a + 4 >> 2] | 0;\n\n if (a | 0) {\n b[d + 20 >> 2] = a;\n b[a + 24 >> 2] = d;\n }\n }\n } } while (0);\n\n b[i + 4 >> 2] = f | 1;\n b[h + f >> 2] = f;\n\n if ((i | 0) == (b[5834] | 0)) {\n b[5831] = f;\n return;\n }\n } else {\n b[a >> 2] = e & -2;\n b[i + 4 >> 2] = c | 1;\n b[h + c >> 2] = c;\n f = c;\n }\n\n a = f >>> 3;\n\n if (f >>> 0 < 256) {\n d = 23356 + (a << 1 << 2) | 0;\n c = b[5829] | 0;\n a = 1 << a;\n\n if (!(c & a)) {\n b[5829] = c | a;\n a = d;\n c = d + 8 | 0;\n } else {\n c = d + 8 | 0;\n a = b[c >> 2] | 0;\n }\n\n b[c >> 2] = i;\n b[a + 12 >> 2] = i;\n b[i + 8 >> 2] = a;\n b[i + 12 >> 2] = d;\n return;\n }\n\n a = f >>> 8;\n if (a) {\n if (f >>> 0 > 16777215) { e = 31; }else {\n h = (a + 1048320 | 0) >>> 16 & 8;\n j = a << h;\n g = (j + 520192 | 0) >>> 16 & 4;\n j = j << g;\n e = (j + 245760 | 0) >>> 16 & 2;\n e = 14 - (g | h | e) + (j << e >>> 15) | 0;\n e = f >>> (e + 7 | 0) & 1 | e << 1;\n }\n } else { e = 0; }\n a = 23620 + (e << 2) | 0;\n b[i + 28 >> 2] = e;\n b[i + 20 >> 2] = 0;\n b[i + 16 >> 2] = 0;\n c = b[5830] | 0;\n d = 1 << e;\n\n a: do { if (!(c & d)) {\n b[5830] = c | d;\n b[a >> 2] = i;\n b[i + 24 >> 2] = a;\n b[i + 12 >> 2] = i;\n b[i + 8 >> 2] = i;\n } else {\n a = b[a >> 2] | 0;\n\n b: do { if ((b[a + 4 >> 2] & -8 | 0) != (f | 0)) {\n e = f << ((e | 0) == 31 ? 0 : 25 - (e >>> 1) | 0);\n\n while (1) {\n d = a + 16 + (e >>> 31 << 2) | 0;\n c = b[d >> 2] | 0;\n if (!c) { break; }\n\n if ((b[c + 4 >> 2] & -8 | 0) == (f | 0)) {\n a = c;\n break b;\n } else {\n e = e << 1;\n a = c;\n }\n }\n\n b[d >> 2] = i;\n b[i + 24 >> 2] = a;\n b[i + 12 >> 2] = i;\n b[i + 8 >> 2] = i;\n break a;\n } } while (0);\n\n h = a + 8 | 0;\n j = b[h >> 2] | 0;\n b[j + 12 >> 2] = i;\n b[h >> 2] = i;\n b[i + 8 >> 2] = j;\n b[i + 12 >> 2] = a;\n b[i + 24 >> 2] = 0;\n } } while (0);\n\n j = (b[5837] | 0) + -1 | 0;\n b[5837] = j;\n if (j | 0) { return; }\n a = 23772;\n\n while (1) {\n a = b[a >> 2] | 0;\n if (!a) { break; }else { a = a + 8 | 0; }\n }\n\n b[5837] = -1;\n return;\n }\n\n function Yc(a, c) {\n a = a | 0;\n c = c | 0;\n var d = 0;\n\n if (a) {\n d = B(c, a) | 0;\n if ((c | a) >>> 0 > 65535) { d = ((d >>> 0) / (a >>> 0) | 0 | 0) == (c | 0) ? d : -1; }\n } else { d = 0; }\n\n a = Wc(d) | 0;\n if (!a) { return a | 0; }\n if (!(b[a + -4 >> 2] & 3)) { return a | 0; }\n hd(a | 0, 0, d | 0) | 0;\n return a | 0;\n }\n\n function Zc(a, b, c, d) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n d = d | 0;\n c = a + c >>> 0;\n return (F(b + d + (c >>> 0 < a >>> 0 | 0) >>> 0 | 0), c | 0) | 0;\n }\n\n function _c(a, b, c, d) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n d = d | 0;\n d = b - d - (c >>> 0 > a >>> 0 | 0) >>> 0;\n return (F(d | 0), a - c >>> 0 | 0) | 0;\n }\n\n function $c(a) {\n a = a | 0;\n return (a ? 31 - (D(a ^ a - 1) | 0) | 0 : 32) | 0;\n }\n\n function ad(a, c, d, e, f) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n f = f | 0;\n var g = 0,\n h = 0,\n i = 0,\n j = 0,\n k = 0,\n l = 0,\n m = 0,\n n = 0,\n o = 0,\n p = 0;\n l = a;\n j = c;\n k = j;\n h = d;\n n = e;\n i = n;\n\n if (!k) {\n g = (f | 0) != 0;\n\n if (!i) {\n if (g) {\n b[f >> 2] = (l >>> 0) % (h >>> 0);\n b[f + 4 >> 2] = 0;\n }\n\n n = 0;\n f = (l >>> 0) / (h >>> 0) >>> 0;\n return (F(n | 0), f) | 0;\n } else {\n if (!g) {\n n = 0;\n f = 0;\n return (F(n | 0), f) | 0;\n }\n\n b[f >> 2] = a | 0;\n b[f + 4 >> 2] = c & 0;\n n = 0;\n f = 0;\n return (F(n | 0), f) | 0;\n }\n }\n\n g = (i | 0) == 0;\n\n do { if (h) {\n if (!g) {\n g = (D(i | 0) | 0) - (D(k | 0) | 0) | 0;\n\n if (g >>> 0 <= 31) {\n m = g + 1 | 0;\n i = 31 - g | 0;\n c = g - 31 >> 31;\n h = m;\n a = l >>> (m >>> 0) & c | k << i;\n c = k >>> (m >>> 0) & c;\n g = 0;\n i = l << i;\n break;\n }\n\n if (!f) {\n n = 0;\n f = 0;\n return (F(n | 0), f) | 0;\n }\n\n b[f >> 2] = a | 0;\n b[f + 4 >> 2] = j | c & 0;\n n = 0;\n f = 0;\n return (F(n | 0), f) | 0;\n }\n\n g = h - 1 | 0;\n\n if (g & h | 0) {\n i = (D(h | 0) | 0) + 33 - (D(k | 0) | 0) | 0;\n p = 64 - i | 0;\n m = 32 - i | 0;\n j = m >> 31;\n o = i - 32 | 0;\n c = o >> 31;\n h = i;\n a = m - 1 >> 31 & k >>> (o >>> 0) | (k << m | l >>> (i >>> 0)) & c;\n c = c & k >>> (i >>> 0);\n g = l << p & j;\n i = (k << p | l >>> (o >>> 0)) & j | l << m & i - 33 >> 31;\n break;\n }\n\n if (f | 0) {\n b[f >> 2] = g & l;\n b[f + 4 >> 2] = 0;\n }\n\n if ((h | 0) == 1) {\n o = j | c & 0;\n p = a | 0 | 0;\n return (F(o | 0), p) | 0;\n } else {\n p = $c(h | 0) | 0;\n o = k >>> (p >>> 0) | 0;\n p = k << 32 - p | l >>> (p >>> 0) | 0;\n return (F(o | 0), p) | 0;\n }\n } else {\n if (g) {\n if (f | 0) {\n b[f >> 2] = (k >>> 0) % (h >>> 0);\n b[f + 4 >> 2] = 0;\n }\n\n o = 0;\n p = (k >>> 0) / (h >>> 0) >>> 0;\n return (F(o | 0), p) | 0;\n }\n\n if (!l) {\n if (f | 0) {\n b[f >> 2] = 0;\n b[f + 4 >> 2] = (k >>> 0) % (i >>> 0);\n }\n\n o = 0;\n p = (k >>> 0) / (i >>> 0) >>> 0;\n return (F(o | 0), p) | 0;\n }\n\n g = i - 1 | 0;\n\n if (!(g & i)) {\n if (f | 0) {\n b[f >> 2] = a | 0;\n b[f + 4 >> 2] = g & k | c & 0;\n }\n\n o = 0;\n p = k >>> (($c(i | 0) | 0) >>> 0);\n return (F(o | 0), p) | 0;\n }\n\n g = (D(i | 0) | 0) - (D(k | 0) | 0) | 0;\n\n if (g >>> 0 <= 30) {\n c = g + 1 | 0;\n i = 31 - g | 0;\n h = c;\n a = k << i | l >>> (c >>> 0);\n c = k >>> (c >>> 0);\n g = 0;\n i = l << i;\n break;\n }\n\n if (!f) {\n o = 0;\n p = 0;\n return (F(o | 0), p) | 0;\n }\n\n b[f >> 2] = a | 0;\n b[f + 4 >> 2] = j | c & 0;\n o = 0;\n p = 0;\n return (F(o | 0), p) | 0;\n } } while (0);\n\n if (!h) {\n k = i;\n j = 0;\n i = 0;\n } else {\n m = d | 0 | 0;\n l = n | e & 0;\n k = Zc(m | 0, l | 0, -1, -1) | 0;\n d = G() | 0;\n j = i;\n i = 0;\n\n do {\n e = j;\n j = g >>> 31 | j << 1;\n g = i | g << 1;\n e = a << 1 | e >>> 31 | 0;\n n = a >>> 31 | c << 1 | 0;\n _c(k | 0, d | 0, e | 0, n | 0) | 0;\n p = G() | 0;\n o = p >> 31 | ((p | 0) < 0 ? -1 : 0) << 1;\n i = o & 1;\n a = _c(e | 0, n | 0, o & m | 0, (((p | 0) < 0 ? -1 : 0) >> 31 | ((p | 0) < 0 ? -1 : 0) << 1) & l | 0) | 0;\n c = G() | 0;\n h = h - 1 | 0;\n } while ((h | 0) != 0);\n\n k = j;\n j = 0;\n }\n\n h = 0;\n\n if (f | 0) {\n b[f >> 2] = a;\n b[f + 4 >> 2] = c;\n }\n\n o = (g | 0) >>> 31 | (k | h) << 1 | (h << 1 | g >>> 31) & 0 | j;\n p = (g << 1 | 0 >>> 31) & -2 | i;\n return (F(o | 0), p) | 0;\n }\n\n function bd(a, c, d, e) {\n a = a | 0;\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0,\n g = 0;\n g = S;\n S = S + 16 | 0;\n f = g | 0;\n ad(a, c, d, e, f) | 0;\n S = g;\n return (F(b[f + 4 >> 2] | 0), b[f >> 2] | 0) | 0;\n }\n\n function cd(a, b, c) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n\n if ((c | 0) < 32) {\n F(b >>> c | 0);\n return a >>> c | (b & (1 << c) - 1) << 32 - c;\n }\n\n F(0);\n return b >>> c - 32 | 0;\n }\n\n function dd(a, b, c) {\n a = a | 0;\n b = b | 0;\n c = c | 0;\n\n if ((c | 0) < 32) {\n F(b << c | (a & (1 << c) - 1 << 32 - c) >>> 32 - c | 0);\n return a << c;\n }\n\n F(a << c - 32 | 0);\n return 0;\n }\n\n function ed(a, b) {\n a = +a;\n b = +b;\n if (a != a) { return +b; }\n if (b != b) { return +a; }\n return +C(+a, +b);\n }\n\n function fd(a) {\n a = +a;\n return a >= 0.0 ? +p(a + .5) : +A(a - .5);\n }\n\n function gd(c, d, e) {\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0,\n g = 0,\n h = 0;\n\n if ((e | 0) >= 8192) {\n K(c | 0, d | 0, e | 0) | 0;\n return c | 0;\n }\n\n h = c | 0;\n g = c + e | 0;\n\n if ((c & 3) == (d & 3)) {\n while (c & 3) {\n if (!e) { return h | 0; }\n a[c >> 0] = a[d >> 0] | 0;\n c = c + 1 | 0;\n d = d + 1 | 0;\n e = e - 1 | 0;\n }\n\n e = g & -4 | 0;\n f = e - 64 | 0;\n\n while ((c | 0) <= (f | 0)) {\n b[c >> 2] = b[d >> 2];\n b[c + 4 >> 2] = b[d + 4 >> 2];\n b[c + 8 >> 2] = b[d + 8 >> 2];\n b[c + 12 >> 2] = b[d + 12 >> 2];\n b[c + 16 >> 2] = b[d + 16 >> 2];\n b[c + 20 >> 2] = b[d + 20 >> 2];\n b[c + 24 >> 2] = b[d + 24 >> 2];\n b[c + 28 >> 2] = b[d + 28 >> 2];\n b[c + 32 >> 2] = b[d + 32 >> 2];\n b[c + 36 >> 2] = b[d + 36 >> 2];\n b[c + 40 >> 2] = b[d + 40 >> 2];\n b[c + 44 >> 2] = b[d + 44 >> 2];\n b[c + 48 >> 2] = b[d + 48 >> 2];\n b[c + 52 >> 2] = b[d + 52 >> 2];\n b[c + 56 >> 2] = b[d + 56 >> 2];\n b[c + 60 >> 2] = b[d + 60 >> 2];\n c = c + 64 | 0;\n d = d + 64 | 0;\n }\n\n while ((c | 0) < (e | 0)) {\n b[c >> 2] = b[d >> 2];\n c = c + 4 | 0;\n d = d + 4 | 0;\n }\n } else {\n e = g - 4 | 0;\n\n while ((c | 0) < (e | 0)) {\n a[c >> 0] = a[d >> 0] | 0;\n a[c + 1 >> 0] = a[d + 1 >> 0] | 0;\n a[c + 2 >> 0] = a[d + 2 >> 0] | 0;\n a[c + 3 >> 0] = a[d + 3 >> 0] | 0;\n c = c + 4 | 0;\n d = d + 4 | 0;\n }\n }\n\n while ((c | 0) < (g | 0)) {\n a[c >> 0] = a[d >> 0] | 0;\n c = c + 1 | 0;\n d = d + 1 | 0;\n }\n\n return h | 0;\n }\n\n function hd(c, d, e) {\n c = c | 0;\n d = d | 0;\n e = e | 0;\n var f = 0,\n g = 0,\n h = 0,\n i = 0;\n h = c + e | 0;\n d = d & 255;\n\n if ((e | 0) >= 67) {\n while (c & 3) {\n a[c >> 0] = d;\n c = c + 1 | 0;\n }\n\n f = h & -4 | 0;\n i = d | d << 8 | d << 16 | d << 24;\n g = f - 64 | 0;\n\n while ((c | 0) <= (g | 0)) {\n b[c >> 2] = i;\n b[c + 4 >> 2] = i;\n b[c + 8 >> 2] = i;\n b[c + 12 >> 2] = i;\n b[c + 16 >> 2] = i;\n b[c + 20 >> 2] = i;\n b[c + 24 >> 2] = i;\n b[c + 28 >> 2] = i;\n b[c + 32 >> 2] = i;\n b[c + 36 >> 2] = i;\n b[c + 40 >> 2] = i;\n b[c + 44 >> 2] = i;\n b[c + 48 >> 2] = i;\n b[c + 52 >> 2] = i;\n b[c + 56 >> 2] = i;\n b[c + 60 >> 2] = i;\n c = c + 64 | 0;\n }\n\n while ((c | 0) < (f | 0)) {\n b[c >> 2] = i;\n c = c + 4 | 0;\n }\n }\n\n while ((c | 0) < (h | 0)) {\n a[c >> 0] = d;\n c = c + 1 | 0;\n }\n\n return h - e | 0;\n }\n\n function id(a) {\n a = +a;\n return a >= 0.0 ? +p(a + .5) : +A(a - .5);\n }\n\n function jd(a) {\n a = a | 0;\n var c = 0,\n d = 0,\n e = 0;\n e = J() | 0;\n d = b[g >> 2] | 0;\n c = d + a | 0;\n\n if ((a | 0) > 0 & (c | 0) < (d | 0) | (c | 0) < 0) {\n M(c | 0) | 0;\n I(12);\n return -1;\n }\n\n if ((c | 0) > (e | 0)) { if (!(L(c | 0) | 0)) {\n I(12);\n return -1;\n } }\n b[g >> 2] = c;\n return d | 0;\n } // EMSCRIPTEN_END_FUNCS\n\n\n return {\n ___uremdi3: bd,\n _bitshift64Lshr: cd,\n _bitshift64Shl: dd,\n _calloc: Yc,\n _cellAreaKm2: ub,\n _cellAreaM2: vb,\n _cellAreaRads2: tb,\n _compact: Hb,\n _destroyLinkedPolygon: jc,\n _edgeLengthKm: pb,\n _edgeLengthM: qb,\n _emscripten_replace_memory: V,\n _exactEdgeLengthKm: xb,\n _exactEdgeLengthM: yb,\n _exactEdgeLengthRads: wb,\n _experimentalH3ToLocalIj: oc,\n _experimentalLocalIjToH3: pc,\n _free: Xc,\n _geoToH3: Sb,\n _getDestinationH3IndexFromUnidirectionalEdge: cc,\n _getH3IndexesFromUnidirectionalEdge: ec,\n _getH3UnidirectionalEdge: ac,\n _getH3UnidirectionalEdgeBoundary: gc,\n _getH3UnidirectionalEdgesFromHexagon: fc,\n _getOriginH3IndexFromUnidirectionalEdge: bc,\n _getPentagonIndexes: _b,\n _getRes0Indexes: va,\n _h3Distance: qc,\n _h3GetBaseCell: Ab,\n _h3GetFaces: Yb,\n _h3GetResolution: zb,\n _h3IndexesAreNeighbors: $b,\n _h3IsPentagon: Fb,\n _h3IsResClassIII: Kb,\n _h3IsValid: Bb,\n _h3Line: sc,\n _h3LineSize: rc,\n _h3SetToLinkedGeo: ka,\n _h3ToCenterChild: Gb,\n _h3ToChildren: Eb,\n _h3ToGeo: Vb,\n _h3ToGeoBoundary: Wb,\n _h3ToParent: Cb,\n _h3UnidirectionalEdgeIsValid: dc,\n _hexAreaKm2: nb,\n _hexAreaM2: ob,\n _hexRing: ea,\n _i64Subtract: _c,\n _kRing: $,\n _kRingDistances: aa,\n _llvm_minnum_f64: ed,\n _llvm_round_f64: fd,\n _malloc: Wc,\n _maxFaceCount: Xb,\n _maxH3ToChildrenSize: Db,\n _maxKringSize: _,\n _maxPolyfillSize: fa,\n _maxUncompactSize: Jb,\n _memcpy: gd,\n _memset: hd,\n _numHexagons: rb,\n _pentagonIndexCount: Zb,\n _pointDistKm: jb,\n _pointDistM: kb,\n _pointDistRads: ib,\n _polyfill: ga,\n _res0IndexCount: ua,\n _round: id,\n _sbrk: jd,\n _sizeOfCoordIJ: Ec,\n _sizeOfGeoBoundary: Ac,\n _sizeOfGeoCoord: zc,\n _sizeOfGeoPolygon: Cc,\n _sizeOfGeofence: Bc,\n _sizeOfH3Index: yc,\n _sizeOfLinkedGeoPolygon: Dc,\n _uncompact: Ib,\n establishStackSpace: Z,\n stackAlloc: W,\n stackRestore: Y,\n stackSave: X\n };\n }( // EMSCRIPTEN_END_ASM\n asmGlobalArg, asmLibraryArg, buffer);\n\n var ___uremdi3 = Module[\"___uremdi3\"] = asm[\"___uremdi3\"];\n\n var _bitshift64Lshr = Module[\"_bitshift64Lshr\"] = asm[\"_bitshift64Lshr\"];\n\n var _bitshift64Shl = Module[\"_bitshift64Shl\"] = asm[\"_bitshift64Shl\"];\n\n var _calloc = Module[\"_calloc\"] = asm[\"_calloc\"];\n\n var _cellAreaKm2 = Module[\"_cellAreaKm2\"] = asm[\"_cellAreaKm2\"];\n\n var _cellAreaM2 = Module[\"_cellAreaM2\"] = asm[\"_cellAreaM2\"];\n\n var _cellAreaRads2 = Module[\"_cellAreaRads2\"] = asm[\"_cellAreaRads2\"];\n\n var _compact = Module[\"_compact\"] = asm[\"_compact\"];\n\n var _destroyLinkedPolygon = Module[\"_destroyLinkedPolygon\"] = asm[\"_destroyLinkedPolygon\"];\n\n var _edgeLengthKm = Module[\"_edgeLengthKm\"] = asm[\"_edgeLengthKm\"];\n\n var _edgeLengthM = Module[\"_edgeLengthM\"] = asm[\"_edgeLengthM\"];\n\n var _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = asm[\"_emscripten_replace_memory\"];\n\n var _exactEdgeLengthKm = Module[\"_exactEdgeLengthKm\"] = asm[\"_exactEdgeLengthKm\"];\n\n var _exactEdgeLengthM = Module[\"_exactEdgeLengthM\"] = asm[\"_exactEdgeLengthM\"];\n\n var _exactEdgeLengthRads = Module[\"_exactEdgeLengthRads\"] = asm[\"_exactEdgeLengthRads\"];\n\n var _experimentalH3ToLocalIj = Module[\"_experimentalH3ToLocalIj\"] = asm[\"_experimentalH3ToLocalIj\"];\n\n var _experimentalLocalIjToH3 = Module[\"_experimentalLocalIjToH3\"] = asm[\"_experimentalLocalIjToH3\"];\n\n var _free = Module[\"_free\"] = asm[\"_free\"];\n\n var _geoToH3 = Module[\"_geoToH3\"] = asm[\"_geoToH3\"];\n\n var _getDestinationH3IndexFromUnidirectionalEdge = Module[\"_getDestinationH3IndexFromUnidirectionalEdge\"] = asm[\"_getDestinationH3IndexFromUnidirectionalEdge\"];\n\n var _getH3IndexesFromUnidirectionalEdge = Module[\"_getH3IndexesFromUnidirectionalEdge\"] = asm[\"_getH3IndexesFromUnidirectionalEdge\"];\n\n var _getH3UnidirectionalEdge = Module[\"_getH3UnidirectionalEdge\"] = asm[\"_getH3UnidirectionalEdge\"];\n\n var _getH3UnidirectionalEdgeBoundary = Module[\"_getH3UnidirectionalEdgeBoundary\"] = asm[\"_getH3UnidirectionalEdgeBoundary\"];\n\n var _getH3UnidirectionalEdgesFromHexagon = Module[\"_getH3UnidirectionalEdgesFromHexagon\"] = asm[\"_getH3UnidirectionalEdgesFromHexagon\"];\n\n var _getOriginH3IndexFromUnidirectionalEdge = Module[\"_getOriginH3IndexFromUnidirectionalEdge\"] = asm[\"_getOriginH3IndexFromUnidirectionalEdge\"];\n\n var _getPentagonIndexes = Module[\"_getPentagonIndexes\"] = asm[\"_getPentagonIndexes\"];\n\n var _getRes0Indexes = Module[\"_getRes0Indexes\"] = asm[\"_getRes0Indexes\"];\n\n var _h3Distance = Module[\"_h3Distance\"] = asm[\"_h3Distance\"];\n\n var _h3GetBaseCell = Module[\"_h3GetBaseCell\"] = asm[\"_h3GetBaseCell\"];\n\n var _h3GetFaces = Module[\"_h3GetFaces\"] = asm[\"_h3GetFaces\"];\n\n var _h3GetResolution = Module[\"_h3GetResolution\"] = asm[\"_h3GetResolution\"];\n\n var _h3IndexesAreNeighbors = Module[\"_h3IndexesAreNeighbors\"] = asm[\"_h3IndexesAreNeighbors\"];\n\n var _h3IsPentagon = Module[\"_h3IsPentagon\"] = asm[\"_h3IsPentagon\"];\n\n var _h3IsResClassIII = Module[\"_h3IsResClassIII\"] = asm[\"_h3IsResClassIII\"];\n\n var _h3IsValid = Module[\"_h3IsValid\"] = asm[\"_h3IsValid\"];\n\n var _h3Line = Module[\"_h3Line\"] = asm[\"_h3Line\"];\n\n var _h3LineSize = Module[\"_h3LineSize\"] = asm[\"_h3LineSize\"];\n\n var _h3SetToLinkedGeo = Module[\"_h3SetToLinkedGeo\"] = asm[\"_h3SetToLinkedGeo\"];\n\n var _h3ToCenterChild = Module[\"_h3ToCenterChild\"] = asm[\"_h3ToCenterChild\"];\n\n var _h3ToChildren = Module[\"_h3ToChildren\"] = asm[\"_h3ToChildren\"];\n\n var _h3ToGeo = Module[\"_h3ToGeo\"] = asm[\"_h3ToGeo\"];\n\n var _h3ToGeoBoundary = Module[\"_h3ToGeoBoundary\"] = asm[\"_h3ToGeoBoundary\"];\n\n var _h3ToParent = Module[\"_h3ToParent\"] = asm[\"_h3ToParent\"];\n\n var _h3UnidirectionalEdgeIsValid = Module[\"_h3UnidirectionalEdgeIsValid\"] = asm[\"_h3UnidirectionalEdgeIsValid\"];\n\n var _hexAreaKm2 = Module[\"_hexAreaKm2\"] = asm[\"_hexAreaKm2\"];\n\n var _hexAreaM2 = Module[\"_hexAreaM2\"] = asm[\"_hexAreaM2\"];\n\n var _hexRing = Module[\"_hexRing\"] = asm[\"_hexRing\"];\n\n var _i64Subtract = Module[\"_i64Subtract\"] = asm[\"_i64Subtract\"];\n\n var _kRing = Module[\"_kRing\"] = asm[\"_kRing\"];\n\n var _kRingDistances = Module[\"_kRingDistances\"] = asm[\"_kRingDistances\"];\n\n var _llvm_minnum_f64 = Module[\"_llvm_minnum_f64\"] = asm[\"_llvm_minnum_f64\"];\n\n var _llvm_round_f64 = Module[\"_llvm_round_f64\"] = asm[\"_llvm_round_f64\"];\n\n var _malloc = Module[\"_malloc\"] = asm[\"_malloc\"];\n\n var _maxFaceCount = Module[\"_maxFaceCount\"] = asm[\"_maxFaceCount\"];\n\n var _maxH3ToChildrenSize = Module[\"_maxH3ToChildrenSize\"] = asm[\"_maxH3ToChildrenSize\"];\n\n var _maxKringSize = Module[\"_maxKringSize\"] = asm[\"_maxKringSize\"];\n\n var _maxPolyfillSize = Module[\"_maxPolyfillSize\"] = asm[\"_maxPolyfillSize\"];\n\n var _maxUncompactSize = Module[\"_maxUncompactSize\"] = asm[\"_maxUncompactSize\"];\n\n var _memcpy = Module[\"_memcpy\"] = asm[\"_memcpy\"];\n\n var _memset = Module[\"_memset\"] = asm[\"_memset\"];\n\n var _numHexagons = Module[\"_numHexagons\"] = asm[\"_numHexagons\"];\n\n var _pentagonIndexCount = Module[\"_pentagonIndexCount\"] = asm[\"_pentagonIndexCount\"];\n\n var _pointDistKm = Module[\"_pointDistKm\"] = asm[\"_pointDistKm\"];\n\n var _pointDistM = Module[\"_pointDistM\"] = asm[\"_pointDistM\"];\n\n var _pointDistRads = Module[\"_pointDistRads\"] = asm[\"_pointDistRads\"];\n\n var _polyfill = Module[\"_polyfill\"] = asm[\"_polyfill\"];\n\n var _res0IndexCount = Module[\"_res0IndexCount\"] = asm[\"_res0IndexCount\"];\n\n var _round = Module[\"_round\"] = asm[\"_round\"];\n\n var _sbrk = Module[\"_sbrk\"] = asm[\"_sbrk\"];\n\n var _sizeOfCoordIJ = Module[\"_sizeOfCoordIJ\"] = asm[\"_sizeOfCoordIJ\"];\n\n var _sizeOfGeoBoundary = Module[\"_sizeOfGeoBoundary\"] = asm[\"_sizeOfGeoBoundary\"];\n\n var _sizeOfGeoCoord = Module[\"_sizeOfGeoCoord\"] = asm[\"_sizeOfGeoCoord\"];\n\n var _sizeOfGeoPolygon = Module[\"_sizeOfGeoPolygon\"] = asm[\"_sizeOfGeoPolygon\"];\n\n var _sizeOfGeofence = Module[\"_sizeOfGeofence\"] = asm[\"_sizeOfGeofence\"];\n\n var _sizeOfH3Index = Module[\"_sizeOfH3Index\"] = asm[\"_sizeOfH3Index\"];\n\n var _sizeOfLinkedGeoPolygon = Module[\"_sizeOfLinkedGeoPolygon\"] = asm[\"_sizeOfLinkedGeoPolygon\"];\n\n var _uncompact = Module[\"_uncompact\"] = asm[\"_uncompact\"];\n\n var establishStackSpace = Module[\"establishStackSpace\"] = asm[\"establishStackSpace\"];\n var stackAlloc = Module[\"stackAlloc\"] = asm[\"stackAlloc\"];\n var stackRestore = Module[\"stackRestore\"] = asm[\"stackRestore\"];\n var stackSave = Module[\"stackSave\"] = asm[\"stackSave\"];\n Module[\"asm\"] = asm;\n Module[\"cwrap\"] = cwrap;\n Module[\"setValue\"] = setValue;\n Module[\"getValue\"] = getValue;\n Module[\"getTempRet0\"] = getTempRet0;\n\n if (memoryInitializer) {\n if (!isDataURI(memoryInitializer)) {\n memoryInitializer = locateFile(memoryInitializer);\n }\n\n {\n addRunDependency(\"memory initializer\");\n\n var applyMemoryInitializer = function (data) {\n if (data.byteLength) { data = new Uint8Array(data); }\n HEAPU8.set(data, GLOBAL_BASE);\n if (Module[\"memoryInitializerRequest\"]) { delete Module[\"memoryInitializerRequest\"].response; }\n removeRunDependency(\"memory initializer\");\n };\n\n var doBrowserLoad = function () {\n readAsync(memoryInitializer, applyMemoryInitializer, function () {\n throw \"could not load memory initializer \" + memoryInitializer;\n });\n };\n\n var memoryInitializerBytes = tryParseAsDataURI(memoryInitializer);\n\n if (memoryInitializerBytes) {\n applyMemoryInitializer(memoryInitializerBytes.buffer);\n } else if (Module[\"memoryInitializerRequest\"]) {\n var useRequest = function () {\n var request = Module[\"memoryInitializerRequest\"];\n var response = request.response;\n\n if (request.status !== 200 && request.status !== 0) {\n var data = tryParseAsDataURI(Module[\"memoryInitializerRequestURL\"]);\n\n if (data) {\n response = data.buffer;\n } else {\n console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \" + request.status + \", retrying \" + memoryInitializer);\n doBrowserLoad();\n return;\n }\n }\n\n applyMemoryInitializer(response);\n };\n\n if (Module[\"memoryInitializerRequest\"].response) {\n setTimeout(useRequest, 0);\n } else {\n Module[\"memoryInitializerRequest\"].addEventListener(\"load\", useRequest);\n }\n } else {\n doBrowserLoad();\n }\n }\n }\n\n var calledRun;\n\n dependenciesFulfilled = function runCaller() {\n if (!calledRun) { run(); }\n if (!calledRun) { dependenciesFulfilled = runCaller; }\n };\n\n function run(args) {\n args = args || arguments_;\n\n if (runDependencies > 0) {\n return;\n }\n\n preRun();\n if (runDependencies > 0) { return; }\n\n function doRun() {\n if (calledRun) { return; }\n calledRun = true;\n if (ABORT) { return; }\n initRuntime();\n preMain();\n if (Module[\"onRuntimeInitialized\"]) { Module[\"onRuntimeInitialized\"](); }\n postRun();\n }\n\n if (Module[\"setStatus\"]) {\n Module[\"setStatus\"](\"Running...\");\n setTimeout(function () {\n setTimeout(function () {\n Module[\"setStatus\"](\"\");\n }, 1);\n doRun();\n }, 1);\n } else {\n doRun();\n }\n }\n\n Module[\"run\"] = run;\n\n function abort(what) {\n if (Module[\"onAbort\"]) {\n Module[\"onAbort\"](what);\n }\n\n what += \"\";\n out(what);\n err(what);\n ABORT = true;\n throw \"abort(\" + what + \"). Build with -s ASSERTIONS=1 for more info.\";\n }\n\n Module[\"abort\"] = abort;\n\n if (Module[\"preInit\"]) {\n if (typeof Module[\"preInit\"] == \"function\") { Module[\"preInit\"] = [Module[\"preInit\"]]; }\n\n while (Module[\"preInit\"].length > 0) {\n Module[\"preInit\"].pop()();\n }\n }\n run();\n return libh3;\n}(typeof libh3 === 'object' ? libh3 : {});\n\n/*\n * Copyright 2018-2019 Uber Technologies, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Define the C bindings for the h3 library\n// Add some aliases to make the function definitions more intelligible\nvar NUMBER = 'number';\nvar BOOLEAN = NUMBER;\nvar H3_LOWER = NUMBER;\nvar H3_UPPER = NUMBER;\nvar RESOLUTION = NUMBER;\nvar POINTER = NUMBER; // Define the bindings to functions in the C lib. Functions are defined as\n// [name, return type, [arg types]]. You must run `npm run build-emscripten`\n// before new functions added here will be available.\n\nvar BINDINGS = [// The size functions are inserted via build/sizes.h\n['sizeOfH3Index', NUMBER], ['sizeOfGeoCoord', NUMBER], ['sizeOfGeoBoundary', NUMBER], ['sizeOfGeoPolygon', NUMBER], ['sizeOfGeofence', NUMBER], ['sizeOfLinkedGeoPolygon', NUMBER], ['sizeOfCoordIJ', NUMBER], // The remaining functions are defined in the core lib in h3Api.h\n['h3IsValid', BOOLEAN, [H3_LOWER, H3_UPPER]], ['geoToH3', H3_LOWER, [NUMBER, NUMBER, RESOLUTION]], ['h3ToGeo', null, [H3_LOWER, H3_UPPER, POINTER]], ['h3ToGeoBoundary', null, [H3_LOWER, H3_UPPER, POINTER]], ['maxKringSize', NUMBER, [NUMBER]], ['kRing', null, [H3_LOWER, H3_UPPER, NUMBER, POINTER]], ['kRingDistances', null, [H3_LOWER, H3_UPPER, NUMBER, POINTER, POINTER]], ['hexRing', null, [H3_LOWER, H3_UPPER, NUMBER, POINTER]], ['maxPolyfillSize', NUMBER, [POINTER, RESOLUTION]], ['polyfill', null, [POINTER, RESOLUTION, POINTER]], ['h3SetToLinkedGeo', null, [POINTER, NUMBER, POINTER]], ['destroyLinkedPolygon', null, [POINTER]], ['compact', NUMBER, [POINTER, POINTER, NUMBER]], ['uncompact', NUMBER, [POINTER, NUMBER, POINTER, NUMBER, RESOLUTION]], ['maxUncompactSize', NUMBER, [POINTER, NUMBER, RESOLUTION]], ['h3IsPentagon', BOOLEAN, [H3_LOWER, H3_UPPER]], ['h3IsResClassIII', BOOLEAN, [H3_LOWER, H3_UPPER]], ['h3GetBaseCell', NUMBER, [H3_LOWER, H3_UPPER]], ['h3GetResolution', NUMBER, [H3_LOWER, H3_UPPER]], ['maxFaceCount', NUMBER, [H3_LOWER, H3_UPPER]], ['h3GetFaces', null, [H3_LOWER, H3_UPPER, POINTER]], ['h3ToParent', H3_LOWER, [H3_LOWER, H3_UPPER, RESOLUTION]], ['h3ToChildren', null, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]], ['h3ToCenterChild', H3_LOWER, [H3_LOWER, H3_UPPER, RESOLUTION]], ['maxH3ToChildrenSize', NUMBER, [H3_LOWER, H3_UPPER, RESOLUTION]], ['h3IndexesAreNeighbors', BOOLEAN, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER]], ['getH3UnidirectionalEdge', H3_LOWER, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER]], ['getOriginH3IndexFromUnidirectionalEdge', H3_LOWER, [H3_LOWER, H3_UPPER]], ['getDestinationH3IndexFromUnidirectionalEdge', H3_LOWER, [H3_LOWER, H3_UPPER]], ['h3UnidirectionalEdgeIsValid', BOOLEAN, [H3_LOWER, H3_UPPER]], ['getH3IndexesFromUnidirectionalEdge', null, [H3_LOWER, H3_UPPER, POINTER]], ['getH3UnidirectionalEdgesFromHexagon', null, [H3_LOWER, H3_UPPER, POINTER]], ['getH3UnidirectionalEdgeBoundary', null, [H3_LOWER, H3_UPPER, POINTER]], ['h3Distance', NUMBER, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER]], ['h3Line', NUMBER, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]], ['h3LineSize', NUMBER, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER]], ['experimentalH3ToLocalIj', NUMBER, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]], ['experimentalLocalIjToH3', NUMBER, [H3_LOWER, H3_UPPER, POINTER, POINTER]], ['hexAreaM2', NUMBER, [RESOLUTION]], ['hexAreaKm2', NUMBER, [RESOLUTION]], ['edgeLengthM', NUMBER, [RESOLUTION]], ['edgeLengthKm', NUMBER, [RESOLUTION]], ['pointDistM', NUMBER, [POINTER, POINTER]], ['pointDistKm', NUMBER, [POINTER, POINTER]], ['pointDistRads', NUMBER, [POINTER, POINTER]], ['cellAreaM2', NUMBER, [H3_LOWER, H3_UPPER]], ['cellAreaKm2', NUMBER, [H3_LOWER, H3_UPPER]], ['cellAreaRads2', NUMBER, [H3_LOWER, H3_UPPER]], ['exactEdgeLengthM', NUMBER, [H3_LOWER, H3_UPPER]], ['exactEdgeLengthKm', NUMBER, [H3_LOWER, H3_UPPER]], ['exactEdgeLengthRads', NUMBER, [H3_LOWER, H3_UPPER]], ['numHexagons', NUMBER, [RESOLUTION]], ['getRes0Indexes', null, [POINTER]], ['res0IndexCount', NUMBER], ['getPentagonIndexes', null, [NUMBER, POINTER]], ['pentagonIndexCount', NUMBER]];\n\n/*\n * Copyright 2018-2019 Uber Technologies, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar H3 = {}; // Create the bound functions themselves\n\nBINDINGS.forEach(function bind(def) {\n H3[def[0]] = libh3.cwrap.apply(libh3, def);\n}); // Alias the hexidecimal base for legibility\n\nvar BASE_16 = 16; // ----------------------------------------------------------------------------\n// Byte size imports\n\nvar SZ_INT = 4;\nvar SZ_PTR = 4;\nvar SZ_DBL = 8;\nvar SZ_H3INDEX = H3.sizeOfH3Index();\nvar SZ_GEOCOORD = H3.sizeOfGeoCoord();\nvar SZ_GEOBOUNDARY = H3.sizeOfGeoBoundary();\nvar SZ_GEOPOLYGON = H3.sizeOfGeoPolygon();\nvar SZ_GEOFENCE = H3.sizeOfGeofence();\nvar SZ_LINKED_GEOPOLYGON = H3.sizeOfLinkedGeoPolygon();\nvar SZ_COORDIJ = H3.sizeOfCoordIJ(); // ----------------------------------------------------------------------------\n// Custom types\n\n/**\n * 64-bit hexidecimal string representation of an H3 index\n * @static\n * @typedef {string} H3Index\n */\n\n/**\n * 64-bit hexidecimal string representation of an H3 index,\n * or two 32-bit integers in little endian order in an array.\n * @static\n * @typedef {string | number[]} H3IndexInput\n */\n\n/**\n * Coordinates as an `{i, j}` pair\n * @static\n * @typedef CoordIJ\n * @type {Object}\n * @property {number} i\n * @property {number} j\n */\n// ----------------------------------------------------------------------------\n// Unit constants\n\n/**\n * Length/Area units\n * @static\n * @typedef UNITS\n * @type {Object}\n * @property {string} m\n * @property {string} m2\n * @property {string} km\n * @property {string} km2\n * @property {string} rads\n * @property {string} rads2\n */\n\nvar UNITS = {\n m: 'm',\n m2: 'm2',\n km: 'km',\n km2: 'km2',\n rads: 'rads',\n rads2: 'rads2'\n}; // ----------------------------------------------------------------------------\n// Utilities and helpers\n\n/**\n * Validate a resolution, throwing an error if invalid\n * @private\n * @param {mixed} res Value to validate\n * @throws {Error} Error if invalid\n */\n\nfunction validateRes(res) {\n if (typeof res !== 'number' || res < 0 || res > 15 || Math.floor(res) !== res) {\n throw new Error((\"Invalid resolution: \" + res));\n }\n}\n\nvar INVALID_HEXIDECIMAL_CHAR = /[^0-9a-fA-F]/;\n/**\n * Convert an H3 index (64-bit hexidecimal string) into a \"split long\" - a pair of 32-bit ints\n * @private\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {number[]} A two-element array with 32 lower bits and 32 upper bits\n */\n\nfunction h3IndexToSplitLong(h3Index) {\n if (Array.isArray(h3Index) && h3Index.length === 2 && Number.isInteger(h3Index[0]) && Number.isInteger(h3Index[1])) {\n return h3Index;\n }\n\n if (typeof h3Index !== 'string' || INVALID_HEXIDECIMAL_CHAR.test(h3Index)) {\n return [0, 0];\n }\n\n var upper = parseInt(h3Index.substring(0, h3Index.length - 8), BASE_16);\n var lower = parseInt(h3Index.substring(h3Index.length - 8), BASE_16);\n return [lower, upper];\n}\n/**\n * Convert a 32-bit int to a hexdecimal string\n * @private\n * @param {number} num Integer to convert\n * @return {H3Index} Hexidecimal string\n */\n\nfunction hexFrom32Bit(num) {\n if (num >= 0) {\n return num.toString(BASE_16);\n } // Handle negative numbers\n\n\n num = num & 0x7fffffff;\n var tempStr = zeroPad(8, num.toString(BASE_16));\n var topNum = (parseInt(tempStr[0], BASE_16) + 8).toString(BASE_16);\n tempStr = topNum + tempStr.substring(1);\n return tempStr;\n}\n/**\n * Get a H3 index from a split long (pair of 32-bit ints)\n * @private\n * @param {number} lower Lower 32 bits\n * @param {number} upper Upper 32 bits\n * @return {H3Index} H3 index\n */\n\n\nfunction splitLongToh3Index(lower, upper) {\n return hexFrom32Bit(upper) + zeroPad(8, hexFrom32Bit(lower));\n}\n/**\n * Zero-pad a string to a given length\n * @private\n * @param {number} fullLen Target length\n * @param {string} numStr String to zero-pad\n * @return {string} Zero-padded string\n */\n\nfunction zeroPad(fullLen, numStr) {\n var numZeroes = fullLen - numStr.length;\n var outStr = '';\n\n for (var i = 0; i < numZeroes; i++) {\n outStr += '0';\n }\n\n outStr = outStr + numStr;\n return outStr;\n}\n/**\n * Populate a C-appropriate Geofence struct from a polygon array\n * @private\n * @param {Array[]} polygonArray Polygon, as an array of coordinate pairs\n * @param {number} geofence C pointer to a Geofence struct\n * @param {boolean} isGeoJson Whether coordinates are in [lng, lat] order per GeoJSON spec\n * @return {number} C pointer to populated Geofence struct\n */\n\n\nfunction polygonArrayToGeofence(polygonArray, geofence, isGeoJson) {\n var numVerts = polygonArray.length;\n\n var geoCoordArray = libh3._calloc(numVerts, SZ_GEOCOORD); // Support [lng, lat] pairs if GeoJSON is specified\n\n\n var latIndex = isGeoJson ? 1 : 0;\n var lngIndex = isGeoJson ? 0 : 1;\n\n for (var i = 0; i < numVerts * 2; i += 2) {\n libh3.HEAPF64.set([polygonArray[i / 2][latIndex], polygonArray[i / 2][lngIndex]].map(degsToRads), geoCoordArray / SZ_DBL + i);\n }\n\n libh3.HEAPU32.set([numVerts, geoCoordArray], geofence / SZ_INT);\n return geofence;\n}\n/**\n * Create a C-appropriate GeoPolygon struct from an array of polygons\n * @private\n * @param {Array[]} coordinates Array of polygons, each an array of coordinate pairs\n * @param {boolean} isGeoJson Whether coordinates are in [lng, lat] order per GeoJSON spec\n * @return {number} C pointer to populated GeoPolygon struct\n */\n\n\nfunction coordinatesToGeoPolygon(coordinates, isGeoJson) {\n // Any loops beyond the first loop are holes\n var numHoles = coordinates.length - 1;\n\n var geoPolygon = libh3._calloc(SZ_GEOPOLYGON); // Byte positions within the struct\n\n\n var geofenceOffset = 0;\n var numHolesOffset = geofenceOffset + SZ_GEOFENCE;\n var holesOffset = numHolesOffset + SZ_INT; // geofence is first part of struct\n\n polygonArrayToGeofence(coordinates[0], geoPolygon + geofenceOffset, isGeoJson);\n var holes;\n\n if (numHoles > 0) {\n holes = libh3._calloc(numHoles, SZ_GEOFENCE);\n\n for (var i = 0; i < numHoles; i++) {\n polygonArrayToGeofence(coordinates[i + 1], holes + SZ_GEOFENCE * i, isGeoJson);\n }\n }\n\n libh3.setValue(geoPolygon + numHolesOffset, numHoles, 'i32');\n libh3.setValue(geoPolygon + holesOffset, holes, 'i32');\n return geoPolygon;\n}\n/**\n * Free memory allocated for a GeoPolygon struct. It is an error to access the struct\n * after passing it to this method.\n * @private\n * @return {number} geoPolygon C pointer to populated GeoPolygon struct\n */\n\n\nfunction destroyGeoPolygon(geoPolygon) {\n // Byte positions within the struct\n var geofenceOffset = 0;\n var numHolesOffset = geofenceOffset + SZ_GEOFENCE;\n var holesOffset = numHolesOffset + SZ_INT; // Offset of the geofence vertex array pointer within the Geofence struct\n\n var geofenceArrayOffset = SZ_INT; // Free the outer vertex array\n\n libh3._free(libh3.getValue(geoPolygon + geofenceOffset + geofenceArrayOffset, 'i8*')); // Free the vertex array for the holes, if any\n\n\n var numHoles = libh3.getValue(geoPolygon + numHolesOffset, 'i32');\n\n if (numHoles > 0) {\n var holes = libh3.getValue(geoPolygon + holesOffset, 'i32');\n\n for (var i = 0; i < numHoles; i++) {\n libh3._free(libh3.getValue(holes + SZ_GEOFENCE * i + geofenceArrayOffset, 'i8*'));\n }\n\n libh3._free(holes);\n }\n\n libh3._free(geoPolygon);\n}\n/**\n * Read a long value, returning the lower and upper portions as separate 32-bit integers.\n * Because the upper bits are returned via side effect, the argument to this function is\n * intended to be the invocation that caused the side effect, e.g. readLong(H3.getSomeLong())\n * @private\n * @param {number} invocation Invoked function returning a long value. The actual return\n * value of these functions is a 32-bit integer.\n * @return {number} Long value as a [lower, upper] pair\n */\n\n\nfunction readLong(invocation) {\n // Upper 32-bits of the long set via side-effect\n var upper = libh3.getTempRet0();\n return [invocation, upper];\n}\n/**\n * Read an H3 index from a C return value. As with readLong, the argument to this function\n * is intended to be an invocation, e.g. readH3Index(H3.getSomeAddress()), to help ensure that\n * the temp value storing the upper bits of the long is still set.\n * @private\n * @param {number} invocation Invoked function returning a single H3 index\n * @return {H3Index} H3 index, or null if index was invalid\n */\n\n\nfunction readH3Index(invocation) {\n var ref = readLong(invocation);\n var lower = ref[0];\n var upper = ref[1]; // The lower bits are allowed to be 0s, but if the upper bits are 0\n // this represents an invalid H3 index\n\n return upper ? splitLongToh3Index(lower, upper) : null;\n}\n/**\n * Read an H3 index from a pointer to C memory.\n * @private\n * @param {number} cAddress Pointer to allocated C memory\n * @param {number} offset Offset, in number of H3 indexes, in case we're\n * reading an array\n * @return {H3Index} H3 index, or null if index was invalid\n */\n\n\nfunction readH3IndexFromPointer(cAddress, offset) {\n if ( offset === void 0 ) offset = 0;\n\n var lower = libh3.getValue(cAddress + SZ_INT * offset * 2, 'i32');\n var upper = libh3.getValue(cAddress + SZ_INT * (offset * 2 + 1), 'i32'); // The lower bits are allowed to be 0s, but if the upper bits are 0\n // this represents an invalid H3 index\n\n return upper ? splitLongToh3Index(lower, upper) : null;\n}\n/**\n * Store an H3 index in C memory. Primarily used as an efficient way to\n * write sets of hexagons.\n * @private\n * @param {H3IndexInput} h3Index H3 index to store\n * @param {number} cAddress Pointer to allocated C memory\n * @param {number} offset Offset, in number of H3 indexes from beginning\n * of the current array\n */\n\n\nfunction storeH3Index(h3Index, cAddress, offset) {\n // HEAPU32 is a typed array projection on the index space\n // as unsigned 32-bit integers. This means the index needs\n // to be divided by SZ_INT (4) to access correctly. Also,\n // the H3 index is 64 bits, so we skip by twos as we're writing\n // to 32-bit integers in the proper order.\n libh3.HEAPU32.set(h3IndexToSplitLong(h3Index), cAddress / SZ_INT + 2 * offset);\n}\n/**\n * Read an array of 64-bit H3 indexes from C and convert to a JS array of\n * H3 index strings\n * @private\n * @param {number} cAddress Pointer to C ouput array\n * @param {number} maxCount Max number of hexagons in array. Hexagons with\n * the value 0 will be skipped, so this isn't\n * necessarily the length of the output array.\n * @return {H3Index[]} Array of H3 indexes\n */\n\n\nfunction readArrayOfHexagons(cAddress, maxCount) {\n var out = [];\n\n for (var i = 0; i < maxCount; i++) {\n var h3Index = readH3IndexFromPointer(cAddress, i);\n\n if (h3Index !== null) {\n out.push(h3Index);\n }\n }\n\n return out;\n}\n/**\n * Store an array of H3 index strings as a C array of 64-bit integers.\n * @private\n * @param {number} cAddress Pointer to C input array\n * @param {H3IndexInput[]} hexagons H3 indexes to pass to the C lib\n */\n\n\nfunction storeArrayOfHexagons(cAddress, hexagons) {\n // Assuming the cAddress points to an already appropriately\n // allocated space\n var count = hexagons.length;\n\n for (var i = 0; i < count; i++) {\n storeH3Index(hexagons[i], cAddress, i);\n }\n}\n/**\n * Populate a C-appropriate GeoCoord struct from a [lat, lng] array\n * @private\n * @param {number} lat Coordinate latitude\n * @param {number} lng Coordinate longitude\n * @return {number} C pointer to populated GeoCoord struct\n */\n\n\nfunction storeGeoCoord(lat, lng) {\n var geoCoord = libh3._calloc(1, SZ_GEOCOORD);\n\n libh3.HEAPF64.set([lat, lng].map(degsToRads), geoCoord / SZ_DBL);\n return geoCoord;\n}\n\nfunction readSingleCoord(cAddress) {\n return radsToDegs(libh3.getValue(cAddress, 'double'));\n}\n/**\n * Read a GeoCoord from C and return a [lat, lng] pair.\n * @private\n * @param {number} cAddress Pointer to C struct\n * @return {number[]} [lat, lng] pair\n */\n\n\nfunction readGeoCoord(cAddress) {\n return [readSingleCoord(cAddress), readSingleCoord(cAddress + SZ_DBL)];\n}\n/**\n * Read a GeoCoord from C and return a GeoJSON-style [lng, lat] pair.\n * @private\n * @param {number} cAddress Pointer to C struct\n * @return {number[]} [lng, lat] pair\n */\n\n\nfunction readGeoCoordGeoJson(cAddress) {\n return [readSingleCoord(cAddress + SZ_DBL), readSingleCoord(cAddress)];\n}\n/**\n * Read the GeoBoundary structure into a list of geo coordinate pairs\n * @private\n * @param {number} geoBoundary C pointer to GeoBoundary struct\n * @param {boolean} geoJsonCoords Whether to provide GeoJSON coordinate order: [lng, lat]\n * @param {boolean} closedLoop Whether to close the loop\n * @return {Array[]} Array of geo coordinate pairs\n */\n\n\nfunction readGeoBoundary(geoBoundary, geoJsonCoords, closedLoop) {\n var numVerts = libh3.getValue(geoBoundary, 'i32'); // Note that though numVerts is an int, the coordinate doubles have to be\n // aligned to 8 bytes, hence the 8-byte offset here\n\n var vertsPos = geoBoundary + SZ_DBL;\n var out = []; // Support [lng, lat] pairs if GeoJSON is specified\n\n var readCoord = geoJsonCoords ? readGeoCoordGeoJson : readGeoCoord;\n\n for (var i = 0; i < numVerts * 2; i += 2) {\n out.push(readCoord(vertsPos + SZ_DBL * i));\n }\n\n if (closedLoop) {\n // Close loop if GeoJSON is specified\n out.push(out[0]);\n }\n\n return out;\n}\n/**\n * Read the LinkedGeoPolygon structure into a nested array of MultiPolygon coordinates\n * @private\n * @param {number} polygon C pointer to LinkedGeoPolygon struct\n * @param {boolean} formatAsGeoJson Whether to provide GeoJSON output: [lng, lat], closed loops\n * @return {number[][][][]} MultiPolygon-style output.\n */\n\n\nfunction readMultiPolygon(polygon, formatAsGeoJson) {\n var output = [];\n var readCoord = formatAsGeoJson ? readGeoCoordGeoJson : readGeoCoord;\n var loops;\n var loop;\n var coords;\n var coord; // Loop through the linked structure, building the output\n\n while (polygon) {\n output.push(loops = []); // Follow ->first pointer\n\n loop = libh3.getValue(polygon, 'i8*');\n\n while (loop) {\n loops.push(coords = []); // Follow ->first pointer\n\n coord = libh3.getValue(loop, 'i8*');\n\n while (coord) {\n coords.push(readCoord(coord)); // Follow ->next pointer\n\n coord = libh3.getValue(coord + SZ_DBL * 2, 'i8*');\n }\n\n if (formatAsGeoJson) {\n // Close loop if GeoJSON is requested\n coords.push(coords[0]);\n } // Follow ->next pointer\n\n\n loop = libh3.getValue(loop + SZ_PTR * 2, 'i8*');\n } // Follow ->next pointer\n\n\n polygon = libh3.getValue(polygon + SZ_PTR * 2, 'i8*');\n }\n\n return output;\n}\n/**\n * Read a CoordIJ from C and return an {i, j} pair.\n * @private\n * @param {number} cAddress Pointer to C struct\n * @return {CoordIJ} {i, j} pair\n */\n\n\nfunction readCoordIJ(cAddress) {\n return {\n i: libh3.getValue(cAddress, 'i32'),\n j: libh3.getValue(cAddress + SZ_INT, 'i32')\n };\n}\n/**\n * Store an {i, j} pair to a C CoordIJ struct.\n * @private\n * @param {number} cAddress Pointer to C struct\n * @return {CoordIJ} {i, j} pair\n */\n\n\nfunction storeCoordIJ(cAddress, ref) {\n var i = ref.i;\n var j = ref.j;\n\n libh3.setValue(cAddress, i, 'i32');\n libh3.setValue(cAddress + SZ_INT, j, 'i32');\n}\n/**\n * Read an array of positive integers array from C. Negative\n * values are considered invalid and ignored in output.\n * @private\n * @param {number} cAddress Pointer to C array\n * @param {number} count Length of C array\n * @return {number[]} Javascript integer array\n */\n\n\nfunction readArrayOfPositiveIntegers(cAddress, count) {\n var out = [];\n\n for (var i = 0; i < count; i++) {\n var int = libh3.getValue(cAddress + SZ_INT * i, 'i32');\n\n if (int >= 0) {\n out.push(int);\n }\n }\n\n return out;\n} // ----------------------------------------------------------------------------\n// Public API functions: Core\n\n/**\n * Whether a given string represents a valid H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {boolean} Whether the index is valid\n */\n\n\nfunction h3IsValid(h3Index) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n return Boolean(H3.h3IsValid(lower, upper));\n}\n/**\n * Whether the given H3 index is a pentagon\n * @static\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {boolean} isPentagon\n */\n\nfunction h3IsPentagon(h3Index) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n return Boolean(H3.h3IsPentagon(lower, upper));\n}\n/**\n * Whether the given H3 index is in a Class III resolution (rotated versus\n * the icosahedron and subject to shape distortion adding extra points on\n * icosahedron edges, making them not true hexagons).\n * @static\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {boolean} isResClassIII\n */\n\nfunction h3IsResClassIII(h3Index) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n return Boolean(H3.h3IsResClassIII(lower, upper));\n}\n/**\n * Get the number of the base cell for a given H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to get the base cell for\n * @return {number} Index of the base cell (0-121)\n */\n\nfunction h3GetBaseCell(h3Index) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n return H3.h3GetBaseCell(lower, upper);\n}\n/**\n * Get the indices of all icosahedron faces intersected by a given H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to get faces for\n * @return {number[]} Indices (0-19) of all intersected faces\n */\n\nfunction h3GetFaces(h3Index) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n var count = H3.maxFaceCount(lower, upper);\n\n var faces = libh3._malloc(SZ_INT * count);\n\n H3.h3GetFaces(lower, upper, faces);\n var out = readArrayOfPositiveIntegers(faces, count);\n\n libh3._free(faces);\n\n return out;\n}\n/**\n * Returns the resolution of an H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to get resolution\n * @return {number} The number (0-15) resolution, or -1 if invalid\n */\n\nfunction h3GetResolution(h3Index) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n\n if (!H3.h3IsValid(lower, upper)) {\n // Compatability with stated API\n return -1;\n }\n\n return H3.h3GetResolution(lower, upper);\n}\n/**\n * Get the hexagon containing a lat,lon point\n * @static\n * @param {number} lat Latitude of point\n * @param {number} lng Longtitude of point\n * @param {number} res Resolution of hexagons to return\n * @return {H3Index} H3 index\n */\n\nfunction geoToH3(lat, lng, res) {\n var latlng = libh3._malloc(SZ_GEOCOORD); // Slightly more efficient way to set the memory\n\n\n libh3.HEAPF64.set([lat, lng].map(degsToRads), latlng / SZ_DBL); // Read value as a split long\n\n var h3Index = readH3Index(H3.geoToH3(latlng, res));\n\n libh3._free(latlng);\n\n return h3Index;\n}\n/**\n * Get the lat,lon center of a given hexagon\n * @static\n * @param {H3IndexInput} h3Index H3 index\n * @return {number[]} Point as a [lat, lng] pair\n */\n\nfunction h3ToGeo(h3Index) {\n var latlng = libh3._malloc(SZ_GEOCOORD);\n\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n H3.h3ToGeo(lower, upper, latlng);\n var out = readGeoCoord(latlng);\n\n libh3._free(latlng);\n\n return out;\n}\n/**\n * Get the vertices of a given hexagon (or pentagon), as an array of [lat, lng]\n * points. For pentagons and hexagons on the edge of an icosahedron face, this\n * function may return up to 10 vertices.\n * @static\n * @param {H3Index} h3Index H3 index\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat], closed loops\n * @return {number[][]} Array of [lat, lng] pairs\n */\n\nfunction h3ToGeoBoundary(h3Index, formatAsGeoJson) {\n var geoBoundary = libh3._malloc(SZ_GEOBOUNDARY);\n\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n H3.h3ToGeoBoundary(lower, upper, geoBoundary);\n var out = readGeoBoundary(geoBoundary, formatAsGeoJson, formatAsGeoJson);\n\n libh3._free(geoBoundary);\n\n return out;\n} // ----------------------------------------------------------------------------\n// Public API functions: Algorithms\n\n/**\n * Get the parent of the given hexagon at a particular resolution\n * @static\n * @param {H3IndexInput} h3Index H3 index to get parent for\n * @param {number} res Resolution of hexagon to return\n * @return {H3Index} H3 index of parent, or null for invalid input\n */\n\nfunction h3ToParent(h3Index, res) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n return readH3Index(H3.h3ToParent(lower, upper, res));\n}\n/**\n * Get the children/descendents of the given hexagon at a particular resolution\n * @static\n * @param {H3IndexInput} h3Index H3 index to get children for\n * @param {number} res Resolution of hexagons to return\n * @return {H3Index[]} H3 indexes of children, or empty array for invalid input\n */\n\nfunction h3ToChildren(h3Index, res) {\n // Bad input in this case can potentially result in high computation volume\n // using the current C algorithm. Validate and return an empty array on failure.\n if (!h3IsValid(h3Index)) {\n return [];\n }\n\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n var maxCount = H3.maxH3ToChildrenSize(lower, upper, res);\n\n var hexagons = libh3._calloc(maxCount, SZ_H3INDEX);\n\n H3.h3ToChildren(lower, upper, res, hexagons);\n var out = readArrayOfHexagons(hexagons, maxCount);\n\n libh3._free(hexagons);\n\n return out;\n}\n/**\n * Get the center child of the given hexagon at a particular resolution\n * @static\n * @param {H3IndexInput} h3Index H3 index to get center child for\n * @param {number} res Resolution of hexagon to return\n * @return {H3Index} H3 index of child, or null for invalid input\n */\n\nfunction h3ToCenterChild(h3Index, res) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n return readH3Index(H3.h3ToCenterChild(lower, upper, res));\n}\n/**\n * Get all hexagons in a k-ring around a given center. The order of the hexagons is undefined.\n * @static\n * @param {H3IndexInput} h3Index H3 index of center hexagon\n * @param {number} ringSize Radius of k-ring\n * @return {H3Index[]} H3 indexes for all hexagons in ring\n */\n\nfunction kRing(h3Index, ringSize) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n var maxCount = H3.maxKringSize(ringSize);\n\n var hexagons = libh3._calloc(maxCount, SZ_H3INDEX);\n\n H3.kRing(lower, upper, ringSize, hexagons);\n var out = readArrayOfHexagons(hexagons, maxCount);\n\n libh3._free(hexagons);\n\n return out;\n}\n/**\n * Get all hexagons in a k-ring around a given center, in an array of arrays\n * ordered by distance from the origin. The order of the hexagons within each ring is undefined.\n * @static\n * @param {H3IndexInput} h3Index H3 index of center hexagon\n * @param {number} ringSize Radius of k-ring\n * @return {H3Index[][]} Array of arrays with H3 indexes for all hexagons each ring\n */\n\nfunction kRingDistances(h3Index, ringSize) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n var maxCount = H3.maxKringSize(ringSize);\n\n var kRings = libh3._calloc(maxCount, SZ_H3INDEX);\n\n var distances = libh3._calloc(maxCount, SZ_INT);\n\n H3.kRingDistances(lower, upper, ringSize, kRings, distances); // Create an array of empty arrays to hold the output\n\n var out = [];\n\n for (var i = 0; i < ringSize + 1; i++) {\n out.push([]);\n } // Read the array of hexagons, putting them into the appropriate rings\n\n\n for (var i$1 = 0; i$1 < maxCount * 2; i$1 += 2) {\n var hexLower = libh3.getValue(kRings + SZ_INT * i$1, 'i32');\n var hexUpper = libh3.getValue(kRings + SZ_INT * (i$1 + 1), 'i32');\n var index = libh3.getValue(distances + SZ_INT * (i$1 / 2), 'i32');\n\n if (hexLower !== 0 || hexUpper !== 0) {\n out[index].push(splitLongToh3Index(hexLower, hexUpper));\n }\n }\n\n libh3._free(kRings);\n\n libh3._free(distances);\n\n return out;\n}\n/**\n * Get all hexagons in a hollow hexagonal ring centered at origin with sides of a given length.\n * Unlike kRing, this function will throw an error if there is a pentagon anywhere in the ring.\n * @static\n * @param {H3IndexInput} h3Index H3 index of center hexagon\n * @param {number} ringSize Radius of ring\n * @return {H3Index[]} H3 indexes for all hexagons in ring\n * @throws {Error} If the algorithm could not calculate the ring\n */\n\nfunction hexRing(h3Index, ringSize) {\n var maxCount = ringSize === 0 ? 1 : 6 * ringSize;\n\n var hexagons = libh3._calloc(maxCount, SZ_H3INDEX);\n\n var retVal = H3.hexRing.apply(H3, h3IndexToSplitLong(h3Index).concat( [ringSize], [hexagons] ));\n\n if (retVal !== 0) {\n libh3._free(hexagons);\n\n throw new Error('Failed to get hexRing (encountered a pentagon?)');\n }\n\n var out = readArrayOfHexagons(hexagons, maxCount);\n\n libh3._free(hexagons);\n\n return out;\n}\n/**\n * Get all hexagons with centers contained in a given polygon. The polygon\n * is specified with GeoJson semantics as an array of loops. Each loop is\n * an array of [lat, lng] pairs (or [lng, lat] if isGeoJson is specified).\n * The first loop is the perimeter of the polygon, and subsequent loops are\n * expected to be holes.\n * @static\n * @param {number[][] | number[][][]} coordinates\n * Array of loops, or a single loop\n * @param {number} res Resolution of hexagons to return\n * @param {boolean} [isGeoJson] Whether to expect GeoJson-style [lng, lat]\n * pairs instead of [lat, lng]\n * @return {H3Index[]} H3 indexes for all hexagons in polygon\n */\n\nfunction polyfill(coordinates, res, isGeoJson) {\n validateRes(res);\n isGeoJson = Boolean(isGeoJson); // Guard against empty input\n\n if (coordinates.length === 0 || coordinates[0].length === 0) {\n return [];\n } // Wrap to expected format if a single loop is provided\n\n\n if (typeof coordinates[0][0] === 'number') {\n coordinates = [coordinates];\n }\n\n var geoPolygon = coordinatesToGeoPolygon(coordinates, isGeoJson);\n var arrayLen = H3.maxPolyfillSize(geoPolygon, res);\n\n var hexagons = libh3._calloc(arrayLen, SZ_H3INDEX);\n\n H3.polyfill(geoPolygon, res, hexagons);\n var out = readArrayOfHexagons(hexagons, arrayLen);\n\n libh3._free(hexagons);\n\n destroyGeoPolygon(geoPolygon);\n return out;\n}\n/**\n * Get the outlines of a set of H3 hexagons, returned in GeoJSON MultiPolygon\n * format (an array of polygons, each with an array of loops, each an array of\n * coordinates). Coordinates are returned as [lat, lng] pairs unless GeoJSON\n * is requested.\n *\n * It is the responsibility of the caller to ensure that all hexagons in the\n * set have the same resolution and that the set contains no duplicates. Behavior\n * is undefined if duplicates or multiple resolutions are present, and the\n * algorithm may produce unexpected or invalid polygons.\n *\n * @static\n * @param {H3IndexInput[]} h3Indexes H3 indexes to get outlines for\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output:\n * [lng, lat], closed loops\n * @return {number[][][][]} MultiPolygon-style output.\n */\n\nfunction h3SetToMultiPolygon(h3Indexes, formatAsGeoJson) {\n // Early exit on empty input\n if (!h3Indexes || !h3Indexes.length) {\n return [];\n } // Set up input set\n\n\n var indexCount = h3Indexes.length;\n\n var set = libh3._calloc(indexCount, SZ_H3INDEX);\n\n storeArrayOfHexagons(set, h3Indexes); // Allocate memory for output linked polygon\n\n var polygon = libh3._calloc(SZ_LINKED_GEOPOLYGON); // Store a reference to the first polygon - that's the one we need for\n // memory deallocation\n\n\n var originalPolygon = polygon;\n H3.h3SetToLinkedGeo(set, indexCount, polygon);\n var multiPolygon = readMultiPolygon(polygon, formatAsGeoJson); // Clean up\n\n H3.destroyLinkedPolygon(originalPolygon);\n\n libh3._free(originalPolygon);\n\n libh3._free(set);\n\n return multiPolygon;\n}\n/**\n * Compact a set of hexagons of the same resolution into a set of hexagons across\n * multiple levels that represents the same area.\n * @static\n * @param {H3IndexInput[]} h3Set H3 indexes to compact\n * @return {H3Index[]} Compacted H3 indexes\n * @throws {Error} If the input is invalid (e.g. duplicate hexagons)\n */\n\nfunction compact(h3Set) {\n if (!h3Set || !h3Set.length) {\n return [];\n } // Set up input set\n\n\n var count = h3Set.length;\n\n var set = libh3._calloc(count, SZ_H3INDEX);\n\n storeArrayOfHexagons(set, h3Set); // Allocate memory for compacted hexagons, worst-case is no compaction\n\n var compactedSet = libh3._calloc(count, SZ_H3INDEX);\n\n var retVal = H3.compact(set, compactedSet, count);\n\n if (retVal !== 0) {\n libh3._free(set);\n\n libh3._free(compactedSet);\n\n throw new Error('Failed to compact, malformed input data (duplicate hexagons?)');\n }\n\n var out = readArrayOfHexagons(compactedSet, count);\n\n libh3._free(set);\n\n libh3._free(compactedSet);\n\n return out;\n}\n/**\n * Uncompact a compacted set of hexagons to hexagons of the same resolution\n * @static\n * @param {H3IndexInput[]} compactedSet H3 indexes to uncompact\n * @param {number} res The resolution to uncompact to\n * @return {H3Index[]} The uncompacted H3 indexes\n * @throws {Error} If the input is invalid (e.g. invalid resolution)\n */\n\nfunction uncompact(compactedSet, res) {\n validateRes(res);\n\n if (!compactedSet || !compactedSet.length) {\n return [];\n } // Set up input set\n\n\n var count = compactedSet.length;\n\n var set = libh3._calloc(count, SZ_H3INDEX);\n\n storeArrayOfHexagons(set, compactedSet); // Estimate how many hexagons we need (always overestimates if in error)\n\n var maxUncompactedNum = H3.maxUncompactSize(set, count, res); // Allocate memory for uncompacted hexagons\n\n var uncompactedSet = libh3._calloc(maxUncompactedNum, SZ_H3INDEX);\n\n var retVal = H3.uncompact(set, count, uncompactedSet, maxUncompactedNum, res);\n\n if (retVal !== 0) {\n libh3._free(set);\n\n libh3._free(uncompactedSet);\n\n throw new Error('Failed to uncompact (bad resolution?)');\n }\n\n var out = readArrayOfHexagons(uncompactedSet, maxUncompactedNum);\n\n libh3._free(set);\n\n libh3._free(uncompactedSet);\n\n return out;\n} // ----------------------------------------------------------------------------\n// Public API functions: Unidirectional edges\n\n/**\n * Whether two H3 indexes are neighbors (share an edge)\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {boolean} Whether the hexagons share an edge\n */\n\nfunction h3IndexesAreNeighbors(origin, destination) {\n var ref = h3IndexToSplitLong(origin);\n var oLower = ref[0];\n var oUpper = ref[1];\n var ref$1 = h3IndexToSplitLong(destination);\n var dLower = ref$1[0];\n var dUpper = ref$1[1];\n return Boolean(H3.h3IndexesAreNeighbors(oLower, oUpper, dLower, dUpper));\n}\n/**\n * Get an H3 index representing a unidirectional edge for a given origin and destination\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {H3Index} H3 index of the edge, or null if no edge is shared\n */\n\nfunction getH3UnidirectionalEdge(origin, destination) {\n var ref = h3IndexToSplitLong(origin);\n var oLower = ref[0];\n var oUpper = ref[1];\n var ref$1 = h3IndexToSplitLong(destination);\n var dLower = ref$1[0];\n var dUpper = ref$1[1];\n return readH3Index(H3.getH3UnidirectionalEdge(oLower, oUpper, dLower, dUpper));\n}\n/**\n * Get the origin hexagon from an H3 index representing a unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index} H3 index of the edge origin\n */\n\nfunction getOriginH3IndexFromUnidirectionalEdge(edgeIndex) {\n var ref = h3IndexToSplitLong(edgeIndex);\n var lower = ref[0];\n var upper = ref[1];\n return readH3Index(H3.getOriginH3IndexFromUnidirectionalEdge(lower, upper));\n}\n/**\n * Get the destination hexagon from an H3 index representing a unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index} H3 index of the edge destination\n */\n\nfunction getDestinationH3IndexFromUnidirectionalEdge(edgeIndex) {\n var ref = h3IndexToSplitLong(edgeIndex);\n var lower = ref[0];\n var upper = ref[1];\n return readH3Index(H3.getDestinationH3IndexFromUnidirectionalEdge(lower, upper));\n}\n/**\n * Whether the input is a valid unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {boolean} Whether the index is valid\n */\n\nfunction h3UnidirectionalEdgeIsValid(edgeIndex) {\n var ref = h3IndexToSplitLong(edgeIndex);\n var lower = ref[0];\n var upper = ref[1];\n return Boolean(H3.h3UnidirectionalEdgeIsValid(lower, upper));\n}\n/**\n * Get the [origin, destination] pair represented by a unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index[]} [origin, destination] pair as H3 indexes\n */\n\nfunction getH3IndexesFromUnidirectionalEdge(edgeIndex) {\n var ref = h3IndexToSplitLong(edgeIndex);\n var lower = ref[0];\n var upper = ref[1];\n var count = 2;\n\n var hexagons = libh3._calloc(count, SZ_H3INDEX);\n\n H3.getH3IndexesFromUnidirectionalEdge(lower, upper, hexagons);\n var out = readArrayOfHexagons(hexagons, count);\n\n libh3._free(hexagons);\n\n return out;\n}\n/**\n * Get all of the unidirectional edges with the given H3 index as the origin (i.e. an edge to\n * every neighbor)\n * @static\n * @param {H3IndexInput} h3Index H3 index of the origin hexagon\n * @return {H3Index[]} List of unidirectional edges\n */\n\nfunction getH3UnidirectionalEdgesFromHexagon(h3Index) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n var count = 6;\n\n var edges = libh3._calloc(count, SZ_H3INDEX);\n\n H3.getH3UnidirectionalEdgesFromHexagon(lower, upper, edges);\n var out = readArrayOfHexagons(edges, count);\n\n libh3._free(edges);\n\n return out;\n}\n/**\n * Get the vertices of a given edge as an array of [lat, lng] points. Note that for edges that\n * cross the edge of an icosahedron face, this may return 3 coordinates.\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat]\n * @return {number[][]} Array of geo coordinate pairs\n */\n\nfunction getH3UnidirectionalEdgeBoundary(edgeIndex, formatAsGeoJson) {\n var geoBoundary = libh3._malloc(SZ_GEOBOUNDARY);\n\n var ref = h3IndexToSplitLong(edgeIndex);\n var lower = ref[0];\n var upper = ref[1];\n H3.getH3UnidirectionalEdgeBoundary(lower, upper, geoBoundary);\n var out = readGeoBoundary(geoBoundary, formatAsGeoJson);\n\n libh3._free(geoBoundary);\n\n return out;\n}\n/**\n * Get the grid distance between two hex indexes. This function may fail\n * to find the distance between two indexes if they are very far apart or\n * on opposite sides of a pentagon.\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {number} Distance between hexagons, or a negative\n * number if the distance could not be computed\n */\n\nfunction h3Distance(origin, destination) {\n var ref = h3IndexToSplitLong(origin);\n var oLower = ref[0];\n var oUpper = ref[1];\n var ref$1 = h3IndexToSplitLong(destination);\n var dLower = ref$1[0];\n var dUpper = ref$1[1];\n return H3.h3Distance(oLower, oUpper, dLower, dUpper);\n}\n/**\n * Given two H3 indexes, return the line of indexes between them (inclusive).\n *\n * This function may fail to find the line between two indexes, for\n * example if they are very far apart. It may also fail when finding\n * distances for indexes on opposite sides of a pentagon.\n *\n * Notes:\n *\n * - The specific output of this function should not be considered stable\n * across library versions. The only guarantees the library provides are\n * that the line length will be `h3Distance(start, end) + 1` and that\n * every index in the line will be a neighbor of the preceding index.\n * - Lines are drawn in grid space, and may not correspond exactly to either\n * Cartesian lines or great arcs.\n *\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {H3Index[]} H3 indexes connecting origin and destination\n * @throws {Error} If the line cannot be calculated\n */\n\nfunction h3Line(origin, destination) {\n var ref = h3IndexToSplitLong(origin);\n var oLower = ref[0];\n var oUpper = ref[1];\n var ref$1 = h3IndexToSplitLong(destination);\n var dLower = ref$1[0];\n var dUpper = ref$1[1];\n var count = H3.h3LineSize(oLower, oUpper, dLower, dUpper);\n\n if (count < 0) {\n // We can't get the specific error code here - may be any of\n // the errors possible in experimentalH3ToLocalIj\n throw new Error('Line cannot be calculated');\n }\n\n var hexagons = libh3._calloc(count, SZ_H3INDEX);\n\n H3.h3Line(oLower, oUpper, dLower, dUpper, hexagons);\n var out = readArrayOfHexagons(hexagons, count);\n\n libh3._free(hexagons);\n\n return out;\n}\n/**\n * Produces IJ coordinates for an H3 index anchored by an origin.\n *\n * - The coordinate space used by this function may have deleted\n * regions or warping due to pentagonal distortion.\n * - Coordinates are only comparable if they come from the same\n * origin index.\n * - Failure may occur if the index is too far away from the origin\n * or if the index is on the other side of a pentagon.\n * - This function is experimental, and its output is not guaranteed\n * to be compatible across different versions of H3.\n * @static\n * @param {H3IndexInput} origin Origin H3 index\n * @param {H3IndexInput} destination H3 index for which to find relative coordinates\n * @return {CoordIJ} Coordinates as an `{i, j}` pair\n * @throws {Error} If the IJ coordinates cannot be calculated\n */\n\nfunction experimentalH3ToLocalIj(origin, destination) {\n var ij = libh3._malloc(SZ_COORDIJ);\n\n var retVal = H3.experimentalH3ToLocalIj.apply(H3, h3IndexToSplitLong(origin).concat( h3IndexToSplitLong(destination), [ij] ));\n var coords = readCoordIJ(ij);\n\n libh3._free(ij); // Return the pair, or throw if an error code was returned.\n // Switch statement and error codes cribbed from h3-java's implementation.\n\n\n switch (retVal) {\n case 0:\n return coords;\n\n case 1:\n throw new Error('Incompatible origin and index.');\n\n case 2:\n default:\n throw new Error('Local IJ coordinates undefined for this origin and index pair. ' + 'The index may be too far from the origin.');\n\n case 3:\n case 4:\n case 5:\n throw new Error('Encountered possible pentagon distortion');\n }\n}\n/**\n * Produces an H3 index for IJ coordinates anchored by an origin.\n *\n * - The coordinate space used by this function may have deleted\n * regions or warping due to pentagonal distortion.\n * - Coordinates are only comparable if they come from the same\n * origin index.\n * - Failure may occur if the index is too far away from the origin\n * or if the index is on the other side of a pentagon.\n * - This function is experimental, and its output is not guaranteed\n * to be compatible across different versions of H3.\n * @static\n * @param {H3IndexInput} origin Origin H3 index\n * @param {CoordIJ} coords Coordinates as an `{i, j}` pair\n * @return {H3Index} H3 index at the relative coordinates\n * @throws {Error} If the H3 index cannot be calculated\n */\n\nfunction experimentalLocalIjToH3(origin, coords) {\n // Validate input coords\n if (!coords || typeof coords.i !== 'number' || typeof coords.j !== 'number') {\n throw new Error('Coordinates must be provided as an {i, j} object');\n } // Allocate memory for the CoordIJ struct and an H3 index to hold the return value\n\n\n var ij = libh3._malloc(SZ_COORDIJ);\n\n var out = libh3._malloc(SZ_H3INDEX);\n\n storeCoordIJ(ij, coords);\n var retVal = H3.experimentalLocalIjToH3.apply(H3, h3IndexToSplitLong(origin).concat( [ij], [out] ));\n var h3Index = readH3IndexFromPointer(out);\n\n libh3._free(ij);\n\n libh3._free(out);\n\n if (retVal !== 0) {\n throw new Error('Index not defined for this origin and IJ coordinates pair. ' + 'IJ coordinates may be too far from origin, or ' + 'a pentagon distortion was encountered.');\n }\n\n return h3Index;\n} // ----------------------------------------------------------------------------\n// Public API functions: Distance/area utilities\n\n/**\n * Great circle distance between two geo points. This is not specific to H3,\n * but is implemented in the library and provided here as a convenience.\n * @static\n * @param {number[]} latlng1 Origin coordinate as [lat, lng]\n * @param {number[]} latlng2 Destination coordinate as [lat, lng]\n * @param {string} unit Distance unit (either UNITS.m or UNITS.km)\n * @return {number} Great circle distance\n * @throws {Error} If the unit is invalid\n */\n\nfunction pointDist(latlng1, latlng2, unit) {\n var coord1 = storeGeoCoord(latlng1[0], latlng1[1]);\n var coord2 = storeGeoCoord(latlng2[0], latlng2[1]);\n var result;\n\n switch (unit) {\n case UNITS.m:\n result = H3.pointDistM(coord1, coord2);\n break;\n\n case UNITS.km:\n result = H3.pointDistKm(coord1, coord2);\n break;\n\n case UNITS.rads:\n result = H3.pointDistRads(coord1, coord2);\n break;\n\n default:\n result = null;\n }\n\n libh3._free(coord1);\n\n libh3._free(coord2);\n\n if (result === null) {\n throw new Error((\"Unknown unit: \" + unit));\n }\n\n return result;\n}\n/**\n * Exact area of a given cell\n * @static\n * @param {H3Index} h3Index H3 index of the hexagon to measure\n * @param {string} unit Distance unit (either UNITS.m2 or UNITS.km2)\n * @return {number} Cell area\n * @throws {Error} If the unit is invalid\n */\n\nfunction cellArea(h3Index, unit) {\n var ref = h3IndexToSplitLong(h3Index);\n var lower = ref[0];\n var upper = ref[1];\n\n switch (unit) {\n case UNITS.m2:\n return H3.cellAreaM2(lower, upper);\n\n case UNITS.km2:\n return H3.cellAreaKm2(lower, upper);\n\n case UNITS.rads2:\n return H3.cellAreaRads2(lower, upper);\n\n default:\n throw new Error((\"Unknown unit: \" + unit));\n }\n}\n/**\n * Exact length of a given unidirectional edge\n * @static\n * @param {H3Index} edge H3 index of the edge to measure\n * @param {string} unit Distance unit (either UNITS.m, UNITS.km, or UNITS.rads)\n * @return {number} Cell area\n * @throws {Error} If the unit is invalid\n */\n\nfunction exactEdgeLength(edge, unit) {\n var ref = h3IndexToSplitLong(edge);\n var lower = ref[0];\n var upper = ref[1];\n\n switch (unit) {\n case UNITS.m:\n return H3.exactEdgeLengthM(lower, upper);\n\n case UNITS.km:\n return H3.exactEdgeLengthKm(lower, upper);\n\n case UNITS.rads:\n return H3.exactEdgeLengthRads(lower, upper);\n\n default:\n throw new Error((\"Unknown unit: \" + unit));\n }\n}\n/**\n * Average hexagon area at a given resolution\n * @static\n * @param {number} res Hexagon resolution\n * @param {string} unit Area unit (either UNITS.m2, UNITS.km2, or UNITS.rads2)\n * @return {number} Average area\n * @throws {Error} If the unit is invalid\n */\n\nfunction hexArea(res, unit) {\n validateRes(res);\n\n switch (unit) {\n case UNITS.m2:\n return H3.hexAreaM2(res);\n\n case UNITS.km2:\n return H3.hexAreaKm2(res);\n\n default:\n throw new Error((\"Unknown unit: \" + unit));\n }\n}\n/**\n * Average hexagon edge length at a given resolution\n * @static\n * @param {number} res Hexagon resolution\n * @param {string} unit Distance unit (either UNITS.m, UNITS.km, or UNITS.rads)\n * @return {number} Average edge length\n * @throws {Error} If the unit is invalid\n */\n\nfunction edgeLength(res, unit) {\n validateRes(res);\n\n switch (unit) {\n case UNITS.m:\n return H3.edgeLengthM(res);\n\n case UNITS.km:\n return H3.edgeLengthKm(res);\n\n default:\n throw new Error((\"Unknown unit: \" + unit));\n }\n} // ----------------------------------------------------------------------------\n// Public informational utilities\n\n/**\n * The total count of hexagons in the world at a given resolution. Note that above\n * resolution 8 the exact count cannot be represented in a JavaScript 32-bit number,\n * so consumers should use caution when applying further operations to the output.\n * @static\n * @param {number} res Hexagon resolution\n * @return {number} Count\n */\n\nfunction numHexagons(res) {\n validateRes(res); // Get number as a long value\n\n var ref = readLong(H3.numHexagons(res));\n var lower = ref[0];\n var upper = ref[1]; // If we're using <= 32 bits we can use normal JS numbers\n\n if (!upper) {\n return lower;\n } // Above 32 bit, make a JS number that's correct in order of magnitude\n\n\n return upper * Math.pow(2, 32) + lower;\n}\n/**\n * Get all H3 indexes at resolution 0. As every index at every resolution > 0 is\n * the descendant of a res 0 index, this can be used with h3ToChildren to iterate\n * over H3 indexes at any resolution.\n * @static\n * @return {H3Index[]} All H3 indexes at res 0\n */\n\nfunction getRes0Indexes() {\n var count = H3.res0IndexCount();\n\n var hexagons = libh3._malloc(SZ_H3INDEX * count);\n\n H3.getRes0Indexes(hexagons);\n var out = readArrayOfHexagons(hexagons, count);\n\n libh3._free(hexagons);\n\n return out;\n}\n/**\n * Get the twelve pentagon indexes at a given resolution.\n * @static\n * @param {number} res Hexagon resolution\n * @return {H3Index[]} All H3 pentagon indexes at res\n */\n\nfunction getPentagonIndexes(res) {\n validateRes(res);\n var count = H3.pentagonIndexCount();\n\n var hexagons = libh3._malloc(SZ_H3INDEX * count);\n\n H3.getPentagonIndexes(res, hexagons);\n var out = readArrayOfHexagons(hexagons, count);\n\n libh3._free(hexagons);\n\n return out;\n}\n/**\n * Convert degrees to radians\n * @static\n * @param {number} deg Value in degrees\n * @return {number} Value in radians\n */\n\nfunction degsToRads(deg) {\n return deg * Math.PI / 180;\n}\n/**\n * Convert radians to degrees\n * @static\n * @param {number} rad Value in radians\n * @return {number} Value in degrees\n */\n\nfunction radsToDegs(rad) {\n return rad * 180 / Math.PI;\n}\n\nexport { UNITS, h3IndexToSplitLong, splitLongToh3Index, h3IsValid, h3IsPentagon, h3IsResClassIII, h3GetBaseCell, h3GetFaces, h3GetResolution, geoToH3, h3ToGeo, h3ToGeoBoundary, h3ToParent, h3ToChildren, h3ToCenterChild, kRing, kRingDistances, hexRing, polyfill, h3SetToMultiPolygon, compact, uncompact, h3IndexesAreNeighbors, getH3UnidirectionalEdge, getOriginH3IndexFromUnidirectionalEdge, getDestinationH3IndexFromUnidirectionalEdge, h3UnidirectionalEdgeIsValid, getH3IndexesFromUnidirectionalEdge, getH3UnidirectionalEdgesFromHexagon, getH3UnidirectionalEdgeBoundary, h3Distance, h3Line, experimentalH3ToLocalIj, experimentalLocalIjToH3, pointDist, cellArea, exactEdgeLength, hexArea, edgeLength, numHexagons, getRes0Indexes, getPentagonIndexes, degsToRads, radsToDegs };\n//# sourceMappingURL=h3-js.es.js.map\n","import {\n h3ToGeoBoundary,\n h3GetResolution,\n h3ToGeo,\n geoToH3,\n h3IsPentagon,\n h3Distance,\n edgeLength,\n H3Index\n} from 'h3-js';\nimport {lerp} from '@math.gl/core';\nimport {\n AccessorFunction,\n CompositeLayer,\n CompositeLayerProps,\n createIterable,\n Layer,\n LayersList,\n UpdateParameters,\n WebMercatorViewport,\n DefaultProps\n} from '@deck.gl/core';\nimport {ColumnLayer, PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\n\n// There is a cost to updating the instanced geometries when using highPrecision: false\n// This constant defines the distance between two hexagons that leads to \"significant\n// distortion.\" Smaller value makes the column layer more sensitive to viewport change.\nconst UPDATE_THRESHOLD_KM = 10;\n\n// normalize longitudes w.r.t center (refLng), when not provided first vertex\nexport function normalizeLongitudes(vertices: number[][], refLng?: number): void {\n refLng = refLng === undefined ? vertices[0][0] : refLng;\n for (const pt of vertices) {\n const deltaLng = pt[0] - refLng;\n if (deltaLng > 180) {\n pt[0] -= 360;\n } else if (deltaLng < -180) {\n pt[0] += 360;\n }\n }\n}\n\n// scale polygon vertices w.r.t center (hexId)\nexport function scalePolygon(hexId: H3Index, vertices: number[][], factor: number): void {\n const [lat, lng] = h3ToGeo(hexId);\n const actualCount = vertices.length;\n\n // normalize with respect to center\n normalizeLongitudes(vertices, lng);\n\n // `h3ToGeoBoundary` returns same array object for first and last vertex (closed polygon),\n // if so skip scaling the last vertex\n const vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;\n for (let i = 0; i < vertexCount; i++) {\n vertices[i][0] = lerp(lng, vertices[i][0], factor);\n vertices[i][1] = lerp(lat, vertices[i][1], factor);\n }\n}\n\nfunction getHexagonCentroid(getHexagon, object, objectInfo) {\n const hexagonId = getHexagon(object, objectInfo);\n const [lat, lng] = h3ToGeo(hexagonId);\n return [lng, lat];\n}\n\nfunction h3ToPolygon(hexId: H3Index, coverage: number = 1): number[][] {\n const vertices = h3ToGeoBoundary(hexId, true);\n\n if (coverage !== 1) {\n // scale and normalize vertices w.r.t to center\n scalePolygon(hexId, vertices, coverage);\n } else {\n // normalize w.r.t to start vertex\n normalizeLongitudes(vertices);\n }\n\n return vertices;\n}\n\nfunction flattenPolygon(vertices: number[][]): Float64Array {\n const positions = new Float64Array(vertices.length * 2);\n let i = 0;\n for (const pt of vertices) {\n positions[i++] = pt[0];\n positions[i++] = pt[1];\n }\n return positions;\n}\n\nfunction mergeTriggers(getHexagon, coverage) {\n let trigger;\n if (getHexagon === undefined || getHexagon === null) {\n trigger = coverage;\n } else if (typeof getHexagon === 'object') {\n trigger = {...getHexagon, coverage};\n } else {\n trigger = {getHexagon, coverage};\n }\n return trigger;\n}\n\nconst defaultProps: DefaultProps = {\n ...PolygonLayer.defaultProps,\n highPrecision: 'auto',\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n centerHexagon: null,\n getHexagon: {type: 'accessor', value: x => x.hexagon},\n extruded: true\n};\n\n/** All properties supported by H3HexagonLayer */\nexport type H3HexagonLayerProps = _H3HexagonLayerProps &\n PolygonLayerProps &\n CompositeLayerProps;\n\n/** Props added by the H3HexagonLayer */\ntype _H3HexagonLayerProps = {\n /**\n * Whether or not draw hexagons with high precision.\n * @default 'auto'\n */\n highPrecision?: boolean | 'auto';\n /**\n * Coverage of hexagon in cell.\n * @default 1\n */\n coverage?: number;\n /**\n * Center hexagon that best represents the shape of the set. If not specified, the hexagon closest to the center of the viewport is used.\n */\n centerHexagon?: H3Index | null;\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `hexagon` property of data object.\n */\n getHexagon?: AccessorFunction;\n /**\n * Whether to extrude polygons.\n * @default true\n */\n extruded?: boolean;\n};\n\n/**\n * Render hexagons from the [H3](https://h3geo.org/) geospatial indexing system.\n */\nexport default class H3HexagonLayer extends CompositeLayer<\n ExtraPropsT & Required<_H3HexagonLayerProps & Required>>\n> {\n static defaultProps = defaultProps;\n static layerName = 'H3HexagonLayer';\n\n // See `main/bundle.ts`\n static _checkH3Lib = () => {};\n\n initializeState() {\n H3HexagonLayer._checkH3Lib();\n this.state = {\n edgeLengthKM: 0,\n resolution: -1\n };\n }\n\n state!: {\n centerHex?: H3Index;\n edgeLengthKM: number;\n hasMultipleRes?: boolean;\n hasPentagon?: boolean;\n resolution: number;\n vertices?: number[][];\n };\n\n shouldUpdateState({changeFlags}: UpdateParameters): boolean {\n return this._shouldUseHighPrecision()\n ? changeFlags.propsOrDataChanged\n : changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}: UpdateParameters): void {\n if (\n props.highPrecision !== true &&\n (changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagon))\n ) {\n const dataProps = this._calculateH3DataProps();\n this.setState(dataProps);\n }\n\n this._updateVertices(this.context.viewport as WebMercatorViewport);\n }\n\n private _calculateH3DataProps() {\n let resolution = -1;\n let hasPentagon = false;\n let hasMultipleRes = false;\n\n const {iterable, objectInfo} = createIterable(this.props.data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexId = this.props.getHexagon(object, objectInfo);\n // Take the resolution of the first hex\n const hexResolution = h3GetResolution(hexId);\n if (resolution < 0) {\n resolution = hexResolution;\n if (!this.props.highPrecision) break;\n } else if (resolution !== hexResolution) {\n hasMultipleRes = true;\n break;\n }\n if (h3IsPentagon(hexId)) {\n hasPentagon = true;\n break;\n }\n }\n\n return {\n resolution,\n edgeLengthKM: resolution >= 0 ? edgeLength(resolution, 'km') : 0,\n hasMultipleRes,\n hasPentagon\n };\n }\n\n private _shouldUseHighPrecision(): boolean {\n if (this.props.highPrecision === 'auto') {\n const {resolution, hasPentagon, hasMultipleRes} = this.state;\n const {viewport} = this.context;\n return (\n Boolean(viewport?.resolution) ||\n hasMultipleRes ||\n hasPentagon ||\n (resolution >= 0 && resolution <= 5)\n );\n }\n\n return this.props.highPrecision;\n }\n\n private _updateVertices(viewport: WebMercatorViewport): void {\n if (this._shouldUseHighPrecision()) {\n return;\n }\n const {resolution, edgeLengthKM, centerHex} = this.state;\n if (resolution < 0) {\n return;\n }\n const hex =\n this.props.centerHexagon || geoToH3(viewport.latitude, viewport.longitude, resolution);\n if (centerHex === hex) {\n return;\n }\n if (centerHex) {\n const distance = h3Distance(centerHex, hex);\n // h3Distance returns a negative number if the distance could not be computed\n // due to the two indexes very far apart or on opposite sides of a pentagon.\n if (distance >= 0 && distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {\n return;\n }\n }\n\n const {unitsPerMeter} = viewport.distanceScales;\n\n let vertices = h3ToPolygon(hex);\n const [centerLat, centerLng] = h3ToGeo(hex);\n\n const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);\n vertices = vertices.map(p => {\n const worldPosition = viewport.projectFlat(p);\n return [\n (worldPosition[0] - centerX) / unitsPerMeter[0],\n (worldPosition[1] - centerY) / unitsPerMeter[1]\n ];\n });\n\n this.setState({centerHex: hex, vertices});\n }\n\n renderLayers(): Layer | null | LayersList {\n return this._shouldUseHighPrecision() ? this._renderPolygonLayer() : this._renderColumnLayer();\n }\n\n private _getForwardProps() {\n const {\n elevationScale,\n material,\n coverage,\n extruded,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n getFillColor,\n getElevation,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers\n } = this.props;\n\n return {\n elevationScale,\n extruded,\n coverage,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n material,\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers: {\n getFillColor: updateTriggers.getFillColor,\n getElevation: updateTriggers.getElevation,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n } as {\n getFillColor: any;\n getElevation: any;\n getLineColor: any;\n getLineWidth: any;\n getPolygon?: any;\n getPosition?: any;\n }\n };\n }\n\n private _renderPolygonLayer(): PolygonLayer {\n const {data, getHexagon, updateTriggers, coverage} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell-hifi', PolygonLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPolygon = mergeTriggers(updateTriggers.getHexagon, coverage);\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell-hifi',\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n _normalize: false,\n _windingOrder: 'CCW',\n positionFormat: 'XY',\n getPolygon: (object, objectInfo) => {\n const hexagonId = getHexagon(object, objectInfo);\n return flattenPolygon(h3ToPolygon(hexagonId, coverage));\n }\n }\n );\n }\n\n private _renderColumnLayer(): ColumnLayer {\n const {data, getHexagon, updateTriggers} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell', ColumnLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPosition = updateTriggers.getHexagon;\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell',\n flatShading: true,\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n diskResolution: 6, // generate an extruded hexagon as the base geometry\n radius: 1,\n vertices: this.state.vertices,\n getPosition: getHexagonCentroid.bind(null, getHexagon)\n }\n );\n }\n}\n","import {h3SetToMultiPolygon, H3IndexInput} from 'h3-js';\n\nimport {AccessorFunction, createIterable, UpdateParameters, DefaultProps} from '@deck.gl/core';\nimport {H3HexagonLayer} from '@deck.gl/geo-layers';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\n\nconst defaultProps: DefaultProps = {\n getHexagons: {type: 'accessor', value: d => d.hexagons}\n};\n\n/** All properties supported by H3ClusterLayer. */\nexport type H3ClusterLayerProps = _H3ClusterLayerProps &\n GeoCellLayerProps;\n\n/** Properties added by H3ClusterLayer. */\ntype _H3ClusterLayerProps = {\n /**\n * Called for each data object to retrieve the hexagon identifiers.\n *\n * By default, it reads `hexagons` property of data object.\n */\n getHexagons?: AccessorFunction;\n};\n\nexport default class H3ClusterLayer extends GeoCellLayer<\n DataT,\n Required<_H3ClusterLayerProps> & ExtraProps\n> {\n static layerName = 'H3ClusterLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n H3HexagonLayer._checkH3Lib();\n }\n\n updateState({props, changeFlags}: UpdateParameters): void {\n if (\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagons)\n ) {\n const {data, getHexagons} = props;\n const polygons: {polygon: number[][][]}[] = [];\n\n const {iterable, objectInfo} = createIterable(data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexagons = getHexagons(object, objectInfo);\n const multiPolygon = h3SetToMultiPolygon(hexagons, true);\n\n for (const polygon of multiPolygon) {\n polygons.push(this.getSubLayerRow({polygon}, object, objectInfo.index));\n }\n }\n\n this.setState({polygons});\n }\n }\n\n indexToBounds(): Partial {\n return {\n data: this.state.polygons,\n getPolygon: d => d.polygon\n };\n }\n}\n","import type {NumericArray} from '@math.gl/core';\nimport {GLTFMaterialParser} from '@luma.gl/experimental';\nimport {Model, pbr} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport type {UpdateParameters, DefaultProps, LayerContext} from '@deck.gl/core';\nimport {SimpleMeshLayer, SimpleMeshLayerProps} from '@deck.gl/mesh-layers';\n\nimport vs from './mesh-layer-vertex.glsl';\nimport fs from './mesh-layer-fragment.glsl';\n\nexport type Mesh = {\n attributes: MeshAttributes;\n indices?: MeshAttribute;\n};\n\nfunction validateGeometryAttributes(attributes) {\n const hasColorAttribute = attributes.COLOR_0 || attributes.colors;\n if (!hasColorAttribute) {\n attributes.colors = {constant: true, value: new Float32Array([1, 1, 1])};\n }\n}\n\nconst defaultProps: DefaultProps = {\n pbrMaterial: {type: 'object', value: null},\n featureIds: {type: 'array', value: null, optional: true}\n};\n\n/** All properties supported by MeshLayer. */\nexport type MeshLayerProps = _MeshLayerProps & SimpleMeshLayerProps;\n\n/** Properties added by MeshLayer. */\ntype _MeshLayerProps = {\n /**\n * PBR material object. _lighting must be pbr for this to work\n */\n pbrMaterial?: any; // TODO add type when converting Tile3DLayer\n\n /**\n * List of feature ids.\n */\n featureIds?: NumericArray | null;\n};\n\nexport default class MeshLayer extends SimpleMeshLayer<\n DataT,\n Required<_MeshLayerProps> & ExtraProps\n> {\n static layerName = 'MeshLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n const modules = shaders.modules;\n modules.push(pbr);\n return {...shaders, vs, fs};\n }\n\n initializeState() {\n const {featureIds} = this.props;\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n if (featureIds) {\n // attributeManager is always defined in a primitive layer\n attributeManager!.add({\n featureIdsPickingColors: {\n type: GL.UNSIGNED_BYTE,\n size: 3,\n noAlloc: true,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateFeatureIdsPickingColors\n }\n });\n }\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n\n const {props, oldProps} = params;\n if (props.pbrMaterial !== oldProps.pbrMaterial) {\n this.updatePbrMaterialUniforms(props.pbrMaterial);\n }\n }\n\n draw(opts) {\n const {featureIds} = this.props;\n if (!this.state.model) {\n return;\n }\n this.state.model.setUniforms({\n // Needed for PBR (TODO: find better way to get it)\n // eslint-disable-next-line camelcase\n u_Camera: this.state.model.getUniforms().project_uCameraPosition,\n pickFeatureIds: Boolean(featureIds)\n });\n\n super.draw(opts);\n }\n\n protected getModel(mesh: Mesh): Model {\n const {id, pbrMaterial} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n const shaders = this.getShaders();\n validateGeometryAttributes(mesh.attributes);\n const model = new Model(this.context.gl, {\n ...this.getShaders(),\n id,\n geometry: mesh,\n defines: {\n ...shaders.defines,\n ...materialParser?.defines,\n HAS_UV_REGIONS: mesh.attributes.uvRegions\n },\n parameters: materialParser?.parameters,\n isInstanced: true\n });\n\n return model;\n }\n\n updatePbrMaterialUniforms(pbrMaterial) {\n const {model} = this.state;\n if (model) {\n const {mesh} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n model.setUniforms(materialParser.uniforms);\n }\n }\n\n parseMaterial(pbrMaterial, mesh) {\n const unlit = Boolean(\n pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture\n );\n\n this.state.materialParser?.delete();\n\n return new GLTFMaterialParser(this.context.gl, {\n attributes: {NORMAL: mesh.attributes.normals, TEXCOORD_0: mesh.attributes.texCoords},\n material: {unlit, ...pbrMaterial},\n pbrDebug: false,\n imageBasedLightingEnvironment: null,\n lights: true,\n useTangents: false\n });\n }\n\n calculateFeatureIdsPickingColors(attribute) {\n // This updater is only called if featureIds is not null\n const featureIds = this.props.featureIds!;\n const value = new Uint8ClampedArray(featureIds.length * attribute.size);\n\n const pickingColor = [];\n for (let index = 0; index < featureIds.length; index++) {\n this.encodePickingColor(featureIds[index], pickingColor);\n\n value[index * 3] = pickingColor[0];\n value[index * 3 + 1] = pickingColor[1];\n value[index * 3 + 2] = pickingColor[2];\n }\n\n attribute.value = value;\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n this.state.materialParser?.delete();\n this.setState({materialParser: null});\n }\n}\n","export default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-vs\n\n// Scale the model\nuniform float sizeScale;\nuniform bool composeModelMatrix;\nuniform bool pickFeatureIds;\n\n// Primitive attributes\nin vec3 positions;\nin vec3 normals;\nin vec3 colors;\nin vec2 texCoords;\nin vec4 uvRegions;\nin vec3 featureIdsPickingColors;\n\n// Instance attributes\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nin mat3 instanceModelMatrix;\n\n// Outputs to fragment shader\nout vec2 vTexCoord;\nout vec3 cameraPosition;\nout vec3 normals_commonspace;\nout vec4 position_commonspace;\nout vec4 vColor;\n\nvec2 applyUVRegion(vec2 uv) {\n #ifdef HAS_UV_REGIONS\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/geometryUVRegion.cmn.md\n return fract(uv) * (uvRegions.zw - uvRegions.xy) + uvRegions.xy;\n #else\n return uv;\n #endif\n}\n\nvoid main(void) {\n vec2 uv = applyUVRegion(texCoords);\n geometry.uv = uv;\n\n if (pickFeatureIds) {\n geometry.pickingColor = featureIdsPickingColors;\n } else {\n geometry.pickingColor = instancePickingColors;\n }\n\n vTexCoord = uv;\n cameraPosition = project_uCameraPosition;\n vColor = vec4(colors * instanceColors.rgb, instanceColors.a);\n\n vec3 pos = (instanceModelMatrix * positions) * sizeScale;\n vec3 projectedPosition = project_position(positions);\n position_commonspace = vec4(projectedPosition, 1.0);\n gl_Position = project_common_position_to_clipspace(position_commonspace);\n\n geometry.position = position_commonspace;\n normals_commonspace = project_normal(instanceModelMatrix * normals);\n geometry.normal = normals_commonspace;\n\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n #ifdef MODULE_PBR\n // set PBR data\n pbr_vPosition = geometry.position.xyz;\n #ifdef HAS_NORMALS\n pbr_vNormal = geometry.normal;\n #endif\n\n #ifdef HAS_UV\n pbr_vUV = uv;\n #else\n pbr_vUV = vec2(0., 0.);\n #endif\n geometry.uv = pbr_vUV;\n #endif\n\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","export default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-fs\n\nprecision highp float;\n\nuniform bool hasTexture;\nuniform sampler2D sampler;\nuniform bool flatShading;\nuniform float opacity;\n\nin vec2 vTexCoord;\nin vec3 cameraPosition;\nin vec3 normals_commonspace;\nin vec4 position_commonspace;\nin vec4 vColor;\n\nout vec4 fragColor;\n\nvoid main(void) {\n \n#ifdef MODULE_PBR\n\n fragColor = vColor * pbr_filterColor(vec4(0));\n geometry.uv = pbr_vUV;\n fragColor.a *= opacity;\n\n#else\n\n geometry.uv = vTexCoord;\n\n vec3 normal;\n if (flatShading) {\n\n// NOTE(Tarek): This is necessary because\n// headless.gl reports the extension as\n// available but does not support it in\n// the shader.\n#ifdef DERIVATIVES_AVAILABLE\n normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n#else\n normal = vec3(0.0, 0.0, 1.0);\n#endif\n } else {\n normal = normals_commonspace;\n }\n\n vec4 color = hasTexture ? texture(sampler, vTexCoord) : vColor;\n vec3 lightColor = lighting_getLightColor(color.rgb, cameraPosition, position_commonspace.xyz, normal);\n fragColor = vec4(lightColor, color.a * opacity);\n\n#endif\n\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","export const WGS84_RADIUS_X = 6378137.0;\nexport const WGS84_RADIUS_Y = 6378137.0;\nexport const WGS84_RADIUS_Z = 6356752.3142451793;\nexport const WGS84_CONSTANTS = {\n radii: [WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z],\n radiiSquared: [WGS84_RADIUS_X * WGS84_RADIUS_X, WGS84_RADIUS_Y * WGS84_RADIUS_Y, WGS84_RADIUS_Z * WGS84_RADIUS_Z],\n oneOverRadii: [1.0 / WGS84_RADIUS_X, 1.0 / WGS84_RADIUS_Y, 1.0 / WGS84_RADIUS_Z],\n oneOverRadiiSquared: [1.0 / (WGS84_RADIUS_X * WGS84_RADIUS_X), 1.0 / (WGS84_RADIUS_Y * WGS84_RADIUS_Y), 1.0 / (WGS84_RADIUS_Z * WGS84_RADIUS_Z)],\n maximumRadius: Math.max(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z),\n centerToleranceSquared: 1e-1\n};\n//# sourceMappingURL=constants.js.map","import { Vector3, toRadians, toDegrees, config } from '@math.gl/core';\nimport { WGS84_CONSTANTS } from './constants';\n\nfunction identity(x) {\n return x;\n}\n\nconst scratchVector = new Vector3();\nexport function fromCartographic(cartographic, result = [], map = identity) {\n if ('longitude' in cartographic) {\n result[0] = map(cartographic.longitude);\n result[1] = map(cartographic.latitude);\n result[2] = cartographic.height;\n } else if ('x' in cartographic) {\n result[0] = map(cartographic.x);\n result[1] = map(cartographic.y);\n result[2] = cartographic.z;\n } else {\n result[0] = map(cartographic[0]);\n result[1] = map(cartographic[1]);\n result[2] = cartographic[2];\n }\n\n return result;\n}\nexport function fromCartographicToRadians(cartographic, vector = []) {\n return fromCartographic(cartographic, vector, config._cartographicRadians ? identity : toRadians);\n}\nexport function fromCartographicToDegrees(cartographic, vector = []) {\n return fromCartographic(cartographic, vector, config._cartographicRadians ? toDegrees : identity);\n}\nexport function toCartographic(vector, cartographic, map = identity) {\n if ('longitude' in cartographic) {\n cartographic.longitude = map(vector[0]);\n cartographic.latitude = map(vector[1]);\n cartographic.height = vector[2];\n } else if ('x' in cartographic) {\n cartographic.x = map(vector[0]);\n cartographic.y = map(vector[1]);\n cartographic.z = vector[2];\n } else {\n cartographic[0] = map(vector[0]);\n cartographic[1] = map(vector[1]);\n cartographic[2] = vector[2];\n }\n\n return cartographic;\n}\nexport function toCartographicFromRadians(vector, cartographic) {\n return toCartographic(vector, cartographic, config._cartographicRadians ? identity : toDegrees);\n}\nexport function toCartographicFromDegrees(vector, cartographic) {\n return toCartographic(vector, cartographic, config._cartographicRadians ? toRadians : identity);\n}\nexport function isWGS84(vector) {\n if (!vector) {\n return false;\n }\n\n scratchVector.from(vector);\n const {\n oneOverRadiiSquared,\n centerToleranceSquared\n } = WGS84_CONSTANTS;\n const x2 = vector[0] * vector[0] * oneOverRadiiSquared[0];\n const y2 = vector[1] * vector[1] * oneOverRadiiSquared[1];\n const z2 = vector[2] * vector[2] * oneOverRadiiSquared[2];\n return Math.abs(x2 + y2 + z2 - 1) < centerToleranceSquared;\n}\n//# sourceMappingURL=type-utils.js.map","import { Vector3, _MathUtils } from '@math.gl/core';\nconst scratchVector = new Vector3();\nconst scaleToGeodeticSurfaceIntersection = new Vector3();\nconst scaleToGeodeticSurfaceGradient = new Vector3();\nexport default function scaleToGeodeticSurface(cartesian, ellipsoid, result = []) {\n const {\n oneOverRadii,\n oneOverRadiiSquared,\n centerToleranceSquared\n } = ellipsoid;\n scratchVector.from(cartesian);\n const positionX = scratchVector.x;\n const positionY = scratchVector.y;\n const positionZ = scratchVector.z;\n const oneOverRadiiX = oneOverRadii.x;\n const oneOverRadiiY = oneOverRadii.y;\n const oneOverRadiiZ = oneOverRadii.z;\n const x2 = positionX * positionX * oneOverRadiiX * oneOverRadiiX;\n const y2 = positionY * positionY * oneOverRadiiY * oneOverRadiiY;\n const z2 = positionZ * positionZ * oneOverRadiiZ * oneOverRadiiZ;\n const squaredNorm = x2 + y2 + z2;\n const ratio = Math.sqrt(1.0 / squaredNorm);\n\n if (!Number.isFinite(ratio)) {\n return undefined;\n }\n\n const intersection = scaleToGeodeticSurfaceIntersection;\n intersection.copy(cartesian).scale(ratio);\n\n if (squaredNorm < centerToleranceSquared) {\n return intersection.to(result);\n }\n\n const oneOverRadiiSquaredX = oneOverRadiiSquared.x;\n const oneOverRadiiSquaredY = oneOverRadiiSquared.y;\n const oneOverRadiiSquaredZ = oneOverRadiiSquared.z;\n const gradient = scaleToGeodeticSurfaceGradient;\n gradient.set(intersection.x * oneOverRadiiSquaredX * 2.0, intersection.y * oneOverRadiiSquaredY * 2.0, intersection.z * oneOverRadiiSquaredZ * 2.0);\n let lambda = (1.0 - ratio) * scratchVector.len() / (0.5 * gradient.len());\n let correction = 0.0;\n let xMultiplier;\n let yMultiplier;\n let zMultiplier;\n let func;\n\n do {\n lambda -= correction;\n xMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredX);\n yMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredY);\n zMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredZ);\n const xMultiplier2 = xMultiplier * xMultiplier;\n const yMultiplier2 = yMultiplier * yMultiplier;\n const zMultiplier2 = zMultiplier * zMultiplier;\n const xMultiplier3 = xMultiplier2 * xMultiplier;\n const yMultiplier3 = yMultiplier2 * yMultiplier;\n const zMultiplier3 = zMultiplier2 * zMultiplier;\n func = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0;\n const denominator = x2 * xMultiplier3 * oneOverRadiiSquaredX + y2 * yMultiplier3 * oneOverRadiiSquaredY + z2 * zMultiplier3 * oneOverRadiiSquaredZ;\n const derivative = -2.0 * denominator;\n correction = func / derivative;\n } while (Math.abs(func) > _MathUtils.EPSILON12);\n\n return scratchVector.scale([xMultiplier, yMultiplier, zMultiplier]).to(result);\n}\n//# sourceMappingURL=scale-to-geodetic-surface.js.map","import { Vector3, assert, equals as equalsEpsilon } from '@math.gl/core';\nconst EPSILON14 = 1e-14;\nconst scratchOrigin = new Vector3();\nconst VECTOR_PRODUCT_LOCAL_FRAME = {\n up: {\n south: 'east',\n north: 'west',\n west: 'south',\n east: 'north'\n },\n down: {\n south: 'west',\n north: 'east',\n west: 'north',\n east: 'south'\n },\n south: {\n up: 'west',\n down: 'east',\n west: 'down',\n east: 'up'\n },\n north: {\n up: 'east',\n down: 'west',\n west: 'up',\n east: 'down'\n },\n west: {\n up: 'north',\n down: 'south',\n north: 'down',\n south: 'up'\n },\n east: {\n up: 'south',\n down: 'north',\n north: 'up',\n south: 'down'\n }\n};\nconst degeneratePositionLocalFrame = {\n north: [-1, 0, 0],\n east: [0, 1, 0],\n up: [0, 0, 1],\n south: [1, 0, 0],\n west: [0, -1, 0],\n down: [0, 0, -1]\n};\nconst scratchAxisVectors = {\n east: new Vector3(),\n north: new Vector3(),\n up: new Vector3(),\n west: new Vector3(),\n south: new Vector3(),\n down: new Vector3()\n};\nconst scratchVector1 = new Vector3();\nconst scratchVector2 = new Vector3();\nconst scratchVector3 = new Vector3();\nexport default function localFrameToFixedFrame(ellipsoid, firstAxis, secondAxis, thirdAxis, cartesianOrigin, result) {\n const thirdAxisInferred = VECTOR_PRODUCT_LOCAL_FRAME[firstAxis] && VECTOR_PRODUCT_LOCAL_FRAME[firstAxis][secondAxis];\n assert(thirdAxisInferred && (!thirdAxis || thirdAxis === thirdAxisInferred));\n let firstAxisVector;\n let secondAxisVector;\n let thirdAxisVector;\n const origin = scratchOrigin.copy(cartesianOrigin);\n const atPole = equalsEpsilon(origin.x, 0.0, EPSILON14) && equalsEpsilon(origin.y, 0.0, EPSILON14);\n\n if (atPole) {\n const sign = Math.sign(origin.z);\n firstAxisVector = scratchVector1.fromArray(degeneratePositionLocalFrame[firstAxis]);\n\n if (firstAxis !== 'east' && firstAxis !== 'west') {\n firstAxisVector.scale(sign);\n }\n\n secondAxisVector = scratchVector2.fromArray(degeneratePositionLocalFrame[secondAxis]);\n\n if (secondAxis !== 'east' && secondAxis !== 'west') {\n secondAxisVector.scale(sign);\n }\n\n thirdAxisVector = scratchVector3.fromArray(degeneratePositionLocalFrame[thirdAxis]);\n\n if (thirdAxis !== 'east' && thirdAxis !== 'west') {\n thirdAxisVector.scale(sign);\n }\n } else {\n const {\n up,\n east,\n north\n } = scratchAxisVectors;\n east.set(-origin.y, origin.x, 0.0).normalize();\n ellipsoid.geodeticSurfaceNormal(origin, up);\n north.copy(up).cross(east);\n const {\n down,\n west,\n south\n } = scratchAxisVectors;\n down.copy(up).scale(-1);\n west.copy(east).scale(-1);\n south.copy(north).scale(-1);\n firstAxisVector = scratchAxisVectors[firstAxis];\n secondAxisVector = scratchAxisVectors[secondAxis];\n thirdAxisVector = scratchAxisVectors[thirdAxis];\n }\n\n result[0] = firstAxisVector.x;\n result[1] = firstAxisVector.y;\n result[2] = firstAxisVector.z;\n result[3] = 0.0;\n result[4] = secondAxisVector.x;\n result[5] = secondAxisVector.y;\n result[6] = secondAxisVector.z;\n result[7] = 0.0;\n result[8] = thirdAxisVector.x;\n result[9] = thirdAxisVector.y;\n result[10] = thirdAxisVector.z;\n result[11] = 0.0;\n result[12] = origin.x;\n result[13] = origin.y;\n result[14] = origin.z;\n result[15] = 1.0;\n return result;\n}\n//# sourceMappingURL=ellipsoid-transform.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Vector3, Matrix4, assert, equals, _MathUtils } from '@math.gl/core';\nimport * as vec3 from 'gl-matrix/vec3';\nimport { WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z } from '../constants';\nimport { fromCartographicToRadians, toCartographicFromRadians } from '../type-utils';\nimport scaleToGeodeticSurface from './helpers/scale-to-geodetic-surface';\nimport localFrameToFixedFrame from './helpers/ellipsoid-transform';\nconst scratchVector = new Vector3();\nconst scratchNormal = new Vector3();\nconst scratchK = new Vector3();\nconst scratchPosition = new Vector3();\nconst scratchHeight = new Vector3();\nconst scratchCartesian = new Vector3();\nlet wgs84;\nexport default class Ellipsoid {\n constructor(x = 0.0, y = 0.0, z = 0.0) {\n _defineProperty(this, \"radii\", void 0);\n\n _defineProperty(this, \"radiiSquared\", void 0);\n\n _defineProperty(this, \"radiiToTheFourth\", void 0);\n\n _defineProperty(this, \"oneOverRadii\", void 0);\n\n _defineProperty(this, \"oneOverRadiiSquared\", void 0);\n\n _defineProperty(this, \"minimumRadius\", void 0);\n\n _defineProperty(this, \"maximumRadius\", void 0);\n\n _defineProperty(this, \"centerToleranceSquared\", _MathUtils.EPSILON1);\n\n _defineProperty(this, \"squaredXOverSquaredZ\", void 0);\n\n assert(x >= 0.0);\n assert(y >= 0.0);\n assert(z >= 0.0);\n this.radii = new Vector3(x, y, z);\n this.radiiSquared = new Vector3(x * x, y * y, z * z);\n this.radiiToTheFourth = new Vector3(x * x * x * x, y * y * y * y, z * z * z * z);\n this.oneOverRadii = new Vector3(x === 0.0 ? 0.0 : 1.0 / x, y === 0.0 ? 0.0 : 1.0 / y, z === 0.0 ? 0.0 : 1.0 / z);\n this.oneOverRadiiSquared = new Vector3(x === 0.0 ? 0.0 : 1.0 / (x * x), y === 0.0 ? 0.0 : 1.0 / (y * y), z === 0.0 ? 0.0 : 1.0 / (z * z));\n this.minimumRadius = Math.min(x, y, z);\n this.maximumRadius = Math.max(x, y, z);\n\n if (this.radiiSquared.z !== 0) {\n this.squaredXOverSquaredZ = this.radiiSquared.x / this.radiiSquared.z;\n }\n\n Object.freeze(this);\n }\n\n equals(right) {\n return this === right || Boolean(right && this.radii.equals(right.radii));\n }\n\n toString() {\n return this.radii.toString();\n }\n\n cartographicToCartesian(cartographic, result = [0, 0, 0]) {\n const normal = scratchNormal;\n const k = scratchK;\n const [,, height] = cartographic;\n this.geodeticSurfaceNormalCartographic(cartographic, normal);\n k.copy(this.radiiSquared).scale(normal);\n const gamma = Math.sqrt(normal.dot(k));\n k.scale(1 / gamma);\n normal.scale(height);\n k.add(normal);\n return k.to(result);\n }\n\n cartesianToCartographic(cartesian, result = [0, 0, 0]) {\n scratchCartesian.from(cartesian);\n const point = this.scaleToGeodeticSurface(scratchCartesian, scratchPosition);\n\n if (!point) {\n return undefined;\n }\n\n const normal = this.geodeticSurfaceNormal(point, scratchNormal);\n const h = scratchHeight;\n h.copy(scratchCartesian).subtract(point);\n const longitude = Math.atan2(normal.y, normal.x);\n const latitude = Math.asin(normal.z);\n const height = Math.sign(vec3.dot(h, scratchCartesian)) * vec3.length(h);\n return toCartographicFromRadians([longitude, latitude, height], result);\n }\n\n eastNorthUpToFixedFrame(origin, result = new Matrix4()) {\n return localFrameToFixedFrame(this, 'east', 'north', 'up', origin, result);\n }\n\n localFrameToFixedFrame(firstAxis, secondAxis, thirdAxis, origin, result = new Matrix4()) {\n return localFrameToFixedFrame(this, firstAxis, secondAxis, thirdAxis, origin, result);\n }\n\n geocentricSurfaceNormal(cartesian, result = [0, 0, 0]) {\n return scratchVector.from(cartesian).normalize().to(result);\n }\n\n geodeticSurfaceNormalCartographic(cartographic, result = [0, 0, 0]) {\n const cartographicVectorRadians = fromCartographicToRadians(cartographic);\n const longitude = cartographicVectorRadians[0];\n const latitude = cartographicVectorRadians[1];\n const cosLatitude = Math.cos(latitude);\n scratchVector.set(cosLatitude * Math.cos(longitude), cosLatitude * Math.sin(longitude), Math.sin(latitude)).normalize();\n return scratchVector.to(result);\n }\n\n geodeticSurfaceNormal(cartesian, result = [0, 0, 0]) {\n return scratchVector.from(cartesian).scale(this.oneOverRadiiSquared).normalize().to(result);\n }\n\n scaleToGeodeticSurface(cartesian, result) {\n return scaleToGeodeticSurface(cartesian, this, result);\n }\n\n scaleToGeocentricSurface(cartesian, result = [0, 0, 0]) {\n scratchPosition.from(cartesian);\n const positionX = scratchPosition.x;\n const positionY = scratchPosition.y;\n const positionZ = scratchPosition.z;\n const oneOverRadiiSquared = this.oneOverRadiiSquared;\n const beta = 1.0 / Math.sqrt(positionX * positionX * oneOverRadiiSquared.x + positionY * positionY * oneOverRadiiSquared.y + positionZ * positionZ * oneOverRadiiSquared.z);\n return scratchPosition.multiplyScalar(beta).to(result);\n }\n\n transformPositionToScaledSpace(position, result = [0, 0, 0]) {\n return scratchPosition.from(position).scale(this.oneOverRadii).to(result);\n }\n\n transformPositionFromScaledSpace(position, result = [0, 0, 0]) {\n return scratchPosition.from(position).scale(this.radii).to(result);\n }\n\n getSurfaceNormalIntersectionWithZAxis(position, buffer = 0, result = [0, 0, 0]) {\n assert(equals(this.radii.x, this.radii.y, _MathUtils.EPSILON15));\n assert(this.radii.z > 0);\n scratchPosition.from(position);\n const z = scratchPosition.z * (1 - this.squaredXOverSquaredZ);\n\n if (Math.abs(z) >= this.radii.z - buffer) {\n return undefined;\n }\n\n return scratchPosition.set(0.0, 0.0, z).to(result);\n }\n\n}\n\n_defineProperty(Ellipsoid, \"WGS84\", new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z));\n//# sourceMappingURL=ellipsoid.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class DoublyLinkedListNode {\n constructor(item, previous, next) {\n _defineProperty(this, \"item\", void 0);\n\n _defineProperty(this, \"previous\", void 0);\n\n _defineProperty(this, \"next\", void 0);\n\n this.item = item;\n this.previous = previous;\n this.next = next;\n }\n\n}\n//# sourceMappingURL=doubly-linked-list-node.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport DoublyLinkedListNode from '../utils/doubly-linked-list-node';\nexport default class DoublyLinkedList {\n constructor() {\n _defineProperty(this, \"head\", null);\n\n _defineProperty(this, \"tail\", null);\n\n _defineProperty(this, \"_length\", 0);\n }\n\n get length() {\n return this._length;\n }\n\n add(item) {\n const node = new DoublyLinkedListNode(item, this.tail, null);\n\n if (this.tail) {\n this.tail.next = node;\n this.tail = node;\n } else {\n this.head = node;\n this.tail = node;\n }\n\n ++this._length;\n return node;\n }\n\n remove(node) {\n if (!node) {\n return;\n }\n\n if (node.previous && node.next) {\n node.previous.next = node.next;\n node.next.previous = node.previous;\n } else if (node.previous) {\n node.previous.next = null;\n this.tail = node.previous;\n } else if (node.next) {\n node.next.previous = null;\n this.head = node.next;\n } else {\n this.head = null;\n this.tail = null;\n }\n\n node.next = null;\n node.previous = null;\n --this._length;\n }\n\n splice(node, nextNode) {\n if (node === nextNode) {\n return;\n }\n\n this.remove(nextNode);\n\n this._insert(node, nextNode);\n }\n\n _insert(node, nextNode) {\n const oldNodeNext = node.next;\n node.next = nextNode;\n\n if (this.tail === node) {\n this.tail = nextNode;\n } else {\n oldNodeNext.previous = nextNode;\n }\n\n nextNode.next = oldNodeNext;\n nextNode.previous = node;\n ++this._length;\n }\n\n}\n//# sourceMappingURL=doubly-linked-list.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport DoublyLinkedList from '../utils/doubly-linked-list';\n\nfunction defined(x) {\n return x !== undefined && x !== null;\n}\n\nexport default class TilesetCache {\n constructor() {\n _defineProperty(this, \"_list\", void 0);\n\n _defineProperty(this, \"_sentinel\", void 0);\n\n _defineProperty(this, \"_trimTiles\", void 0);\n\n this._list = new DoublyLinkedList();\n this._sentinel = this._list.add('sentinel');\n this._trimTiles = false;\n }\n\n reset() {\n this._list.splice(this._list.tail, this._sentinel);\n }\n\n touch(tile) {\n const node = tile._cacheNode;\n\n if (defined(node)) {\n this._list.splice(this._sentinel, node);\n }\n }\n\n add(tileset, tile, addCallback) {\n if (!defined(tile._cacheNode)) {\n tile._cacheNode = this._list.add(tile);\n\n if (addCallback) {\n addCallback(tileset, tile);\n }\n }\n }\n\n unloadTile(tileset, tile, unloadCallback) {\n const node = tile._cacheNode;\n\n if (!defined(node)) {\n return;\n }\n\n this._list.remove(node);\n\n tile._cacheNode = undefined;\n\n if (unloadCallback) {\n unloadCallback(tileset, tile);\n }\n }\n\n unloadTiles(tileset, unloadCallback) {\n const trimTiles = this._trimTiles;\n this._trimTiles = false;\n const list = this._list;\n const maximumMemoryUsageInBytes = tileset.maximumMemoryUsage * 1024 * 1024;\n const sentinel = this._sentinel;\n let node = list.head;\n\n while (node !== sentinel && (tileset.gpuMemoryUsageInBytes > maximumMemoryUsageInBytes || trimTiles)) {\n const tile = node.item;\n node = node.next;\n this.unloadTile(tileset, tile, unloadCallback);\n }\n }\n\n trim() {\n this._trimTiles = true;\n }\n\n}\n//# sourceMappingURL=tileset-cache.js.map","import { Vector3 } from '@math.gl/core';\nimport { CullingVolume, Plane } from '@math.gl/culling';\nimport { Ellipsoid } from '@math.gl/geospatial';\nconst scratchVector = new Vector3();\nconst scratchPosition = new Vector3();\nconst cullingVolume = new CullingVolume([new Plane(), new Plane(), new Plane(), new Plane(), new Plane(), new Plane()]);\nexport function getFrameState(viewport, frameNumber) {\n const {\n cameraDirection,\n cameraUp,\n height\n } = viewport;\n const {\n metersPerUnit\n } = viewport.distanceScales;\n const viewportCenterCartesian = worldToCartesian(viewport, viewport.center);\n const enuToFixedTransform = Ellipsoid.WGS84.eastNorthUpToFixedFrame(viewportCenterCartesian);\n const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);\n const cameraPositionCartesian = Ellipsoid.WGS84.cartographicToCartesian(cameraPositionCartographic, new Vector3());\n const cameraDirectionCartesian = new Vector3(enuToFixedTransform.transformAsVector(new Vector3(cameraDirection).scale(metersPerUnit))).normalize();\n const cameraUpCartesian = new Vector3(enuToFixedTransform.transformAsVector(new Vector3(cameraUp).scale(metersPerUnit))).normalize();\n commonSpacePlanesToWGS84(viewport);\n const ViewportClass = viewport.constructor;\n const {\n longitude,\n latitude,\n width,\n bearing,\n zoom\n } = viewport;\n const topDownViewport = new ViewportClass({\n longitude,\n latitude,\n height,\n width,\n bearing,\n zoom,\n pitch: 0\n });\n return {\n camera: {\n position: cameraPositionCartesian,\n direction: cameraDirectionCartesian,\n up: cameraUpCartesian\n },\n viewport,\n topDownViewport,\n height,\n cullingVolume,\n frameNumber,\n sseDenominator: 1.15\n };\n}\nexport function limitSelectedTiles(tiles, frameState, maximumTilesSelected) {\n if (maximumTilesSelected === 0 || tiles.length <= maximumTilesSelected) {\n return [tiles, []];\n }\n\n const tuples = [];\n const {\n longitude: viewportLongitude,\n latitude: viewportLatitude\n } = frameState.viewport;\n\n for (const [index, tile] of tiles.entries()) {\n const [longitude, latitude] = tile.header.mbs;\n const deltaLon = Math.abs(viewportLongitude - longitude);\n const deltaLat = Math.abs(viewportLatitude - latitude);\n const distance = Math.sqrt(deltaLat * deltaLat + deltaLon * deltaLon);\n tuples.push([index, distance]);\n }\n\n const tuplesSorted = tuples.sort((a, b) => a[1] - b[1]);\n const selectedTiles = [];\n\n for (let i = 0; i < maximumTilesSelected; i++) {\n selectedTiles.push(tiles[tuplesSorted[i][0]]);\n }\n\n const unselectedTiles = [];\n\n for (let i = maximumTilesSelected; i < tuplesSorted.length; i++) {\n unselectedTiles.push(tiles[tuplesSorted[i][0]]);\n }\n\n return [selectedTiles, unselectedTiles];\n}\n\nfunction commonSpacePlanesToWGS84(viewport) {\n const frustumPlanes = viewport.getFrustumPlanes();\n const nearCenterCommon = closestPointOnPlane(frustumPlanes.near, viewport.cameraPosition);\n const nearCenterCartesian = worldToCartesian(viewport, nearCenterCommon);\n const cameraCartesian = worldToCartesian(viewport, viewport.cameraPosition, scratchPosition);\n let i = 0;\n cullingVolume.planes[i++].fromPointNormal(nearCenterCartesian, scratchVector.copy(nearCenterCartesian).subtract(cameraCartesian));\n\n for (const dir in frustumPlanes) {\n if (dir === 'near') {\n continue;\n }\n\n const plane = frustumPlanes[dir];\n const posCommon = closestPointOnPlane(plane, nearCenterCommon, scratchPosition);\n const cartesianPos = worldToCartesian(viewport, posCommon, scratchPosition);\n cullingVolume.planes[i++].fromPointNormal(cartesianPos, scratchVector.copy(nearCenterCartesian).subtract(cartesianPos));\n }\n}\n\nfunction closestPointOnPlane(plane, refPoint, out = new Vector3()) {\n const distanceToRef = plane.normal.dot(refPoint);\n out.copy(plane.normal).scale(plane.distance - distanceToRef).add(refPoint);\n return out;\n}\n\nfunction worldToCartesian(viewport, point, out = new Vector3()) {\n const cartographicPos = viewport.unprojectPosition(point);\n return Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, out);\n}\n//# sourceMappingURL=frame-state.js.map","import { Vector3 } from '@math.gl/core';\nimport { BoundingSphere, OrientedBoundingBox } from '@math.gl/culling';\nimport { Ellipsoid } from '@math.gl/geospatial';\nconst WGS84_RADIUS_X = 6378137.0;\nconst WGS84_RADIUS_Y = 6378137.0;\nconst WGS84_RADIUS_Z = 6356752.3142451793;\nconst scratchVector = new Vector3();\nexport function getZoomFromBoundingVolume(boundingVolume, cartorgraphicCenter) {\n if (boundingVolume instanceof OrientedBoundingBox) {\n const {\n halfAxes\n } = boundingVolume;\n const obbSize = getObbSize(halfAxes);\n return Math.log2(WGS84_RADIUS_Z / (obbSize + cartorgraphicCenter[2]));\n } else if (boundingVolume instanceof BoundingSphere) {\n const {\n radius\n } = boundingVolume;\n return Math.log2(WGS84_RADIUS_Z / (radius + cartorgraphicCenter[2]));\n } else if (boundingVolume.width && boundingVolume.height) {\n const {\n width,\n height\n } = boundingVolume;\n const zoomX = Math.log2(WGS84_RADIUS_X / width);\n const zoomY = Math.log2(WGS84_RADIUS_Y / height);\n return (zoomX + zoomY) / 2;\n }\n\n return 1;\n}\nexport function getZoomFromFullExtent(fullExtent, cartorgraphicCenter, cartesianCenter) {\n const extentVertex = Ellipsoid.WGS84.cartographicToCartesian([fullExtent.xmax, fullExtent.ymax, fullExtent.zmax], new Vector3());\n const extentSize = Math.sqrt(Math.pow(extentVertex[0] - cartesianCenter[0], 2) + Math.pow(extentVertex[1] - cartesianCenter[1], 2) + Math.pow(extentVertex[2] - cartesianCenter[2], 2));\n return Math.log2(WGS84_RADIUS_Z / (extentSize + cartorgraphicCenter[2]));\n}\nexport function getZoomFromExtent(extent, cartorgraphicCenter, cartesianCenter) {\n const [xmin, ymin, xmax, ymax] = extent;\n return getZoomFromFullExtent({\n xmin,\n xmax,\n ymin,\n ymax,\n zmin: 0,\n zmax: 0\n }, cartorgraphicCenter, cartesianCenter);\n}\n\nfunction getObbSize(halfAxes) {\n halfAxes.getColumn(0, scratchVector);\n const axeY = halfAxes.getColumn(1);\n const axeZ = halfAxes.getColumn(2);\n const farthestVertex = scratchVector.add(axeY).add(axeZ);\n const size = farthestVertex.len();\n return size;\n}\n//# sourceMappingURL=zoom.js.map","export const TILE_CONTENT_STATE = {\n UNLOADED: 0,\n LOADING: 1,\n PROCESSING: 2,\n READY: 3,\n EXPIRED: 4,\n FAILED: 5\n};\nexport const TILE_REFINEMENT = {\n ADD: 1,\n REPLACE: 2\n};\nexport const TILE_TYPE = {\n EMPTY: 'empty',\n SCENEGRAPH: 'scenegraph',\n POINTCLOUD: 'pointcloud',\n MESH: 'mesh'\n};\nexport const TILESET_TYPE = {\n I3S: 'I3S',\n TILES3D: 'TILES3D'\n};\nexport const LOD_METRIC_TYPE = {\n GEOMETRIC_ERROR: 'geometricError',\n MAX_SCREEN_THRESHOLD: 'maxScreenThreshold'\n};\nexport const TILE3D_OPTIMIZATION_HINT = {\n NOT_COMPUTED: -1,\n USE_OPTIMIZATION: 1,\n SKIP_OPTIMIZATION: 0\n};\n//# sourceMappingURL=constants.js.map","import { Quaternion, Vector3, Matrix3, Matrix4, degrees } from '@math.gl/core';\nimport { BoundingSphere, OrientedBoundingBox } from '@math.gl/culling';\nimport { Ellipsoid } from '@math.gl/geospatial';\nimport { assert } from '@loaders.gl/loader-utils';\n\nfunction defined(x) {\n return x !== undefined && x !== null;\n}\n\nconst scratchScale = new Vector3();\nconst scratchNorthWest = new Vector3();\nconst scratchSouthEast = new Vector3();\nexport function createBoundingVolume(boundingVolumeHeader, transform, result) {\n assert(boundingVolumeHeader, '3D Tile: boundingVolume must be defined');\n\n if (boundingVolumeHeader.box) {\n return createBox(boundingVolumeHeader.box, transform, result);\n }\n\n if (boundingVolumeHeader.region) {\n const [west, south, east, north, minHeight, maxHeight] = boundingVolumeHeader.region;\n const northWest = Ellipsoid.WGS84.cartographicToCartesian([degrees(west), degrees(north), minHeight], scratchNorthWest);\n const southEast = Ellipsoid.WGS84.cartographicToCartesian([degrees(east), degrees(south), maxHeight], scratchSouthEast);\n const centerInCartesian = new Vector3().addVectors(northWest, southEast).multiplyScalar(0.5);\n const radius = new Vector3().subVectors(northWest, southEast).len() / 2.0;\n return createSphere([centerInCartesian[0], centerInCartesian[1], centerInCartesian[2], radius], new Matrix4());\n }\n\n if (boundingVolumeHeader.sphere) {\n return createSphere(boundingVolumeHeader.sphere, transform, result);\n }\n\n throw new Error('3D Tile: boundingVolume must contain a sphere, region, or box');\n}\n\nfunction createBox(box, transform, result) {\n const center = new Vector3(box[0], box[1], box[2]);\n transform.transform(center, center);\n let origin = [];\n\n if (box.length === 10) {\n const halfSize = box.slice(3, 6);\n const quaternion = new Quaternion();\n quaternion.fromArray(box, 6);\n const x = new Vector3([1, 0, 0]);\n const y = new Vector3([0, 1, 0]);\n const z = new Vector3([0, 0, 1]);\n x.transformByQuaternion(quaternion);\n x.scale(halfSize[0]);\n y.transformByQuaternion(quaternion);\n y.scale(halfSize[1]);\n z.transformByQuaternion(quaternion);\n z.scale(halfSize[2]);\n origin = [...x.toArray(), ...y.toArray(), ...z.toArray()];\n } else {\n origin = [...box.slice(3, 6), ...box.slice(6, 9), ...box.slice(9, 12)];\n }\n\n const xAxis = transform.transformAsVector(origin.slice(0, 3));\n const yAxis = transform.transformAsVector(origin.slice(3, 6));\n const zAxis = transform.transformAsVector(origin.slice(6, 9));\n const halfAxes = new Matrix3([xAxis[0], xAxis[1], xAxis[2], yAxis[0], yAxis[1], yAxis[2], zAxis[0], zAxis[1], zAxis[2]]);\n\n if (defined(result)) {\n result.center = center;\n result.halfAxes = halfAxes;\n return result;\n }\n\n return new OrientedBoundingBox(center, halfAxes);\n}\n\nfunction createSphere(sphere, transform, result) {\n const center = new Vector3(sphere[0], sphere[1], sphere[2]);\n transform.transform(center, center);\n const scale = transform.getScale(scratchScale);\n const uniformScale = Math.max(Math.max(scale[0], scale[1]), scale[2]);\n const radius = sphere[3] * uniformScale;\n\n if (defined(result)) {\n result.center = center;\n result.radius = radius;\n return result;\n }\n\n return new BoundingSphere(center, radius);\n}\n//# sourceMappingURL=bounding-volume.js.map","import { Matrix4, Vector3, clamp } from '@math.gl/core';\nconst scratchPositionNormal = new Vector3();\nconst scratchCartographic = new Vector3();\nconst scratchMatrix = new Matrix4();\nconst scratchCenter = new Vector3();\nconst scratchPosition = new Vector3();\nconst scratchDirection = new Vector3();\nexport function calculateDynamicScreenSpaceError(root, {\n camera,\n mapProjection\n}, options = {}) {\n const {\n dynamicScreenSpaceErrorHeightFalloff = 0.25,\n dynamicScreenSpaceErrorDensity = 0.00278\n } = options;\n let up;\n let direction;\n let height;\n let minimumHeight;\n let maximumHeight;\n const tileBoundingVolume = root.contentBoundingVolume;\n\n if (tileBoundingVolume instanceof TileBoundingRegion) {\n up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);\n direction = camera.directionWC;\n height = camera.positionCartographic.height;\n minimumHeight = tileBoundingVolume.minimumHeight;\n maximumHeight = tileBoundingVolume.maximumHeight;\n } else {\n const transformLocal = Matrix4.inverseTransformation(root.computedTransform, scratchMatrix);\n const ellipsoid = mapProjection.ellipsoid;\n const boundingVolume = tileBoundingVolume.boundingVolume;\n const centerLocal = Matrix4.multiplyByPoint(transformLocal, boundingVolume.center, scratchCenter);\n\n if (Cartesian3.magnitude(centerLocal) > ellipsoid.minimumRadius) {\n const centerCartographic = Cartographic.fromCartesian(centerLocal, ellipsoid, scratchCartographic);\n up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);\n direction = camera.directionWC;\n height = camera.positionCartographic.height;\n minimumHeight = 0.0;\n maximumHeight = centerCartographic.height * 2.0;\n } else {\n const positionLocal = Matrix4.multiplyByPoint(transformLocal, camera.positionWC, scratchPosition);\n up = Cartesian3.UNIT_Z;\n direction = Matrix4.multiplyByPointAsVector(transformLocal, camera.directionWC, scratchDirection);\n direction = Cartesian3.normalize(direction, direction);\n height = positionLocal.z;\n\n if (tileBoundingVolume instanceof TileOrientedBoundingBox) {\n const boxHeight = root._header.boundingVolume.box[11];\n minimumHeight = centerLocal.z - boxHeight;\n maximumHeight = centerLocal.z + boxHeight;\n } else if (tileBoundingVolume instanceof TileBoundingSphere) {\n const radius = boundingVolume.radius;\n minimumHeight = centerLocal.z - radius;\n maximumHeight = centerLocal.z + radius;\n }\n }\n }\n\n const heightFalloff = dynamicScreenSpaceErrorHeightFalloff;\n const heightClose = minimumHeight + (maximumHeight - minimumHeight) * heightFalloff;\n const heightFar = maximumHeight;\n const t = clamp((height - heightClose) / (heightFar - heightClose), 0.0, 1.0);\n const dot = Math.abs(Cartesian3.dot(direction, up));\n let horizonFactor = 1.0 - dot;\n horizonFactor = horizonFactor * (1.0 - t);\n return dynamicScreenSpaceErrorDensity * horizonFactor;\n}\nexport function fog(distanceToCamera, density) {\n const scalar = distanceToCamera * density;\n return 1.0 - Math.exp(-(scalar * scalar));\n}\nexport function getDynamicScreenSpaceError(tileset, distanceToCamera) {\n if (tileset.dynamicScreenSpaceError && tileset.dynamicScreenSpaceErrorComputedDensity) {\n const density = tileset.dynamicScreenSpaceErrorComputedDensity;\n const factor = tileset.dynamicScreenSpaceErrorFactor;\n const dynamicError = fog(distanceToCamera, density) * factor;\n return dynamicError;\n }\n\n return 0;\n}\nexport function getTiles3DScreenSpaceError(tile, frameState, useParentLodMetric) {\n const tileset = tile.tileset;\n const parentLodMetricValue = tile.parent && tile.parent.lodMetricValue || tile.lodMetricValue;\n const lodMetricValue = useParentLodMetric ? parentLodMetricValue : tile.lodMetricValue;\n\n if (lodMetricValue === 0.0) {\n return 0.0;\n }\n\n const distance = Math.max(tile._distanceToCamera, 1e-7);\n const {\n height,\n sseDenominator\n } = frameState;\n const {\n viewDistanceScale\n } = tileset.options;\n let error = lodMetricValue * height * (viewDistanceScale || 1.0) / (distance * sseDenominator);\n error -= getDynamicScreenSpaceError(tileset, distance);\n return error;\n}\n//# sourceMappingURL=tiles-3d-lod.js.map","import { Matrix4, Vector3 } from '@math.gl/core';\nimport { Ellipsoid } from '@math.gl/geospatial';\nconst cameraPositionCartesian = new Vector3();\nconst toEye = new Vector3();\nconst cameraPositionEnu = new Vector3();\nconst extraVertexEnu = new Vector3();\nconst projectedOriginVector = new Vector3();\nconst enuToCartesianMatrix = new Matrix4();\nconst cartesianToEnuMatrix = new Matrix4();\nexport function getLodStatus(tile, frameState) {\n if (tile.lodMetricValue === 0 || isNaN(tile.lodMetricValue)) {\n return 'DIG';\n }\n\n const screenSize = 2 * getProjectedRadius(tile, frameState);\n\n if (screenSize < 2) {\n return 'OUT';\n }\n\n if (!tile.header.children || screenSize <= tile.lodMetricValue) {\n return 'DRAW';\n } else if (tile.header.children) {\n return 'DIG';\n }\n\n return 'OUT';\n}\nexport function getProjectedRadius(tile, frameState) {\n const {\n topDownViewport: viewport\n } = frameState;\n const mbsLat = tile.header.mbs[1];\n const mbsLon = tile.header.mbs[0];\n const mbsZ = tile.header.mbs[2];\n const mbsR = tile.header.mbs[3];\n const mbsCenterCartesian = [...tile.boundingVolume.center];\n const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);\n Ellipsoid.WGS84.cartographicToCartesian(cameraPositionCartographic, cameraPositionCartesian);\n toEye.copy(cameraPositionCartesian).subtract(mbsCenterCartesian).normalize();\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(mbsCenterCartesian, enuToCartesianMatrix);\n cartesianToEnuMatrix.copy(enuToCartesianMatrix).invert();\n cameraPositionEnu.copy(cameraPositionCartesian).transform(cartesianToEnuMatrix);\n const projection = Math.sqrt(cameraPositionEnu[0] * cameraPositionEnu[0] + cameraPositionEnu[1] * cameraPositionEnu[1]);\n const extraZ = projection * projection / cameraPositionEnu[2];\n extraVertexEnu.copy([cameraPositionEnu[0], cameraPositionEnu[1], extraZ]);\n const extraVertexCartesian = extraVertexEnu.transform(enuToCartesianMatrix);\n const extraVectorCartesian = extraVertexCartesian.subtract(mbsCenterCartesian).normalize();\n const radiusVector = toEye.cross(extraVectorCartesian).normalize().scale(mbsR);\n const sphereMbsBorderVertexCartesian = radiusVector.add(mbsCenterCartesian);\n const sphereMbsBorderVertexCartographic = Ellipsoid.WGS84.cartesianToCartographic(sphereMbsBorderVertexCartesian);\n const projectedOrigin = viewport.project([mbsLon, mbsLat, mbsZ]);\n const projectedMbsBorderVertex = viewport.project(sphereMbsBorderVertexCartographic);\n const projectedRadius = projectedOriginVector.copy(projectedOrigin).subtract(projectedMbsBorderVertex).magnitude();\n return projectedRadius;\n}\n//# sourceMappingURL=i3s-lod.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { assert } from '@loaders.gl/loader-utils';\nexport default class ManagedArray {\n constructor(length = 0) {\n _defineProperty(this, \"_map\", new Map());\n\n _defineProperty(this, \"_array\", void 0);\n\n _defineProperty(this, \"_length\", void 0);\n\n this._array = new Array(length);\n this._length = length;\n }\n\n get length() {\n return this._length;\n }\n\n set length(length) {\n this._length = length;\n\n if (length > this._array.length) {\n this._array.length = length;\n }\n }\n\n get values() {\n return this._array;\n }\n\n get(index) {\n assert(index < this._array.length);\n return this._array[index];\n }\n\n set(index, element) {\n assert(index >= 0);\n\n if (index >= this.length) {\n this.length = index + 1;\n }\n\n if (this._map.has(this._array[index])) {\n this._map.delete(this._array[index]);\n }\n\n this._array[index] = element;\n\n this._map.set(element, index);\n }\n\n delete(element) {\n const index = this._map.get(element);\n\n if (index >= 0) {\n this._array.splice(index, 1);\n\n this._map.delete(element);\n\n this.length--;\n }\n }\n\n peek() {\n return this._array[this._length - 1];\n }\n\n push(element) {\n if (!this._map.has(element)) {\n const index = this.length++;\n this._array[index] = element;\n\n this._map.set(element, index);\n }\n }\n\n pop() {\n const element = this._array[--this.length];\n\n this._map.delete(element);\n\n return element;\n }\n\n reserve(length) {\n assert(length >= 0);\n\n if (length > this._array.length) {\n this._array.length = length;\n }\n }\n\n resize(length) {\n assert(length >= 0);\n this.length = length;\n }\n\n trim(length) {\n if (length === null || length === undefined) {\n length = this.length;\n }\n\n this._array.length = length;\n }\n\n reset() {\n this._array = [];\n this._map = new Map();\n this._length = 0;\n }\n\n find(target) {\n return this._map.has(target);\n }\n\n}\n//# sourceMappingURL=managed-array.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport ManagedArray from '../../utils/managed-array';\nimport { TILE_REFINEMENT } from '../../constants';\nexport const DEFAULT_PROPS = {\n loadSiblings: false,\n skipLevelOfDetail: false,\n maximumScreenSpaceError: 2,\n updateTransforms: true,\n onTraversalEnd: () => {},\n viewportTraversersMap: {},\n basePath: ''\n};\nexport default class TilesetTraverser {\n traversalFinished(frameState) {\n return true;\n }\n\n constructor(options) {\n _defineProperty(this, \"options\", void 0);\n\n _defineProperty(this, \"root\", void 0);\n\n _defineProperty(this, \"requestedTiles\", void 0);\n\n _defineProperty(this, \"selectedTiles\", void 0);\n\n _defineProperty(this, \"emptyTiles\", void 0);\n\n _defineProperty(this, \"lastUpdate\", new Date().getTime());\n\n _defineProperty(this, \"updateDebounceTime\", 1000);\n\n _defineProperty(this, \"_traversalStack\", void 0);\n\n _defineProperty(this, \"_emptyTraversalStack\", void 0);\n\n _defineProperty(this, \"_frameNumber\", void 0);\n\n this.options = { ...DEFAULT_PROPS,\n ...options\n };\n this._traversalStack = new ManagedArray();\n this._emptyTraversalStack = new ManagedArray();\n this._frameNumber = null;\n this.root = null;\n this.selectedTiles = {};\n this.requestedTiles = {};\n this.emptyTiles = {};\n }\n\n traverse(root, frameState, options) {\n this.root = root;\n this.options = { ...this.options,\n ...options\n };\n this.reset();\n this.updateTile(root, frameState);\n this._frameNumber = frameState.frameNumber;\n this.executeTraversal(root, frameState);\n }\n\n reset() {\n this.requestedTiles = {};\n this.selectedTiles = {};\n this.emptyTiles = {};\n\n this._traversalStack.reset();\n\n this._emptyTraversalStack.reset();\n }\n\n executeTraversal(root, frameState) {\n const stack = this._traversalStack;\n root._selectionDepth = 1;\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop();\n let shouldRefine = false;\n\n if (this.canTraverse(tile, frameState)) {\n this.updateChildTiles(tile, frameState);\n shouldRefine = this.updateAndPushChildren(tile, frameState, stack, tile.hasRenderContent ? tile._selectionDepth + 1 : tile._selectionDepth);\n }\n\n const parent = tile.parent;\n const parentRefines = Boolean(!parent || parent._shouldRefine);\n const stoppedRefining = !shouldRefine;\n\n if (!tile.hasRenderContent) {\n this.emptyTiles[tile.id] = tile;\n this.loadTile(tile, frameState);\n\n if (stoppedRefining) {\n this.selectTile(tile, frameState);\n }\n } else if (tile.refine === TILE_REFINEMENT.ADD) {\n this.loadTile(tile, frameState);\n this.selectTile(tile, frameState);\n } else if (tile.refine === TILE_REFINEMENT.REPLACE) {\n this.loadTile(tile, frameState);\n\n if (stoppedRefining) {\n this.selectTile(tile, frameState);\n }\n }\n\n this.touchTile(tile, frameState);\n tile._shouldRefine = shouldRefine && parentRefines;\n }\n\n const newTime = new Date().getTime();\n\n if (this.traversalFinished(frameState) || newTime - this.lastUpdate > this.updateDebounceTime) {\n this.lastUpdate = newTime;\n this.options.onTraversalEnd(frameState);\n }\n }\n\n updateChildTiles(tile, frameState) {\n const children = tile.children;\n\n for (const child of children) {\n this.updateTile(child, frameState);\n }\n\n return true;\n }\n\n updateAndPushChildren(tile, frameState, stack, depth) {\n const {\n loadSiblings,\n skipLevelOfDetail\n } = this.options;\n const children = tile.children;\n children.sort(this.compareDistanceToCamera.bind(this));\n const checkRefines = tile.refine === TILE_REFINEMENT.REPLACE && tile.hasRenderContent && !skipLevelOfDetail;\n let hasVisibleChild = false;\n let refines = true;\n\n for (const child of children) {\n child._selectionDepth = depth;\n\n if (child.isVisibleAndInRequestVolume) {\n if (stack.find(child)) {\n stack.delete(child);\n }\n\n stack.push(child);\n hasVisibleChild = true;\n } else if (checkRefines || loadSiblings) {\n this.loadTile(child, frameState);\n this.touchTile(child, frameState);\n }\n\n if (checkRefines) {\n let childRefines;\n\n if (!child._inRequestVolume) {\n childRefines = false;\n } else if (!child.hasRenderContent) {\n childRefines = this.executeEmptyTraversal(child, frameState);\n } else {\n childRefines = child.contentAvailable;\n }\n\n refines = refines && childRefines;\n\n if (!refines) {\n return false;\n }\n }\n }\n\n if (!hasVisibleChild) {\n refines = false;\n }\n\n return refines;\n }\n\n updateTile(tile, frameState) {\n this.updateTileVisibility(tile, frameState);\n }\n\n selectTile(tile, frameState) {\n if (this.shouldSelectTile(tile)) {\n tile._selectedFrame = frameState.frameNumber;\n this.selectedTiles[tile.id] = tile;\n }\n }\n\n loadTile(tile, frameState) {\n if (this.shouldLoadTile(tile)) {\n tile._requestedFrame = frameState.frameNumber;\n tile._priority = tile._getPriority();\n this.requestedTiles[tile.id] = tile;\n }\n }\n\n touchTile(tile, frameState) {\n tile.tileset._cache.touch(tile);\n\n tile._touchedFrame = frameState.frameNumber;\n }\n\n canTraverse(tile, frameState, useParentMetric = false, ignoreVisibility = false) {\n if (!tile.hasChildren) {\n return false;\n }\n\n if (tile.hasTilesetContent) {\n return !tile.contentExpired;\n }\n\n if (!ignoreVisibility && !tile.isVisibleAndInRequestVolume) {\n return false;\n }\n\n return this.shouldRefine(tile, frameState, useParentMetric);\n }\n\n shouldLoadTile(tile) {\n return tile.hasUnloadedContent || tile.contentExpired;\n }\n\n shouldSelectTile(tile) {\n return tile.contentAvailable && !this.options.skipLevelOfDetail;\n }\n\n shouldRefine(tile, frameState, useParentMetric) {\n let screenSpaceError = tile._screenSpaceError;\n\n if (useParentMetric) {\n screenSpaceError = tile.getScreenSpaceError(frameState, true);\n }\n\n return screenSpaceError > this.options.maximumScreenSpaceError;\n }\n\n updateTileVisibility(tile, frameState) {\n const viewportIds = [];\n\n if (this.options.viewportTraversersMap) {\n for (const key in this.options.viewportTraversersMap) {\n const value = this.options.viewportTraversersMap[key];\n\n if (value === frameState.viewport.id) {\n viewportIds.push(key);\n }\n }\n } else {\n viewportIds.push(frameState.viewport.id);\n }\n\n tile.updateVisibility(frameState, viewportIds);\n }\n\n compareDistanceToCamera(b, a) {\n return b._distanceToCamera - a._distanceToCamera;\n }\n\n anyChildrenVisible(tile, frameState) {\n let anyVisible = false;\n\n for (const child of tile.children) {\n child.updateVisibility(frameState);\n anyVisible = anyVisible || child.isVisibleAndInRequestVolume;\n }\n\n return anyVisible;\n }\n\n executeEmptyTraversal(root, frameState) {\n let allDescendantsLoaded = true;\n const stack = this._emptyTraversalStack;\n stack.push(root);\n\n while (stack.length > 0 && allDescendantsLoaded) {\n const tile = stack.pop();\n this.updateTile(tile, frameState);\n\n if (!tile.isVisibleAndInRequestVolume) {\n this.loadTile(tile, frameState);\n }\n\n this.touchTile(tile, frameState);\n const traverse = !tile.hasRenderContent && this.canTraverse(tile, frameState, false, true);\n\n if (traverse) {\n const children = tile.children;\n\n for (const child of children) {\n if (stack.find(child)) {\n stack.delete(child);\n }\n\n stack.push(child);\n }\n } else if (!tile.contentAvailable) {\n allDescendantsLoaded = false;\n }\n }\n\n return allDescendantsLoaded;\n }\n\n}\n//# sourceMappingURL=tileset-traverser.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Vector3, Matrix4 } from '@math.gl/core';\nimport { CullingVolume } from '@math.gl/culling';\nimport { load } from '@loaders.gl/core';\nimport { TILE_REFINEMENT, TILE_CONTENT_STATE, TILESET_TYPE } from '../constants';\nimport { createBoundingVolume } from './helpers/bounding-volume';\nimport { getTiles3DScreenSpaceError } from './helpers/tiles-3d-lod';\nimport { getProjectedRadius } from './helpers/i3s-lod';\nimport { get3dTilesOptions } from './helpers/3d-tiles-options';\nimport TilesetTraverser from './traversers/tileset-traverser';\nconst scratchVector = new Vector3();\n\nfunction defined(x) {\n return x !== undefined && x !== null;\n}\n\nexport default class TileHeader {\n constructor(tileset, header, parentHeader, extendedId = '') {\n _defineProperty(this, \"tileset\", void 0);\n\n _defineProperty(this, \"header\", void 0);\n\n _defineProperty(this, \"id\", void 0);\n\n _defineProperty(this, \"url\", void 0);\n\n _defineProperty(this, \"parent\", void 0);\n\n _defineProperty(this, \"refine\", void 0);\n\n _defineProperty(this, \"type\", void 0);\n\n _defineProperty(this, \"contentUrl\", void 0);\n\n _defineProperty(this, \"lodMetricType\", void 0);\n\n _defineProperty(this, \"lodMetricValue\", void 0);\n\n _defineProperty(this, \"boundingVolume\", void 0);\n\n _defineProperty(this, \"content\", void 0);\n\n _defineProperty(this, \"contentState\", void 0);\n\n _defineProperty(this, \"gpuMemoryUsageInBytes\", void 0);\n\n _defineProperty(this, \"children\", void 0);\n\n _defineProperty(this, \"depth\", void 0);\n\n _defineProperty(this, \"viewportIds\", void 0);\n\n _defineProperty(this, \"transform\", void 0);\n\n _defineProperty(this, \"extensions\", void 0);\n\n _defineProperty(this, \"userData\", void 0);\n\n _defineProperty(this, \"computedTransform\", void 0);\n\n _defineProperty(this, \"hasEmptyContent\", void 0);\n\n _defineProperty(this, \"hasTilesetContent\", void 0);\n\n _defineProperty(this, \"traverser\", void 0);\n\n _defineProperty(this, \"_cacheNode\", void 0);\n\n _defineProperty(this, \"_frameNumber\", void 0);\n\n _defineProperty(this, \"_lodJudge\", void 0);\n\n _defineProperty(this, \"_expireDate\", void 0);\n\n _defineProperty(this, \"_expiredContent\", void 0);\n\n _defineProperty(this, \"_shouldRefine\", void 0);\n\n _defineProperty(this, \"_distanceToCamera\", void 0);\n\n _defineProperty(this, \"_centerZDepth\", void 0);\n\n _defineProperty(this, \"_screenSpaceError\", void 0);\n\n _defineProperty(this, \"_visibilityPlaneMask\", void 0);\n\n _defineProperty(this, \"_visible\", void 0);\n\n _defineProperty(this, \"_inRequestVolume\", void 0);\n\n _defineProperty(this, \"_stackLength\", void 0);\n\n _defineProperty(this, \"_selectionDepth\", void 0);\n\n _defineProperty(this, \"_touchedFrame\", void 0);\n\n _defineProperty(this, \"_visitedFrame\", void 0);\n\n _defineProperty(this, \"_selectedFrame\", void 0);\n\n _defineProperty(this, \"_requestedFrame\", void 0);\n\n _defineProperty(this, \"_priority\", void 0);\n\n _defineProperty(this, \"_contentBoundingVolume\", void 0);\n\n _defineProperty(this, \"_viewerRequestVolume\", void 0);\n\n _defineProperty(this, \"_initialTransform\", void 0);\n\n this.header = header;\n this.tileset = tileset;\n this.id = extendedId || header.id;\n this.url = header.url;\n this.parent = parentHeader;\n this.refine = this._getRefine(header.refine);\n this.type = header.type;\n this.contentUrl = header.contentUrl;\n this.lodMetricType = 'geometricError';\n this.lodMetricValue = 0;\n this.boundingVolume = null;\n this.content = null;\n this.contentState = TILE_CONTENT_STATE.UNLOADED;\n this.gpuMemoryUsageInBytes = 0;\n this.children = [];\n this.hasEmptyContent = false;\n this.hasTilesetContent = false;\n this.depth = 0;\n this.viewportIds = [];\n this.userData = {};\n this.extensions = null;\n this._priority = 0;\n this._touchedFrame = 0;\n this._visitedFrame = 0;\n this._selectedFrame = 0;\n this._requestedFrame = 0;\n this._screenSpaceError = 0;\n this._cacheNode = null;\n this._frameNumber = null;\n this._cacheNode = null;\n this.traverser = new TilesetTraverser({});\n this._shouldRefine = false;\n this._distanceToCamera = 0;\n this._centerZDepth = 0;\n this._visible = undefined;\n this._inRequestVolume = false;\n this._stackLength = 0;\n this._selectionDepth = 0;\n this._initialTransform = new Matrix4();\n this.transform = new Matrix4();\n\n this._initializeLodMetric(header);\n\n this._initializeTransforms(header);\n\n this._initializeBoundingVolumes(header);\n\n this._initializeContent(header);\n\n this._initializeRenderingState(header);\n\n this._lodJudge = null;\n this._expireDate = null;\n this._expiredContent = null;\n Object.seal(this);\n }\n\n destroy() {\n this.header = null;\n }\n\n isDestroyed() {\n return this.header === null;\n }\n\n get selected() {\n return this._selectedFrame === this.tileset._frameNumber;\n }\n\n get isVisible() {\n return this._visible;\n }\n\n get isVisibleAndInRequestVolume() {\n return this._visible && this._inRequestVolume;\n }\n\n get hasRenderContent() {\n return !this.hasEmptyContent && !this.hasTilesetContent;\n }\n\n get hasChildren() {\n return this.children.length > 0 || this.header.children && this.header.children.length > 0;\n }\n\n get contentReady() {\n return this.contentState === TILE_CONTENT_STATE.READY || this.hasEmptyContent;\n }\n\n get contentAvailable() {\n return Boolean(this.contentReady && this.hasRenderContent || this._expiredContent && !this.contentFailed);\n }\n\n get hasUnloadedContent() {\n return this.hasRenderContent && this.contentUnloaded;\n }\n\n get contentUnloaded() {\n return this.contentState === TILE_CONTENT_STATE.UNLOADED;\n }\n\n get contentExpired() {\n return this.contentState === TILE_CONTENT_STATE.EXPIRED;\n }\n\n get contentFailed() {\n return this.contentState === TILE_CONTENT_STATE.FAILED;\n }\n\n getScreenSpaceError(frameState, useParentLodMetric) {\n switch (this.tileset.type) {\n case TILESET_TYPE.I3S:\n return getProjectedRadius(this, frameState);\n\n case TILESET_TYPE.TILES3D:\n return getTiles3DScreenSpaceError(this, frameState, useParentLodMetric);\n\n default:\n throw new Error('Unsupported tileset type');\n }\n }\n\n unselect() {\n this._selectedFrame = 0;\n }\n\n _getPriority() {\n const traverser = this.tileset._traverser;\n const {\n skipLevelOfDetail\n } = traverser.options;\n const maySkipTile = this.refine === TILE_REFINEMENT.ADD || skipLevelOfDetail;\n\n if (maySkipTile && !this.isVisible && this._visible !== undefined) {\n return -1;\n }\n\n if (this.tileset._frameNumber - this._touchedFrame >= 1) {\n return -1;\n }\n\n if (this.contentState === TILE_CONTENT_STATE.UNLOADED) {\n return -1;\n }\n\n const parent = this.parent;\n const useParentScreenSpaceError = parent && (!maySkipTile || this._screenSpaceError === 0.0 || parent.hasTilesetContent);\n const screenSpaceError = useParentScreenSpaceError ? parent._screenSpaceError : this._screenSpaceError;\n const rootScreenSpaceError = traverser.root ? traverser.root._screenSpaceError : 0.0;\n return Math.max(rootScreenSpaceError - screenSpaceError, 0);\n }\n\n async loadContent() {\n if (this.hasEmptyContent) {\n return false;\n }\n\n if (this.content) {\n return true;\n }\n\n const expired = this.contentExpired;\n\n if (expired) {\n this._expireDate = null;\n }\n\n this.contentState = TILE_CONTENT_STATE.LOADING;\n const requestToken = await this.tileset._requestScheduler.scheduleRequest(this.id, this._getPriority.bind(this));\n\n if (!requestToken) {\n this.contentState = TILE_CONTENT_STATE.UNLOADED;\n return false;\n }\n\n try {\n const contentUrl = this.tileset.getTileUrl(this.contentUrl);\n const loader = this.tileset.loader;\n const options = { ...this.tileset.loadOptions,\n [loader.id]: { ...this.tileset.loadOptions[loader.id],\n isTileset: this.type === 'json',\n ...this._getLoaderSpecificOptions(loader.id)\n }\n };\n this.content = await load(contentUrl, loader, options);\n\n if (this.tileset.options.contentLoader) {\n await this.tileset.options.contentLoader(this);\n }\n\n if (this._isTileset()) {\n this.tileset._initializeTileHeaders(this.content, this);\n }\n\n this.contentState = TILE_CONTENT_STATE.READY;\n\n this._onContentLoaded();\n\n return true;\n } catch (error) {\n this.contentState = TILE_CONTENT_STATE.FAILED;\n throw error;\n } finally {\n requestToken.done();\n }\n }\n\n unloadContent() {\n if (this.content && this.content.destroy) {\n this.content.destroy();\n }\n\n this.content = null;\n\n if (this.header.content && this.header.content.destroy) {\n this.header.content.destroy();\n }\n\n this.header.content = null;\n this.contentState = TILE_CONTENT_STATE.UNLOADED;\n return true;\n }\n\n updateVisibility(frameState, viewportIds) {\n if (this._frameNumber === frameState.frameNumber) {\n return;\n }\n\n const parent = this.parent;\n const parentVisibilityPlaneMask = parent ? parent._visibilityPlaneMask : CullingVolume.MASK_INDETERMINATE;\n\n if (this.tileset._traverser.options.updateTransforms) {\n const parentTransform = parent ? parent.computedTransform : this.tileset.modelMatrix;\n\n this._updateTransform(parentTransform);\n }\n\n this._distanceToCamera = this.distanceToTile(frameState);\n this._screenSpaceError = this.getScreenSpaceError(frameState, false);\n this._visibilityPlaneMask = this.visibility(frameState, parentVisibilityPlaneMask);\n this._visible = this._visibilityPlaneMask !== CullingVolume.MASK_OUTSIDE;\n this._inRequestVolume = this.insideViewerRequestVolume(frameState);\n this._frameNumber = frameState.frameNumber;\n this.viewportIds = viewportIds;\n }\n\n visibility(frameState, parentVisibilityPlaneMask) {\n const {\n cullingVolume\n } = frameState;\n const {\n boundingVolume\n } = this;\n return cullingVolume.computeVisibilityWithPlaneMask(boundingVolume, parentVisibilityPlaneMask);\n }\n\n contentVisibility() {\n return true;\n }\n\n distanceToTile(frameState) {\n const boundingVolume = this.boundingVolume;\n return Math.sqrt(Math.max(boundingVolume.distanceSquaredTo(frameState.camera.position), 0));\n }\n\n cameraSpaceZDepth({\n camera\n }) {\n const boundingVolume = this.boundingVolume;\n scratchVector.subVectors(boundingVolume.center, camera.position);\n return camera.direction.dot(scratchVector);\n }\n\n insideViewerRequestVolume(frameState) {\n const viewerRequestVolume = this._viewerRequestVolume;\n return !viewerRequestVolume || viewerRequestVolume.distanceSquaredTo(frameState.camera.position) <= 0;\n }\n\n updateExpiration() {\n if (defined(this._expireDate) && this.contentReady && !this.hasEmptyContent) {\n const now = Date.now();\n\n if (Date.lessThan(this._expireDate, now)) {\n this.contentState = TILE_CONTENT_STATE.EXPIRED;\n this._expiredContent = this.content;\n }\n }\n }\n\n get extras() {\n return this.header.extras;\n }\n\n _initializeLodMetric(header) {\n if ('lodMetricType' in header) {\n this.lodMetricType = header.lodMetricType;\n } else {\n this.lodMetricType = this.parent && this.parent.lodMetricType || this.tileset.lodMetricType;\n console.warn(\"3D Tile: Required prop lodMetricType is undefined. Using parent lodMetricType\");\n }\n\n if ('lodMetricValue' in header) {\n this.lodMetricValue = header.lodMetricValue;\n } else {\n this.lodMetricValue = this.parent && this.parent.lodMetricValue || this.tileset.lodMetricValue;\n console.warn('3D Tile: Required prop lodMetricValue is undefined. Using parent lodMetricValue');\n }\n }\n\n _initializeTransforms(tileHeader) {\n this.transform = tileHeader.transform ? new Matrix4(tileHeader.transform) : new Matrix4();\n const parent = this.parent;\n const tileset = this.tileset;\n const parentTransform = parent && parent.computedTransform ? parent.computedTransform.clone() : tileset.modelMatrix.clone();\n this.computedTransform = new Matrix4(parentTransform).multiplyRight(this.transform);\n const parentInitialTransform = parent && parent._initialTransform ? parent._initialTransform.clone() : new Matrix4();\n this._initialTransform = new Matrix4(parentInitialTransform).multiplyRight(this.transform);\n }\n\n _initializeBoundingVolumes(tileHeader) {\n this._contentBoundingVolume = null;\n this._viewerRequestVolume = null;\n\n this._updateBoundingVolume(tileHeader);\n }\n\n _initializeContent(tileHeader) {\n this.content = {\n _tileset: this.tileset,\n _tile: this\n };\n this.hasEmptyContent = true;\n this.contentState = TILE_CONTENT_STATE.UNLOADED;\n this.hasTilesetContent = false;\n\n if (tileHeader.contentUrl) {\n this.content = null;\n this.hasEmptyContent = false;\n }\n }\n\n _initializeRenderingState(header) {\n this.depth = header.level || (this.parent ? this.parent.depth + 1 : 0);\n this._shouldRefine = false;\n this._distanceToCamera = 0;\n this._centerZDepth = 0;\n this._screenSpaceError = 0;\n this._visibilityPlaneMask = CullingVolume.MASK_INDETERMINATE;\n this._visible = undefined;\n this._inRequestVolume = false;\n this._stackLength = 0;\n this._selectionDepth = 0;\n this._frameNumber = 0;\n this._touchedFrame = 0;\n this._visitedFrame = 0;\n this._selectedFrame = 0;\n this._requestedFrame = 0;\n this._priority = 0.0;\n }\n\n _getRefine(refine) {\n return refine || this.parent && this.parent.refine || TILE_REFINEMENT.REPLACE;\n }\n\n _isTileset() {\n return this.contentUrl.indexOf('.json') !== -1;\n }\n\n _onContentLoaded() {\n switch (this.content && this.content.type) {\n case 'vctr':\n case 'geom':\n this.tileset._traverser.disableSkipLevelOfDetail = true;\n break;\n\n default:\n }\n\n if (this._isTileset()) {\n this.hasTilesetContent = true;\n }\n }\n\n _updateBoundingVolume(header) {\n this.boundingVolume = createBoundingVolume(header.boundingVolume, this.computedTransform, this.boundingVolume);\n const content = header.content;\n\n if (!content) {\n return;\n }\n\n if (content.boundingVolume) {\n this._contentBoundingVolume = createBoundingVolume(content.boundingVolume, this.computedTransform, this._contentBoundingVolume);\n }\n\n if (header.viewerRequestVolume) {\n this._viewerRequestVolume = createBoundingVolume(header.viewerRequestVolume, this.computedTransform, this._viewerRequestVolume);\n }\n }\n\n _updateTransform(parentTransform = new Matrix4()) {\n const computedTransform = parentTransform.clone().multiplyRight(this.transform);\n const didTransformChange = !computedTransform.equals(this.computedTransform);\n\n if (!didTransformChange) {\n return;\n }\n\n this.computedTransform = computedTransform;\n\n this._updateBoundingVolume(this.header);\n }\n\n _getLoaderSpecificOptions(loaderId) {\n switch (loaderId) {\n case 'i3s':\n return { ...this.tileset.options.i3s,\n tile: this.header,\n tileset: this.tileset.tileset,\n isTileHeader: false\n };\n\n case '3d-tiles':\n case 'cesium-ion':\n default:\n return get3dTilesOptions(this.tileset.tileset);\n }\n }\n\n}\n//# sourceMappingURL=tile-3d.js.map","export function get3dTilesOptions(tileset) {\n return {\n assetGltfUpAxis: tileset.asset && tileset.asset.gltfUpAxis || 'Y'\n };\n}\n//# sourceMappingURL=3d-tiles-options.js.map","import { TILE3D_OPTIMIZATION_HINT, TILE_REFINEMENT } from '../../constants';\nimport TilesetTraverser from './tileset-traverser';\nexport default class Tileset3DTraverser extends TilesetTraverser {\n compareDistanceToCamera(a, b) {\n return b._distanceToCamera === 0 && a._distanceToCamera === 0 ? b._centerZDepth - a._centerZDepth : b._distanceToCamera - a._distanceToCamera;\n }\n\n updateTileVisibility(tile, frameState) {\n super.updateTileVisibility(tile, frameState);\n\n if (!tile.isVisibleAndInRequestVolume) {\n return;\n }\n\n const hasChildren = tile.children.length > 0;\n\n if (tile.hasTilesetContent && hasChildren) {\n const firstChild = tile.children[0];\n this.updateTileVisibility(firstChild, frameState);\n tile._visible = firstChild._visible;\n return;\n }\n\n if (this.meetsScreenSpaceErrorEarly(tile, frameState)) {\n tile._visible = false;\n return;\n }\n\n const replace = tile.refine === TILE_REFINEMENT.REPLACE;\n const useOptimization = tile._optimChildrenWithinParent === TILE3D_OPTIMIZATION_HINT.USE_OPTIMIZATION;\n\n if (replace && useOptimization && hasChildren) {\n if (!this.anyChildrenVisible(tile, frameState)) {\n tile._visible = false;\n return;\n }\n }\n }\n\n meetsScreenSpaceErrorEarly(tile, frameState) {\n const {\n parent\n } = tile;\n\n if (!parent || parent.hasTilesetContent || parent.refine !== TILE_REFINEMENT.ADD) {\n return false;\n }\n\n return !this.shouldRefine(tile, frameState, true);\n }\n\n}\n//# sourceMappingURL=tileset-3d-traverser.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class I3SPendingTilesRegister {\n constructor() {\n _defineProperty(this, \"frameNumberMap\", new Map());\n }\n\n register(viewportId, frameNumber) {\n const viewportMap = this.frameNumberMap.get(viewportId) || new Map();\n const oldCount = viewportMap.get(frameNumber) || 0;\n viewportMap.set(frameNumber, oldCount + 1);\n this.frameNumberMap.set(viewportId, viewportMap);\n }\n\n deregister(viewportId, frameNumber) {\n const viewportMap = this.frameNumberMap.get(viewportId);\n\n if (!viewportMap) {\n return;\n }\n\n const oldCount = viewportMap.get(frameNumber) || 1;\n viewportMap.set(frameNumber, oldCount - 1);\n }\n\n isZero(viewportId, frameNumber) {\n var _this$frameNumberMap$;\n\n const count = ((_this$frameNumberMap$ = this.frameNumberMap.get(viewportId)) === null || _this$frameNumberMap$ === void 0 ? void 0 : _this$frameNumberMap$.get(frameNumber)) || 0;\n return count === 0;\n }\n\n}\n//# sourceMappingURL=i3s-pending-tiles-register.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport I3SPendingTilesRegister from './i3s-pending-tiles-register';\nconst STATUS = {\n REQUESTED: 'REQUESTED',\n COMPLETED: 'COMPLETED',\n ERROR: 'ERROR'\n};\nexport default class I3STileManager {\n constructor() {\n _defineProperty(this, \"_statusMap\", void 0);\n\n _defineProperty(this, \"pendingTilesRegister\", new I3SPendingTilesRegister());\n\n this._statusMap = {};\n }\n\n add(request, key, callback, frameState) {\n if (!this._statusMap[key]) {\n const {\n frameNumber,\n viewport: {\n id\n }\n } = frameState;\n this._statusMap[key] = {\n request,\n callback,\n key,\n frameState,\n status: STATUS.REQUESTED\n };\n this.pendingTilesRegister.register(id, frameNumber);\n request().then(data => {\n this._statusMap[key].status = STATUS.COMPLETED;\n const {\n frameNumber: actualFrameNumber,\n viewport: {\n id\n }\n } = this._statusMap[key].frameState;\n this.pendingTilesRegister.deregister(id, actualFrameNumber);\n\n this._statusMap[key].callback(data, frameState);\n }).catch(error => {\n this._statusMap[key].status = STATUS.ERROR;\n const {\n frameNumber: actualFrameNumber,\n viewport: {\n id\n }\n } = this._statusMap[key].frameState;\n this.pendingTilesRegister.deregister(id, actualFrameNumber);\n callback(error);\n });\n }\n }\n\n update(key, frameState) {\n if (this._statusMap[key]) {\n const {\n frameNumber,\n viewport: {\n id\n }\n } = this._statusMap[key].frameState;\n this.pendingTilesRegister.deregister(id, frameNumber);\n const {\n frameNumber: newFrameNumber,\n viewport: {\n id: newViewportId\n }\n } = frameState;\n this.pendingTilesRegister.register(newViewportId, newFrameNumber);\n this._statusMap[key].frameState = frameState;\n }\n }\n\n find(key) {\n return this._statusMap[key];\n }\n\n hasPendingTiles(viewportId, frameNumber) {\n return !this.pendingTilesRegister.isZero(viewportId, frameNumber);\n }\n\n}\n//# sourceMappingURL=i3s-tile-manager.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { load } from '@loaders.gl/core';\nimport TilesetTraverser from './tileset-traverser';\nimport { getLodStatus } from '../helpers/i3s-lod';\nimport TileHeader from '../tile-3d';\nimport I3STileManager from './i3s-tile-manager';\nexport default class I3STilesetTraverser extends TilesetTraverser {\n traversalFinished(frameState) {\n return !this._tileManager.hasPendingTiles(frameState.viewport.id, this._frameNumber || 0);\n }\n\n constructor(options) {\n super(options);\n\n _defineProperty(this, \"_tileManager\", void 0);\n\n this._tileManager = new I3STileManager();\n }\n\n shouldRefine(tile, frameState) {\n tile._lodJudge = getLodStatus(tile, frameState);\n return tile._lodJudge === 'DIG';\n }\n\n updateChildTiles(tile, frameState) {\n const children = tile.header.children || [];\n const childTiles = tile.children;\n const tileset = tile.tileset;\n\n for (const child of children) {\n const extendedId = \"\".concat(child.id, \"-\").concat(frameState.viewport.id);\n const childTile = childTiles && childTiles.find(t => t.id === extendedId);\n\n if (!childTile) {\n let request = () => this._loadTile(child.id, tileset);\n\n const cachedRequest = this._tileManager.find(extendedId);\n\n if (!cachedRequest) {\n if (tileset.tileset.nodePages) {\n request = () => tileset.tileset.nodePagesTile.formTileFromNodePages(child.id);\n }\n\n this._tileManager.add(request, extendedId, header => this._onTileLoad(header, tile, extendedId), frameState);\n } else {\n this._tileManager.update(extendedId, frameState);\n }\n } else if (childTile) {\n this.updateTile(childTile, frameState);\n }\n }\n\n return false;\n }\n\n async _loadTile(nodeId, tileset) {\n const {\n loader\n } = tileset;\n const nodeUrl = tileset.getTileUrl(\"\".concat(tileset.url, \"/nodes/\").concat(nodeId));\n const options = { ...tileset.loadOptions,\n i3s: { ...tileset.loadOptions.i3s,\n isTileHeader: true,\n loadContent: false\n }\n };\n return await load(nodeUrl, loader, options);\n }\n\n _onTileLoad(header, tile, extendedId) {\n const childTile = new TileHeader(tile.tileset, header, tile, extendedId);\n tile.children.push(childTile);\n\n const frameState = this._tileManager.find(childTile.id).frameState;\n\n this.updateTile(childTile, frameState);\n\n if (this._frameNumber === frameState.frameNumber && (this.traversalFinished(frameState) || new Date().getTime() - this.lastUpdate > this.updateDebounceTime)) {\n this.executeTraversal(childTile, frameState);\n }\n }\n\n}\n//# sourceMappingURL=i3s-tileset-traverser.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Matrix4, Vector3 } from '@math.gl/core';\nimport { Ellipsoid } from '@math.gl/geospatial';\nimport { Stats } from '@probe.gl/stats';\nimport { RequestScheduler, assert, path } from '@loaders.gl/loader-utils';\nimport TilesetCache from './tileset-cache';\nimport { calculateTransformProps } from './helpers/transform-utils';\nimport { getFrameState, limitSelectedTiles } from './helpers/frame-state';\nimport { getZoomFromBoundingVolume, getZoomFromExtent, getZoomFromFullExtent } from './helpers/zoom';\nimport Tile3D from './tile-3d';\nimport Tileset3DTraverser from './traversers/tileset-3d-traverser';\nimport TilesetTraverser from './traversers/tileset-traverser';\nimport I3SetTraverser from './traversers/i3s-tileset-traverser';\nimport { TILESET_TYPE } from '../constants';\nconst DEFAULT_PROPS = {\n description: '',\n ellipsoid: Ellipsoid.WGS84,\n modelMatrix: new Matrix4(),\n throttleRequests: true,\n maxRequests: 64,\n maximumMemoryUsage: 32,\n maximumTilesSelected: 0,\n debounceTime: 0,\n onTileLoad: () => {},\n onTileUnload: () => {},\n onTileError: () => {},\n onTraversalComplete: selectedTiles => selectedTiles,\n contentLoader: undefined,\n viewDistanceScale: 1.0,\n maximumScreenSpaceError: 8,\n loadTiles: true,\n updateTransforms: true,\n viewportTraversersMap: null,\n loadOptions: {\n fetch: {}\n },\n attributions: [],\n basePath: '',\n i3s: {}\n};\nconst TILES_TOTAL = 'Tiles In Tileset(s)';\nconst TILES_IN_MEMORY = 'Tiles In Memory';\nconst TILES_IN_VIEW = 'Tiles In View';\nconst TILES_RENDERABLE = 'Tiles To Render';\nconst TILES_LOADED = 'Tiles Loaded';\nconst TILES_LOADING = 'Tiles Loading';\nconst TILES_UNLOADED = 'Tiles Unloaded';\nconst TILES_LOAD_FAILED = 'Failed Tile Loads';\nconst POINTS_COUNT = 'Points/Vertices';\nconst TILES_GPU_MEMORY = 'Tile Memory Use';\nexport default class Tileset3D {\n constructor(json, options) {\n _defineProperty(this, \"options\", void 0);\n\n _defineProperty(this, \"loadOptions\", void 0);\n\n _defineProperty(this, \"type\", void 0);\n\n _defineProperty(this, \"tileset\", void 0);\n\n _defineProperty(this, \"loader\", void 0);\n\n _defineProperty(this, \"url\", void 0);\n\n _defineProperty(this, \"basePath\", void 0);\n\n _defineProperty(this, \"modelMatrix\", void 0);\n\n _defineProperty(this, \"ellipsoid\", void 0);\n\n _defineProperty(this, \"lodMetricType\", void 0);\n\n _defineProperty(this, \"lodMetricValue\", void 0);\n\n _defineProperty(this, \"refine\", void 0);\n\n _defineProperty(this, \"root\", void 0);\n\n _defineProperty(this, \"roots\", void 0);\n\n _defineProperty(this, \"asset\", void 0);\n\n _defineProperty(this, \"description\", void 0);\n\n _defineProperty(this, \"properties\", void 0);\n\n _defineProperty(this, \"extras\", void 0);\n\n _defineProperty(this, \"attributions\", void 0);\n\n _defineProperty(this, \"credits\", void 0);\n\n _defineProperty(this, \"stats\", void 0);\n\n _defineProperty(this, \"traverseCounter\", void 0);\n\n _defineProperty(this, \"geometricError\", void 0);\n\n _defineProperty(this, \"selectedTiles\", void 0);\n\n _defineProperty(this, \"updatePromise\", null);\n\n _defineProperty(this, \"tilesetInitializationPromise\", void 0);\n\n _defineProperty(this, \"cartographicCenter\", void 0);\n\n _defineProperty(this, \"cartesianCenter\", void 0);\n\n _defineProperty(this, \"zoom\", void 0);\n\n _defineProperty(this, \"boundingVolume\", void 0);\n\n _defineProperty(this, \"gpuMemoryUsageInBytes\", void 0);\n\n _defineProperty(this, \"dynamicScreenSpaceErrorComputedDensity\", void 0);\n\n _defineProperty(this, \"_traverser\", void 0);\n\n _defineProperty(this, \"_cache\", void 0);\n\n _defineProperty(this, \"_requestScheduler\", void 0);\n\n _defineProperty(this, \"_frameNumber\", void 0);\n\n _defineProperty(this, \"_queryParamsString\", void 0);\n\n _defineProperty(this, \"_queryParams\", void 0);\n\n _defineProperty(this, \"_extensionsUsed\", void 0);\n\n _defineProperty(this, \"_tiles\", void 0);\n\n _defineProperty(this, \"_pendingCount\", void 0);\n\n _defineProperty(this, \"lastUpdatedVieports\", void 0);\n\n _defineProperty(this, \"_requestedTiles\", void 0);\n\n _defineProperty(this, \"_emptyTiles\", void 0);\n\n _defineProperty(this, \"frameStateData\", void 0);\n\n _defineProperty(this, \"maximumMemoryUsage\", void 0);\n\n assert(json);\n this.options = { ...DEFAULT_PROPS,\n ...options\n };\n this.tileset = json;\n this.loader = json.loader;\n this.type = json.type;\n this.url = json.url;\n this.basePath = json.basePath || path.dirname(this.url);\n this.modelMatrix = this.options.modelMatrix;\n this.ellipsoid = this.options.ellipsoid;\n this.lodMetricType = json.lodMetricType;\n this.lodMetricValue = json.lodMetricValue;\n this.refine = json.root.refine;\n this.loadOptions = this.options.loadOptions || {};\n this.root = null;\n this.roots = {};\n this.cartographicCenter = null;\n this.cartesianCenter = null;\n this.zoom = 1;\n this.boundingVolume = null;\n this.traverseCounter = 0;\n this.geometricError = 0;\n this._traverser = this._initializeTraverser();\n this._cache = new TilesetCache();\n this._requestScheduler = new RequestScheduler({\n throttleRequests: this.options.throttleRequests,\n maxRequests: this.options.maxRequests\n });\n this._frameNumber = 0;\n this._pendingCount = 0;\n this._tiles = {};\n this.selectedTiles = [];\n this._emptyTiles = [];\n this._requestedTiles = [];\n this.frameStateData = {};\n this.lastUpdatedVieports = null;\n this._queryParams = {};\n this._queryParamsString = '';\n this.maximumMemoryUsage = this.options.maximumMemoryUsage || 32;\n this.gpuMemoryUsageInBytes = 0;\n this.stats = new Stats({\n id: this.url\n });\n\n this._initializeStats();\n\n this._extensionsUsed = undefined;\n this.dynamicScreenSpaceErrorComputedDensity = 0.0;\n this.extras = null;\n this.asset = {};\n this.credits = {};\n this.description = this.options.description || '';\n this.tilesetInitializationPromise = this._initializeTileSet(json);\n }\n\n destroy() {\n this._destroy();\n }\n\n isLoaded() {\n return this._pendingCount === 0 && this._frameNumber !== 0 && this._requestedTiles.length === 0;\n }\n\n get tiles() {\n return Object.values(this._tiles);\n }\n\n get frameNumber() {\n return this._frameNumber;\n }\n\n get queryParams() {\n if (!this._queryParamsString) {\n this._queryParamsString = getQueryParamString(this._queryParams);\n }\n\n return this._queryParamsString;\n }\n\n setProps(props) {\n this.options = { ...this.options,\n ...props\n };\n }\n\n setOptions(options) {\n this.options = { ...this.options,\n ...options\n };\n }\n\n getTileUrl(tilePath) {\n const isDataUrl = tilePath.startsWith('data:');\n\n if (isDataUrl) {\n return tilePath;\n }\n\n return \"\".concat(tilePath).concat(this.queryParams);\n }\n\n hasExtension(extensionName) {\n return Boolean(this._extensionsUsed && this._extensionsUsed.indexOf(extensionName) > -1);\n }\n\n update(viewports = null) {\n this.tilesetInitializationPromise.then(() => {\n if (!viewports && this.lastUpdatedVieports) {\n viewports = this.lastUpdatedVieports;\n } else {\n this.lastUpdatedVieports = viewports;\n }\n\n if (viewports) {\n this.doUpdate(viewports);\n }\n });\n }\n\n async selectTiles(viewports = null) {\n await this.tilesetInitializationPromise;\n\n if (viewports) {\n this.lastUpdatedVieports = viewports;\n }\n\n if (!this.updatePromise) {\n this.updatePromise = new Promise(resolve => {\n setTimeout(() => {\n if (this.lastUpdatedVieports) {\n this.doUpdate(this.lastUpdatedVieports);\n }\n\n resolve(this._frameNumber);\n this.updatePromise = null;\n }, this.options.debounceTime);\n });\n }\n\n return this.updatePromise;\n }\n\n doUpdate(viewports) {\n if ('loadTiles' in this.options && !this.options.loadTiles) {\n return;\n }\n\n if (this.traverseCounter > 0) {\n return;\n }\n\n const preparedViewports = viewports instanceof Array ? viewports : [viewports];\n\n this._cache.reset();\n\n this._frameNumber++;\n this.traverseCounter = preparedViewports.length;\n const viewportsToTraverse = [];\n\n for (const viewport of preparedViewports) {\n const id = viewport.id;\n\n if (this._needTraverse(id)) {\n viewportsToTraverse.push(id);\n } else {\n this.traverseCounter--;\n }\n }\n\n for (const viewport of preparedViewports) {\n const id = viewport.id;\n\n if (!this.roots[id]) {\n this.roots[id] = this._initializeTileHeaders(this.tileset, null);\n }\n\n if (!viewportsToTraverse.includes(id)) {\n continue;\n }\n\n const frameState = getFrameState(viewport, this._frameNumber);\n\n this._traverser.traverse(this.roots[id], frameState, this.options);\n }\n }\n\n _needTraverse(viewportId) {\n let traverserId = viewportId;\n\n if (this.options.viewportTraversersMap) {\n traverserId = this.options.viewportTraversersMap[viewportId];\n }\n\n if (traverserId !== viewportId) {\n return false;\n }\n\n return true;\n }\n\n _onTraversalEnd(frameState) {\n const id = frameState.viewport.id;\n\n if (!this.frameStateData[id]) {\n this.frameStateData[id] = {\n selectedTiles: [],\n _requestedTiles: [],\n _emptyTiles: []\n };\n }\n\n const currentFrameStateData = this.frameStateData[id];\n const selectedTiles = Object.values(this._traverser.selectedTiles);\n const [filteredSelectedTiles, unselectedTiles] = limitSelectedTiles(selectedTiles, frameState, this.options.maximumTilesSelected);\n currentFrameStateData.selectedTiles = filteredSelectedTiles;\n\n for (const tile of unselectedTiles) {\n tile.unselect();\n }\n\n currentFrameStateData._requestedTiles = Object.values(this._traverser.requestedTiles);\n currentFrameStateData._emptyTiles = Object.values(this._traverser.emptyTiles);\n this.traverseCounter--;\n\n if (this.traverseCounter > 0) {\n return;\n }\n\n this._updateTiles();\n }\n\n _updateTiles() {\n this.selectedTiles = [];\n this._requestedTiles = [];\n this._emptyTiles = [];\n\n for (const frameStateKey in this.frameStateData) {\n const frameStateDataValue = this.frameStateData[frameStateKey];\n this.selectedTiles = this.selectedTiles.concat(frameStateDataValue.selectedTiles);\n this._requestedTiles = this._requestedTiles.concat(frameStateDataValue._requestedTiles);\n this._emptyTiles = this._emptyTiles.concat(frameStateDataValue._emptyTiles);\n }\n\n this.selectedTiles = this.options.onTraversalComplete(this.selectedTiles);\n\n for (const tile of this.selectedTiles) {\n this._tiles[tile.id] = tile;\n }\n\n this._loadTiles();\n\n this._unloadTiles();\n\n this._updateStats();\n }\n\n _tilesChanged(oldSelectedTiles, selectedTiles) {\n if (oldSelectedTiles.length !== selectedTiles.length) {\n return true;\n }\n\n const set1 = new Set(oldSelectedTiles.map(t => t.id));\n const set2 = new Set(selectedTiles.map(t => t.id));\n let changed = oldSelectedTiles.filter(x => !set2.has(x.id)).length > 0;\n changed = changed || selectedTiles.filter(x => !set1.has(x.id)).length > 0;\n return changed;\n }\n\n _loadTiles() {\n for (const tile of this._requestedTiles) {\n if (tile.contentUnloaded) {\n this._loadTile(tile);\n }\n }\n }\n\n _unloadTiles() {\n this._cache.unloadTiles(this, (tileset, tile) => tileset._unloadTile(tile));\n }\n\n _updateStats() {\n let tilesRenderable = 0;\n let pointsRenderable = 0;\n\n for (const tile of this.selectedTiles) {\n if (tile.contentAvailable && tile.content) {\n tilesRenderable++;\n\n if (tile.content.pointCount) {\n pointsRenderable += tile.content.pointCount;\n } else {\n pointsRenderable += tile.content.vertexCount;\n }\n }\n }\n\n this.stats.get(TILES_IN_VIEW).count = this.selectedTiles.length;\n this.stats.get(TILES_RENDERABLE).count = tilesRenderable;\n this.stats.get(POINTS_COUNT).count = pointsRenderable;\n }\n\n async _initializeTileSet(tilesetJson) {\n if (this.type === TILESET_TYPE.I3S) {\n this.calculateViewPropsI3S();\n tilesetJson.root = await tilesetJson.root;\n }\n\n this.root = this._initializeTileHeaders(tilesetJson, null);\n\n if (this.type === TILESET_TYPE.TILES3D) {\n this._initializeTiles3DTileset(tilesetJson);\n\n this.calculateViewPropsTiles3D();\n }\n\n if (this.type === TILESET_TYPE.I3S) {\n this._initializeI3STileset();\n }\n }\n\n calculateViewPropsI3S() {\n var _this$tileset$store;\n\n const fullExtent = this.tileset.fullExtent;\n\n if (fullExtent) {\n const {\n xmin,\n xmax,\n ymin,\n ymax,\n zmin,\n zmax\n } = fullExtent;\n this.cartographicCenter = new Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, zmin + (zmax - zmin) / 2);\n this.cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(this.cartographicCenter, new Vector3());\n this.zoom = getZoomFromFullExtent(fullExtent, this.cartographicCenter, this.cartesianCenter);\n return;\n }\n\n const extent = (_this$tileset$store = this.tileset.store) === null || _this$tileset$store === void 0 ? void 0 : _this$tileset$store.extent;\n\n if (extent) {\n const [xmin, ymin, xmax, ymax] = extent;\n this.cartographicCenter = new Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, 0);\n this.cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(this.cartographicCenter, new Vector3());\n this.zoom = getZoomFromExtent(extent, this.cartographicCenter, this.cartesianCenter);\n return;\n }\n\n console.warn('Extent is not defined in the tileset header');\n this.cartographicCenter = new Vector3();\n this.zoom = 1;\n return;\n }\n\n calculateViewPropsTiles3D() {\n const root = this.root;\n assert(root);\n const {\n center\n } = root.boundingVolume;\n\n if (!center) {\n console.warn('center was not pre-calculated for the root tile');\n this.cartographicCenter = new Vector3();\n this.zoom = 1;\n return;\n }\n\n if (center[0] !== 0 || center[1] !== 0 || center[2] !== 0) {\n this.cartographicCenter = Ellipsoid.WGS84.cartesianToCartographic(center, new Vector3());\n } else {\n this.cartographicCenter = new Vector3(0, 0, -Ellipsoid.WGS84.radii[0]);\n }\n\n this.cartesianCenter = center;\n this.zoom = getZoomFromBoundingVolume(root.boundingVolume, this.cartographicCenter);\n }\n\n _initializeStats() {\n this.stats.get(TILES_TOTAL);\n this.stats.get(TILES_LOADING);\n this.stats.get(TILES_IN_MEMORY);\n this.stats.get(TILES_IN_VIEW);\n this.stats.get(TILES_RENDERABLE);\n this.stats.get(TILES_LOADED);\n this.stats.get(TILES_UNLOADED);\n this.stats.get(TILES_LOAD_FAILED);\n this.stats.get(POINTS_COUNT, 'memory');\n this.stats.get(TILES_GPU_MEMORY, 'memory');\n }\n\n _initializeTileHeaders(tilesetJson, parentTileHeader) {\n const rootTile = new Tile3D(this, tilesetJson.root, parentTileHeader);\n\n if (parentTileHeader) {\n parentTileHeader.children.push(rootTile);\n rootTile.depth = parentTileHeader.depth + 1;\n }\n\n if (this.type === TILESET_TYPE.TILES3D) {\n const stack = [];\n stack.push(rootTile);\n\n while (stack.length > 0) {\n const tile = stack.pop();\n this.stats.get(TILES_TOTAL).incrementCount();\n const children = tile.header.children || [];\n\n for (const childHeader of children) {\n const childTile = new Tile3D(this, childHeader, tile);\n tile.children.push(childTile);\n childTile.depth = tile.depth + 1;\n stack.push(childTile);\n }\n }\n }\n\n return rootTile;\n }\n\n _initializeTraverser() {\n let TraverserClass;\n const type = this.type;\n\n switch (type) {\n case TILESET_TYPE.TILES3D:\n TraverserClass = Tileset3DTraverser;\n break;\n\n case TILESET_TYPE.I3S:\n TraverserClass = I3SetTraverser;\n break;\n\n default:\n TraverserClass = TilesetTraverser;\n }\n\n return new TraverserClass({\n basePath: this.basePath,\n onTraversalEnd: this._onTraversalEnd.bind(this)\n });\n }\n\n _destroyTileHeaders(parentTile) {\n this._destroySubtree(parentTile);\n }\n\n async _loadTile(tile) {\n let loaded;\n\n try {\n this._onStartTileLoading();\n\n loaded = await tile.loadContent();\n } catch (error) {\n this._onTileLoadError(tile, error);\n } finally {\n this._onEndTileLoading();\n\n this._onTileLoad(tile, loaded);\n }\n }\n\n _onTileLoadError(tile, error) {\n this.stats.get(TILES_LOAD_FAILED).incrementCount();\n const message = error.message || error.toString();\n const url = tile.url;\n console.error(\"A 3D tile failed to load: \".concat(tile.url, \" \").concat(message));\n this.options.onTileError(tile, message, url);\n }\n\n _onTileLoad(tile, loaded) {\n if (!loaded) {\n return;\n }\n\n if (this.type === TILESET_TYPE.I3S) {\n var _this$tileset, _this$tileset$nodePag;\n\n const nodesInNodePages = ((_this$tileset = this.tileset) === null || _this$tileset === void 0 ? void 0 : (_this$tileset$nodePag = _this$tileset.nodePagesTile) === null || _this$tileset$nodePag === void 0 ? void 0 : _this$tileset$nodePag.nodesInNodePages) || 0;\n this.stats.get(TILES_TOTAL).reset();\n this.stats.get(TILES_TOTAL).addCount(nodesInNodePages);\n }\n\n if (tile && tile.content) {\n calculateTransformProps(tile, tile.content);\n }\n\n this._addTileToCache(tile);\n\n this.options.onTileLoad(tile);\n }\n\n _onStartTileLoading() {\n this._pendingCount++;\n this.stats.get(TILES_LOADING).incrementCount();\n }\n\n _onEndTileLoading() {\n this._pendingCount--;\n this.stats.get(TILES_LOADING).decrementCount();\n }\n\n _addTileToCache(tile) {\n this._cache.add(this, tile, tileset => tileset._updateCacheStats(tile));\n }\n\n _updateCacheStats(tile) {\n this.stats.get(TILES_LOADED).incrementCount();\n this.stats.get(TILES_IN_MEMORY).incrementCount();\n this.gpuMemoryUsageInBytes += tile.content.byteLength || 0;\n this.stats.get(TILES_GPU_MEMORY).count = this.gpuMemoryUsageInBytes;\n }\n\n _unloadTile(tile) {\n this.gpuMemoryUsageInBytes -= tile.content && tile.content.byteLength || 0;\n this.stats.get(TILES_IN_MEMORY).decrementCount();\n this.stats.get(TILES_UNLOADED).incrementCount();\n this.stats.get(TILES_GPU_MEMORY).count = this.gpuMemoryUsageInBytes;\n this.options.onTileUnload(tile);\n tile.unloadContent();\n }\n\n _destroy() {\n const stack = [];\n\n if (this.root) {\n stack.push(this.root);\n }\n\n while (stack.length > 0) {\n const tile = stack.pop();\n\n for (const child of tile.children) {\n stack.push(child);\n }\n\n this._destroyTile(tile);\n }\n\n this.root = null;\n }\n\n _destroySubtree(tile) {\n const root = tile;\n const stack = [];\n stack.push(root);\n\n while (stack.length > 0) {\n tile = stack.pop();\n\n for (const child of tile.children) {\n stack.push(child);\n }\n\n if (tile !== root) {\n this._destroyTile(tile);\n }\n }\n\n root.children = [];\n }\n\n _destroyTile(tile) {\n this._cache.unloadTile(this, tile);\n\n this._unloadTile(tile);\n\n tile.destroy();\n }\n\n _initializeTiles3DTileset(tilesetJson) {\n this.asset = tilesetJson.asset;\n\n if (!this.asset) {\n throw new Error('Tileset must have an asset property.');\n }\n\n if (this.asset.version !== '0.0' && this.asset.version !== '1.0') {\n throw new Error('The tileset must be 3D Tiles version 0.0 or 1.0.');\n }\n\n if ('tilesetVersion' in this.asset) {\n this._queryParams.v = this.asset.tilesetVersion;\n }\n\n this.credits = {\n attributions: this.options.attributions || []\n };\n this.description = this.options.description || '';\n this.properties = tilesetJson.properties;\n this.geometricError = tilesetJson.geometricError;\n this._extensionsUsed = tilesetJson.extensionsUsed;\n this.extras = tilesetJson.extras;\n }\n\n _initializeI3STileset() {\n if (this.loadOptions.i3s && 'token' in this.loadOptions.i3s) {\n this._queryParams.token = this.loadOptions.i3s.token;\n }\n }\n\n}\n\nfunction getQueryParamString(queryParams) {\n const queryParamStrings = [];\n\n for (const key of Object.keys(queryParams)) {\n queryParamStrings.push(\"\".concat(key, \"=\").concat(queryParams[key]));\n }\n\n switch (queryParamStrings.length) {\n case 0:\n return '';\n\n case 1:\n return \"?\".concat(queryParamStrings[0]);\n\n default:\n return \"?\".concat(queryParamStrings.join('&'));\n }\n}\n//# sourceMappingURL=tileset-3d.js.map","import { Ellipsoid } from '@math.gl/geospatial';\nimport { Matrix4, Vector3 } from '@math.gl/core';\nimport { assert } from '@loaders.gl/loader-utils';\nexport function calculateTransformProps(tileHeader, tile) {\n assert(tileHeader);\n assert(tile);\n const {\n rtcCenter,\n gltfUpAxis\n } = tile;\n const {\n computedTransform,\n boundingVolume: {\n center\n }\n } = tileHeader;\n let modelMatrix = new Matrix4(computedTransform);\n\n if (rtcCenter) {\n modelMatrix.translate(rtcCenter);\n }\n\n switch (gltfUpAxis) {\n case 'Z':\n break;\n\n case 'Y':\n const rotationY = new Matrix4().rotateX(Math.PI / 2);\n modelMatrix = modelMatrix.multiplyRight(rotationY);\n break;\n\n case 'X':\n const rotationX = new Matrix4().rotateY(-Math.PI / 2);\n modelMatrix = modelMatrix.multiplyRight(rotationX);\n break;\n\n default:\n break;\n }\n\n if (tile.isQuantized) {\n modelMatrix.translate(tile.quantizedVolumeOffset).scale(tile.quantizedVolumeScale);\n }\n\n const cartesianOrigin = new Vector3(center);\n tile.cartesianModelMatrix = modelMatrix;\n tile.cartesianOrigin = cartesianOrigin;\n const cartographicOrigin = Ellipsoid.WGS84.cartesianToCartographic(cartesianOrigin, new Vector3());\n const fromFixedFrameMatrix = Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin);\n const toFixedFrameMatrix = fromFixedFrameMatrix.invert();\n tile.cartographicModelMatrix = toFixedFrameMatrix.multiplyRight(modelMatrix);\n tile.cartographicOrigin = cartographicOrigin;\n\n if (!tile.coordinateSystem) {\n tile.modelMatrix = tile.cartographicModelMatrix;\n }\n}\n//# sourceMappingURL=transform-utils.js.map","export const VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : 'latest';\n//# sourceMappingURL=version.js.map","export const TILE3D_TYPE = {\n COMPOSITE: 'cmpt',\n POINT_CLOUD: 'pnts',\n BATCHED_3D_MODEL: 'b3dm',\n INSTANCED_3D_MODEL: 'i3dm',\n GEOMETRY: 'geom',\n VECTOR: 'vect',\n GLTF: 'glTF'\n};\nexport const TILE3D_TYPES = Object.keys(TILE3D_TYPE);\nexport const MAGIC_ARRAY = {\n BATCHED_MODEL: [98, 51, 100, 109],\n INSTANCED_MODEL: [105, 51, 100, 109],\n POINT_CLOUD: [112, 110, 116, 115],\n COMPOSITE: [99, 109, 112, 116]\n};\nexport const TILE3D_OPTIMIZATION_HINT = {\n NOT_COMPUTED: -1,\n USE_OPTIMIZATION: 1,\n SKIP_OPTIMIZATION: 0\n};\n//# sourceMappingURL=constants.js.map","import { assert } from '@loaders.gl/loader-utils';\nexport function getStringFromArrayBuffer(arrayBuffer, byteOffset, byteLength) {\n assert(arrayBuffer instanceof ArrayBuffer);\n const textDecoder = new TextDecoder('utf8');\n const typedArray = new Uint8Array(arrayBuffer, byteOffset, byteLength);\n const string = textDecoder.decode(typedArray);\n return string;\n}\nexport function getStringFromTypedArray(typedArray) {\n assert(ArrayBuffer.isView(typedArray));\n const textDecoder = new TextDecoder('utf8');\n const string = textDecoder.decode(typedArray);\n return string;\n}\nexport function getMagicString(arrayBuffer, byteOffset = 0) {\n const dataView = new DataView(arrayBuffer);\n return \"\".concat(String.fromCharCode(dataView.getUint8(byteOffset + 0))).concat(String.fromCharCode(dataView.getUint8(byteOffset + 1))).concat(String.fromCharCode(dataView.getUint8(byteOffset + 2))).concat(String.fromCharCode(dataView.getUint8(byteOffset + 3)));\n}\n//# sourceMappingURL=parse-utils.js.map","export const GL_PRIMITIVE = {\n POINTS: 0x0000,\n LINES: 0x0001,\n TRIANGLES: 0x0004\n};\nexport const GL_PRIMITIVE_MODE = {\n POINTS: 0x0000,\n LINES: 0x0001,\n LINE_LOOP: 0x0002,\n LINE_STRIP: 0x0003,\n TRIANGLES: 0x0004,\n TRIANGLE_STRIP: 0x0005,\n TRIANGLE_FAN: 0x0006\n};\nexport const GL_TYPE = {\n BYTE: 5120,\n UNSIGNED_BYTE: 5121,\n SHORT: 5122,\n UNSIGNED_SHORT: 5123,\n INT: 5124,\n UNSIGNED_INT: 5125,\n FLOAT: 5126,\n DOUBLE: 5130\n};\nexport const GL = { ...GL_PRIMITIVE_MODE,\n ...GL_TYPE\n};\n//# sourceMappingURL=constants.js.map","import { GL_TYPE as GL } from '../constants';\nconst GL_TYPE_TO_ARRAY_TYPE = {\n [GL.DOUBLE]: Float64Array,\n [GL.FLOAT]: Float32Array,\n [GL.UNSIGNED_SHORT]: Uint16Array,\n [GL.UNSIGNED_INT]: Uint32Array,\n [GL.UNSIGNED_BYTE]: Uint8Array,\n [GL.BYTE]: Int8Array,\n [GL.SHORT]: Int16Array,\n [GL.INT]: Int32Array\n};\nconst NAME_TO_GL_TYPE = {\n DOUBLE: GL.DOUBLE,\n FLOAT: GL.FLOAT,\n UNSIGNED_SHORT: GL.UNSIGNED_SHORT,\n UNSIGNED_INT: GL.UNSIGNED_INT,\n UNSIGNED_BYTE: GL.UNSIGNED_BYTE,\n BYTE: GL.BYTE,\n SHORT: GL.SHORT,\n INT: GL.INT\n};\nconst ERR_TYPE_CONVERSION = 'Failed to convert GL type';\nexport default class GLType {\n static fromTypedArray(arrayOrType) {\n arrayOrType = ArrayBuffer.isView(arrayOrType) ? arrayOrType.constructor : arrayOrType;\n\n for (const glType in GL_TYPE_TO_ARRAY_TYPE) {\n const ArrayType = GL_TYPE_TO_ARRAY_TYPE[glType];\n\n if (ArrayType === arrayOrType) {\n return glType;\n }\n }\n\n throw new Error(ERR_TYPE_CONVERSION);\n }\n\n static fromName(name) {\n const glType = NAME_TO_GL_TYPE[name];\n\n if (!glType) {\n throw new Error(ERR_TYPE_CONVERSION);\n }\n\n return glType;\n }\n\n static getArrayType(glType) {\n switch (glType) {\n case GL.UNSIGNED_SHORT_5_6_5:\n case GL.UNSIGNED_SHORT_4_4_4_4:\n case GL.UNSIGNED_SHORT_5_5_5_1:\n return Uint16Array;\n\n default:\n const ArrayType = GL_TYPE_TO_ARRAY_TYPE[glType];\n\n if (!ArrayType) {\n throw new Error(ERR_TYPE_CONVERSION);\n }\n\n return ArrayType;\n }\n }\n\n static getByteSize(glType) {\n const ArrayType = GLType.getArrayType(glType);\n return ArrayType.BYTES_PER_ELEMENT;\n }\n\n static validate(glType) {\n return Boolean(GLType.getArrayType(glType));\n }\n\n static createTypedArray(glType, buffer, byteOffset = 0, length) {\n if (length === undefined) {\n length = (buffer.byteLength - byteOffset) / GLType.getByteSize(glType);\n }\n\n const ArrayType = GLType.getArrayType(glType);\n return new ArrayType(buffer, byteOffset, length);\n }\n\n}\n//# sourceMappingURL=gl-type.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { GL, GLType } from '@loaders.gl/math';\nexport default class Tile3DFeatureTable {\n constructor(featureTableJson, featureTableBinary) {\n _defineProperty(this, \"json\", void 0);\n\n _defineProperty(this, \"buffer\", void 0);\n\n _defineProperty(this, \"featuresLength\", 0);\n\n _defineProperty(this, \"_cachedTypedArrays\", {});\n\n this.json = featureTableJson;\n this.buffer = featureTableBinary;\n }\n\n getExtension(extensionName) {\n return this.json.extensions && this.json.extensions[extensionName];\n }\n\n hasProperty(propertyName) {\n return Boolean(this.json[propertyName]);\n }\n\n getGlobalProperty(propertyName, componentType = GL.UNSIGNED_INT, componentLength = 1) {\n const jsonValue = this.json[propertyName];\n\n if (jsonValue && Number.isFinite(jsonValue.byteOffset)) {\n return this._getTypedArrayFromBinary(propertyName, componentType, componentLength, 1, jsonValue.byteOffset);\n }\n\n return jsonValue;\n }\n\n getPropertyArray(propertyName, componentType, componentLength) {\n const jsonValue = this.json[propertyName];\n\n if (jsonValue && Number.isFinite(jsonValue.byteOffset)) {\n if ('componentType' in jsonValue) {\n componentType = GLType.fromName(jsonValue.componentType);\n }\n\n return this._getTypedArrayFromBinary(propertyName, componentType, componentLength, this.featuresLength, jsonValue.byteOffset);\n }\n\n return this._getTypedArrayFromArray(propertyName, componentType, jsonValue);\n }\n\n getProperty(propertyName, componentType, componentLength, featureId, result) {\n const jsonValue = this.json[propertyName];\n\n if (!jsonValue) {\n return jsonValue;\n }\n\n const typedArray = this.getPropertyArray(propertyName, componentType, componentLength);\n\n if (componentLength === 1) {\n return typedArray[featureId];\n }\n\n for (let i = 0; i < componentLength; ++i) {\n result[i] = typedArray[componentLength * featureId + i];\n }\n\n return result;\n }\n\n _getTypedArrayFromBinary(propertyName, componentType, componentLength, count, byteOffset) {\n const cachedTypedArrays = this._cachedTypedArrays;\n let typedArray = cachedTypedArrays[propertyName];\n\n if (!typedArray) {\n typedArray = GLType.createTypedArray(componentType, this.buffer.buffer, this.buffer.byteOffset + byteOffset, count * componentLength);\n cachedTypedArrays[propertyName] = typedArray;\n }\n\n return typedArray;\n }\n\n _getTypedArrayFromArray(propertyName, componentType, array) {\n const cachedTypedArrays = this._cachedTypedArrays;\n let typedArray = cachedTypedArrays[propertyName];\n\n if (!typedArray) {\n typedArray = GLType.createTypedArray(componentType, array);\n cachedTypedArrays[propertyName] = typedArray;\n }\n\n return typedArray;\n }\n\n}\n//# sourceMappingURL=tile-3d-feature-table.js.map","import { GLType } from '@loaders.gl/math';\nimport { assert } from '@loaders.gl/loader-utils';\nconst COMPONENTS_PER_ATTRIBUTE = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\nconst UNPACKER = {\n SCALAR: (values, i) => values[i],\n VEC2: (values, i) => [values[2 * i + 0], values[2 * i + 1]],\n VEC3: (values, i) => [values[3 * i + 0], values[3 * i + 1], values[3 * i + 2]],\n VEC4: (values, i) => [values[4 * i + 0], values[4 * i + 1], values[4 * i + 2], values[4 * i + 3]],\n MAT2: (values, i) => [values[4 * i + 0], values[4 * i + 1], values[4 * i + 2], values[4 * i + 3]],\n MAT3: (values, i) => [values[9 * i + 0], values[9 * i + 1], values[9 * i + 2], values[9 * i + 3], values[9 * i + 4], values[9 * i + 5], values[9 * i + 6], values[9 * i + 7], values[9 * i + 8]],\n MAT4: (values, i) => [values[16 * i + 0], values[16 * i + 1], values[16 * i + 2], values[16 * i + 3], values[16 * i + 4], values[16 * i + 5], values[16 * i + 6], values[16 * i + 7], values[16 * i + 8], values[16 * i + 9], values[16 * i + 10], values[16 * i + 11], values[16 * i + 12], values[16 * i + 13], values[16 * i + 14], values[16 * i + 15]]\n};\nconst PACKER = {\n SCALAR: (x, values, i) => {\n values[i] = x;\n },\n VEC2: (x, values, i) => {\n values[2 * i + 0] = x[0];\n values[2 * i + 1] = x[1];\n },\n VEC3: (x, values, i) => {\n values[3 * i + 0] = x[0];\n values[3 * i + 1] = x[1];\n values[3 * i + 2] = x[2];\n },\n VEC4: (x, values, i) => {\n values[4 * i + 0] = x[0];\n values[4 * i + 1] = x[1];\n values[4 * i + 2] = x[2];\n values[4 * i + 3] = x[3];\n },\n MAT2: (x, values, i) => {\n values[4 * i + 0] = x[0];\n values[4 * i + 1] = x[1];\n values[4 * i + 2] = x[2];\n values[4 * i + 3] = x[3];\n },\n MAT3: (x, values, i) => {\n values[9 * i + 0] = x[0];\n values[9 * i + 1] = x[1];\n values[9 * i + 2] = x[2];\n values[9 * i + 3] = x[3];\n values[9 * i + 4] = x[4];\n values[9 * i + 5] = x[5];\n values[9 * i + 6] = x[6];\n values[9 * i + 7] = x[7];\n values[9 * i + 8] = x[8];\n values[9 * i + 9] = x[9];\n },\n MAT4: (x, values, i) => {\n values[16 * i + 0] = x[0];\n values[16 * i + 1] = x[1];\n values[16 * i + 2] = x[2];\n values[16 * i + 3] = x[3];\n values[16 * i + 4] = x[4];\n values[16 * i + 5] = x[5];\n values[16 * i + 6] = x[6];\n values[16 * i + 7] = x[7];\n values[16 * i + 8] = x[8];\n values[16 * i + 9] = x[9];\n values[16 * i + 10] = x[10];\n values[16 * i + 11] = x[11];\n values[16 * i + 12] = x[12];\n values[16 * i + 13] = x[13];\n values[16 * i + 14] = x[14];\n values[16 * i + 15] = x[15];\n }\n};\nexport function createTypedArrayFromAccessor(tile3DAccessor, buffer, byteOffset, length) {\n const {\n componentType\n } = tile3DAccessor;\n assert(tile3DAccessor.componentType);\n const type = typeof componentType === 'string' ? GLType.fromName(componentType) : componentType;\n const size = COMPONENTS_PER_ATTRIBUTE[tile3DAccessor.type];\n const unpacker = UNPACKER[tile3DAccessor.type];\n const packer = PACKER[tile3DAccessor.type];\n byteOffset += tile3DAccessor.byteOffset;\n const values = GLType.createTypedArray(type, buffer, byteOffset, size * length);\n return {\n values,\n type,\n size,\n unpacker,\n packer\n };\n}\n//# sourceMappingURL=tile-3d-accessor-utils.js.map","const defined = x => x !== undefined;\n\nexport function initializeHierarchy(batchTable, jsonHeader, binaryBody) {\n if (!jsonHeader) {\n return null;\n }\n\n let hierarchy = batchTable.getExtension('3DTILES_batch_table_hierarchy');\n const legacyHierarchy = jsonHeader.HIERARCHY;\n\n if (legacyHierarchy) {\n console.warn('3D Tile Parser: HIERARCHY is deprecated. Use 3DTILES_batch_table_hierarchy.');\n jsonHeader.extensions = jsonHeader.extensions || {};\n jsonHeader.extensions['3DTILES_batch_table_hierarchy'] = legacyHierarchy;\n hierarchy = legacyHierarchy;\n }\n\n if (!hierarchy) {\n return null;\n }\n\n return initializeHierarchyValues(hierarchy, binaryBody);\n}\n\nfunction initializeHierarchyValues(hierarchyJson, binaryBody) {\n let i;\n let classId;\n let binaryAccessor;\n const instancesLength = hierarchyJson.instancesLength;\n const classes = hierarchyJson.classes;\n let classIds = hierarchyJson.classIds;\n let parentCounts = hierarchyJson.parentCounts;\n let parentIds = hierarchyJson.parentIds;\n let parentIdsLength = instancesLength;\n\n if (defined(classIds.byteOffset)) {\n classIds.componentType = defaultValue(classIds.componentType, GL.UNSIGNED_SHORT);\n classIds.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(classIds);\n classIds = binaryAccessor.createArrayBufferView(binaryBody.buffer, binaryBody.byteOffset + classIds.byteOffset, instancesLength);\n }\n\n let parentIndexes;\n\n if (defined(parentCounts)) {\n if (defined(parentCounts.byteOffset)) {\n parentCounts.componentType = defaultValue(parentCounts.componentType, GL.UNSIGNED_SHORT);\n parentCounts.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(parentCounts);\n parentCounts = binaryAccessor.createArrayBufferView(binaryBody.buffer, binaryBody.byteOffset + parentCounts.byteOffset, instancesLength);\n }\n\n parentIndexes = new Uint16Array(instancesLength);\n parentIdsLength = 0;\n\n for (i = 0; i < instancesLength; ++i) {\n parentIndexes[i] = parentIdsLength;\n parentIdsLength += parentCounts[i];\n }\n }\n\n if (defined(parentIds) && defined(parentIds.byteOffset)) {\n parentIds.componentType = defaultValue(parentIds.componentType, GL.UNSIGNED_SHORT);\n parentIds.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(parentIds);\n parentIds = binaryAccessor.createArrayBufferView(binaryBody.buffer, binaryBody.byteOffset + parentIds.byteOffset, parentIdsLength);\n }\n\n const classesLength = classes.length;\n\n for (i = 0; i < classesLength; ++i) {\n const classInstancesLength = classes[i].length;\n const properties = classes[i].instances;\n const binaryProperties = getBinaryProperties(classInstancesLength, properties, binaryBody);\n classes[i].instances = combine(binaryProperties, properties);\n }\n\n const classCounts = new Array(classesLength).fill(0);\n const classIndexes = new Uint16Array(instancesLength);\n\n for (i = 0; i < instancesLength; ++i) {\n classId = classIds[i];\n classIndexes[i] = classCounts[classId];\n ++classCounts[classId];\n }\n\n const hierarchy = {\n classes,\n classIds,\n classIndexes,\n parentCounts,\n parentIndexes,\n parentIds\n };\n validateHierarchy(hierarchy);\n return hierarchy;\n}\n\nexport function traverseHierarchy(hierarchy, instanceIndex, endConditionCallback) {\n if (!hierarchy) {\n return;\n }\n\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n\n if (parentIds) {\n return endConditionCallback(hierarchy, instanceIndex);\n }\n\n if (parentCounts > 0) {\n return traverseHierarchyMultipleParents(hierarchy, instanceIndex, endConditionCallback);\n }\n\n return traverseHierarchySingleParent(hierarchy, instanceIndex, endConditionCallback);\n}\n\nfunction traverseHierarchyMultipleParents(hierarchy, instanceIndex, endConditionCallback) {\n const classIds = hierarchy.classIds;\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n const parentIndexes = hierarchy.parentIndexes;\n const instancesLength = classIds.length;\n const visited = scratchVisited;\n visited.length = Math.max(visited.length, instancesLength);\n const visitedMarker = ++marker;\n const stack = scratchStack;\n stack.length = 0;\n stack.push(instanceIndex);\n\n while (stack.length > 0) {\n instanceIndex = stack.pop();\n\n if (visited[instanceIndex] === visitedMarker) {\n continue;\n }\n\n visited[instanceIndex] = visitedMarker;\n const result = endConditionCallback(hierarchy, instanceIndex);\n\n if (defined(result)) {\n return result;\n }\n\n const parentCount = parentCounts[instanceIndex];\n const parentIndex = parentIndexes[instanceIndex];\n\n for (let i = 0; i < parentCount; ++i) {\n const parentId = parentIds[parentIndex + i];\n\n if (parentId !== instanceIndex) {\n stack.push(parentId);\n }\n }\n }\n\n return null;\n}\n\nfunction traverseHierarchySingleParent(hierarchy, instanceIndex, endConditionCallback) {\n let hasParent = true;\n\n while (hasParent) {\n const result = endConditionCallback(hierarchy, instanceIndex);\n\n if (defined(result)) {\n return result;\n }\n\n const parentId = hierarchy.parentIds[instanceIndex];\n hasParent = parentId !== instanceIndex;\n instanceIndex = parentId;\n }\n\n throw new Error('traverseHierarchySingleParent');\n}\n\nfunction validateHierarchy(hierarchy) {\n const scratchValidateStack = [];\n const classIds = hierarchy.classIds;\n const instancesLength = classIds.length;\n\n for (let i = 0; i < instancesLength; ++i) {\n validateInstance(hierarchy, i, stack);\n }\n}\n\nfunction validateInstance(hierarchy, instanceIndex, stack) {\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n const parentIndexes = hierarchy.parentIndexes;\n const classIds = hierarchy.classIds;\n const instancesLength = classIds.length;\n\n if (!defined(parentIds)) {\n return;\n }\n\n assert(instanceIndex < instancesLength, \"Parent index \".concat(instanceIndex, \" exceeds the total number of instances: \").concat(instancesLength));\n assert(stack.indexOf(instanceIndex) === -1, 'Circular dependency detected in the batch table hierarchy.');\n stack.push(instanceIndex);\n const parentCount = defined(parentCounts) ? parentCounts[instanceIndex] : 1;\n const parentIndex = defined(parentCounts) ? parentIndexes[instanceIndex] : instanceIndex;\n\n for (let i = 0; i < parentCount; ++i) {\n const parentId = parentIds[parentIndex + i];\n\n if (parentId !== instanceIndex) {\n validateInstance(hierarchy, parentId, stack);\n }\n }\n\n stack.pop(instanceIndex);\n}\n//# sourceMappingURL=tile-3d-batch-table-hierarchy.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { assert } from '@loaders.gl/loader-utils';\nimport { createTypedArrayFromAccessor } from './helpers/tile-3d-accessor-utils';\nimport { initializeHierarchy, traverseHierarchy } from './tile-3d-batch-table-hierarchy';\n\nfunction defined(x) {\n return x !== undefined && x !== null;\n}\n\nconst clone = (x, y) => x;\n\nconst IGNORED_PROPERTY_FIELDS = {\n HIERARCHY: true,\n extensions: true,\n extras: true\n};\nexport default class Tile3DBatchTableParser {\n constructor(json, binary, featureCount, options = {}) {\n var _this$json;\n\n _defineProperty(this, \"json\", void 0);\n\n _defineProperty(this, \"binary\", void 0);\n\n _defineProperty(this, \"featureCount\", void 0);\n\n _defineProperty(this, \"_extensions\", void 0);\n\n _defineProperty(this, \"_properties\", void 0);\n\n _defineProperty(this, \"_binaryProperties\", void 0);\n\n _defineProperty(this, \"_hierarchy\", void 0);\n\n assert(featureCount >= 0);\n this.json = json || {};\n this.binary = binary;\n this.featureCount = featureCount;\n this._extensions = ((_this$json = this.json) === null || _this$json === void 0 ? void 0 : _this$json.extensions) || {};\n this._properties = {};\n\n for (const propertyName in this.json) {\n if (!IGNORED_PROPERTY_FIELDS[propertyName]) {\n this._properties[propertyName] = this.json[propertyName];\n }\n }\n\n this._binaryProperties = this._initializeBinaryProperties();\n\n if (options['3DTILES_batch_table_hierarchy']) {\n this._hierarchy = initializeHierarchy(this, this.json, this.binary);\n }\n }\n\n getExtension(extensionName) {\n return this.json && this.json.extensions && this.json.extensions[extensionName];\n }\n\n memorySizeInBytes() {\n return 0;\n }\n\n isClass(batchId, className) {\n this._checkBatchId(batchId);\n\n assert(typeof className === 'string', className);\n\n if (this._hierarchy) {\n const result = traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {\n const classId = hierarchy.classIds[instanceIndex];\n const instanceClass = hierarchy.classes[classId];\n return instanceClass.name === className;\n });\n return defined(result);\n }\n\n return false;\n }\n\n isExactClass(batchId, className) {\n assert(typeof className === 'string', className);\n return this.getExactClassName(batchId) === className;\n }\n\n getExactClassName(batchId) {\n this._checkBatchId(batchId);\n\n if (this._hierarchy) {\n const classId = this._hierarchy.classIds[batchId];\n const instanceClass = this._hierarchy.classes[classId];\n return instanceClass.name;\n }\n\n return undefined;\n }\n\n hasProperty(batchId, name) {\n this._checkBatchId(batchId);\n\n assert(typeof name === 'string', name);\n return defined(this._properties[name]) || this._hasPropertyInHierarchy(batchId, name);\n }\n\n getPropertyNames(batchId, results) {\n this._checkBatchId(batchId);\n\n results = defined(results) ? results : [];\n results.length = 0;\n const propertyNames = Object.keys(this._properties);\n results.push(...propertyNames);\n\n if (this._hierarchy) {\n this._getPropertyNamesInHierarchy(batchId, results);\n }\n\n return results;\n }\n\n getProperty(batchId, name) {\n this._checkBatchId(batchId);\n\n assert(typeof name === 'string', name);\n\n if (this._binaryProperties) {\n const binaryProperty = this._binaryProperties[name];\n\n if (defined(binaryProperty)) {\n return this._getBinaryProperty(binaryProperty, batchId);\n }\n }\n\n const propertyValues = this._properties[name];\n\n if (defined(propertyValues)) {\n return clone(propertyValues[batchId], true);\n }\n\n if (this._hierarchy) {\n const hierarchyProperty = this._getHierarchyProperty(batchId, name);\n\n if (defined(hierarchyProperty)) {\n return hierarchyProperty;\n }\n }\n\n return undefined;\n }\n\n setProperty(batchId, name, value) {\n const featureCount = this.featureCount;\n\n this._checkBatchId(batchId);\n\n assert(typeof name === 'string', name);\n\n if (this._binaryProperties) {\n const binaryProperty = this._binaryProperties[name];\n\n if (binaryProperty) {\n this._setBinaryProperty(binaryProperty, batchId, value);\n\n return;\n }\n }\n\n if (this._hierarchy) {\n if (this._setHierarchyProperty(this, batchId, name, value)) {\n return;\n }\n }\n\n let propertyValues = this._properties[name];\n\n if (!defined(propertyValues)) {\n this._properties[name] = new Array(featureCount);\n propertyValues = this._properties[name];\n }\n\n propertyValues[batchId] = clone(value, true);\n }\n\n _checkBatchId(batchId) {\n const valid = batchId >= 0 && batchId < this.featureCount;\n\n if (!valid) {\n throw new Error('batchId not in range [0, featureCount - 1].');\n }\n }\n\n _getBinaryProperty(binaryProperty, index) {\n return binaryProperty.unpack(binaryProperty.typedArray, index);\n }\n\n _setBinaryProperty(binaryProperty, index, value) {\n binaryProperty.pack(value, binaryProperty.typedArray, index);\n }\n\n _initializeBinaryProperties() {\n let binaryProperties = null;\n\n for (const name in this._properties) {\n const property = this._properties[name];\n\n const binaryProperty = this._initializeBinaryProperty(name, property);\n\n if (binaryProperty) {\n binaryProperties = binaryProperties || {};\n binaryProperties[name] = binaryProperty;\n }\n }\n\n return binaryProperties;\n }\n\n _initializeBinaryProperty(name, property) {\n if ('byteOffset' in property) {\n const tile3DAccessor = property;\n assert(this.binary, \"Property \".concat(name, \" requires a batch table binary.\"));\n assert(tile3DAccessor.type, \"Property \".concat(name, \" requires a type.\"));\n const accessor = createTypedArrayFromAccessor(tile3DAccessor, this.binary.buffer, this.binary.byteOffset | 0, this.featureCount);\n return {\n typedArray: accessor.values,\n componentCount: accessor.size,\n unpack: accessor.unpacker,\n pack: accessor.packer\n };\n }\n\n return null;\n }\n\n _hasPropertyInHierarchy(batchId, name) {\n if (!this._hierarchy) {\n return false;\n }\n\n const result = traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {\n const classId = hierarchy.classIds[instanceIndex];\n const instances = hierarchy.classes[classId].instances;\n return defined(instances[name]);\n });\n return defined(result);\n }\n\n _getPropertyNamesInHierarchy(batchId, results) {\n traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {\n const classId = hierarchy.classIds[instanceIndex];\n const instances = hierarchy.classes[classId].instances;\n\n for (const name in instances) {\n if (instances.hasOwnProperty(name)) {\n if (results.indexOf(name) === -1) {\n results.push(name);\n }\n }\n }\n });\n }\n\n _getHierarchyProperty(batchId, name) {\n return traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {\n const classId = hierarchy.classIds[instanceIndex];\n const instanceClass = hierarchy.classes[classId];\n const indexInClass = hierarchy.classIndexes[instanceIndex];\n const propertyValues = instanceClass.instances[name];\n\n if (defined(propertyValues)) {\n if (defined(propertyValues.typedArray)) {\n return this._getBinaryProperty(propertyValues, indexInClass);\n }\n\n return clone(propertyValues[indexInClass], true);\n }\n\n return null;\n });\n }\n\n _setHierarchyProperty(batchTable, batchId, name, value) {\n const result = traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {\n const classId = hierarchy.classIds[instanceIndex];\n const instanceClass = hierarchy.classes[classId];\n const indexInClass = hierarchy.classIndexes[instanceIndex];\n const propertyValues = instanceClass.instances[name];\n\n if (defined(propertyValues)) {\n assert(instanceIndex === batchId, \"Inherited property \\\"\".concat(name, \"\\\" is read-only.\"));\n\n if (defined(propertyValues.typedArray)) {\n this._setBinaryProperty(propertyValues, indexInClass, value);\n } else {\n propertyValues[indexInClass] = clone(value, true);\n }\n\n return true;\n }\n\n return false;\n });\n return defined(result);\n }\n\n}\n//# sourceMappingURL=tile-3d-batch-table.js.map","const SIZEOF_UINT32 = 4;\nexport function parse3DTileHeaderSync(tile, arrayBuffer, byteOffset = 0) {\n const view = new DataView(arrayBuffer);\n tile.magic = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n tile.version = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n tile.byteLength = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n\n if (tile.version !== 1) {\n throw new Error(\"3D Tile Version \".concat(tile.version, \" not supported\"));\n }\n\n return byteOffset;\n}\n//# sourceMappingURL=parse-3d-tile-header.js.map","import { getStringFromArrayBuffer } from './parse-utils';\nconst SIZEOF_UINT32 = 4;\nconst DEPRECATION_WARNING = 'b3dm tile in legacy format.';\nexport function parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset) {\n const view = new DataView(arrayBuffer);\n let batchLength;\n tile.header = tile.header || {};\n let featureTableJsonByteLength = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n let featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n let batchTableJsonByteLength = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n let batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n\n if (batchTableJsonByteLength >= 570425344) {\n byteOffset -= SIZEOF_UINT32 * 2;\n batchLength = featureTableJsonByteLength;\n batchTableJsonByteLength = featureTableBinaryByteLength;\n batchTableBinaryByteLength = 0;\n featureTableJsonByteLength = 0;\n featureTableBinaryByteLength = 0;\n console.warn(DEPRECATION_WARNING);\n } else if (batchTableBinaryByteLength >= 570425344) {\n byteOffset -= SIZEOF_UINT32;\n batchLength = batchTableJsonByteLength;\n batchTableJsonByteLength = featureTableJsonByteLength;\n batchTableBinaryByteLength = featureTableBinaryByteLength;\n featureTableJsonByteLength = 0;\n featureTableBinaryByteLength = 0;\n console.warn(DEPRECATION_WARNING);\n }\n\n tile.header.featureTableJsonByteLength = featureTableJsonByteLength;\n tile.header.featureTableBinaryByteLength = featureTableBinaryByteLength;\n tile.header.batchTableJsonByteLength = batchTableJsonByteLength;\n tile.header.batchTableBinaryByteLength = batchTableBinaryByteLength;\n tile.header.batchLength = batchLength;\n return byteOffset;\n}\nexport function parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options) {\n byteOffset = parse3DTileFeatureTable(tile, arrayBuffer, byteOffset, options);\n byteOffset = parse3DTileBatchTable(tile, arrayBuffer, byteOffset, options);\n return byteOffset;\n}\n\nfunction parse3DTileFeatureTable(tile, arrayBuffer, byteOffset, options) {\n const {\n featureTableJsonByteLength,\n featureTableBinaryByteLength,\n batchLength\n } = tile.header;\n tile.featureTableJson = {\n BATCH_LENGTH: batchLength || 0\n };\n\n if (featureTableJsonByteLength > 0) {\n const featureTableString = getStringFromArrayBuffer(arrayBuffer, byteOffset, featureTableJsonByteLength);\n tile.featureTableJson = JSON.parse(featureTableString);\n }\n\n byteOffset += featureTableJsonByteLength;\n tile.featureTableBinary = new Uint8Array(arrayBuffer, byteOffset, featureTableBinaryByteLength);\n byteOffset += featureTableBinaryByteLength;\n return byteOffset;\n}\n\nfunction parse3DTileBatchTable(tile, arrayBuffer, byteOffset, options) {\n const {\n batchTableJsonByteLength,\n batchTableBinaryByteLength\n } = tile.header;\n\n if (batchTableJsonByteLength > 0) {\n const batchTableString = getStringFromArrayBuffer(arrayBuffer, byteOffset, batchTableJsonByteLength);\n tile.batchTableJson = JSON.parse(batchTableString);\n byteOffset += batchTableJsonByteLength;\n\n if (batchTableBinaryByteLength > 0) {\n tile.batchTableBinary = new Uint8Array(arrayBuffer, byteOffset, batchTableBinaryByteLength);\n tile.batchTableBinary = new Uint8Array(tile.batchTableBinary);\n byteOffset += batchTableBinaryByteLength;\n }\n }\n\n return byteOffset;\n}\n//# sourceMappingURL=parse-3d-tile-tables.js.map","export function decodeRGB565(rgb565, target = [0, 0, 0]) {\n const r5 = rgb565 >> 11 & 31;\n const g6 = rgb565 >> 5 & 63;\n const b5 = rgb565 & 31;\n target[0] = r5 << 3;\n target[1] = g6 << 2;\n target[2] = b5 << 3;\n return target;\n}\nexport function encodeRGB565(rgb) {\n const r5 = Math.floor(rgb[0] / 8) + 4;\n const g6 = Math.floor(rgb[1] / 4) + 2;\n const b5 = Math.floor(rgb[2] / 8) + 4;\n return r5 + (g6 << 5) + (b5 << 11);\n}\n//# sourceMappingURL=rgb565.js.map","import { decodeRGB565, GL } from '@loaders.gl/math';\nexport function normalize3DTileColorAttribute(tile, colors, batchTable) {\n if (!colors && (!tile || !tile.batchIds || !batchTable)) {\n return null;\n }\n\n const {\n batchIds,\n isRGB565,\n pointCount\n } = tile;\n\n if (batchIds && batchTable) {\n const colorArray = new Uint8ClampedArray(pointCount * 3);\n\n for (let i = 0; i < pointCount; i++) {\n const batchId = batchIds[i];\n const dimensions = batchTable.getProperty(batchId, 'dimensions');\n const color = dimensions.map(d => d * 255);\n colorArray[i * 3] = color[0];\n colorArray[i * 3 + 1] = color[1];\n colorArray[i * 3 + 2] = color[2];\n }\n\n return {\n type: GL.UNSIGNED_BYTE,\n value: colorArray,\n size: 3,\n normalized: true\n };\n }\n\n if (isRGB565) {\n const colorArray = new Uint8ClampedArray(pointCount * 3);\n\n for (let i = 0; i < pointCount; i++) {\n const color = decodeRGB565(colors[i]);\n colorArray[i * 3] = color[0];\n colorArray[i * 3 + 1] = color[1];\n colorArray[i * 3 + 2] = color[2];\n }\n\n return {\n type: GL.UNSIGNED_BYTE,\n value: colorArray,\n size: 3,\n normalized: true\n };\n }\n\n if (colors && colors.length === pointCount * 3) {\n return {\n type: GL.UNSIGNED_BYTE,\n value: colors,\n size: 3,\n normalized: true\n };\n }\n\n return {\n type: GL.UNSIGNED_BYTE,\n value: colors,\n size: 4,\n normalized: true\n };\n}\n//# sourceMappingURL=normalize-3d-tile-colors.js.map","export function assert(condition, message) {\n if (!condition) {\n throw new Error(\"math.gl assertion failed. \".concat(message));\n }\n}\n//# sourceMappingURL=assert.js.map","import { Vector2, Vector3, clamp, _MathUtils } from '@math.gl/core';\nimport { assert } from '../utils/assert';\nconst RIGHT_SHIFT = 1.0 / 256.0;\nconst LEFT_SHIFT = 256.0;\nconst scratchVector2 = new Vector2();\nconst scratchVector3 = new Vector3();\nconst scratchEncodeVector2 = new Vector2();\nconst octEncodeScratch = new Vector2();\nconst uint8ForceArray = new Uint8Array(1);\n\nfunction forceUint8(value) {\n uint8ForceArray[0] = value;\n return uint8ForceArray[0];\n}\n\nfunction fromSNorm(value, rangeMaximum = 255) {\n return clamp(value, 0.0, rangeMaximum) / rangeMaximum * 2.0 - 1.0;\n}\n\nfunction toSNorm(value, rangeMaximum = 255) {\n return Math.round((clamp(value, -1.0, 1.0) * 0.5 + 0.5) * rangeMaximum);\n}\n\nfunction signNotZero(value) {\n return value < 0.0 ? -1.0 : 1.0;\n}\n\nexport function octEncodeInRange(vector, rangeMax, result) {\n assert(vector);\n assert(result);\n const vector3 = scratchVector3.from(vector);\n assert(Math.abs(vector3.magnitudeSquared() - 1.0) <= _MathUtils.EPSILON6);\n result.x = vector.x / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z));\n result.y = vector.y / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z));\n\n if (vector.z < 0) {\n const x = result.x;\n const y = result.y;\n result.x = (1.0 - Math.abs(y)) * signNotZero(x);\n result.y = (1.0 - Math.abs(x)) * signNotZero(y);\n }\n\n result.x = toSNorm(result.x, rangeMax);\n result.y = toSNorm(result.y, rangeMax);\n return result;\n}\nexport function octEncode(vector, result) {\n return octEncodeInRange(vector, 255, result);\n}\nexport function octEncodeToVector4(vector, result) {\n octEncodeInRange(vector, 65535, octEncodeScratch);\n result.x = forceUint8(octEncodeScratch.x * RIGHT_SHIFT);\n result.y = forceUint8(octEncodeScratch.x);\n result.z = forceUint8(octEncodeScratch.y * RIGHT_SHIFT);\n result.w = forceUint8(octEncodeScratch.y);\n return result;\n}\nexport function octDecodeInRange(x, y, rangeMax, result) {\n assert(result);\n\n if (x < 0 || x > rangeMax || y < 0 || y > rangeMax) {\n throw new Error(\"x and y must be unsigned normalized integers between 0 and \".concat(rangeMax));\n }\n\n result.x = fromSNorm(x, rangeMax);\n result.y = fromSNorm(y, rangeMax);\n result.z = 1.0 - (Math.abs(result.x) + Math.abs(result.y));\n\n if (result.z < 0.0) {\n const oldVX = result.x;\n result.x = (1.0 - Math.abs(result.y)) * signNotZero(oldVX);\n result.y = (1.0 - Math.abs(oldVX)) * signNotZero(result.y);\n }\n\n return result.normalize();\n}\nexport function octDecode(x, y, result) {\n return octDecodeInRange(x, y, 255, result);\n}\nexport function octDecodeFromVector4(encoded, result) {\n assert(encoded);\n assert(result);\n const x = encoded.x;\n const y = encoded.y;\n const z = encoded.z;\n const w = encoded.w;\n\n if (x < 0 || x > 255 || y < 0 || y > 255 || z < 0 || z > 255 || w < 0 || w > 255) {\n throw new Error('x, y, z, and w must be unsigned normalized integers between 0 and 255');\n }\n\n const xOct16 = x * LEFT_SHIFT + y;\n const yOct16 = z * LEFT_SHIFT + w;\n return octDecodeInRange(xOct16, yOct16, 65535, result);\n}\nexport function octPackFloat(encoded) {\n const vector2 = scratchVector2.from(encoded);\n return 256.0 * vector2.x + vector2.y;\n}\nexport function octEncodeFloat(vector) {\n octEncode(vector, scratchEncodeVector2);\n return octPackFloat(scratchEncodeVector2);\n}\nexport function octDecodeFloat(value, result) {\n assert(Number.isFinite(value));\n const temp = value / 256.0;\n const x = Math.floor(temp);\n const y = (temp - x) * 256.0;\n return octDecode(x, y, result);\n}\nexport function octPack(v1, v2, v3, result) {\n assert(v1);\n assert(v2);\n assert(v3);\n assert(result);\n const encoded1 = octEncodeFloat(v1);\n const encoded2 = octEncodeFloat(v2);\n const encoded3 = octEncode(v3, scratchEncodeVector2);\n result.x = 65536.0 * encoded3.x + encoded1;\n result.y = 65536.0 * encoded3.y + encoded2;\n return result;\n}\nexport function octUnpack(packed, v1, v2, v3) {\n let temp = packed.x / 65536.0;\n const x = Math.floor(temp);\n const encodedFloat1 = (temp - x) * 65536.0;\n temp = packed.y / 65536.0;\n const y = Math.floor(temp);\n const encodedFloat2 = (temp - y) * 65536.0;\n octDecodeFloat(encodedFloat1, v1);\n octDecodeFloat(encodedFloat2, v2);\n octDecode(x, y, v3);\n}\nexport function compressTextureCoordinates(textureCoordinates) {\n const x = textureCoordinates.x * 4095.0 | 0;\n const y = textureCoordinates.y * 4095.0 | 0;\n return 4096.0 * x + y;\n}\nexport function decompressTextureCoordinates(compressed, result) {\n const temp = compressed / 4096.0;\n const xZeroTo4095 = Math.floor(temp);\n result.x = xZeroTo4095 / 4095.0;\n result.y = (compressed - xZeroTo4095 * 4096) / 4095;\n return result;\n}\nexport function zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer) {\n assert(uBuffer);\n assert(vBuffer);\n assert(uBuffer.length === vBuffer.length);\n\n if (heightBuffer) {\n assert(uBuffer.length === heightBuffer.length);\n }\n\n function zigZagDecode(value) {\n return value >> 1 ^ -(value & 1);\n }\n\n let u = 0;\n let v = 0;\n let height = 0;\n\n for (let i = 0; i < uBuffer.length; ++i) {\n u += zigZagDecode(uBuffer[i]);\n v += zigZagDecode(vBuffer[i]);\n uBuffer[i] = u;\n vBuffer[i] = v;\n\n if (heightBuffer) {\n height += zigZagDecode(heightBuffer[i]);\n heightBuffer[i] = height;\n }\n }\n}\n//# sourceMappingURL=attribute-compression.js.map","import { Vector3 } from '@math.gl/core';\nimport { GL, octDecode } from '@loaders.gl/math';\nconst scratchNormal = new Vector3();\nexport function normalize3DTileNormalAttribute(tile, normals) {\n if (!normals) {\n return null;\n }\n\n if (tile.isOctEncoded16P) {\n const decodedArray = new Float32Array(tile.pointsLength * 3);\n\n for (let i = 0; i < tile.pointsLength; i++) {\n octDecode(normals[i * 2], normals[i * 2 + 1], scratchNormal);\n scratchNormal.toArray(decodedArray, i * 3);\n }\n\n return {\n type: GL.FLOAT,\n size: 2,\n value: decodedArray\n };\n }\n\n return {\n type: GL.FLOAT,\n size: 2,\n value: normals\n };\n}\n//# sourceMappingURL=normalize-3d-tile-normals.js.map","import { Vector3 } from '@math.gl/core';\nimport { GL } from '@loaders.gl/math';\nexport function normalize3DTilePositionAttribute(tile, positions, options) {\n if (!tile.isQuantized) {\n return positions;\n }\n\n if (options['3d-tiles'] && options['3d-tiles'].decodeQuantizedPositions) {\n tile.isQuantized = false;\n return decodeQuantizedPositions(tile, positions);\n }\n\n return {\n type: GL.UNSIGNED_SHORT,\n value: positions,\n size: 3,\n normalized: true\n };\n}\n\nfunction decodeQuantizedPositions(tile, positions) {\n const scratchPosition = new Vector3();\n const decodedArray = new Float32Array(tile.pointCount * 3);\n\n for (let i = 0; i < tile.pointCount; i++) {\n scratchPosition.set(positions[i * 3], positions[i * 3 + 1], positions[i * 3 + 2]).scale(1 / tile.quantizedRange).multiply(tile.quantizedVolumeScale).add(tile.quantizedVolumeOffset).toArray(decodedArray, i * 3);\n }\n\n return decodedArray;\n}\n//# sourceMappingURL=normalize-3d-tile-positions.js.map","import { DracoLoader } from '@loaders.gl/draco';\nimport { GL } from '@loaders.gl/math';\nimport { Vector3 } from '@math.gl/core';\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\nimport Tile3DBatchTable from '../classes/tile-3d-batch-table';\nimport { parse3DTileHeaderSync } from './helpers/parse-3d-tile-header';\nimport { parse3DTileTablesHeaderSync, parse3DTileTablesSync } from './helpers/parse-3d-tile-tables';\nimport { normalize3DTileColorAttribute } from './helpers/normalize-3d-tile-colors';\nimport { normalize3DTileNormalAttribute } from './helpers/normalize-3d-tile-normals';\nimport { normalize3DTilePositionAttribute } from './helpers/normalize-3d-tile-positions';\nexport async function parsePointCloud3DTile(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n initializeTile(tile);\n const {\n featureTable,\n batchTable\n } = parsePointCloudTables(tile);\n await parseDraco(tile, featureTable, batchTable, options, context);\n parsePositions(tile, featureTable, options);\n parseColors(tile, featureTable, batchTable);\n parseNormals(tile, featureTable);\n return byteOffset;\n}\n\nfunction initializeTile(tile) {\n tile.attributes = {\n positions: null,\n colors: null,\n normals: null,\n batchIds: null\n };\n tile.isQuantized = false;\n tile.isTranslucent = false;\n tile.isRGB565 = false;\n tile.isOctEncoded16P = false;\n}\n\nfunction parsePointCloudTables(tile) {\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n const pointsLength = featureTable.getGlobalProperty('POINTS_LENGTH');\n\n if (!Number.isFinite(pointsLength)) {\n throw new Error('POINTS_LENGTH must be defined');\n }\n\n featureTable.featuresLength = pointsLength;\n tile.featuresLength = pointsLength;\n tile.pointsLength = pointsLength;\n tile.pointCount = pointsLength;\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n const batchTable = parseBatchIds(tile, featureTable);\n return {\n featureTable,\n batchTable\n };\n}\n\nfunction parsePositions(tile, featureTable, options) {\n if (!tile.attributes.positions) {\n if (featureTable.hasProperty('POSITION')) {\n tile.attributes.positions = featureTable.getPropertyArray('POSITION', GL.FLOAT, 3);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n const positions = featureTable.getPropertyArray('POSITION_QUANTIZED', GL.UNSIGNED_SHORT, 3);\n tile.isQuantized = true;\n tile.quantizedRange = (1 << 16) - 1;\n tile.quantizedVolumeScale = featureTable.getGlobalProperty('QUANTIZED_VOLUME_SCALE', GL.FLOAT, 3);\n\n if (!tile.quantizedVolumeScale) {\n throw new Error('QUANTIZED_VOLUME_SCALE must be defined for quantized positions.');\n }\n\n tile.quantizedVolumeOffset = featureTable.getGlobalProperty('QUANTIZED_VOLUME_OFFSET', GL.FLOAT, 3);\n\n if (!tile.quantizedVolumeOffset) {\n throw new Error('QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.');\n }\n\n tile.attributes.positions = normalize3DTilePositionAttribute(tile, positions, options);\n }\n }\n\n if (!tile.attributes.positions) {\n throw new Error('Either POSITION or POSITION_QUANTIZED must be defined.');\n }\n}\n\nfunction parseColors(tile, featureTable, batchTable) {\n if (!tile.attributes.colors) {\n let colors = null;\n\n if (featureTable.hasProperty('RGBA')) {\n colors = featureTable.getPropertyArray('RGBA', GL.UNSIGNED_BYTE, 4);\n tile.isTranslucent = true;\n } else if (featureTable.hasProperty('RGB')) {\n colors = featureTable.getPropertyArray('RGB', GL.UNSIGNED_BYTE, 3);\n } else if (featureTable.hasProperty('RGB565')) {\n colors = featureTable.getPropertyArray('RGB565', GL.UNSIGNED_SHORT, 1);\n tile.isRGB565 = true;\n }\n\n tile.attributes.colors = normalize3DTileColorAttribute(tile, colors, batchTable);\n }\n\n if (featureTable.hasProperty('CONSTANT_RGBA')) {\n tile.constantRGBA = featureTable.getGlobalProperty('CONSTANT_RGBA', GL.UNSIGNED_BYTE, 4);\n }\n}\n\nfunction parseNormals(tile, featureTable) {\n if (!tile.attributes.normals) {\n let normals = null;\n\n if (featureTable.hasProperty('NORMAL')) {\n normals = featureTable.getPropertyArray('NORMAL', GL.FLOAT, 3);\n } else if (featureTable.hasProperty('NORMAL_OCT16P')) {\n normals = featureTable.getPropertyArray('NORMAL_OCT16P', GL.UNSIGNED_BYTE, 2);\n tile.isOctEncoded16P = true;\n }\n\n tile.attributes.normals = normalize3DTileNormalAttribute(tile, normals);\n }\n}\n\nfunction parseBatchIds(tile, featureTable) {\n let batchTable = null;\n\n if (!tile.batchIds && featureTable.hasProperty('BATCH_ID')) {\n tile.batchIds = featureTable.getPropertyArray('BATCH_ID', GL.UNSIGNED_SHORT, 1);\n\n if (tile.batchIds) {\n const batchFeatureLength = featureTable.getGlobalProperty('BATCH_LENGTH');\n\n if (!batchFeatureLength) {\n throw new Error('Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.');\n }\n\n const {\n batchTableJson,\n batchTableBinary\n } = tile;\n batchTable = new Tile3DBatchTable(batchTableJson, batchTableBinary, batchFeatureLength);\n }\n }\n\n return batchTable;\n}\n\nasync function parseDraco(tile, featureTable, batchTable, options, context) {\n let dracoBuffer;\n let dracoFeatureTableProperties;\n let dracoBatchTableProperties;\n const batchTableDraco = tile.batchTableJson && tile.batchTableJson.extensions && tile.batchTableJson.extensions['3DTILES_draco_point_compression'];\n\n if (batchTableDraco) {\n dracoBatchTableProperties = batchTableDraco.properties;\n }\n\n const featureTableDraco = featureTable.getExtension('3DTILES_draco_point_compression');\n\n if (featureTableDraco) {\n dracoFeatureTableProperties = featureTableDraco.properties;\n const dracoByteOffset = featureTableDraco.byteOffset;\n const dracoByteLength = featureTableDraco.byteLength;\n\n if (!dracoFeatureTableProperties || !Number.isFinite(dracoByteOffset) || !dracoByteLength) {\n throw new Error('Draco properties, byteOffset, and byteLength must be defined');\n }\n\n dracoBuffer = tile.featureTableBinary.slice(dracoByteOffset, dracoByteOffset + dracoByteLength);\n tile.hasPositions = Number.isFinite(dracoFeatureTableProperties.POSITION);\n tile.hasColors = Number.isFinite(dracoFeatureTableProperties.RGB) || Number.isFinite(dracoFeatureTableProperties.RGBA);\n tile.hasNormals = Number.isFinite(dracoFeatureTableProperties.NORMAL);\n tile.hasBatchIds = Number.isFinite(dracoFeatureTableProperties.BATCH_ID);\n tile.isTranslucent = Number.isFinite(dracoFeatureTableProperties.RGBA);\n }\n\n if (!dracoBuffer) {\n return true;\n }\n\n const dracoData = {\n buffer: dracoBuffer,\n properties: { ...dracoFeatureTableProperties,\n ...dracoBatchTableProperties\n },\n featureTableProperties: dracoFeatureTableProperties,\n batchTableProperties: dracoBatchTableProperties,\n dequantizeInShader: false\n };\n return await loadDraco(tile, dracoData, options, context);\n}\n\nexport async function loadDraco(tile, dracoData, options, context) {\n const {\n parse\n } = context;\n const dracoOptions = { ...options,\n draco: { ...options.draco,\n extraAttributes: dracoData.batchTableProperties || {}\n }\n };\n delete dracoOptions['3d-tiles'];\n const data = await parse(dracoData.buffer, DracoLoader, dracoOptions);\n const decodedPositions = data.attributes.POSITION && data.attributes.POSITION.value;\n const decodedColors = data.attributes.COLOR_0 && data.attributes.COLOR_0.value;\n const decodedNormals = data.attributes.NORMAL && data.attributes.NORMAL.value;\n const decodedBatchIds = data.attributes.BATCH_ID && data.attributes.BATCH_ID.value;\n const isQuantizedDraco = decodedPositions && data.attributes.POSITION.value.quantization;\n const isOctEncodedDraco = decodedNormals && data.attributes.NORMAL.value.quantization;\n\n if (isQuantizedDraco) {\n const quantization = data.POSITION.data.quantization;\n const range = quantization.range;\n tile.quantizedVolumeScale = new Vector3(range, range, range);\n tile.quantizedVolumeOffset = new Vector3(quantization.minValues);\n tile.quantizedRange = (1 << quantization.quantizationBits) - 1.0;\n tile.isQuantizedDraco = true;\n }\n\n if (isOctEncodedDraco) {\n tile.octEncodedRange = (1 << data.NORMAL.data.quantization.quantizationBits) - 1.0;\n tile.isOctEncodedDraco = true;\n }\n\n const batchTableAttributes = {};\n\n if (dracoData.batchTableProperties) {\n for (const attributeName of Object.keys(dracoData.batchTableProperties)) {\n if (data.attributes[attributeName] && data.attributes[attributeName].value) {\n batchTableAttributes[attributeName.toLowerCase()] = data.attributes[attributeName].value;\n }\n }\n }\n\n tile.attributes = {\n positions: decodedPositions,\n colors: normalize3DTileColorAttribute(tile, decodedColors, undefined),\n normals: decodedNormals,\n batchIds: decodedBatchIds,\n ...batchTableAttributes\n };\n}\n//# sourceMappingURL=parse-3d-tile-point-cloud.js.map","import { GLTFLoader } from '@loaders.gl/gltf';\nimport { sliceArrayBuffer } from '@loaders.gl/loader-utils';\nexport const GLTF_FORMAT = {\n URI: 0,\n EMBEDDED: 1\n};\nexport function parse3DTileGLTFViewSync(tile, arrayBuffer, byteOffset, options) {\n tile.rotateYtoZ = true;\n const gltfByteLength = tile.byteOffset + tile.byteLength - byteOffset;\n\n if (gltfByteLength === 0) {\n throw new Error('glTF byte length must be greater than 0.');\n }\n\n tile.gltfUpAxis = options['3d-tiles'] && options['3d-tiles'].assetGltfUpAxis ? options['3d-tiles'].assetGltfUpAxis : 'Y';\n tile.gltfArrayBuffer = sliceArrayBuffer(arrayBuffer, byteOffset, gltfByteLength);\n tile.gltfByteOffset = 0;\n tile.gltfByteLength = gltfByteLength;\n\n if (byteOffset % 4 === 0) {} else {\n console.warn(\"\".concat(tile.type, \": embedded glb is not aligned to a 4-byte boundary.\"));\n }\n\n return tile.byteOffset + tile.byteLength;\n}\nexport async function extractGLTF(tile, gltfFormat, options, context) {\n const tile3DOptions = options['3d-tiles'] || {};\n extractGLTFBufferOrURL(tile, gltfFormat, options);\n\n if (tile3DOptions.loadGLTF) {\n const {\n parse,\n fetch\n } = context;\n\n if (tile.gltfUrl) {\n tile.gltfArrayBuffer = await fetch(tile.gltfUrl, options);\n tile.gltfByteOffset = 0;\n }\n\n if (tile.gltfArrayBuffer) {\n tile.gltf = await parse(tile.gltfArrayBuffer, GLTFLoader, options, context);\n delete tile.gltfArrayBuffer;\n delete tile.gltfByteOffset;\n delete tile.gltfByteLength;\n }\n }\n}\n\nfunction extractGLTFBufferOrURL(tile, gltfFormat, options) {\n switch (gltfFormat) {\n case GLTF_FORMAT.URI:\n const gltfUrlBytes = new Uint8Array(tile.gltfArrayBuffer, tile.gltfByteOffset);\n const textDecoder = new TextDecoder();\n const gltfUrl = textDecoder.decode(gltfUrlBytes);\n tile.gltfUrl = gltfUrl.replace(/[\\s\\0]+$/, '');\n delete tile.gltfArrayBuffer;\n delete tile.gltfByteOffset;\n delete tile.gltfByteLength;\n break;\n\n case GLTF_FORMAT.EMBEDDED:\n break;\n\n default:\n throw new Error('b3dm: Illegal glTF format field');\n }\n}\n//# sourceMappingURL=parse-3d-tile-gltf-view.js.map","import { GL } from '@loaders.gl/math';\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\nimport { parse3DTileHeaderSync } from './helpers/parse-3d-tile-header';\nimport { parse3DTileTablesHeaderSync, parse3DTileTablesSync } from './helpers/parse-3d-tile-tables';\nimport { parse3DTileGLTFViewSync, extractGLTF, GLTF_FORMAT } from './helpers/parse-3d-tile-gltf-view';\nexport async function parseBatchedModel3DTile(tile, arrayBuffer, byteOffset, options, context) {\n var _tile$gltf;\n\n byteOffset = parseBatchedModel(tile, arrayBuffer, byteOffset, options, context);\n await extractGLTF(tile, GLTF_FORMAT.EMBEDDED, options, context);\n const extensions = tile === null || tile === void 0 ? void 0 : (_tile$gltf = tile.gltf) === null || _tile$gltf === void 0 ? void 0 : _tile$gltf.extensions;\n\n if (extensions && extensions.CESIUM_RTC) {\n tile.rtcCenter = extensions.CESIUM_RTC.center;\n }\n\n return byteOffset;\n}\n\nfunction parseBatchedModel(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n byteOffset = parse3DTileGLTFViewSync(tile, arrayBuffer, byteOffset, options);\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n return byteOffset;\n}\n//# sourceMappingURL=parse-3d-tile-batched-model.js.map","import { Vector3, Matrix3, Matrix4, Quaternion } from '@math.gl/core';\nimport { Ellipsoid } from '@math.gl/geospatial';\nimport { GL } from '@loaders.gl/math';\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\nimport Tile3DBatchTable from '../classes/tile-3d-batch-table';\nimport { parse3DTileHeaderSync } from './helpers/parse-3d-tile-header';\nimport { parse3DTileTablesHeaderSync, parse3DTileTablesSync } from './helpers/parse-3d-tile-tables';\nimport { parse3DTileGLTFViewSync, extractGLTF } from './helpers/parse-3d-tile-gltf-view';\nexport async function parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parseInstancedModel(tile, arrayBuffer, byteOffset, options, context);\n await extractGLTF(tile, tile.gltfFormat, options, context);\n return byteOffset;\n}\n\nfunction parseInstancedModel(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n\n if (tile.version !== 1) {\n throw new Error(\"Instanced 3D Model version \".concat(tile.version, \" is not supported\"));\n }\n\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n const view = new DataView(arrayBuffer);\n tile.gltfFormat = view.getUint32(byteOffset, true);\n byteOffset += 4;\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n byteOffset = parse3DTileGLTFViewSync(tile, arrayBuffer, byteOffset, options);\n\n if (tile.featureTableJsonByteLength === 0) {\n throw new Error('i3dm parser: featureTableJsonByteLength is zero.');\n }\n\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n const instancesLength = featureTable.getGlobalProperty('INSTANCES_LENGTH');\n featureTable.featuresLength = instancesLength;\n\n if (!Number.isFinite(instancesLength)) {\n throw new Error('i3dm parser: INSTANCES_LENGTH must be defined');\n }\n\n tile.eastNorthUp = featureTable.getGlobalProperty('EAST_NORTH_UP');\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n const batchTable = new Tile3DBatchTable(tile.batchTableJson, tile.batchTableBinary, instancesLength);\n extractInstancedAttributes(tile, featureTable, batchTable, instancesLength);\n return byteOffset;\n}\n\nfunction extractInstancedAttributes(tile, featureTable, batchTable, instancesLength) {\n const collectionOptions = {\n instances: new Array(instancesLength),\n batchTable: tile._batchTable,\n cull: false,\n url: undefined,\n gltf: undefined,\n basePath: undefined,\n incrementallyLoadTextures: false,\n forwardAxis: [1, 0, 0]\n };\n const instances = collectionOptions.instances;\n const instancePosition = new Vector3();\n const instanceNormalRight = new Vector3();\n const instanceNormalUp = new Vector3();\n const instanceNormalForward = new Vector3();\n const instanceRotation = new Matrix3();\n const instanceQuaternion = new Quaternion();\n const instanceScale = new Vector3();\n const instanceTranslationRotationScale = {};\n const instanceTransform = new Matrix4();\n const scratch1 = [];\n const scratch2 = [];\n const scratchVector1 = new Vector3();\n const scratchVector2 = new Vector3();\n\n for (let i = 0; i < instancesLength; i++) {\n let position;\n\n if (featureTable.hasProperty('POSITION')) {\n position = featureTable.getProperty('POSITION', GL.FLOAT, 3, i, instancePosition);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n position = featureTable.getProperty('POSITION_QUANTIZED', GL.UNSIGNED_SHORT, 3, i, instancePosition);\n const quantizedVolumeOffset = featureTable.getGlobalProperty('QUANTIZED_VOLUME_OFFSET', GL.FLOAT, 3, scratchVector1);\n\n if (!quantizedVolumeOffset) {\n throw new Error('i3dm parser: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.');\n }\n\n const quantizedVolumeScale = featureTable.getGlobalProperty('QUANTIZED_VOLUME_SCALE', GL.FLOAT, 3, scratchVector2);\n\n if (!quantizedVolumeScale) {\n throw new Error('i3dm parser: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.');\n }\n\n const MAX_UNSIGNED_SHORT = 65535.0;\n\n for (let j = 0; j < 3; j++) {\n position[j] = position[j] / MAX_UNSIGNED_SHORT * quantizedVolumeScale[j] + quantizedVolumeOffset[j];\n }\n }\n\n if (!position) {\n throw new Error('i3dm: POSITION or POSITION_QUANTIZED must be defined for each instance.');\n }\n\n instancePosition.copy(position);\n instanceTranslationRotationScale.translation = instancePosition;\n tile.normalUp = featureTable.getProperty('NORMAL_UP', GL.FLOAT, 3, i, scratch1);\n tile.normalRight = featureTable.getProperty('NORMAL_RIGHT', GL.FLOAT, 3, i, scratch2);\n const hasCustomOrientation = false;\n\n if (tile.normalUp) {\n if (!tile.normalRight) {\n throw new Error('i3dm: Custom orientation requires both NORMAL_UP and NORMAL_RIGHT.');\n }\n\n tile.hasCustomOrientation = true;\n } else {\n tile.octNormalUp = featureTable.getProperty('NORMAL_UP_OCT32P', GL.UNSIGNED_SHORT, 2, scratch1);\n tile.octNormalRight = featureTable.getProperty('NORMAL_RIGHT_OCT32P', GL.UNSIGNED_SHORT, 2, scratch2);\n\n if (tile.octNormalUp) {\n if (!tile.octNormalRight) {\n throw new Error('i3dm: oct-encoded orientation requires NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P');\n }\n\n throw new Error('i3dm: oct-encoded orientation not implemented');\n } else if (tile.eastNorthUp) {\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform);\n instanceTransform.getRotationMatrix3(instanceRotation);\n } else {\n instanceRotation.identity();\n }\n }\n\n if (hasCustomOrientation) {\n instanceNormalForward.copy(instanceNormalRight).cross(instanceNormalUp).normalize();\n instanceRotation.setColumn(0, instanceNormalRight);\n instanceRotation.setColumn(1, instanceNormalUp);\n instanceRotation.setColumn(2, instanceNormalForward);\n }\n\n instanceQuaternion.fromMatrix3(instanceRotation);\n instanceTranslationRotationScale.rotation = instanceQuaternion;\n instanceScale.set(1.0, 1.0, 1.0);\n const scale = featureTable.getProperty('SCALE', GL.FLOAT, 1, i);\n\n if (Number.isFinite(scale)) {\n instanceScale.multiplyByScalar(scale);\n }\n\n const nonUniformScale = featureTable.getProperty('SCALE_NON_UNIFORM', GL.FLOAT, 3, i, scratch1);\n\n if (nonUniformScale) {\n instanceScale.scale(nonUniformScale);\n }\n\n instanceTranslationRotationScale.scale = instanceScale;\n let batchId = featureTable.getProperty('BATCH_ID', GL.UNSIGNED_SHORT, 1, i);\n\n if (batchId === undefined) {\n batchId = i;\n }\n\n const rotationMatrix = new Matrix4().fromQuaternion(instanceTranslationRotationScale.rotation);\n instanceTransform.identity();\n instanceTransform.translate(instanceTranslationRotationScale.translation);\n instanceTransform.multiplyRight(rotationMatrix);\n instanceTransform.scale(instanceTranslationRotationScale.scale);\n const modelMatrix = instanceTransform.clone();\n instances[i] = {\n modelMatrix,\n batchId\n };\n }\n\n tile.instances = instances;\n}\n//# sourceMappingURL=parse-3d-tile-instanced-model.js.map","import { TILE3D_TYPE } from '../constants';\nimport { getMagicString } from './helpers/parse-utils';\nimport { parsePointCloud3DTile } from './parse-3d-tile-point-cloud';\nimport { parseBatchedModel3DTile } from './parse-3d-tile-batched-model';\nimport { parseInstancedModel3DTile } from './parse-3d-tile-instanced-model';\nimport { parseComposite3DTile } from './parse-3d-tile-composite';\nimport { parseGltf3DTile } from './parse-3d-tile-gltf';\nexport async function parse3DTile(arrayBuffer, byteOffset = 0, options, context, tile = {}) {\n tile.byteOffset = byteOffset;\n tile.type = getMagicString(arrayBuffer, byteOffset);\n\n switch (tile.type) {\n case TILE3D_TYPE.COMPOSITE:\n return await parseComposite3DTile(tile, arrayBuffer, byteOffset, options, context, parse3DTile);\n\n case TILE3D_TYPE.BATCHED_3D_MODEL:\n return await parseBatchedModel3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n case TILE3D_TYPE.GLTF:\n return await parseGltf3DTile(tile, arrayBuffer, options, context);\n\n case TILE3D_TYPE.INSTANCED_3D_MODEL:\n return await parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n case TILE3D_TYPE.POINT_CLOUD:\n return await parsePointCloud3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n default:\n throw new Error(\"3DTileLoader: unknown type \".concat(tile.type));\n }\n}\n//# sourceMappingURL=parse-3d-tile.js.map","import { parse3DTileHeaderSync } from './helpers/parse-3d-tile-header';\nexport async function parseComposite3DTile(tile, arrayBuffer, byteOffset, options, context, parse3DTile) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n const view = new DataView(arrayBuffer);\n tile.tilesLength = view.getUint32(byteOffset, true);\n byteOffset += 4;\n tile.tiles = [];\n\n while (tile.tiles.length < tile.tilesLength && tile.byteLength - byteOffset > 12) {\n const subtile = {};\n tile.tiles.push(subtile);\n byteOffset = await parse3DTile(arrayBuffer, byteOffset, options, context, subtile);\n }\n\n return byteOffset;\n}\n//# sourceMappingURL=parse-3d-tile-composite.js.map","import { GLTFLoader } from '@loaders.gl/gltf';\nexport async function parseGltf3DTile(tile, arrayBuffer, options, context) {\n tile.rotateYtoZ = true;\n tile.gltfUpAxis = options['3d-tiles'] && options['3d-tiles'].assetGltfUpAxis ? options['3d-tiles'].assetGltfUpAxis : 'Y';\n const {\n parse\n } = context;\n tile.gltf = await parse(arrayBuffer, GLTFLoader, options, context);\n}\n//# sourceMappingURL=parse-3d-tile-gltf.js.map","import { fetchFile } from '@loaders.gl/core';\nconst SUBTREE_FILE_MAGIC = 0x74627573;\nconst SUBTREE_FILE_VERSION = 1;\nexport default async function parse3DTilesSubtree(data) {\n const magic = new Uint32Array(data.slice(0, 4));\n\n if (magic[0] !== SUBTREE_FILE_MAGIC) {\n throw new Error('Wrong subtree file magic number');\n }\n\n const version = new Uint32Array(data.slice(4, 8));\n\n if (version[0] !== SUBTREE_FILE_VERSION) {\n throw new Error('Wrong subtree file verson, must be 1');\n }\n\n const jsonByteLength = parseUint64Value(data.slice(8, 16));\n const stringAttribute = new Uint8Array(data, 24, jsonByteLength);\n const textDecoder = new TextDecoder('utf8');\n const string = textDecoder.decode(stringAttribute);\n const subtree = JSON.parse(string);\n const binaryByteLength = parseUint64Value(data.slice(16, 24));\n let internalBinaryBuffer = new ArrayBuffer(0);\n\n if (binaryByteLength) {\n internalBinaryBuffer = data.slice(24 + jsonByteLength);\n }\n\n if ('bufferView' in subtree.tileAvailability) {\n subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'tileAvailability', internalBinaryBuffer);\n }\n\n if ('bufferView' in subtree.contentAvailability) {\n subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'contentAvailability', internalBinaryBuffer);\n }\n\n if ('bufferView' in subtree.childSubtreeAvailability) {\n subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'childSubtreeAvailability', internalBinaryBuffer);\n }\n\n return subtree;\n}\n\nasync function getExplicitBitstream(subtree, name, internalBinaryBuffer) {\n const bufferViewIndex = subtree[name].bufferView;\n const bufferView = subtree.bufferViews[bufferViewIndex];\n const buffer = subtree.buffers[bufferView.buffer];\n\n if (buffer.uri) {\n const response = await fetchFile(buffer.uri);\n const data = await response.arrayBuffer();\n return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);\n }\n\n return new Uint8Array(internalBinaryBuffer, bufferView.byteOffset, bufferView.byteLength);\n}\n\nfunction parseUint64Value(buffer) {\n const dataView = new DataView(buffer);\n const left = dataView.getUint32(0, true);\n const right = dataView.getUint32(4, true);\n return left + 2 ** 32 * right;\n}\n//# sourceMappingURL=parse-3d-tile-subtree.js.map","import parse3DTilesSubtree from './lib/parsers/helpers/parse-3d-tile-subtree';\nimport { VERSION } from './lib/utils/version';\nexport const Tile3DSubtreeLoader = {\n id: '3d-tiles-subtree',\n name: '3D Tiles Subtree',\n module: '3d-tiles',\n version: VERSION,\n extensions: ['subtree'],\n mimeTypes: ['application/octet-stream'],\n tests: ['subtree'],\n parse: parse3DTilesSubtree,\n options: {}\n};\n//# sourceMappingURL=tile-3d-subtree-loader.js.map","import { Tile3DSubtreeLoader } from '../../../tile-3d-subtree-loader';\nimport { load } from '@loaders.gl/core';\nconst QUADTREE_DEVISION_COUNT = 4;\nconst OCTREE_DEVISION_COUNT = 8;\nconst SUBDIVISION_COUNT_MAP = {\n QUADTREE: QUADTREE_DEVISION_COUNT,\n OCTREE: OCTREE_DEVISION_COUNT\n};\nexport async function parseImplicitTiles(params) {\n const {\n options,\n parentData = {\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n },\n childIndex = 0,\n globalData = {\n level: 0,\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n }\n } = params;\n let {\n subtree,\n level = 0\n } = params;\n const {\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n contentUrlTemplate,\n subtreesUriTemplate,\n basePath\n } = options;\n const tile = {\n children: [],\n lodMetricValue: 0,\n contentUrl: ''\n };\n const childrenPerTile = SUBDIVISION_COUNT_MAP[subdivisionScheme];\n const childX = childIndex & 0b01;\n const childY = childIndex >> 1 & 0b01;\n const childZ = childIndex >> 2 & 0b01;\n const levelOffset = (childrenPerTile ** level - 1) / (childrenPerTile - 1);\n let childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex);\n let tileAvailabilityIndex = levelOffset + childTileMortonIndex;\n let childTileX = concatBits(parentData.x, childX);\n let childTileY = concatBits(parentData.y, childY);\n let childTileZ = concatBits(parentData.z, childZ);\n let isChildSubtreeAvailable = false;\n\n if (level + 1 > subtreeLevels) {\n isChildSubtreeAvailable = getAvailabilityResult(subtree.childSubtreeAvailability, childTileMortonIndex);\n }\n\n const x = concatBits(globalData.x, childTileX);\n const y = concatBits(globalData.y, childTileY);\n const z = concatBits(globalData.z, childTileZ);\n const lev = level + globalData.level;\n\n if (isChildSubtreeAvailable) {\n const subtreePath = \"\".concat(basePath, \"/\").concat(subtreesUriTemplate);\n const childSubtreeUrl = replaceContentUrlTemplate(subtreePath, lev, x, y, z);\n const childSubtree = await load(childSubtreeUrl, Tile3DSubtreeLoader);\n subtree = childSubtree;\n globalData.mortonIndex = childTileMortonIndex;\n globalData.x = childTileX;\n globalData.y = childTileY;\n globalData.z = childTileZ;\n globalData.level = level;\n childTileMortonIndex = 0;\n tileAvailabilityIndex = 0;\n childTileX = 0;\n childTileY = 0;\n childTileZ = 0;\n level = 0;\n }\n\n const isTileAvailable = getAvailabilityResult(subtree.tileAvailability, tileAvailabilityIndex);\n\n if (!isTileAvailable || level > maximumLevel) {\n return tile;\n }\n\n const isContentAvailable = getAvailabilityResult(subtree.contentAvailability, tileAvailabilityIndex);\n\n if (isContentAvailable) {\n tile.contentUrl = replaceContentUrlTemplate(contentUrlTemplate, lev, x, y, z);\n }\n\n const childTileLevel = level + 1;\n const pData = {\n mortonIndex: childTileMortonIndex,\n x: childTileX,\n y: childTileY,\n z: childTileZ\n };\n\n for (let index = 0; index < childrenPerTile; index++) {\n const currentTile = await parseImplicitTiles({\n subtree,\n options,\n parentData: pData,\n childIndex: index,\n level: childTileLevel,\n globalData\n });\n\n if (currentTile.contentUrl || currentTile.children.length) {\n const globalLevel = lev + 1;\n const childCoordinates = {\n childTileX,\n childTileY,\n childTileZ\n };\n const formattedTile = formatTileData(currentTile, globalLevel, childCoordinates, options);\n tile.children.push(formattedTile);\n }\n }\n\n return tile;\n}\n\nfunction getAvailabilityResult(availabilityData, index) {\n if ('constant' in availabilityData) {\n return Boolean(availabilityData.constant);\n }\n\n if (availabilityData.explicitBitstream) {\n return getBooleanValueFromBitstream(index, availabilityData.explicitBitstream);\n }\n\n return false;\n}\n\nfunction formatTileData(tile, level, childCoordinates, options) {\n const {\n basePath,\n refine,\n getRefine,\n lodMetricType,\n getTileType,\n rootLodMetricValue,\n rootBoundingVolume\n } = options;\n const uri = tile.contentUrl && tile.contentUrl.replace(\"\".concat(basePath, \"/\"), '');\n const lodMetricValue = rootLodMetricValue / 2 ** level;\n const boundingVolume = calculateBoundingVolumeForChildTile(level, rootBoundingVolume, childCoordinates);\n return {\n children: tile.children,\n contentUrl: tile.contentUrl,\n content: {\n uri\n },\n id: tile.contentUrl,\n refine: getRefine(refine),\n type: getTileType(tile),\n lodMetricType,\n lodMetricValue,\n boundingVolume\n };\n}\n\nfunction calculateBoundingVolumeForChildTile(level, rootBoundingVolume, childCoordinates) {\n if (rootBoundingVolume.region) {\n const {\n childTileX,\n childTileY,\n childTileZ\n } = childCoordinates;\n const [west, south, east, north, minimumHeight, maximumHeight] = rootBoundingVolume.region;\n const boundingVolumesCount = 2 ** level;\n const sizeX = (east - west) / boundingVolumesCount;\n const sizeY = (north - south) / boundingVolumesCount;\n const sizeZ = (maximumHeight - minimumHeight) / boundingVolumesCount;\n const [childWest, childEast] = [west + sizeX * childTileX, west + sizeX * (childTileX + 1)];\n const [childSouth, childNorth] = [south + sizeY * childTileY, south + sizeY * (childTileY + 1)];\n const [childMinimumHeight, childMaximumHeight] = [minimumHeight + sizeZ * childTileZ, minimumHeight + sizeZ * (childTileZ + 1)];\n return {\n region: [childWest, childSouth, childEast, childNorth, childMinimumHeight, childMaximumHeight]\n };\n }\n\n console.warn('Unsupported bounding volume type: ', rootBoundingVolume);\n return null;\n}\n\nfunction concatBits(first, second) {\n return parseInt(first.toString(2) + second.toString(2), 2);\n}\n\nexport function replaceContentUrlTemplate(templateUrl, level, x, y, z) {\n const mapUrl = generateMapUrl({\n level,\n x,\n y,\n z\n });\n return templateUrl.replace(/{level}|{x}|{y}|{z}/gi, matched => mapUrl[matched]);\n}\n\nfunction generateMapUrl(items) {\n const mapUrl = {};\n\n for (const key in items) {\n mapUrl[\"{\".concat(key, \"}\")] = items[key];\n }\n\n return mapUrl;\n}\n\nfunction getBooleanValueFromBitstream(availabilityIndex, availabilityBuffer) {\n const byteIndex = Math.floor(availabilityIndex / 8);\n const bitIndex = availabilityIndex % 8;\n const bitValue = availabilityBuffer[byteIndex] >> bitIndex & 1;\n return bitValue === 1;\n}\n//# sourceMappingURL=parse-3d-implicit-tiles.js.map","import { Tile3DSubtreeLoader } from '../../tile-3d-subtree-loader';\nimport { load } from '@loaders.gl/core';\nimport { LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE } from '@loaders.gl/tiles';\nimport { parseImplicitTiles, replaceContentUrlTemplate } from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n\n default:\n return refine;\n }\n}\n\nfunction resolveUri(uri, basePath) {\n const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;\n\n if (urlSchemeRegex.test(basePath)) {\n const url = new URL(uri, \"\".concat(basePath, \"/\"));\n return decodeURI(url.toString());\n } else if (uri.startsWith('/')) {\n return uri;\n }\n\n return \"\".concat(basePath, \"/\").concat(uri);\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = resolveUri(contentUri, options.basePath);\n }\n\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n return tile;\n}\nexport function normalizeTileHeaders(tileset) {\n const basePath = tileset.basePath;\n const root = normalizeTileData(tileset.root, tileset);\n const stack = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n\n for (const childHeader of children) {\n normalizeTileData(childHeader, {\n basePath\n });\n stack.push(childHeader);\n }\n }\n\n return root;\n}\nexport async function normalizeImplicitTileHeaders(tileset) {\n if (!tileset.root) {\n return null;\n }\n\n const basePath = tileset.basePath;\n const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {\n uri: subtreesUriTemplate\n }\n } = implicitTilingExtension;\n const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);\n const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);\n const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);\n const refine = tileset.root.refine;\n const rootLodMetricValue = tileset.root.geometricError;\n const rootBoundingVolume = tileset.root.boundingVolume;\n const options = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n rootBoundingVolume,\n getTileType,\n getRefine\n };\n return await normalizeImplicitTileData(tileset.root, rootSubtree, options);\n}\nexport async function normalizeImplicitTileData(tile, rootSubtree, options) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n const {\n children,\n contentUrl\n } = await parseImplicitTiles({\n subtree: rootSubtree,\n options\n });\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {\n uri: contentUrl.replace(\"\".concat(options.basePath, \"/\"), '')\n };\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n return tile;\n}\n//# sourceMappingURL=parse-3d-tile-header.js.map","import { path } from '@loaders.gl/loader-utils';\nimport { TILESET_TYPE, LOD_METRIC_TYPE } from '@loaders.gl/tiles';\nimport { VERSION } from './lib/utils/version';\nimport { parse3DTile } from './lib/parsers/parse-3d-tile';\nimport { normalizeTileHeaders, normalizeImplicitTileHeaders } from './lib/parsers/parse-3d-tile-header';\nconst IMPLICIT_TILING_EXTENSION_NAME = '3DTILES_implicit_tiling';\nexport const Tiles3DLoader = {\n id: '3d-tiles',\n name: '3D Tiles',\n module: '3d-tiles',\n version: VERSION,\n extensions: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n mimeTypes: ['application/octet-stream'],\n tests: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n parse,\n options: {\n '3d-tiles': {\n loadGLTF: true,\n decodeQuantizedPositions: false,\n isTileset: 'auto',\n assetGltfUpAxis: null\n }\n }\n};\n\nfunction getBaseUri(tileset) {\n return path.dirname(tileset.url);\n}\n\nasync function parseTile(arrayBuffer, options, context) {\n const tile = {\n content: {\n featureIds: null\n }\n };\n const byteOffset = 0;\n await parse3DTile(arrayBuffer, byteOffset, options, context, tile.content);\n return tile.content;\n}\n\nasync function parseTileset(data, options, context) {\n var _tilesetJson$root;\n\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n tilesetJson.loader = options.loader || Tiles3DLoader;\n tilesetJson.url = context.url;\n tilesetJson.basePath = getBaseUri(tilesetJson);\n tilesetJson.root = hasImplicitTilingExtension(tilesetJson) ? await normalizeImplicitTileHeaders(tilesetJson) : normalizeTileHeaders(tilesetJson);\n tilesetJson.type = TILESET_TYPE.TILES3D;\n tilesetJson.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tilesetJson.lodMetricValue = ((_tilesetJson$root = tilesetJson.root) === null || _tilesetJson$root === void 0 ? void 0 : _tilesetJson$root.lodMetricValue) || 0;\n return tilesetJson;\n}\n\nasync function parse(data, options, context) {\n const loaderOptions = options['3d-tiles'] || {};\n let isTileset;\n\n if (loaderOptions.isTileset === 'auto') {\n isTileset = context.url && context.url.indexOf('.json') !== -1;\n } else {\n isTileset = loaderOptions.isTileset;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else {\n data = await parseTile(data, options, context);\n }\n\n return data;\n}\n\nfunction hasImplicitTilingExtension(tilesetJson) {\n var _tilesetJson$extensio, _tilesetJson$extensio2;\n\n return (tilesetJson === null || tilesetJson === void 0 ? void 0 : (_tilesetJson$extensio = tilesetJson.extensionsRequired) === null || _tilesetJson$extensio === void 0 ? void 0 : _tilesetJson$extensio.includes(IMPLICIT_TILING_EXTENSION_NAME)) && (tilesetJson === null || tilesetJson === void 0 ? void 0 : (_tilesetJson$extensio2 = tilesetJson.extensionsUsed) === null || _tilesetJson$extensio2 === void 0 ? void 0 : _tilesetJson$extensio2.includes(IMPLICIT_TILING_EXTENSION_NAME));\n}\n//# sourceMappingURL=tiles-3d-loader.js.map","import GL from '@luma.gl/constants';\nimport {Geometry} from '@luma.gl/core';\n\nimport {\n Accessor,\n Color,\n CompositeLayer,\n CompositeLayerProps,\n COORDINATE_SYSTEM,\n FilterContext,\n GetPickingInfoParams,\n Layer,\n LayersList,\n log,\n PickingInfo,\n UpdateParameters,\n Viewport,\n DefaultProps\n} from '@deck.gl/core';\nimport {PointCloudLayer} from '@deck.gl/layers';\nimport {ScenegraphLayer} from '@deck.gl/mesh-layers';\nimport {default as MeshLayer} from '../mesh-layer/mesh-layer';\n\nimport {load} from '@loaders.gl/core';\nimport {MeshAttributes} from '@loaders.gl/schema';\nimport {Tileset3D, Tile3D, TILE_TYPE} from '@loaders.gl/tiles';\nimport {Tiles3DLoader} from '@loaders.gl/3d-tiles';\n\nconst SINGLE_DATA = [0];\n\nconst defaultProps: DefaultProps = {\n getPointColor: {type: 'accessor', value: [0, 0, 0, 255]},\n pointSize: 1.0,\n\n // @ts-expect-error Disable async data loading (handling it in _loadTileSet)\n data: null,\n loader: Tiles3DLoader,\n\n onTilesetLoad: {type: 'function', value: tileset3d => {}, compare: false},\n onTileLoad: {type: 'function', value: tileHeader => {}, compare: false},\n onTileUnload: {type: 'function', value: tileHeader => {}, compare: false},\n onTileError: {type: 'function', value: (tile, message, url) => {}, compare: false},\n _getMeshColor: {type: 'function', value: tileHeader => [255, 255, 255], compare: false}\n};\n\n/** All properties supported by Tile3DLayer */\nexport type Tile3DLayerProps = _Tile3DLayerProps & CompositeLayerProps;\n\n/** Props added by the Tile3DLayer */\ntype _Tile3DLayerProps = {\n /** Color Accessor for point clouds. **/\n getPointColor?: Accessor;\n\n /** Global radius of all points in pixels. **/\n pointSize?: number;\n\n /** A loader which is used to decode the fetched tiles.\n * @deprecated Use `loaders` instead\n */\n loader?: typeof Tiles3DLoader;\n\n /** Called when Tileset JSON file is loaded. **/\n onTilesetLoad?: (tile: Tileset3D) => void;\n\n /** Called when a tile in the tileset hierarchy is loaded. **/\n onTileLoad?: (tile: Tile3D) => void;\n\n /** Called when a tile is unloaded. **/\n onTileUnload?: (tile: Tile3D) => void;\n\n /** Called when a tile fails to load. **/\n onTileError?: (tile: Tile3D, url: string, message: string) => void;\n\n /** (Experimental) Accessor to change color of mesh based on properties. **/\n _getMeshColor?: (tile: Tile3D) => Color;\n};\n\n/** Render 3d tiles data formatted according to the [3D Tiles Specification](https://www.opengeospatial.org/standards/3DTiles) and [`ESRI I3S`](https://github.com/Esri/i3s-spec) */\nexport default class Tile3DLayer extends CompositeLayer<\n ExtraPropsT & Required<_Tile3DLayerProps>\n> {\n static defaultProps = defaultProps as any;\n static layerName = 'Tile3DLayer';\n\n state!: {\n activeViewports: {};\n frameNumber?: number;\n lastUpdatedViewports: {[viewportId: string]: Viewport} | null;\n layerMap: {[layerId: string]: any};\n tileset3d: Tileset3D | null;\n };\n\n initializeState() {\n if ('onTileLoadFail' in this.props) {\n log.removed('onTileLoadFail', 'onTileError')();\n }\n // prop verification\n this.state = {\n layerMap: {},\n tileset3d: null,\n activeViewports: {},\n lastUpdatedViewports: null\n };\n }\n\n get isLoaded(): boolean {\n const {tileset3d} = this.state;\n return tileset3d !== null && tileset3d.isLoaded();\n }\n\n shouldUpdateState({changeFlags}: UpdateParameters): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({props, oldProps, changeFlags}: UpdateParameters): void {\n if (props.data && props.data !== oldProps.data) {\n this._loadTileset(props.data);\n }\n\n if (changeFlags.viewportChanged) {\n const {activeViewports} = this.state;\n const viewportsNumber = Object.keys(activeViewports).length;\n if (viewportsNumber) {\n this._updateTileset(activeViewports);\n this.state.lastUpdatedViewports = activeViewports;\n this.state.activeViewports = {};\n }\n }\n if (changeFlags.propsChanged) {\n const {layerMap} = this.state;\n for (const key in layerMap) {\n layerMap[key].needsUpdate = true;\n }\n }\n }\n\n activateViewport(viewport: Viewport): void {\n const {activeViewports, lastUpdatedViewports} = this.state;\n this.internalState!.viewport = viewport;\n\n activeViewports[viewport.id] = viewport;\n const lastViewport = lastUpdatedViewports?.[viewport.id];\n if (!lastViewport || !viewport.equals(lastViewport)) {\n this.setChangeFlags({viewportChanged: true});\n this.setNeedsUpdate();\n }\n }\n\n getPickingInfo({info, sourceLayer}: GetPickingInfoParams) {\n const {layerMap} = this.state;\n const layerId = sourceLayer && sourceLayer.id;\n if (layerId) {\n // layerId: this.id-[scenegraph|pointcloud]-tileId\n const substr = layerId.substring(this.id.length + 1);\n const tileId = substr.substring(substr.indexOf('-') + 1);\n info.object = layerMap[tileId] && layerMap[tileId].tile;\n }\n\n return info;\n }\n\n filterSubLayer({layer, viewport}: FilterContext): boolean {\n // All sublayers will have a tile prop\n const {tile} = layer.props as unknown as {tile: Tile3D};\n const {id: viewportId} = viewport;\n return tile.selected && tile.viewportIds.includes(viewportId);\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n if (info.sourceLayer) {\n info.sourceLayer.updateAutoHighlight(info);\n }\n }\n\n private async _loadTileset(tilesetUrl) {\n const {loadOptions = {}} = this.props;\n\n // TODO: deprecate `loader` in v9.0\n // @ts-ignore\n let loader = this.props.loader || this.props.loaders;\n if (Array.isArray(loader)) {\n loader = loader[0];\n }\n\n const options = {loadOptions: {...loadOptions}};\n if (loader.preload) {\n const preloadOptions = await loader.preload(tilesetUrl, loadOptions);\n\n if (preloadOptions.headers) {\n options.loadOptions.fetch = {\n ...options.loadOptions.fetch,\n headers: preloadOptions.headers\n };\n }\n Object.assign(options, preloadOptions);\n }\n const tilesetJson = await load(tilesetUrl, loader, options.loadOptions);\n\n const tileset3d = new Tileset3D(tilesetJson, {\n onTileLoad: this._onTileLoad.bind(this),\n onTileUnload: this._onTileUnload.bind(this),\n onTileError: this.props.onTileError,\n ...options\n });\n\n this.setState({\n tileset3d,\n layerMap: {}\n });\n\n this._updateTileset(this.state.activeViewports);\n this.props.onTilesetLoad(tileset3d);\n }\n\n private _onTileLoad(tileHeader: Tile3D): void {\n const {lastUpdatedViewports} = this.state;\n this.props.onTileLoad(tileHeader);\n this._updateTileset(lastUpdatedViewports);\n this.setNeedsUpdate();\n }\n\n private _onTileUnload(tileHeader: Tile3D): void {\n // Was cleaned up from tileset cache. We no longer need to track it.\n delete this.state.layerMap[tileHeader.id];\n this.props.onTileUnload(tileHeader);\n }\n\n private _updateTileset(viewports: {[viewportId: string]: Viewport} | null): void {\n if (!viewports) {\n return;\n }\n const {tileset3d} = this.state;\n const {timeline} = this.context;\n const viewportsNumber = Object.keys(viewports).length;\n if (!timeline || !viewportsNumber || !tileset3d) {\n return;\n }\n tileset3d.selectTiles(Object.values(viewports)).then(frameNumber => {\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n if (tilesetChanged) {\n this.setState({frameNumber});\n }\n });\n }\n\n private _getSubLayer(\n tileHeader: Tile3D,\n oldLayer?: Layer\n ): MeshLayer | PointCloudLayer | ScenegraphLayer | null {\n if (!tileHeader.content) {\n return null;\n }\n\n switch (tileHeader.type) {\n case TILE_TYPE.POINTCLOUD:\n return this._makePointCloudLayer(tileHeader, oldLayer as PointCloudLayer);\n case TILE_TYPE.SCENEGRAPH:\n return this._make3DModelLayer(tileHeader);\n case TILE_TYPE.MESH:\n return this._makeSimpleMeshLayer(tileHeader, oldLayer as MeshLayer);\n default:\n throw new Error(`Tile3DLayer: Failed to render layer of type ${tileHeader.content.type}`);\n }\n }\n\n private _makePointCloudLayer(\n tileHeader: Tile3D,\n oldLayer?: PointCloudLayer\n ): PointCloudLayer | null {\n const {attributes, pointCount, constantRGBA, cartographicOrigin, modelMatrix} =\n tileHeader.content;\n const {positions, normals, colors} = attributes;\n\n if (!positions) {\n return null;\n }\n const data = (oldLayer && oldLayer.props.data) || {\n header: {\n vertexCount: pointCount\n },\n attributes: {\n POSITION: positions,\n NORMAL: normals,\n COLOR_0: colors\n }\n };\n\n const {pointSize, getPointColor} = this.props;\n const SubLayerClass = this.getSubLayerClass('pointcloud', PointCloudLayer);\n return new SubLayerClass(\n {\n pointSize\n },\n this.getSubLayerProps({\n id: 'pointcloud'\n }),\n {\n id: `${this.id}-pointcloud-${tileHeader.id}`,\n tile: tileHeader,\n data,\n coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,\n coordinateOrigin: cartographicOrigin,\n modelMatrix,\n getColor: constantRGBA || getPointColor,\n _offset: 0\n }\n );\n }\n\n private _make3DModelLayer(tileHeader: Tile3D): ScenegraphLayer {\n const {gltf, instances, cartographicOrigin, modelMatrix} = tileHeader.content;\n\n const SubLayerClass = this.getSubLayerClass('scenegraph', ScenegraphLayer);\n\n return new SubLayerClass(\n {\n _lighting: 'pbr'\n },\n this.getSubLayerProps({\n id: 'scenegraph'\n }),\n {\n id: `${this.id}-scenegraph-${tileHeader.id}`,\n tile: tileHeader,\n data: instances || SINGLE_DATA,\n scenegraph: gltf,\n\n coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,\n coordinateOrigin: cartographicOrigin,\n modelMatrix,\n getTransformMatrix: instance => instance.modelMatrix,\n getPosition: [0, 0, 0],\n _offset: 0\n }\n );\n }\n\n private _makeSimpleMeshLayer(tileHeader: Tile3D, oldLayer?: MeshLayer): MeshLayer {\n const content = tileHeader.content;\n const {\n attributes,\n indices,\n modelMatrix,\n cartographicOrigin,\n coordinateSystem = COORDINATE_SYSTEM.METER_OFFSETS,\n material,\n featureIds\n } = content;\n const {_getMeshColor} = this.props;\n\n const geometry =\n (oldLayer && oldLayer.props.mesh) ||\n new Geometry({\n drawMode: GL.TRIANGLES,\n attributes: getMeshGeometry(attributes),\n indices\n });\n\n const SubLayerClass = this.getSubLayerClass('mesh', MeshLayer);\n\n return new SubLayerClass(\n this.getSubLayerProps({\n id: 'mesh'\n }),\n {\n id: `${this.id}-mesh-${tileHeader.id}`,\n tile: tileHeader,\n mesh: geometry,\n data: SINGLE_DATA,\n getColor: _getMeshColor(tileHeader),\n pbrMaterial: material,\n modelMatrix,\n coordinateOrigin: cartographicOrigin,\n coordinateSystem,\n featureIds,\n _offset: 0\n }\n );\n }\n\n renderLayers(): Layer | null | LayersList {\n const {tileset3d, layerMap} = this.state;\n if (!tileset3d) {\n return null;\n }\n\n // loaders.gl doesn't provide a type for tileset3d.tiles\n return (tileset3d.tiles as Tile3D[])\n .map(tile => {\n const layerCache = (layerMap[tile.id] = layerMap[tile.id] || {tile});\n let {layer} = layerCache;\n if (tile.selected) {\n // render selected tiles\n if (!layer) {\n // create layer\n layer = this._getSubLayer(tile);\n } else if (layerCache.needsUpdate) {\n // props have changed, rerender layer\n layer = this._getSubLayer(tile, layer);\n layerCache.needsUpdate = false;\n }\n }\n layerCache.layer = layer;\n return layer;\n })\n .filter(Boolean);\n }\n}\n\nfunction getMeshGeometry(contentAttributes: MeshAttributes): MeshAttributes {\n const attributes: MeshAttributes = {};\n attributes.positions = {\n ...contentAttributes.positions,\n value: new Float32Array(contentAttributes.positions.value)\n };\n if (contentAttributes.normals) {\n attributes.normals = contentAttributes.normals;\n }\n if (contentAttributes.texCoords) {\n attributes.texCoords = contentAttributes.texCoords;\n }\n if (contentAttributes.colors) {\n attributes.colors = contentAttributes.colors;\n }\n if (contentAttributes.uvRegions) {\n attributes.uvRegions = contentAttributes.uvRegions;\n }\n return attributes;\n}\n","export const VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : 'latest';\n//# sourceMappingURL=version.js.map","import { VERSION } from './lib/utils/version';\nexport const TerrainLoader = {\n name: 'Terrain',\n id: 'terrain',\n module: 'terrain',\n version: VERSION,\n worker: true,\n extensions: ['png', 'pngraw', 'jpg', 'jpeg', 'gif', 'webp', 'bmp'],\n mimeTypes: ['image/png', 'image/jpeg', 'image/gif', 'image/webp', 'image/bmp'],\n options: {\n terrain: {\n tesselator: 'auto',\n bounds: null,\n meshMaxError: 10,\n elevationDecoder: {\n rScaler: 1,\n gScaler: 0,\n bScaler: 0,\n offset: 0\n },\n skirtHeight: null\n }\n }\n};\nexport const _typecheckTerrainWorkerLoader = TerrainLoader;\n//# sourceMappingURL=terrain-loader.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Color,\n CompositeLayer,\n CompositeLayerProps,\n DefaultProps,\n Layer,\n LayersList,\n log,\n Material,\n Texture,\n UpdateParameters\n} from '@deck.gl/core';\nimport {SimpleMeshLayer} from '@deck.gl/mesh-layers';\nimport {COORDINATE_SYSTEM} from '@deck.gl/core';\nimport type {MeshAttributes} from '@loaders.gl/schema';\nimport {TerrainWorkerLoader} from '@loaders.gl/terrain';\nimport TileLayer, {TileLayerProps} from '../tile-layer/tile-layer';\nimport Tile2DHeader from '../tile-layer/tile-2d-header';\nimport {Bounds, GeoBoundingBox, TileBoundingBox, TileLoadProps, ZRange} from '../tile-layer/types';\nimport {urlType, getURLFromTemplate} from '../tile-layer/utils';\n\nconst DUMMY_DATA = [1];\n\nconst defaultProps: DefaultProps = {\n ...TileLayer.defaultProps,\n // Image url that encodes height data\n elevationData: urlType,\n // Image url to use as texture\n texture: {...urlType, optional: true},\n // Martini error tolerance in meters, smaller number -> more detailed mesh\n meshMaxError: {type: 'number', value: 4.0},\n // Bounding box of the terrain image, [minX, minY, maxX, maxY] in world coordinates\n bounds: {type: 'array', value: null, optional: true, compare: true},\n // Color to use if texture is unavailable\n color: {type: 'color', value: [255, 255, 255]},\n // Object to decode height data, from (r, g, b) to height in meters\n elevationDecoder: {\n type: 'object',\n value: {\n rScaler: 1,\n gScaler: 0,\n bScaler: 0,\n offset: 0\n }\n },\n // Supply url to local terrain worker bundle. Only required if running offline and cannot access CDN.\n workerUrl: {type: 'string', value: null},\n // Same as SimpleMeshLayer wireframe\n wireframe: false,\n material: true,\n\n loaders: [TerrainWorkerLoader]\n};\n\ntype URLTemplate = string | string[];\n\n// Turns array of templates into a single string to work around shallow change\nfunction urlTemplateToUpdateTrigger(template: URLTemplate | null): string {\n if (Array.isArray(template)) {\n return template.join(';');\n }\n return template || '';\n}\n\ntype ElevationDecoder = {rScaler: number; gScaler: number; bScaler: number; offset: number};\ntype TerrainLoadProps = {\n bounds: Bounds;\n elevationData: string | null;\n elevationDecoder: ElevationDecoder;\n meshMaxError: number;\n signal?: AbortSignal;\n};\n\ntype MeshAndTexture = [MeshAttributes | null, Texture | null];\n\n/** All properties supported by TerrainLayer */\nexport type TerrainLayerProps = _TerrainLayerProps &\n TileLayerProps &\n CompositeLayerProps;\n\n/** Props added by the TerrainLayer */\ntype _TerrainLayerProps = {\n /** Image url that encodes height data. **/\n elevationData: URLTemplate;\n\n /** Image url to use as texture. **/\n texture?: URLTemplate | null;\n\n /** Martini error tolerance in meters, smaller number -> more detailed mesh. **/\n meshMaxError?: number;\n\n /** Bounding box of the terrain image, [minX, minY, maxX, maxY] in world coordinates. **/\n bounds?: Bounds | null;\n\n /** Color to use if texture is unavailable. **/\n color?: Color;\n\n /** Object to decode height data, from (r, g, b) to height in meters. **/\n elevationDecoder?: ElevationDecoder;\n\n /** Whether to render the mesh in wireframe mode. **/\n wireframe?: boolean;\n\n /** Material props for lighting effect. **/\n material?: Material;\n};\n\n/** Render mesh surfaces from height map images. */\nexport default class TerrainLayer extends CompositeLayer<\n ExtraPropsT & Required<_TerrainLayerProps & Required>>\n> {\n static defaultProps = defaultProps;\n static layerName = 'TerrainLayer';\n\n state!: {\n isTiled?: boolean;\n terrain: MeshAttributes;\n zRange?: ZRange | null;\n };\n\n updateState({props, oldProps}: UpdateParameters): void {\n const elevationDataChanged = props.elevationData !== oldProps.elevationData;\n if (elevationDataChanged) {\n const {elevationData} = props;\n const isTiled =\n elevationData &&\n (Array.isArray(elevationData) ||\n (elevationData.includes('{x}') && elevationData.includes('{y}')));\n this.setState({isTiled});\n }\n\n // Reloading for single terrain mesh\n const shouldReload =\n elevationDataChanged ||\n props.meshMaxError !== oldProps.meshMaxError ||\n props.elevationDecoder !== oldProps.elevationDecoder ||\n props.bounds !== oldProps.bounds;\n\n if (!this.state.isTiled && shouldReload) {\n // When state.isTiled, elevationData cannot be an array\n const terrain = this.loadTerrain(props as TerrainLoadProps);\n this.setState({terrain});\n }\n\n // TODO - remove in v9\n // @ts-ignore\n if (props.workerUrl) {\n log.removed('workerUrl', 'loadOptions.terrain.workerUrl')();\n }\n }\n\n loadTerrain({\n elevationData,\n bounds,\n elevationDecoder,\n meshMaxError,\n signal\n }: TerrainLoadProps): Promise | null {\n if (!elevationData) {\n return null;\n }\n let loadOptions = this.getLoadOptions();\n loadOptions = {\n ...loadOptions,\n terrain: {\n skirtHeight: this.state.isTiled ? meshMaxError * 2 : 0,\n ...loadOptions?.terrain,\n bounds,\n meshMaxError,\n elevationDecoder\n }\n };\n const {fetch} = this.props;\n return fetch(elevationData, {propName: 'elevationData', layer: this, loadOptions, signal});\n }\n\n getTiledTerrainData(tile: TileLoadProps): Promise {\n const {elevationData, fetch, texture, elevationDecoder, meshMaxError} = this.props;\n const {viewport} = this.context;\n const dataUrl = getURLFromTemplate(elevationData, tile);\n const textureUrl = texture && getURLFromTemplate(texture, tile);\n\n const {signal} = tile;\n let bottomLeft = [0, 0] as [number, number];\n let topRight = [0, 0] as [number, number];\n if (viewport.isGeospatial) {\n const bbox = tile.bbox as GeoBoundingBox;\n bottomLeft = viewport.projectFlat([bbox.west, bbox.south]);\n topRight = viewport.projectFlat([bbox.east, bbox.north]);\n } else {\n const bbox = tile.bbox as Exclude;\n bottomLeft = [bbox.left, bbox.bottom];\n topRight = [bbox.right, bbox.top];\n }\n const bounds: Bounds = [bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]];\n\n const terrain = this.loadTerrain({\n elevationData: dataUrl,\n bounds,\n elevationDecoder,\n meshMaxError,\n signal\n });\n const surface = textureUrl\n ? // If surface image fails to load, the tile should still be displayed\n fetch(textureUrl, {propName: 'texture', layer: this, loaders: [], signal}).catch(_ => null)\n : Promise.resolve(null);\n\n return Promise.all([terrain, surface]);\n }\n\n renderSubLayers(\n props: TileLayerProps & {\n id: string;\n data: MeshAndTexture;\n tile: Tile2DHeader;\n }\n ) {\n const SubLayerClass = this.getSubLayerClass('mesh', SimpleMeshLayer);\n\n const {color, wireframe, material} = this.props;\n const {data} = props;\n\n if (!data) {\n return null;\n }\n\n const [mesh, texture] = data;\n\n return new SubLayerClass(props, {\n data: DUMMY_DATA,\n mesh,\n texture,\n _instanced: false,\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n getPosition: d => [0, 0, 0],\n getColor: color,\n wireframe,\n material\n });\n }\n\n // Update zRange of viewport\n onViewportLoad(tiles?: Tile2DHeader[]): void {\n if (!tiles) {\n return;\n }\n\n const {zRange} = this.state;\n const ranges = tiles\n .map(tile => tile.content)\n .filter(Boolean)\n .map(arr => {\n // @ts-ignore\n const bounds = arr[0].header.boundingBox;\n return bounds.map(bound => bound[2]);\n });\n if (ranges.length === 0) {\n return;\n }\n const minZ = Math.min(...ranges.map(x => x[0]));\n const maxZ = Math.max(...ranges.map(x => x[1]));\n\n if (!zRange || minZ < zRange[0] || maxZ > zRange[1]) {\n this.setState({zRange: [minZ, maxZ]});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {\n color,\n material,\n elevationData,\n texture,\n wireframe,\n meshMaxError,\n elevationDecoder,\n tileSize,\n maxZoom,\n minZoom,\n extent,\n maxRequests,\n onTileLoad,\n onTileUnload,\n onTileError,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy\n } = this.props;\n\n if (this.state.isTiled) {\n return new TileLayer(\n this.getSubLayerProps({\n id: 'tiles'\n }),\n {\n getTileData: this.getTiledTerrainData.bind(this),\n renderSubLayers: this.renderSubLayers.bind(this),\n updateTriggers: {\n getTileData: {\n elevationData: urlTemplateToUpdateTrigger(elevationData),\n texture: urlTemplateToUpdateTrigger(texture),\n meshMaxError,\n elevationDecoder\n }\n },\n onViewportLoad: this.onViewportLoad.bind(this),\n zRange: this.state.zRange || null,\n tileSize,\n maxZoom,\n minZoom,\n extent,\n maxRequests,\n onTileLoad,\n onTileUnload,\n onTileError,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy\n }\n );\n }\n\n const SubLayerClass = this.getSubLayerClass('mesh', SimpleMeshLayer);\n return new SubLayerClass(\n this.getSubLayerProps({\n id: 'mesh'\n }),\n {\n data: DUMMY_DATA,\n mesh: this.state.terrain,\n texture,\n _instanced: false,\n getPosition: d => [0, 0, 0],\n getColor: color,\n material,\n wireframe\n }\n );\n }\n}\n","import { earcut } from '@math.gl/polygon';\nexport function flatGeojsonToBinary(features, geometryInfo, options) {\n const propArrayTypes = extractNumericPropTypes(features);\n const numericPropKeys = Object.keys(propArrayTypes).filter(k => propArrayTypes[k] !== Array);\n return fillArrays(features, {\n propArrayTypes,\n ...geometryInfo\n }, {\n numericPropKeys: options && options.numericPropKeys || numericPropKeys,\n PositionDataType: options ? options.PositionDataType : Float32Array\n });\n}\nexport const TEST_EXPORTS = {\n extractNumericPropTypes\n};\n\nfunction extractNumericPropTypes(features) {\n const propArrayTypes = {};\n\n for (const feature of features) {\n if (feature.properties) {\n for (const key in feature.properties) {\n const val = feature.properties[key];\n propArrayTypes[key] = deduceArrayType(val, propArrayTypes[key]);\n }\n }\n }\n\n return propArrayTypes;\n}\n\nfunction fillArrays(features, geometryInfo, options) {\n const {\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount,\n propArrayTypes,\n coordLength\n } = geometryInfo;\n const {\n numericPropKeys = [],\n PositionDataType = Float32Array\n } = options;\n const hasGlobalId = features[0] && 'id' in features[0];\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points = {\n type: 'Point',\n positions: new PositionDataType(pointPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),\n featureIds: pointFeaturesCount > 65535 ? new Uint32Array(pointPositionsCount) : new Uint16Array(pointPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const lines = {\n type: 'LineString',\n pathIndices: linePositionsCount > 65535 ? new Uint32Array(linePathsCount + 1) : new Uint16Array(linePathsCount + 1),\n positions: new PositionDataType(linePositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),\n featureIds: lineFeaturesCount > 65535 ? new Uint32Array(linePositionsCount) : new Uint16Array(linePositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const polygons = {\n type: 'Polygon',\n polygonIndices: polygonPositionsCount > 65535 ? new Uint32Array(polygonObjectsCount + 1) : new Uint16Array(polygonObjectsCount + 1),\n primitivePolygonIndices: polygonPositionsCount > 65535 ? new Uint32Array(polygonRingsCount + 1) : new Uint16Array(polygonRingsCount + 1),\n positions: new PositionDataType(polygonPositionsCount * coordLength),\n triangles: [],\n globalFeatureIds: new GlobalFeatureIdsDataType(polygonPositionsCount),\n featureIds: polygonFeaturesCount > 65535 ? new Uint32Array(polygonPositionsCount) : new Uint16Array(polygonPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n\n for (const object of [points, lines, polygons]) {\n for (const propName of numericPropKeys) {\n const T = propArrayTypes[propName];\n object.numericProps[propName] = new T(object.positions.length / coordLength);\n }\n }\n\n lines.pathIndices[linePathsCount] = linePositionsCount;\n polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;\n polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;\n const indexMap = {\n pointPosition: 0,\n pointFeature: 0,\n linePosition: 0,\n linePath: 0,\n lineFeature: 0,\n polygonPosition: 0,\n polygonObject: 0,\n polygonRing: 0,\n polygonFeature: 0,\n feature: 0\n };\n\n for (const feature of features) {\n const geometry = feature.geometry;\n const properties = feature.properties || {};\n\n switch (geometry.type) {\n case 'Point':\n handlePoint(geometry, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n\n if (hasGlobalId) {\n points.fields.push({\n id: feature.id\n });\n }\n\n indexMap.pointFeature++;\n break;\n\n case 'LineString':\n handleLineString(geometry, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n\n if (hasGlobalId) {\n lines.fields.push({\n id: feature.id\n });\n }\n\n indexMap.lineFeature++;\n break;\n\n case 'Polygon':\n handlePolygon(geometry, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n\n if (hasGlobalId) {\n polygons.fields.push({\n id: feature.id\n });\n }\n\n indexMap.polygonFeature++;\n break;\n\n default:\n throw new Error('Invalid geometry type');\n }\n\n indexMap.feature++;\n }\n\n return makeAccessorObjects(points, lines, polygons, coordLength);\n}\n\nfunction handlePoint(geometry, points, indexMap, coordLength, properties) {\n points.positions.set(geometry.data, indexMap.pointPosition * coordLength);\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(points, properties, indexMap.pointPosition, nPositions);\n points.globalFeatureIds.fill(indexMap.feature, indexMap.pointPosition, indexMap.pointPosition + nPositions);\n points.featureIds.fill(indexMap.pointFeature, indexMap.pointPosition, indexMap.pointPosition + nPositions);\n indexMap.pointPosition += nPositions;\n}\n\nfunction handleLineString(geometry, lines, indexMap, coordLength, properties) {\n lines.positions.set(geometry.data, indexMap.linePosition * coordLength);\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);\n lines.globalFeatureIds.fill(indexMap.feature, indexMap.linePosition, indexMap.linePosition + nPositions);\n lines.featureIds.fill(indexMap.lineFeature, indexMap.linePosition, indexMap.linePosition + nPositions);\n\n for (let i = 0, il = geometry.indices.length; i < il; ++i) {\n const start = geometry.indices[i];\n const end = i === il - 1 ? geometry.data.length : geometry.indices[i + 1];\n lines.pathIndices[indexMap.linePath++] = indexMap.linePosition;\n indexMap.linePosition += (end - start) / coordLength;\n }\n}\n\nfunction handlePolygon(geometry, polygons, indexMap, coordLength, properties) {\n polygons.positions.set(geometry.data, indexMap.polygonPosition * coordLength);\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);\n polygons.globalFeatureIds.fill(indexMap.feature, indexMap.polygonPosition, indexMap.polygonPosition + nPositions);\n polygons.featureIds.fill(indexMap.polygonFeature, indexMap.polygonPosition, indexMap.polygonPosition + nPositions);\n\n for (let l = 0, ll = geometry.indices.length; l < ll; ++l) {\n const startPosition = indexMap.polygonPosition;\n polygons.polygonIndices[indexMap.polygonObject++] = startPosition;\n const areas = geometry.areas[l];\n const indices = geometry.indices[l];\n const nextIndices = geometry.indices[l + 1];\n\n for (let i = 0, il = indices.length; i < il; ++i) {\n const start = indices[i];\n const end = i === il - 1 ? nextIndices === undefined ? geometry.data.length : nextIndices[0] : indices[i + 1];\n polygons.primitivePolygonIndices[indexMap.polygonRing++] = indexMap.polygonPosition;\n indexMap.polygonPosition += (end - start) / coordLength;\n }\n\n const endPosition = indexMap.polygonPosition;\n triangulatePolygon(polygons, areas, indices, {\n startPosition,\n endPosition,\n coordLength\n });\n }\n}\n\nfunction triangulatePolygon(polygons, areas, indices, {\n startPosition,\n endPosition,\n coordLength\n}) {\n const start = startPosition * coordLength;\n const end = endPosition * coordLength;\n const polygonPositions = polygons.positions.subarray(start, end);\n const offset = indices[0];\n const holes = indices.slice(1).map(n => (n - offset) / coordLength);\n const triangles = earcut(polygonPositions, holes, coordLength, areas);\n\n for (let t = 0, tl = triangles.length; t < tl; ++t) {\n polygons.triangles.push(startPosition + triangles[t]);\n }\n}\n\nfunction wrapProps(obj, size) {\n const returnObj = {};\n\n for (const key in obj) {\n returnObj[key] = {\n value: obj[key],\n size\n };\n }\n\n return returnObj;\n}\n\nfunction makeAccessorObjects(points, lines, polygons, coordLength) {\n return {\n points: { ...points,\n positions: {\n value: points.positions,\n size: coordLength\n },\n globalFeatureIds: {\n value: points.globalFeatureIds,\n size: 1\n },\n featureIds: {\n value: points.featureIds,\n size: 1\n },\n numericProps: wrapProps(points.numericProps, 1)\n },\n lines: { ...lines,\n positions: {\n value: lines.positions,\n size: coordLength\n },\n pathIndices: {\n value: lines.pathIndices,\n size: 1\n },\n globalFeatureIds: {\n value: lines.globalFeatureIds,\n size: 1\n },\n featureIds: {\n value: lines.featureIds,\n size: 1\n },\n numericProps: wrapProps(lines.numericProps, 1)\n },\n polygons: { ...polygons,\n positions: {\n value: polygons.positions,\n size: coordLength\n },\n polygonIndices: {\n value: polygons.polygonIndices,\n size: 1\n },\n primitivePolygonIndices: {\n value: polygons.primitivePolygonIndices,\n size: 1\n },\n triangles: {\n value: new Uint32Array(polygons.triangles),\n size: 1\n },\n globalFeatureIds: {\n value: polygons.globalFeatureIds,\n size: 1\n },\n featureIds: {\n value: polygons.featureIds,\n size: 1\n },\n numericProps: wrapProps(polygons.numericProps, 1)\n }\n };\n}\n\nfunction fillNumericProperties(object, properties, index, length) {\n for (const numericPropName in object.numericProps) {\n if (numericPropName in properties) {\n const value = properties[numericPropName];\n object.numericProps[numericPropName].fill(value, index, index + length);\n }\n }\n}\n\nfunction keepStringProperties(properties, numericKeys) {\n const props = {};\n\n for (const key in properties) {\n if (!numericKeys.includes(key)) {\n props[key] = properties[key];\n }\n }\n\n return props;\n}\n\nfunction deduceArrayType(x, constructor) {\n if (constructor === Array || !Number.isFinite(x)) {\n return Array;\n }\n\n return constructor === Float64Array || Math.fround(x) !== x ? Float64Array : Float32Array;\n}\n//# sourceMappingURL=flat-geojson-to-binary.js.map","export function classifyRings(rings) {\n const len = rings.length;\n if (len <= 1) return [rings];\n const polygons = [];\n let polygon;\n let ccw;\n\n for (let i = 0; i < len; i++) {\n const area = signedArea(rings[i]);\n if (area === 0) continue;\n if (ccw === undefined) ccw = area < 0;\n\n if (ccw === area < 0) {\n if (polygon) polygons.push(polygon);\n polygon = [rings[i]];\n } else if (polygon) polygon.push(rings[i]);\n }\n\n if (polygon) polygons.push(polygon);\n return polygons;\n}\nexport function signedArea(ring) {\n let sum = 0;\n\n for (let i = 0, j = ring.length - 1, p1, p2; i < ring.length; j = i++) {\n p1 = ring[i];\n p2 = ring[j];\n sum += (p2[0] - p1[0]) * (p1[1] + p2[1]);\n }\n\n return sum;\n}\nexport function readFeature(tag, feature, pbf) {\n if (feature && pbf) {\n if (tag === 1) feature.id = pbf.readVarint();else if (tag === 2) readTag(pbf, feature);else if (tag === 3) feature.type = pbf.readVarint();else if (tag === 4) feature._geometry = pbf.pos;\n }\n}\nexport function readTag(pbf, feature) {\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const key = feature._keys[pbf.readVarint()];\n\n const value = feature._values[pbf.readVarint()];\n\n feature.properties[key] = value;\n }\n}\n//# sourceMappingURL=mapbox-util-functions.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { readFeature, classifyRings } from '../../helpers/mapbox-util-functions';\nexport default class VectorTileFeature {\n static get types() {\n return ['Unknown', 'Point', 'LineString', 'Polygon'];\n }\n\n constructor(pbf, end, extent, keys, values) {\n _defineProperty(this, \"properties\", void 0);\n\n _defineProperty(this, \"extent\", void 0);\n\n _defineProperty(this, \"type\", void 0);\n\n _defineProperty(this, \"id\", void 0);\n\n _defineProperty(this, \"_pbf\", void 0);\n\n _defineProperty(this, \"_geometry\", void 0);\n\n _defineProperty(this, \"_keys\", void 0);\n\n _defineProperty(this, \"_values\", void 0);\n\n this.properties = {};\n this.extent = extent;\n this.type = 0;\n this.id = null;\n this._pbf = pbf;\n this._geometry = -1;\n this._keys = keys;\n this._values = values;\n pbf.readFields(readFeature, this, end);\n }\n\n loadGeometry() {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n const end = pbf.readVarint() + pbf.pos;\n let cmd = 1;\n let length = 0;\n let x = 0;\n let y = 0;\n const lines = [];\n let line;\n\n while (pbf.pos < end) {\n if (length <= 0) {\n const cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n\n if (cmd === 1) {\n if (line) lines.push(line);\n line = [];\n }\n\n if (line) line.push([x, y]);\n } else if (cmd === 7) {\n if (line) {\n line.push(line[0].slice());\n }\n } else {\n throw new Error(\"unknown command \".concat(cmd));\n }\n }\n\n if (line) lines.push(line);\n return lines;\n }\n\n bbox() {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n const end = pbf.readVarint() + pbf.pos;\n let cmd = 1;\n let length = 0;\n let x = 0;\n let y = 0;\n let x1 = Infinity;\n let x2 = -Infinity;\n let y1 = Infinity;\n let y2 = -Infinity;\n\n while (pbf.pos < end) {\n if (length <= 0) {\n const cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n if (x < x1) x1 = x;\n if (x > x2) x2 = x;\n if (y < y1) y1 = y;\n if (y > y2) y2 = y;\n } else if (cmd !== 7) {\n throw new Error(\"unknown command \".concat(cmd));\n }\n }\n\n return [x1, y1, x2, y2];\n }\n\n _toGeoJSON(transform) {\n let coords = this.loadGeometry();\n let type = VectorTileFeature.types[this.type];\n let i;\n let j;\n\n switch (this.type) {\n case 1:\n const points = [];\n\n for (i = 0; i < coords.length; i++) {\n points[i] = coords[i][0];\n }\n\n coords = points;\n transform(coords, this);\n break;\n\n case 2:\n for (i = 0; i < coords.length; i++) {\n transform(coords[i], this);\n }\n\n break;\n\n case 3:\n coords = classifyRings(coords);\n\n for (i = 0; i < coords.length; i++) {\n for (j = 0; j < coords[i].length; j++) {\n transform(coords[i][j], this);\n }\n }\n\n break;\n }\n\n if (coords.length === 1) {\n coords = coords[0];\n } else {\n type = \"Multi\".concat(type);\n }\n\n const result = {\n type: 'Feature',\n geometry: {\n type,\n coordinates: coords\n },\n properties: this.properties\n };\n\n if (this.id !== null) {\n result.id = this.id;\n }\n\n return result;\n }\n\n toGeoJSON(options) {\n if (typeof options === 'function') {\n return this._toGeoJSON(options);\n }\n\n const {\n x,\n y,\n z\n } = options;\n const size = this.extent * Math.pow(2, z);\n const x0 = this.extent * x;\n const y0 = this.extent * y;\n\n function project(line) {\n for (let j = 0; j < line.length; j++) {\n const p = line[j];\n p[0] = (p[0] + x0) * 360 / size - 180;\n const y2 = 180 - (p[1] + y0) * 360 / size;\n p[1] = 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90;\n }\n }\n\n return this._toGeoJSON(project);\n }\n\n}\n//# sourceMappingURL=vector-tile-feature.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport VectorTileFeature from './vector-tile-feature';\nexport default class VectorTileLayer {\n constructor(pbf, end) {\n _defineProperty(this, \"version\", void 0);\n\n _defineProperty(this, \"name\", void 0);\n\n _defineProperty(this, \"extent\", void 0);\n\n _defineProperty(this, \"length\", void 0);\n\n _defineProperty(this, \"_pbf\", void 0);\n\n _defineProperty(this, \"_keys\", void 0);\n\n _defineProperty(this, \"_values\", void 0);\n\n _defineProperty(this, \"_features\", void 0);\n\n this.version = 1;\n this.name = '';\n this.extent = 4096;\n this.length = 0;\n this._pbf = pbf;\n this._keys = [];\n this._values = [];\n this._features = [];\n pbf.readFields(readLayer, this, end);\n this.length = this._features.length;\n }\n\n feature(i) {\n if (i < 0 || i >= this._features.length) {\n throw new Error('feature index out of bounds');\n }\n\n this._pbf.pos = this._features[i];\n\n const end = this._pbf.readVarint() + this._pbf.pos;\n\n return new VectorTileFeature(this._pbf, end, this.extent, this._keys, this._values);\n }\n\n}\n\nfunction readLayer(tag, layer, pbf) {\n if (layer && pbf) {\n if (tag === 15) layer.version = pbf.readVarint();else if (tag === 1) layer.name = pbf.readString();else if (tag === 5) layer.extent = pbf.readVarint();else if (tag === 2) layer._features.push(pbf.pos);else if (tag === 3) layer._keys.push(pbf.readString());else if (tag === 4) layer._values.push(readValueMessage(pbf));\n }\n}\n\nfunction readValueMessage(pbf) {\n let value = null;\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const tag = pbf.readVarint() >> 3;\n value = tag === 1 ? pbf.readString() : tag === 2 ? pbf.readFloat() : tag === 3 ? pbf.readDouble() : tag === 4 ? pbf.readVarint64() : tag === 5 ? pbf.readVarint() : tag === 6 ? pbf.readSVarint() : tag === 7 ? pbf.readBoolean() : null;\n }\n\n return value;\n}\n//# sourceMappingURL=vector-tile-layer.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport VectorTileLayer from './vector-tile-layer';\nexport default class VectorTile {\n constructor(pbf, end) {\n _defineProperty(this, \"layers\", void 0);\n\n this.layers = pbf.readFields(readTile, {}, end);\n }\n\n}\n\nfunction readTile(tag, layers, pbf) {\n if (tag === 3) {\n if (pbf) {\n const layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos);\n\n if (layer.length && layers) {\n layers[layer.name] = layer;\n }\n }\n }\n}\n//# sourceMappingURL=vector-tile.js.map","import { getPolygonSignedArea } from '@math.gl/polygon';\nexport function classifyRings(geom) {\n const len = geom.indices.length;\n const type = 'Polygon';\n\n if (len <= 1) {\n return {\n type,\n data: geom.data,\n areas: [[getPolygonSignedArea(geom.data)]],\n indices: [geom.indices]\n };\n }\n\n const areas = [];\n const polygons = [];\n let ringAreas = [];\n let polygon = [];\n let ccw;\n let offset = 0;\n\n for (let endIndex, i = 0, startIndex; i < len; i++) {\n startIndex = geom.indices[i] - offset;\n endIndex = geom.indices[i + 1] - offset || geom.data.length;\n const shape = geom.data.slice(startIndex, endIndex);\n const area = getPolygonSignedArea(shape);\n\n if (area === 0) {\n const before = geom.data.slice(0, startIndex);\n const after = geom.data.slice(endIndex);\n geom.data = before.concat(after);\n offset += endIndex - startIndex;\n continue;\n }\n\n if (ccw === undefined) ccw = area < 0;\n\n if (ccw === area < 0) {\n if (polygon.length) {\n areas.push(ringAreas);\n polygons.push(polygon);\n }\n\n polygon = [startIndex];\n ringAreas = [area];\n } else {\n ringAreas.push(area);\n polygon.push(startIndex);\n }\n }\n\n if (ringAreas) areas.push(ringAreas);\n if (polygon.length) polygons.push(polygon);\n return {\n type,\n areas,\n indices: polygons,\n data: geom.data\n };\n}\nexport function project(data, x0, y0, size) {\n for (let j = 0, jl = data.length; j < jl; j += 2) {\n data[j] = (data[j] + x0) * 360 / size - 180;\n const y2 = 180 - (data[j + 1] + y0) * 360 / size;\n data[j + 1] = 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90;\n }\n}\nexport function readFeature(tag, feature, pbf) {\n if (feature && pbf) {\n if (tag === 1) feature.id = pbf.readVarint();else if (tag === 2) readTag(pbf, feature);else if (tag === 3) feature.type = pbf.readVarint();else if (tag === 4) feature._geometry = pbf.pos;\n }\n}\nexport function readTag(pbf, feature) {\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const key = feature._keys[pbf.readVarint()];\n\n const value = feature._values[pbf.readVarint()];\n\n feature.properties[key] = value;\n }\n}\n//# sourceMappingURL=binary-util-functions.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { classifyRings, project, readFeature } from '../../helpers/binary-util-functions';\nlet endPos;\nlet cmd;\nlet cmdLen;\nlet length;\nlet x;\nlet y;\nlet i;\nexport const TEST_EXPORTS = {\n classifyRings\n};\nexport default class VectorTileFeature {\n constructor(pbf, end, extent, keys, values, geometryInfo) {\n _defineProperty(this, \"properties\", void 0);\n\n _defineProperty(this, \"extent\", void 0);\n\n _defineProperty(this, \"type\", void 0);\n\n _defineProperty(this, \"id\", void 0);\n\n _defineProperty(this, \"_pbf\", void 0);\n\n _defineProperty(this, \"_geometry\", void 0);\n\n _defineProperty(this, \"_keys\", void 0);\n\n _defineProperty(this, \"_values\", void 0);\n\n _defineProperty(this, \"_geometryInfo\", void 0);\n\n this.properties = {};\n this.extent = extent;\n this.type = 0;\n this.id = null;\n this._pbf = pbf;\n this._geometry = -1;\n this._keys = keys;\n this._values = values;\n this._geometryInfo = geometryInfo;\n pbf.readFields(readFeature, this, end);\n }\n\n loadGeometry() {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n endPos = pbf.readVarint() + pbf.pos;\n cmd = 1;\n length = 0;\n x = 0;\n y = 0;\n i = 0;\n const indices = [];\n const data = [];\n\n while (pbf.pos < endPos) {\n if (length <= 0) {\n cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n\n if (cmd === 1) {\n indices.push(i);\n }\n\n data.push(x, y);\n i += 2;\n } else if (cmd === 7) {\n if (i > 0) {\n const start = indices[indices.length - 1];\n data.push(data[start], data[start + 1]);\n i += 2;\n }\n } else {\n throw new Error(\"unknown command \".concat(cmd));\n }\n }\n\n return {\n data,\n indices\n };\n }\n\n _toBinaryCoordinates(transform) {\n const geom = this.loadGeometry();\n let geometry;\n transform(geom.data, this);\n const coordLength = 2;\n\n switch (this.type) {\n case 1:\n this._geometryInfo.pointFeaturesCount++;\n this._geometryInfo.pointPositionsCount += geom.indices.length;\n geometry = {\n type: 'Point',\n ...geom\n };\n break;\n\n case 2:\n this._geometryInfo.lineFeaturesCount++;\n this._geometryInfo.linePathsCount += geom.indices.length;\n this._geometryInfo.linePositionsCount += geom.data.length / coordLength;\n geometry = {\n type: 'LineString',\n ...geom\n };\n break;\n\n case 3:\n geometry = classifyRings(geom);\n this._geometryInfo.polygonFeaturesCount++;\n this._geometryInfo.polygonObjectsCount += geometry.indices.length;\n\n for (const indices of geometry.indices) {\n this._geometryInfo.polygonRingsCount += indices.length;\n }\n\n this._geometryInfo.polygonPositionsCount += geometry.data.length / coordLength;\n break;\n\n default:\n throw new Error(\"Invalid geometry type: \".concat(this.type));\n }\n\n const result = {\n type: 'Feature',\n geometry,\n properties: this.properties\n };\n\n if (this.id !== null) {\n result.id = this.id;\n }\n\n return result;\n }\n\n toBinaryCoordinates(options) {\n if (typeof options === 'function') {\n return this._toBinaryCoordinates(options);\n }\n\n const {\n x,\n y,\n z\n } = options;\n const size = this.extent * Math.pow(2, z);\n const x0 = this.extent * x;\n const y0 = this.extent * y;\n return this._toBinaryCoordinates(data => project(data, x0, y0, size));\n }\n\n}\n//# sourceMappingURL=vector-tile-feature.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport VectorTileFeature from './vector-tile-feature';\nexport default class VectorTileLayer {\n constructor(pbf, end) {\n _defineProperty(this, \"version\", void 0);\n\n _defineProperty(this, \"name\", void 0);\n\n _defineProperty(this, \"extent\", void 0);\n\n _defineProperty(this, \"length\", void 0);\n\n _defineProperty(this, \"_pbf\", void 0);\n\n _defineProperty(this, \"_keys\", void 0);\n\n _defineProperty(this, \"_values\", void 0);\n\n _defineProperty(this, \"_features\", void 0);\n\n this.version = 1;\n this.name = '';\n this.extent = 4096;\n this.length = 0;\n this._pbf = pbf;\n this._keys = [];\n this._values = [];\n this._features = [];\n pbf.readFields(readLayer, this, end);\n this.length = this._features.length;\n }\n\n feature(i, geometryInfo) {\n if (i < 0 || i >= this._features.length) {\n throw new Error('feature index out of bounds');\n }\n\n this._pbf.pos = this._features[i];\n\n const end = this._pbf.readVarint() + this._pbf.pos;\n\n return new VectorTileFeature(this._pbf, end, this.extent, this._keys, this._values, geometryInfo);\n }\n\n}\n\nfunction readLayer(tag, layer, pbf) {\n if (layer && pbf) {\n if (tag === 15) layer.version = pbf.readVarint();else if (tag === 1) layer.name = pbf.readString();else if (tag === 5) layer.extent = pbf.readVarint();else if (tag === 2) layer._features.push(pbf.pos);else if (tag === 3) layer._keys.push(pbf.readString());else if (tag === 4) layer._values.push(readValueMessage(pbf));\n }\n}\n\nfunction readValueMessage(pbf) {\n let value = null;\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const tag = pbf.readVarint() >> 3;\n value = tag === 1 ? pbf.readString() : tag === 2 ? pbf.readFloat() : tag === 3 ? pbf.readDouble() : tag === 4 ? pbf.readVarint64() : tag === 5 ? pbf.readVarint() : tag === 6 ? pbf.readSVarint() : tag === 7 ? pbf.readBoolean() : null;\n }\n\n return value;\n}\n//# sourceMappingURL=vector-tile-layer.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport VectorTileLayer from './vector-tile-layer';\nexport default class VectorTile {\n constructor(pbf, end) {\n _defineProperty(this, \"layers\", void 0);\n\n this.layers = pbf.readFields(readTile, {}, end);\n }\n\n}\n\nfunction readTile(tag, layers, pbf) {\n if (tag === 3) {\n if (pbf) {\n const layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos);\n\n if (layer.length && layers) {\n layers[layer.name] = layer;\n }\n }\n }\n}\n//# sourceMappingURL=vector-tile.js.map","import { flatGeojsonToBinary } from '@loaders.gl/gis';\nimport Protobuf from 'pbf';\nimport VectorTile from './mapbox-vector-tile/vector-tile';\nimport BinaryVectorTile from './binary-vector-tile/vector-tile';\nexport default function parseMVT(arrayBuffer, options) {\n var _options$gis, _options$mvt;\n\n const mvtOptions = normalizeOptions(options);\n const shape = (options === null || options === void 0 ? void 0 : (_options$gis = options.gis) === null || _options$gis === void 0 ? void 0 : _options$gis.format) || (options === null || options === void 0 ? void 0 : (_options$mvt = options.mvt) === null || _options$mvt === void 0 ? void 0 : _options$mvt.shape);\n\n switch (shape) {\n case 'columnar-table':\n return {\n shape: 'columnar-table',\n data: parseToBinary(arrayBuffer, mvtOptions)\n };\n\n case 'geojson-row-table':\n {\n const table = {\n shape: 'geojson-row-table',\n data: parseToGeojson(arrayBuffer, mvtOptions)\n };\n return table;\n }\n\n case 'geojson':\n return parseToGeojson(arrayBuffer, mvtOptions);\n\n case 'binary-geometry':\n return parseToBinary(arrayBuffer, mvtOptions);\n\n case 'binary':\n return parseToBinary(arrayBuffer, mvtOptions);\n\n default:\n throw new Error(shape);\n }\n}\n\nfunction parseToBinary(arrayBuffer, options) {\n const [flatGeoJsonFeatures, geometryInfo] = parseToFlatGeoJson(arrayBuffer, options);\n const binaryData = flatGeojsonToBinary(flatGeoJsonFeatures, geometryInfo);\n binaryData.byteLength = arrayBuffer.byteLength;\n return binaryData;\n}\n\nfunction parseToFlatGeoJson(arrayBuffer, options) {\n const features = [];\n const geometryInfo = {\n coordLength: 2,\n pointPositionsCount: 0,\n pointFeaturesCount: 0,\n linePositionsCount: 0,\n linePathsCount: 0,\n lineFeaturesCount: 0,\n polygonPositionsCount: 0,\n polygonObjectsCount: 0,\n polygonRingsCount: 0,\n polygonFeaturesCount: 0\n };\n\n if (arrayBuffer.byteLength <= 0) {\n return [features, geometryInfo];\n }\n\n const tile = new BinaryVectorTile(new Protobuf(arrayBuffer));\n const selectedLayers = options && Array.isArray(options.layers) ? options.layers : Object.keys(tile.layers);\n selectedLayers.forEach(layerName => {\n const vectorTileLayer = tile.layers[layerName];\n\n if (!vectorTileLayer) {\n return;\n }\n\n for (let i = 0; i < vectorTileLayer.length; i++) {\n const vectorTileFeature = vectorTileLayer.feature(i, geometryInfo);\n const decodedFeature = getDecodedFeatureBinary(vectorTileFeature, options, layerName);\n features.push(decodedFeature);\n }\n });\n return [features, geometryInfo];\n}\n\nfunction parseToGeojson(arrayBuffer, options) {\n if (arrayBuffer.byteLength <= 0) {\n return [];\n }\n\n const features = [];\n const tile = new VectorTile(new Protobuf(arrayBuffer));\n const selectedLayers = Array.isArray(options.layers) ? options.layers : Object.keys(tile.layers);\n selectedLayers.forEach(layerName => {\n const vectorTileLayer = tile.layers[layerName];\n\n if (!vectorTileLayer) {\n return;\n }\n\n for (let i = 0; i < vectorTileLayer.length; i++) {\n const vectorTileFeature = vectorTileLayer.feature(i);\n const decodedFeature = getDecodedFeature(vectorTileFeature, options, layerName);\n features.push(decodedFeature);\n }\n });\n return features;\n}\n\nfunction normalizeOptions(options) {\n var _options$mvt2;\n\n if (!(options !== null && options !== void 0 && options.mvt)) {\n throw new Error('mvt options required');\n }\n\n const wgs84Coordinates = ((_options$mvt2 = options.mvt) === null || _options$mvt2 === void 0 ? void 0 : _options$mvt2.coordinates) === 'wgs84';\n const {\n tileIndex\n } = options.mvt;\n const hasTileIndex = tileIndex && Number.isFinite(tileIndex.x) && Number.isFinite(tileIndex.y) && Number.isFinite(tileIndex.z);\n\n if (wgs84Coordinates && !hasTileIndex) {\n throw new Error('MVT Loader: WGS84 coordinates need tileIndex property');\n }\n\n return options.mvt;\n}\n\nfunction getDecodedFeature(feature, options, layerName) {\n const decodedFeature = feature.toGeoJSON(options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinates);\n\n if (options.layerProperty) {\n decodedFeature.properties[options.layerProperty] = layerName;\n }\n\n return decodedFeature;\n}\n\nfunction getDecodedFeatureBinary(feature, options, layerName) {\n const decodedFeature = feature.toBinaryCoordinates(options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinatesBinary);\n\n if (options.layerProperty && decodedFeature.properties) {\n decodedFeature.properties[options.layerProperty] = layerName;\n }\n\n return decodedFeature;\n}\n\nfunction transformToLocalCoordinates(line, feature) {\n const {\n extent\n } = feature;\n\n for (let i = 0; i < line.length; i++) {\n const p = line[i];\n p[0] /= extent;\n p[1] /= extent;\n }\n}\n\nfunction transformToLocalCoordinatesBinary(data, feature) {\n const {\n extent\n } = feature;\n\n for (let i = 0, il = data.length; i < il; ++i) {\n data[i] /= extent;\n }\n}\n//# sourceMappingURL=parse-mvt.js.map","import parseMVT from './lib/parse-mvt';\nconst VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : 'latest';\nconst DEFAULT_MVT_LOADER_OPTIONS = {\n mvt: {\n shape: 'geojson',\n coordinates: 'local',\n layerProperty: 'layerName',\n layers: undefined,\n tileIndex: null\n }\n};\nexport const MVTWorkerLoader = {\n name: 'Mapbox Vector Tile',\n id: 'mvt',\n module: 'mvt',\n version: VERSION,\n extensions: ['mvt', 'pbf'],\n mimeTypes: ['application/vnd.mapbox-vector-tile', 'application/x-protobuf'],\n worker: true,\n category: 'geometry',\n options: DEFAULT_MVT_LOADER_OPTIONS\n};\nexport const MVTLoader = { ...MVTWorkerLoader,\n parse: async (arrayBuffer, options) => parseMVT(arrayBuffer, options),\n parseSync: parseMVT,\n binary: true\n};\n//# sourceMappingURL=mvt-loader.js.map","export function binaryToGeojson(data, options) {\n const globalFeatureId = options === null || options === void 0 ? void 0 : options.globalFeatureId;\n\n if (globalFeatureId !== undefined) {\n return getSingleFeature(data, globalFeatureId);\n }\n\n return parseFeatures(data, options === null || options === void 0 ? void 0 : options.type);\n}\nexport function binaryToGeoJson(data, type, format = 'feature') {\n switch (format) {\n case 'feature':\n return parseFeatures(data, type);\n\n case 'geometry':\n return binaryToGeometry(data);\n\n default:\n throw new Error(format);\n }\n}\n\nfunction getSingleFeature(data, globalFeatureId) {\n const dataArray = normalizeInput(data);\n\n for (const data of dataArray) {\n let lastIndex = 0;\n let lastValue = data.featureIds.value[0];\n\n for (let i = 0; i < data.featureIds.value.length; i++) {\n const currValue = data.featureIds.value[i];\n\n if (currValue === lastValue) {\n continue;\n }\n\n if (globalFeatureId === data.globalFeatureIds.value[lastIndex]) {\n return parseFeature(data, lastIndex, i);\n }\n\n lastIndex = i;\n lastValue = currValue;\n }\n\n if (globalFeatureId === data.globalFeatureIds.value[lastIndex]) {\n return parseFeature(data, lastIndex, data.featureIds.value.length);\n }\n }\n\n throw new Error(\"featureId:\".concat(globalFeatureId, \" not found\"));\n}\n\nfunction parseFeatures(data, type) {\n const dataArray = normalizeInput(data, type);\n return parseFeatureCollection(dataArray);\n}\n\nexport function binaryToGeometry(data, startIndex, endIndex) {\n switch (data.type) {\n case 'Point':\n return pointToGeoJson(data, startIndex, endIndex);\n\n case 'LineString':\n return lineStringToGeoJson(data, startIndex, endIndex);\n\n case 'Polygon':\n return polygonToGeoJson(data, startIndex, endIndex);\n\n default:\n const unexpectedInput = data;\n throw new Error(\"Unsupported geometry type: \".concat(unexpectedInput === null || unexpectedInput === void 0 ? void 0 : unexpectedInput.type));\n }\n}\n\nfunction normalizeInput(data, type) {\n const isHeterogeneousType = Boolean(data.points || data.lines || data.polygons);\n\n if (!isHeterogeneousType) {\n data.type = type || parseType(data);\n return [data];\n }\n\n const features = [];\n\n if (data.points) {\n data.points.type = 'Point';\n features.push(data.points);\n }\n\n if (data.lines) {\n data.lines.type = 'LineString';\n features.push(data.lines);\n }\n\n if (data.polygons) {\n data.polygons.type = 'Polygon';\n features.push(data.polygons);\n }\n\n return features;\n}\n\nfunction parseFeatureCollection(dataArray) {\n const features = [];\n\n for (const data of dataArray) {\n if (data.featureIds.value.length === 0) {\n continue;\n }\n\n let lastIndex = 0;\n let lastValue = data.featureIds.value[0];\n\n for (let i = 0; i < data.featureIds.value.length; i++) {\n const currValue = data.featureIds.value[i];\n\n if (currValue === lastValue) {\n continue;\n }\n\n features.push(parseFeature(data, lastIndex, i));\n lastIndex = i;\n lastValue = currValue;\n }\n\n features.push(parseFeature(data, lastIndex, data.featureIds.value.length));\n }\n\n return features;\n}\n\nfunction parseFeature(data, startIndex, endIndex) {\n const geometry = binaryToGeometry(data, startIndex, endIndex);\n const properties = parseProperties(data, startIndex, endIndex);\n const fields = parseFields(data, startIndex, endIndex);\n return {\n type: 'Feature',\n geometry,\n properties,\n ...fields\n };\n}\n\nfunction parseFields(data, startIndex = 0, endIndex) {\n return data.fields && data.fields[data.featureIds.value[startIndex]];\n}\n\nfunction parseProperties(data, startIndex = 0, endIndex) {\n const properties = Object.assign({}, data.properties[data.featureIds.value[startIndex]]);\n\n for (const key in data.numericProps) {\n properties[key] = data.numericProps[key].value[startIndex];\n }\n\n return properties;\n}\n\nfunction polygonToGeoJson(data, startIndex = -Infinity, endIndex = Infinity) {\n const {\n positions\n } = data;\n const polygonIndices = data.polygonIndices.value.filter(x => x >= startIndex && x <= endIndex);\n const primitivePolygonIndices = data.primitivePolygonIndices.value.filter(x => x >= startIndex && x <= endIndex);\n const multi = polygonIndices.length > 2;\n\n if (!multi) {\n const coordinates = [];\n\n for (let i = 0; i < primitivePolygonIndices.length - 1; i++) {\n const startRingIndex = primitivePolygonIndices[i];\n const endRingIndex = primitivePolygonIndices[i + 1];\n const ringCoordinates = ringToGeoJson(positions, startRingIndex, endRingIndex);\n coordinates.push(ringCoordinates);\n }\n\n return {\n type: 'Polygon',\n coordinates\n };\n }\n\n const coordinates = [];\n\n for (let i = 0; i < polygonIndices.length - 1; i++) {\n const startPolygonIndex = polygonIndices[i];\n const endPolygonIndex = polygonIndices[i + 1];\n const polygonCoordinates = polygonToGeoJson(data, startPolygonIndex, endPolygonIndex).coordinates;\n coordinates.push(polygonCoordinates);\n }\n\n return {\n type: 'MultiPolygon',\n coordinates\n };\n}\n\nfunction lineStringToGeoJson(data, startIndex = -Infinity, endIndex = Infinity) {\n const {\n positions\n } = data;\n const pathIndices = data.pathIndices.value.filter(x => x >= startIndex && x <= endIndex);\n const multi = pathIndices.length > 2;\n\n if (!multi) {\n const coordinates = ringToGeoJson(positions, pathIndices[0], pathIndices[1]);\n return {\n type: 'LineString',\n coordinates\n };\n }\n\n const coordinates = [];\n\n for (let i = 0; i < pathIndices.length - 1; i++) {\n const ringCoordinates = ringToGeoJson(positions, pathIndices[i], pathIndices[i + 1]);\n coordinates.push(ringCoordinates);\n }\n\n return {\n type: 'MultiLineString',\n coordinates\n };\n}\n\nfunction pointToGeoJson(data, startIndex, endIndex) {\n const {\n positions\n } = data;\n const coordinates = ringToGeoJson(positions, startIndex, endIndex);\n const multi = coordinates.length > 1;\n\n if (multi) {\n return {\n type: 'MultiPoint',\n coordinates\n };\n }\n\n return {\n type: 'Point',\n coordinates: coordinates[0]\n };\n}\n\nfunction ringToGeoJson(positions, startIndex, endIndex) {\n startIndex = startIndex || 0;\n endIndex = endIndex || positions.value.length / positions.size;\n const ringCoordinates = [];\n\n for (let j = startIndex; j < endIndex; j++) {\n const coord = Array();\n\n for (let k = j * positions.size; k < (j + 1) * positions.size; k++) {\n coord.push(Number(positions.value[k]));\n }\n\n ringCoordinates.push(coord);\n }\n\n return ringCoordinates;\n}\n\nfunction parseType(data) {\n if (data.pathIndices) {\n return 'LineString';\n }\n\n if (data.polygonIndices) {\n return 'Polygon';\n }\n\n return 'Point';\n}\n//# sourceMappingURL=binary-to-geojson.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension, _ShaderModule as ShaderModule} from '@deck.gl/core';\n\nimport type {Layer} from '@deck.gl/core';\n\nconst defaultProps = {\n clipBounds: [0, 0, 1, 1]\n};\n\nexport type ClipExtensionProps = {\n /** Rectangular bounds to be used for clipping the rendered region, in `[left, bottom, right, top]`.\n * @default [0, 0, 1, 1]\n */\n clipBounds?: [number, number, number, number];\n /**\n * Controls whether an object is clipped by its anchor (e.g. icon, point) or by its geometry (e.g. path, polygon).\n * If not specified, it is automatically deduced from the layer.\n */\n clipByInstance?: boolean;\n};\n\nconst shaderFunction = `\nuniform vec4 clip_bounds;\n\nbool clip_isInBounds(vec2 position) {\n return position.x >= clip_bounds[0] && position.y >= clip_bounds[1] && position.x < clip_bounds[2] && position.y < clip_bounds[3];\n}\n`;\n\n/*\n * The vertex-shader version clips geometries by their anchor position\n * e.g. ScatterplotLayer - show if the center of a circle is within bounds\n */\nconst shaderModuleVs: ShaderModule = {\n name: 'clip-vs',\n vs: shaderFunction\n};\n\nconst injectionVs = {\n 'vs:#decl': `\nvarying float clip_isVisible;\n`,\n 'vs:DECKGL_FILTER_GL_POSITION': `\n clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));\n`,\n 'fs:#decl': `\nvarying float clip_isVisible;\n`,\n 'fs:DECKGL_FILTER_COLOR': `\n if (clip_isVisible < 0.5) discard;\n`\n};\n\n/*\n * The fragment-shader version clips pixels at the bounds\n * e.g. PolygonLayer - show the part of the polygon that intersect with the bounds\n */\nconst shaderModuleFs: ShaderModule = {\n name: 'clip-fs',\n fs: shaderFunction\n};\n\nconst injectionFs = {\n 'vs:#decl': `\nvarying vec2 clip_commonPosition;\n`,\n 'vs:DECKGL_FILTER_GL_POSITION': `\n clip_commonPosition = geometry.position.xy;\n`,\n 'fs:#decl': `\nvarying vec2 clip_commonPosition;\n`,\n 'fs:DECKGL_FILTER_COLOR': `\n if (!clip_isInBounds(clip_commonPosition)) discard;\n`\n};\n\n/** Adds support for clipping rendered layers by rectangular bounds. */\nexport default class ClipExtension extends LayerExtension {\n static defaultProps: any = defaultProps;\n static extensionName = 'ClipExtension';\n\n getShaders(this: Layer) {\n // If `clipByInstance: true`, the entire object is shown/hidden based on its anchor position (done by vertex shader)\n // Otherwise, the object is trimmed by the clip bounds (done by fragment shader)\n\n // Default behavior: consider a layer instanced if it has attribute `instancePositions`\n // @ts-expect-error attributeManager is always defined for primitive layers\n let clipByInstance = 'instancePositions' in this.getAttributeManager().attributes;\n // Users can override by setting the `clipByInstance` prop\n if ('clipByInstance' in this.props) {\n clipByInstance = this.props.clipByInstance as boolean;\n }\n this.state.clipByInstance = clipByInstance;\n\n return clipByInstance\n ? {\n modules: [shaderModuleVs],\n inject: injectionVs\n }\n : {\n modules: [shaderModuleFs],\n inject: injectionFs\n };\n }\n\n /* eslint-disable camelcase */\n draw(this: Layer, {uniforms}: any): void {\n const {clipBounds = defaultProps.clipBounds} = this.props;\n if (this.state.clipByInstance) {\n uniforms.clip_bounds = clipBounds;\n } else {\n const corner0 = this.projectPosition([clipBounds[0], clipBounds[1], 0]);\n const corner1 = this.projectPosition([clipBounds[2], clipBounds[3], 0]);\n\n uniforms.clip_bounds = [\n Math.min(corner0[0], corner1[0]),\n Math.min(corner0[1], corner1[1]),\n Math.max(corner0[0], corner1[0]),\n Math.max(corner0[1], corner1[1])\n ];\n }\n }\n}\n","import {Viewport} from '@deck.gl/core';\nimport {lerp} from '@math.gl/core';\nimport {GeoBoundingBox} from '../tile-layer/types';\n\nconst availableTransformations = {\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon\n};\n\nfunction Point([pointX, pointY]: [number, number], [nw, se]: number[][], viewport: Viewport) {\n const x = lerp(nw[0], se[0], pointX);\n const y = lerp(nw[1], se[1], pointY);\n\n return viewport.unprojectFlat([x, y]);\n}\n\nfunction getPoints(geometry, bbox: number[][], viewport: Viewport) {\n return geometry.map(g => Point(g, bbox, viewport));\n}\n\nfunction MultiPoint(multiPoint, bbox: number[][], viewport: Viewport) {\n return getPoints(multiPoint, bbox, viewport);\n}\n\nfunction LineString(line, bbox: number[][], viewport: Viewport) {\n return getPoints(line, bbox, viewport);\n}\n\nfunction MultiLineString(multiLineString, bbox: number[][], viewport: Viewport) {\n return multiLineString.map(lineString => LineString(lineString, bbox, viewport));\n}\n\nfunction Polygon(polygon, bbox: number[][], viewport: Viewport) {\n return polygon.map(polygonRing => getPoints(polygonRing, bbox, viewport));\n}\n\nfunction MultiPolygon(multiPolygon, bbox: number[][], viewport: Viewport) {\n return multiPolygon.map(polygon => Polygon(polygon, bbox, viewport));\n}\n\nexport function transform(geometry, bbox: GeoBoundingBox, viewport: Viewport) {\n const nw = viewport.projectFlat([bbox.west, bbox.north]);\n const se = viewport.projectFlat([bbox.east, bbox.south]);\n const projectedBbox = [nw, se];\n\n return {\n ...geometry,\n coordinates: availableTransformations[geometry.type](\n geometry.coordinates,\n projectedBbox,\n viewport\n )\n };\n}\n","import type {\n BinaryFeatures,\n BinaryLineFeatures,\n BinaryPointFeatures,\n BinaryPolygonFeatures\n} from '@loaders.gl/schema';\n\ntype FeatureTypes = BinaryPointFeatures | BinaryLineFeatures | BinaryPolygonFeatures;\n\nconst GEOM_TYPES = ['points', 'lines', 'polygons'];\n/**\n * Return the index of feature (numericProps or featureIds) for given feature id\n * Example: findIndexBinary(data, 'id', 33) will return the index in the array of numericProps\n * of the feature 33.\n * @param {Object} data - The data in binary format\n * @param {String} uniqueIdProperty - Name of the unique id property\n * @param {Number|String} featureId - feature id to find\n * @param {String} layerName - the layer to search in\n */\nexport default function findIndexBinary(\n data: BinaryFeatures,\n uniqueIdProperty: string,\n featureId: string | number,\n layerName: string\n): number {\n for (const gt of GEOM_TYPES) {\n const index = data[gt] && findIndexByType(data[gt], uniqueIdProperty, featureId, layerName);\n if (index >= 0) {\n return index;\n }\n }\n\n return -1;\n}\n\nfunction findIndexByType(\n geomData: FeatureTypes,\n uniqueIdProperty: string,\n featureId: string | number,\n layerName: string\n): number {\n const featureIds = geomData.featureIds.value;\n\n if (!featureIds.length) {\n return -1;\n }\n\n let startFeatureIndex = 0;\n let endFeatureIndex = featureIds[featureIds.length - 1] + 1;\n if (layerName) {\n const layerRange = getLayerRange(geomData, layerName);\n if (layerRange) {\n startFeatureIndex = layerRange[0];\n endFeatureIndex = layerRange[1] + 1;\n } else {\n return -1;\n }\n }\n\n // Look for the uniqueIdProperty\n let featureIndex = -1;\n if (uniqueIdProperty in geomData.numericProps) {\n const vertexIndex = geomData.numericProps[uniqueIdProperty].value.findIndex(\n (x, i) =>\n x === featureId && featureIds[i] >= startFeatureIndex && featureIds[i] < endFeatureIndex\n );\n return vertexIndex >= 0 ? geomData.globalFeatureIds.value[vertexIndex] : -1;\n } else if (uniqueIdProperty) {\n featureIndex = findIndex(\n geomData.properties,\n elem => elem[uniqueIdProperty] === featureId,\n startFeatureIndex,\n endFeatureIndex\n );\n } else if (geomData.fields) {\n featureIndex = findIndex(\n geomData.fields,\n (elem: any) => elem.id === featureId,\n startFeatureIndex,\n endFeatureIndex\n );\n }\n return featureIndex >= 0 ? getGlobalFeatureId(geomData, featureIndex) : -1;\n}\n\ntype LayerRange = [firstFeatureIndex: number, lastFeatureIndex: number];\n\n// Returns [firstFeatureIndex, lastFeatureIndex]\n// MVTLoader parses tiles layer-by-layer, so each layer is a continuous range\nfunction getLayerRange(\n geomData: FeatureTypes & {\n __layers?: Record;\n },\n layerName: string\n): LayerRange | undefined {\n if (!geomData.__layers) {\n // Cache a map from properties.layerName to index ranges\n const layerNames: Record = {};\n const {properties} = geomData;\n for (let i = 0; i < properties.length; i++) {\n const {layerName: key} = properties[i] as Record;\n if (!key) {\n // ignore\n } else if (layerNames[key]) {\n layerNames[key][1] = i;\n } else {\n layerNames[key] = [i, i];\n }\n }\n geomData.__layers = layerNames;\n }\n return geomData.__layers[layerName];\n}\n\n// Returns global feature id\nfunction getGlobalFeatureId(geomData, featureIndex: number) {\n if (!geomData.__ids) {\n // Cache a map from featureId to globalFeatureId\n const result: string[] = [];\n const featureIds = geomData.featureIds.value;\n const globalFeatureIds = geomData.globalFeatureIds.value;\n for (let i = 0; i < featureIds.length; i++) {\n result[featureIds[i]] = globalFeatureIds[i];\n }\n geomData.__ids = result;\n }\n return geomData.__ids[featureIndex];\n}\n\n// Like array.findIndex, but only search within a range\nfunction findIndex(\n array: T[],\n predicate: (v: T, index: number) => boolean,\n startIndex: number,\n endIndex: number\n): number {\n for (let i = startIndex; i < endIndex; i++) {\n if (predicate(array[i], i)) {\n return i;\n }\n }\n return -1;\n}\n","import {\n Layer,\n LayersList,\n log,\n PickingInfo,\n UpdateParameters,\n GetPickingInfoParams,\n Viewport,\n COORDINATE_SYSTEM,\n DefaultProps\n} from '@deck.gl/core';\nimport {GeoJsonLayer, GeoJsonLayerProps} from '@deck.gl/layers';\nimport {Matrix4} from '@math.gl/core';\nimport {MVTWorkerLoader} from '@loaders.gl/mvt';\nimport {binaryToGeojson} from '@loaders.gl/gis';\nimport {ClipExtension} from '@deck.gl/extensions';\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\nimport type {Feature} from 'geojson';\n\nimport TileLayer, {TiledPickingInfo, TileLayerProps} from '../tile-layer/tile-layer';\nimport Tileset2D, {Tileset2DProps} from '../tile-layer/tileset-2d';\nimport {getURLFromTemplate, isGeoBoundingBox, isURLTemplate} from '../tile-layer/utils';\nimport {GeoBoundingBox, TileLoadProps} from '../tile-layer/types';\nimport Tile2DHeader from '../tile-layer/tile-2d-header';\nimport {transform} from './coordinate-transform';\nimport findIndexBinary from './find-index-binary';\n\nconst WORLD_SIZE = 512;\n\nconst defaultProps: DefaultProps = {\n ...GeoJsonLayer.defaultProps,\n onDataLoad: {type: 'function', value: null, optional: true, compare: false},\n uniqueIdProperty: '',\n highlightedFeatureId: null,\n loaders: [MVTWorkerLoader],\n binary: true\n};\n\nexport type TileJson = {\n tilejson: string;\n tiles: string[];\n // eslint-disable-next-line camelcase\n vector_layers: any[];\n attribution?: string;\n scheme?: string;\n maxzoom?: number;\n minzoom?: number;\n version?: string;\n};\n\ntype ParsedMvtTile = Feature[] | BinaryFeatures;\n\n/** All props supported by the MVTLayer */\nexport type MVTLayerProps = _MVTLayerProps &\n GeoJsonLayerProps &\n TileLayerProps;\n\n/** Props added by the MVTLayer */\nexport type _MVTLayerProps = {\n /** Called if `data` is a TileJSON URL when it is successfully fetched. */\n onDataLoad?: ((tilejson: TileJson | null) => void) | null;\n\n /** Needed for highlighting a feature split across two or more tiles. */\n uniqueIdProperty?: string;\n\n /** A feature with ID corresponding to the supplied value will be highlighted. */\n highlightedFeatureId?: string | null;\n\n /**\n * Use tile data in binary format.\n *\n * @default true\n */\n binary?: boolean;\n\n /**\n * Loaders used to transform tiles into `data` property passed to `renderSubLayers`.\n *\n * @default [MVTWorkerLoader] from `@loaders.gl/mvt`\n */\n loaders?: Loader[];\n};\n\ntype ContentWGS84Cache = {_contentWGS84?: Feature[]};\n\n/** Render data formatted as [Mapbox Vector Tiles](https://docs.mapbox.com/vector-tiles/specification/). */\nexport default class MVTLayer extends TileLayer<\n ParsedMvtTile,\n Required<_MVTLayerProps> & ExtraProps\n> {\n static layerName = 'MVTLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n super.initializeState();\n // GlobeView doesn't work well with binary data\n const binary = this.context.viewport.resolution !== undefined ? false : this.props.binary;\n this.setState({\n binary,\n data: null,\n tileJSON: null\n });\n }\n\n get isLoaded(): boolean {\n return this.state && this.state.data && this.state.tileset && super.isLoaded;\n }\n\n updateState({props, oldProps, context, changeFlags}: UpdateParameters) {\n if (changeFlags.dataChanged) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._updateTileData();\n }\n\n if (this.state?.data) {\n super.updateState({props, oldProps, context, changeFlags});\n this._setWGS84PropertyForTiles();\n }\n const {highlightColor} = props;\n if (highlightColor !== oldProps.highlightColor && Array.isArray(highlightColor)) {\n this.setState({highlightColor});\n }\n }\n\n /* eslint-disable complexity */\n private async _updateTileData(): Promise {\n let data: any = this.props.data;\n let tileJSON: any = null;\n\n if (typeof data === 'string' && !isURLTemplate(data)) {\n const {onDataLoad, fetch} = this.props;\n this.setState({data: null, tileJSON: null});\n try {\n tileJSON = await fetch(data, {propName: 'data', layer: this, loaders: []});\n } catch (error: any) {\n this.raiseError(error, 'loading TileJSON');\n data = null;\n }\n\n if (onDataLoad) {\n onDataLoad(tileJSON, {propName: 'data', layer: this});\n }\n } else if (data.tilejson) {\n tileJSON = data;\n }\n\n if (tileJSON) {\n data = tileJSON.tiles;\n }\n\n this.setState({data, tileJSON});\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const opts = super._getTilesetOptions();\n const tileJSON: TileJson | null | undefined = this.state.tileJSON;\n const {minZoom, maxZoom} = this.props;\n\n if (tileJSON) {\n if (Number.isFinite(tileJSON.minzoom) && (tileJSON.minzoom as number) > (minZoom as number)) {\n opts.minZoom = tileJSON.minzoom as number;\n }\n\n if (\n Number.isFinite(tileJSON.maxzoom) &&\n (!Number.isFinite(maxZoom) || (tileJSON.maxzoom as number) < (maxZoom as number))\n ) {\n opts.maxZoom = tileJSON.maxzoom as number;\n }\n }\n return opts;\n }\n\n /* eslint-disable complexity */\n\n renderLayers(): Layer | null | LayersList {\n if (!this.state?.data) return null;\n return super.renderLayers();\n }\n\n getTileData(loadProps: TileLoadProps): Promise {\n const {data, binary} = this.state;\n const {index, signal} = loadProps;\n\n const url = getURLFromTemplate(data, loadProps);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n let loadOptions = this.getLoadOptions();\n const {fetch} = this.props;\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/x-protobuf',\n mvt: {\n ...loadOptions?.mvt,\n coordinates: this.context.viewport.resolution ? 'wgs84' : 'local',\n tileIndex: index\n // Local worker debug\n // workerUrl: `modules/mvt/dist/mvt-loader.worker.js`\n // Set worker to null to skip web workers\n // workerUrl: null\n },\n gis: binary ? {format: 'binary'} : {}\n };\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: ParsedMvtTile;\n _offset: number;\n tile: Tile2DHeader;\n }\n ): Layer | null | LayersList {\n const {x, y, z} = props.tile.index;\n const worldScale = Math.pow(2, z);\n\n const xScale = WORLD_SIZE / worldScale;\n const yScale = -xScale;\n\n const xOffset = (WORLD_SIZE * x) / worldScale;\n const yOffset = WORLD_SIZE * (1 - y / worldScale);\n\n const modelMatrix = new Matrix4().scale([xScale, yScale, 1]);\n\n props.autoHighlight = false;\n\n if (!this.context.viewport.resolution) {\n props.modelMatrix = modelMatrix;\n props.coordinateOrigin = [xOffset, yOffset, 0];\n props.coordinateSystem = COORDINATE_SYSTEM.CARTESIAN;\n props.extensions = [...(props.extensions || []), new ClipExtension()];\n }\n\n const subLayers = super.renderSubLayers(props);\n\n if (this.state.binary && !(subLayers instanceof GeoJsonLayer)) {\n log.warn('renderSubLayers() must return GeoJsonLayer when using binary:true')();\n }\n\n return subLayers;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const {uniqueIdProperty} = this.props;\n\n const {hoveredFeatureId, hoveredFeatureLayerName} = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId;\n let newHoveredFeatureLayerName;\n\n if (hoveredFeature) {\n newHoveredFeatureId = getFeatureUniqueId(hoveredFeature, uniqueIdProperty);\n newHoveredFeatureLayerName = getFeatureLayerName(hoveredFeature);\n }\n let {highlightColor} = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n\n if (\n hoveredFeatureId !== newHoveredFeatureId ||\n hoveredFeatureLayerName !== newHoveredFeatureLayerName\n ) {\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId,\n hoveredFeatureLayerName: newHoveredFeatureLayerName\n });\n }\n }\n\n getPickingInfo(params: GetPickingInfoParams): TiledPickingInfo {\n const info = super.getPickingInfo(params);\n\n const isWGS84 = Boolean(this.context.viewport.resolution);\n\n if (this.state.binary && info.index !== -1) {\n const {data} = params.sourceLayer!.props;\n info.object = binaryToGeojson(data as BinaryFeatures, {globalFeatureId: info.index}) as DataT;\n }\n if (info.object && !isWGS84) {\n info.object = transformTileCoordsToWGS84(\n info.object,\n info.tile!.bbox as GeoBoundingBox,\n this.context.viewport\n );\n }\n\n return info;\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Record {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n private getHighlightedObjectIndex(tile: Tile2DHeader): number {\n const {hoveredFeatureId, hoveredFeatureLayerName, binary} = this.state;\n const {uniqueIdProperty, highlightedFeatureId} = this.props;\n const data = tile.content;\n\n const isHighlighted = isFeatureIdDefined(highlightedFeatureId);\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId) || isHighlighted;\n\n if (!isFeatureIdPresent) {\n return -1;\n }\n\n const featureIdToHighlight = isHighlighted ? highlightedFeatureId : hoveredFeatureId;\n\n // Iterable data\n if (Array.isArray(data)) {\n return data.findIndex(feature => {\n const isMatchingId = getFeatureUniqueId(feature, uniqueIdProperty) === featureIdToHighlight;\n const isMatchingLayer =\n isHighlighted || getFeatureLayerName(feature) === hoveredFeatureLayerName;\n return isMatchingId && isMatchingLayer;\n });\n\n // Non-iterable data\n } else if (data && binary) {\n // Get the feature index of the selected item to highlight\n return findIndexBinary(\n data,\n uniqueIdProperty,\n featureIdToHighlight,\n isHighlighted ? '' : hoveredFeatureLayerName\n );\n }\n\n return -1;\n }\n\n private _pickObjects(maxObjects: number | null): PickingInfo[] {\n const {deck, viewport} = this.context;\n const width = viewport.width;\n const height = viewport.height;\n const x = viewport.x;\n const y = viewport.y;\n const layerIds = [this.id];\n return deck!.pickObjects({x, y, width, height, layerIds, maxObjects});\n }\n\n /** Get the rendered features in the current viewport. */\n getRenderedFeatures(maxFeatures: number | null = null): DataT[] {\n const features = this._pickObjects(maxFeatures);\n const featureCache = new Set();\n const renderedFeatures: DataT[] = [];\n\n for (const f of features) {\n const featureId = getFeatureUniqueId(f.object, this.props.uniqueIdProperty);\n\n if (featureId === undefined) {\n // we have no id for the feature, we just add to the list\n renderedFeatures.push(f.object as DataT);\n } else if (!featureCache.has(featureId)) {\n // Add removing duplicates\n featureCache.add(featureId);\n renderedFeatures.push(f.object as DataT);\n }\n }\n\n return renderedFeatures;\n }\n\n private _setWGS84PropertyForTiles(): void {\n const propName = 'dataInWGS84';\n const tileset: Tileset2D = this.state.tileset;\n\n // @ts-expect-error selectedTiles are always initialized when tile is being processed\n tileset.selectedTiles.forEach((tile: Tile2DHeader & ContentWGS84Cache) => {\n if (!tile.hasOwnProperty(propName)) {\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(tile, propName, {\n get: () => {\n // Still loading or encountered an error\n if (!tile.content) {\n return null;\n }\n\n if (this.state.binary && Array.isArray(tile.content) && !tile.content.length) {\n // TODO: @loaders.gl/mvt returns [] when no content. It should return a valid empty binary.\n // https://github.com/visgl/loaders.gl/pull/1137\n return [];\n }\n\n const {bbox} = tile;\n if (tile._contentWGS84 === undefined && isGeoBoundingBox(bbox)) {\n // Create a cache to transform only once\n\n const content = this.state.binary ? binaryToGeojson(tile.content) : tile.content;\n tile._contentWGS84 = content.map(feature =>\n transformTileCoordsToWGS84(feature, bbox, this.context.viewport)\n );\n }\n return tile._contentWGS84;\n }\n });\n }\n });\n }\n}\n\nfunction getFeatureUniqueId(feature: Feature, uniqueIdProperty: string | undefined) {\n if (feature.properties && uniqueIdProperty) {\n return feature.properties[uniqueIdProperty];\n }\n\n if ('id' in feature) {\n return feature.id;\n }\n\n return undefined;\n}\n\nfunction getFeatureLayerName(feature: Feature): string | null {\n return feature.properties?.layerName || null;\n}\n\nfunction isFeatureIdDefined(value: unknown): boolean {\n return value !== undefined && value !== null && value !== '';\n}\n\nfunction transformTileCoordsToWGS84(\n object: Feature,\n bbox: GeoBoundingBox,\n viewport: Viewport\n): Feature {\n const feature = {\n ...object,\n geometry: {\n type: object.geometry.type\n }\n };\n\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(feature.geometry, 'coordinates', {\n get: () => {\n const wgs84Geom = transform(object.geometry, bbox, viewport);\n return wgs84Geom.coordinates;\n }\n });\n\n return feature as Feature;\n}\n","const BASE32_CODES = '0123456789bcdefghjkmnpqrstuvwxyz';\nconst BASE32_CODES_DICT = {};\nfor (let i = 0; i < BASE32_CODES.length; i++) {\n BASE32_CODES_DICT[BASE32_CODES.charAt(i)] = i;\n}\n\nconst MIN_LAT = -90;\nconst MAX_LAT = 90;\nconst MIN_LON = -180;\nconst MAX_LON = 180;\n\n// Adapted from ngeohash decode_bbox\nexport function getGeohashBounds(geohash: string): number[] {\n let isLon = true;\n let maxLat = MAX_LAT;\n let minLat = MIN_LAT;\n let maxLon = MAX_LON;\n let minLon = MIN_LON;\n let mid: number;\n\n let hashValue = 0;\n for (let i = 0, l = geohash.length; i < l; i++) {\n const code = geohash[i].toLowerCase();\n hashValue = BASE32_CODES_DICT[code];\n\n for (let bits = 4; bits >= 0; bits--) {\n const bit = (hashValue >> bits) & 1;\n if (isLon) {\n mid = (maxLon + minLon) / 2;\n if (bit === 1) {\n minLon = mid;\n } else {\n maxLon = mid;\n }\n } else {\n mid = (maxLat + minLat) / 2;\n if (bit === 1) {\n minLat = mid;\n } else {\n maxLat = mid;\n }\n }\n isLon = !isLon;\n }\n }\n\n return [minLat, minLon, maxLat, maxLon];\n}\n\nexport function getGeohashPolygon(geohash: string): number[] {\n const [s, w, n, e] = getGeohashBounds(geohash);\n\n return [e, n, e, s, w, s, w, n, e, n];\n}\n","import {AccessorFunction} from '@deck.gl/core';\nimport GeoCellLayer from '../geo-cell-layer/GeoCellLayer';\nimport {getGeohashPolygon} from './geohash-utils';\n\nconst defaultProps = {\n getGeohash: {type: 'accessor', value: d => d.geohash}\n};\n\n/**\n * Properties of `GeohashLayer`.\n */\ntype GeohashLayerProps = {\n /**\n * Called for each data object to retrieve the geohash string identifier.\n *\n * By default, it reads `geohash` property of data object.\n */\n getGeohash?: AccessorFunction;\n};\n\n/** Render filled and/or stroked polygons based on the [Geohash](https://en.wikipedia.org/wiki/Geohash) geospatial indexing system. */\nexport default class GeohashLayer extends GeoCellLayer<\n DataT,\n Required & ExtraProps\n> {\n static layerName = 'GeohashLayer';\n static defaultProps: any = defaultProps;\n\n indexToBounds(): Partial | null {\n const {data, getGeohash} = this.props;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n getPolygon: (x: DataT, objectInfo) => getGeohashPolygon(getGeohash(x, objectInfo))\n };\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable max-len */\n\nexport {default as GreatCircleLayer} from './great-circle-layer/great-circle-layer';\nexport {default as S2Layer} from './s2-layer/s2-layer';\nexport {default as QuadkeyLayer} from './quadkey-layer/quadkey-layer';\nexport {default as TileLayer} from './tile-layer/tile-layer';\nexport {default as TripsLayer} from './trips-layer/trips-layer';\nexport {default as H3ClusterLayer} from './h3-layers/h3-cluster-layer';\nexport {default as H3HexagonLayer} from './h3-layers/h3-hexagon-layer';\nexport {default as Tile3DLayer} from './tile-3d-layer/tile-3d-layer';\nexport {default as TerrainLayer} from './terrain-layer/terrain-layer';\nexport {default as MVTLayer} from './mvt-layer/mvt-layer';\nexport {default as GeohashLayer} from './geohash-layer/geohash-layer';\n\nexport {default as _GeoCellLayer} from './geo-cell-layer/GeoCellLayer';\nexport {getURLFromTemplate as _getURLFromTemplate} from './tile-layer/utils';\nexport {default as _Tileset2D} from './tile-layer/tileset-2d';\nexport {default as _Tile2DHeader} from './tile-layer/tile-2d-header';\n\n// Types\nexport type {H3ClusterLayerProps} from './h3-layers/h3-cluster-layer';\nexport type {H3HexagonLayerProps} from './h3-layers/h3-hexagon-layer';\nexport type {GreatCircleLayerProps} from './great-circle-layer/great-circle-layer';\nexport type {S2LayerProps} from './s2-layer/s2-layer';\nexport type {TileLayerProps} from './tile-layer/tile-layer';\nexport type {GeoBoundingBox, NonGeoBoundingBox} from './tile-layer/types';\nexport type {QuadkeyLayerProps} from './quadkey-layer/quadkey-layer';\nexport type {TileLoadProps as _TileLoadProps} from './tile-layer/types';\nexport type {TerrainLayerProps} from './terrain-layer/terrain-layer';\nexport type {Tile3DLayerProps} from './tile-3d-layer/tile-3d-layer';\nexport type {MVTLayerProps} from './mvt-layer/mvt-layer';\nexport type {GeoCellLayerProps as _GeoCellLayerProps} from './geo-cell-layer/GeoCellLayer';\n","export function fp64ify(a) {\n let out = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n let startIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n const hiPart = Math.fround(a);\n const loPart = a - hiPart;\n out[startIndex] = hiPart;\n out[startIndex + 1] = loPart;\n return out;\n}\nexport function fp64LowPart(a) {\n return a - Math.fround(a);\n}\nexport function fp64ifyMatrix4(matrix) {\n const matrixFP64 = new Float32Array(32);\n\n for (let i = 0; i < 4; ++i) {\n for (let j = 0; j < 4; ++j) {\n const index = i * 4 + j;\n fp64ify(matrix[j * 4 + i], matrixFP64, index * 2);\n }\n }\n\n return matrixFP64;\n}\n//# sourceMappingURL=fp64-utils.js.map","import { fp64ify, fp64LowPart, fp64ifyMatrix4 } from './fp64-utils';\nimport fp64arithmeticShader from './fp64-arithmetic.glsl';\nimport fp64functionShader from './fp64-functions.glsl';\nconst CONST_UNIFORMS = {\n ONE: 1.0\n};\nexport { fp64ify, fp64LowPart, fp64ifyMatrix4 };\n\nfunction getUniforms() {\n return CONST_UNIFORMS;\n}\n\nexport const fp64arithmetic = {\n name: 'fp64-arithmetic',\n vs: fp64arithmeticShader,\n fs: null,\n getUniforms,\n fp64ify,\n fp64LowPart,\n fp64ifyMatrix4\n};\nexport const fp64 = {\n name: 'fp64',\n vs: fp64functionShader,\n fs: null,\n dependencies: [fp64arithmetic],\n fp64ify,\n fp64LowPart,\n fp64ifyMatrix4\n};\n//# sourceMappingURL=fp64.js.map","export default \"uniform float ONE;\\nvec2 split(float a) {\\n const float SPLIT = 4097.0;\\n float t = a * SPLIT;\\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\\n float a_hi = t * ONE - (t - a);\\n float a_lo = a * ONE - a_hi;\\n#else\\n float a_hi = t - (t - a);\\n float a_lo = a - a_hi;\\n#endif\\n return vec2(a_hi, a_lo);\\n}\\nvec2 split2(vec2 a) {\\n vec2 b = split(a.x);\\n b.y += a.y;\\n return b;\\n}\\nvec2 quickTwoSum(float a, float b) {\\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\\n float sum = (a + b) * ONE;\\n float err = b - (sum - a) * ONE;\\n#else\\n float sum = a + b;\\n float err = b - (sum - a);\\n#endif\\n return vec2(sum, err);\\n}\\nvec2 twoSum(float a, float b) {\\n float s = (a + b);\\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\\n float v = (s * ONE - a) * ONE;\\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);\\n#else\\n float v = s - a;\\n float err = (a - (s - v)) + (b - v);\\n#endif\\n return vec2(s, err);\\n}\\n\\nvec2 twoSub(float a, float b) {\\n float s = (a - b);\\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\\n float v = (s * ONE - a) * ONE;\\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);\\n#else\\n float v = s - a;\\n float err = (a - (s - v)) - (b + v);\\n#endif\\n return vec2(s, err);\\n}\\n\\nvec2 twoSqr(float a) {\\n float prod = a * a;\\n vec2 a_fp64 = split(a);\\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\\n float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *\\n a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;\\n#else\\n float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;\\n#endif\\n return vec2(prod, err);\\n}\\n\\nvec2 twoProd(float a, float b) {\\n float prod = a * b;\\n vec2 a_fp64 = split(a);\\n vec2 b_fp64 = split(b);\\n float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +\\n a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;\\n return vec2(prod, err);\\n}\\n\\nvec2 sum_fp64(vec2 a, vec2 b) {\\n vec2 s, t;\\n s = twoSum(a.x, b.x);\\n t = twoSum(a.y, b.y);\\n s.y += t.x;\\n s = quickTwoSum(s.x, s.y);\\n s.y += t.y;\\n s = quickTwoSum(s.x, s.y);\\n return s;\\n}\\n\\nvec2 sub_fp64(vec2 a, vec2 b) {\\n vec2 s, t;\\n s = twoSub(a.x, b.x);\\n t = twoSub(a.y, b.y);\\n s.y += t.x;\\n s = quickTwoSum(s.x, s.y);\\n s.y += t.y;\\n s = quickTwoSum(s.x, s.y);\\n return s;\\n}\\n\\nvec2 mul_fp64(vec2 a, vec2 b) {\\n vec2 prod = twoProd(a.x, b.x);\\n prod.y += a.x * b.y;\\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\\n prod = split2(prod);\\n#endif\\n prod = quickTwoSum(prod.x, prod.y);\\n prod.y += a.y * b.x;\\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\\n prod = split2(prod);\\n#endif\\n prod = quickTwoSum(prod.x, prod.y);\\n return prod;\\n}\\n\\nvec2 div_fp64(vec2 a, vec2 b) {\\n float xn = 1.0 / b.x;\\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\\n vec2 yn = mul_fp64(a, vec2(xn, 0));\\n#else\\n vec2 yn = a * xn;\\n#endif\\n float diff = (sub_fp64(a, mul_fp64(b, yn))).x;\\n vec2 prod = twoProd(xn, diff);\\n return sum_fp64(yn, prod);\\n}\\n\\nvec2 sqrt_fp64(vec2 a) {\\n if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);\\n if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\\n\\n float x = 1.0 / sqrt(a.x);\\n float yn = a.x * x;\\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\\n vec2 yn_sqr = twoSqr(yn) * ONE;\\n#else\\n vec2 yn_sqr = twoSqr(yn);\\n#endif\\n float diff = sub_fp64(a, yn_sqr).x;\\n vec2 prod = twoProd(x * 0.5, diff);\\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\\n return sum_fp64(split(yn), prod);\\n#else\\n return sum_fp64(vec2(yn, 0.0), prod);\\n#endif\\n}\\n\";\n//# sourceMappingURL=fp64-arithmetic.glsl.js.map","// Copyright (c) 2015 - 2019 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport const AGGREGATION_OPERATION = {\n SUM: 1,\n MEAN: 2,\n MIN: 3,\n MAX: 4\n};\n\nfunction sumReducer(accu, cur) {\n return accu + cur;\n}\n\nfunction maxReducer(accu, cur) {\n return cur > accu ? cur : accu;\n}\n\nfunction minReducer(accu, cur) {\n return cur < accu ? cur : accu;\n}\n\nexport function getMean(pts, accessor) {\n if (Number.isFinite(accessor)) {\n return pts.length ? accessor : null;\n }\n const filtered = pts.map(accessor).filter(Number.isFinite);\n\n return filtered.length ? filtered.reduce(sumReducer, 0) / filtered.length : null;\n}\n\nexport function getSum(pts, accessor) {\n if (Number.isFinite(accessor)) {\n return pts.length ? pts.length * accessor : null;\n }\n const filtered = pts.map(accessor).filter(Number.isFinite);\n\n return filtered.length ? filtered.reduce(sumReducer, 0) : null;\n}\n\nexport function getMax(pts, accessor) {\n if (Number.isFinite(accessor)) {\n return pts.length ? accessor : null;\n }\n const filtered = pts.map(accessor).filter(Number.isFinite);\n\n return filtered.length ? filtered.reduce(maxReducer, -Infinity) : null;\n}\n\nexport function getMin(pts, accessor) {\n if (Number.isFinite(accessor)) {\n return pts.length ? accessor : null;\n }\n const filtered = pts.map(accessor).filter(Number.isFinite);\n\n return filtered.length ? filtered.reduce(minReducer, Infinity) : null;\n}\n\n// Function to convert from aggregation/accessor props (like colorAggregation and getColorWeight) to getValue prop (like getColorValue)\nexport function getValueFunc(aggregation, accessor, context) {\n const op = AGGREGATION_OPERATION[aggregation] || AGGREGATION_OPERATION.SUM;\n accessor = wrapAccessor(accessor, context);\n switch (op) {\n case AGGREGATION_OPERATION.MIN:\n return pts => getMin(pts, accessor);\n case AGGREGATION_OPERATION.SUM:\n return pts => getSum(pts, accessor);\n case AGGREGATION_OPERATION.MEAN:\n return pts => getMean(pts, accessor);\n case AGGREGATION_OPERATION.MAX:\n return pts => getMax(pts, accessor);\n default:\n return null;\n }\n}\n\nfunction wrapAccessor(accessor, context = {}) {\n if (Number.isFinite(accessor)) {\n return accessor;\n }\n return pt => {\n context.index = pt.index;\n return accessor(pt.source, context);\n };\n}\n\nexport function wrapGetValueFunc(getValue, context = {}) {\n return pts => {\n context.indices = pts.map(pt => pt.index);\n return getValue(\n pts.map(pt => pt.source),\n context\n );\n };\n}\n","import GL from '@luma.gl/constants';\nimport {AGGREGATION_OPERATION} from '../aggregation-operation-utils';\n\nexport const DEFAULT_RUN_PARAMS = {\n projectPoints: false,\n viewport: null,\n createBufferObjects: true,\n moduleSettings: {}\n};\n\nexport const MAX_32_BIT_FLOAT = 3.402823466e38;\nexport const MIN_BLEND_EQUATION = [GL.MIN, GL.FUNC_ADD];\nexport const MAX_BLEND_EQUATION = [GL.MAX, GL.FUNC_ADD];\nexport const MAX_MIN_BLEND_EQUATION = [GL.MAX, GL.MIN];\nexport const EQUATION_MAP = {\n [AGGREGATION_OPERATION.SUM]: GL.FUNC_ADD,\n [AGGREGATION_OPERATION.MEAN]: GL.FUNC_ADD,\n [AGGREGATION_OPERATION.MIN]: MIN_BLEND_EQUATION,\n [AGGREGATION_OPERATION.MAX]: MAX_BLEND_EQUATION\n};\n\nexport const ELEMENTCOUNT = 4;\nexport const DEFAULT_WEIGHT_PARAMS = {\n size: 1,\n operation: AGGREGATION_OPERATION.SUM,\n needMin: false,\n needMax: false,\n combineMaxMin: false\n};\n\nexport const PIXEL_SIZE = 4; // RGBA32F\nexport const WEIGHT_SIZE = 3;\n\nexport const MAX_MIN_TEXTURE_OPTS = {\n format: GL.RGBA32F,\n type: GL.FLOAT,\n border: 0,\n mipmaps: false,\n parameters: {\n [GL.TEXTURE_MAG_FILTER]: GL.NEAREST,\n [GL.TEXTURE_MIN_FILTER]: GL.NEAREST\n },\n dataFormat: GL.RGBA,\n width: 1,\n height: 1\n};\n","import GL from '@luma.gl/constants';\nimport {Framebuffer, Texture2D, isWebGL2} from '@luma.gl/core';\n\nconst DEFAULT_PARAMETERS = {\n [GL.TEXTURE_MAG_FILTER]: GL.NEAREST,\n [GL.TEXTURE_MIN_FILTER]: GL.NEAREST\n};\n\nexport function getFloatTexture(gl, opts = {}) {\n const {\n width = 1,\n height = 1,\n data = null,\n unpackFlipY = true,\n parameters = DEFAULT_PARAMETERS\n } = opts;\n const texture = new Texture2D(gl, {\n data,\n format: isWebGL2(gl) ? GL.RGBA32F : GL.RGBA,\n type: GL.FLOAT,\n border: 0,\n mipmaps: false,\n parameters,\n dataFormat: GL.RGBA,\n width,\n height,\n unpackFlipY\n });\n return texture;\n}\n\nexport function getFramebuffer(gl, opts) {\n const {id, width = 1, height = 1, texture} = opts;\n const fb = new Framebuffer(gl, {\n id,\n width,\n height,\n attachments: {\n [GL.COLOR_ATTACHMENT0]: texture\n }\n });\n\n return fb;\n}\n\nexport function getFloatArray(array, size, fillValue = 0) {\n if (!array || array.length < size) {\n return new Float32Array(size).fill(fillValue);\n }\n return array;\n}\n","// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {\n Model,\n Transform,\n FEATURES,\n hasFeatures,\n isWebGL2,\n readPixelsToBuffer,\n withParameters\n} from '@luma.gl/core';\nimport {fp64arithmetic} from '@luma.gl/shadertools';\nimport {log, project32, _mergeShaders as mergeShaders} from '@deck.gl/core';\n\nimport {\n DEFAULT_RUN_PARAMS,\n MAX_32_BIT_FLOAT,\n MIN_BLEND_EQUATION,\n MAX_BLEND_EQUATION,\n MAX_MIN_BLEND_EQUATION,\n EQUATION_MAP,\n DEFAULT_WEIGHT_PARAMS,\n PIXEL_SIZE\n} from './gpu-grid-aggregator-constants';\nimport {AGGREGATION_OPERATION} from '../aggregation-operation-utils';\n\nimport AGGREGATE_TO_GRID_VS from './aggregate-to-grid-vs.glsl';\nimport AGGREGATE_TO_GRID_FS from './aggregate-to-grid-fs.glsl';\nimport AGGREGATE_ALL_VS from './aggregate-all-vs.glsl';\nimport AGGREGATE_ALL_FS from './aggregate-all-fs.glsl';\nimport TRANSFORM_MEAN_VS from './transform-mean-vs.glsl';\nimport {getFloatTexture, getFramebuffer} from './../resource-utils.js';\n\nconst BUFFER_NAMES = ['aggregationBuffer', 'maxMinBuffer', 'minBuffer', 'maxBuffer'];\nconst ARRAY_BUFFER_MAP = {\n maxData: 'maxBuffer',\n minData: 'minBuffer',\n maxMinData: 'maxMinBuffer'\n};\n\nconst REQUIRED_FEATURES = [\n FEATURES.WEBGL2, // TODO: Remove after trannsform refactor\n FEATURES.COLOR_ATTACHMENT_RGBA32F,\n FEATURES.BLEND_EQUATION_MINMAX,\n FEATURES.FLOAT_BLEND,\n FEATURES.TEXTURE_FLOAT\n];\n\nexport default class GPUGridAggregator {\n // Decode and return aggregation data of given pixel.\n static getAggregationData({aggregationData, maxData, minData, maxMinData, pixelIndex}) {\n const index = pixelIndex * PIXEL_SIZE;\n const results = {};\n if (aggregationData) {\n results.cellCount = aggregationData[index + 3];\n results.cellWeight = aggregationData[index];\n }\n if (maxMinData) {\n results.maxCellWieght = maxMinData[0];\n results.minCellWeight = maxMinData[3];\n } else {\n if (maxData) {\n results.maxCellWieght = maxData[0];\n results.totalCount = maxData[3];\n }\n if (minData) {\n results.minCellWeight = minData[0];\n results.totalCount = maxData[3];\n }\n }\n return results;\n }\n\n // Decodes and retuns counts and weights of all cells\n static getCellData({countsData, size = 1}) {\n const numCells = countsData.length / 4;\n const cellWeights = new Float32Array(numCells * size);\n const cellCounts = new Uint32Array(numCells);\n for (let i = 0; i < numCells; i++) {\n // weights in RGB channels\n for (let sizeIndex = 0; sizeIndex < size; sizeIndex++) {\n cellWeights[i * size + sizeIndex] = countsData[i * 4 + sizeIndex];\n }\n // count in Alpha channel\n cellCounts[i] = countsData[i * 4 + 3];\n }\n return {cellCounts, cellWeights};\n }\n\n static isSupported(gl) {\n return hasFeatures(gl, REQUIRED_FEATURES);\n }\n\n // DEBUG ONLY\n // static logData({aggregationBuffer, minBuffer, maxBuffer, maxMinBuffer, limit = 10}) {\n // if (aggregationBuffer) {\n // console.log('Aggregation Data:');\n // const agrData = aggregationBuffer.getData();\n // for (let index = 0; index < agrData.length && limit > 0; index += 4) {\n // if (agrData[index + 3] > 0) {\n // console.log(\n // `index: ${index} weights: ${agrData[index]} ${agrData[index + 1]} ${\n // agrData[index + 2]\n // } count: ${agrData[index + 3]}`\n // );\n // limit--;\n // }\n // }\n // }\n // const obj = {minBuffer, maxBuffer, maxMinBuffer};\n // for (const key in obj) {\n // if (obj[key]) {\n // const data = obj[key].getData();\n // console.log(`${key} data : R: ${data[0]} G: ${data[1]} B: ${data[2]} A: ${data[3]}`);\n // }\n // }\n // }\n\n constructor(gl, opts = {}) {\n this.id = opts.id || 'gpu-grid-aggregator';\n this.gl = gl;\n this.state = {\n // per weight GPU resources\n weightAttributes: {},\n textures: {},\n meanTextures: {},\n buffers: {},\n framebuffers: {},\n maxMinFramebuffers: {},\n minFramebuffers: {},\n maxFramebuffers: {},\n equations: {},\n\n // common resources to be deleted\n resources: {},\n\n // results\n results: {}\n };\n this._hasGPUSupport =\n isWebGL2(gl) && // gl_InstanceID usage in min/max calculation shaders\n hasFeatures(\n this.gl,\n FEATURES.BLEND_EQUATION_MINMAX, // set min/max blend modes\n FEATURES.COLOR_ATTACHMENT_RGBA32F, // render to float texture\n FEATURES.TEXTURE_FLOAT // sample from a float texture\n );\n if (this._hasGPUSupport) {\n this._setupModels();\n }\n }\n\n // Delete owned resources.\n delete() {\n const {gridAggregationModel, allAggregationModel, meanTransform} = this;\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n resources\n } = this.state;\n\n gridAggregationModel?.delete();\n allAggregationModel?.delete();\n meanTransform?.delete();\n\n deleteResources([\n framebuffers,\n textures,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n resources\n ]);\n }\n\n // Perform aggregation and retun the results\n run(opts = {}) {\n // reset results\n this.setState({results: {}});\n const aggregationParams = this._normalizeAggregationParams(opts);\n if (!this._hasGPUSupport) {\n log.log(1, 'GPUGridAggregator: not supported')();\n }\n return this._runAggregation(aggregationParams);\n }\n\n // Reads aggregation data into JS Array object\n // For WebGL1, data is available in JS Array objects already.\n // For WebGL2, data is read from Buffer objects and cached for subsequent queries.\n getData(weightId) {\n const data = {};\n const results = this.state.results;\n if (!results[weightId].aggregationData) {\n // cache the results if reading from the buffer (WebGL2 path)\n results[weightId].aggregationData = results[weightId].aggregationBuffer.getData();\n }\n data.aggregationData = results[weightId].aggregationData;\n\n // Check for optional results\n for (const arrayName in ARRAY_BUFFER_MAP) {\n const bufferName = ARRAY_BUFFER_MAP[arrayName];\n\n if (results[weightId][arrayName] || results[weightId][bufferName]) {\n // cache the result\n results[weightId][arrayName] =\n results[weightId][arrayName] || results[weightId][bufferName].getData();\n data[arrayName] = results[weightId][arrayName];\n }\n }\n return data;\n }\n\n updateShaders(shaderOptions = {}) {\n this.setState({shaderOptions, modelDirty: true});\n }\n\n // PRIVATE\n\n _normalizeAggregationParams(opts) {\n const aggregationParams = {...DEFAULT_RUN_PARAMS, ...opts};\n const {weights} = aggregationParams;\n if (weights) {\n aggregationParams.weights = normalizeWeightParams(weights);\n }\n return aggregationParams;\n }\n\n // Update priveate state\n setState(updateObject) {\n Object.assign(this.state, updateObject);\n }\n\n // GPU Aggregation methods\n\n _getAggregateData(opts) {\n const results = {};\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n resources\n } = this.state;\n const {weights} = opts;\n\n for (const id in weights) {\n results[id] = {};\n const {needMin, needMax, combineMaxMin} = weights[id];\n results[id].aggregationTexture = textures[id];\n results[id].aggregationBuffer = readPixelsToBuffer(framebuffers[id], {\n target: weights[id].aggregationBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n if (needMin && needMax && combineMaxMin) {\n results[id].maxMinBuffer = readPixelsToBuffer(maxMinFramebuffers[id], {\n target: weights[id].maxMinBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].maxMinTexture = resources[`${id}-maxMinTexture`];\n } else {\n if (needMin) {\n results[id].minBuffer = readPixelsToBuffer(minFramebuffers[id], {\n target: weights[id].minBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].minTexture = resources[`${id}-minTexture`];\n }\n if (needMax) {\n results[id].maxBuffer = readPixelsToBuffer(maxFramebuffers[id], {\n target: weights[id].maxBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].maxTexture = resources[`${id}-maxTexture`];\n }\n }\n }\n this._trackGPUResultBuffers(results, weights);\n return results;\n }\n\n _renderAggregateData(opts) {\n const {\n cellSize,\n projectPoints,\n attributes,\n moduleSettings,\n numCol,\n numRow,\n weights,\n translation,\n scaling\n } = opts;\n const {maxMinFramebuffers, minFramebuffers, maxFramebuffers} = this.state;\n\n const gridSize = [numCol, numRow];\n const parameters = {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE]\n };\n const uniforms = {\n cellSize,\n gridSize,\n projectPoints,\n translation,\n scaling\n };\n\n for (const id in weights) {\n const {needMin, needMax} = weights[id];\n const combineMaxMin = needMin && needMax && weights[id].combineMaxMin;\n this._renderToWeightsTexture({\n id,\n parameters,\n moduleSettings,\n uniforms,\n gridSize,\n attributes,\n weights\n });\n if (combineMaxMin) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MAX_MIN_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: maxMinFramebuffers[id],\n clearParams: {clearColor: [0, 0, 0, MAX_32_BIT_FLOAT]},\n combineMaxMin\n });\n } else {\n if (needMin) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MIN_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: minFramebuffers[id],\n clearParams: {clearColor: [MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, 0]},\n combineMaxMin\n });\n }\n if (needMax) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MAX_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: maxFramebuffers[id],\n clearParams: {clearColor: [0, 0, 0, 0]},\n combineMaxMin\n });\n }\n }\n }\n }\n\n // render all aggregated grid-cells to generate Min, Max or MaxMin data texture\n _renderToMaxMinTexture(opts) {\n const {id, parameters, gridSize, minOrMaxFb, combineMaxMin, clearParams = {}} = opts;\n const {framebuffers} = this.state;\n const {gl, allAggregationModel} = this;\n\n withParameters(\n gl,\n {\n ...clearParams,\n framebuffer: minOrMaxFb,\n viewport: [0, 0, gridSize[0], gridSize[1]]\n },\n () => {\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n allAggregationModel.draw({\n parameters,\n uniforms: {\n uSampler: framebuffers[id].texture,\n gridSize,\n combineMaxMin\n }\n });\n }\n );\n }\n\n // render all data points to aggregate weights\n _renderToWeightsTexture(opts) {\n const {id, parameters, moduleSettings, uniforms, gridSize, weights} = opts;\n const {framebuffers, equations, weightAttributes} = this.state;\n const {gl, gridAggregationModel} = this;\n const {operation} = weights[id];\n\n const clearColor =\n operation === AGGREGATION_OPERATION.MIN\n ? [MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, 0]\n : [0, 0, 0, 0];\n withParameters(\n gl,\n {\n framebuffer: framebuffers[id],\n viewport: [0, 0, gridSize[0], gridSize[1]],\n clearColor\n },\n () => {\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n const attributes = {weights: weightAttributes[id]};\n gridAggregationModel.draw({\n parameters: {...parameters, blendEquation: equations[id]},\n moduleSettings,\n uniforms,\n attributes\n });\n }\n );\n\n if (operation === AGGREGATION_OPERATION.MEAN) {\n const {meanTextures, textures} = this.state;\n const transformOptions = {\n _sourceTextures: {aggregationValues: meanTextures[id]}, // contains aggregated data\n _targetTexture: textures[id], // store mean values,\n elementCount: textures[id].width * textures[id].height\n };\n if (this.meanTransform) {\n this.meanTransform.update(transformOptions);\n } else {\n this.meanTransform = getMeanTransform(gl, transformOptions);\n }\n this.meanTransform.run({\n parameters: {\n blend: false,\n depthTest: false\n }\n });\n\n // update framebuffer with mean results so readPixelsToBuffer returns mean values\n framebuffers[id].attach({[GL.COLOR_ATTACHMENT0]: textures[id]});\n }\n }\n\n _runAggregation(opts) {\n this._updateModels(opts);\n this._setupFramebuffers(opts);\n this._renderAggregateData(opts);\n const results = this._getAggregateData(opts);\n this.setState({results});\n return results;\n }\n\n // set up framebuffer for each weight\n /* eslint-disable complexity, max-depth, max-statements*/\n _setupFramebuffers(opts) {\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n equations\n } = this.state;\n const {weights} = opts;\n const {numCol, numRow} = opts;\n const framebufferSize = {width: numCol, height: numRow};\n for (const id in weights) {\n const {needMin, needMax, combineMaxMin, operation} = weights[id];\n textures[id] =\n weights[id].aggregationTexture ||\n textures[id] ||\n getFloatTexture(this.gl, {id: `${id}-texture`, width: numCol, height: numRow});\n textures[id].resize(framebufferSize);\n let texture = textures[id];\n if (operation === AGGREGATION_OPERATION.MEAN) {\n // For MEAN, we first aggregatet into a temp texture\n meanTextures[id] =\n meanTextures[id] ||\n getFloatTexture(this.gl, {id: `${id}-mean-texture`, width: numCol, height: numRow});\n meanTextures[id].resize(framebufferSize);\n texture = meanTextures[id];\n }\n if (framebuffers[id]) {\n framebuffers[id].attach({[GL.COLOR_ATTACHMENT0]: texture});\n } else {\n framebuffers[id] = getFramebuffer(this.gl, {\n id: `${id}-fb`,\n width: numCol,\n height: numRow,\n texture\n });\n }\n framebuffers[id].resize(framebufferSize);\n equations[id] = EQUATION_MAP[operation] || EQUATION_MAP.SUM;\n // For min/max framebuffers will use default size 1X1\n if (needMin || needMax) {\n if (needMin && needMax && combineMaxMin) {\n if (!maxMinFramebuffers[id]) {\n texture = weights[id].maxMinTexture || this._getMinMaxTexture(`${id}-maxMinTexture`);\n maxMinFramebuffers[id] = getFramebuffer(this.gl, {id: `${id}-maxMinFb`, texture});\n }\n } else {\n if (needMin) {\n if (!minFramebuffers[id]) {\n texture = weights[id].minTexture || this._getMinMaxTexture(`${id}-minTexture`);\n minFramebuffers[id] = getFramebuffer(this.gl, {\n id: `${id}-minFb`,\n texture\n });\n }\n }\n if (needMax) {\n if (!maxFramebuffers[id]) {\n texture = weights[id].maxTexture || this._getMinMaxTexture(`${id}-maxTexture`);\n maxFramebuffers[id] = getFramebuffer(this.gl, {\n id: `${id}-maxFb`,\n texture\n });\n }\n }\n }\n }\n }\n }\n /* eslint-enable complexity, max-depth, max-statements */\n\n _getMinMaxTexture(name) {\n const {resources} = this.state;\n if (!resources[name]) {\n resources[name] = getFloatTexture(this.gl, {id: `resourceName`});\n }\n return resources[name];\n }\n\n _setupModels({numCol = 0, numRow = 0} = {}) {\n const {gl} = this;\n const {shaderOptions} = this.state;\n this.gridAggregationModel?.delete();\n this.gridAggregationModel = getAggregationModel(gl, shaderOptions);\n if (!this.allAggregationModel) {\n const instanceCount = numCol * numRow;\n this.allAggregationModel = getAllAggregationModel(gl, instanceCount);\n }\n }\n\n // set up buffers for all weights\n _setupWeightAttributes(opts) {\n const {weightAttributes} = this.state;\n const {weights} = opts;\n for (const id in weights) {\n weightAttributes[id] = opts.attributes[id];\n }\n }\n\n // GPU Aggregation results are provided in Buffers, if new Buffer objects are created track them for later deletion.\n /* eslint-disable max-depth */\n _trackGPUResultBuffers(results, weights) {\n const {resources} = this.state;\n for (const id in results) {\n if (results[id]) {\n for (const bufferName of BUFFER_NAMES) {\n if (results[id][bufferName] && weights[id][bufferName] !== results[id][bufferName]) {\n // No result buffer is provided in weights object, `readPixelsToBuffer` has created a new Buffer object\n // collect the new buffer for garabge collection\n const name = `gpu-result-${id}-${bufferName}`;\n if (resources[name]) {\n resources[name].delete();\n }\n resources[name] = results[id][bufferName];\n }\n }\n }\n }\n }\n /* eslint-enable max-depth */\n\n _updateModels(opts) {\n const {vertexCount, attributes, numCol, numRow} = opts;\n const {modelDirty} = this.state;\n\n if (modelDirty) {\n this._setupModels(opts);\n this.setState({modelDirty: false});\n }\n\n // this maps color/elevation to weight name.\n this._setupWeightAttributes(opts);\n\n this.gridAggregationModel.setVertexCount(vertexCount);\n this.gridAggregationModel.setAttributes(attributes);\n\n this.allAggregationModel.setInstanceCount(numCol * numRow);\n }\n}\n\n// HELPER METHODS\n\nfunction normalizeWeightParams(weights) {\n const result = {};\n for (const id in weights) {\n result[id] = {...DEFAULT_WEIGHT_PARAMS, ...weights[id]};\n }\n return result;\n}\n\nfunction deleteResources(resources) {\n resources = Array.isArray(resources) ? resources : [resources];\n resources.forEach(obj => {\n for (const name in obj) {\n obj[name].delete();\n }\n });\n}\n\nfunction getAggregationModel(gl, shaderOptions) {\n const shaders = mergeShaders(\n {\n vs: AGGREGATE_TO_GRID_VS,\n fs: AGGREGATE_TO_GRID_FS,\n modules: [fp64arithmetic, project32]\n },\n shaderOptions\n );\n\n return new Model(gl, {\n id: 'Gird-Aggregation-Model',\n vertexCount: 1,\n drawMode: GL.POINTS,\n ...shaders\n });\n}\n\nfunction getAllAggregationModel(gl, instanceCount) {\n return new Model(gl, {\n id: 'All-Aggregation-Model',\n vs: AGGREGATE_ALL_VS,\n fs: AGGREGATE_ALL_FS,\n modules: [fp64arithmetic],\n vertexCount: 1,\n drawMode: GL.POINTS,\n isInstanced: true,\n instanceCount,\n attributes: {\n position: [0, 0]\n }\n });\n}\n\nfunction getMeanTransform(gl, opts) {\n return new Transform(gl, {\n vs: TRANSFORM_MEAN_VS,\n _targetTextureVarying: 'meanValues',\n ...opts\n });\n}\n","// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME gpu-aggregation-transform-mean-vs\nattribute vec4 aggregationValues;\nvarying vec4 meanValues;\n\nvoid main()\n{\n // TODO: Use 64-bit division ?? not needed given this is aggregation ??\n bool isCellValid = bool(aggregationValues.w > 0.);\n // aggregationValues: XYZ contain aggregated values, W contains count\n meanValues.xyz = isCellValid ? aggregationValues.xyz/aggregationValues.w : vec3(0, 0, 0);\n meanValues.w = aggregationValues.w;\n\n // Enforce default value for ANGLE issue (https://bugs.chromium.org/p/angleproject/issues/detail?id=3941)\n gl_PointSize = 1.0;\n}\n`;\n","// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME gpu-aggregation-to-grid-vs\n\nattribute vec3 positions;\nattribute vec3 positions64Low;\nattribute vec3 weights;\nuniform vec2 cellSize;\nuniform vec2 gridSize;\nuniform bool projectPoints;\nuniform vec2 translation;\nuniform vec3 scaling;\n\nvarying vec3 vWeights;\n\nvec2 project_to_pixel(vec4 pos) {\n vec4 result;\n pos.xy = pos.xy/pos.w;\n result = pos + vec4(translation, 0., 0.);\n result.xy = scaling.z > 0. ? result.xy * scaling.xy : result.xy;\n return result.xy;\n}\n\nvoid main(void) {\n\n vWeights = weights;\n\n vec4 windowPos = vec4(positions, 1.);\n if (projectPoints) {\n windowPos = project_position_to_clipspace(positions, positions64Low, vec3(0));\n }\n\n vec2 pos = project_to_pixel(windowPos);\n\n vec2 pixelXY64[2];\n pixelXY64[0] = vec2(pos.x, 0.);\n pixelXY64[1] = vec2(pos.y, 0.);\n\n // Transform (0,0):windowSize -> (0, 0): gridSize\n vec2 gridXY64[2];\n gridXY64[0] = div_fp64(pixelXY64[0], vec2(cellSize.x, 0));\n gridXY64[1] = div_fp64(pixelXY64[1], vec2(cellSize.y, 0));\n float x = floor(gridXY64[0].x);\n float y = floor(gridXY64[1].x);\n pos = vec2(x, y);\n\n // Transform (0,0):gridSize -> (-1, -1):(1,1)\n pos = (pos * (2., 2.) / (gridSize)) - (1., 1.);\n\n // Move to pixel center, pixel-size in screen sapce (2/gridSize) * 0.5 => 1/gridSize\n vec2 offset = 1.0 / gridSize;\n pos = pos + offset;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n\n // Enforce default value for ANGLE issue (https://bugs.chromium.org/p/angleproject/issues/detail?id=3941)\n gl_PointSize = 1.0;\n}\n`;\n","// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME gpu-aggregation-to-grid-fs\n\nprecision highp float;\n\nvarying vec3 vWeights;\n\nvoid main(void) {\n gl_FragColor = vec4(vWeights, 1.0);\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#version 300 es\n#define SHADER_NAME gpu-aggregation-all-vs-64\n\nin vec2 position;\nuniform ivec2 gridSize;\nout vec2 vTextureCoord;\n\nvoid main(void) {\n // Map each position to single pixel\n vec2 pos = vec2(-1.0, -1.0);\n\n // Move to pixel center, pixel-size in screen sapce (2/gridSize) * 0.5 => 1/gridSize\n vec2 offset = 1.0 / vec2(gridSize);\n pos = pos + offset;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n\n int yIndex = gl_InstanceID / gridSize[0];\n int xIndex = gl_InstanceID - (yIndex * gridSize[0]);\n\n vec2 yIndexFP64 = vec2(float(yIndex), 0.);\n vec2 xIndexFP64 = vec2(float(xIndex), 0.);\n vec2 gridSizeYFP64 = vec2(gridSize[1], 0.);\n vec2 gridSizeXFP64 = vec2(gridSize[0], 0.);\n\n vec2 texCoordXFP64 = div_fp64(yIndexFP64, gridSizeYFP64);\n vec2 texCoordYFP64 = div_fp64(xIndexFP64, gridSizeXFP64);\n\n vTextureCoord = vec2(texCoordYFP64.x, texCoordXFP64.x);\n // Enforce default value for ANGLE issue (https://bugs.chromium.org/p/angleproject/issues/detail?id=3941)\n gl_PointSize = 1.0;\n}\n`;\n","// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#version 300 es\n#define SHADER_NAME gpu-aggregation-all-fs\n\nprecision highp float;\n\nin vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform bool combineMaxMin;\nout vec4 fragColor;\nvoid main(void) {\n vec4 textureColor = texture(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));\n if (textureColor.a == 0.) {\n discard;\n }\n fragColor.rgb = textureColor.rgb;\n // if combineMinMax is true, use Alpha channel for first weights min value.\n fragColor.a = combineMaxMin ? textureColor.r : textureColor.a;\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport const defaultColorRange: [number, number, number][] = [\n [255, 255, 178],\n [254, 217, 118],\n [254, 178, 76],\n [253, 141, 60],\n [240, 59, 32],\n [189, 0, 38]\n];\n\n// Converts a colorRange array to a flat array with 4 components per color\nexport function colorRangeToFlatArray(colorRange, normalize = false, ArrayType = Float32Array) {\n let flatArray;\n\n if (Number.isFinite(colorRange[0])) {\n // its already a flat array.\n flatArray = new ArrayType(colorRange);\n } else {\n // flatten it\n flatArray = new ArrayType(colorRange.length * 4);\n let index = 0;\n\n for (let i = 0; i < colorRange.length; i++) {\n const color = colorRange[i];\n flatArray[index++] = color[0];\n flatArray[index++] = color[1];\n flatArray[index++] = color[2];\n flatArray[index++] = Number.isFinite(color[3]) ? color[3] : 255;\n }\n }\n\n if (normalize) {\n for (let i = 0; i < flatArray.length; i++) {\n flatArray[i] /= 255;\n }\n }\n return flatArray;\n}\n","// Copyright (c) 2015 - 2019 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry, FEATURES, hasFeatures, Texture2D, DefaultProps} from '@luma.gl/core';\nimport {Layer, LayerProps, log, picking, UpdateParameters} from '@deck.gl/core';\nimport {defaultColorRange, colorRangeToFlatArray} from '../utils/color-utils';\nimport vs from './screen-grid-layer-vertex.glsl';\nimport fs from './screen-grid-layer-fragment.glsl';\nimport type {_ScreenGridLayerProps} from './screen-grid-layer';\n\nconst DEFAULT_MINCOLOR = [0, 0, 0, 0];\nconst DEFAULT_MAXCOLOR = [0, 255, 0, 255];\nconst COLOR_PROPS = ['minColor', 'maxColor', 'colorRange', 'colorDomain'];\n\nconst defaultProps: DefaultProps = {\n cellSizePixels: {value: 100, min: 1},\n cellMarginPixels: {value: 2, min: 0, max: 5},\n\n colorDomain: null,\n colorRange: defaultColorRange\n};\n\n/** All properties supported by ScreenGridCellLayer. */\nexport type ScreenGridCellLayerProps = _ScreenGridCellLayerProps &\n LayerProps;\n\n/** Proprties added by ScreenGridCellLayer. */\nexport type _ScreenGridCellLayerProps = _ScreenGridLayerProps & {\n maxTexture: Texture2D;\n};\n\nexport default class ScreenGridCellLayer extends Layer<\n ExtraPropsT & Required<_ScreenGridCellLayerProps>\n> {\n static layerName = 'ScreenGridCellLayer';\n static defaultProps = defaultProps;\n\n static isSupported(gl) {\n return hasFeatures(gl, [FEATURES.TEXTURE_FLOAT]);\n }\n\n state!: Layer['state'] & {\n model: Model;\n };\n getShaders() {\n return {vs, fs, modules: [picking]};\n }\n\n initializeState() {\n const {gl} = this.context;\n const attributeManager = this.getAttributeManager()!;\n attributeManager.addInstanced({\n // eslint-disable-next-line @typescript-eslint/unbound-method\n instancePositions: {size: 3, update: this.calculateInstancePositions},\n instanceCounts: {size: 4, noAlloc: true}\n });\n this.setState({\n model: this._getModel(gl)\n });\n }\n\n shouldUpdateState({changeFlags}) {\n // 'instanceCounts' buffer contetns change on viewport change.\n return changeFlags.somethingChanged;\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n\n const {oldProps, props, changeFlags} = params;\n\n const attributeManager = this.getAttributeManager()!;\n if (props.numInstances !== oldProps.numInstances) {\n attributeManager.invalidateAll();\n } else if (oldProps.cellSizePixels !== props.cellSizePixels) {\n attributeManager.invalidate('instancePositions');\n }\n\n this._updateUniforms(oldProps, props, changeFlags);\n }\n\n draw({uniforms}) {\n const {parameters, maxTexture} = this.props;\n const minColor = this.props.minColor || DEFAULT_MINCOLOR;\n const maxColor = this.props.maxColor || DEFAULT_MAXCOLOR;\n\n // If colorDomain not specified we use default domain [1, maxCount]\n // maxCount value will be sampled form maxTexture in vertex shader.\n const colorDomain = this.props.colorDomain || [1, 0];\n const {model} = this.state;\n model\n .setUniforms(uniforms)\n .setUniforms({\n minColor,\n maxColor,\n maxTexture,\n colorDomain\n })\n .draw({\n parameters: {\n depthTest: false,\n depthMask: false,\n ...parameters\n }\n });\n }\n\n calculateInstancePositions(attribute, {numInstances}) {\n const {width, height} = this.context.viewport;\n const {cellSizePixels} = this.props;\n const numCol = Math.ceil(width / cellSizePixels);\n\n const {value, size} = attribute;\n\n for (let i = 0; i < numInstances; i++) {\n const x = i % numCol;\n const y = Math.floor(i / numCol);\n value[i * size + 0] = ((x * cellSizePixels) / width) * 2 - 1;\n value[i * size + 1] = 1 - ((y * cellSizePixels) / height) * 2;\n value[i * size + 2] = 0;\n }\n }\n\n // Private Methods\n\n _getModel(gl: WebGLRenderingContext): Model {\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_FAN,\n attributes: {\n positions: new Float32Array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0])\n }\n }),\n isInstanced: true\n });\n }\n\n _shouldUseMinMax(): boolean {\n const {minColor, maxColor, colorDomain, colorRange} = this.props;\n if (minColor || maxColor) {\n log.deprecated('ScreenGridLayer props: minColor and maxColor', 'colorRange, colorDomain')();\n return true;\n }\n // minColor and maxColor not supplied, check if colorRange or colorDomain supplied.\n // NOTE: colorDomain and colorRange are experimental features, use them only when supplied.\n if (colorDomain || colorRange) {\n return false;\n }\n // None specified, use default minColor and maxColor\n return true;\n }\n\n _updateUniforms(oldProps, props, changeFlags): void {\n const {model} = this.state;\n if (COLOR_PROPS.some(key => oldProps[key] !== props[key])) {\n model.setUniforms({shouldUseMinMax: this._shouldUseMinMax()});\n }\n\n if (oldProps.colorRange !== props.colorRange) {\n model.setUniforms({colorRange: colorRangeToFlatArray(props.colorRange)});\n }\n\n if (\n oldProps.cellMarginPixels !== props.cellMarginPixels ||\n oldProps.cellSizePixels !== props.cellSizePixels ||\n changeFlags.viewportChanged\n ) {\n const {width, height} = this.context.viewport;\n const {cellSizePixels, cellMarginPixels} = this.props;\n const margin = cellSizePixels > cellMarginPixels ? cellMarginPixels : 0;\n\n const cellScale = new Float32Array([\n ((cellSizePixels - margin) / width) * 2,\n (-(cellSizePixels - margin) / height) * 2,\n 1\n ]);\n model.setUniforms({cellScale});\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME screen-grid-layer-vertex-shader\n#define RANGE_COUNT 6\n\nattribute vec3 positions;\nattribute vec3 instancePositions;\nattribute vec4 instanceCounts;\nattribute vec3 instancePickingColors;\n\nuniform float opacity;\nuniform vec3 cellScale;\nuniform vec4 minColor;\nuniform vec4 maxColor;\nuniform vec4 colorRange[RANGE_COUNT];\nuniform vec2 colorDomain;\nuniform bool shouldUseMinMax;\nuniform sampler2D maxTexture;\n\nvarying vec4 vColor;\nvarying float vSampleCount;\n\nvec4 quantizeScale(vec2 domain, vec4 range[RANGE_COUNT], float value) {\n vec4 outColor = vec4(0., 0., 0., 0.);\n if (value >= domain.x && value <= domain.y) {\n float domainRange = domain.y - domain.x;\n if (domainRange <= 0.) {\n outColor = colorRange[0];\n } else {\n float rangeCount = float(RANGE_COUNT);\n float rangeStep = domainRange / rangeCount;\n float idx = floor((value - domain.x) / rangeStep);\n idx = clamp(idx, 0., rangeCount - 1.);\n int intIdx = int(idx);\n outColor = colorRange[intIdx];\n }\n }\n outColor = outColor / 255.;\n return outColor;\n}\n\nvoid main(void) {\n vSampleCount = instanceCounts.a;\n\n float weight = instanceCounts.r;\n float maxWeight = texture2D(maxTexture, vec2(0.5)).r;\n\n float step = weight / maxWeight;\n vec4 minMaxColor = mix(minColor, maxColor, step) / 255.;\n\n vec2 domain = colorDomain;\n float domainMaxValid = float(colorDomain.y != 0.);\n domain.y = mix(maxWeight, colorDomain.y, domainMaxValid);\n vec4 rangeColor = quantizeScale(domain, colorRange, weight);\n\n float rangeMinMax = float(shouldUseMinMax);\n vec4 color = mix(rangeColor, minMaxColor, rangeMinMax);\n vColor = vec4(color.rgb, color.a * opacity);\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n\n gl_Position = vec4(instancePositions + positions * cellScale, 1.);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* fragment shader for the grid-layer */\nexport default `\\\n#define SHADER_NAME screen-grid-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying float vSampleCount;\n\nvoid main(void) {\n if (vSampleCount <= 0.0) {\n discard;\n }\n gl_FragColor = vColor;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2019 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport function filterProps(props, filterKeys) {\n const filteredProps = {};\n for (const key in props) {\n if (!filterKeys.includes(key)) {\n filteredProps[key] = props[key];\n }\n }\n return filteredProps;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n CompositeLayer,\n AttributeManager,\n _compareProps as compareProps,\n UpdateParameters,\n CompositeLayerProps\n} from '@deck.gl/core';\nimport {cssToDeviceRatio} from '@luma.gl/core';\nimport {filterProps} from './utils/prop-utils';\n\nexport type AggregationLayerProps = CompositeLayerProps;\n\nexport default abstract class AggregationLayer<\n ExtraPropsT = {}\n> extends CompositeLayer {\n static layerName = 'AggregationLayer';\n\n state!: CompositeLayer['state'] & {\n ignoreProps?: Record;\n dimensions?: any;\n };\n\n initializeAggregationLayer(dimensions: any) {\n super.initializeState(this.context);\n\n this.setState({\n // Layer props , when changed doesn't require updating aggregation\n ignoreProps: filterProps((this.constructor as any)._propTypes, dimensions.data.props),\n dimensions\n });\n }\n\n updateState(opts: UpdateParameters) {\n super.updateState(opts);\n const {changeFlags} = opts;\n if (changeFlags.extensionsChanged) {\n const shaders = this.getShaders({});\n if (shaders && shaders.defines) {\n shaders.defines.NON_INSTANCED_MODEL = 1;\n }\n this.updateShaders(shaders);\n }\n\n // Explictly call to update attributes as 'CompositeLayer' doesn't call this\n this._updateAttributes();\n }\n\n updateAttributes(changedAttributes) {\n // Super classes, can refer to state.changedAttributes to determine what\n // attributes changed\n this.setState({changedAttributes});\n }\n\n getAttributes() {\n return this.getAttributeManager()!.getShaderAttributes();\n }\n\n getModuleSettings() {\n // For regular layer draw this happens during draw cycle (_drawLayersInViewport) not during update cycle\n // For aggregation layers this is called during updateState to update aggregation data\n // NOTE: it is similar to LayerPass._getModuleParameters() but doesn't inlcude `effects` it is not needed for aggregation\n const {viewport, mousePosition, gl} = this.context;\n const moduleSettings = Object.assign(Object.create(this.props), {\n viewport,\n mousePosition,\n pickingActive: 0,\n devicePixelRatio: cssToDeviceRatio(gl)\n });\n return moduleSettings;\n }\n\n updateShaders(shaders) {\n // Default implemention is empty, subclasses can update their Model objects if needed\n }\n\n /**\n * Checks if aggregation is dirty\n * @param {Object} updateOpts - object {props, oldProps, changeFlags}\n * @param {Object} params - object {dimension, compareAll}\n * @param {Object} params.dimension - {props, accessors} array of props and/or accessors\n * @param {Boolean} params.compareAll - when `true` it will include non layer props for comparision\n * @returns {Boolean} - returns true if dimensions' prop or accessor is changed\n **/\n isAggregationDirty(\n updateOpts,\n params: {compareAll?: boolean; dimension?: any} = {}\n ): string | boolean {\n const {props, oldProps, changeFlags} = updateOpts;\n const {compareAll = false, dimension} = params;\n const {ignoreProps} = this.state;\n const {props: dataProps, accessors = []} = dimension;\n const {updateTriggersChanged} = changeFlags;\n if (changeFlags.dataChanged) {\n return true;\n }\n if (updateTriggersChanged) {\n if (updateTriggersChanged.all) {\n return true;\n }\n for (const accessor of accessors) {\n if (updateTriggersChanged[accessor]) {\n return true;\n }\n }\n }\n if (compareAll) {\n if (changeFlags.extensionsChanged) {\n return true;\n }\n // Compare non layer props too (like extension props)\n // ignoreprops refers to all Layer props other than aggregation props that need to be comapred\n return compareProps({\n oldProps,\n newProps: props,\n ignoreProps,\n propTypes: (this.constructor as any)._propTypes\n });\n }\n // Compare props of the dimension\n for (const name of dataProps) {\n if (props[name] !== oldProps[name]) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Checks if an attribute is changed\n * @param {String} name - name of the attribute\n * @returns {Boolean} - `true` if attribute `name` is changed, `false` otherwise,\n * If `name` is not passed or `undefiend`, `true` if any attribute is changed, `false` otherwise\n **/\n isAttributeChanged(name?: string) {\n const {changedAttributes} = this.state;\n if (!name) {\n // if name not specified return true if any attribute is changed\n return !isObjectEmpty(changedAttributes);\n }\n return changedAttributes && changedAttributes[name] !== undefined;\n }\n\n // Private\n\n // override Composite layer private method to create AttributeManager instance\n _getAttributeManager() {\n return new AttributeManager(this.context.gl, {\n id: this.props.id,\n stats: this.context.stats\n });\n }\n}\n\n// Helper methods\n\n// Returns true if given object is empty, false otherwise.\nfunction isObjectEmpty(obj) {\n let isEmpty = true;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const key in obj) {\n isEmpty = false;\n break;\n }\n return isEmpty;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {log} from '@deck.gl/core';\n\n// a scale function wrapper just like d3-scales\nexport function getScale(domain, range, scaleFunction) {\n const scale = scaleFunction;\n scale.domain = () => domain;\n scale.range = () => range;\n\n return scale;\n}\n\n// Quantize scale is similar to linear scales,\n// except it uses a discrete rather than continuous range\n// return a quantize scale function\nexport function getQuantizeScale(domain, range) {\n const scaleFunction = value => quantizeScale(domain, range, value);\n\n return getScale(domain, range, scaleFunction);\n}\n\n// return a linear scale function\nexport function getLinearScale(domain, range) {\n const scaleFunction = value => linearScale(domain, range, value);\n\n return getScale(domain, range, scaleFunction);\n}\n\nexport function getQuantileScale(domain, range) {\n // calculate threshold\n const sortedDomain = domain.sort(ascending);\n let i = 0;\n const n = Math.max(1, range.length);\n const thresholds = new Array(n - 1);\n while (++i < n) {\n thresholds[i - 1] = threshold(sortedDomain, i / n);\n }\n\n const scaleFunction = value => thresholdsScale(thresholds, range, value);\n scaleFunction.thresholds = () => thresholds;\n\n return getScale(domain, range, scaleFunction);\n}\n\nfunction ascending(a, b) {\n return a - b;\n}\n\nfunction threshold(domain, fraction) {\n const domainLength = domain.length;\n if (fraction <= 0 || domainLength < 2) {\n return domain[0];\n }\n if (fraction >= 1) {\n return domain[domainLength - 1];\n }\n\n const domainFraction = (domainLength - 1) * fraction;\n const lowIndex = Math.floor(domainFraction);\n const low = domain[lowIndex];\n const high = domain[lowIndex + 1];\n return low + (high - low) * (domainFraction - lowIndex);\n}\n\nfunction bisectRight(a, x) {\n let lo = 0;\n let hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (ascending(a[mid], x) > 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return lo;\n}\n\n// return a quantize scale function\nfunction thresholdsScale(thresholds, range, value) {\n return range[bisectRight(thresholds, value)];\n}\n\n// ordinal Scale\nfunction ordinalScale(domain, domainMap, range, value) {\n const key = `${value}`;\n let d = domainMap.get(key);\n if (d === undefined) {\n // update the domain\n d = domain.push(value);\n domainMap.set(key, d);\n }\n return range[(d - 1) % range.length];\n}\n\nexport function getOrdinalScale(domain, range) {\n const domainMap = new Map();\n const uniqueDomain = [];\n for (const d of domain) {\n const key = `${d}`;\n if (!domainMap.has(key)) {\n domainMap.set(key, uniqueDomain.push(d));\n }\n }\n\n const scaleFunction = value => ordinalScale(uniqueDomain, domainMap, range, value);\n\n return getScale(domain, range, scaleFunction);\n}\n\n// Quantize scale is similar to linear scales,\n// except it uses a discrete rather than continuous range\nexport function quantizeScale(domain, range, value) {\n const domainRange = domain[1] - domain[0];\n if (domainRange <= 0) {\n log.warn('quantizeScale: invalid domain, returning range[0]')();\n return range[0];\n }\n const step = domainRange / range.length;\n const idx = Math.floor((value - domain[0]) / step);\n const clampIdx = Math.max(Math.min(idx, range.length - 1), 0);\n\n return range[clampIdx];\n}\n\n// Linear scale maps continuous domain to continuous range\nexport function linearScale(domain, range, value) {\n return ((value - domain[0]) / (domain[1] - domain[0])) * (range[1] - range[0]) + range[0];\n}\n\n// get scale domains\nfunction notNullOrUndefined(d) {\n return d !== undefined && d !== null;\n}\n\nexport function unique(values) {\n const results = [];\n values.forEach(v => {\n if (!results.includes(v) && notNullOrUndefined(v)) {\n results.push(v);\n }\n });\n\n return results;\n}\n\nfunction getTruthyValues(data, valueAccessor) {\n const values = typeof valueAccessor === 'function' ? data.map(valueAccessor) : data;\n return values.filter(notNullOrUndefined);\n}\n\nexport function getLinearDomain(data, valueAccessor) {\n const sorted = getTruthyValues(data, valueAccessor).sort();\n return sorted.length ? [sorted[0], sorted[sorted.length - 1]] : [0, 0];\n}\n\nexport function getQuantileDomain(data, valueAccessor) {\n return getTruthyValues(data, valueAccessor);\n}\n\nexport function getOrdinalDomain(data, valueAccessor) {\n return unique(getTruthyValues(data, valueAccessor));\n}\n\nexport function getScaleDomain(scaleType, data, valueAccessor) {\n switch (scaleType) {\n case 'quantize':\n case 'linear':\n return getLinearDomain(data, valueAccessor);\n\n case 'quantile':\n return getQuantileDomain(data, valueAccessor);\n\n case 'ordinal':\n return getOrdinalDomain(data, valueAccessor);\n\n default:\n return getLinearDomain(data, valueAccessor);\n }\n}\n\nexport function clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n\nexport function getScaleFunctionByScaleType(scaleType) {\n switch (scaleType) {\n case 'quantize':\n return getQuantizeScale;\n case 'linear':\n return getLinearScale;\n case 'quantile':\n return getQuantileScale;\n case 'ordinal':\n return getOrdinalScale;\n\n default:\n return getQuantizeScale;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// getValue takes an array of points returns a value to sort the bins on.\n// by default it returns the number of points\n// this is where to pass in a function to color the bins by\n// avg/mean/max of specific value of the point\nconst defaultGetValue = points => points.length;\n\nimport {clamp, getQuantileDomain, getOrdinalDomain} from './scale-utils';\n\nconst MAX_32_BIT_FLOAT = 3.402823466e38;\n\n// access array of points in each bin\nconst defaultGetPoints = bin => bin.points;\n// access index of each bin\nconst defaultGetIndex = bin => bin.index;\n\n// d3-scending\nconst ascending = (a, b) => (a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN);\n\nconst defaultProps = {\n getValue: defaultGetValue,\n getPoints: defaultGetPoints,\n getIndex: defaultGetIndex,\n filterData: null\n};\n\nexport type AggregatedBin = {\n i: number;\n value: any;\n counts: number;\n};\n\nexport default class BinSorter {\n maxCount!: number;\n maxValue!: number;\n minValue!: number;\n totalCount!: number;\n\n aggregatedBins: AggregatedBin[];\n sortedBins!: AggregatedBin[];\n binMap: Record;\n\n constructor(bins = [], props: Partial = defaultProps) {\n this.aggregatedBins = this.getAggregatedBins(bins, props);\n this._updateMinMaxValues();\n this.binMap = this.getBinMap();\n }\n\n /**\n * Get an array of object with aggregated values and index of bins\n * Array object will be sorted by value optionally.\n * @param {Array} bins\n * @param {Function} getValue\n * @return {Array} array of values and index lookup\n */\n getAggregatedBins(bins, props): AggregatedBin[] {\n const {\n getValue = defaultGetValue,\n getPoints = defaultGetPoints,\n getIndex = defaultGetIndex,\n filterData\n } = props;\n\n const hasFilter = typeof filterData === 'function';\n const binCount = bins.length;\n const aggregatedBins: AggregatedBin[] = [];\n let index = 0;\n\n for (let binIndex = 0; binIndex < binCount; binIndex++) {\n const bin = bins[binIndex];\n const points = getPoints(bin);\n const i = getIndex(bin);\n\n const filteredPoints = hasFilter ? points.filter(filterData) : points;\n\n bin.filteredPoints = hasFilter ? filteredPoints : null;\n\n const value = filteredPoints.length ? getValue(filteredPoints) : null;\n\n if (value !== null && value !== undefined) {\n // filter bins if value is null or undefined\n aggregatedBins[index] = {\n i: Number.isFinite(i) ? i : binIndex,\n value,\n counts: filteredPoints.length\n };\n index++;\n }\n }\n return aggregatedBins;\n }\n\n _percentileToIndex(percentileRange): [number, number] {\n const len = this.sortedBins.length;\n if (len < 2) {\n return [0, 0];\n }\n\n const [lower, upper] = percentileRange.map(n => clamp(n, 0, 100));\n\n const lowerIdx = Math.ceil((lower / 100) * (len - 1));\n const upperIdx = Math.floor((upper / 100) * (len - 1));\n\n return [lowerIdx, upperIdx];\n }\n\n /**\n * Get a mapping from cell/hexagon index to sorted bin\n * This is used to retrieve bin value for color calculation\n * @return {Object} bin index to aggregatedBins\n */\n getBinMap(): Record {\n const binMap = {};\n for (const bin of this.aggregatedBins) {\n binMap[bin.i] = bin;\n }\n return binMap;\n }\n\n // Private\n\n /**\n * Get ths max count of all bins\n */\n _updateMinMaxValues(): void {\n let maxCount = 0;\n let maxValue = 0;\n let minValue = MAX_32_BIT_FLOAT;\n let totalCount = 0;\n for (const x of this.aggregatedBins) {\n maxCount = maxCount > x.counts ? maxCount : x.counts;\n maxValue = maxValue > x.value ? maxValue : x.value;\n minValue = minValue < x.value ? minValue : x.value;\n totalCount += x.counts;\n }\n this.maxCount = maxCount;\n this.maxValue = maxValue;\n this.minValue = minValue;\n this.totalCount = totalCount;\n }\n\n /**\n * Get range of values of all bins\n * @param {Number[]} range\n * @param {Number} range[0] - lower bound\n * @param {Number} range[1] - upper bound\n * @return {Array} array of new value range\n */\n getValueRange(percentileRange: [number, number]): [number, number] {\n if (!this.sortedBins) {\n this.sortedBins = this.aggregatedBins.sort((a, b) => ascending(a.value, b.value));\n }\n if (!this.sortedBins.length) {\n // @ts-expect-error\n return [];\n }\n let lowerIdx = 0;\n let upperIdx = this.sortedBins.length - 1;\n\n if (Array.isArray(percentileRange)) {\n const idxRange = this._percentileToIndex(percentileRange);\n lowerIdx = idxRange[0];\n upperIdx = idxRange[1];\n }\n\n return [this.sortedBins[lowerIdx].value, this.sortedBins[upperIdx].value];\n }\n\n getValueDomainByScale(scale: string, [lower = 0, upper = 100] = []) {\n if (!this.sortedBins) {\n this.sortedBins = this.aggregatedBins.sort((a, b) => ascending(a.value, b.value));\n }\n if (!this.sortedBins.length) {\n return [];\n }\n const indexEdge = this._percentileToIndex([lower, upper]);\n\n return this._getScaleDomain(scale, indexEdge);\n }\n\n _getScaleDomain(scaleType: string, [lowerIdx, upperIdx]: [number, number]): [number, number] {\n const bins = this.sortedBins;\n\n switch (scaleType) {\n case 'quantize':\n case 'linear':\n return [bins[lowerIdx].value, bins[upperIdx].value];\n\n case 'quantile':\n return getQuantileDomain(bins.slice(lowerIdx, upperIdx + 1), d => d.value);\n\n case 'ordinal':\n return getOrdinalDomain(bins, d => d.value) as [number, number];\n\n default:\n return [bins[lowerIdx].value, bins[upperIdx].value];\n }\n }\n}\n","import {log, COORDINATE_SYSTEM} from '@deck.gl/core';\nconst R_EARTH = 6378000;\n\nfunction toFinite(n) {\n return Number.isFinite(n) ? n : 0;\n}\n\n// Parse input data to build positions, wights and bounding box.\n/* eslint-disable max-statements */\nexport function getBoundingBox(attributes, vertexCount) {\n // TODO - value might not exist (e.g. attribute transition)\n const positions = attributes.positions.value;\n\n let yMin = Infinity;\n let yMax = -Infinity;\n let xMin = Infinity;\n let xMax = -Infinity;\n let y;\n let x;\n\n for (let i = 0; i < vertexCount; i++) {\n x = positions[i * 3];\n y = positions[i * 3 + 1];\n yMin = y < yMin ? y : yMin;\n yMax = y > yMax ? y : yMax;\n xMin = x < xMin ? x : xMin;\n xMax = x > xMax ? x : xMax;\n }\n\n const boundingBox = {\n xMin: toFinite(xMin),\n xMax: toFinite(xMax),\n yMin: toFinite(yMin),\n yMax: toFinite(yMax)\n };\n\n return boundingBox;\n}\n/* eslint-enable max-statements */\n\n// Returns XY translation for positions to peform aggregation in +ve sapce\nfunction getTranslation(boundingBox, gridOffset, coordinateSystem, viewport) {\n const {width, height} = viewport;\n\n // Origin to define grid\n // DEFAULT coordinate system is treated as LNGLAT\n const worldOrigin =\n coordinateSystem === COORDINATE_SYSTEM.CARTESIAN ? [-width / 2, -height / 2] : [-180, -90];\n\n // Other coordinate systems not supported/verified yet\n log.assert(\n coordinateSystem === COORDINATE_SYSTEM.CARTESIAN ||\n coordinateSystem === COORDINATE_SYSTEM.LNGLAT ||\n coordinateSystem === COORDINATE_SYSTEM.DEFAULT\n );\n\n const {xMin, yMin} = boundingBox;\n return [\n // Align origin to match grid cell boundaries in CPU and GPU aggregations\n -1 * (alignToCell(xMin - worldOrigin[0], gridOffset.xOffset) + worldOrigin[0]),\n -1 * (alignToCell(yMin - worldOrigin[1], gridOffset.yOffset) + worldOrigin[1])\n ];\n}\n\n// Aligns `inValue` to given `cellSize`\nexport function alignToCell(inValue, cellSize) {\n const sign = inValue < 0 ? -1 : 1;\n\n let value = sign < 0 ? Math.abs(inValue) + cellSize : Math.abs(inValue);\n\n value = Math.floor(value / cellSize) * cellSize;\n\n return value * sign;\n}\n\n/**\n * Based on geometric center of sample points, calculate cellSize in lng/lat (degree) space\n * @param {object} boundingBox - {xMin, yMin, xMax, yMax} contains bounding box of data\n * @param {number} cellSize - grid cell size in meters\n * @param {boolean, optional} converToDegrees - when true offsets are converted from meters to lng/lat (degree) space\n * @returns {xOffset, yOffset} - cellSize size\n */\n\nexport function getGridOffset(boundingBox, cellSize, convertToMeters = true) {\n if (!convertToMeters) {\n return {xOffset: cellSize, yOffset: cellSize};\n }\n\n const {yMin, yMax} = boundingBox;\n const centerLat = (yMin + yMax) / 2;\n\n return calculateGridLatLonOffset(cellSize, centerLat);\n}\n\nexport function getGridParams(boundingBox, cellSize, viewport, coordinateSystem) {\n const gridOffset = getGridOffset(\n boundingBox,\n cellSize,\n coordinateSystem !== COORDINATE_SYSTEM.CARTESIAN\n );\n\n const translation = getTranslation(boundingBox, gridOffset, coordinateSystem, viewport);\n\n const {xMin, yMin, xMax, yMax} = boundingBox;\n\n const width = xMax - xMin + gridOffset.xOffset;\n const height = yMax - yMin + gridOffset.yOffset;\n\n const numCol = Math.ceil(width / gridOffset.xOffset);\n const numRow = Math.ceil(height / gridOffset.yOffset);\n return {gridOffset, translation, width, height, numCol, numRow};\n}\n\n/**\n * calculate grid layer cell size in lat lon based on world unit size\n * and current latitude\n * @param {number} cellSize\n * @param {number} latitude\n * @returns {object} - lat delta and lon delta\n */\nfunction calculateGridLatLonOffset(cellSize, latitude) {\n const yOffset = calculateLatOffset(cellSize);\n const xOffset = calculateLonOffset(latitude, cellSize);\n return {yOffset, xOffset};\n}\n\n/**\n * with a given x-km change, calculate the increment of latitude\n * based on stackoverflow http://stackoverflow.com/questions/7477003\n * @param {number} dy - change in km\n * @return {number} - increment in latitude\n */\nfunction calculateLatOffset(dy) {\n return (dy / R_EARTH) * (180 / Math.PI);\n}\n\n/**\n * with a given x-km change, and current latitude\n * calculate the increment of longitude\n * based on stackoverflow http://stackoverflow.com/questions/7477003\n * @param {number} lat - latitude of current location (based on city)\n * @param {number} dx - change in km\n * @return {number} - increment in longitude\n */\nfunction calculateLonOffset(lat, dx) {\n return ((dx / R_EARTH) * (180 / Math.PI)) / Math.cos((lat * Math.PI) / 180);\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {createIterable} from '@deck.gl/core';\nimport {getGridOffset} from '../utils/grid-aggregation-utils';\n\n/**\n * Calculate density grid from an array of points\n * @param {Object} props - object containing :\n * @param {Iterable} [props.data] - data objects to be aggregated\n * @param {Integer} [props.cellSize] - size of the grid cell\n *\n * @param {Object} aggregationParams - object containing :\n * @param {Object} gridOffset - {xOffset, yOffset} cell size in meters\n * @param {Integer} width - width of the grid\n * @param {Integer} height - height of the grid\n * @param {Boolean} projectPoints - `true` if doing screen space projection, `false` otherwise\n * @param {Array} attributes - attributes array containing position values\n * @param {Viewport} viewport - viewport to be used for projection\n * @param {Array} posOffset - [xOffset, yOffset] offset to be applied to positions to get cell index\n * @param {Object} boundingBox - {xMin, yMin, xMax, yMax} bounding box of input data\n *\n * @returns {object} - grid data, cell dimension\n */\nexport function pointToDensityGridDataCPU(props, aggregationParams) {\n const hashInfo = pointsToGridHashing(props, aggregationParams);\n const result = getGridLayerDataFromGridHash(hashInfo);\n\n return {\n gridHash: hashInfo.gridHash,\n gridOffset: hashInfo.gridOffset,\n data: result\n };\n}\n\n/**\n * Project points into each cell, return a hash table of cells\n * @param {Iterable} points\n * @param {number} cellSize - unit size in meters\n * @param {function} getPosition - position accessor\n * @returns {object} - grid hash and cell dimension\n */\n/* eslint-disable max-statements, complexity */\nfunction pointsToGridHashing(props, aggregationParams) {\n const {data = [], cellSize} = props;\n const {attributes, viewport, projectPoints, numInstances} = aggregationParams;\n const positions = attributes.positions.value;\n const {size} = attributes.positions.getAccessor();\n const boundingBox =\n aggregationParams.boundingBox || getPositionBoundingBox(attributes.positions, numInstances);\n const offsets = aggregationParams.posOffset || [180, 90];\n const gridOffset = aggregationParams.gridOffset || getGridOffset(boundingBox, cellSize);\n\n if (gridOffset.xOffset <= 0 || gridOffset.yOffset <= 0) {\n return {gridHash: {}, gridOffset};\n }\n\n const {width, height} = viewport;\n const numCol = Math.ceil(width / gridOffset.xOffset);\n const numRow = Math.ceil(height / gridOffset.yOffset);\n\n // calculate count per cell\n const gridHash = {};\n\n const {iterable, objectInfo} = createIterable(data);\n const position = new Array(3);\n for (const pt of iterable) {\n objectInfo.index++;\n position[0] = positions[objectInfo.index * size];\n position[1] = positions[objectInfo.index * size + 1];\n position[2] = size >= 3 ? positions[objectInfo.index * size + 2] : 0;\n const [x, y] = projectPoints ? viewport.project(position) : position;\n if (Number.isFinite(x) && Number.isFinite(y)) {\n const yIndex = Math.floor((y + offsets[1]) / gridOffset.yOffset);\n const xIndex = Math.floor((x + offsets[0]) / gridOffset.xOffset);\n if (\n !projectPoints ||\n // when doing screen space agggregation (projectPoints = true), filter points outside of the viewport range.\n (xIndex >= 0 && xIndex < numCol && yIndex >= 0 && yIndex < numRow)\n ) {\n const key = `${yIndex}-${xIndex}`;\n\n gridHash[key] = gridHash[key] || {count: 0, points: [], lonIdx: xIndex, latIdx: yIndex};\n gridHash[key].count += 1;\n gridHash[key].points.push({\n source: pt,\n index: objectInfo.index\n });\n }\n }\n }\n\n return {gridHash, gridOffset, offsets: [offsets[0] * -1, offsets[1] * -1]};\n}\n/* eslint-enable max-statements, complexity */\n\nfunction getGridLayerDataFromGridHash({gridHash, gridOffset, offsets}) {\n const data = new Array(Object.keys(gridHash).length);\n let i = 0;\n for (const key in gridHash) {\n const idxs = key.split('-');\n const latIdx = parseInt(idxs[0], 10);\n const lonIdx = parseInt(idxs[1], 10);\n const index = i++;\n\n data[index] = {\n index,\n position: [\n offsets[0] + gridOffset.xOffset * lonIdx,\n offsets[1] + gridOffset.yOffset * latIdx\n ],\n ...gridHash[key]\n };\n }\n return data;\n}\n\n// Calculate bounding box of position attribute\nfunction getPositionBoundingBox(positionAttribute, numInstance) {\n // TODO - value might not exist (e.g. attribute transition)\n const positions = positionAttribute.value;\n const {size} = positionAttribute.getAccessor();\n\n let yMin = Infinity;\n let yMax = -Infinity;\n let xMin = Infinity;\n let xMax = -Infinity;\n let y;\n let x;\n\n for (let i = 0; i < numInstance; i++) {\n x = positions[i * size];\n y = positions[i * size + 1];\n if (Number.isFinite(x) && Number.isFinite(y)) {\n yMin = y < yMin ? y : yMin;\n yMax = y > yMax ? y : yMax;\n xMin = x < xMin ? x : xMin;\n xMax = x > xMax ? x : xMax;\n }\n }\n\n return {xMin, xMax, yMin, yMax};\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport AggregationLayer, {AggregationLayerProps} from './aggregation-layer';\nimport GPUGridAggregator from './utils/gpu-grid-aggregation/gpu-grid-aggregator';\nimport {Buffer} from '@luma.gl/core';\nimport {LayerContext, log, UpdateParameters} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport BinSorter from './utils/bin-sorter';\nimport {pointToDensityGridDataCPU} from './cpu-grid-layer/grid-aggregator';\n\nexport type GridAggregationLayerProps = AggregationLayerProps;\n\nexport default abstract class GridAggregationLayer<\n ExtraPropsT = {}\n> extends AggregationLayer {\n static layerName = 'GridAggregationLayer';\n\n state!: AggregationLayer['state'] & {\n aggregationDataDirty?: any;\n aggregationWeightsDirty?: any;\n gpuAggregation?: any;\n getValue?: () => any;\n sortedBins?: BinSorter;\n };\n\n initializeAggregationLayer({dimensions}) {\n const {gl} = this.context;\n super.initializeAggregationLayer(dimensions);\n this.setState({\n // CPU aggregation results\n layerData: {},\n gpuGridAggregator: new GPUGridAggregator(gl, {id: `${this.id}-gpu-aggregator`}),\n cpuGridAggregator: pointToDensityGridDataCPU\n });\n }\n\n updateState(opts: UpdateParameters) {\n // get current attributes\n super.updateState(opts);\n\n this.updateAggregationState(opts);\n\n const {aggregationDataDirty, aggregationWeightsDirty, gpuAggregation} = this.state;\n if (this.getNumInstances() <= 0) {\n return;\n }\n let aggregationDirty = false;\n // CPU aggregation is two steps\n // 1. Create bins (based on cellSize and position) 2. Aggregate weights for each bin\n // For GPU aggregation both above steps are combined into one step\n\n // step-1\n if (aggregationDataDirty || (gpuAggregation && aggregationWeightsDirty)) {\n this._updateAggregation(opts);\n aggregationDirty = true;\n }\n // step-2 (Applicalbe for CPU aggregation only)\n if (!gpuAggregation && (aggregationDataDirty || aggregationWeightsDirty)) {\n this._updateWeightBins();\n this._uploadAggregationResults();\n aggregationDirty = true;\n }\n\n this.setState({aggregationDirty});\n }\n\n finalizeState(context: LayerContext) {\n const {count} = this.state.weights;\n if (count && count.aggregationBuffer) {\n count.aggregationBuffer.delete();\n }\n this.state.gpuGridAggregator?.delete();\n super.finalizeState(context);\n }\n\n updateShaders(shaders: any): void {\n if (this.state.gpuAggregation) {\n this.state.gpuGridAggregator.updateShaders(shaders);\n }\n }\n\n // Methods that can be overriden by subclasses for customizations\n\n updateAggregationState(opts) {\n // Sublayers should implement this method.\n log.assert(false);\n }\n\n allocateResources(numRow, numCol) {\n if (this.state.numRow !== numRow || this.state.numCol !== numCol) {\n const dataBytes = numCol * numRow * 4 * 4;\n const gl = this.context.gl;\n const {weights} = this.state;\n for (const name in weights) {\n const weight = weights[name];\n if (weight.aggregationBuffer) {\n weight.aggregationBuffer.delete();\n }\n weight.aggregationBuffer = new Buffer(gl, {\n byteLength: dataBytes,\n accessor: {\n size: 4,\n type: GL.FLOAT,\n divisor: 1\n }\n });\n }\n }\n }\n\n updateResults({aggregationData, maxMinData, maxData, minData}) {\n const {count} = this.state.weights;\n if (count) {\n count.aggregationData = aggregationData;\n count.maxMinData = maxMinData;\n count.maxData = maxData;\n count.minData = minData;\n }\n }\n\n // Private\n\n _updateAggregation(opts) {\n const {\n cpuGridAggregator,\n gpuGridAggregator,\n gridOffset,\n posOffset,\n translation = [0, 0],\n scaling = [0, 0, 0],\n boundingBox,\n projectPoints,\n gpuAggregation,\n numCol,\n numRow\n } = this.state;\n const {props} = opts;\n const {viewport} = this.context;\n const attributes = this.getAttributes();\n const vertexCount = this.getNumInstances();\n\n if (!gpuAggregation) {\n const result = cpuGridAggregator(props, {\n gridOffset,\n projectPoints,\n attributes,\n viewport,\n posOffset,\n boundingBox\n });\n this.setState({\n layerData: result\n });\n } else {\n const {weights} = this.state;\n gpuGridAggregator.run({\n weights,\n cellSize: [gridOffset.xOffset, gridOffset.yOffset],\n numCol,\n numRow,\n translation,\n scaling,\n vertexCount,\n projectPoints,\n attributes,\n moduleSettings: this.getModuleSettings()\n });\n }\n }\n\n _updateWeightBins() {\n const {getValue} = this.state;\n\n const sortedBins = new BinSorter(this.state.layerData.data || [], {getValue});\n this.setState({sortedBins});\n }\n\n _uploadAggregationResults(): void {\n const {numCol, numRow} = this.state;\n const {data} = this.state.layerData;\n const {aggregatedBins, minValue, maxValue, totalCount} = this.state.sortedBins!;\n\n const ELEMENTCOUNT = 4;\n const aggregationSize = numCol * numRow * ELEMENTCOUNT;\n const aggregationData = new Float32Array(aggregationSize).fill(0);\n for (const bin of aggregatedBins) {\n const {lonIdx, latIdx} = data[bin.i];\n const {value, counts} = bin;\n const cellIndex = (lonIdx + latIdx * numCol) * ELEMENTCOUNT;\n aggregationData[cellIndex] = value;\n aggregationData[cellIndex + ELEMENTCOUNT - 1] = counts;\n }\n const maxMinData = new Float32Array([maxValue, 0, 0, minValue]);\n const maxData = new Float32Array([maxValue, 0, 0, totalCount]);\n const minData = new Float32Array([minValue, 0, 0, totalCount]);\n this.updateResults({aggregationData, maxMinData, maxData, minData});\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Accessor,\n Color,\n GetPickingInfoParams,\n Layer,\n LayerContext,\n LayersList,\n log,\n PickingInfo,\n Position,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport type {Texture2D} from '@luma.gl/core';\nimport GPUGridAggregator from '../utils/gpu-grid-aggregation/gpu-grid-aggregator';\nimport {AGGREGATION_OPERATION, getValueFunc} from '../utils/aggregation-operation-utils';\nimport ScreenGridCellLayer from './screen-grid-cell-layer';\nimport GridAggregationLayer, {GridAggregationLayerProps} from '../grid-aggregation-layer';\nimport {getFloatTexture} from '../utils/resource-utils.js';\n\nconst defaultProps: DefaultProps = {\n ...ScreenGridCellLayer.defaultProps,\n getPosition: {type: 'accessor', value: d => d.position},\n getWeight: {type: 'accessor', value: 1},\n\n gpuAggregation: true,\n aggregation: 'SUM'\n};\n\nconst POSITION_ATTRIBUTE_NAME = 'positions';\nconst DIMENSIONS = {\n data: {\n props: ['cellSizePixels']\n },\n weights: {\n props: ['aggregation'],\n accessors: ['getWeight']\n }\n};\n\n/** All properties supported by ScreenGridLayer. */\nexport type ScreenGridLayerProps = _ScreenGridLayerProps &\n GridAggregationLayerProps;\n\n/** Properties added by ScreenGridLayer. */\nexport type _ScreenGridLayerProps = {\n /**\n * Unit width/height of the bins.\n * @default 100\n */\n cellSizePixels?: number;\n\n /**\n * Cell margin size in pixels.\n * @default 2\n */\n cellMarginPixels?: number;\n\n /**\n * Expressed as an rgba array, minimal color that could be rendered by a tile.\n * @default [0, 0, 0, 255]\n * @deprecated Deprecated in version 5.2.0, use `colorRange` and `colorDomain` instead.\n */\n minColor?: Color | null;\n\n /**\n * Expressed as an rgba array, maximal color that could be rendered by a tile.\n * @default [0, 255, 0, 255]\n * @deprecated Deprecated in version 5.2.0, use `colorRange` and `colorDomain` instead.\n */\n maxColor?: Color | null;\n\n /**\n * Color scale input domain. The color scale maps continues numeric domain into discrete color range.\n * @default [1, max(weight)]\n */\n colorDomain?: [number, number] | null;\n\n /**\n * Specified as an array of colors [color1, color2, ...].\n *\n * @default `6-class YlOrRd` - [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6)\n */\n colorRange?: Color[];\n\n /**\n * Method called to retrieve the position of each object.\n *\n * @default d => d.position\n */\n getPosition?: Accessor;\n\n /**\n * The weight of each object.\n *\n * @default 1\n */\n getWeight?: Accessor;\n\n /**\n * Perform aggregation is performed on GPU.\n *\n * NOTE: GPU Aggregation requires WebGL2 support by the browser.\n * When `gpuAggregation` is set to true and browser doesn't support WebGL2, aggregation falls back to CPU.\n *\n * @default true\n */\n gpuAggregation?: boolean;\n\n /**\n * Defines the type of aggregation operation\n *\n * V valid values are 'SUM', 'MEAN', 'MIN' and 'MAX'.\n *\n * @default 'SUM'\n */\n aggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n};\n\n/** Aggregates data into histogram bins and renders them as a grid. */\nexport default class ScreenGridLayer extends GridAggregationLayer<\n ExtraProps & Required<_ScreenGridLayerProps>\n> {\n static layerName = 'ScreenGridLayer';\n static defaultProps = defaultProps;\n\n state!: GridAggregationLayer['state'] & {\n supported: boolean;\n gpuGridAggregator?: any;\n gpuAggregation?: any;\n weights?: any;\n maxTexture?: Texture2D;\n };\n\n initializeState() {\n const {gl} = this.context;\n if (!ScreenGridCellLayer.isSupported(gl)) {\n // max aggregated value is sampled from a float texture\n this.setState({supported: false});\n log.error(`ScreenGridLayer: ${this.id} is not supported on this browser`)();\n return;\n }\n super.initializeAggregationLayer({\n dimensions: DIMENSIONS,\n // @ts-expect-error\n getCellSize: props => props.cellSizePixels // TODO\n });\n const weights = {\n count: {\n size: 1,\n operation: AGGREGATION_OPERATION.SUM,\n needMax: true,\n maxTexture: getFloatTexture(gl, {id: `${this.id}-max-texture`})\n }\n };\n this.setState({\n supported: true,\n projectPoints: true, // aggregation in screen space\n weights,\n subLayerData: {attributes: {}},\n maxTexture: weights.count.maxTexture,\n positionAttributeName: 'positions',\n posOffset: [0, 0],\n translation: [1, -1]\n });\n const attributeManager = this.getAttributeManager()!;\n attributeManager.add({\n [POSITION_ATTRIBUTE_NAME]: {\n size: 3,\n accessor: 'getPosition',\n type: GL.DOUBLE,\n fp64: this.use64bitPositions()\n },\n // this attribute is used in gpu aggregation path only\n count: {size: 3, accessor: 'getWeight'}\n });\n }\n\n shouldUpdateState({changeFlags}: UpdateParameters) {\n return this.state.supported && changeFlags.somethingChanged;\n }\n\n updateState(opts: UpdateParameters) {\n super.updateState(opts);\n }\n\n renderLayers(): LayersList | Layer {\n if (!this.state.supported) {\n return [];\n }\n const {maxTexture, numRow, numCol, weights} = this.state;\n const {updateTriggers} = this.props;\n const {aggregationBuffer} = weights.count;\n const CellLayerClass = this.getSubLayerClass('cells', ScreenGridCellLayer);\n\n return new CellLayerClass(\n this.props,\n this.getSubLayerProps({\n id: 'cell-layer',\n updateTriggers\n }),\n {\n data: {attributes: {instanceCounts: aggregationBuffer}},\n maxTexture,\n numInstances: numRow * numCol\n }\n );\n }\n\n finalizeState(context: LayerContext): void {\n super.finalizeState(context);\n\n const {aggregationBuffer, maxBuffer, maxTexture} = this.state;\n\n aggregationBuffer?.delete();\n maxBuffer?.delete();\n maxTexture?.delete();\n }\n\n getPickingInfo({info}: GetPickingInfoParams): PickingInfo {\n const {index} = info;\n if (index >= 0) {\n const {gpuGridAggregator, gpuAggregation, weights} = this.state;\n // Get count aggregation results\n const aggregationResults = gpuAggregation\n ? gpuGridAggregator.getData('count')\n : weights.count;\n\n // Each instance (one cell) is aggregated into single pixel,\n // Get current instance's aggregation details.\n info.object = GPUGridAggregator.getAggregationData({\n pixelIndex: index,\n ...aggregationResults\n });\n }\n\n return info;\n }\n\n // Aggregation Overrides\n\n updateResults({aggregationData, maxData}) {\n const {count} = this.state.weights;\n count.aggregationData = aggregationData;\n count.aggregationBuffer.setData({data: aggregationData});\n count.maxData = maxData;\n count.maxTexture.setImageData({data: maxData});\n }\n\n /* eslint-disable complexity, max-statements */\n updateAggregationState(opts) {\n const cellSize = opts.props.cellSizePixels;\n const cellSizeChanged = opts.oldProps.cellSizePixels !== cellSize;\n const {viewportChanged} = opts.changeFlags;\n let gpuAggregation = opts.props.gpuAggregation;\n if (this.state.gpuAggregation !== opts.props.gpuAggregation) {\n if (gpuAggregation && !GPUGridAggregator.isSupported(this.context.gl)) {\n log.warn('GPU Grid Aggregation not supported, falling back to CPU')();\n gpuAggregation = false;\n }\n }\n const gpuAggregationChanged = gpuAggregation !== this.state.gpuAggregation;\n this.setState({\n gpuAggregation\n });\n\n const positionsChanged = this.isAttributeChanged(POSITION_ATTRIBUTE_NAME);\n\n const {dimensions} = this.state;\n const {data, weights} = dimensions;\n const aggregationDataDirty =\n positionsChanged ||\n gpuAggregationChanged ||\n viewportChanged ||\n this.isAggregationDirty(opts, {\n compareAll: gpuAggregation, // check for all (including extentions props) when using gpu aggregation\n dimension: data\n });\n const aggregationWeightsDirty = this.isAggregationDirty(opts, {dimension: weights});\n\n this.setState({\n aggregationDataDirty,\n aggregationWeightsDirty\n });\n\n const {viewport} = this.context;\n\n if (viewportChanged || cellSizeChanged) {\n const {width, height} = viewport;\n const numCol = Math.ceil(width / cellSize);\n const numRow = Math.ceil(height / cellSize);\n this.allocateResources(numRow, numCol);\n this.setState({\n // transformation from clipspace to screen(pixel) space\n scaling: [width / 2, -height / 2, 1],\n\n gridOffset: {xOffset: cellSize, yOffset: cellSize},\n width,\n height,\n numCol,\n numRow\n });\n }\n\n if (aggregationWeightsDirty) {\n this._updateAccessors(opts);\n }\n if (aggregationDataDirty || aggregationWeightsDirty) {\n this._resetResults();\n }\n }\n /* eslint-enable complexity, max-statements */\n\n // Private\n\n _updateAccessors(opts) {\n const {getWeight, aggregation, data} = opts.props;\n const {count} = this.state.weights;\n if (count) {\n count.getWeight = getWeight;\n count.operation = AGGREGATION_OPERATION[aggregation];\n }\n this.setState({getValue: getValueFunc(aggregation, getWeight, {data})});\n }\n\n _resetResults() {\n const {count} = this.state.weights;\n if (count) {\n count.aggregationData = null;\n }\n }\n}\n","// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport BinSorter from './bin-sorter';\nimport {getScaleFunctionByScaleType} from './scale-utils';\nimport {getValueFunc, wrapGetValueFunc} from './aggregation-operation-utils';\n\nfunction nop() {}\n\nconst dimensionSteps = ['getBins', 'getDomain', 'getScaleFunc'];\nconst defaultDimensions = [\n {\n key: 'fillColor',\n accessor: 'getFillColor',\n pickingInfo: 'colorValue',\n getBins: {\n triggers: {\n value: {\n prop: 'getColorValue',\n updateTrigger: 'getColorValue'\n },\n weight: {\n prop: 'getColorWeight',\n updateTrigger: 'getColorWeight'\n },\n aggregation: {\n prop: 'colorAggregation'\n },\n filterData: {\n prop: '_filterData',\n updateTrigger: '_filterData'\n }\n }\n },\n getDomain: {\n triggers: {\n lowerPercentile: {\n prop: 'lowerPercentile'\n },\n upperPercentile: {\n prop: 'upperPercentile'\n },\n scaleType: {\n prop: 'colorScaleType'\n }\n }\n },\n getScaleFunc: {\n triggers: {\n domain: {prop: 'colorDomain'},\n range: {prop: 'colorRange'}\n },\n onSet: {\n props: 'onSetColorDomain'\n }\n },\n nullValue: [0, 0, 0, 0]\n },\n {\n key: 'elevation',\n accessor: 'getElevation',\n pickingInfo: 'elevationValue',\n getBins: {\n triggers: {\n value: {\n prop: 'getElevationValue',\n updateTrigger: 'getElevationValue'\n },\n weight: {\n prop: 'getElevationWeight',\n updateTrigger: 'getElevationWeight'\n },\n aggregation: {\n prop: 'elevationAggregation'\n },\n filterData: {\n prop: '_filterData',\n updateTrigger: '_filterData'\n }\n }\n },\n getDomain: {\n triggers: {\n lowerPercentile: {\n prop: 'elevationLowerPercentile'\n },\n upperPercentile: {\n prop: 'elevationUpperPercentile'\n },\n scaleType: {\n prop: 'elevationScaleType'\n }\n }\n },\n getScaleFunc: {\n triggers: {\n domain: {prop: 'elevationDomain'},\n range: {prop: 'elevationRange'}\n },\n onSet: {\n props: 'onSetElevationDomain'\n }\n },\n nullValue: -1\n }\n];\nconst defaultGetCellSize = props => props.cellSize;\nexport default class CPUAggregator {\n constructor(opts) {\n this.state = {\n layerData: {},\n dimensions: {\n // color: {\n // getValue: null,\n // domain: null,\n // sortedBins: null,\n // scaleFunc: nop\n // },\n // elevation: {\n // getValue: null,\n // domain: null,\n // sortedBins: null,\n // scaleFunc: nop\n // }\n }\n };\n this.changeFlags = {};\n this.dimensionUpdaters = {};\n\n this._getCellSize = opts.getCellSize || defaultGetCellSize;\n this._getAggregator = opts.getAggregator;\n this._addDimension(opts.dimensions || defaultDimensions);\n }\n\n static defaultDimensions() {\n return defaultDimensions;\n }\n\n updateState(opts, aggregationParams) {\n const {oldProps, props, changeFlags} = opts;\n this.updateGetValueFuncs(oldProps, props, changeFlags);\n const reprojectNeeded = this.needsReProjectPoints(oldProps, props, changeFlags);\n let aggregationDirty = false;\n if (changeFlags.dataChanged || reprojectNeeded) {\n // project data into bin and aggregate wegiths per bin\n this.getAggregatedData(props, aggregationParams);\n aggregationDirty = true;\n } else {\n const dimensionChanges = this.getDimensionChanges(oldProps, props, changeFlags) || [];\n // this here is layer\n dimensionChanges.forEach(f => typeof f === 'function' && f());\n aggregationDirty = true;\n }\n this.setState({aggregationDirty});\n\n return this.state;\n }\n\n // Update private state\n setState(updateObject) {\n this.state = {...this.state, ...updateObject};\n }\n\n // Update private state.dimensions\n setDimensionState(key, updateObject) {\n this.setState({\n dimensions: {\n ...this.state.dimensions,\n [key]: {...this.state.dimensions[key], ...updateObject}\n }\n });\n }\n\n normalizeResult(result = {}) {\n // support previous hexagonAggregator API\n if (result.hexagons) {\n return {data: result.hexagons, ...result};\n } else if (result.layerData) {\n return {data: result.layerData, ...result};\n }\n\n return result;\n }\n\n getAggregatedData(props, aggregationParams) {\n const aggregator = this._getAggregator(props);\n\n const result = aggregator(props, aggregationParams);\n this.setState({\n layerData: this.normalizeResult(result)\n });\n this.changeFlags = {\n layerData: true\n };\n this.getSortedBins(props);\n }\n\n updateGetValueFuncs(oldProps, props, changeFlags) {\n for (const key in this.dimensionUpdaters) {\n const {value, weight, aggregation} = this.dimensionUpdaters[key].getBins.triggers;\n let getValue = props[value.prop];\n const getValueChanged = this.needUpdateDimensionStep(\n this.dimensionUpdaters[key].getBins,\n oldProps,\n props,\n changeFlags\n );\n\n if (getValueChanged) {\n if (getValue) {\n getValue = wrapGetValueFunc(getValue, {data: props.data});\n } else {\n // If `getValue` is not provided from props, build it with aggregation and weight.\n getValue = getValueFunc(props[aggregation.prop], props[weight.prop], {data: props.data});\n }\n }\n\n if (getValue) {\n this.setDimensionState(key, {getValue});\n }\n }\n }\n\n needsReProjectPoints(oldProps, props, changeFlags) {\n return (\n this._getCellSize(oldProps) !== this._getCellSize(props) ||\n this._getAggregator(oldProps) !== this._getAggregator(props) ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPosition))\n );\n }\n\n // Adds dimensions\n addDimension(dimensions) {\n this._addDimension(dimensions);\n }\n\n _addDimension(dimensions = []) {\n dimensions.forEach(dimension => {\n const {key} = dimension;\n this.dimensionUpdaters[key] = this.getDimensionUpdaters(dimension);\n this.state.dimensions[key] = {\n getValue: null,\n domain: null,\n sortedBins: null,\n scaleFunc: nop\n };\n });\n }\n\n getDimensionUpdaters({key, accessor, pickingInfo, getBins, getDomain, getScaleFunc, nullValue}) {\n return {\n key,\n accessor,\n pickingInfo,\n getBins: {updater: this.getDimensionSortedBins, ...getBins},\n getDomain: {updater: this.getDimensionValueDomain, ...getDomain},\n getScaleFunc: {updater: this.getDimensionScale, ...getScaleFunc},\n attributeAccessor: this.getSubLayerDimensionAttribute(key, nullValue)\n };\n }\n\n needUpdateDimensionStep(dimensionStep, oldProps, props, changeFlags) {\n // whether need to update current dimension step\n // dimension step is the value, domain, scaleFunction of each dimension\n // each step is an object with properties links to layer prop and whether the prop is\n // controlled by updateTriggers\n // getBins: {\n // value: {\n // prop: 'getElevationValue',\n // updateTrigger: 'getElevationValue'\n // },\n // weight: {\n // prop: 'getElevationWeight',\n // updateTrigger: 'getElevationWeight'\n // },\n // aggregation: {\n // prop: 'elevationAggregation'\n // }\n // }\n return Object.values(dimensionStep.triggers).some(item => {\n if (item.updateTrigger) {\n // check based on updateTriggers change first\n // if data has changed, always update value\n return (\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all ||\n changeFlags.updateTriggersChanged[item.updateTrigger]))\n );\n }\n // fallback to direct comparison\n return oldProps[item.prop] !== props[item.prop];\n });\n }\n\n getDimensionChanges(oldProps, props, changeFlags) {\n // const {dimensionUpdaters} = this.state;\n const updaters = [];\n\n // get dimension to be updated\n for (const key in this.dimensionUpdaters) {\n // return the first triggered updater for each dimension\n const needUpdate = dimensionSteps.find(step =>\n this.needUpdateDimensionStep(\n this.dimensionUpdaters[key][step],\n oldProps,\n props,\n changeFlags\n )\n );\n\n if (needUpdate) {\n updaters.push(\n this.dimensionUpdaters[key][needUpdate].updater.bind(\n this,\n props,\n this.dimensionUpdaters[key]\n )\n );\n }\n }\n\n return updaters.length ? updaters : null;\n }\n\n getUpdateTriggers(props) {\n const _updateTriggers = props.updateTriggers || {};\n const updateTriggers = {};\n\n for (const key in this.dimensionUpdaters) {\n const {accessor} = this.dimensionUpdaters[key];\n // fold dimension triggers into each accessor\n updateTriggers[accessor] = {};\n\n dimensionSteps.forEach(step => {\n Object.values(this.dimensionUpdaters[key][step].triggers).forEach(\n ({prop, updateTrigger}) => {\n if (updateTrigger) {\n // if prop is based on updateTrigger e.g. getColorValue, getColorWeight\n // and updateTriggers is passed in from layer prop\n // fold the updateTriggers into accessor\n const fromProp = _updateTriggers[updateTrigger];\n if (typeof fromProp === 'object' && !Array.isArray(fromProp)) {\n // if updateTrigger is an object spread it\n Object.assign(updateTriggers[accessor], fromProp);\n } else if (fromProp !== undefined) {\n updateTriggers[accessor][prop] = fromProp;\n }\n } else {\n // if prop is not based on updateTrigger\n updateTriggers[accessor][prop] = props[prop];\n }\n }\n );\n });\n }\n\n return updateTriggers;\n }\n\n getSortedBins(props) {\n for (const key in this.dimensionUpdaters) {\n this.getDimensionSortedBins(props, this.dimensionUpdaters[key]);\n }\n }\n\n getDimensionSortedBins(props, dimensionUpdater) {\n const {key} = dimensionUpdater;\n const {getValue} = this.state.dimensions[key];\n\n const sortedBins = new BinSorter(this.state.layerData.data || [], {\n getValue,\n filterData: props._filterData\n });\n this.setDimensionState(key, {sortedBins});\n this.getDimensionValueDomain(props, dimensionUpdater);\n }\n\n getDimensionValueDomain(props, dimensionUpdater) {\n const {getDomain, key} = dimensionUpdater;\n const {\n triggers: {lowerPercentile, upperPercentile, scaleType}\n } = getDomain;\n const valueDomain = this.state.dimensions[key].sortedBins.getValueDomainByScale(\n props[scaleType.prop],\n [props[lowerPercentile.prop], props[upperPercentile.prop]]\n );\n\n this.setDimensionState(key, {valueDomain});\n this.getDimensionScale(props, dimensionUpdater);\n }\n\n getDimensionScale(props, dimensionUpdater) {\n const {key, getScaleFunc, getDomain} = dimensionUpdater;\n const {domain, range} = getScaleFunc.triggers;\n const {scaleType} = getDomain.triggers;\n const {onSet} = getScaleFunc;\n const dimensionRange = props[range.prop];\n const dimensionDomain = props[domain.prop] || this.state.dimensions[key].valueDomain;\n const getScaleFunction = getScaleFunctionByScaleType(scaleType && props[scaleType.prop]);\n const scaleFunc = getScaleFunction(dimensionDomain, dimensionRange);\n\n if (typeof onSet === 'object' && typeof props[onSet.props] === 'function') {\n props[onSet.props](scaleFunc.domain());\n }\n\n this.setDimensionState(key, {scaleFunc});\n }\n\n getSubLayerDimensionAttribute(key, nullValue) {\n return cell => {\n const {sortedBins, scaleFunc} = this.state.dimensions[key];\n const bin = sortedBins.binMap[cell.index];\n\n if (bin && bin.counts === 0) {\n // no points left in bin after filtering\n return nullValue;\n }\n const cv = bin && bin.value;\n const domain = scaleFunc.domain();\n\n const isValueInDomain = cv >= domain[0] && cv <= domain[domain.length - 1];\n\n // if cell value is outside domain, set alpha to 0\n return isValueInDomain ? scaleFunc(cv) : nullValue;\n };\n }\n\n getSubLayerAccessors(props) {\n const accessors = {};\n for (const key in this.dimensionUpdaters) {\n const {accessor} = this.dimensionUpdaters[key];\n accessors[accessor] = this.getSubLayerDimensionAttribute(props, key);\n }\n\n return accessors;\n }\n\n getPickingInfo({info}) {\n const isPicked = info.picked && info.index > -1;\n let object = null;\n\n if (isPicked) {\n // const {sortedColorBins, sortedElevationBins} = this.state;\n\n const cell = this.state.layerData.data[info.index];\n\n const binInfo = {};\n for (const key in this.dimensionUpdaters) {\n const {pickingInfo} = this.dimensionUpdaters[key];\n const {sortedBins} = this.state.dimensions[key];\n const value = sortedBins.binMap[cell.index] && sortedBins.binMap[cell.index].value;\n binInfo[pickingInfo] = value;\n }\n\n object = Object.assign(binInfo, cell, {\n points: cell.filteredPoints || cell.points\n });\n }\n\n // override object with picked cell\n info.picked = Boolean(object);\n info.object = object;\n\n return info;\n }\n\n getAccessor(dimensionKey) {\n if (!this.dimensionUpdaters.hasOwnProperty(dimensionKey)) {\n return nop;\n }\n return this.dimensionUpdaters[dimensionKey].attributeAccessor;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {GridCellLayer} from '@deck.gl/layers';\nimport {Accessor, AccessorFunction, Color, Position, Material, DefaultProps} from '@deck.gl/core';\n\nimport {defaultColorRange} from '../utils/color-utils';\nimport {pointToDensityGridDataCPU} from './grid-aggregator';\nimport CPUAggregator from '../utils/cpu-aggregator';\nimport AggregationLayer, {AggregationLayerProps} from '../aggregation-layer';\n\nimport {Layer, UpdateParameters, GetPickingInfoParams, PickingInfo} from '@deck.gl/core';\nimport {AggregateAccessor} from '../types';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction nop() {}\n\nconst defaultProps: DefaultProps = {\n // color\n colorDomain: null,\n colorRange: defaultColorRange,\n getColorValue: {type: 'accessor', value: null}, // default value is calculated from `getColorWeight` and `colorAggregation`\n getColorWeight: {type: 'accessor', value: 1},\n colorAggregation: 'SUM',\n lowerPercentile: {type: 'number', min: 0, max: 100, value: 0},\n upperPercentile: {type: 'number', min: 0, max: 100, value: 100},\n colorScaleType: 'quantize',\n onSetColorDomain: nop,\n\n // elevation\n elevationDomain: null,\n elevationRange: [0, 1000],\n getElevationValue: {type: 'accessor', value: null}, // default value is calculated from `getElevationWeight` and `elevationAggregation`\n getElevationWeight: {type: 'accessor', value: 1},\n elevationAggregation: 'SUM',\n elevationLowerPercentile: {type: 'number', min: 0, max: 100, value: 0},\n elevationUpperPercentile: {type: 'number', min: 0, max: 100, value: 100},\n elevationScale: {type: 'number', min: 0, value: 1},\n elevationScaleType: 'linear',\n onSetElevationDomain: nop,\n\n gridAggregator: pointToDensityGridDataCPU,\n\n // grid\n cellSize: {type: 'number', min: 0, max: 1000, value: 1000},\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n getPosition: {type: 'accessor', value: x => x.position},\n extruded: false,\n\n // Optional material for 'lighting' shader module\n material: true,\n\n // data filter\n _filterData: {type: 'function', value: null, optional: true}\n};\n\n/** All properties supported by CPUGridLayer. */\nexport type CPUGridLayerProps = _CPUGridLayerProps &\n AggregationLayerProps;\n\n/** Properties added by CPUGridLayer. */\nexport type _CPUGridLayerProps = {\n /**\n * Size of each cell in meters.\n * @default 1000\n */\n cellSize?: number;\n\n /**\n * Color scale domain, default is set to the extent of aggregated weights in each cell.\n * @default [min(colorWeight), max(colorWeight)]\n */\n colorDomain?: [number, number] | null;\n\n /**\n * Default: [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6) `6-class YlOrRd`\n */\n colorRange?: Color[];\n\n /**\n * Cell size multiplier, clamped between 0 - 1.\n * @default 1\n */\n coverage?: number;\n\n /**\n * Elevation scale input domain, default is set to between 0 and the max of aggregated weights in each cell.\n * @default [0, max(elevationWeight)]\n */\n elevationDomain?: [number, number] | null;\n\n /**\n * Elevation scale output range.\n * @default [0, 1000]\n */\n elevationRange?: [number, number];\n\n /**\n * Cell elevation multiplier.\n * @default 1\n */\n elevationScale?: number;\n\n /**\n * Whether to enable cell elevation. If set to false, all cell will be flat.\n * @default true\n */\n extruded?: boolean;\n\n /**\n * Filter cells and re-calculate color by `upperPercentile`.\n * Cells with value arger than the upperPercentile will be hidden.\n * @default 100\n */\n upperPercentile?: number;\n\n /**\n * Filter cells and re-calculate color by `lowerPercentile`.\n * Cells with value smaller than the lowerPercentile will be hidden.\n * @default 0\n */\n lowerPercentile?: number;\n\n /**\n * Filter cells and re-calculate elevation by `elevationUpperPercentile`.\n * Cells with elevation value larger than the `elevationUpperPercentile` will be hidden.\n * @default 100\n */\n elevationUpperPercentile?: number;\n\n /**\n * Filter cells and re-calculate elevation by `elevationLowerPercentile`.\n * Cells with elevation value larger than the `elevationLowerPercentile` will be hidden.\n * @default 0\n */\n elevationLowerPercentile?: number;\n\n /**\n * Scaling function used to determine the color of the grid cell, default value is 'quantize'.\n * Supported Values are 'quantize', 'linear', 'quantile' and 'ordinal'.\n * @default 'quantize'\n */\n colorScaleType?: 'quantize' | 'linear' | 'quantile' | 'ordinal';\n\n /**\n * Scaling function used to determine the elevation of the grid cell, only supports 'linear'.\n */\n elevationScaleType?: 'linear';\n\n // TODO - document\n gridAggregator?: (props: any, params: any) => any;\n\n /**\n * Material settings for lighting effect. Applies if `extruded: true`.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n\n /**\n * Defines the operation used to aggregate all data object weights to calculate a cell's color value.\n * @default 'SUM'\n */\n colorAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n\n /**\n * Defines the operation used to aggregate all data object weights to calculate a cell's elevation value.\n * @default 'SUM'\n */\n elevationAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n\n /**\n * Method called to retrieve the position of each object.\n * @default object => object.position\n */\n getPosition?: AccessorFunction;\n\n /**\n * The weight of a data object used to calculate the color value for a cell.\n * @default 1\n */\n getColorWeight?: Accessor;\n\n /**\n * After data objects are aggregated into cells, this accessor is called on each cell to get the value that its color is based on.\n * @default null\n */\n getColorValue?: AggregateAccessor | null;\n\n /**\n * The weight of a data object used to calculate the elevation value for a cell.\n * @default 1\n */\n getElevationWeight?: Accessor;\n\n /**\n * After data objects are aggregated into cells, this accessor is called on each cell to get the value that its elevation is based on.\n * @default null\n */\n getElevationValue?: AggregateAccessor | null;\n\n /**\n * This callback will be called when bin color domain has been calculated.\n * @default () => {}\n */\n onSetColorDomain?: (minMax: [number, number]) => void;\n\n /**\n * This callback will be called when bin elevation domain has been calculated.\n * @default () => {}\n */\n onSetElevationDomain?: (minMax: [number, number]) => void;\n\n /**\n * (Experimental) Filter data objects\n */\n _filterData: null | ((d: DataT) => boolean);\n};\n\n/** Aggregate data into a grid-based heatmap. Aggregation is performed on CPU. */\nexport default class CPUGridLayer extends AggregationLayer<\n ExtraPropsT & Required<_CPUGridLayerProps>\n> {\n static layerName = 'CPUGridLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n const cpuAggregator = new CPUAggregator({\n getAggregator: props => props.gridAggregator,\n getCellSize: props => props.cellSize\n });\n\n this.state = {\n cpuAggregator,\n aggregatorState: cpuAggregator.state\n };\n const attributeManager = this.getAttributeManager()!;\n attributeManager.add({\n positions: {size: 3, type: GL.DOUBLE, accessor: 'getPosition'}\n });\n // color and elevation attributes can't be added as attributes\n // they are calcualted using 'getValue' accessor that takes an array of pints.\n }\n\n updateState(opts: UpdateParameters) {\n super.updateState(opts);\n this.setState({\n // make a copy of the internal state of cpuAggregator for testing\n aggregatorState: this.state.cpuAggregator.updateState(opts, {\n viewport: this.context.viewport,\n attributes: this.getAttributes(),\n numInstances: this.getNumInstances()\n })\n });\n }\n\n getPickingInfo({info}: GetPickingInfoParams): PickingInfo {\n return this.state.cpuAggregator.getPickingInfo({info});\n }\n\n // create a method for testing\n _onGetSublayerColor(cell) {\n return this.state.cpuAggregator.getAccessor('fillColor')(cell);\n }\n\n // create a method for testing\n _onGetSublayerElevation(cell) {\n return this.state.cpuAggregator.getAccessor('elevation')(cell);\n }\n\n _getSublayerUpdateTriggers() {\n return this.state.cpuAggregator.getUpdateTriggers(this.props);\n }\n\n renderLayers(): Layer {\n const {elevationScale, extruded, cellSize, coverage, material, transitions} = this.props;\n const {cpuAggregator} = this.state;\n const SubLayerClass = this.getSubLayerClass('grid-cell', GridCellLayer);\n const updateTriggers = this._getSublayerUpdateTriggers();\n\n return new SubLayerClass(\n {\n cellSize,\n coverage,\n material,\n elevationScale,\n extruded,\n\n getFillColor: this._onGetSublayerColor.bind(this),\n getElevation: this._onGetSublayerElevation.bind(this),\n transitions: transitions && {\n getFillColor: transitions.getColorValue || transitions.getColorWeight,\n getElevation: transitions.getElevationValue || transitions.getElevationWeight\n }\n },\n this.getSubLayerProps({\n id: 'grid-cell',\n updateTriggers\n }),\n {\n data: cpuAggregator.state.layerData.data\n }\n );\n }\n}\n","var thirdPi = Math.PI / 3,\n angles = [0, thirdPi, 2 * thirdPi, 3 * thirdPi, 4 * thirdPi, 5 * thirdPi];\n\nfunction pointX(d) {\n return d[0];\n}\n\nfunction pointY(d) {\n return d[1];\n}\n\nexport default function() {\n var x0 = 0,\n y0 = 0,\n x1 = 1,\n y1 = 1,\n x = pointX,\n y = pointY,\n r,\n dx,\n dy;\n\n function hexbin(points) {\n var binsById = {}, bins = [], i, n = points.length;\n\n for (i = 0; i < n; ++i) {\n if (isNaN(px = +x.call(null, point = points[i], i, points))\n || isNaN(py = +y.call(null, point, i, points))) continue;\n\n var point,\n px,\n py,\n pj = Math.round(py = py / dy),\n pi = Math.round(px = px / dx - (pj & 1) / 2),\n py1 = py - pj;\n\n if (Math.abs(py1) * 3 > 1) {\n var px1 = px - pi,\n pi2 = pi + (px < pi ? -1 : 1) / 2,\n pj2 = pj + (py < pj ? -1 : 1),\n px2 = px - pi2,\n py2 = py - pj2;\n if (px1 * px1 + py1 * py1 > px2 * px2 + py2 * py2) pi = pi2 + (pj & 1 ? 1 : -1) / 2, pj = pj2;\n }\n\n var id = pi + \"-\" + pj, bin = binsById[id];\n if (bin) bin.push(point);\n else {\n bins.push(bin = binsById[id] = [point]);\n bin.x = (pi + (pj & 1) / 2) * dx;\n bin.y = pj * dy;\n }\n }\n\n return bins;\n }\n\n function hexagon(radius) {\n var x0 = 0, y0 = 0;\n return angles.map(function(angle) {\n var x1 = Math.sin(angle) * radius,\n y1 = -Math.cos(angle) * radius,\n dx = x1 - x0,\n dy = y1 - y0;\n x0 = x1, y0 = y1;\n return [dx, dy];\n });\n }\n\n hexbin.hexagon = function(radius) {\n return \"m\" + hexagon(radius == null ? r : +radius).join(\"l\") + \"z\";\n };\n\n hexbin.centers = function() {\n var centers = [],\n j = Math.round(y0 / dy),\n i = Math.round(x0 / dx);\n for (var y = j * dy; y < y1 + r; y += dy, ++j) {\n for (var x = i * dx + (j & 1) * dx / 2; x < x1 + dx / 2; x += dx) {\n centers.push([x, y]);\n }\n }\n return centers;\n };\n\n hexbin.mesh = function() {\n var fragment = hexagon(r).slice(0, 4).join(\"l\");\n return hexbin.centers().map(function(p) { return \"M\" + p + \"m\" + fragment; }).join(\"\");\n };\n\n hexbin.x = function(_) {\n return arguments.length ? (x = _, hexbin) : x;\n };\n\n hexbin.y = function(_) {\n return arguments.length ? (y = _, hexbin) : y;\n };\n\n hexbin.radius = function(_) {\n return arguments.length ? (r = +_, dx = r * 2 * Math.sin(thirdPi), dy = r * 1.5, hexbin) : r;\n };\n\n hexbin.size = function(_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], hexbin) : [x1 - x0, y1 - y0];\n };\n\n hexbin.extent = function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], hexbin) : [[x0, y0], [x1, y1]];\n };\n\n return hexbin.radius(1);\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Accessor,\n AccessorFunction,\n Color,\n log,\n Position,\n Material,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport {ColumnLayer} from '@deck.gl/layers';\n\nimport {defaultColorRange} from '../utils/color-utils';\n\nimport {pointToHexbin} from './hexagon-aggregator';\nimport CPUAggregator from '../utils/cpu-aggregator';\nimport AggregationLayer, {AggregationLayerProps} from '../aggregation-layer';\n\nimport GL from '@luma.gl/constants';\nimport {AggregateAccessor} from '../types';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction nop() {}\n\nconst defaultProps: DefaultProps = {\n // color\n colorDomain: null,\n colorRange: defaultColorRange,\n getColorValue: {type: 'accessor', value: null}, // default value is calcuated from `getColorWeight` and `colorAggregation`\n getColorWeight: {type: 'accessor', value: 1},\n colorAggregation: 'SUM',\n lowerPercentile: {type: 'number', value: 0, min: 0, max: 100},\n upperPercentile: {type: 'number', value: 100, min: 0, max: 100},\n colorScaleType: 'quantize',\n onSetColorDomain: nop,\n\n // elevation\n elevationDomain: null,\n elevationRange: [0, 1000],\n getElevationValue: {type: 'accessor', value: null}, // default value is calcuated from `getElevationWeight` and `elevationAggregation`\n getElevationWeight: {type: 'accessor', value: 1},\n elevationAggregation: 'SUM',\n elevationLowerPercentile: {type: 'number', value: 0, min: 0, max: 100},\n elevationUpperPercentile: {type: 'number', value: 100, min: 0, max: 100},\n elevationScale: {type: 'number', min: 0, value: 1},\n elevationScaleType: 'linear',\n onSetElevationDomain: nop,\n\n radius: {type: 'number', value: 1000, min: 1},\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n extruded: false,\n hexagonAggregator: pointToHexbin,\n getPosition: {type: 'accessor', value: x => x.position},\n // Optional material for 'lighting' shader module\n material: true,\n\n // data filter\n _filterData: {type: 'function', value: null, optional: true}\n};\n\n/** All properties supported by by HexagonLayer. */\nexport type HexagonLayerProps = _HexagonLayerProps &\n AggregationLayerProps;\n\n/** Properties added by HexagonLayer. */\ntype _HexagonLayerProps = {\n /**\n * Radius of hexagon bin in meters. The hexagons are pointy-topped (rather than flat-topped).\n * @default 1000\n */\n radius?: number;\n\n /**\n * Function to aggregate data into hexagonal bins.\n * @default d3-hexbin\n */\n hexagonAggregator?: (props: any, params: any) => any;\n\n /**\n * Color scale input domain.\n * @default [min(colorWeight), max(colorWeight)]\n */\n colorDomain?: [number, number] | null;\n\n /**\n * Specified as an array of colors [color1, color2, ...].\n * @default `6-class YlOrRd` - [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6)\n */\n colorRange?: Color[];\n\n /**\n * Hexagon radius multiplier, clamped between 0 - 1.\n * @default 1\n */\n coverage?: number;\n\n /**\n * Elevation scale input domain. The elevation scale is a linear scale that maps number of counts to elevation.\n * @default [0, max(elevationWeight)]\n */\n elevationDomain?: [number, number] | null;\n\n /**\n * Elevation scale output range.\n * @default [0, 1000]\n */\n elevationRange?: [number, number];\n\n /**\n * Hexagon elevation multiplier.\n * @default 1\n */\n elevationScale?: number;\n\n /**\n * Whether to enable cell elevation. If set to false, all cell will be flat.\n * @default false\n */\n extruded?: boolean;\n\n /**\n * Filter bins and re-calculate color by `upperPercentile`.\n * Hexagons with color value larger than the `upperPercentile` will be hidden.\n * @default 100\n */\n upperPercentile?: number;\n\n /**\n * Filter bins and re-calculate color by `lowerPercentile`.\n * Hexagons with color value smaller than the `lowerPercentile` will be hidden.\n * @default 0\n */\n lowerPercentile?: number;\n\n /**\n * Filter bins and re-calculate elevation by `elevationUpperPercentile`.\n * Hexagons with elevation value larger than the `elevationUpperPercentile` will be hidden.\n * @default 100\n */\n elevationUpperPercentile?: number;\n\n /**\n * Filter bins and re-calculate elevation by `elevationLowerPercentile`.\n * Hexagons with elevation value larger than the `elevationLowerPercentile` will be hidden.\n * @default 0\n */\n elevationLowerPercentile?: number;\n\n /**\n * Scaling function used to determine the color of the grid cell, default value is 'quantize'.\n * Supported Values are 'quantize', 'quantile' and 'ordinal'.\n * @default 'quantize'\n */\n colorScaleType?: 'quantize' | 'quantile' | 'ordinal';\n\n /**\n * Scaling function used to determine the elevation of the grid cell, only supports 'linear'.\n */\n elevationScaleType?: 'linear';\n\n /**\n * Material settings for lighting effect. Applies if `extruded: true`.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n\n /**\n * Defines the operation used to aggregate all data object weights to calculate a cell's color value.\n * @default 'SUM'\n */\n colorAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n\n /**\n * Defines the operation used to aggregate all data object weights to calculate a cell's elevation value.\n * @default 'SUM'\n */\n elevationAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n\n /**\n * Method called to retrieve the position of each object.\n * @default object => object.position\n */\n getPosition?: AccessorFunction;\n\n /**\n * The weight of a data object used to calculate the color value for a bin.\n * @default 1\n */\n getColorWeight?: Accessor;\n\n /**\n * After data objects are aggregated into bins, this accessor is called on each cell to get the value that its color is based on.\n * @default null\n */\n getColorValue?: AggregateAccessor | null;\n\n /**\n * The weight of a data object used to calculate the elevation value for a bin.\n * @default 1\n */\n getElevationWeight?: Accessor;\n\n /**\n * After data objects are aggregated into bins, this accessor is called on each cell to get the value that its elevation is based on.\n * @default null\n */\n getElevationValue?: AggregateAccessor | null;\n\n /**\n * This callback will be called when cell color domain has been calculated.\n * @default () => {}\n */\n onSetColorDomain?: (minMax: [number, number]) => void;\n\n /**\n * This callback will be called when cell elevation domain has been calculated.\n * @default () => {}\n */\n onSetElevationDomain?: (minMax: [number, number]) => void;\n\n /**\n * (Experimental) Filter data objects\n */\n _filterData: null | ((d: DataT) => boolean);\n};\n\n/** Aggregates data into a hexagon-based heatmap. The color and height of a hexagon are determined based on the objects it contains. */\nexport default class HexagonLayer extends AggregationLayer<\n ExtraPropsT & Required<_HexagonLayerProps>\n> {\n static layerName = 'HexagonLayer';\n static defaultProps = defaultProps;\n\n state!: AggregationLayer['state'] & {\n cpuAggregator: CPUAggregator;\n aggregatorState: any;\n };\n initializeState() {\n const cpuAggregator = new CPUAggregator({\n getAggregator: props => props.hexagonAggregator,\n getCellSize: props => props.radius\n });\n\n this.state = {\n cpuAggregator,\n aggregatorState: cpuAggregator.state,\n vertices: null\n };\n const attributeManager = this.getAttributeManager()!;\n attributeManager.add({\n positions: {size: 3, type: GL.DOUBLE, accessor: 'getPosition'}\n });\n // color and elevation attributes can't be added as attributes\n // they are calculated using 'getValue' accessor that takes an array of pints.\n }\n\n updateState(opts: UpdateParameters) {\n super.updateState(opts);\n\n if (opts.changeFlags.propsOrDataChanged) {\n const aggregatorState = this.state.cpuAggregator.updateState(opts, {\n viewport: this.context.viewport,\n attributes: this.getAttributes()\n });\n if (this.state.aggregatorState.layerData !== aggregatorState.layerData) {\n // if user provided custom aggregator and returns hexagonVertices,\n // Need to recalculate radius and angle based on vertices\n const {hexagonVertices} = aggregatorState.layerData || {};\n this.setState({\n vertices: hexagonVertices && this.convertLatLngToMeterOffset(hexagonVertices)\n });\n }\n\n this.setState({\n // make a copy of the internal state of cpuAggregator for testing\n aggregatorState\n });\n }\n }\n\n convertLatLngToMeterOffset(hexagonVertices) {\n const {viewport} = this.context;\n if (Array.isArray(hexagonVertices) && hexagonVertices.length === 6) {\n // get centroid of hexagons\n const vertex0 = hexagonVertices[0];\n const vertex3 = hexagonVertices[3];\n\n const centroid = [(vertex0[0] + vertex3[0]) / 2, (vertex0[1] + vertex3[1]) / 2];\n const centroidFlat = viewport.projectFlat(centroid);\n\n const {metersPerUnit} = viewport.getDistanceScales(centroid);\n\n // offset all points by centroid to meter offset\n const vertices = hexagonVertices.map(vt => {\n const vtFlat = viewport.projectFlat(vt);\n\n return [\n (vtFlat[0] - centroidFlat[0]) * metersPerUnit[0],\n (vtFlat[1] - centroidFlat[1]) * metersPerUnit[1]\n ];\n });\n\n return vertices;\n }\n\n log.error('HexagonLayer: hexagonVertices needs to be an array of 6 points')();\n return null;\n }\n\n getPickingInfo({info}) {\n return this.state.cpuAggregator.getPickingInfo({info});\n }\n\n // create a method for testing\n _onGetSublayerColor(cell) {\n return this.state.cpuAggregator.getAccessor('fillColor')(cell);\n }\n\n // create a method for testing\n _onGetSublayerElevation(cell) {\n return this.state.cpuAggregator.getAccessor('elevation')(cell);\n }\n\n _getSublayerUpdateTriggers() {\n return this.state.cpuAggregator.getUpdateTriggers(this.props);\n }\n\n renderLayers() {\n const {elevationScale, extruded, coverage, material, transitions} = this.props;\n const {aggregatorState, vertices} = this.state;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell', ColumnLayer);\n const updateTriggers = this._getSublayerUpdateTriggers();\n\n const geometry = vertices\n ? {vertices, radius: 1}\n : {\n // default geometry\n radius: aggregatorState.layerData.radiusCommon || 1,\n radiusUnits: 'common',\n angle: 90\n };\n return new SubLayerClass(\n {\n ...geometry,\n diskResolution: 6,\n elevationScale,\n extruded,\n coverage,\n material,\n\n getFillColor: this._onGetSublayerColor.bind(this),\n getElevation: this._onGetSublayerElevation.bind(this),\n transitions: transitions && {\n getFillColor: transitions.getColorValue || transitions.getColorWeight,\n getElevation: transitions.getElevationValue || transitions.getElevationWeight\n }\n },\n this.getSubLayerProps({\n id: 'hexagon-cell',\n updateTriggers\n }),\n {\n data: aggregatorState.layerData.data\n }\n );\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {hexbin} from 'd3-hexbin';\nimport {createIterable, log} from '@deck.gl/core';\n\n/**\n * Use d3-hexbin to performs hexagonal binning from geo points to hexagons\n * @param {Iterable} data - array of points\n * @param {Number} radius - hexagon radius in meter\n * @param {function} getPosition - get points lon lat\n * @param {Object} viewport - current viewport object\n\n * @return {Object} - hexagons and countRange\n */\nexport function pointToHexbin(props, aggregationParams) {\n const {data, radius} = props;\n const {viewport, attributes} = aggregationParams;\n // get hexagon radius in mercator world unit\n const centerLngLat = data.length ? getPointsCenter(data, aggregationParams) : null;\n const radiusCommon = getRadiusInCommon(radius, viewport, centerLngLat);\n\n // add world space coordinates to points\n const screenPoints = [];\n const {iterable, objectInfo} = createIterable(data);\n const positions = attributes.positions.value;\n const {size} = attributes.positions.getAccessor();\n for (const object of iterable) {\n objectInfo.index++;\n const posIndex = objectInfo.index * size;\n const position = [positions[posIndex], positions[posIndex + 1]];\n const arrayIsFinite = Number.isFinite(position[0]) && Number.isFinite(position[1]);\n if (arrayIsFinite) {\n screenPoints.push({\n screenCoord: viewport.projectFlat(position),\n source: object,\n index: objectInfo.index\n });\n } else {\n log.warn('HexagonLayer: invalid position')();\n }\n }\n\n const newHexbin = hexbin()\n .radius(radiusCommon)\n .x(d => d.screenCoord[0])\n .y(d => d.screenCoord[1]);\n\n const hexagonBins = newHexbin(screenPoints);\n\n return {\n hexagons: hexagonBins.map((hex, index) => ({\n position: viewport.unprojectFlat([hex.x, hex.y]),\n points: hex,\n index\n })),\n radiusCommon\n };\n}\n\n/**\n * Get the bounding box of all data points\n */\nexport function getPointsCenter(data, aggregationParams) {\n const {attributes} = aggregationParams;\n const positions = attributes.positions.value;\n const {size} = attributes.positions.getAccessor();\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let i;\n\n for (i = 0; i < size * data.length; i += size) {\n const x = positions[i];\n const y = positions[i + 1];\n const arrayIsFinite = Number.isFinite(x) && Number.isFinite(y);\n\n if (arrayIsFinite) {\n minX = Math.min(x, minX);\n maxX = Math.max(x, maxX);\n minY = Math.min(y, minY);\n maxY = Math.max(y, maxY);\n }\n }\n\n // return center\n return [minX, minY, maxX, maxY].every(Number.isFinite)\n ? [(minX + maxX) / 2, (minY + maxY) / 2]\n : null;\n}\n\n/**\n * Get radius in mercator world space coordinates from meter\n * @param {Number} radius - in meter\n * @param {Object} viewport - current viewport object\n * @param {Array} center - data center\n\n * @return {Number} radius in mercator world spcae coordinates\n */\nexport function getRadiusInCommon(radius, viewport, center) {\n const {unitsPerMeter} = viewport.getDistanceScales(center);\n // x, y distance should be the same\n return radius * unitsPerMeter[0];\n}\n","// Code to Offsets Map needed to implement Marching Squares algorithm\n// Ref: https://en.wikipedia.org/wiki/Marching_squares\n\n// Table to map code to the intersection offsets\n// All offsets are relative to the center of marching cell (which is top right corner of grid-cell, and center of marching-square)\nconst HALF = 0.5;\nconst ONE6TH = 1 / 6;\nconst OFFSET = {\n N: [0, HALF], // NORTH\n E: [HALF, 0], // EAST\n S: [0, -HALF], // SOUTH\n W: [-HALF, 0], // WEST\n\n // CORNERS\n NE: [HALF, HALF],\n NW: [-HALF, HALF],\n SE: [HALF, -HALF],\n SW: [-HALF, -HALF]\n};\n\n// NOTE: vertices are ordered in CCW direction, starting from NW corner\n\n// Triangles\nconst SW_TRIANGLE = [OFFSET.W, OFFSET.SW, OFFSET.S];\nconst SE_TRIANGLE = [OFFSET.S, OFFSET.SE, OFFSET.E];\nconst NE_TRIANGLE = [OFFSET.E, OFFSET.NE, OFFSET.N];\nconst NW_TRIANGLE = [OFFSET.NW, OFFSET.W, OFFSET.N];\n\n// Trapezoids\nconst SW_TRAPEZOID = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF]\n];\nconst SE_TRAPEZOID = [\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF],\n [HALF, -ONE6TH],\n [HALF, ONE6TH]\n];\nconst NE_TRAPEZOID = [\n [HALF, -ONE6TH],\n [HALF, ONE6TH],\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\nconst NW_TRAPEZOID = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\n\n// Rectangles\nconst S_RECTANGLE = [OFFSET.W, OFFSET.SW, OFFSET.SE, OFFSET.E];\nconst E_RECTANGLE = [OFFSET.S, OFFSET.SE, OFFSET.NE, OFFSET.N];\nconst N_RECTANGLE = [OFFSET.NW, OFFSET.W, OFFSET.E, OFFSET.NE];\nconst W_RECTANGLE = [OFFSET.NW, OFFSET.SW, OFFSET.S, OFFSET.N];\nconst EW_RECTANGEL = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n [HALF, -ONE6TH],\n [HALF, ONE6TH]\n];\nconst SN_RECTANGEL = [\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF],\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\n\n// Square\nconst SQUARE = [OFFSET.NW, OFFSET.SW, OFFSET.SE, OFFSET.NE];\n\n// Pentagons\nconst SW_PENTAGON = [OFFSET.NW, OFFSET.SW, OFFSET.SE, OFFSET.E, OFFSET.N];\nconst SE_PENTAGON = [OFFSET.W, OFFSET.SW, OFFSET.SE, OFFSET.NE, OFFSET.N];\nconst NE_PENTAGON = [OFFSET.NW, OFFSET.W, OFFSET.S, OFFSET.SE, OFFSET.NE];\nconst NW_PENTAGON = [OFFSET.NW, OFFSET.SW, OFFSET.S, OFFSET.E, OFFSET.NE];\n\nconst NW_N_PENTAGON = [OFFSET.NW, OFFSET.W, [HALF, -ONE6TH], [HALF, ONE6TH], OFFSET.N];\nconst NE_E_PENTAGON = [[-ONE6TH, -HALF], [ONE6TH, -HALF], OFFSET.E, OFFSET.NE, OFFSET.N];\nconst SE_S_PENTAGON = [[-HALF, ONE6TH], [-HALF, -ONE6TH], OFFSET.S, OFFSET.SE, OFFSET.E];\nconst SW_W_PENTAGON = [OFFSET.W, OFFSET.SW, OFFSET.S, [ONE6TH, HALF], [-ONE6TH, HALF]];\n\nconst NW_W_PENTAGON = [OFFSET.NW, OFFSET.W, [-ONE6TH, -HALF], [ONE6TH, -HALF], OFFSET.N];\nconst NE_N_PENTAGON = [[-HALF, ONE6TH], [-HALF, -ONE6TH], OFFSET.E, OFFSET.NE, OFFSET.N];\nconst SE_E_PENTAGON = [OFFSET.S, OFFSET.SE, OFFSET.E, [ONE6TH, HALF], [-ONE6TH, HALF]];\nconst SW_S_PENTAGON = [OFFSET.W, OFFSET.SW, OFFSET.S, [HALF, -ONE6TH], [HALF, ONE6TH]];\n\n// Hexagon\nconst S_HEXAGON = [OFFSET.W, OFFSET.SW, OFFSET.SE, OFFSET.E, [ONE6TH, HALF], [-ONE6TH, HALF]];\nconst E_HEXAGON = [[-HALF, ONE6TH], [-HALF, -ONE6TH], OFFSET.S, OFFSET.SE, OFFSET.NE, OFFSET.N];\nconst N_HEXAGON = [OFFSET.NW, OFFSET.W, [-ONE6TH, -HALF], [ONE6TH, -HALF], OFFSET.E, OFFSET.NE];\nconst W_HEXAGON = [OFFSET.NW, OFFSET.SW, OFFSET.S, [HALF, -ONE6TH], [HALF, ONE6TH], OFFSET.N];\nconst SW_NE_HEXAGON = [OFFSET.W, OFFSET.SW, OFFSET.S, OFFSET.E, OFFSET.NE, OFFSET.N];\nconst NW_SE_HEXAGON = [OFFSET.NW, OFFSET.W, OFFSET.S, OFFSET.SE, OFFSET.E, OFFSET.N];\n\n// Heptagon (7-sided)\nconst NE_HEPTAGON = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF],\n OFFSET.E,\n OFFSET.NE,\n OFFSET.N\n];\nconst SW_HEPTAGON = [\n OFFSET.W,\n OFFSET.SW,\n OFFSET.S,\n [HALF, -ONE6TH],\n [HALF, ONE6TH],\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\nconst NW_HEPTAGON = [\n OFFSET.NW,\n OFFSET.W,\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF],\n [HALF, -ONE6TH],\n [HALF, ONE6TH],\n OFFSET.N\n];\nconst SE_HEPTAGON = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n OFFSET.S,\n OFFSET.SE,\n OFFSET.E,\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\n\n// Octagon\nconst OCTAGON = [\n [-HALF, ONE6TH],\n [-HALF, -ONE6TH],\n [-ONE6TH, -HALF],\n [ONE6TH, -HALF],\n [HALF, -ONE6TH],\n [HALF, ONE6TH],\n [ONE6TH, HALF],\n [-ONE6TH, HALF]\n];\n\n// Note: above wiki page invertes white/black dots for generating the code, we don't\nexport const ISOLINES_CODE_OFFSET_MAP = {\n // key is equal to the code of 4 vertices (invert the code specified in wiki)\n // value can be an array or an Object\n // Array : [line] or [line, line], where each line is [start-point, end-point], and each point is [x, y]\n // Object : to handle saddle cases, whos output depends on mean value of all 4 corners\n // key: code of mean value (0 or 1)\n // value: Array , as above defines one or two line segments\n 0: [],\n 1: [[OFFSET.W, OFFSET.S]],\n 2: [[OFFSET.S, OFFSET.E]],\n 3: [[OFFSET.W, OFFSET.E]],\n 4: [[OFFSET.N, OFFSET.E]],\n 5: {\n 0: [\n [OFFSET.W, OFFSET.S],\n [OFFSET.N, OFFSET.E]\n ],\n 1: [\n [OFFSET.W, OFFSET.N],\n [OFFSET.S, OFFSET.E]\n ]\n },\n 6: [[OFFSET.N, OFFSET.S]],\n 7: [[OFFSET.W, OFFSET.N]],\n 8: [[OFFSET.W, OFFSET.N]],\n 9: [[OFFSET.N, OFFSET.S]],\n 10: {\n 0: [\n [OFFSET.W, OFFSET.N],\n [OFFSET.S, OFFSET.E]\n ],\n 1: [\n [OFFSET.W, OFFSET.S],\n [OFFSET.N, OFFSET.E]\n ]\n },\n 11: [[OFFSET.N, OFFSET.E]],\n 12: [[OFFSET.W, OFFSET.E]],\n 13: [[OFFSET.S, OFFSET.E]],\n 14: [[OFFSET.W, OFFSET.S]],\n 15: []\n};\n\nfunction ternaryToIndex(ternary) {\n return parseInt(ternary, 4);\n}\n\nexport const ISOBANDS_CODE_OFFSET_MAP = {\n // Below list of cases, follow the same order as in above mentioned wiki page.\n // Each case has its code on first commented line // T,TR,R,C\n // where T: Top, TR: Top-right, R: Right and C: current, each will be either 0, 1 or 2\n // final code is binary representation of above code , where takes 2 digits\n // for example: code 2-2-2-1 => 10-10-10-01 => 10101001 => 169\n\n // no contours\n [ternaryToIndex('0000')]: [],\n [ternaryToIndex('2222')]: [],\n\n // single triangle\n [ternaryToIndex('2221')]: [SW_TRIANGLE],\n [ternaryToIndex('2212')]: [SE_TRIANGLE],\n [ternaryToIndex('2122')]: [NE_TRIANGLE],\n [ternaryToIndex('1222')]: [NW_TRIANGLE],\n [ternaryToIndex('0001')]: [SW_TRIANGLE],\n [ternaryToIndex('0010')]: [SE_TRIANGLE],\n [ternaryToIndex('0100')]: [NE_TRIANGLE],\n [ternaryToIndex('1000')]: [NW_TRIANGLE],\n\n // single trapezoid\n [ternaryToIndex('2220')]: [SW_TRAPEZOID],\n [ternaryToIndex('2202')]: [SE_TRAPEZOID],\n [ternaryToIndex('2022')]: [NE_TRAPEZOID],\n [ternaryToIndex('0222')]: [NW_TRAPEZOID],\n [ternaryToIndex('0002')]: [SW_TRAPEZOID],\n [ternaryToIndex('0020')]: [SE_TRAPEZOID],\n [ternaryToIndex('0200')]: [NE_TRAPEZOID],\n [ternaryToIndex('2000')]: [NW_TRAPEZOID],\n\n // single rectangle\n [ternaryToIndex('0011')]: [S_RECTANGLE],\n [ternaryToIndex('0110')]: [E_RECTANGLE],\n [ternaryToIndex('1100')]: [N_RECTANGLE],\n [ternaryToIndex('1001')]: [W_RECTANGLE],\n [ternaryToIndex('2211')]: [S_RECTANGLE],\n [ternaryToIndex('2112')]: [E_RECTANGLE],\n [ternaryToIndex('1122')]: [N_RECTANGLE],\n [ternaryToIndex('1221')]: [W_RECTANGLE],\n [ternaryToIndex('2200')]: [EW_RECTANGEL],\n [ternaryToIndex('2002')]: [SN_RECTANGEL],\n [ternaryToIndex('0022')]: [EW_RECTANGEL],\n [ternaryToIndex('0220')]: [SN_RECTANGEL],\n\n // single square\n // 1111\n [ternaryToIndex('1111')]: [SQUARE],\n\n // single pentagon\n [ternaryToIndex('1211')]: [SW_PENTAGON],\n [ternaryToIndex('2111')]: [SE_PENTAGON],\n [ternaryToIndex('1112')]: [NE_PENTAGON],\n [ternaryToIndex('1121')]: [NW_PENTAGON],\n [ternaryToIndex('1011')]: [SW_PENTAGON],\n [ternaryToIndex('0111')]: [SE_PENTAGON],\n [ternaryToIndex('1110')]: [NE_PENTAGON],\n [ternaryToIndex('1101')]: [NW_PENTAGON],\n [ternaryToIndex('1200')]: [NW_N_PENTAGON],\n [ternaryToIndex('0120')]: [NE_E_PENTAGON],\n [ternaryToIndex('0012')]: [SE_S_PENTAGON],\n [ternaryToIndex('2001')]: [SW_W_PENTAGON],\n [ternaryToIndex('1022')]: [NW_N_PENTAGON],\n [ternaryToIndex('2102')]: [NE_E_PENTAGON],\n [ternaryToIndex('2210')]: [SE_S_PENTAGON],\n [ternaryToIndex('0221')]: [SW_W_PENTAGON],\n [ternaryToIndex('1002')]: [NW_W_PENTAGON],\n [ternaryToIndex('2100')]: [NE_N_PENTAGON],\n [ternaryToIndex('0210')]: [SE_E_PENTAGON],\n [ternaryToIndex('0021')]: [SW_S_PENTAGON],\n [ternaryToIndex('1220')]: [NW_W_PENTAGON],\n [ternaryToIndex('0122')]: [NE_N_PENTAGON],\n [ternaryToIndex('2012')]: [SE_E_PENTAGON],\n [ternaryToIndex('2201')]: [SW_S_PENTAGON],\n\n // single hexagon\n [ternaryToIndex('0211')]: [S_HEXAGON],\n [ternaryToIndex('2110')]: [E_HEXAGON],\n [ternaryToIndex('1102')]: [N_HEXAGON],\n [ternaryToIndex('1021')]: [W_HEXAGON],\n [ternaryToIndex('2011')]: [S_HEXAGON],\n [ternaryToIndex('0112')]: [E_HEXAGON],\n [ternaryToIndex('1120')]: [N_HEXAGON],\n [ternaryToIndex('1201')]: [W_HEXAGON],\n [ternaryToIndex('2101')]: [SW_NE_HEXAGON],\n [ternaryToIndex('0121')]: [SW_NE_HEXAGON],\n [ternaryToIndex('1012')]: [NW_SE_HEXAGON],\n [ternaryToIndex('1210')]: [NW_SE_HEXAGON],\n\n // 6-sided polygons based on mean weight\n // NOTE: merges mean value codes for extreme changes (as per above Wiki doc)\n [ternaryToIndex('0101')]: {\n 0: [SW_TRIANGLE, NE_TRIANGLE],\n 1: [SW_NE_HEXAGON],\n 2: [SW_NE_HEXAGON]\n },\n [ternaryToIndex('1010')]: {\n 0: [NW_TRIANGLE, SE_TRIANGLE],\n 1: [NW_SE_HEXAGON],\n 2: [NW_SE_HEXAGON]\n },\n [ternaryToIndex('2121')]: {\n 0: [SW_NE_HEXAGON],\n 1: [SW_NE_HEXAGON],\n 2: [SW_TRIANGLE, NE_TRIANGLE]\n },\n [ternaryToIndex('1212')]: {\n 0: [NW_SE_HEXAGON],\n 1: [NW_SE_HEXAGON],\n 2: [NW_TRIANGLE, SE_TRIANGLE]\n },\n\n // 7-sided polygons based on mean weight\n [ternaryToIndex('2120')]: {\n 0: [NE_HEPTAGON],\n 1: [NE_HEPTAGON],\n 2: [SW_TRAPEZOID, NE_TRIANGLE]\n },\n [ternaryToIndex('2021')]: {\n 0: [SW_HEPTAGON],\n 1: [SW_HEPTAGON],\n 2: [SW_TRIANGLE, NE_TRAPEZOID]\n },\n [ternaryToIndex('1202')]: {\n 0: [NW_HEPTAGON],\n 1: [NW_HEPTAGON],\n 2: [NW_TRIANGLE, SE_TRAPEZOID]\n },\n [ternaryToIndex('0212')]: {\n 0: [SE_HEPTAGON],\n 1: [SE_HEPTAGON],\n 2: [SE_TRIANGLE, NW_TRAPEZOID]\n },\n [ternaryToIndex('0102')]: {\n 0: [SW_TRAPEZOID, NE_TRIANGLE],\n 1: [NE_HEPTAGON],\n 2: [NE_HEPTAGON]\n },\n [ternaryToIndex('0201')]: {\n 0: [SW_TRIANGLE, NE_TRAPEZOID],\n 1: [SW_HEPTAGON],\n 2: [SW_HEPTAGON]\n },\n [ternaryToIndex('1020')]: {\n 0: [NW_TRIANGLE, SE_TRAPEZOID],\n 1: [NW_HEPTAGON],\n 2: [NW_HEPTAGON]\n },\n [ternaryToIndex('2010')]: {\n 0: [SE_TRIANGLE, NW_TRAPEZOID],\n 1: [SE_HEPTAGON],\n 2: [SE_HEPTAGON]\n },\n\n // 8-sided polygons based on mean weight\n [ternaryToIndex('2020')]: {\n 0: [NW_TRAPEZOID, SE_TRAPEZOID],\n 1: [OCTAGON],\n 2: [SW_TRAPEZOID, NE_TRAPEZOID]\n },\n [ternaryToIndex('0202')]: {\n 0: [NE_TRAPEZOID, SW_TRAPEZOID],\n 1: [OCTAGON],\n 2: [NW_TRAPEZOID, SE_TRAPEZOID]\n }\n};\n","// All utility methods needed to implement Marching Squares algorithm\n// Ref: https://en.wikipedia.org/wiki/Marching_squares\n\nimport {log} from '@deck.gl/core';\nimport {ISOLINES_CODE_OFFSET_MAP, ISOBANDS_CODE_OFFSET_MAP} from './marching-squares-codes';\n\nexport const CONTOUR_TYPE = {\n ISO_LINES: 1,\n ISO_BANDS: 2\n};\n\nconst DEFAULT_THRESHOLD_DATA = {\n zIndex: 0,\n zOffset: 0.005\n};\n\n// Utility methods\n\nfunction getVertexCode(weight: number, threshold: number | number[]): number {\n // threshold must be a single value or a range (array of size 2)\n\n // Iso-bands\n if (Array.isArray(threshold)) {\n if (weight < threshold[0]) {\n return 0;\n }\n return weight < threshold[1] ? 1 : 2;\n }\n // Iso-lines\n return weight >= threshold ? 1 : 0;\n}\n\n// Returns marching square code for given cell\n/* eslint-disable complexity, max-statements*/\nexport function getCode(opts) {\n // Assumptions\n // Origin is on bottom-left , and X increase to right, Y to top\n // When processing one cell, we process 4 cells, by extending row to top and on column to right\n // to create a 2X2 cell grid\n const {cellWeights, x, y, width, height} = opts;\n let threshold = opts.threshold;\n if (opts.thresholdValue) {\n log.deprecated('thresholdValue', 'threshold')();\n threshold = opts.thresholdValue;\n }\n\n const isLeftBoundary = x < 0;\n const isRightBoundary = x >= width - 1;\n const isBottomBoundary = y < 0;\n const isTopBoundary = y >= height - 1;\n const isBoundary = isLeftBoundary || isRightBoundary || isBottomBoundary || isTopBoundary;\n\n const weights: Record = {};\n const codes: Record = {};\n\n // TOP\n if (isLeftBoundary || isTopBoundary) {\n codes.top = 0;\n } else {\n weights.top = cellWeights[(y + 1) * width + x];\n codes.top = getVertexCode(weights.top, threshold);\n }\n\n // TOP-RIGHT\n if (isRightBoundary || isTopBoundary) {\n codes.topRight = 0;\n } else {\n weights.topRight = cellWeights[(y + 1) * width + x + 1];\n codes.topRight = getVertexCode(weights.topRight, threshold);\n }\n\n // RIGHT\n if (isRightBoundary || isBottomBoundary) {\n codes.right = 0;\n } else {\n weights.right = cellWeights[y * width + x + 1];\n codes.right = getVertexCode(weights.right, threshold);\n }\n\n // CURRENT\n if (isLeftBoundary || isBottomBoundary) {\n codes.current = 0;\n } else {\n weights.current = cellWeights[y * width + x];\n codes.current = getVertexCode(weights.current, threshold);\n }\n\n const {top, topRight, right, current} = codes;\n let code = -1;\n if (Number.isFinite(threshold)) {\n code = (top << 3) | (topRight << 2) | (right << 1) | current;\n }\n if (Array.isArray(threshold)) {\n code = (top << 6) | (topRight << 4) | (right << 2) | current;\n }\n\n let meanCode = 0;\n // meanCode is only needed for saddle cases, and they should\n // only occur when we are not processing a cell on boundary\n // because when on a boundary either, bottom-row, top-row, left-column or right-column will have both 0 codes\n if (!isBoundary) {\n meanCode = getVertexCode(\n (weights.top + weights.topRight + weights.right + weights.current) / 4,\n threshold\n );\n }\n return {code, meanCode};\n}\n/* eslint-enable complexity, max-statements*/\n\n// Returns intersection vertices for given cellindex\n// [x, y] refers current marching cell, reference vertex is always top-right corner\nexport function getVertices(opts) {\n const {gridOrigin, cellSize, x, y, code, meanCode, type = CONTOUR_TYPE.ISO_LINES} = opts;\n const thresholdData = {...DEFAULT_THRESHOLD_DATA, ...opts.thresholdData};\n let offsets =\n type === CONTOUR_TYPE.ISO_BANDS\n ? ISOBANDS_CODE_OFFSET_MAP[code]\n : ISOLINES_CODE_OFFSET_MAP[code];\n\n // handle saddle cases\n if (!Array.isArray(offsets)) {\n offsets = offsets[meanCode];\n }\n\n // Reference vertex is at top-right move to top-right corner\n\n const vZ = thresholdData.zIndex * thresholdData.zOffset;\n const rX = (x + 1) * cellSize[0];\n const rY = (y + 1) * cellSize[1];\n\n const refVertexX = gridOrigin[0] + rX;\n const refVertexY = gridOrigin[1] + rY;\n\n // offsets format\n // ISO_LINES: [[1A, 1B], [2A, 2B]],\n // ISO_BANDS: [[1A, 1B, 1C, ...], [2A, 2B, 2C, ...]],\n\n // vertices format\n\n // ISO_LINES: [[x1A, y1A], [x1B, y1B], [x2A, x2B], ...],\n\n // ISO_BANDS: => confirms to SolidPolygonLayer's simple polygon format\n // [\n // [[x1A, y1A], [x1B, y1B], [x1C, y1C] ... ],\n // ...\n // ]\n\n if (type === CONTOUR_TYPE.ISO_BANDS) {\n const polygons: number[][][] = [];\n offsets.forEach(polygonOffsets => {\n const polygon: number[][] = [];\n polygonOffsets.forEach(xyOffset => {\n const vX = refVertexX + xyOffset[0] * cellSize[0];\n const vY = refVertexY + xyOffset[1] * cellSize[1];\n polygon.push([vX, vY, vZ]);\n });\n polygons.push(polygon);\n });\n return polygons;\n }\n\n // default case is ISO_LINES\n const lines: number[][] = [];\n offsets.forEach(xyOffsets => {\n xyOffsets.forEach(offset => {\n const vX = refVertexX + offset[0] * cellSize[0];\n const vY = refVertexY + offset[1] * cellSize[1];\n lines.push([vX, vY, vZ]);\n });\n });\n return lines;\n}\n","// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {LineLayer, SolidPolygonLayer} from '@deck.gl/layers';\nimport {generateContours} from './contour-utils';\nimport {\n Accessor,\n AccessorFunction,\n Color,\n Layer,\n log,\n Position,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\n\nimport GPUGridAggregator from '../utils/gpu-grid-aggregation/gpu-grid-aggregator';\nimport {AGGREGATION_OPERATION, getValueFunc} from '../utils/aggregation-operation-utils';\nimport {getBoundingBox, getGridParams} from '../utils/grid-aggregation-utils';\nimport GridAggregationLayer, {GridAggregationLayerProps} from '../grid-aggregation-layer';\n\nconst DEFAULT_COLOR = [255, 255, 255, 255];\nconst DEFAULT_STROKE_WIDTH = 1;\nconst DEFAULT_THRESHOLD = 1;\n\nconst defaultProps: DefaultProps = {\n // grid aggregation\n cellSize: {type: 'number', min: 1, max: 1000, value: 1000},\n getPosition: {type: 'accessor', value: x => x.position},\n getWeight: {type: 'accessor', value: 1},\n gpuAggregation: true,\n aggregation: 'SUM',\n\n // contour lines\n contours: [{threshold: DEFAULT_THRESHOLD}],\n\n zOffset: 0.005\n};\n\nconst POSITION_ATTRIBUTE_NAME = 'positions';\n\nconst DIMENSIONS = {\n data: {\n props: ['cellSize']\n },\n weights: {\n props: ['aggregation'],\n accessors: ['getWeight']\n }\n};\n\n/** All properties supported by ContourLayer. */\nexport type ContourLayerProps = _ContourLayerProps &\n GridAggregationLayerProps;\n\n/** Properties added by ContourLayer. */\nexport type _ContourLayerProps = {\n /**\n * Size of each cell in meters.\n * @default 1000\n */\n cellSize?: number;\n\n /**\n * When set to true, aggregation is performed on GPU, provided other conditions are met.\n * @default true\n */\n gpuAggregation?: boolean;\n\n /**\n * Defines the type of aggregation operation, valid values are 'SUM', 'MEAN', 'MIN' and 'MAX'.\n * @default 'SUM'\n */\n aggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n\n /**\n * Definition of contours to be drawn.\n * @default [{threshold: 1}]\n */\n contours: {\n /**\n * Isolines: `threshold` value must be a single `Number`, Isolines are generated based on this threshold value.\n *\n * Isobands: `threshold` value must be an Array of two `Number`s. Isobands are generated using `[threshold[0], threshold[1])` as threshold range, i.e area that has values `>= threshold[0]` and `< threshold[1]` are rendered with corresponding color. NOTE: `threshold[0]` is inclusive and `threshold[1]` is not inclusive.\n */\n threshold: number | number[];\n\n /**\n * RGBA color array to be used to render the contour.\n * @default [255, 255, 255, 255]\n */\n color?: Color;\n\n /**\n * Applicable for `Isoline`s only, width of the Isoline in pixels.\n * @default 1\n */\n strokeWidth?: number;\n\n /** Defines z order of the contour. */\n zIndex?: number;\n }[];\n\n /**\n * A very small z offset that is added for each vertex of a contour (Isoline or Isoband).\n * @default 0.005\n */\n zOffset?: number;\n\n /**\n * Method called to retrieve the position of each object.\n * @default object => object.position\n */\n getPosition?: AccessorFunction;\n\n /**\n * The weight of each object.\n * @default 1\n */\n getWeight?: Accessor;\n};\n\n/** Aggregate data into iso-lines or iso-bands for a given threshold and cell size. */\nexport default class ContourLayer extends GridAggregationLayer<\n ExtraPropsT & Required<_ContourLayerProps>\n> {\n static layerName = 'ContourLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n super.initializeAggregationLayer({\n dimensions: DIMENSIONS\n });\n this.setState({\n contourData: {},\n projectPoints: false,\n weights: {\n count: {\n size: 1,\n operation: AGGREGATION_OPERATION.SUM\n }\n }\n });\n const attributeManager = this.getAttributeManager()!;\n attributeManager.add({\n [POSITION_ATTRIBUTE_NAME]: {\n size: 3,\n accessor: 'getPosition',\n type: GL.DOUBLE,\n fp64: this.use64bitPositions()\n },\n // this attribute is used in gpu aggregation path only\n count: {size: 3, accessor: 'getWeight'}\n });\n }\n\n updateState(opts: UpdateParameters): void {\n super.updateState(opts);\n let contoursChanged = false;\n const {oldProps, props} = opts;\n const {aggregationDirty} = this.state;\n\n if (oldProps.contours !== props.contours || oldProps.zOffset !== props.zOffset) {\n contoursChanged = true;\n this._updateThresholdData(opts.props);\n }\n\n if (this.getNumInstances() > 0 && (aggregationDirty || contoursChanged)) {\n this._generateContours();\n }\n }\n\n renderLayers(): Layer[] {\n const {contourSegments, contourPolygons} = this.state.contourData;\n\n const LinesSubLayerClass = this.getSubLayerClass('lines', LineLayer);\n const BandsSubLayerClass = this.getSubLayerClass('bands', SolidPolygonLayer);\n\n // Contour lines layer\n const lineLayer =\n contourSegments &&\n contourSegments.length > 0 &&\n new LinesSubLayerClass(\n this.getSubLayerProps({\n id: 'lines'\n }),\n {\n data: this.state.contourData.contourSegments,\n getSourcePosition: d => d.start,\n getTargetPosition: d => d.end,\n getColor: d => d.contour.color || DEFAULT_COLOR,\n getWidth: d => d.contour.strokeWidth || DEFAULT_STROKE_WIDTH\n }\n );\n\n // Contour bands layer\n const bandsLayer =\n contourPolygons &&\n contourPolygons.length > 0 &&\n new BandsSubLayerClass(\n this.getSubLayerProps({\n id: 'bands'\n }),\n {\n data: this.state.contourData.contourPolygons,\n getPolygon: d => d.vertices,\n getFillColor: d => d.contour.color || DEFAULT_COLOR\n }\n );\n\n return [lineLayer, bandsLayer];\n }\n\n // Aggregation Overrides\n\n /* eslint-disable max-statements, complexity */\n updateAggregationState(opts) {\n const {props, oldProps} = opts;\n const {cellSize, coordinateSystem} = props;\n const {viewport} = this.context;\n const cellSizeChanged = oldProps.cellSize !== cellSize;\n let gpuAggregation = props.gpuAggregation;\n if (this.state.gpuAggregation !== props.gpuAggregation) {\n if (gpuAggregation && !GPUGridAggregator.isSupported(this.context.gl)) {\n log.warn('GPU Grid Aggregation not supported, falling back to CPU')();\n gpuAggregation = false;\n }\n }\n const gpuAggregationChanged = gpuAggregation !== this.state.gpuAggregation;\n this.setState({\n gpuAggregation\n });\n\n const {dimensions} = this.state;\n const positionsChanged = this.isAttributeChanged(POSITION_ATTRIBUTE_NAME);\n const {data, weights} = dimensions;\n\n let {boundingBox} = this.state;\n if (positionsChanged) {\n boundingBox = getBoundingBox(this.getAttributes(), this.getNumInstances());\n this.setState({boundingBox});\n }\n if (positionsChanged || cellSizeChanged) {\n const {gridOffset, translation, width, height, numCol, numRow} = getGridParams(\n boundingBox,\n cellSize,\n viewport,\n coordinateSystem\n );\n this.allocateResources(numRow, numCol);\n this.setState({\n gridOffset,\n boundingBox,\n translation,\n posOffset: translation.slice(), // Used for CPU aggregation, to offset points\n gridOrigin: [-1 * translation[0], -1 * translation[1]],\n width,\n height,\n numCol,\n numRow\n });\n }\n\n const aggregationDataDirty =\n positionsChanged ||\n gpuAggregationChanged ||\n this.isAggregationDirty(opts, {\n dimension: data,\n compareAll: gpuAggregation // check for all (including extentions props) when using gpu aggregation\n });\n const aggregationWeightsDirty = this.isAggregationDirty(opts, {\n dimension: weights\n });\n\n if (aggregationWeightsDirty) {\n this._updateAccessors(opts);\n }\n if (aggregationDataDirty || aggregationWeightsDirty) {\n this._resetResults();\n }\n this.setState({\n aggregationDataDirty,\n aggregationWeightsDirty\n });\n }\n /* eslint-enable max-statements, complexity */\n\n // Private (Aggregation)\n\n private _updateAccessors(opts) {\n const {getWeight, aggregation, data} = opts.props;\n const {count} = this.state.weights;\n if (count) {\n count.getWeight = getWeight;\n count.operation = AGGREGATION_OPERATION[aggregation];\n }\n this.setState({getValue: getValueFunc(aggregation, getWeight, {data})});\n }\n\n private _resetResults() {\n const {count} = this.state.weights;\n if (count) {\n count.aggregationData = null;\n }\n }\n\n // Private (Contours)\n\n private _generateContours() {\n const {numCol, numRow, gridOrigin, gridOffset, thresholdData} = this.state;\n const {count} = this.state.weights;\n let {aggregationData} = count;\n if (!aggregationData) {\n aggregationData = count.aggregationBuffer.getData();\n count.aggregationData = aggregationData;\n }\n\n const {cellWeights} = GPUGridAggregator.getCellData({countsData: aggregationData});\n const contourData = generateContours({\n thresholdData,\n cellWeights,\n gridSize: [numCol, numRow],\n gridOrigin,\n cellSize: [gridOffset.xOffset, gridOffset.yOffset]\n });\n\n // contourData contains both iso-lines and iso-bands if requested.\n this.setState({contourData});\n }\n\n private _updateThresholdData(props) {\n const {contours, zOffset} = props;\n const count = contours.length;\n const thresholdData = new Array(count);\n for (let i = 0; i < count; i++) {\n const contour = contours[i];\n thresholdData[i] = {\n contour,\n zIndex: contour.zIndex || i,\n zOffset\n };\n }\n this.setState({thresholdData});\n }\n}\n","import {getCode, getVertices, CONTOUR_TYPE} from './marching-squares';\n\n// Given all the cell weights, generates contours for each threshold.\n/* eslint-disable max-depth */\nexport function generateContours({\n thresholdData,\n cellWeights,\n gridSize,\n gridOrigin,\n cellSize\n}: {\n thresholdData: any;\n cellWeights: Float32Array;\n gridSize: number[];\n gridOrigin: number[];\n cellSize: number[];\n}) {\n const contourSegments: {start: number[]; end: number[]; contour: any}[] = [];\n const contourPolygons: {vertices: number[][]; contour: any}[] = [];\n const width = gridSize[0];\n const height = gridSize[1];\n let segmentIndex = 0;\n let polygonIndex = 0;\n\n for (const data of thresholdData) {\n const {contour} = data;\n const {threshold} = contour;\n for (let x = -1; x < width; x++) {\n for (let y = -1; y < height; y++) {\n // Get the MarchingSquares code based on neighbor cell weights.\n const {code, meanCode} = getCode({\n cellWeights,\n threshold,\n x,\n y,\n width,\n height\n });\n const opts = {\n type: CONTOUR_TYPE.ISO_BANDS,\n gridOrigin,\n cellSize,\n x,\n y,\n width,\n height,\n code,\n meanCode,\n thresholdData: data\n };\n if (Array.isArray(threshold)) {\n opts.type = CONTOUR_TYPE.ISO_BANDS;\n const polygons = getVertices(opts) as number[][][];\n for (const polygon of polygons) {\n contourPolygons[polygonIndex++] = {\n vertices: polygon,\n contour\n };\n }\n } else {\n // Get the intersection vertices based on MarchingSquares code.\n opts.type = CONTOUR_TYPE.ISO_LINES;\n const vertices = getVertices(opts) as number[][];\n for (let i = 0; i < vertices.length; i += 2) {\n contourSegments[segmentIndex++] = {\n start: vertices[i],\n end: vertices[i + 1],\n contour\n };\n }\n }\n }\n }\n }\n return {contourSegments, contourPolygons};\n}\n/* eslint-enable max-depth */\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Layer,\n fp64LowPart,\n project32,\n gouraudLighting,\n picking,\n LayerContext,\n LayerProps,\n DefaultProps\n} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, CubeGeometry, Buffer} from '@luma.gl/core';\nimport {fp64arithmetic} from '@luma.gl/shadertools';\nimport {defaultColorRange, colorRangeToFlatArray} from '../utils/color-utils';\nimport type {_GPUGridLayerProps} from './gpu-grid-layer';\nimport vs from './gpu-grid-cell-layer-vertex.glsl';\nimport fs from './gpu-grid-cell-layer-fragment.glsl';\n\nconst COLOR_DATA_UBO_INDEX = 0;\nconst ELEVATION_DATA_UBO_INDEX = 1;\n\nconst defaultProps: DefaultProps<_GPUGridCellLayerProps & LayerProps> = {\n // color\n colorDomain: null,\n colorRange: defaultColorRange,\n\n // elevation\n elevationDomain: null,\n elevationRange: [0, 1000],\n elevationScale: {type: 'number', min: 0, value: 1},\n\n // grid\n gridSize: {type: 'array', value: [1, 1]},\n gridOrigin: {type: 'array', value: [0, 0]},\n gridOffset: {type: 'array', value: [0, 0]},\n\n cellSize: {type: 'number', min: 0, max: 1000, value: 1000},\n offset: {type: 'array', value: [1, 1]},\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n extruded: true,\n\n material: true // Use lighting module defaults\n};\n\ntype _GPUGridCellLayerProps = _GPUGridLayerProps & {\n offset: number[];\n gridSize: number[];\n gridOrigin: number[];\n gridOffset: number[];\n colorMaxMinBuffer: Buffer;\n elevationMaxMinBuffer: Buffer;\n};\n\nexport default class GPUGridCellLayer extends Layer<_GPUGridCellLayerProps> {\n static layerName = 'GPUGridCellLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n return super.getShaders({\n vs,\n fs,\n modules: [project32, gouraudLighting, picking, fp64arithmetic]\n });\n }\n\n initializeState({gl}: LayerContext) {\n const attributeManager = this.getAttributeManager()!;\n attributeManager.addInstanced({\n colors: {\n size: 4,\n noAlloc: true\n },\n elevations: {\n size: 4,\n noAlloc: true\n }\n });\n const model = this._getModel(gl);\n this._setupUniformBuffer(model);\n this.setState({model});\n }\n\n _getModel(gl: WebGLRenderingContext): Model {\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new CubeGeometry(),\n isInstanced: true\n });\n }\n\n draw({uniforms}) {\n const {\n cellSize,\n offset,\n extruded,\n elevationScale,\n coverage,\n gridSize,\n gridOrigin,\n gridOffset,\n elevationRange,\n colorMaxMinBuffer,\n elevationMaxMinBuffer\n } = this.props;\n\n const gridOriginLow = [fp64LowPart(gridOrigin[0]), fp64LowPart(gridOrigin[1])];\n const gridOffsetLow = [fp64LowPart(gridOffset[0]), fp64LowPart(gridOffset[1])];\n const domainUniforms = this.getDomainUniforms();\n const colorRange = colorRangeToFlatArray(this.props.colorRange);\n this.bindUniformBuffers(colorMaxMinBuffer, elevationMaxMinBuffer);\n this.state.model\n .setUniforms(uniforms)\n .setUniforms(domainUniforms)\n .setUniforms({\n cellSize,\n offset,\n extruded,\n elevationScale,\n coverage,\n gridSize,\n gridOrigin,\n gridOriginLow,\n gridOffset,\n gridOffsetLow,\n colorRange,\n elevationRange\n })\n .draw();\n this.unbindUniformBuffers(colorMaxMinBuffer, elevationMaxMinBuffer);\n }\n\n bindUniformBuffers(colorMaxMinBuffer, elevationMaxMinBuffer) {\n colorMaxMinBuffer.bind({target: GL.UNIFORM_BUFFER, index: COLOR_DATA_UBO_INDEX});\n elevationMaxMinBuffer.bind({target: GL.UNIFORM_BUFFER, index: ELEVATION_DATA_UBO_INDEX});\n }\n\n unbindUniformBuffers(colorMaxMinBuffer, elevationMaxMinBuffer) {\n colorMaxMinBuffer.unbind({target: GL.UNIFORM_BUFFER, index: COLOR_DATA_UBO_INDEX});\n elevationMaxMinBuffer.unbind({target: GL.UNIFORM_BUFFER, index: ELEVATION_DATA_UBO_INDEX});\n }\n\n getDomainUniforms() {\n const {colorDomain, elevationDomain} = this.props;\n const domainUniforms: Record = {};\n if (colorDomain !== null) {\n domainUniforms.colorDomainValid = true;\n domainUniforms.colorDomain = colorDomain;\n } else {\n domainUniforms.colorDomainValid = false;\n }\n if (elevationDomain !== null) {\n domainUniforms.elevationDomainValid = true;\n domainUniforms.elevationDomain = elevationDomain;\n } else {\n domainUniforms.elevationDomainValid = false;\n }\n return domainUniforms;\n }\n\n private _setupUniformBuffer(model: Model): void {\n const gl = this.context.gl as WebGL2RenderingContext;\n const programHandle = model.program.handle;\n\n const colorIndex = gl.getUniformBlockIndex(programHandle, 'ColorData');\n const elevationIndex = gl.getUniformBlockIndex(programHandle, 'ElevationData');\n gl.uniformBlockBinding(programHandle, colorIndex, COLOR_DATA_UBO_INDEX);\n gl.uniformBlockBinding(programHandle, elevationIndex, ELEVATION_DATA_UBO_INDEX);\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// Inspired by screen-grid-layer vertex shader in deck.gl\n\nexport default `\\\n#version 300 es\n#define SHADER_NAME gpu-grid-cell-layer-vertex-shader\n#define RANGE_COUNT 6\n\nin vec3 positions;\nin vec3 normals;\n\nin vec4 colors;\nin vec4 elevations;\nin vec3 instancePickingColors;\n\n// Custom uniforms\nuniform vec2 offset;\nuniform bool extruded;\nuniform float cellSize;\nuniform float coverage;\nuniform float opacity;\nuniform float elevationScale;\n\nuniform ivec2 gridSize;\nuniform vec2 gridOrigin;\nuniform vec2 gridOriginLow;\nuniform vec2 gridOffset;\nuniform vec2 gridOffsetLow;\nuniform vec4 colorRange[RANGE_COUNT];\nuniform vec2 elevationRange;\n\n// Domain uniforms\nuniform vec2 colorDomain;\nuniform bool colorDomainValid;\nuniform vec2 elevationDomain;\nuniform bool elevationDomainValid;\n\nlayout(std140) uniform;\nuniform ColorData\n{\n vec4 maxMinCount;\n} colorData;\nuniform ElevationData\n{\n vec4 maxMinCount;\n} elevationData;\n\n#define EPSILON 0.00001\n\n// Result\nout vec4 vColor;\n\nvec4 quantizeScale(vec2 domain, vec4 range[RANGE_COUNT], float value) {\n vec4 outColor = vec4(0., 0., 0., 0.);\n if (value >= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n float domainRange = domain.y - domain.x;\n if (domainRange <= 0.) {\n outColor = colorRange[0];\n } else {\n float rangeCount = float(RANGE_COUNT);\n float rangeStep = domainRange / rangeCount;\n float idx = floor((value - domain.x) / rangeStep);\n idx = clamp(idx, 0., rangeCount - 1.);\n int intIdx = int(idx);\n outColor = colorRange[intIdx];\n }\n }\n return outColor;\n}\n\nfloat linearScale(vec2 domain, vec2 range, float value) {\n if (value >= (domain.x - EPSILON) && value <= (domain.y + EPSILON)) {\n return ((value - domain.x) / (domain.y - domain.x)) * (range.y - range.x) + range.x;\n }\n return -1.;\n}\n\nvoid main(void) {\n vec2 clrDomain = colorDomainValid ? colorDomain : vec2(colorData.maxMinCount.a, colorData.maxMinCount.r);\n vec4 color = quantizeScale(clrDomain, colorRange, colors.r);\n\n float elevation = 0.0;\n\n if (extruded) {\n vec2 elvDomain = elevationDomainValid ? elevationDomain : vec2(elevationData.maxMinCount.a, elevationData.maxMinCount.r);\n elevation = linearScale(elvDomain, elevationRange, elevations.r);\n elevation = elevation * (positions.z + 1.0) / 2.0 * elevationScale;\n }\n\n // if aggregated color or elevation is 0 do not render\n float shouldRender = float(color.r > 0.0 && elevations.r >= 0.0);\n float dotRadius = cellSize / 2. * coverage * shouldRender;\n\n int yIndex = (gl_InstanceID / gridSize[0]);\n int xIndex = gl_InstanceID - (yIndex * gridSize[0]);\n\n vec2 instancePositionXFP64 = mul_fp64(vec2(gridOffset[0], gridOffsetLow[0]), vec2(float(xIndex), 0.));\n instancePositionXFP64 = sum_fp64(instancePositionXFP64, vec2(gridOrigin[0], gridOriginLow[0]));\n vec2 instancePositionYFP64 = mul_fp64(vec2(gridOffset[1], gridOffsetLow[1]), vec2(float(yIndex), 0.));\n instancePositionYFP64 = sum_fp64(instancePositionYFP64, vec2(gridOrigin[1], gridOriginLow[1]));\n\n vec3 centroidPosition = vec3(instancePositionXFP64[0], instancePositionYFP64[0], elevation);\n vec3 centroidPosition64Low = vec3(instancePositionXFP64[1], instancePositionYFP64[1], 0.0);\n geometry.worldPosition = centroidPosition;\n vec3 pos = vec3(project_size(positions.xy + offset) * dotRadius, 0.);\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n\n gl_Position = project_position_to_clipspace(centroidPosition, centroidPosition64Low, pos, geometry.position);\n\n // Light calculations\n // Worldspace is the linear space after Mercator projection\n\n vec3 normals_commonspace = project_normal(normals);\n\n if (extruded) {\n vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, normals_commonspace);\n vColor = vec4(lightColor, color.a * opacity) / 255.;\n } else {\n vColor = vec4(color.rgb, color.a * opacity) / 255.;\n }\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#version 300 es\n#define SHADER_NAME gpu-grid-cell-layer-fragment-shader\n\nprecision highp float;\n\nin vec4 vColor;\n\nout vec4 fragColor;\n\nvoid main(void) {\n fragColor = vColor;\n fragColor = picking_filterColor(fragColor);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {Buffer} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport {\n Accessor,\n AccessorFunction,\n Color,\n Material,\n GetPickingInfoParams,\n LayerContext,\n log,\n PickingInfo,\n Position,\n DefaultProps\n} from '@deck.gl/core';\n\nimport GPUGridAggregator from '../utils/gpu-grid-aggregation/gpu-grid-aggregator';\nimport {AGGREGATION_OPERATION} from '../utils/aggregation-operation-utils';\nimport {defaultColorRange, colorRangeToFlatArray} from '../utils/color-utils';\nimport GPUGridCellLayer from './gpu-grid-cell-layer';\nimport {pointToDensityGridDataCPU} from './../cpu-grid-layer/grid-aggregator';\nimport GridAggregationLayer, {GridAggregationLayerProps} from '../grid-aggregation-layer';\nimport {getBoundingBox, getGridParams} from '../utils/grid-aggregation-utils';\n\nconst defaultProps: DefaultProps = {\n // color\n colorDomain: null,\n colorRange: defaultColorRange,\n getColorWeight: {type: 'accessor', value: 1},\n colorAggregation: 'SUM',\n\n // elevation\n elevationDomain: null,\n elevationRange: [0, 1000],\n getElevationWeight: {type: 'accessor', value: 1},\n elevationAggregation: 'SUM',\n elevationScale: {type: 'number', min: 0, value: 1},\n\n // grid\n cellSize: {type: 'number', min: 1, max: 1000, value: 1000},\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n getPosition: {type: 'accessor', value: x => x.position},\n extruded: false,\n\n // Optional material for 'lighting' shader module\n material: true\n};\n\n// This layer only perform GPU aggregation, no need to seperate data and weight props\n// aggregation will be dirty when any of the props are changed.\n\nconst DIMENSIONS = {\n data: {\n props: ['cellSize', 'colorAggregation', 'elevationAggregation']\n }\n // rest of the changes are detected by `state.attributesChanged`\n};\nconst POSITION_ATTRIBUTE_NAME = 'positions';\n\n/** All properties supported by GPUGridLayer. */\nexport type GPUGridLayerProps = _GPUGridLayerProps &\n GridAggregationLayerProps;\n\n/** Properties added by GPUGridLayer. */\nexport type _GPUGridLayerProps = {\n /**\n * Size of each cell in meters.\n * @default 1000\n */\n cellSize?: number;\n\n /**\n * Color scale domain, default is set to the extent of aggregated weights in each cell.\n * @default [min(colorWeight), max(colorWeight)]\n */\n colorDomain?: [number, number] | null;\n\n /**\n * Default: [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6) `6-class YlOrRd`\n */\n colorRange?: Color[];\n\n /**\n * Cell size multiplier, clamped between 0 - 1.\n * @default 1\n */\n coverage?: number;\n\n /**\n * Elevation scale input domain, default is set to between 0 and the max of aggregated weights in each cell.\n * @default [0, max(elevationWeight)]\n */\n elevationDomain?: [number, number] | null;\n\n /**\n * Elevation scale output range.\n * @default [0, 1000]\n */\n elevationRange?: [number, number];\n\n /**\n * Cell elevation multiplier.\n * @default 1\n */\n elevationScale?: number;\n\n /**\n * Whether to enable cell elevation. If set to false, all cell will be flat.\n * @default true\n */\n extruded?: boolean;\n\n /**\n * Material settings for lighting effect. Applies if `extruded: true`.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n\n /**\n * Defines the operation used to aggregate all data object weights to calculate a cell's color value.\n * @default 'SUM'\n */\n colorAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n\n /**\n * Defines the operation used to aggregate all data object weights to calculate a cell's elevation value.\n * @default 'SUM'\n */\n elevationAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n\n /**\n * Method called to retrieve the position of each object.\n * @default object => object.position\n */\n getPosition?: AccessorFunction;\n\n /**\n * The weight of a data object used to calculate the color value for a cell.\n * @default 1\n */\n getColorWeight?: Accessor;\n\n /**\n * The weight of a data object used to calculate the elevation value for a cell.\n * @default 1\n */\n getElevationWeight?: Accessor;\n};\n\n/** Aggregate data into a grid-based heatmap. Aggregation is performed on GPU (WebGL2 only). */\nexport default class GPUGridLayer extends GridAggregationLayer<\n ExtraPropsT & Required<_GPUGridLayerProps>\n> {\n static layerName = 'GPUGridLayer';\n static defaultProps = defaultProps;\n\n initializeState({gl}: LayerContext): void {\n const isSupported = GPUGridAggregator.isSupported(gl);\n if (!isSupported) {\n log.error('GPUGridLayer is not supported on this browser, use GridLayer instead')();\n }\n super.initializeAggregationLayer({\n dimensions: DIMENSIONS\n });\n this.setState({\n gpuAggregation: true,\n projectPoints: false, // aggregation in world space\n isSupported,\n weights: {\n color: {\n needMin: true,\n needMax: true,\n combineMaxMin: true,\n maxMinBuffer: new Buffer(gl, {\n byteLength: 4 * 4,\n accessor: {size: 4, type: GL.FLOAT, divisor: 1}\n })\n },\n elevation: {\n needMin: true,\n needMax: true,\n combineMaxMin: true,\n maxMinBuffer: new Buffer(gl, {\n byteLength: 4 * 4,\n accessor: {size: 4, type: GL.FLOAT, divisor: 1}\n })\n }\n },\n positionAttributeName: 'positions'\n });\n const attributeManager = this.getAttributeManager()!;\n attributeManager.add({\n [POSITION_ATTRIBUTE_NAME]: {\n size: 3,\n accessor: 'getPosition',\n type: GL.DOUBLE,\n fp64: this.use64bitPositions()\n },\n color: {size: 3, accessor: 'getColorWeight'},\n elevation: {size: 3, accessor: 'getElevationWeight'}\n });\n }\n\n updateState(opts) {\n if (this.state.isSupported === false) {\n // Skip update, layer not supported\n return;\n }\n super.updateState(opts);\n const {aggregationDirty} = this.state;\n if (aggregationDirty) {\n // reset cached CPU Aggregation results (used for picking)\n this.setState({\n gridHash: null\n });\n }\n }\n\n getHashKeyForIndex(index: number): string {\n const {numRow, numCol, boundingBox, gridOffset} = this.state;\n const gridSize = [numCol, numRow];\n const gridOrigin = [boundingBox.xMin, boundingBox.yMin];\n const cellSize = [gridOffset.xOffset, gridOffset.yOffset];\n\n const yIndex = Math.floor(index / gridSize[0]);\n const xIndex = index - yIndex * gridSize[0];\n // This will match the index to the hash-key to access aggregation data from CPU aggregation results.\n const latIdx = Math.floor(\n (yIndex * cellSize[1] + gridOrigin[1] + 90 + cellSize[1] / 2) / cellSize[1]\n );\n const lonIdx = Math.floor(\n (xIndex * cellSize[0] + gridOrigin[0] + 180 + cellSize[0] / 2) / cellSize[0]\n );\n return `${latIdx}-${lonIdx}`;\n }\n\n getPositionForIndex(index: number): Position {\n const {numRow, numCol, boundingBox, gridOffset} = this.state;\n const gridSize = [numCol, numRow];\n const gridOrigin = [boundingBox.xMin, boundingBox.yMin];\n const cellSize = [gridOffset.xOffset, gridOffset.yOffset];\n\n const yIndex = Math.floor(index / gridSize[0]);\n const xIndex = index - yIndex * gridSize[0];\n const yPos = yIndex * cellSize[1] + gridOrigin[1];\n const xPos = xIndex * cellSize[0] + gridOrigin[0];\n return [xPos, yPos];\n }\n\n getPickingInfo({info, mode}: GetPickingInfoParams): PickingInfo {\n const {index} = info;\n let object: any = null;\n if (index >= 0) {\n const {gpuGridAggregator} = this.state;\n const position = this.getPositionForIndex(index);\n const colorInfo = GPUGridAggregator.getAggregationData({\n pixelIndex: index,\n ...gpuGridAggregator.getData('color')\n });\n const elevationInfo = GPUGridAggregator.getAggregationData({\n pixelIndex: index,\n ...gpuGridAggregator.getData('elevation')\n });\n\n object = {\n colorValue: colorInfo.cellWeight,\n elevationValue: elevationInfo.cellWeight,\n count: colorInfo.cellCount || elevationInfo.cellCount,\n position,\n totalCount: colorInfo.totalCount || elevationInfo.totalCount\n };\n if (mode !== 'hover') {\n // perform CPU aggregation for full list of points for each cell\n const {props} = this;\n let {gridHash} = this.state;\n if (!gridHash) {\n const {gridOffset, translation, boundingBox} = this.state;\n const {viewport} = this.context;\n const attributes = this.getAttributes();\n const cpuAggregation = pointToDensityGridDataCPU(props as any, {\n gridOffset,\n attributes,\n viewport,\n translation,\n boundingBox\n });\n gridHash = cpuAggregation.gridHash;\n this.setState({gridHash});\n }\n const key = this.getHashKeyForIndex(index);\n const cpuAggregationData = gridHash[key];\n Object.assign(object, cpuAggregationData);\n }\n }\n\n // override object with picked cell\n info.picked = Boolean(object);\n info.object = object;\n\n return info;\n }\n\n renderLayers() {\n if (!this.state.isSupported) {\n return null;\n }\n const {\n elevationScale,\n extruded,\n cellSize: cellSizeMeters,\n coverage,\n material,\n elevationRange,\n colorDomain,\n elevationDomain\n } = this.props;\n\n const {weights, numRow, numCol, gridOrigin, gridOffset} = this.state;\n const {color, elevation} = weights;\n const colorRange = colorRangeToFlatArray(this.props.colorRange);\n\n const SubLayerClass = this.getSubLayerClass('gpu-grid-cell', GPUGridCellLayer);\n\n return new SubLayerClass(\n {\n gridSize: [numCol, numRow],\n gridOrigin,\n gridOffset: [gridOffset.xOffset, gridOffset.yOffset],\n colorRange,\n elevationRange,\n colorDomain,\n elevationDomain,\n\n cellSize: cellSizeMeters,\n coverage,\n material,\n elevationScale,\n extruded\n },\n this.getSubLayerProps({\n id: 'gpu-grid-cell'\n }),\n {\n data: {\n attributes: {\n colors: color.aggregationBuffer,\n elevations: elevation.aggregationBuffer\n }\n },\n colorMaxMinBuffer: color.maxMinBuffer,\n elevationMaxMinBuffer: elevation.maxMinBuffer,\n numInstances: numCol * numRow\n }\n );\n }\n\n finalizeState(context: LayerContext) {\n const {color, elevation} = this.state.weights;\n [color, elevation].forEach(weight => {\n const {aggregationBuffer, maxMinBuffer} = weight;\n maxMinBuffer.delete();\n aggregationBuffer?.delete();\n });\n super.finalizeState(context);\n }\n\n // Aggregation Overrides\n\n updateAggregationState(opts) {\n const {props, oldProps} = opts;\n const {cellSize, coordinateSystem} = props;\n const {viewport} = this.context;\n const cellSizeChanged = oldProps.cellSize !== cellSize;\n const {dimensions} = this.state;\n\n const positionsChanged = this.isAttributeChanged(POSITION_ATTRIBUTE_NAME);\n // any attribute changed\n const attributesChanged = positionsChanged || this.isAttributeChanged();\n\n let {boundingBox} = this.state;\n if (positionsChanged) {\n boundingBox = getBoundingBox(this.getAttributes(), this.getNumInstances());\n this.setState({boundingBox});\n }\n if (positionsChanged || cellSizeChanged) {\n const {gridOffset, translation, width, height, numCol, numRow} = getGridParams(\n boundingBox,\n cellSize,\n viewport,\n coordinateSystem\n );\n this.allocateResources(numRow, numCol);\n this.setState({\n gridOffset,\n translation,\n gridOrigin: [-1 * translation[0], -1 * translation[1]],\n width,\n height,\n numCol,\n numRow\n });\n }\n\n const aggregationDataDirty =\n attributesChanged ||\n this.isAggregationDirty(opts, {\n dimension: dimensions.data,\n compareAll: true\n });\n\n if (aggregationDataDirty) {\n this._updateAccessors(opts);\n }\n this.setState({\n aggregationDataDirty\n });\n }\n\n // Private\n\n _updateAccessors(opts) {\n const {colorAggregation, elevationAggregation} = opts.props;\n const {color, elevation} = this.state.weights;\n color.operation = AGGREGATION_OPERATION[colorAggregation];\n elevation.operation = AGGREGATION_OPERATION[elevationAggregation];\n }\n}\n","import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport GPUGridAggregator from '../utils/gpu-grid-aggregation/gpu-grid-aggregator';\nimport GPUGridLayer, {_GPUGridLayerProps} from '../gpu-grid-layer/gpu-grid-layer';\nimport CPUGridLayer, {_CPUGridLayerProps} from '../cpu-grid-layer/cpu-grid-layer';\n\nconst defaultProps: DefaultProps = {\n ...GPUGridLayer.defaultProps,\n ...CPUGridLayer.defaultProps,\n gpuAggregation: false\n};\n\n/** All properties supported by GridLayer. */\nexport type GridLayerProps = _GridLayerProps & CompositeLayerProps;\n\n/** Properties added by GridLayer. */\ntype _GridLayerProps = _CPUGridLayerProps &\n _GPUGridLayerProps & {\n /**\n * Whether the aggregation should be performed in high-precision 64-bit mode.\n * @default false\n */\n fp64?: boolean;\n\n /**\n * When set to true, aggregation is performed on GPU, provided other conditions are met.\n * @default false\n */\n gpuAggregation?: boolean;\n };\n\n/** Aggregate data into a grid-based heatmap. The color and height of a cell are determined based on the objects it contains. */\nexport default class GridLayer extends CompositeLayer<\n ExtraPropsT & Required<_GridLayerProps>\n> {\n static layerName = 'GridLayer';\n static defaultProps = defaultProps;\n\n state!: CompositeLayer['state'] & {\n useGPUAggregation: boolean;\n };\n\n initializeState() {\n this.state = {\n useGPUAggregation: true\n };\n }\n\n updateState({props}: UpdateParameters) {\n this.setState({\n useGPUAggregation: this.canUseGPUAggregation(props)\n });\n }\n\n renderLayers(): Layer {\n const {data, updateTriggers} = this.props;\n const id = this.state.useGPUAggregation ? 'GPU' : 'CPU';\n const LayerType = this.state.useGPUAggregation\n ? this.getSubLayerClass('GPU', GPUGridLayer)\n : this.getSubLayerClass('CPU', CPUGridLayer);\n return new LayerType(\n this.props,\n this.getSubLayerProps({\n id,\n updateTriggers\n }),\n {\n data\n }\n );\n }\n\n // Private methods\n\n canUseGPUAggregation(props: GridLayer['props']) {\n const {\n gpuAggregation,\n lowerPercentile,\n upperPercentile,\n getColorValue,\n getElevationValue,\n colorScaleType\n } = props;\n if (!gpuAggregation) {\n // cpu aggregation is requested\n return false;\n }\n if (!GPUGridAggregator.isSupported(this.context.gl)) {\n return false;\n }\n if (lowerPercentile !== 0 || upperPercentile !== 100) {\n // percentile calculations requires sorting not supported on GPU\n return false;\n }\n if (getColorValue !== null || getElevationValue !== null) {\n // accessor for custom color or elevation calculation is specified\n return false;\n }\n if (colorScaleType === 'quantile' || colorScaleType === 'ordinal') {\n // quantile and ordinal scales are not supported on GPU\n return false;\n }\n return true;\n }\n}\n","import GL from '@luma.gl/constants';\nimport {isWebGL2} from '@luma.gl/core';\n\nexport function getBounds(points: number[][]): number[] {\n // Now build bounding box in world space (aligned to world coordiante system)\n const x = points.map(p => p[0]);\n const y = points.map(p => p[1]);\n\n const xMin = Math.min.apply(null, x);\n const xMax = Math.max.apply(null, x);\n const yMin = Math.min.apply(null, y);\n const yMax = Math.max.apply(null, y);\n\n return [xMin, yMin, xMax, yMax];\n}\n\n// true if currentBounds contains targetBounds, false otherwise\nexport function boundsContain(currentBounds: number[], targetBounds: number[]): boolean {\n if (\n targetBounds[0] >= currentBounds[0] &&\n targetBounds[2] <= currentBounds[2] &&\n targetBounds[1] >= currentBounds[1] &&\n targetBounds[3] <= currentBounds[3]\n ) {\n return true;\n }\n return false;\n}\n\nconst scratchArray = new Float32Array(12);\n\n// For given rectangle bounds generates two triangles vertices that coverit completely\nexport function packVertices(points: number[][], dimensions: number = 2): Float32Array {\n let index = 0;\n for (const point of points) {\n for (let i = 0; i < dimensions; i++) {\n scratchArray[index++] = point[i] || 0;\n }\n }\n return scratchArray;\n}\n\n// Expands boundingBox:[xMin, yMin, xMax, yMax] to match aspect ratio of given width and height\nexport function scaleToAspectRatio(boundingBox: number[], width: number, height: number): number[] {\n const [xMin, yMin, xMax, yMax] = boundingBox;\n\n const currentWidth = xMax - xMin;\n const currentHeight = yMax - yMin;\n\n let newWidth = currentWidth;\n let newHeight = currentHeight;\n if (currentWidth / currentHeight < width / height) {\n // expand bounding box width\n newWidth = (width / height) * currentHeight;\n } else {\n newHeight = (height / width) * currentWidth;\n }\n\n if (newWidth < width) {\n newWidth = width;\n newHeight = height;\n }\n\n const xCenter = (xMax + xMin) / 2;\n const yCenter = (yMax + yMin) / 2;\n\n return [\n xCenter - newWidth / 2,\n yCenter - newHeight / 2,\n xCenter + newWidth / 2,\n yCenter + newHeight / 2\n ];\n}\n\n// Get texture coordiante of point inside a bounding box\nexport function getTextureCoordinates(point: number[], bounds: number[]) {\n const [xMin, yMin, xMax, yMax] = bounds;\n return [(point[0] - xMin) / (xMax - xMin), (point[1] - yMin) / (yMax - yMin)];\n}\n\n// Returns format and type for creating texture objects\nexport function getTextureParams({gl, floatTargetSupport}) {\n return floatTargetSupport\n ? {\n // format: should be RGBA32F on WebGL2 (float textures), RGBA in WebGL1 for float or non float textures\n format: isWebGL2(gl) ? GL.RGBA32F : GL.RGBA,\n type: GL.FLOAT\n }\n : {\n format: GL.RGBA,\n type: GL.UNSIGNED_BYTE\n };\n}\n","// Copyright (c) 2015 - 2019 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry, Texture2D} from '@luma.gl/core';\nimport {Layer, LayerContext, project32} from '@deck.gl/core';\nimport vs from './triangle-layer-vertex.glsl';\nimport fs from './triangle-layer-fragment.glsl';\n\ntype _TriangleLayerProps = {\n colorDomain: number[];\n aggregationMode: string;\n threshold: number;\n intensity: number;\n vertexCount: number;\n colorTexture: Texture2D;\n maxTexture: Texture2D;\n texture: Texture2D;\n};\n\nexport default class TriangleLayer extends Layer<_TriangleLayerProps> {\n static layerName = 'TriangleLayer';\n\n getShaders() {\n return {vs, fs, modules: [project32]};\n }\n\n initializeState({gl}: LayerContext): void {\n const attributeManager = this.getAttributeManager()!;\n attributeManager.add({\n positions: {size: 3, noAlloc: true},\n texCoords: {size: 2, noAlloc: true}\n });\n this.setState({\n model: this._getModel(gl)\n });\n }\n\n _getModel(gl: WebGLRenderingContext): Model {\n const {vertexCount} = this.props;\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_FAN,\n vertexCount\n })\n });\n }\n\n draw({uniforms}): void {\n const {model} = this.state;\n\n const {texture, maxTexture, colorTexture, intensity, threshold, aggregationMode, colorDomain} =\n this.props;\n\n model\n .setUniforms({\n ...uniforms,\n texture,\n maxTexture,\n colorTexture,\n intensity,\n threshold,\n aggregationMode,\n colorDomain\n })\n .draw();\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// Inspired by screen-grid-layer vertex shader in deck.gl\n\nexport default `\\\n#define SHADER_NAME heatp-map-layer-vertex-shader\n\nuniform sampler2D maxTexture;\nuniform float intensity;\nuniform vec2 colorDomain;\nuniform float threshold;\nuniform float aggregationMode;\n\nattribute vec3 positions;\nattribute vec2 texCoords;\n\nvarying vec2 vTexCoords;\nvarying float vIntensityMin;\nvarying float vIntensityMax;\n\nvoid main(void) {\n gl_Position = project_position_to_clipspace(positions, vec3(0.0), vec3(0.0));\n vTexCoords = texCoords;\n vec4 maxTexture = texture2D(maxTexture, vec2(0.5));\n float maxValue = aggregationMode < 0.5 ? maxTexture.r : maxTexture.g;\n float minValue = maxValue * threshold;\n if (colorDomain[1] > 0.) {\n // if user specified custom domain use it.\n maxValue = colorDomain[1];\n minValue = colorDomain[0];\n }\n vIntensityMax = intensity / maxValue;\n vIntensityMin = intensity / minValue;\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME triangle-layer-fragment-shader\n\nprecision highp float;\n\nuniform float opacity;\nuniform sampler2D texture;\nuniform sampler2D colorTexture;\nuniform float aggregationMode;\n\nvarying vec2 vTexCoords;\nvarying float vIntensityMin;\nvarying float vIntensityMax;\n\nvec4 getLinearColor(float value) {\n float factor = clamp(value * vIntensityMax, 0., 1.);\n vec4 color = texture2D(colorTexture, vec2(factor, 0.5));\n color.a *= min(value * vIntensityMin, 1.0);\n return color;\n}\n\nvoid main(void) {\n vec4 weights = texture2D(texture, vTexCoords);\n float weight = weights.r;\n\n if (aggregationMode > 0.5) {\n weight /= max(1.0, weights.a);\n }\n\n // discard pixels with 0 weight.\n if (weight <= 0.) {\n discard;\n }\n\n vec4 linearColor = getLinearColor(weight);\n linearColor.a *= opacity;\n gl_FragColor =linearColor;\n}\n`;\n","export default `\\\nattribute vec3 positions;\nattribute vec3 positions64Low;\nattribute float weights;\nvarying vec4 weightsTexture;\nuniform float radiusPixels;\nuniform float textureWidth;\nuniform vec4 commonBounds;\nuniform float weightsScale;\nvoid main()\n{\n weightsTexture = vec4(weights * weightsScale, 0., 0., 1.);\n\n float radiusTexels = project_pixel_size(radiusPixels) * textureWidth / (commonBounds.z - commonBounds.x);\n gl_PointSize = radiusTexels * 2.;\n\n vec3 commonPosition = project_position(positions, positions64Low);\n\n // map xy from commonBounds to [-1, 1]\n gl_Position.xy = (commonPosition.xy - commonBounds.xy) / (commonBounds.zw - commonBounds.xy) ;\n gl_Position.xy = (gl_Position.xy * 2.) - (1.);\n}\n`;\n","// Copyright (c) 2015 - 2019 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* global setTimeout clearTimeout */\nimport GL from '@luma.gl/constants';\nimport {\n getBounds,\n boundsContain,\n packVertices,\n scaleToAspectRatio,\n getTextureCoordinates,\n getTextureParams\n} from './heatmap-layer-utils';\nimport {\n Buffer,\n Texture2D,\n Transform,\n getParameters,\n withParameters,\n FEATURES,\n hasFeatures\n} from '@luma.gl/core';\nimport {\n Accessor,\n AccessorFunction,\n AttributeManager,\n ChangeFlags,\n Color,\n COORDINATE_SYSTEM,\n Layer,\n LayerContext,\n LayersList,\n log,\n Position,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport TriangleLayer from './triangle-layer';\nimport AggregationLayer, {AggregationLayerProps} from '../aggregation-layer';\nimport {defaultColorRange, colorRangeToFlatArray} from '../utils/color-utils';\nimport weightsVs from './weights-vs.glsl';\nimport weightsFs from './weights-fs.glsl';\nimport vsMax from './max-vs.glsl';\nimport fsMax from './max-fs.glsl';\n\nconst RESOLUTION = 2; // (number of common space pixels) / (number texels)\nconst TEXTURE_OPTIONS = {\n mipmaps: false,\n parameters: {\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n },\n dataFormat: GL.RGBA\n};\nconst DEFAULT_COLOR_DOMAIN = [0, 0];\nconst AGGREGATION_MODE = {\n SUM: 0,\n MEAN: 1\n};\n\nconst defaultProps: DefaultProps = {\n getPosition: {type: 'accessor', value: x => x.position},\n getWeight: {type: 'accessor', value: 1},\n intensity: {type: 'number', min: 0, value: 1},\n radiusPixels: {type: 'number', min: 1, max: 100, value: 50},\n colorRange: defaultColorRange,\n threshold: {type: 'number', min: 0, max: 1, value: 0.05},\n colorDomain: {type: 'array', value: null, optional: true},\n // 'SUM' or 'MEAN'\n aggregation: 'SUM',\n weightsTextureSize: {type: 'number', min: 128, max: 2048, value: 2048},\n debounceTimeout: {type: 'number', min: 0, max: 1000, value: 500}\n};\n\nconst REQUIRED_FEATURES = [\n FEATURES.BLEND_EQUATION_MINMAX, // max weight calculation\n FEATURES.TEXTURE_FLOAT // weight-map as texture\n];\n\nconst FLOAT_TARGET_FEATURES = [\n FEATURES.COLOR_ATTACHMENT_RGBA32F, // ability to render to float texture\n FEATURES.FLOAT_BLEND // ability to blend when rendering to float texture\n];\n\nconst DIMENSIONS = {\n data: {\n props: ['radiusPixels']\n }\n};\n\nexport type HeatmapLayerProps = _HeatmapLayerProps &\n AggregationLayerProps;\n\ntype _HeatmapLayerProps = {\n /**\n * Radius of the circle in pixels, to which the weight of an object is distributed.\n *\n * @default 30\n */\n radiusPixels?: number;\n\n /**\n * Specified as an array of colors [color1, color2, ...].\n *\n * @default `6-class YlOrRd` - [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6)\n */\n colorRange?: Color[];\n\n /**\n * Value that is multiplied with the total weight at a pixel to obtain the final weight.\n *\n * @default 1\n */\n intensity?: number;\n\n /**\n * Ratio of the fading weight to the max weight, between `0` and `1`.\n *\n * For example, `0.1` affects all pixels with weight under 10% of the max.\n *\n * Ignored when `colorDomain` is specified.\n * @default 0.05\n */\n threshold?: number;\n\n /**\n * Controls how weight values are mapped to the `colorRange`, as an array of two numbers [`minValue`, `maxValue`].\n *\n * @default null\n */\n colorDomain?: [number, number] | null;\n\n /**\n * Defines the type of aggregation operation\n *\n * V valid values are 'SUM', 'MEAN'.\n *\n * @default 'SUM'\n */\n aggregation?: 'SUM' | 'MEAN';\n\n /**\n * Specifies the size of weight texture.\n * @default 2048\n */\n weightsTextureSize?: number;\n\n /**\n * Interval in milliseconds during which changes to the viewport don't trigger aggregation.\n *\n * @default 500\n */\n debounceTimeout?: number;\n\n /**\n * Method called to retrieve the position of each object.\n *\n * @default d => d.position\n */\n getPosition?: AccessorFunction;\n\n /**\n * The weight of each object.\n *\n * @default 1\n */\n getWeight?: Accessor;\n};\n\n/** Visualizes the spatial distribution of data. */\nexport default class HeatmapLayer extends AggregationLayer<\n ExtraPropsT & Required<_HeatmapLayerProps>\n> {\n static layerName = 'HeatmapLayer';\n static defaultProps = defaultProps;\n\n state!: AggregationLayer['state'] & {\n supported: boolean;\n colorDomain?: number[];\n isWeightMapDirty?: boolean;\n weightsTexture?: Texture2D;\n zoom?: number;\n worldBounds?: number[];\n normalizedCommonBounds?: number[];\n updateTimer?: any;\n triPositionBuffer?: Buffer;\n triTexCoordBuffer?: Buffer;\n };\n\n initializeState() {\n const {gl} = this.context;\n if (!hasFeatures(gl, REQUIRED_FEATURES)) {\n this.setState({supported: false});\n log.error(`HeatmapLayer: ${this.id} is not supported on this browser`)();\n return;\n }\n super.initializeAggregationLayer(DIMENSIONS);\n this.setState({supported: true, colorDomain: DEFAULT_COLOR_DOMAIN});\n this._setupTextureParams();\n this._setupAttributes();\n this._setupResources();\n }\n\n shouldUpdateState({changeFlags}: UpdateParameters) {\n // Need to be updated when viewport changes\n return changeFlags.somethingChanged;\n }\n\n /* eslint-disable max-statements,complexity */\n updateState(opts: UpdateParameters) {\n if (!this.state.supported) {\n return;\n }\n super.updateState(opts);\n this._updateHeatmapState(opts);\n }\n\n _updateHeatmapState(opts: UpdateParameters) {\n const {props, oldProps} = opts;\n const changeFlags = this._getChangeFlags(opts);\n\n if (changeFlags.dataChanged || changeFlags.viewportChanged) {\n // if data is changed, do not debounce and immediately update the weight map\n changeFlags.boundsChanged = this._updateBounds(changeFlags.dataChanged);\n this._updateTextureRenderingBounds();\n }\n\n if (changeFlags.dataChanged || changeFlags.boundsChanged) {\n // Update weight map immediately\n clearTimeout(this.state.updateTimer);\n this.setState({isWeightMapDirty: true});\n } else if (changeFlags.viewportZoomChanged) {\n // Update weight map when zoom stops\n this._debouncedUpdateWeightmap();\n }\n\n if (props.colorRange !== oldProps.colorRange) {\n this._updateColorTexture(opts);\n }\n\n if (this.state.isWeightMapDirty) {\n this._updateWeightmap();\n }\n\n this.setState({zoom: opts.context.viewport.zoom});\n }\n\n renderLayers(): LayersList | Layer {\n if (!this.state.supported) {\n return [];\n }\n const {\n weightsTexture,\n triPositionBuffer,\n triTexCoordBuffer,\n maxWeightsTexture,\n colorTexture,\n colorDomain\n } = this.state;\n const {updateTriggers, intensity, threshold, aggregation} = this.props;\n\n const TriangleLayerClass = this.getSubLayerClass('triangle', TriangleLayer);\n\n return new TriangleLayerClass(\n this.getSubLayerProps({\n id: 'triangle-layer',\n updateTriggers\n }),\n {\n // position buffer is filled with world coordinates generated from viewport.unproject\n // i.e. LNGLAT if geospatial, CARTESIAN otherwise\n coordinateSystem: COORDINATE_SYSTEM.DEFAULT,\n data: {\n attributes: {\n positions: triPositionBuffer,\n texCoords: triTexCoordBuffer\n }\n },\n vertexCount: 4,\n maxTexture: maxWeightsTexture,\n colorTexture,\n aggregationMode: AGGREGATION_MODE[aggregation] || 0,\n texture: weightsTexture,\n intensity,\n threshold,\n colorDomain\n }\n );\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n const {\n weightsTransform,\n weightsTexture,\n maxWeightTransform,\n maxWeightsTexture,\n triPositionBuffer,\n triTexCoordBuffer,\n colorTexture,\n updateTimer\n } = this.state;\n weightsTransform?.delete();\n weightsTexture?.delete();\n maxWeightTransform?.delete();\n maxWeightsTexture?.delete();\n triPositionBuffer?.delete();\n triTexCoordBuffer?.delete();\n colorTexture?.delete();\n if (updateTimer) {\n clearTimeout(updateTimer);\n }\n }\n\n // PRIVATE\n\n // override Composite layer private method to create AttributeManager instance\n _getAttributeManager() {\n return new AttributeManager(this.context.gl, {\n id: this.props.id,\n stats: this.context.stats\n });\n }\n\n _getChangeFlags(opts: UpdateParameters) {\n const changeFlags: Partial & {\n boundsChanged?: boolean;\n viewportZoomChanged?: boolean;\n } = {};\n const {dimensions} = this.state;\n changeFlags.dataChanged =\n this.isAttributeChanged() || // if any attribute is changed\n this.isAggregationDirty(opts, {\n compareAll: true,\n dimension: dimensions.data\n });\n changeFlags.viewportChanged = opts.changeFlags.viewportChanged;\n\n const {zoom} = this.state;\n if (!opts.context.viewport || opts.context.viewport.zoom !== zoom) {\n changeFlags.viewportZoomChanged = true;\n }\n\n return changeFlags;\n }\n\n _createTextures() {\n const {gl} = this.context;\n const {textureSize, format, type} = this.state;\n\n this.setState({\n weightsTexture: new Texture2D(gl, {\n width: textureSize,\n height: textureSize,\n format,\n type,\n ...TEXTURE_OPTIONS\n }),\n maxWeightsTexture: new Texture2D(gl, {format, type, ...TEXTURE_OPTIONS}) // 1 X 1 texture,\n });\n }\n\n _setupAttributes() {\n const attributeManager = this.getAttributeManager()!;\n attributeManager.add({\n positions: {size: 3, type: GL.DOUBLE, accessor: 'getPosition'},\n weights: {size: 1, accessor: 'getWeight'}\n });\n this.setState({positionAttributeName: 'positions'});\n }\n\n _setupTextureParams() {\n const {gl} = this.context;\n const {weightsTextureSize} = this.props;\n\n const textureSize = Math.min(weightsTextureSize, getParameters(gl, gl.MAX_TEXTURE_SIZE));\n const floatTargetSupport = hasFeatures(gl, FLOAT_TARGET_FEATURES);\n const {format, type} = getTextureParams({gl, floatTargetSupport});\n const weightsScale = floatTargetSupport ? 1 : 1 / 255;\n this.setState({textureSize, format, type, weightsScale});\n if (!floatTargetSupport) {\n log.warn(\n `HeatmapLayer: ${this.id} rendering to float texture not supported, fallingback to low precession format`\n )();\n }\n }\n\n getShaders(type) {\n return super.getShaders(\n type === 'max-weights-transform'\n ? {\n vs: vsMax,\n _fs: fsMax\n }\n : {\n vs: weightsVs,\n _fs: weightsFs\n }\n );\n }\n\n _createWeightsTransform(shaders = {}) {\n const {gl} = this.context;\n let {weightsTransform} = this.state;\n const {weightsTexture} = this.state;\n weightsTransform?.delete();\n\n weightsTransform = new Transform(gl, {\n id: `${this.id}-weights-transform`,\n elementCount: 1,\n _targetTexture: weightsTexture,\n _targetTextureVarying: 'weightsTexture',\n ...shaders\n });\n this.setState({weightsTransform});\n }\n\n _setupResources() {\n const {gl} = this.context;\n this._createTextures();\n const {textureSize, weightsTexture, maxWeightsTexture} = this.state;\n\n const weightsTransformShaders = this.getShaders('weights-transform');\n this._createWeightsTransform(weightsTransformShaders);\n\n const maxWeightsTransformShaders = this.getShaders('max-weights-transform');\n const maxWeightTransform = new Transform(gl, {\n id: `${this.id}-max-weights-transform`,\n _sourceTextures: {\n inTexture: weightsTexture\n },\n _targetTexture: maxWeightsTexture,\n _targetTextureVarying: 'outTexture',\n ...maxWeightsTransformShaders,\n elementCount: textureSize * textureSize\n });\n\n this.setState({\n weightsTexture,\n maxWeightsTexture,\n maxWeightTransform,\n zoom: null,\n triPositionBuffer: new Buffer(gl, {\n byteLength: 48,\n accessor: {size: 3}\n }),\n triTexCoordBuffer: new Buffer(gl, {\n byteLength: 48,\n accessor: {size: 2}\n })\n });\n }\n\n // overwrite super class method to update transform model\n updateShaders(shaderOptions) {\n // sahder params (modules, injects) changed, update model object\n this._createWeightsTransform(shaderOptions);\n }\n\n _updateMaxWeightValue() {\n const {maxWeightTransform} = this.state;\n maxWeightTransform.run({\n parameters: {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: GL.MAX\n }\n });\n }\n\n // Computes world bounds area that needs to be processed for generate heatmap\n _updateBounds(forceUpdate: any = false): boolean {\n const {viewport} = this.context;\n\n // Unproject all 4 corners of the current screen coordinates into world coordinates (lng/lat)\n // Takes care of viewport has non zero bearing/pitch (i.e axis not aligned with world coordiante system)\n const viewportCorners = [\n viewport.unproject([0, 0]),\n viewport.unproject([viewport.width, 0]),\n viewport.unproject([viewport.width, viewport.height]),\n viewport.unproject([0, viewport.height])\n ].map(p => p.map(Math.fround));\n\n // #1: get world bounds for current viewport extends\n const visibleWorldBounds = getBounds(viewportCorners); // TODO: Change to visible bounds\n\n const newState: Partial = {visibleWorldBounds, viewportCorners};\n let boundsChanged = false;\n\n if (\n forceUpdate ||\n !this.state.worldBounds ||\n !boundsContain(this.state.worldBounds, visibleWorldBounds)\n ) {\n // #2 : convert world bounds to common (Flat) bounds\n // #3 : extend common bounds to match aspect ratio with viewport\n const scaledCommonBounds = this._worldToCommonBounds(visibleWorldBounds);\n\n // #4 :convert aligned common bounds to world bounds\n const worldBounds = this._commonToWorldBounds(scaledCommonBounds);\n\n // Clip webmercator projection limits\n if (this.props.coordinateSystem === COORDINATE_SYSTEM.LNGLAT) {\n worldBounds[1] = Math.max(worldBounds[1], -85.051129);\n worldBounds[3] = Math.min(worldBounds[3], 85.051129);\n worldBounds[0] = Math.max(worldBounds[0], -360);\n worldBounds[2] = Math.min(worldBounds[2], 360);\n }\n\n // #5: now convert world bounds to common using Layer's coordiante system and origin\n const normalizedCommonBounds = this._worldToCommonBounds(worldBounds);\n\n newState.worldBounds = worldBounds;\n newState.normalizedCommonBounds = normalizedCommonBounds;\n\n boundsChanged = true;\n }\n this.setState(newState);\n return boundsChanged;\n }\n\n _updateTextureRenderingBounds() {\n // Just render visible portion of the texture\n const {triPositionBuffer, triTexCoordBuffer, normalizedCommonBounds, viewportCorners} =\n this.state;\n\n const {viewport} = this.context;\n\n triPositionBuffer.subData(packVertices(viewportCorners, 3));\n\n const textureBounds = viewportCorners.map(p =>\n getTextureCoordinates(viewport.projectPosition(p), normalizedCommonBounds!)\n );\n triTexCoordBuffer.subData(packVertices(textureBounds, 2));\n }\n\n _updateColorTexture(opts) {\n const {colorRange} = opts.props;\n let {colorTexture} = this.state;\n const colors = colorRangeToFlatArray(colorRange, false, Uint8Array as any);\n\n if (colorTexture) {\n colorTexture.setImageData({\n data: colors,\n width: colorRange.length\n });\n } else {\n colorTexture = new Texture2D(this.context.gl, {\n data: colors,\n width: colorRange.length,\n height: 1,\n ...TEXTURE_OPTIONS\n });\n }\n this.setState({colorTexture});\n }\n\n _updateWeightmap() {\n const {radiusPixels, colorDomain, aggregation} = this.props;\n const {weightsTransform, worldBounds, textureSize, weightsTexture, weightsScale} = this.state;\n this.state.isWeightMapDirty = false;\n\n // convert world bounds to common using Layer's coordiante system and origin\n const commonBounds = this._worldToCommonBounds(worldBounds, {\n useLayerCoordinateSystem: true\n });\n\n if (colorDomain && aggregation === 'SUM') {\n // scale color domain to weight per pixel\n const {viewport} = this.context;\n const metersPerPixel =\n (viewport.distanceScales.metersPerUnit[2] * (commonBounds[2] - commonBounds[0])) /\n textureSize;\n this.state.colorDomain = colorDomain.map(x => x * metersPerPixel * weightsScale);\n } else {\n this.state.colorDomain = colorDomain || DEFAULT_COLOR_DOMAIN;\n }\n\n const uniforms = {\n radiusPixels,\n commonBounds,\n textureWidth: textureSize,\n weightsScale\n };\n // Attribute manager sets data array count as instaceCount on model\n // we need to set that as elementCount on 'weightsTransform'\n weightsTransform.update({\n elementCount: this.getNumInstances()\n });\n // Need to explictly specify clearColor as external context may have modified it\n withParameters(this.context.gl, {clearColor: [0, 0, 0, 0]}, () => {\n weightsTransform.run({\n uniforms,\n parameters: {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: GL.FUNC_ADD\n },\n clearRenderTarget: true,\n attributes: this.getAttributes(),\n moduleSettings: this.getModuleSettings()\n });\n });\n this._updateMaxWeightValue();\n\n // reset filtering parameters (TODO: remove once luma issue#1193 is fixed)\n weightsTexture.setParameters({\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR\n });\n }\n\n _debouncedUpdateWeightmap(fromTimer = false) {\n let {updateTimer} = this.state;\n const {debounceTimeout} = this.props;\n\n if (fromTimer) {\n updateTimer = null;\n // update\n this._updateBounds(true);\n this._updateTextureRenderingBounds();\n this.setState({isWeightMapDirty: true});\n } else {\n this.setState({isWeightMapDirty: false});\n clearTimeout(updateTimer);\n updateTimer = setTimeout(this._debouncedUpdateWeightmap.bind(this, true), debounceTimeout);\n }\n\n this.setState({updateTimer});\n }\n\n // input: worldBounds: [minLong, minLat, maxLong, maxLat]\n // input: opts.useLayerCoordinateSystem : layers coordiante system is used\n // optput: commonBounds: [minX, minY, maxX, maxY] scaled to fit the current texture\n _worldToCommonBounds(worldBounds, opts: {useLayerCoordinateSystem?: boolean} = {}) {\n const {useLayerCoordinateSystem = false} = opts;\n const [minLong, minLat, maxLong, maxLat] = worldBounds;\n const {viewport} = this.context;\n const {textureSize} = this.state;\n const {coordinateSystem} = this.props;\n\n const offsetMode =\n useLayerCoordinateSystem &&\n (coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS ||\n coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS);\n const offsetOriginCommon = offsetMode\n ? viewport.projectPosition(this.props.coordinateOrigin)\n : [0, 0];\n const size = (textureSize * RESOLUTION) / viewport.scale;\n\n let bottomLeftCommon;\n let topRightCommon;\n\n // Y-axis is flipped between World and Common bounds\n if (useLayerCoordinateSystem && !offsetMode) {\n bottomLeftCommon = this.projectPosition([minLong, minLat, 0]);\n topRightCommon = this.projectPosition([maxLong, maxLat, 0]);\n } else {\n bottomLeftCommon = viewport.projectPosition([minLong, minLat, 0]);\n topRightCommon = viewport.projectPosition([maxLong, maxLat, 0]);\n }\n // Ignore z component\n return scaleToAspectRatio(\n [\n bottomLeftCommon[0] - offsetOriginCommon[0],\n bottomLeftCommon[1] - offsetOriginCommon[1],\n topRightCommon[0] - offsetOriginCommon[0],\n topRightCommon[1] - offsetOriginCommon[1]\n ],\n size,\n size\n );\n }\n\n // input commonBounds: [xMin, yMin, xMax, yMax]\n // output worldBounds: [minLong, minLat, maxLong, maxLat]\n _commonToWorldBounds(commonBounds) {\n const [xMin, yMin, xMax, yMax] = commonBounds;\n const {viewport} = this.context;\n const bottomLeftWorld = viewport.unprojectPosition([xMin, yMin]);\n const topRightWorld = viewport.unprojectPosition([xMax, yMax]);\n\n return bottomLeftWorld.slice(0, 2).concat(topRightWorld.slice(0, 2));\n }\n}\n","export default `\\\nattribute vec4 inTexture;\nvarying vec4 outTexture;\n\nvoid main()\n{\noutTexture = inTexture;\ngl_Position = vec4(0, 0, 0, 1.);\n// Enforce default value for ANGLE issue (https://bugs.chromium.org/p/angleproject/issues/detail?id=3941)\ngl_PointSize = 1.0;\n}\n`;\n","export default `\\\nvarying vec4 outTexture;\nvoid main() {\n gl_FragColor = outTexture;\n gl_FragColor.g = outTexture.r / max(1.0, outTexture.a);\n}\n`;\n","export default `\\\nvarying vec4 weightsTexture;\n// Epanechnikov function, keeping for reference\n// float epanechnikovKDE(float u) {\n// return 0.75 * (1.0 - u * u);\n// }\nfloat gaussianKDE(float u){\n return pow(2.71828, -u*u/0.05555)/(1.77245385*0.166666);\n}\nvoid main()\n{\n float dist = length(gl_PointCoord - vec2(0.5, 0.5));\n if (dist > 0.5) {\n discard;\n }\n gl_FragColor = weightsTexture * gaussianKDE(2. * dist);\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable max-len */\n\nexport {default as ScreenGridLayer} from './screen-grid-layer/screen-grid-layer';\nexport {default as CPUGridLayer} from './cpu-grid-layer/cpu-grid-layer';\nexport {default as HexagonLayer} from './hexagon-layer/hexagon-layer';\nexport {default as ContourLayer} from './contour-layer/contour-layer';\nexport {default as GridLayer} from './grid-layer/grid-layer';\nexport {default as GPUGridLayer} from './gpu-grid-layer/gpu-grid-layer';\nexport {AGGREGATION_OPERATION} from './utils/aggregation-operation-utils';\n\n// experimental export\nexport {default as HeatmapLayer} from './heatmap-layer/heatmap-layer';\nexport {default as _GPUGridAggregator} from './utils/gpu-grid-aggregation/gpu-grid-aggregator';\nexport {default as _CPUAggregator} from './utils/cpu-aggregator';\nexport {default as _AggregationLayer} from './aggregation-layer';\nexport {default as _BinSorter} from './utils/bin-sorter';\n\n// types\nexport type {ContourLayerProps} from './contour-layer/contour-layer';\nexport type {HeatmapLayerProps} from './heatmap-layer/heatmap-layer';\nexport type {HexagonLayerProps} from './hexagon-layer/hexagon-layer';\nexport type {CPUGridLayerProps} from './cpu-grid-layer/cpu-grid-layer';\nexport type {GridLayerProps} from './grid-layer/grid-layer';\nexport type {GPUGridLayerProps} from './gpu-grid-layer/gpu-grid-layer';\nexport type {ScreenGridLayerProps} from './screen-grid-layer/screen-grid-layer';\n","import Geometry from '../geometry/geometry';\nimport { uid } from '@luma.gl/webgl';\nconst INDEX_OFFSETS = {\n x: [2, 0, 1],\n y: [0, 1, 2],\n z: [1, 2, 0]\n};\nexport default class TruncatedConeGeometry extends Geometry {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n id = uid('truncated-code-geometry')\n } = props;\n const {\n indices,\n attributes\n } = tesselateTruncatedCone(props);\n super({ ...props,\n id,\n indices,\n attributes: { ...attributes,\n ...props.attributes\n }\n });\n }\n\n}\n\nfunction tesselateTruncatedCone(props) {\n const {\n bottomRadius = 0,\n topRadius = 0,\n height = 1,\n nradial = 10,\n nvertical = 10,\n verticalAxis = 'y',\n topCap = false,\n bottomCap = false\n } = props;\n const extra = (topCap ? 2 : 0) + (bottomCap ? 2 : 0);\n const numVertices = (nradial + 1) * (nvertical + 1 + extra);\n const slant = Math.atan2(bottomRadius - topRadius, height);\n const msin = Math.sin;\n const mcos = Math.cos;\n const mpi = Math.PI;\n const cosSlant = mcos(slant);\n const sinSlant = msin(slant);\n const start = topCap ? -2 : 0;\n const end = nvertical + (bottomCap ? 2 : 0);\n const vertsAroundEdge = nradial + 1;\n const indices = new Uint16Array(nradial * (nvertical + extra) * 6);\n const indexOffset = INDEX_OFFSETS[verticalAxis];\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const texCoords = new Float32Array(numVertices * 2);\n let i3 = 0;\n let i2 = 0;\n\n for (let i = start; i <= end; i++) {\n let v = i / nvertical;\n let y = height * v;\n let ringRadius;\n\n if (i < 0) {\n y = 0;\n v = 1;\n ringRadius = bottomRadius;\n } else if (i > nvertical) {\n y = height;\n v = 1;\n ringRadius = topRadius;\n } else {\n ringRadius = bottomRadius + (topRadius - bottomRadius) * (i / nvertical);\n }\n\n if (i === -2 || i === nvertical + 2) {\n ringRadius = 0;\n v = 0;\n }\n\n y -= height / 2;\n\n for (let j = 0; j < vertsAroundEdge; j++) {\n const sin = msin(j * mpi * 2 / nradial);\n const cos = mcos(j * mpi * 2 / nradial);\n positions[i3 + indexOffset[0]] = sin * ringRadius;\n positions[i3 + indexOffset[1]] = y;\n positions[i3 + indexOffset[2]] = cos * ringRadius;\n normals[i3 + indexOffset[0]] = i < 0 || i > nvertical ? 0 : sin * cosSlant;\n normals[i3 + indexOffset[1]] = i < 0 ? -1 : i > nvertical ? 1 : sinSlant;\n normals[i3 + indexOffset[2]] = i < 0 || i > nvertical ? 0 : cos * cosSlant;\n texCoords[i2 + 0] = j / nradial;\n texCoords[i2 + 1] = v;\n i2 += 2;\n i3 += 3;\n }\n }\n\n for (let i = 0; i < nvertical + extra; i++) {\n for (let j = 0; j < nradial; j++) {\n const index = (i * nradial + j) * 6;\n indices[index + 0] = vertsAroundEdge * (i + 0) + 0 + j;\n indices[index + 1] = vertsAroundEdge * (i + 0) + 1 + j;\n indices[index + 2] = vertsAroundEdge * (i + 1) + 1 + j;\n indices[index + 3] = vertsAroundEdge * (i + 0) + 0 + j;\n indices[index + 4] = vertsAroundEdge * (i + 1) + 1 + j;\n indices[index + 5] = vertsAroundEdge * (i + 1) + 0 + j;\n }\n }\n\n return {\n indices,\n attributes: {\n POSITION: {\n size: 3,\n value: positions\n },\n NORMAL: {\n size: 3,\n value: normals\n },\n TEXCOORD_0: {\n size: 2,\n value: texCoords\n }\n }\n };\n}\n//# sourceMappingURL=truncated-cone-geometry.js.map","import TruncatedConeGeometry from './truncated-cone-geometry';\nimport { uid } from '@luma.gl/webgl';\nexport default class ConeGeometry extends TruncatedConeGeometry {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n id = uid('cone-geometry'),\n radius = 1,\n cap = true\n } = props;\n super({ ...props,\n id,\n topRadius: 0,\n topCap: Boolean(cap),\n bottomCap: Boolean(cap),\n bottomRadius: radius\n });\n }\n\n}\n//# sourceMappingURL=cone-geometry.js.map","import TruncatedConeGeometry from './truncated-cone-geometry';\nimport { uid } from '@luma.gl/webgl';\nexport default class CylinderGeometry extends TruncatedConeGeometry {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n id = uid('cylinder-geometry'),\n radius = 1\n } = props;\n super({ ...props,\n id,\n bottomRadius: radius,\n topRadius: radius\n });\n }\n\n}\n//# sourceMappingURL=cylinder-geometry.js.map","import { Vector3 } from '@math.gl/core';\nimport Geometry from '../geometry/geometry';\nimport { uid } from '@luma.gl/webgl';\nconst ICO_POSITIONS = [-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 1, 0, 0];\nconst ICO_INDICES = [3, 4, 5, 3, 5, 1, 3, 1, 0, 3, 0, 4, 4, 0, 2, 4, 2, 5, 2, 0, 1, 5, 2, 1];\nexport default class IcoSphereGeometry extends Geometry {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n id = uid('ico-sphere-geometry')\n } = props;\n const {\n indices,\n attributes\n } = tesselateIcosaHedron(props);\n super({ ...props,\n id,\n indices,\n attributes: { ...attributes,\n ...props.attributes\n }\n });\n }\n\n}\n\nfunction tesselateIcosaHedron(props) {\n const {\n iterations = 0\n } = props;\n const PI = Math.PI;\n const PI2 = PI * 2;\n const positions = [...ICO_POSITIONS];\n let indices = [...ICO_INDICES];\n positions.push();\n indices.push();\n\n const getMiddlePoint = (() => {\n const pointMemo = {};\n return (i1, i2) => {\n i1 *= 3;\n i2 *= 3;\n const mini = i1 < i2 ? i1 : i2;\n const maxi = i1 > i2 ? i1 : i2;\n const key = \"\".concat(mini, \"|\").concat(maxi);\n\n if (key in pointMemo) {\n return pointMemo[key];\n }\n\n const x1 = positions[i1];\n const y1 = positions[i1 + 1];\n const z1 = positions[i1 + 2];\n const x2 = positions[i2];\n const y2 = positions[i2 + 1];\n const z2 = positions[i2 + 2];\n let xm = (x1 + x2) / 2;\n let ym = (y1 + y2) / 2;\n let zm = (z1 + z2) / 2;\n const len = Math.sqrt(xm * xm + ym * ym + zm * zm);\n xm /= len;\n ym /= len;\n zm /= len;\n positions.push(xm, ym, zm);\n return pointMemo[key] = positions.length / 3 - 1;\n };\n })();\n\n for (let i = 0; i < iterations; i++) {\n const indices2 = [];\n\n for (let j = 0; j < indices.length; j += 3) {\n const a = getMiddlePoint(indices[j + 0], indices[j + 1]);\n const b = getMiddlePoint(indices[j + 1], indices[j + 2]);\n const c = getMiddlePoint(indices[j + 2], indices[j + 0]);\n indices2.push(c, indices[j + 0], a, a, indices[j + 1], b, b, indices[j + 2], c, a, b, c);\n }\n\n indices = indices2;\n }\n\n const normals = new Array(positions.length);\n const texCoords = new Array(positions.length / 3 * 2);\n const l = indices.length;\n\n for (let i = l - 3; i >= 0; i -= 3) {\n const i1 = indices[i + 0];\n const i2 = indices[i + 1];\n const i3 = indices[i + 2];\n const in1 = i1 * 3;\n const in2 = i2 * 3;\n const in3 = i3 * 3;\n const iu1 = i1 * 2;\n const iu2 = i2 * 2;\n const iu3 = i3 * 2;\n const x1 = positions[in1 + 0];\n const y1 = positions[in1 + 1];\n const z1 = positions[in1 + 2];\n const theta1 = Math.acos(z1 / Math.sqrt(x1 * x1 + y1 * y1 + z1 * z1));\n const phi1 = Math.atan2(y1, x1) + PI;\n const v1 = theta1 / PI;\n const u1 = 1 - phi1 / PI2;\n const x2 = positions[in2 + 0];\n const y2 = positions[in2 + 1];\n const z2 = positions[in2 + 2];\n const theta2 = Math.acos(z2 / Math.sqrt(x2 * x2 + y2 * y2 + z2 * z2));\n const phi2 = Math.atan2(y2, x2) + PI;\n const v2 = theta2 / PI;\n const u2 = 1 - phi2 / PI2;\n const x3 = positions[in3 + 0];\n const y3 = positions[in3 + 1];\n const z3 = positions[in3 + 2];\n const theta3 = Math.acos(z3 / Math.sqrt(x3 * x3 + y3 * y3 + z3 * z3));\n const phi3 = Math.atan2(y3, x3) + PI;\n const v3 = theta3 / PI;\n const u3 = 1 - phi3 / PI2;\n const vec1 = [x3 - x2, y3 - y2, z3 - z2];\n const vec2 = [x1 - x2, y1 - y2, z1 - z2];\n const normal = new Vector3(vec1).cross(vec2).normalize();\n let newIndex;\n\n if ((u1 === 0 || u2 === 0 || u3 === 0) && (u1 === 0 || u1 > 0.5) && (u2 === 0 || u2 > 0.5) && (u3 === 0 || u3 > 0.5)) {\n positions.push(positions[in1 + 0], positions[in1 + 1], positions[in1 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v1;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n positions.push(positions[in2 + 0], positions[in2 + 1], positions[in2 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v2;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n positions.push(positions[in3 + 0], positions[in3 + 1], positions[in3 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v3;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n }\n\n normals[in1 + 0] = normals[in2 + 0] = normals[in3 + 0] = normal.x;\n normals[in1 + 1] = normals[in2 + 1] = normals[in3 + 1] = normal.y;\n normals[in1 + 2] = normals[in2 + 2] = normals[in3 + 2] = normal.z;\n texCoords[iu1 + 0] = u1;\n texCoords[iu1 + 1] = v1;\n texCoords[iu2 + 0] = u2;\n texCoords[iu2 + 1] = v2;\n texCoords[iu3 + 0] = u3;\n texCoords[iu3 + 1] = v3;\n }\n\n return {\n indices: {\n size: 1,\n value: new Uint16Array(indices)\n },\n attributes: {\n POSITION: {\n size: 3,\n value: new Float32Array(positions)\n },\n NORMAL: {\n size: 3,\n value: new Float32Array(normals)\n },\n TEXCOORD_0: {\n size: 2,\n value: new Float32Array(texCoords)\n }\n }\n };\n}\n//# sourceMappingURL=ico-sphere-geometry.js.map","import Geometry from '../geometry/geometry';\nimport { unpackIndexedGeometry } from '../geometry/geometry-utils';\nimport { uid } from '@luma.gl/webgl';\nexport default class PlaneGeometry extends Geometry {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n id = uid('plane-geometry')\n } = props;\n const {\n indices,\n attributes\n } = tesselatePlane(props);\n super({ ...props,\n id,\n indices,\n attributes: { ...attributes,\n ...props.attributes\n }\n });\n }\n\n}\n\nfunction tesselatePlane(props) {\n const {\n type = 'x,y',\n offset = 0,\n flipCull = false,\n unpack = false\n } = props;\n const coords = type.split(',');\n let c1len = props[\"\".concat(coords[0], \"len\")] || 1;\n const c2len = props[\"\".concat(coords[1], \"len\")] || 1;\n const subdivisions1 = props[\"n\".concat(coords[0])] || 1;\n const subdivisions2 = props[\"n\".concat(coords[1])] || 1;\n const numVertices = (subdivisions1 + 1) * (subdivisions2 + 1);\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const texCoords = new Float32Array(numVertices * 2);\n\n if (flipCull) {\n c1len = -c1len;\n }\n\n let i2 = 0;\n let i3 = 0;\n\n for (let z = 0; z <= subdivisions2; z++) {\n for (let x = 0; x <= subdivisions1; x++) {\n const u = x / subdivisions1;\n const v = z / subdivisions2;\n texCoords[i2 + 0] = flipCull ? 1 - u : u;\n texCoords[i2 + 1] = v;\n\n switch (type) {\n case 'x,y':\n positions[i3 + 0] = c1len * u - c1len * 0.5;\n positions[i3 + 1] = c2len * v - c2len * 0.5;\n positions[i3 + 2] = offset;\n normals[i3 + 0] = 0;\n normals[i3 + 1] = 0;\n normals[i3 + 2] = flipCull ? 1 : -1;\n break;\n\n case 'x,z':\n positions[i3 + 0] = c1len * u - c1len * 0.5;\n positions[i3 + 1] = offset;\n positions[i3 + 2] = c2len * v - c2len * 0.5;\n normals[i3 + 0] = 0;\n normals[i3 + 1] = flipCull ? 1 : -1;\n normals[i3 + 2] = 0;\n break;\n\n case 'y,z':\n positions[i3 + 0] = offset;\n positions[i3 + 1] = c1len * u - c1len * 0.5;\n positions[i3 + 2] = c2len * v - c2len * 0.5;\n normals[i3 + 0] = flipCull ? 1 : -1;\n normals[i3 + 1] = 0;\n normals[i3 + 2] = 0;\n break;\n\n default:\n throw new Error('PlaneGeometry: unknown type');\n }\n\n i2 += 2;\n i3 += 3;\n }\n }\n\n const numVertsAcross = subdivisions1 + 1;\n const indices = new Uint16Array(subdivisions1 * subdivisions2 * 6);\n\n for (let z = 0; z < subdivisions2; z++) {\n for (let x = 0; x < subdivisions1; x++) {\n const index = (z * subdivisions1 + x) * 6;\n indices[index + 0] = (z + 0) * numVertsAcross + x;\n indices[index + 1] = (z + 1) * numVertsAcross + x;\n indices[index + 2] = (z + 0) * numVertsAcross + x + 1;\n indices[index + 3] = (z + 1) * numVertsAcross + x;\n indices[index + 4] = (z + 1) * numVertsAcross + x + 1;\n indices[index + 5] = (z + 0) * numVertsAcross + x + 1;\n }\n }\n\n const geometry = {\n indices: {\n size: 1,\n value: indices\n },\n attributes: {\n POSITION: {\n size: 3,\n value: positions\n },\n NORMAL: {\n size: 3,\n value: normals\n },\n TEXCOORD_0: {\n size: 2,\n value: texCoords\n }\n }\n };\n return unpack ? unpackIndexedGeometry(geometry) : geometry;\n}\n//# sourceMappingURL=plane-geometry.js.map","export function unpackIndexedGeometry(geometry) {\n const {\n indices,\n attributes\n } = geometry;\n\n if (!indices) {\n return geometry;\n }\n\n const vertexCount = indices.value.length;\n const unpackedAttributes = {};\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const {\n constant,\n value,\n size\n } = attribute;\n\n if (constant || !size) {\n continue;\n }\n\n const unpackedValue = new value.constructor(vertexCount * size);\n\n for (let x = 0; x < vertexCount; ++x) {\n const index = indices.value[x];\n\n for (let i = 0; i < size; i++) {\n unpackedValue[x * size + i] = value[index * size + i];\n }\n }\n\n unpackedAttributes[attributeName] = {\n size,\n value: unpackedValue\n };\n }\n\n return {\n attributes: Object.assign({}, attributes, unpackedAttributes)\n };\n}\n//# sourceMappingURL=geometry-utils.js.map","import Geometry from '../geometry/geometry';\nimport { uid } from '@luma.gl/webgl';\nexport default class SphereGeometry extends Geometry {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n id = uid('sphere-geometry')\n } = props;\n const {\n indices,\n attributes\n } = tesselateSphere(props);\n super({ ...props,\n id,\n indices,\n attributes: { ...attributes,\n ...props.attributes\n }\n });\n }\n\n}\n\nfunction tesselateSphere(props) {\n const {\n nlat = 10,\n nlong = 10\n } = props;\n let {\n radius = 1\n } = props;\n const startLat = 0;\n const endLat = Math.PI;\n const latRange = endLat - startLat;\n const startLong = 0;\n const endLong = 2 * Math.PI;\n const longRange = endLong - startLong;\n const numVertices = (nlat + 1) * (nlong + 1);\n\n if (typeof radius === 'number') {\n const value = radius;\n\n radius = (n1, n2, n3, u, v) => value;\n }\n\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const texCoords = new Float32Array(numVertices * 2);\n const IndexType = numVertices > 0xffff ? Uint32Array : Uint16Array;\n const indices = new IndexType(nlat * nlong * 6);\n\n for (let y = 0; y <= nlat; y++) {\n for (let x = 0; x <= nlong; x++) {\n const u = x / nlong;\n const v = y / nlat;\n const index = x + y * (nlong + 1);\n const i2 = index * 2;\n const i3 = index * 3;\n const theta = longRange * u;\n const phi = latRange * v;\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n const ux = cosTheta * sinPhi;\n const uy = cosPhi;\n const uz = sinTheta * sinPhi;\n const r = radius(ux, uy, uz, u, v);\n positions[i3 + 0] = r * ux;\n positions[i3 + 1] = r * uy;\n positions[i3 + 2] = r * uz;\n normals[i3 + 0] = ux;\n normals[i3 + 1] = uy;\n normals[i3 + 2] = uz;\n texCoords[i2 + 0] = u;\n texCoords[i2 + 1] = 1 - v;\n }\n }\n\n const numVertsAround = nlong + 1;\n\n for (let x = 0; x < nlong; x++) {\n for (let y = 0; y < nlat; y++) {\n const index = (x * nlat + y) * 6;\n indices[index + 0] = y * numVertsAround + x;\n indices[index + 1] = y * numVertsAround + x + 1;\n indices[index + 2] = (y + 1) * numVertsAround + x;\n indices[index + 3] = (y + 1) * numVertsAround + x;\n indices[index + 4] = y * numVertsAround + x + 1;\n indices[index + 5] = (y + 1) * numVertsAround + x + 1;\n }\n }\n\n return {\n indices: {\n size: 1,\n value: indices\n },\n attributes: {\n POSITION: {\n size: 3,\n value: positions\n },\n NORMAL: {\n size: 3,\n value: normals\n },\n TEXCOORD_0: {\n size: 2,\n value: texCoords\n }\n }\n };\n}\n//# sourceMappingURL=sphere-geometry.js.map","// Cherry-pick luma core exports that are relevant to deck\nexport {\n // Core classes\n Model,\n Transform,\n ProgramManager,\n Timeline,\n // Context utilities\n instrumentGLContext,\n isWebGL2,\n FEATURES,\n hasFeatures,\n getParameters,\n setParameters,\n withParameters,\n cssToDeviceRatio,\n // Copy and blit\n // These are needed by submodules and rely on using the same copy\n // of Texture2D & Framebuffer\n readPixelsToBuffer,\n copyToTexture,\n cloneTextureFrom,\n // WebGL1 classes\n Buffer,\n Program,\n Framebuffer,\n Renderbuffer,\n Texture2D,\n TextureCube,\n // WebGL2 classes\n Texture3D,\n TransformFeedback,\n // Geometries\n Geometry,\n ConeGeometry,\n CubeGeometry,\n CylinderGeometry,\n IcoSphereGeometry,\n PlaneGeometry,\n SphereGeometry,\n TruncatedConeGeometry\n} from '@luma.gl/core';\n","/* global google, document */\nimport {Deck} from '@deck.gl/core';\nimport {Matrix4, Vector2} from '@math.gl/core';\nimport type {MjolnirGestureEvent, MjolnirPointerEvent} from 'mjolnir.js';\n\n// https://en.wikipedia.org/wiki/Web_Mercator_projection#Formulas\nconst MAX_LATITUDE = 85.05113;\n\ntype UserData = {\n _googleMap: google.maps.Map;\n _eventListeners: Record;\n};\n\n/**\n * Get a new deck instance\n * @param map (google.maps.Map) - The parent Map instance\n * @param overlay (google.maps.OverlayView) - A maps Overlay instance\n * @param [deck] (Deck) - a previously created instances\n */\nexport function createDeckInstance(\n map: google.maps.Map,\n overlay: google.maps.OverlayView | google.maps.WebGLOverlayView,\n deck: Deck | null | undefined,\n props\n): Deck {\n if (deck) {\n if (deck.userData._googleMap === map) {\n return deck;\n }\n // deck instance was created for a different map\n destroyDeckInstance(deck);\n }\n\n const eventListeners = {\n click: null,\n dblclick: null,\n mousemove: null,\n mouseout: null\n };\n\n const newDeck = new Deck({\n ...props,\n useDevicePixels: props.interleaved ? true : props.useDevicePixels,\n style: props.interleaved ? null : {pointerEvents: 'none'},\n parent: getContainer(overlay, props.style),\n initialViewState: {\n longitude: 0,\n latitude: 0,\n zoom: 1\n },\n controller: false\n });\n\n // Register event listeners\n for (const eventType in eventListeners) {\n eventListeners[eventType] = map.addListener(eventType, evt =>\n handleMouseEvent(newDeck, eventType, evt)\n );\n }\n\n // Attach userData directly to Deck instance\n (newDeck.userData as UserData)._googleMap = map;\n (newDeck.userData as UserData)._eventListeners = eventListeners;\n\n return newDeck;\n}\n\n// Create a container that will host the deck canvas and tooltip\nfunction getContainer(\n overlay: google.maps.OverlayView | google.maps.WebGLOverlayView,\n style?: Partial\n): HTMLElement {\n const container = document.createElement('div');\n container.style.position = 'absolute';\n Object.assign(container.style, style);\n\n // The DOM structure has a different structure depending on whether\n // the Google map is rendered as vector or raster\n if ('getPanes' in overlay) {\n overlay.getPanes()?.overlayLayer.appendChild(container);\n } else {\n overlay.getMap()?.getDiv().appendChild(container);\n }\n return container;\n}\n\n/**\n * Safely remove a deck instance\n * @param deck (Deck) - a previously created instances\n */\nexport function destroyDeckInstance(deck: Deck) {\n const {_eventListeners: eventListeners} = deck.userData;\n\n // Unregister event listeners\n for (const eventType in eventListeners) {\n // Check that event listener was set before trying to remove.\n if (eventListeners[eventType]) {\n eventListeners[eventType].remove();\n }\n }\n\n deck.finalize();\n}\n\n/* eslint-disable max-statements */\n/**\n * Get the current view state\n * @param map (google.maps.Map) - The parent Map instance\n * @param overlay (google.maps.OverlayView) - A maps Overlay instance\n */\n// eslint-disable-next-line complexity\nexport function getViewPropsFromOverlay(map: google.maps.Map, overlay: google.maps.OverlayView) {\n const {width, height} = getMapSize(map);\n\n // Canvas position relative to draggable map's container depends on\n // overlayView's projection, not the map's. Have to use the center of the\n // map for this, not the top left, for the same reason as above.\n const projection = overlay.getProjection();\n\n const bounds = map.getBounds();\n if (!bounds) {\n return {width, height, left: 0, top: 0};\n }\n\n const ne = bounds.getNorthEast();\n const sw = bounds.getSouthWest();\n const topRight = projection.fromLatLngToDivPixel(ne);\n const bottomLeft = projection.fromLatLngToDivPixel(sw);\n\n // google maps places overlays in a container anchored at the map center.\n // the container CSS is manipulated during dragging.\n // We need to update left/top of the deck canvas to match the base map.\n const centerLngLat = pixelToLngLat(projection, width / 2, height / 2);\n const centerH = new google.maps.LatLng(0, centerLngLat[0]);\n const centerContainerPx = projection.fromLatLngToContainerPixel(centerH);\n const centerDivPx = projection.fromLatLngToDivPixel(centerH);\n\n if (!topRight || !bottomLeft || !centerDivPx || !centerContainerPx) {\n return {width, height, left: 0, top: 0};\n }\n const leftOffset = Math.round(centerDivPx.x - centerContainerPx.x);\n let topOffset = centerDivPx.y - centerContainerPx.y;\n\n const topLngLat = pixelToLngLat(projection, width / 2, 0);\n const bottomLngLat = pixelToLngLat(projection, width / 2, height);\n\n // Compute fractional center.\n let latitude = centerLngLat[1];\n const longitude = centerLngLat[0];\n\n // Adjust vertical offset - limit latitude\n if (Math.abs(latitude) > MAX_LATITUDE) {\n latitude = latitude > 0 ? MAX_LATITUDE : -MAX_LATITUDE;\n const center = new google.maps.LatLng(latitude, longitude);\n const centerPx = projection.fromLatLngToContainerPixel(center);\n // @ts-ignore (TS2531) Object is possibly 'null'\n topOffset += centerPx.y - height / 2;\n }\n topOffset = Math.round(topOffset);\n\n // Compute fractional bearing\n const delta = new Vector2(topLngLat).sub(bottomLngLat);\n let bearing = (180 * delta.verticalAngle()) / Math.PI;\n if (bearing < 0) bearing += 360;\n\n // Maps sometimes returns undefined instead of 0\n const heading = map.getHeading() || 0;\n\n let zoom = (map.getZoom() as number) - 1;\n\n let scale;\n\n if (bearing === 0) {\n // At full world view (always unrotated) simply compare height, as diagonal\n // is incorrect due to multiple world copies\n scale = height ? (bottomLeft.y - topRight.y) / height : 1;\n } else if (bearing === heading) {\n // Fractional zoom calculation only correct when bearing is not animating\n const viewDiagonal = new Vector2([topRight.x, topRight.y])\n .sub([bottomLeft.x, bottomLeft.y])\n .len();\n const mapDiagonal = new Vector2([width, -height]).len();\n scale = mapDiagonal ? viewDiagonal / mapDiagonal : 1;\n }\n\n // When resizing aggressively, occasionally ne and sw are the same points\n // See https://github.com/visgl/deck.gl/issues/4218\n zoom += Math.log2(scale || 1);\n\n return {\n width,\n height,\n left: leftOffset,\n top: topOffset,\n zoom,\n bearing,\n pitch: map.getTilt(),\n latitude,\n longitude\n };\n}\n\n/* eslint-enable max-statements */\n\n/**\n * Get the current view state\n * @param map (google.maps.Map) - The parent Map instance\n * @param transformer (google.maps.CoordinateTransformer) - A CoordinateTransformer instance\n */\nexport function getViewPropsFromCoordinateTransformer(\n map: google.maps.Map,\n transformer: google.maps.CoordinateTransformer\n) {\n const {width, height} = getMapSize(map);\n const {center, heading: bearing, tilt: pitch, zoom} = transformer.getCameraParams();\n\n // Match Google projection matrix\n const fovy = 25;\n const aspect = height ? width / height : 1;\n\n // Match depth range (crucial for correct z-sorting)\n const near = 0.75;\n const far = 300000000000000;\n // const far = Infinity;\n\n const projectionMatrix = new Matrix4().perspective({\n fovy: (fovy * Math.PI) / 180,\n aspect,\n near,\n far\n });\n const focalDistance = 0.5 * projectionMatrix[5];\n\n return {\n width,\n height,\n viewState: {\n altitude: focalDistance,\n bearing,\n latitude: center.lat(),\n longitude: center.lng(),\n pitch,\n projectionMatrix,\n repeat: true,\n zoom: zoom - 1\n }\n };\n}\n\nfunction getMapSize(map: google.maps.Map): {width: number; height: number} {\n // The map fills the container div unless it's in fullscreen mode\n // at which point the first child of the container is promoted\n const container = map.getDiv().firstChild as HTMLElement | null;\n return {\n // @ts-ignore (TS2531) Object is possibly 'null'\n width: container.offsetWidth,\n // @ts-ignore (TS2531) Object is possibly 'null'\n height: container.offsetHeight\n };\n}\n\nfunction pixelToLngLat(\n projection: google.maps.MapCanvasProjection,\n x: number,\n y: number\n): [longitude: number, latitude: number] {\n const point = new google.maps.Point(x, y);\n const latLng = projection.fromContainerPixelToLatLng(point);\n // @ts-ignore (TS2531) Object is possibly 'null'\n return [latLng.lng(), latLng.lat()];\n}\n\nfunction getEventPixel(event, deck: Deck): {x: number; y: number} {\n if (event.pixel) {\n return event.pixel;\n }\n // event.pixel may not exist when clicking on a POI\n // https://developers.google.com/maps/documentation/javascript/reference/map#MouseEvent\n const point = deck.getViewports()[0].project([event.latLng.lng(), event.latLng.lat()]);\n return {\n x: point[0],\n y: point[1]\n };\n}\n\n// Triggers picking on a mouse event\nfunction handleMouseEvent(deck: Deck, type: string, event) {\n const mockEvent: Record = {\n type,\n offsetCenter: getEventPixel(event, deck),\n srcEvent: event\n };\n\n switch (type) {\n case 'click':\n mockEvent.tapCount = 1;\n // Hack: because we do not listen to pointer down, perform picking now\n deck._onPointerDown(mockEvent as MjolnirPointerEvent);\n deck._onEvent(mockEvent as MjolnirGestureEvent);\n break;\n\n case 'dblclick':\n mockEvent.type = 'click';\n mockEvent.tapCount = 2;\n deck._onEvent(mockEvent as MjolnirGestureEvent);\n break;\n\n case 'mousemove':\n mockEvent.type = 'pointermove';\n deck._onPointerMove(mockEvent as MjolnirPointerEvent);\n break;\n\n case 'mouseout':\n mockEvent.type = 'pointerleave';\n deck._onPointerMove(mockEvent as MjolnirPointerEvent);\n break;\n\n default:\n return;\n }\n}\n","/* global google */\nimport {getParameters, setParameters, withParameters} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport {\n createDeckInstance,\n destroyDeckInstance,\n getViewPropsFromOverlay,\n getViewPropsFromCoordinateTransformer\n} from './utils';\nimport {Deck} from '@deck.gl/core';\n\nimport type {DeckProps} from '@deck.gl/core';\n\nconst HIDE_ALL_LAYERS = () => false;\nconst GL_STATE = {\n depthMask: true,\n depthTest: true,\n blend: true,\n blendFunc: [GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA, GL.ONE, GL.ONE_MINUS_SRC_ALPHA],\n blendEquation: GL.FUNC_ADD\n};\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n\nconst defaultProps = {\n interleaved: true\n};\n\nexport type GoogleMapsOverlayProps = DeckProps & {\n interleaved?: boolean;\n};\n\nexport default class GoogleMapsOverlay {\n private props: GoogleMapsOverlayProps = {};\n private _map: google.maps.Map | null = null;\n private _deck: Deck | null = null;\n private _overlay: google.maps.WebGLOverlayView | google.maps.OverlayView | null = null;\n\n constructor(props: GoogleMapsOverlayProps) {\n this.setProps({...defaultProps, ...props});\n }\n\n /* Public API */\n\n /** Add/remove the overlay from a map. */\n setMap(map: google.maps.Map | null): void {\n if (map === this._map) {\n return;\n }\n if (this._map) {\n this._overlay?.setMap(null);\n this._map = null;\n }\n if (map) {\n this._map = map;\n const {UNINITIALIZED} = google.maps.RenderingType;\n const renderingType = map.getRenderingType();\n if (renderingType !== UNINITIALIZED) {\n this._createOverlay(map);\n } else {\n map.addListener('renderingtype_changed', () => {\n this._createOverlay(map);\n });\n }\n }\n }\n\n /**\n * Update (partial) props.\n */\n setProps(props: Partial): void {\n Object.assign(this.props, props);\n if (this._deck) {\n if (props.style) {\n // @ts-ignore accessing protected member\n const parentStyle = this._deck.canvas.parentElement.style;\n Object.assign(parentStyle, props.style);\n props.style = null;\n }\n this._deck.setProps(props);\n }\n }\n\n /** Equivalent of `deck.pickObject`. */\n pickObject(params) {\n return this._deck && this._deck.pickObject(params);\n }\n\n /** Equivalent of `deck.pickObjects`. */\n pickMultipleObjects(params) {\n return this._deck && this._deck.pickMultipleObjects(params);\n }\n\n /** Equivalent of `deck.pickMultipleObjects`. */\n pickObjects(params) {\n return this._deck && this._deck.pickObjects(params);\n }\n\n /** Remove the overlay and release all underlying resources. */\n finalize() {\n this.setMap(null);\n if (this._deck) {\n destroyDeckInstance(this._deck);\n this._deck = null;\n }\n }\n\n /* Private API */\n _createOverlay(map: google.maps.Map) {\n const {interleaved} = this.props;\n const {VECTOR, UNINITIALIZED} = google.maps.RenderingType;\n const renderingType = map.getRenderingType();\n if (renderingType === UNINITIALIZED) {\n return;\n }\n\n const isVectorMap = renderingType === VECTOR && google.maps.WebGLOverlayView;\n const OverlayView = isVectorMap ? google.maps.WebGLOverlayView : google.maps.OverlayView;\n const overlay = new OverlayView();\n\n if (overlay instanceof google.maps.WebGLOverlayView) {\n if (interleaved) {\n overlay.onAdd = noop;\n overlay.onContextRestored = this._onContextRestored.bind(this);\n overlay.onDraw = this._onDrawVectorInterleaved.bind(this);\n } else {\n overlay.onAdd = this._onAdd.bind(this);\n overlay.onContextRestored = noop;\n overlay.onDraw = this._onDrawVectorOverlay.bind(this);\n }\n overlay.onContextLost = this._onContextLost.bind(this);\n } else {\n overlay.onAdd = this._onAdd.bind(this);\n overlay.draw = this._onDrawRaster.bind(this);\n }\n overlay.onRemove = this._onRemove.bind(this);\n\n this._overlay = overlay;\n this._overlay.setMap(map);\n }\n\n _onAdd() {\n // @ts-ignore (TS2345) map is defined at this stage\n this._deck = createDeckInstance(this._map, this._overlay, this._deck, this.props);\n }\n\n _onContextRestored({gl}) {\n if (!this._map || !this._overlay) {\n return;\n }\n const _customRender = () => {\n if (this._overlay) {\n (this._overlay as google.maps.WebGLOverlayView).requestRedraw();\n }\n };\n const deck = createDeckInstance(this._map, this._overlay, this._deck, {\n gl,\n _customRender,\n ...this.props\n });\n this._deck = deck;\n\n // By default, animationLoop._renderFrame invokes\n // animationLoop.onRender. We override this to wrap\n // in withParameters so we don't modify the GL state\n // @ts-ignore accessing protected member\n const {animationLoop} = deck;\n animationLoop._renderFrame = () => {\n const ab = gl.getParameter(gl.ARRAY_BUFFER_BINDING);\n withParameters(gl, {}, () => {\n animationLoop.onRender();\n });\n gl.bindBuffer(gl.ARRAY_BUFFER, ab);\n };\n }\n\n _onContextLost() {\n // TODO this isn't working\n if (this._deck) {\n destroyDeckInstance(this._deck);\n this._deck = null;\n }\n }\n\n _onRemove() {\n this._deck?.setProps({layerFilter: HIDE_ALL_LAYERS});\n }\n\n _onDrawRaster() {\n if (!this._deck || !this._map) {\n return;\n }\n const deck = this._deck;\n\n const {width, height, left, top, ...rest} = getViewPropsFromOverlay(\n this._map,\n this._overlay as google.maps.OverlayView\n );\n\n // @ts-ignore accessing protected member\n const parentStyle = deck.canvas.parentElement.style;\n parentStyle.left = `${left}px`;\n parentStyle.top = `${top}px`;\n\n const altitude = 10000;\n deck.setProps({\n width,\n height,\n viewState: {altitude, repeat: true, ...rest}\n });\n // Deck is initialized\n deck.redraw();\n }\n\n // Vector code path\n _onDrawVectorInterleaved({gl, transformer}) {\n if (!this._deck || !this._map) {\n return;\n }\n\n const deck = this._deck;\n\n deck.setProps({\n ...getViewPropsFromCoordinateTransformer(this._map, transformer),\n\n // Using external gl context - do not set css size\n width: null,\n height: null\n });\n\n if (deck.isInitialized) {\n // As an optimization, some renders are to an separate framebuffer\n // which we need to pass onto deck\n const _framebuffer = getParameters(gl, GL.FRAMEBUFFER_BINDING);\n deck.setProps({_framebuffer});\n\n // Camera changed, will trigger a map repaint right after this\n // Clear any change flag triggered by setting viewState so that deck does not request\n // a second repaint\n deck.needsRedraw({clearRedrawFlags: true});\n\n // Workaround for bug in Google maps where viewport state is wrong\n // TODO remove once fixed\n setParameters(gl, {\n viewport: [0, 0, gl.canvas.width, gl.canvas.height],\n scissor: [0, 0, gl.canvas.width, gl.canvas.height],\n stencilFunc: [gl.ALWAYS, 0, 255, gl.ALWAYS, 0, 255]\n });\n\n withParameters(gl, GL_STATE, () => {\n deck._drawLayers('google-vector', {\n clearCanvas: false\n });\n });\n }\n }\n\n _onDrawVectorOverlay({transformer}) {\n if (!this._deck || !this._map) {\n return;\n }\n\n const deck = this._deck;\n\n deck.setProps({\n ...getViewPropsFromCoordinateTransformer(this._map, transformer)\n });\n deck.redraw();\n }\n}\n","export {default as GoogleMapsOverlay} from './google-maps-overlay';\nexport type {GoogleMapsOverlayProps} from './google-maps-overlay';\n","// Functions to wrangle data from pydeck's row major order matrix dataframe to the deck.gl binary data format.\n// The format used is described here:\n// https://deck.gl/#/documentation/developer-guide/performance-optimization?section=supply-attributes-directly\n\n// eslint-disable-next-line complexity\nfunction dtypeToTypedArray(dtype) {\n // Supports converting a numpy-typed array to a JavaScript-typed array\n // based on a string value dtype and a DataView `data`\n switch (dtype) {\n case 'int8':\n return Int8Array;\n case 'uint8':\n return Uint8Array;\n case 'int16':\n return Int16Array;\n case 'uint16':\n return Uint16Array;\n case 'float32':\n return Float32Array;\n case 'float64':\n return Float64Array;\n case 'int32':\n return Int32Array;\n case 'uint32':\n return Uint32Array;\n case 'int64':\n return BigInt64Array; // eslint-disable-line no-undef\n case 'uint64':\n return BigUint64Array; // eslint-disable-line no-undef\n default:\n throw new Error(`Unrecognized dtype ${dtype}`);\n }\n}\n\nexport function deserializeMatrix(obj, manager) {\n if (!obj) {\n return null;\n }\n for (const layerId in obj) {\n const attributes = obj[layerId].attributes;\n for (const accessorName in attributes) {\n const {dtype, value} = attributes[accessorName];\n const ArrayType = dtypeToTypedArray(dtype);\n attributes[accessorName].value = new ArrayType(value.buffer);\n }\n }\n // Becomes the data stored within the widget model at `model.get('data_buffer')`\n return obj;\n}\n","import {DOMWidgetModel} from '@jupyter-widgets/base';\nimport {MODULE_NAME, MODULE_VERSION} from '../version';\nimport {deserializeMatrix} from './utils/deserialize-matrix';\n/**\n *\n * Note: Variables shared explictly between Python and JavaScript use snake_case\n */\nexport default class JupyterTransportModel extends DOMWidgetModel {\n defaults() {\n return {\n ...super.defaults(),\n _model_name: JupyterTransportModel.model_name,\n _model_module: JupyterTransportModel.model_module,\n _model_module_version: JupyterTransportModel.model_module_version,\n _view_name: JupyterTransportModel.view_name,\n _view_module: JupyterTransportModel.view_module,\n _view_module_version: JupyterTransportModel.view_module_version,\n custom_libraries: [],\n json_input: null,\n mapbox_key: null,\n selected_data: [],\n data_buffer: null,\n tooltip: null,\n width: '100%',\n height: 500,\n js_warning: false\n };\n }\n\n static get serializers() {\n return {\n ...DOMWidgetModel.serializers,\n // Add any extra serializers here\n data_buffer: {deserialize: deserializeMatrix}\n };\n }\n\n static get model_name() {\n return 'JupyterTransportModel';\n }\n static get model_module() {\n return MODULE_NAME;\n }\n static get model_module_version() {\n return MODULE_VERSION;\n }\n static get view_name() {\n return 'JupyterTransportView';\n }\n static get view_module() {\n return MODULE_NAME;\n }\n static get view_module_version() {\n return MODULE_VERSION;\n }\n}\n","import * as deckBundle from '../deck-bundle';\n\nimport {Transport} from '@deck.gl/json';\n\nimport {createContainer} from './utils/css-utils';\n\nimport {loadMapboxCSS} from './utils/mapbox-utils';\n\nimport {jsonConverter, createDeck} from './create-deck';\n\nexport function initPlayground() {\n Transport.setCallbacks({\n onInitialize({transport}) {\n // Extract \"deck.gl playground\" props\n const {width, height, customLibraries, mapboxApiKey, jsonInput, tooltip} =\n getPlaygroundProps(transport);\n\n // Load mapbox CSS\n loadMapboxCSS();\n\n // Create container div for deck.gl\n const transportRootElement = transport.getRootDOMElement();\n const deckContainer = createContainer(width, height);\n transportRootElement.appendChild(deckContainer);\n\n const jsonProps = JSON.parse(jsonInput);\n\n const deck = createDeck({\n mapboxApiKey,\n container: deckContainer,\n jsonInput: jsonProps,\n tooltip,\n handleEvent: (name, payload) => sendEventViaTransport(transport, name, payload),\n customLibraries\n });\n\n transport.userData.deck = deck;\n },\n\n onFinalize({transport}) {\n const {deck} = transport.userData;\n deck.finalize();\n },\n\n onMessage({transport, type, json, binary}) {\n const {deck} = transport.userData;\n let convertedJson;\n switch (type) {\n case 'json':\n convertedJson = jsonConverter.convert(json);\n deck.setProps(convertedJson);\n break;\n\n case 'json-with-binary':\n convertedJson = jsonConverter.convert(json);\n const binaryData = transport.jupyterModel.get('data_buffer');\n const propsWithBinary = processDataBuffer({\n binary: binaryData,\n convertedJson\n });\n deck.setProps(propsWithBinary);\n break;\n\n default:\n // console.warn(type)\n }\n }\n });\n}\n\n// HELPER FUNCTIONS\n\n// Takes JSON props and combines them with the binary data buffer\nexport function processDataBuffer({binary, convertedJson}) {\n for (let i = 0; i < convertedJson.layers.length; i++) {\n const layerId = convertedJson.layers[i].id;\n const layer = convertedJson.layers[i];\n // Replace data on every layer prop\n convertedJson.layers[i] = layer.clone({data: binary[layerId]});\n }\n return convertedJson;\n}\n\n// Filters circular references on JSON string conversion\nfunction filterJsonValue(key, value) {\n return value instanceof deckBundle.Layer ? value.id : value;\n}\n\n// Handles a general event\nfunction sendEventViaTransport(transport, eventName, data) {\n if (eventName === 'hover' && !data.picked && data.index === -1) {\n // TODO handle background hover events, for now we'll skip them\n return;\n }\n\n // TODO Remove circular references without converting to a string\n const deckEvent = JSON.parse(JSON.stringify(data, filterJsonValue));\n\n // Note: transport.sendJSONMessage now filters circular references\n transport.sendJSONMessage(eventName, deckEvent);\n}\n\n// Get non-deck \"playground\" props\n// TODO: hack we are accessing model directly\n// TODO - these inputs can be passed as top-level JSON props, no need to add custom model fields\n\nfunction getPlaygroundProps(transport) {\n const {jupyterModel} = transport;\n if (!jupyterModel) {\n throw new Error('deck.gl playground currently only works with the Jupyter Widget Transport');\n }\n\n return {\n width: jupyterModel.get('width'),\n height: jupyterModel.get('height'),\n customLibraries: jupyterModel.get('custom_libraries'),\n mapboxApiKey: jupyterModel.get('mapbox_key'),\n jsonInput: jupyterModel.get('json_input'),\n tooltip: jupyterModel.get('tooltip')\n };\n}\n","export {initPlayground} from './playground';\n\n// For to_html()...\nexport {createDeck, updateDeck} from './create-deck';\n","import Geometry from '../geometry/geometry';\nimport { uid } from '@luma.gl/webgl';\nconst CUBE_INDICES = new Uint16Array([0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23]);\nconst CUBE_POSITIONS = new Float32Array([-1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1]);\nconst CUBE_NORMALS = new Float32Array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0]);\nconst CUBE_TEX_COORDS = new Float32Array([0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1]);\nconst ATTRIBUTES = {\n POSITION: {\n size: 3,\n value: new Float32Array(CUBE_POSITIONS)\n },\n NORMAL: {\n size: 3,\n value: new Float32Array(CUBE_NORMALS)\n },\n TEXCOORD_0: {\n size: 2,\n value: new Float32Array(CUBE_TEX_COORDS)\n }\n};\nexport default class CubeGeometry extends Geometry {\n constructor() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n id = uid('cube-geometry')\n } = props;\n super({ ...props,\n id,\n indices: {\n size: 1,\n value: new Uint16Array(CUBE_INDICES)\n },\n attributes: { ...ATTRIBUTES,\n ...props.attributes\n }\n });\n }\n\n}\n//# sourceMappingURL=cube-geometry.js.map","import checkIfBrowser from '../lib/is-browser';\nexport { self, window, global, document, process, console } from '../lib/globals';\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'untranspiled source';\nexport const isBrowser = checkIfBrowser();\n//# sourceMappingURL=globals.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction getStorage(type) {\n try {\n const storage = window[type];\n const x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return storage;\n } catch (e) {\n return null;\n }\n}\n\nexport default class LocalStorage {\n constructor(id) {\n let defaultSettings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'sessionStorage';\n\n _defineProperty(this, \"storage\", void 0);\n\n _defineProperty(this, \"id\", void 0);\n\n _defineProperty(this, \"config\", {});\n\n this.storage = getStorage(type);\n this.id = id;\n this.config = {};\n Object.assign(this.config, defaultSettings);\n\n this._loadConfiguration();\n }\n\n getConfiguration() {\n return this.config;\n }\n\n setConfiguration(configuration) {\n this.config = {};\n return this.updateConfiguration(configuration);\n }\n\n updateConfiguration(configuration) {\n Object.assign(this.config, configuration);\n\n if (this.storage) {\n const serialized = JSON.stringify(this.config);\n this.storage.setItem(this.id, serialized);\n }\n\n return this;\n }\n\n _loadConfiguration() {\n let configuration = {};\n\n if (this.storage) {\n const serializedConfiguration = this.storage.getItem(this.id);\n configuration = serializedConfiguration ? JSON.parse(serializedConfiguration) : {};\n }\n\n Object.assign(this.config, configuration);\n return this;\n }\n\n}\n//# sourceMappingURL=local-storage.js.map","export function formatTime(ms) {\n let formatted;\n\n if (ms < 10) {\n formatted = \"\".concat(ms.toFixed(2), \"ms\");\n } else if (ms < 100) {\n formatted = \"\".concat(ms.toFixed(1), \"ms\");\n } else if (ms < 1000) {\n formatted = \"\".concat(ms.toFixed(0), \"ms\");\n } else {\n formatted = \"\".concat((ms / 1000).toFixed(2), \"s\");\n }\n\n return formatted;\n}\nexport function leftPad(string) {\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 8;\n const padLength = Math.max(length - string.length, 0);\n return \"\".concat(' '.repeat(padLength)).concat(string);\n}\nexport function rightPad(string) {\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 8;\n const padLength = Math.max(length - string.length, 0);\n return \"\".concat(string).concat(' '.repeat(padLength));\n}\nexport function formatValue(v) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const EPSILON = 1e-16;\n const {\n isInteger = false\n } = opts;\n\n if (Array.isArray(v) || ArrayBuffer.isView(v)) {\n return formatArrayValue(v, opts);\n }\n\n if (!Number.isFinite(v)) {\n return String(v);\n }\n\n if (Math.abs(v) < EPSILON) {\n return isInteger ? '0' : '0.';\n }\n\n if (isInteger) {\n return v.toFixed(0);\n }\n\n if (Math.abs(v) > 100 && Math.abs(v) < 10000) {\n return v.toFixed(0);\n }\n\n const string = v.toPrecision(2);\n const decimal = string.indexOf('.0');\n return decimal === string.length - 2 ? string.slice(0, -1) : string;\n}\n\nfunction formatArrayValue(v, opts) {\n const {\n maxElts = 16,\n size = 1\n } = opts;\n let string = '[';\n\n for (let i = 0; i < v.length && i < maxElts; ++i) {\n if (i > 0) {\n string += \",\".concat(i % size === 0 ? ' ' : '');\n }\n\n string += formatValue(v[i], opts);\n }\n\n const terminator = v.length > maxElts ? '...' : ']';\n return \"\".concat(string).concat(terminator);\n}\n\nexport function formatImage(image, message, scale) {\n let maxWidth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 600;\n const imageUrl = image.src.replace(/\\(/g, '%28').replace(/\\)/g, '%29');\n\n if (image.width > maxWidth) {\n scale = Math.min(scale, maxWidth / image.width);\n }\n\n const width = image.width * scale;\n const height = image.height * scale;\n const style = ['font-size:1px;', \"padding:\".concat(Math.floor(height / 2), \"px \").concat(Math.floor(width / 2), \"px;\"), \"line-height:\".concat(height, \"px;\"), \"background:url(\".concat(imageUrl, \");\"), \"background-size:\".concat(width, \"px \").concat(height, \"px;\"), 'color:transparent;'].join('');\n return [\"\".concat(message, \" %c+\"), style];\n}\n//# sourceMappingURL=formatters.js.map","import { isBrowser } from '@probe.gl/env';\nexport let COLOR;\n\n(function (COLOR) {\n COLOR[COLOR[\"BLACK\"] = 30] = \"BLACK\";\n COLOR[COLOR[\"RED\"] = 31] = \"RED\";\n COLOR[COLOR[\"GREEN\"] = 32] = \"GREEN\";\n COLOR[COLOR[\"YELLOW\"] = 33] = \"YELLOW\";\n COLOR[COLOR[\"BLUE\"] = 34] = \"BLUE\";\n COLOR[COLOR[\"MAGENTA\"] = 35] = \"MAGENTA\";\n COLOR[COLOR[\"CYAN\"] = 36] = \"CYAN\";\n COLOR[COLOR[\"WHITE\"] = 37] = \"WHITE\";\n COLOR[COLOR[\"BRIGHT_BLACK\"] = 90] = \"BRIGHT_BLACK\";\n COLOR[COLOR[\"BRIGHT_RED\"] = 91] = \"BRIGHT_RED\";\n COLOR[COLOR[\"BRIGHT_GREEN\"] = 92] = \"BRIGHT_GREEN\";\n COLOR[COLOR[\"BRIGHT_YELLOW\"] = 93] = \"BRIGHT_YELLOW\";\n COLOR[COLOR[\"BRIGHT_BLUE\"] = 94] = \"BRIGHT_BLUE\";\n COLOR[COLOR[\"BRIGHT_MAGENTA\"] = 95] = \"BRIGHT_MAGENTA\";\n COLOR[COLOR[\"BRIGHT_CYAN\"] = 96] = \"BRIGHT_CYAN\";\n COLOR[COLOR[\"BRIGHT_WHITE\"] = 97] = \"BRIGHT_WHITE\";\n})(COLOR || (COLOR = {}));\n\nfunction getColor(color) {\n return typeof color === 'string' ? COLOR[color.toUpperCase()] || COLOR.WHITE : color;\n}\n\nexport function addColor(string, color, background) {\n if (!isBrowser && typeof string === 'string') {\n if (color) {\n color = getColor(color);\n string = \"\\x1B[\".concat(color, \"m\").concat(string, \"\\x1B[39m\");\n }\n\n if (background) {\n color = getColor(background);\n string = \"\\x1B[\".concat(background + 10, \"m\").concat(string, \"\\x1B[49m\");\n }\n }\n\n return string;\n}\n//# sourceMappingURL=color.js.map","export default function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'Assertion failed');\n }\n}\n//# sourceMappingURL=assert.js.map","import { window, process, isBrowser } from '@probe.gl/env';\nexport function getHiResTimestamp() {\n let timestamp;\n\n if (isBrowser && 'performance' in window) {\n var _window$performance, _window$performance$n;\n\n timestamp = window === null || window === void 0 ? void 0 : (_window$performance = window.performance) === null || _window$performance === void 0 ? void 0 : (_window$performance$n = _window$performance.now) === null || _window$performance$n === void 0 ? void 0 : _window$performance$n.call(_window$performance);\n } else if ('hrtime' in process) {\n var _process$hrtime;\n\n const timeParts = process === null || process === void 0 ? void 0 : (_process$hrtime = process.hrtime) === null || _process$hrtime === void 0 ? void 0 : _process$hrtime.call(process);\n timestamp = timeParts[0] * 1000 + timeParts[1] / 1e6;\n } else {\n timestamp = Date.now();\n }\n\n return timestamp;\n}\n//# sourceMappingURL=hi-res-timestamp.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { VERSION, isBrowser } from '@probe.gl/env';\nimport LocalStorage from './utils/local-storage';\nimport { formatImage, formatTime, leftPad } from './utils/formatters';\nimport { addColor } from './utils/color';\nimport { autobind } from './utils/autobind';\nimport assert from './utils/assert';\nimport { getHiResTimestamp } from './utils/hi-res-timestamp';\nconst originalConsole = {\n debug: isBrowser ? console.debug || console.log : console.log,\n log: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error\n};\nconst DEFAULT_SETTINGS = {\n enabled: true,\n level: 0\n};\n\nfunction noop() {}\n\nconst cache = {};\nconst ONCE = {\n once: true\n};\nexport default class Log {\n constructor() {\n let {\n id\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n id: ''\n };\n\n _defineProperty(this, \"id\", void 0);\n\n _defineProperty(this, \"VERSION\", VERSION);\n\n _defineProperty(this, \"_startTs\", getHiResTimestamp());\n\n _defineProperty(this, \"_deltaTs\", getHiResTimestamp());\n\n _defineProperty(this, \"_storage\", void 0);\n\n _defineProperty(this, \"userData\", {});\n\n _defineProperty(this, \"LOG_THROTTLE_TIMEOUT\", 0);\n\n this.id = id;\n this._storage = new LocalStorage(\"__probe-\".concat(this.id, \"__\"), DEFAULT_SETTINGS);\n this.userData = {};\n this.timeStamp(\"\".concat(this.id, \" started\"));\n autobind(this);\n Object.seal(this);\n }\n\n set level(newLevel) {\n this.setLevel(newLevel);\n }\n\n get level() {\n return this.getLevel();\n }\n\n isEnabled() {\n return this._storage.config.enabled;\n }\n\n getLevel() {\n return this._storage.config.level;\n }\n\n getTotal() {\n return Number((getHiResTimestamp() - this._startTs).toPrecision(10));\n }\n\n getDelta() {\n return Number((getHiResTimestamp() - this._deltaTs).toPrecision(10));\n }\n\n set priority(newPriority) {\n this.level = newPriority;\n }\n\n get priority() {\n return this.level;\n }\n\n getPriority() {\n return this.level;\n }\n\n enable() {\n let enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n this._storage.updateConfiguration({\n enabled\n });\n\n return this;\n }\n\n setLevel(level) {\n this._storage.updateConfiguration({\n level\n });\n\n return this;\n }\n\n get(setting) {\n return this._storage.config[setting];\n }\n\n set(setting, value) {\n this._storage.updateConfiguration({\n [setting]: value\n });\n }\n\n settings() {\n if (console.table) {\n console.table(this._storage.config);\n } else {\n console.log(this._storage.config);\n }\n }\n\n assert(condition, message) {\n assert(condition, message);\n }\n\n warn(message) {\n return this._getLogFunction(0, message, originalConsole.warn, arguments, ONCE);\n }\n\n error(message) {\n return this._getLogFunction(0, message, originalConsole.error, arguments);\n }\n\n deprecated(oldUsage, newUsage) {\n return this.warn(\"`\".concat(oldUsage, \"` is deprecated and will be removed in a later version. Use `\").concat(newUsage, \"` instead\"));\n }\n\n removed(oldUsage, newUsage) {\n return this.error(\"`\".concat(oldUsage, \"` has been removed. Use `\").concat(newUsage, \"` instead\"));\n }\n\n probe(logLevel, message) {\n return this._getLogFunction(logLevel, message, originalConsole.log, arguments, {\n time: true,\n once: true\n });\n }\n\n log(logLevel, message) {\n return this._getLogFunction(logLevel, message, originalConsole.debug, arguments);\n }\n\n info(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.info, arguments);\n }\n\n once(logLevel, message) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n return this._getLogFunction(logLevel, message, originalConsole.debug || originalConsole.info, arguments, ONCE);\n }\n\n table(logLevel, table, columns) {\n if (table) {\n return this._getLogFunction(logLevel, table, console.table || noop, columns && [columns], {\n tag: getTableHeader(table)\n });\n }\n\n return noop;\n }\n\n image(_ref) {\n let {\n logLevel,\n priority,\n image,\n message = '',\n scale = 1\n } = _ref;\n\n if (!this._shouldLog(logLevel || priority)) {\n return noop;\n }\n\n return isBrowser ? logImageInBrowser({\n image,\n message,\n scale\n }) : logImageInNode({\n image,\n message,\n scale\n });\n }\n\n time(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.time ? console.time : console.info);\n }\n\n timeEnd(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.timeEnd ? console.timeEnd : console.info);\n }\n\n timeStamp(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.timeStamp || noop);\n }\n\n group(logLevel, message) {\n let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n collapsed: false\n };\n const options = normalizeArguments({\n logLevel,\n message,\n opts\n });\n const {\n collapsed\n } = opts;\n options.method = (collapsed ? console.groupCollapsed : console.group) || console.info;\n return this._getLogFunction(options);\n }\n\n groupCollapsed(logLevel, message) {\n let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.group(logLevel, message, Object.assign({}, opts, {\n collapsed: true\n }));\n }\n\n groupEnd(logLevel) {\n return this._getLogFunction(logLevel, '', console.groupEnd || noop);\n }\n\n withGroup(logLevel, message, func) {\n this.group(logLevel, message)();\n\n try {\n func();\n } finally {\n this.groupEnd(logLevel)();\n }\n }\n\n trace() {\n if (console.trace) {\n console.trace();\n }\n }\n\n _shouldLog(logLevel) {\n return this.isEnabled() && this.getLevel() >= normalizeLogLevel(logLevel);\n }\n\n _getLogFunction(logLevel, message, method, args, opts) {\n if (this._shouldLog(logLevel)) {\n opts = normalizeArguments({\n logLevel,\n message,\n args,\n opts\n });\n method = method || opts.method;\n assert(method);\n opts.total = this.getTotal();\n opts.delta = this.getDelta();\n this._deltaTs = getHiResTimestamp();\n const tag = opts.tag || opts.message;\n\n if (opts.once) {\n if (!cache[tag]) {\n cache[tag] = getHiResTimestamp();\n } else {\n return noop;\n }\n }\n\n message = decorateMessage(this.id, opts.message, opts);\n return method.bind(console, message, ...opts.args);\n }\n\n return noop;\n }\n\n}\n\n_defineProperty(Log, \"VERSION\", VERSION);\n\nfunction normalizeLogLevel(logLevel) {\n if (!logLevel) {\n return 0;\n }\n\n let resolvedLevel;\n\n switch (typeof logLevel) {\n case 'number':\n resolvedLevel = logLevel;\n break;\n\n case 'object':\n resolvedLevel = logLevel.logLevel || logLevel.priority || 0;\n break;\n\n default:\n return 0;\n }\n\n assert(Number.isFinite(resolvedLevel) && resolvedLevel >= 0);\n return resolvedLevel;\n}\n\nexport function normalizeArguments(opts) {\n const {\n logLevel,\n message\n } = opts;\n opts.logLevel = normalizeLogLevel(logLevel);\n const args = opts.args ? Array.from(opts.args) : [];\n\n while (args.length && args.shift() !== message) {}\n\n switch (typeof logLevel) {\n case 'string':\n case 'function':\n if (message !== undefined) {\n args.unshift(message);\n }\n\n opts.message = logLevel;\n break;\n\n case 'object':\n Object.assign(opts, logLevel);\n break;\n\n default:\n }\n\n if (typeof opts.message === 'function') {\n opts.message = opts.message();\n }\n\n const messageType = typeof opts.message;\n assert(messageType === 'string' || messageType === 'object');\n return Object.assign(opts, {\n args\n }, opts.opts);\n}\n\nfunction decorateMessage(id, message, opts) {\n if (typeof message === 'string') {\n const time = opts.time ? leftPad(formatTime(opts.total)) : '';\n message = opts.time ? \"\".concat(id, \": \").concat(time, \" \").concat(message) : \"\".concat(id, \": \").concat(message);\n message = addColor(message, opts.color, opts.background);\n }\n\n return message;\n}\n\nfunction logImageInNode(_ref2) {\n let {\n image,\n message = '',\n scale = 1\n } = _ref2;\n let asciify = null;\n\n try {\n asciify = module.require('asciify-image');\n } catch (error) {}\n\n if (asciify) {\n return () => asciify(image, {\n fit: 'box',\n width: \"\".concat(Math.round(80 * scale), \"%\")\n }).then(data => console.log(data));\n }\n\n return noop;\n}\n\nfunction logImageInBrowser(_ref3) {\n let {\n image,\n message = '',\n scale = 1\n } = _ref3;\n\n if (typeof image === 'string') {\n const img = new Image();\n\n img.onload = () => {\n const args = formatImage(img, message, scale);\n console.log(...args);\n };\n\n img.src = image;\n return noop;\n }\n\n const element = image.nodeName || '';\n\n if (element.toLowerCase() === 'img') {\n console.log(...formatImage(image, message, scale));\n return noop;\n }\n\n if (element.toLowerCase() === 'canvas') {\n const img = new Image();\n\n img.onload = () => console.log(...formatImage(img, message, scale));\n\n img.src = image.toDataURL();\n return noop;\n }\n\n return noop;\n}\n\nfunction getTableHeader(table) {\n for (const key in table) {\n for (const title in table[key]) {\n return title || 'untitled';\n }\n }\n\n return 'empty';\n}\n//# sourceMappingURL=log.js.map","export function autobind(obj) {\n let predefined = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['constructor'];\n const proto = Object.getPrototypeOf(obj);\n const propNames = Object.getOwnPropertyNames(proto);\n\n for (const key of propNames) {\n if (typeof obj[key] === 'function') {\n if (!predefined.find(name => key === name)) {\n obj[key] = obj[key].bind(obj);\n }\n }\n }\n}\n//# sourceMappingURL=autobind.js.map","import isBrowser from './is-browser';\nimport isElectron from './is-electron';\nconst window = globalThis;\nexport function isMobile() {\n return typeof window.orientation !== 'undefined';\n}\nexport default function getBrowser(mockUserAgent) {\n if (!mockUserAgent && !isBrowser()) {\n return 'Node';\n }\n\n if (isElectron(mockUserAgent)) {\n return 'Electron';\n }\n\n const navigator_ = typeof navigator !== 'undefined' ? navigator : {};\n const userAgent = mockUserAgent || navigator_.userAgent || '';\n\n if (userAgent.indexOf('Edge') > -1) {\n return 'Edge';\n }\n\n const isMSIE = userAgent.indexOf('MSIE ') !== -1;\n const isTrident = userAgent.indexOf('Trident/') !== -1;\n\n if (isMSIE || isTrident) {\n return 'IE';\n }\n\n if (window.chrome) {\n return 'Chrome';\n }\n\n if (window.safari) {\n return 'Safari';\n }\n\n if (window.mozInnerScreenX) {\n return 'Firefox';\n }\n\n return 'Unknown';\n}\n//# sourceMappingURL=get-browser.js.map","import { isWebGL2, assertWebGL2Context, log } from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport { isObjectEmpty } from '../utils/utils';\nexport default class TransformFeedback extends Resource {\n get [Symbol.toStringTag]() {\n return 'TransformFeedback';\n }\n\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n assertWebGL2Context(gl);\n super(gl, props);\n this.initialize(props);\n this.stubRemovedMethods('TransformFeedback', 'v6.0', ['pause', 'resume']);\n Object.seal(this);\n }\n\n initialize() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.buffers = {};\n this.unused = {};\n this.configuration = null;\n this.bindOnUse = true;\n\n if (!isObjectEmpty(this.buffers)) {\n this.bind(() => this._unbindBuffers());\n }\n\n this.setProps(props);\n return this;\n }\n\n setProps(props) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n\n if ('buffers' in props) {\n this.setBuffers(props.buffers);\n }\n }\n\n setBuffers() {\n let buffers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.bind(() => {\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n });\n return this;\n }\n\n setBuffer(locationOrName, bufferOrParams) {\n const location = this._getVaryingIndex(locationOrName);\n\n const {\n buffer,\n byteSize,\n byteOffset\n } = this._getBufferParams(bufferOrParams);\n\n if (location < 0) {\n this.unused[locationOrName] = buffer;\n log.warn(\"\".concat(this.id, \" unused varying buffer \").concat(locationOrName))();\n return this;\n }\n\n this.buffers[location] = bufferOrParams;\n\n if (!this.bindOnUse) {\n this._bindBuffer(location, buffer, byteOffset, byteSize);\n }\n\n return this;\n }\n\n begin() {\n let primitiveMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this.gl.bindTransformFeedback(36386, this.handle);\n\n this._bindBuffers();\n\n this.gl.beginTransformFeedback(primitiveMode);\n return this;\n }\n\n end() {\n this.gl.endTransformFeedback();\n\n this._unbindBuffers();\n\n this.gl.bindTransformFeedback(36386, null);\n return this;\n }\n\n _getBufferParams(bufferOrParams) {\n let byteOffset;\n let byteSize;\n let buffer;\n\n if (bufferOrParams instanceof Buffer === false) {\n buffer = bufferOrParams.buffer;\n byteSize = bufferOrParams.byteSize;\n byteOffset = bufferOrParams.byteOffset;\n } else {\n buffer = bufferOrParams;\n }\n\n if (byteOffset !== undefined || byteSize !== undefined) {\n byteOffset = byteOffset || 0;\n byteSize = byteSize || buffer.byteLength - byteOffset;\n }\n\n return {\n buffer,\n byteOffset,\n byteSize\n };\n }\n\n _getVaryingInfo(locationOrName) {\n return this.configuration && this.configuration.getVaryingInfo(locationOrName);\n }\n\n _getVaryingIndex(locationOrName) {\n if (this.configuration) {\n return this.configuration.getVaryingInfo(locationOrName).location;\n }\n\n const location = Number(locationOrName);\n return Number.isFinite(location) ? location : -1;\n }\n\n _bindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n const {\n buffer,\n byteSize,\n byteOffset\n } = this._getBufferParams(this.buffers[bufferIndex]);\n\n this._bindBuffer(bufferIndex, buffer, byteOffset, byteSize);\n }\n }\n }\n\n _unbindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n this._bindBuffer(bufferIndex, null);\n }\n }\n }\n\n _bindBuffer(index, buffer) {\n let byteOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n let byteSize = arguments.length > 3 ? arguments[3] : undefined;\n const handle = buffer && buffer.handle;\n\n if (!handle || byteSize === undefined) {\n this.gl.bindBufferBase(35982, index, handle);\n } else {\n this.gl.bindBufferRange(35982, index, handle, byteOffset, byteSize);\n }\n\n return this;\n }\n\n _createHandle() {\n return this.gl.createTransformFeedback();\n }\n\n _deleteHandle() {\n this.gl.deleteTransformFeedback(this.handle);\n }\n\n _bindHandle(handle) {\n this.gl.bindTransformFeedback(36386, this.handle);\n }\n\n}\n//# sourceMappingURL=transform-feedback.js.map","let channelHandles = 1;\nlet animationHandles = 1;\nexport class Timeline {\n constructor() {\n this.time = 0;\n this.channels = new Map();\n this.animations = new Map();\n this.playing = false;\n this.lastEngineTime = -1;\n }\n\n addChannel(props) {\n const {\n delay = 0,\n duration = Number.POSITIVE_INFINITY,\n rate = 1,\n repeat = 1\n } = props;\n const handle = channelHandles++;\n const channel = {\n time: 0,\n delay,\n duration,\n rate,\n repeat\n };\n\n this._setChannelTime(channel, this.time);\n\n this.channels.set(handle, channel);\n return handle;\n }\n\n removeChannel(handle) {\n this.channels.delete(handle);\n\n for (const [animationHandle, animation] of this.animations) {\n if (animation.channel === handle) {\n this.detachAnimation(animationHandle);\n }\n }\n }\n\n isFinished(handle) {\n const channel = this.channels.get(handle);\n\n if (channel === undefined) {\n return false;\n }\n\n return this.time >= channel.delay + channel.duration * channel.repeat;\n }\n\n getTime(handle) {\n if (handle === undefined) {\n return this.time;\n }\n\n const channel = this.channels.get(handle);\n\n if (channel === undefined) {\n return -1;\n }\n\n return channel.time;\n }\n\n setTime(time) {\n this.time = Math.max(0, time);\n const channels = this.channels.values();\n\n for (const channel of channels) {\n this._setChannelTime(channel, this.time);\n }\n\n const animations = this.animations.values();\n\n for (const animationData of animations) {\n const {\n animation,\n channel\n } = animationData;\n animation.setTime(this.getTime(channel));\n }\n }\n\n play() {\n this.playing = true;\n }\n\n pause() {\n this.playing = false;\n this.lastEngineTime = -1;\n }\n\n reset() {\n this.setTime(0);\n }\n\n attachAnimation(animation, channelHandle) {\n const animationHandle = animationHandles++;\n this.animations.set(animationHandle, {\n animation,\n channel: channelHandle\n });\n animation.setTime(this.getTime(channelHandle));\n return animationHandle;\n }\n\n detachAnimation(handle) {\n this.animations.delete(handle);\n }\n\n update(engineTime) {\n if (this.playing) {\n if (this.lastEngineTime === -1) {\n this.lastEngineTime = engineTime;\n }\n\n this.setTime(this.time + (engineTime - this.lastEngineTime));\n this.lastEngineTime = engineTime;\n }\n }\n\n _setChannelTime(channel, time) {\n const offsetTime = time - channel.delay;\n const totalDuration = channel.duration * channel.repeat;\n\n if (offsetTime >= totalDuration) {\n channel.time = channel.duration * channel.rate;\n } else {\n channel.time = Math.max(0, offsetTime) % channel.duration;\n channel.time *= channel.rate;\n }\n }\n\n}\n//# sourceMappingURL=timeline.js.map","import Vector from './base/vector';\nimport { config, isArray } from '../lib/common';\nimport { checkNumber } from '../lib/validators';\nimport * as vec2 from 'gl-matrix/vec2';\nimport { vec2_transformMat4AsVector } from '../lib/gl-matrix-extras';\nexport default class Vector2 extends Vector {\n constructor(x = 0, y = 0) {\n super(2);\n\n if (isArray(x) && arguments.length === 1) {\n this.copy(x);\n } else {\n if (config.debug) {\n checkNumber(x);\n checkNumber(y);\n }\n\n this[0] = x;\n this[1] = y;\n }\n }\n\n set(x, y) {\n this[0] = x;\n this[1] = y;\n return this.check();\n }\n\n copy(array) {\n this[0] = array[0];\n this[1] = array[1];\n return this.check();\n }\n\n fromObject(object) {\n if (config.debug) {\n checkNumber(object.x);\n checkNumber(object.y);\n }\n\n this[0] = object.x;\n this[1] = object.y;\n return this.check();\n }\n\n toObject(object) {\n object.x = this[0];\n object.y = this[1];\n return object;\n }\n\n get ELEMENTS() {\n return 2;\n }\n\n horizontalAngle() {\n return Math.atan2(this.y, this.x);\n }\n\n verticalAngle() {\n return Math.atan2(this.x, this.y);\n }\n\n transform(matrix4) {\n return this.transformAsPoint(matrix4);\n }\n\n transformAsPoint(matrix4) {\n vec2.transformMat4(this, this, matrix4);\n return this.check();\n }\n\n transformAsVector(matrix4) {\n vec2_transformMat4AsVector(this, this, matrix4);\n return this.check();\n }\n\n transformByMatrix3(matrix3) {\n vec2.transformMat3(this, this, matrix3);\n return this.check();\n }\n\n transformByMatrix2x3(matrix2x3) {\n vec2.transformMat2d(this, this, matrix2x3);\n return this.check();\n }\n\n transformByMatrix2(matrix2) {\n vec2.transformMat2(this, this, matrix2);\n return this.check();\n }\n\n}\n//# sourceMappingURL=vector2.js.map","import { global, isBrowser, isWorker } from '../env-utils/globals';\nimport * as node from '../node/require-utils.node';\nimport { assert } from '../env-utils/assert';\nimport { VERSION as __VERSION__ } from '../env-utils/version';\nconst LATEST = 'latest';\nconst VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : LATEST;\nconst loadLibraryPromises = {};\nexport async function loadLibrary(libraryUrl, moduleName = null, options = {}) {\n if (moduleName) {\n libraryUrl = getLibraryUrl(libraryUrl, moduleName, options);\n }\n\n loadLibraryPromises[libraryUrl] = loadLibraryPromises[libraryUrl] || loadLibraryFromFile(libraryUrl);\n return await loadLibraryPromises[libraryUrl];\n}\nexport function getLibraryUrl(library, moduleName, options) {\n if (library.startsWith('http')) {\n return library;\n }\n\n const modules = options.modules || {};\n\n if (modules[library]) {\n return modules[library];\n }\n\n if (!isBrowser) {\n return \"modules/\".concat(moduleName, \"/dist/libs/\").concat(library);\n }\n\n if (options.CDN) {\n assert(options.CDN.startsWith('http'));\n return \"\".concat(options.CDN, \"/\").concat(moduleName, \"@\").concat(VERSION, \"/dist/libs/\").concat(library);\n }\n\n if (isWorker) {\n return \"../src/libs/\".concat(library);\n }\n\n return \"modules/\".concat(moduleName, \"/src/libs/\").concat(library);\n}\n\nasync function loadLibraryFromFile(libraryUrl) {\n if (libraryUrl.endsWith('wasm')) {\n const response = await fetch(libraryUrl);\n return await response.arrayBuffer();\n }\n\n if (!isBrowser) {\n try {\n return node && node.requireFromFile && (await node.requireFromFile(libraryUrl));\n } catch {\n return null;\n }\n }\n\n if (isWorker) {\n return importScripts(libraryUrl);\n }\n\n const response = await fetch(libraryUrl);\n const scriptSource = await response.text();\n return loadLibraryFromString(scriptSource, libraryUrl);\n}\n\nfunction loadLibraryFromString(scriptSource, id) {\n if (!isBrowser) {\n return node.requireFromString && node.requireFromString(scriptSource, id);\n }\n\n if (isWorker) {\n eval.call(global, scriptSource);\n return null;\n }\n\n const script = document.createElement('script');\n script.id = id;\n\n try {\n script.appendChild(document.createTextNode(scriptSource));\n } catch (e) {\n script.text = scriptSource;\n }\n\n document.body.appendChild(script);\n return null;\n}\n//# sourceMappingURL=library-utils.js.map","const VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : 'beta';\nimport { loadLibrary } from '@loaders.gl/worker-utils';\nconst BASIS_CDN_ENCODER_WASM = \"https://unpkg.com/@loaders.gl/textures@\".concat(VERSION, \"/dist/libs/basis_encoder.wasm\");\nconst BASIS_CDN_ENCODER_JS = \"https://unpkg.com/@loaders.gl/textures@\".concat(VERSION, \"/dist/libs/basis_encoder.js\");\nlet loadBasisTranscoderPromise;\nexport async function loadBasisTrascoderModule(options) {\n const modules = options.modules || {};\n\n if (modules.basis) {\n return modules.basis;\n }\n\n loadBasisTranscoderPromise = loadBasisTranscoderPromise || loadBasisTrascoder(options);\n return await loadBasisTranscoderPromise;\n}\n\nasync function loadBasisTrascoder(options) {\n let BASIS = null;\n let wasmBinary = null;\n [BASIS, wasmBinary] = await Promise.all([await loadLibrary('basis_transcoder.js', 'textures', options), await loadLibrary('basis_transcoder.wasm', 'textures', options)]);\n BASIS = BASIS || globalThis.BASIS;\n return await initializeBasisTrascoderModule(BASIS, wasmBinary);\n}\n\nfunction initializeBasisTrascoderModule(BasisModule, wasmBinary) {\n const options = {};\n\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise(resolve => {\n BasisModule(options).then(module => {\n const {\n BasisFile,\n initializeBasis\n } = module;\n initializeBasis();\n resolve({\n BasisFile\n });\n });\n });\n}\n\nlet loadBasisEncoderPromise;\nexport async function loadBasisEncoderModule(options) {\n const modules = options.modules || {};\n\n if (modules.basisEncoder) {\n return modules.basisEncoder;\n }\n\n loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);\n return await loadBasisEncoderPromise;\n}\n\nasync function loadBasisEncoder(options) {\n let BASIS_ENCODER = null;\n let wasmBinary = null;\n [BASIS_ENCODER, wasmBinary] = await Promise.all([await loadLibrary(BASIS_CDN_ENCODER_JS, 'textures', options), await loadLibrary(BASIS_CDN_ENCODER_WASM, 'textures', options)]);\n BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;\n return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);\n}\n\nfunction initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {\n const options = {};\n\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise(resolve => {\n BasisEncoderModule(options).then(module => {\n const {\n BasisFile,\n KTX2File,\n initializeBasis,\n BasisEncoder\n } = module;\n initializeBasis();\n resolve({\n BasisFile,\n KTX2File,\n BasisEncoder\n });\n });\n });\n}\n//# sourceMappingURL=basis-module-loader.js.map","export const GL_EXTENSIONS_CONSTANTS = {\n COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0,\n COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1,\n COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2,\n COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3,\n COMPRESSED_R11_EAC: 0x9270,\n COMPRESSED_SIGNED_R11_EAC: 0x9271,\n COMPRESSED_RG11_EAC: 0x9272,\n COMPRESSED_SIGNED_RG11_EAC: 0x9273,\n COMPRESSED_RGB8_ETC2: 0x9274,\n COMPRESSED_RGBA8_ETC2_EAC: 0x9275,\n COMPRESSED_SRGB8_ETC2: 0x9276,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9277,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9278,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9279,\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00,\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02,\n COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01,\n COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03,\n COMPRESSED_RGB_ETC1_WEBGL: 0x8d64,\n COMPRESSED_RGB_ATC_WEBGL: 0x8c92,\n COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 0x8c93,\n COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 0x87ee,\n COMPRESSED_RGBA_ASTC_4X4_KHR: 0x93b0,\n COMPRESSED_RGBA_ASTC_5X4_KHR: 0x93b1,\n COMPRESSED_RGBA_ASTC_5X5_KHR: 0x93b2,\n COMPRESSED_RGBA_ASTC_6X5_KHR: 0x93b3,\n COMPRESSED_RGBA_ASTC_6X6_KHR: 0x93b4,\n COMPRESSED_RGBA_ASTC_8X5_KHR: 0x93b5,\n COMPRESSED_RGBA_ASTC_8X6_KHR: 0x93b6,\n COMPRESSED_RGBA_ASTC_8X8_KHR: 0x93b7,\n COMPRESSED_RGBA_ASTC_10X5_KHR: 0x93b8,\n COMPRESSED_RGBA_ASTC_10X6_KHR: 0x93b9,\n COMPRESSED_RGBA_ASTC_10X8_KHR: 0x93ba,\n COMPRESSED_RGBA_ASTC_10X10_KHR: 0x93bb,\n COMPRESSED_RGBA_ASTC_12X10_KHR: 0x93bc,\n COMPRESSED_RGBA_ASTC_12X12_KHR: 0x93bd,\n COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR: 0x93d0,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR: 0x93d1,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR: 0x93d2,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR: 0x93d3,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR: 0x93d4,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR: 0x93d5,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR: 0x93d6,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR: 0x93d7,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR: 0x93d8,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR: 0x93d9,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR: 0x93da,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR: 0x93db,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR: 0x93dc,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR: 0x93dd,\n COMPRESSED_RED_RGTC1_EXT: 0x8dbb,\n COMPRESSED_SIGNED_RED_RGTC1_EXT: 0x8dbc,\n COMPRESSED_RED_GREEN_RGTC2_EXT: 0x8dbd,\n COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 0x8dbe,\n COMPRESSED_SRGB_S3TC_DXT1_EXT: 0x8c4c,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 0x8c4d,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 0x8c4e,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 0x8c4f\n};\n//# sourceMappingURL=gl-extensions.js.map","const BROWSER_PREFIXES = ['', 'WEBKIT_', 'MOZ_'];\nconst WEBGL_EXTENSIONS = {\n WEBGL_compressed_texture_s3tc: 'dxt',\n WEBGL_compressed_texture_s3tc_srgb: 'dxt-srgb',\n WEBGL_compressed_texture_etc1: 'etc1',\n WEBGL_compressed_texture_etc: 'etc2',\n WEBGL_compressed_texture_pvrtc: 'pvrtc',\n WEBGL_compressed_texture_atc: 'atc',\n WEBGL_compressed_texture_astc: 'astc',\n EXT_texture_compression_rgtc: 'rgtc'\n};\nlet formats = null;\nexport function getSupportedGPUTextureFormats(gl) {\n if (!formats) {\n gl = gl || getWebGLContext() || undefined;\n formats = new Set();\n\n for (const prefix of BROWSER_PREFIXES) {\n for (const extension in WEBGL_EXTENSIONS) {\n if (gl && gl.getExtension(\"\".concat(prefix).concat(extension))) {\n const gpuTextureFormat = WEBGL_EXTENSIONS[extension];\n formats.add(gpuTextureFormat);\n }\n }\n }\n }\n\n return formats;\n}\n\nfunction getWebGLContext() {\n try {\n const canvas = document.createElement('canvas');\n return canvas.getContext('webgl');\n } catch (error) {\n return null;\n }\n}\n//# sourceMappingURL=texture-formats.js.map","import { read } from 'ktx-parse';\nimport { extractMipmapImages } from '../utils/extract-mipmap-images';\nimport { mapVkFormatToWebGL } from '../utils/ktx-format-helper';\nconst KTX2_ID = [0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];\nexport function isKTX(data) {\n const id = new Uint8Array(data);\n const notKTX = id.byteLength < KTX2_ID.length || id[0] !== KTX2_ID[0] || id[1] !== KTX2_ID[1] || id[2] !== KTX2_ID[2] || id[3] !== KTX2_ID[3] || id[4] !== KTX2_ID[4] || id[5] !== KTX2_ID[5] || id[6] !== KTX2_ID[6] || id[7] !== KTX2_ID[7] || id[8] !== KTX2_ID[8] || id[9] !== KTX2_ID[9] || id[10] !== KTX2_ID[10] || id[11] !== KTX2_ID[11];\n return !notKTX;\n}\nexport function parseKTX(arrayBuffer) {\n const uint8Array = new Uint8Array(arrayBuffer);\n const ktx = read(uint8Array);\n const mipMapLevels = Math.max(1, ktx.levels.length);\n const width = ktx.pixelWidth;\n const height = ktx.pixelHeight;\n const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);\n return extractMipmapImages(ktx.levels, {\n mipMapLevels,\n width,\n height,\n sizeFunction: level => level.uncompressedByteLength,\n internalFormat\n });\n}\n//# sourceMappingURL=parse-ktx.js.map","import { loadBasisEncoderModule, loadBasisTrascoderModule } from './basis-module-loader';\nimport { GL_EXTENSIONS_CONSTANTS } from '../gl-extensions';\nimport { getSupportedGPUTextureFormats } from '../utils/texture-formats';\nimport { isKTX } from './parse-ktx';\nconst OutputFormat = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {\n basisFormat: 1,\n compressed: true\n },\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {\n basisFormat: 4,\n compressed: true\n },\n bc5: {\n basisFormat: 5,\n compressed: true\n },\n 'bc7-m6-opaque-only': {\n basisFormat: 6,\n compressed: true\n },\n 'bc7-m5': {\n basisFormat: 7,\n compressed: true\n },\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {\n basisFormat: 11,\n compressed: true\n },\n 'atc-rgba-interpolated-alpha': {\n basisFormat: 12,\n compressed: true\n },\n rgba32: {\n basisFormat: 13,\n compressed: false\n },\n rgb565: {\n basisFormat: 14,\n compressed: false\n },\n bgr565: {\n basisFormat: 15,\n compressed: false\n },\n rgba4444: {\n basisFormat: 16,\n compressed: false\n }\n};\nexport default async function parseBasis(data, options) {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n\n const {\n BasisFile\n } = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n\n case 'transcoder':\n default:\n const {\n BasisFile\n } = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\nfunction parseBasisFile(BasisFile, data, options) {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options) {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n const hasAlpha = basisFile.getHasAlpha();\n const {\n compressed,\n format,\n basisFormat\n } = getBasisOptions(options, hasAlpha);\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n width,\n height,\n data: decodedData,\n compressed,\n format,\n hasAlpha\n };\n}\n\nfunction parseKTX2File(KTX2File, data, options) {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n\n const levelsCount = ktx2File.getLevels();\n const levels = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break;\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\nfunction transcodeKTX2Image(ktx2File, levelIndex, options) {\n const {\n alphaFlag,\n height,\n width\n } = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n const {\n compressed,\n format,\n basisFormat\n } = getBasisOptions(options, alphaFlag);\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(levelIndex, 0, 0, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!ktx2File.transcodeImage(decodedData, levelIndex, 0, 0, basisFormat, 0, -1, -1)) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n width,\n height,\n data: decodedData,\n compressed,\n hasAlpha: alphaFlag,\n format\n };\n}\n\nfunction getBasisOptions(options, hasAlpha) {\n let format = options && options.basis && options.basis.format;\n\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\nexport function selectSupportedBasisFormat() {\n const supportedFormats = getSupportedGPUTextureFormats();\n\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n\n return 'rgb565';\n}\n//# sourceMappingURL=parse-basis.js.map","import { VERSION } from './lib/utils/version';\nimport parseBasis from './lib/parsers/parse-basis';\nexport const BasisWorkerLoader = {\n name: 'Basis',\n id: 'basis',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['basis', 'ktx2'],\n mimeTypes: ['application/octet-stream', 'image/ktx2'],\n tests: ['sB'],\n binary: true,\n options: {\n basis: {\n format: 'auto',\n libraryPath: 'libs/',\n containerFormat: 'auto',\n module: 'transcoder'\n }\n }\n};\nexport const BasisLoader = { ...BasisWorkerLoader,\n parse: parseBasis\n};\nexport const _TypecheckBasisWorkerLoader = BasisWorkerLoader;\nexport const _TypecheckBasisLoader = BasisLoader;\n//# sourceMappingURL=basis-loader.js.map","export const VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : 'latest';\n//# sourceMappingURL=version.js.map","export function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'assert failed: gltf');\n }\n}\n//# sourceMappingURL=assert.js.map","export function resolveUrl(url, options) {\n const absolute = url.startsWith('data:') || url.startsWith('http:') || url.startsWith('https:');\n\n if (absolute) {\n return url;\n }\n\n const baseUrl = options.baseUri || options.uri;\n\n if (!baseUrl) {\n throw new Error(\"'baseUri' must be provided to resolve relative url \".concat(url));\n }\n\n return baseUrl.substr(0, baseUrl.lastIndexOf('/') + 1) + url;\n}\n//# sourceMappingURL=resolve-url.js.map","import { assert } from '../utils/assert';\nexport function getTypedArrayForBufferView(json, buffers, bufferViewIndex) {\n const bufferView = json.bufferViews[bufferViewIndex];\n assert(bufferView);\n const bufferIndex = bufferView.buffer;\n const binChunk = buffers[bufferIndex];\n assert(binChunk);\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n}\nexport function getTypedArrayForImageData(json, buffers, imageIndex) {\n const image = json.images[imageIndex];\n const bufferViewIndex = json.bufferViews[image.bufferView];\n return getTypedArrayForBufferView(json, buffers, bufferViewIndex);\n}\n//# sourceMappingURL=get-typed-array.js.map","import { assert } from '../utils/assert';\nconst TYPES = ['SCALAR', 'VEC2', 'VEC3', 'VEC4'];\nconst ARRAY_CONSTRUCTOR_TO_WEBGL_CONSTANT = [[Int8Array, 5120], [Uint8Array, 5121], [Int16Array, 5122], [Uint16Array, 5123], [Uint32Array, 5125], [Float32Array, 5126], [Float64Array, 5130]];\nconst ARRAY_TO_COMPONENT_TYPE = new Map(ARRAY_CONSTRUCTOR_TO_WEBGL_CONSTANT);\nconst ATTRIBUTE_TYPE_TO_COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\nconst ATTRIBUTE_COMPONENT_TYPE_TO_BYTE_SIZE = {\n 5120: 1,\n 5121: 1,\n 5122: 2,\n 5123: 2,\n 5125: 4,\n 5126: 4\n};\nconst ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\nexport function getAccessorTypeFromSize(size) {\n const type = TYPES[size - 1];\n return type || TYPES[0];\n}\nexport function getComponentTypeFromArray(typedArray) {\n const componentType = ARRAY_TO_COMPONENT_TYPE.get(typedArray.constructor);\n\n if (!componentType) {\n throw new Error('Illegal typed array');\n }\n\n return componentType;\n}\nexport function getAccessorArrayTypeAndLength(accessor, bufferView) {\n const ArrayType = ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY[accessor.componentType];\n const components = ATTRIBUTE_TYPE_TO_COMPONENTS[accessor.type];\n const bytesPerComponent = ATTRIBUTE_COMPONENT_TYPE_TO_BYTE_SIZE[accessor.componentType];\n const length = accessor.count * components;\n const byteLength = accessor.count * components * bytesPerComponent;\n assert(byteLength >= 0 && byteLength <= bufferView.byteLength);\n return {\n ArrayType,\n length,\n byteLength\n };\n}\n//# sourceMappingURL=gltf-utils.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { getBinaryImageMetadata } from '@loaders.gl/images';\nimport { padToNBytes, copyToArray } from '@loaders.gl/loader-utils';\nimport { assert } from '../utils/assert';\nimport { getAccessorArrayTypeAndLength, getAccessorTypeFromSize, getComponentTypeFromArray } from '../gltf-utils/gltf-utils';\nconst DEFAULT_GLTF_JSON = {\n asset: {\n version: '2.0',\n generator: 'loaders.gl'\n },\n buffers: []\n};\nexport default class GLTFScenegraph {\n constructor(gltf) {\n _defineProperty(this, \"gltf\", void 0);\n\n _defineProperty(this, \"sourceBuffers\", void 0);\n\n _defineProperty(this, \"byteLength\", void 0);\n\n this.gltf = gltf || {\n json: { ...DEFAULT_GLTF_JSON\n },\n buffers: []\n };\n this.sourceBuffers = [];\n this.byteLength = 0;\n\n if (this.gltf.buffers && this.gltf.buffers[0]) {\n this.byteLength = this.gltf.buffers[0].byteLength;\n this.sourceBuffers = [this.gltf.buffers[0]];\n }\n }\n\n get json() {\n return this.gltf.json;\n }\n\n getApplicationData(key) {\n const data = this.json[key];\n return data;\n }\n\n getExtraData(key) {\n const extras = this.json.extras || {};\n return extras[key];\n }\n\n getExtension(extensionName) {\n const isExtension = this.getUsedExtensions().find(name => name === extensionName);\n const extensions = this.json.extensions || {};\n return isExtension ? extensions[extensionName] || true : null;\n }\n\n getRequiredExtension(extensionName) {\n const isRequired = this.getRequiredExtensions().find(name => name === extensionName);\n return isRequired ? this.getExtension(extensionName) : null;\n }\n\n getRequiredExtensions() {\n return this.json.extensionsRequired || [];\n }\n\n getUsedExtensions() {\n return this.json.extensionsUsed || [];\n }\n\n getObjectExtension(object, extensionName) {\n const extensions = object.extensions || {};\n return extensions[extensionName];\n }\n\n getScene(index) {\n return this.getObject('scenes', index);\n }\n\n getNode(index) {\n return this.getObject('nodes', index);\n }\n\n getSkin(index) {\n return this.getObject('skins', index);\n }\n\n getMesh(index) {\n return this.getObject('meshes', index);\n }\n\n getMaterial(index) {\n return this.getObject('materials', index);\n }\n\n getAccessor(index) {\n return this.getObject('accessors', index);\n }\n\n getTexture(index) {\n return this.getObject('textures', index);\n }\n\n getSampler(index) {\n return this.getObject('samplers', index);\n }\n\n getImage(index) {\n return this.getObject('images', index);\n }\n\n getBufferView(index) {\n return this.getObject('bufferViews', index);\n }\n\n getBuffer(index) {\n return this.getObject('buffers', index);\n }\n\n getObject(array, index) {\n if (typeof index === 'object') {\n return index;\n }\n\n const object = this.json[array] && this.json[array][index];\n\n if (!object) {\n throw new Error(\"glTF file error: Could not find \".concat(array, \"[\").concat(index, \"]\"));\n }\n\n return object;\n }\n\n getTypedArrayForBufferView(bufferView) {\n bufferView = this.getBufferView(bufferView);\n const bufferIndex = bufferView.buffer;\n const binChunk = this.gltf.buffers[bufferIndex];\n assert(binChunk);\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n getTypedArrayForAccessor(accessor) {\n accessor = this.getAccessor(accessor);\n const bufferView = this.getBufferView(accessor.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n const arrayBuffer = buffer.data;\n const {\n ArrayType,\n length\n } = getAccessorArrayTypeAndLength(accessor, bufferView);\n const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n return new ArrayType(arrayBuffer, byteOffset, length);\n }\n\n getTypedArrayForImageData(image) {\n image = this.getAccessor(image);\n const bufferView = this.getBufferView(image.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n const arrayBuffer = buffer.data;\n const byteOffset = bufferView.byteOffset || 0;\n return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n addApplicationData(key, data) {\n this.json[key] = data;\n return this;\n }\n\n addExtraData(key, data) {\n this.json.extras = this.json.extras || {};\n this.json.extras[key] = data;\n return this;\n }\n\n addObjectExtension(object, extensionName, data) {\n object.extensions = object.extensions || {};\n object.extensions[extensionName] = data;\n this.registerUsedExtension(extensionName);\n return this;\n }\n\n setObjectExtension(object, extensionName, data) {\n const extensions = object.extensions || {};\n extensions[extensionName] = data;\n }\n\n removeObjectExtension(object, extensionName) {\n const extensions = object.extensions || {};\n const extension = extensions[extensionName];\n delete extensions[extensionName];\n return extension;\n }\n\n addExtension(extensionName, extensionData = {}) {\n assert(extensionData);\n this.json.extensions = this.json.extensions || {};\n this.json.extensions[extensionName] = extensionData;\n this.registerUsedExtension(extensionName);\n return extensionData;\n }\n\n addRequiredExtension(extensionName, extensionData = {}) {\n assert(extensionData);\n this.addExtension(extensionName, extensionData);\n this.registerRequiredExtension(extensionName);\n return extensionData;\n }\n\n registerUsedExtension(extensionName) {\n this.json.extensionsUsed = this.json.extensionsUsed || [];\n\n if (!this.json.extensionsUsed.find(ext => ext === extensionName)) {\n this.json.extensionsUsed.push(extensionName);\n }\n }\n\n registerRequiredExtension(extensionName) {\n this.registerUsedExtension(extensionName);\n this.json.extensionsRequired = this.json.extensionsRequired || [];\n\n if (!this.json.extensionsRequired.find(ext => ext === extensionName)) {\n this.json.extensionsRequired.push(extensionName);\n }\n }\n\n removeExtension(extensionName) {\n if (this.json.extensionsRequired) {\n this._removeStringFromArray(this.json.extensionsRequired, extensionName);\n }\n\n if (this.json.extensionsUsed) {\n this._removeStringFromArray(this.json.extensionsUsed, extensionName);\n }\n\n if (this.json.extensions) {\n delete this.json.extensions[extensionName];\n }\n }\n\n setDefaultScene(sceneIndex) {\n this.json.scene = sceneIndex;\n }\n\n addScene(scene) {\n const {\n nodeIndices\n } = scene;\n this.json.scenes = this.json.scenes || [];\n this.json.scenes.push({\n nodes: nodeIndices\n });\n return this.json.scenes.length - 1;\n }\n\n addNode(node) {\n const {\n meshIndex,\n matrix\n } = node;\n this.json.nodes = this.json.nodes || [];\n const nodeData = {\n mesh: meshIndex\n };\n\n if (matrix) {\n nodeData.matrix = matrix;\n }\n\n this.json.nodes.push(nodeData);\n return this.json.nodes.length - 1;\n }\n\n addMesh(mesh) {\n const {\n attributes,\n indices,\n material,\n mode = 4\n } = mesh;\n\n const accessors = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [{\n attributes: accessors,\n mode\n }]\n };\n\n if (indices) {\n const indicesAccessor = this._addIndices(indices);\n\n glTFMesh.primitives[0].indices = indicesAccessor;\n }\n\n if (Number.isFinite(material)) {\n glTFMesh.primitives[0].material = material;\n }\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n addPointCloud(attributes) {\n const accessorIndices = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [{\n attributes: accessorIndices,\n mode: 0\n }]\n };\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n addImage(imageData, mimeTypeOpt) {\n const metadata = getBinaryImageMetadata(imageData);\n const mimeType = mimeTypeOpt || (metadata === null || metadata === void 0 ? void 0 : metadata.mimeType);\n const bufferViewIndex = this.addBufferView(imageData);\n const glTFImage = {\n bufferView: bufferViewIndex,\n mimeType\n };\n this.json.images = this.json.images || [];\n this.json.images.push(glTFImage);\n return this.json.images.length - 1;\n }\n\n addBufferView(buffer) {\n const byteLength = buffer.byteLength;\n assert(Number.isFinite(byteLength));\n this.sourceBuffers = this.sourceBuffers || [];\n this.sourceBuffers.push(buffer);\n const glTFBufferView = {\n buffer: 0,\n byteOffset: this.byteLength,\n byteLength\n };\n this.byteLength += padToNBytes(byteLength, 4);\n this.json.bufferViews = this.json.bufferViews || [];\n this.json.bufferViews.push(glTFBufferView);\n return this.json.bufferViews.length - 1;\n }\n\n addAccessor(bufferViewIndex, accessor) {\n const glTFAccessor = {\n bufferView: bufferViewIndex,\n type: getAccessorTypeFromSize(accessor.size),\n componentType: accessor.componentType,\n count: accessor.count,\n max: accessor.max,\n min: accessor.min\n };\n this.json.accessors = this.json.accessors || [];\n this.json.accessors.push(glTFAccessor);\n return this.json.accessors.length - 1;\n }\n\n addBinaryBuffer(sourceBuffer, accessor = {\n size: 3\n }) {\n const bufferViewIndex = this.addBufferView(sourceBuffer);\n let minMax = {\n min: accessor.min,\n max: accessor.max\n };\n\n if (!minMax.min || !minMax.max) {\n minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);\n }\n\n const accessorDefaults = {\n size: accessor.size,\n componentType: getComponentTypeFromArray(sourceBuffer),\n count: Math.round(sourceBuffer.length / accessor.size),\n min: minMax.min,\n max: minMax.max\n };\n return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));\n }\n\n addTexture(texture) {\n const {\n imageIndex\n } = texture;\n const glTFTexture = {\n source: imageIndex\n };\n this.json.textures = this.json.textures || [];\n this.json.textures.push(glTFTexture);\n return this.json.textures.length - 1;\n }\n\n addMaterial(pbrMaterialInfo) {\n this.json.materials = this.json.materials || [];\n this.json.materials.push(pbrMaterialInfo);\n return this.json.materials.length - 1;\n }\n\n createBinaryChunk() {\n var _this$json, _this$json$buffers;\n\n this.gltf.buffers = [];\n const totalByteLength = this.byteLength;\n const arrayBuffer = new ArrayBuffer(totalByteLength);\n const targetArray = new Uint8Array(arrayBuffer);\n let dstByteOffset = 0;\n\n for (const sourceBuffer of this.sourceBuffers || []) {\n dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);\n }\n\n if ((_this$json = this.json) !== null && _this$json !== void 0 && (_this$json$buffers = _this$json.buffers) !== null && _this$json$buffers !== void 0 && _this$json$buffers[0]) {\n this.json.buffers[0].byteLength = totalByteLength;\n } else {\n this.json.buffers = [{\n byteLength: totalByteLength\n }];\n }\n\n this.gltf.binary = arrayBuffer;\n this.sourceBuffers = [arrayBuffer];\n }\n\n _removeStringFromArray(array, string) {\n let found = true;\n\n while (found) {\n const index = array.indexOf(string);\n\n if (index > -1) {\n array.splice(index, 1);\n } else {\n found = false;\n }\n }\n }\n\n _addAttributes(attributes = {}) {\n const result = {};\n\n for (const attributeKey in attributes) {\n const attributeData = attributes[attributeKey];\n\n const attrName = this._getGltfAttributeName(attributeKey);\n\n const accessor = this.addBinaryBuffer(attributeData.value, attributeData);\n result[attrName] = accessor;\n }\n\n return result;\n }\n\n _addIndices(indices) {\n return this.addBinaryBuffer(indices, {\n size: 1\n });\n }\n\n _getGltfAttributeName(attributeName) {\n switch (attributeName.toLowerCase()) {\n case 'position':\n case 'positions':\n case 'vertices':\n return 'POSITION';\n\n case 'normal':\n case 'normals':\n return 'NORMAL';\n\n case 'color':\n case 'colors':\n return 'COLOR_0';\n\n case 'texcoord':\n case 'texcoords':\n return 'TEXCOORD_0';\n\n default:\n return attributeName;\n }\n }\n\n _getAccessorMinMax(buffer, size) {\n const result = {\n min: null,\n max: null\n };\n\n if (buffer.length < size) {\n return result;\n }\n\n result.min = [];\n result.max = [];\n const initValues = buffer.subarray(0, size);\n\n for (const value of initValues) {\n result.min.push(value);\n result.max.push(value);\n }\n\n for (let index = size; index < buffer.length; index += size) {\n for (let componentIndex = 0; componentIndex < size; componentIndex++) {\n result.min[0 + componentIndex] = Math.min(result.min[0 + componentIndex], buffer[index + componentIndex]);\n result.max[0 + componentIndex] = Math.max(result.max[0 + componentIndex], buffer[index + componentIndex]);\n }\n }\n\n return result;\n }\n\n}\n//# sourceMappingURL=gltf-scenegraph.js.map","const isWebAssemblySupported = typeof WebAssembly !== 'object';\nconst wasm_base = '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';\nconst wasm_simd = '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';\nconst detector = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 3, 2, 0, 0, 5, 3, 1, 0, 1, 12, 1, 0, 10, 22, 2, 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0, 11, 7, 0, 65, 0, 253, 15, 26, 11]);\nconst wasmpack = new Uint8Array([32, 0, 65, 253, 3, 1, 2, 34, 4, 106, 6, 5, 11, 8, 7, 20, 13, 33, 12, 16, 128, 9, 116, 64, 19, 113, 127, 15, 10, 21, 22, 14, 255, 66, 24, 54, 136, 107, 18, 23, 192, 26, 114, 118, 132, 17, 77, 101, 130, 144, 27, 87, 131, 44, 45, 74, 156, 154, 70, 167]);\nconst FILTERS = {\n 0: '',\n 1: 'meshopt_decodeFilterOct',\n 2: 'meshopt_decodeFilterQuat',\n 3: 'meshopt_decodeFilterExp',\n NONE: '',\n OCTAHEDRAL: 'meshopt_decodeFilterOct',\n QUATERNION: 'meshopt_decodeFilterQuat',\n EXPONENTIAL: 'meshopt_decodeFilterExp'\n};\nconst DECODERS = {\n 0: 'meshopt_decodeVertexBuffer',\n 1: 'meshopt_decodeIndexBuffer',\n 2: 'meshopt_decodeIndexSequence',\n ATTRIBUTES: 'meshopt_decodeVertexBuffer',\n TRIANGLES: 'meshopt_decodeIndexBuffer',\n INDICES: 'meshopt_decodeIndexSequence'\n};\nexport function isMeshoptSupported() {\n return isWebAssemblySupported;\n}\nexport async function meshoptDecodeVertexBuffer(target, count, size, source, filter = 'NONE') {\n const instance = await loadWasmInstance();\n decode(instance, instance.exports.meshopt_decodeVertexBuffer, target, count, size, source, instance.exports[FILTERS[filter]]);\n}\nexport async function meshoptDecodeIndexBuffer(target, count, size, source) {\n const instance = await loadWasmInstance();\n decode(instance, instance.exports.meshopt_decodeIndexBuffer, target, count, size, source);\n}\nexport async function meshoptDecodeIndexSequence(target, count, size, source) {\n const instance = await loadWasmInstance();\n decode(instance, instance.exports.meshopt_decodeIndexSequence, target, count, size, source);\n}\nexport async function meshoptDecodeGltfBuffer(target, count, size, source, mode, filter = 'NONE') {\n const instance = await loadWasmInstance();\n decode(instance, instance.exports[DECODERS[mode]], target, count, size, source, instance.exports[FILTERS[filter || 'NONE']]);\n}\nlet wasmPromise;\n\nasync function loadWasmInstance() {\n if (!wasmPromise) {\n wasmPromise = loadWasmModule();\n }\n\n return wasmPromise;\n}\n\nasync function loadWasmModule() {\n let wasm = wasm_base;\n\n if (WebAssembly.validate(detector)) {\n wasm = wasm_simd;\n console.log('Warning: meshopt_decoder is using experimental SIMD support');\n }\n\n const result = await WebAssembly.instantiate(unpack(wasm), {});\n await result.instance.exports.__wasm_call_ctors();\n return result.instance;\n}\n\nfunction unpack(data) {\n const result = new Uint8Array(data.length);\n\n for (let i = 0; i < data.length; ++i) {\n const ch = data.charCodeAt(i);\n result[i] = ch > 96 ? ch - 71 : ch > 64 ? ch - 65 : ch > 47 ? ch + 4 : ch > 46 ? 63 : 62;\n }\n\n let write = 0;\n\n for (let i = 0; i < data.length; ++i) {\n result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];\n }\n\n return result.buffer.slice(0, write);\n}\n\nfunction decode(instance, fun, target, count, size, source, filter) {\n const sbrk = instance.exports.sbrk;\n const count4 = count + 3 & ~3;\n const tp = sbrk(count4 * size);\n const sp = sbrk(source.length);\n const heap = new Uint8Array(instance.exports.memory.buffer);\n heap.set(source, sp);\n const res = fun(tp, count, size, sp, source.length);\n\n if (res === 0 && filter) {\n filter(tp, count4, size);\n }\n\n target.set(heap.subarray(tp, tp + count * size));\n sbrk(tp - sbrk(0));\n\n if (res !== 0) {\n throw new Error(\"Malformed buffer data: \".concat(res));\n }\n}\n//# sourceMappingURL=meshopt-decoder.js.map","import GLTFScenegraph from '../api/gltf-scenegraph';\nimport { meshoptDecodeGltfBuffer } from '../../meshopt/meshopt-decoder';\nconst DEFAULT_MESHOPT_OPTIONS = {\n byteOffset: 0,\n filter: 'NONE'\n};\nconst EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';\nexport const name = EXT_MESHOPT_COMPRESSION;\nexport async function decode(gltfData, options) {\n var _options$gltf;\n\n const scenegraph = new GLTFScenegraph(gltfData);\n\n if (!(options !== null && options !== void 0 && (_options$gltf = options.gltf) !== null && _options$gltf !== void 0 && _options$gltf.decompressMeshes)) {\n return;\n }\n\n const promises = [];\n\n for (const bufferViewIndex of gltfData.json.bufferViews || []) {\n promises.push(decodeMeshoptBufferView(scenegraph, bufferViewIndex));\n }\n\n await Promise.all(promises);\n scenegraph.removeExtension(EXT_MESHOPT_COMPRESSION);\n}\n\nasync function decodeMeshoptBufferView(scenegraph, bufferView) {\n const meshoptExtension = scenegraph.getObjectExtension(bufferView, EXT_MESHOPT_COMPRESSION);\n\n if (meshoptExtension) {\n const {\n byteOffset = 0,\n byteLength = 0,\n byteStride,\n count,\n mode,\n filter = 'NONE',\n buffer: bufferIndex\n } = meshoptExtension;\n const buffer = scenegraph.gltf.buffers[bufferIndex];\n const source = new Uint8Array(buffer.arrayBuffer, buffer.byteOffset + byteOffset, byteLength);\n const result = new Uint8Array(scenegraph.gltf.buffers[bufferView.buffer].arrayBuffer, bufferView.byteOffset, bufferView.byteLength);\n await meshoptDecodeGltfBuffer(result, count, byteStride, source, mode, filter);\n return result;\n }\n\n return null;\n}\n//# sourceMappingURL=EXT_meshopt_compression.js.map","import { isBrowser } from '@loaders.gl/loader-utils';\nconst NODE_FORMAT_SUPPORT = ['image/png', 'image/jpeg', 'image/gif'];\nconst mimeTypeSupported = {};\nexport function _isImageFormatSupported(mimeType) {\n if (mimeTypeSupported[mimeType] === undefined) {\n mimeTypeSupported[mimeType] = checkFormatSupport(mimeType);\n }\n\n return mimeTypeSupported[mimeType];\n}\n\nfunction checkFormatSupport(mimeType) {\n switch (mimeType) {\n case 'image/webp':\n return checkWebPSupport();\n\n case 'image/svg':\n return isBrowser;\n\n default:\n if (!isBrowser) {\n const {\n _parseImageNode\n } = globalThis;\n return Boolean(_parseImageNode) && NODE_FORMAT_SUPPORT.includes(mimeType);\n }\n\n return true;\n }\n}\n\nfunction checkWebPSupport() {\n if (!isBrowser) {\n return false;\n }\n\n try {\n const element = document.createElement('canvas');\n return element.toDataURL('image/webp').indexOf('data:image/webp') === 0;\n } catch {\n return false;\n }\n}\n//# sourceMappingURL=image-format.js.map","import { _isImageFormatSupported } from '@loaders.gl/images';\nimport GLTFScenegraph from '../api/gltf-scenegraph';\nconst EXT_TEXTURE_WEBP = 'EXT_texture_webp';\nexport const name = EXT_TEXTURE_WEBP;\nexport function preprocess(gltfData, options) {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n if (!_isImageFormatSupported('image/webp')) {\n if (scenegraph.getRequiredExtensions().includes(EXT_TEXTURE_WEBP)) {\n throw new Error(\"gltf: Required extension \".concat(EXT_TEXTURE_WEBP, \" not supported by browser\"));\n }\n\n return;\n }\n\n const {\n json\n } = scenegraph;\n\n for (const texture of json.textures || []) {\n const extension = scenegraph.getObjectExtension(texture, EXT_TEXTURE_WEBP);\n\n if (extension) {\n texture.source = extension.source;\n }\n\n scenegraph.removeObjectExtension(texture, EXT_TEXTURE_WEBP);\n }\n\n scenegraph.removeExtension(EXT_TEXTURE_WEBP);\n}\n//# sourceMappingURL=EXT_texture_webp.js.map","import GLTFScenegraph from '../api/gltf-scenegraph';\nconst KHR_TEXTURE_BASISU = 'KHR_texture_basisu';\nexport const name = KHR_TEXTURE_BASISU;\nexport function preprocess(gltfData, options) {\n const scene = new GLTFScenegraph(gltfData);\n const {\n json\n } = scene;\n\n for (const texture of json.textures || []) {\n const extension = scene.getObjectExtension(texture, KHR_TEXTURE_BASISU);\n\n if (extension) {\n texture.source = extension.source;\n }\n\n scene.removeObjectExtension(texture, KHR_TEXTURE_BASISU);\n }\n\n scene.removeExtension(KHR_TEXTURE_BASISU);\n}\n//# sourceMappingURL=KHR_texture_basisu.js.map","import { getAccessorTypeFromSize, getComponentTypeFromArray } from './gltf-utils';\nexport function getGLTFAccessors(attributes) {\n const accessors = {};\n\n for (const name in attributes) {\n const attribute = attributes[name];\n\n if (name !== 'indices') {\n const glTFAccessor = getGLTFAccessor(attribute);\n accessors[name] = glTFAccessor;\n }\n }\n\n return accessors;\n}\nexport function getGLTFAccessor(attribute) {\n const {\n buffer,\n size,\n count\n } = getAccessorData(attribute);\n const glTFAccessor = {\n value: buffer,\n size,\n byteOffset: 0,\n count,\n type: getAccessorTypeFromSize(size),\n componentType: getComponentTypeFromArray(buffer)\n };\n return glTFAccessor;\n}\n\nfunction getAccessorData(attribute) {\n let buffer = attribute;\n let size = 1;\n let count = 0;\n\n if (attribute && attribute.value) {\n buffer = attribute.value;\n size = attribute.size || 1;\n }\n\n if (buffer) {\n if (!ArrayBuffer.isView(buffer)) {\n buffer = toTypedArray(buffer, Float32Array);\n }\n\n count = buffer.length / size;\n }\n\n return {\n buffer,\n size,\n count\n };\n}\n\nfunction toTypedArray(array, ArrayType, convertTypedArrays = false) {\n if (!array) {\n return null;\n }\n\n if (Array.isArray(array)) {\n return new ArrayType(array);\n }\n\n if (convertTypedArrays && !(array instanceof ArrayType)) {\n return new ArrayType(array);\n }\n\n return array;\n}\n//# sourceMappingURL=gltf-attribute-utils.js.map","import { DracoLoader } from '@loaders.gl/draco';\nimport { sliceArrayBuffer } from '@loaders.gl/loader-utils';\nimport { default as Scenegraph } from '../api/gltf-scenegraph';\nimport { getGLTFAccessors, getGLTFAccessor } from '../gltf-utils/gltf-attribute-utils';\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\nexport const name = KHR_DRACO_MESH_COMPRESSION;\nexport function preprocess(gltfData, options, context) {\n const scenegraph = new Scenegraph(gltfData);\n\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {}\n }\n}\nexport async function decode(gltfData, options, context) {\n var _options$gltf;\n\n if (!(options !== null && options !== void 0 && (_options$gltf = options.gltf) !== null && _options$gltf !== void 0 && _options$gltf.decompressMeshes)) {\n return;\n }\n\n const scenegraph = new Scenegraph(gltfData);\n const promises = [];\n\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n await Promise.all(promises);\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\nexport function encode(gltfData, options = {}) {\n const scenegraph = new Scenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n compressMesh(mesh, options);\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\nasync function decompressPrimitive(scenegraph, primitive, options, context) {\n const dracoExtension = scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);\n\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset);\n const {\n parse\n } = context;\n const dracoOptions = { ...options\n };\n delete dracoOptions['3d-tiles'];\n const decodedData = await parse(bufferCopy, DracoLoader, dracoOptions, context);\n const decodedAttributes = getGLTFAccessors(decodedData.attributes);\n\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n\n if (accessor !== null && accessor !== void 0 && accessor.min && accessor !== null && accessor !== void 0 && accessor.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n primitive.attributes = decodedAttributes;\n\n if (decodedData.indices) {\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n checkPrimitive(primitive);\n}\n\nfunction compressMesh(attributes, indices, mode = 4, options, context) {\n var _context$parseSync;\n\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n const compressedData = options.DracoWriter.encodeSync({\n attributes\n });\n const decodedData = context === null || context === void 0 ? void 0 : (_context$parseSync = context.parseSync) === null || _context$parseSync === void 0 ? void 0 : _context$parseSync.call(context, {\n attributes\n });\n\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n const glTFMesh = {\n primitives: [{\n attributes: fauxAccessors,\n mode,\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors\n }\n }\n }]\n };\n return glTFMesh;\n}\n\nfunction checkPrimitive(primitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n//# sourceMappingURL=KHR_draco_mesh_compression.js.map","import { assert } from '../../utils/assert';\nimport GLTFScenegraph from '../../api/gltf-scenegraph';\nconst KHR_LIGHTS_PUNCTUAL = 'KHR_lights_punctual';\nexport const name = KHR_LIGHTS_PUNCTUAL;\nexport async function decode(gltfData) {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {\n json\n } = gltfScenegraph;\n const extension = gltfScenegraph.getExtension(KHR_LIGHTS_PUNCTUAL);\n\n if (extension) {\n gltfScenegraph.json.lights = extension.lights;\n gltfScenegraph.removeExtension(KHR_LIGHTS_PUNCTUAL);\n }\n\n for (const node of json.nodes || []) {\n const nodeExtension = gltfScenegraph.getObjectExtension(node, KHR_LIGHTS_PUNCTUAL);\n\n if (nodeExtension) {\n node.light = nodeExtension.light;\n }\n\n gltfScenegraph.removeObjectExtension(node, KHR_LIGHTS_PUNCTUAL);\n }\n}\nexport async function encode(gltfData) {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {\n json\n } = gltfScenegraph;\n\n if (json.lights) {\n const extension = gltfScenegraph.addExtension(KHR_LIGHTS_PUNCTUAL);\n assert(!extension.lights);\n extension.lights = json.lights;\n delete json.lights;\n }\n\n if (gltfScenegraph.json.lights) {\n for (const light of gltfScenegraph.json.lights) {\n const node = light.node;\n gltfScenegraph.addObjectExtension(node, KHR_LIGHTS_PUNCTUAL, light);\n }\n\n delete gltfScenegraph.json.lights;\n }\n}\n//# sourceMappingURL=KHR_lights_punctual.js.map","import GLTFScenegraph from '../../api/gltf-scenegraph';\nconst KHR_MATERIALS_UNLIT = 'KHR_materials_unlit';\nexport const name = KHR_MATERIALS_UNLIT;\nexport async function decode(gltfData) {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {\n json\n } = gltfScenegraph;\n gltfScenegraph.removeExtension(KHR_MATERIALS_UNLIT);\n\n for (const material of json.materials || []) {\n const extension = material.extensions && material.extensions.KHR_materials_unlit;\n\n if (extension) {\n material.unlit = true;\n }\n\n gltfScenegraph.removeObjectExtension(material, KHR_MATERIALS_UNLIT);\n }\n}\nexport function encode(gltfData) {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {\n json\n } = gltfScenegraph;\n\n if (gltfScenegraph.materials) {\n for (const material of json.materials || []) {\n if (material.unlit) {\n delete material.unlit;\n gltfScenegraph.addObjectExtension(material, KHR_MATERIALS_UNLIT, {});\n gltfScenegraph.addExtension(KHR_MATERIALS_UNLIT);\n }\n }\n }\n}\n//# sourceMappingURL=KHR_materials_unlit.js.map","import GLTFScenegraph from '../../api/gltf-scenegraph';\nconst KHR_TECHNIQUES_WEBGL = 'KHR_techniques_webgl';\nexport const name = KHR_TECHNIQUES_WEBGL;\nexport async function decode(gltfData) {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {\n json\n } = gltfScenegraph;\n const extension = gltfScenegraph.getExtension(KHR_TECHNIQUES_WEBGL);\n\n if (extension) {\n const techniques = resolveTechniques(extension, gltfScenegraph);\n\n for (const material of json.materials || []) {\n const materialExtension = gltfScenegraph.getObjectExtension(material, KHR_TECHNIQUES_WEBGL);\n\n if (materialExtension) {\n material.technique = Object.assign({}, materialExtension, techniques[materialExtension.technique]);\n material.technique.values = resolveValues(material.technique, gltfScenegraph);\n }\n\n gltfScenegraph.removeObjectExtension(material, KHR_TECHNIQUES_WEBGL);\n }\n\n gltfScenegraph.removeExtension(KHR_TECHNIQUES_WEBGL);\n }\n}\nexport async function encode(gltfData, options) {}\n\nfunction resolveTechniques(techniquesExtension, gltfScenegraph) {\n const {\n programs = [],\n shaders = [],\n techniques = []\n } = techniquesExtension;\n const textDecoder = new TextDecoder();\n shaders.forEach(shader => {\n if (Number.isFinite(shader.bufferView)) {\n shader.code = textDecoder.decode(gltfScenegraph.getTypedArrayForBufferView(shader.bufferView));\n } else {\n throw new Error('KHR_techniques_webgl: no shader code');\n }\n });\n programs.forEach(program => {\n program.fragmentShader = shaders[program.fragmentShader];\n program.vertexShader = shaders[program.vertexShader];\n });\n techniques.forEach(technique => {\n technique.program = programs[technique.program];\n });\n return techniques;\n}\n\nfunction resolveValues(technique, gltfScenegraph) {\n const values = Object.assign({}, technique.values);\n Object.keys(technique.uniforms || {}).forEach(uniform => {\n if (technique.uniforms[uniform].value && !(uniform in values)) {\n values[uniform] = technique.uniforms[uniform].value;\n }\n });\n Object.keys(values).forEach(uniform => {\n if (typeof values[uniform] === 'object' && values[uniform].index !== undefined) {\n values[uniform].texture = gltfScenegraph.getTexture(values[uniform].index);\n }\n });\n return values;\n}\n//# sourceMappingURL=KHR_techniques_webgl.js.map","import * as EXT_meshopt_compression from '../extensions/EXT_meshopt_compression';\nimport * as EXT_texture_webp from '../extensions/EXT_texture_webp';\nimport * as KHR_texture_basisu from '../extensions/KHR_texture_basisu';\nimport * as KHR_draco_mesh_compression from '../extensions/KHR_draco_mesh_compression';\nimport * as KHR_lights_punctual from '../extensions/deprecated/KHR_lights_punctual';\nimport * as KHR_materials_unlit from '../extensions/deprecated/KHR_materials_unlit';\nimport * as KHR_techniques_webgl from '../extensions/deprecated/KHR_techniques_webgl';\nexport const EXTENSIONS = [EXT_meshopt_compression, EXT_texture_webp, KHR_texture_basisu, KHR_draco_mesh_compression, KHR_lights_punctual, KHR_materials_unlit, KHR_techniques_webgl];\nexport function preprocessExtensions(gltf, options = {}, context) {\n const extensions = EXTENSIONS.filter(extension => useExtension(extension.name, options));\n\n for (const extension of extensions) {\n var _extension$preprocess;\n\n (_extension$preprocess = extension.preprocess) === null || _extension$preprocess === void 0 ? void 0 : _extension$preprocess.call(extension, gltf, options, context);\n }\n}\nexport async function decodeExtensions(gltf, options = {}, context) {\n const extensions = EXTENSIONS.filter(extension => useExtension(extension.name, options));\n\n for (const extension of extensions) {\n var _extension$decode;\n\n await ((_extension$decode = extension.decode) === null || _extension$decode === void 0 ? void 0 : _extension$decode.call(extension, gltf, options, context));\n }\n}\n\nfunction useExtension(extensionName, options) {\n var _options$gltf;\n\n const excludes = (options === null || options === void 0 ? void 0 : (_options$gltf = options.gltf) === null || _options$gltf === void 0 ? void 0 : _options$gltf.excludeExtensions) || {};\n const exclude = extensionName in excludes && !excludes[extensionName];\n return !exclude;\n}\n//# sourceMappingURL=gltf-extensions.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as KHR_binary_glTF from '../extensions/KHR_binary_gltf';\nconst GLTF_ARRAYS = {\n accessors: 'accessor',\n animations: 'animation',\n buffers: 'buffer',\n bufferViews: 'bufferView',\n images: 'image',\n materials: 'material',\n meshes: 'mesh',\n nodes: 'node',\n samplers: 'sampler',\n scenes: 'scene',\n skins: 'skin',\n textures: 'texture'\n};\nconst GLTF_KEYS = {\n accessor: 'accessors',\n animations: 'animation',\n buffer: 'buffers',\n bufferView: 'bufferViews',\n image: 'images',\n material: 'materials',\n mesh: 'meshes',\n node: 'nodes',\n sampler: 'samplers',\n scene: 'scenes',\n skin: 'skins',\n texture: 'textures'\n};\n\nclass GLTFV1Normalizer {\n constructor() {\n _defineProperty(this, \"idToIndexMap\", {\n animations: {},\n accessors: {},\n buffers: {},\n bufferViews: {},\n images: {},\n materials: {},\n meshes: {},\n nodes: {},\n samplers: {},\n scenes: {},\n skins: {},\n textures: {}\n });\n\n _defineProperty(this, \"json\", void 0);\n }\n\n normalize(gltf, options) {\n this.json = gltf.json;\n const json = gltf.json;\n\n switch (json.asset && json.asset.version) {\n case '2.0':\n return;\n\n case undefined:\n case '1.0':\n break;\n\n default:\n console.warn(\"glTF: Unknown version \".concat(json.asset.version));\n return;\n }\n\n if (!options.normalize) {\n throw new Error('glTF v1 is not supported.');\n }\n\n console.warn('Converting glTF v1 to glTF v2 format. This is experimental and may fail.');\n\n this._addAsset(json);\n\n this._convertTopLevelObjectsToArrays(json);\n\n KHR_binary_glTF.preprocess(gltf);\n\n this._convertObjectIdsToArrayIndices(json);\n\n this._updateObjects(json);\n\n this._updateMaterial(json);\n }\n\n _addAsset(json) {\n json.asset = json.asset || {};\n json.asset.version = '2.0';\n json.asset.generator = json.asset.generator || 'Normalized to glTF 2.0 by loaders.gl';\n }\n\n _convertTopLevelObjectsToArrays(json) {\n for (const arrayName in GLTF_ARRAYS) {\n this._convertTopLevelObjectToArray(json, arrayName);\n }\n }\n\n _convertTopLevelObjectToArray(json, mapName) {\n const objectMap = json[mapName];\n\n if (!objectMap || Array.isArray(objectMap)) {\n return;\n }\n\n json[mapName] = [];\n\n for (const id in objectMap) {\n const object = objectMap[id];\n object.id = object.id || id;\n const index = json[mapName].length;\n json[mapName].push(object);\n this.idToIndexMap[mapName][id] = index;\n }\n }\n\n _convertObjectIdsToArrayIndices(json) {\n for (const arrayName in GLTF_ARRAYS) {\n this._convertIdsToIndices(json, arrayName);\n }\n\n if ('scene' in json) {\n json.scene = this._convertIdToIndex(json.scene, 'scene');\n }\n\n for (const texture of json.textures) {\n this._convertTextureIds(texture);\n }\n\n for (const mesh of json.meshes) {\n this._convertMeshIds(mesh);\n }\n\n for (const node of json.nodes) {\n this._convertNodeIds(node);\n }\n\n for (const node of json.scenes) {\n this._convertSceneIds(node);\n }\n }\n\n _convertTextureIds(texture) {\n if (texture.source) {\n texture.source = this._convertIdToIndex(texture.source, 'image');\n }\n }\n\n _convertMeshIds(mesh) {\n for (const primitive of mesh.primitives) {\n const {\n attributes,\n indices,\n material\n } = primitive;\n\n for (const attributeName in attributes) {\n attributes[attributeName] = this._convertIdToIndex(attributes[attributeName], 'accessor');\n }\n\n if (indices) {\n primitive.indices = this._convertIdToIndex(indices, 'accessor');\n }\n\n if (material) {\n primitive.material = this._convertIdToIndex(material, 'material');\n }\n }\n }\n\n _convertNodeIds(node) {\n if (node.children) {\n node.children = node.children.map(child => this._convertIdToIndex(child, 'node'));\n }\n\n if (node.meshes) {\n node.meshes = node.meshes.map(mesh => this._convertIdToIndex(mesh, 'mesh'));\n }\n }\n\n _convertSceneIds(scene) {\n if (scene.nodes) {\n scene.nodes = scene.nodes.map(node => this._convertIdToIndex(node, 'node'));\n }\n }\n\n _convertIdsToIndices(json, topLevelArrayName) {\n if (!json[topLevelArrayName]) {\n console.warn(\"gltf v1: json doesn't contain attribute \".concat(topLevelArrayName));\n json[topLevelArrayName] = [];\n }\n\n for (const object of json[topLevelArrayName]) {\n for (const key in object) {\n const id = object[key];\n\n const index = this._convertIdToIndex(id, key);\n\n object[key] = index;\n }\n }\n }\n\n _convertIdToIndex(id, key) {\n const arrayName = GLTF_KEYS[key];\n\n if (arrayName in this.idToIndexMap) {\n const index = this.idToIndexMap[arrayName][id];\n\n if (!Number.isFinite(index)) {\n throw new Error(\"gltf v1: failed to resolve \".concat(key, \" with id \").concat(id));\n }\n\n return index;\n }\n\n return id;\n }\n\n _updateObjects(json) {\n for (const buffer of this.json.buffers) {\n delete buffer.type;\n }\n }\n\n _updateMaterial(json) {\n for (const material of json.materials) {\n var _material$values, _material$values2, _material$values3;\n\n material.pbrMetallicRoughness = {\n baseColorFactor: [1, 1, 1, 1],\n metallicFactor: 1,\n roughnessFactor: 1\n };\n const textureId = ((_material$values = material.values) === null || _material$values === void 0 ? void 0 : _material$values.tex) || ((_material$values2 = material.values) === null || _material$values2 === void 0 ? void 0 : _material$values2.texture2d_0) || ((_material$values3 = material.values) === null || _material$values3 === void 0 ? void 0 : _material$values3.diffuseTex);\n const textureIndex = json.textures.findIndex(texture => texture.id === textureId);\n\n if (textureIndex !== -1) {\n material.pbrMetallicRoughness.baseColorTexture = {\n index: textureIndex\n };\n }\n }\n }\n\n}\n\nexport function normalizeGLTFV1(gltf, options = {}) {\n return new GLTFV1Normalizer().normalize(gltf, options);\n}\n//# sourceMappingURL=normalize-gltf-v1.js.map","import GLTFScenegraph from '../api/gltf-scenegraph';\nconst KHR_BINARY_GLTF = 'KHR_binary_glTF';\nexport const name = KHR_BINARY_GLTF;\nexport function preprocess(gltfData) {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {\n json\n } = gltfScenegraph;\n\n for (const image of json.images || []) {\n const extension = gltfScenegraph.getObjectExtension(image, KHR_BINARY_GLTF);\n\n if (extension) {\n Object.assign(image, extension);\n }\n\n gltfScenegraph.removeObjectExtension(image, KHR_BINARY_GLTF);\n }\n\n if (json.buffers && json.buffers[0]) {\n delete json.buffers[0].uri;\n }\n\n gltfScenegraph.removeExtension(KHR_BINARY_GLTF);\n}\n//# sourceMappingURL=KHR_binary_gltf.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { assert } from '../utils/assert';\nimport { getAccessorArrayTypeAndLength } from '../gltf-utils/gltf-utils';\nconst COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\nconst BYTES = {\n 5120: 1,\n 5121: 1,\n 5122: 2,\n 5123: 2,\n 5125: 4,\n 5126: 4\n};\nconst GL_SAMPLER = {\n TEXTURE_MAG_FILTER: 0x2800,\n TEXTURE_MIN_FILTER: 0x2801,\n TEXTURE_WRAP_S: 0x2802,\n TEXTURE_WRAP_T: 0x2803,\n REPEAT: 0x2901,\n LINEAR: 0x2601,\n NEAREST_MIPMAP_LINEAR: 0x2702\n};\nconst SAMPLER_PARAMETER_GLTF_TO_GL = {\n magFilter: GL_SAMPLER.TEXTURE_MAG_FILTER,\n minFilter: GL_SAMPLER.TEXTURE_MIN_FILTER,\n wrapS: GL_SAMPLER.TEXTURE_WRAP_S,\n wrapT: GL_SAMPLER.TEXTURE_WRAP_T\n};\nconst DEFAULT_SAMPLER = {\n [GL_SAMPLER.TEXTURE_MAG_FILTER]: GL_SAMPLER.LINEAR,\n [GL_SAMPLER.TEXTURE_MIN_FILTER]: GL_SAMPLER.NEAREST_MIPMAP_LINEAR,\n [GL_SAMPLER.TEXTURE_WRAP_S]: GL_SAMPLER.REPEAT,\n [GL_SAMPLER.TEXTURE_WRAP_T]: GL_SAMPLER.REPEAT\n};\n\nfunction getBytesFromComponentType(componentType) {\n return BYTES[componentType];\n}\n\nfunction getSizeFromAccessorType(type) {\n return COMPONENTS[type];\n}\n\nclass GLTFPostProcessor {\n constructor() {\n _defineProperty(this, \"baseUri\", '');\n\n _defineProperty(this, \"json\", {});\n\n _defineProperty(this, \"buffers\", []);\n\n _defineProperty(this, \"images\", []);\n }\n\n postProcess(gltf, options = {}) {\n const {\n json,\n buffers = [],\n images = [],\n baseUri = ''\n } = gltf;\n assert(json);\n this.baseUri = baseUri;\n this.json = json;\n this.buffers = buffers;\n this.images = images;\n\n this._resolveTree(this.json, options);\n\n return this.json;\n }\n\n _resolveTree(json, options = {}) {\n if (json.bufferViews) {\n json.bufferViews = json.bufferViews.map((bufView, i) => this._resolveBufferView(bufView, i));\n }\n\n if (json.images) {\n json.images = json.images.map((image, i) => this._resolveImage(image, i));\n }\n\n if (json.samplers) {\n json.samplers = json.samplers.map((sampler, i) => this._resolveSampler(sampler, i));\n }\n\n if (json.textures) {\n json.textures = json.textures.map((texture, i) => this._resolveTexture(texture, i));\n }\n\n if (json.accessors) {\n json.accessors = json.accessors.map((accessor, i) => this._resolveAccessor(accessor, i));\n }\n\n if (json.materials) {\n json.materials = json.materials.map((material, i) => this._resolveMaterial(material, i));\n }\n\n if (json.meshes) {\n json.meshes = json.meshes.map((mesh, i) => this._resolveMesh(mesh, i));\n }\n\n if (json.nodes) {\n json.nodes = json.nodes.map((node, i) => this._resolveNode(node, i));\n }\n\n if (json.skins) {\n json.skins = json.skins.map((skin, i) => this._resolveSkin(skin, i));\n }\n\n if (json.scenes) {\n json.scenes = json.scenes.map((scene, i) => this._resolveScene(scene, i));\n }\n\n if (json.scene !== undefined) {\n json.scene = json.scenes[this.json.scene];\n }\n }\n\n getScene(index) {\n return this._get('scenes', index);\n }\n\n getNode(index) {\n return this._get('nodes', index);\n }\n\n getSkin(index) {\n return this._get('skins', index);\n }\n\n getMesh(index) {\n return this._get('meshes', index);\n }\n\n getMaterial(index) {\n return this._get('materials', index);\n }\n\n getAccessor(index) {\n return this._get('accessors', index);\n }\n\n getCamera(index) {\n return null;\n }\n\n getTexture(index) {\n return this._get('textures', index);\n }\n\n getSampler(index) {\n return this._get('samplers', index);\n }\n\n getImage(index) {\n return this._get('images', index);\n }\n\n getBufferView(index) {\n return this._get('bufferViews', index);\n }\n\n getBuffer(index) {\n return this._get('buffers', index);\n }\n\n _get(array, index) {\n if (typeof index === 'object') {\n return index;\n }\n\n const object = this.json[array] && this.json[array][index];\n\n if (!object) {\n console.warn(\"glTF file error: Could not find \".concat(array, \"[\").concat(index, \"]\"));\n }\n\n return object;\n }\n\n _resolveScene(scene, index) {\n scene.id = scene.id || \"scene-\".concat(index);\n scene.nodes = (scene.nodes || []).map(node => this.getNode(node));\n return scene;\n }\n\n _resolveNode(node, index) {\n node.id = node.id || \"node-\".concat(index);\n\n if (node.children) {\n node.children = node.children.map(child => this.getNode(child));\n }\n\n if (node.mesh !== undefined) {\n node.mesh = this.getMesh(node.mesh);\n } else if (node.meshes !== undefined && node.meshes.length) {\n node.mesh = node.meshes.reduce((accum, meshIndex) => {\n const mesh = this.getMesh(meshIndex);\n accum.id = mesh.id;\n accum.primitives = accum.primitives.concat(mesh.primitives);\n return accum;\n }, {\n primitives: []\n });\n }\n\n if (node.camera !== undefined) {\n node.camera = this.getCamera(node.camera);\n }\n\n if (node.skin !== undefined) {\n node.skin = this.getSkin(node.skin);\n }\n\n return node;\n }\n\n _resolveSkin(skin, index) {\n skin.id = skin.id || \"skin-\".concat(index);\n skin.inverseBindMatrices = this.getAccessor(skin.inverseBindMatrices);\n return skin;\n }\n\n _resolveMesh(mesh, index) {\n mesh.id = mesh.id || \"mesh-\".concat(index);\n\n if (mesh.primitives) {\n mesh.primitives = mesh.primitives.map(primitive => {\n primitive = { ...primitive\n };\n const attributes = primitive.attributes;\n primitive.attributes = {};\n\n for (const attribute in attributes) {\n primitive.attributes[attribute] = this.getAccessor(attributes[attribute]);\n }\n\n if (primitive.indices !== undefined) {\n primitive.indices = this.getAccessor(primitive.indices);\n }\n\n if (primitive.material !== undefined) {\n primitive.material = this.getMaterial(primitive.material);\n }\n\n return primitive;\n });\n }\n\n return mesh;\n }\n\n _resolveMaterial(material, index) {\n material.id = material.id || \"material-\".concat(index);\n\n if (material.normalTexture) {\n material.normalTexture = { ...material.normalTexture\n };\n material.normalTexture.texture = this.getTexture(material.normalTexture.index);\n }\n\n if (material.occlusionTexture) {\n material.occlustionTexture = { ...material.occlustionTexture\n };\n material.occlusionTexture.texture = this.getTexture(material.occlusionTexture.index);\n }\n\n if (material.emissiveTexture) {\n material.emmisiveTexture = { ...material.emmisiveTexture\n };\n material.emissiveTexture.texture = this.getTexture(material.emissiveTexture.index);\n }\n\n if (!material.emissiveFactor) {\n material.emissiveFactor = material.emmisiveTexture ? [1, 1, 1] : [0, 0, 0];\n }\n\n if (material.pbrMetallicRoughness) {\n material.pbrMetallicRoughness = { ...material.pbrMetallicRoughness\n };\n const mr = material.pbrMetallicRoughness;\n\n if (mr.baseColorTexture) {\n mr.baseColorTexture = { ...mr.baseColorTexture\n };\n mr.baseColorTexture.texture = this.getTexture(mr.baseColorTexture.index);\n }\n\n if (mr.metallicRoughnessTexture) {\n mr.metallicRoughnessTexture = { ...mr.metallicRoughnessTexture\n };\n mr.metallicRoughnessTexture.texture = this.getTexture(mr.metallicRoughnessTexture.index);\n }\n }\n\n return material;\n }\n\n _resolveAccessor(accessor, index) {\n accessor.id = accessor.id || \"accessor-\".concat(index);\n\n if (accessor.bufferView !== undefined) {\n accessor.bufferView = this.getBufferView(accessor.bufferView);\n }\n\n accessor.bytesPerComponent = getBytesFromComponentType(accessor.componentType);\n accessor.components = getSizeFromAccessorType(accessor.type);\n accessor.bytesPerElement = accessor.bytesPerComponent * accessor.components;\n\n if (accessor.bufferView) {\n const buffer = accessor.bufferView.buffer;\n const {\n ArrayType,\n byteLength\n } = getAccessorArrayTypeAndLength(accessor, accessor.bufferView);\n const byteOffset = (accessor.bufferView.byteOffset || 0) + (accessor.byteOffset || 0) + buffer.byteOffset;\n let cutBuffer = buffer.arrayBuffer.slice(byteOffset, byteOffset + byteLength);\n\n if (accessor.bufferView.byteStride) {\n cutBuffer = this._getValueFromInterleavedBuffer(buffer, byteOffset, accessor.bufferView.byteStride, accessor.bytesPerElement, accessor.count);\n }\n\n accessor.value = new ArrayType(cutBuffer);\n }\n\n return accessor;\n }\n\n _getValueFromInterleavedBuffer(buffer, byteOffset, byteStride, bytesPerElement, count) {\n const result = new Uint8Array(count * bytesPerElement);\n\n for (let i = 0; i < count; i++) {\n const elementOffset = byteOffset + i * byteStride;\n result.set(new Uint8Array(buffer.arrayBuffer.slice(elementOffset, elementOffset + bytesPerElement)), i * bytesPerElement);\n }\n\n return result.buffer;\n }\n\n _resolveTexture(texture, index) {\n texture.id = texture.id || \"texture-\".concat(index);\n texture.sampler = 'sampler' in texture ? this.getSampler(texture.sampler) : DEFAULT_SAMPLER;\n texture.source = this.getImage(texture.source);\n return texture;\n }\n\n _resolveSampler(sampler, index) {\n sampler.id = sampler.id || \"sampler-\".concat(index);\n sampler.parameters = {};\n\n for (const key in sampler) {\n const glEnum = this._enumSamplerParameter(key);\n\n if (glEnum !== undefined) {\n sampler.parameters[glEnum] = sampler[key];\n }\n }\n\n return sampler;\n }\n\n _enumSamplerParameter(key) {\n return SAMPLER_PARAMETER_GLTF_TO_GL[key];\n }\n\n _resolveImage(image, index) {\n image.id = image.id || \"image-\".concat(index);\n\n if (image.bufferView !== undefined) {\n image.bufferView = this.getBufferView(image.bufferView);\n }\n\n const preloadedImage = this.images[index];\n\n if (preloadedImage) {\n image.image = preloadedImage;\n }\n\n return image;\n }\n\n _resolveBufferView(bufferView, index) {\n const bufferIndex = bufferView.buffer;\n const result = {\n id: \"bufferView-\".concat(index),\n ...bufferView,\n buffer: this.buffers[bufferIndex]\n };\n const arrayBuffer = this.buffers[bufferIndex].arrayBuffer;\n let byteOffset = this.buffers[bufferIndex].byteOffset || 0;\n\n if ('byteOffset' in bufferView) {\n byteOffset += bufferView.byteOffset;\n }\n\n result.data = new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n return result;\n }\n\n _resolveCamera(camera, index) {\n camera.id = camera.id || \"camera-\".concat(index);\n\n if (camera.perspective) {}\n\n if (camera.orthographic) {}\n\n return camera;\n }\n\n}\n\nexport function postProcessGLTF(gltf, options) {\n return new GLTFPostProcessor().postProcess(gltf, options);\n}\n//# sourceMappingURL=post-process-gltf.js.map","import { padToNBytes, assert } from '@loaders.gl/loader-utils';\nconst MAGIC_glTF = 0x676c5446;\nconst GLB_FILE_HEADER_SIZE = 12;\nconst GLB_CHUNK_HEADER_SIZE = 8;\nconst GLB_CHUNK_TYPE_JSON = 0x4e4f534a;\nconst GLB_CHUNK_TYPE_BIN = 0x004e4942;\nconst GLB_CHUNK_TYPE_JSON_XVIZ_DEPRECATED = 0;\nconst GLB_CHUNK_TYPE_BIX_XVIZ_DEPRECATED = 1;\nconst GLB_V1_CONTENT_FORMAT_JSON = 0x0;\nconst LE = true;\n\nfunction getMagicString(dataView, byteOffset = 0) {\n return \"\".concat(String.fromCharCode(dataView.getUint8(byteOffset + 0))).concat(String.fromCharCode(dataView.getUint8(byteOffset + 1))).concat(String.fromCharCode(dataView.getUint8(byteOffset + 2))).concat(String.fromCharCode(dataView.getUint8(byteOffset + 3)));\n}\n\nexport function isGLB(arrayBuffer, byteOffset = 0, options = {}) {\n const dataView = new DataView(arrayBuffer);\n const {\n magic = MAGIC_glTF\n } = options;\n const magic1 = dataView.getUint32(byteOffset, false);\n return magic1 === magic || magic1 === MAGIC_glTF;\n}\nexport default function parseGLBSync(glb, arrayBuffer, byteOffset = 0, options = {}) {\n const dataView = new DataView(arrayBuffer);\n const type = getMagicString(dataView, byteOffset + 0);\n const version = dataView.getUint32(byteOffset + 4, LE);\n const byteLength = dataView.getUint32(byteOffset + 8, LE);\n Object.assign(glb, {\n header: {\n byteOffset,\n byteLength,\n hasBinChunk: false\n },\n type,\n version,\n json: {},\n binChunks: []\n });\n byteOffset += GLB_FILE_HEADER_SIZE;\n\n switch (glb.version) {\n case 1:\n return parseGLBV1(glb, dataView, byteOffset);\n\n case 2:\n return parseGLBV2(glb, dataView, byteOffset, options = {});\n\n default:\n throw new Error(\"Invalid GLB version \".concat(glb.version, \". Only supports v1 and v2.\"));\n }\n}\n\nfunction parseGLBV1(glb, dataView, byteOffset) {\n assert(glb.header.byteLength > GLB_FILE_HEADER_SIZE + GLB_CHUNK_HEADER_SIZE);\n const contentLength = dataView.getUint32(byteOffset + 0, LE);\n const contentFormat = dataView.getUint32(byteOffset + 4, LE);\n byteOffset += GLB_CHUNK_HEADER_SIZE;\n assert(contentFormat === GLB_V1_CONTENT_FORMAT_JSON);\n parseJSONChunk(glb, dataView, byteOffset, contentLength);\n byteOffset += contentLength;\n byteOffset += parseBINChunk(glb, dataView, byteOffset, glb.header.byteLength);\n return byteOffset;\n}\n\nfunction parseGLBV2(glb, dataView, byteOffset, options) {\n assert(glb.header.byteLength > GLB_FILE_HEADER_SIZE + GLB_CHUNK_HEADER_SIZE);\n parseGLBChunksSync(glb, dataView, byteOffset, options);\n return byteOffset + glb.header.byteLength;\n}\n\nfunction parseGLBChunksSync(glb, dataView, byteOffset, options) {\n while (byteOffset + 8 <= glb.header.byteLength) {\n const chunkLength = dataView.getUint32(byteOffset + 0, LE);\n const chunkFormat = dataView.getUint32(byteOffset + 4, LE);\n byteOffset += GLB_CHUNK_HEADER_SIZE;\n\n switch (chunkFormat) {\n case GLB_CHUNK_TYPE_JSON:\n parseJSONChunk(glb, dataView, byteOffset, chunkLength);\n break;\n\n case GLB_CHUNK_TYPE_BIN:\n parseBINChunk(glb, dataView, byteOffset, chunkLength);\n break;\n\n case GLB_CHUNK_TYPE_JSON_XVIZ_DEPRECATED:\n if (!options.strict) {\n parseJSONChunk(glb, dataView, byteOffset, chunkLength);\n }\n\n break;\n\n case GLB_CHUNK_TYPE_BIX_XVIZ_DEPRECATED:\n if (!options.strict) {\n parseBINChunk(glb, dataView, byteOffset, chunkLength);\n }\n\n break;\n\n default:\n break;\n }\n\n byteOffset += padToNBytes(chunkLength, 4);\n }\n\n return byteOffset;\n}\n\nfunction parseJSONChunk(glb, dataView, byteOffset, chunkLength) {\n const jsonChunk = new Uint8Array(dataView.buffer, byteOffset, chunkLength);\n const textDecoder = new TextDecoder('utf8');\n const jsonText = textDecoder.decode(jsonChunk);\n glb.json = JSON.parse(jsonText);\n return padToNBytes(chunkLength, 4);\n}\n\nfunction parseBINChunk(glb, dataView, byteOffset, chunkLength) {\n glb.header.hasBinChunk = true;\n glb.binChunks.push({\n byteOffset,\n byteLength: chunkLength,\n arrayBuffer: dataView.buffer\n });\n return padToNBytes(chunkLength, 4);\n}\n//# sourceMappingURL=parse-glb.js.map","import { BasisLoader, selectSupportedBasisFormat } from '@loaders.gl/textures';\nimport { ImageLoader } from '@loaders.gl/images';\nimport { parseJSON, sliceArrayBuffer } from '@loaders.gl/loader-utils';\nimport { assert } from '../utils/assert';\nimport { resolveUrl } from '../gltf-utils/resolve-url';\nimport { getTypedArrayForBufferView } from '../gltf-utils/get-typed-array';\nimport { preprocessExtensions, decodeExtensions } from '../api/gltf-extensions';\nimport { normalizeGLTFV1 } from '../api/normalize-gltf-v1';\nimport { postProcessGLTF } from '../api/post-process-gltf';\nimport parseGLBSync, { isGLB } from './parse-glb';\nexport function isGLTF(arrayBuffer, options) {\n const byteOffset = 0;\n return isGLB(arrayBuffer, byteOffset, options);\n}\nexport async function parseGLTF(gltf, arrayBufferOrString, byteOffset = 0, options, context) {\n var _options$gltf, _options$gltf2, _options$gltf3, _options$gltf4;\n\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n normalizeGLTFV1(gltf, {\n normalize: options === null || options === void 0 ? void 0 : (_options$gltf = options.gltf) === null || _options$gltf === void 0 ? void 0 : _options$gltf.normalize\n });\n preprocessExtensions(gltf, options, context);\n const promises = [];\n\n if (options !== null && options !== void 0 && (_options$gltf2 = options.gltf) !== null && _options$gltf2 !== void 0 && _options$gltf2.loadBuffers && gltf.json.buffers) {\n await loadBuffers(gltf, options, context);\n }\n\n if (options !== null && options !== void 0 && (_options$gltf3 = options.gltf) !== null && _options$gltf3 !== void 0 && _options$gltf3.loadImages) {\n const promise = loadImages(gltf, options, context);\n promises.push(promise);\n }\n\n const promise = decodeExtensions(gltf, options, context);\n promises.push(promise);\n await Promise.all(promises);\n return options !== null && options !== void 0 && (_options$gltf4 = options.gltf) !== null && _options$gltf4 !== void 0 && _options$gltf4.postProcess ? postProcessGLTF(gltf, options) : gltf;\n}\n\nfunction parseGLTFContainerSync(gltf, data, byteOffset, options) {\n if (options.uri) {\n gltf.baseUri = options.uri;\n }\n\n if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {\n const textDecoder = new TextDecoder();\n data = textDecoder.decode(data);\n }\n\n if (typeof data === 'string') {\n gltf.json = parseJSON(data);\n } else if (data instanceof ArrayBuffer) {\n const glb = {};\n byteOffset = parseGLBSync(glb, data, byteOffset, options.glb);\n assert(glb.type === 'glTF', \"Invalid GLB magic string \".concat(glb.type));\n gltf._glb = glb;\n gltf.json = glb.json;\n } else {\n assert(false, 'GLTF: must be ArrayBuffer or string');\n }\n\n const buffers = gltf.json.buffers || [];\n gltf.buffers = new Array(buffers.length).fill(null);\n\n if (gltf._glb && gltf._glb.header.hasBinChunk) {\n const {\n binChunks\n } = gltf._glb;\n gltf.buffers[0] = {\n arrayBuffer: binChunks[0].arrayBuffer,\n byteOffset: binChunks[0].byteOffset,\n byteLength: binChunks[0].byteLength\n };\n }\n\n const images = gltf.json.images || [];\n gltf.images = new Array(images.length).fill({});\n}\n\nasync function loadBuffers(gltf, options, context) {\n const buffers = gltf.json.buffers || [];\n\n for (let i = 0; i < buffers.length; ++i) {\n const buffer = buffers[i];\n\n if (buffer.uri) {\n var _context$fetch, _response$arrayBuffer;\n\n const {\n fetch\n } = context;\n assert(fetch);\n const uri = resolveUrl(buffer.uri, options);\n const response = await (context === null || context === void 0 ? void 0 : (_context$fetch = context.fetch) === null || _context$fetch === void 0 ? void 0 : _context$fetch.call(context, uri));\n const arrayBuffer = await (response === null || response === void 0 ? void 0 : (_response$arrayBuffer = response.arrayBuffer) === null || _response$arrayBuffer === void 0 ? void 0 : _response$arrayBuffer.call(response));\n gltf.buffers[i] = {\n arrayBuffer,\n byteOffset: 0,\n byteLength: arrayBuffer.byteLength\n };\n delete buffer.uri;\n } else if (gltf.buffers[i] === null) {\n gltf.buffers[i] = {\n arrayBuffer: new ArrayBuffer(buffer.byteLength),\n byteOffset: 0,\n byteLength: buffer.byteLength\n };\n }\n }\n}\n\nasync function loadImages(gltf, options, context) {\n const imageIndices = getReferencesImageIndices(gltf);\n const images = gltf.json.images || [];\n const promises = [];\n\n for (const imageIndex of imageIndices) {\n promises.push(loadImage(gltf, images[imageIndex], imageIndex, options, context));\n }\n\n return await Promise.all(promises);\n}\n\nfunction getReferencesImageIndices(gltf) {\n const imageIndices = new Set();\n const textures = gltf.json.textures || [];\n\n for (const texture of textures) {\n if (texture.source !== undefined) {\n imageIndices.add(texture.source);\n }\n }\n\n return Array.from(imageIndices).sort();\n}\n\nasync function loadImage(gltf, image, index, options, context) {\n const {\n fetch,\n parse\n } = context;\n let arrayBuffer;\n\n if (image.uri && !image.hasOwnProperty('bufferView')) {\n const uri = resolveUrl(image.uri, options);\n const response = await fetch(uri);\n arrayBuffer = await response.arrayBuffer();\n }\n\n if (Number.isFinite(image.bufferView)) {\n const array = getTypedArrayForBufferView(gltf.json, gltf.buffers, image.bufferView);\n arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);\n }\n\n assert(arrayBuffer, 'glTF image has no data');\n let parsedImage = await parse(arrayBuffer, [ImageLoader, BasisLoader], {\n mimeType: image.mimeType,\n basis: options.basis || {\n format: selectSupportedBasisFormat()\n }\n }, context);\n\n if (parsedImage && parsedImage[0]) {\n parsedImage = {\n compressed: true,\n mipmaps: false,\n width: parsedImage[0].width,\n height: parsedImage[0].height,\n data: parsedImage[0]\n };\n }\n\n gltf.images = gltf.images || [];\n gltf.images[index] = parsedImage;\n}\n//# sourceMappingURL=parse-gltf.js.map","import { VERSION } from './lib/utils/version';\nimport { parseGLTF } from './lib/parsers/parse-gltf';\nexport const GLTFLoader = {\n name: 'glTF',\n id: 'gltf',\n module: 'gltf',\n version: VERSION,\n extensions: ['gltf', 'glb'],\n mimeTypes: ['model/gltf+json', 'model/gltf-binary'],\n text: true,\n binary: true,\n tests: ['glTF'],\n parse,\n options: {\n gltf: {\n normalize: true,\n loadBuffers: true,\n loadImages: true,\n decompressMeshes: true,\n postProcess: true\n },\n log: console\n },\n deprecatedOptions: {\n fetchImages: 'gltf.loadImages',\n createImages: 'gltf.loadImages',\n decompress: 'gltf.decompressMeshes',\n postProcess: 'gltf.postProcess',\n gltf: {\n decompress: 'gltf.decompressMeshes'\n }\n }\n};\nexport async function parse(arrayBuffer, options = {}, context) {\n options = { ...GLTFLoader.options,\n ...options\n };\n options.gltf = { ...GLTFLoader.options.gltf,\n ...options.gltf\n };\n const {\n byteOffset = 0\n } = options;\n const gltf = {};\n return await parseGLTF(gltf, arrayBuffer, byteOffset, options, context);\n}\n//# sourceMappingURL=gltf-loader.js.map","export const VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : 'latest';\n//# sourceMappingURL=version.js.map","import { isBrowser } from '@loaders.gl/loader-utils';\nconst {\n _parseImageNode\n} = globalThis;\nconst IMAGE_SUPPORTED = typeof Image !== 'undefined';\nconst IMAGE_BITMAP_SUPPORTED = typeof ImageBitmap !== 'undefined';\nconst NODE_IMAGE_SUPPORTED = Boolean(_parseImageNode);\nconst DATA_SUPPORTED = isBrowser ? true : NODE_IMAGE_SUPPORTED;\nexport function isImageTypeSupported(type) {\n switch (type) {\n case 'auto':\n return IMAGE_BITMAP_SUPPORTED || IMAGE_SUPPORTED || DATA_SUPPORTED;\n\n case 'imagebitmap':\n return IMAGE_BITMAP_SUPPORTED;\n\n case 'image':\n return IMAGE_SUPPORTED;\n\n case 'data':\n return DATA_SUPPORTED;\n\n default:\n throw new Error(\"@loaders.gl/images: image \".concat(type, \" not supported in this environment\"));\n }\n}\nexport function getDefaultImageType() {\n if (IMAGE_BITMAP_SUPPORTED) {\n return 'imagebitmap';\n }\n\n if (IMAGE_SUPPORTED) {\n return 'image';\n }\n\n if (DATA_SUPPORTED) {\n return 'data';\n }\n\n throw new Error('Install \\'@loaders.gl/polyfills\\' to parse images under Node.js');\n}\n//# sourceMappingURL=image-type.js.map","export function isImage(image) {\n return Boolean(getImageTypeOrNull(image));\n}\nexport function deleteImage(image) {\n switch (getImageType(image)) {\n case 'imagebitmap':\n image.close();\n break;\n\n default:\n }\n}\nexport function getImageType(image) {\n const format = getImageTypeOrNull(image);\n\n if (!format) {\n throw new Error('Not an image');\n }\n\n return format;\n}\nexport function getImageSize(image) {\n return getImageData(image);\n}\nexport function getImageData(image) {\n switch (getImageType(image)) {\n case 'data':\n return image;\n\n case 'image':\n case 'imagebitmap':\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n if (!context) {\n throw new Error('getImageData');\n }\n\n canvas.width = image.width;\n canvas.height = image.height;\n context.drawImage(image, 0, 0);\n return context.getImageData(0, 0, image.width, image.height);\n\n default:\n throw new Error('getImageData');\n }\n}\n\nfunction getImageTypeOrNull(image) {\n if (typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) {\n return 'imagebitmap';\n }\n\n if (typeof Image !== 'undefined' && image instanceof Image) {\n return 'image';\n }\n\n if (image && typeof image === 'object' && image.data && image.width && image.height) {\n return 'data';\n }\n\n return null;\n}\n//# sourceMappingURL=parsed-image-api.js.map","const SVG_DATA_URL_PATTERN = /^data:image\\/svg\\+xml/;\nconst SVG_URL_PATTERN = /\\.svg((\\?|#).*)?$/;\nexport function isSVG(url) {\n return url && (SVG_DATA_URL_PATTERN.test(url) || SVG_URL_PATTERN.test(url));\n}\nexport function getBlobOrSVGDataUrl(arrayBuffer, url) {\n if (isSVG(url)) {\n const textDecoder = new TextDecoder();\n let xmlText = textDecoder.decode(arrayBuffer);\n\n try {\n if (typeof unescape === 'function' && typeof encodeURIComponent === 'function') {\n xmlText = unescape(encodeURIComponent(xmlText));\n }\n } catch (error) {\n throw new Error(error.message);\n }\n\n const src = \"data:image/svg+xml;base64,\".concat(btoa(xmlText));\n return src;\n }\n\n return getBlob(arrayBuffer, url);\n}\nexport function getBlob(arrayBuffer, url) {\n if (isSVG(url)) {\n throw new Error('SVG cannot be parsed directly to imagebitmap');\n }\n\n return new Blob([new Uint8Array(arrayBuffer)]);\n}\n//# sourceMappingURL=svg-utils.js.map","import { getBlobOrSVGDataUrl } from './svg-utils';\nexport default async function parseToImage(arrayBuffer, options, url) {\n const blobOrDataUrl = getBlobOrSVGDataUrl(arrayBuffer, url);\n const URL = self.URL || self.webkitURL;\n const objectUrl = typeof blobOrDataUrl !== 'string' && URL.createObjectURL(blobOrDataUrl);\n\n try {\n return await loadToImage(objectUrl || blobOrDataUrl, options);\n } finally {\n if (objectUrl) {\n URL.revokeObjectURL(objectUrl);\n }\n }\n}\nexport async function loadToImage(url, options) {\n const image = new Image();\n image.src = url;\n\n if (options.image && options.image.decode && image.decode) {\n await image.decode();\n return image;\n }\n\n return await new Promise((resolve, reject) => {\n try {\n image.onload = () => resolve(image);\n\n image.onerror = err => reject(new Error(\"Could not load image \".concat(url, \": \").concat(err)));\n } catch (error) {\n reject(error);\n }\n });\n}\n//# sourceMappingURL=parse-to-image.js.map","import { isSVG, getBlob } from './svg-utils';\nimport parseToImage from './parse-to-image';\nconst EMPTY_OBJECT = {};\nlet imagebitmapOptionsSupported = true;\nexport default async function parseToImageBitmap(arrayBuffer, options, url) {\n let blob;\n\n if (isSVG(url)) {\n const image = await parseToImage(arrayBuffer, options, url);\n blob = image;\n } else {\n blob = getBlob(arrayBuffer, url);\n }\n\n const imagebitmapOptions = options && options.imagebitmap;\n return await safeCreateImageBitmap(blob, imagebitmapOptions);\n}\n\nasync function safeCreateImageBitmap(blob, imagebitmapOptions = null) {\n if (isEmptyObject(imagebitmapOptions) || !imagebitmapOptionsSupported) {\n imagebitmapOptions = null;\n }\n\n if (imagebitmapOptions) {\n try {\n return await createImageBitmap(blob, imagebitmapOptions);\n } catch (error) {\n console.warn(error);\n imagebitmapOptionsSupported = false;\n }\n }\n\n return await createImageBitmap(blob);\n}\n\nfunction isEmptyObject(object) {\n for (const key in object || EMPTY_OBJECT) {\n return false;\n }\n\n return true;\n}\n//# sourceMappingURL=parse-to-image-bitmap.js.map","import { VERSION } from './lib/utils/version';\nimport parseImage from './lib/parsers/parse-image';\nimport { getBinaryImageMetadata } from './lib/category-api/binary-image-api';\nconst EXTENSIONS = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp', 'ico', 'svg'];\nconst MIME_TYPES = ['image/png', 'image/jpeg', 'image/gif', 'image/webp', 'image/bmp', 'image/vnd.microsoft.icon', 'image/svg+xml'];\nconst DEFAULT_IMAGE_LOADER_OPTIONS = {\n image: {\n type: 'auto',\n decode: true\n }\n};\nexport const ImageLoader = {\n id: 'image',\n module: 'images',\n name: 'Images',\n version: VERSION,\n mimeTypes: MIME_TYPES,\n extensions: EXTENSIONS,\n parse: parseImage,\n tests: [arrayBuffer => Boolean(getBinaryImageMetadata(new DataView(arrayBuffer)))],\n options: DEFAULT_IMAGE_LOADER_OPTIONS\n};\nexport const _typecheckImageLoader = ImageLoader;\n//# sourceMappingURL=image-loader.js.map","export const VERSION = typeof \"3.2.10\" !== 'undefined' ? \"3.2.10\" : 'latest';\n//# sourceMappingURL=version.js.map","import { assert } from '@loaders.gl/loader-utils';\nimport { isImageTypeSupported, getDefaultImageType } from '../category-api/image-type';\nimport { getImageData } from '../category-api/parsed-image-api';\nimport parseToImage from './parse-to-image';\nimport parseToImageBitmap from './parse-to-image-bitmap';\nimport parseToNodeImage from './parse-to-node-image';\nexport default async function parseImage(arrayBuffer, options, context) {\n options = options || {};\n const imageOptions = options.image || {};\n const imageType = imageOptions.type || 'auto';\n const {\n url\n } = context || {};\n const loadType = getLoadableImageType(imageType);\n let image;\n\n switch (loadType) {\n case 'imagebitmap':\n image = await parseToImageBitmap(arrayBuffer, options, url);\n break;\n\n case 'image':\n image = await parseToImage(arrayBuffer, options, url);\n break;\n\n case 'data':\n image = await parseToNodeImage(arrayBuffer, options);\n break;\n\n default:\n assert(false);\n }\n\n if (imageType === 'data') {\n image = getImageData(image);\n }\n\n return image;\n}\n\nfunction getLoadableImageType(type) {\n switch (type) {\n case 'auto':\n case 'data':\n return getDefaultImageType();\n\n default:\n isImageTypeSupported(type);\n return type;\n }\n}\n//# sourceMappingURL=parse-image.js.map","import { assert } from '@loaders.gl/loader-utils';\nimport { getBinaryImageMetadata } from '../category-api/binary-image-api';\nexport default async function parseToNodeImage(arrayBuffer, options) {\n const {\n mimeType\n } = getBinaryImageMetadata(arrayBuffer) || {};\n const _parseImageNode = globalThis._parseImageNode;\n assert(_parseImageNode);\n return await _parseImageNode(arrayBuffer, mimeType);\n}\n//# sourceMappingURL=parse-to-node-image.js.map","import { log } from '@luma.gl/gltools';\nimport Framebuffer from './framebuffer';\nimport Renderbuffer from './renderbuffer';\nimport Texture from './texture';\nimport { assert } from '../utils/assert';\nconst UNIFORM_SETTERS = {\n [5126]: getArraySetter.bind(null, 'uniform1fv', toFloatArray, 1, setVectorUniform),\n [35664]: getArraySetter.bind(null, 'uniform2fv', toFloatArray, 2, setVectorUniform),\n [35665]: getArraySetter.bind(null, 'uniform3fv', toFloatArray, 3, setVectorUniform),\n [35666]: getArraySetter.bind(null, 'uniform4fv', toFloatArray, 4, setVectorUniform),\n [5124]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [35667]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [35668]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [35669]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n [35670]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [35671]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [35672]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [35673]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n [35674]: getArraySetter.bind(null, 'uniformMatrix2fv', toFloatArray, 4, setMatrixUniform),\n [35675]: getArraySetter.bind(null, 'uniformMatrix3fv', toFloatArray, 9, setMatrixUniform),\n [35676]: getArraySetter.bind(null, 'uniformMatrix4fv', toFloatArray, 16, setMatrixUniform),\n [35678]: getSamplerSetter,\n [35680]: getSamplerSetter,\n [5125]: getArraySetter.bind(null, 'uniform1uiv', toUIntArray, 1, setVectorUniform),\n [36294]: getArraySetter.bind(null, 'uniform2uiv', toUIntArray, 2, setVectorUniform),\n [36295]: getArraySetter.bind(null, 'uniform3uiv', toUIntArray, 3, setVectorUniform),\n [36296]: getArraySetter.bind(null, 'uniform4uiv', toUIntArray, 4, setVectorUniform),\n [35685]: getArraySetter.bind(null, 'uniformMatrix2x3fv', toFloatArray, 6, setMatrixUniform),\n [35686]: getArraySetter.bind(null, 'uniformMatrix2x4fv', toFloatArray, 8, setMatrixUniform),\n [35687]: getArraySetter.bind(null, 'uniformMatrix3x2fv', toFloatArray, 6, setMatrixUniform),\n [35688]: getArraySetter.bind(null, 'uniformMatrix3x4fv', toFloatArray, 12, setMatrixUniform),\n [35689]: getArraySetter.bind(null, 'uniformMatrix4x2fv', toFloatArray, 8, setMatrixUniform),\n [35690]: getArraySetter.bind(null, 'uniformMatrix4x3fv', toFloatArray, 12, setMatrixUniform),\n [35678]: getSamplerSetter,\n [35680]: getSamplerSetter,\n [35679]: getSamplerSetter,\n [35682]: getSamplerSetter,\n [36289]: getSamplerSetter,\n [36292]: getSamplerSetter,\n [36293]: getSamplerSetter,\n [36298]: getSamplerSetter,\n [36299]: getSamplerSetter,\n [36300]: getSamplerSetter,\n [36303]: getSamplerSetter,\n [36306]: getSamplerSetter,\n [36307]: getSamplerSetter,\n [36308]: getSamplerSetter,\n [36311]: getSamplerSetter\n};\nconst FLOAT_ARRAY = {};\nconst INT_ARRAY = {};\nconst UINT_ARRAY = {};\nconst array1 = [0];\n\nfunction toTypedArray(value, uniformLength, Type, cache) {\n if (uniformLength === 1 && typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n\n if (Number.isFinite(value)) {\n array1[0] = value;\n value = array1;\n }\n\n const length = value.length;\n\n if (length % uniformLength) {\n log.warn(\"Uniform size should be multiples of \".concat(uniformLength), value)();\n }\n\n if (value instanceof Type) {\n return value;\n }\n\n let result = cache[length];\n\n if (!result) {\n result = new Type(length);\n cache[length] = result;\n }\n\n for (let i = 0; i < length; i++) {\n result[i] = value[i];\n }\n\n return result;\n}\n\nfunction toFloatArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);\n}\n\nfunction toIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);\n}\n\nfunction toUIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);\n}\n\nexport function getUniformSetter(gl, location, info) {\n const setter = UNIFORM_SETTERS[info.type];\n\n if (!setter) {\n throw new Error(\"Unknown GLSL uniform type \".concat(info.type));\n }\n\n return setter().bind(null, gl, location);\n}\nexport function parseUniformName(name) {\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n\n if (!matches || matches.length < 2) {\n throw new Error(\"Failed to parse GLSL uniform name \".concat(name));\n }\n\n return {\n name: matches[1],\n length: matches[2] || 1,\n isArray: Boolean(matches[2])\n };\n}\nexport function checkUniformValues(uniforms, source, uniformMap) {\n for (const uniformName in uniforms) {\n const value = uniforms[uniformName];\n const shouldCheck = !uniformMap || Boolean(uniformMap[uniformName]);\n\n if (shouldCheck && !checkUniformValue(value)) {\n source = source ? \"\".concat(source, \" \") : '';\n console.error(\"\".concat(source, \" Bad uniform \").concat(uniformName), value);\n throw new Error(\"\".concat(source, \" Bad uniform \").concat(uniformName));\n }\n }\n\n return true;\n}\n\nfunction checkUniformValue(value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return checkUniformArray(value);\n }\n\n if (isFinite(value)) {\n return true;\n } else if (value === true || value === false) {\n return true;\n } else if (value instanceof Texture) {\n return true;\n } else if (value instanceof Renderbuffer) {\n return true;\n } else if (value instanceof Framebuffer) {\n return Boolean(value.texture);\n }\n\n return false;\n}\n\nexport function copyUniform(uniforms, key, value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n if (uniforms[key]) {\n const dest = uniforms[key];\n\n for (let i = 0, len = value.length; i < len; ++i) {\n dest[i] = value[i];\n }\n } else {\n uniforms[key] = value.slice();\n }\n } else {\n uniforms[key] = value;\n }\n}\n\nfunction checkUniformArray(value) {\n if (value.length === 0) {\n return false;\n }\n\n const checkLength = Math.min(value.length, 16);\n\n for (let i = 0; i < checkLength; ++i) {\n if (!Number.isFinite(value[i])) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction getSamplerSetter() {\n let cache = null;\n return (gl, location, value) => {\n const update = cache !== value;\n\n if (update) {\n gl.uniform1i(location, value);\n cache = value;\n }\n\n return update;\n };\n}\n\nfunction getArraySetter(functionName, toArray, size, uniformSetter) {\n let cache = null;\n let cacheLength = null;\n return (gl, location, value) => {\n const arrayValue = toArray(value, size);\n const length = arrayValue.length;\n let update = false;\n\n if (cache === null) {\n cache = new Float32Array(length);\n cacheLength = length;\n update = true;\n } else {\n assert(cacheLength === length, 'Uniform length cannot change.');\n\n for (let i = 0; i < length; ++i) {\n if (arrayValue[i] !== cache[i]) {\n update = true;\n break;\n }\n }\n }\n\n if (update) {\n uniformSetter(gl, functionName, location, arrayValue);\n cache.set(arrayValue);\n }\n\n return update;\n };\n}\n\nfunction setVectorUniform(gl, functionName, location, value) {\n gl[functionName](location, value);\n}\n\nfunction setMatrixUniform(gl, functionName, location, value) {\n gl[functionName](location, false, value);\n}\n//# sourceMappingURL=uniforms.js.map","export default function getShaderName(shader) {\n let defaultName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'unnamed';\n const SHADER_NAME_REGEXP = /#define[\\s*]SHADER_NAME[\\s*]([A-Za-z0-9_-]+)[\\s*]/;\n const match = shader.match(SHADER_NAME_REGEXP);\n return match ? match[1] : defaultName;\n}\n//# sourceMappingURL=get-shader-name.js.map","import getShaderName from './get-shader-name';\nimport getShaderTypeName from './get-shader-type-name';\nexport default function formatGLSLCompilerError(errLog, src, shaderType) {\n const {\n shaderName,\n errors,\n warnings\n } = parseGLSLCompilerError(errLog, src, shaderType);\n return \"GLSL compilation error in \".concat(shaderName, \"\\n\\n\").concat(errors, \"\\n\").concat(warnings);\n}\nexport function parseGLSLCompilerError(errLog, src, shaderType, shaderName) {\n const errorStrings = errLog.split(/\\r?\\n/);\n const errors = {};\n const warnings = {};\n const name = shaderName || getShaderName(src) || '(unnamed)';\n const shaderDescription = \"\".concat(getShaderTypeName(shaderType), \" shader \").concat(name);\n\n for (let i = 0; i < errorStrings.length; i++) {\n const errorString = errorStrings[i];\n\n if (errorString.length <= 1) {\n continue;\n }\n\n const segments = errorString.split(':');\n const type = segments[0];\n const line = parseInt(segments[2], 10);\n\n if (isNaN(line)) {\n throw new Error(\"GLSL compilation error in \".concat(shaderDescription, \": \").concat(errLog));\n }\n\n if (type !== 'WARNING') {\n errors[line] = errorString;\n } else {\n warnings[line] = errorString;\n }\n }\n\n const lines = addLineNumbers(src);\n return {\n shaderName: shaderDescription,\n errors: formatErrors(errors, lines),\n warnings: formatErrors(warnings, lines)\n };\n}\n\nfunction formatErrors(errors, lines) {\n let message = '';\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (!errors[i + 3] && !errors[i + 2] && !errors[i + 1]) {\n continue;\n }\n\n message += \"\".concat(line, \"\\n\");\n\n if (errors[i + 1]) {\n const error = errors[i + 1];\n const segments = error.split(':', 3);\n const type = segments[0];\n const column = parseInt(segments[1], 10) || 0;\n const err = error.substring(segments.join(':').length + 1).trim();\n message += padLeft(\"^^^ \".concat(type, \": \").concat(err, \"\\n\\n\"), column);\n }\n }\n\n return message;\n}\n\nfunction addLineNumbers(string) {\n let start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n let delim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ': ';\n const lines = string.split(/\\r?\\n/);\n const maxDigits = String(lines.length + start - 1).length;\n return lines.map((line, i) => {\n const lineNumber = String(i + start);\n const digits = lineNumber.length;\n const prefix = padLeft(lineNumber, maxDigits - digits);\n return prefix + delim + line;\n });\n}\n\nfunction padLeft(string, digits) {\n let result = '';\n\n for (let i = 0; i < digits; ++i) {\n result += ' ';\n }\n\n return \"\".concat(result).concat(string);\n}\n//# sourceMappingURL=format-glsl-error.js.map","const GL_FRAGMENT_SHADER = 0x8b30;\nconst GL_VERTEX_SHADER = 0x8b31;\nexport default function getShaderTypeName(type) {\n switch (type) {\n case GL_FRAGMENT_SHADER:\n return 'fragment';\n\n case GL_VERTEX_SHADER:\n return 'vertex';\n\n default:\n return 'unknown type';\n }\n}\n//# sourceMappingURL=get-shader-type-name.js.map","import { assertWebGLContext, log } from '@luma.gl/gltools';\nimport { parseGLSLCompilerError, getShaderName } from '../glsl-utils';\nimport { assert } from '../utils/assert';\nimport { uid } from '../utils/utils';\nimport Resource from './resource';\nconst ERR_SOURCE = 'Shader: GLSL source code must be a JavaScript string';\nexport class Shader extends Resource {\n get [Symbol.toStringTag]() {\n return 'Shader';\n }\n\n static getTypeName(shaderType) {\n switch (shaderType) {\n case 35633:\n return 'vertex-shader';\n\n case 35632:\n return 'fragment-shader';\n\n default:\n assert(false);\n return 'unknown';\n }\n }\n\n constructor(gl, props) {\n assertWebGLContext(gl);\n assert(typeof props.source === 'string', ERR_SOURCE);\n const id = getShaderName(props.source, null) || props.id || uid(\"unnamed \".concat(Shader.getTypeName(props.shaderType)));\n super(gl, {\n id\n });\n this.shaderType = props.shaderType;\n this.source = props.source;\n this.initialize(props);\n }\n\n initialize(_ref) {\n let {\n source\n } = _ref;\n const shaderName = getShaderName(source, null);\n\n if (shaderName) {\n this.id = uid(shaderName);\n }\n\n this._compile(source);\n }\n\n getParameter(pname) {\n return this.gl.getShaderParameter(this.handle, pname);\n }\n\n toString() {\n return \"\".concat(Shader.getTypeName(this.shaderType), \":\").concat(this.id);\n }\n\n getName() {\n return getShaderName(this.source) || 'unnamed-shader';\n }\n\n getSource() {\n return this.gl.getShaderSource(this.handle);\n }\n\n getTranslatedSource() {\n const extension = this.gl.getExtension('WEBGL_debug_shaders');\n return extension ? extension.getTranslatedShaderSource(this.handle) : 'No translated source available. WEBGL_debug_shaders not implemented';\n }\n\n _compile() {\n let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.source;\n\n if (!source.startsWith('#version ')) {\n source = \"#version 100\\n\".concat(source);\n }\n\n this.source = source;\n this.gl.shaderSource(this.handle, this.source);\n this.gl.compileShader(this.handle);\n const compileStatus = this.getParameter(35713);\n\n if (!compileStatus) {\n const infoLog = this.gl.getShaderInfoLog(this.handle);\n const {\n shaderName,\n errors,\n warnings\n } = parseGLSLCompilerError(infoLog, this.source, this.shaderType, this.id);\n log.error(\"GLSL compilation errors in \".concat(shaderName, \"\\n\").concat(errors))();\n log.warn(\"GLSL compilation warnings in \".concat(shaderName, \"\\n\").concat(warnings))();\n throw new Error(\"GLSL compilation errors in \".concat(shaderName));\n }\n }\n\n _deleteHandle() {\n this.gl.deleteShader(this.handle);\n }\n\n _getOptsFromHandle() {\n return {\n type: this.getParameter(35663),\n source: this.getSource()\n };\n }\n\n}\nexport class VertexShader extends Shader {\n get [Symbol.toStringTag]() {\n return 'VertexShader';\n }\n\n constructor(gl, props) {\n if (typeof props === 'string') {\n props = {\n source: props\n };\n }\n\n super(gl, Object.assign({}, props, {\n shaderType: 35633\n }));\n }\n\n _createHandle() {\n return this.gl.createShader(35633);\n }\n\n}\nexport class FragmentShader extends Shader {\n get [Symbol.toStringTag]() {\n return 'FragmentShader';\n }\n\n constructor(gl, props) {\n if (typeof props === 'string') {\n props = {\n source: props\n };\n }\n\n super(gl, Object.assign({}, props, {\n shaderType: 35632\n }));\n }\n\n _createHandle() {\n return this.gl.createShader(35632);\n }\n\n}\n//# sourceMappingURL=shader.js.map","import Accessor from './accessor';\nimport { isWebGL2 } from '@luma.gl/gltools';\nimport { decomposeCompositeGLType } from '../webgl-utils/attribute-utils';\nexport default class ProgramConfiguration {\n constructor(program) {\n this.id = program.id;\n this.attributeInfos = [];\n this.attributeInfosByName = {};\n this.attributeInfosByLocation = [];\n this.varyingInfos = [];\n this.varyingInfosByName = {};\n Object.seal(this);\n\n this._readAttributesFromProgram(program);\n\n this._readVaryingsFromProgram(program);\n }\n\n getAttributeInfo(locationOrName) {\n const location = Number(locationOrName);\n\n if (Number.isFinite(location)) {\n return this.attributeInfosByLocation[location];\n }\n\n return this.attributeInfosByName[locationOrName] || null;\n }\n\n getAttributeLocation(locationOrName) {\n const attributeInfo = this.getAttributeInfo(locationOrName);\n return attributeInfo ? attributeInfo.location : -1;\n }\n\n getAttributeAccessor(locationOrName) {\n const attributeInfo = this.getAttributeInfo(locationOrName);\n return attributeInfo ? attributeInfo.accessor : null;\n }\n\n getVaryingInfo(locationOrName) {\n const location = Number(locationOrName);\n\n if (Number.isFinite(location)) {\n return this.varyingInfos[location];\n }\n\n return this.varyingInfosByName[locationOrName] || null;\n }\n\n getVaryingIndex(locationOrName) {\n const varying = this.getVaryingInfo();\n return varying ? varying.location : -1;\n }\n\n getVaryingAccessor(locationOrName) {\n const varying = this.getVaryingInfo();\n return varying ? varying.accessor : null;\n }\n\n _readAttributesFromProgram(program) {\n const {\n gl\n } = program;\n const count = gl.getProgramParameter(program.handle, 35721);\n\n for (let index = 0; index < count; index++) {\n const {\n name,\n type,\n size\n } = gl.getActiveAttrib(program.handle, index);\n const location = gl.getAttribLocation(program.handle, name);\n\n if (location >= 0) {\n this._addAttribute(location, name, type, size);\n }\n }\n\n this.attributeInfos.sort((a, b) => a.location - b.location);\n }\n\n _readVaryingsFromProgram(program) {\n const {\n gl\n } = program;\n\n if (!isWebGL2(gl)) {\n return;\n }\n\n const count = gl.getProgramParameter(program.handle, 35971);\n\n for (let location = 0; location < count; location++) {\n const {\n name,\n type,\n size\n } = gl.getTransformFeedbackVarying(program.handle, location);\n\n this._addVarying(location, name, type, size);\n }\n\n this.varyingInfos.sort((a, b) => a.location - b.location);\n }\n\n _addAttribute(location, name, compositeType, size) {\n const {\n type,\n components\n } = decomposeCompositeGLType(compositeType);\n const accessor = {\n type,\n size: size * components\n };\n\n this._inferProperties(location, name, accessor);\n\n const attributeInfo = {\n location,\n name,\n accessor: new Accessor(accessor)\n };\n this.attributeInfos.push(attributeInfo);\n this.attributeInfosByLocation[location] = attributeInfo;\n this.attributeInfosByName[attributeInfo.name] = attributeInfo;\n }\n\n _inferProperties(location, name, accessor) {\n if (/instance/i.test(name)) {\n accessor.divisor = 1;\n }\n }\n\n _addVarying(location, name, compositeType, size) {\n const {\n type,\n components\n } = decomposeCompositeGLType(compositeType);\n const accessor = new Accessor({\n type,\n size: size * components\n });\n const varying = {\n location,\n name,\n accessor\n };\n this.varyingInfos.push(varying);\n this.varyingInfosByName[varying.name] = varying;\n }\n\n}\n//# sourceMappingURL=program-configuration.js.map","import Resource from './resource';\nimport Texture from './texture';\nimport Framebuffer from './framebuffer';\nimport { parseUniformName, getUniformSetter } from './uniforms';\nimport { VertexShader, FragmentShader } from './shader';\nimport ProgramConfiguration from './program-configuration';\nimport { copyUniform, checkUniformValues } from './uniforms';\nimport { isWebGL2, assertWebGL2Context, withParameters, log } from '@luma.gl/gltools';\nimport { getKey } from '../webgl-utils/constants-to-keys';\nimport { getPrimitiveDrawMode } from '../webgl-utils/attribute-utils';\nimport { assert } from '../utils/assert';\nimport { uid } from '../utils/utils';\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\nconst GL_SEPARATE_ATTRIBS = 0x8c8d;\nconst V6_DEPRECATED_METHODS = ['setVertexArray', 'setAttributes', 'setBuffers', 'unsetBuffers', 'use', 'getUniformCount', 'getUniformInfo', 'getUniformLocation', 'getUniformValue', 'getVarying', 'getFragDataLocation', 'getAttachedShaders', 'getAttributeCount', 'getAttributeLocation', 'getAttributeInfo'];\nexport default class Program extends Resource {\n get [Symbol.toStringTag]() {\n return 'Program';\n }\n\n constructor(gl) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(gl, props);\n this.stubRemovedMethods('Program', 'v6.0', V6_DEPRECATED_METHODS);\n this._isCached = false;\n this.initialize(props);\n Object.seal(this);\n\n this._setId(props.id);\n }\n\n initialize() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n hash,\n vs,\n fs,\n varyings,\n bufferMode = GL_SEPARATE_ATTRIBS\n } = props;\n this.hash = hash || '';\n this.vs = typeof vs === 'string' ? new VertexShader(this.gl, {\n id: \"\".concat(props.id, \"-vs\"),\n source: vs\n }) : vs;\n this.fs = typeof fs === 'string' ? new FragmentShader(this.gl, {\n id: \"\".concat(props.id, \"-fs\"),\n source: fs\n }) : fs;\n assert(this.vs instanceof VertexShader);\n assert(this.fs instanceof FragmentShader);\n this.uniforms = {};\n this._textureUniforms = {};\n\n if (varyings && varyings.length > 0) {\n assertWebGL2Context(this.gl);\n this.varyings = varyings;\n this.gl2.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n\n this._compileAndLink();\n\n this._readUniformLocationsFromLinkedProgram();\n\n this.configuration = new ProgramConfiguration(this);\n return this.setProps(props);\n }\n\n delete() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (this._isCached) {\n return this;\n }\n\n return super.delete(options);\n }\n\n setProps(props) {\n if ('uniforms' in props) {\n this.setUniforms(props.uniforms);\n }\n\n return this;\n }\n\n draw(_ref) {\n let {\n logPriority,\n drawMode = 4,\n vertexCount,\n offset = 0,\n start,\n end,\n isIndexed = false,\n indexType = 5123,\n instanceCount = 0,\n isInstanced = instanceCount > 0,\n vertexArray = null,\n transformFeedback,\n framebuffer,\n parameters = {},\n uniforms,\n samplers\n } = _ref;\n\n if (uniforms || samplers) {\n log.deprecated('Program.draw({uniforms})', 'Program.setUniforms(uniforms)')();\n this.setUniforms(uniforms || {});\n }\n\n if (log.priority >= logPriority) {\n const fb = framebuffer ? framebuffer.id : 'default';\n const message = \"mode=\".concat(getKey(this.gl, drawMode), \" verts=\").concat(vertexCount, \" \") + \"instances=\".concat(instanceCount, \" indexType=\").concat(getKey(this.gl, indexType), \" \") + \"isInstanced=\".concat(isInstanced, \" isIndexed=\").concat(isIndexed, \" \") + \"Framebuffer=\".concat(fb);\n log.log(logPriority, message)();\n }\n\n assert(vertexArray);\n this.gl.useProgram(this.handle);\n\n if (!this._areTexturesRenderable() || vertexCount === 0 || isInstanced && instanceCount === 0) {\n return false;\n }\n\n vertexArray.bindForDraw(vertexCount, instanceCount, () => {\n if (framebuffer !== undefined) {\n parameters = Object.assign({}, parameters, {\n framebuffer\n });\n }\n\n if (transformFeedback) {\n const primitiveMode = getPrimitiveDrawMode(drawMode);\n transformFeedback.begin(primitiveMode);\n }\n\n this._bindTextures();\n\n withParameters(this.gl, parameters, () => {\n if (isIndexed && isInstanced) {\n this.gl2.drawElementsInstanced(drawMode, vertexCount, indexType, offset, instanceCount);\n } else if (isIndexed && isWebGL2(this.gl) && !isNaN(start) && !isNaN(end)) {\n this.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);\n } else if (isIndexed) {\n this.gl.drawElements(drawMode, vertexCount, indexType, offset);\n } else if (isInstanced) {\n this.gl2.drawArraysInstanced(drawMode, offset, vertexCount, instanceCount);\n } else {\n this.gl.drawArrays(drawMode, offset, vertexCount);\n }\n });\n\n if (transformFeedback) {\n transformFeedback.end();\n }\n });\n return true;\n }\n\n setUniforms() {\n let uniforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (log.priority >= 2) {\n checkUniformValues(uniforms, this.id, this._uniformSetters);\n }\n\n this.gl.useProgram(this.handle);\n\n for (const uniformName in uniforms) {\n const uniform = uniforms[uniformName];\n const uniformSetter = this._uniformSetters[uniformName];\n\n if (uniformSetter) {\n let value = uniform;\n let textureUpdate = false;\n\n if (value instanceof Framebuffer) {\n value = value.texture;\n }\n\n if (value instanceof Texture) {\n textureUpdate = this.uniforms[uniformName] !== uniform;\n\n if (textureUpdate) {\n if (uniformSetter.textureIndex === undefined) {\n uniformSetter.textureIndex = this._textureIndexCounter++;\n }\n\n const texture = value;\n const {\n textureIndex\n } = uniformSetter;\n texture.bind(textureIndex);\n value = textureIndex;\n this._textureUniforms[uniformName] = texture;\n } else {\n value = uniformSetter.textureIndex;\n }\n } else if (this._textureUniforms[uniformName]) {\n delete this._textureUniforms[uniformName];\n }\n\n if (uniformSetter(value) || textureUpdate) {\n copyUniform(this.uniforms, uniformName, uniform);\n }\n }\n }\n\n return this;\n }\n\n _areTexturesRenderable() {\n let texturesRenderable = true;\n\n for (const uniformName in this._textureUniforms) {\n const texture = this._textureUniforms[uniformName];\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n\n return texturesRenderable;\n }\n\n _bindTextures() {\n for (const uniformName in this._textureUniforms) {\n const textureIndex = this._uniformSetters[uniformName].textureIndex;\n\n this._textureUniforms[uniformName].bind(textureIndex);\n }\n }\n\n _createHandle() {\n return this.gl.createProgram();\n }\n\n _deleteHandle() {\n this.gl.deleteProgram(this.handle);\n }\n\n _getOptionsFromHandle(handle) {\n const shaderHandles = this.gl.getAttachedShaders(handle);\n const opts = {};\n\n for (const shaderHandle of shaderHandles) {\n const type = this.gl.getShaderParameter(this.handle, 35663);\n\n switch (type) {\n case 35633:\n opts.vs = new VertexShader({\n handle: shaderHandle\n });\n break;\n\n case 35632:\n opts.fs = new FragmentShader({\n handle: shaderHandle\n });\n break;\n\n default:\n }\n }\n\n return opts;\n }\n\n _getParameter(pname) {\n return this.gl.getProgramParameter(this.handle, pname);\n }\n\n _setId(id) {\n if (!id) {\n const programName = this._getName();\n\n this.id = uid(programName);\n }\n }\n\n _getName() {\n let programName = this.vs.getName() || this.fs.getName();\n programName = programName.replace(/shader/i, '');\n programName = programName ? \"\".concat(programName, \"-program\") : 'program';\n return programName;\n }\n\n _compileAndLink() {\n const {\n gl\n } = this;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, \"linkProgram for \".concat(this._getName()))();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, \"linkProgram for \".concat(this._getName()))();\n\n if (gl.debug || log.level > 0) {\n const linked = gl.getProgramParameter(this.handle, 35714);\n\n if (!linked) {\n throw new Error(\"Error linking: \".concat(gl.getProgramInfoLog(this.handle)));\n }\n\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, 35715);\n\n if (!validated) {\n throw new Error(\"Error validating: \".concat(gl.getProgramInfoLog(this.handle)));\n }\n }\n }\n\n _readUniformLocationsFromLinkedProgram() {\n const {\n gl\n } = this;\n this._uniformSetters = {};\n this._uniformCount = this._getParameter(35718);\n\n for (let i = 0; i < this._uniformCount; i++) {\n const info = this.gl.getActiveUniform(this.handle, i);\n const {\n name\n } = parseUniformName(info.name);\n let location = gl.getUniformLocation(this.handle, name);\n this._uniformSetters[name] = getUniformSetter(gl, location, info);\n\n if (info.size > 1) {\n for (let l = 0; l < info.size; l++) {\n location = gl.getUniformLocation(this.handle, \"\".concat(name, \"[\").concat(l, \"]\"));\n this._uniformSetters[\"\".concat(name, \"[\").concat(l, \"]\")] = getUniformSetter(gl, location, info);\n }\n }\n }\n\n this._textureIndexCounter = 0;\n }\n\n getActiveUniforms(uniformIndices, pname) {\n return this.gl2.getActiveUniforms(this.handle, uniformIndices, pname);\n }\n\n getUniformBlockIndex(blockName) {\n return this.gl2.getUniformBlockIndex(this.handle, blockName);\n }\n\n getActiveUniformBlockParameter(blockIndex, pname) {\n return this.gl2.getActiveUniformBlockParameter(this.handle, blockIndex, pname);\n }\n\n uniformBlockBinding(blockIndex, blockBinding) {\n this.gl2.uniformBlockBinding(this.handle, blockIndex, blockBinding);\n }\n\n}\n//# sourceMappingURL=program.js.map","import { assert } from '../utils';\nconst FS100 = \"void main() {gl_FragColor = vec4(0);}\";\nconst FS_GLES = \"out vec4 transform_output;\\nvoid main() {\\n transform_output = vec4(0);\\n}\";\nconst FS300 = \"#version 300 es\\n\".concat(FS_GLES);\nexport function getQualifierDetails(line, qualifiers) {\n qualifiers = Array.isArray(qualifiers) ? qualifiers : [qualifiers];\n const words = line.replace(/^\\s+/, '').split(/\\s+/);\n const [qualifier, type, definition] = words;\n\n if (!qualifiers.includes(qualifier) || !type || !definition) {\n return null;\n }\n\n const name = definition.split(';')[0];\n return {\n qualifier,\n type,\n name\n };\n}\nexport function getPassthroughFS() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n version = 100,\n input,\n inputType,\n output\n } = options;\n\n if (!input) {\n if (version === 300) {\n return FS300;\n } else if (version > 300) {\n return \"#version \".concat(version, \"\\n\").concat(FS_GLES);\n }\n\n return FS100;\n }\n\n const outputValue = convertToVec4(input, inputType);\n\n if (version >= 300) {\n return \"#version \".concat(version, \" \").concat(version === 300 ? 'es' : '', \"\\nin \").concat(inputType, \" \").concat(input, \";\\nout vec4 \").concat(output, \";\\nvoid main() {\\n \").concat(output, \" = \").concat(outputValue, \";\\n}\");\n }\n\n return \"varying \".concat(inputType, \" \").concat(input, \";\\nvoid main() {\\n gl_FragColor = \").concat(outputValue, \";\\n}\");\n}\nexport function typeToChannelSuffix(type) {\n switch (type) {\n case 'float':\n return 'x';\n\n case 'vec2':\n return 'xy';\n\n case 'vec3':\n return 'xyz';\n\n case 'vec4':\n return 'xyzw';\n\n default:\n assert(false);\n return null;\n }\n}\nexport function typeToChannelCount(type) {\n switch (type) {\n case 'float':\n return 1;\n\n case 'vec2':\n return 2;\n\n case 'vec3':\n return 3;\n\n case 'vec4':\n return 4;\n\n default:\n assert(false);\n return null;\n }\n}\nexport function convertToVec4(variable, type) {\n switch (type) {\n case 'float':\n return \"vec4(\".concat(variable, \", 0.0, 0.0, 1.0)\");\n\n case 'vec2':\n return \"vec4(\".concat(variable, \", 0.0, 1.0)\");\n\n case 'vec3':\n return \"vec4(\".concat(variable, \", 1.0)\");\n\n case 'vec4':\n return variable;\n\n default:\n assert(false);\n return null;\n }\n}\n//# sourceMappingURL=shader-utils.js.map","import { isWebGL2 } from '@luma.gl/gltools';\nimport { Buffer, TransformFeedback } from '@luma.gl/webgl';\nimport { assert } from '@luma.gl/webgl';\nexport default class BufferTransform {\n constructor(gl) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.gl = gl;\n this.currentIndex = 0;\n this.feedbackMap = {};\n this.varyings = null;\n this.bindings = [];\n this.resources = {};\n\n this._initialize(props);\n\n Object.seal(this);\n }\n\n setupResources(opts) {\n for (const binding of this.bindings) {\n this._setupTransformFeedback(binding, opts);\n }\n }\n\n updateModelProps() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n varyings\n } = this;\n\n if (varyings.length > 0) {\n props = Object.assign({}, props, {\n varyings\n });\n }\n\n return props;\n }\n\n getDrawOptions() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const binding = this.bindings[this.currentIndex];\n const {\n sourceBuffers,\n transformFeedback\n } = binding;\n const attributes = Object.assign({}, sourceBuffers, opts.attributes);\n return {\n attributes,\n transformFeedback\n };\n }\n\n swap() {\n if (this.feedbackMap) {\n this.currentIndex = this._getNextIndex();\n return true;\n }\n\n return false;\n }\n\n update() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._setupBuffers(opts);\n }\n\n getBuffer(varyingName) {\n const {\n feedbackBuffers\n } = this.bindings[this.currentIndex];\n const bufferOrParams = varyingName ? feedbackBuffers[varyingName] : null;\n\n if (!bufferOrParams) {\n return null;\n }\n\n return bufferOrParams instanceof Buffer ? bufferOrParams : bufferOrParams.buffer;\n }\n\n getData() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n varyingName\n } = options;\n const buffer = this.getBuffer(varyingName);\n\n if (buffer) {\n return buffer.getData();\n }\n\n return null;\n }\n\n delete() {\n for (const name in this.resources) {\n this.resources[name].delete();\n }\n }\n\n _initialize() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._setupBuffers(props);\n\n this.varyings = props.varyings || Object.keys(this.bindings[this.currentIndex].feedbackBuffers);\n\n if (this.varyings.length > 0) {\n assert(isWebGL2(this.gl));\n }\n }\n\n _getFeedbackBuffers(props) {\n const {\n sourceBuffers = {}\n } = props;\n const feedbackBuffers = {};\n\n if (this.bindings[this.currentIndex]) {\n Object.assign(feedbackBuffers, this.bindings[this.currentIndex].feedbackBuffers);\n }\n\n if (this.feedbackMap) {\n for (const sourceName in this.feedbackMap) {\n const feedbackName = this.feedbackMap[sourceName];\n\n if (sourceName in sourceBuffers) {\n feedbackBuffers[feedbackName] = sourceName;\n }\n }\n }\n\n Object.assign(feedbackBuffers, props.feedbackBuffers);\n\n for (const bufferName in feedbackBuffers) {\n const bufferOrRef = feedbackBuffers[bufferName];\n\n if (typeof bufferOrRef === 'string') {\n const sourceBuffer = sourceBuffers[bufferOrRef];\n const {\n byteLength,\n usage,\n accessor\n } = sourceBuffer;\n feedbackBuffers[bufferName] = this._createNewBuffer(bufferName, {\n byteLength,\n usage,\n accessor\n });\n }\n }\n\n return feedbackBuffers;\n }\n\n _setupBuffers() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n sourceBuffers = null\n } = props;\n Object.assign(this.feedbackMap, props.feedbackMap);\n\n const feedbackBuffers = this._getFeedbackBuffers(props);\n\n this._updateBindings({\n sourceBuffers,\n feedbackBuffers\n });\n }\n\n _setupTransformFeedback(binding, _ref) {\n let {\n model\n } = _ref;\n const {\n program\n } = model;\n binding.transformFeedback = new TransformFeedback(this.gl, {\n program,\n buffers: binding.feedbackBuffers\n });\n }\n\n _updateBindings(opts) {\n this.bindings[this.currentIndex] = this._updateBinding(this.bindings[this.currentIndex], opts);\n\n if (this.feedbackMap) {\n const {\n sourceBuffers,\n feedbackBuffers\n } = this._swapBuffers(this.bindings[this.currentIndex]);\n\n const nextIndex = this._getNextIndex();\n\n this.bindings[nextIndex] = this._updateBinding(this.bindings[nextIndex], {\n sourceBuffers,\n feedbackBuffers\n });\n }\n }\n\n _updateBinding(binding, opts) {\n if (!binding) {\n return {\n sourceBuffers: Object.assign({}, opts.sourceBuffers),\n feedbackBuffers: Object.assign({}, opts.feedbackBuffers)\n };\n }\n\n Object.assign(binding.sourceBuffers, opts.sourceBuffers);\n Object.assign(binding.feedbackBuffers, opts.feedbackBuffers);\n\n if (binding.transformFeedback) {\n binding.transformFeedback.setBuffers(binding.feedbackBuffers);\n }\n\n return binding;\n }\n\n _swapBuffers(opts) {\n if (!this.feedbackMap) {\n return null;\n }\n\n const sourceBuffers = Object.assign({}, opts.sourceBuffers);\n const feedbackBuffers = Object.assign({}, opts.feedbackBuffers);\n\n for (const srcName in this.feedbackMap) {\n const dstName = this.feedbackMap[srcName];\n sourceBuffers[srcName] = opts.feedbackBuffers[dstName];\n feedbackBuffers[dstName] = opts.sourceBuffers[srcName];\n assert(feedbackBuffers[dstName] instanceof Buffer);\n }\n\n return {\n sourceBuffers,\n feedbackBuffers\n };\n }\n\n _createNewBuffer(name, opts) {\n const buffer = new Buffer(this.gl, opts);\n\n if (this.resources[name]) {\n this.resources[name].delete();\n }\n\n this.resources[name] = buffer;\n return buffer;\n }\n\n _getNextIndex() {\n return (this.currentIndex + 1) % 2;\n }\n\n}\n//# sourceMappingURL=buffer-transform.js.map","export default function getShaderVersion(source) {\n let version = 100;\n const words = source.match(/[^\\s]+/g);\n\n if (words.length >= 2 && words[0] === '#version') {\n const v = parseInt(words[1], 10);\n\n if (Number.isFinite(v)) {\n version = v;\n }\n }\n\n return version;\n}\n//# sourceMappingURL=get-shader-version.js.map","const vs = \"attribute float transform_elementID;\\nvec2 transform_getPixelSizeHalf(vec2 size) {\\n return vec2(1.) / (2. * size);\\n}\\n\\nvec2 transform_getPixelIndices(vec2 texSize, vec2 pixelSizeHalf) {\\n float yIndex = floor((transform_elementID / texSize[0]) + pixelSizeHalf[1]);\\n float xIndex = transform_elementID - (yIndex * texSize[0]);\\n return vec2(xIndex, yIndex);\\n}\\nvec2 transform_getTexCoord(vec2 size) {\\n vec2 pixelSizeHalf = transform_getPixelSizeHalf(size);\\n vec2 indices = transform_getPixelIndices(size, pixelSizeHalf);\\n vec2 coord = indices / size + pixelSizeHalf;\\n return coord;\\n}\\nvec2 transform_getPos(vec2 size) {\\n vec2 texCoord = transform_getTexCoord(size);\\n vec2 pos = (texCoord * (2.0, 2.0)) - (1., 1.);\\n return pos;\\n}\\nvec4 transform_getInput(sampler2D texSampler, vec2 size) {\\n vec2 texCoord = transform_getTexCoord(size);\\n vec4 textureColor = texture2D(texSampler, texCoord);\\n return textureColor;\\n}\\n\";\nexport const transform = {\n name: 'transform',\n vs,\n fs: null\n};\n//# sourceMappingURL=transform.js.map","import { assert } from '@luma.gl/webgl';\nimport { combineInjects, getQualifierDetails, typeToChannelSuffix } from '@luma.gl/shadertools';\nconst SAMPLER_UNIFORM_PREFIX = 'transform_uSampler_';\nconst SIZE_UNIFORM_PREFIX = 'transform_uSize_';\nconst VS_POS_VARIABLE = 'transform_position';\nexport function updateForTextures(_ref) {\n let {\n vs,\n sourceTextureMap,\n targetTextureVarying,\n targetTexture\n } = _ref;\n const texAttributeNames = Object.keys(sourceTextureMap);\n let sourceCount = texAttributeNames.length;\n let targetTextureType = null;\n const samplerTextureMap = {};\n let updatedVs = vs;\n let finalInject = {};\n\n if (sourceCount > 0 || targetTextureVarying) {\n const vsLines = updatedVs.split('\\n');\n const updateVsLines = vsLines.slice();\n vsLines.forEach((line, index, lines) => {\n if (sourceCount > 0) {\n const updated = processAttributeDefinition(line, sourceTextureMap);\n\n if (updated) {\n const {\n updatedLine,\n inject\n } = updated;\n updateVsLines[index] = updatedLine;\n finalInject = combineInjects([finalInject, inject]);\n Object.assign(samplerTextureMap, updated.samplerTextureMap);\n sourceCount--;\n }\n }\n\n if (targetTextureVarying && !targetTextureType) {\n targetTextureType = getVaryingType(line, targetTextureVarying);\n }\n });\n\n if (targetTextureVarying) {\n assert(targetTexture);\n const sizeName = \"\".concat(SIZE_UNIFORM_PREFIX).concat(targetTextureVarying);\n const uniformDeclaration = \"uniform vec2 \".concat(sizeName, \";\\n\");\n const posInstructions = \" vec2 \".concat(VS_POS_VARIABLE, \" = transform_getPos(\").concat(sizeName, \");\\n gl_Position = vec4(\").concat(VS_POS_VARIABLE, \", 0, 1.);\\n\");\n const inject = {\n 'vs:#decl': uniformDeclaration,\n 'vs:#main-start': posInstructions\n };\n finalInject = combineInjects([finalInject, inject]);\n }\n\n updatedVs = updateVsLines.join('\\n');\n }\n\n return {\n vs: updatedVs,\n targetTextureType,\n inject: finalInject,\n samplerTextureMap\n };\n}\nexport function getSizeUniforms(_ref2) {\n let {\n sourceTextureMap,\n targetTextureVarying,\n targetTexture\n } = _ref2;\n const uniforms = {};\n let width;\n let height;\n\n if (targetTextureVarying) {\n ({\n width,\n height\n } = targetTexture);\n uniforms[\"\".concat(SIZE_UNIFORM_PREFIX).concat(targetTextureVarying)] = [width, height];\n }\n\n for (const textureName in sourceTextureMap) {\n ({\n width,\n height\n } = sourceTextureMap[textureName]);\n uniforms[\"\".concat(SIZE_UNIFORM_PREFIX).concat(textureName)] = [width, height];\n }\n\n return uniforms;\n}\n\nfunction getAttributeDefinition(line) {\n return getQualifierDetails(line, ['attribute', 'in']);\n}\n\nfunction getSamplerDeclerations(textureName) {\n const samplerName = \"\".concat(SAMPLER_UNIFORM_PREFIX).concat(textureName);\n const sizeName = \"\".concat(SIZE_UNIFORM_PREFIX).concat(textureName);\n const uniformDeclerations = \" uniform sampler2D \".concat(samplerName, \";\\n uniform vec2 \").concat(sizeName, \";\");\n return {\n samplerName,\n sizeName,\n uniformDeclerations\n };\n}\n\nexport function getVaryingType(line, varying) {\n const qualaiferDetails = getQualifierDetails(line, ['varying', 'out']);\n\n if (!qualaiferDetails) {\n return null;\n }\n\n return qualaiferDetails.name === varying ? qualaiferDetails.type : null;\n}\nexport function processAttributeDefinition(line, textureMap) {\n const samplerTextureMap = {};\n const attributeData = getAttributeDefinition(line);\n\n if (!attributeData) {\n return null;\n }\n\n const {\n type,\n name\n } = attributeData;\n\n if (name && textureMap[name]) {\n const updatedLine = \"// \".concat(line, \" => Replaced by Transform with a sampler\");\n const {\n samplerName,\n sizeName,\n uniformDeclerations\n } = getSamplerDeclerations(name);\n const channels = typeToChannelSuffix(type);\n const sampleInstruction = \" \".concat(type, \" \").concat(name, \" = transform_getInput(\").concat(samplerName, \", \").concat(sizeName, \").\").concat(channels, \";\\n\");\n samplerTextureMap[samplerName] = name;\n const inject = {\n 'vs:#decl': uniformDeclerations,\n 'vs:#main-start': sampleInstruction\n };\n return {\n updatedLine,\n inject,\n samplerTextureMap\n };\n }\n\n return null;\n}\n//# sourceMappingURL=transform-shader-utils.js.map","import { cloneTextureFrom, readPixelsToArray, getShaderVersion, Buffer, Texture2D, Framebuffer } from '@luma.gl/webgl';\nimport { _transform as transformModule, getPassthroughFS, typeToChannelCount, combineInjects } from '@luma.gl/shadertools';\nimport { updateForTextures, getSizeUniforms } from './transform-shader-utils';\nconst SRC_TEX_PARAMETER_OVERRIDES = {\n [10241]: 9728,\n [10240]: 9728,\n [10242]: 33071,\n [10243]: 33071\n};\nconst FS_OUTPUT_VARIABLE = 'transform_output';\nexport default class TextureTransform {\n constructor(gl) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.gl = gl;\n this.id = this.currentIndex = 0;\n this._swapTexture = null;\n this.targetTextureVarying = null;\n this.targetTextureType = null;\n this.samplerTextureMap = null;\n this.bindings = [];\n this.resources = {};\n\n this._initialize(props);\n\n Object.seal(this);\n }\n\n updateModelProps() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n const updatedModelProps = this._processVertexShader(props);\n\n return Object.assign({}, props, updatedModelProps);\n }\n\n getDrawOptions() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n sourceBuffers,\n sourceTextures,\n framebuffer,\n targetTexture\n } = this.bindings[this.currentIndex];\n const attributes = Object.assign({}, sourceBuffers, opts.attributes);\n const uniforms = Object.assign({}, opts.uniforms);\n const parameters = Object.assign({}, opts.parameters);\n let discard = opts.discard;\n\n if (this.hasSourceTextures || this.hasTargetTexture) {\n attributes.transform_elementID = this.elementIDBuffer;\n\n for (const sampler in this.samplerTextureMap) {\n const textureName = this.samplerTextureMap[sampler];\n uniforms[sampler] = sourceTextures[textureName];\n }\n\n this._setSourceTextureParameters();\n\n const sizeUniforms = getSizeUniforms({\n sourceTextureMap: sourceTextures,\n targetTextureVarying: this.targetTextureVarying,\n targetTexture\n });\n Object.assign(uniforms, sizeUniforms);\n }\n\n if (this.hasTargetTexture) {\n discard = false;\n parameters.viewport = [0, 0, framebuffer.width, framebuffer.height];\n }\n\n return {\n attributes,\n framebuffer,\n uniforms,\n discard,\n parameters\n };\n }\n\n swap() {\n if (this._swapTexture) {\n this.currentIndex = this._getNextIndex();\n return true;\n }\n\n return false;\n }\n\n update() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._setupTextures(opts);\n }\n\n getTargetTexture() {\n const {\n targetTexture\n } = this.bindings[this.currentIndex];\n return targetTexture;\n }\n\n getData() {\n let {\n packed = false\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n framebuffer\n } = this.bindings[this.currentIndex];\n const pixels = readPixelsToArray(framebuffer);\n\n if (!packed) {\n return pixels;\n }\n\n const ArrayType = pixels.constructor;\n const channelCount = typeToChannelCount(this.targetTextureType);\n const packedPixels = new ArrayType(pixels.length * channelCount / 4);\n let packCount = 0;\n\n for (let i = 0; i < pixels.length; i += 4) {\n for (let j = 0; j < channelCount; j++) {\n packedPixels[packCount++] = pixels[i + j];\n }\n }\n\n return packedPixels;\n }\n\n getFramebuffer() {\n const currentResources = this.bindings[this.currentIndex];\n return currentResources.framebuffer;\n }\n\n delete() {\n if (this.ownTexture) {\n this.ownTexture.delete();\n }\n\n if (this.elementIDBuffer) {\n this.elementIDBuffer.delete();\n }\n }\n\n _initialize() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n _targetTextureVarying,\n _swapTexture\n } = props;\n this._swapTexture = _swapTexture;\n this.targetTextureVarying = _targetTextureVarying;\n this.hasTargetTexture = _targetTextureVarying;\n\n this._setupTextures(props);\n }\n\n _createTargetTexture(props) {\n const {\n sourceTextures,\n textureOrReference\n } = props;\n\n if (textureOrReference instanceof Texture2D) {\n return textureOrReference;\n }\n\n const refTexture = sourceTextures[textureOrReference];\n\n if (!refTexture) {\n return null;\n }\n\n this._targetRefTexName = textureOrReference;\n return this._createNewTexture(refTexture);\n }\n\n _setupTextures() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n sourceBuffers,\n _sourceTextures = {},\n _targetTexture\n } = props;\n\n const targetTexture = this._createTargetTexture({\n sourceTextures: _sourceTextures,\n textureOrReference: _targetTexture\n });\n\n this.hasSourceTextures = this.hasSourceTextures || _sourceTextures && Object.keys(_sourceTextures).length > 0;\n\n this._updateBindings({\n sourceBuffers,\n sourceTextures: _sourceTextures,\n targetTexture\n });\n\n if ('elementCount' in props) {\n this._updateElementIDBuffer(props.elementCount);\n }\n }\n\n _updateElementIDBuffer(elementCount) {\n if (typeof elementCount !== 'number' || this.elementCount >= elementCount) {\n return;\n }\n\n const elementIds = new Float32Array(elementCount);\n elementIds.forEach((_, index, array) => {\n array[index] = index;\n });\n\n if (!this.elementIDBuffer) {\n this.elementIDBuffer = new Buffer(this.gl, {\n data: elementIds,\n accessor: {\n size: 1\n }\n });\n } else {\n this.elementIDBuffer.setData({\n data: elementIds\n });\n }\n\n this.elementCount = elementCount;\n }\n\n _updateBindings(opts) {\n this.bindings[this.currentIndex] = this._updateBinding(this.bindings[this.currentIndex], opts);\n\n if (this._swapTexture) {\n const {\n sourceTextures,\n targetTexture\n } = this._swapTextures(this.bindings[this.currentIndex]);\n\n const nextIndex = this._getNextIndex();\n\n this.bindings[nextIndex] = this._updateBinding(this.bindings[nextIndex], {\n sourceTextures,\n targetTexture\n });\n }\n }\n\n _updateBinding(binding, opts) {\n const {\n sourceBuffers,\n sourceTextures,\n targetTexture\n } = opts;\n\n if (!binding) {\n binding = {\n sourceBuffers: {},\n sourceTextures: {},\n targetTexture: null\n };\n }\n\n Object.assign(binding.sourceTextures, sourceTextures);\n Object.assign(binding.sourceBuffers, sourceBuffers);\n\n if (targetTexture) {\n binding.targetTexture = targetTexture;\n const {\n width,\n height\n } = targetTexture;\n const {\n framebuffer\n } = binding;\n\n if (framebuffer) {\n framebuffer.update({\n attachments: {\n [36064]: targetTexture\n },\n resizeAttachments: false\n });\n framebuffer.resize({\n width,\n height\n });\n } else {\n binding.framebuffer = new Framebuffer(this.gl, {\n id: \"transform-framebuffer\",\n width,\n height,\n attachments: {\n [36064]: targetTexture\n }\n });\n }\n }\n\n return binding;\n }\n\n _setSourceTextureParameters() {\n const index = this.currentIndex;\n const {\n sourceTextures\n } = this.bindings[index];\n\n for (const name in sourceTextures) {\n sourceTextures[name].setParameters(SRC_TEX_PARAMETER_OVERRIDES);\n }\n }\n\n _swapTextures(opts) {\n if (!this._swapTexture) {\n return null;\n }\n\n const sourceTextures = Object.assign({}, opts.sourceTextures);\n sourceTextures[this._swapTexture] = opts.targetTexture;\n const targetTexture = opts.sourceTextures[this._swapTexture];\n return {\n sourceTextures,\n targetTexture\n };\n }\n\n _createNewTexture(refTexture) {\n const texture = cloneTextureFrom(refTexture, {\n parameters: {\n [10241]: 9728,\n [10240]: 9728,\n [10242]: 33071,\n [10243]: 33071\n },\n pixelStore: {\n [37440]: false\n }\n });\n\n if (this.ownTexture) {\n this.ownTexture.delete();\n }\n\n this.ownTexture = texture;\n return texture;\n }\n\n _getNextIndex() {\n return (this.currentIndex + 1) % 2;\n }\n\n _processVertexShader() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n sourceTextures,\n targetTexture\n } = this.bindings[this.currentIndex];\n const {\n vs,\n uniforms,\n targetTextureType,\n inject,\n samplerTextureMap\n } = updateForTextures({\n vs: props.vs,\n sourceTextureMap: sourceTextures,\n targetTextureVarying: this.targetTextureVarying,\n targetTexture\n });\n const combinedInject = combineInjects([props.inject || {}, inject]);\n this.targetTextureType = targetTextureType;\n this.samplerTextureMap = samplerTextureMap;\n const fs = props._fs || getPassthroughFS({\n version: getShaderVersion(vs),\n input: this.targetTextureVarying,\n inputType: targetTextureType,\n output: FS_OUTPUT_VARIABLE\n });\n const modules = this.hasSourceTextures || this.targetTextureVarying ? [transformModule].concat(props.modules || []) : props.modules;\n return {\n vs,\n fs,\n modules,\n uniforms,\n inject: combinedInject\n };\n }\n\n}\n//# sourceMappingURL=texture-transform.js.map","import { getPassthroughFS } from '@luma.gl/shadertools';\nimport BufferTransform from './buffer-transform';\nimport TextureTransform from './texture-transform';\nimport { isWebGL2 } from '@luma.gl/gltools';\nimport { assert, isObjectEmpty, getShaderVersion } from '@luma.gl/webgl';\nimport Model from '../lib/model';\nexport default class Transform {\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.gl = gl;\n this.model = null;\n this.elementCount = 0;\n this.bufferTransform = null;\n this.textureTransform = null;\n this.elementIDBuffer = null;\n\n this._initialize(props);\n\n Object.seal(this);\n }\n\n delete() {\n const {\n model,\n bufferTransform,\n textureTransform\n } = this;\n\n if (model) {\n model.delete();\n }\n\n if (bufferTransform) {\n bufferTransform.delete();\n }\n\n if (textureTransform) {\n textureTransform.delete();\n }\n }\n\n run() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n clearRenderTarget = true\n } = opts;\n\n const updatedOpts = this._updateDrawOptions(opts);\n\n if (clearRenderTarget && updatedOpts.framebuffer) {\n updatedOpts.framebuffer.clear({\n color: true\n });\n }\n\n this.model.transform(updatedOpts);\n }\n\n swap() {\n let swapped = false;\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n\n for (const resourceTransform of resourceTransforms) {\n swapped = swapped || resourceTransform.swap();\n }\n\n assert(swapped, 'Nothing to swap');\n }\n\n getBuffer() {\n let varyingName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n return this.bufferTransform && this.bufferTransform.getBuffer(varyingName);\n }\n\n getData() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n\n for (const resourceTransform of resourceTransforms) {\n const data = resourceTransform.getData(opts);\n\n if (data) {\n return data;\n }\n }\n\n return null;\n }\n\n getFramebuffer() {\n return this.textureTransform && this.textureTransform.getFramebuffer();\n }\n\n update() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if ('elementCount' in opts) {\n this.model.setVertexCount(opts.elementCount);\n }\n\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n\n for (const resourceTransform of resourceTransforms) {\n resourceTransform.update(opts);\n }\n }\n\n _initialize() {\n let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n gl\n } = this;\n\n this._buildResourceTransforms(gl, props);\n\n props = this._updateModelProps(props);\n this.model = new Model(gl, Object.assign({}, props, {\n fs: props.fs || getPassthroughFS({\n version: getShaderVersion(props.vs)\n }),\n id: props.id || 'transform-model',\n drawMode: props.drawMode || 0,\n vertexCount: props.elementCount\n }));\n this.bufferTransform && this.bufferTransform.setupResources({\n model: this.model\n });\n }\n\n _updateModelProps(props) {\n let updatedProps = Object.assign({}, props);\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n\n for (const resourceTransform of resourceTransforms) {\n updatedProps = resourceTransform.updateModelProps(updatedProps);\n }\n\n return updatedProps;\n }\n\n _buildResourceTransforms(gl, props) {\n if (canCreateBufferTransform(props)) {\n this.bufferTransform = new BufferTransform(gl, props);\n }\n\n if (canCreateTextureTransform(props)) {\n this.textureTransform = new TextureTransform(gl, props);\n }\n\n assert(this.bufferTransform || this.textureTransform, 'must provide source/feedback buffers or source/target textures');\n }\n\n _updateDrawOptions(opts) {\n let updatedOpts = Object.assign({}, opts);\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n\n for (const resourceTransform of resourceTransforms) {\n updatedOpts = Object.assign(updatedOpts, resourceTransform.getDrawOptions(updatedOpts));\n }\n\n return updatedOpts;\n }\n\n}\n\nfunction canCreateBufferTransform(props) {\n if (!isObjectEmpty(props.feedbackBuffers) || !isObjectEmpty(props.feedbackMap) || props.varyings && props.varyings.length > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction canCreateTextureTransform(props) {\n if (!isObjectEmpty(props._sourceTextures) || props._targetTexture || props._targetTextureVarying) {\n return true;\n }\n\n return false;\n}\n//# sourceMappingURL=transform.js.map","import Vector from './base/vector';\nimport { config, isArray } from '../lib/common';\nimport { checkNumber } from '../lib/validators';\nimport * as vec4 from 'gl-matrix/vec3';\nimport { vec4_transformMat2, vec4_transformMat3 } from '../lib/gl-matrix-extras';\nlet ZERO;\nexport default class Vector4 extends Vector {\n static get ZERO() {\n if (!ZERO) {\n ZERO = new Vector4(0, 0, 0, 0);\n Object.freeze(ZERO);\n }\n\n return ZERO;\n }\n\n constructor(x = 0, y = 0, z = 0, w = 0) {\n super(-0, -0, -0, -0);\n\n if (isArray(x) && arguments.length === 1) {\n this.copy(x);\n } else {\n if (config.debug) {\n checkNumber(x);\n checkNumber(y);\n checkNumber(z);\n checkNumber(w);\n }\n\n this[0] = x;\n this[1] = y;\n this[2] = z;\n this[3] = w;\n }\n }\n\n set(x, y, z, w) {\n this[0] = x;\n this[1] = y;\n this[2] = z;\n this[3] = w;\n return this.check();\n }\n\n copy(array) {\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n this[3] = array[3];\n return this.check();\n }\n\n fromObject(object) {\n if (config.debug) {\n checkNumber(object.x);\n checkNumber(object.y);\n checkNumber(object.z);\n checkNumber(object.w);\n }\n\n this[0] = object.x;\n this[1] = object.y;\n this[2] = object.z;\n this[3] = object.w;\n return this;\n }\n\n toObject(object) {\n object.x = this[0];\n object.y = this[1];\n object.z = this[2];\n object.w = this[3];\n return object;\n }\n\n get ELEMENTS() {\n return 4;\n }\n\n get z() {\n return this[2];\n }\n\n set z(value) {\n this[2] = checkNumber(value);\n }\n\n get w() {\n return this[3];\n }\n\n set w(value) {\n this[3] = checkNumber(value);\n }\n\n transform(matrix4) {\n vec4.transformMat4(this, this, matrix4);\n return this.check();\n }\n\n transformByMatrix3(matrix3) {\n vec4_transformMat3(this, this, matrix3);\n return this.check();\n }\n\n transformByMatrix2(matrix2) {\n vec4_transformMat2(this, this, matrix2);\n return this.check();\n }\n\n transformByQuaternion(quaternion) {\n vec4.transformQuat(this, this, quaternion);\n return this.check();\n }\n\n applyMatrix4(m) {\n m.transform(this, this);\n return this;\n }\n\n}\n//# sourceMappingURL=vector4.js.map","import * as glMatrix from \"./common.js\";\nimport * as mat3 from \"./mat3.js\";\nimport * as vec3 from \"./vec3.js\";\nimport * as vec4 from \"./vec4.js\";\n/**\n * Quaternion\n * @module quat\n */\n\n/**\n * Creates a new identity quat\n *\n * @returns {quat} a new quaternion\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n out[3] = 1;\n return out;\n}\n/**\n * Set a quat to the identity quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function identity(out) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n}\n/**\n * Sets a quat from the given angle and rotation axis,\n * then returns it.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyVec3} axis the axis around which to rotate\n * @param {Number} rad the angle in radians\n * @returns {quat} out\n **/\n\nexport function setAxisAngle(out, axis, rad) {\n rad = rad * 0.5;\n var s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n}\n/**\n * Gets the rotation axis and angle for a given\n * quaternion. If a quaternion is created with\n * setAxisAngle, this method will return the same\n * values as providied in the original parameter list\n * OR functionally equivalent values.\n * Example: The quaternion formed by axis [0, 0, 1] and\n * angle -90 is the same as the quaternion formed by\n * [0, 0, 1] and 270. This method favors the latter.\n * @param {vec3} out_axis Vector receiving the axis of rotation\n * @param {ReadonlyQuat} q Quaternion to be decomposed\n * @return {Number} Angle, in radians, of the rotation\n */\n\nexport function getAxisAngle(out_axis, q) {\n var rad = Math.acos(q[3]) * 2.0;\n var s = Math.sin(rad / 2.0);\n\n if (s > glMatrix.EPSILON) {\n out_axis[0] = q[0] / s;\n out_axis[1] = q[1] / s;\n out_axis[2] = q[2] / s;\n } else {\n // If s is zero, return any axis (no rotation - axis does not matter)\n out_axis[0] = 1;\n out_axis[1] = 0;\n out_axis[2] = 0;\n }\n\n return rad;\n}\n/**\n * Gets the angular distance between two unit quaternions\n *\n * @param {ReadonlyQuat} a Origin unit quaternion\n * @param {ReadonlyQuat} b Destination unit quaternion\n * @return {Number} Angle, in radians, between the two quaternions\n */\n\nexport function getAngle(a, b) {\n var dotproduct = dot(a, b);\n return Math.acos(2 * dotproduct * dotproduct - 1);\n}\n/**\n * Multiplies two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n */\n\nexport function multiply(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the X axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateX(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + aw * bx;\n out[1] = ay * bw + az * bx;\n out[2] = az * bw - ay * bx;\n out[3] = aw * bw - ax * bx;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Y axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateY(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var by = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw - az * by;\n out[1] = ay * bw + aw * by;\n out[2] = az * bw + ax * by;\n out[3] = aw * bw - ay * by;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Z axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateZ(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bz = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + ay * bz;\n out[1] = ay * bw - ax * bz;\n out[2] = az * bw + aw * bz;\n out[3] = aw * bw - az * bz;\n return out;\n}\n/**\n * Calculates the W component of a quat from the X, Y, and Z components.\n * Assumes that quaternion is 1 unit in length.\n * Any existing W component will be ignored.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate W component of\n * @returns {quat} out\n */\n\nexport function calculateW(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\n return out;\n}\n/**\n * Calculate the exponential of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function exp(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var et = Math.exp(w);\n var s = r > 0 ? et * Math.sin(r) / r : 0;\n out[0] = x * s;\n out[1] = y * s;\n out[2] = z * s;\n out[3] = et * Math.cos(r);\n return out;\n}\n/**\n * Calculate the natural logarithm of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function ln(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var t = r > 0 ? Math.atan2(r, w) / r : 0;\n out[0] = x * t;\n out[1] = y * t;\n out[2] = z * t;\n out[3] = 0.5 * Math.log(x * x + y * y + z * z + w * w);\n return out;\n}\n/**\n * Calculate the scalar power of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @param {Number} b amount to scale the quaternion by\n * @returns {quat} out\n */\n\nexport function pow(out, a, b) {\n ln(out, a);\n scale(out, out, b);\n exp(out, out);\n return out;\n}\n/**\n * Performs a spherical linear interpolation between two quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport function slerp(out, a, b, t) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n var omega, cosom, sinom, scale0, scale1; // calc cosine\n\n cosom = ax * bx + ay * by + az * bz + aw * bw; // adjust signs (if necessary)\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n } // calculate coefficients\n\n\n if (1.0 - cosom > glMatrix.EPSILON) {\n // standard case (slerp)\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n // \"from\" and \"to\" quaternions are very close\n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n } // calculate final values\n\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n}\n/**\n * Generates a random unit quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function random(out) {\n // Implementation of http://planning.cs.uiuc.edu/node198.html\n // TODO: Calling random 3 times is probably not the fastest solution\n var u1 = glMatrix.RANDOM();\n var u2 = glMatrix.RANDOM();\n var u3 = glMatrix.RANDOM();\n var sqrt1MinusU1 = Math.sqrt(1 - u1);\n var sqrtU1 = Math.sqrt(u1);\n out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);\n out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);\n out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);\n out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);\n return out;\n}\n/**\n * Calculates the inverse of a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate inverse of\n * @returns {quat} out\n */\n\nexport function invert(out, a) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n var invDot = dot ? 1.0 / dot : 0; // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out[0] = -a0 * invDot;\n out[1] = -a1 * invDot;\n out[2] = -a2 * invDot;\n out[3] = a3 * invDot;\n return out;\n}\n/**\n * Calculates the conjugate of a quat\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate conjugate of\n * @returns {quat} out\n */\n\nexport function conjugate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Creates a quaternion from the given 3x3 rotation matrix.\n *\n * NOTE: The resultant quaternion is not normalized, so you should be sure\n * to renormalize the quaternion yourself where necessary.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyMat3} m rotation matrix\n * @returns {quat} out\n * @function\n */\n\nexport function fromMat3(out, m) {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n var fTrace = m[0] + m[4] + m[8];\n var fRoot;\n\n if (fTrace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\n\n out[3] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot; // 1/(4w)\n\n out[0] = (m[5] - m[7]) * fRoot;\n out[1] = (m[6] - m[2]) * fRoot;\n out[2] = (m[1] - m[3]) * fRoot;\n } else {\n // |w| <= 1/2\n var i = 0;\n if (m[4] > m[0]) i = 1;\n if (m[8] > m[i * 3 + i]) i = 2;\n var j = (i + 1) % 3;\n var k = (i + 2) % 3;\n fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;\n out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\n out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\n }\n\n return out;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z.\n *\n * @param {quat} out the receiving quaternion\n * @param {x} Angle to rotate around X axis in degrees.\n * @param {y} Angle to rotate around Y axis in degrees.\n * @param {z} Angle to rotate around Z axis in degrees.\n * @returns {quat} out\n * @function\n */\n\nexport function fromEuler(out, x, y, z) {\n var halfToRad = 0.5 * Math.PI / 180.0;\n x *= halfToRad;\n y *= halfToRad;\n z *= halfToRad;\n var sx = Math.sin(x);\n var cx = Math.cos(x);\n var sy = Math.sin(y);\n var cy = Math.cos(y);\n var sz = Math.sin(z);\n var cz = Math.cos(z);\n out[0] = sx * cy * cz - cx * sy * sz;\n out[1] = cx * sy * cz + sx * cy * sz;\n out[2] = cx * cy * sz - sx * sy * cz;\n out[3] = cx * cy * cz + sx * sy * sz;\n return out;\n}\n/**\n * Returns a string representation of a quatenion\n *\n * @param {ReadonlyQuat} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"quat(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Creates a new quat initialized with values from an existing quaternion\n *\n * @param {ReadonlyQuat} a quaternion to clone\n * @returns {quat} a new quaternion\n * @function\n */\n\nexport var clone = vec4.clone;\n/**\n * Creates a new quat initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} a new quaternion\n * @function\n */\n\nexport var fromValues = vec4.fromValues;\n/**\n * Copy the values from one quat to another\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the source quaternion\n * @returns {quat} out\n * @function\n */\n\nexport var copy = vec4.copy;\n/**\n * Set the components of a quat to the given values\n *\n * @param {quat} out the receiving quaternion\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} out\n * @function\n */\n\nexport var set = vec4.set;\n/**\n * Adds two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n * @function\n */\n\nexport var add = vec4.add;\n/**\n * Alias for {@link quat.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Scales a quat by a scalar number\n *\n * @param {quat} out the receiving vector\n * @param {ReadonlyQuat} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {quat} out\n * @function\n */\n\nexport var scale = vec4.scale;\n/**\n * Calculates the dot product of two quat's\n *\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {Number} dot product of a and b\n * @function\n */\n\nexport var dot = vec4.dot;\n/**\n * Performs a linear interpolation between two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n * @function\n */\n\nexport var lerp = vec4.lerp;\n/**\n * Calculates the length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport var length = vec4.length;\n/**\n * Alias for {@link quat.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Calculates the squared length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate squared length of\n * @returns {Number} squared length of a\n * @function\n */\n\nexport var squaredLength = vec4.squaredLength;\n/**\n * Alias for {@link quat.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Normalize a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quaternion to normalize\n * @returns {quat} out\n * @function\n */\n\nexport var normalize = vec4.normalize;\n/**\n * Returns whether or not the quaternions have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyQuat} a The first quaternion.\n * @param {ReadonlyQuat} b The second quaternion.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var exactEquals = vec4.exactEquals;\n/**\n * Returns whether or not the quaternions have approximately the same elements in the same position.\n *\n * @param {ReadonlyQuat} a The first vector.\n * @param {ReadonlyQuat} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var equals = vec4.equals;\n/**\n * Sets a quaternion to represent the shortest rotation from one\n * vector to another.\n *\n * Both vectors are assumed to be unit length.\n *\n * @param {quat} out the receiving quaternion.\n * @param {ReadonlyVec3} a the initial vector\n * @param {ReadonlyVec3} b the destination vector\n * @returns {quat} out\n */\n\nexport var rotationTo = function () {\n var tmpvec3 = vec3.create();\n var xUnitVec3 = vec3.fromValues(1, 0, 0);\n var yUnitVec3 = vec3.fromValues(0, 1, 0);\n return function (out, a, b) {\n var dot = vec3.dot(a, b);\n\n if (dot < -0.999999) {\n vec3.cross(tmpvec3, xUnitVec3, a);\n if (vec3.len(tmpvec3) < 0.000001) vec3.cross(tmpvec3, yUnitVec3, a);\n vec3.normalize(tmpvec3, tmpvec3);\n setAxisAngle(out, tmpvec3, Math.PI);\n return out;\n } else if (dot > 0.999999) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n } else {\n vec3.cross(tmpvec3, a, b);\n out[0] = tmpvec3[0];\n out[1] = tmpvec3[1];\n out[2] = tmpvec3[2];\n out[3] = 1 + dot;\n return normalize(out, out);\n }\n };\n}();\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {ReadonlyQuat} c the third operand\n * @param {ReadonlyQuat} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport var sqlerp = function () {\n var temp1 = create();\n var temp2 = create();\n return function (out, a, b, c, d, t) {\n slerp(temp1, a, d, t);\n slerp(temp2, b, c, t);\n slerp(out, temp1, temp2, 2 * t * (1 - t));\n return out;\n };\n}();\n/**\n * Sets the specified quaternion with values corresponding to the given\n * axes. Each axis is a vec3 and is expected to be unit length and\n * perpendicular to all other specified axes.\n *\n * @param {ReadonlyVec3} view the vector representing the viewing direction\n * @param {ReadonlyVec3} right the vector representing the local \"right\" direction\n * @param {ReadonlyVec3} up the vector representing the local \"up\" direction\n * @returns {quat} out\n */\n\nexport var setAxes = function () {\n var matr = mat3.create();\n return function (out, view, right, up) {\n matr[0] = right[0];\n matr[3] = right[1];\n matr[6] = right[2];\n matr[1] = up[0];\n matr[4] = up[1];\n matr[7] = up[2];\n matr[2] = -view[0];\n matr[5] = -view[1];\n matr[8] = -view[2];\n return normalize(out, fromMat3(out, matr));\n };\n}();","import MathArray from './base/math-array';\nimport { checkNumber, checkVector } from '../lib/validators';\nimport Vector4 from './vector4';\nimport * as quat from 'gl-matrix/quat';\nimport * as vec4 from 'gl-matrix/vec4';\nconst IDENTITY_QUATERNION = [0, 0, 0, 1];\nexport default class Quaternion extends MathArray {\n constructor(x = 0, y = 0, z = 0, w = 1) {\n super(-0, -0, -0, -0);\n\n if (Array.isArray(x) && arguments.length === 1) {\n this.copy(x);\n } else {\n this.set(x, y, z, w);\n }\n }\n\n copy(array) {\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n this[3] = array[3];\n return this.check();\n }\n\n set(x, y, z, w) {\n this[0] = x;\n this[1] = y;\n this[2] = z;\n this[3] = w;\n return this.check();\n }\n\n fromObject(object) {\n this[0] = object.x;\n this[1] = object.y;\n this[2] = object.z;\n this[3] = object.w;\n return this.check();\n }\n\n fromMatrix3(m) {\n quat.fromMat3(this, m);\n return this.check();\n }\n\n fromAxisRotation(axis, rad) {\n quat.setAxisAngle(this, axis, rad);\n return this.check();\n }\n\n identity() {\n quat.identity(this);\n return this.check();\n }\n\n setAxisAngle(axis, rad) {\n return this.fromAxisRotation(axis, rad);\n }\n\n get ELEMENTS() {\n return 4;\n }\n\n get x() {\n return this[0];\n }\n\n set x(value) {\n this[0] = checkNumber(value);\n }\n\n get y() {\n return this[1];\n }\n\n set y(value) {\n this[1] = checkNumber(value);\n }\n\n get z() {\n return this[2];\n }\n\n set z(value) {\n this[2] = checkNumber(value);\n }\n\n get w() {\n return this[3];\n }\n\n set w(value) {\n this[3] = checkNumber(value);\n }\n\n len() {\n return quat.length(this);\n }\n\n lengthSquared() {\n return quat.squaredLength(this);\n }\n\n dot(a) {\n return quat.dot(this, a);\n }\n\n rotationTo(vectorA, vectorB) {\n quat.rotationTo(this, vectorA, vectorB);\n return this.check();\n }\n\n add(a) {\n quat.add(this, this, a);\n return this.check();\n }\n\n calculateW() {\n quat.calculateW(this, this);\n return this.check();\n }\n\n conjugate() {\n quat.conjugate(this, this);\n return this.check();\n }\n\n invert() {\n quat.invert(this, this);\n return this.check();\n }\n\n lerp(a, b, t) {\n if (t === undefined) {\n return this.lerp(this, a, b);\n }\n\n quat.lerp(this, a, b, t);\n return this.check();\n }\n\n multiplyRight(a) {\n quat.multiply(this, this, a);\n return this.check();\n }\n\n multiplyLeft(a) {\n quat.multiply(this, a, this);\n return this.check();\n }\n\n normalize() {\n const length = this.len();\n const l = length > 0 ? 1 / length : 0;\n this[0] = this[0] * l;\n this[1] = this[1] * l;\n this[2] = this[2] * l;\n this[3] = this[3] * l;\n\n if (length === 0) {\n this[3] = 1;\n }\n\n return this.check();\n }\n\n rotateX(rad) {\n quat.rotateX(this, this, rad);\n return this.check();\n }\n\n rotateY(rad) {\n quat.rotateY(this, this, rad);\n return this.check();\n }\n\n rotateZ(rad) {\n quat.rotateZ(this, this, rad);\n return this.check();\n }\n\n scale(b) {\n quat.scale(this, this, b);\n return this.check();\n }\n\n slerp(arg0, arg1, arg2) {\n let start;\n let target;\n let ratio;\n\n switch (arguments.length) {\n case 1:\n ({\n start = IDENTITY_QUATERNION,\n target,\n ratio\n } = arg0);\n break;\n\n case 2:\n start = this;\n target = arg0;\n ratio = arg1;\n break;\n\n default:\n start = arg0;\n target = arg1;\n ratio = arg2;\n }\n\n quat.slerp(this, start, target, ratio);\n return this.check();\n }\n\n transformVector4(vector, result = new Vector4()) {\n vec4.transformQuat(result, vector, this);\n return checkVector(result, 4);\n }\n\n lengthSq() {\n return this.lengthSquared();\n }\n\n setFromAxisAngle(axis, rad) {\n return this.setAxisAngle(axis, rad);\n }\n\n premultiply(a) {\n return this.multiplyLeft(a);\n }\n\n multiply(a) {\n return this.multiplyRight(a);\n }\n\n}\n//# sourceMappingURL=quaternion.js.map","import { lights } from '../lights/lights';\nimport vs from './pbr-vertex.glsl';\nimport fs from './pbr-fragment.glsl';\nexport const pbr = {\n name: 'pbr',\n vs,\n fs,\n defines: {\n LIGHTING_FRAGMENT: 1\n },\n dependencies: [lights]\n};\n//# sourceMappingURL=pbr.js.map","export default \"uniform mat4 u_MVPMatrix;\\nuniform mat4 u_ModelMatrix;\\nuniform mat4 u_NormalMatrix;\\n\\nvarying vec3 pbr_vPosition;\\nvarying vec2 pbr_vUV;\\n\\n#ifdef HAS_NORMALS\\n# ifdef HAS_TANGENTS\\nvarying mat3 pbr_vTBN;\\n# else\\nvarying vec3 pbr_vNormal;\\n# endif\\n#endif\\n\\nvoid pbr_setPositionNormalTangentUV(vec4 position, vec4 normal, vec4 tangent, vec2 uv)\\n{\\n vec4 pos = u_ModelMatrix * position;\\n pbr_vPosition = vec3(pos.xyz) / pos.w;\\n\\n#ifdef HAS_NORMALS\\n#ifdef HAS_TANGENTS\\n vec3 normalW = normalize(vec3(u_NormalMatrix * vec4(normal.xyz, 0.0)));\\n vec3 tangentW = normalize(vec3(u_ModelMatrix * vec4(tangent.xyz, 0.0)));\\n vec3 bitangentW = cross(normalW, tangentW) * tangent.w;\\n pbr_vTBN = mat3(tangentW, bitangentW, normalW);\\n#else\\n pbr_vNormal = normalize(vec3(u_ModelMatrix * vec4(normal.xyz, 0.0)));\\n#endif\\n#endif\\n\\n#ifdef HAS_UV\\n pbr_vUV = uv;\\n#else\\n pbr_vUV = vec2(0.,0.);\\n#endif\\n}\\n\";\n//# sourceMappingURL=pbr-vertex.glsl.js.map","export default \"#if defined(USE_TEX_LOD) && !defined(FEATURE_GLSL_TEXTURE_LOD)\\n# error PBR fragment shader: Texture LOD is not available\\n#endif\\n\\n#if !defined(HAS_TANGENTS) && !defined(FEATURE_GLSL_DERIVATIVES)\\n# error PBR fragment shader: Derivatives are not available\\n#endif\\n\\n\\n#if (__VERSION__ < 300)\\n #define SMART_FOR(INIT, WEBGL1COND, WEBGL2COND, INCR) for (INIT; WEBGL1COND; INCR)\\n#else\\n #define SMART_FOR(INIT, WEBGL1COND, WEBGL2COND, INCR) for (INIT; WEBGL2COND; INCR)\\n#endif\\n\\nprecision highp float;\\n\\nuniform bool pbr_uUnlit;\\n\\n#ifdef USE_IBL\\nuniform samplerCube u_DiffuseEnvSampler;\\nuniform samplerCube u_SpecularEnvSampler;\\nuniform sampler2D u_brdfLUT;\\nuniform vec2 u_ScaleIBLAmbient;\\n#endif\\n\\n#ifdef HAS_BASECOLORMAP\\nuniform sampler2D u_BaseColorSampler;\\n#endif\\n#ifdef HAS_NORMALMAP\\nuniform sampler2D u_NormalSampler;\\nuniform float u_NormalScale;\\n#endif\\n#ifdef HAS_EMISSIVEMAP\\nuniform sampler2D u_EmissiveSampler;\\nuniform vec3 u_EmissiveFactor;\\n#endif\\n#ifdef HAS_METALROUGHNESSMAP\\nuniform sampler2D u_MetallicRoughnessSampler;\\n#endif\\n#ifdef HAS_OCCLUSIONMAP\\nuniform sampler2D u_OcclusionSampler;\\nuniform float u_OcclusionStrength;\\n#endif\\n\\n#ifdef ALPHA_CUTOFF\\nuniform float u_AlphaCutoff;\\n#endif\\n\\nuniform vec2 u_MetallicRoughnessValues;\\nuniform vec4 u_BaseColorFactor;\\n\\nuniform vec3 u_Camera;\\n#ifdef PBR_DEBUG\\nuniform vec4 u_ScaleDiffBaseMR;\\nuniform vec4 u_ScaleFGDSpec;\\n#endif\\n\\nvarying vec3 pbr_vPosition;\\n\\nvarying vec2 pbr_vUV;\\n\\n#ifdef HAS_NORMALS\\n#ifdef HAS_TANGENTS\\nvarying mat3 pbr_vTBN;\\n#else\\nvarying vec3 pbr_vNormal;\\n#endif\\n#endif\\n\\n\\nstruct PBRInfo\\n{\\n float NdotL;\\n float NdotV;\\n float NdotH;\\n float LdotH;\\n float VdotH;\\n float perceptualRoughness;\\n float metalness;\\n vec3 reflectance0;\\n vec3 reflectance90;\\n float alphaRoughness;\\n vec3 diffuseColor;\\n vec3 specularColor;\\n vec3 n;\\n vec3 v;\\n};\\n\\nconst float M_PI = 3.141592653589793;\\nconst float c_MinRoughness = 0.04;\\n\\nvec4 SRGBtoLINEAR(vec4 srgbIn)\\n{\\n#ifdef MANUAL_SRGB\\n#ifdef SRGB_FAST_APPROXIMATION\\n vec3 linOut = pow(srgbIn.xyz,vec3(2.2));\\n#else\\n vec3 bLess = step(vec3(0.04045),srgbIn.xyz);\\n vec3 linOut = mix( srgbIn.xyz/vec3(12.92), pow((srgbIn.xyz+vec3(0.055))/vec3(1.055),vec3(2.4)), bLess );\\n#endif\\n return vec4(linOut,srgbIn.w);;\\n#else\\n return srgbIn;\\n#endif\\n}\\n\\nvec3 getNormal()\\n{\\n#ifndef HAS_TANGENTS\\n vec3 pos_dx = dFdx(pbr_vPosition);\\n vec3 pos_dy = dFdy(pbr_vPosition);\\n vec3 tex_dx = dFdx(vec3(pbr_vUV, 0.0));\\n vec3 tex_dy = dFdy(vec3(pbr_vUV, 0.0));\\n vec3 t = (tex_dy.t * pos_dx - tex_dx.t * pos_dy) / (tex_dx.s * tex_dy.t - tex_dy.s * tex_dx.t);\\n\\n#ifdef HAS_NORMALS\\n vec3 ng = normalize(pbr_vNormal);\\n#else\\n vec3 ng = cross(pos_dx, pos_dy);\\n#endif\\n\\n t = normalize(t - ng * dot(ng, t));\\n vec3 b = normalize(cross(ng, t));\\n mat3 tbn = mat3(t, b, ng);\\n#else\\n mat3 tbn = pbr_vTBN;\\n#endif\\n\\n#ifdef HAS_NORMALMAP\\n vec3 n = texture2D(u_NormalSampler, pbr_vUV).rgb;\\n n = normalize(tbn * ((2.0 * n - 1.0) * vec3(u_NormalScale, u_NormalScale, 1.0)));\\n#else\\n vec3 n = normalize(tbn[2].xyz);\\n#endif\\n\\n return n;\\n}\\n\\n\\n#ifdef USE_IBL\\nvec3 getIBLContribution(PBRInfo pbrInputs, vec3 n, vec3 reflection)\\n{\\n float mipCount = 9.0;\\n float lod = (pbrInputs.perceptualRoughness * mipCount);\\n vec3 brdf = SRGBtoLINEAR(texture2D(u_brdfLUT,\\n vec2(pbrInputs.NdotV, 1.0 - pbrInputs.perceptualRoughness))).rgb;\\n vec3 diffuseLight = SRGBtoLINEAR(textureCube(u_DiffuseEnvSampler, n)).rgb;\\n\\n#ifdef USE_TEX_LOD\\n vec3 specularLight = SRGBtoLINEAR(textureCubeLod(u_SpecularEnvSampler, reflection, lod)).rgb;\\n#else\\n vec3 specularLight = SRGBtoLINEAR(textureCube(u_SpecularEnvSampler, reflection)).rgb;\\n#endif\\n\\n vec3 diffuse = diffuseLight * pbrInputs.diffuseColor;\\n vec3 specular = specularLight * (pbrInputs.specularColor * brdf.x + brdf.y);\\n diffuse *= u_ScaleIBLAmbient.x;\\n specular *= u_ScaleIBLAmbient.y;\\n\\n return diffuse + specular;\\n}\\n#endif\\n\\n\\nvec3 diffuse(PBRInfo pbrInputs)\\n{\\n return pbrInputs.diffuseColor / M_PI;\\n}\\n\\nvec3 specularReflection(PBRInfo pbrInputs)\\n{\\n return pbrInputs.reflectance0 +\\n (pbrInputs.reflectance90 - pbrInputs.reflectance0) *\\n pow(clamp(1.0 - pbrInputs.VdotH, 0.0, 1.0), 5.0);\\n}\\n\\n\\n\\nfloat geometricOcclusion(PBRInfo pbrInputs)\\n{\\n float NdotL = pbrInputs.NdotL;\\n float NdotV = pbrInputs.NdotV;\\n float r = pbrInputs.alphaRoughness;\\n\\n float attenuationL = 2.0 * NdotL / (NdotL + sqrt(r * r + (1.0 - r * r) * (NdotL * NdotL)));\\n float attenuationV = 2.0 * NdotV / (NdotV + sqrt(r * r + (1.0 - r * r) * (NdotV * NdotV)));\\n return attenuationL * attenuationV;\\n}\\n\\n\\n\\n\\n\\nfloat microfacetDistribution(PBRInfo pbrInputs)\\n{\\n float roughnessSq = pbrInputs.alphaRoughness * pbrInputs.alphaRoughness;\\n float f = (pbrInputs.NdotH * roughnessSq - pbrInputs.NdotH) * pbrInputs.NdotH + 1.0;\\n return roughnessSq / (M_PI * f * f);\\n}\\n\\nvoid PBRInfo_setAmbientLight(inout PBRInfo pbrInputs) {\\n pbrInputs.NdotL = 1.0;\\n pbrInputs.NdotH = 0.0;\\n pbrInputs.LdotH = 0.0;\\n pbrInputs.VdotH = 1.0;\\n}\\n\\nvoid PBRInfo_setDirectionalLight(inout PBRInfo pbrInputs, vec3 lightDirection) {\\n vec3 n = pbrInputs.n;\\n vec3 v = pbrInputs.v;\\n vec3 l = normalize(lightDirection);\\n vec3 h = normalize(l+v);\\n\\n pbrInputs.NdotL = clamp(dot(n, l), 0.001, 1.0);\\n pbrInputs.NdotH = clamp(dot(n, h), 0.0, 1.0);\\n pbrInputs.LdotH = clamp(dot(l, h), 0.0, 1.0);\\n pbrInputs.VdotH = clamp(dot(v, h), 0.0, 1.0);\\n}\\n\\nvoid PBRInfo_setPointLight(inout PBRInfo pbrInputs, PointLight pointLight) {\\n vec3 light_direction = normalize(pointLight.position - pbr_vPosition);\\n PBRInfo_setDirectionalLight(pbrInputs, light_direction);\\n}\\n\\nvec3 calculateFinalColor(PBRInfo pbrInputs, vec3 lightColor) {\\n vec3 F = specularReflection(pbrInputs);\\n float G = geometricOcclusion(pbrInputs);\\n float D = microfacetDistribution(pbrInputs);\\n vec3 diffuseContrib = (1.0 - F) * diffuse(pbrInputs);\\n vec3 specContrib = F * G * D / (4.0 * pbrInputs.NdotL * pbrInputs.NdotV);\\n return pbrInputs.NdotL * lightColor * (diffuseContrib + specContrib);\\n}\\n\\nvec4 pbr_filterColor(vec4 colorUnused)\\n{\\n#ifdef HAS_BASECOLORMAP\\n vec4 baseColor = SRGBtoLINEAR(texture2D(u_BaseColorSampler, pbr_vUV)) * u_BaseColorFactor;\\n#else\\n vec4 baseColor = u_BaseColorFactor;\\n#endif\\n\\n#ifdef ALPHA_CUTOFF\\n if (baseColor.a < u_AlphaCutoff) {\\n discard;\\n }\\n#endif\\n\\n vec3 color = vec3(0, 0, 0);\\n\\n if(pbr_uUnlit){\\n color.rgb = baseColor.rgb;\\n }\\n else{\\n\\n\\n float perceptualRoughness = u_MetallicRoughnessValues.y;\\n float metallic = u_MetallicRoughnessValues.x;\\n#ifdef HAS_METALROUGHNESSMAP\\n\\n vec4 mrSample = texture2D(u_MetallicRoughnessSampler, pbr_vUV);\\n perceptualRoughness = mrSample.g * perceptualRoughness;\\n metallic = mrSample.b * metallic;\\n#endif\\n perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0);\\n metallic = clamp(metallic, 0.0, 1.0);\\n\\n float alphaRoughness = perceptualRoughness * perceptualRoughness;\\n\\n vec3 f0 = vec3(0.04);\\n vec3 diffuseColor = baseColor.rgb * (vec3(1.0) - f0);\\n diffuseColor *= 1.0 - metallic;\\n vec3 specularColor = mix(f0, baseColor.rgb, metallic);\\n float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\\n\\n\\n\\n float reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);\\n vec3 specularEnvironmentR0 = specularColor.rgb;\\n vec3 specularEnvironmentR90 = vec3(1.0, 1.0, 1.0) * reflectance90;\\n\\n vec3 n = getNormal();\\n vec3 v = normalize(u_Camera - pbr_vPosition);\\n\\n float NdotV = clamp(abs(dot(n, v)), 0.001, 1.0);\\n vec3 reflection = -normalize(reflect(v, n));\\n\\n PBRInfo pbrInputs = PBRInfo(\\n 0.0,\\n NdotV,\\n 0.0,\\n 0.0,\\n 0.0,\\n perceptualRoughness,\\n metallic,\\n specularEnvironmentR0,\\n specularEnvironmentR90,\\n alphaRoughness,\\n diffuseColor,\\n specularColor,\\n n,\\n v\\n );\\n\\n#ifdef USE_LIGHTS\\n PBRInfo_setAmbientLight(pbrInputs);\\n color += calculateFinalColor(pbrInputs, lighting_uAmbientLight.color);\\n SMART_FOR(int i = 0, i < MAX_LIGHTS, i < lighting_uDirectionalLightCount, i++) {\\n if (i < lighting_uDirectionalLightCount) {\\n PBRInfo_setDirectionalLight(pbrInputs, lighting_uDirectionalLight[i].direction);\\n color += calculateFinalColor(pbrInputs, lighting_uDirectionalLight[i].color);\\n }\\n }\\n SMART_FOR(int i = 0, i < MAX_LIGHTS, i < lighting_uPointLightCount, i++) {\\n if (i < lighting_uPointLightCount) {\\n PBRInfo_setPointLight(pbrInputs, lighting_uPointLight[i]);\\n float attenuation = getPointLightAttenuation(lighting_uPointLight[i], distance(lighting_uPointLight[i].position, pbr_vPosition));\\n color += calculateFinalColor(pbrInputs, lighting_uPointLight[i].color / attenuation);\\n }\\n }\\n#endif\\n#ifdef USE_IBL\\n color += getIBLContribution(pbrInputs, n, reflection);\\n#endif\\n#ifdef HAS_OCCLUSIONMAP\\n float ao = texture2D(u_OcclusionSampler, pbr_vUV).r;\\n color = mix(color, color * ao, u_OcclusionStrength);\\n#endif\\n\\n#ifdef HAS_EMISSIVEMAP\\n vec3 emissive = SRGBtoLINEAR(texture2D(u_EmissiveSampler, pbr_vUV)).rgb * u_EmissiveFactor;\\n color += emissive;\\n#endif\\n\\n#ifdef PBR_DEBUG\\n\\n\\n\\n\\n\\n color = mix(color, baseColor.rgb, u_ScaleDiffBaseMR.y);\\n color = mix(color, vec3(metallic), u_ScaleDiffBaseMR.z);\\n color = mix(color, vec3(perceptualRoughness), u_ScaleDiffBaseMR.w);\\n#endif\\n\\n }\\n\\n return vec4(pow(color,vec3(1.0/2.2)), baseColor.a);\\n}\\n\";\n//# sourceMappingURL=pbr-fragment.glsl.js.map"],"sourceRoot":""} \ No newline at end of file diff --git a/Ball-101/share/man/man1/ipython.1.gz b/Ball-101/share/man/man1/ipython.1.gz deleted file mode 100755 index 8902bb8854d81a8a3b0fd7b7b665575dc1194aae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1039 zcmV+q1n~PGiwFqzm3d(T18H!1bZBpGE-?U&Rbg-2HW2;JUvUTqIPGM49yV+UiUMxp zASxEev%CVqJfxI#ve-(bKvMDa?{_36+iCM*h5^aEyLa#2-O=&x0{++M4*Lj}_lxWF z3Z`$TAhjw>_r_v^xE0!1Xu0MMTGSD&7Wc~tOr^TIfDD1xHRQZC-aExy$>Q8SU0!dK zht+w+eENF?4e#moFay(N26HQv^a#pUs80X}xb`{J0gEdzh!iO=e|r=8=ll(ew|9`N zAGdc8E11K@$FA;S{%Zt3|1_Upc*u2)+z?3drK3`8B@7hYQt}EVK2tW0&%y|~C!2?F z`5t2z8fsDvg4d+sxmG5EQn{ECHOd^Xyi+WzQO`mcp4A9d-%b;O=pjCcLs}yxjwFYx3zM=HOn(5I> zc&IIq2_e(SzXk`>!aMo?%t8J*2W(o~d)L6hsWpf?H7(|%6!}rgQ$u|Pd#CeLI0z}y zyOF~%B~T$Rjug}M%uJ)lb^n^eOx`P(}=yMru8vR7fj(5HvZw zv#O!_%Yn48inO~Fl8F0WsLs+WEn3k_-iVy3>Jzzn3a zm?`x&fD+K9%J5!SqHOPH$|U`z1@ zmb|MiBe);#9`2X3c&ts7a7ymdk-E;E$|#8cqw46wmtH1EBs2sIc;^!t=BX0+jZy4SV4;q9r;R}uYa zS*}l3H&^2zutJ?0KBR=4Za<5YFkDy&3zN4`Av$jR$p9P*bzIqr+ibvi8Ym4iEdC<< zCOzsvf*-W77A0i8FJZLY(7#o!+J;sEw#XZJS6SPdtJ!Q%I&@h~t(Xmj$LIT){RePY JU6%?7006Q@`@jGI diff --git a/Ball-101/share/man/man1/ttx.1 b/Ball-101/share/man/man1/ttx.1 deleted file mode 100755 index bba23b5e..00000000 --- a/Ball-101/share/man/man1/ttx.1 +++ /dev/null @@ -1,225 +0,0 @@ -.Dd May 18, 2004 -.\" ttx is not specific to any OS, but contrary to what groff_mdoc(7) -.\" seems to imply, entirely omitting the .Os macro causes 'BSD' to -.\" be used, so I give a zero-width space as its argument. -.Os \& -.\" The "FontTools Manual" argument apparently has no effect in -.\" groff 1.18.1. I think it is a bug in the -mdoc groff package. -.Dt TTX 1 "FontTools Manual" -.Sh NAME -.Nm ttx -.Nd tool for manipulating TrueType and OpenType fonts -.Sh SYNOPSIS -.Nm -.Bk -.Op Ar option ... -.Ek -.Bk -.Ar file ... -.Ek -.Sh DESCRIPTION -.Nm -is a tool for manipulating TrueType and OpenType fonts. It can convert -TrueType and OpenType fonts to and from an -.Tn XML Ns -based format called -.Tn TTX . -.Tn TTX -files have a -.Ql .ttx -extension. -.Pp -For each -.Ar file -argument it is given, -.Nm -detects whether it is a -.Ql .ttf , -.Ql .otf -or -.Ql .ttx -file and acts accordingly: if it is a -.Ql .ttf -or -.Ql .otf -file, it generates a -.Ql .ttx -file; if it is a -.Ql .ttx -file, it generates a -.Ql .ttf -or -.Ql .otf -file. -.Pp -By default, every output file is created in the same directory as the -corresponding input file and with the same name except for the -extension, which is substituted appropriately. -.Nm -never overwrites existing files; if necessary, it appends a suffix to -the output file name before the extension, as in -.Pa Arial#1.ttf . -.Ss "General options" -.Bl -tag -width ".Fl t Ar table" -.It Fl h -Display usage information. -.It Fl d Ar dir -Write the output files to directory -.Ar dir -instead of writing every output file to the same directory as the -corresponding input file. -.It Fl o Ar file -Write the output to -.Ar file -instead of writing it to the same directory as the -corresponding input file. -.It Fl v -Be verbose. Write more messages to the standard output describing what -is being done. -.It Fl a -Allow virtual glyphs ID's on compile or decompile. -.El -.Ss "Dump options" -The following options control the process of dumping font files -(TrueType or OpenType) to -.Tn TTX -files. -.Bl -tag -width ".Fl t Ar table" -.It Fl l -List table information. Instead of dumping the font to a -.Tn TTX -file, display minimal information about each table. -.It Fl t Ar table -Dump table -.Ar table . -This option may be given multiple times to dump several tables at -once. When not specified, all tables are dumped. -.It Fl x Ar table -Exclude table -.Ar table -from the list of tables to dump. This option may be given multiple -times to exclude several tables from the dump. The -.Fl t -and -.Fl x -options are mutually exclusive. -.It Fl s -Split tables. Dump each table to a separate -.Tn TTX -file and write (under the name that would have been used for the output -file if the -.Fl s -option had not been given) one small -.Tn TTX -file containing references to the individual table dump files. This -file can be used as input to -.Nm -as long as the referenced files can be found in the same directory. -.It Fl i -.\" XXX: I suppose OpenType programs (exist and) are also affected. -Don't disassemble TrueType instructions. When this option is specified, -all TrueType programs (glyph programs, the font program and the -pre-program) are written to the -.Tn TTX -file as hexadecimal data instead of -assembly. This saves some time and results in smaller -.Tn TTX -files. -.It Fl y Ar n -When decompiling a TrueType Collection (TTC) file, -decompile font number -.Ar n , -starting from 0. -.El -.Ss "Compilation options" -The following options control the process of compiling -.Tn TTX -files into font files (TrueType or OpenType): -.Bl -tag -width ".Fl t Ar table" -.It Fl m Ar fontfile -Merge the input -.Tn TTX -file -.Ar file -with -.Ar fontfile . -No more than one -.Ar file -argument can be specified when this option is used. -.It Fl b -Don't recalculate glyph bounding boxes. Use the values in the -.Tn TTX -file as is. -.El -.Sh "THE TTX FILE FORMAT" -You can find some information about the -.Tn TTX -file format in -.Pa documentation.html . -In particular, you will find in that file the list of tables understood by -.Nm -and the relations between TrueType GlyphIDs and the glyph names used in -.Tn TTX -files. -.Sh EXAMPLES -In the following examples, all files are read from and written to the -current directory. Additionally, the name given for the output file -assumes in every case that it did not exist before -.Nm -was invoked. -.Pp -Dump the TrueType font contained in -.Pa FreeSans.ttf -to -.Pa FreeSans.ttx : -.Pp -.Dl ttx FreeSans.ttf -.Pp -Compile -.Pa MyFont.ttx -into a TrueType or OpenType font file: -.Pp -.Dl ttx MyFont.ttx -.Pp -List the tables in -.Pa FreeSans.ttf -along with some information: -.Pp -.Dl ttx -l FreeSans.ttf -.Pp -Dump the -.Sq cmap -table from -.Pa FreeSans.ttf -to -.Pa FreeSans.ttx : -.Pp -.Dl ttx -t cmap FreeSans.ttf -.Sh NOTES -On MS\-Windows and MacOS, -.Nm -is available as a graphical application to which files can be dropped. -.Sh SEE ALSO -.Pa documentation.html -.Pp -.Xr fontforge 1 , -.Xr ftinfo 1 , -.Xr gfontview 1 , -.Xr xmbdfed 1 , -.Xr Font::TTF 3pm -.Sh AUTHORS -.Nm -was written by -.An -nosplit -.An "Just van Rossum" Aq just@letterror.com . -.Pp -This manual page was written by -.An "Florent Rougon" Aq f.rougon@free.fr -for the Debian GNU/Linux system based on the existing FontTools -documentation. It may be freely used, modified and distributed without -restrictions. -.\" For Emacs: -.\" Local Variables: -.\" fill-column: 72 -.\" sentence-end: "[.?!][]\"')}]*\\($\\| $\\| \\| \\)[ \n]*" -.\" sentence-end-double-space: t -.\" End: \ No newline at end of file diff --git a/model/StrongSORT-YOLO/testing.jpg b/model/StrongSORT-YOLO/testing.jpg index 0df8a1f1338c35d5265702e9a9f3f6a55b68fef7..353cf0e1152cd1d058ca1d61eb623e79c96e7236 100755 GIT binary patch literal 518031 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 P%5@XfNmot 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 KgF*K&|Nj8=!ct2B diff --git a/model/StrongSORT-YOLO/yolov5/utils/plots.py b/model/StrongSORT-YOLO/yolov5/utils/plots.py index 8614b4a8..e969c8fc 100755 --- a/model/StrongSORT-YOLO/yolov5/utils/plots.py +++ b/model/StrongSORT-YOLO/yolov5/utils/plots.py @@ -23,7 +23,7 @@ #from utils import threaded # from utils.general import (CONFIG_DIR, FONT, LOGGER, check_font, check_requirements, clip_boxes, increment_path, # is_ascii, xywh2xyxy, xyxy2xywh) -from .general import (CONFIG_DIR, FONT, LOGGER, Timeout, check_font, check_requirements, clip_coords, +from .general import (CONFIG_DIR, FONT, LOGGER, Timeout, check_font, check_requirements, clip_boxes, clip_coords, increment_path, is_ascii, threaded, try_except, xywh2xyxy, xyxy2xywh) from .metrics import fitness from .segment.general import scale_image

    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∾e>iJ_#g#fD61Xy0_u6m4824Fz^u}vnt)y_%pp(dnJCN2Ossvz;(RC3kQYBYD%q(lJn zI(IIY7^>>^JLcjKLgGpLj9GooHNv-XZX2v+e{X)KdpdjkAOJ~)KZTG;0c)Uu)ZyL- zK6#auqErokOAMjh1{_DyYOrW$Cp^%ErqmP_)o?263FJay>{r;J__rUE94fYWb8Xd!y%q}g2`rx&%l22ioGzS@()K|?X~?APs7X?dCQ#^R&R3Z8z@ z@_+lXvFL`$sP<}N_w7zJ&u~lm7s(EQdb<+m=Z4|^I2n*hU$zANAf;q{#{_pn;eE%k z2cc<(`ns1V$dpLdH>T*? z_#tx)v%7K)U_%<*P-N`^-|h_61lxB-%C1cL|m6)9XY zurxk-hAYl2I?)ekliXlWSZx{nWBObxzg+|CCM+sN)U&O~=&$Z8lu|6>vM7-;f^%06pD+ai2>3;)7Z@H&dK^@!d-C zIWwvM=A3Y^UFC*768r$3^{kEPs~LN1Ab}xUW8{-A!OwHLmi1|>!Q&k)l+q̼#B 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 Qn~0;@BOQC1D4-Aj*{2&Yp8x;= literal 131803 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