From 4fde8c3c4987187f9c0ffe575a3176c5e330a6f1 Mon Sep 17 00:00:00 2001 From: Dooho Yi Date: Wed, 23 Feb 2022 17:28:25 +0900 Subject: [PATCH] init --- .gitignore | 3 + LICENSE | 179 +++ README.md | 42 + TODO.md | 22 + package-lock.json | 2129 ++++++++++++++++++++++++++++ package.json | 40 + public/audio/_silence.wav | Bin 0 -> 486 bytes public/audio/clap01.mp3 | Bin 0 -> 212112 bytes public/default.css | 429 ++++++ public/js/Tone-14.8.36.min.js | 1 + public/js/p5-v0.3.11.sound.min.js | 28 + public/js/p5-v1.1.9.min.js | 3 + public/js/socket-v2.3.0.io.slim.js | 9 + public/js/two-v0.8.1.min.js | 87 ++ public/score.json.archive | 54 + public/stream.m3u | 1 + public/style.css.archive | 51 + puredata/livetest.pd | 351 +++++ puredata/nodejs/package-lock.json | 1750 +++++++++++++++++++++++ puredata/nodejs/package.json | 20 + puredata/nodejs/sender.js | 99 ++ puredata/retro-help.pd | 16 + puredata/retro.pd | 57 + puredata/retro2.pd | 62 + puredata/rscan.pd | 55 + puredata/rscan2.pd | 59 + server.js | 363 +++++ src/pages/entry.en.html | 386 +++++ src/pages/entry.html | 388 +++++ src/pages/entry.test.html | 381 +++++ src/pages/live.html | 285 ++++ src/pages/parade.html | 305 ++++ src/pages/preview.html | 376 +++++ 33 files changed, 8031 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 TODO.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/audio/_silence.wav create mode 100644 public/audio/clap01.mp3 create mode 100644 public/default.css create mode 100644 public/js/Tone-14.8.36.min.js create mode 100644 public/js/p5-v0.3.11.sound.min.js create mode 100644 public/js/p5-v1.1.9.min.js create mode 100644 public/js/socket-v2.3.0.io.slim.js create mode 100644 public/js/two-v0.8.1.min.js create mode 100644 public/score.json.archive create mode 100644 public/stream.m3u create mode 100644 public/style.css.archive create mode 100644 puredata/livetest.pd create mode 100644 puredata/nodejs/package-lock.json create mode 100644 puredata/nodejs/package.json create mode 100644 puredata/nodejs/sender.js create mode 100644 puredata/retro-help.pd create mode 100644 puredata/retro.pd create mode 100644 puredata/retro2.pd create mode 100644 puredata/rscan.pd create mode 100644 puredata/rscan2.pd create mode 100644 server.js create mode 100644 src/pages/entry.en.html create mode 100644 src/pages/entry.html create mode 100644 src/pages/entry.test.html create mode 100644 src/pages/live.html create mode 100644 src/pages/parade.html create mode 100644 src/pages/preview.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..992f45f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.env +node_modules +.DS_Store diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f7343c8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,179 @@ +The LICENSE file for any project gives credit to the creator/author of the +project, copyright information for the project, and the legal terms under +which it's being shared. In other words, this is us using an MIT license to +say "we wrote this and you can do whatever you want with it." + +****************************************************************************** +~glitch-hello-node +****************************************************************************** +MIT License + +Copyright (c) 2021, Glitch, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +****************************************************************************** + +THIRD-PARTY SOFTWARE + + +1. fastify: Fastify is a web framework focused on developer experience. +2. fastify-static: Plugin for serving static files as fast as possible. +3. handlebars.js: Minimal templating on steroids +4. point-of-view: Templates rendering plugin support for Fastify. +5. HK Grotesk: The font we're using. + + +****************************************************************************** +1. fastify (also applies to fastify-formbody) +URL: https://www.fastify.io/ + https://github.com/fastify/fastify +****************************************************************************** +MIT License + +Copyright (c) 2016-2020 The Fastify Team + +The Fastify team members are listed at https://github.com/fastify/fastify#team +and in the README file. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +****************************************************************************** +END, fastify +****************************************************************************** + + +****************************************************************************** +2. fastify-static +URL: https://github.com/fastify/fastify-static +****************************************************************************** +MIT License + +Copyright (c) 2017-2018 Fastify + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +****************************************************************************** +END, fastify-static +****************************************************************************** + + +****************************************************************************** +3. handlebars.js +URL: https://handlebarsjs.com/ + https://github.com/handlebars-lang/handlebars.js +****************************************************************************** +Copyright (C) 2011-2019 by Yehuda Katz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +****************************************************************************** +END, fastify-static +****************************************************************************** + + +****************************************************************************** +4. point-of-view +URL: https://github.com/fastify/point-of-view +****************************************************************************** +MIT License + +Copyright (c) 2017 Fastify + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +****************************************************************************** +END, point-of-view +****************************************************************************** + + +****************************************************************************** +5. HK Grotesk +URL: https://hanken.co/products/hk-grotesk +****************************************************************************** +HK Grotesk was designed by Hanken Design Co. It is shared using a SIL OFL +license. Full license text can be found at: + +https://hanken.co/pages/web-fonts-eula +****************************************************************************** +END, HK Grotesk +****************************************************************************** \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9f97e6d --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# Hello Node! + +This project includes a Node.js server script and a web page that connects to it. The front-end page presents a form the visitor can use to submit a color name, sending the submitted value to the back-end API running on the server. The server returns info to the page that allows it to update the display with the chosen color. ๐ŸŽจ + +[Node.js](https://nodejs.org/en/about/) is a popular runtime that lets you run server-side JavaScript. This project uses the [Fastify](https://www.fastify.io/) framework and explores basic templating with [Handlebars](https://handlebarsjs.com/). + +## Prerequisites + +You'll get best use out of this project if you're familiar with basic JavaScript. If you've written JavaScript for client-side web pages this is a little different because it uses server-side JS, but the syntax is the same! + +## What's in this project? + +โ† `README.md`: Thatโ€™s this file, where you can tell people what your cool website does and how you built it. + +โ† `public/style.css`: The styling rules for the pages in your site. + +โ† `server.js`: The **Node.js** server script for your new site. The JavaScript defines the endpoints in the site back-end, one to return the homepage and one to update with the submitted color. Each one sends data to a Handlebars template which builds these parameter values into the web page the visitor sees. + +โ† `package.json`: The NPM packages for your project's dependencies. + +โ† `src/`: This folder holds the site template along with some basic data files. + +โ† `src/pages/index.hbs`: This is the main page template for your site. The template receives parameters from the server script, which it includes in the page HTML. The page sends the user submitted color value in the body of a request, or as a query parameter to choose a random color. + +โ† `src/colors.json`: A collection of CSS color names. We use this in the server script to pick a random color, and to match searches against color names. + +โ† `src/seo.json`: When you're ready to share your new site or add a custom domain, change SEO/meta settings in here. + +## Try this next ๐Ÿ—๏ธ + +Take a look in `TODO.md` for next steps you can try out in your new site! + +___Want a minimal version of this project to build your own Node.js app? Check out [Blank Node](https://glitch.com/edit/#!/remix/glitch-blank-node)!___ + +![Glitch](https://cdn.glitch.com/a9975ea6-8949-4bab-addb-8a95021dc2da%2FLogo_Color.svg?v=1602781328576) + +## You built this with Glitch! + +[Glitch](https://glitch.com) is a friendly community where millions of people come together to build web apps and websites. + +- Need more help? [Check out our Help Center](https://help.glitch.com/) for answers to any common questions. +- Ready to make it official? [Become a paid Glitch member](https://glitch.com/pricing) to boost your app with private sharing, more storage and memory, domains and more. diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..d326a22 --- /dev/null +++ b/TODO.md @@ -0,0 +1,22 @@ +# TODO ๐Ÿšง + +Your new site is all yours so it doesn't matter if you break it! Try editing the code. + +Let's keep track of the submitted favorites using an array. First add this code near the top of `server.js` (where the comment says `ADD FAVORITES ARRAY VARIABLE`): + +```js +const favorites = []; +``` + +In the `POST` route, inside the `if(color)` block, add this code to save the submitted value to the array, and write it to the console: + +```js +favorites.push(color); +console.log(favorites); +``` + +Click __Tools__ > __Logs__ at the bottom of Glitch to see the log statement in action when you submit new colors through the form. + +## Keep going! ๐Ÿš€ + +Clearly this is not a robust data storage approach and won't persist for long! Your Node apps can use a variety of databases, like [SQLite](https://glitch.com/~glitch-hello-sqlite) and [Airtable](https://glitch.com/~glitch-hello-airtable). diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..78877d7 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2129 @@ +{ + "name": "hello-node", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@fastify/ajv-compiler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-1.1.0.tgz", + "integrity": "sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg==", + "requires": { + "ajv": "^6.12.6" + } + }, + "@fastify/busboy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.0.0.tgz", + "integrity": "sha512-tzTXX1TFEjWCseEsNdIlXXkD+48uJoN+zpqIojUX4pSoMscsbhO/UuVEB5SzJucexqDWOo2ma0ECwdD7hZdrzg==", + "requires": { + "text-decoding": "^1.0.0" + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "abstract-logging": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" + }, + "avvio": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.2.tgz", + "integrity": "sha512-XW2CMCmZaCmCCsIaJaLKxAzPwF37fXi1KGxNOvedOpeisLdmxZnblGc3hpHWYnlP+KOUxZsazh43WXNHgXpbqw==", + "requires": { + "archy": "^1.0.0", + "debug": "^4.0.0", + "fastq": "^1.6.1", + "queue-microtask": "^1.1.2" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-11.0.0.tgz", + "integrity": "sha512-Fp/b504Y5W+e+FpCxTFMUZ7ZEQkQYF0rx+KZtmwixJxGQbLHrhCwo3FjZgNC8vIfrSi29PABNbMoCGD9YoiXbQ==" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding-negotiator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/encoding-negotiator/-/encoding-negotiator-2.0.1.tgz", + "integrity": "sha512-GSK7qphNR4iPcejfAlZxKDoz3xMhnspwImK+Af5WhePS9jUpK/Oh7rUdyENWu+9rgDflOCTmAojBsgsvM8neAQ==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.2.tgz", + "integrity": "sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg==", + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "0.3.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "^7.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "engine.io-client": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.4.tgz", + "integrity": "sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ==", + "requires": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-json-stringify": { + "version": "2.7.13", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.13.tgz", + "integrity": "sha512-ar+hQ4+OIurUGjSJD1anvYSDcUflywhKjfxnsW4TBTD7+u0tJufv6DKRWoQk3vI6YBOWMoz0TQtfbe7dxbQmvA==", + "requires": { + "ajv": "^6.11.0", + "deepmerge": "^4.2.2", + "rfdc": "^1.2.0", + "string-similarity": "^4.0.1" + } + }, + "fast-redact": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.2.tgz", + "integrity": "sha512-YN+CYfCVRVMUZOUPeinHNKgytM1wPI/C/UCLEi56EsY2dwwvI00kIJHJoI7pMVqGoMew8SMZ2SSfHKHULHXDsg==" + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "fast-xml-parser": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", + "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", + "requires": { + "strnum": "^1.0.4" + } + }, + "fastify": { + "version": "3.25.3", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-3.25.3.tgz", + "integrity": "sha512-20SbobjjMfjGNCU4PlcZis3d5XLDtQxIbcAf6ogi/8zPxRxOOkKwfjmj7yW9Q1VnxDpBwcllwPtbZ/LyvQzXbQ==", + "requires": { + "@fastify/ajv-compiler": "^1.0.0", + "abstract-logging": "^2.0.0", + "avvio": "^7.1.2", + "fast-json-stringify": "^2.5.2", + "fastify-error": "^0.3.0", + "find-my-way": "^4.5.0", + "flatstr": "^1.0.12", + "light-my-request": "^4.2.0", + "pino": "^6.13.0", + "process-warning": "^1.0.0", + "proxy-addr": "^2.0.7", + "rfdc": "^1.1.4", + "secure-json-parse": "^2.0.0", + "semver": "^7.3.2", + "tiny-lru": "^7.0.0" + } + }, + "fastify-error": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/fastify-error/-/fastify-error-0.3.1.tgz", + "integrity": "sha512-oCfpcsDndgnDVgiI7bwFKAun2dO+4h84vBlkWsWnz/OUK9Reff5UFoFl241xTiLeHWX/vU9zkDVXqYUxjOwHcQ==" + }, + "fastify-formbody": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/fastify-formbody/-/fastify-formbody-5.2.0.tgz", + "integrity": "sha512-d8Y5hCL82akPyoFiXh2wYOm3es0pV9jqoPo3pO9OV2cNF0cQx39J5WAVXzCh4MSt9Z2qF4Fy5gHlvlyESwjtvg==", + "requires": { + "fastify-plugin": "^3.0.0" + } + }, + "fastify-multipart": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/fastify-multipart/-/fastify-multipart-5.2.1.tgz", + "integrity": "sha512-dy7yogJ4ARaQALGbi4dQtyYziNBuUJgGgTGmp3eS3+roAwLMDBsWz0OvBzJHth4xS/OW/js26xNdW6VlxT8htA==", + "requires": { + "@fastify/busboy": "^1.0.0", + "deepmerge": "^4.2.2", + "end-of-stream": "^1.4.4", + "fastify-error": "^0.3.0", + "fastify-plugin": "^3.0.0", + "hexoid": "^1.0.0", + "secure-json-parse": "^2.4.0", + "stream-wormhole": "^1.1.0" + } + }, + "fastify-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz", + "integrity": "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" + }, + "fastify-static": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fastify-static/-/fastify-static-4.5.0.tgz", + "integrity": "sha512-Q7Tgl55AjsmBwiO4hKYib2BUCt+XTWLJ6Xp8YPPHU3EsrKNpevJ4cz8pjf1Ey1QhHw9O8Y2FDKdu+IC74oHvqw==", + "requires": { + "content-disposition": "^0.5.3", + "encoding-negotiator": "^2.0.1", + "fastify-plugin": "^3.0.0", + "glob": "^7.1.4", + "p-limit": "^3.1.0", + "readable-stream": "^3.4.0", + "send": "^0.17.1" + } + }, + "fastify-warning": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz", + "integrity": "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==" + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-my-way": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-4.5.1.tgz", + "integrity": "sha512-kE0u7sGoUFbMXcOG/xpkmz4sRLCklERnBcg7Ftuu1iAxsfEt2S46RLJ3Sq7vshsEy2wJT2hZxE58XZK27qa8kg==", + "requires": { + "fast-decode-uri-component": "^1.0.1", + "fast-deep-equal": "^3.1.3", + "safe-regex2": "^2.0.0", + "semver-store": "^0.3.0" + } + }, + "flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + }, + "fluent-ffmpeg": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.2.tgz", + "integrity": "sha1-yVLeIkD4EuvaCqgAbXd27irPfXQ=", + "requires": { + "async": ">=0.2.9", + "which": "^1.1.1" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "requires": { + "ini": "2.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "hashlru": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz", + "integrity": "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==" + }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "light-my-request": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-4.7.0.tgz", + "integrity": "sha512-LTa8YZp3K2AUpqUnwwKajoIHcsKOBnzwJNQSrk7unziPwo6CjOYjyO0F9wfkxFvP+nBsCGe3eMPnedVgIIgdAw==", + "requires": { + "ajv": "^8.1.0", + "cookie": "^0.4.0", + "fastify-warning": "^0.2.0", + "set-cookie-parser": "^2.4.1" + }, + "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-timezone": { + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "nextcloud-node-client": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/nextcloud-node-client/-/nextcloud-node-client-1.8.2.tgz", + "integrity": "sha512-zbU8pUBXK4wPniq1WY8VBzak5YaODiYQu44l4u7tUx+mG5irHZWD4jQeB4CCrrOfDuJF1Wtu/LzcERs8NDkAGQ==", + "requires": { + "debug": "^4.1.0", + "dotenv": "^8.2.0", + "fast-xml-parser": "^3.16.0", + "http-proxy-agent": "^4.0.1", + "node-fetch": "^2.6.0", + "tslog": "^2.6.2", + "vcap_services": "^0.7.1" + }, + "dependencies": { + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" + } + } + }, + "node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pino": { + "version": "6.13.4", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.4.tgz", + "integrity": "sha512-g4tHSISmQJYUEKEMVdaZ+ZokWwFnTwZL5JPn+lnBVZ1BuBbrSchrXwQINknkM5+Q4fF6U9NjiI8PWwwMDHt9zA==", + "requires": { + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.8", + "flatstr": "^1.0.12", + "pino-std-serializers": "^3.1.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "sonic-boom": "^1.0.2" + } + }, + "pino-std-serializers": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", + "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==" + }, + "point-of-view": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/point-of-view/-/point-of-view-5.0.0.tgz", + "integrity": "sha512-JY12G3+jVFYccKTexe2OHG9WHrEUb3eLKPtLM/YEnaJf2i2OuzIun/v6SBzjHFm5sOuNXyKKo47HIe/YkGtEMA==", + "requires": { + "fastify-plugin": "^3.0.0", + "hashlru": "^2.3.0" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-regex2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", + "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", + "requires": { + "ret": "~0.2.0" + } + }, + "secure-json-parse": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz", + "integrity": "sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "semver-store": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz", + "integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==" + }, + "send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "set-cookie-parser": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz", + "integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "socket.io": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", + "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==", + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.4.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.3.0", + "socket.io-parser": "~3.4.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + }, + "socket.io-client": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "engine.io-client": "~3.4.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "requires": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + } + } + }, + "socket.io-parser": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "sonic-boom": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", + "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", + "requires": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-wormhole": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stream-wormhole/-/stream-wormhole-1.1.0.tgz", + "integrity": "sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==" + }, + "string-similarity": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", + "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "text-decoding": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-decoding/-/text-decoding-1.0.0.tgz", + "integrity": "sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==" + }, + "tiny-lru": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz", + "integrity": "sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow==" + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "tslog": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/tslog/-/tslog-2.12.0.tgz", + "integrity": "sha512-I6XnHbYzBY4K/NZw/DwRKabXMGx1wB4TdoMfrV3+ugfntGVUY7qmOsIb36tf4kuySuKBchxIRSX126niyvsnYg==", + "requires": { + "source-map-support": "^0.5.19" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "optional": true + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "vcap_services": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/vcap_services/-/vcap_services-0.7.1.tgz", + "integrity": "sha512-Xo9lMYbQKYZCTKAAkfEoAEeP1aZZuO5VunT15XlB4mkwFrhlesT3A4R/FXBqOO8KLQ0j5scEQwJU6lLV/yIv/A==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==" + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f76afb8 --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "hello-node", + "version": "0.0.1", + "description": "A simple Node app built on fastify, instantly up and running.", + "main": "server.js", + "scripts": { + "start": "node server.js", + "dev": "nodemon server.js" + }, + "dependencies": { + "dotenv": "^11.0.0", + "fastify": "^3.25.3", + "fastify-formbody": "^5.2.0", + "fastify-multipart": "^5.2.1", + "fastify-static": "^4.5.0", + "fluent-ffmpeg": "^2.1.2", + "handlebars": "^4.7.7", + "moment": "^2.29.1", + "moment-timezone": "^0.5.34", + "nextcloud-node-client": "^1.8.2", + "point-of-view": "^5.0.0", + "socket.io": "~2.3.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": "12.x" + }, + "repository": { + "url": "https://glitch.com/edit/#!/glitch-hello-node" + }, + "license": "MIT", + "keywords": [ + "node", + "glitch", + "express" + ], + "devDependencies": { + "nodemon": "^2.0.15" + } +} diff --git a/public/audio/_silence.wav b/public/audio/_silence.wav new file mode 100644 index 0000000000000000000000000000000000000000..6b6aed2bced28a1851940163dee4efc6d10524d8 GIT binary patch literal 486 zcmYk2L2klO3`8d(fV$%dT%{64>b48oEmFmf9f#;)I6)87a{x)cnfFap5?Qe)p7Gcp z@7wKPBYnQ^-VVppdL^mxyE#igUyWL=^u0grf8E2=DE!PcM(ezfrLM7X1vbRok&Ue} zsng9E+04CjM`!+M#?@7+tYSv7TKJp6ltg3%-Od{5PLtt;Ik<=@Rhg_cFDLPb9PX_; zq??-Ai|PcwxWY56r7jLU7Hf8ui^o(d-hv#DxEmh*Y}i*tE`mPuKnKqot4`hvHh%v1 ldEOXZYP6?KLGlv0D|?fHPxE_E(PP)VFiyE4cfQ1n;|}T^)_(v1 literal 0 HcmV?d00001 diff --git a/public/audio/clap01.mp3 b/public/audio/clap01.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0b7da4f28ac1c959c0a2fb68f756e979dcaca798 GIT binary patch literal 212112 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

D%F|~G}!UGL|)DHa+2{G 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

MLHT`(kSD>yP@Idq6VSqDa;)nSy_~}_H4yN# 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%0A409)JJo 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 literal 0 HcmV?d00001 diff --git a/public/default.css b/public/default.css new file mode 100644 index 0000000..debf6e0 --- /dev/null +++ b/public/default.css @@ -0,0 +1,429 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + word-break: keep-all; +} + +body { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + color: white; + font-size: 15px; + line-height: 1.4; + font-family: 'Noto Sans KR', sans-serif; +} + +.bg { + position: fixed; + top: 0; + left: 0; + background: linear-gradient(#000000, #222958 65%, #e7e7d6 95%); + background-repeat: no-repeat; + background-position: center; + height: 100vh; + width: 100vw; + /* z-index usage is up to you.. although there is no need of using it because the default stack context will work. */ + z-index: -1; // this is optional +} + +#krtitle { + position: absolute; + top: 20%; + left: 50%; + transform: translate(-50%); + writing-mode: vertical-lr; +} + +#entitle { + position: absolute; + bottom: 15%; + left: 50%; + transform: translate(-50%); + writing-mode: vertical-lr; +} + +.popup { + display: none; + position: absolute; + max-width: 800px; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: rgba(255, 255, 255, 0.3); + z-index: 100; +} + +.content { + width: 100%; + height: 100%; +} + +.lang { + position: fixed; + top: 20px; + right: 15px; + z-index: 2; + writing-mode: vertical-lr; +} + +.first { + position: fixed; + top: 20px; + right: 18px; + z-index: 2; + writing-mode: vertical-lr; +} + +.second { + position: fixed; + top: 20px; + right: 40px; + z-index: 2; + writing-mode: vertical-lr; +} + +.third { + position: fixed; + top: 20px; + right: 60px; + z-index: 2; + writing-mode: vertical-lr; +} + +audio { + cursor: pointer; +} + +.sub { + position: fixed; + bottom: 15px; + left: 20px; +} + +.list2 { + position: fixed; + bottom: 15px; + left: 50%; + text-align: center; +} +.parade { + position: fixed; + bottom: 15px; + right: 20px; +} +.list-sub { + position: fixed; + top: 36px; + right: 20px; + z-index: 2; +} +.list-parade { + position: fixed; + top: 68px; + right: 20px; + z-index: 2; +} + +a, +a:visited, +a:hover, +a:focus, +a:active { + color: white; + text-decoration: none; +} + +.notice { + position: absolute; + display: inline-block; + width: 550px; + top: 50px; + left: 50%; + transform: translate(-50%); + padding-bottom: 50px; +} + +section { + margin-bottom: 100px; +} + +.info { + margin-left: 40px; +} + +.participation li { + margin-bottom: 15px; +} + +.participation ol { + margin-top: 15px; +} + +h1, h2, h3 { + font-weight: normal; +} + +h1 { + position: relative; + display: block; + left: 50%; + transform: translate(-50%); + font-size: 15px; + margin-bottom: 50px; + writing-mode: vertical-lr; + text-align: center; +} + +h2 { + position: relative; + display: block; + left: 50%; + transform: translate(-50%); + font-size: 15px; + margin-bottom: 15px; + writing-mode: vertical-lr; + text-align: center; +} + +h3 { + font-size: 15px; +} + +p { + font-size: 15px; + margin-bottom: 15px; +} + +ol, ul { + list-style: none; +} + +.submit li { + margin-bottom: 30px; +} + +.submit li li { + margin-bottom: 0px; +} + +.category { + margin-left: 40px; +} + +.noscroll { + overflow: hidden; +} + +.noscroll * { + touch-action: none; +} + +small { + margin-top: 5px; + display: block; +} + +canvas { + margin: 5px 0 5px 0; +} + +.items { + padding: 50px 0 50px 0; +} + +.items li { + position: relative; + vertical-align: top; + padding: 2px 0 2px 0; +} + +.sound { + position: relative; + left: 50%; + transform: translate(-50%); + margin-top: 40px; +} + +.delete { + margin-top: 15px; +} + +.drawing { + position: relative; + display: inline-block; + width: 300px; + left: 50%; + transform: translate(-50%); + vertical-align: top; + text-align: center; +} + +.name { + display: inline-block; +} + +.sound { + display: inline-block; +} + +.soundinfo { + padding-top: 30px; +} + +.soundinfo li { + vertical-align: top; +} + +.group, +.title, +.comment, +.sound, +.smallclose { + display: inline-block; + vertical-algin: top; +} + +details summary::-webkit-details-marker { + display:none; +} + +.roomsel { + position: absolute; + width: 100%; + height: 100%; + top: 0%; + left: 0%; +} + +.roomsel button { + position: absolute; + bottom: 50px; + left: 50%; + transform: translate(-50%); +} + +.intro { + animation-delay: 15s; + animation-name: fadeout; + animation-duration: 5s; + animation-fill-mode: forwards; +} + +@keyframes fadeout { + 0% { + opacity: 0.7; + } + 100% { + opacity: 0; + display: none; + } +} + +tr { + color: red; +} + +tr, +td { + display: inline-block; +} + +summary { + list-style: none; + outline: none; + cursor: pointer; +} + +.delete { + position: absolute; + display: inline-block; + right: 0; + padding: 0; + cursor: pointer; + padding: 2px; + vertical-align: top; +} + +.preview { + position: absolute; + display: inline-block; + left: 0; + padding: 0; + cursor: pointer; + padding: 2px; + vertical-align: top; + margin-top: 15px; +} + + +.intro { + top: 40%; + transform: translate(-50%); +} + +button { + padding: 2px 6px 3px 6px; + font-size: 12px; +} + +.roomsel .title { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -30%); + height: 600px; + writing-mode: vertical-lr; +} + +@media screen and (max-width: 700px) { + + #krtitle { + position: absolute; + top: 20%; + left: 50%; + transform: translate(-50%); + writing-mode: vertical-lr; + } + + #entitle { + position: absolute; + bottom: 10%; + left: 50%; + transform: translate(-50%); + writing-mode: vertical-lr; + } + + .notice { + position: absolute; + display: inline-block; + width: 90%; + top: 50px; + left: 50%; + transform: translate(-50%); + padding-bottom: 20px; + } + + .intro { + top: 30%; + transform: translate(-50%); + } + + button { + padding: 8px 6px 5px 6px; + font-size: 12px; + } + + .roomsel .title { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -30%); + height: 600px; + writing-mode: vertical-lr; + } + +} diff --git a/public/js/Tone-14.8.36.min.js b/public/js/Tone-14.8.36.min.js new file mode 100644 index 0000000..bccdaa6 --- /dev/null +++ b/public/js/Tone-14.8.36.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Tone=e():t.Tone=e()}("undefined"!=typeof self?self:this,function(){return(()=>{var s={228:t=>{t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var s=0,n=new Array(e);s{t.exports=function(t){if(Array.isArray(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0},575:t=>{t.exports=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t.exports.default=t.exports,t.exports.__esModule=!0},913:t=>{function n(t,e){for(var s=0;s{t.exports=function(t,e){var s=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=s){var n,i,r=[],o=!0,a=!1;try{for(s=s.call(t);!(o=(n=s.next()).done)&&(r.push(n.value),!e||r.length!==e);o=!0);}catch(t){a=!0,i=t}finally{try{o||null==s.return||s.return()}finally{if(a)throw i}}return r}},t.exports.default=t.exports,t.exports.__esModule=!0},521:t=>{t.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},t.exports.default=t.exports,t.exports.__esModule=!0},38:(t,e,s)=>{var n=s(858),i=s(884),r=s(379),o=s(521);t.exports=function(t,e){return n(t)||i(t,e)||r(t,e)||o()},t.exports.default=t.exports,t.exports.__esModule=!0},379:(t,e,s)=>{var n=s(228);t.exports=function(t,e){if(t){if("string"==typeof t)return n(t,e);var s=Object.prototype.toString.call(t).slice(8,-1);return"Map"===(s="Object"===s&&t.constructor?t.constructor.name:s)||"Set"===s?Array.from(t):"Arguments"===s||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s)?n(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0},382:function(t,e,s){!function(t,e,s,n){"use strict";function i(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}function o(t,e,s){return{endTime:e,insertTime:s,type:"exponentialRampToValue",value:t}}function a(t,e,s){return{endTime:e,insertTime:s,type:"linearRampToValue",value:t}}function h(t,e){return{startTime:e,type:"setValue",value:t}}function c(t,e,s){return{duration:s,startTime:e,type:"setValueCurve",values:t}}function l(t,e,s){var n=s.startTime,i=s.target,s=s.timeConstant;return i+(e-i)*Math.exp((n-t)/s)}function u(t){return"exponentialRampToValue"===t.type}function p(t){return"linearRampToValue"===t.type}function d(t){return u(t)||p(t)}function f(t){return"setValue"===t.type}function _(t){return"setValueCurve"===t.type}function m(t,e,s,n){var i=t[e];return void 0===i?n:d(i)||f(i)?i.value:_(i)?i.values[i.values.length-1]:l(s,m(t,e-1,i.startTime,n),i)}function g(t,e,s,n,i){return void 0===s?[n.insertTime,i]:d(s)?[s.endTime,s.value]:f(s)?[s.startTime,s.value]:_(s)?[s.startTime+s.duration,s.values[s.values.length-1]]:[s.startTime,m(t,e-1,s.startTime,i)]}function v(t){return"cancelAndHold"===t.type}function y(t){return"cancelScheduledValues"===t.type}function x(t){return v(t)||y(t)?t.cancelTime:u(t)||p(t)?t.endTime:t.startTime}function w(t,e,s,n){var i=n.endTime,n=n.value;return s===n?n:0=s:x(t)>=s}),n=this._automationEvents[t];if(-1!==t&&(this._automationEvents=this._automationEvents.slice(0,t)),v(e)){var i=this._automationEvents[this._automationEvents.length-1];if(void 0!==n&&d(n)){if(T(i))throw new Error("The internal list is malformed.");var t=_(i)?i.startTime+i.duration:x(i),r=_(i)?i.values[i.values.length-1]:i.value,r=(u(n)?w:b)(s,t,r,n),r=(u(n)?o:a)(r,s,this._currenTime);this._automationEvents.push(r)}void 0!==i&&T(i)&&this._automationEvents.push(h(this.getValue(s),s)),void 0!==i&&_(i)&&i.startTime+i.duration>s&&(this._automationEvents[this._automationEvents.length-1]=c(new Float32Array([6,7]),i.startTime,s-i.startTime))}}else{r=this._automationEvents.findIndex(function(t){return x(t)>s}),i=-1===r?this._automationEvents[this._automationEvents.length-1]:this._automationEvents[r-1];if(void 0!==i&&_(i)&&x(i)+i.duration>s)return!1;i=u(e)?o(e.value,e.endTime,this._currenTime):p(e)?a(e.value,s,this._currenTime):e;if(-1===r)this._automationEvents.push(i);else{if(_(e)&&s+e.duration>x(this._automationEvents[r]))return!1;this._automationEvents.splice(r,0,i)}}return!0}},{key:"flush",value:function(e){var t,s,n=this._automationEvents.findIndex(function(t){return x(t)>e});1e}),n=this._automationEvents[s],i=(-1===s?this._automationEvents.length:s)-1,r=this._automationEvents[i];if(void 0!==r&&T(r)&&(void 0===n||!d(n)||n.insertTime>e))return l(e,m(this._automationEvents,i-1,r.startTime,this._defaultValue),r);if(void 0!==r&&f(r)&&(void 0===n||!d(n)))return r.value;if(void 0!==r&&_(r)&&(void 0===n||!d(n)||r.startTime+r.duration>e))return e{for(var s in e)qm.o(e,s)&&!qm.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},qm.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),qm.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var Fm={};return(()=>{"use strict";qm.r(Fm),qm.d(Fm,{AMOscillator:()=>sf,AMSynth:()=>If,Abs:()=>yf,Add:()=>lf,AmplitudeEnvelope:()=>Rf,Analyser:()=>nm,AudioToGain:()=>tf,AutoFilter:()=>x_,AutoPanner:()=>b_,AutoWah:()=>S_,BaseContext:()=>Bp,BiquadFilter:()=>Vf,BitCrusher:()=>A_,Buffer:()=>Mm,BufferSource:()=>Rm,Buffers:()=>Em,Channel:()=>um,Chebyshev:()=>D_,Chorus:()=>q_,Clock:()=>Dd,Compressor:()=>gm,Context:()=>Up,Convolver:()=>Tm,CrossFade:()=>g_,DCMeter:()=>am,Delay:()=>Od,Destination:()=>km,Distortion:()=>F_,Draw:()=>Dm,DuoSynth:()=>Lf,EQ3:()=>bm,Emitter:()=>Wp,Envelope:()=>Df,FFT:()=>om,FMOscillator:()=>nf,FMSynth:()=>zf,FatOscillator:()=>of,FeedbackCombFilter:()=>Hf,FeedbackDelay:()=>V_,Filter:()=>Nf,Follower:()=>T_,Freeverb:()=>z_,Frequency:()=>function(t,e){return new cd(Jp(),t,e)},FrequencyClass:()=>cd,FrequencyEnvelope:()=>Pf,FrequencyShifter:()=>P_,Gain:()=>xd,GainToAudio:()=>xf,Gate:()=>vm,GrainPlayer:()=>vf,GreaterThan:()=>Sf,GreaterThanZero:()=>Tf,IntervalTimeline:()=>Fd,JCReverb:()=>G_,LFO:()=>df,Limiter:()=>ym,Listener:()=>Cm,Loop:()=>i_,LowpassCombFilter:()=>Kf,Master:()=>Am,MembraneSynth:()=>Uf,Merge:()=>M_,MetalSynth:()=>Bf,Meter:()=>rm,MidSideCompressor:()=>xm,MidSideMerge:()=>J_,MidSideSplit:()=>H_,Midi:()=>function(t,e){return new Ed(Jp(),t,e)},MidiClass:()=>Ed,Mono:()=>pm,MonoSynth:()=>jf,MultibandCompressor:()=>wm,MultibandSplit:()=>dm,Multiply:()=>ef,Negate:()=>wf,Noise:()=>Ud,NoiseSynth:()=>Gf,Offline:()=>function(n,i,r=2,o=Jp().sampleRate){return yp(this,void 0,void 0,function*(){const t=Jp(),e=new Yp(r,i,o);Kp(e),yield n(e);var s=e.render();Kp(t);s=yield s;return new Xp(s)})},OfflineContext:()=>Yp,OmniOscillator:()=>cf,OnePoleFilter:()=>Jf,Oscillator:()=>Hd,PWMOscillator:()=>af,PanVol:()=>lm,Panner:()=>w_,Panner3D:()=>_m,Param:()=>_d,Part:()=>r_,Pattern:()=>__,Phaser:()=>Y_,PingPongDelay:()=>Z_,PitchShift:()=>X_,Player:()=>mf,Players:()=>gf,PluckSynth:()=>t_,PolySynth:()=>e_,Pow:()=>kf,PulseOscillator:()=>rf,Recorder:()=>mm,Reverb:()=>$_,Sampler:()=>s_,Scale:()=>uf,ScaleExp:()=>Af,Sequence:()=>m_,Signal:()=>Td,Solo:()=>cm,Split:()=>O_,StateTimeline:()=>fd,StereoWidener:()=>tm,Subtract:()=>bf,SyncedSignal:()=>Cf,Synth:()=>qf,Ticks:()=>function(t,e){return new Rd(Jp(),t,e)},TicksClass:()=>Rd,Time:()=>function(t,e){return new hd(Jp(),t,e)},TimeClass:()=>hd,Timeline:()=>Np,ToneAudioBuffer:()=>Xp,ToneAudioBuffers:()=>Md,ToneAudioNode:()=>md,ToneBufferSource:()=>Bd,ToneEvent:()=>n_,ToneOscillatorNode:()=>$d,Transport:()=>Sm,TransportTime:()=>function(t,e){return new pd(Jp(),t,e)},TransportTimeClass:()=>pd,Tremolo:()=>em,Unit:()=>e,UserMedia:()=>Xd,Vibrato:()=>sm,Volume:()=>Vd,WaveShaper:()=>Kd,Waveform:()=>hm,Zero:()=>pf,connect:()=>vd,connectSeries:()=>gd,connectSignal:()=>Sd,context:()=>Om,dbToGain:()=>td,debug:()=>t,defaultArg:()=>Dp,disconnect:()=>yd,fanIn:()=>function(...t){const e=t.pop();Ju(e)&&t.forEach(t=>vd(t,e))},ftom:()=>id,gainToDb:()=>ed,getContext:()=>Jp,getDestination:()=>function(){return Jp().destination},getDraw:()=>function(){return Jp().draw},getListener:()=>function(){return Jp().listener},getTransport:()=>function(){return Jp().transport},immediate:()=>function(){return Jp().immediate()},intervalToFrequencyRatio:()=>sd,isArray:()=>np,isBoolean:()=>sp,isDefined:()=>Ju,isFunction:()=>Ku,isNote:()=>rp,isNumber:()=>tp,isObject:()=>ep,isString:()=>ip,isUndef:()=>Hu,loaded:()=>function(){return Xp.loaded()},mtof:()=>od,now:()=>function(){return Jp().now()},optionsFromArguments:()=>Cp,setContext:()=>Kp,start:()=>function(){return Hp.resume()},supported:()=>$u,version:()=>s});var t={};qm.r(t),qm.d(t,{assert:()=>op,assertContextRunning:()=>hp,assertRange:()=>ap,assertUsedScheduleTime:()=>pp,enterScheduledCallback:()=>up,log:()=>fp,setLogger:()=>function(t){dp=t},warn:()=>_p});var e={};qm.r(e);const s="14.8.36";var n,i,a,o,r,h,c,l,u,p,d,f,_,m,g,v,y,x,w,b,T,S,k,A,C,D,O,M,E,R,q,F,I,V,N,P,j,L,z,W,B,U,G,Q,Z,X,Y,$,H,J,K,tt,et,st,nt=qm(382);const it=new WeakSet,rt=new WeakMap,ot=new WeakMap,at=new WeakMap,ht=new WeakMap,ct=new WeakMap,lt=new WeakMap,ut=new WeakMap,pt=new WeakMap,dt=new WeakMap,ft={construct:()=>ft},_t=/^import(?:(?:[\s]+[\w]+|(?:[\s]+[\w]+[\s]*,)?[\s]*\{[\s]*[\w]+(?:[\s]+as[\s]+[\w]+)?(?:[\s]*,[\s]*[\w]+(?:[\s]+as[\s]+[\w]+)?)*[\s]*}|(?:[\s]+[\w]+[\s]*,)?[\s]*\*[\s]+as[\s]+[\w]+)[\s]+from)?(?:[\s]*)("([^"\\]|\\.)+"|'([^'\\]|\\.)+')(?:[\s]*);?/,mt=(t,e)=>{const s=[];let n=t.replace(/^[\s]+/,""),i=n.match(_t);for(;null!==i;){const t=i[1].slice(1,-1),r=i[0].replace(/([\s]+)?;?$/,"").replace(t,new URL(t,e).toString());s.push(r),n=n.slice(i[0].length).replace(/^[\s]+/,""),i=n.match(_t)}return[s.join(";"),n]},gt=t=>{if(void 0!==t&&!Array.isArray(t))throw new TypeError("The parameterDescriptors property of given value for processorCtor is not an array.")},vt=t=>{if(!(t=>{try{new new Proxy(t,ft)}catch{return!1}return!0})(t))throw new TypeError("The given value for processorCtor should be a constructor.");if(null===t.prototype||"object"!=typeof t.prototype)throw new TypeError("The given value for processorCtor should have a prototype.")},yt=(t,e)=>{e=t.get(e);if(void 0===e)throw new Error("A value with the given key could not be found.");return e},xt=(t,e)=>{e=Array.from(t).filter(e);if(1{var i=yt(t,e),r=xt(i,t=>t[0]===s&&t[1]===n);return 0===i.size&&t.delete(e),r},bt=t=>yt(lt,t),Tt=t=>{if(it.has(t))throw new Error("The AudioNode is already stored.");it.add(t),bt(t).forEach(t=>t(!0))},St=t=>"port"in t,kt=t=>{if(!it.has(t))throw new Error("The AudioNode is not stored.");it.delete(t),bt(t).forEach(t=>t(!1))},At=(t,e)=>{!St(t)&&e.every(t=>0===t.size)&&kt(t)},Ct={channelCount:2,channelCountMode:"max",channelInterpretation:"speakers",fftSize:2048,maxDecibels:-30,minDecibels:-100,smoothingTimeConstant:.8},Dt=(t,e)=>t.context===e,Ot=t=>{try{t.copyToChannel(new Float32Array(1),0,-1)}catch{return!1}return!0},Mt=()=>new DOMException("","IndexSizeError"),Et=e=>{var s;e.getChannelData=(s=e.getChannelData,t=>{try{return s.call(e,t)}catch(t){if(12===t.code)throw Mt();throw t}})},Rt={numberOfChannels:1},qt=-34028234663852886e22,Ft=-qt,It=t=>it.has(t),Vt={buffer:null,channelCount:2,channelCountMode:"max",channelInterpretation:"speakers",loop:!1,loopEnd:0,loopStart:0,playbackRate:1},Nt=t=>yt(rt,t),Pt=t=>yt(at,t),jt=(e,s)=>{const t=Nt(e)["activeInputs"];t.forEach(t=>t.forEach(([t])=>{s.includes(e)||jt(t,[...s,e])}));var n,i,n="playbackRate"in e?[e.playbackRate]:St(e)?Array.from(e.parameters.values()):"frequency"in(i=e)&&"gain"in i?[e.Q,e.detune,e.frequency,e.gain]:"offset"in e?[e.offset]:!("frequency"in(i=e))&&"gain"in i?[e.gain]:"detune"in(n=e)&&"frequency"in n?[e.detune,e.frequency]:"pan"in e?[e.pan]:[];for(const e of n){const t=Pt(e);void 0!==t&&t.activeInputs.forEach(([t])=>jt(t,s))}It(e)&&kt(e)},Lt=t=>{jt(t.destination,[])},zt=t=>"context"in t,Wt=t=>zt(t[0]),Bt=(t,e,s,n)=>{for(const e of t)if(s(e)){if(n)return!1;throw Error("The set contains at least one similar element.")}return t.add(e),!0},Ut=(t,e,[s,n],i)=>{Bt(t,[e,s,n],t=>t[0]===e&&t[1]===s,i)},Gt=(t,[e,s,n],i)=>{var r=t.get(e);void 0===r?t.set(e,new Set([[s,n]])):Bt(r,[s,n],t=>t[0]===s,i)},Qt=t=>"inputs"in t,Zt=(t,e,s,n)=>{if(Qt(e)){var i=e.inputs[n];return t.connect(i,s,0),[i,s,0]}return t.connect(e,s,n),[e,s,n]},Xt=(t,e,s)=>{for(const n of t)if(n[0]===e&&n[1]===s)return t.delete(n),n;return null},Yt=(t,e)=>{if(!bt(t).delete(e))throw new Error("Missing the expected event listener.")},$t=(t,e,s)=>{var n=yt(t,e),i=xt(n,t=>t[0]===s);return 0===n.size&&t.delete(e),i},Ht=(t,e,s,n)=>{Qt(e)?t.disconnect(e.inputs[n],s,0):t.disconnect(e,s,n)},Jt=t=>yt(ot,t),Kt=t=>yt(ht,t),te=t=>ut.has(t),ee=t=>!it.has(t),se=(r,o)=>new Promise(e=>{if(null!==o)e(!0);else{const o=r.createScriptProcessor(256,1,1),t=r.createGain(),s=r.createBuffer(1,2,44100),n=s.getChannelData(0);n[0]=1,n[1]=1;const i=r.createBufferSource();i.buffer=s,i.loop=!0,i.connect(o).connect(r.destination),i.connect(t),i.disconnect(t),o.onaudioprocess=t=>{t=t.inputBuffer.getChannelData(0);Array.prototype.some.call(t,t=>1===t)?e(!0):e(!1),i.stop(),o.onaudioprocess=null,i.disconnect(o),o.disconnect(r.destination)},i.start()}}),ne=(t,s)=>{const e=new Map;for(const s of t)for(const t of s){const s=e.get(t);e.set(t,void 0===s?1:s+1)}e.forEach((t,e)=>s(e,t))},ie=t=>"context"in t,re=(t,e,s,n,i)=>{var[r,o]=((t,e,s,n)=>{var{activeInputs:i,passiveInputs:e}=Nt(e),i=Xt(i[n],t,s);return null===i?[wt(e,t,s,n)[2],!1]:[i[2],!0]})(t,s,n,i);if(null!==r&&(Yt(t,r),!o||e||te(t)||Ht(Jt(t),Jt(s),n,i)),It(s)){const t=Nt(s)["activeInputs"];At(s,t)}},oe=(t,e,s,n)=>{var[i,r]=((t,e,s)=>{var{activeInputs:n,passiveInputs:e}=Pt(e),n=Xt(n,t,s);return null===n?[$t(e,t,s)[1],!1]:[n[2],!0]})(t,s,n);null!==i&&(Yt(t,i),!r||e||te(t)||Jt(t).disconnect(Kt(s),n))};class ae{constructor(t){this._map=new Map(t)}get size(){return this._map.size}entries(){return this._map.entries()}forEach(s,n=null){return this._map.forEach((t,e)=>s.call(n,t,e,this))}get(t){return this._map.get(t)}has(t){return this._map.has(t)}keys(){return this._map.keys()}values(){return this._map.values()}}const he={channelCount:2,channelCountMode:"explicit",channelInterpretation:"speakers",numberOfInputs:1,numberOfOutputs:1,parameterData:{},processorOptions:{}};function ce(t,e,s,n,i){if("function"==typeof t.copyFromChannel)0===e[s].byteLength&&(e[s]=new Float32Array(128)),t.copyFromChannel(e[s],n,i);else{const r=t.getChannelData(n);if(0===e[s].byteLength)e[s]=r.slice(i,i+128);else{const t=new Float32Array(r.buffer,i*Float32Array.BYTES_PER_ELEMENT,128);e[s].set(t)}}}const le=(t,e,s,n,i)=>{"function"==typeof t.copyToChannel?0!==e[s].byteLength&&t.copyToChannel(e[s],n,i):0!==e[s].byteLength&&t.getChannelData(n).set(e[s],i)},ue=(e,s)=>{const n=[];for(let t=0;t{const{port1:n,port2:i}=new MessageChannel;return new Promise(t=>{const e=()=>{i.onmessage=null,n.close(),i.close(),t()};i.onmessage=()=>e();try{n.postMessage(s,[s])}finally{e()}})},ve={channelCount:2,channelCountMode:"max",channelInterpretation:"speakers",delayTime:0,maxDelayTime:1},ye=(t,e,s)=>{s=e[s];if(void 0===s)throw t();return s},xe={attack:.003,channelCount:2,channelCountMode:"clamped-max",channelInterpretation:"speakers",knee:30,ratio:12,release:.25,threshold:-24},we={channelCount:2,channelCountMode:"max",channelInterpretation:"speakers",gain:1},be=()=>new DOMException("","InvalidStateError"),Te=()=>new DOMException("","InvalidAccessError"),Se={channelCount:2,channelCountMode:"max",channelInterpretation:"speakers"},ke=(s,n,i,r,o,a,h,t,c,l,u)=>{var e=l.length;let p=t;for(let t=0;t{var e=new Uint32Array([1179011410,40,1163280727,544501094,16,131073,44100,176400,1048580,1635017060,4,0]);try{const s=t.decodeAudioData(e.buffer,()=>{});return void 0!==s&&(s.catch(()=>{}),!0)}catch{}return!1},De=(t,e,s)=>{e=e[s];void 0!==e&&e!==t[s]&&(t[s]=e)},Oe=(t,e)=>{De(t,e,"channelCount"),De(t,e,"channelCountMode"),De(t,e,"channelInterpretation")},Me=t=>"function"==typeof t.getFloatTimeDomainData,Ee=(t,e,s)=>{e=e[s];void 0!==e&&e!==t[s].value&&(t[s].value=e)},Re=n=>{var i;n.start=(i=n.start,(t=0,e=0,s)=>{if("number"==typeof s&&s<0||e<0||t<0)throw new RangeError("The parameters can't be negative.");i.call(n,t,e,s)})},qe=e=>{var s;e.stop=(s=e.stop,(t=0)=>{if(t<0)throw new RangeError("The parameter can't be negative.");s.call(e,t)})},Fe=(t,e)=>null===t?512:Math.max(512,Math.min(16384,Math.pow(2,Math.round(Math.log2(t*e))))),Ie=(t,e)=>{t=t.createBiquadFilter();return Oe(t,e),Ee(t,e,"Q"),Ee(t,e,"detune"),Ee(t,e,"frequency"),Ee(t,e,"gain"),De(t,e,"type"),t},Ve=(t,e)=>{t=t.createChannelSplitter(e.numberOfOutputs);return Oe(t,e),(t=>{const e=t.numberOfOutputs;Object.defineProperty(t,"channelCount",{get:()=>e,set:t=>{if(t!==e)throw be()}}),Object.defineProperty(t,"channelCountMode",{get:()=>"explicit",set:t=>{if("explicit"!==t)throw be()}}),Object.defineProperty(t,"channelInterpretation",{get:()=>"discrete",set:t=>{if("discrete"!==t)throw be()}})})(t),t},Ne=(t,e)=>(t.connect=e.connect.bind(e),t.disconnect=e.disconnect.bind(e),t),Pe=(t,e)=>{t=t.createDelay(e.maxDelayTime);return Oe(t,e),Ee(t,e,"delayTime"),t},je=(t,e)=>{t=t.createGain();return Oe(t,e),Ee(t,e,"gain"),t};function Le(e,s){let n=[0,0];for(let t=e.length-1;0<=t;--t)n=[(i=n)[0]*s[0]-i[1]*s[1],i[0]*s[1]+i[1]*s[0]],n[0]+=e[t];var i;return n}const ze=(t,e,s,n)=>t.createScriptProcessor(e,s,n),We=()=>new DOMException("","NotSupportedError"),Be={numberOfChannels:1},Ue={channelCount:2,channelCountMode:"max",channelInterpretation:"speakers",detune:0,frequency:440,periodicWave:void 0,type:"sine"},Ge={channelCount:2,channelCountMode:"clamped-max",channelInterpretation:"speakers",coneInnerAngle:360,coneOuterAngle:360,coneOuterGain:0,distanceModel:"inverse",maxDistance:1e4,orientationX:1,orientationY:0,orientationZ:0,panningModel:"equalpower",positionX:0,positionY:0,positionZ:0,refDistance:1,rolloffFactor:1},Qe={disableNormalization:!1},Ze={channelCount:2,channelCountMode:"explicit",channelInterpretation:"speakers",pan:0},Xe={channelCount:2,channelCountMode:"max",channelInterpretation:"speakers",curve:null,oversample:"none"},Ye=(t,e,s)=>void 0===t.copyFromChannel?t.getChannelData(s)[0]:(t.copyFromChannel(e,s),e[0]),$e=t=>{if(null===t)return!1;var e=t.length;return e%2!=0?0!==t[Math.floor(e/2)]:t[e/2-1]+t[e/2]!==0},He=(t,e,s,n)=>{let i=t;for(;!i.hasOwnProperty(e);)i=Object.getPrototypeOf(i);var{get:r,set:o}=Object.getOwnPropertyDescriptor(i,e);Object.defineProperty(t,e,{get:s(r),set:n(o)})},Je=(e,s,n)=>{try{e.setValueAtTime(s,n)}catch(t){if(9!==t.code)throw t;Je(e,s,n+1e-7)}},Ke=t=>{const e=t.createOscillator();try{e.start(-1)}catch(t){return t instanceof RangeError}return!1},ts=t=>{const e=t.createBuffer(1,1,44100),s=t.createBufferSource();s.buffer=e,s.start(),s.stop();try{return s.stop(),!0}catch{return!1}},es=t=>{const e=t.createOscillator();try{e.stop(-1)}catch(t){return t instanceof RangeError}return!1},ss=()=>{try{new DOMException}catch{return!1}return!0},ns=()=>new Promise(e=>{const t=new ArrayBuffer(0),{port1:s,port2:n}=new MessageChannel;s.onmessage=({data:t})=>e(null!==t),n.postMessage(t,[t])}),is=(n,t)=>{const i=t.createGain();n.connect(i);const e=(s=n.disconnect,()=>{s.call(n,i),n.removeEventListener("ended",e)});var s;n.addEventListener("ended",e),Ne(n,i),n.stop=(e=>{let s=!1;return(t=0)=>{if(s)try{e.call(n,t)}catch{i.gain.setValueAtTime(0,t)}else e.call(n,t),s=!0}})(n.stop)},rs=(s,n)=>t=>{var e={value:s};return Object.defineProperties(t,{currentTarget:e,target:e}),("function"==typeof n?n:n.handleEvent).call(s,t)},os=(o=Bt,(t,e,[s,n,i],r)=>{o(t[n],[e,s,i],t=>t[0]===e&&t[1]===s,r)}),as=(a=Bt,(t,e,[s,n,i],r)=>{var o=t.get(s);void 0===o?t.set(s,new Set([[n,e,i]])):a(o,[n,e,i],t=>t[0]===n&&t[1]===e,r)}),hs=(i=xt,(t,e,s,n)=>i(t[n],t=>t[0]===e&&t[1]===s)),cs=new WeakMap,ls=(n=cs,t=>{return null!==(t=n.get(t))&&void 0!==t?t:0}),us=(r=new Map,h=new WeakMap,(e,t)=>{const s=h.get(e);if(void 0!==s)return s;var n=r.get(e);if(void 0!==n)return n;try{const s=t();return s instanceof Promise?(r.set(e,s),s.catch(()=>!1).then(t=>(r.delete(e),h.set(e,t),t))):(h.set(e,s),s)}catch{return h.set(e,!1),!1}}),ps="undefined"==typeof window?null:window,ds=(m=us,g=Mt,(t,e)=>{const s=t.createAnalyser();if(Oe(s,e),!(e.maxDecibels>e.minDecibels))throw g();return De(s,e,"fftSize"),De(s,e,"maxDecibels"),De(s,e,"minDecibels"),De(s,e,"smoothingTimeConstant"),m(Me,()=>Me(s))||((i=s).getFloatTimeDomainData=e=>{var s=new Uint8Array(e.length);i.getByteTimeDomainData(s);var n=Math.max(s.length,i.fftSize);for(let t=0;t{t=_(t);if(null===t.renderer)throw new Error("Missing the renderer of the given AudioNode in the audio graph.");return t.renderer}),_s=(p=Nt,d=fs,f=te,async(o,a,h)=>{const t=p(o);await Promise.all(t.activeInputs.map((t,r)=>Array.from(t).map(async([t,e])=>{const s=d(t),n=await s.render(t,a),i=o.context.destination;f(t)||o===i&&f(o)||n.connect(h,e,r)})).reduce((t,e)=>[...t,...e],[]))}),ms=(c=ds,l=Jt,u=_s,()=>{const n=new WeakMap;return{render(t,e){var s=n.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=l(t);if(!Dt(s,e)){const l={channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,fftSize:s.fftSize,maxDecibels:s.maxDecibels,minDecibels:s.minDecibels,smoothingTimeConstant:s.smoothingTimeConstant};s=c(e,l)}return n.set(e,s),await u(t,e,s),s})(t,e)}}}),gs=(v=ct,t=>{t=v.get(t);if(void 0===t)throw be();return t}),vs=null===(Jc=ps)?null:Jc.hasOwnProperty("OfflineAudioContext")?Jc.OfflineAudioContext:Jc.hasOwnProperty("webkitOfflineAudioContext")?Jc.webkitOfflineAudioContext:null,ys=(et=vs,t=>null!==et&&t instanceof et),xs=new WeakMap,ws=(tt=rs,class{constructor(t){this._nativeEventTarget=t,this._listeners=new WeakMap}addEventListener(e,s,n){if(null!==s){let t=this._listeners.get(s);void 0===t&&(t=tt(this,s),"function"==typeof s&&this._listeners.set(s,t)),this._nativeEventTarget.addEventListener(e,t,n)}}dispatchEvent(t){return this._nativeEventTarget.dispatchEvent(t)}removeEventListener(t,e,s){e=null===e?void 0:this._listeners.get(e);this._nativeEventTarget.removeEventListener(t,void 0===e?null:e,s)}}),bs=null===(ol=ps)?null:ol.hasOwnProperty("AudioContext")?ol.AudioContext:ol.hasOwnProperty("webkitAudioContext")?ol.webkitAudioContext:null,Ts=(K=bs,t=>null!==K&&t instanceof K),Ss=(J=ps,t=>null!==J&&"function"==typeof J.AudioNode&&t instanceof J.AudioNode),ks=(H=ps,t=>null!==H&&"function"==typeof H.AudioParam&&t instanceof H.AudioParam),As=null!==(al=ps)&&al.hasOwnProperty("AudioWorkletNode")?al.AudioWorkletNode:null,Cs=(st=rt,y=(t,e,s)=>{const n=[];for(let t=0;t{const T=new WeakMap;return(n,i,r,o,a)=>{const{activeInputs:h,passiveInputs:c}=_(i),t=_(n)["outputs"],e=g(n),s=t=>{var e=v(i),s=v(n);if(t){const u=wt(c,n,r,o);l(h,n,u,!1),a||w(n)||p(s,e,r,o),b(i)&&Tt(i)}else{const l=d(h,n,r,o);u(c,o,l,!1),a||w(n)||f(s,e,r,o);const p=m(i);if(0===p)x(i)&&At(i,h);else{const l=T.get(i);void 0!==l&&clearTimeout(l),T.set(i,setTimeout(()=>{x(i)&&At(i,h)},1e3*p))}}};return!!y(t,[i,r,o],t=>t[0]===i&&t[1]===r&&t[2]===o,!0)&&(e.add(s),x(n)?l(h,n,[r,o,s],!0):u(c,o,[n,r,s],!0),!0)}})(os,as,Zt,hs,Ht,Nt,ls,bt,Jt,Bt,It,te,ee),w=us,G=ut,Q=Ht,Z=Nt,X=Jt,Y=Kt,$=It,b=n=>(t,e)=>{var s=G.get(t);if(void 0===s){if(!n&&$(t)){const G=X(t),$=Z(t)["outputs"];for(const Z of $)if(Wt(Z)){const Y=X(Z[0]);Q(G,Y,Z[1],Z[2])}else{const Q=Y(Z[0]);G.disconnect(Q,Z[1])}}G.set(t,e)}else G.set(t,s+e)},T=Mt,S=Te,k=We,N=Zt,P=ut,j=Nt,L=Jt,z=Kt,W=gs,B=It,U=ys,A=(t,e)=>{var s=P.get(t);if(void 0===s)throw new Error("Missing the expected cycle count.");var n=W(t.context),n=U(n);if(s===e){if(P.delete(t),!n&&B(t)){const P=L(t),W=j(t)["outputs"];for(const j of W)if(Wt(j)){const z=L(j[0]);N(P,z,j[1],j[2])}else{const N=z(j[0]);P.connect(N,j[1])}}}else P.set(t,s-e)},F=xs,I=Nt,V=yt,C=function e(s,t){const n=zt(t)?t:V(F,t);if("delayTime"in n)return[];if(s[0]===n)return[s];if(s.includes(n))return[];var t=I(n)["outputs"];return Array.from(t).map(t=>e([...s,n],t[0])).reduce((t,e)=>t.concat(e),[])},Ds=ws,O=Ts,M=Ss,E=ks,q=As,class extends Ds{constructor(t,e,s,n){super(s),this._context=t,this._nativeAudioNode=s;const i=D(t);O(i)&&!0!==w(se,()=>se(i,q))&&(i=>{const r=new Map;var o,a;i.connect=(a=i.connect.bind(i),(t,e=0,s=0)=>{const n=ie(t)?a(t,e,s):a(t,e),i=r.get(t);return void 0===i?r.set(t,[{input:s,output:e}]):i.every(t=>t.input!==s||t.output!==e)&&i.push({input:s,output:e}),n}),i.disconnect=(o=i.disconnect,(e,s,n)=>{if(o.apply(i),void 0===e)r.clear();else if("number"==typeof e)for(const[i,o]of r){const s=o.filter(t=>t.output!==e);0===s.length?r.delete(i):r.set(i,s)}else if(r.has(e))if(void 0===s)r.delete(e);else{const i=r.get(e);if(void 0!==i){const o=i.filter(t=>t.output!==s&&(t.input!==n||void 0===n));0===o.length?r.delete(e):r.set(e,o)}}for(const[o,e]of r)e.forEach(t=>{ie(o)?i.connect(o,t.output,t.input):i.connect(o,t.output)})})})(s),ot.set(this,s),lt.set(this,new Set),"closed"!==t.state&&e&&Tt(this),y(this,n,s)}get channelCount(){return this._nativeAudioNode.channelCount}set channelCount(t){this._nativeAudioNode.channelCount=t}get channelCountMode(){return this._nativeAudioNode.channelCountMode}set channelCountMode(t){this._nativeAudioNode.channelCountMode=t}get channelInterpretation(){return this._nativeAudioNode.channelInterpretation}set channelInterpretation(t){this._nativeAudioNode.channelInterpretation=t}get context(){return this._context}get numberOfInputs(){return this._nativeAudioNode.numberOfInputs}get numberOfOutputs(){return this._nativeAudioNode.numberOfOutputs}connect(t,e=0,s=0){if(e<0||e>=this._nativeAudioNode.numberOfOutputs)throw T();var n=D(this._context),n=R(n);if(M(t)||E(t))throw S();if(zt(t)){const T=Jt(t);try{const x=Zt(this._nativeAudioNode,T,e,s),b=ee(this);(n||b)&&this._nativeAudioNode.disconnect(...x),"closed"!==this.context.state&&!b&&ee(t)&&Tt(t)}catch(t){if(12===t.code)throw S();throw t}if(x(this,t,e,s,n)){const x=C([this],t);ne(x,b(n))}return t}s=Kt(t);if("playbackRate"===s.name&&1024===s.maxValue)throw k();try{this._nativeAudioNode.connect(s,e),(n||ee(this))&&this._nativeAudioNode.disconnect(s,e)}catch(t){if(12===t.code)throw S();throw t}if(((r,o,a,h)=>{const{activeInputs:c,passiveInputs:l}=Pt(o),t=Nt(r)["outputs"],e=bt(r),s=t=>{const e=Jt(r),s=Kt(o);if(t){const o=$t(l,r,a);Ut(c,r,o,!1),h||te(r)||e.connect(s,a)}else{const o=(t=c,n=r,i=a,xt(t,t=>t[0]===n&&t[1]===i));Gt(l,o,!1),h||te(r)||e.disconnect(s,a)}var n,i};return!!Bt(t,[o,a],t=>t[0]===o&&t[1]===a,!0)&&(e.add(s),It(r)?Ut(c,r,[a,s],!0):Gt(l,[r,a,s],!0),!0)})(this,t,e,n)){const x=C([this],t);ne(x,b(n))}}disconnect(t,e,s){let n;var i=D(this._context),i=R(i);if(void 0===t)n=((t,e)=>{const s=Nt(t),n=[];for(const i of s.outputs)(Wt(i)?re:oe)(t,e,...i),n.push(i[0]);return s.outputs.clear(),n})(this,i);else if("number"==typeof t){if(t<0||t>=this.numberOfOutputs)throw T();n=((t,e,s)=>{const n=Nt(t),i=[];for(const r of n.outputs)r[1]===s&&((Wt(r)?re:oe)(t,e,...r),i.push(r[0]),n.outputs.delete(r));return i})(this,i,t)}else{if(void 0!==e&&(e<0||e>=this.numberOfOutputs))throw T();if(zt(t)&&void 0!==s&&(s<0||s>=t.numberOfInputs))throw T();if(n=((e,s,n,i,r)=>{const o=Nt(e);return Array.from(o.outputs).filter(t=>!(t[0]!==n||void 0!==i&&t[1]!==i||void 0!==r&&t[2]!==r)).map(t=>((Wt(t)?re:oe)(e,s,...t),o.outputs.delete(t),t[0]))})(this,i,t,e,s),0===n.length)throw S()}for(const t of n){const e=C([this],t);ne(e,A)}}});var Ds,Os,Ms,Es,Rs,qs,Fs,Is,Vs,Ns,Ps,js,Ls,zs,Ws,Bs,Us,Gs,Qs,Zs,Xs,Ys,$s,Hs,Js,Ks,tn,en,sn,nn,rn,on,an,hn,cn,ln,un,pn,dn,fn,_n,mn,gn,vn,yn,xn,wn,bn,Tn,Sn,kn,An,Cn,Dn,On,Mn,En,Rn,qn,Fn,In,Vn,Nn,Pn,jn,Ln,zn,Wn,Bn,Un,Gn,Qn,Zn,Xn,Yn,$n,Hn,Jn,Kn,ti,ei,si,ni,ii,ri,oi,ai,hi,ci,li,ui,pi,di,fi,_i,mi,gi,vi,yi,xi,wi,bi,Ti,Si,ki,Ai,Ci,Di,Oi,Mi,Ei,Ri,qi,Fi,Ii,Vi,Ni,Pi,ji,Li,zi,Wi,Bi,Ui,Gi,Qi,Zi,Xi,Yi,$i,Hi,Ji,Ki,tr,er,sr,nr,ir,rr,or,ar,hr,cr,lr,ur,pr,dr,fr,_r,mr,gr,vr,yr,xr,wr,br,Tr,Sr,kr,Ar,Cr,Dr,Or,Mr,Er,Rr,qr,Fr,Ir,Vr,Nr,Pr,jr,Lr,zr,Wr,Br,Ur,Gr,Qr,Zr,Xr,Yr,$r,Hr,Jr,Kr,to,eo,so,no,io,ro,oo,ao,ho,co,lo,uo,po,fo,_o,mo,go,vo,yo,xo,wo,bo,To,So,ko,Ao,Co,Do,Oo,Mo,Eo,Ro,qo,Fo,Io,Vo,No,Po,jo,Lo,zo,Wo,Bo,Uo,Go,Qo,Zo,Xo,Yo,$o,Ho,Jo,Ko,ta,ea,sa,na,ia,ra,oa,aa,ha,ca,la,ua,pa,da,fa,_a,ma,ga,va,ya,xa,wa,ba,Ta,Sa,ka,Aa,Ca,Da,Oa,Ma,Ea,Ra,qa,Fa,Ia,Va,Na,Pa,ja,La,za,Wa,Ba,Ua,Ga,Qa,Za,Xa,Ya,$a,Ha,Ja,Ka,th,eh,sh,nh,ih,rh,oh,ah,hh,ch,lh,uh,ph,dh,fh,_h,mh,gh,vh,yh,xh,wh,bh,Th,Sh,kh,Ah,Ch,Dh,Oh,Mh,Eh,Rh,qh,Fh,Ih,Vh,Nh,Ph,jh,Lh,zh,Wh,Bh,Uh,Gh,Qh,Zh,Xh,Yh,$h,Hh,Jh,Kh,tc,ec,sc,nc,ic,rc,oc,ac,hc,cc,lc,uc,pc,dc,fc,_c,mc,gc,vc,yc,xc,wc,bc,Tc,Sc,kc,Ac,Cc,Dc,Oc,Mc,Ec,Rc,qc,Fc,Ic,Vc,Nc,Pc,jc,Lc,zc,Wc,Bc,Uc,Gc,Qc,Zc,Xc,Yc,$c,Hc,Jc,Kc,tl,el,sl,nl,il,rl,ol=(Jc=Cs,Os=ms,Ms=Mt,Es=ds,Rs=D=gs,qs=R=ys,class extends Jc{constructor(t,e){var s=Rs(t),e={...Ct,...e},e=Es(s,e);super(t,!1,e,qs(s)?Os():null),this._nativeAnalyserNode=e}get fftSize(){return this._nativeAnalyserNode.fftSize}set fftSize(t){this._nativeAnalyserNode.fftSize=t}get frequencyBinCount(){return this._nativeAnalyserNode.frequencyBinCount}get maxDecibels(){return this._nativeAnalyserNode.maxDecibels}set maxDecibels(t){var e=this._nativeAnalyserNode.maxDecibels;if(!((this._nativeAnalyserNode.maxDecibels=t)>this._nativeAnalyserNode.minDecibels))throw this._nativeAnalyserNode.maxDecibels=e,Ms()}get minDecibels(){return this._nativeAnalyserNode.minDecibels}set minDecibels(t){var e=this._nativeAnalyserNode.minDecibels;if(this._nativeAnalyserNode.minDecibels=t,!(this._nativeAnalyserNode.maxDecibels>t))throw this._nativeAnalyserNode.minDecibels=e,Ms()}get smoothingTimeConstant(){return this._nativeAnalyserNode.smoothingTimeConstant}set smoothingTimeConstant(t){this._nativeAnalyserNode.smoothingTimeConstant=t}getByteFrequencyData(t){this._nativeAnalyserNode.getByteFrequencyData(t)}getByteTimeDomainData(t){this._nativeAnalyserNode.getByteTimeDomainData(t)}getFloatFrequencyData(t){this._nativeAnalyserNode.getFloatFrequencyData(t)}getFloatTimeDomainData(t){this._nativeAnalyserNode.getFloatTimeDomainData(t)}}),al=new WeakSet,Jc=null!==(Ds=ps)&&Ds.hasOwnProperty("AudioBuffer")?Ds.AudioBuffer:null,Ds=(Fs=new Uint32Array(1),t=>(Fs[0]=t,Fs[0]));const hl=(wn=Mt,a=>{a.copyFromChannel=(e,t,s=0)=>{var n=xn(s),t=xn(t);if(t>=a.numberOfChannels)throw wn();var i=a.length,r=a.getChannelData(t),o=e.length;for(let t=n<0?-n:0;t+n{var n=xn(s),t=xn(t);if(t>=a.numberOfChannels)throw wn();const i=a.length,r=a.getChannelData(t),o=e.length;for(let t=n<0?-n:0;t+n{var i,r;n.copyFromChannel=(r=n.copyFromChannel,(t,e,s=0)=>{s=yn(s),e=yn(e);if(s{s=yn(s),e=yn(e);if(s{let p=null;return class e{constructor(t){if(null===h)throw new Error("Missing the native OfflineAudioContext constructor.");var{length:e,numberOfChannels:s,sampleRate:t}={...Rt,...t};null===p&&(p=new h(1,1,44100));const n=null!==a&&r(c,c)?new a({length:e,numberOfChannels:s,sampleRate:t}):p.createBuffer(s,e,t);if(0===n.numberOfChannels)throw o();return"function"!=typeof n.copyFromChannel?(l(n),Et(n)):r(Ot,()=>Ot(n))||u(n),i.add(n),n}static[Symbol.hasInstance](t){return null!==t&&"object"==typeof t&&Object.getPrototypeOf(t)===e.prototype||i.has(t)}}})(al,us,We,Jc,vs,(vn=Jc,()=>{if(null===vn)return!1;try{new vn({length:1,sampleRate:44100})}catch{return!1}return!0}),hl,cl),ul=(gn=je,(t,e)=>{const s=gn(t,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"discrete",gain:0});e.connect(s).connect(t.destination);const n=()=>{e.removeEventListener("ended",n),e.disconnect(s),s.disconnect()};e.addEventListener("ended",n)}),pl=(fn=fs,_n=Pt,mn=te,async(t,i,r)=>{t=_n(t);await Promise.all(Array.from(t.activeInputs).map(async([t,e])=>{const s=fn(t),n=await s.render(t,i);mn(t)||n.connect(r,e)}))}),dl=(dn=pl,(t,e,s)=>dn(e,t,s)),fl=(en=ul,sn=us,nn=t=>{const e=t.createBufferSource();e.start();try{e.start()}catch{return!0}return!1},rn=t=>{const e=t.createBufferSource(),s=t.createBuffer(1,1,44100);e.buffer=s;try{e.start(0,1)}catch{return!1}return!0},on=t=>{const e=t.createBufferSource();e.start();try{e.stop()}catch{return!1}return!0},an=Ke,hn=ts,cn=es,pn=He,ln=(s,t)=>{const n=t.createBuffer(1,1,44100);null===s.buffer&&(s.buffer=n),pn(s,"buffer",e=>()=>{var t=e.call(s);return t===n?null:t},e=>t=>e.call(s,null===t?n:t))},un=is,(t,e)=>{var i,r,o,s=t.createBufferSource();return Oe(s,e),Ee(s,e,"playbackRate"),De(s,e,"buffer"),De(s,e,"loop"),De(s,e,"loopEnd"),De(s,e,"loopStart"),sn(nn,()=>nn(t))||((o=s).start=(n=>{let i=!1;return(t=0,e=0,s)=>{if(i)throw be();n.call(o,t,e,s),i=!0}})(o.start)),sn(rn,()=>rn(t))||((i=s).start=(r=i.start,(t=0,e=0,s)=>{var n=i.buffer,e=null===n?e:Math.min(n.duration,e);null!==n&&e>n.duration-.5/i.context.sampleRate?r.call(i,t,0,0):r.call(i,t,e,s)})),sn(on,()=>on(t))||ln(s,t),sn(an,()=>an(t))||Re(s),sn(hn,()=>hn(t))||un(s,t),sn(cn,()=>cn(t))||qe(s),en(t,s),s}),_l=(tn=Pt,Js=t=>{t=tn(t);if(null===t.renderer)throw new Error("Missing the renderer of the given AudioParam in the audio graph.");return t.renderer},Ks=pl,(t,e,s)=>(Js(e).replay(s),Ks(e,t,s))),ml=(Zs=dl,Xs=fl,Ys=Jt,$s=_l,Hs=_s,()=>{const i=new WeakMap;let r=null,o=null;return{set start(t){r=t},set stop(t){o=t},render(t,e){var s=i.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=Ys(t);var n=Dt(s,e);if(!n){const Zs={buffer:s.buffer,channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,loop:s.loop,loopEnd:s.loopEnd,loopStart:s.loopStart,playbackRate:s.playbackRate.value};s=Xs(e,Zs),null!==r&&s.start(...r),null!==o&&s.stop(o)}return i.set(e,s),n?await Zs(e,t.playbackRate,s.playbackRate):await $s(e,t.playbackRate,s.playbackRate),await Hs(t,e,s),s})(t,e)}}}),gl=(bn=at,Is=(t,e)=>{bn.set(t,{activeInputs:new Set,passiveInputs:new WeakMap,renderer:e})},Vs=xs,Ns=ht,Ps=nt.createCancelAndHoldAutomationEvent,js=nt.createCancelScheduledValuesAutomationEvent,Ls=nt.createExponentialRampToValueAutomationEvent,zs=nt.createLinearRampToValueAutomationEvent,Ws=nt.createSetTargetAutomationEvent,Bs=nt.createSetValueAutomationEvent,Us=nt.createSetValueCurveAutomationEvent,Gs=bs,Qs=Je,(p,t,d,e=null,s=null)=>{const f=new nt.AutomationEventList(d.defaultValue),_=t?(c=f,{replay(t){for(const e of c)if("exponentialRampToValue"===e.type){const{endTime:c,value:s}=e;t.exponentialRampToValueAtTime(s,c)}else if("linearRampToValue"===e.type){const{endTime:c,value:n}=e;t.linearRampToValueAtTime(n,c)}else if("setTarget"===e.type){const{startTime:c,target:i,timeConstant:r}=e;t.setTargetAtTime(i,c,r)}else if("setValue"===e.type){const{startTime:c,value:o}=e;t.setValueAtTime(o,c)}else{if("setValueCurve"!==e.type)throw new Error("Can't apply an unknown automation.");{const{duration:c,startTime:a,values:h}=e;t.setValueCurveAtTime(h,a,c)}}}}):null,m={get defaultValue(){return d.defaultValue},get maxValue(){return null===e?d.maxValue:e},get minValue(){return null===s?d.minValue:s},get value(){return d.value},set value(t){d.value=t,m.setValueAtTime(t,p.context.currentTime)},cancelAndHoldAtTime(t){var e,s;return"function"==typeof d.cancelAndHoldAtTime?(null===_&&f.flush(p.context.currentTime),f.add(Ps(t)),d.cancelAndHoldAtTime(t)):(e=Array.from(f).pop(),null===_&&f.flush(p.context.currentTime),f.add(Ps(t)),s=Array.from(f).pop(),d.cancelScheduledValues(t),e!==s&&void 0!==s&&("exponentialRampToValue"===s.type?d.exponentialRampToValueAtTime(s.value,s.endTime):"linearRampToValue"===s.type?d.linearRampToValueAtTime(s.value,s.endTime):"setValue"===s.type?d.setValueAtTime(s.value,s.startTime):"setValueCurve"===s.type&&d.setValueCurveAtTime(s.values,s.startTime,s.duration))),m},cancelScheduledValues:t=>(null===_&&f.flush(p.context.currentTime),f.add(js(t)),d.cancelScheduledValues(t),m),exponentialRampToValueAtTime(t,e){if(0===t)throw new RangeError;if(!Number.isFinite(e)||e<0)throw new RangeError;return null===_&&f.flush(p.context.currentTime),f.add(Ls(t,e)),d.exponentialRampToValueAtTime(t,e),m},linearRampToValueAtTime:(t,e)=>(null===_&&f.flush(p.context.currentTime),f.add(zs(t,e)),d.linearRampToValueAtTime(t,e),m),setTargetAtTime:(t,e,s)=>(null===_&&f.flush(p.context.currentTime),f.add(Ws(t,e,s)),d.setTargetAtTime(t,e,s),m),setValueAtTime:(t,e)=>(null===_&&f.flush(p.context.currentTime),f.add(Bs(t,e)),d.setValueAtTime(t,e),m),setValueCurveAtTime(t,e,s){var n=t instanceof Float32Array?t:new Float32Array(t);if(null!==Gs&&"webkitAudioContext"===Gs.name){const i=e+s,r=p.context.sampleRate,o=Math.ceil(e*r),a=Math.floor(i*r),h=a-o,c=new Float32Array(h);for(let t=0;t{this._nativeAudioBufferSourceNode.removeEventListener("ended",t),It(this)&&kt(this)};this._nativeAudioBufferSourceNode.addEventListener("ended",t)}}stop(t=0){this._nativeAudioBufferSourceNode.stop(t),null!==this._audioBufferSourceNodeRenderer&&(this._audioBufferSourceNodeRenderer.stop=t)}}),yl=(Jc=Cs,Uc=Mt,Gc=be,$c=je,Hc=He,Qc=(t,e,s)=>{const n=t.destination;if(n.channelCount!==e)try{n.channelCount=e}catch{}s&&"explicit"!==n.channelCountMode&&(n.channelCountMode="explicit"),0===n.maxChannelCount&&Object.defineProperty(n,"maxChannelCount",{value:e});const i=$c(t,{channelCount:e,channelCountMode:n.channelCountMode,channelInterpretation:n.channelInterpretation,gain:1});return Hc(i,"channelCount",t=>()=>t.call(i),t=>e=>{t.call(i,e);try{n.channelCount=e}catch(t){if(e>n.maxChannelCount)throw t}}),Hc(i,"channelCountMode",t=>()=>t.call(i),e=>t=>{e.call(i,t),n.channelCountMode=t}),Hc(i,"channelInterpretation",t=>()=>t.call(i),e=>t=>{e.call(i,t),n.channelInterpretation=t}),Object.defineProperty(i,"maxChannelCount",{get:()=>n.maxChannelCount}),i.connect(n),i},class extends Jc{constructor(t,e){var s=Zc(t),n=Xc(s),e=Qc(s,e,n);super(t,!1,e,n?(n=>{const i=new WeakMap;return{render(t,e){var s=i.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{var s=e.destination;return i.set(e,s),await n(t,e,s),s})(t,e)}}})(Yc):null),this._isNodeOfNativeOfflineAudioContext=n,this._nativeAudioDestinationNode=e}get channelCount(){return this._nativeAudioDestinationNode.channelCount}set channelCount(t){if(this._isNodeOfNativeOfflineAudioContext)throw Gc();if(t>this._nativeAudioDestinationNode.maxChannelCount)throw Uc();this._nativeAudioDestinationNode.channelCount=t}get channelCountMode(){return this._nativeAudioDestinationNode.channelCountMode}set channelCountMode(t){if(this._isNodeOfNativeOfflineAudioContext)throw Gc();this._nativeAudioDestinationNode.channelCountMode=t}get maxChannelCount(){return this._nativeAudioDestinationNode.maxChannelCount}}),xl=(jc=dl,zc=Jt,Wc=_l,Bc=Yc=_s,()=>{const i=new WeakMap;return{render(t,e){var s=i.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=zc(t);var n=Dt(s,e);if(!n){const jc={Q:s.Q.value,channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,detune:s.detune.value,frequency:s.frequency.value,gain:s.gain.value,type:s.type};s=Lc(e,jc)}return i.set(e,s),n?(await jc(e,t.Q,s.Q),await jc(e,t.detune,s.detune),await jc(e,t.frequency,s.frequency),await jc(e,t.gain,s.gain)):(await Wc(e,t.Q,s.Q),await Wc(e,t.detune,s.detune),await Wc(e,t.frequency,s.frequency),await Wc(e,t.gain,s.gain)),await Bc(t,e,s),s})(t,e)}}}),wl=(Pc=cs,(t,e)=>Pc.set(t,e)),bl=(Jc=Cs,Ec=tl=gl,Rc=xl,qc=Te,Fc=Lc=Ie,Ic=Zc=nl=gs,Vc=Xc=il=ys,Nc=wl,class extends Jc{constructor(t,e){var s=Ic(t),e={...pe,...e},e=Fc(s,e),s=Vc(s);super(t,!1,e,s?Rc():null),this._Q=Ec(this,s,e.Q,Ft,qt),this._detune=Ec(this,s,e.detune,1200*Math.log2(Ft),-1200*Math.log2(Ft)),this._frequency=Ec(this,s,e.frequency,t.sampleRate/2,0),this._gain=Ec(this,s,e.gain,40*Math.log10(Ft),qt),this._nativeBiquadFilterNode=e,Nc(this,1)}get detune(){return this._detune}get frequency(){return this._frequency}get gain(){return this._gain}get Q(){return this._Q}get type(){return this._nativeBiquadFilterNode.type}set type(t){this._nativeBiquadFilterNode.type=t}getFrequencyResponse(t,e,s){try{this._nativeBiquadFilterNode.getFrequencyResponse(t,e,s)}catch(t){if(11===t.code)throw qc();throw t}if(t.length!==e.length||e.length!==s.length)throw qc()}}),Tl=(Oc=Bt,Mc=Ss,(r,i,o)=>{const a=new Set;return r.connect=(c=r.connect,(e,s=0,n=0)=>{var t=0===a.size;if(Mc(e))return c.call(r,e,s,n),Oc(a,[e,s,n],t=>t[0]===e&&t[1]===s&&t[2]===n,!0),t&&i(),e;c.call(r,e,s),Oc(a,[e,s],t=>t[0]===e&&t[1]===s,!0),t&&i()}),r.disconnect=(h=r.disconnect,(t,e,s)=>{var n=0{s.channelCount=1,s.channelCountMode="explicit",Object.defineProperty(s,"channelCount",{get:()=>1,set:()=>{throw Cc()}}),Object.defineProperty(s,"channelCountMode",{get:()=>"explicit",set:()=>{throw Cc()}});const n=t.createBufferSource();Dc(s,()=>{var e=s.numberOfInputs;for(let t=0;tn.disconnect(s))}),kl=(kc=bs,Ac=Sl,(t,e)=>{var s=t.createChannelMerger(e.numberOfInputs);return null!==kc&&"webkitAudioContext"===kc.name&&Ac(t,s),Oe(s,e),s}),Al=(Tc=Jt,()=>{const n=new WeakMap;return{render(t,e){var s=n.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=Tc(t);if(!Dt(s,e)){const Tc={channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,numberOfInputs:s.numberOfInputs};s=bc(e,Tc)}return n.set(e,s),await Sc(t,e,s),s})(t,e)}}}),Cl=(Jc=Cs,vc=Al,class extends Jc{constructor(t,e){var s=xc(t),e={...de,...e};super(t,!1,yc(s,e),wc(s)?vc():null)}}),Dl=(mc=Jt,()=>{const n=new WeakMap;return{render(t,e){var s=n.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=mc(t);if(!Dt(s,e)){const mc={channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,numberOfOutputs:s.numberOfOutputs};s=_c(e,mc)}return n.set(e,s),await gc(t,e,s),s})(t,e)}}}),Ol=(Jc=Cs,uc=Dl,pc=_c=Ve,class extends Jc{constructor(t,e){var s=dc(t),e={...e={...fe,...e},channelCount:e.numberOfOutputs};super(t,!1,pc(s,e),fc(s)?uc():null)}}),Ml=(lc=Dc=Tl,(t,{offset:e,...s})=>{const n=t.createBuffer(1,2,44100),i=hc(t,{buffer:null,channelCount:2,channelCountMode:"max",channelInterpretation:"speakers",loop:!1,loopEnd:0,loopStart:0,playbackRate:1}),r=cc(t,{...s,gain:e}),o=n.getChannelData(0);o[0]=1,o[1]=1,i.buffer=n,i.loop=!0;e={get bufferSize(){},get channelCount(){return r.channelCount},set channelCount(t){r.channelCount=t},get channelCountMode(){return r.channelCountMode},set channelCountMode(t){r.channelCountMode=t},get channelInterpretation(){return r.channelInterpretation},set channelInterpretation(t){r.channelInterpretation=t},get context(){return r.context},get inputs(){return[]},get numberOfInputs(){return i.numberOfInputs},get numberOfOutputs(){return r.numberOfOutputs},get offset(){return r.gain},get onended(){return i.onended},set onended(t){i.onended=t},addEventListener:(...t)=>i.addEventListener(t[0],t[1],t[2]),dispatchEvent:(...t)=>i.dispatchEvent(t[0]),removeEventListener:(...t)=>i.removeEventListener(t[0],t[1],t[2]),start(t=0){i.start.call(i,t)},stop(t=0){i.stop.call(i,t)}};return ac(t,i),lc(Ne(e,r),()=>i.connect(r),()=>i.disconnect(r))}),El=(sc=ac=ul,nc=us,ic=Ml,rc=Ke,oc=es,(t,e)=>{if(void 0===t.createConstantSource)return ic(t,e);var s=t.createConstantSource();return Oe(s,e),Ee(s,e,"offset"),nc(rc,()=>rc(t))||Re(s),nc(oc,()=>oc(t))||qe(s),sc(t,s),s}),Rl=(Kh=Jt,()=>{const i=new WeakMap;let r=null,o=null;return{set start(t){r=t},set stop(t){o=t},render(t,e){var s=i.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=Kh(t);var n=Dt(s,e);if(!n){const Hh={channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,offset:s.offset.value};s=Jh(e,Hh),null!==r&&s.start(r),null!==o&&s.stop(o)}return i.set(e,s),n?await Hh(e,t.offset,s.offset):await tc(e,t.offset,s.offset),await ec(t,e,s),s})(t,e)}}}),ql=(Jc=Cs,Qh=Rl,$h=rs,class extends Jc{constructor(t,e){var s=Xh(t),n={..._e,...e},e=Zh(s,n),n=Yh(s),s=n?Qh():null;super(t,!1,e,s),this._constantSourceNodeRenderer=s,this._nativeConstantSourceNode=e,this._offset=Gh(this,n,e.offset,Ft,qt),this._onended=null}get offset(){return this._offset}get onended(){return this._onended}set onended(t){var e="function"==typeof t?$h(this,t):null;this._nativeConstantSourceNode.onended=e;var s=this._nativeConstantSourceNode.onended;this._onended=null!==s&&s===e?t:s}start(t=0){if(this._nativeConstantSourceNode.start(t),null!==this._constantSourceNodeRenderer&&(this._constantSourceNodeRenderer.start=t),"closed"!==this.context.state){Tt(this);const t=()=>{this._nativeConstantSourceNode.removeEventListener("ended",t),It(this)&&kt(this)};this._nativeConstantSourceNode.addEventListener("ended",t)}}stop(t=0){this._nativeConstantSourceNode.stop(t),null!==this._constantSourceNodeRenderer&&(this._constantSourceNodeRenderer.stop=t)}}),Fl=(t,e)=>{const s=t.createConvolver();if(Oe(s,e),e.disableNormalization===s.normalize&&(s.normalize=!e.disableNormalization),De(s,e,"buffer"),2()=>t.call(s),e=>t=>{if(2()=>t.call(s),e=>t=>{if("max"===t)throw Bh();return e.call(s,t)}),s},Il=(zh=Jt,()=>{const n=new WeakMap;return{render(t,e){var s=n.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=zh(t);if(!Dt(s,e)){const zh={buffer:s.buffer,channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,disableNormalization:!s.normalize};s=Lh(e,zh)}return n.set(e,s),Qt(s)?await Wh(t,e,s.inputs[0]):await Wh(t,e,s),s})(t,e)}}}),Vl=(Jc=Cs,Ih=Il,Vh=Lh=Fl,class extends Jc{constructor(t,e){var s=Nh(t),n={...me,...e},e=Vh(s,n);super(t,!1,e,Ph(s)?Ih():null),this._isBufferNullified=!1,this._nativeConvolverNode=e,null!==n.buffer&&jh(this,n.buffer.duration)}get buffer(){return this._isBufferNullified?null:this._nativeConvolverNode.buffer}set buffer(t){if(null===(this._nativeConvolverNode.buffer=t)&&null!==this._nativeConvolverNode.buffer){const t=this._nativeConvolverNode.context;this._nativeConvolverNode.buffer=t.createBuffer(1,1,44100),this._isBufferNullified=!0,jh(this,0)}else this._isBufferNullified=!1,jh(this,null===this._nativeConvolverNode.buffer?0:this._nativeConvolverNode.buffer.duration)}get normalize(){return this._nativeConvolverNode.normalize}set normalize(t){this._nativeConvolverNode.normalize=t}}),Nl=(Rh=Jt,i=>{const r=new WeakMap;return{render(t,e){var s=r.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=Rh(t);var n=Dt(s,e);if(!n){const Mh={channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,delayTime:s.delayTime.value,maxDelayTime:i};s=Eh(e,Mh)}return r.set(e,s),n?await Mh(e,t.delayTime,s.delayTime):await qh(e,t.delayTime,s.delayTime),await Fh(t,e,s),s})(t,e)}}}),Pl=(Jc=Cs,kh=Nl,Ah=Eh=Pe,class extends Jc{constructor(t,e){var s=Ch(t),n={...ve,...e},e=Ah(s,n),s=Dh(s);super(t,!1,e,s?kh(n.maxDelayTime):null),this._delayTime=Sh(this,s,e.delayTime),Oh(this,n.maxDelayTime)}get delayTime(){return this._delayTime}}),jl=(t,e)=>{t=t.createDynamicsCompressor();if(Oe(t,e),2{const i=new WeakMap;return{render(t,e){var s=i.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=xh(t);var n=Dt(s,e);if(!n){const vh={attack:s.attack.value,channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,knee:s.knee.value,ratio:s.ratio.value,release:s.release.value,threshold:s.threshold.value};s=yh(e,vh)}return i.set(e,s),n?(await vh(e,t.attack,s.attack),await vh(e,t.knee,s.knee),await vh(e,t.ratio,s.ratio),await vh(e,t.release,s.release),await vh(e,t.threshold,s.threshold)):(await wh(e,t.attack,s.attack),await wh(e,t.knee,s.knee),await wh(e,t.ratio,s.ratio),await wh(e,t.release,s.release),await wh(e,t.threshold,s.threshold)),await bh(t,e,s),s})(t,e)}}}),zl=(Jc=Cs,ph=Ll,dh=yh=jl,class extends Jc{constructor(t,e){var s=_h(t),e={...xe,...e},e=dh(s,e),s=mh(s);super(t,!1,e,s?ph():null),this._attack=uh(this,s,e.attack),this._knee=uh(this,s,e.knee),this._nativeDynamicsCompressorNode=e,this._ratio=uh(this,s,e.ratio),this._release=uh(this,s,e.release),this._threshold=uh(this,s,e.threshold),gh(this,.006)}get attack(){return this._attack}get channelCount(){return this._nativeDynamicsCompressorNode.channelCount}set channelCount(t){var e=this._nativeDynamicsCompressorNode.channelCount;if(2<(this._nativeDynamicsCompressorNode.channelCount=t))throw this._nativeDynamicsCompressorNode.channelCount=e,fh()}get channelCountMode(){return this._nativeDynamicsCompressorNode.channelCountMode}set channelCountMode(t){var e=this._nativeDynamicsCompressorNode.channelCountMode;if("max"===(this._nativeDynamicsCompressorNode.channelCountMode=t))throw this._nativeDynamicsCompressorNode.channelCountMode=e,fh()}get knee(){return this._knee}get ratio(){return this._ratio}get reduction(){return"number"==typeof this._nativeDynamicsCompressorNode.reduction.value?this._nativeDynamicsCompressorNode.reduction.value:this._nativeDynamicsCompressorNode.reduction}get release(){return this._release}get threshold(){return this._threshold}}),Wl=(oh=vh=Mh=Hh=dl,hh=Jt,ch=wh=qh=tc=_l,()=>{const i=new WeakMap;return{render(t,e){var s=i.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=hh(t);var n=Dt(s,e);if(!n){const oh={channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,gain:s.gain.value};s=ah(e,oh)}return i.set(e,s),n?await oh(e,t.gain,s.gain):await ch(e,t.gain,s.gain),await lh(t,e,s),s})(t,e)}}}),Bl=(Jc=Cs,sh=Wl,class extends Jc{constructor(t,e){var s=ih(t),e={...we,...e},e=nh(s,e),s=rh(s);super(t,!1,e,s?sh():null),this._gain=eh(this,s,e.gain,Ft,qt)}get gain(){return this._gain}}),Ul=(Ha=Te,Ja=be,(t,e,{channelCount:s,channelCountMode:n,channelInterpretation:i,feedback:r,feedforward:o})=>{const a=Fe(e,t.sampleRate),l=r instanceof Float64Array?r:new Float64Array(r),u=o instanceof Float64Array?o:new Float64Array(o),h=l.length,c=u.length,p=Math.min(h,c);if(0===h||20{const e=t.inputBuffer,s=t.outputBuffer,n=e.numberOfChannels;for(let t=0;td.addEventListener(t[0],t[1],t[2]),dispatchEvent:(...t)=>d.dispatchEvent(t[0]),getFrequencyResponse(e,s,n){if(e.length!==s.length||s.length!==n.length)throw Ha();const i=e.length;for(let t=0;td.removeEventListener(t[0],t[1],t[2])},d)}),Gl=(Ga=us,Ya=Qa=nh=ah=cc=je,$a=vs,Xa=()=>{if(null===$a)return Promise.resolve(!1);const e=new $a(1,1,44100),s=Ya(e,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"discrete",gain:0});return new Promise(t=>{e.oncomplete=()=>{s.disconnect(),t(0!==e.currentTime)},e.startRendering()})},n=>Ga(Ce,()=>Ce(n))?Promise.resolve(Ga(Xa,Xa)).then(t=>{if(!t){const t=Za(n,512,0,1);n.oncomplete=()=>{t.onaudioprocess=null,t.disconnect()},t.onaudioprocess=()=>n.currentTime,t.connect(n.destination)}return n.startRendering()}):new Promise(e=>{const s=Qa(n,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"discrete",gain:0});n.oncomplete=t=>{s.disconnect(),e(t.renderedBuffer)},s.connect(n.destination),n.startRendering()})),Ql=(La=hc=fl,za=Jt,Wa=vs,Ba=lh=bh=Fh=Wh=ec=gc=Sc=_s,Ua=Gl,(r,o)=>{const a=new WeakMap;let h=null;return{render(t,e){var s=a.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=null,n=za(t);var i=Dt(n,e);if(void 0===e.createIIRFilter?s=La(e,{buffer:null,channelCount:2,channelCountMode:"max",channelInterpretation:"speakers",loop:!1,loopEnd:0,loopStart:0,playbackRate:1}):i||(n=e.createIIRFilter(o,r)),a.set(e,null===s?n:s),null===s)return await Ba(t,e,n),n;{if(null===h){if(null===Wa)throw new Error("Missing the native OfflineAudioContext constructor.");const La=new Wa(t.context.destination.channelCount,t.context.length,e.sampleRate);h=(async()=>(await Ba(t,La,La.destination),((e,t,s,n)=>{const i=s instanceof Float64Array?s:new Float64Array(s),r=n instanceof Float64Array?n:new Float64Array(n),o=i.length,a=r.length,h=Math.min(o,a);if(1!==i[0]){for(let t=0;t{if(void 0===t.createIIRFilter)return ja(t,e,s);t=t.createIIRFilter(s.feedforward,s.feedback);return Oe(t,s),t}),Xl=(Jc=Cs,Fa=Zl,Ia=Ql,Va=ih=_h=Ch=Nh=Xh=dc=xc=gs,Pa=gh=Oh=jh=wl,class extends Jc{constructor(t,e){var n,i,s=Va(t),r=Na(s),e={...Se,...e},s=Fa(s,r?null:t.baseLatency,e);super(t,!1,s,r?Ia(e.feedback,e.feedforward):null),(n=s).getFrequencyResponse=(i=n.getFrequencyResponse,(t,e,s)=>{if(t.length!==e.length||e.length!==s.length)throw Te();return i.call(n,t,e,s)}),this._nativeIIRFilterNode=s,Pa(this,1)}getFrequencyResponse(t,e,s){return this._nativeIIRFilterNode.getFrequencyResponse(t,e,s)}}),Yl=(Aa=eh=uh=Sh=Gh=gl,Ca=yc=bc=kl,Da=Zh=Jh=El,Oa=Za=Ka=ze,Ma=th=fh=Th=Bh=We,Ea=Ye,Ra=Na=rh=mh=Dh=Ph=Yh=fc=wc=ys,qa=Uh=He,(_,m)=>{const a=m.listener,{forwardX:t,forwardY:e,forwardZ:s,positionX:n,positionY:i,positionZ:r,upX:o,upY:h,upZ:c}=void 0===a.forwardX?(()=>{const n=new Float32Array(1),p=Ca(m,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"speakers",numberOfInputs:9}),d=Ra(m);let e=!1,i=[0,0,-1,0,1,0],r=[0,0,0];const f=()=>{if(!e){e=!0;const t=Oa(m,256,9,0);t.onaudioprocess=({inputBuffer:t})=>{const e=[Ea(t,n,0),Ea(t,n,1),Ea(t,n,2),Ea(t,n,3),Ea(t,n,4),Ea(t,n,5)];e.some((t,e)=>t!==i[e])&&(a.setOrientation(...e),i=e);const s=[Ea(t,n,6),Ea(t,n,7),Ea(t,n,8)];s.some((t,e)=>t!==r[e])&&(a.setPosition(...s),r=s)},p.connect(t)}},t=e=>t=>{t!==i[e]&&(i[e]=t,a.setOrientation(...i))},s=e=>t=>{t!==r[e]&&(r[e]=t,a.setPosition(...r))},o=(t,e,s)=>{const n=Da(m,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"discrete",offset:e});n.connect(p,0,t),n.start(),Object.defineProperty(n.offset,"defaultValue",{get:()=>e});const i=Aa({context:_},d,n.offset,Ft,qt);var r,o,a,h,c,l,u;return qa(i,"value",t=>()=>t.call(i),e=>t=>{try{e.call(i,t)}catch(t){if(9!==t.code)throw t}f(),d&&s(t)}),i.cancelAndHoldAtTime=(r=i.cancelAndHoldAtTime,d?()=>{throw Ma()}:(...t)=>{t=r.apply(i,t);return f(),t}),i.cancelScheduledValues=(o=i.cancelScheduledValues,d?()=>{throw Ma()}:(...t)=>{t=o.apply(i,t);return f(),t}),i.exponentialRampToValueAtTime=(a=i.exponentialRampToValueAtTime,d?()=>{throw Ma()}:(...t)=>{t=a.apply(i,t);return f(),t}),i.linearRampToValueAtTime=(h=i.linearRampToValueAtTime,d?()=>{throw Ma()}:(...t)=>{t=h.apply(i,t);return f(),t}),i.setTargetAtTime=(c=i.setTargetAtTime,d?()=>{throw Ma()}:(...t)=>{t=c.apply(i,t);return f(),t}),i.setValueAtTime=(l=i.setValueAtTime,d?()=>{throw Ma()}:(...t)=>{t=l.apply(i,t);return f(),t}),i.setValueCurveAtTime=(u=i.setValueCurveAtTime,d?()=>{throw Ma()}:(...t)=>{t=u.apply(i,t);return f(),t}),i};return{forwardX:o(0,0,t(0)),forwardY:o(1,0,t(1)),forwardZ:o(2,-1,t(2)),positionX:o(6,0,s(0)),positionY:o(7,0,s(1)),positionZ:o(8,0,s(2)),upX:o(3,0,t(3)),upY:o(4,1,t(4)),upZ:o(5,0,t(5))}})():a;return{get forwardX(){return t},get forwardY(){return e},get forwardZ(){return s},get positionX(){return n},get positionY(){return i},get positionZ(){return r},get upX(){return o},get upY(){return h},get upZ(){return c}}}),$l=new WeakMap,Hl=(wa=yl,ba=Yl,Sa=$l,class extends ws{constructor(t,e){super(t),this._nativeContext=t,ct.set(this,t),Ta(t)&&Sa.set(t,new Set),this._destination=new wa(this,e),this._listener=ba(this,t),this._onstatechange=null}get currentTime(){return this._nativeContext.currentTime}get destination(){return this._destination}get listener(){return this._listener}get onstatechange(){return this._onstatechange}set onstatechange(t){var e="function"==typeof t?ka(this,t):null;this._nativeContext.onstatechange=e;var s=this._nativeContext.onstatechange;this._onstatechange=null!==s&&s===e?t:s}get sampleRate(){return this._nativeContext.sampleRate}get state(){return this._nativeContext.state}}),Jl=(_a=ul,ma=us,ga=Ke,va=ts,ya=es,xa=is,(t,e)=>{const s=t.createOscillator();return Oe(s,e),Ee(s,e,"detune"),Ee(s,e,"frequency"),void 0!==e.periodicWave?s.setPeriodicWave(e.periodicWave):De(s,e,"type"),ma(ga,()=>ga(t))||Re(s),ma(va,()=>va(t))||xa(s,t),ma(ya,()=>ya(t))||qe(s),_a(t,s),s}),Kl=(pa=Jt,()=>{const i=new WeakMap;let r=null,o=null,a=null;return{set periodicWave(t){r=t},set start(t){o=t},set stop(t){a=t},render(t,e){var s=i.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=pa(t);var n=Dt(s,e);if(!n){const la={channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,detune:s.detune.value,frequency:s.frequency.value,periodicWave:null===r?void 0:r,type:s.type};s=ua(e,la),null!==o&&s.start(o),null!==a&&s.stop(a)}return i.set(e,s),n?(await la(e,t.detune,s.detune),await la(e,t.frequency,s.frequency)):(await da(e,t.detune,s.detune),await da(e,t.frequency,s.frequency)),await fa(t,e,s),s})(t,e)}}}),tu=(Jc=Cs,ra=ua=Jl,oa=Kl,ca=ka=rs,class extends Jc{constructor(t,e){var s=aa(t),n={...Ue,...e},i=ra(s,n),r=ha(s),e=r?oa():null,s=t.sampleRate/2;super(t,!1,i,e),this._detune=ia(this,r,i.detune,153600,-153600),this._frequency=ia(this,r,i.frequency,s,-s),this._nativeOscillatorNode=i,this._onended=null,this._oscillatorNodeRenderer=e,null!==this._oscillatorNodeRenderer&&void 0!==n.periodicWave&&(this._oscillatorNodeRenderer.periodicWave=n.periodicWave)}get detune(){return this._detune}get frequency(){return this._frequency}get onended(){return this._onended}set onended(t){var e="function"==typeof t?ca(this,t):null;this._nativeOscillatorNode.onended=e;var s=this._nativeOscillatorNode.onended;this._onended=null!==s&&s===e?t:s}get type(){return this._nativeOscillatorNode.type}set type(t){this._nativeOscillatorNode.type=t,null!==this._oscillatorNodeRenderer&&(this._oscillatorNodeRenderer.periodicWave=null)}setPeriodicWave(t){this._nativeOscillatorNode.setPeriodicWave(t),null!==this._oscillatorNodeRenderer&&(this._oscillatorNodeRenderer.periodicWave=t)}start(t=0){if(this._nativeOscillatorNode.start(t),null!==this._oscillatorNodeRenderer&&(this._oscillatorNodeRenderer.start=t),"closed"!==this.context.state){Tt(this);const t=()=>{this._nativeOscillatorNode.removeEventListener("ended",t),It(this)&&kt(this)};this._nativeOscillatorNode.addEventListener("ended",t)}}stop(t=0){this._nativeOscillatorNode.stop(t),null!==this._oscillatorNodeRenderer&&(this._oscillatorNodeRenderer.stop=t)}}),eu=(na=fl,(t,e)=>{const s=na(t,{buffer:null,channelCount:2,channelCountMode:"max",channelInterpretation:"speakers",loop:!1,loopEnd:0,loopStart:0,playbackRate:1}),n=t.createBuffer(1,2,44100);return s.buffer=n,s.loop=!0,s.connect(e),s.start(),()=>{s.stop(),s.disconnect(e)}}),su=(Ko=be,(r,{curve:t,oversample:e,...s})=>{const o=r.createWaveShaper(),a=r.createWaveShaper();Oe(o,s),Oe(a,s);const h=ta(r,{...s,gain:1}),n=ta(r,{...s,gain:-1}),i=ta(r,{...s,gain:1}),c=ta(r,{...s,gain:-1});let l=null,u=!1,p=null;const d={get bufferSize(){},get channelCount(){return o.channelCount},set channelCount(t){h.channelCount=t,n.channelCount=t,o.channelCount=t,i.channelCount=t,a.channelCount=t,c.channelCount=t},get channelCountMode(){return o.channelCountMode},set channelCountMode(t){h.channelCountMode=t,n.channelCountMode=t,o.channelCountMode=t,i.channelCountMode=t,a.channelCountMode=t,c.channelCountMode=t},get channelInterpretation(){return o.channelInterpretation},set channelInterpretation(t){h.channelInterpretation=t,n.channelInterpretation=t,o.channelInterpretation=t,i.channelInterpretation=t,a.channelInterpretation=t,c.channelInterpretation=t},get context(){return o.context},get curve(){return p},set curve(e){if(null!==e&&e.length<2)throw Ko();if(null===e)o.curve=e,a.curve=e;else{const Jo=e.length,Ko=new Float32Array(Jo+2-Jo%2),ea=new Float32Array(Jo+2-Jo%2);Ko[0]=e[0],ea[0]=-e[Jo-1];const s=Math.ceil((Jo+1)/2),r=(Jo+1)/2-1;for(let t=1;th.addEventListener(t[0],t[1],t[2]),dispatchEvent:(...t)=>h.dispatchEvent(t[0]),removeEventListener:(...t)=>h.removeEventListener(t[0],t[1],t[2])};return null!==t&&(d.curve=t instanceof Float32Array?t:new Float32Array(t)),e!==d.oversample&&(d.oversample=e),sa(Ne(d,i),()=>{h.connect(o).connect(i),h.connect(n).connect(a).connect(c).connect(i),u=!0,ea(p)&&(l=Jo(r,h))},()=>{h.disconnect(o),o.disconnect(i),h.disconnect(n),n.disconnect(a),a.disconnect(c),c.disconnect(i),u=!1,null!==l&&(l(),l=null)})}),nu=(Go=Jo=eu,Qo=be,Zo=su,Xo=ea=$e,$o=bs,Ho=He,(s,t)=>{const n=s.createWaveShaper();if(null!==$o&&"webkitAudioContext"===$o.name&&void 0===s.createGain().gain.automationRate)return Zo(s,t);Oe(n,t);var e=null===t.curve||t.curve instanceof Float32Array?t.curve:new Float32Array(t.curve);if(null!==e&&e.length<2)throw Qo();De(n,{curve:e},"curve"),De(n,t,"oversample");let i=null,r=!1;return Ho(n,"curve",t=>()=>t.call(n),e=>t=>(e.call(n,t),r&&(Xo(t)&&null===i?i=Go(s,n):Xo(t)||null===i||(i(),i=null)),t)),Yo(n,()=>{r=!0,Xo(n.curve)&&(i=Go(s,n))},()=>{r=!1,null!==i&&(i(),i=null)})}),iu=(Io=Zt,Vo=be,jo=ze,Lo=nu,zo=We,Wo=Ht,Bo=Ye,Uo=Yo=sa=Tl,(t,{coneInnerAngle:e,coneOuterAngle:s,coneOuterGain:n,distanceModel:i,maxDistance:r,orientationX:o,orientationY:a,orientationZ:h,panningModel:c,positionX:l,positionY:u,positionZ:p,refDistance:d,rolloffFactor:f,..._})=>{const m=t.createPanner();if(2<_.channelCount)throw zo();if("max"===_.channelCountMode)throw zo();Oe(m,_);const g={channelCount:1,channelCountMode:"explicit",channelInterpretation:"discrete"},v=No(t,{...g,channelInterpretation:"speakers",numberOfInputs:6}),y=Po(t,{..._,gain:1}),x=Po(t,{...g,gain:1}),w=Po(t,{...g,gain:0}),b=Po(t,{...g,gain:0}),T=Po(t,{...g,gain:0}),S=Po(t,{...g,gain:0}),k=Po(t,{...g,gain:0}),A=jo(t,256,6,1),C=Lo(t,{...g,curve:new Float32Array([1,1]),oversample:"none"});let D=[o,a,h],O=[l,u,p];const M=new Float32Array(1);A.onaudioprocess=({inputBuffer:t})=>{const e=[Bo(t,M,0),Bo(t,M,1),Bo(t,M,2)];e.some((t,e)=>t!==D[e])&&(m.setOrientation(...e),D=e);const s=[Bo(t,M,3),Bo(t,M,4),Bo(t,M,5)];s.some((t,e)=>t!==O[e])&&(m.setPosition(...s),O=s)},Object.defineProperty(w.gain,"defaultValue",{get:()=>0}),Object.defineProperty(b.gain,"defaultValue",{get:()=>0}),Object.defineProperty(T.gain,"defaultValue",{get:()=>0}),Object.defineProperty(S.gain,"defaultValue",{get:()=>0}),Object.defineProperty(k.gain,"defaultValue",{get:()=>0});const E={get bufferSize(){},get channelCount(){return m.channelCount},set channelCount(t){if(2y.addEventListener(t[0],t[1],t[2]),dispatchEvent:(...t)=>y.dispatchEvent(t[0]),removeEventListener:(...t)=>y.removeEventListener(t[0],t[1],t[2])};return e!==E.coneInnerAngle&&(E.coneInnerAngle=e),s!==E.coneOuterAngle&&(E.coneOuterAngle=s),n!==E.coneOuterGain&&(E.coneOuterGain=n),i!==E.distanceModel&&(E.distanceModel=i),r!==E.maxDistance&&(E.maxDistance=r),o!==E.orientationX.value&&(E.orientationX.value=o),a!==E.orientationY.value&&(E.orientationY.value=a),h!==E.orientationZ.value&&(E.orientationZ.value=h),c!==E.panningModel&&(E.panningModel=c),l!==E.positionX.value&&(E.positionX.value=l),u!==E.positionY.value&&(E.positionY.value=u),p!==E.positionZ.value&&(E.positionZ.value=p),d!==E.refDistance&&(E.refDistance=d),f!==E.rolloffFactor&&(E.rolloffFactor=f),1===D[0]&&0===D[1]&&0===D[2]||m.setOrientation(...D),0===O[0]&&0===O[1]&&0===O[2]||m.setPosition(...O),Uo(Ne(E,m),()=>{y.connect(m),Io(y,C,0,0),C.connect(x).connect(v,0,0),C.connect(w).connect(v,0,1),C.connect(b).connect(v,0,2),C.connect(T).connect(v,0,3),C.connect(S).connect(v,0,4),C.connect(k).connect(v,0,5),v.connect(A).connect(t.destination)},()=>{y.disconnect(m),Wo(y,C,0,0),C.disconnect(x),x.disconnect(v),C.disconnect(w),w.disconnect(v),C.disconnect(b),b.disconnect(v),C.disconnect(T),T.disconnect(v),C.disconnect(S),S.disconnect(v),C.disconnect(k),k.disconnect(v),v.disconnect(A),A.disconnect(t.destination)})}),ru=(Fo=iu,(t,e)=>{var s=t.createPanner();return void 0===s.orientationX?Fo(t,e):(Oe(s,e),Ee(s,e,"orientationX"),Ee(s,e,"orientationY"),Ee(s,e,"orientationZ"),Ee(s,e,"positionX"),Ee(s,e,"positionY"),Ee(s,e,"positionZ"),De(s,e,"coneInnerAngle"),De(s,e,"coneOuterAngle"),De(s,e,"coneOuterGain"),De(s,e,"distanceModel"),De(s,e,"maxDistance"),De(s,e,"panningModel"),De(s,e,"refDistance"),De(s,e,"rolloffFactor"),s)}),ou=(So=la=dl,ko=No=kl,Ao=El,Co=Po=ta=je,Oo=Jt,Mo=vs,Eo=da=_l,Ro=fa=_s,qo=Gl,()=>{const c=new WeakMap;let l=null;return{render(t,e){var s=c.get(e);return void 0!==s?Promise.resolve(s):(async(t,r)=>{let o=null,e=Oo(t);var a={channelCount:e.channelCount,channelCountMode:e.channelCountMode,channelInterpretation:e.channelInterpretation},h={...a,coneInnerAngle:e.coneInnerAngle,coneOuterAngle:e.coneOuterAngle,coneOuterGain:e.coneOuterGain,distanceModel:e.distanceModel,maxDistance:e.maxDistance,panningModel:e.panningModel,refDistance:e.refDistance,rolloffFactor:e.rolloffFactor},s=Dt(e,r);if("bufferSize"in e)o=Co(r,{...a,gain:1});else if(!s){const So={...h,orientationX:e.orientationX.value,orientationY:e.orientationY.value,orientationZ:e.orientationZ.value,positionX:e.positionX.value,positionY:e.positionY.value,positionZ:e.positionZ.value};e=Do(r,So)}if(c.set(r,null===o?e:o),null===o)return s?(await So(r,t.orientationX,e.orientationX),await So(r,t.orientationY,e.orientationY),await So(r,t.orientationZ,e.orientationZ),await So(r,t.positionX,e.positionX),await So(r,t.positionY,e.positionY),await So(r,t.positionZ,e.positionZ)):(await Eo(r,t.orientationX,e.orientationX),await Eo(r,t.orientationY,e.orientationY),await Eo(r,t.orientationZ,e.orientationZ),await Eo(r,t.positionX,e.positionX),await Eo(r,t.positionY,e.positionY),await Eo(r,t.positionZ,e.positionZ)),Qt(e)?await Ro(t,r,e.inputs[0]):await Ro(t,r,e),e;{if(null===l){if(null===Mo)throw new Error("Missing the native OfflineAudioContext constructor.");const So=new Mo(6,t.context.length,r.sampleRate),Co=ko(So,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"speakers",numberOfInputs:6});Co.connect(So.destination),l=(async()=>{const e=await Promise.all([t.orientationX,t.orientationY,t.orientationZ,t.positionX,t.positionY,t.positionZ].map(async(t,e)=>{e=Ao(So,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"discrete",offset:0===e?1:0});return await Eo(So,t,e.offset),e}));for(let t=0;t<6;t+=1)e[t].connect(Co,0,t),e[t].start(0);return qo(So)})()}const So=await l,Oo=Co(r,{...a,gain:1});await Ro(t,r,Oo);const c=[];for(let t=0;tt!==s[e])||Ao.some((t,e)=>t!==n[e])){s=So,n=Ao;const Mo=t/r.sampleRate;e.gain.setValueAtTime(0,Mo),e=Co(r,{...a,gain:0}),i=Do(r,{...h,orientationX:s[0],orientationY:s[1],orientationZ:s[2],positionX:n[0],positionY:n[1],positionZ:n[2]}),e.gain.setValueAtTime(1,Mo),Oo.connect(e).connect(i.inputs[0]),i.connect(o)}}return o}})(t,e)}}}),au=(Jc=Cs,vo=ia=gl,yo=Do=ru,xo=ou,bo=ha=Ta=ys,To=wl,class extends Jc{constructor(t,e){var s=wo(t),e={...Ge,...e},e=yo(s,e),s=bo(s);super(t,!1,e,s?xo():null),this._nativePannerNode=e,this._orientationX=vo(this,s,e.orientationX,Ft,qt),this._orientationY=vo(this,s,e.orientationY,Ft,qt),this._orientationZ=vo(this,s,e.orientationZ,Ft,qt),this._positionX=vo(this,s,e.positionX,Ft,qt),this._positionY=vo(this,s,e.positionY,Ft,qt),this._positionZ=vo(this,s,e.positionZ,Ft,qt),To(this,1)}get coneInnerAngle(){return this._nativePannerNode.coneInnerAngle}set coneInnerAngle(t){this._nativePannerNode.coneInnerAngle=t}get coneOuterAngle(){return this._nativePannerNode.coneOuterAngle}set coneOuterAngle(t){this._nativePannerNode.coneOuterAngle=t}get coneOuterGain(){return this._nativePannerNode.coneOuterGain}set coneOuterGain(t){this._nativePannerNode.coneOuterGain=t}get distanceModel(){return this._nativePannerNode.distanceModel}set distanceModel(t){this._nativePannerNode.distanceModel=t}get maxDistance(){return this._nativePannerNode.maxDistance}set maxDistance(t){this._nativePannerNode.maxDistance=t}get orientationX(){return this._orientationX}get orientationY(){return this._orientationY}get orientationZ(){return this._orientationZ}get panningModel(){return this._nativePannerNode.panningModel}set panningModel(t){this._nativePannerNode.panningModel=t}get positionX(){return this._positionX}get positionY(){return this._positionY}get positionZ(){return this._positionZ}get refDistance(){return this._nativePannerNode.refDistance}set refDistance(t){this._nativePannerNode.refDistance=t}get rolloffFactor(){return this._nativePannerNode.rolloffFactor}set rolloffFactor(t){this._nativePannerNode.rolloffFactor=t}}),hu=(go=Mt,(t,{disableNormalization:e,imag:s,real:n})=>{var i=s instanceof Float32Array?s:new Float32Array(s),n=n instanceof Float32Array?n:new Float32Array(n),e=t.createPeriodicWave(n,i,{disableNormalization:e});if(Array.from(s).length<2)throw go();return e}),cu=(po=hu,fo=wo=aa=gs,_o=new WeakSet,class mo{constructor(t,e){t=fo(t),e=(t=>{var{imag:e,real:s}=t;return void 0===e?void 0===s?{...t,imag:[0,0],real:[0,0]}:{...t,imag:Array.from(s,()=>0),real:s}:void 0===s?{...t,imag:e,real:Array.from(e,()=>0)}:{...t,imag:e,real:s}})({...Qe,...e}),e=po(t,e);return _o.add(e),e}static[Symbol.hasInstance](t){return null!==t&&"object"==typeof t&&Object.getPrototypeOf(t)===mo.prototype||_o.has(t)}}),lu=((u,y,x,w,p,d)=>{const b=16385,T=new Float32Array([1,1]),S=Math.PI/2,k={channelCount:1,channelCountMode:"explicit",channelInterpretation:"discrete"},A={...k,oversample:"none"},f=(t,e,s,n,i)=>{if(1===e)return((t,e,s,n)=>{const i=new Float32Array(b),r=new Float32Array(b);for(let t=0;t{const i=new Float32Array(b),r=new Float32Array(b),o=new Float32Array(b),a=new Float32Array(b),h=Math.floor(8192.5);for(let t=0;th){const y=(t-h)/(16384-h)*S;i[t]=Math.cos(y),r[t]=Math.sin(y),o[t]=0,a[t]=1}else{const y=t/(16384-h)*S;i[t]=1,r[t]=0,o[t]=Math.cos(y),a[t]=Math.sin(y)}const c=y(t,{channelCount:2,channelCountMode:"explicit",channelInterpretation:"discrete",numberOfOutputs:2}),l=x(t,{...k,gain:0}),u=w(t,{...A,curve:i}),p=x(t,{...k,gain:0}),d=w(t,{...A,curve:r}),f=w(t,{...A,curve:T}),_=x(t,{...k,gain:0}),m=w(t,{...A,curve:o}),g=x(t,{...k,gain:0}),v=w(t,{...A,curve:a});return{connectGraph(){e.connect(c),e.connect(void 0===f.inputs?f:f.inputs[0]),c.connect(l,0),c.connect(p,0),c.connect(_,1),c.connect(g,1),f.connect(s),s.connect(void 0===u.inputs?u:u.inputs[0]),s.connect(void 0===d.inputs?d:d.inputs[0]),s.connect(void 0===m.inputs?m:m.inputs[0]),s.connect(void 0===v.inputs?v:v.inputs[0]),u.connect(l.gain),d.connect(p.gain),m.connect(_.gain),v.connect(g.gain),l.connect(n,0,0),_.connect(n,0,0),p.connect(n,0,1),g.connect(n,0,1)},disconnectGraph(){e.disconnect(c),e.disconnect(void 0===f.inputs?f:f.inputs[0]),c.disconnect(l,0),c.disconnect(p,0),c.disconnect(_,1),c.disconnect(g,1),f.disconnect(s),s.disconnect(void 0===u.inputs?u:u.inputs[0]),s.disconnect(void 0===d.inputs?d:d.inputs[0]),s.disconnect(void 0===m.inputs?m:m.inputs[0]),s.disconnect(void 0===v.inputs?v:v.inputs[0]),u.disconnect(l.gain),d.disconnect(p.gain),m.disconnect(_.gain),v.disconnect(g.gain),l.disconnect(n,0,0),_.disconnect(n,0,0),p.disconnect(n,0,1),g.disconnect(n,0,1)}}})(t,s,n,i);throw p()};return(e,{channelCount:t,channelCountMode:s,pan:n,...i})=>{if("max"===s)throw p();const r=u(e,{...i,channelCount:1,channelCountMode:s,numberOfInputs:2}),o=x(e,{...i,channelCount:t,channelCountMode:s,gain:1}),a=x(e,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"discrete",gain:n});let{connectGraph:h,disconnectGraph:c}=f(e,t,o,a,r);Object.defineProperty(a.gain,"defaultValue",{get:()=>0}),Object.defineProperty(a.gain,"maxValue",{get:()=>1}),Object.defineProperty(a.gain,"minValue",{get:()=>-1});t={get bufferSize(){},get channelCount(){return o.channelCount},set channelCount(t){o.channelCount!==t&&(l&&c(),{connectGraph:h,disconnectGraph:c}=f(e,t,o,a,r),l&&h()),o.channelCount=t},get channelCountMode(){return o.channelCountMode},set channelCountMode(t){if("clamped-max"===t||"max"===t)throw p();o.channelCountMode=t},get channelInterpretation(){return o.channelInterpretation},set channelInterpretation(t){o.channelInterpretation=t},get context(){return o.context},get inputs(){return[o]},get numberOfInputs(){return o.numberOfInputs},get numberOfOutputs(){return o.numberOfOutputs},get pan(){return a.gain},addEventListener:(...t)=>o.addEventListener(t[0],t[1],t[2]),dispatchEvent:(...t)=>o.dispatchEvent(t[0]),removeEventListener:(...t)=>o.removeEventListener(t[0],t[1],t[2])};let l=!1;return d(Ne(t,r),()=>{h(),l=!0},()=>{c(),l=!1})}})(kl,Ve,je,nu,We,Tl),uu=(lo=lu,uo=We,(t,e)=>{const s=e.channelCountMode;if("clamped-max"===s)throw uo();if(void 0===t.createStereoPanner)return lo(t,e);t=t.createStereoPanner();return Oe(t,e),Ee(t,e,"pan"),Object.defineProperty(t,"channelCountMode",{get:()=>s,set:t=>{if(t!==s)throw uo()}}),t}),pu=(ro=dl,ao=Jt,ho=_l,()=>{const i=new WeakMap;return{render(t,e){var s=i.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=ao(t);var n=Dt(s,e);if(!n){const ro={channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,pan:s.pan.value};s=oo(e,ro)}return i.set(e,s),n?await ro(e,t.pan,s.pan):await ho(e,t.pan,s.pan),Qt(s)?await co(t,e,s.inputs[0]):await co(t,e,s),s})(t,e)}}}),du=(Jc=Cs,to=gl,eo=oo=uu,so=pu,class extends Jc{constructor(t,e){var s=no(t),e={...Ze,...e},e=eo(s,e),s=io(s);super(t,!1,e,s?so():null),this._pan=to(this,s,e.pan)}get pan(){return this._pan}}),fu=(Jr=Jt,Kr=co=_s,()=>{const n=new WeakMap;return{render(t,e){var s=n.get(e);return void 0!==s?Promise.resolve(s):(async(t,e)=>{let s=Jr(t);if(!Dt(s,e)){const Jr={channelCount:s.channelCount,channelCountMode:s.channelCountMode,channelInterpretation:s.channelInterpretation,curve:s.curve,oversample:s.oversample};s=Hr(e,Jr)}return n.set(e,s),Qt(s)?await Kr(t,e,s.inputs[0]):await Kr(t,e,s),s})(t,e)}}}),_u=(Jc=Cs,Gr=be,Qr=Hr=nu,Zr=fu,Xr=no=gs,Yr=io=ys,$r=wl,class extends Jc{constructor(t,e){var s=Xr(t),e={...Xe,...e},e=Qr(s,e);super(t,!0,e,Yr(s)?Zr():null),this._isCurveNullified=!1,this._nativeWaveShaperNode=e,$r(this,1)}get curve(){return this._isCurveNullified?null:this._nativeWaveShaperNode.curve}set curve(t){if(null===t)this._isCurveNullified=!0,this._nativeWaveShaperNode.curve=new Float32Array([0,0]);else{if(t.length<2)throw Gr();this._isCurveNullified=!1,this._nativeWaveShaperNode.curve=t}}get oversample(){return this._nativeWaveShaperNode.oversample}set oversample(t){this._nativeWaveShaperNode.oversample=t}}),mu=null!==(Jc=ps)&&Jc.isSecureContext,gu=(Ur=ps,(t,e,s)=>{Object.defineProperties(Ur,{currentFrame:{configurable:!0,get:()=>Math.round(t*e)},currentTime:{configurable:!0,get:()=>t}});try{return s()}finally{null!==Ur&&(delete Ur.currentFrame,delete Ur.currentTime)}}),vu=new WeakMap,yu=(Wr=vu,Br=vs,t=>{let e=Wr.get(t);if(void 0!==e)return e;if(null===Br)throw new Error("Missing the native OfflineAudioContext constructor.");return e=new Br(1,1,44100),Wr.set(t,e),e}),xu=mu?((r,o,a,l,u,p,d,f,_,m,g,v,y)=>{let x=0;return(e,s,h={credentials:"omit"})=>{const t=g.get(e);if(void 0!==t&&t.has(s))return Promise.resolve();const n=m.get(e);if(void 0!==n){const r=n.get(s);if(void 0!==r)return r}const c=p(e),i=void 0===c.audioWorklet?u(s).then(([t,e])=>{var[t,e]=mt(t,e);return a(`${t};((a,b)=>{(a[b]=a[b]||[]).push((AudioWorkletProcessor,global,registerProcessor,sampleRate,self,window)=>{${e}\n})})(window,'_AWGS')`)}).then(()=>{const t=y._AWGS.pop();if(void 0===t)throw new SyntaxError;l(c.currentTime,c.sampleRate,()=>t(class{},void 0,(t,e)=>{if(""===t.trim())throw o();const s=pt.get(c);if(void 0!==s){if(s.has(t))throw o();vt(e),gt(e.parameterDescriptors),s.set(t,e)}else vt(e),gt(e.parameterDescriptors),pt.set(c,new Map([[t,e]]))},c.sampleRate,void 0,void 0))}):Promise.all([u(s),Promise.resolve(r(v,v))]).then(([[t,e],s])=>{const n=x+1;x=n;const[i,r]=mt(t,e),o=new Blob([`${i};((AudioWorkletProcessor,registerProcessor)=>{${r}\n})(${s?"AudioWorkletProcessor":"class extends AudioWorkletProcessor {__b=new WeakSet();constructor(){super();(p=>p.postMessage=(q=>(m,t)=>q.call(p,m,t?t.filter(u=>!this.__b.has(u)):t))(p.postMessage))(this.port)}}"},(n,p)=>registerProcessor(n,class extends p{${s?"":"__c = (a) => a.forEach(e=>this.__b.add(e.buffer));"}process(i,o,p){${s?"":"i.forEach(this.__c);o.forEach(this.__c);this.__c(Object.values(p));"}return super.process(i.map(j=>j.some(k=>k.length===0)?[]:j),o,p)}}));registerProcessor('__sac${n}',class extends AudioWorkletProcessor{process(){return !1}})`],{type:"application/javascript; charset=utf-8"}),a=URL.createObjectURL(o);return c.audioWorklet.addModule(a,h).then(()=>{if(f(c))return c;const t=d(c);return t.audioWorklet.addModule(a,h).then(()=>t)}).then(t=>{if(null===_)throw new SyntaxError;try{new _(t,`__sac${n}`)}catch{throw new SyntaxError}}).finally(()=>URL.revokeObjectURL(a))});return void 0===n?m.set(e,new Map([[s,i]])):n.set(s,i),i.then(()=>{const t=g.get(e);void 0===t?g.set(e,new Set([s])):t.add(s)}).finally(()=>{const t=m.get(e);void 0!==t&&t.delete(s)}),i}})(us,We,(zr=ps,i=>new Promise((t,r)=>{if(null!==zr){const e=zr.document.head;if(null===e)r(new SyntaxError);else{const s=zr.document.createElement("script"),n=new Blob([i],{type:"application/javascript"}),o=URL.createObjectURL(n),a=zr.onerror,h=()=>{zr.onerror=a,URL.revokeObjectURL(o)};zr.onerror=(t,e,s,n,i)=>e===o||e===zr.location.href&&1===s&&1===n?(h(),r(i),!1):null!==a?a(t,e,s,n,i):void 0,s.onerror=()=>{h(),r(new SyntaxError)},s.onload=()=>{h(),t()},s.src=o,s.type="module",e.appendChild(s)}}else r(new SyntaxError)})),gu,async t=>{try{const e=await fetch(t);if(e.ok)return[await e.text(),e.url]}catch{}throw new DOMException("","AbortError")},gs,yu,ys,As,new WeakMap,new WeakMap,(jr=As,Lr=vs,async()=>{if(null===jr)return!0;if(null===Lr)return!1;const t=new Blob(['class A extends AudioWorkletProcessor{process(i){this.port.postMessage(i,[i[0][0].buffer])}}registerProcessor("a",A)'],{type:"application/javascript; charset=utf-8"}),e=new Lr(1,128,44100),s=URL.createObjectURL(t);let n=!1,i=!1;try{await e.audioWorklet.addModule(s);const Lr=new jr(e,"a",{numberOfOutputs:0}),t=e.createOscillator();Lr.port.onmessage=()=>n=!0,Lr.onprocessorerror=()=>i=!0,t.connect(Lr),t.start(0),await e.startRendering()}catch{}finally{URL.revokeObjectURL(s)}return n&&!i}),ps):void 0,wu=(Nr=Ts,Pr=ys,t=>Nr(t)||Pr(t)),bu=(Dr=al,Or=us,Mr=new WeakSet,Rr=wu,qr=Ot,Fr=Ce,Ir=hl,Vr=cl,(t,r)=>{const o=Rr(t)?t:Er(t);if(Mr.has(r)){const Dr=new DOMException("","DataCloneError");return Promise.reject(Dr)}try{Mr.add(r)}catch{}return Or(Fr,()=>Fr(o))?o.decodeAudioData(r).then(t=>(ge(r).catch(()=>{}),Or(qr,()=>qr(t))||Vr(t),Dr.add(t),t)):new Promise((e,s)=>{const n=async()=>{try{await ge(r)}catch{}},i=t=>{s(t),n()};try{o.decodeAudioData(r,t=>{"function"!=typeof t.copyFromChannel&&(Ir(t),Et(t)),Dr.add(t),n().then(()=>e(t))},t=>{i(null===t?new DOMException("","EncodingError"):t)})}catch(t){i(t)}})}),Tu=(cr=xu,lr=ol,ur=ll,pr=vl,dr=bl,fr=Cl,_r=Ol,mr=ql,gr=Vl,vr=bu,yr=Pl,xr=zl,wr=Bl,br=Xl,Tr=tu,Sr=au,kr=cu,Ar=du,Cr=_u,class extends Hl{constructor(t,e){super(t,e),this._nativeContext=t,this._audioWorklet=void 0===cr?void 0:{addModule:(t,e)=>cr(this,t,e)}}get audioWorklet(){return this._audioWorklet}createAnalyser(){return new lr(this)}createBiquadFilter(){return new dr(this)}createBuffer(t,e,s){return new ur({length:e,numberOfChannels:t,sampleRate:s})}createBufferSource(){return new pr(this)}createChannelMerger(t=6){return new fr(this,{numberOfInputs:t})}createChannelSplitter(t=6){return new _r(this,{numberOfOutputs:t})}createConstantSource(){return new mr(this)}createConvolver(){return new gr(this)}createDelay(t=1){return new yr(this,{maxDelayTime:t})}createDynamicsCompressor(){return new xr(this)}createGain(){return new wr(this)}createIIRFilter(t,e){return new br(this,{feedback:e,feedforward:t})}createOscillator(){return new Tr(this)}createPanner(){return new Sr(this)}createPeriodicWave(t,e,s={disableNormalization:!1}){return new kr(this,{...s,imag:e,real:t})}createStereoPanner(){return new Ar(this)}createWaveShaper(){return new Cr(this)}decodeAudioData(t,e,s){return vr(this._nativeContext,t).then(t=>("function"==typeof e&&e(t),t),t=>{throw"function"==typeof s&&s(t),t})}}),Su=class extends Cs{constructor(t,e){const s=ar(t),n=s.createMediaElementSource(e.mediaElement);if(hr(s))throw TypeError();super(t,!0,n,null),this._nativeMediaElementAudioSourceNode=n}get mediaElement(){return this._nativeMediaElementAudioSourceNode.mediaElement}},ku=class extends Cs{constructor(t,e){var s=rr(t);if(or(s))throw new TypeError;e=((t,e)=>{t=t.createMediaStreamDestination();return Oe(t,e),1===t.numberOfOutputs&&Object.defineProperty(t,"numberOfOutputs",{get:()=>0}),t})(s,{...Ae,...e});super(t,!1,e,null),this._nativeMediaStreamAudioDestinationNode=e}get stream(){return this._nativeMediaStreamAudioDestinationNode.stream}},Au=class extends Cs{constructor(t,e){var s=nr(t),e=((t,{mediaStream:e})=>{const s=e.getAudioTracks();s.sort((t,e)=>t.ide.id?1:0);var n=s.slice(0,1),n=t.createMediaStreamSource(new MediaStream(n));return Object.defineProperty(n,"mediaStream",{value:e}),n})(s,e);if(ir(s))throw new TypeError;super(t,!0,e,null),this._nativeMediaStreamAudioSourceNode=e}get mediaStream(){return this._nativeMediaStreamAudioSourceNode.mediaStream}},Cu=(er=be,sr=ir=or=hr=ys,(t,{mediaStreamTrack:e})=>{if("function"==typeof t.createMediaStreamTrackSource)return t.createMediaStreamTrackSource(e);var s=new MediaStream([e]),s=t.createMediaStreamSource(s);if("audio"!==e.kind)throw er();if(sr(t))throw new TypeError;return s}),Du=(ol=Cs,Ki=Cu,tr=nr=rr=ar=Er=gs,class extends ol{constructor(t,e){var s=tr(t);super(t,!0,Ki(s,e),null)}}),Ou=(ol=Tu,Gi=be,Qi=We,Zi=()=>new DOMException("","UnknownError"),Xi=Su,Yi=ku,$i=Au,Hi=Du,Ji=bs,class extends ol{constructor(t={}){if(null===Ji)throw new Error("Missing the native AudioContext constructor.");let e;try{e=new Ji(t)}catch(t){if(12===t.code&&"sampleRate is not in range"===t.message)throw Qi();throw t}if(null===e)throw Zi();if(void 0!==(n=t.latencyHint)&&"number"!=typeof n&&("string"!=typeof n||"balanced"!==n&&"interactive"!==n&&"playback"!==n))throw new TypeError(`The provided value '${t.latencyHint}' is not a valid enum value of type AudioContextLatencyCategory.`);if(void 0!==t.sampleRate&&e.sampleRate!==t.sampleRate)throw Qi();super(e,2);var s=t["latencyHint"],n=e["sampleRate"];if(this._baseLatency="number"==typeof e.baseLatency?e.baseLatency:"balanced"===s?512/n:"interactive"===s||void 0===s?256/n:"playback"===s?1024/n:128*Math.max(2,Math.min(128,Math.round(s*n/128)))/n,this._nativeAudioContext=e,"webkitAudioContext"===Ji.name?(this._nativeGainNode=e.createGain(),this._nativeOscillatorNode=e.createOscillator(),this._nativeGainNode.gain.value=1e-37,this._nativeOscillatorNode.connect(this._nativeGainNode).connect(e.destination),this._nativeOscillatorNode.start()):(this._nativeGainNode=null,this._nativeOscillatorNode=null),this._state=null,"running"===e.state){this._state="suspended";const t=()=>{"suspended"===this._state&&(this._state=null),e.removeEventListener("statechange",t)};e.addEventListener("statechange",t)}}get baseLatency(){return this._baseLatency}get state(){return null!==this._state?this._state:this._nativeAudioContext.state}close(){return"closed"===this.state?this._nativeAudioContext.close().then(()=>{throw Gi()}):("suspended"===this._state&&(this._state=null),this._nativeAudioContext.close().then(()=>{null!==this._nativeGainNode&&null!==this._nativeOscillatorNode&&(this._nativeOscillatorNode.stop(),this._nativeGainNode.disconnect(),this._nativeOscillatorNode.disconnect()),Lt(this)}))}createMediaElementSource(t){return new Xi(this,{mediaElement:t})}createMediaStreamDestination(){return new Yi(this)}createMediaStreamSource(t){return new $i(this,{mediaStream:t})}createMediaStreamTrackSource(t){return new Hi(this,{mediaStreamTrack:t})}resume(){return"suspended"===this._state?new Promise((t,e)=>{const s=()=>{this._nativeAudioContext.removeEventListener("statechange",s),"running"===this._nativeAudioContext.state?t():this.resume().then(t,e)};this._nativeAudioContext.addEventListener("statechange",s)}):this._nativeAudioContext.resume().catch(t=>{if(void 0===t||15===t.code)throw Gi();throw t})}suspend(){return this._nativeAudioContext.suspend().catch(t=>{if(void 0===t)throw Gi();throw t})}}),Mu=(Ui=$l,t=>{t=Ui.get(t);if(void 0===t)throw new Error("The context has no set of AudioWorkletNodes.");return t}),Eu=(t,e)=>{Bi(t).add(e)},Ru=(Wi=Mt,(t,e,s=0,n=0)=>{const i=t[s];if(void 0===i)throw Wi();return ie(e)?i.connect(e,0,n):i.connect(e,0)}),qu=(zi=Bi=Mu,(t,e)=>{zi(t).delete(e)}),Fu=(Li=Mt,(t,e,s,n=0)=>void 0===e?t.forEach(t=>t.disconnect()):"number"==typeof e?ye(Li,t,e).disconnect():ie(e)?void 0===s?t.forEach(t=>t.disconnect(e)):void 0===n?ye(Li,t,s).disconnect(e,0):ye(Li,t,s).disconnect(e,0,n):void 0===s?t.forEach(t=>t.disconnect(e)):ye(Li,t,s).disconnect(e,0)),Iu=new WeakMap,Vu=(Pi=Iu,ji=yt,t=>ji(Pi,t)),Nu=(Ai=Mt,Ci=be,Ri=ze,Vi=Vu,(o,t,e,a)=>{if(0===a.numberOfInputs&&0===a.numberOfOutputs)throw qi();const h=Array.isArray(a.outputChannelCount)?a.outputChannelCount:Array.from(a.outputChannelCount);if(h.some(t=>t<1))throw qi();if(h.length!==a.numberOfOutputs)throw Ai();if("explicit"!==a.channelCountMode)throw qi();const c=a.channelCount*a.numberOfInputs,s=h.reduce((t,e)=>t+e,0),n=void 0===e.parameterDescriptors?0:e.parameterDescriptors.length;if(6void 0===ki?0:ki},maxValue:{get:()=>void 0===Ai?Ft:Ai},minValue:{get:()=>void 0===Ci?qt:Ci}}),p.push(Oi)}const d=Di(o,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"speakers",numberOfInputs:Math.max(1,c+n)}),f=Fe(t,o.sampleRate),_=Ri(o,f,c+n,Math.max(1,s)),r=Oi(o,{channelCount:Math.max(1,s),channelCountMode:"explicit",channelInterpretation:"discrete",numberOfOutputs:Math.max(1,s)}),m=[];for(let t=0;t{const s=p[e];return s.connect(d,0,c+e),s.start(0),[t,s.offset]}));d.connect(_);let v=a.channelInterpretation,y=null;const x=0===a.numberOfOutputs?[_]:m,w={get bufferSize(){return f},get channelCount(){return a.channelCount},set channelCount(t){throw Ci()},get channelCountMode(){return a.channelCountMode},set channelCountMode(t){throw Ci()},get channelInterpretation(){return v},set channelInterpretation(t){for(const e of l)e.channelInterpretation=t;v=t},get context(){return _.context},get inputs(){return l},get numberOfInputs(){return a.numberOfInputs},get numberOfOutputs(){return a.numberOfOutputs},get onprocessorerror(){return y},set onprocessorerror(t){"function"==typeof y&&w.removeEventListener("processorerror",y),y="function"==typeof t?t:null,"function"==typeof y&&w.addEventListener("processorerror",y)},get parameters(){return g},get port(){return i.port2},addEventListener:(...t)=>_.addEventListener(t[0],t[1],t[2]),connect:ki.bind(null,x),disconnect:Fi.bind(null,x),dispatchEvent:(...t)=>_.dispatchEvent(t[0]),removeEventListener:(...t)=>_.removeEventListener(t[0],t[1],t[2])},b=new Map;var T,S;i.port1.addEventListener=(T=i.port1.addEventListener,(...t)=>{if("message"===t[0]){const s="function"==typeof t[1]?t[1]:"object"==typeof t[1]&&null!==t[1]&&"function"==typeof t[1].handleEvent?t[1].handleEvent:null;var e;null!==s&&(void 0!==(e=b.get(t[1]))?t[1]=e:(t[1]=t=>{Ii(o.currentTime,o.sampleRate,()=>s(t))},b.set(s,t[1])))}return T.call(i.port1,t[0],t[1],t[2])}),i.port1.removeEventListener=(S=i.port1.removeEventListener,(...t)=>{var e;return"message"!==t[0]||void 0!==(e=b.get(t[1]))&&(b.delete(t[1]),t[1]=e),S.call(i.port1,t[0],t[1],t[2])});let k=null;Object.defineProperty(i.port1,"onmessage",{get:()=>k,set:t=>{"function"==typeof k&&i.port1.removeEventListener("message",k),k="function"==typeof t?t:null,"function"==typeof k&&(i.port1.addEventListener("message",k),i.port1.start())}}),e.prototype.port=i.port1;let A=null;const C=((t,e,s,n)=>{let i=dt.get(t);void 0===i&&(i=new WeakMap,dt.set(t,i));t=(async()=>{var t;return new s((t=n,await new Promise((e,s)=>{const{port1:n,port2:i}=new MessageChannel;n.onmessage=({data:t})=>{n.close(),i.close(),e(t)},n.onmessageerror=({data:t})=>{n.close(),i.close(),s(t)},i.postMessage(t)})))})();return i.set(e,t),t})(o,w,e,a);C.then(t=>A=t);const D=ue(a.numberOfInputs,a.channelCount),O=ue(a.numberOfOutputs,h),M=void 0===e.parameterDescriptors?[]:e.parameterDescriptors.reduce((t,{name:e})=>({...t,[e]:new Float32Array(128)}),{});let E=!0;const R=()=>{0{if(null!==A){const r=Vi(w);for(let n=0;n{ce(s,M,t,c+e,n)});for(let e=0;e{if(0t.every(t=>0===t))&&(1===s?q.delete(e):q.set(e,s-1)),t)}),t=Ii(o.currentTime+n/o.sampleRate,o.sampleRate,()=>A.process(s,O,M));E=t;for(let e=0,s=0;e_.connect(I).connect(o.destination),N=()=>{_.disconnect(I),I.disconnect()};return V(),Ni(w,()=>{if(E){N(),0{E&&(V(),R()),F=!1})}),Pu=(xi=be,wi=Nu,Ti=qi=We,Si=Ni=Tl,(t,e,s,n,i,r)=>{if(null!==s)try{const wi=new s(t,n,r),Ti=new Map;let e=null;if(Object.defineProperties(wi,{channelCount:{get:()=>r.channelCount,set:()=>{throw xi()}},channelCountMode:{get:()=>"explicit",set:()=>{throw xi()}},onprocessorerror:{get:()=>e,set:t=>{"function"==typeof e&&wi.removeEventListener("processorerror",e),e="function"==typeof t?t:null,"function"==typeof e&&wi.addEventListener("processorerror",e)}}}),wi.addEventListener=(a=wi.addEventListener,(...e)=>{if("processorerror"===e[0]){const wi="function"==typeof e[1]?e[1]:"object"==typeof e[1]&&null!==e[1]&&"function"==typeof e[1].handleEvent?e[1].handleEvent:null;var t;null!==wi&&(void 0!==(t=Ti.get(e[1]))?e[1]=t:(e[1]=t=>{"error"===t.type?(Object.defineProperties(t,{type:{value:"processorerror"}}),wi(t)):wi(new ErrorEvent(e[0],{...t}))},Ti.set(wi,e[1])))}return a.call(wi,"error",e[1],e[2]),a.call(wi,...e)}),wi.removeEventListener=(o=wi.removeEventListener,(...t)=>{if("processorerror"===t[0]){const wi=Ti.get(t[1]);void 0!==wi&&(Ti.delete(t[1]),t[1]=wi)}return o.call(wi,"error",t[1],t[2]),o.call(wi,t[0],t[1],t[2])}),0===r.numberOfOutputs)return wi;{const xi=bi(t,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"discrete",gain:0});return wi.connect(xi).connect(t.destination),Si(wi,()=>xi.disconnect(),()=>xi.connect(t.destination))}}catch(t){if(11===t.code)throw Ti();throw t}var o,a;if(void 0===i)throw Ti();return(t=>{const e=(new MessageChannel)["port1"];try{e.postMessage(t)}finally{e.close()}})(r),wi(t,e,i,r)}),ju=(ii=dl,ri=ki=Ru,oi=fl,ai=Di=kl,hi=Oi=Ve,ci=Mi=El,li=bi=Ei=je,ui=qu,pi=Fi=Fu,di=Ii=gu,fi=Jt,_i=As,mi=vs,gi=_l,vi=_s,yi=Gl,(r,a,h)=>{const c=new WeakMap;let l=null;return{render(t,e){ui(e,t);var s=c.get(e);return void 0!==s?Promise.resolve(s):(async(o,e)=>{let t=fi(o),s=null;const n=Dt(t,e),i=Array.isArray(a.outputChannelCount)?a.outputChannelCount:Array.from(a.outputChannelCount);if(null===_i){const ii=i.reduce((t,e)=>t+e,0),oi=hi(e,{channelCount:Math.max(1,ii),channelCountMode:"explicit",channelInterpretation:"discrete",numberOfOutputs:Math.max(1,ii)}),ci=[];for(let t=0;t{const s=new mi(oi,128*Math.ceil(o.context.length/128),e.sampleRate),n=[],i=[];for(let t=0;t{var e=ci(s,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"discrete",offset:t.value});return await gi(s,t,e.offset),e})),r=ai(s,{channelCount:1,channelCountMode:"explicit",channelInterpretation:"speakers",numberOfInputs:Math.max(1,ii+ri)});for(let e=0;evi(o,s,t))),yi(s)};l=(async(t,s,e,i,r,o,a)=>{const h=null===s?128*Math.ceil(t.context.length/128):s.length,c=i.channelCount*i.numberOfInputs,n=r.reduce((t,e)=>t+e,0),l=0===n?null:e.createBuffer(n,h,e.sampleRate);if(void 0===o)throw new Error("Missing the processor constructor.");const u=Nt(t),p=await((t,e)=>{t=yt(dt,t),e=Jt(e);return yt(t,e)})(e,t),d=ue(i.numberOfInputs,i.channelCount),f=ue(i.numberOfOutputs,r),_=Array.from(t.parameters.keys()).reduce((t,e)=>({...t,[e]:new Float32Array(128)}),{});for(let n=0;n{ce(s,_,t,c+e,n)});for(let e=0;e0===u.activeInputs[e].size?[]:t),s=a(n/e.sampleRate,e.sampleRate,()=>p.process(t,f,_));if(null!==l)for(let e=0,s=0;eni.get(t)),zu=(si=Iu,(t,e)=>{si.set(t,e)}),Wu=mu?(Gn=Eu,Qn=gl,Zn=ju,Xn=Pu,Yn=Nt,$n=Lu,Hn=gs,Jn=ys,Kn=As,ti=zu,ei=rs,class extends Cs{constructor(t,e,s){var n;const i=Hn(t),r=Jn(i),o={...s={...he,...s},outputChannelCount:void 0!==s.outputChannelCount?s.outputChannelCount:1===s.numberOfInputs&&1===s.numberOfOutputs?[s.channelCount]:Array.from({length:s.numberOfOutputs},()=>1)};(t=>{const{port1:e,port2:s}=new MessageChannel;try{e.postMessage(t)}finally{e.close(),s.close()}})(o);const a=pt.get(i),h=null==a?void 0:a.get(e),c=!r&&"closed"===i.state&&null!==(n=$n(i))&&void 0!==n?n:i,l=Xn(c,r?null:t.baseLatency,Kn,e,h,o);super(t,!0,l,r?Zn(e,o,h):null);const u=[];l.parameters.forEach((t,e)=>{t=Qn(this,r,t);u.push([e,t])}),this._nativeAudioWorkletNode=l,this._onprocessorerror=null,this._parameters=new ae(u),r&&Gn(i,this);var e=Yn(this)["activeInputs"];ti(l,e)}get onprocessorerror(){return this._onprocessorerror}set onprocessorerror(t){var e="function"==typeof t?ei(this,t):null;this._nativeAudioWorkletNode.onprocessorerror=e;var s=this._nativeAudioWorkletNode.onprocessorerror;this._onprocessorerror=null!==s&&s===e?t:s}get parameters(){return null===this._parameters?this._nativeAudioWorkletNode.parameters:this._parameters}get port(){return this._nativeAudioWorkletNode.port}}):void 0,Bu=(Bn=We,Un=vs,(t,e,s)=>{if(null===Un)throw new Error("Missing the native OfflineAudioContext constructor.");try{return new Un(t,e,s)}catch(t){if("SyntaxError"===t.name)throw Bn();throw t}}),Uu=(In=al,Vn=us,Nn=fs,Pn=Mu,jn=Gl,Ln=Ot,zn=hl,Wn=cl,(t,e)=>Nn(t).render(t,e).then(()=>Promise.all(Array.from(Pn(e)).map(t=>Nn(t).render(t,e)))).then(()=>jn(e)).then(t=>("function"!=typeof t.copyFromChannel?(zn(t),Et(t)):Vn(Ln,()=>Ln(t))||Wn(t),In.add(t),t))),Gu=(En=us,Rn=be,qn=Bu,Fn=Uu,class extends Tu{constructor(t,e,s){let n;if("number"==typeof t&&void 0!==e&&void 0!==s)n={length:e,numberOfChannels:t,sampleRate:s};else{if("object"!=typeof t)throw new Error("The given parameters are not valid.");n=t}const{length:i,numberOfChannels:r,sampleRate:o}={...Be,...n},a=qn(r,i,o);En(Ce,()=>Ce(a))||a.addEventListener("statechange",(()=>{let e=0;const s=t=>{"running"===this._state&&(0{this._state=null,Lt(this)}))}_waitForThePromiseToSettle(t){null===this._state?this._nativeOfflineAudioContext.dispatchEvent(t):setTimeout(()=>this._waitForThePromiseToSettle(t))}}),Qu=(On=ct,Mn=Ts,t=>{var e=On.get(t);return Mn(e)||Mn(t)}),Zu=(Cn=ot,Dn=Ss,t=>Cn.has(t)||Dn(t)),Xu=(kn=ht,An=ks,t=>kn.has(t)||An(t)),Yu=(Tn=ct,Sn=ys,t=>{var e=Tn.get(t);return Sn(e)||Sn(t)}),$u=()=>(async(t,e,s,n,i,r,o,a,h,c,l,u,p,d,f,_)=>!!(t(e,e)&&t(s,s)&&t(i,i)&&t(r,r)&&t(a,a)&&t(h,h)&&t(c,c)&&t(l,l)&&t(u,u)&&t(p,p)&&t(d,d))&&(await Promise.all([t(n,n),t(o,o),t(f,f),t(_,_)])).every(t=>t))(us,(s=>()=>{if(null===s)return!1;const t=new s(1,1,44100).createBuffer(1,1,44100);if(void 0===t.copyToChannel)return!0;var e=new Float32Array(2);try{t.copyFromChannel(e,0,0)}catch{return!1}return!0})(vs),(s=>()=>{if(null===s)return!1;if(void 0!==s.prototype&&void 0!==s.prototype.close)return!0;const t=new s,e=void 0!==t.close;try{t.close()}catch{}return e})(bs),(t=>()=>{if(null===t)return Promise.resolve(!1);const i=new t(1,1,44100);return new Promise(e=>{let s=!0;var t=t=>{s&&(s=!1,i.startRendering(),e(t instanceof TypeError))};let n;try{n=i.decodeAudioData(null,()=>{},t)}catch(e){t(e)}void 0!==n&&n.catch(t)})})(vs),(e=>()=>{if(null===e)return!1;let t;try{t=new e({latencyHint:"balanced"})}catch{return!1}return t.close(),!0})(bs),(s=>()=>{if(null===s)return!1;const t=new s(1,1,44100).createGain(),e=t.connect(t)===t;return t.disconnect(t),e})(vs),((r,o)=>async()=>{if(null===r)return!0;if(null===o)return!1;const t=new Blob(['let c,p;class A extends AudioWorkletProcessor{constructor(){super();this.port.onmessage=(e)=>{p=e.data;p.onmessage=()=>{p.postMessage(c);p.close()};this.port.postMessage(0)}}process(){c=1}}registerProcessor("a",A)'],{type:"application/javascript; charset=utf-8"}),s=new MessageChannel,e=new o(1,128,44100),n=URL.createObjectURL(t);let i=!1;try{await e.audioWorklet.addModule(n);const o=new r(e,"a",{numberOfOutputs:0}),t=e.createOscillator();await new Promise(t=>{o.port.onmessage=()=>t(),o.port.postMessage(s.port2,[s.port2])}),o.port.onmessage=()=>i=!0,t.connect(o),t.start(0),await e.startRendering(),i=await new Promise(e=>{s.port1.onmessage=({data:t})=>e(1===t),s.port1.postMessage(0)})}catch{}finally{s.port1.close(),URL.revokeObjectURL(n)}return i})(As,vs),(e=>()=>{if(null===e)return!1;const t=new e(1,1,44100).createChannelMerger();if("max"===t.channelCountMode)return!0;try{t.channelCount=2}catch{return!0}return!1})(vs),(e=>()=>{if(null===e)return!1;const t=new e(1,1,44100);return void 0===t.createConstantSource||t.createConstantSource().offset.maxValue!==Number.POSITIVE_INFINITY})(vs),(s=>()=>{if(null===s)return!1;const t=new s(1,1,44100),e=t.createConvolver();e.buffer=t.createBuffer(1,1,t.sampleRate);try{e.buffer=t.createBuffer(1,1,t.sampleRate)}catch{return!1}return!0})(vs),(e=>()=>{if(null===e)return!1;const t=new e(1,1,44100).createConvolver();try{t.channelCount=1}catch{return!1}return!0})(vs),ss,(t=>()=>null!==t&&t.hasOwnProperty("isSecureContext"))(ps),(e=>()=>{if(null===e)return!1;const t=new e;try{return t.createMediaStreamSource(new MediaStream),!1}catch(t){return!0}finally{t.close()}})(bs),(n=>()=>{if(null===n)return Promise.resolve(!1);const t=new n(1,1,44100);if(void 0===t.createStereoPanner)return Promise.resolve(!0);if(void 0===t.createConstantSource)return Promise.resolve(!0);const e=t.createConstantSource(),s=t.createStereoPanner();return e.channelCount=1,e.offset.value=1,s.channelCount=1,e.start(),e.connect(s).connect(t.destination),t.startRendering().then(t=>1!==t.getChannelData(0)[0])})(vs),ns);function Hu(t){return void 0===t}function Ju(t){return!Hu(t)}function Ku(t){return"function"==typeof t}function tp(t){return"number"==typeof t}function ep(t){return"[object Object]"===Object.prototype.toString.call(t)&&t.constructor===Object}function sp(t){return"boolean"==typeof t}function np(t){return Array.isArray(t)}function ip(t){return"string"==typeof t}function rp(t){return ip(t)&&/^([a-g]{1}(?:b|#|x|bb)?)(-?[0-9]+)/i.test(t)}function op(t,e){if(!t)throw new Error(e)}function ap(t,e,s=1/0){if(!(e<=t&&t<=s))throw new RangeError(`Value must be within [${e}, ${s}], got: ${t}`)}function hp(t){t.isOffline||"running"===t.state||_p('The AudioContext is "suspended". Invoke Tone.start() from a user action to start the audio.')}let cp=!1,lp=!1;function up(t){cp=t}function pp(t){Hu(t)&&cp&&!lp&&(lp=!0,_p("Events scheduled inside of scheduled callbacks should use the passed in scheduling time. See https://github.com/Tonejs/Tone.js/wiki/Accurate-Timing"))}let dp=console;function fp(...t){dp.log(...t)}function _p(...t){dp.warn(...t)}const mp="object"==typeof self?self:null,gp=mp&&(mp.hasOwnProperty("AudioContext")||mp.hasOwnProperty("webkitAudioContext"));function vp(t,e,s,n){var i,r=arguments.length,o=r<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,s):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,s,n);else for(var a=t.length-1;0<=a;a--)(i=t[a])&&(o=(r<3?i(o):3{this._createTimeout(),this._callback()},1e3*this._updateInterval)}_createClock(){if("worker"===this._type)try{this._createWorker()}catch(t){this._type="timeout",this._createClock()}else"timeout"===this._type&&this._createTimeout()}_disposeClock(){this._timeout&&clearTimeout(this._timeout),this._worker&&(this._worker.terminate(),this._worker.onmessage=null)}get updateInterval(){return this._updateInterval}set updateInterval(t){this._updateInterval=Math.max(t,128/44100),"worker"===this._type&&this._worker.postMessage(Math.max(1e3*t,1))}get type(){return this._type}set type(t){this._disposeClock(),this._type=t,this._createClock()}dispose(){this._disposeClock()}}function wp(t){return Xu(t)}function bp(t){return Zu(t)}function Tp(t){return Yu(t)}function Sp(t){return Qu(t)}function kp(t){return t instanceof ll}function Ap(t,...e){if(!e.length)return t;var s,n,i=e.shift();if(ep(t)&&ep(i))for(const e in i)s=e,n=i[e],"value"===s||wp(n)||bp(n)||kp(n)?t[e]=i[e]:ep(i[e])?(t[e]||Object.assign(t,{[e]:{}}),Ap(t[e],i[e])):Object.assign(t,{[e]:i[e]});return Ap(t,...e)}function Cp(e,t,s=[],n){const i={},r=Array.from(t);if(ep(r[0])&&n&&!Reflect.has(r[0],n)&&(Object.keys(r[0]).some(t=>Reflect.has(e,t))||(Ap(i,{[n]:r[0]}),s.splice(s.indexOf(n),1),r.shift())),1===r.length&&ep(r[0]))Ap(i,r[0]);else for(let t=0;t{Reflect.has(e,t)&&delete e[t]}),e}class Mp{constructor(){this.debug=!1,this._wasDisposed=!1}static getDefaults(){return{}}log(...t){(this.debug||mp&&this.toString()===mp.TONE_DEBUG_CLASS)&&fp(this,...t)}dispose(){return this._wasDisposed=!0,this}get disposed(){return this._wasDisposed}toString(){return this.name}}Mp.version=s;const Ep=1e-6;function Rp(t,e){return t>e+Ep}function qp(t,e){return Rp(t,e)||Ip(t,e)}function Fp(t,e){return t+Epthis.memory){const t=this.length-this.memory;this._timeline.splice(0,t)}return this}remove(t){t=this._timeline.indexOf(t);return-1!==t&&this._timeline.splice(t,1),this}get(t,e="time"){e=this._search(t,e);return-1!==e?this._timeline[e]:null}peek(){return this._timeline[0]}shift(){return this._timeline.shift()}getAfter(t,e="time"){e=this._search(t,e);return e+1=t;)s--;return this._iterate(e,s+1),this}forEachAtTime(s,n){var i=this._search(s);if(-1!==i&&Ip(this._timeline[i].time,s)){let e=i;for(let t=i;0<=t&&Ip(this._timeline[t].time,s);t--)e=t;this._iterate(t=>{n(t)},e,i)}return this}dispose(){return super.dispose(),this._timeline=[],this}}const Pp=[];function jp(t){Pp.push(t)}const Lp=[];function zp(t){Lp.push(t)}class Wp extends Mp{constructor(){super(...arguments),this.name="Emitter"}on(t,e){return t.split(/\W+/).forEach(t=>{Hu(this._events)&&(this._events={}),this._events.hasOwnProperty(t)||(this._events[t]=[]),this._events[t].push(e)}),this}once(e,s){const n=(...t)=>{s(...t),this.off(e,n)};return this.on(e,n),this}off(t,s){return t.split(/\W+/).forEach(t=>{if(Hu(this._events)&&(this._events={}),this._events.hasOwnProperty(t))if(Hu(s))this._events[t]=[];else{const e=this._events[t];for(let t=e.length-1;0<=t;t--)e[t]===s&&e.splice(t,1)}}),this}emit(t,...s){if(this._events&&this._events.hasOwnProperty(t)){const n=this._events[t].slice(0);for(let t=0,e=n.length;t{var e=Object.getOwnPropertyDescriptor(Wp.prototype,t);Object.defineProperty(s.prototype,t,e)})}dispose(){return super.dispose(),this._events=void 0,this}}class Bp extends Wp{constructor(){super(...arguments),this.isOffline=!1}toJSON(){return{}}}class Up extends Bp{constructor(){super(),this.name="Context",this._constants=new Map,this._timeouts=new Np,this._timeoutIds=0,this._initialized=!1,this.isOffline=!1,this._workletModules=new Map;var t,e=Cp(Up.getDefaults(),arguments,["context"]);e.context?this._context=e.context:this._context=(t={latencyHint:e.latencyHint},new Ou(t)),this._ticker=new xp(this.emit.bind(this,"tick"),e.clockSource,e.updateInterval),this.on("tick",this._timeoutLoop.bind(this)),this._context.onstatechange=()=>{this.emit("statechange",this.state)},this._setLatencyHint(e.latencyHint),this.lookAhead=e.lookAhead}static getDefaults(){return{clockSource:"worker",latencyHint:"interactive",lookAhead:.1,updateInterval:.05}}initialize(){var e;return this._initialized||(e=this,Pp.forEach(t=>t(e)),this._initialized=!0),this}createAnalyser(){return this._context.createAnalyser()}createOscillator(){return this._context.createOscillator()}createBufferSource(){return this._context.createBufferSource()}createBiquadFilter(){return this._context.createBiquadFilter()}createBuffer(t,e,s){return this._context.createBuffer(t,e,s)}createChannelMerger(t){return this._context.createChannelMerger(t)}createChannelSplitter(t){return this._context.createChannelSplitter(t)}createConstantSource(){return this._context.createConstantSource()}createConvolver(){return this._context.createConvolver()}createDelay(t){return this._context.createDelay(t)}createDynamicsCompressor(){return this._context.createDynamicsCompressor()}createGain(){return this._context.createGain()}createIIRFilter(t,e){return this._context.createIIRFilter(t,e)}createPanner(){return this._context.createPanner()}createPeriodicWave(t,e,s){return this._context.createPeriodicWave(t,e,s)}createStereoPanner(){return this._context.createStereoPanner()}createWaveShaper(){return this._context.createWaveShaper()}createMediaStreamSource(t){return op(Sp(this._context),"Not available if OfflineAudioContext"),this._context.createMediaStreamSource(t)}createMediaElementSource(t){return op(Sp(this._context),"Not available if OfflineAudioContext"),this._context.createMediaElementSource(t)}createMediaStreamDestination(){return op(Sp(this._context),"Not available if OfflineAudioContext"),this._context.createMediaStreamDestination()}decodeAudioData(t){return this._context.decodeAudioData(t)}get currentTime(){return this._context.currentTime}get state(){return this._context.state}get sampleRate(){return this._context.sampleRate}get listener(){return this.initialize(),this._listener}set listener(t){op(!this._initialized,"The listener cannot be set after initialization."),this._listener=t}get transport(){return this.initialize(),this._transport}set transport(t){op(!this._initialized,"The transport cannot be set after initialization."),this._transport=t}get draw(){return this.initialize(),this._draw}set draw(t){op(!this._initialized,"Draw cannot be set after initialization."),this._draw=t}get destination(){return this.initialize(),this._destination}set destination(t){op(!this._initialized,"The destination cannot be set after initialization."),this._destination=t}createAudioWorkletNode(t,e){return s=this.rawContext,t=t,e=e,op(Ju(Wu),"This node only works in a secure context (https or localhost)"),new Wu(s,t,e);var s}addAudioWorkletModule(t,e){return yp(this,void 0,void 0,function*(){op(Ju(this.rawContext.audioWorklet),"AudioWorkletNode is only available in a secure context (https or localhost)"),this._workletModules.has(e)||this._workletModules.set(e,this.rawContext.audioWorklet.addModule(t)),yield this._workletModules.get(e)})}workletsAreReady(){return yp(this,void 0,void 0,function*(){const e=[];this._workletModules.forEach(t=>e.push(t)),yield Promise.all(e)})}get updateInterval(){return this._ticker.updateInterval}set updateInterval(t){this._ticker.updateInterval=t}get clockSource(){return this._ticker.type}set clockSource(t){this._ticker.type=t}get latencyHint(){return this._latencyHint}_setLatencyHint(t){let e=0;if(ip(this._latencyHint=t))switch(t){case"interactive":e=.1;break;case"playback":e=.5;break;case"balanced":e=.25}this.lookAhead=e,this.updateInterval=e/2}get rawContext(){return this._context}now(){return this._context.currentTime+this.lookAhead}immediate(){return this._context.currentTime}resume(){return Sp(this._context)?this._context.resume():Promise.resolve()}close(){return yp(this,void 0,void 0,function*(){var e;Sp(this._context)&&(yield this._context.close()),this._initialized&&(e=this,Lp.forEach(t=>t(e)))})}getConstant(e){if(this._constants.has(e))return this._constants.get(e);{const t=this._context.createBuffer(1,128,this._context.sampleRate),s=t.getChannelData(0);for(let t=0;tthis._constants[t].disconnect()),this}_timeoutLoop(){var t=this.now();let e=this._timeouts.peek();for(;this._timeouts.length&&e&&e.time<=t;)e.callback(),this._timeouts.shift(),e=this._timeouts.peek()}setTimeout(t,e){this._timeoutIds++;var s=this.now();return this._timeouts.add({callback:t,id:this._timeoutIds,time:s+e}),this._timeoutIds}clearTimeout(e){return this._timeouts.forEach(t=>{t.id===e&&this._timeouts.remove(t)}),this}clearInterval(t){return this.clearTimeout(t)}setInterval(e,s){const n=++this._timeoutIds,i=()=>{var t=this.now();this._timeouts.add({callback:()=>{e(),i()},id:n,time:t+s})};return i(),n}}function Gp(e,t){np(t)?t.forEach(t=>Gp(e,t)):Object.defineProperty(e,t,{enumerable:!0,writable:!1})}function Qp(e,t){np(t)?t.forEach(t=>Qp(e,t)):Object.defineProperty(e,t,{writable:!0})}const Zp=()=>{};class Xp extends Mp{constructor(){super(),this.name="ToneAudioBuffer",this.onload=Zp;var t=Cp(Xp.getDefaults(),arguments,["url","onload","onerror"]);this.reverse=t.reverse,this.onload=t.onload,t.url&&kp(t.url)||t.url instanceof Xp?this.set(t.url):ip(t.url)&&this.load(t.url).catch(t.onerror)}static getDefaults(){return{onerror:Zp,onload:Zp,reverse:!1}}get sampleRate(){return(this._buffer||Jp()).sampleRate}set(t){return t instanceof Xp?t.loaded?this._buffer=t.get():t.onload=()=>{this.set(t),this.onload(this)}:this._buffer=t,this._reversed&&this._reverse(),this}get(){return this._buffer}load(e){return yp(this,void 0,void 0,function*(){var t=Xp.load(e).then(t=>{this.set(t),this.onload(this)});Xp.downloads.push(t);try{yield t}finally{const e=Xp.downloads.indexOf(t);Xp.downloads.splice(e,1)}return this})}dispose(){return super.dispose(),this._buffer=void 0,this}fromArray(t){const e=np(t)&&0t/n),this.fromArray(e)}return this}toArray(e){if(tp(e))return this.getChannelData(e);if(1===this.numberOfChannels)return this.toArray(0);{const e=[];for(let t=0;tsetTimeout(t,1)))}})}render(e=!0){return yp(this,void 0,void 0,function*(){yield this.workletsAreReady(),yield this._renderClock(e);var t=yield this._context.startRendering();return new Xp(t)})}close(){return Promise.resolve()}}const $p=new class extends Bp{constructor(){super(...arguments),this.lookAhead=0,this.latencyHint=0,this.isOffline=!1}createAnalyser(){return{}}createOscillator(){return{}}createBufferSource(){return{}}createBiquadFilter(){return{}}createBuffer(t,e,s){return{}}createChannelMerger(t){return{}}createChannelSplitter(t){return{}}createConstantSource(){return{}}createConvolver(){return{}}createDelay(t){return{}}createDynamicsCompressor(){return{}}createGain(){return{}}createIIRFilter(t,e){return{}}createPanner(){return{}}createPeriodicWave(t,e,s){return{}}createStereoPanner(){return{}}createWaveShaper(){return{}}createMediaStreamSource(t){return{}}createMediaElementSource(t){return{}}createMediaStreamDestination(){return{}}decodeAudioData(t){return Promise.resolve({})}createAudioWorkletNode(t,e){return{}}get rawContext(){return{}}addAudioWorkletModule(t,e){return yp(this,void 0,void 0,function*(){return Promise.resolve()})}resume(){return Promise.resolve()}setTimeout(t,e){return 0}clearTimeout(t){return this}setInterval(t,e){return 0}clearInterval(t){return this}getConstant(t){return{}}get currentTime(){return 0}get state(){return{}}get sampleRate(){return 0}get listener(){return{}}get transport(){return{}}get draw(){return{}}set draw(t){}get destination(){return{}}set destination(t){}now(){return 0}immediate(){return 0}};let Hp=$p;function Jp(){return Hp===$p&&gp&&Kp(new Up),Hp}function Kp(t,e=!1){e&&Hp.dispose(),Hp=Sp(t)?new Up(t):Tp(t)?new Yp(t):t}if(mp&&!mp.TONE_SILENCE_LOGGING){let t="v";"dev"===s&&(t="");const e=` * Tone.js ${t}${s} * `;console.log(`%c${e}`,"background: #000; color: #fff")}function td(t){return Math.pow(10,t/20)}function ed(t){return Math.log(t)/Math.LN10*20}function sd(t){return Math.pow(2,t/12)}let nd=440;function id(t){return Math.round(rd(t))}function rd(t){return 69+12*Math.log2(t/nd)}function od(t){return nd*Math.pow(2,(t-69)/12)}class ad extends Mp{constructor(t,e,s){super(),this.defaultUnits="s",this._val=e,this._units=s,this.context=t,this._expressions=this._getExpressions()}_getExpressions(){return{hz:{method:t=>this._frequencyToUnits(parseFloat(t)),regexp:/^(\d+(?:\.\d+)?)hz$/i},i:{method:t=>this._ticksToUnits(parseInt(t,10)),regexp:/^(\d+)i$/i},m:{method:t=>this._beatsToUnits(parseInt(t,10)*this._getTimeSignature()),regexp:/^(\d+)m$/i},n:{method:(t,e)=>{t=parseInt(t,10),e="."===e?1.5:1;return 1===t?this._beatsToUnits(this._getTimeSignature())*e:this._beatsToUnits(4/t)*e},regexp:/^(\d+)n(\.?)$/i},number:{method:t=>this._expressions[this.defaultUnits].method.call(this,t),regexp:/^(\d+(?:\.\d+)?)$/},s:{method:t=>this._secondsToUnits(parseFloat(t)),regexp:/^(\d+(?:\.\d+)?)s$/},samples:{method:t=>parseInt(t,10)/this.context.sampleRate,regexp:/^(\d+)samples$/},t:{method:t=>{t=parseInt(t,10);return this._beatsToUnits(8/(3*Math.floor(t)))},regexp:/^(\d+)t$/i},tr:{method:(t,e,s)=>{let n=0;return t&&"0"!==t&&(n+=this._beatsToUnits(this._getTimeSignature()*parseFloat(t))),e&&"0"!==e&&(n+=this._beatsToUnits(parseFloat(e))),s&&"0"!==s&&(n+=this._beatsToUnits(parseFloat(s)/4)),n},regexp:/^(\d+(?:\.\d+)?):(\d+(?:\.\d+)?):?(\d+(?:\.\d+)?)?$/}}}valueOf(){if(this._val instanceof ad&&this.fromType(this._val),Hu(this._val))return this._noArg();if(ip(this._val)&&Hu(this._units)){for(const t in this._expressions)if(this._expressions[t].regexp.test(this._val.trim())){this._units=t;break}}else if(ep(this._val)){let t=0;for(const s in this._val){var e;Ju(this._val[s])&&(e=this._val[s],t+=new this.constructor(this.context,s).valueOf()*e)}return t}if(Ju(this._units)){const n=this._expressions[this._units],i=this._val.toString().trim().match(n.regexp);return i?n.method.apply(this,i.slice(1)):n.method.call(this,this._val)}return ip(this._val)?parseFloat(this._val):this._val}_frequencyToUnits(t){return 1/t}_beatsToUnits(t){return 60/this._getBpm()*t}_secondsToUnits(t){return t}_ticksToUnits(t){return t*this._beatsToUnits(1)/this._getPPQ()}_noArg(){return this._now()}_getBpm(){return this.context.transport.bpm.value}_getTimeSignature(){return this.context.transport.timeSignature}_getPPQ(){return this.context.transport.PPQ}fromType(t){switch(this._units=void 0,this.defaultUnits){case"s":this._val=t.toSeconds();break;case"i":this._val=t.toTicks();break;case"hz":this._val=t.toFrequency();break;case"midi":this._val=t.toMidi()}return this}toFrequency(){return 1/this.toSeconds()}toSamples(){return this.toSeconds()*this.context.sampleRate}toMilliseconds(){return 1e3*this.toSeconds()}}class hd extends ad{constructor(){super(...arguments),this.name="TimeClass"}_getExpressions(){return Object.assign(super._getExpressions(),{now:{method:t=>this._now()+new this.constructor(this.context,t).valueOf(),regexp:/^\+(.+)/},quantize:{method:t=>{t=new hd(this.context,t).valueOf();return this._secondsToUnits(this.context.transport.nextSubdivision(t))},regexp:/^@(.+)/}})}quantize(t,e=1){var s=new this.constructor(this.context,t).valueOf(),t=this.valueOf();return t+(Math.round(t/s)*s-t)*e}toNotation(){const s=this.toSeconds(),e=["1m"];for(let t=1;t<9;t++){const n=Math.pow(2,t);e.push(n+"n."),e.push(n+"n"),e.push(n+"t")}e.push("0");let n=e[0],i=new hd(this.context,e[0]).toSeconds();return e.forEach(t=>{var e=new hd(this.context,t).toSeconds();Math.abs(e-s)this.transpose(t))}toMidi(){return id(this.valueOf())}toNote(){var t=this.toFrequency(),t=Math.log2(t/cd.A4);let e=Math.round(12*t)+57;const s=Math.floor(e/12);return s<0&&(e+=-12*s),ud[e%12]+s.toString()}toSeconds(){return 1/super.toSeconds()}toTicks(){var t=this._beatsToUnits(1),t=this.valueOf()/t;return Math.floor(t*this._getPPQ())}_noArg(){return 0}_frequencyToUnits(t){return t}_ticksToUnits(t){return 1/(60*t/(this._getBpm()*this._getPPQ()))}_beatsToUnits(t){return 1/super._beatsToUnits(t)}_secondsToUnits(t){return 1/t}static mtof(t){return od(t)}static ftom(t){return id(t)}}const ld={cbbb:-3,cbb:-2,cb:-1,c:0,"c#":1,cx:2,"c##":2,"c###":3,"cx#":3,"c#x":3,dbbb:-1,dbb:0,db:1,d:2,"d#":3,dx:4,"d##":4,"d###":5,"dx#":5,"d#x":5,ebbb:1,ebb:2,eb:3,e:4,"e#":5,ex:6,"e##":6,"e###":7,"ex#":7,"e#x":7,fbbb:2,fbb:3,fb:4,f:5,"f#":6,fx:7,"f##":7,"f###":8,"fx#":8,"f#x":8,gbbb:4,gbb:5,gb:6,g:7,"g#":8,gx:9,"g##":9,"g###":10,"gx#":10,"g#x":10,abbb:6,abb:7,ab:8,a:9,"a#":10,ax:11,"a##":11,"a###":12,"ax#":12,"a#x":12,bbbb:8,bbb:9,bb:10,b:11,"b#":12,bx:13,"b##":13,"b###":14,"bx#":14,"b#x":14},ud=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"];class pd extends hd{constructor(){super(...arguments),this.name="TransportTime"}_now(){return this.context.transport.seconds}}class dd extends Mp{constructor(){super();var t=Cp(dd.getDefaults(),arguments,["context"]);this.defaultContext?this.context=this.defaultContext:this.context=t.context}static getDefaults(){return{context:Jp()}}now(){return this.context.currentTime+this.context.lookAhead}immediate(){return this.context.currentTime}get sampleTime(){return 1/this.context.sampleRate}get blockTime(){return 128/this.context.sampleRate}toSeconds(t){return pp(t),new hd(this.context,t).toSeconds()}toFrequency(t){return new cd(this.context,t).toFrequency()}toTicks(t){return new pd(this.context,t).toTicks()}_getPartialProperties(e){const s=this.get();return Object.keys(s).forEach(t=>{Hu(e[t])&&delete s[t]}),s}get(){const s=this.constructor.getDefaults();return Object.keys(s).forEach(t=>{if(Reflect.has(this,t)){const e=this[t];Ju(e)&&Ju(e.value)&&Ju(e.setValueAtTime)?s[t]=e.value:e instanceof dd?s[t]=e._getPartialProperties(s[t]):np(e)||tp(e)||ip(e)||sp(e)?s[t]=e:delete s[t]}}),s}set(e){return Object.keys(e).forEach(t=>{Reflect.has(this,t)&&Ju(this[t])&&(this[t]&&Ju(this[t].value)&&Ju(this[t].setValueAtTime)?this[t].value!==e[t]&&(this[t].value=e[t]):this[t]instanceof dd?this[t].set(e[t]):this[t]=e[t])}),this}}class fd extends Np{constructor(t="stopped"){super(),this.name="StateTimeline",this._initial=t,this.setStateAtTime(this._initial,0)}getValueAtTime(t){t=this.get(t);return null!==t?t.state:this._initial}setStateAtTime(t,e,s){return ap(e,0),this.add(Object.assign({},s,{state:t,time:e})),this}getLastState(e,s){for(let t=this._search(s);0<=t;t--){const s=this._timeline[t];if(s.state===e)return s}}getNextState(e,t){const s=this._search(t);if(-1!==s)for(let t=s;t{"cancelScheduledValues"===t.type?e.cancelScheduledValues(t.time):"setTargetAtTime"===t.type?e.setTargetAtTime(t.value,t.time,t.constant):e[t.type](t.value,t.time)}),this}setParam(t){op(this._swappable,"The Param must be assigned as 'swappable' in the constructor");const e=this.input;return e.disconnect(this._param),this.apply(t),this._param=t,e.connect(this._param),this}dispose(){return super.dispose(),this._events.dispose(),this}get defaultValue(){return this._toType(this._param.defaultValue)}_exponentialApproach(t,e,s,n,i){return s+(e-s)*Math.exp(-(i-t)/n)}_linearInterpolate(t,e,s,n,i){return e+(i-t)/(s-t)*(n-e)}_exponentialInterpolate(t,e,s,n,i){return e*Math.pow(n/e,(i-t)/(s-t))}}class md extends dd{constructor(){super(...arguments),this._internalChannels=[]}get numberOfInputs(){return Ju(this.input)?wp(this.input)||this.input instanceof _d?1:this.input.numberOfInputs:0}get numberOfOutputs(){return Ju(this.output)?this.output.numberOfOutputs:0}_isAudioNode(t){return Ju(t)&&(t instanceof md||bp(t))}_getInternalNodes(){const t=this._internalChannels.slice(0);return this._isAudioNode(this.input)&&t.push(this.input),this._isAudioNode(this.output)&&this.input!==this.output&&t.push(this.output),t}_setChannelProperties(e){this._getInternalNodes().forEach(t=>{t.channelCount=e.channelCount,t.channelCountMode=e.channelCountMode,t.channelInterpretation=e.channelInterpretation})}_getChannelProperties(){var t=this._getInternalNodes();op(0this.connect(t)),this}dispose(){return super.dispose(),Ju(this.input)&&(this.input instanceof md?this.input.dispose():bp(this.input)&&this.input.disconnect()),Ju(this.output)&&(this.output instanceof md?this.output.dispose():bp(this.output)&&this.output.disconnect()),this._internalChannels=[],this}}function gd(...t){var e=t.shift();t.reduce((t,e)=>(t instanceof md?t.connect(e):bp(t)&&vd(t,e),e),e)}function vd(t,e,s=0,n=0){for(op(Ju(t),"Cannot connect from undefined node"),op(Ju(e),"Cannot connect to undefined node"),(e instanceof md||bp(e))&&op(0=this._startTime&&(-1===this._stopTime||t<=this._stopTime)?"started":"stopped"},this._fadeIn=t.fadeIn,this._fadeOut=t.fadeOut,this._curve=t.curve,this.onended=t.onended}static getDefaults(){return Object.assign(md.getDefaults(),{curve:"linear",fadeIn:0,fadeOut:0,onended:Zp})}_startGain(t,e=1){op(-1===this._startTime,"Source cannot be started more than once");var s=this.toSeconds(this._fadeIn);return this._startTime=t+s,this._startTime=Math.max(this._startTime,this.context.currentTime),0{var t="exponential"===this._curve?2*e:0;this._stopSource(this.now()+t),this._onended()},this._stopTime-this.context.currentTime),this}_onended(){var t;this.onended===Zp||(this.onended(this),this.onended=Zp,this.context.isOffline)||(t=()=>this.dispose(),void 0!==window.requestIdleCallback?window.requestIdleCallback(t):setTimeout(t,1e3))}get state(){return this.getStateAtTime(this.now())}cancelStop(){return this.log("cancelStop"),op(-1!==this._startTime,"Source is not started"),this._gainNode.gain.cancelScheduledValues(this._startTime+this.sampleTime),this.context.clearTimeout(this._timeout),this._stopTime=-1,this}dispose(){return super.dispose(),this._gainNode.dispose(),this.onended=Zp,this}}class bd extends wd{constructor(){super(Cp(bd.getDefaults(),arguments,["offset"])),this.name="ToneConstantSource",this._source=this.context.createConstantSource();var t=Cp(bd.getDefaults(),arguments,["offset"]);vd(this._source,this._gainNode),this.offset=new _d({context:this.context,convert:t.convert,param:this._source.offset,units:t.units,value:t.offset,minValue:t.minValue,maxValue:t.maxValue})}static getDefaults(){return Object.assign(wd.getDefaults(),{convert:!0,offset:1,units:"number"})}start(t){t=this.toSeconds(t);return this.log("start",t),this._startGain(t),this._source.start(t),this}_stopSource(t){this._source.stop(t)}dispose(){return super.dispose(),"started"===this.state&&this.stop(),this._source.disconnect(),this.offset.dispose(),this}}class Td extends md{constructor(){super(Cp(Td.getDefaults(),arguments,["value","units"])),this.name="Signal",this.override=!0;var t=Cp(Td.getDefaults(),arguments,["value","units"]);this.output=this._constantSource=new bd({context:this.context,convert:t.convert,offset:t.value,units:t.units,minValue:t.minValue,maxValue:t.maxValue}),this._constantSource.start(0),this.input=this._param=this._constantSource.offset}static getDefaults(){return Object.assign(md.getDefaults(),{convert:!0,units:"number",value:0})}connect(t,e=0,s=0){return Sd(this,t,e,s),this}dispose(){return super.dispose(),this._param.dispose(),this._constantSource.dispose(),this}setValueAtTime(t,e){return this._param.setValueAtTime(t,e),this}getValueAtTime(t){return this._param.getValueAtTime(t)}setRampPoint(t){return this._param.setRampPoint(t),this}linearRampToValueAtTime(t,e){return this._param.linearRampToValueAtTime(t,e),this}exponentialRampToValueAtTime(t,e){return this._param.exponentialRampToValueAtTime(t,e),this}exponentialRampTo(t,e,s){return this._param.exponentialRampTo(t,e,s),this}linearRampTo(t,e,s){return this._param.linearRampTo(t,e,s),this}targetRampTo(t,e,s){return this._param.targetRampTo(t,e,s),this}exponentialApproachValueAtTime(t,e,s){return this._param.exponentialApproachValueAtTime(t,e,s),this}setTargetAtTime(t,e,s){return this._param.setTargetAtTime(t,e,s),this}setValueCurveAtTime(t,e,s,n){return this._param.setValueCurveAtTime(t,e,s,n),this}cancelScheduledValues(t){return this._param.cancelScheduledValues(t),this}cancelAndHoldAtTime(t){return this._param.cancelAndHoldAtTime(t),this}rampTo(t,e,s){return this._param.rampTo(t,e,s),this}get value(){return this._param.value}set value(t){this._param.value=t}get convert(){return this._param.convert}set convert(t){this._param.convert=t}get units(){return this._param.units}get overridden(){return this._param.overridden}set overridden(t){this._param.overridden=t}get maxValue(){return this._param.maxValue}get minValue(){return this._param.minValue}apply(t){return this._param.apply(t),this}}function Sd(t,e,s,n){(e instanceof _d||wp(e)||e instanceof Td&&e.override)&&(e.cancelScheduledValues(0),e.setValueAtTime(0,0),e instanceof Td&&(e.overridden=!0)),vd(t,e,s,n)}class kd extends _d{constructor(){super(Cp(kd.getDefaults(),arguments,["value"])),this.name="TickParam",this._events=new Np(1/0),this._multiplier=1;var t=Cp(kd.getDefaults(),arguments,["value"]);this._multiplier=t.multiplier,this._events.cancel(0),this._events.add({ticks:0,time:0,type:"setValueAtTime",value:this._fromType(t.value)}),this.setValueAtTime(t.value,0)}static getDefaults(){return Object.assign(_d.getDefaults(),{multiplier:1,units:"hertz",value:1})}setTargetAtTime(t,e,s){e=this.toSeconds(e),this.setRampPoint(e);const n=this._fromType(t),i=this._events.get(e),r=Math.round(Math.max(1/s,1));for(let t=0;t<=r;t++){const r=s*t+e,o=this._exponentialApproach(i.time,i.value,n,s,r);this.linearRampToValueAtTime(this._toType(o),r)}return this}setValueAtTime(t,e){var s=this.toSeconds(e);super.setValueAtTime(t,e);const n=this._events.get(s),i=this._events.previousEvent(n),r=this._getTicksUntilEvent(i,s);return n.ticks=Math.max(r,0),this}linearRampToValueAtTime(t,e){var s=this.toSeconds(e);super.linearRampToValueAtTime(t,e);const n=this._events.get(s),i=this._events.previousEvent(n),r=this._getTicksUntilEvent(i,s);return n.ticks=Math.max(r,0),this}exponentialRampToValueAtTime(t,e){e=this.toSeconds(e);const s=this._fromType(t),n=this._events.get(e),i=Math.round(Math.max(10*(e-n.time),1)),r=(e-n.time)/i;for(let t=0;t<=i;t++){const i=r*t+n.time,o=this._exponentialInterpolate(n.time,n.value,e,s,i);this.linearRampToValueAtTime(this._toType(o),i)}return this}_getTicksUntilEvent(t,e){if(null===t)t={ticks:0,time:0,type:"setValueAtTime",value:0};else if(Hu(t.ticks)){const e=this._events.previousEvent(t);t.ticks=this._getTicksUntilEvent(e,t.time)}var s=this._fromType(this.getValueAtTime(t.time));let n=this._fromType(this.getValueAtTime(e));var i=this._events.get(e);return i&&i.time===e&&"setValueAtTime"===i.type&&(n=this._fromType(this.getValueAtTime(e-this.sampleTime))),.5*(e-t.time)*(s+n)+t.ticks}getTicksAtTime(t){var e=this.toSeconds(t),t=this._events.get(e);return Math.max(this._getTicksUntilEvent(t,e),0)}getDurationOfTicks(t,e){var s=this.toSeconds(e),e=this.getTicksAtTime(e);return this.getTimeOfTick(e+t)-s}getTimeOfTick(t){var e=this._events.get(t,"ticks"),s=this._events.getAfter(t,"ticks");if(e&&e.ticks===t)return e.time;if(e&&s&&"linearRampToValueAtTime"===s.type&&e.value!==s.value){var n=this._fromType(this.getValueAtTime(e.time)),i=(this._fromType(this.getValueAtTime(s.time))-n)/(s.time-e.time),r=Math.sqrt(Math.pow(n,2)-2*i*(e.ticks-t)),s=(-n+r)/i;return(0{let e=r.time;var s=this._tickOffset.get(t.time);s&&s.time>=r.time&&(o=s.ticks,e=s.time),"started"===r.state&&"started"!==t.state&&(o+=this.frequency.getTicksAtTime(t.time)-this.frequency.getTicksAtTime(e),t.time!=i.time&&(a={state:t.state,time:t.time,ticks:o})),r=t}),this._state.remove(i),a&&this._ticksAtTime.add(a),o}get ticks(){return this.getTicksAtTime(this.now())}set ticks(t){this.setTicksAtTime(t,this.now())}get seconds(){return this.getSecondsAtTime(this.now())}set seconds(t){var e=this.now(),t=this.frequency.timeToTicks(t,e);this.setTicksAtTime(t,e)}getSecondsAtTime(t){t=this.toSeconds(t);const e=this._state.getLastState("stopped",t),n={state:"paused",time:t};this._state.add(n);var s=this._secondsAtTime.get(t);let i=s||e,r=s?s.seconds:0,o=null;return this._state.forEachBetween(i.time,t+this.sampleTime,t=>{let e=i.time;var s=this._tickOffset.get(t.time);s&&s.time>=i.time&&(r=s.seconds,e=s.time),"started"===i.state&&"started"!==t.state&&(r+=t.time-e,t.time!=n.time&&(o={state:t.state,time:t.time,seconds:r})),i=t}),this._state.remove(n),o&&this._secondsAtTime.add(o),r}setTicksAtTime(t,e){return e=this.toSeconds(e),this._tickOffset.cancel(e),this._tickOffset.add({seconds:this.frequency.getDurationOfTicks(t,e),ticks:t,time:e}),this._ticksAtTime.cancel(e),this._secondsAtTime.cancel(e),this}getStateAtTime(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)}getTimeOfTick(t,e=this.now()){var s=this._tickOffset.get(e),e=this._state.get(e),e=Math.max(s.time,e.time),s=this.frequency.getTicksAtTime(e)+t-s.ticks;return this.frequency.getTimeOfTick(s)}forEachTickBetween(s,n,i){let r=this._state.get(s);this._state.forEachBetween(s,n,t=>{r&&"started"===r.state&&"started"!==t.state&&this.forEachTickBetween(Math.max(r.time,s),t.time-this.sampleTime,i),r=t});let o=null;if(r&&"started"===r.state){var a=Math.max(r.time,s),h=this.frequency.getTicksAtTime(a),a=h-this.frequency.getTicksAtTime(r.time);let t=Math.ceil(a)-a;t=Ip(t,1)?0:t;let e=this.frequency.getTimeOfTick(h+t);for(;e{switch(t.state){case"started":var e=this._tickSource.getTicksAtTime(t.time);this.emit("start",t.time,e);break;case"stopped":0!==t.time&&this.emit("stop",t.time);break;case"paused":this.emit("pause",t.time)}}),this._tickSource.forEachTickBetween(t,e,(t,e)=>{this.callback(t,e)}))}getStateAtTime(t){t=this.toSeconds(t);return this._state.getValueAtTime(t)}dispose(){return super.dispose(),this.context.off("tick",this._boundLoop),this._tickSource.dispose(),this._state.dispose(),this}}Wp.mixin(Dd);class Od extends md{constructor(){super(Cp(Od.getDefaults(),arguments,["delayTime","maxDelay"])),this.name="Delay";var t=Cp(Od.getDefaults(),arguments,["delayTime","maxDelay"]),e=this.toSeconds(t.maxDelay);this._maxDelay=Math.max(e,this.toSeconds(t.delayTime)),this._delayNode=this.input=this.output=this.context.createDelay(e),this.delayTime=new _d({context:this.context,param:this._delayNode.delayTime,units:"time",value:t.delayTime,minValue:0,maxValue:this.maxDelay}),Gp(this,"delayTime")}static getDefaults(){return Object.assign(md.getDefaults(),{delayTime:0,maxDelay:1})}get maxDelay(){return this._maxDelay}dispose(){return super.dispose(),this._delayNode.disconnect(),this.delayTime.dispose(),this}}class Md extends Mp{constructor(){super(),this.name="ToneAudioBuffers",this._buffers=new Map,this._loadingCount=0;const s=Cp(Md.getDefaults(),arguments,["urls","onload","baseUrl"],"urls");this.baseUrl=s.baseUrl,Object.keys(s.urls).forEach(t=>{this._loadingCount++;var e=s.urls[t];this.add(t,e,this._bufferLoaded.bind(this,s.onload),s.onerror)})}static getDefaults(){return{baseUrl:"",onerror:Zp,onload:Zp,urls:{}}}has(t){return this._buffers.has(t.toString())}get(t){return op(this.has(t),`ToneAudioBuffers has no buffer named: ${t}`),this._buffers.get(t.toString())}_bufferLoaded(t){this._loadingCount--,0===this._loadingCount&&t&&t()}get loaded(){return Array.from(this._buffers).every(([,t])=>t.loaded)}add(t,e,s=Zp,n=Zp){return ip(e)?(this.baseUrl&&"data:audio/"===e.trim().substring(0,11).toLowerCase()&&(this.baseUrl=""),this._buffers.set(t.toString(),new Xp(this.baseUrl+e,s,n))):this._buffers.set(t.toString(),new Xp(e,s,n)),this}dispose(){return super.dispose(),this._buffers.forEach(t=>t.dispose()),this._buffers.clear(),this}}class Ed extends cd{constructor(){super(...arguments),this.name="MidiClass",this.defaultUnits="midi"}_frequencyToUnits(t){return id(super._frequencyToUnits(t))}_ticksToUnits(t){return id(super._ticksToUnits(t))}_beatsToUnits(t){return id(super._beatsToUnits(t))}_secondsToUnits(t){return id(super._secondsToUnits(t))}toMidi(){return this.valueOf()}toFrequency(){return od(this.toMidi())}transpose(t){return new Ed(this.context,this.toMidi()+t)}}class Rd extends pd{constructor(){super(...arguments),this.name="Ticks",this.defaultUnits="i"}_now(){return this.context.transport.ticks}_beatsToUnits(t){return this._getPPQ()*t}_secondsToUnits(t){return Math.floor(t/(60/this._getBpm())*this._getPPQ())}_ticksToUnits(t){return t}toTicks(){return this.valueOf()}toSeconds(){return this.valueOf()/this._getPPQ()*(60/this._getBpm())}}class qd extends dd{constructor(){super(...arguments),this.name="Draw",this.expiration=.25,this.anticipation=.008,this._events=new Np,this._boundDrawLoop=this._drawLoop.bind(this),this._animationFrame=-1}schedule(t,e){return this._events.add({callback:t,time:this.toSeconds(e)}),1===this._events.length&&(this._animationFrame=requestAnimationFrame(this._boundDrawLoop)),this}cancel(t){return this._events.cancel(this.toSeconds(t)),this}_drawLoop(){for(var t=this.context.currentTime;this._events.length&&this._events.peek().time-this.anticipation<=t;){const e=this._events.shift();e&&t-e.time<=this.expiration&&e.callback()}0{t.draw=new qd({context:t})}),zp(t=>{t.draw.dispose()});class Fd extends Mp{constructor(){super(...arguments),this.name="IntervalTimeline",this._root=null,this._length=0}add(t){op(Ju(t.time),"Events must have a time property"),op(Ju(t.duration),"Events must have a duration parameter"),t.time=t.time.valueOf();let e=new Id(t.time,t.time+t.duration,t);for(null===this._root?this._root=e:this._root.insert(e),this._length++;null!==e;)e.updateHeight(),e.updateMax(),this._rebalance(e),e=e.parent;return this}remove(t){if(null!==this._root){var e=[];this._root.search(t.time,e);for(const s of e)if(s.event===t){this._removeNode(s),this._length--;break}}return this}get length(){return this._length}cancel(t){return this.forEachFrom(t,t=>this.remove(t)),this}_setRoot(t){this._root=t,null!==this._root&&(this._root.parent=null)}_replaceNodeInParent(t,e){null!==t.parent?(t.isLeftChild()?t.parent.left=e:t.parent.right=e,this._rebalance(t.parent)):this._setRoot(e)}_removeNode(s){if(null===s.left&&null===s.right)this._replaceNodeInParent(s,null);else if(null===s.right)this._replaceNodeInParent(s,s.left);else if(null===s.left)this._replaceNodeInParent(s,s.right);else{let t,e=null;if(0e.low&&(e=s[t]);return e.event}}return null}forEach(e){if(null!==this._root){const s=[];this._root.traverse(t=>s.push(t)),s.forEach(t=>{t.event&&e(t.event)})}return this}forEachAtTime(t,e){if(null!==this._root){const s=[];this._root.search(t,s),s.forEach(t=>{t.event&&e(t.event)})}return this}forEachFrom(t,e){if(null!==this._root){const s=[];this._root.searchAfter(t,s),s.forEach(t=>{t.event&&e(t.event)})}return this}dispose(){return super.dispose(),null!==this._root&&this._root.traverse(t=>t.dispose()),this._root=null,this}}class Id{constructor(t,e,s){this._left=null,this._right=null,this.parent=null,this.height=0,this.event=s,this.low=t,this.high=e,this.max=this.high}insert(t){t.low<=this.low?null===this.left?this.left=t:this.left.insert(t):null===this.right?this.right=t:this.right.insert(t)}search(t,e){t>this.max||(null!==this.left&&this.left.search(t,e),this.low<=t&&this.high>t&&e.push(this),this.low>t||null!==this.right&&this.right.search(t,e))}searchAfter(t,e){this.low>=t&&(e.push(this),null!==this.left&&this.left.searchAfter(t,e)),null!==this.right&&this.right.searchAfter(t,e)}traverse(t){t(this),null!==this.left&&this.left.traverse(t),null!==this.right&&this.right.traverse(t)}updateHeight(){null!==this.left&&null!==this.right?this.height=Math.max(this.left.height,this.right.height)+1:null!==this.right?this.height=this.right.height+1:null!==this.left?this.height=this.left.height+1:this.height=0}updateMax(){this.max=this.high,null!==this.left&&(this.max=Math.max(this.max,this.left.max)),null!==this.right&&(this.max=Math.max(this.max,this.right.max))}getBalance(){let t=0;return null!==this.left&&null!==this.right?t=this.left.height-this.right.height:null!==this.left?t=this.left.height+1:null!==this.right&&(t=-(this.right.height+1)),t}isLeftChild(){return null!==this.parent&&this.parent.left===this}get left(){return this._left}set left(t){null!==(this._left=t)&&(t.parent=this),this.updateHeight(),this.updateMax()}get right(){return this._right}set right(t){null!==(this._right=t)&&(t.parent=this),this.updateHeight(),this.updateMax()}dispose(){this.parent=null,this._left=null,this._right=null,this.event=null}}class Vd extends md{constructor(){super(Cp(Vd.getDefaults(),arguments,["volume"])),this.name="Volume";var t=Cp(Vd.getDefaults(),arguments,["volume"]);this.input=this.output=new xd({context:this.context,gain:t.volume,units:"decibels"}),this.volume=this.output.gain,Gp(this,"volume"),this._unmutedVolume=t.volume,this.mute=t.mute}static getDefaults(){return Object.assign(md.getDefaults(),{mute:!1,volume:0})}get mute(){return this.volume.value===-1/0}set mute(t){!this.mute&&t?(this._unmutedVolume=this.volume.value,this.volume.value=-1/0):this.mute&&!t&&(this.volume.value=this._unmutedVolume)}dispose(){return super.dispose(),this.input.dispose(),this.volume.dispose(),this}}class Nd extends md{constructor(){super(Cp(Nd.getDefaults(),arguments)),this.name="Destination",this.input=new Vd({context:this.context}),this.output=new xd({context:this.context}),this.volume=this.input.volume;var t=Cp(Nd.getDefaults(),arguments);gd(this.input,this.output,this.context.rawContext.destination),this.mute=t.mute,this._internalChannels=[this.input,this.context.rawContext.destination,this.output]}static getDefaults(){return Object.assign(md.getDefaults(),{mute:!1,volume:0})}get mute(){return this.input.mute}set mute(t){this.input.mute=t}chain(...t){return this.input.disconnect(),t.unshift(this.input),t.push(this.output),gd(...t),this}get maxChannelCount(){return this.context.rawContext.destination.maxChannelCount}dispose(){return super.dispose(),this.volume.dispose(),this}}jp(t=>{t.destination=new Nd({context:t})}),zp(t=>{t.destination.dispose()});class Pd extends Mp{constructor(t){super(),this.name="TimelineValue",this._timeline=new Np({memory:10}),this._initialValue=t}set(t,e){return this._timeline.add({value:t,time:e}),this}get(t){t=this._timeline.get(t);return t?t.value:this._initialValue}}class jd{constructor(t,e){this.id=jd._eventId++,this._remainderTime=0;e=Object.assign(jd.getDefaults(),e);this.transport=t,this.callback=e.callback,this._once=e.once,this.time=Math.floor(e.time),this._remainderTime=e.time-this.time}static getDefaults(){return{callback:Zp,once:!1,time:0}}get floatTime(){return this.time+this._remainderTime}invoke(t){var e;this.callback&&(e=this.transport.bpm.getDurationOfTicks(1,t),this.callback(t+this._remainderTime*e),this._once&&this.transport.clear(this.id))}dispose(){return this.callback=void 0,this}}jd._eventId=0;class Ld extends jd{constructor(t,e){super(t,e),this._currentId=-1,this._nextId=-1,this._nextTick=this.time,this._boundRestart=this._restart.bind(this);e=Object.assign(Ld.getDefaults(),e);this.duration=e.duration,this._interval=e.interval,this._nextTick=e.time,this.transport.on("start",this._boundRestart),this.transport.on("loopStart",this._boundRestart),this.transport.on("ticks",this._boundRestart),this.context=this.transport.context,this._restart()}static getDefaults(){return Object.assign({},jd.getDefaults(),{duration:1/0,interval:1,once:!1})}invoke(t){this._createEvents(t),super.invoke(t)}_createEvent(){return Fp(this._nextTick,this.floatTime+this.duration)?this.transport.scheduleOnce(this.invoke.bind(this),new Rd(this.context,this._nextTick).toSeconds()):-1}_createEvents(t){Fp(this._nextTick+this._interval,this.floatTime+this.duration)&&(this._nextTick+=this._interval,this._currentId=this._nextId,this._nextId=this.transport.scheduleOnce(this.invoke.bind(this),new Rd(this.context,this._nextTick).toSeconds()))}_restart(t){this.transport.clear(this._currentId),this.transport.clear(this._nextId),this._nextTick=this.floatTime;t=this.transport.getTicksAtTime(t);Rp(t,this.time)&&(this._nextTick=this.floatTime+Math.ceil((t-this.floatTime)/this._interval)*this._interval),this._currentId=this._createEvent(),this._nextTick+=this._interval,this._nextId=this._createEvent()}dispose(){return super.dispose(),this.transport.clear(this._currentId),this.transport.clear(this._nextId),this.transport.off("start",this._boundRestart),this.transport.off("loopStart",this._boundRestart),this.transport.off("ticks",this._boundRestart),this}}class zd extends dd{constructor(){super(Cp(zd.getDefaults(),arguments)),this.name="Transport",this._loop=new Pd(!1),this._loopStart=0,this._loopEnd=0,this._scheduledEvents={},this._timeline=new Np,this._repeatedEvents=new Fd,this._syncedSignals=[],this._swingAmount=0;var t=Cp(zd.getDefaults(),arguments);this._ppq=t.ppq,this._clock=new Dd({callback:this._processTick.bind(this),context:this.context,frequency:0,units:"bpm"}),this._bindClockEvents(),this.bpm=this._clock.frequency,this._clock.frequency.multiplier=t.ppq,this.bpm.setValueAtTime(t.bpm,0),Gp(this,"bpm"),this._timeSignature=t.timeSignature,this._swingTicks=t.ppq/2}static getDefaults(){return Object.assign(dd.getDefaults(),{bpm:120,loopEnd:"4m",loopStart:0,ppq:192,swing:0,swingSubdivision:"8n",timeSignature:4})}_processTick(e,t){var s;this._loop.get(e)&&t>=this._loopEnd&&(this.emit("loopEnd",e),this._clock.setTicksAtTime(this._loopStart,e),t=this._loopStart,this.emit("loopStart",e,this._clock.getSecondsAtTime(e)),this.emit("loop",e)),0t.invoke(e)),up(!1)}schedule(t,e){e=new jd(this,{callback:t,time:new pd(this.context,e).toTicks()});return this._addEvent(e,this._timeline)}scheduleRepeat(t,e,s,n=1/0){s=new Ld(this,{callback:t,duration:new hd(this.context,n).toTicks(),interval:new hd(this.context,e).toTicks(),time:new pd(this.context,s).toTicks()});return this._addEvent(s,this._repeatedEvents)}scheduleOnce(t,e){e=new jd(this,{callback:t,once:!0,time:new pd(this.context,e).toTicks()});return this._addEvent(e,this._timeline)}clear(t){if(this._scheduledEvents.hasOwnProperty(t)){const e=this._scheduledEvents[t.toString()];e.timeline.remove(e.event),e.event.dispose(),delete this._scheduledEvents[t.toString()]}return this}_addEvent(t,e){return this._scheduledEvents[t.id.toString()]={event:t,timeline:e},e.add(t),t.id}cancel(t=0){t=this.toTicks(t);return this._timeline.forEachFrom(t,t=>this.clear(t.id)),this._repeatedEvents.forEachFrom(t,t=>this.clear(t.id)),this}_bindClockEvents(){this._clock.on("start",(t,e)=>{e=new Rd(this.context,e).toSeconds(),this.emit("start",t,e)}),this._clock.on("stop",t=>{this.emit("stop",t)}),this._clock.on("pause",t=>{this.emit("pause",t)})}get state(){return this._clock.getStateAtTime(this.now())}start(t,e){let s;return this.context.resume(),Ju(e)&&(s=this.toTicks(e)),this._clock.start(t,s),this}stop(t){return this._clock.stop(t),this}pause(t){return this._clock.pause(t),this}toggle(t){return t=this.toSeconds(t),"started"!==this._clock.getStateAtTime(t)?this.start(t):this.stop(t),this}get timeSignature(){return this._timeSignature}set timeSignature(t){np(t)&&(t=t[0]/t[1]*4),this._timeSignature=t}get loopStart(){return new hd(this.context,this._loopStart,"i").toSeconds()}set loopStart(t){this._loopStart=this.toTicks(t)}get loopEnd(){return new hd(this.context,this._loopEnd,"i").toSeconds()}set loopEnd(t){this._loopEnd=this.toTicks(t)}get loop(){return this._loop.get(this.now())}set loop(t){this._loop.set(t,this.now())}setLoopPoints(t,e){return this.loopStart=t,this.loopEnd=e,this}get swing(){return this._swingAmount}set swing(t){this._swingAmount=t}get swingSubdivision(){return new Rd(this.context,this._swingTicks).toNotation()}set swingSubdivision(t){this._swingTicks=this.toTicks(t)}get position(){var t=this.now(),t=this._clock.getTicksAtTime(t);return new Rd(this.context,t).toBarsBeatsSixteenths()}set position(t){t=this.toTicks(t);this.ticks=t}get seconds(){return this._clock.seconds}set seconds(t){var e=this.now(),e=this._clock.frequency.timeToTicks(t,e);this.ticks=e}get progress(){if(this.loop){var t=this.now();return(this._clock.getTicksAtTime(t)-this._loopStart)/(this._loopEnd-this._loopStart)}return 0}get ticks(){return this._clock.ticks}set ticks(t){var e,s;this._clock.ticks!==t&&(e=this.now(),"started"===this.state?(s=this._clock.getTicksAtTime(e),s=e+this._clock.frequency.getDurationOfTicks(Math.ceil(s)-s,e),this.emit("stop",s),this._clock.setTicksAtTime(t,s),this.emit("start",s,this._clock.getSecondsAtTime(s))):(this.emit("ticks",e),this._clock.setTicksAtTime(t,e)))}getTicksAtTime(t){return this._clock.getTicksAtTime(t)}getSecondsAtTime(t){return this._clock.getSecondsAtTime(t)}get PPQ(){return this._clock.frequency.multiplier}set PPQ(t){this._clock.frequency.multiplier=t}nextSubdivision(t){if(t=this.toTicks(t),"started"!==this.state)return 0;var e=this.now(),t=t-this.getTicksAtTime(e)%t;return this._clock.nextTickTime(t,e)}syncSignal(t,e){if(!e){const n=this.now();var s;e=0!==t.getValueAtTime(n)?(s=1/(60/this.bpm.getValueAtTime(n)/this.PPQ),t.getValueAtTime(n)/s):0}const n=new xd(e);return this.bpm.connect(n),n.connect(t._param),this._syncedSignals.push({initial:t.value,ratio:n,signal:t}),t.value=0,this}unsyncSignal(e){for(let t=this._syncedSignals.length-1;0<=t;t--){const s=this._syncedSignals[t];s.signal===e&&(s.ratio.dispose(),s.signal.value=s.initial,this._syncedSignals.splice(t,1))}return this}dispose(){return super.dispose(),this._clock.dispose(),Qp(this,"bpm"),this._timeline.dispose(),this._repeatedEvents.dispose(),this}}Wp.mixin(zd),jp(t=>{t.transport=new zd({context:t})}),zp(t=>{t.transport.dispose()});class Wd extends md{constructor(t){super(t),this.input=void 0,this._state=new fd("stopped"),this._synced=!1,this._scheduled=[],this._syncedStart=Zp,this._syncedStop=Zp,this._state.memory=100,this._state.increasing=!0,this._volume=this.output=new Vd({context:this.context,mute:t.mute,volume:t.volume}),this.volume=this._volume.volume,Gp(this,"volume"),this.onstop=t.onstop}static getDefaults(){return Object.assign(md.getDefaults(),{mute:!1,onstop:Zp,volume:0})}get state(){return this._synced?"started"===this.context.transport.state?this._state.getValueAtTime(this.context.transport.seconds):"stopped":this._state.getValueAtTime(this.now())}get mute(){return this._volume.mute}set mute(t){this._volume.mute=t}_clampToCurrentTime(t){return this._synced?t:Math.max(t,this.context.currentTime)}start(t,e,s){var n=Hu(t)&&this._synced?this.context.transport.seconds:this.toSeconds(t),n=this._clampToCurrentTime(n);if(this._synced||"started"!==this._state.getValueAtTime(n))if(this.log("start",n),this._state.setStateAtTime("started",n),this._synced){const i=this._state.get(n);i&&(i.offset=this.toSeconds(Dp(e,0)),i.duration=s?this.toSeconds(s):void 0);t=this.context.transport.schedule(t=>{this._start(t,e,s)},n);this._scheduled.push(t),"started"===this.context.transport.state&&this.context.transport.getSecondsAtTime(this.immediate())>n&&this._syncedStart(this.now(),this.context.transport.seconds)}else hp(this.context),this._start(n,e,s);else op(Rp(n,this._state.get(n).time),"Start time must be strictly greater than previous start time"),this._state.cancel(n),this._state.setStateAtTime("started",n),this.log("restart",n),this.restart(n,e,s);return this}stop(t){t=Hu(t)&&this._synced?this.context.transport.seconds:this.toSeconds(t),t=this._clampToCurrentTime(t);if("started"===this._state.getValueAtTime(t)||Ju(this._state.getNextState("started",t))){if(this.log("stop",t),this._synced){const e=this.context.transport.schedule(this._stop.bind(this),t);this._scheduled.push(e)}else this._stop(t);this._state.cancel(t),this._state.setStateAtTime("stopped",t)}return this}restart(t,e,s){return t=this.toSeconds(t),"started"===this._state.getValueAtTime(t)&&(this._state.cancel(t),this._restart(t,e,s)),this}sync(){return this._synced||(this._synced=!0,this._syncedStart=(e,s)=>{if(Rp(s,0)){var n=this._state.get(s);if(n&&"started"===n.state&&n.time!==s){s=s-this.toSeconds(n.time);let t;n.duration&&(t=this.toSeconds(n.duration)-s),this._start(e,this.toSeconds(n.offset)+s,t)}}},this._syncedStop=t=>{var e=this.context.transport.getSecondsAtTime(Math.max(t-this.sampleTime,0));"started"===this._state.getValueAtTime(e)&&this._stop(t)},this.context.transport.on("start",this._syncedStart),this.context.transport.on("loopStart",this._syncedStart),this.context.transport.on("stop",this._syncedStop),this.context.transport.on("pause",this._syncedStop),this.context.transport.on("loopEnd",this._syncedStop)),this}unsync(){return this._synced&&(this.context.transport.off("stop",this._syncedStop),this.context.transport.off("pause",this._syncedStop),this.context.transport.off("loopEnd",this._syncedStop),this.context.transport.off("start",this._syncedStart),this.context.transport.off("loopStart",this._syncedStart)),this._synced=!1,this._scheduled.forEach(t=>this.context.transport.clear(t)),this._scheduled=[],this._state.cancel(0),this._stop(0),this}dispose(){return super.dispose(),this.onstop=Zp,this.unsync(),this._volume.dispose(),this._state.dispose(),this}}class Bd extends wd{constructor(){super(Cp(Bd.getDefaults(),arguments,["url","onload"])),this.name="ToneBufferSource",this._source=this.context.createBufferSource(),this._internalChannels=[this._source],this._sourceStarted=!1,this._sourceStopped=!1;var t=Cp(Bd.getDefaults(),arguments,["url","onload"]);vd(this._source,this._gainNode),this._source.onended=()=>this._stopSource(),this.playbackRate=new _d({context:this.context,param:this._source.playbackRate,units:"positive",value:t.playbackRate}),this.loop=t.loop,this.loopStart=t.loopStart,this.loopEnd=t.loopEnd,this._buffer=new Xp(t.url,t.onload,t.onerror),this._internalChannels.push(this._source)}static getDefaults(){return Object.assign(wd.getDefaults(),{url:new Xp,loop:!1,loopEnd:0,loopStart:0,onload:Zp,onerror:Zp,playbackRate:1})}get fadeIn(){return this._fadeIn}set fadeIn(t){this._fadeIn=t}get fadeOut(){return this._fadeOut}set fadeOut(t){this._fadeOut=t}get curve(){return this._curve}set curve(t){this._curve=t}start(t,e,s,n=1){op(this.buffer.loaded,"buffer is either not set or not loaded");t=this.toSeconds(t);this._startGain(t,n),e=this.loop?Dp(e,this.loopStart):Dp(e,0);let i=Math.max(this.toSeconds(e),0);if(this.loop){const r=this.toSeconds(this.loopEnd)||this.buffer.duration,e=this.toSeconds(this.loopStart),o=r-e;qp(i,r)&&(i=(i-e)%o+e),Ip(i,this.buffer.duration)&&(i=0)}return this._source.buffer=this.buffer.get(),this._source.loopEnd=this.toSeconds(this.loopEnd)||this.buffer.duration,Fp(i,this.buffer.duration)&&(this._sourceStarted=!0,this._source.start(t,i)),Ju(s)&&(s=this.toSeconds(s),s=Math.max(s,0),this.stop(t+s)),this}_stopSource(t){!this._sourceStopped&&this._sourceStarted&&(this._sourceStopped=!0,this._source.stop(this.toSeconds(t)),this._onended())}get loopStart(){return this._source.loopStart}set loopStart(t){this._source.loopStart=this.toSeconds(t)}get loopEnd(){return this._source.loopEnd}set loopEnd(t){this._source.loopEnd=this.toSeconds(t)}get buffer(){return this._buffer}set buffer(t){this._buffer.set(t)}get loop(){return this._source.loop}set loop(t){this._source.loop=t,this._sourceStarted&&this.cancelStop()}dispose(){return super.dispose(),this._source.onended=null,this._source.disconnect(),this._buffer.dispose(),this.playbackRate.dispose(),this}}class Ud extends Wd{constructor(){super(Cp(Ud.getDefaults(),arguments,["type"])),this.name="Noise",this._source=null;var t=Cp(Ud.getDefaults(),arguments,["type"]);this._playbackRate=t.playbackRate,this.type=t.type,this._fadeIn=t.fadeIn,this._fadeOut=t.fadeOut}static getDefaults(){return Object.assign(Wd.getDefaults(),{fadeIn:0,fadeOut:0,playbackRate:1,type:"white"})}get type(){return this._type}set type(t){if(op(t in Zd,"Noise: invalid type: "+t),this._type!==t&&(this._type=t,"started"===this.state)){const t=this.now();this._stop(t),this._start(t)}}get playbackRate(){return this._playbackRate}set playbackRate(t){this._playbackRate=t,this._source&&(this._source.playbackRate.value=t)}_start(t){var e=Zd[this._type];this._source=new Bd({url:e,context:this.context,fadeIn:this._fadeIn,fadeOut:this._fadeOut,loop:!0,onended:()=>this.onstop(this),playbackRate:this._playbackRate}).connect(this.output),this._source.start(this.toSeconds(t),Math.random()*(e.duration-.001))}_stop(t){this._source&&(this._source.stop(this.toSeconds(t)),this._source=null)}get fadeIn(){return this._fadeIn}set fadeIn(t){this._fadeIn=t,this._source&&(this._source.fadeIn=this._fadeIn)}get fadeOut(){return this._fadeOut}set fadeOut(t){this._fadeOut=t,this._source&&(this._source.fadeOut=this._fadeOut)}_restart(t){this._stop(t),this._start(t)}dispose(){return super.dispose(),this._source&&this._source.disconnect(),this}}const Gd=220500,Qd={brown:null,pink:null,white:null},Zd={get brown(){if(!Qd.brown){const n=[];for(let t=0;t<2;t++){const i=new Float32Array(Gd);n[t]=i;let e=0;for(let t=0;tt.label===n||t.deviceId===n),!this._device&&0{t.stop()}),this._stream=void 0,this._mediaStream.disconnect(),this._mediaStream=void 0),this._device=void 0,this}static enumerateDevices(){return yp(this,void 0,void 0,function*(){return(yield navigator.mediaDevices.enumerateDevices()).filter(t=>"audioinput"===t.kind)})}get state(){return this._stream&&this._stream.active?"started":"stopped"}get deviceId(){return this._device?this._device.deviceId:void 0}get groupId(){return this._device?this._device.groupId:void 0}get label(){return this._device?this._device.label:void 0}get mute(){return this._volume.mute}set mute(t){this._volume.mute=t}dispose(){return super.dispose(),this.close(),this._volume.dispose(),this.volume.dispose(),this}static get supported(){return Ju(navigator.mediaDevices)&&Ju(navigator.mediaDevices.getUserMedia)}}function Yd(s,n){return yp(this,void 0,void 0,function*(){const t=n/s.context.sampleRate,e=new Yp(1,t,s.context.sampleRate);return new s.constructor(Object.assign(s.get(),{frequency:2/t,detune:0,context:e})).toDestination().start(0),(yield e.render()).getChannelData(0)})}class $d extends wd{constructor(){super(Cp($d.getDefaults(),arguments,["frequency","type"])),this.name="ToneOscillatorNode",this._oscillator=this.context.createOscillator(),this._internalChannels=[this._oscillator];var t=Cp($d.getDefaults(),arguments,["frequency","type"]);vd(this._oscillator,this._gainNode),this.type=t.type,this.frequency=new _d({context:this.context,param:this._oscillator.frequency,units:"frequency",value:t.frequency}),this.detune=new _d({context:this.context,param:this._oscillator.detune,units:"cents",value:t.detune}),Gp(this,["frequency","detune"])}static getDefaults(){return Object.assign(wd.getDefaults(),{detune:0,frequency:440,type:"sine"})}start(t){t=this.toSeconds(t);return this.log("start",t),this._startGain(t),this._oscillator.start(t),this}_stopSource(t){this._oscillator.stop(t)}setPeriodicWave(t){return this._oscillator.setPeriodicWave(t),this}get type(){return this._oscillator.type}set type(t){this._oscillator.type=t}dispose(){return super.dispose(),"started"===this.state&&this.stop(),this._oscillator.disconnect(),this.frequency.dispose(),this.detune.dispose(),this}}class Hd extends Wd{constructor(){super(Cp(Hd.getDefaults(),arguments,["frequency","type"])),this.name="Oscillator",this._oscillator=null;const t=Cp(Hd.getDefaults(),arguments,["frequency","type"]);this.frequency=new Td({context:this.context,units:"frequency",value:t.frequency}),Gp(this,"frequency"),this.detune=new Td({context:this.context,units:"cents",value:t.detune}),Gp(this,"detune"),this._partials=t.partials,this._partialCount=t.partialCount,this._type=t.type,t.partialCount&&"custom"!==t.type&&(this._type=this.baseType+t.partialCount.toString()),this.phase=t.phase}static getDefaults(){return Object.assign(Wd.getDefaults(),{detune:0,frequency:440,partialCount:0,partials:[],phase:0,type:"sine"})}_start(t){var e=this.toSeconds(t),t=new $d({context:this.context,onended:()=>this.onstop(this)});this._oscillator=t,this._wave?this._oscillator.setPeriodicWave(this._wave):this._oscillator.type=this._type,this._oscillator.connect(this.output),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),this._oscillator.start(e)}_stop(t){t=this.toSeconds(t);this._oscillator&&this._oscillator.stop(t)}_restart(t){t=this.toSeconds(t);return this.log("restart",t),this._oscillator&&this._oscillator.cancelStop(),this._state.cancel(t),this}syncFrequency(){return this.context.transport.syncSignal(this.frequency),this}unsyncFrequency(){return this.context.transport.unsyncSignal(this.frequency),this}_getCachedPeriodicWave(){if("custom"===this._type)return Hd._periodicWaveCache.find(t=>{return t.phase===this._phase&&(t=t.partials,s=this._partials,t.length===s.length&&t.every((t,e)=>s[e]===t));var s});var t=Hd._periodicWaveCache.find(t=>t.type===this._type&&t.phase===this._phase);return this._partialCount=t?t.partialCount:this._partialCount,t}get type(){return this._type}set type(t){this._type=t;const e=-1!==["sine","square","sawtooth","triangle"].indexOf(t);if(0===this._phase&&e)this._wave=void 0,this._partialCount=0,null!==this._oscillator&&(this._oscillator.type=t);else{const e=this._getCachedPeriodicWave();if(Ju(e)){const{partials:t,wave:s}=e;this._wave=s,this._partials=t,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave)}else{const[e,n]=this._getRealImaginary(t,this._phase),i=this.context.createPeriodicWave(e,n);this._wave=i,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave),Hd._periodicWaveCache.push({imag:n,partialCount:this._partialCount,partials:this._partials,phase:this._phase,real:e,type:this._type,wave:this._wave}),100s[e]=t),this._partials=Array.from(s),this.type=this._type}}_getRealImaginary(s,n){let i=2048;const r=new Float32Array(i),o=new Float32Array(i);let a=1;if("custom"===s){if(a=this._partials.length+1,this._partialCount=this._partials.length,i=a,0===this._partials.length)return[r,o]}else{const n=/^(sine|triangle|square|sawtooth)(\d+)$/.exec(s);n?(a=parseInt(n[2],10)+1,this._partialCount=parseInt(n[2],10),s=n[1],a=Math.max(a,2),i=a):this._partialCount=0,this._partials=[]}for(let e=1;e>1&1?-1:1):0,this._partials[e-1]=t;break;case"custom":t=this._partials[e-1];break;default:throw new TypeError("Oscillator: invalid type: "+s)}0!==t?(r[e]=-t*Math.sin(n*e),o[e]=t*Math.cos(n*e)):(r[e]=0,o[e]=0)}return[r,o]}_inverseFFT(e,s,n){let i=0;var r=e.length;for(let t=0;tt.includes(e)),"oversampling must be either 'none', '2x', or '4x'"),this._shaper.oversample=e}dispose(){return super.dispose(),this._shaper.disconnect(),this}}class tf extends Jd{constructor(){super(...arguments),this.name="AudioToGain",this._norm=new Kd({context:this.context,mapping:t=>(t+1)/2}),this.input=this._norm,this.output=this._norm}dispose(){return super.dispose(),this._norm.dispose(),this}}class ef extends Td{constructor(){super(Object.assign(Cp(ef.getDefaults(),arguments,["value"]))),this.name="Multiply",this.override=!1;var t=Cp(ef.getDefaults(),arguments,["value"]);this._mult=this.input=this.output=new xd({context:this.context,minValue:t.minValue,maxValue:t.maxValue}),this.factor=this._param=this._mult.gain,this.factor.setValueAtTime(t.value,0)}static getDefaults(){return Object.assign(Td.getDefaults(),{value:0})}dispose(){return super.dispose(),this._mult.dispose(),this}}class sf extends Wd{constructor(){super(Cp(sf.getDefaults(),arguments,["frequency","type","modulationType"])),this.name="AMOscillator",this._modulationScale=new tf({context:this.context}),this._modulationNode=new xd({context:this.context});var t=Cp(sf.getDefaults(),arguments,["frequency","type","modulationType"]);this._carrier=new Hd({context:this.context,detune:t.detune,frequency:t.frequency,onstop:()=>this.onstop(this),phase:t.phase,type:t.type}),this.frequency=this._carrier.frequency,this.detune=this._carrier.detune,this._modulator=new Hd({context:this.context,phase:t.phase,type:t.modulationType}),this.harmonicity=new ef({context:this.context,units:"positive",value:t.harmonicity}),this.frequency.chain(this.harmonicity,this._modulator.frequency),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output),Gp(this,["frequency","detune","harmonicity"])}static getDefaults(){return Object.assign(Hd.getDefaults(),{harmonicity:1,modulationType:"square"})}_start(t){this._modulator.start(t),this._carrier.start(t)}_stop(t){this._modulator.stop(t),this._carrier.stop(t)}_restart(t){this._modulator.restart(t),this._carrier.restart(t)}get type(){return this._carrier.type}set type(t){this._carrier.type=t}get baseType(){return this._carrier.baseType}set baseType(t){this._carrier.baseType=t}get partialCount(){return this._carrier.partialCount}set partialCount(t){this._carrier.partialCount=t}get modulationType(){return this._modulator.type}set modulationType(t){this._modulator.type=t}get phase(){return this._carrier.phase}set phase(t){this._carrier.phase=t,this._modulator.phase=t}get partials(){return this._carrier.partials}set partials(t){this._carrier.partials=t}asArray(t=1024){return yp(this,void 0,void 0,function*(){return Yd(this,t)})}dispose(){return super.dispose(),this.frequency.dispose(),this.detune.dispose(),this.harmonicity.dispose(),this._carrier.dispose(),this._modulator.dispose(),this._modulationNode.dispose(),this._modulationScale.dispose(),this}}class nf extends Wd{constructor(){super(Cp(nf.getDefaults(),arguments,["frequency","type","modulationType"])),this.name="FMOscillator",this._modulationNode=new xd({context:this.context,gain:0});var t=Cp(nf.getDefaults(),arguments,["frequency","type","modulationType"]);this._carrier=new Hd({context:this.context,detune:t.detune,frequency:0,onstop:()=>this.onstop(this),phase:t.phase,type:t.type}),this.detune=this._carrier.detune,this.frequency=new Td({context:this.context,units:"frequency",value:t.frequency}),this._modulator=new Hd({context:this.context,phase:t.phase,type:t.modulationType}),this.harmonicity=new ef({context:this.context,units:"positive",value:t.harmonicity}),this.modulationIndex=new ef({context:this.context,units:"positive",value:t.modulationIndex}),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output),this.detune.connect(this._modulator.detune),Gp(this,["modulationIndex","frequency","detune","harmonicity"])}static getDefaults(){return Object.assign(Hd.getDefaults(),{harmonicity:1,modulationIndex:2,modulationType:"square"})}_start(t){this._modulator.start(t),this._carrier.start(t)}_stop(t){this._modulator.stop(t),this._carrier.stop(t)}_restart(t){return this._modulator.restart(t),this._carrier.restart(t),this}get type(){return this._carrier.type}set type(t){this._carrier.type=t}get baseType(){return this._carrier.baseType}set baseType(t){this._carrier.baseType=t}get partialCount(){return this._carrier.partialCount}set partialCount(t){this._carrier.partialCount=t}get modulationType(){return this._modulator.type}set modulationType(t){this._modulator.type=t}get phase(){return this._carrier.phase}set phase(t){this._carrier.phase=t,this._modulator.phase=t}get partials(){return this._carrier.partials}set partials(t){this._carrier.partials=t}asArray(t=1024){return yp(this,void 0,void 0,function*(){return Yd(this,t)})}dispose(){return super.dispose(),this.frequency.dispose(),this.harmonicity.dispose(),this._carrier.dispose(),this._modulator.dispose(),this._modulationNode.dispose(),this.modulationIndex.dispose(),this}}class rf extends Wd{constructor(){super(Cp(rf.getDefaults(),arguments,["frequency","width"])),this.name="PulseOscillator",this._widthGate=new xd({context:this.context,gain:0}),this._thresh=new Kd({context:this.context,mapping:t=>t<=0?-1:1});var t=Cp(rf.getDefaults(),arguments,["frequency","width"]);this.width=new Td({context:this.context,units:"audioRange",value:t.width}),this._triangle=new Hd({context:this.context,detune:t.detune,frequency:t.frequency,onstop:()=>this.onstop(this),phase:t.phase,type:"triangle"}),this.frequency=this._triangle.frequency,this.detune=this._triangle.detune,this._triangle.chain(this._thresh,this.output),this.width.chain(this._widthGate,this._thresh),Gp(this,["width","frequency","detune"])}static getDefaults(){return Object.assign(Wd.getDefaults(),{detune:0,frequency:440,phase:0,type:"pulse",width:.2})}_start(t){t=this.toSeconds(t),this._triangle.start(t),this._widthGate.gain.setValueAtTime(1,t)}_stop(t){t=this.toSeconds(t),this._triangle.stop(t),this._widthGate.gain.cancelScheduledValues(t),this._widthGate.gain.setValueAtTime(0,t)}_restart(t){this._triangle.restart(t),this._widthGate.gain.cancelScheduledValues(t),this._widthGate.gain.setValueAtTime(1,t)}get phase(){return this._triangle.phase}set phase(t){this._triangle.phase=t}get type(){return"pulse"}get baseType(){return"pulse"}get partials(){return[]}get partialCount(){return 0}set carrierType(t){this._triangle.type=t}asArray(t=1024){return yp(this,void 0,void 0,function*(){return Yd(this,t)})}dispose(){return super.dispose(),this._triangle.dispose(),this.width.dispose(),this._widthGate.dispose(),this._thresh.dispose(),this}}class of extends Wd{constructor(){super(Cp(of.getDefaults(),arguments,["frequency","type","spread"])),this.name="FatOscillator",this._oscillators=[];var t=Cp(of.getDefaults(),arguments,["frequency","type","spread"]);this.frequency=new Td({context:this.context,units:"frequency",value:t.frequency}),this.detune=new Td({context:this.context,units:"cents",value:t.detune}),this._spread=t.spread,this._type=t.type,this._phase=t.phase,this._partials=t.partials,this._partialCount=t.partialCount,this.count=t.count,Gp(this,["frequency","detune"])}static getDefaults(){return Object.assign(Hd.getDefaults(),{count:3,spread:20,type:"sawtooth"})}_start(e){e=this.toSeconds(e),this._forEach(t=>t.start(e))}_stop(e){e=this.toSeconds(e),this._forEach(t=>t.stop(e))}_restart(e){this._forEach(t=>t.restart(e))}_forEach(e){for(let t=0;tt.type=e)}get spread(){return this._spread}set spread(t){if(this._spread=t,1t.detune.value=s+n*e)}}get count(){return this._oscillators.length}set count(e){if(ap(e,1),this._oscillators.length!==e){this._forEach(t=>t.dispose()),this._oscillators=[];for(let t=0;tthis.onstop(this):Zp});"custom"===this.type&&(s.partials=this._partials),this.frequency.connect(s.frequency),this.detune.connect(s.detune),s.detune.overridden=!1,s.connect(this.output),this._oscillators[t]=s}this.spread=this._spread,"started"===this.state&&this._forEach(t=>t.start())}}get phase(){return this._phase}set phase(t){this._phase=t,this._forEach((t,e)=>t.phase=this._phase+e/this.count*360)}get baseType(){return this._oscillators[0].baseType}set baseType(e){this._forEach(t=>t.baseType=e),this._type=this._oscillators[0].type}get partials(){return this._oscillators[0].partials}set partials(e){this._partials=e,this._partialCount=this._partials.length,e.length&&(this._type="custom",this._forEach(t=>t.partials=e))}get partialCount(){return this._oscillators[0].partialCount}set partialCount(e){this._partialCount=e,this._forEach(t=>t.partialCount=e),this._type=this._oscillators[0].type}asArray(t=1024){return yp(this,void 0,void 0,function*(){return Yd(this,t)})}dispose(){return super.dispose(),this.frequency.dispose(),this.detune.dispose(),this._forEach(t=>t.dispose()),this}}class af extends Wd{constructor(){super(Cp(af.getDefaults(),arguments,["frequency","modulationFrequency"])),this.name="PWMOscillator",this.sourceType="pwm",this._scale=new ef({context:this.context,value:2});var t=Cp(af.getDefaults(),arguments,["frequency","modulationFrequency"]);this._pulse=new rf({context:this.context,frequency:t.modulationFrequency}),this._pulse.carrierType="sine",this.modulationFrequency=this._pulse.frequency,this._modulator=new Hd({context:this.context,detune:t.detune,frequency:t.frequency,onstop:()=>this.onstop(this),phase:t.phase}),this.frequency=this._modulator.frequency,this.detune=this._modulator.detune,this._modulator.chain(this._scale,this._pulse.width),this._pulse.connect(this.output),Gp(this,["modulationFrequency","frequency","detune"])}static getDefaults(){return Object.assign(Wd.getDefaults(),{detune:0,frequency:440,modulationFrequency:.4,phase:0,type:"pwm"})}_start(t){t=this.toSeconds(t),this._modulator.start(t),this._pulse.start(t)}_stop(t){t=this.toSeconds(t),this._modulator.stop(t),this._pulse.stop(t)}_restart(t){this._modulator.restart(t),this._pulse.restart(t)}get type(){return"pwm"}get baseType(){return"pwm"}get partials(){return[]}get partialCount(){return 0}get phase(){return this._modulator.phase}set phase(t){this._modulator.phase=t}asArray(t=1024){return yp(this,void 0,void 0,function*(){return Yd(this,t)})}dispose(){return super.dispose(),this._pulse.dispose(),this._scale.dispose(),this._modulator.dispose(),this}}const hf={am:sf,fat:of,fm:nf,oscillator:Hd,pulse:rf,pwm:af};class cf extends Wd{constructor(){super(Cp(cf.getDefaults(),arguments,["frequency","type"])),this.name="OmniOscillator";var t=Cp(cf.getDefaults(),arguments,["frequency","type"]);this.frequency=new Td({context:this.context,units:"frequency",value:t.frequency}),this.detune=new Td({context:this.context,units:"cents",value:t.detune}),Gp(this,["frequency","detune"]),this.set(t)}static getDefaults(){return Object.assign(Hd.getDefaults(),nf.getDefaults(),sf.getDefaults(),of.getDefaults(),rf.getDefaults(),af.getDefaults())}_start(t){this._oscillator.start(t)}_stop(t){this._oscillator.stop(t)}_restart(t){return this._oscillator.restart(t),this}get type(){let t="";return["am","fm","fat"].some(t=>this._sourceType===t)&&(t=this._sourceType),t+this._oscillator.type}set type(t){"fm"===t.substr(0,2)?(this._createNewOscillator("fm"),this._oscillator=this._oscillator,this._oscillator.type=t.substr(2)):"am"===t.substr(0,2)?(this._createNewOscillator("am"),this._oscillator=this._oscillator,this._oscillator.type=t.substr(2)):"fat"===t.substr(0,3)?(this._createNewOscillator("fat"),this._oscillator=this._oscillator,this._oscillator.type=t.substr(3)):"pwm"===t?(this._createNewOscillator("pwm"),this._oscillator=this._oscillator):"pulse"===t?this._createNewOscillator("pulse"):(this._createNewOscillator("oscillator"),this._oscillator=this._oscillator,this._oscillator.type=t)}get partials(){return this._oscillator.partials}set partials(t){this._getOscType(this._oscillator,"pulse")||this._getOscType(this._oscillator,"pwm")||(this._oscillator.partials=t)}get partialCount(){return this._oscillator.partialCount}set partialCount(t){this._getOscType(this._oscillator,"pulse")||this._getOscType(this._oscillator,"pwm")||(this._oscillator.partialCount=t)}set(t){return Reflect.has(t,"type")&&t.type&&(this.type=t.type),super.set(t),this}_createNewOscillator(t){if(t!==this._sourceType){this._sourceType=t;const e=hf[t],s=this.now();if(this._oscillator){const t=this._oscillator;t.stop(s),this.context.setTimeout(()=>t.dispose(),this.blockTime)}this._oscillator=new e({context:this.context}),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),this._oscillator.connect(this.output),this._oscillator.onstop=()=>this.onstop(this),"started"===this.state&&this._oscillator.start(s)}}get phase(){return this._oscillator.phase}set phase(t){this._oscillator.phase=t}get sourceType(){return this._sourceType}set sourceType(t){let e="sine";"pwm"!==this._oscillator.type&&"pulse"!==this._oscillator.type&&(e=this._oscillator.type),"fm"===t?this.type="fm"+e:"am"===t?this.type="am"+e:"fat"===t?this.type="fat"+e:"oscillator"===t?this.type=e:"pulse"===t?this.type="pulse":"pwm"===t&&(this.type="pwm")}_getOscType(t,e){return t instanceof hf[e]}get baseType(){return this._oscillator.baseType}set baseType(t){this._getOscType(this._oscillator,"pulse")||this._getOscType(this._oscillator,"pwm")||"pulse"===t||"pwm"===t||(this._oscillator.baseType=t)}get width(){return this._getOscType(this._oscillator,"pulse")?this._oscillator.width:void 0}get count(){return this._getOscType(this._oscillator,"fat")?this._oscillator.count:void 0}set count(t){this._getOscType(this._oscillator,"fat")&&tp(t)&&(this._oscillator.count=t)}get spread(){return this._getOscType(this._oscillator,"fat")?this._oscillator.spread:void 0}set spread(t){this._getOscType(this._oscillator,"fat")&&tp(t)&&(this._oscillator.spread=t)}get modulationType(){return this._getOscType(this._oscillator,"fm")||this._getOscType(this._oscillator,"am")?this._oscillator.modulationType:void 0}set modulationType(t){(this._getOscType(this._oscillator,"fm")||this._getOscType(this._oscillator,"am"))&&ip(t)&&(this._oscillator.modulationType=t)}get modulationIndex(){return this._getOscType(this._oscillator,"fm")?this._oscillator.modulationIndex:void 0}get harmonicity(){return this._getOscType(this._oscillator,"fm")||this._getOscType(this._oscillator,"am")?this._oscillator.harmonicity:void 0}get modulationFrequency(){return this._getOscType(this._oscillator,"pwm")?this._oscillator.modulationFrequency:void 0}asArray(t=1024){return yp(this,void 0,void 0,function*(){return Yd(this,t)})}dispose(){return super.dispose(),this.detune.dispose(),this.frequency.dispose(),this._oscillator.dispose(),this}}class lf extends Td{constructor(){super(Object.assign(Cp(lf.getDefaults(),arguments,["value"]))),this.override=!1,this.name="Add",this._sum=new xd({context:this.context}),this.input=this._sum,this.output=this._sum,this.addend=this._param,gd(this._constantSource,this._sum)}static getDefaults(){return Object.assign(Td.getDefaults(),{value:0})}dispose(){return super.dispose(),this._sum.dispose(),this}}class uf extends Jd{constructor(){super(Object.assign(Cp(uf.getDefaults(),arguments,["min","max"]))),this.name="Scale";var t=Cp(uf.getDefaults(),arguments,["min","max"]);this._mult=this.input=new ef({context:this.context,value:t.max-t.min}),this._add=this.output=new lf({context:this.context,value:t.min}),this._min=t.min,this._max=t.max,this.input.connect(this.output)}static getDefaults(){return Object.assign(Jd.getDefaults(),{max:1,min:0})}get min(){return this._min}set min(t){this._min=t,this._setRange()}get max(){return this._max}set max(t){this._max=t,this._setRange()}_setRange(){this._add.value=this._min,this._mult.value=this._max-this._min}dispose(){return super.dispose(),this._add.dispose(),this._mult.dispose(),this}}class pf extends Jd{constructor(){super(Object.assign(Cp(pf.getDefaults(),arguments))),this.name="Zero",this._gain=new xd({context:this.context}),this.output=this._gain,this.input=void 0,vd(this.context.getConstant(0),this._gain)}dispose(){return super.dispose(),yd(this.context.getConstant(0),this._gain),this}}class df extends md{constructor(){super(Cp(df.getDefaults(),arguments,["frequency","min","max"])),this.name="LFO",this._stoppedValue=0,this._units="number",this.convert=!0,this._fromType=_d.prototype._fromType,this._toType=_d.prototype._toType,this._is=_d.prototype._is,this._clampValue=_d.prototype._clampValue;var t=Cp(df.getDefaults(),arguments,["frequency","min","max"]);this._oscillator=new Hd(t),this.frequency=this._oscillator.frequency,this._amplitudeGain=new xd({context:this.context,gain:t.amplitude,units:"normalRange"}),this.amplitude=this._amplitudeGain.gain,this._stoppedSignal=new Td({context:this.context,units:"audioRange",value:0}),this._zeros=new pf({context:this.context}),this._a2g=new tf({context:this.context}),this._scaler=this.output=new uf({context:this.context,max:t.max,min:t.min}),this.units=t.units,this.min=t.min,this.max=t.max,this._oscillator.chain(this._amplitudeGain,this._a2g,this._scaler),this._zeros.connect(this._a2g),this._stoppedSignal.connect(this._a2g),Gp(this,["amplitude","frequency"]),this.phase=t.phase}static getDefaults(){return Object.assign(Hd.getDefaults(),{amplitude:1,frequency:"4n",max:1,min:0,type:"sine",units:"number"})}start(t){return t=this.toSeconds(t),this._stoppedSignal.setValueAtTime(0,t),this._oscillator.start(t),this}stop(t){return t=this.toSeconds(t),this._stoppedSignal.setValueAtTime(this._stoppedValue,t),this._oscillator.stop(t),this}sync(){return this._oscillator.sync(),this._oscillator.syncFrequency(),this}unsync(){return this._oscillator.unsync(),this._oscillator.unsyncFrequency(),this}_setStoppedValue(){this._stoppedValue=this._oscillator.getInitialValue(),this._stoppedSignal.value=this._stoppedValue}get min(){return this._toType(this._scaler.min)}set min(t){t=this._fromType(t),this._scaler.min=t}get max(){return this._toType(this._scaler.max)}set max(t){t=this._fromType(t),this._scaler.max=t}get type(){return this._oscillator.type}set type(t){this._oscillator.type=t,this._setStoppedValue()}get partials(){return this._oscillator.partials}set partials(t){this._oscillator.partials=t,this._setStoppedValue()}get phase(){return this._oscillator.phase}set phase(t){this._oscillator.phase=t,this._setStoppedValue()}get units(){return this._units}set units(t){var e=this.min,s=this.max;this._units=t,this.min=e,this.max=s}get state(){return this._oscillator.state}connect(t,e,s){return(t instanceof _d||t instanceof Td)&&(this.convert=t.convert,this.units=t.units),Sd(this,t,e,s),this}dispose(){return super.dispose(),this._oscillator.dispose(),this._stoppedSignal.dispose(),this._zeros.dispose(),this._scaler.dispose(),this._a2g.dispose(),this._amplitudeGain.dispose(),this.amplitude.dispose(),this}}function ff(s,n=1/0){const i=new WeakMap;return function(t,e){Reflect.defineProperty(t,e,{configurable:!0,enumerable:!0,get:function(){return i.get(this)},set:function(t){ap(t,s,n),i.set(this,t)}})}}function _f(s,n=1/0){const i=new WeakMap;return function(t,e){Reflect.defineProperty(t,e,{configurable:!0,enumerable:!0,get:function(){return i.get(this)},set:function(t){ap(this.toSeconds(t),s,n),i.set(this,t)}})}}class mf extends Wd{constructor(){super(Cp(mf.getDefaults(),arguments,["url","onload"])),this.name="Player",this._activeSources=new Set;var t=Cp(mf.getDefaults(),arguments,["url","onload"]);this._buffer=new Xp({onload:this._onload.bind(this,t.onload),onerror:t.onerror,reverse:t.reverse,url:t.url}),this.autostart=t.autostart,this._loop=t.loop,this._loopStart=t.loopStart,this._loopEnd=t.loopEnd,this._playbackRate=t.playbackRate,this.fadeIn=t.fadeIn,this.fadeOut=t.fadeOut}static getDefaults(){return Object.assign(Wd.getDefaults(),{autostart:!1,fadeIn:0,fadeOut:0,loop:!1,loopEnd:0,loopStart:0,onload:Zp,onerror:Zp,playbackRate:1,reverse:!1})}load(t){return yp(this,void 0,void 0,function*(){return yield this._buffer.load(t),this._onload(),this})}_onload(t=Zp){t(),this.autostart&&this.start()}_onSourceEnd(t){this.onstop(this),this._activeSources.delete(t),0!==this._activeSources.size||this._synced||"started"!==this._state.getValueAtTime(this.now())||(this._state.cancel(this.now()),this._state.setStateAtTime("stopped",this.now()))}start(t,e,s){return super.start(t,e,s),this}_start(t,e,s){e=this._loop?Dp(e,this._loopStart):Dp(e,0);var n=this.toSeconds(e),e=s;s=Dp(s,Math.max(this._buffer.duration-n,0));s=this.toSeconds(s);s/=this._playbackRate,t=this.toSeconds(t);const i=new Bd({url:this._buffer,context:this.context,fadeIn:this.fadeIn,fadeOut:this.fadeOut,loop:this._loop,loopEnd:this._loopEnd,loopStart:this._loopStart,onended:this._onSourceEnd.bind(this),playbackRate:this._playbackRate}).connect(this.output);this._loop||this._synced||(this._state.cancel(t+s),this._state.setStateAtTime("stopped",t+s,{implicitEnd:!0})),this._activeSources.add(i),this._loop&&Hu(e)?i.start(t,n):i.start(t,n,s-this.toSeconds(this.fadeOut))}_stop(t){const e=this.toSeconds(t);this._activeSources.forEach(t=>t.stop(e))}restart(t,e,s){return super.restart(t,e,s),this}_restart(t,e,s){this._stop(t),this._start(t,e,s)}seek(t,e){e=this.toSeconds(e);if("started"===this._state.getValueAtTime(e)){const s=this.toSeconds(t);this._stop(e),this._start(e,s)}return this}setLoopPoints(t,e){return this.loopStart=t,this.loopEnd=e,this}get loopStart(){return this._loopStart}set loopStart(e){this._loopStart=e,this.buffer.loaded&&ap(this.toSeconds(e),0,this.buffer.duration),this._activeSources.forEach(t=>{t.loopStart=e})}get loopEnd(){return this._loopEnd}set loopEnd(e){this._loopEnd=e,this.buffer.loaded&&ap(this.toSeconds(e),0,this.buffer.duration),this._activeSources.forEach(t=>{t.loopEnd=e})}get buffer(){return this._buffer}set buffer(t){this._buffer.set(t)}get loop(){return this._loop}set loop(e){if(this._loop!==e&&(this._loop=e,this._activeSources.forEach(t=>{t.loop=e}),e)){const e=this._state.getNextState("stopped",this.now());e&&this._state.cancel(e.time)}}get playbackRate(){return this._playbackRate}set playbackRate(e){this._playbackRate=e;const s=this.now(),t=this._state.getNextState("stopped",s);t&&t.implicitEnd&&(this._state.cancel(t.time),this._activeSources.forEach(t=>t.cancelStop())),this._activeSources.forEach(t=>{t.playbackRate.setValueAtTime(e,s)})}get reverse(){return this._buffer.reverse}set reverse(t){this._buffer.reverse=t}get loaded(){return this._buffer.loaded}dispose(){return super.dispose(),this._activeSources.forEach(t=>t.dispose()),this._activeSources.clear(),this._buffer.dispose(),this}}vp([_f(0)],mf.prototype,"fadeIn",void 0),vp([_f(0)],mf.prototype,"fadeOut",void 0);class gf extends md{constructor(){super(Cp(gf.getDefaults(),arguments,["urls","onload"],"urls")),this.name="Players",this.input=void 0,this._players=new Map;var t=Cp(gf.getDefaults(),arguments,["urls","onload"],"urls");this._volume=this.output=new Vd({context:this.context,volume:t.volume}),this.volume=this._volume.volume,Gp(this,"volume"),this._buffers=new Md({urls:t.urls,onload:t.onload,baseUrl:t.baseUrl,onerror:t.onerror}),this.mute=t.mute,this._fadeIn=t.fadeIn,this._fadeOut=t.fadeOut}static getDefaults(){return Object.assign(Wd.getDefaults(),{baseUrl:"",fadeIn:0,fadeOut:0,mute:!1,onload:Zp,onerror:Zp,urls:{},volume:0})}get mute(){return this._volume.mute}set mute(t){this._volume.mute=t}get fadeIn(){return this._fadeIn}set fadeIn(e){this._fadeIn=e,this._players.forEach(t=>{t.fadeIn=e})}get fadeOut(){return this._fadeOut}set fadeOut(e){this._fadeOut=e,this._players.forEach(t=>{t.fadeOut=e})}get state(){return Array.from(this._players).some(([,t])=>"started"===t.state)?"started":"stopped"}has(t){return this._buffers.has(t)}player(t){var e;return op(this.has(t),`No Player with the name ${t} exists on this object`),this._players.has(t)||(e=new mf({context:this.context,fadeIn:this._fadeIn,fadeOut:this._fadeOut,url:this._buffers.get(t)}).connect(this.output),this._players.set(t,e)),this._players.get(t)}get loaded(){return this._buffers.loaded}add(t,e,s){return op(!this._buffers.has(t),"A buffer with that name already exists on this object"),this._buffers.add(t,e,s),this}stopAll(e){return this._players.forEach(t=>t.stop(e)),this}dispose(){return super.dispose(),this._volume.dispose(),this.volume.dispose(),this._players.forEach(t=>t.dispose()),this._buffers.dispose(),this}}class vf extends Wd{constructor(){super(Cp(vf.getDefaults(),arguments,["url","onload"])),this.name="GrainPlayer",this._loopStart=0,this._loopEnd=0,this._activeSources=[];var t=Cp(vf.getDefaults(),arguments,["url","onload"]);this.buffer=new Xp({onload:t.onload,onerror:t.onerror,reverse:t.reverse,url:t.url}),this._clock=new Dd({context:this.context,callback:this._tick.bind(this),frequency:1/t.grainSize}),this._playbackRate=t.playbackRate,this._grainSize=t.grainSize,this._overlap=t.overlap,this.detune=t.detune,this.overlap=t.overlap,this.loop=t.loop,this.playbackRate=t.playbackRate,this.grainSize=t.grainSize,this.loopStart=t.loopStart,this.loopEnd=t.loopEnd,this.reverse=t.reverse,this._clock.on("stop",this._onstop.bind(this))}static getDefaults(){return Object.assign(Wd.getDefaults(),{onload:Zp,onerror:Zp,overlap:.1,grainSize:.2,playbackRate:1,detune:0,loop:!1,loopStart:0,loopEnd:0,reverse:!1})}_start(t,e,s){e=Dp(e,0),e=this.toSeconds(e),t=this.toSeconds(t);var n=1/this._clock.frequency.getValueAtTime(t);this._clock.start(t,e/n),s&&this.stop(t+this.toSeconds(s))}restart(t,e,s){return super.restart(t,e,s),this}_restart(t,e,s){this._stop(t),this._start(t,e,s)}_stop(t){this._clock.stop(t)}_onstop(e){this._activeSources.forEach(t=>{t.fadeOut=0,t.stop(e)}),this.onstop(this)}_tick(t){var e=this._clock.getTicksAtTime(t),s=e*this._grainSize;if(this.log("offset",s),!this.loop&&s>this.buffer.duration)this.stop(t);else{const n=s{var t=this._activeSources.indexOf(i);-1!==t&&this._activeSources.splice(t,1)}}}get playbackRate(){return this._playbackRate}set playbackRate(t){ap(t,.001),this._playbackRate=t,this.grainSize=this._grainSize}get loopStart(){return this._loopStart}set loopStart(t){this.buffer.loaded&&ap(this.toSeconds(t),0,this.buffer.duration),this._loopStart=this.toSeconds(t)}get loopEnd(){return this._loopEnd}set loopEnd(t){this.buffer.loaded&&ap(this.toSeconds(t),0,this.buffer.duration),this._loopEnd=this.toSeconds(t)}get reverse(){return this.buffer.reverse}set reverse(t){this.buffer.reverse=t}get grainSize(){return this._grainSize}set grainSize(t){this._grainSize=this.toSeconds(t),this._clock.frequency.setValueAtTime(this._playbackRate/this._grainSize,this.now())}get overlap(){return this._overlap}set overlap(t){t=this.toSeconds(t);ap(t,0),this._overlap=t}get loaded(){return this.buffer.loaded}dispose(){return super.dispose(),this.buffer.dispose(),this._clock.dispose(),this._activeSources.forEach(t=>t.dispose()),this}}class yf extends Jd{constructor(){super(...arguments),this.name="Abs",this._abs=new Kd({context:this.context,mapping:t=>Math.abs(t)<.001?0:Math.abs(t)}),this.input=this._abs,this.output=this._abs}dispose(){return super.dispose(),this._abs.dispose(),this}}class xf extends Jd{constructor(){super(...arguments),this.name="GainToAudio",this._norm=new Kd({context:this.context,mapping:t=>2*Math.abs(t)-1}),this.input=this._norm,this.output=this._norm}dispose(){return super.dispose(),this._norm.dispose(),this}}class wf extends Jd{constructor(){super(...arguments),this.name="Negate",this._multiply=new ef({context:this.context,value:-1}),this.input=this._multiply,this.output=this._multiply}dispose(){return super.dispose(),this._multiply.dispose(),this}}class bf extends Td{constructor(){super(Object.assign(Cp(bf.getDefaults(),arguments,["value"]))),this.override=!1,this.name="Subtract",this._sum=new xd({context:this.context}),this.input=this._sum,this.output=this._sum,this._neg=new wf({context:this.context}),this.subtrahend=this._param,gd(this._constantSource,this._neg,this._sum)}static getDefaults(){return Object.assign(Td.getDefaults(),{value:0})}dispose(){return super.dispose(),this._neg.dispose(),this._sum.dispose(),this}}class Tf extends Jd{constructor(){super(Object.assign(Cp(Tf.getDefaults(),arguments))),this.name="GreaterThanZero",this._thresh=this.output=new Kd({context:this.context,length:127,mapping:t=>t<=0?0:1}),this._scale=this.input=new ef({context:this.context,value:1e4}),this._scale.connect(this._thresh)}dispose(){return super.dispose(),this._scale.dispose(),this._thresh.dispose(),this}}class Sf extends Td{constructor(){super(Object.assign(Cp(Sf.getDefaults(),arguments,["value"]))),this.name="GreaterThan",this.override=!1;var t=Cp(Sf.getDefaults(),arguments,["value"]);this._subtract=this.input=new bf({context:this.context,value:t.value}),this._gtz=this.output=new Tf({context:this.context}),this.comparator=this._param=this._subtract.subtrahend,Gp(this,"comparator"),this._subtract.connect(this._gtz)}static getDefaults(){return Object.assign(Td.getDefaults(),{value:0})}dispose(){return super.dispose(),this._gtz.dispose(),this._subtract.dispose(),this.comparator.dispose(),this}}class kf extends Jd{constructor(){super(Object.assign(Cp(kf.getDefaults(),arguments,["value"]))),this.name="Pow";var t=Cp(kf.getDefaults(),arguments,["value"]);this._exponentScaler=this.input=this.output=new Kd({context:this.context,mapping:this._expFunc(t.value),length:8192}),this._exponent=t.value}static getDefaults(){return Object.assign(Jd.getDefaults(),{value:1})}_expFunc(e){return t=>Math.pow(Math.abs(t),e)}get value(){return this._exponent}set value(t){this._exponent=t,this._exponentScaler.setMap(this._expFunc(this._exponent))}dispose(){return super.dispose(),this._exponentScaler.dispose(),this}}class Af extends uf{constructor(){super(Object.assign(Cp(Af.getDefaults(),arguments,["min","max","exponent"]))),this.name="ScaleExp";var t=Cp(Af.getDefaults(),arguments,["min","max","exponent"]);this.input=this._exp=new kf({context:this.context,value:t.exponent}),this._exp.connect(this._mult)}static getDefaults(){return Object.assign(uf.getDefaults(),{exponent:1})}get exponent(){return this._exp.value}set exponent(t){this._exp.value=t}dispose(){return super.dispose(),this._exp.dispose(),this}}class Cf extends Td{constructor(){super(Cp(Td.getDefaults(),arguments,["value","units"])),this.name="SyncedSignal",this.override=!1;var t=Cp(Td.getDefaults(),arguments,["value","units"]);this._lastVal=t.value,this._synced=this.context.transport.scheduleRepeat(this._onTick.bind(this),"1i"),this._syncedCallback=this._anchorValue.bind(this),this.context.transport.on("start",this._syncedCallback),this.context.transport.on("pause",this._syncedCallback),this.context.transport.on("stop",this._syncedCallback),this._constantSource.disconnect(),this._constantSource.stop(0),this._constantSource=this.output=new bd({context:this.context,offset:t.value,units:t.units}).start(0),this.setValueAtTime(t.value,0)}_onTick(t){var e=super.getValueAtTime(this.context.transport.seconds);this._lastVal!==e&&(this._lastVal=e,this._constantSource.offset.setValueAtTime(e,t))}_anchorValue(t){var e=super.getValueAtTime(this.context.transport.seconds);this._lastVal=e,this._constantSource.offset.cancelAndHoldAtTime(t),this._constantSource.offset.setValueAtTime(e,t)}getValueAtTime(t){t=new pd(this.context,t).toSeconds();return super.getValueAtTime(t)}setValueAtTime(t,e){e=new pd(this.context,e).toSeconds();return super.setValueAtTime(t,e),this}linearRampToValueAtTime(t,e){e=new pd(this.context,e).toSeconds();return super.linearRampToValueAtTime(t,e),this}exponentialRampToValueAtTime(t,e){e=new pd(this.context,e).toSeconds();return super.exponentialRampToValueAtTime(t,e),this}setTargetAtTime(t,e,s){e=new pd(this.context,e).toSeconds();return super.setTargetAtTime(t,e,s),this}cancelScheduledValues(t){t=new pd(this.context,t).toSeconds();return super.cancelScheduledValues(t),this}setValueCurveAtTime(t,e,s,n){e=new pd(this.context,e).toSeconds();return s=this.toSeconds(s),super.setValueCurveAtTime(t,e,s,n),this}cancelAndHoldAtTime(t){t=new pd(this.context,t).toSeconds();return super.cancelAndHoldAtTime(t),this}setRampPoint(t){t=new pd(this.context,t).toSeconds();return super.setRampPoint(t),this}exponentialRampTo(t,e,s){s=new pd(this.context,s).toSeconds();return super.exponentialRampTo(t,e,s),this}linearRampTo(t,e,s){s=new pd(this.context,s).toSeconds();return super.linearRampTo(t,e,s),this}targetRampTo(t,e,s){s=new pd(this.context,s).toSeconds();return super.targetRampTo(t,e,s),this}dispose(){return super.dispose(),this.context.transport.clear(this._synced),this.context.transport.off("start",this._syncedCallback),this.context.transport.off("pause",this._syncedCallback),this.context.transport.off("stop",this._syncedCallback),this._constantSource.dispose(),this}}class Df extends md{constructor(){super(Cp(Df.getDefaults(),arguments,["attack","decay","sustain","release"])),this.name="Envelope",this._sig=new Td({context:this.context,value:0}),this.output=this._sig,this.input=void 0;var t=Cp(Df.getDefaults(),arguments,["attack","decay","sustain","release"]);this.attack=t.attack,this.decay=t.decay,this.sustain=t.sustain,this.release=t.release,this.attackCurve=t.attackCurve,this.releaseCurve=t.releaseCurve,this.decayCurve=t.decayCurve}static getDefaults(){return Object.assign(md.getDefaults(),{attack:.01,attackCurve:"linear",decay:.1,decayCurve:"exponential",release:1,releaseCurve:"exponential",sustain:.5})}get value(){return this.getValueAtTime(this.now())}_getCurve(e,s){if(ip(e))return e;{let t;for(t in Of)if(Of[t][s]===e)return t;return e}}_setCurve(t,e,s){if(ip(s)&&Reflect.has(Of,s)){var n=Of[s];ep(n)?"_decayCurve"!==t&&(this[t]=n[e]):this[t]=n}else{if(!np(s)||"_decayCurve"===t)throw new Error("Envelope: invalid curve: "+s);this[t]=s}}get attackCurve(){return this._getCurve(this._attackCurve,"In")}set attackCurve(t){this._setCurve("_attackCurve","In",t)}get releaseCurve(){return this._getCurve(this._releaseCurve,"Out")}set releaseCurve(t){this._setCurve("_releaseCurve","Out",t)}get decayCurve(){return this._decayCurve}set decayCurve(e){op(["linear","exponential"].some(t=>t===e),`Invalid envelope curve: ${e}`),this._decayCurve=e}triggerAttack(t,s=1){this.log("triggerAttack",t,s),t=this.toSeconds(t);let n=this.toSeconds(this.attack);const e=this.toSeconds(this.decay),i=this.getValueAtTime(t);if(0{const t=128;let e,s;const n=[];for(e=0;ethis._original_triggerRelease(t);var t=Cp(Mf.getDefaults(),arguments);this._volume=this.output=new Vd({context:this.context,volume:t.volume}),this.volume=this._volume.volume,Gp(this,"volume")}static getDefaults(){return Object.assign(md.getDefaults(),{volume:0})}sync(){return this._syncState()&&(this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",0),this.context.transport.on("stop",this._syncedRelease),this.context.transport.on("pause",this._syncedRelease),this.context.transport.on("loopEnd",this._syncedRelease)),this}_syncState(){let t=!1;return this._synced||(this._synced=!0,t=!0),t}_syncMethod(t,s){const n=this["_original_"+t]=this[t];this[t]=(...e)=>{var t=e[s],t=this.context.transport.schedule(t=>{e[s]=t,n.apply(this,e)},t);this._scheduledEvents.push(t)}}unsync(){return this._scheduledEvents.forEach(t=>this.context.transport.clear(t)),this._scheduledEvents=[],this._synced&&(this._synced=!1,this.triggerAttack=this._original_triggerAttack,this.triggerRelease=this._original_triggerRelease,this.context.transport.off("stop",this._syncedRelease),this.context.transport.off("pause",this._syncedRelease),this.context.transport.off("loopEnd",this._syncedRelease)),this}triggerAttackRelease(t,e,s,n){s=this.toSeconds(s),e=this.toSeconds(e);return this.triggerAttack(t,s,n),this.triggerRelease(s+e),this}dispose(){return super.dispose(),this._volume.dispose(),this.unsync(),this._scheduledEvents=[],this}}class Ef extends Mf{constructor(){super(Cp(Ef.getDefaults(),arguments));var t=Cp(Ef.getDefaults(),arguments);this.portamento=t.portamento,this.onsilence=t.onsilence}static getDefaults(){return Object.assign(Mf.getDefaults(),{detune:0,onsilence:Zp,portamento:0})}triggerAttack(t,e,s=1){this.log("triggerAttack",t,e,s);e=this.toSeconds(e);return this._triggerEnvelopeAttack(e,s),this.setNote(t,e),this}triggerRelease(t){this.log("triggerRelease",t);t=this.toSeconds(t);return this._triggerEnvelopeRelease(t),this}setNote(t,e){e=this.toSeconds(e),t=t instanceof cd?t.toFrequency():t;if(0this.onsilence(this)},t.oscillator)),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.envelope=new Rf(Object.assign({context:this.context},t.envelope)),this.oscillator.chain(this.envelope,this.output),Gp(this,["oscillator","frequency","detune","envelope"])}static getDefaults(){return Object.assign(Ef.getDefaults(),{envelope:Object.assign(Op(Df.getDefaults(),Object.keys(md.getDefaults())),{attack:.005,decay:.1,release:1,sustain:.3}),oscillator:Object.assign(Op(cf.getDefaults(),[...Object.keys(Wd.getDefaults()),"frequency","detune"]),{type:"triangle"})})}_triggerEnvelopeAttack(t,e){if(this.envelope.triggerAttack(t,e),this.oscillator.start(t),0===this.envelope.sustain){const e=this.toSeconds(this.envelope.attack),s=this.toSeconds(this.envelope.decay);this.oscillator.stop(t+e+s)}}_triggerEnvelopeRelease(t){this.envelope.triggerRelease(t),this.oscillator.stop(t+this.toSeconds(this.envelope.release))}getLevelAtTime(t){return t=this.toSeconds(t),this.envelope.getValueAtTime(t)}dispose(){return super.dispose(),this.oscillator.dispose(),this.envelope.dispose(),this}}class Ff extends Ef{constructor(){super(Cp(Ff.getDefaults(),arguments)),this.name="ModulationSynth";var t=Cp(Ff.getDefaults(),arguments);this._carrier=new qf({context:this.context,oscillator:t.oscillator,envelope:t.envelope,onsilence:()=>this.onsilence(this),volume:-10}),this._modulator=new qf({context:this.context,oscillator:t.modulation,envelope:t.modulationEnvelope,volume:-10}),this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope,this.modulation=this._modulator.oscillator,this.modulationEnvelope=this._modulator.envelope,this.frequency=new Td({context:this.context,units:"frequency"}),this.detune=new Td({context:this.context,value:t.detune,units:"cents"}),this.harmonicity=new ef({context:this.context,value:t.harmonicity,minValue:0}),this._modulationNode=new xd({context:this.context,gain:0}),Gp(this,["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"])}static getDefaults(){return Object.assign(Ef.getDefaults(),{harmonicity:3,oscillator:Object.assign(Op(cf.getDefaults(),[...Object.keys(Wd.getDefaults()),"frequency","detune"]),{type:"sine"}),envelope:Object.assign(Op(Df.getDefaults(),Object.keys(md.getDefaults())),{attack:.01,decay:.01,sustain:1,release:.5}),modulation:Object.assign(Op(cf.getDefaults(),[...Object.keys(Wd.getDefaults()),"frequency","detune"]),{type:"square"}),modulationEnvelope:Object.assign(Op(Df.getDefaults(),Object.keys(md.getDefaults())),{attack:.5,decay:0,sustain:1,release:.5})})}_triggerEnvelopeAttack(t,e){this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t,e)}_triggerEnvelopeRelease(t){return this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this}getLevelAtTime(t){return t=this.toSeconds(t),this.envelope.getValueAtTime(t)}dispose(){return super.dispose(),this._carrier.dispose(),this._modulator.dispose(),this.frequency.dispose(),this.detune.dispose(),this.harmonicity.dispose(),this._modulationNode.dispose(),this}}class If extends Ff{constructor(){super(Cp(If.getDefaults(),arguments)),this.name="AMSynth",this._modulationScale=new tf({context:this.context}),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output)}dispose(){return super.dispose(),this._modulationScale.dispose(),this}}class Vf extends md{constructor(){super(Cp(Vf.getDefaults(),arguments,["frequency","type"])),this.name="BiquadFilter";var t=Cp(Vf.getDefaults(),arguments,["frequency","type"]);this._filter=this.context.createBiquadFilter(),this.input=this.output=this._filter,this.Q=new _d({context:this.context,units:"number",value:t.Q,param:this._filter.Q}),this.frequency=new _d({context:this.context,units:"frequency",value:t.frequency,param:this._filter.frequency}),this.detune=new _d({context:this.context,units:"cents",value:t.detune,param:this._filter.detune}),this.gain=new _d({context:this.context,units:"decibels",convert:!1,value:t.gain,param:this._filter.gain}),this.type=t.type}static getDefaults(){return Object.assign(md.getDefaults(),{Q:1,type:"lowpass",frequency:350,detune:0,gain:0})}get type(){return this._filter.type}set type(t){op(-1!==["lowpass","highpass","bandpass","lowshelf","highshelf","notch","allpass","peaking"].indexOf(t),`Invalid filter type: ${t}`),this._filter.type=t}getFrequencyResponse(e=128){const s=new Float32Array(e);for(let t=0;tt.type=e)}get rolloff(){return this._rolloff}set rolloff(t){const e=tp(t)?t:parseInt(t,10),s=[-12,-24,-48,-96];var n=s.indexOf(e);op(-1!==n,`rolloff can only be ${s.join(", ")}`),n+=1,this._rolloff=e,this.input.disconnect(),this._filters.forEach(t=>t.disconnect()),this._filters=new Array(n);for(let t=0;t1);return this._filters.forEach(()=>{e.getFrequencyResponse(t).forEach((t,e)=>s[e]*=t)}),e.dispose(),s}dispose(){return super.dispose(),this._filters.forEach(t=>{t.dispose()}),Qp(this,["detune","frequency","gain","Q"]),this.frequency.dispose(),this.Q.dispose(),this.detune.dispose(),this.gain.dispose(),this}}class Pf extends Df{constructor(){super(Cp(Pf.getDefaults(),arguments,["attack","decay","sustain","release"])),this.name="FrequencyEnvelope";var t=Cp(Pf.getDefaults(),arguments,["attack","decay","sustain","release"]);this._octaves=t.octaves,this._baseFrequency=this.toFrequency(t.baseFrequency),this._exponent=this.input=new kf({context:this.context,value:t.exponent}),this._scale=this.output=new uf({context:this.context,min:this._baseFrequency,max:this._baseFrequency*Math.pow(2,this._octaves)}),this._sig.chain(this._exponent,this._scale)}static getDefaults(){return Object.assign(Df.getDefaults(),{baseFrequency:200,exponent:1,octaves:4})}get baseFrequency(){return this._baseFrequency}set baseFrequency(t){t=this.toFrequency(t);ap(t,0),this._baseFrequency=t,this._scale.min=this._baseFrequency,this.octaves=this._octaves}get octaves(){return this._octaves}set octaves(t){this._octaves=t,this._scale.max=this._baseFrequency*Math.pow(2,t)}get exponent(){return this._exponent.value}set exponent(t){this._exponent.value=t}dispose(){return super.dispose(),this._exponent.dispose(),this._scale.dispose(),this}}class jf extends Ef{constructor(){super(Cp(jf.getDefaults(),arguments)),this.name="MonoSynth";var t=Cp(jf.getDefaults(),arguments);this.oscillator=new cf(Object.assign(t.oscillator,{context:this.context,detune:t.detune,onstop:()=>this.onsilence(this)})),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.filter=new Nf(Object.assign(t.filter,{context:this.context})),this.filterEnvelope=new Pf(Object.assign(t.filterEnvelope,{context:this.context})),this.envelope=new Rf(Object.assign(t.envelope,{context:this.context})),this.oscillator.chain(this.filter,this.envelope,this.output),this.filterEnvelope.connect(this.filter.frequency),Gp(this,["oscillator","frequency","detune","filter","filterEnvelope","envelope"])}static getDefaults(){return Object.assign(Ef.getDefaults(),{envelope:Object.assign(Op(Df.getDefaults(),Object.keys(md.getDefaults())),{attack:.005,decay:.1,release:1,sustain:.9}),filter:Object.assign(Op(Nf.getDefaults(),Object.keys(md.getDefaults())),{Q:1,rolloff:-12,type:"lowpass"}),filterEnvelope:Object.assign(Op(Pf.getDefaults(),Object.keys(md.getDefaults())),{attack:.6,baseFrequency:200,decay:.2,exponent:2,octaves:3,release:2,sustain:.5}),oscillator:Object.assign(Op(cf.getDefaults(),Object.keys(Wd.getDefaults())),{type:"sawtooth"})})}_triggerEnvelopeAttack(t,e=1){if(this.envelope.triggerAttack(t,e),this.filterEnvelope.triggerAttack(t),this.oscillator.start(t),0===this.envelope.sustain){const e=this.toSeconds(this.envelope.attack),s=this.toSeconds(this.envelope.decay);this.oscillator.stop(t+e+s)}}_triggerEnvelopeRelease(t){this.envelope.triggerRelease(t),this.filterEnvelope.triggerRelease(t),this.oscillator.stop(t+this.toSeconds(this.envelope.release))}getLevelAtTime(t){return t=this.toSeconds(t),this.envelope.getValueAtTime(t)}dispose(){return super.dispose(),this.oscillator.dispose(),this.envelope.dispose(),this.filterEnvelope.dispose(),this.filter.dispose(),this}}class Lf extends Ef{constructor(){super(Cp(Lf.getDefaults(),arguments)),this.name="DuoSynth";var t=Cp(Lf.getDefaults(),arguments);this.voice0=new jf(Object.assign(t.voice0,{context:this.context,onsilence:()=>this.onsilence(this)})),this.voice1=new jf(Object.assign(t.voice1,{context:this.context})),this.harmonicity=new ef({context:this.context,units:"positive",value:t.harmonicity}),this._vibrato=new df({frequency:t.vibratoRate,context:this.context,min:-50,max:50}),this._vibrato.start(),this.vibratoRate=this._vibrato.frequency,this._vibratoGain=new xd({context:this.context,units:"normalRange",gain:t.vibratoAmount}),this.vibratoAmount=this._vibratoGain.gain,this.frequency=new Td({context:this.context,units:"frequency",value:440}),this.detune=new Td({context:this.context,units:"cents",value:t.detune}),this.frequency.connect(this.voice0.frequency),this.frequency.chain(this.harmonicity,this.voice1.frequency),this._vibrato.connect(this._vibratoGain),this._vibratoGain.fan(this.voice0.detune,this.voice1.detune),this.detune.fan(this.voice0.detune,this.voice1.detune),this.voice0.connect(this.output),this.voice1.connect(this.output),Gp(this,["voice0","voice1","frequency","vibratoAmount","vibratoRate"])}getLevelAtTime(t){return t=this.toSeconds(t),this.voice0.envelope.getValueAtTime(t)+this.voice1.envelope.getValueAtTime(t)}static getDefaults(){return Ap(Ef.getDefaults(),{vibratoAmount:.5,vibratoRate:5,harmonicity:1.5,voice0:Ap(Op(jf.getDefaults(),Object.keys(Ef.getDefaults())),{filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}}),voice1:Ap(Op(jf.getDefaults(),Object.keys(Ef.getDefaults())),{filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}})})}_triggerEnvelopeAttack(t,e){this.voice0._triggerEnvelopeAttack(t,e),this.voice1._triggerEnvelopeAttack(t,e)}_triggerEnvelopeRelease(t){return this.voice0._triggerEnvelopeRelease(t),this.voice1._triggerEnvelopeRelease(t),this}dispose(){return super.dispose(),this.voice0.dispose(),this.voice1.dispose(),this.frequency.dispose(),this.detune.dispose(),this._vibrato.dispose(),this.vibratoRate.dispose(),this._vibratoGain.dispose(),this.harmonicity.dispose(),this}}class zf extends Ff{constructor(){super(Cp(zf.getDefaults(),arguments)),this.name="FMSynth";var t=Cp(zf.getDefaults(),arguments);this.modulationIndex=new ef({context:this.context,value:t.modulationIndex}),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output)}static getDefaults(){return Object.assign(Ff.getDefaults(),{modulationIndex:10})}dispose(){return super.dispose(),this.modulationIndex.dispose(),this}}const Wf=[1,1.483,1.932,2.546,2.63,3.897];class Bf extends Ef{constructor(){super(Cp(Bf.getDefaults(),arguments)),this.name="MetalSynth",this._oscillators=[],this._freqMultipliers=[];var e=Cp(Bf.getDefaults(),arguments);this.detune=new Td({context:this.context,units:"cents",value:e.detune}),this.frequency=new Td({context:this.context,units:"frequency"}),this._amplitude=new xd({context:this.context,gain:0}).connect(this.output),this._highpass=new Nf({Q:0,context:this.context,type:"highpass"}).connect(this._amplitude);for(let t=0;tthis.onsilence(this):Zp,type:"square"});n.connect(this._highpass),this._oscillators[t]=n;var s=new ef({context:this.context,value:Wf[t]});this._freqMultipliers[t]=s,this.frequency.chain(s,n.frequency),this.detune.connect(n.detune)}this._filterFreqScaler=new uf({context:this.context,max:7e3,min:this.toFrequency(e.resonance)}),this.envelope=new Df({attack:e.envelope.attack,attackCurve:"linear",context:this.context,decay:e.envelope.decay,release:e.envelope.release,sustain:0}),this.envelope.chain(this._filterFreqScaler,this._highpass.frequency),this.envelope.connect(this._amplitude.gain),this._octaves=e.octaves,this.octaves=e.octaves}static getDefaults(){return Ap(Ef.getDefaults(),{envelope:Object.assign(Op(Df.getDefaults(),Object.keys(md.getDefaults())),{attack:.001,decay:1.4,release:.2}),harmonicity:5.1,modulationIndex:32,octaves:1.5,resonance:4e3})}_triggerEnvelopeAttack(e,t=1){return this.envelope.triggerAttack(e,t),this._oscillators.forEach(t=>t.start(e)),0===this.envelope.sustain&&this._oscillators.forEach(t=>{t.stop(e+this.toSeconds(this.envelope.attack)+this.toSeconds(this.envelope.decay))}),this}_triggerEnvelopeRelease(e){return this.envelope.triggerRelease(e),this._oscillators.forEach(t=>t.stop(e+this.toSeconds(this.envelope.release))),this}getLevelAtTime(t){return t=this.toSeconds(t),this.envelope.getValueAtTime(t)}get modulationIndex(){return this._oscillators[0].modulationIndex.value}set modulationIndex(e){this._oscillators.forEach(t=>t.modulationIndex.value=e)}get harmonicity(){return this._oscillators[0].harmonicity.value}set harmonicity(e){this._oscillators.forEach(t=>t.harmonicity.value=e)}get resonance(){return this._filterFreqScaler.min}set resonance(t){this._filterFreqScaler.min=this.toFrequency(t),this.octaves=this._octaves}get octaves(){return this._octaves}set octaves(t){this._octaves=t,this._filterFreqScaler.max=this._filterFreqScaler.min*Math.pow(2,t)}dispose(){return super.dispose(),this._oscillators.forEach(t=>t.dispose()),this._freqMultipliers.forEach(t=>t.dispose()),this.frequency.dispose(),this.detune.dispose(),this._filterFreqScaler.dispose(),this._amplitude.dispose(),this.envelope.dispose(),this._highpass.dispose(),this}}class Uf extends qf{constructor(){super(Cp(Uf.getDefaults(),arguments)),this.name="MembraneSynth",this.portamento=0;var t=Cp(Uf.getDefaults(),arguments);this.pitchDecay=t.pitchDecay,this.octaves=t.octaves,Gp(this,["oscillator","envelope"])}static getDefaults(){return Ap(Ef.getDefaults(),qf.getDefaults(),{envelope:{attack:.001,attackCurve:"exponential",decay:.4,release:1.4,sustain:.01},octaves:10,oscillator:{type:"sine"},pitchDecay:.05})}setNote(t,e){var s=this.toSeconds(e),e=this.toFrequency(t instanceof cd?t.toFrequency():t),t=e*this.octaves;return this.oscillator.frequency.setValueAtTime(t,s),this.oscillator.frequency.exponentialRampToValueAtTime(e,s+this.toSeconds(this.pitchDecay)),this}dispose(){return super.dispose(),this}}vp([ff(0)],Uf.prototype,"octaves",void 0),vp([_f(0)],Uf.prototype,"pitchDecay",void 0);class Gf extends Mf{constructor(){super(Cp(Gf.getDefaults(),arguments)),this.name="NoiseSynth";var t=Cp(Gf.getDefaults(),arguments);this.noise=new Ud(Object.assign({context:this.context},t.noise)),this.envelope=new Rf(Object.assign({context:this.context},t.envelope)),this.noise.chain(this.envelope,this.output)}static getDefaults(){return Object.assign(Mf.getDefaults(),{envelope:Object.assign(Op(Df.getDefaults(),Object.keys(md.getDefaults())),{decay:.1,sustain:0}),noise:Object.assign(Op(Ud.getDefaults(),Object.keys(Wd.getDefaults())),{type:"white"})})}triggerAttack(t,e=1){return t=this.toSeconds(t),this.envelope.triggerAttack(t,e),this.noise.start(t),0===this.envelope.sustain&&this.noise.stop(t+this.toSeconds(this.envelope.attack)+this.toSeconds(this.envelope.decay)),this}triggerRelease(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.noise.stop(t+this.toSeconds(this.envelope.release)),this}sync(){return this._syncState()&&(this._syncMethod("triggerAttack",0),this._syncMethod("triggerRelease",0)),this}triggerAttackRelease(t,e,s=1){return e=this.toSeconds(e),t=this.toSeconds(t),this.triggerAttack(e,s),this.triggerRelease(e+t),this}dispose(){return super.dispose(),this.noise.dispose(),this.envelope.dispose(),this}}const Qf=new Set;function Zf(t){Qf.add(t)}function Xf(t,e){e=`registerProcessor("${t}", ${e})`;Qf.add(e)}class Yf extends md{constructor(t){super(t),this.name="ToneAudioWorklet",this.workletOptions={},this.onprocessorerror=Zp;const e=URL.createObjectURL(new Blob([Array.from(Qf).join("\n")],{type:"text/javascript"})),s=this._audioWorkletName();this._dummyGain=this.context.createGain(),this._dummyParam=this._dummyGain.gain,this.context.addAudioWorkletModule(e,s).then(()=>{this.disposed||(this._worklet=this.context.createAudioWorkletNode(s,this.workletOptions),this._worklet.onprocessorerror=this.onprocessorerror.bind(this),this.onReady(this._worklet))})}dispose(){return super.dispose(),this._dummyGain.disconnect(),this._worklet&&(this._worklet.port.postMessage("dispose"),this._worklet.disconnect()),this}}Zf('\n\t/**\n\t * The base AudioWorkletProcessor for use in Tone.js. Works with the [[ToneAudioWorklet]]. \n\t */\n\tclass ToneAudioWorkletProcessor extends AudioWorkletProcessor {\n\n\t\tconstructor(options) {\n\t\t\t\n\t\t\tsuper(options);\n\t\t\t/**\n\t\t\t * If the processor was disposed or not. Keep alive until it\'s disposed.\n\t\t\t */\n\t\t\tthis.disposed = false;\n\t\t \t/** \n\t\t\t * The number of samples in the processing block\n\t\t\t */\n\t\t\tthis.blockSize = 128;\n\t\t\t/**\n\t\t\t * the sample rate\n\t\t\t */\n\t\t\tthis.sampleRate = sampleRate;\n\n\t\t\tthis.port.onmessage = (event) => {\n\t\t\t\t// when it receives a dispose \n\t\t\t\tif (event.data === "dispose") {\n\t\t\t\t\tthis.disposed = true;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n'),Zf("\n\t/**\n\t * Abstract class for a single input/output processor. \n\t * has a 'generate' function which processes one sample at a time\n\t */\n\tclass SingleIOProcessor extends ToneAudioWorkletProcessor {\n\n\t\tconstructor(options) {\n\t\t\tsuper(Object.assign(options, {\n\t\t\t\tnumberOfInputs: 1,\n\t\t\t\tnumberOfOutputs: 1\n\t\t\t}));\n\t\t\t/**\n\t\t\t * Holds the name of the parameter and a single value of that\n\t\t\t * parameter at the current sample\n\t\t\t * @type { [name: string]: number }\n\t\t\t */\n\t\t\tthis.params = {}\n\t\t}\n\n\t\t/**\n\t\t * Generate an output sample from the input sample and parameters\n\t\t * @abstract\n\t\t * @param input number\n\t\t * @param channel number\n\t\t * @param parameters { [name: string]: number }\n\t\t * @returns number\n\t\t */\n\t\tgenerate(){}\n\n\t\t/**\n\t\t * Update the private params object with the \n\t\t * values of the parameters at the given index\n\t\t * @param parameters { [name: string]: Float32Array },\n\t\t * @param index number\n\t\t */\n\t\tupdateParams(parameters, index) {\n\t\t\tfor (const paramName in parameters) {\n\t\t\t\tconst param = parameters[paramName];\n\t\t\t\tif (param.length > 1) {\n\t\t\t\t\tthis.params[paramName] = parameters[paramName][index];\n\t\t\t\t} else {\n\t\t\t\t\tthis.params[paramName] = parameters[paramName][0];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Process a single frame of the audio\n\t\t * @param inputs Float32Array[][]\n\t\t * @param outputs Float32Array[][]\n\t\t */\n\t\tprocess(inputs, outputs, parameters) {\n\t\t\tconst input = inputs[0];\n\t\t\tconst output = outputs[0];\n\t\t\t// get the parameter values\n\t\t\tconst channelCount = Math.max(input && input.length || 0, output.length);\n\t\t\tfor (let sample = 0; sample < this.blockSize; sample++) {\n\t\t\t\tthis.updateParams(parameters, sample);\n\t\t\t\tfor (let channel = 0; channel < channelCount; channel++) {\n\t\t\t\t\tconst inputSample = input && input.length ? input[channel][sample] : 0;\n\t\t\t\t\toutput[channel][sample] = this.generate(inputSample, channel, this.params);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn !this.disposed;\n\t\t}\n\t};\n"),Zf("\n\t/**\n\t * A multichannel buffer for use within an AudioWorkletProcessor as a delay line\n\t */\n\tclass DelayLine {\n\t\t\n\t\tconstructor(size, channels) {\n\t\t\tthis.buffer = [];\n\t\t\tthis.writeHead = []\n\t\t\tthis.size = size;\n\n\t\t\t// create the empty channels\n\t\t\tfor (let i = 0; i < channels; i++) {\n\t\t\t\tthis.buffer[i] = new Float32Array(this.size);\n\t\t\t\tthis.writeHead[i] = 0;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Push a value onto the end\n\t\t * @param channel number\n\t\t * @param value number\n\t\t */\n\t\tpush(channel, value) {\n\t\t\tthis.writeHead[channel] += 1;\n\t\t\tif (this.writeHead[channel] > this.size) {\n\t\t\t\tthis.writeHead[channel] = 0;\n\t\t\t}\n\t\t\tthis.buffer[channel][this.writeHead[channel]] = value;\n\t\t}\n\n\t\t/**\n\t\t * Get the recorded value of the channel given the delay\n\t\t * @param channel number\n\t\t * @param delay number delay samples\n\t\t */\n\t\tget(channel, delay) {\n\t\t\tlet readHead = this.writeHead[channel] - Math.floor(delay);\n\t\t\tif (readHead < 0) {\n\t\t\t\treadHead += this.size;\n\t\t\t}\n\t\t\treturn this.buffer[channel][readHead];\n\t\t}\n\t}\n");const $f="feedback-comb-filter";Xf($f,'\n\tclass FeedbackCombFilterWorklet extends SingleIOProcessor {\n\n\t\tconstructor(options) {\n\t\t\tsuper(options);\n\t\t\tthis.delayLine = new DelayLine(this.sampleRate, options.channelCount || 2);\n\t\t}\n\n\t\tstatic get parameterDescriptors() {\n\t\t\treturn [{\n\t\t\t\tname: "delayTime",\n\t\t\t\tdefaultValue: 0.1,\n\t\t\t\tminValue: 0,\n\t\t\t\tmaxValue: 1,\n\t\t\t\tautomationRate: "k-rate"\n\t\t\t}, {\n\t\t\t\tname: "feedback",\n\t\t\t\tdefaultValue: 0.5,\n\t\t\t\tminValue: 0,\n\t\t\t\tmaxValue: 0.9999,\n\t\t\t\tautomationRate: "k-rate"\n\t\t\t}];\n\t\t}\n\n\t\tgenerate(input, channel, parameters) {\n\t\t\tconst delayedSample = this.delayLine.get(channel, parameters.delayTime * this.sampleRate);\n\t\t\tthis.delayLine.push(channel, input + delayedSample * parameters.feedback);\n\t\t\treturn delayedSample;\n\t\t}\n\t}\n');class Hf extends Yf{constructor(){super(Cp(Hf.getDefaults(),arguments,["delayTime","resonance"])),this.name="FeedbackCombFilter";var t=Cp(Hf.getDefaults(),arguments,["delayTime","resonance"]);this.input=new xd({context:this.context}),this.output=new xd({context:this.context}),this.delayTime=new _d({context:this.context,value:t.delayTime,units:"time",minValue:0,maxValue:1,param:this._dummyParam,swappable:!0}),this.resonance=new _d({context:this.context,value:t.resonance,units:"normalRange",param:this._dummyParam,swappable:!0}),Gp(this,["resonance","delayTime"])}_audioWorkletName(){return $f}static getDefaults(){return Object.assign(md.getDefaults(),{delayTime:.1,resonance:.5})}onReady(t){gd(this.input,t,this.output);var e=t.parameters.get("delayTime");this.delayTime.setParam(e);t=t.parameters.get("feedback");this.resonance.setParam(t)}dispose(){return super.dispose(),this.input.dispose(),this.output.dispose(),this.delayTime.dispose(),this.resonance.dispose(),this}}class Jf extends md{constructor(){super(Cp(Jf.getDefaults(),arguments,["frequency","type"])),this.name="OnePoleFilter";var t=Cp(Jf.getDefaults(),arguments,["frequency","type"]);this._frequency=t.frequency,this._type=t.type,this.input=new xd({context:this.context}),this.output=new xd({context:this.context}),this._createFilter()}static getDefaults(){return Object.assign(md.getDefaults(),{frequency:880,type:"lowpass"})}_createFilter(){const t=this._filter,e=this.toFrequency(this._frequency),s=1/(2*Math.PI*e);if("lowpass"===this._type){const t=1/(s*this.context.sampleRate),e=t-1;this._filter=this.context.createIIRFilter([t,0],[1,e])}else{const t=1/(s*this.context.sampleRate)-1;this._filter=this.context.createIIRFilter([1,-1],[1,t])}this.input.chain(this._filter,this.output),t&&this.context.setTimeout(()=>{this.disposed||(this.input.disconnect(t),t.disconnect())},this.blockTime)}get frequency(){return this._frequency}set frequency(t){this._frequency=t,this._createFilter()}get type(){return this._type}set type(t){this._type=t,this._createFilter()}getFrequencyResponse(e=128){const s=new Float32Array(e);for(let t=0;tthis.releaseAll(t);const t=Cp(e_.getDefaults(),arguments,["voice","options"]);op(!tp(t.voice),"DEPRECATED: The polyphony count is no longer the first argument.");var e=t.voice.getDefaults();this.options=Object.assign(e,t.options),this.voice=t.voice,this.maxPolyphony=t.maxPolyphony,this._dummyVoice=this._getNextAvailableVoice();e=this._voices.indexOf(this._dummyVoice);this._voices.splice(e,1),this._gcTimeout=this.context.setInterval(this._collectGarbage.bind(this),1)}static getDefaults(){return Object.assign(Mf.getDefaults(),{maxPolyphony:32,options:{},voice:qf})}get activeVoices(){return this._activeVoices.length}_makeVoiceAvailable(e){this._availableVoices.push(e);var t=this._activeVoices.findIndex(t=>t.voice===e);this._activeVoices.splice(t,1)}_getNextAvailableVoice(){if(this._availableVoices.length)return this._availableVoices.shift();if(this._voices.lengthMath.ceil(this._averageActiveVoices+1)){const t=this._availableVoices.shift(),e=this._voices.indexOf(t);this._voices.splice(e,1),this.context.isOffline||t.dispose()}}_triggerAttack(t,n,i){t.forEach(t=>{const e=new Ed(this.context,t).toMidi(),s=this._getNextAvailableVoice();s&&(s.triggerAttack(t,n,i),this._activeVoices.push({midi:e,voice:s,released:!1}),this.log("triggerAttack",t,n))})}_triggerRelease(t,n){t.forEach(t=>{const s=new Ed(this.context,t).toMidi(),e=this._activeVoices.find(({midi:t,released:e})=>t===s&&!e);e&&(e.voice.triggerRelease(n),e.released=!0,this.log("triggerRelease",t,n))})}_scheduleEvent(t,e,s,n){op(!this.disposed,"Synth was already disposed"),s<=this.now()?"attack"===t?this._triggerAttack(e,s,n):this._triggerRelease(e,s):this.context.setTimeout(()=>{this.disposed||this._scheduleEvent(t,e,s,n)},s-this.now())}triggerAttack(t,e,s){Array.isArray(t)||(t=[t]);e=this.toSeconds(e);return this._scheduleEvent("attack",t,e,s),this}triggerRelease(t,e){Array.isArray(t)||(t=[t]);e=this.toSeconds(e);return this._scheduleEvent("release",t,e),this}triggerAttackRelease(e,s,t,n){var i=this.toSeconds(t);if(this.triggerAttack(e,i,n),np(s)){op(np(e),"If the duration is an array, the notes must also be an array");for(let t=0;tt.set(e)),this._dummyVoice.set(e),this}get(){return this._dummyVoice.get()}releaseAll(t){const e=this.toSeconds(t);return this._activeVoices.forEach(({voice:t})=>{t.triggerRelease(e)}),this}dispose(){return super.dispose(),this._dummyVoice.dispose(),this._voices.forEach(t=>t.dispose()),this._activeVoices=[],this._availableVoices=[],this.context.clearInterval(this._gcTimeout),this}}class s_ extends Mf{constructor(){super(Cp(s_.getDefaults(),arguments,["urls","onload","baseUrl"],"urls")),this.name="Sampler",this._activeSources=new Map;const s=Cp(s_.getDefaults(),arguments,["urls","onload","baseUrl"],"urls"),n={};Object.keys(s.urls).forEach(t=>{const e=parseInt(t,10);if(op(rp(t)||tp(e)&&isFinite(e),`url key is neither a note or midi pitch: ${t}`),rp(t)){const e=new cd(this.context,t).toMidi();n[e]=s.urls[t]}else tp(e)&&isFinite(e)&&(n[e]=s.urls[e])}),this._buffers=new Md({urls:n,onload:s.onload,baseUrl:s.baseUrl,onerror:s.onerror}),this.attack=s.attack,this.release=s.release,this.curve=s.curve,this._buffers.loaded&&Promise.resolve().then(s.onload)}static getDefaults(){return Object.assign(Mf.getDefaults(),{attack:0,baseUrl:"",curve:"exponential",onload:Zp,onerror:Zp,release:.1,urls:{}})}_findClosest(t){let e=0;for(;e<96;){if(this._buffers.has(t+e))return-e;if(this._buffers.has(t-e))return e;e++}throw new Error(`No available buffers for note: ${t}`)}triggerAttack(t,c,l=1){return this.log("triggerAttack",t,c,l),(t=!Array.isArray(t)?[t]:t).forEach(t=>{const e=rd(new cd(this.context,t).toFrequency()),s=Math.round(e),n=e-s,i=this._findClosest(s),r=s-i,o=this._buffers.get(r),a=sd(i+n),h=new Bd({url:o,context:this.context,curve:this.curve,fadeIn:this.attack,fadeOut:this.release,playbackRate:a}).connect(this.output);h.start(c,0,o.duration/a,l),np(this._activeSources.get(s))||this._activeSources.set(s,[]),this._activeSources.get(s).push(h),h.onended=()=>{if(this._activeSources&&this._activeSources.has(s)){const t=this._activeSources.get(s),e=t.indexOf(h);-1!==e&&t.splice(e,1)}}}),this}triggerRelease(t,s){return this.log("triggerRelease",t,s),(t=!Array.isArray(t)?[t]:t).forEach(t=>{t=new cd(this.context,t).toMidi();if(this._activeSources.has(t)&&this._activeSources.get(t).length){const e=this._activeSources.get(t);s=this.toSeconds(s),e.forEach(t=>{t.stop(s)}),this._activeSources.set(t,[])}}),this}releaseAll(t){const e=this.toSeconds(t);return this._activeSources.forEach(t=>{for(;t.length;)t.shift().stop(e)}),this}sync(){return this._syncState()&&(this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",1)),this}triggerAttackRelease(t,s,e,n=1){const i=this.toSeconds(e);return this.triggerAttack(t,i,n),np(s)?(op(np(t),"notes must be an array when duration is array"),t.forEach((t,e)=>{e=s[Math.min(e,s.length-1)];this.triggerRelease(t,i+this.toSeconds(e))})):this.triggerRelease(t,i+this.toSeconds(s)),this}add(t,e,s){var n;return op(rp(t)||isFinite(t),`note must be a pitch or midi: ${t}`),rp(t)?(n=new cd(this.context,t).toMidi(),this._buffers.add(n,e,s)):this._buffers.add(t,e,s),this}get loaded(){return this._buffers.loaded}dispose(){return super.dispose(),this._buffers.dispose(),this._activeSources.forEach(t=>{t.forEach(t=>t.dispose())}),this._activeSources.clear(),this}}vp([_f(0)],s_.prototype,"attack",void 0),vp([_f(0)],s_.prototype,"release",void 0);class n_ extends dd{constructor(){super(Cp(n_.getDefaults(),arguments,["callback","value"])),this.name="ToneEvent",this._state=new fd("stopped"),this._startOffset=0;var t=Cp(n_.getDefaults(),arguments,["callback","value"]);this._loop=t.loop,this.callback=t.callback,this.value=t.value,this._loopStart=this.toTicks(t.loopStart),this._loopEnd=this.toTicks(t.loopEnd),this._playbackRate=t.playbackRate,this._probability=t.probability,this._humanize=t.humanize,this.mute=t.mute,this._playbackRate=t.playbackRate,this._state.increasing=!0,this._rescheduleEvents()}static getDefaults(){return Object.assign(dd.getDefaults(),{callback:Zp,humanize:!1,loop:!1,loopEnd:"1m",loopStart:0,mute:!1,playbackRate:1,probability:1,value:null})}_rescheduleEvents(t=-1){this._state.forEachFrom(t,t=>{let e;var s,n;"started"===t.state&&(-1!==t.id&&this.context.transport.clear(t.id),s=t.time+Math.round(this.startOffset/this._playbackRate),!0===this._loop||tp(this._loop)&&1{this.context.transport.clear(t.id)}),this._state.cancel(t),this}_tick(e){var t=this.context.transport.getTicksAtTime(e);if(!(this.mute||"started"!==this._state.getValueAtTime(t)||this.probability<1&&Math.random()>this.probability)){if(this.humanize){let t=.02;sp(this.humanize)||(t=this.toSeconds(this.humanize)),e+=(2*Math.random()-1)*t}this.callback(e,this.value)}}_getLoopDuration(){return(this._loopEnd-this._loopStart)/this._playbackRate}get loop(){return this._loop}set loop(t){this._loop=t,this._rescheduleEvents()}get playbackRate(){return this._playbackRate}set playbackRate(t){this._playbackRate=t,this._rescheduleEvents()}get loopEnd(){return new Rd(this.context,this._loopEnd).toSeconds()}set loopEnd(t){this._loopEnd=this.toTicks(t),this._loop&&this._rescheduleEvents()}get loopStart(){return new Rd(this.context,this._loopStart).toSeconds()}set loopStart(t){this._loopStart=this.toTicks(t),this._loop&&this._rescheduleEvents()}get progress(){if(this._loop){var t=this.context.transport.ticks,e=this._state.get(t);if(null===e||"started"!==e.state)return 0;var s=this._getLoopDuration();return(t-e.time)%s/s}return 0}dispose(){return super.dispose(),this.cancel(),this._state.dispose(),this}}class i_ extends dd{constructor(){super(Cp(i_.getDefaults(),arguments,["callback","interval"])),this.name="Loop";var t=Cp(i_.getDefaults(),arguments,["callback","interval"]);this._event=new n_({context:this.context,callback:this._tick.bind(this),loop:!0,loopEnd:t.interval,playbackRate:t.playbackRate,probability:t.probability}),this.callback=t.callback,this.iterations=t.iterations}static getDefaults(){return Object.assign(dd.getDefaults(),{interval:"4n",callback:Zp,playbackRate:1,iterations:1/0,probability:1,mute:!1,humanize:!1})}start(t){return this._event.start(t),this}stop(t){return this._event.stop(t),this}cancel(t){return this._event.cancel(t),this}_tick(t){this.callback(t)}get state(){return this._event.state}get progress(){return this._event.progress}get interval(){return this._event.loopEnd}set interval(t){this._event.loopEnd=t}get playbackRate(){return this._event.playbackRate}set playbackRate(t){this._event.playbackRate=t}get humanize(){return this._event.humanize}set humanize(t){this._event.humanize=t}get probability(){return this._event.probability}set probability(t){this._event.probability=t}get mute(){return this._event.mute}set mute(t){this._event.mute=t}get iterations(){return!0===this._event.loop?1/0:this._event.loop}set iterations(t){this._event.loop=t===1/0||t}dispose(){return super.dispose(),this._event.dispose(),this}}class r_ extends n_{constructor(){super(Cp(r_.getDefaults(),arguments,["callback","events"])),this.name="Part",this._state=new fd("stopped"),this._events=new Set;const t=Cp(r_.getDefaults(),arguments,["callback","events"]);this._state.increasing=!0,t.events.forEach(t=>{np(t)?this.add(t[0],t[1]):this.add(t)})}static getDefaults(){return Object.assign(n_.getDefaults(),{events:[]})}start(e,t){const s=this.toTicks(e);if("started"!==this._state.getValueAtTime(s)){t=Dp(t,this._loop?this._loopStart:0),t=this._loop?Dp(t,this._loopStart):Dp(t,0);const e=this.toTicks(t);this._state.add({id:-1,offset:e,state:"started",time:s}),this._forEach(t=>{this._startNote(t,s,e)})}return this}_startNote(t,e,s){e-=s,this._loop?t.startOffset>=this._loopStart&&t.startOffset=s&&(t.loop=!1,t.start(new Rd(this.context,e))):t.startOffset>=s&&t.start(new Rd(this.context,e))}get startOffset(){return this._startOffset}set startOffset(t){this._startOffset=t,this._forEach(t=>{t.startOffset+=this._startOffset})}stop(e){var t=this.toTicks(e);return this._state.cancel(t),this._state.setStateAtTime("stopped",t),this._forEach(t=>{t.stop(e)}),this}at(t,e){const s=new pd(this.context,t).toTicks(),n=new Rd(this.context,1).toSeconds(),i=this._events.values();let r=i.next();for(;!r.done;){const t=r.value;if(Math.abs(s-t.startOffset){"started"===t.state?this._startNote(e,t.time,t.offset):e.stop(new Rd(this.context,t.time))})}remove(e,s){return ep(e)&&e.hasOwnProperty("time")&&(e=(s=e).time),e=this.toTicks(e),this._events.forEach(t=>{t.startOffset===e&&(Hu(s)||Ju(s)&&t.value===s)&&(this._events.delete(t),t.dispose())}),this}clear(){return this._forEach(t=>t.dispose()),this._events.clear(),this}cancel(e){return this._forEach(t=>t.cancel(e)),this._state.cancel(this.toTicks(e)),this}_forEach(e){return this._events&&this._events.forEach(t=>{t instanceof r_?t._forEach(e):e(t)}),this}_setAll(e,s){this._forEach(t=>{t[e]=s})}_tick(t,e){this.mute||this.callback(t,e)}_testLoopBoundries(t){this._loop&&(t.startOffset=this._loopEnd)?t.cancel(0):"stopped"===t.state&&this._restartEvent(t)}get probability(){return this._probability}set probability(t){this._probability=t,this._setAll("probability",t)}get humanize(){return this._humanize}set humanize(t){this._humanize=t,this._setAll("humanize",t)}get loop(){return this._loop}set loop(e){this._loop=e,this._forEach(t=>{t.loopStart=this.loopStart,t.loopEnd=this.loopEnd,t.loop=e,this._testLoopBoundries(t)})}get loopEnd(){return new Rd(this.context,this._loopEnd).toSeconds()}set loopEnd(e){this._loopEnd=this.toTicks(e),this._loop&&this._forEach(t=>{t.loopEnd=e,this._testLoopBoundries(t)})}get loopStart(){return new Rd(this.context,this._loopStart).toSeconds()}set loopStart(t){this._loopStart=this.toTicks(t),this._loop&&this._forEach(t=>{t.loopStart=this.loopStart,this._testLoopBoundries(t)})}get playbackRate(){return this._playbackRate}set playbackRate(t){this._playbackRate=t,this._setAll("playbackRate",t)}get length(){return this._events.size}dispose(){return super.dispose(),this.clear(),this}}function*o_(t){let e=0;for(;e=t.length-1&&(e=!1)):(s--,s<=0&&(e=!0))}function*u_(t){let e=0,s=0;for(;et[e],set:(t,e,s)=>(ip(e)&&isFinite(parseInt(e,10))&&np(s)?t[e]=this._createSequence(s):t[e]=s,this._eventsUpdated(),!0)})}_eventsUpdated(){this._part.clear(),this._rescheduleSequence(this._eventsArray,this._subdivision,this.startOffset),this.loopEnd=this.loopEnd}_rescheduleSequence(t,s,n){t.forEach((t,e)=>{e=e*s+n;if(np(t))this._rescheduleSequence(t,s/t.length,e);else{const s=new Rd(this.context,e,"i").toSeconds();this._part.add(s,t)}})}_indexTime(t){return new Rd(this.context,t*this._subdivision+this.startOffset).toSeconds()}clear(){return this._part.clear(),this}dispose(){return super.dispose(),this._part.dispose(),this}get loop(){return this._part.loop}set loop(t){this._part.loop=t}get loopStart(){return this._loopStart}set loopStart(t){this._loopStart=t,this._part.loopStart=this._indexTime(t)}get loopEnd(){return this._loopEnd}set loopEnd(t){this._loopEnd=t,this._part.loopEnd=0===t?this._indexTime(this._eventsArray.length):this._indexTime(t)}get startOffset(){return this._part.startOffset}set startOffset(t){this._part.startOffset=t}get playbackRate(){return this._part.playbackRate}set playbackRate(t){this._part.playbackRate=t}get probability(){return this._part.probability}set probability(t){this._part.probability=t}get progress(){return this._part.progress}get humanize(){return this._part.humanize}set humanize(t){this._part.humanize=t}get length(){return this._part.length}}class g_ extends md{constructor(){super(Object.assign(Cp(g_.getDefaults(),arguments,["fade"]))),this.name="CrossFade",this._panner=this.context.createStereoPanner(),this._split=this.context.createChannelSplitter(2),this._g2a=new xf({context:this.context}),this.a=new xd({context:this.context,gain:0}),this.b=new xd({context:this.context,gain:0}),this.output=new xd({context:this.context}),this._internalChannels=[this.a,this.b];var t=Cp(g_.getDefaults(),arguments,["fade"]);this.fade=new Td({context:this.context,units:"normalRange",value:t.fade}),Gp(this,"fade"),this.context.getConstant(1).connect(this._panner),this._panner.connect(this._split),this._panner.channelCount=1,this._panner.channelCountMode="explicit",vd(this._split,this.a.gain,0),vd(this._split,this.b.gain,1),this.fade.chain(this._g2a,this._panner.pan),this.a.connect(this.output),this.b.connect(this.output)}static getDefaults(){return Object.assign(md.getDefaults(),{fade:.5})}dispose(){return super.dispose(),this.a.dispose(),this.b.dispose(),this.output.dispose(),this.fade.dispose(),this._g2a.dispose(),this._panner.disconnect(),this._split.disconnect(),this}}class v_ extends md{constructor(t){super(t),this.name="Effect",this._dryWet=new g_({context:this.context}),this.wet=this._dryWet.fade,this.effectSend=new xd({context:this.context}),this.effectReturn=new xd({context:this.context}),this.input=new xd({context:this.context}),this.output=this._dryWet,this.input.fan(this._dryWet.a,this.effectSend),this.effectReturn.connect(this._dryWet.b),this.wet.setValueAtTime(t.wet,0),this._internalChannels=[this.effectReturn,this.effectSend],Gp(this,"wet")}static getDefaults(){return Object.assign(md.getDefaults(),{wet:1})}connectEffect(t){return this._internalChannels.push(t),this.effectSend.chain(t,this.effectReturn),this}dispose(){return super.dispose(),this._dryWet.dispose(),this.effectSend.dispose(),this.effectReturn.dispose(),this.wet.dispose(),this}}class y_ extends v_{constructor(t){super(t),this.name="LFOEffect",this._lfo=new df({context:this.context,frequency:t.frequency,amplitude:t.depth}),this.depth=this._lfo.amplitude,this.frequency=this._lfo.frequency,this.type=t.type,Gp(this,["frequency","depth"])}static getDefaults(){return Object.assign(v_.getDefaults(),{frequency:1,type:"sine",depth:1})}start(t){return this._lfo.start(t),this}stop(t){return this._lfo.stop(t),this}sync(){return this._lfo.sync(),this}unsync(){return this._lfo.unsync(),this}get type(){return this._lfo.type}set type(t){this._lfo.type=t}dispose(){return super.dispose(),this._lfo.dispose(),this.frequency.dispose(),this.depth.dispose(),this}}class x_ extends y_{constructor(){super(Cp(x_.getDefaults(),arguments,["frequency","baseFrequency","octaves"])),this.name="AutoFilter";var t=Cp(x_.getDefaults(),arguments,["frequency","baseFrequency","octaves"]);this.filter=new Nf(Object.assign(t.filter,{context:this.context})),this.connectEffect(this.filter),this._lfo.connect(this.filter.frequency),this.octaves=t.octaves,this.baseFrequency=t.baseFrequency}static getDefaults(){return Object.assign(y_.getDefaults(),{baseFrequency:200,octaves:2.6,filter:{type:"lowpass",rolloff:-12,Q:1}})}get baseFrequency(){return this._lfo.min}set baseFrequency(t){this._lfo.min=this.toFrequency(t),this.octaves=this._octaves}get octaves(){return this._octaves}set octaves(t){this._octaves=t,this._lfo.max=this._lfo.min*Math.pow(2,t)}dispose(){return super.dispose(),this.filter.dispose(),this}}class w_ extends md{constructor(){super(Object.assign(Cp(w_.getDefaults(),arguments,["pan"]))),this.name="Panner",this._panner=this.context.createStereoPanner(),this.input=this._panner,this.output=this._panner;var t=Cp(w_.getDefaults(),arguments,["pan"]);this.pan=new _d({context:this.context,param:this._panner.pan,value:t.pan,minValue:-1,maxValue:1}),this._panner.channelCount=t.channelCount,this._panner.channelCountMode="explicit",Gp(this,"pan")}static getDefaults(){return Object.assign(md.getDefaults(),{pan:0,channelCount:1})}dispose(){return super.dispose(),this._panner.disconnect(),this.pan.dispose(),this}}class b_ extends y_{constructor(){super(Cp(b_.getDefaults(),arguments,["frequency"])),this.name="AutoPanner";var t=Cp(b_.getDefaults(),arguments,["frequency"]);this._panner=new w_({context:this.context,channelCount:t.channelCount}),this.connectEffect(this._panner),this._lfo.connect(this._panner.pan),this._lfo.min=-1,this._lfo.max=1}static getDefaults(){return Object.assign(y_.getDefaults(),{channelCount:1})}dispose(){return super.dispose(),this._panner.dispose(),this}}class T_ extends md{constructor(){super(Cp(T_.getDefaults(),arguments,["smoothing"])),this.name="Follower";var t=Cp(T_.getDefaults(),arguments,["smoothing"]);this._abs=this.input=new yf({context:this.context}),this._lowpass=this.output=new Jf({context:this.context,frequency:1/this.toSeconds(t.smoothing),type:"lowpass"}),this._abs.connect(this._lowpass),this._smoothing=t.smoothing}static getDefaults(){return Object.assign(md.getDefaults(),{smoothing:.05})}get smoothing(){return this._smoothing}set smoothing(t){this._smoothing=t,this._lowpass.frequency=1/this.toSeconds(this.smoothing)}dispose(){return super.dispose(),this._abs.dispose(),this._lowpass.dispose(),this}}class S_ extends v_{constructor(){super(Cp(S_.getDefaults(),arguments,["baseFrequency","octaves","sensitivity"])),this.name="AutoWah";var t=Cp(S_.getDefaults(),arguments,["baseFrequency","octaves","sensitivity"]);this._follower=new T_({context:this.context,smoothing:t.follower}),this._sweepRange=new Af({context:this.context,min:0,max:1,exponent:.5}),this._baseFrequency=this.toFrequency(t.baseFrequency),this._octaves=t.octaves,this._inputBoost=new xd({context:this.context}),this._bandpass=new Nf({context:this.context,rolloff:-48,frequency:0,Q:t.Q}),this._peaking=new Nf({context:this.context,type:"peaking"}),this._peaking.gain.value=t.gain,this.gain=this._peaking.gain,this.Q=this._bandpass.Q,this.effectSend.chain(this._inputBoost,this._follower,this._sweepRange),this._sweepRange.connect(this._bandpass.frequency),this._sweepRange.connect(this._peaking.frequency),this.effectSend.chain(this._bandpass,this._peaking,this.effectReturn),this._setSweepRange(),this.sensitivity=t.sensitivity,Gp(this,["gain","Q"])}static getDefaults(){return Object.assign(v_.getDefaults(),{baseFrequency:100,octaves:6,sensitivity:0,Q:2,gain:2,follower:.2})}get octaves(){return this._octaves}set octaves(t){this._octaves=t,this._setSweepRange()}get follower(){return this._follower.smoothing}set follower(t){this._follower.smoothing=t}get baseFrequency(){return this._baseFrequency}set baseFrequency(t){this._baseFrequency=this.toFrequency(t),this._setSweepRange()}get sensitivity(){return ed(1/this._inputBoost.gain.value)}set sensitivity(t){this._inputBoost.gain.value=1/td(t)}_setSweepRange(){this._sweepRange.min=this._baseFrequency,this._sweepRange.max=Math.min(this._baseFrequency*Math.pow(2,this._octaves),this.context.sampleRate/2)}dispose(){return super.dispose(),this._follower.dispose(),this._sweepRange.dispose(),this._bandpass.dispose(),this._peaking.dispose(),this._inputBoost.dispose(),this}}const k_="bit-crusher";Xf(k_,"\n\tclass BitCrusherWorklet extends SingleIOProcessor {\n\n\t\tstatic get parameterDescriptors() {\n\t\t\treturn [{\n\t\t\t\tname: \"bits\",\n\t\t\t\tdefaultValue: 12,\n\t\t\t\tminValue: 1,\n\t\t\t\tmaxValue: 16,\n\t\t\t\tautomationRate: 'k-rate'\n\t\t\t}];\n\t\t}\n\n\t\tgenerate(input, _channel, parameters) {\n\t\t\tconst step = Math.pow(0.5, parameters.bits - 1);\n\t\t\tconst val = step * Math.floor(input / step + 0.5);\n\t\t\treturn val;\n\t\t}\n\t}\n");class A_ extends v_{constructor(){super(Cp(A_.getDefaults(),arguments,["bits"])),this.name="BitCrusher";var t=Cp(A_.getDefaults(),arguments,["bits"]);this._bitCrusherWorklet=new C_({context:this.context,bits:t.bits}),this.connectEffect(this._bitCrusherWorklet),this.bits=this._bitCrusherWorklet.bits}static getDefaults(){return Object.assign(v_.getDefaults(),{bits:4})}dispose(){return super.dispose(),this._bitCrusherWorklet.dispose(),this}}class C_ extends Yf{constructor(){super(Cp(C_.getDefaults(),arguments)),this.name="BitCrusherWorklet";var t=Cp(C_.getDefaults(),arguments);this.input=new xd({context:this.context}),this.output=new xd({context:this.context}),this.bits=new _d({context:this.context,value:t.bits,units:"positive",minValue:1,maxValue:16,param:this._dummyParam,swappable:!0})}static getDefaults(){return Object.assign(Yf.getDefaults(),{bits:12})}_audioWorkletName(){return k_}onReady(t){gd(this.input,t,this.output);t=t.parameters.get("bits");this.bits.setParam(t)}dispose(){return super.dispose(),this.input.dispose(),this.output.dispose(),this.bits.dispose(),this}}class D_ extends v_{constructor(){super(Cp(D_.getDefaults(),arguments,["order"])),this.name="Chebyshev";var t=Cp(D_.getDefaults(),arguments,["order"]);this._shaper=new Kd({context:this.context,length:4096}),this._order=t.order,this.connectEffect(this._shaper),this.order=t.order,this.oversample=t.oversample}static getDefaults(){return Object.assign(v_.getDefaults(),{order:1,oversample:"none"})}_getCoefficient(t,e,s){return s.has(e)||(0===e?s.set(e,0):1===e?s.set(e,t):s.set(e,2*t*this._getCoefficient(t,e-1,s)-this._getCoefficient(t,e-2,s))),s.get(e)}get order(){return this._order}set order(e){op(Number.isInteger(e),"'order' must be an integer"),this._order=e,this._shaper.setMap(t=>this._getCoefficient(t,e,new Map))}get oversample(){return this._shaper.oversample}set oversample(t){this._shaper.oversample=t}dispose(){return super.dispose(),this._shaper.dispose(),this}}class O_ extends md{constructor(){super(Cp(O_.getDefaults(),arguments,["channels"])),this.name="Split";var t=Cp(O_.getDefaults(),arguments,["channels"]);this._splitter=this.input=this.output=this.context.createChannelSplitter(t.channels),this._internalChannels=[this._splitter]}static getDefaults(){return Object.assign(md.getDefaults(),{channels:2})}dispose(){return super.dispose(),this._splitter.disconnect(),this}}class M_ extends md{constructor(){super(Cp(M_.getDefaults(),arguments,["channels"])),this.name="Merge";var t=Cp(M_.getDefaults(),arguments,["channels"]);this._merger=this.output=this.input=this.context.createChannelMerger(t.channels)}static getDefaults(){return Object.assign(md.getDefaults(),{channels:2})}dispose(){return super.dispose(),this._merger.disconnect(),this}}class E_ extends md{constructor(t){super(t),this.name="StereoEffect",this.input=new xd({context:this.context}),this.input.channelCount=2,this.input.channelCountMode="explicit",this._dryWet=this.output=new g_({context:this.context,fade:t.wet}),this.wet=this._dryWet.fade,this._split=new O_({context:this.context,channels:2}),this._merge=new M_({context:this.context,channels:2}),this.input.connect(this._split),this.input.connect(this._dryWet.a),this._merge.connect(this._dryWet.b),Gp(this,["wet"])}connectEffectLeft(...t){this._split.connect(t[0],0,0),gd(...t),vd(t[t.length-1],this._merge,0,0)}connectEffectRight(...t){this._split.connect(t[0],1,0),gd(...t),vd(t[t.length-1],this._merge,0,1)}static getDefaults(){return Object.assign(md.getDefaults(),{wet:1})}dispose(){return super.dispose(),this._dryWet.dispose(),this._split.dispose(),this._merge.dispose(),this}}class R_ extends E_{constructor(t){super(t),this.feedback=new Td({context:this.context,value:t.feedback,units:"normalRange"}),this._feedbackL=new xd({context:this.context}),this._feedbackR=new xd({context:this.context}),this._feedbackSplit=new O_({context:this.context,channels:2}),this._feedbackMerge=new M_({context:this.context,channels:2}),this._merge.connect(this._feedbackSplit),this._feedbackMerge.connect(this._split),this._feedbackSplit.connect(this._feedbackL,0,0),this._feedbackL.connect(this._feedbackMerge,0,0),this._feedbackSplit.connect(this._feedbackR,1,0),this._feedbackR.connect(this._feedbackMerge,0,1),this.feedback.fan(this._feedbackL.gain,this._feedbackR.gain),Gp(this,["feedback"])}static getDefaults(){return Object.assign(E_.getDefaults(),{feedback:.5})}dispose(){return super.dispose(),this.feedback.dispose(),this._feedbackL.dispose(),this._feedbackR.dispose(),this._feedbackSplit.dispose(),this._feedbackMerge.dispose(),this}}class q_ extends R_{constructor(){super(Cp(q_.getDefaults(),arguments,["frequency","delayTime","depth"])),this.name="Chorus";var t=Cp(q_.getDefaults(),arguments,["frequency","delayTime","depth"]);this._depth=t.depth,this._delayTime=t.delayTime/1e3,this._lfoL=new df({context:this.context,frequency:t.frequency,min:0,max:1}),this._lfoR=new df({context:this.context,frequency:t.frequency,min:0,max:1,phase:180}),this._delayNodeL=new Od({context:this.context}),this._delayNodeR=new Od({context:this.context}),this.frequency=this._lfoL.frequency,Gp(this,["frequency"]),this._lfoL.frequency.connect(this._lfoR.frequency),this.connectEffectLeft(this._delayNodeL),this.connectEffectRight(this._delayNodeR),this._lfoL.connect(this._delayNodeL.delayTime),this._lfoR.connect(this._delayNodeR.delayTime),this.depth=this._depth,this.type=t.type,this.spread=t.spread}static getDefaults(){return Object.assign(R_.getDefaults(),{frequency:1.5,delayTime:3.5,depth:.7,type:"sine",spread:180,feedback:0,wet:.5})}get depth(){return this._depth}set depth(t){this._depth=t;t=this._delayTime*t;this._lfoL.min=Math.max(this._delayTime-t,0),this._lfoL.max=this._delayTime+t,this._lfoR.min=Math.max(this._delayTime-t,0),this._lfoR.max=this._delayTime+t}get delayTime(){return 1e3*this._delayTime}set delayTime(t){this._delayTime=t/1e3,this.depth=this._depth}get type(){return this._lfoL.type}set type(t){this._lfoL.type=t,this._lfoR.type=t}get spread(){return this._lfoR.phase-this._lfoL.phase}set spread(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}start(t){return this._lfoL.start(t),this._lfoR.start(t),this}stop(t){return this._lfoL.stop(t),this._lfoR.stop(t),this}sync(){return this._lfoL.sync(),this._lfoR.sync(),this}unsync(){return this._lfoL.unsync(),this._lfoR.unsync(),this}dispose(){return super.dispose(),this._lfoL.dispose(),this._lfoR.dispose(),this._delayNodeL.dispose(),this._delayNodeR.dispose(),this.frequency.dispose(),this}}class F_ extends v_{constructor(){super(Cp(F_.getDefaults(),arguments,["distortion"])),this.name="Distortion";var t=Cp(F_.getDefaults(),arguments,["distortion"]);this._shaper=new Kd({context:this.context,length:4096}),this._distortion=t.distortion,this.connectEffect(this._shaper),this.distortion=t.distortion,this.oversample=t.oversample}static getDefaults(){return Object.assign(v_.getDefaults(),{distortion:.4,oversample:"none"})}get distortion(){return this._distortion}set distortion(t){const e=100*(this._distortion=t),s=Math.PI/180;this._shaper.setMap(t=>Math.abs(t)<.001?0:(3+e)*t*20*s/(Math.PI+e*Math.abs(t)))}get oversample(){return this._shaper.oversample}set oversample(t){this._shaper.oversample=t}dispose(){return super.dispose(),this._shaper.dispose(),this}}class I_ extends v_{constructor(t){super(t),this.name="FeedbackEffect",this._feedbackGain=new xd({context:this.context,gain:t.feedback,units:"normalRange"}),this.feedback=this._feedbackGain.gain,Gp(this,"feedback"),this.effectReturn.chain(this._feedbackGain,this.effectSend)}static getDefaults(){return Object.assign(v_.getDefaults(),{feedback:.125})}dispose(){return super.dispose(),this._feedbackGain.dispose(),this.feedback.dispose(),this}}class V_ extends I_{constructor(){super(Cp(V_.getDefaults(),arguments,["delayTime","feedback"])),this.name="FeedbackDelay";var t=Cp(V_.getDefaults(),arguments,["delayTime","feedback"]);this._delayNode=new Od({context:this.context,delayTime:t.delayTime,maxDelay:t.maxDelay}),this.delayTime=this._delayNode.delayTime,this.connectEffect(this._delayNode),Gp(this,"delayTime")}static getDefaults(){return Object.assign(I_.getDefaults(),{delayTime:.25,maxDelay:1})}dispose(){return super.dispose(),this._delayNode.dispose(),this.delayTime.dispose(),this}}class N_ extends md{constructor(t){super(t),this.name="PhaseShiftAllpass",this.input=new xd({context:this.context}),this.output=new xd({context:this.context}),this.offset90=new xd({context:this.context}),this._bank0=this._createAllPassFilterBank([.6923878,.9360654322959,.988229522686,.9987488452737]),this._bank1=this._createAllPassFilterBank([.4021921162426,.856171088242,.9722909545651,.9952884791278]),this._oneSampleDelay=this.context.createIIRFilter([0,1],[1,0]),gd(this.input,...this._bank0,this._oneSampleDelay,this.output),gd(this.input,...this._bank1,this.offset90)}_createAllPassFilterBank(t){return t.map(t=>{t=[[t*t,0,-1],[1,0,-t*t]];return this.context.createIIRFilter(t[0],t[1])})}dispose(){return super.dispose(),this.input.dispose(),this.output.dispose(),this.offset90.dispose(),this._bank0.forEach(t=>t.disconnect()),this._bank1.forEach(t=>t.disconnect()),this._oneSampleDelay.disconnect(),this}}class P_ extends v_{constructor(){super(Cp(P_.getDefaults(),arguments,["frequency"])),this.name="FrequencyShifter";var t=Cp(P_.getDefaults(),arguments,["frequency"]);this.frequency=new Td({context:this.context,units:"frequency",value:t.frequency,minValue:-this.context.sampleRate/2,maxValue:this.context.sampleRate/2}),this._sine=new $d({context:this.context,type:"sine"}),this._cosine=new Hd({context:this.context,phase:-90,type:"sine"}),this._sineMultiply=new ef({context:this.context}),this._cosineMultiply=new ef({context:this.context}),this._negate=new wf({context:this.context}),this._add=new lf({context:this.context}),this._phaseShifter=new N_({context:this.context}),this.effectSend.connect(this._phaseShifter),this.frequency.fan(this._sine.frequency,this._cosine.frequency),this._phaseShifter.offset90.connect(this._cosineMultiply),this._cosine.connect(this._cosineMultiply.factor),this._phaseShifter.connect(this._sineMultiply),this._sine.connect(this._sineMultiply.factor),this._sineMultiply.connect(this._negate),this._cosineMultiply.connect(this._add),this._negate.connect(this._add.addend),this._add.connect(this.effectReturn);t=this.immediate();this._sine.start(t),this._cosine.start(t)}static getDefaults(){return Object.assign(v_.getDefaults(),{frequency:0})}dispose(){return super.dispose(),this.frequency.dispose(),this._add.dispose(),this._cosine.dispose(),this._cosineMultiply.dispose(),this._negate.dispose(),this._phaseShifter.dispose(),this._sine.dispose(),this._sineMultiply.dispose(),this}}const j_=[1557/44100,1617/44100,1491/44100,1422/44100,1277/44100,1356/44100,1188/44100,1116/44100],L_=[225,556,441,341];class z_ extends E_{constructor(){super(Cp(z_.getDefaults(),arguments,["roomSize","dampening"])),this.name="Freeverb",this._combFilters=[],this._allpassFiltersL=[],this._allpassFiltersR=[];const s=Cp(z_.getDefaults(),arguments,["roomSize","dampening"]);this.roomSize=new Td({context:this.context,value:s.roomSize,units:"normalRange"}),this._allpassFiltersL=L_.map(t=>{const e=this.context.createBiquadFilter();return e.type="allpass",e.frequency.value=t,e}),this._allpassFiltersR=L_.map(t=>{const e=this.context.createBiquadFilter();return e.type="allpass",e.frequency.value=t,e}),this._combFilters=j_.map((t,e)=>{t=new Kf({context:this.context,dampening:s.dampening,delayTime:t});return et.dampening=e)}dispose(){return super.dispose(),this._allpassFiltersL.forEach(t=>t.disconnect()),this._allpassFiltersR.forEach(t=>t.disconnect()),this._combFilters.forEach(t=>t.dispose()),this.roomSize.dispose(),this}}const W_=[.06748,.06404,.08212,.09004],B_=[.773,.802,.753,.733],U_=[347,113,37];class G_ extends E_{constructor(){super(Cp(G_.getDefaults(),arguments,["roomSize"])),this.name="JCReverb",this._allpassFilters=[],this._feedbackCombFilters=[];var t=Cp(G_.getDefaults(),arguments,["roomSize"]);this.roomSize=new Td({context:this.context,value:t.roomSize,units:"normalRange"}),this._scaleRoomSize=new uf({context:this.context,min:-.733,max:.197}),this._allpassFilters=U_.map(t=>{const e=this.context.createBiquadFilter();return e.type="allpass",e.frequency.value=t,e}),this._feedbackCombFilters=W_.map((t,e)=>{const s=new Hf({context:this.context,delayTime:t});return this._scaleRoomSize.connect(s.resonance),s.resonance.value=B_[e],et.disconnect()),this._feedbackCombFilters.forEach(t=>t.dispose()),this.roomSize.dispose(),this._scaleRoomSize.dispose(),this}}class Q_ extends R_{constructor(t){super(t),this._feedbackL.disconnect(),this._feedbackL.connect(this._feedbackMerge,0,1),this._feedbackR.disconnect(),this._feedbackR.connect(this._feedbackMerge,0,0),Gp(this,["feedback"])}}class Z_ extends Q_{constructor(){super(Cp(Z_.getDefaults(),arguments,["delayTime","feedback"])),this.name="PingPongDelay";var t=Cp(Z_.getDefaults(),arguments,["delayTime","feedback"]);this._leftDelay=new Od({context:this.context,maxDelay:t.maxDelay}),this._rightDelay=new Od({context:this.context,maxDelay:t.maxDelay}),this._rightPreDelay=new Od({context:this.context,maxDelay:t.maxDelay}),this.delayTime=new Td({context:this.context,units:"time",value:t.delayTime}),this.connectEffectLeft(this._leftDelay),this.connectEffectRight(this._rightPreDelay,this._rightDelay),this.delayTime.fan(this._leftDelay.delayTime,this._rightDelay.delayTime,this._rightPreDelay.delayTime),this._feedbackL.disconnect(),this._feedbackL.connect(this._rightDelay),Gp(this,["delayTime"])}static getDefaults(){return Object.assign(Q_.getDefaults(),{delayTime:.25,maxDelay:1})}dispose(){return super.dispose(),this._leftDelay.dispose(),this._rightDelay.dispose(),this._rightPreDelay.dispose(),this.delayTime.dispose(),this}}class X_ extends I_{constructor(){super(Cp(X_.getDefaults(),arguments,["pitch"])),this.name="PitchShift";var t=Cp(X_.getDefaults(),arguments,["pitch"]);this._frequency=new Td({context:this.context}),this._delayA=new Od({maxDelay:1,context:this.context}),this._lfoA=new df({context:this.context,min:0,max:.1,type:"sawtooth"}).connect(this._delayA.delayTime),this._delayB=new Od({maxDelay:1,context:this.context}),this._lfoB=new df({context:this.context,min:0,max:.1,type:"sawtooth",phase:180}).connect(this._delayB.delayTime),this._crossFade=new g_({context:this.context}),this._crossFadeLFO=new df({context:this.context,min:0,max:1,type:"triangle",phase:90}).connect(this._crossFade.fade),this._feedbackDelay=new Od({delayTime:t.delayTime,context:this.context}),this.delayTime=this._feedbackDelay.delayTime,Gp(this,"delayTime"),this._pitch=t.pitch,this._windowSize=t.windowSize,this._delayA.connect(this._crossFade.a),this._delayB.connect(this._crossFade.b),this._frequency.fan(this._lfoA.frequency,this._lfoB.frequency,this._crossFadeLFO.frequency),this.effectSend.fan(this._delayA,this._delayB),this._crossFade.chain(this._feedbackDelay,this.effectReturn);t=this.now();this._lfoA.start(t),this._lfoB.start(t),this._crossFadeLFO.start(t),this.windowSize=this._windowSize}static getDefaults(){return Object.assign(I_.getDefaults(),{pitch:0,windowSize:.1,delayTime:0,feedback:0})}get pitch(){return this._pitch}set pitch(t){this._pitch=t;let e=0;e=t<0?(this._lfoA.min=0,this._lfoA.max=this._windowSize,this._lfoB.min=0,this._lfoB.max=this._windowSize,sd(t-1)+1):(this._lfoA.min=this._windowSize,this._lfoA.max=0,this._lfoB.min=this._windowSize,this._lfoB.max=0,sd(t)-1),this._frequency.value=e*(1.2/this._windowSize)}get windowSize(){return this._windowSize}set windowSize(t){this._windowSize=this.toSeconds(t),this.pitch=this._pitch}dispose(){return super.dispose(),this._frequency.dispose(),this._delayA.dispose(),this._delayB.dispose(),this._lfoA.dispose(),this._lfoB.dispose(),this._crossFade.dispose(),this._crossFadeLFO.dispose(),this._feedbackDelay.dispose(),this}}class Y_ extends E_{constructor(){super(Cp(Y_.getDefaults(),arguments,["frequency","octaves","baseFrequency"])),this.name="Phaser";var t=Cp(Y_.getDefaults(),arguments,["frequency","octaves","baseFrequency"]);this._lfoL=new df({context:this.context,frequency:t.frequency,min:0,max:1}),this._lfoR=new df({context:this.context,frequency:t.frequency,min:0,max:1,phase:180}),this._baseFrequency=this.toFrequency(t.baseFrequency),this._octaves=t.octaves,this.Q=new Td({context:this.context,value:t.Q,units:"positive"}),this._filtersL=this._makeFilters(t.stages,this._lfoL),this._filtersR=this._makeFilters(t.stages,this._lfoR),this.frequency=this._lfoL.frequency,this.frequency.value=t.frequency,this.connectEffectLeft(...this._filtersL),this.connectEffectRight(...this._filtersR),this._lfoL.frequency.connect(this._lfoR.frequency),this.baseFrequency=t.baseFrequency,this.octaves=t.octaves,this._lfoL.start(),this._lfoR.start(),Gp(this,["frequency","Q"])}static getDefaults(){return Object.assign(E_.getDefaults(),{frequency:.5,octaves:3,stages:10,Q:10,baseFrequency:350})}_makeFilters(e,s){const n=[];for(let t=0;tt.disconnect()),this._filtersR.forEach(t=>t.disconnect()),this.frequency.dispose(),this}}class $_ extends v_{constructor(){super(Cp($_.getDefaults(),arguments,["decay"])),this.name="Reverb",this._convolver=this.context.createConvolver(),this.ready=Promise.resolve();var t=Cp($_.getDefaults(),arguments,["decay"]);this._decay=t.decay,this._preDelay=t.preDelay,this.generate(),this.connectEffect(this._convolver)}static getDefaults(){return Object.assign(v_.getDefaults(),{decay:1.5,preDelay:.01})}get decay(){return this._decay}set decay(t){ap(t=this.toSeconds(t),.001),this._decay=t,this.generate()}get preDelay(){return this._preDelay}set preDelay(t){ap(t=this.toSeconds(t),0),this._preDelay=t,this.generate()}generate(){return yp(this,void 0,void 0,function*(){const t=this.ready,e=new Yp(2,this._decay+this._preDelay,this.context.sampleRate),s=new Ud({context:e}),n=new Ud({context:e}),i=new M_({context:e});s.connect(i,0,0),n.connect(i,0,1);const r=new xd({context:e}).toDestination();i.connect(r),s.start(0),n.start(0),r.gain.setValueAtTime(0,0),r.gain.setValueAtTime(1,this._preDelay),r.gain.exponentialApproachValueAtTime(0,this._preDelay,this.decay);const o=e.render();return this.ready=o.then(Zp),yield t,this._convolver.buffer=(yield o).get(),this})}dispose(){return super.dispose(),this._convolver.disconnect(),this}}class H_ extends md{constructor(){super(Cp(H_.getDefaults(),arguments)),this.name="MidSideSplit",this._split=this.input=new O_({channels:2,context:this.context}),this._midAdd=new lf({context:this.context}),this.mid=new ef({context:this.context,value:Math.SQRT1_2}),this._sideSubtract=new bf({context:this.context}),this.side=new ef({context:this.context,value:Math.SQRT1_2}),this._split.connect(this._midAdd,0),this._split.connect(this._midAdd.addend,1),this._split.connect(this._sideSubtract,0),this._split.connect(this._sideSubtract.subtrahend,1),this._midAdd.connect(this.mid),this._sideSubtract.connect(this.side)}dispose(){return super.dispose(),this.mid.dispose(),this.side.dispose(),this._midAdd.dispose(),this._sideSubtract.dispose(),this._split.dispose(),this}}class J_ extends md{constructor(){super(Cp(J_.getDefaults(),arguments)),this.name="MidSideMerge",this.mid=new xd({context:this.context}),this.side=new xd({context:this.context}),this._left=new lf({context:this.context}),this._leftMult=new ef({context:this.context,value:Math.SQRT1_2}),this._right=new bf({context:this.context}),this._rightMult=new ef({context:this.context,value:Math.SQRT1_2}),this._merge=this.output=new M_({context:this.context}),this.mid.fan(this._left),this.side.connect(this._left.addend),this.mid.connect(this._right),this.side.connect(this._right.subtrahend),this._left.connect(this._leftMult),this._right.connect(this._rightMult),this._leftMult.connect(this._merge,0,0),this._rightMult.connect(this._merge,0,1)}dispose(){return super.dispose(),this.mid.dispose(),this.side.dispose(),this._leftMult.dispose(),this._rightMult.dispose(),this._left.dispose(),this._right.dispose(),this}}class K_ extends v_{constructor(t){super(t),this.name="MidSideEffect",this._midSideMerge=new J_({context:this.context}),this._midSideSplit=new H_({context:this.context}),this._midSend=this._midSideSplit.mid,this._sideSend=this._midSideSplit.side,this._midReturn=this._midSideMerge.mid,this._sideReturn=this._midSideMerge.side,this.effectSend.connect(this._midSideSplit),this._midSideMerge.connect(this.effectReturn)}connectEffectMid(...t){this._midSend.chain(...t,this._midReturn)}connectEffectSide(...t){this._sideSend.chain(...t,this._sideReturn)}dispose(){return super.dispose(),this._midSideSplit.dispose(),this._midSideMerge.dispose(),this._midSend.dispose(),this._sideSend.dispose(),this._midReturn.dispose(),this._sideReturn.dispose(),this}}class tm extends K_{constructor(){super(Cp(tm.getDefaults(),arguments,["width"])),this.name="StereoWidener";var t=Cp(tm.getDefaults(),arguments,["width"]);this.width=new Td({context:this.context,value:t.width,units:"normalRange"}),Gp(this,["width"]),this._twoTimesWidthMid=new ef({context:this.context,value:2}),this._twoTimesWidthSide=new ef({context:this.context,value:2}),this._midMult=new ef({context:this.context}),this._twoTimesWidthMid.connect(this._midMult.factor),this.connectEffectMid(this._midMult),this._oneMinusWidth=new bf({context:this.context}),this._oneMinusWidth.connect(this._twoTimesWidthMid),vd(this.context.getConstant(1),this._oneMinusWidth),this.width.connect(this._oneMinusWidth.subtrahend),this._sideMult=new ef({context:this.context}),this.width.connect(this._twoTimesWidthSide),this._twoTimesWidthSide.connect(this._sideMult.factor),this.connectEffectSide(this._sideMult)}static getDefaults(){return Object.assign(K_.getDefaults(),{width:.5})}dispose(){return super.dispose(),this.width.dispose(),this._midMult.dispose(),this._sideMult.dispose(),this._twoTimesWidthMid.dispose(),this._twoTimesWidthSide.dispose(),this._oneMinusWidth.dispose(),this}}class em extends E_{constructor(){super(Cp(em.getDefaults(),arguments,["frequency","depth"])),this.name="Tremolo";var t=Cp(em.getDefaults(),arguments,["frequency","depth"]);this._lfoL=new df({context:this.context,type:t.type,min:1,max:0}),this._lfoR=new df({context:this.context,type:t.type,min:1,max:0}),this._amplitudeL=new xd({context:this.context}),this._amplitudeR=new xd({context:this.context}),this.frequency=new Td({context:this.context,value:t.frequency,units:"frequency"}),this.depth=new Td({context:this.context,value:t.depth,units:"normalRange"}),Gp(this,["frequency","depth"]),this.connectEffectLeft(this._amplitudeL),this.connectEffectRight(this._amplitudeR),this._lfoL.connect(this._amplitudeL.gain),this._lfoR.connect(this._amplitudeR.gain),this.frequency.fan(this._lfoL.frequency,this._lfoR.frequency),this.depth.fan(this._lfoR.amplitude,this._lfoL.amplitude),this.spread=t.spread}static getDefaults(){return Object.assign(E_.getDefaults(),{frequency:10,type:"sine",depth:.5,spread:180})}start(t){return this._lfoL.start(t),this._lfoR.start(t),this}stop(t){return this._lfoL.stop(t),this._lfoR.stop(t),this}sync(){return this._lfoL.sync(),this._lfoR.sync(),this.context.transport.syncSignal(this.frequency),this}unsync(){return this._lfoL.unsync(),this._lfoR.unsync(),this.context.transport.unsyncSignal(this.frequency),this}get type(){return this._lfoL.type}set type(t){this._lfoL.type=t,this._lfoR.type=t}get spread(){return this._lfoR.phase-this._lfoL.phase}set spread(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}dispose(){return super.dispose(),this._lfoL.dispose(),this._lfoR.dispose(),this._amplitudeL.dispose(),this._amplitudeR.dispose(),this.frequency.dispose(),this.depth.dispose(),this}}class sm extends v_{constructor(){super(Cp(sm.getDefaults(),arguments,["frequency","depth"])),this.name="Vibrato";var t=Cp(sm.getDefaults(),arguments,["frequency","depth"]);this._delayNode=new Od({context:this.context,delayTime:0,maxDelay:t.maxDelay}),this._lfo=new df({context:this.context,type:t.type,min:0,max:t.maxDelay,frequency:t.frequency,phase:-90}).start().connect(this._delayNode.delayTime),this.frequency=this._lfo.frequency,this.depth=this._lfo.amplitude,this.depth.value=t.depth,Gp(this,["frequency","depth"]),this.effectSend.chain(this._delayNode,this.effectReturn)}static getDefaults(){return Object.assign(v_.getDefaults(),{maxDelay:.005,frequency:5,depth:.1,type:"sine"})}get type(){return this._lfo.type}set type(t){this._lfo.type=t}dispose(){return super.dispose(),this._delayNode.dispose(),this._lfo.dispose(),this.frequency.dispose(),this.depth.dispose(),this}}class nm extends md{constructor(){super(Cp(nm.getDefaults(),arguments,["type","size"])),this.name="Analyser",this._analysers=[],this._buffers=[];var e=Cp(nm.getDefaults(),arguments,["type","size"]);this.input=this.output=this._gain=new xd({context:this.context}),this._split=new O_({context:this.context,channels:e.channels}),this.input.connect(this._split),ap(e.channels,1);for(let t=0;t{e=this._buffers[e];"fft"===this._type?t.getFloatFrequencyData(e):"waveform"===this._type&&t.getFloatTimeDomainData(e)}),1===this.channels?this._buffers[0]:this._buffers}get size(){return this._analysers[0].frequencyBinCount}set size(s){this._analysers.forEach((t,e)=>{t.fftSize=2*s,this._buffers[e]=new Float32Array(s)})}get channels(){return this._analysers.length}get type(){return this._type}set type(t){op("waveform"===t||"fft"===t,`Analyser: invalid type: ${t}`),this._type=t}get smoothing(){return this._analysers[0].smoothingTimeConstant}set smoothing(e){this._analysers.forEach(t=>t.smoothingTimeConstant=e)}dispose(){return super.dispose(),this._analysers.forEach(t=>t.disconnect()),this._split.dispose(),this._gain.dispose(),this}}class im extends md{constructor(){super(Cp(im.getDefaults(),arguments)),this.name="MeterBase",this.input=this.output=this._analyser=new nm({context:this.context,size:256,type:"waveform"})}dispose(){return super.dispose(),this._analyser.dispose(),this}}class rm extends im{constructor(){super(Cp(rm.getDefaults(),arguments,["smoothing"])),this.name="Meter",this._rms=0;var t=Cp(rm.getDefaults(),arguments,["smoothing"]);this.input=this.output=this._analyser=new nm({context:this.context,size:256,type:"waveform",channels:t.channelCount}),this.smoothing=t.smoothing,this.normalRange=t.normalRange}static getDefaults(){return Object.assign(im.getDefaults(),{smoothing:.8,normalRange:!1,channelCount:1})}getLevel(){return _p("'getLevel' has been changed to 'getValue'"),this.getValue()}getValue(){const t=this._analyser.getValue(),e=(1===this.channels?[t]:t).map(t=>{var e=t.reduce((t,e)=>t+e*e,0),t=Math.sqrt(e/t.length);return this._rms=Math.max(t,this._rms*this.smoothing),this.normalRange?this._rms:ed(this._rms)});return 1===this.channels?e[0]:e}get channels(){return this._analyser.channels}dispose(){return super.dispose(),this._analyser.dispose(),this}}class om extends im{constructor(){super(Cp(om.getDefaults(),arguments,["size"])),this.name="FFT";var t=Cp(om.getDefaults(),arguments,["size"]);this.normalRange=t.normalRange,this._analyser.type="fft",this.size=t.size}static getDefaults(){return Object.assign(md.getDefaults(),{normalRange:!1,size:1024,smoothing:.8})}getValue(){return this._analyser.getValue().map(t=>this.normalRange?td(t):t)}get size(){return this._analyser.size}set size(t){this._analyser.size=t}get smoothing(){return this._analyser.smoothing}set smoothing(t){this._analyser.smoothing=t}getFrequencyOfIndex(t){return op(0<=t&&tt._updateSolo())}get muted(){return 0===this.input.gain.value}_addSolo(){cm._soloed.has(this.context)||cm._soloed.set(this.context,new Set),cm._soloed.get(this.context).add(this)}_removeSolo(){cm._soloed.has(this.context)&&cm._soloed.get(this.context).delete(this)}_isSoloed(){return cm._soloed.has(this.context)&&cm._soloed.get(this.context).has(this)}_noSolos(){return!cm._soloed.has(this.context)||cm._soloed.has(this.context)&&0===cm._soloed.get(this.context).size}_updateSolo(){this._isSoloed()||this._noSolos()?this.input.gain.value=1:this.input.gain.value=0}dispose(){return super.dispose(),cm._allSolos.get(this.context).delete(this),this._removeSolo(),this}}cm._allSolos=new Map,cm._soloed=new Map;class lm extends md{constructor(){super(Cp(lm.getDefaults(),arguments,["pan","volume"])),this.name="PanVol";var t=Cp(lm.getDefaults(),arguments,["pan","volume"]);this._panner=this.input=new w_({context:this.context,pan:t.pan,channelCount:t.channelCount}),this.pan=this._panner.pan,this._volume=this.output=new Vd({context:this.context,volume:t.volume}),this.volume=this._volume.volume,this._panner.connect(this._volume),this.mute=t.mute,Gp(this,["pan","volume"])}static getDefaults(){return Object.assign(md.getDefaults(),{mute:!1,pan:0,volume:0,channelCount:1})}get mute(){return this._volume.mute}set mute(t){this._volume.mute=t}dispose(){return super.dispose(),this._panner.dispose(),this.pan.dispose(),this._volume.dispose(),this.volume.dispose(),this}}class um extends md{constructor(){super(Cp(um.getDefaults(),arguments,["volume","pan"])),this.name="Channel";var t=Cp(um.getDefaults(),arguments,["volume","pan"]);this._solo=this.input=new cm({solo:t.solo,context:this.context}),this._panVol=this.output=new lm({context:this.context,pan:t.pan,volume:t.volume,mute:t.mute,channelCount:t.channelCount}),this.pan=this._panVol.pan,this.volume=this._panVol.volume,this._solo.connect(this._panVol),Gp(this,["pan","volume"])}static getDefaults(){return Object.assign(md.getDefaults(),{pan:0,volume:0,mute:!1,solo:!1,channelCount:1})}get solo(){return this._solo.solo}set solo(t){this._solo.solo=t}get muted(){return this._solo.muted||this.mute}get mute(){return this._panVol.mute}set mute(t){this._panVol.mute=t}_getBus(t){return um.buses.has(t)||um.buses.set(t,new xd({context:this.context})),um.buses.get(t)}send(t,e=0){const s=this._getBus(t),n=new xd({context:this.context,units:"decibels",gain:e});return this.connect(n),n.connect(s),n}receive(t){return this._getBus(t).connect(this),this}dispose(){return super.dispose(),this._panVol.dispose(),this.pan.dispose(),this.volume.dispose(),this._solo.dispose(),this}}um.buses=new Map;class pm extends md{constructor(){super(Cp(pm.getDefaults(),arguments)),this.name="Mono",this.input=new xd({context:this.context}),this._merge=this.output=new M_({channels:2,context:this.context}),this.input.connect(this._merge,0,0),this.input.connect(this._merge,0,1)}dispose(){return super.dispose(),this._merge.dispose(),this.input.dispose(),this}}class dm extends md{constructor(){super(Cp(dm.getDefaults(),arguments,["lowFrequency","highFrequency"])),this.name="MultibandSplit",this.input=new xd({context:this.context}),this.output=void 0,this.low=new Nf({context:this.context,frequency:0,type:"lowpass"}),this._lowMidFilter=new Nf({context:this.context,frequency:0,type:"highpass"}),this.mid=new Nf({context:this.context,frequency:0,type:"lowpass"}),this.high=new Nf({context:this.context,frequency:0,type:"highpass"}),this._internalChannels=[this.low,this.mid,this.high];var t=Cp(dm.getDefaults(),arguments,["lowFrequency","highFrequency"]);this.lowFrequency=new Td({context:this.context,units:"frequency",value:t.lowFrequency}),this.highFrequency=new Td({context:this.context,units:"frequency",value:t.highFrequency}),this.Q=new Td({context:this.context,units:"positive",value:t.Q}),this.input.fan(this.low,this.high),this.input.chain(this._lowMidFilter,this.mid),this.lowFrequency.fan(this.low.frequency,this._lowMidFilter.frequency),this.highFrequency.fan(this.mid.frequency,this.high.frequency),this.Q.connect(this.low.Q),this.Q.connect(this._lowMidFilter.Q),this.Q.connect(this.mid.Q),this.Q.connect(this.high.Q),Gp(this,["high","mid","low","highFrequency","lowFrequency"])}static getDefaults(){return Object.assign(md.getDefaults(),{Q:1,highFrequency:2500,lowFrequency:400})}dispose(){return super.dispose(),Qp(this,["high","mid","low","highFrequency","lowFrequency"]),this.low.dispose(),this._lowMidFilter.dispose(),this.mid.dispose(),this.high.dispose(),this.lowFrequency.dispose(),this.highFrequency.dispose(),this.Q.dispose(),this}}class fm extends md{constructor(){super(...arguments),this.name="Listener",this.positionX=new _d({context:this.context,param:this.context.rawContext.listener.positionX}),this.positionY=new _d({context:this.context,param:this.context.rawContext.listener.positionY}),this.positionZ=new _d({context:this.context,param:this.context.rawContext.listener.positionZ}),this.forwardX=new _d({context:this.context,param:this.context.rawContext.listener.forwardX}),this.forwardY=new _d({context:this.context,param:this.context.rawContext.listener.forwardY}),this.forwardZ=new _d({context:this.context,param:this.context.rawContext.listener.forwardZ}),this.upX=new _d({context:this.context,param:this.context.rawContext.listener.upX}),this.upY=new _d({context:this.context,param:this.context.rawContext.listener.upY}),this.upZ=new _d({context:this.context,param:this.context.rawContext.listener.upZ})}static getDefaults(){return Object.assign(md.getDefaults(),{positionX:0,positionY:0,positionZ:0,forwardX:0,forwardY:0,forwardZ:-1,upX:0,upY:1,upZ:0})}dispose(){return super.dispose(),this.positionX.dispose(),this.positionY.dispose(),this.positionZ.dispose(),this.forwardX.dispose(),this.forwardY.dispose(),this.forwardZ.dispose(),this.upX.dispose(),this.upY.dispose(),this.upZ.dispose(),this}}jp(t=>{t.listener=new fm({context:t})}),zp(t=>{t.listener.dispose()});class _m extends md{constructor(){super(Cp(_m.getDefaults(),arguments,["positionX","positionY","positionZ"])),this.name="Panner3D";var t=Cp(_m.getDefaults(),arguments,["positionX","positionY","positionZ"]);this._panner=this.input=this.output=this.context.createPanner(),this.panningModel=t.panningModel,this.maxDistance=t.maxDistance,this.distanceModel=t.distanceModel,this.coneOuterGain=t.coneOuterGain,this.coneOuterAngle=t.coneOuterAngle,this.coneInnerAngle=t.coneInnerAngle,this.refDistance=t.refDistance,this.rolloffFactor=t.rolloffFactor,this.positionX=new _d({context:this.context,param:this._panner.positionX,value:t.positionX}),this.positionY=new _d({context:this.context,param:this._panner.positionY,value:t.positionY}),this.positionZ=new _d({context:this.context,param:this._panner.positionZ,value:t.positionZ}),this.orientationX=new _d({context:this.context,param:this._panner.orientationX,value:t.orientationX}),this.orientationY=new _d({context:this.context,param:this._panner.orientationY,value:t.orientationY}),this.orientationZ=new _d({context:this.context,param:this._panner.orientationZ,value:t.orientationZ})}static getDefaults(){return Object.assign(md.getDefaults(),{coneInnerAngle:360,coneOuterAngle:360,coneOuterGain:0,distanceModel:"inverse",maxDistance:1e4,orientationX:0,orientationY:0,orientationZ:0,panningModel:"equalpower",positionX:0,positionY:0,positionZ:0,refDistance:1,rolloffFactor:1})}setPosition(t,e,s){return this.positionX.value=t,this.positionY.value=e,this.positionZ.value=s,this}setOrientation(t,e,s){return this.orientationX.value=t,this.orientationY.value=e,this.orientationZ.value=s,this}get panningModel(){return this._panner.panningModel}set panningModel(t){this._panner.panningModel=t}get refDistance(){return this._panner.refDistance}set refDistance(t){this._panner.refDistance=t}get rolloffFactor(){return this._panner.rolloffFactor}set rolloffFactor(t){this._panner.rolloffFactor=t}get distanceModel(){return this._panner.distanceModel}set distanceModel(t){this._panner.distanceModel=t}get coneInnerAngle(){return this._panner.coneInnerAngle}set coneInnerAngle(t){this._panner.coneInnerAngle=t}get coneOuterAngle(){return this._panner.coneOuterAngle}set coneOuterAngle(t){this._panner.coneOuterAngle=t}get coneOuterGain(){return this._panner.coneOuterGain}set coneOuterGain(t){this._panner.coneOuterGain=t}get maxDistance(){return this._panner.maxDistance}set maxDistance(t){this._panner.maxDistance=t}dispose(){return super.dispose(),this._panner.disconnect(),this.orientationX.dispose(),this.orientationY.dispose(),this.orientationZ.dispose(),this.positionX.dispose(),this.positionY.dispose(),this.positionZ.dispose(),this}}class mm extends md{constructor(){super(Cp(mm.getDefaults(),arguments)),this.name="Recorder";var t=Cp(mm.getDefaults(),arguments);this.input=new xd({context:this.context}),op(mm.supported,"Media Recorder API is not available"),this._stream=this.context.createMediaStreamDestination(),this.input.connect(this._stream),this._recorder=new MediaRecorder(this._stream.stream,{mimeType:t.mimeType})}static getDefaults(){return md.getDefaults()}get mimeType(){return this._recorder.mimeType}static get supported(){return null!==mp&&Reflect.has(mp,"MediaRecorder")}get state(){return"inactive"===this._recorder.state?"stopped":"paused"===this._recorder.state?"paused":"started"}start(){return yp(this,void 0,void 0,function*(){op("started"!==this.state,"Recorder is already started");var t=new Promise(t=>{const e=()=>{this._recorder.removeEventListener("start",e,!1),t()};this._recorder.addEventListener("start",e,!1)});return this._recorder.start(),yield t})}stop(){return yp(this,void 0,void 0,function*(){op("stopped"!==this.state,"Recorder is not started");var t=new Promise(e=>{const s=t=>{this._recorder.removeEventListener("dataavailable",s,!1),e(t.data)};this._recorder.addEventListener("dataavailable",s,!1)});return this._recorder.stop(),yield t})}pause(){return op("started"===this.state,"Recorder must be started"),this._recorder.pause(),this}dispose(){return super.dispose(),this.input.dispose(),this._stream.disconnect(),this}}class gm extends md{constructor(){super(Cp(gm.getDefaults(),arguments,["threshold","ratio"])),this.name="Compressor",this._compressor=this.context.createDynamicsCompressor(),this.input=this._compressor,this.output=this._compressor;var t=Cp(gm.getDefaults(),arguments,["threshold","ratio"]);this.threshold=new _d({minValue:this._compressor.threshold.minValue,maxValue:this._compressor.threshold.maxValue,context:this.context,convert:!1,param:this._compressor.threshold,units:"decibels",value:t.threshold}),this.attack=new _d({minValue:this._compressor.attack.minValue,maxValue:this._compressor.attack.maxValue,context:this.context,param:this._compressor.attack,units:"time",value:t.attack}),this.release=new _d({minValue:this._compressor.release.minValue,maxValue:this._compressor.release.maxValue,context:this.context,param:this._compressor.release,units:"time",value:t.release}),this.knee=new _d({minValue:this._compressor.knee.minValue,maxValue:this._compressor.knee.maxValue,context:this.context,convert:!1,param:this._compressor.knee,units:"decibels",value:t.knee}),this.ratio=new _d({minValue:this._compressor.ratio.minValue,maxValue:this._compressor.ratio.maxValue,context:this.context,convert:!1,param:this._compressor.ratio,units:"positive",value:t.ratio}),Gp(this,["knee","release","attack","ratio","threshold"])}static getDefaults(){return Object.assign(md.getDefaults(),{attack:.003,knee:30,ratio:12,release:.25,threshold:-24})}get reduction(){return this._compressor.reduction}dispose(){return super.dispose(),this._compressor.disconnect(),this.attack.dispose(),this.release.dispose(),this.threshold.dispose(),this.ratio.dispose(),this.knee.dispose(),this}}class vm extends md{constructor(){super(Object.assign(Cp(vm.getDefaults(),arguments,["threshold","smoothing"]))),this.name="Gate";var t=Cp(vm.getDefaults(),arguments,["threshold","smoothing"]);this._follower=new T_({context:this.context,smoothing:t.smoothing}),this._gt=new Sf({context:this.context,value:td(t.threshold)}),this.input=new xd({context:this.context}),this._gate=this.output=new xd({context:this.context}),this.input.connect(this._gate),this.input.chain(this._follower,this._gt,this._gate.gain)}static getDefaults(){return Object.assign(md.getDefaults(),{smoothing:.1,threshold:-40})}get threshold(){return ed(this._gt.value)}set threshold(t){this._gt.value=td(t)}get smoothing(){return this._follower.smoothing}set smoothing(t){this._follower.smoothing=t}dispose(){return super.dispose(),this.input.dispose(),this._follower.dispose(),this._gt.dispose(),this._gate.dispose(),this}}class ym extends md{constructor(){super(Object.assign(Cp(ym.getDefaults(),arguments,["threshold"]))),this.name="Limiter";var t=Cp(ym.getDefaults(),arguments,["threshold"]);this._compressor=this.input=this.output=new gm({context:this.context,ratio:20,attack:.003,release:.01,threshold:t.threshold}),this.threshold=this._compressor.threshold,Gp(this,"threshold")}static getDefaults(){return Object.assign(md.getDefaults(),{threshold:-12})}get reduction(){return this._compressor.reduction}dispose(){return super.dispose(),this._compressor.dispose(),this.threshold.dispose(),this}}class xm extends md{constructor(){super(Object.assign(Cp(xm.getDefaults(),arguments))),this.name="MidSideCompressor";var t=Cp(xm.getDefaults(),arguments);this._midSideSplit=this.input=new H_({context:this.context}),this._midSideMerge=this.output=new J_({context:this.context}),this.mid=new gm(Object.assign(t.mid,{context:this.context})),this.side=new gm(Object.assign(t.side,{context:this.context})),this._midSideSplit.mid.chain(this.mid,this._midSideMerge.mid),this._midSideSplit.side.chain(this.side,this._midSideMerge.side),Gp(this,["mid","side"])}static getDefaults(){return Object.assign(md.getDefaults(),{mid:{ratio:3,threshold:-24,release:.03,attack:.02,knee:16},side:{ratio:6,threshold:-30,release:.25,attack:.03,knee:10}})}dispose(){return super.dispose(),this.mid.dispose(),this.side.dispose(),this._midSideSplit.dispose(),this._midSideMerge.dispose(),this}}class wm extends md{constructor(){super(Object.assign(Cp(wm.getDefaults(),arguments))),this.name="MultibandCompressor";var t=Cp(wm.getDefaults(),arguments);this._splitter=this.input=new dm({context:this.context,lowFrequency:t.lowFrequency,highFrequency:t.highFrequency}),this.lowFrequency=this._splitter.lowFrequency,this.highFrequency=this._splitter.highFrequency,this.output=new xd({context:this.context}),this.low=new gm(Object.assign(t.low,{context:this.context})),this.mid=new gm(Object.assign(t.mid,{context:this.context})),this.high=new gm(Object.assign(t.high,{context:this.context})),this._splitter.low.chain(this.low,this.output),this._splitter.mid.chain(this.mid,this.output),this._splitter.high.chain(this.high,this.output),Gp(this,["high","mid","low","highFrequency","lowFrequency"])}static getDefaults(){return Object.assign(md.getDefaults(),{lowFrequency:250,highFrequency:2e3,low:{ratio:6,threshold:-30,release:.25,attack:.03,knee:10},mid:{ratio:3,threshold:-24,release:.03,attack:.02,knee:16},high:{ratio:3,threshold:-24,release:.03,attack:.02,knee:16}})}dispose(){return super.dispose(),this._splitter.dispose(),this.low.dispose(),this.mid.dispose(),this.high.dispose(),this.output.dispose(),this}}class bm extends md{constructor(){super(Cp(bm.getDefaults(),arguments,["low","mid","high"])),this.name="EQ3",this.output=new xd({context:this.context}),this._internalChannels=[];var t=Cp(bm.getDefaults(),arguments,["low","mid","high"]);this.input=this._multibandSplit=new dm({context:this.context,highFrequency:t.highFrequency,lowFrequency:t.lowFrequency}),this._lowGain=new xd({context:this.context,gain:t.low,units:"decibels"}),this._midGain=new xd({context:this.context,gain:t.mid,units:"decibels"}),this._highGain=new xd({context:this.context,gain:t.high,units:"decibels"}),this.low=this._lowGain.gain,this.mid=this._midGain.gain,this.high=this._highGain.gain,this.Q=this._multibandSplit.Q,this.lowFrequency=this._multibandSplit.lowFrequency,this.highFrequency=this._multibandSplit.highFrequency,this._multibandSplit.low.chain(this._lowGain,this.output),this._multibandSplit.mid.chain(this._midGain,this.output),this._multibandSplit.high.chain(this._highGain,this.output),Gp(this,["low","mid","high","lowFrequency","highFrequency"]),this._internalChannels=[this._multibandSplit]}static getDefaults(){return Object.assign(md.getDefaults(),{high:0,highFrequency:2500,low:0,lowFrequency:400,mid:0})}dispose(){return super.dispose(),Qp(this,["low","mid","high","lowFrequency","highFrequency"]),this._multibandSplit.dispose(),this.lowFrequency.dispose(),this.highFrequency.dispose(),this._lowGain.dispose(),this._midGain.dispose(),this._highGain.dispose(),this.low.dispose(),this.mid.dispose(),this.high.dispose(),this.Q.dispose(),this}}class Tm extends md{constructor(){super(Cp(Tm.getDefaults(),arguments,["url","onload"])),this.name="Convolver",this._convolver=this.context.createConvolver();const e=Cp(Tm.getDefaults(),arguments,["url","onload"]);this._buffer=new Xp(e.url,t=>{this.buffer=t,e.onload()}),this.input=new xd({context:this.context}),this.output=new xd({context:this.context}),this._buffer.loaded&&(this.buffer=this._buffer),this.normalize=e.normalize,this.input.chain(this._convolver,this.output)}static getDefaults(){return Object.assign(md.getDefaults(),{normalize:!0,onload:Zp})}load(t){return yp(this,void 0,void 0,function*(){this.buffer=yield this._buffer.load(t)})}get buffer(){return this._buffer.length?this._buffer:null}set buffer(t){t&&this._buffer.set(t),this._convolver.buffer&&(this.input.disconnect(),this._convolver.disconnect(),this._convolver=this.context.createConvolver(),this.input.chain(this._convolver,this.output));t=this._buffer.get();this._convolver.buffer=t||null}get normalize(){return this._convolver.normalize}set normalize(t){this._convolver.normalize=t}dispose(){return super.dispose(),this._buffer.dispose(),this._convolver.disconnect(),this}}const Sm=Jp().transport;const km=Jp().destination,Am=Jp().destination;const Cm=Jp().listener;const Dm=Jp().draw;const Om=Jp();const Mm=Xp,Em=Md,Rm=Bd})(),Fm})()}); \ No newline at end of file diff --git a/public/js/p5-v0.3.11.sound.min.js b/public/js/p5-v0.3.11.sound.min.js new file mode 100644 index 0000000..899f447 --- /dev/null +++ b/public/js/p5-v0.3.11.sound.min.js @@ -0,0 +1,28 @@ +/*! p5.sound.min.js v0.3.11 2019-03-14 */ + +/** + * p5.sound + * https://p5js.org/reference/#/libraries/p5.sound + * + * From the Processing Foundation and contributors + * https://github.com/processing/p5.js-sound/graphs/contributors + * + * MIT License (MIT) + * https://github.com/processing/p5.js-sound/blob/master/LICENSE + * + * Some of the many audio libraries & resources that inspire p5.sound: + * - TONE.js (c) Yotam Mann. Licensed under The MIT License (MIT). https://github.com/TONEnoTONE/Tone.js + * - buzz.js (c) Jay Salvat. Licensed under The MIT License (MIT). http://buzz.jaysalvat.com/ + * - Boris Smus Web Audio API book, 2013. Licensed under the Apache License http://www.apache.org/licenses/LICENSE-2.0 + * - wavesurfer.js https://github.com/katspaugh/wavesurfer.js + * - Web Audio Components by Jordan Santell https://github.com/web-audio-components + * - Wilm Thoben's Sound library for Processing https://github.com/processing/processing/tree/master/java/libraries/sound + * + * Web Audio API: http://w3.org/TR/webaudio/ + */ + +!function(t,e){"function"==typeof define&&define.amd?define("p5.sound",["p5"],function(t){e(t)}):e("object"==typeof exports?require("../p5"):t.p5)}(this,function(t){var e;e=function(){!function(){function t(t){t&&(t.setTargetAtTime||(t.setTargetAtTime=t.setTargetValueAtTime))}window.hasOwnProperty("webkitAudioContext")&&!window.hasOwnProperty("AudioContext")&&(window.AudioContext=window.webkitAudioContext,"function"!=typeof AudioContext.prototype.createGain&&(AudioContext.prototype.createGain=AudioContext.prototype.createGainNode),"function"!=typeof AudioContext.prototype.createDelay&&(AudioContext.prototype.createDelay=AudioContext.prototype.createDelayNode),"function"!=typeof AudioContext.prototype.createScriptProcessor&&(AudioContext.prototype.createScriptProcessor=AudioContext.prototype.createJavaScriptNode),"function"!=typeof AudioContext.prototype.createPeriodicWave&&(AudioContext.prototype.createPeriodicWave=AudioContext.prototype.createWaveTable),AudioContext.prototype.internal_createGain=AudioContext.prototype.createGain,AudioContext.prototype.createGain=function(){var e=this.internal_createGain();return t(e.gain),e},AudioContext.prototype.internal_createDelay=AudioContext.prototype.createDelay,AudioContext.prototype.createDelay=function(e){var i=e?this.internal_createDelay(e):this.internal_createDelay();return t(i.delayTime),i},AudioContext.prototype.internal_createBufferSource=AudioContext.prototype.createBufferSource,AudioContext.prototype.createBufferSource=function(){var e=this.internal_createBufferSource();return e.start?(e.internal_start=e.start,e.start=function(t,i,n){"undefined"!=typeof n?e.internal_start(t||0,i,n):e.internal_start(t||0,i||0)}):e.start=function(t,e,i){e||i?this.noteGrainOn(t||0,e,i):this.noteOn(t||0)},e.stop?(e.internal_stop=e.stop,e.stop=function(t){e.internal_stop(t||0)}):e.stop=function(t){this.noteOff(t||0)},t(e.playbackRate),e},AudioContext.prototype.internal_createDynamicsCompressor=AudioContext.prototype.createDynamicsCompressor,AudioContext.prototype.createDynamicsCompressor=function(){var e=this.internal_createDynamicsCompressor();return t(e.threshold),t(e.knee),t(e.ratio),t(e.reduction),t(e.attack),t(e.release),e},AudioContext.prototype.internal_createBiquadFilter=AudioContext.prototype.createBiquadFilter,AudioContext.prototype.createBiquadFilter=function(){var e=this.internal_createBiquadFilter();return t(e.frequency),t(e.detune),t(e.Q),t(e.gain),e},"function"!=typeof AudioContext.prototype.createOscillator&&(AudioContext.prototype.internal_createOscillator=AudioContext.prototype.createOscillator,AudioContext.prototype.createOscillator=function(){var e=this.internal_createOscillator();return e.start?(e.internal_start=e.start,e.start=function(t){e.internal_start(t||0)}):e.start=function(t){this.noteOn(t||0)},e.stop?(e.internal_stop=e.stop,e.stop=function(t){e.internal_stop(t||0)}):e.stop=function(t){this.noteOff(t||0)},e.setPeriodicWave||(e.setPeriodicWave=e.setWaveTable),t(e.frequency),t(e.detune),e})),window.hasOwnProperty("webkitOfflineAudioContext")&&!window.hasOwnProperty("OfflineAudioContext")&&(window.OfflineAudioContext=window.webkitOfflineAudioContext)}(window),navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia;var e=document.createElement("audio");t.prototype.isSupported=function(){return!!e.canPlayType};var i=function(){return!!e.canPlayType&&e.canPlayType('audio/ogg; codecs="vorbis"')},n=function(){return!!e.canPlayType&&e.canPlayType("audio/mpeg;")},o=function(){return!!e.canPlayType&&e.canPlayType('audio/wav; codecs="1"')},r=function(){return!!e.canPlayType&&(e.canPlayType("audio/x-m4a;")||e.canPlayType("audio/aac;"))},s=function(){return!!e.canPlayType&&e.canPlayType("audio/x-aiff;")};t.prototype.isFileSupported=function(t){switch(t.toLowerCase()){case"mp3":return n();case"wav":return o();case"ogg":return i();case"aac":case"m4a":case"mp4":return r();case"aif":case"aiff":return s();default:return!1}}}();var i;!function(t,e){i=function(){return e()}()}(this,function(){function t(t){var e=t.createBuffer(1,1,t.sampleRate),i=t.createBufferSource();i.buffer=e,i.connect(t.destination),i.start(0),t.resume&&t.resume()}function e(t){return"running"===t.state}function i(t,i){function n(){e(t)?i():(requestAnimationFrame(n),t.resume&&t.resume())}e(t)?i():n()}function n(t,e,i){if(Array.isArray(t)||NodeList&&t instanceof NodeList)for(var o=0;o1&&(this.input=new Array(t)),this.isUndef(e)||1===e?this.output=this.context.createGain():e>1&&(this.output=new Array(t))};t.prototype.set=function(e,i,n){if(this.isObject(e))n=i;else if(this.isString(e)){var o={};o[e]=i,e=o}t:for(var r in e){i=e[r];var s=this;if(-1!==r.indexOf(".")){for(var a=r.split("."),u=0;u1)for(var t=arguments[0],e=1;e0)for(var t=this,e=0;e0)for(var t=0;tn;n++)i[n].apply(this,e)}return this},t.Emitter.mixin=function(e){var i=["on","off","emit"];e._events={};for(var n=0;n1?t.getChannelData(1):e;var s=i(e,r),a=new window.ArrayBuffer(44+2*s.length),u=new window.DataView(a);n(u,0,"RIFF"),u.setUint32(4,36+2*s.length,!0),n(u,8,"WAVE"),n(u,12,"fmt "),u.setUint32(16,16,!0),u.setUint16(20,1,!0),u.setUint16(22,2,!0),u.setUint32(24,o.audiocontext.sampleRate,!0),u.setUint32(28,4*o.audiocontext.sampleRate,!0),u.setUint16(32,4,!0),u.setUint16(34,16,!0),n(u,36,"data"),u.setUint32(40,2*s.length,!0);for(var c=s.length,p=44,h=1,l=0;c>l;l++)u.setInt16(p,s[l]*(32767*h),!0),p+=2;return u}function i(t,e){for(var i=t.length+e.length,n=new Float32Array(i),o=0,r=0;i>r;)n[r++]=t[o],n[r++]=e[o],o++;return n}function n(t,e,i){for(var n=i.length,o=0;n>o;o++)t.setUint8(e+o,i.charCodeAt(o))}var o=a;t.prototype.sampleRate=function(){return o.audiocontext.sampleRate},t.prototype.freqToMidi=function(t){var e=Math.log(t/440)/Math.log(2),i=Math.round(12*e)+69;return i};var r=t.prototype.midiToFreq=function(t){return 440*Math.pow(2,(t-69)/12)},s=function(t){if("string"!=typeof t)return t;var e={A:21,B:23,C:24,D:26,E:28,F:29,G:31},i=e[t[0].toUpperCase()],n=~~t.slice(-1);switch(i+=12*(n-1),t[1]){case"#":i+=1;break;case"b":i-=1}return r(i)};return t.prototype.soundFormats=function(){o.extensions=[];for(var t=0;t-1))throw arguments[t]+" is not a valid sound format!";o.extensions.push(arguments[t])}},t.prototype.disposeSound=function(){for(var t=0;t-1)if(t.prototype.isFileSupported(n))i=i;else for(var r=i.split("."),s=r[r.length-1],a=0;a1?(this.splitter=i.createChannelSplitter(2),this.input.connect(this.splitter),this.splitter.connect(this.left,1),this.splitter.connect(this.right,0)):(this.input.connect(this.left),this.input.connect(this.right)),this.output=i.createChannelMerger(2),this.left.connect(this.output,0,1),this.right.connect(this.output,0,0),this.output.connect(e)},t.Panner.prototype.pan=function(t,e){var n=e||0,o=i.currentTime+n,r=(t+1)/2,s=Math.cos(r*Math.PI/2),a=Math.sin(r*Math.PI/2);this.left.gain.linearRampToValueAtTime(a,o),this.right.gain.linearRampToValueAtTime(s,o)},t.Panner.prototype.inputChannels=function(t){1===t?(this.input.disconnect(),this.input.connect(this.left),this.input.connect(this.right)):2===t&&(this.splitter=i.createChannelSplitter(2),this.input.disconnect(),this.input.connect(this.splitter),this.splitter.connect(this.left,1),this.splitter.connect(this.right,0))},t.Panner.prototype.connect=function(t){this.output.connect(t)},t.Panner.prototype.disconnect=function(){this.output&&this.output.disconnect()})}(a);var h;h=function(){function e(t,e){for(var i={},n=t.length,o=0;n>o;o++){if(t[o]>e){var r=t[o],s=new v(r,o);i[o]=s,o+=6e3}o++}return i}function i(t){for(var e=[],i=Object.keys(t).sort(),n=0;no;o++){var r=t[i[n]],s=t[i[n+o]];if(r&&s){var a=r.sampleIndex,u=s.sampleIndex,c=u-a;c>0&&r.intervals.push(c);var p=e.some(function(t){return t.interval===c?(t.count++,t):void 0});p||e.push({interval:c,count:1})}}return e}function n(t,e){var i=[];return t.forEach(function(t){try{var n=Math.abs(60/(t.interval/e));n=r(n);var o=i.some(function(e){return e.tempo===n?e.count+=t.count:void 0});if(!o){if(isNaN(n))return;i.push({tempo:Math.round(n),count:t.count})}}catch(s){throw s}}),i}function o(t,e,i,n){for(var o=[],s=Object.keys(t).sort(),a=0;a.01?!0:void 0})}function r(t){if(isFinite(t)&&0!==t){for(;90>t;)t*=2;for(;t>180&&t>90;)t/=2;return t}}function s(t){var e=t.inputBuffer.getChannelData(0);this._lastPos=e[e.length-1]||0,this._onTimeUpdate(self._lastPos)}function p(t){const e=t.target,i=this;e._playing=!1,e.removeEventListener("ended",i._clearOnEnd),i._onended(i),i.bufferSourceNodes.forEach(function(t,e){t._playing===!1&&i.bufferSourceNodes.splice(e)}),0===i.bufferSourceNodes.length&&(i._playing=!1)}var h=c,l=a,f=l.audiocontext,d=u.midiToFreq,m=u.convertToWav;t.SoundFile=function(e,i,n,o){if("undefined"!=typeof e){if("string"==typeof e||"string"==typeof e[0]){var r=t.prototype._checkFileFormats(e);this.url=r}else if("object"==typeof e&&!(window.File&&window.FileReader&&window.FileList&&window.Blob))throw"Unable to load file because the File API is not supported";e.file&&(e=e.file),this.file=e}this._onended=function(){},this._looping=!1,this._playing=!1,this._paused=!1,this._pauseTime=0,this._cues=[],this._cueIDCounter=0,this._lastPos=0,this._counterNode=null,this._scopeNode=null,this.bufferSourceNodes=[],this.bufferSourceNode=null,this.buffer=null,this.playbackRate=1,this.input=l.audiocontext.createGain(),this.output=l.audiocontext.createGain(),this.reversed=!1,this.startTime=0,this.endTime=null,this.pauseTime=0,this.mode="sustain",this.startMillis=null,this.panPosition=0,this.panner=new t.Panner(this.output,l.input,2),(this.url||this.file)&&this.load(i,n),l.soundArray.push(this),"function"==typeof o?this._whileLoading=o:this._whileLoading=function(){},this._onAudioProcess=s.bind(this),this._clearOnEnd=p.bind(this)},t.prototype.registerPreloadMethod("loadSound",t.prototype),t.prototype.loadSound=function(e,i,n,o){window.location.origin.indexOf("file://")>-1&&"undefined"===window.cordova&&window.alert("This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS");var r=this,s=new t.SoundFile(e,function(){"function"==typeof i&&i.apply(r,arguments),"function"==typeof r._decrementPreload&&r._decrementPreload()},n,o);return s},t.SoundFile.prototype.load=function(t,e){var i=this,n=(new Error).stack;if(void 0!==this.url&&""!==this.url){var o=new XMLHttpRequest;o.addEventListener("progress",function(t){i._updateProgress(t)},!1),o.open("GET",this.url,!0),o.responseType="arraybuffer",o.onload=function(){if(200===o.status){if(!i.panner)return;f.decodeAudioData(o.response,function(e){i.panner&&(i.buffer=e,i.panner.inputChannels(e.numberOfChannels),t&&t(i))},function(){if(i.panner){var t=new h("decodeAudioData",n,i.url),o="AudioContext error at decodeAudioData for "+i.url;e?(t.msg=o,e(t)):console.error(o+"\n The error stack trace includes: \n"+t.stack)}})}else{if(!i.panner)return;var r=new h("loadSound",n,i.url),s="Unable to load "+i.url+". The request status was: "+o.status+" ("+o.statusText+")";e?(r.message=s,e(r)):console.error(s+"\n The error stack trace includes: \n"+r.stack)}},o.onerror=function(){var t=new h("loadSound",n,i.url),o="There was no response from the server at "+i.url+". Check the url and internet connectivity.";e?(t.message=o,e(t)):console.error(o+"\n The error stack trace includes: \n"+t.stack)},o.send()}else if(void 0!==this.file){var r=new FileReader;r.onload=function(){i.panner&&f.decodeAudioData(r.result,function(e){i.panner&&(i.buffer=e,i.panner.inputChannels(e.numberOfChannels),t&&t(i))})},r.onerror=function(t){i.panner&&onerror&&onerror(t)},r.readAsArrayBuffer(this.file)}},t.SoundFile.prototype._updateProgress=function(t){if(t.lengthComputable){var e=t.loaded/t.total*.99;this._whileLoading(e,t)}else this._whileLoading("size unknown")},t.SoundFile.prototype.isLoaded=function(){return this.buffer?!0:!1},t.SoundFile.prototype.play=function(t,e,i,n,o){if(!this.output)return void console.warn("SoundFile.play() called after dispose");var r,s,a=l.audiocontext.currentTime,u=t||0;if(0>u&&(u=0),u+=a,"undefined"!=typeof e&&this.rate(e),"undefined"!=typeof i&&this.setVolume(i),!this.buffer)throw"not ready to play file, buffer has yet to load. Try preload()";if(this._pauseTime=0,"restart"===this.mode&&this.buffer&&this.bufferSourceNode&&(this.bufferSourceNode.stop(u),this._counterNode.stop(u)),"untildone"!==this.mode||!this.isPlaying()){if(this.bufferSourceNode=this._initSourceNode(),delete this._counterNode,this._counterNode=this._initCounterNode(),n){if(!(n>=0&&nt&&!this.reversed?(t=Math.abs(t),e=!0):t>0&&this.reversed&&(e=!0),this.bufferSourceNode){var i=l.audiocontext.currentTime;this.bufferSourceNode.playbackRate.cancelScheduledValues(i),this.bufferSourceNode.playbackRate.linearRampToValueAtTime(Math.abs(t),i),this._counterNode.playbackRate.cancelScheduledValues(i),this._counterNode.playbackRate.linearRampToValueAtTime(Math.abs(t),i)}return e&&this.reverseBuffer(),this.playbackRate},t.SoundFile.prototype.setPitch=function(t){var e=d(t)/d(60);this.rate(e)},t.SoundFile.prototype.getPlaybackRate=function(){return this.playbackRate},t.SoundFile.prototype.duration=function(){return this.buffer?this.buffer.duration:0},t.SoundFile.prototype.currentTime=function(){return this.reversed?Math.abs(this._lastPos-this.buffer.length)/f.sampleRate:this._lastPos/f.sampleRate},t.SoundFile.prototype.jump=function(t,e){if(0>t||t>this.buffer.duration)throw"jump time out of range";if(e>this.buffer.duration-t)throw"end time out of range";var i=t||0,n=e||void 0;this.isPlaying()&&this.stop(0),this.play(0,this.playbackRate,this.output.gain.value,i,n); +},t.SoundFile.prototype.channels=function(){return this.buffer.numberOfChannels},t.SoundFile.prototype.sampleRate=function(){return this.buffer.sampleRate},t.SoundFile.prototype.frames=function(){return this.buffer.length},t.SoundFile.prototype.getPeaks=function(t){if(!this.buffer)throw"Cannot load peaks yet, buffer is not loaded";if(t||(t=5*window.width),this.buffer){for(var e=this.buffer,i=e.length/t,n=~~(i/10)||1,o=e.numberOfChannels,r=new Float32Array(Math.round(t)),s=0;o>s;s++)for(var a=e.getChannelData(s),u=0;t>u;u++){for(var c=~~(u*i),p=~~(c+i),h=0,l=c;p>l;l+=n){var f=a[l];f>h?h=f:-f>h&&(h=f)}(0===s||Math.abs(h)>r[u])&&(r[u]=h)}return r}},t.SoundFile.prototype.reverseBuffer=function(){if(!this.buffer)throw"SoundFile is not done loading";var t=this._lastPos/f.sampleRate,e=this.getVolume();this.setVolume(0,.001);const i=this.buffer.numberOfChannels;for(var n=0;i>n;n++)this.buffer.getChannelData(n).reverse();this.reversed=!this.reversed,t&&this.jump(this.duration()-t),this.setVolume(e,.001)},t.SoundFile.prototype.onended=function(t){return this._onended=t,this},t.SoundFile.prototype.add=function(){},t.SoundFile.prototype.dispose=function(){var t=l.audiocontext.currentTime,e=l.soundArray.indexOf(this);if(l.soundArray.splice(e,1),this.stop(t),this.buffer&&this.bufferSourceNode){for(var i=0;io;o++){var r=n.getChannelData(o);r.set(t[o])}this.buffer=n,this.panner.inputChannels(e)};var y=function(t){const e=t.length,i=f.createBuffer(1,t.length,f.sampleRate),n=i.getChannelData(0);for(var o=0;e>o;o++)n[o]=o;return i};t.SoundFile.prototype._initCounterNode=function(){var e=this,i=f.currentTime,n=f.createBufferSource();return e._scopeNode&&(e._scopeNode.disconnect(),e._scopeNode.removeEventListener("audioprocess",e._onAudioProcess),delete e._scopeNode),e._scopeNode=f.createScriptProcessor(256,1,1),n.buffer=y(e.buffer),n.playbackRate.setValueAtTime(e.playbackRate,i),n.connect(e._scopeNode),e._scopeNode.connect(t.soundOut._silentNode),e._scopeNode.addEventListener("audioprocess",e._onAudioProcess),n},t.SoundFile.prototype._initSourceNode=function(){var t=f.createBufferSource();return t.buffer=this.buffer,t.playbackRate.value=this.playbackRate,t.connect(this.output),t},t.SoundFile.prototype.processPeaks=function(t,r,s,a){var u=this.buffer.length,c=this.buffer.sampleRate,p=this.buffer,h=[],l=r||.9,f=l,d=s||.22,m=a||200,y=new window.OfflineAudioContext(1,u,c),v=y.createBufferSource();v.buffer=p;var g=y.createBiquadFilter();g.type="lowpass",v.connect(g),g.connect(y.destination),v.start(0),y.startRendering(),y.oncomplete=function(r){if(self.panner){var s=r.renderedBuffer,a=s.getChannelData(0);do h=e(a,f),f-=.005;while(Object.keys(h).length=d);var u=i(h),c=n(u,s.sampleRate),p=c.sort(function(t,e){return e.count-t.count}).splice(0,5);this.tempo=p[0].tempo;var l=5,y=o(h,p[0].tempo,s.sampleRate,l);t(y)}}};var v=function(t,e){this.sampleIndex=e,this.amplitude=t,this.tempos=[],this.intervals=[]},g=function(t,e,i,n){this.callback=t,this.time=e,this.id=i,this.val=n};t.SoundFile.prototype.addCue=function(t,e,i){var n=this._cueIDCounter++,o=new g(e,t,n,i);return this._cues.push(o),n},t.SoundFile.prototype.removeCue=function(t){for(var e=this._cues.length,i=0;e>i;i++){var n=this._cues[i];if(n.id===t){this._cues.splice(i,1);break}}0===this._cues.length},t.SoundFile.prototype.clearCues=function(){this._cues=[]},t.SoundFile.prototype._onTimeUpdate=function(t){for(var e=t/this.buffer.sampleRate,i=this._cues.length,n=0;i>n;n++){var o=this._cues[n],r=o.time,s=o.val;this._prevTime=r&&o.callback(s)}this._prevTime=e},t.SoundFile.prototype.save=function(e){const i=m(this.buffer);t.prototype.saveSound([i],e,"wav")},t.SoundFile.prototype.getBlob=function(){const t=m(this.buffer);return new Blob([t],{type:"audio/wav"})}}(c,a,u,u);var l;l=function(){var e=a;t.Amplitude=function(t){this.bufferSize=2048,this.audiocontext=e.audiocontext,this.processor=this.audiocontext.createScriptProcessor(this.bufferSize,2,1),this.input=this.processor,this.output=this.audiocontext.createGain(),this.smoothing=t||0,this.volume=0,this.average=0,this.stereoVol=[0,0],this.stereoAvg=[0,0],this.stereoVolNorm=[0,0],this.volMax=.001,this.normalize=!1,this.processor.onaudioprocess=this._audioProcess.bind(this),this.processor.connect(this.output),this.output.gain.value=0,this.output.connect(this.audiocontext.destination),e.meter.connect(this.processor),e.soundArray.push(this)},t.Amplitude.prototype.setInput=function(i,n){e.meter.disconnect(),n&&(this.smoothing=n),null==i?(console.log("Amplitude input source is not ready! Connecting to master output instead"),e.meter.connect(this.processor)):i instanceof t.Signal?i.output.connect(this.processor):i?(i.connect(this.processor),this.processor.disconnect(),this.processor.connect(this.output)):e.meter.connect(this.processor)},t.Amplitude.prototype.connect=function(t){t?t.hasOwnProperty("input")?this.output.connect(t.input):this.output.connect(t):this.output.connect(this.panner.connect(e.input))},t.Amplitude.prototype.disconnect=function(){this.output&&this.output.disconnect()},t.Amplitude.prototype._audioProcess=function(t){for(var e=0;ea;a++)i=n[a],this.normalize?(r+=Math.max(Math.min(i/this.volMax,1),-1),s+=Math.max(Math.min(i/this.volMax,1),-1)*Math.max(Math.min(i/this.volMax,1),-1)):(r+=i,s+=i*i);var u=r/o,c=Math.sqrt(s/o);this.stereoVol[e]=Math.max(c,this.stereoVol[e]*this.smoothing),this.stereoAvg[e]=Math.max(u,this.stereoVol[e]*this.smoothing),this.volMax=Math.max(this.stereoVol[e],this.volMax)}var p=this,h=this.stereoVol.reduce(function(t,e,i){return p.stereoVolNorm[i-1]=Math.max(Math.min(p.stereoVol[i-1]/p.volMax,1),0),p.stereoVolNorm[i]=Math.max(Math.min(p.stereoVol[i]/p.volMax,1),0),t+e});this.volume=h/this.stereoVol.length,this.volNorm=Math.max(Math.min(this.volume/this.volMax,1),0)},t.Amplitude.prototype.getLevel=function(t){return"undefined"!=typeof t?this.normalize?this.stereoVolNorm[t]:this.stereoVol[t]:this.normalize?this.volNorm:this.volume},t.Amplitude.prototype.toggleNormalize=function(t){"boolean"==typeof t?this.normalize=t:this.normalize=!this.normalize},t.Amplitude.prototype.smooth=function(t){t>=0&&1>t?this.smoothing=t:console.log("Error: smoothing must be between 0 and 1")},t.Amplitude.prototype.dispose=function(){var t=e.soundArray.indexOf(this);e.soundArray.splice(t,1),this.input&&(this.input.disconnect(),delete this.input),this.output&&(this.output.disconnect(),delete this.output),delete this.processor}}(a);var f;f=function(){var e=a;t.FFT=function(t,i){this.input=this.analyser=e.audiocontext.createAnalyser(),Object.defineProperties(this,{bins:{get:function(){return this.analyser.fftSize/2},set:function(t){this.analyser.fftSize=2*t},configurable:!0,enumerable:!0},smoothing:{get:function(){return this.analyser.smoothingTimeConstant},set:function(t){this.analyser.smoothingTimeConstant=t},configurable:!0,enumerable:!0}}),this.smooth(t),this.bins=i||1024,e.fftMeter.connect(this.analyser),this.freqDomain=new Uint8Array(this.analyser.frequencyBinCount),this.timeDomain=new Uint8Array(this.analyser.frequencyBinCount),this.bass=[20,140],this.lowMid=[140,400],this.mid=[400,2600],this.highMid=[2600,5200],this.treble=[5200,14e3],e.soundArray.push(this)},t.FFT.prototype.setInput=function(t){t?(t.output?t.output.connect(this.analyser):t.connect&&t.connect(this.analyser),e.fftMeter.disconnect()):e.fftMeter.connect(this.analyser)},t.FFT.prototype.waveform=function(){for(var e,i,n,s=0;si){var o=i;i=t,t=o}for(var r=Math.round(t/n*this.freqDomain.length),s=Math.round(i/n*this.freqDomain.length),a=0,u=0,c=r;s>=c;c++)a+=this.freqDomain[c],u+=1;var p=a/u;return p}throw"invalid input for getEnergy()"}var h=Math.round(t/n*this.freqDomain.length);return this.freqDomain[h]},t.FFT.prototype.getFreq=function(t,e){console.log("getFreq() is deprecated. Please use getEnergy() instead.");var i=this.getEnergy(t,e);return i},t.FFT.prototype.getCentroid=function(){for(var t=e.audiocontext.sampleRate/2,i=0,n=0,o=0;os;s++)o[r]=void 0!==o[r]?(o[r]+e[s])/2:e[s],s%n===n-1&&r++;return o},t.FFT.prototype.logAverages=function(t){for(var i=e.audiocontext.sampleRate/2,n=this.freqDomain,o=n.length,r=new Array(t.length),s=0,a=0;o>a;a++){var u=Math.round(a*i/this.freqDomain.length);u>t[s].hi&&s++,r[s]=void 0!==r[s]?(r[s]+n[a])/2:n[a]}return r},t.FFT.prototype.getOctaveBands=function(t,i){var t=t||3,i=i||15.625,n=[],o={lo:i/Math.pow(2,1/(2*t)),ctr:i,hi:i*Math.pow(2,1/(2*t))};n.push(o);for(var r=e.audiocontext.sampleRate/2;o.hie;e++){var n=e/(i-1)*2-1;this._curve[e]=t(n,e)}return this._shaper.curve=this._curve,this},Object.defineProperty(t.WaveShaper.prototype,"curve",{get:function(){return this._shaper.curve},set:function(t){this._curve=new Float32Array(t),this._shaper.curve=this._curve}}),Object.defineProperty(t.WaveShaper.prototype,"oversample",{get:function(){return this._shaper.oversample},set:function(t){if(-1===["none","2x","4x"].indexOf(t))throw new RangeError("Tone.WaveShaper: oversampling must be either 'none', '2x', or '4x'");this._shaper.oversample=t}}),t.WaveShaper.prototype.dispose=function(){return t.prototype.dispose.call(this),this._shaper.disconnect(),this._shaper=null,this._curve=null,this},t.WaveShaper}(n);var y;y=function(t){return t.TimeBase=function(e,i){if(!(this instanceof t.TimeBase))return new t.TimeBase(e,i);if(this._expr=this._noOp,e instanceof t.TimeBase)this.copy(e);else if(!this.isUndef(i)||this.isNumber(e)){i=this.defaultArg(i,this._defaultUnits);var n=this._primaryExpressions[i].method;this._expr=n.bind(this,e)}else this.isString(e)?this.set(e):this.isUndef(e)&&(this._expr=this._defaultExpr())},t.extend(t.TimeBase),t.TimeBase.prototype.set=function(t){return this._expr=this._parseExprString(t),this},t.TimeBase.prototype.clone=function(){var t=new this.constructor;return t.copy(this),t},t.TimeBase.prototype.copy=function(t){var e=t._expr();return this.set(e)},t.TimeBase.prototype._primaryExpressions={n:{regexp:/^(\d+)n/i,method:function(t){return t=parseInt(t),1===t?this._beatsToUnits(this._timeSignature()):this._beatsToUnits(4/t)}},t:{regexp:/^(\d+)t/i,method:function(t){return t=parseInt(t),this._beatsToUnits(8/(3*parseInt(t)))}},m:{regexp:/^(\d+)m/i,method:function(t){return this._beatsToUnits(parseInt(t)*this._timeSignature())}},i:{regexp:/^(\d+)i/i,method:function(t){return this._ticksToUnits(parseInt(t))}},hz:{regexp:/^(\d+(?:\.\d+)?)hz/i,method:function(t){return this._frequencyToUnits(parseFloat(t))}},tr:{regexp:/^(\d+(?:\.\d+)?):(\d+(?:\.\d+)?):?(\d+(?:\.\d+)?)?/,method:function(t,e,i){var n=0;return t&&"0"!==t&&(n+=this._beatsToUnits(this._timeSignature()*parseFloat(t))),e&&"0"!==e&&(n+=this._beatsToUnits(parseFloat(e))),i&&"0"!==i&&(n+=this._beatsToUnits(parseFloat(i)/4)),n}},s:{regexp:/^(\d+(?:\.\d+)?s)/,method:function(t){return this._secondsToUnits(parseFloat(t))}},samples:{regexp:/^(\d+)samples/,method:function(t){return parseInt(t)/this.context.sampleRate}},"default":{regexp:/^(\d+(?:\.\d+)?)/,method:function(t){return this._primaryExpressions[this._defaultUnits].method.call(this,t)}}},t.TimeBase.prototype._binaryExpressions={"+":{regexp:/^\+/,precedence:2,method:function(t,e){return t()+e()}},"-":{regexp:/^\-/,precedence:2,method:function(t,e){return t()-e()}},"*":{regexp:/^\*/,precedence:1,method:function(t,e){return t()*e()}},"/":{regexp:/^\//,precedence:1,method:function(t,e){return t()/e()}}},t.TimeBase.prototype._unaryExpressions={neg:{regexp:/^\-/,method:function(t){return-t()}}},t.TimeBase.prototype._syntaxGlue={"(":{regexp:/^\(/},")":{regexp:/^\)/}},t.TimeBase.prototype._tokenize=function(t){function e(t,e){for(var i=["_binaryExpressions","_unaryExpressions","_primaryExpressions","_syntaxGlue"],n=0;n0;){t=t.trim();var o=e(t,this);n.push(o),t=t.substr(o.value.length)}return{next:function(){return n[++i]},peek:function(){return n[i+1]}}},t.TimeBase.prototype._matchGroup=function(t,e,i){var n=!1;if(!this.isUndef(t))for(var o in e){var r=e[o];if(r.regexp.test(t.value)){if(this.isUndef(i))return r;if(r.precedence===i)return r}}return n},t.TimeBase.prototype._parseBinary=function(t,e){this.isUndef(e)&&(e=2);var i;i=0>e?this._parseUnary(t):this._parseBinary(t,e-1);for(var n=t.peek();n&&this._matchGroup(n,this._binaryExpressions,e);)n=t.next(),i=n.method.bind(this,i,this._parseBinary(t,e-1)),n=t.peek();return i},t.TimeBase.prototype._parseUnary=function(t){var e,i;e=t.peek();var n=this._matchGroup(e,this._unaryExpressions);return n?(e=t.next(),i=this._parseUnary(t),n.method.bind(this,i)):this._parsePrimary(t)},t.TimeBase.prototype._parsePrimary=function(t){var e,i;if(e=t.peek(),this.isUndef(e))throw new SyntaxError("Tone.TimeBase: Unexpected end of expression");if(this._matchGroup(e,this._primaryExpressions)){e=t.next();var n=e.value.match(e.regexp);return e.method.bind(this,n[1],n[2],n[3])}if(e&&"("===e.value){if(t.next(),i=this._parseBinary(t),e=t.next(),!e||")"!==e.value)throw new SyntaxError("Expected )");return i}throw new SyntaxError("Tone.TimeBase: Cannot process token "+e.value)},t.TimeBase.prototype._parseExprString=function(t){this.isString(t)||(t=t.toString());var e=this._tokenize(t),i=this._parseBinary(e);return i},t.TimeBase.prototype._noOp=function(){return 0},t.TimeBase.prototype._defaultExpr=function(){return this._noOp},t.TimeBase.prototype._defaultUnits="s",t.TimeBase.prototype._frequencyToUnits=function(t){return 1/t},t.TimeBase.prototype._beatsToUnits=function(e){return 60/t.Transport.bpm.value*e},t.TimeBase.prototype._secondsToUnits=function(t){return t},t.TimeBase.prototype._ticksToUnits=function(e){return e*(this._beatsToUnits(1)/t.Transport.PPQ)},t.TimeBase.prototype._timeSignature=function(){return t.Transport.timeSignature},t.TimeBase.prototype._pushExpr=function(e,i,n){return e instanceof t.TimeBase||(e=new this.constructor(e,n)),this._expr=this._binaryExpressions[i].method.bind(this,this._expr,e._expr),this},t.TimeBase.prototype.add=function(t,e){return this._pushExpr(t,"+",e)},t.TimeBase.prototype.sub=function(t,e){return this._pushExpr(t,"-",e)},t.TimeBase.prototype.mult=function(t,e){return this._pushExpr(t,"*",e)},t.TimeBase.prototype.div=function(t,e){return this._pushExpr(t,"/",e)},t.TimeBase.prototype.valueOf=function(){return this._expr()},t.TimeBase.prototype.dispose=function(){this._expr=null},t.TimeBase}(n);var v;v=function(t){return t.Time=function(e,i){return this instanceof t.Time?(this._plusNow=!1,void t.TimeBase.call(this,e,i)):new t.Time(e,i)},t.extend(t.Time,t.TimeBase),t.Time.prototype._unaryExpressions=Object.create(t.TimeBase.prototype._unaryExpressions),t.Time.prototype._unaryExpressions.quantize={regexp:/^@/,method:function(e){return t.Transport.nextSubdivision(e())}},t.Time.prototype._unaryExpressions.now={regexp:/^\+/,method:function(t){return this._plusNow=!0,t()}},t.Time.prototype.quantize=function(t,e){return e=this.defaultArg(e,1),this._expr=function(t,e,i){t=t(),e=e.toSeconds();var n=Math.round(t/e),o=n*e,r=o-t;return t+r*i}.bind(this,this._expr,new this.constructor(t),e),this},t.Time.prototype.addNow=function(){return this._plusNow=!0,this},t.Time.prototype._defaultExpr=function(){return this._plusNow=!0,this._noOp},t.Time.prototype.copy=function(e){return t.TimeBase.prototype.copy.call(this,e),this._plusNow=e._plusNow,this},t.Time.prototype.toNotation=function(){var t=this.toSeconds(),e=["1m","2n","4n","8n","16n","32n","64n","128n"],i=this._toNotationHelper(t,e),n=["1m","2n","2t","4n","4t","8n","8t","16n","16t","32n","32t","64n","64t","128n"],o=this._toNotationHelper(t,n);return o.split("+").length1-s%1&&(s+=a),s=Math.floor(s),s>0){if(n+=1===s?e[o]:s.toString()+"*"+e[o],t-=s*r,i>t)break;n+=" + "}}return""===n&&(n="0"),n},t.Time.prototype._notationToUnits=function(t){for(var e=this._primaryExpressions,i=[e.n,e.t,e.m],n=0;n3&&(n=parseFloat(n).toFixed(3));var o=[i,e,n];return o.join(":")},t.Time.prototype.toTicks=function(){var e=this._beatsToUnits(1),i=this.valueOf()/e;return Math.floor(i*t.Transport.PPQ)},t.Time.prototype.toSamples=function(){return this.toSeconds()*this.context.sampleRate},t.Time.prototype.toFrequency=function(){return 1/this.toSeconds()},t.Time.prototype.toSeconds=function(){return this.valueOf()},t.Time.prototype.toMilliseconds=function(){return 1e3*this.toSeconds()},t.Time.prototype.valueOf=function(){var t=this._expr();return t+(this._plusNow?this.now():0)},t.Time}(n);var g;g=function(t){t.Frequency=function(e,i){return this instanceof t.Frequency?void t.TimeBase.call(this,e,i):new t.Frequency(e,i)},t.extend(t.Frequency,t.TimeBase),t.Frequency.prototype._primaryExpressions=Object.create(t.TimeBase.prototype._primaryExpressions),t.Frequency.prototype._primaryExpressions.midi={regexp:/^(\d+(?:\.\d+)?midi)/,method:function(t){return this.midiToFrequency(t)}},t.Frequency.prototype._primaryExpressions.note={regexp:/^([a-g]{1}(?:b|#|x|bb)?)(-?[0-9]+)/i,method:function(t,i){var n=e[t.toLowerCase()],o=n+12*(parseInt(i)+1);return this.midiToFrequency(o)}},t.Frequency.prototype._primaryExpressions.tr={regexp:/^(\d+(?:\.\d+)?):(\d+(?:\.\d+)?):?(\d+(?:\.\d+)?)?/,method:function(t,e,i){var n=1;return t&&"0"!==t&&(n*=this._beatsToUnits(this._timeSignature()*parseFloat(t))),e&&"0"!==e&&(n*=this._beatsToUnits(parseFloat(e))),i&&"0"!==i&&(n*=this._beatsToUnits(parseFloat(i)/4)),n}},t.Frequency.prototype.transpose=function(t){return this._expr=function(t,e){var i=t();return i*this.intervalToFrequencyRatio(e)}.bind(this,this._expr,t),this},t.Frequency.prototype.harmonize=function(t){return this._expr=function(t,e){for(var i=t(),n=[],o=0;or&&(o+=-12*r);var s=i[o%12];return s+r.toString()},t.Frequency.prototype.toSeconds=function(){return 1/this.valueOf()},t.Frequency.prototype.toFrequency=function(){return this.valueOf()},t.Frequency.prototype.toTicks=function(){var e=this._beatsToUnits(1),i=this.valueOf()/e;return Math.floor(i*t.Transport.PPQ)},t.Frequency.prototype._frequencyToUnits=function(t){return t},t.Frequency.prototype._ticksToUnits=function(e){return 1/(60*e/(t.Transport.bpm.value*t.Transport.PPQ))},t.Frequency.prototype._beatsToUnits=function(e){return 1/t.TimeBase.prototype._beatsToUnits.call(this,e)},t.Frequency.prototype._secondsToUnits=function(t){return 1/t},t.Frequency.prototype._defaultUnits="hz";var e={cbb:-2,cb:-1,c:0,"c#":1,cx:2,dbb:0,db:1,d:2,"d#":3,dx:4,ebb:2,eb:3,e:4,"e#":5,ex:6,fbb:3,fb:4,f:5,"f#":6,fx:7,gbb:5,gb:6,g:7,"g#":8,gx:9,abb:7,ab:8,a:9,"a#":10,ax:11,bbb:9,bb:10,b:11,"b#":12,bx:13},i=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"];return t.Frequency.A4=440,t.Frequency.prototype.midiToFrequency=function(e){return t.Frequency.A4*Math.pow(2,(e-69)/12)},t.Frequency.prototype.frequencyToMidi=function(e){return 69+12*Math.log(e/t.Frequency.A4)/Math.LN2},t.Frequency}(n);var _;_=function(t){return t.TransportTime=function(e,i){return this instanceof t.TransportTime?void t.Time.call(this,e,i):new t.TransportTime(e,i)},t.extend(t.TransportTime,t.Time),t.TransportTime.prototype._unaryExpressions=Object.create(t.Time.prototype._unaryExpressions),t.TransportTime.prototype._unaryExpressions.quantize={regexp:/^@/,method:function(e){var i=this._secondsToTicks(e()),n=Math.ceil(t.Transport.ticks/i);return this._ticksToUnits(n*i)}},t.TransportTime.prototype._secondsToTicks=function(e){var i=this._beatsToUnits(1),n=e/i;return Math.round(n*t.Transport.PPQ)},t.TransportTime.prototype.valueOf=function(){var e=this._secondsToTicks(this._expr());return e+(this._plusNow?t.Transport.ticks:0)},t.TransportTime.prototype.toTicks=function(){return this.valueOf()},t.TransportTime.prototype.toSeconds=function(){var e=this._expr();return e+(this._plusNow?t.Transport.seconds:0)},t.TransportTime.prototype.toFrequency=function(){return 1/this.toSeconds()},t.TransportTime}(n);var T;T=function(t){return t.Type={Default:"number",Time:"time",Frequency:"frequency",TransportTime:"transportTime",Ticks:"ticks",NormalRange:"normalRange",AudioRange:"audioRange",Decibels:"db",Interval:"interval",BPM:"bpm",Positive:"positive",Cents:"cents",Degrees:"degrees",MIDI:"midi",BarsBeatsSixteenths:"barsBeatsSixteenths",Samples:"samples",Hertz:"hertz",Note:"note",Milliseconds:"milliseconds",Seconds:"seconds",Notation:"notation"},t.prototype.toSeconds=function(e){return this.isNumber(e)?e:this.isUndef(e)?this.now():this.isString(e)?new t.Time(e).toSeconds():e instanceof t.TimeBase?e.toSeconds():void 0},t.prototype.toFrequency=function(e){return this.isNumber(e)?e:this.isString(e)||this.isUndef(e)?new t.Frequency(e).valueOf():e instanceof t.TimeBase?e.toFrequency():void 0},t.prototype.toTicks=function(e){return this.isNumber(e)||this.isString(e)?new t.TransportTime(e).toTicks():this.isUndef(e)?t.Transport.ticks:e instanceof t.TimeBase?e.toTicks():void 0},t}(n,v,g,_);var b;b=function(t){"use strict";return t.Param=function(){var e=this.optionsObject(arguments,["param","units","convert"],t.Param.defaults);this._param=this.input=e.param,this.units=e.units,this.convert=e.convert,this.overridden=!1,this._lfo=null,this.isObject(e.lfo)?this.value=e.lfo:this.isUndef(e.value)||(this.value=e.value)},t.extend(t.Param),t.Param.defaults={units:t.Type.Default,convert:!0,param:void 0},Object.defineProperty(t.Param.prototype,"value",{get:function(){return this._toUnits(this._param.value)},set:function(e){if(this.isObject(e)){if(this.isUndef(t.LFO))throw new Error("Include 'Tone.LFO' to use an LFO as a Param value.");this._lfo&&this._lfo.dispose(),this._lfo=new t.LFO(e).start(),this._lfo.connect(this.input)}else{var i=this._fromUnits(e);this._param.cancelScheduledValues(0),this._param.value=i}}}),t.Param.prototype._fromUnits=function(e){if(!this.convert&&!this.isUndef(this.convert))return e;switch(this.units){case t.Type.Time:return this.toSeconds(e);case t.Type.Frequency:return this.toFrequency(e);case t.Type.Decibels:return this.dbToGain(e);case t.Type.NormalRange:return Math.min(Math.max(e,0),1);case t.Type.AudioRange:return Math.min(Math.max(e,-1),1);case t.Type.Positive:return Math.max(e,0);default:return e}},t.Param.prototype._toUnits=function(e){if(!this.convert&&!this.isUndef(this.convert))return e;switch(this.units){case t.Type.Decibels:return this.gainToDb(e);default:return e}},t.Param.prototype._minOutput=1e-5,t.Param.prototype.setValueAtTime=function(t,e){return t=this._fromUnits(t),e=this.toSeconds(e),e<=this.now()+this.blockTime?this._param.value=t:this._param.setValueAtTime(t,e),this},t.Param.prototype.setRampPoint=function(t){t=this.defaultArg(t,this.now());var e=this._param.value;return 0===e&&(e=this._minOutput),this._param.setValueAtTime(e,t),this},t.Param.prototype.linearRampToValueAtTime=function(t,e){return t=this._fromUnits(t),this._param.linearRampToValueAtTime(t,this.toSeconds(e)),this},t.Param.prototype.exponentialRampToValueAtTime=function(t,e){return t=this._fromUnits(t),t=Math.max(this._minOutput,t),this._param.exponentialRampToValueAtTime(t,this.toSeconds(e)),this},t.Param.prototype.exponentialRampToValue=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.linearRampToValue=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.linearRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.setTargetAtTime=function(t,e,i){return t=this._fromUnits(t),t=Math.max(this._minOutput,t),i=Math.max(this._minOutput,i),this._param.setTargetAtTime(t,this.toSeconds(e),i),this},t.Param.prototype.setValueCurveAtTime=function(t,e,i){for(var n=0;n1&&(this.input=new Array(e)),1===i?this.output=new t.Gain:i>1&&(this.output=new Array(e))},t.Gain}(n,b);var S;S=function(t){"use strict";return t.Signal=function(){var e=this.optionsObject(arguments,["value","units"],t.Signal.defaults);this.output=this._gain=this.context.createGain(),e.param=this._gain.gain,t.Param.call(this,e),this.input=this._param=this._gain.gain,this.context.getConstant(1).chain(this._gain)},t.extend(t.Signal,t.Param),t.Signal.defaults={value:0,units:t.Type.Default,convert:!0},t.Signal.prototype.connect=t.SignalBase.prototype.connect,t.Signal.prototype.dispose=function(){return t.Param.prototype.dispose.call(this),this._param=null,this._gain.disconnect(),this._gain=null,this},t.Signal}(n,m,T,b);var w;w=function(t){"use strict";return t.Add=function(e){this.createInsOuts(2,0),this._sum=this.input[0]=this.input[1]=this.output=new t.Gain,this._param=this.input[1]=new t.Signal(e),this._param.connect(this._sum)},t.extend(t.Add,t.Signal),t.Add.prototype.dispose=function(){return t.prototype.dispose.call(this),this._sum.dispose(),this._sum=null,this._param.dispose(),this._param=null,this},t.Add}(n,S);var A;A=function(t){"use strict";return t.Multiply=function(e){this.createInsOuts(2,0),this._mult=this.input[0]=this.output=new t.Gain,this._param=this.input[1]=this.output.gain,this._param.value=this.defaultArg(e,0)},t.extend(t.Multiply,t.Signal),t.Multiply.prototype.dispose=function(){return t.prototype.dispose.call(this),this._mult.dispose(),this._mult=null, +this._param=null,this},t.Multiply}(n,S);var P;P=function(t){"use strict";return t.Scale=function(e,i){this._outputMin=this.defaultArg(e,0),this._outputMax=this.defaultArg(i,1),this._scale=this.input=new t.Multiply(1),this._add=this.output=new t.Add(0),this._scale.connect(this._add),this._setRange()},t.extend(t.Scale,t.SignalBase),Object.defineProperty(t.Scale.prototype,"min",{get:function(){return this._outputMin},set:function(t){this._outputMin=t,this._setRange()}}),Object.defineProperty(t.Scale.prototype,"max",{get:function(){return this._outputMax},set:function(t){this._outputMax=t,this._setRange()}}),t.Scale.prototype._setRange=function(){this._add.value=this._outputMin,this._scale.value=this._outputMax-this._outputMin},t.Scale.prototype.dispose=function(){return t.prototype.dispose.call(this),this._add.dispose(),this._add=null,this._scale.dispose(),this._scale=null,this},t.Scale}(n,w,A);var k;k=function(){var e=S,i=w,n=A,o=P;t.Signal=function(t){var i=new e(t);return i},e.prototype.fade=e.prototype.linearRampToValueAtTime,n.prototype.fade=e.prototype.fade,i.prototype.fade=e.prototype.fade,o.prototype.fade=e.prototype.fade,e.prototype.setInput=function(t){t.connect(this)},n.prototype.setInput=e.prototype.setInput,i.prototype.setInput=e.prototype.setInput,o.prototype.setInput=e.prototype.setInput,e.prototype.add=function(t){var e=new i(t);return this.connect(e),e},n.prototype.add=e.prototype.add,i.prototype.add=e.prototype.add,o.prototype.add=e.prototype.add,e.prototype.mult=function(t){var e=new n(t);return this.connect(e),e},n.prototype.mult=e.prototype.mult,i.prototype.mult=e.prototype.mult,o.prototype.mult=e.prototype.mult,e.prototype.scale=function(e,i,n,r){var s,a;4===arguments.length?(s=t.prototype.map(n,e,i,0,1)-.5,a=t.prototype.map(r,e,i,0,1)-.5):(s=arguments[0],a=arguments[1]);var u=new o(s,a);return this.connect(u),u},n.prototype.scale=e.prototype.scale,i.prototype.scale=e.prototype.scale,o.prototype.scale=e.prototype.scale}(S,w,A,P);var O;O=function(){var e=a,i=w,n=A,o=P;t.Oscillator=function(i,n){if("string"==typeof i){var o=n;n=i,i=o}if("number"==typeof n){var o=n;n=i,i=o}this.started=!1,this.phaseAmount=void 0,this.oscillator=e.audiocontext.createOscillator(),this.f=i||440,this.oscillator.type=n||"sine",this.oscillator.frequency.setValueAtTime(this.f,e.audiocontext.currentTime),this.output=e.audiocontext.createGain(),this._freqMods=[],this.output.gain.value=.5,this.output.gain.setValueAtTime(.5,e.audiocontext.currentTime),this.oscillator.connect(this.output),this.panPosition=0,this.connection=e.input,this.panner=new t.Panner(this.output,this.connection,1),this.mathOps=[this.output],e.soundArray.push(this)},t.Oscillator.prototype.start=function(t,i){if(this.started){var n=e.audiocontext.currentTime;this.stop(n)}if(!this.started){var o=i||this.f,r=this.oscillator.type;this.oscillator&&(this.oscillator.disconnect(),delete this.oscillator),this.oscillator=e.audiocontext.createOscillator(),this.oscillator.frequency.value=Math.abs(o),this.oscillator.type=r,this.oscillator.connect(this.output),t=t||0,this.oscillator.start(t+e.audiocontext.currentTime),this.freqNode=this.oscillator.frequency;for(var s in this._freqMods)"undefined"!=typeof this._freqMods[s].connect&&this._freqMods[s].connect(this.oscillator.frequency);this.started=!0}},t.Oscillator.prototype.stop=function(t){if(this.started){var i=t||0,n=e.audiocontext.currentTime;this.oscillator.stop(i+n),this.started=!1}},t.Oscillator.prototype.amp=function(t,i,n){var o=this;if("number"==typeof t){var i=i||0,n=n||0,r=e.audiocontext.currentTime;this.output.gain.linearRampToValueAtTime(t,r+n+i)}else{if(!t)return this.output.gain;t.connect(o.output.gain)}},t.Oscillator.prototype.fade=t.Oscillator.prototype.amp,t.Oscillator.prototype.getAmp=function(){return this.output.gain.value},t.Oscillator.prototype.freq=function(t,i,n){if("number"!=typeof t||isNaN(t)){if(!t)return this.oscillator.frequency;t.output&&(t=t.output),t.connect(this.oscillator.frequency),this._freqMods.push(t)}else{this.f=t;var o=e.audiocontext.currentTime,i=i||0,n=n||0;0===i?this.oscillator.frequency.setValueAtTime(t,n+o):t>0?this.oscillator.frequency.exponentialRampToValueAtTime(t,n+i+o):this.oscillator.frequency.linearRampToValueAtTime(t,n+i+o),this.phaseAmount&&this.phase(this.phaseAmount)}},t.Oscillator.prototype.getFreq=function(){return this.oscillator.frequency.value},t.Oscillator.prototype.setType=function(t){this.oscillator.type=t},t.Oscillator.prototype.getType=function(){return this.oscillator.type},t.Oscillator.prototype.connect=function(t){t?t.hasOwnProperty("input")?(this.panner.connect(t.input),this.connection=t.input):(this.panner.connect(t),this.connection=t):this.panner.connect(e.input)},t.Oscillator.prototype.disconnect=function(){this.output&&this.output.disconnect(),this.panner&&(this.panner.disconnect(),this.output&&this.output.connect(this.panner)),this.oscMods=[]},t.Oscillator.prototype.pan=function(t,e){this.panPosition=t,this.panner.pan(t,e)},t.Oscillator.prototype.getPan=function(){return this.panPosition},t.Oscillator.prototype.dispose=function(){var t=e.soundArray.indexOf(this);if(e.soundArray.splice(t,1),this.oscillator){var i=e.audiocontext.currentTime;this.stop(i),this.disconnect(),this.panner=null,this.oscillator=null}this.osc2&&this.osc2.dispose()},t.Oscillator.prototype.phase=function(i){var n=t.prototype.map(i,0,1,0,1/this.f),o=e.audiocontext.currentTime;this.phaseAmount=i,this.dNode||(this.dNode=e.audiocontext.createDelay(),this.oscillator.disconnect(),this.oscillator.connect(this.dNode),this.dNode.connect(this.output)),this.dNode.delayTime.setValueAtTime(n,o)};var r=function(t,e,i,n,o){var r=t.oscillator;for(var s in t.mathOps)t.mathOps[s]instanceof o&&(r.disconnect(),t.mathOps[s].dispose(),i=s,i0&&(r=t.mathOps[s-1]),r.disconnect(),r.connect(e),e.connect(n),t.mathOps[i]=e,t};t.Oscillator.prototype.add=function(t){var e=new i(t),n=this.mathOps.length-1,o=this.output;return r(this,e,n,o,i)},t.Oscillator.prototype.mult=function(t){var e=new n(t),i=this.mathOps.length-1,o=this.output;return r(this,e,i,o,n)},t.Oscillator.prototype.scale=function(e,i,n,s){var a,u;4===arguments.length?(a=t.prototype.map(n,e,i,0,1)-.5,u=t.prototype.map(s,e,i,0,1)-.5):(a=arguments[0],u=arguments[1]);var c=new o(a,u),p=this.mathOps.length-1,h=this.output;return r(this,c,p,h,o)},t.SinOsc=function(e){t.Oscillator.call(this,e,"sine")},t.SinOsc.prototype=Object.create(t.Oscillator.prototype),t.TriOsc=function(e){t.Oscillator.call(this,e,"triangle")},t.TriOsc.prototype=Object.create(t.Oscillator.prototype),t.SawOsc=function(e){t.Oscillator.call(this,e,"sawtooth")},t.SawOsc.prototype=Object.create(t.Oscillator.prototype),t.SqrOsc=function(e){t.Oscillator.call(this,e,"square")},t.SqrOsc.prototype=Object.create(t.Oscillator.prototype)}(a,w,A,P);var F;F=function(t){"use strict";return t.Timeline=function(){var e=this.optionsObject(arguments,["memory"],t.Timeline.defaults);this._timeline=[],this._toRemove=[],this._iterating=!1,this.memory=e.memory},t.extend(t.Timeline),t.Timeline.defaults={memory:1/0},Object.defineProperty(t.Timeline.prototype,"length",{get:function(){return this._timeline.length}}),t.Timeline.prototype.add=function(t){if(this.isUndef(t.time))throw new Error("Tone.Timeline: events must have a time attribute");if(this._timeline.length){var e=this._search(t.time);this._timeline.splice(e+1,0,t)}else this._timeline.push(t);if(this.length>this.memory){var i=this.length-this.memory;this._timeline.splice(0,i)}return this},t.Timeline.prototype.remove=function(t){if(this._iterating)this._toRemove.push(t);else{var e=this._timeline.indexOf(t);-1!==e&&this._timeline.splice(e,1)}return this},t.Timeline.prototype.get=function(t){var e=this._search(t);return-1!==e?this._timeline[e]:null},t.Timeline.prototype.peek=function(){return this._timeline[0]},t.Timeline.prototype.shift=function(){return this._timeline.shift()},t.Timeline.prototype.getAfter=function(t){var e=this._search(t);return e+10&&this._timeline[e-1].time=0?this._timeline[i-1]:null},t.Timeline.prototype.cancel=function(t){if(this._timeline.length>1){var e=this._search(t);if(e>=0)if(this._timeline[e].time===t){for(var i=e;i>=0&&this._timeline[i].time===t;i--)e=i;this._timeline=this._timeline.slice(0,e)}else this._timeline=this._timeline.slice(0,e+1);else this._timeline=[]}else 1===this._timeline.length&&this._timeline[0].time>=t&&(this._timeline=[]);return this},t.Timeline.prototype.cancelBefore=function(t){if(this._timeline.length){var e=this._search(t);e>=0&&(this._timeline=this._timeline.slice(e+1))}return this},t.Timeline.prototype._search=function(t){var e=0,i=this._timeline.length,n=i;if(i>0&&this._timeline[i-1].time<=t)return i-1;for(;n>e;){var o=Math.floor(e+(n-e)/2),r=this._timeline[o],s=this._timeline[o+1];if(r.time===t){for(var a=o;at)return o;r.time>t?n=o:r.time=n;n++)t(this._timeline[n]);if(this._iterating=!1,this._toRemove.length>0){for(var o=0;o=0&&this._timeline[i].time>=t;)i--;return this._iterate(e,i+1),this},t.Timeline.prototype.forEachAtTime=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(function(i){i.time===t&&e(i)},0,i),this},t.Timeline.prototype.dispose=function(){t.prototype.dispose.call(this),this._timeline=null,this._toRemove=null},t.Timeline}(n);var q;q=function(t){"use strict";return t.TimelineSignal=function(){var e=this.optionsObject(arguments,["value","units"],t.Signal.defaults);this._events=new t.Timeline(10),t.Signal.apply(this,e),e.param=this._param,t.Param.call(this,e),this._initial=this._fromUnits(this._param.value)},t.extend(t.TimelineSignal,t.Param),t.TimelineSignal.Type={Linear:"linear",Exponential:"exponential",Target:"target",Curve:"curve",Set:"set"},Object.defineProperty(t.TimelineSignal.prototype,"value",{get:function(){var t=this.now(),e=this.getValueAtTime(t);return this._toUnits(e)},set:function(t){var e=this._fromUnits(t);this._initial=e,this.cancelScheduledValues(),this._param.value=e}}),t.TimelineSignal.prototype.setValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.TimelineSignal.Type.Set,value:e,time:i}),this._param.setValueAtTime(e,i),this},t.TimelineSignal.prototype.linearRampToValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.TimelineSignal.Type.Linear,value:e,time:i}),this._param.linearRampToValueAtTime(e,i),this},t.TimelineSignal.prototype.exponentialRampToValueAtTime=function(e,i){i=this.toSeconds(i);var n=this._searchBefore(i);n&&0===n.value&&this.setValueAtTime(this._minOutput,n.time),e=this._fromUnits(e);var o=Math.max(e,this._minOutput);return this._events.add({type:t.TimelineSignal.Type.Exponential,value:o,time:i}),ee)this.cancelScheduledValues(e),this.linearRampToValueAtTime(i,e);else{var o=this._searchAfter(e);o&&(this.cancelScheduledValues(e),o.type===t.TimelineSignal.Type.Linear?this.linearRampToValueAtTime(i,e):o.type===t.TimelineSignal.Type.Exponential&&this.exponentialRampToValueAtTime(i,e)),this.setValueAtTime(i,e)}return this},t.TimelineSignal.prototype.linearRampToValueBetween=function(t,e,i){return this.setRampPoint(e),this.linearRampToValueAtTime(t,i),this},t.TimelineSignal.prototype.exponentialRampToValueBetween=function(t,e,i){return this.setRampPoint(e),this.exponentialRampToValueAtTime(t,i),this},t.TimelineSignal.prototype._searchBefore=function(t){return this._events.get(t)},t.TimelineSignal.prototype._searchAfter=function(t){return this._events.getAfter(t)},t.TimelineSignal.prototype.getValueAtTime=function(e){e=this.toSeconds(e);var i=this._searchAfter(e),n=this._searchBefore(e),o=this._initial;if(null===n)o=this._initial;else if(n.type===t.TimelineSignal.Type.Target){var r,s=this._events.getBefore(n.time);r=null===s?this._initial:s.value,o=this._exponentialApproach(n.time,r,n.value,n.constant,e)}else o=n.type===t.TimelineSignal.Type.Curve?this._curveInterpolate(n.time,n.value,n.duration,e):null===i?n.value:i.type===t.TimelineSignal.Type.Linear?this._linearInterpolate(n.time,n.value,i.time,i.value,e):i.type===t.TimelineSignal.Type.Exponential?this._exponentialInterpolate(n.time,n.value,i.time,i.value,e):n.value;return o},t.TimelineSignal.prototype.connect=t.SignalBase.prototype.connect,t.TimelineSignal.prototype._exponentialApproach=function(t,e,i,n,o){return i+(e-i)*Math.exp(-(o-t)/n)},t.TimelineSignal.prototype._linearInterpolate=function(t,e,i,n,o){return e+(n-e)*((o-t)/(i-t))},t.TimelineSignal.prototype._exponentialInterpolate=function(t,e,i,n,o){return e=Math.max(this._minOutput,e),e*Math.pow(n/e,(o-t)/(i-t))},t.TimelineSignal.prototype._curveInterpolate=function(t,e,i,n){var o=e.length;if(n>=t+i)return e[o-1];if(t>=n)return e[0];var r=(n-t)/i,s=Math.floor((o-1)*r),a=Math.ceil((o-1)*r),u=e[s],c=e[a];return a===s?u:this._linearInterpolate(s,u,a,c,r*(o-1))},t.TimelineSignal.prototype.dispose=function(){t.Signal.prototype.dispose.call(this),t.Param.prototype.dispose.call(this),this._events.dispose(),this._events=null},t.TimelineSignal}(n,S);var M;M=function(){var e=a,i=w,n=A,o=P,r=q;t.Envelope=function(t,i,n,o,s,a){this.aTime=t||.1,this.aLevel=i||1,this.dTime=n||.5,this.dLevel=o||0,this.rTime=s||0,this.rLevel=a||0,this._rampHighPercentage=.98,this._rampLowPercentage=.02,this.output=e.audiocontext.createGain(),this.control=new r,this._init(),this.control.connect(this.output),this.connection=null,this.mathOps=[this.control],this.isExponential=!1,this.sourceToClear=null,this.wasTriggered=!1,e.soundArray.push(this)},t.Envelope.prototype._init=function(){var t=e.audiocontext.currentTime,i=t;this.control.setTargetAtTime(1e-5,i,.001),this._setRampAD(this.aTime,this.dTime)},t.Envelope.prototype.set=function(t,e,i,n,o,r){this.aTime=t,this.aLevel=e,this.dTime=i||0,this.dLevel=n||0,this.rTime=o||0,this.rLevel=r||0,this._setRampAD(t,i)},t.Envelope.prototype.setADSR=function(t,e,i,n){this.aTime=t,this.dTime=e||0,this.sPercent=i||0,this.dLevel="undefined"!=typeof i?i*(this.aLevel-this.rLevel)+this.rLevel:0,this.rTime=n||0,this._setRampAD(t,e)},t.Envelope.prototype.setRange=function(t,e){this.aLevel=t||1,this.rLevel=e||0},t.Envelope.prototype._setRampAD=function(t,e){this._rampAttackTime=this.checkExpInput(t),this._rampDecayTime=this.checkExpInput(e);var i=1;i=Math.log(1/this.checkExpInput(1-this._rampHighPercentage)),this._rampAttackTC=t/this.checkExpInput(i),i=Math.log(1/this._rampLowPercentage),this._rampDecayTC=e/this.checkExpInput(i)},t.Envelope.prototype.setRampPercentages=function(t,e){this._rampHighPercentage=this.checkExpInput(t),this._rampLowPercentage=this.checkExpInput(e);var i=1;i=Math.log(1/this.checkExpInput(1-this._rampHighPercentage)),this._rampAttackTC=this._rampAttackTime/this.checkExpInput(i),i=Math.log(1/this._rampLowPercentage),this._rampDecayTC=this._rampDecayTime/this.checkExpInput(i)},t.Envelope.prototype.setInput=function(){for(var t=0;t=t&&(t=1e-8),t},t.Envelope.prototype.play=function(t,e,i){var n=e||0,i=i||0;t&&this.connection!==t&&this.connect(t),this.triggerAttack(t,n),this.triggerRelease(t,n+this.aTime+this.dTime+i)},t.Envelope.prototype.triggerAttack=function(t,i){var n=e.audiocontext.currentTime,o=i||0,r=n+o;this.lastAttack=r,this.wasTriggered=!0,t&&this.connection!==t&&this.connect(t);var s=this.control.getValueAtTime(r);this.isExponential===!0?this.control.exponentialRampToValueAtTime(this.checkExpInput(s),r):this.control.linearRampToValueAtTime(s,r),r+=this.aTime,this.isExponential===!0?(this.control.exponentialRampToValueAtTime(this.checkExpInput(this.aLevel),r),s=this.checkExpInput(this.control.getValueAtTime(r)),this.control.cancelScheduledValues(r),this.control.exponentialRampToValueAtTime(s,r)):(this.control.linearRampToValueAtTime(this.aLevel,r),s=this.control.getValueAtTime(r),this.control.cancelScheduledValues(r),this.control.linearRampToValueAtTime(s,r)),r+=this.dTime,this.isExponential===!0?(this.control.exponentialRampToValueAtTime(this.checkExpInput(this.dLevel),r),s=this.checkExpInput(this.control.getValueAtTime(r)),this.control.cancelScheduledValues(r),this.control.exponentialRampToValueAtTime(s,r)):(this.control.linearRampToValueAtTime(this.dLevel,r),s=this.control.getValueAtTime(r),this.control.cancelScheduledValues(r),this.control.linearRampToValueAtTime(s,r))},t.Envelope.prototype.triggerRelease=function(t,i){if(this.wasTriggered){var n=e.audiocontext.currentTime,o=i||0,r=n+o;t&&this.connection!==t&&this.connect(t);var s=this.control.getValueAtTime(r);this.isExponential===!0?this.control.exponentialRampToValueAtTime(this.checkExpInput(s),r):this.control.linearRampToValueAtTime(s,r),r+=this.rTime,this.isExponential===!0?(this.control.exponentialRampToValueAtTime(this.checkExpInput(this.rLevel),r),s=this.checkExpInput(this.control.getValueAtTime(r)),this.control.cancelScheduledValues(r),this.control.exponentialRampToValueAtTime(s,r)):(this.control.linearRampToValueAtTime(this.rLevel,r),s=this.control.getValueAtTime(r),this.control.cancelScheduledValues(r),this.control.linearRampToValueAtTime(s,r)),this.wasTriggered=!1}},t.Envelope.prototype.ramp=function(t,i,n,o){var r=e.audiocontext.currentTime,s=i||0,a=r+s,u=this.checkExpInput(n),c="undefined"!=typeof o?this.checkExpInput(o):void 0;t&&this.connection!==t&&this.connect(t);var p=this.checkExpInput(this.control.getValueAtTime(a));u>p?(this.control.setTargetAtTime(u,a,this._rampAttackTC),a+=this._rampAttackTime):p>u&&(this.control.setTargetAtTime(u,a,this._rampDecayTC),a+=this._rampDecayTime),void 0!==c&&(c>u?this.control.setTargetAtTime(c,a,this._rampAttackTC):u>c&&this.control.setTargetAtTime(c,a,this._rampDecayTC))},t.Envelope.prototype.connect=function(i){this.connection=i,(i instanceof t.Oscillator||i instanceof t.SoundFile||i instanceof t.AudioIn||i instanceof t.Reverb||i instanceof t.Noise||i instanceof t.Filter||i instanceof t.Delay)&&(i=i.output.gain),i instanceof AudioParam&&i.setValueAtTime(0,e.audiocontext.currentTime),i instanceof t.Signal&&i.setValue(0),this.output.connect(i)},t.Envelope.prototype.disconnect=function(){this.output&&this.output.disconnect()},t.Envelope.prototype.add=function(e){var n=new i(e),o=this.mathOps.length,r=this.output;return t.prototype._mathChain(this,n,o,r,i)},t.Envelope.prototype.mult=function(e){var i=new n(e),o=this.mathOps.length,r=this.output;return t.prototype._mathChain(this,i,o,r,n)},t.Envelope.prototype.scale=function(e,i,n,r){var s=new o(e,i,n,r),a=this.mathOps.length,u=this.output;return t.prototype._mathChain(this,s,a,u,o)},t.Envelope.prototype.dispose=function(){var t=e.soundArray.indexOf(this);e.soundArray.splice(t,1),this.disconnect(),this.control&&(this.control.dispose(),this.control=null);for(var i=1;io;o++)n[o]=1;var r=t.createBufferSource();return r.buffer=e,r.loop=!0,r}var i=a;t.Pulse=function(n,o){t.Oscillator.call(this,n,"sawtooth"),this.w=o||0,this.osc2=new t.SawOsc(n),this.dNode=i.audiocontext.createDelay(),this.dcOffset=e(),this.dcGain=i.audiocontext.createGain(),this.dcOffset.connect(this.dcGain),this.dcGain.connect(this.output),this.f=n||440;var r=this.w/this.oscillator.frequency.value;this.dNode.delayTime.value=r,this.dcGain.gain.value=1.7*(.5-this.w),this.osc2.disconnect(),this.osc2.panner.disconnect(),this.osc2.amp(-1),this.osc2.output.connect(this.dNode),this.dNode.connect(this.output),this.output.gain.value=1,this.output.connect(this.panner)},t.Pulse.prototype=Object.create(t.Oscillator.prototype),t.Pulse.prototype.width=function(e){if("number"==typeof e){if(1>=e&&e>=0){this.w=e;var i=this.w/this.oscillator.frequency.value;this.dNode.delayTime.value=i}this.dcGain.gain.value=1.7*(.5-this.w)}else{e.connect(this.dNode.delayTime);var n=new t.SignalAdd(-.5);n.setInput(e),n=n.mult(-1),n=n.mult(1.7),n.connect(this.dcGain.gain)}},t.Pulse.prototype.start=function(t,n){var o=i.audiocontext.currentTime,r=n||0;if(!this.started){var s=t||this.f,a=this.oscillator.type;this.oscillator=i.audiocontext.createOscillator(),this.oscillator.frequency.setValueAtTime(s,o),this.oscillator.type=a,this.oscillator.connect(this.output),this.oscillator.start(r+o),this.osc2.oscillator=i.audiocontext.createOscillator(),this.osc2.oscillator.frequency.setValueAtTime(s,r+o),this.osc2.oscillator.type=a,this.osc2.oscillator.connect(this.osc2.output),this.osc2.start(r+o),this.freqNode=[this.oscillator.frequency,this.osc2.oscillator.frequency],this.dcOffset=e(),this.dcOffset.connect(this.dcGain),this.dcOffset.start(r+o),void 0!==this.mods&&void 0!==this.mods.frequency&&(this.mods.frequency.connect(this.freqNode[0]),this.mods.frequency.connect(this.freqNode[1])),this.started=!0,this.osc2.started=!0}},t.Pulse.prototype.stop=function(t){if(this.started){var e=t||0,n=i.audiocontext.currentTime;this.oscillator.stop(e+n),this.osc2.oscillator&&this.osc2.oscillator.stop(e+n),this.dcOffset.stop(e+n),this.started=!1,this.osc2.started=!1}},t.Pulse.prototype.freq=function(t,e,n){if("number"==typeof t){this.f=t;var o=i.audiocontext.currentTime,e=e||0,n=n||0,r=this.oscillator.frequency.value;this.oscillator.frequency.cancelScheduledValues(o),this.oscillator.frequency.setValueAtTime(r,o+n),this.oscillator.frequency.exponentialRampToValueAtTime(t,n+e+o),this.osc2.oscillator.frequency.cancelScheduledValues(o),this.osc2.oscillator.frequency.setValueAtTime(r,o+n),this.osc2.oscillator.frequency.exponentialRampToValueAtTime(t,n+e+o),this.freqMod&&(this.freqMod.output.disconnect(),this.freqMod=null)}else t.output&&(t.output.disconnect(),t.output.connect(this.oscillator.frequency),t.output.connect(this.osc2.oscillator.frequency),this.freqMod=t)}}(a,O);var V;V=function(){var e=a;t.Noise=function(e){var r;t.Oscillator.call(this),delete this.f,delete this.freq,delete this.oscillator,r="brown"===e?o:"pink"===e?n:i,this.buffer=r},t.Noise.prototype=Object.create(t.Oscillator.prototype);var i=function(){for(var t=2*e.audiocontext.sampleRate,i=e.audiocontext.createBuffer(1,t,e.audiocontext.sampleRate),n=i.getChannelData(0),o=0;t>o;o++)n[o]=2*Math.random()-1;return i.type="white",i}(),n=function(){var t,i,n,o,r,s,a,u=2*e.audiocontext.sampleRate,c=e.audiocontext.createBuffer(1,u,e.audiocontext.sampleRate),p=c.getChannelData(0);t=i=n=o=r=s=a=0;for(var h=0;u>h;h++){var l=2*Math.random()-1;t=.99886*t+.0555179*l,i=.99332*i+.0750759*l,n=.969*n+.153852*l,o=.8665*o+.3104856*l,r=.55*r+.5329522*l,s=-.7616*s-.016898*l,p[h]=t+i+n+o+r+s+a+.5362*l,p[h]*=.11,a=.115926*l}return c.type="pink",c}(),o=function(){for(var t=2*e.audiocontext.sampleRate,i=e.audiocontext.createBuffer(1,t,e.audiocontext.sampleRate),n=i.getChannelData(0),o=0,r=0;t>r;r++){var s=2*Math.random()-1;n[r]=(o+.02*s)/1.02,o=n[r],n[r]*=3.5}return i.type="brown",i}();t.Noise.prototype.setType=function(t){switch(t){case"white":this.buffer=i;break;case"pink":this.buffer=n;break;case"brown":this.buffer=o;break;default:this.buffer=i}if(this.started){var r=e.audiocontext.currentTime;this.stop(r),this.start(r+.01)}},t.Noise.prototype.getType=function(){return this.buffer.type},t.Noise.prototype.start=function(){this.started&&this.stop(),this.noise=e.audiocontext.createBufferSource(),this.noise.buffer=this.buffer,this.noise.loop=!0,this.noise.connect(this.output);var t=e.audiocontext.currentTime;this.noise.start(t),this.started=!0},t.Noise.prototype.stop=function(){var t=e.audiocontext.currentTime;this.noise&&(this.noise.stop(t),this.started=!1)},t.Noise.prototype.dispose=function(){var t=e.audiocontext.currentTime,i=e.soundArray.indexOf(this);e.soundArray.splice(i,1),this.noise&&(this.noise.disconnect(),this.stop(t)),this.output&&this.output.disconnect(),this.panner&&this.panner.disconnect(),this.output=null,this.panner=null,this.buffer=null,this.noise=null}}(a);var R;R=function(){var e=a;e.inputSources=[],t.AudioIn=function(i){this.input=e.audiocontext.createGain(),this.output=e.audiocontext.createGain(),this.stream=null,this.mediaStream=null,this.currentSource=null,this.enabled=!1,this.amplitude=new t.Amplitude,this.output.connect(this.amplitude.input),window.MediaStreamTrack&&window.navigator.mediaDevices&&window.navigator.mediaDevices.getUserMedia||(i?i():window.alert("This browser does not support MediaStreamTrack and mediaDevices")),e.soundArray.push(this)},t.AudioIn.prototype.start=function(t,i){var n=this;this.stream&&this.stop();var o=e.inputSources[n.currentSource],r={audio:{sampleRate:e.audiocontext.sampleRate,echoCancellation:!1}};e.inputSources[this.currentSource]&&(r.audio.deviceId=o.deviceId),window.navigator.mediaDevices.getUserMedia(r).then(function(i){n.stream=i,n.enabled=!0,n.mediaStream=e.audiocontext.createMediaStreamSource(i),n.mediaStream.connect(n.output),n.amplitude.setInput(n.output),t&&t()})["catch"](function(t){i?i(t):console.error(t)})},t.AudioIn.prototype.stop=function(){this.stream&&(this.stream.getTracks().forEach(function(t){t.stop()}),this.mediaStream.disconnect(),delete this.mediaStream,delete this.stream)},t.AudioIn.prototype.connect=function(t){t?t.hasOwnProperty("input")?this.output.connect(t.input):t.hasOwnProperty("analyser")?this.output.connect(t.analyser):this.output.connect(t):this.output.connect(e.input)},t.AudioIn.prototype.disconnect=function(){this.output&&(this.output.disconnect(),this.output.connect(this.amplitude.input))},t.AudioIn.prototype.getLevel=function(t){return t&&(this.amplitude.smoothing=t),this.amplitude.getLevel()},t.AudioIn.prototype.amp=function(t,i){if(i){var n=i||0,o=this.output.gain.value;this.output.gain.cancelScheduledValues(e.audiocontext.currentTime),this.output.gain.setValueAtTime(o,e.audiocontext.currentTime),this.output.gain.linearRampToValueAtTime(t,n+e.audiocontext.currentTime)}else this.output.gain.cancelScheduledValues(e.audiocontext.currentTime),this.output.gain.setValueAtTime(t,e.audiocontext.currentTime)},t.AudioIn.prototype.getSources=function(t,i){return new Promise(function(n,o){window.navigator.mediaDevices.enumerateDevices().then(function(i){e.inputSources=i.filter(function(t){return"audioinput"===t.kind}),n(e.inputSources),t&&t(e.inputSources)})["catch"](function(t){o(t),i?i(t):console.error("This browser does not support MediaStreamTrack.getSources()")})})},t.AudioIn.prototype.setSource=function(t){e.inputSources.length>0&&t=t?0:1},127),this._scale=this.input=new t.Multiply(1e4),this._scale.connect(this._thresh)},t.extend(t.GreaterThanZero,t.SignalBase),t.GreaterThanZero.prototype.dispose=function(){return t.prototype.dispose.call(this),this._scale.dispose(),this._scale=null,this._thresh.dispose(),this._thresh=null,this},t.GreaterThanZero}(n,S,A);var B;B=function(t){"use strict";return t.GreaterThan=function(e){this.createInsOuts(2,0),this._param=this.input[0]=new t.Subtract(e),this.input[1]=this._param.input[1],this._gtz=this.output=new t.GreaterThanZero,this._param.connect(this._gtz)},t.extend(t.GreaterThan,t.Signal),t.GreaterThan.prototype.dispose=function(){return t.prototype.dispose.call(this),this._param.dispose(),this._param=null,this._gtz.dispose(),this._gtz=null,this},t.GreaterThan}(n,N,D);var U;U=function(t){"use strict";return t.Abs=function(){this._abs=this.input=this.output=new t.WaveShaper(function(t){return 0===t?0:Math.abs(t)},127)},t.extend(t.Abs,t.SignalBase),t.Abs.prototype.dispose=function(){return t.prototype.dispose.call(this),this._abs.dispose(),this._abs=null,this},t.Abs}(n,m);var I;I=function(t){"use strict";return t.Modulo=function(e){this.createInsOuts(1,0),this._shaper=new t.WaveShaper(Math.pow(2,16)),this._multiply=new t.Multiply,this._subtract=this.output=new t.Subtract,this._modSignal=new t.Signal(e),this.input.fan(this._shaper,this._subtract),this._modSignal.connect(this._multiply,0,0),this._shaper.connect(this._multiply,0,1),this._multiply.connect(this._subtract,0,1),this._setWaveShaper(e)},t.extend(t.Modulo,t.SignalBase),t.Modulo.prototype._setWaveShaper=function(t){this._shaper.setMap(function(e){var i=Math.floor((e+1e-4)/t);return i; +})},Object.defineProperty(t.Modulo.prototype,"value",{get:function(){return this._modSignal.value},set:function(t){this._modSignal.value=t,this._setWaveShaper(t)}}),t.Modulo.prototype.dispose=function(){return t.prototype.dispose.call(this),this._shaper.dispose(),this._shaper=null,this._multiply.dispose(),this._multiply=null,this._subtract.dispose(),this._subtract=null,this._modSignal.dispose(),this._modSignal=null,this},t.Modulo}(n,m,A);var G;G=function(t){"use strict";return t.Pow=function(e){this._exp=this.defaultArg(e,1),this._expScaler=this.input=this.output=new t.WaveShaper(this._expFunc(this._exp),8192)},t.extend(t.Pow,t.SignalBase),Object.defineProperty(t.Pow.prototype,"value",{get:function(){return this._exp},set:function(t){this._exp=t,this._expScaler.setMap(this._expFunc(this._exp))}}),t.Pow.prototype._expFunc=function(t){return function(e){return Math.pow(Math.abs(e),t)}},t.Pow.prototype.dispose=function(){return t.prototype.dispose.call(this),this._expScaler.dispose(),this._expScaler=null,this},t.Pow}(n);var L;L=function(t){"use strict";return t.AudioToGain=function(){this._norm=this.input=this.output=new t.WaveShaper(function(t){return(t+1)/2})},t.extend(t.AudioToGain,t.SignalBase),t.AudioToGain.prototype.dispose=function(){return t.prototype.dispose.call(this),this._norm.dispose(),this._norm=null,this},t.AudioToGain}(n,m);var j;j=function(t){"use strict";function e(t,e,i){var n=new t;return i._eval(e[0]).connect(n,0,0),i._eval(e[1]).connect(n,0,1),n}function i(t,e,i){var n=new t;return i._eval(e[0]).connect(n,0,0),n}function n(t){return t?parseFloat(t):void 0}function o(t){return t&&t.args?parseFloat(t.args):void 0}return t.Expr=function(){var t=this._replacements(Array.prototype.slice.call(arguments)),e=this._parseInputs(t);this._nodes=[],this.input=new Array(e);for(var i=0;e>i;i++)this.input[i]=this.context.createGain();var n,o=this._parseTree(t);try{n=this._eval(o)}catch(r){throw this._disposeNodes(),new Error("Tone.Expr: Could evaluate expression: "+t)}this.output=n},t.extend(t.Expr,t.SignalBase),t.Expr._Expressions={value:{signal:{regexp:/^\d+\.\d+|^\d+/,method:function(e){var i=new t.Signal(n(e));return i}},input:{regexp:/^\$\d/,method:function(t,e){return e.input[n(t.substr(1))]}}},glue:{"(":{regexp:/^\(/},")":{regexp:/^\)/},",":{regexp:/^,/}},func:{abs:{regexp:/^abs/,method:i.bind(this,t.Abs)},mod:{regexp:/^mod/,method:function(e,i){var n=o(e[1]),r=new t.Modulo(n);return i._eval(e[0]).connect(r),r}},pow:{regexp:/^pow/,method:function(e,i){var n=o(e[1]),r=new t.Pow(n);return i._eval(e[0]).connect(r),r}},a2g:{regexp:/^a2g/,method:function(e,i){var n=new t.AudioToGain;return i._eval(e[0]).connect(n),n}}},binary:{"+":{regexp:/^\+/,precedence:1,method:e.bind(this,t.Add)},"-":{regexp:/^\-/,precedence:1,method:function(n,o){return 1===n.length?i(t.Negate,n,o):e(t.Subtract,n,o)}},"*":{regexp:/^\*/,precedence:0,method:e.bind(this,t.Multiply)}},unary:{"-":{regexp:/^\-/,method:i.bind(this,t.Negate)},"!":{regexp:/^\!/,method:i.bind(this,t.NOT)}}},t.Expr.prototype._parseInputs=function(t){var e=t.match(/\$\d/g),i=0;if(null!==e)for(var n=0;n0;){e=e.trim();var r=i(e);o.push(r),e=e.substr(r.value.length)}return{next:function(){return o[++n]},peek:function(){return o[n+1]}}},t.Expr.prototype._parseTree=function(e){function i(t,e){return!p(t)&&"glue"===t.type&&t.value===e}function n(e,i,n){var o=!1,r=t.Expr._Expressions[i];if(!p(e))for(var s in r){var a=r[s];if(a.regexp.test(e.value)){if(p(n))return!0;if(a.precedence===n)return!0}}return o}function o(t){p(t)&&(t=5);var e;e=0>t?r():o(t-1);for(var i=c.peek();n(i,"binary",t);)i=c.next(),e={operator:i.value,method:i.method,args:[e,o(t-1)]},i=c.peek();return e}function r(){var t,e;return t=c.peek(),n(t,"unary")?(t=c.next(),e=r(),{operator:t.value,method:t.method,args:[e]}):s()}function s(){var t,e;if(t=c.peek(),p(t))throw new SyntaxError("Tone.Expr: Unexpected termination of expression");if("func"===t.type)return t=c.next(),a(t);if("value"===t.type)return t=c.next(),{method:t.method,args:t.value};if(i(t,"(")){if(c.next(),e=o(),t=c.next(),!i(t,")"))throw new SyntaxError("Expected )");return e}throw new SyntaxError("Tone.Expr: Parse error, cannot process token "+t.value)}function a(t){var e,n=[];if(e=c.next(),!i(e,"("))throw new SyntaxError('Tone.Expr: Expected ( in a function call "'+t.value+'"');if(e=c.peek(),i(e,")")||(n=u()),e=c.next(),!i(e,")"))throw new SyntaxError('Tone.Expr: Expected ) in a function call "'+t.value+'"');return{method:t.method,args:n,name:name}}function u(){for(var t,e,n=[];;){if(e=o(),p(e))break;if(n.push(e),t=c.peek(),!i(t,","))break;c.next()}return n}var c=this._tokenize(e),p=this.isUndef.bind(this);return o()},t.Expr.prototype._eval=function(t){if(!this.isUndef(t)){var e=t.method(t.args,this);return this._nodes.push(e),e}},t.Expr.prototype._disposeNodes=function(){for(var t=0;t0){this.connect(arguments[0]);for(var t=1;t=t&&(t=1),"number"==typeof t?(this.biquad.frequency.cancelScheduledValues(this.ac.currentTime+.01+i),this.biquad.frequency.exponentialRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.biquad.frequency),this.biquad.frequency.value},t.Filter.prototype.res=function(t,e){var i=e||0;return"number"==typeof t?(this.biquad.Q.value=t,this.biquad.Q.cancelScheduledValues(this.ac.currentTime+.01+i),this.biquad.Q.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.biquad.Q),this.biquad.Q.value},t.Filter.prototype.gain=function(t,e){var i=e||0;return"number"==typeof t?(this.biquad.gain.value=t,this.biquad.gain.cancelScheduledValues(this.ac.currentTime+.01+i),this.biquad.gain.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.biquad.gain),this.biquad.gain.value},t.Filter.prototype.toggle=function(){return this._on=!this._on,this._on===!0?this.biquad.type=this._untoggledType:this._on===!1&&(this.biquad.type="allpass"),this._on},t.Filter.prototype.setType=function(t){this.biquad.type=t,this._untoggledType=this.biquad.type},t.Filter.prototype.dispose=function(){e.prototype.dispose.apply(this),this.biquad&&(this.biquad.disconnect(),delete this.biquad)},t.LowPass=function(){t.Filter.call(this,"lowpass")},t.LowPass.prototype=Object.create(t.Filter.prototype),t.HighPass=function(){t.Filter.call(this,"highpass")},t.HighPass.prototype=Object.create(t.Filter.prototype),t.BandPass=function(){t.Filter.call(this,"bandpass")},t.BandPass.prototype=Object.create(t.Filter.prototype),t.Filter}(a,Y);var W;W=function(){var e=z,i=a,n=function(t,i){e.call(this,"peaking"),this.disconnect(),this.set(t,i),this.biquad.gain.value=0,delete this.input,delete this.output,delete this._drywet,delete this.wet};return n.prototype=Object.create(e.prototype),n.prototype.amp=function(){console.warn("`amp()` is not available for p5.EQ bands. Use `.gain()`")},n.prototype.drywet=function(){console.warn("`drywet()` is not available for p5.EQ bands.")},n.prototype.connect=function(e){var i=e||t.soundOut.input;this.biquad?this.biquad.connect(i.input?i.input:i):this.output.connect(i.input?i.input:i)},n.prototype.disconnect=function(){this.biquad&&this.biquad.disconnect()},n.prototype.dispose=function(){var t=i.soundArray.indexOf(this);i.soundArray.splice(t,1),this.disconnect(),delete this.biquad},n}(z,a);var Q;Q=function(){var e=Y,i=W;return t.EQ=function(t){e.call(this),t=3===t||8===t?t:3;var i;i=3===t?Math.pow(2,3):2,this.bands=[];for(var n,o,r=0;t>r;r++)r===t-1?(n=21e3,o=.01):0===r?(n=100,o=.1):1===r?(n=3===t?360*i:360,o=1):(n=this.bands[r-1].freq()*i,o=1),this.bands[r]=this._newBand(n,o),r>0?this.bands[r-1].connect(this.bands[r].biquad):this.input.connect(this.bands[r].biquad);this.bands[t-1].connect(this.output)},t.EQ.prototype=Object.create(e.prototype),t.EQ.prototype.process=function(t){t.connect(this.input)},t.EQ.prototype.set=function(){if(arguments.length===2*this.bands.length)for(var t=0;t0;)delete this.bands.pop().dispose();delete this.bands}},t.EQ}(Y,W);var H;H=function(){var e=Y;return t.Panner3D=function(){e.call(this),this.panner=this.ac.createPanner(),this.panner.panningModel="HRTF",this.panner.distanceModel="linear",this.panner.connect(this.output),this.input.connect(this.panner)},t.Panner3D.prototype=Object.create(e.prototype),t.Panner3D.prototype.process=function(t){t.connect(this.input)},t.Panner3D.prototype.set=function(t,e,i,n){return this.positionX(t,n),this.positionY(e,n),this.positionZ(i,n),[this.panner.positionX.value,this.panner.positionY.value,this.panner.positionZ.value]},t.Panner3D.prototype.positionX=function(t,e){var i=e||0;return"number"==typeof t?(this.panner.positionX.value=t,this.panner.positionX.cancelScheduledValues(this.ac.currentTime+.01+i),this.panner.positionX.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.panner.positionX),this.panner.positionX.value},t.Panner3D.prototype.positionY=function(t,e){var i=e||0;return"number"==typeof t?(this.panner.positionY.value=t,this.panner.positionY.cancelScheduledValues(this.ac.currentTime+.01+i),this.panner.positionY.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.panner.positionY),this.panner.positionY.value},t.Panner3D.prototype.positionZ=function(t,e){var i=e||0;return"number"==typeof t?(this.panner.positionZ.value=t,this.panner.positionZ.cancelScheduledValues(this.ac.currentTime+.01+i),this.panner.positionZ.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.panner.positionZ),this.panner.positionZ.value},t.Panner3D.prototype.orient=function(t,e,i,n){return this.orientX(t,n),this.orientY(e,n),this.orientZ(i,n),[this.panner.orientationX.value,this.panner.orientationY.value,this.panner.orientationZ.value]},t.Panner3D.prototype.orientX=function(t,e){var i=e||0;return"number"==typeof t?(this.panner.orientationX.value=t,this.panner.orientationX.cancelScheduledValues(this.ac.currentTime+.01+i),this.panner.orientationX.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.panner.orientationX),this.panner.orientationX.value},t.Panner3D.prototype.orientY=function(t,e){var i=e||0;return"number"==typeof t?(this.panner.orientationY.value=t,this.panner.orientationY.cancelScheduledValues(this.ac.currentTime+.01+i),this.panner.orientationY.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.panner.orientationY),this.panner.orientationY.value},t.Panner3D.prototype.orientZ=function(t,e){var i=e||0;return"number"==typeof t?(this.panner.orientationZ.value=t,this.panner.orientationZ.cancelScheduledValues(this.ac.currentTime+.01+i),this.panner.orientationZ.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.panner.orientationZ),this.panner.orientationZ.value},t.Panner3D.prototype.setFalloff=function(t,e){this.maxDist(t),this.rolloff(e)},t.Panner3D.prototype.maxDist=function(t){return"number"==typeof t&&(this.panner.maxDistance=t),this.panner.maxDistance},t.Panner3D.prototype.rolloff=function(t){return"number"==typeof t&&(this.panner.rolloffFactor=t),this.panner.rolloffFactor},t.Panner3D.dispose=function(){e.prototype.dispose.apply(this),this.panner&&(this.panner.disconnect(),delete this.panner)},t.Panner3D}(a,Y);var $;$=function(){var e=a;return t.Listener3D=function(t){this.ac=e.audiocontext,this.listener=this.ac.listener},t.Listener3D.prototype.process=function(t){t.connect(this.input)},t.Listener3D.prototype.position=function(t,e,i,n){return this.positionX(t,n),this.positionY(e,n),this.positionZ(i,n),[this.listener.positionX.value,this.listener.positionY.value,this.listener.positionZ.value]},t.Listener3D.prototype.positionX=function(t,e){var i=e||0;return"number"==typeof t?(this.listener.positionX.value=t,this.listener.positionX.cancelScheduledValues(this.ac.currentTime+.01+i),this.listener.positionX.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.listener.positionX),this.listener.positionX.value},t.Listener3D.prototype.positionY=function(t,e){var i=e||0;return"number"==typeof t?(this.listener.positionY.value=t,this.listener.positionY.cancelScheduledValues(this.ac.currentTime+.01+i),this.listener.positionY.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.listener.positionY),this.listener.positionY.value},t.Listener3D.prototype.positionZ=function(t,e){var i=e||0;return"number"==typeof t?(this.listener.positionZ.value=t,this.listener.positionZ.cancelScheduledValues(this.ac.currentTime+.01+i),this.listener.positionZ.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.listener.positionZ),this.listener.positionZ.value},t.Listener3D.prototype.orient=function(t,e,i,n,o,r,s){return 3===arguments.length||4===arguments.length?(s=arguments[3],this.orientForward(t,e,i,s)):(6===arguments.length||7===arguments)&&(this.orientForward(t,e,i),this.orientUp(n,o,r,s)),[this.listener.forwardX.value,this.listener.forwardY.value,this.listener.forwardZ.value,this.listener.upX.value,this.listener.upY.value,this.listener.upZ.value]},t.Listener3D.prototype.orientForward=function(t,e,i,n){return this.forwardX(t,n),this.forwardY(e,n),this.forwardZ(i,n),[this.listener.forwardX,this.listener.forwardY,this.listener.forwardZ]},t.Listener3D.prototype.orientUp=function(t,e,i,n){return this.upX(t,n),this.upY(e,n),this.upZ(i,n),[this.listener.upX,this.listener.upY,this.listener.upZ]},t.Listener3D.prototype.forwardX=function(t,e){var i=e||0;return"number"==typeof t?(this.listener.forwardX.value=t,this.listener.forwardX.cancelScheduledValues(this.ac.currentTime+.01+i),this.listener.forwardX.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.listener.forwardX),this.listener.forwardX.value},t.Listener3D.prototype.forwardY=function(t,e){var i=e||0;return"number"==typeof t?(this.listener.forwardY.value=t,this.listener.forwardY.cancelScheduledValues(this.ac.currentTime+.01+i),this.listener.forwardY.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.listener.forwardY),this.listener.forwardY.value},t.Listener3D.prototype.forwardZ=function(t,e){var i=e||0;return"number"==typeof t?(this.listener.forwardZ.value=t,this.listener.forwardZ.cancelScheduledValues(this.ac.currentTime+.01+i),this.listener.forwardZ.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.listener.forwardZ),this.listener.forwardZ.value},t.Listener3D.prototype.upX=function(t,e){var i=e||0;return"number"==typeof t?(this.listener.upX.value=t,this.listener.upX.cancelScheduledValues(this.ac.currentTime+.01+i),this.listener.upX.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.listener.upX),this.listener.upX.value},t.Listener3D.prototype.upY=function(t,e){var i=e||0;return"number"==typeof t?(this.listener.upY.value=t,this.listener.upY.cancelScheduledValues(this.ac.currentTime+.01+i),this.listener.upY.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.listener.upY),this.listener.upY.value},t.Listener3D.prototype.upZ=function(t,e){var i=e||0;return"number"==typeof t?(this.listener.upZ.value=t,this.listener.upZ.cancelScheduledValues(this.ac.currentTime+.01+i),this.listener.upZ.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):t&&t.connect(this.listener.upZ),this.listener.upZ.value},t.Listener3D}(a,Y);var J;J=function(){var e=z,i=Y;t.Delay=function(){i.call(this),this._split=this.ac.createChannelSplitter(2),this._merge=this.ac.createChannelMerger(2),this._leftGain=this.ac.createGain(),this._rightGain=this.ac.createGain(),this.leftDelay=this.ac.createDelay(),this.rightDelay=this.ac.createDelay(),this._leftFilter=new e,this._rightFilter=new e,this._leftFilter.disconnect(),this._rightFilter.disconnect(),this._leftFilter.biquad.frequency.setValueAtTime(1200,this.ac.currentTime),this._rightFilter.biquad.frequency.setValueAtTime(1200,this.ac.currentTime),this._leftFilter.biquad.Q.setValueAtTime(.3,this.ac.currentTime),this._rightFilter.biquad.Q.setValueAtTime(.3,this.ac.currentTime),this.input.connect(this._split),this.leftDelay.connect(this._leftGain),this.rightDelay.connect(this._rightGain),this._leftGain.connect(this._leftFilter.input),this._rightGain.connect(this._rightFilter.input),this._merge.connect(this.wet),this._leftFilter.biquad.gain.setValueAtTime(1,this.ac.currentTime),this._rightFilter.biquad.gain.setValueAtTime(1,this.ac.currentTime),this.setType(0),this._maxDelay=this.leftDelay.delayTime.maxValue,this.feedback(.5)},t.Delay.prototype=Object.create(i.prototype),t.Delay.prototype.process=function(t,e,i,n){var o=i||0,r=e||0;if(o>=1)throw new Error("Feedback value will force a positive feedback loop.");if(r>=this._maxDelay)throw new Error("Delay Time exceeds maximum delay time of "+this._maxDelay+" second.");t.connect(this.input),this.leftDelay.delayTime.setValueAtTime(r,this.ac.currentTime),this.rightDelay.delayTime.setValueAtTime(r,this.ac.currentTime),this._leftGain.gain.value=o,this._rightGain.gain.value=o,n&&(this._leftFilter.freq(n),this._rightFilter.freq(n))},t.Delay.prototype.delayTime=function(t){"number"!=typeof t?(t.connect(this.leftDelay.delayTime),t.connect(this.rightDelay.delayTime)):(this.leftDelay.delayTime.cancelScheduledValues(this.ac.currentTime),this.rightDelay.delayTime.cancelScheduledValues(this.ac.currentTime),this.leftDelay.delayTime.linearRampToValueAtTime(t,this.ac.currentTime),this.rightDelay.delayTime.linearRampToValueAtTime(t,this.ac.currentTime))},t.Delay.prototype.feedback=function(t){if(t&&"number"!=typeof t)t.connect(this._leftGain.gain),t.connect(this._rightGain.gain);else{if(t>=1)throw new Error("Feedback value will force a positive feedback loop.");"number"==typeof t&&(this._leftGain.gain.value=t,this._rightGain.gain.value=t)}return this._leftGain.gain.value},t.Delay.prototype.filter=function(t,e){this._leftFilter.set(t,e),this._rightFilter.set(t,e)},t.Delay.prototype.setType=function(t){switch(1===t&&(t="pingPong"),this._split.disconnect(),this._leftFilter.disconnect(),this._rightFilter.disconnect(),this._split.connect(this.leftDelay,0),this._split.connect(this.rightDelay,1),t){case"pingPong":this._rightFilter.setType(this._leftFilter.biquad.type),this._leftFilter.output.connect(this._merge,0,0),this._rightFilter.output.connect(this._merge,0,1),this._leftFilter.output.connect(this.rightDelay),this._rightFilter.output.connect(this.leftDelay);break;default:this._leftFilter.output.connect(this._merge,0,0),this._rightFilter.output.connect(this._merge,0,1),this._leftFilter.output.connect(this.leftDelay),this._rightFilter.output.connect(this.rightDelay)}},t.Delay.prototype.dispose=function(){i.prototype.dispose.apply(this),this._split.disconnect(),this._leftFilter.dispose(),this._rightFilter.dispose(),this._merge.disconnect(),this._leftGain.disconnect(),this._rightGain.disconnect(),this.leftDelay.disconnect(),this.rightDelay.disconnect(),this._split=void 0,this._leftFilter=void 0,this._rightFilter=void 0,this._merge=void 0,this._leftGain=void 0,this._rightGain=void 0,this.leftDelay=void 0,this.rightDelay=void 0}}(z,Y);var K;K=function(){var e=c,i=Y;t.Reverb=function(){i.call(this),this._initConvolverNode(),this.input.gain.value=.5,this._seconds=3,this._decay=2,this._reverse=!1,this._buildImpulse()},t.Reverb.prototype=Object.create(i.prototype),t.Reverb.prototype._initConvolverNode=function(){this.convolverNode=this.ac.createConvolver(),this.input.connect(this.convolverNode),this.convolverNode.connect(this.wet)},t.Reverb.prototype._teardownConvolverNode=function(){this.convolverNode&&(this.convolverNode.disconnect(),delete this.convolverNode)},t.Reverb.prototype._setBuffer=function(t){this._teardownConvolverNode(),this._initConvolverNode(),this.convolverNode.buffer=t},t.Reverb.prototype.process=function(t,e,i,n){t.connect(this.input);var o=!1;e&&(this._seconds=e,o=!0),i&&(this._decay=i),n&&(this._reverse=n),o&&this._buildImpulse()},t.Reverb.prototype.set=function(t,e,i){var n=!1;t&&(this._seconds=t,n=!0),e&&(this._decay=e),i&&(this._reverse=i),n&&this._buildImpulse()},t.Reverb.prototype._buildImpulse=function(){var t,e,i=this.ac.sampleRate,n=i*this._seconds,o=this._decay,r=this.ac.createBuffer(2,n,i),s=r.getChannelData(0),a=r.getChannelData(1);for(e=0;n>e;e++)t=this._reverse?n-e:e,s[e]=(2*Math.random()-1)*Math.pow(1-t/n,o),a[e]=(2*Math.random()-1)*Math.pow(1-t/n,o);this._setBuffer(r)},t.Reverb.prototype.dispose=function(){i.prototype.dispose.apply(this),this._teardownConvolverNode()},t.Convolver=function(e,i,n){t.Reverb.call(this),this._initConvolverNode(),this.input.gain.value=.5,e?(this.impulses=[],this._loadBuffer(e,i,n)):(this._seconds=3,this._decay=2,this._reverse=!1,this._buildImpulse())},t.Convolver.prototype=Object.create(t.Reverb.prototype),t.prototype.registerPreloadMethod("createConvolver",t.prototype),t.prototype.createConvolver=function(e,i,n){window.location.origin.indexOf("file://")>-1&&"undefined"===window.cordova&&alert("This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS");var o=this,r=new t.Convolver(e,function(t){"function"==typeof i&&i(t),"function"==typeof o._decrementPreload&&o._decrementPreload()},n);return r.impulses=[],r},t.Convolver.prototype._loadBuffer=function(i,n,o){var i=t.prototype._checkFileFormats(i),r=this,s=(new Error).stack,a=t.prototype.getAudioContext(),u=new XMLHttpRequest;u.open("GET",i,!0),u.responseType="arraybuffer",u.onload=function(){if(200===u.status)a.decodeAudioData(u.response,function(t){var e={},o=i.split("/");e.name=o[o.length-1],e.audioBuffer=t,r.impulses.push(e),r._setBuffer(e.audioBuffer),n&&n(e)},function(){var t=new e("decodeAudioData",s,r.url),i="AudioContext error at decodeAudioData for "+r.url;o?(t.msg=i,o(t)):console.error(i+"\n The error stack trace includes: \n"+t.stack)});else{var t=new e("loadConvolver",s,r.url),c="Unable to load "+r.url+". The request status was: "+u.status+" ("+u.statusText+")";o?(t.message=c,o(t)):console.error(c+"\n The error stack trace includes: \n"+t.stack)}},u.onerror=function(){var t=new e("loadConvolver",s,r.url),i="There was no response from the server at "+r.url+". Check the url and internet connectivity.";o?(t.message=i,o(t)):console.error(i+"\n The error stack trace includes: \n"+t.stack)},u.send()},t.Convolver.prototype.set=null,t.Convolver.prototype.process=function(t){t.connect(this.input)},t.Convolver.prototype.impulses=[],t.Convolver.prototype.addImpulse=function(t,e,i){window.location.origin.indexOf("file://")>-1&&"undefined"===window.cordova&&alert("This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS"),this._loadBuffer(t,e,i)},t.Convolver.prototype.resetImpulse=function(t,e,i){window.location.origin.indexOf("file://")>-1&&"undefined"===window.cordova&&alert("This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS"),this.impulses=[],this._loadBuffer(t,e,i)},t.Convolver.prototype.toggleImpulse=function(t){if("number"==typeof t&&tthis._nextTick&&this._state;){var s=this._state.getValueAtTime(this._nextTick);if(s!==this._lastState){this._lastState=s;var a=this._state.get(this._nextTick);s===t.State.Started?(this._nextTick=a.time,this.isUndef(a.offset)||(this.ticks=a.offset),this.emit("start",a.time,this.ticks)):s===t.State.Stopped?(this.ticks=0,this.emit("stop",a.time)):s===t.State.Paused&&this.emit("pause",a.time)}var u=this._nextTick;this.frequency&&(this._nextTick+=1/this.frequency.getValueAtTime(this._nextTick),s===t.State.Started&&(this.callback(u),this.ticks++))}},t.Clock.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},t.Clock.prototype.dispose=function(){t.Emitter.prototype.dispose.call(this),this.context.off("tick",this._boundLoop),this._writable("frequency"),this.frequency.dispose(),this.frequency=null,this._boundLoop=null,this._nextTick=1/0,this.callback=null,this._state.dispose(),this._state=null},t.Clock}(n,q,tt,o);var it;it=function(){var e=a,i=et;t.Metro=function(){this.clock=new i({callback:this.ontick.bind(this)}),this.syncedParts=[],this.bpm=120,this._init(),this.prevTick=0,this.tatumTime=0,this.tickCallback=function(){}},t.Metro.prototype.ontick=function(t){var i=t-this.prevTick,n=t-e.audiocontext.currentTime;if(!(i-this.tatumTime<=-.02)){this.prevTick=t;var o=this;this.syncedParts.forEach(function(t){t.isPlaying&&(t.incrementStep(n),t.phrases.forEach(function(t){var e=t.sequence,i=o.metroTicks%e.length;0!==e[i]&&(o.metroTicks=t.parts.length?(t.scoreStep=0,t.onended()):(t.scoreStep=0,t.parts[t.currentPart-1].stop(),t.parts[t.currentPart].start())}var i=a,n=120;t.prototype.setBPM=function(t,e){n=t;for(var o in i.parts)i.parts[o]&&i.parts[o].setBPM(t,e)},t.Phrase=function(t,e,i){this.phraseStep=0,this.name=t,this.callback=e,this.sequence=i},t.Part=function(e,o){this.length=e||0,this.partStep=0, +this.phrases=[],this.isPlaying=!1,this.noLoop(),this.tatums=o||.0625,this.metro=new t.Metro,this.metro._init(),this.metro.beatLength(this.tatums),this.metro.setBPM(n),i.parts.push(this),this.callback=function(){}},t.Part.prototype.setBPM=function(t,e){this.metro.setBPM(t,e)},t.Part.prototype.getBPM=function(){return this.metro.getBPM()},t.Part.prototype.start=function(t){if(!this.isPlaying){this.isPlaying=!0,this.metro.resetSync(this);var e=t||0;this.metro.start(e)}},t.Part.prototype.loop=function(t){this.looping=!0,this.onended=function(){this.partStep=0};var e=t||0;this.start(e)},t.Part.prototype.noLoop=function(){this.looping=!1,this.onended=function(){this.stop()}},t.Part.prototype.stop=function(t){this.partStep=0,this.pause(t)},t.Part.prototype.pause=function(t){this.isPlaying=!1;var e=t||0;this.metro.stop(e)},t.Part.prototype.addPhrase=function(e,i,n){var o;if(3===arguments.length)o=new t.Phrase(e,i,n);else{if(!(arguments[0]instanceof t.Phrase))throw"invalid input. addPhrase accepts name, callback, array or a p5.Phrase";o=arguments[0]}this.phrases.push(o),o.sequence.length>this.length&&(this.length=o.sequence.length)},t.Part.prototype.removePhrase=function(t){for(var e in this.phrases)this.phrases[e].name===t&&this.phrases.splice(e,1)},t.Part.prototype.getPhrase=function(t){for(var e in this.phrases)if(this.phrases[e].name===t)return this.phrases[e]},t.Part.prototype.replaceSequence=function(t,e){for(var i in this.phrases)this.phrases[i].name===t&&(this.phrases[i].sequence=e)},t.Part.prototype.incrementStep=function(t){this.partStep0&&o.iterations<=o.maxIterations&&o.callback(i)},frequency:this._calcFreq()})},t.SoundLoop.prototype.start=function(t){var i=t||0,n=e.audiocontext.currentTime;this.isPlaying||(this.clock.start(n+i),this.isPlaying=!0)},t.SoundLoop.prototype.stop=function(t){var i=t||0,n=e.audiocontext.currentTime;this.isPlaying&&(this.clock.stop(n+i),this.isPlaying=!1)},t.SoundLoop.prototype.pause=function(t){var i=t||0,n=e.audiocontext.currentTime;this.isPlaying&&(this.clock.pause(n+i),this.isPlaying=!1)},t.SoundLoop.prototype.syncedStart=function(t,i){var n=i||0,o=e.audiocontext.currentTime;if(t.isPlaying){if(t.isPlaying){var r=t.clock._nextTick-e.audiocontext.currentTime;this.clock.start(o+r),this.isPlaying=!0}}else t.clock.start(o+n),t.isPlaying=!0,this.clock.start(o+n),this.isPlaying=!0},t.SoundLoop.prototype._update=function(){this.clock.frequency.value=this._calcFreq()},t.SoundLoop.prototype._calcFreq=function(){return"number"==typeof this._interval?(this.musicalTimeMode=!1,1/this._interval):"string"==typeof this._interval?(this.musicalTimeMode=!0,this._bpm/60/this._convertNotation(this._interval)*(this._timeSignature/4)):void 0},t.SoundLoop.prototype._convertNotation=function(t){var e=t.slice(-1);switch(t=Number(t.slice(0,-1)),e){case"m":return this._measure(t);case"n":return this._note(t);default:console.warn("Specified interval is not formatted correctly. See Tone.js timing reference for more info: https://github.com/Tonejs/Tone.js/wiki/Time")}},t.SoundLoop.prototype._measure=function(t){return t*this._timeSignature},t.SoundLoop.prototype._note=function(t){return this._timeSignature/t},Object.defineProperty(t.SoundLoop.prototype,"bpm",{get:function(){return this._bpm},set:function(t){this.musicalTimeMode||console.warn('Changing the BPM in "seconds" mode has no effect. BPM is only relevant in musicalTimeMode when the interval is specified as a string ("2n", "4n", "1m"...etc)'),this._bpm=t,this._update()}}),Object.defineProperty(t.SoundLoop.prototype,"timeSignature",{get:function(){return this._timeSignature},set:function(t){this.musicalTimeMode||console.warn('Changing the timeSignature in "seconds" mode has no effect. BPM is only relevant in musicalTimeMode when the interval is specified as a string ("2n", "4n", "1m"...etc)'),this._timeSignature=t,this._update()}}),Object.defineProperty(t.SoundLoop.prototype,"interval",{get:function(){return this._interval},set:function(t){this.musicalTimeMode="Number"==typeof t?!1:!0,this._interval=t,this._update()}}),Object.defineProperty(t.SoundLoop.prototype,"iterations",{get:function(){return this.clock.ticks}}),t.SoundLoop}(a,et);var rt;rt=function(){"use strict";var e=Y;return t.Compressor=function(){e.call(this),this.compressor=this.ac.createDynamicsCompressor(),this.input.connect(this.compressor),this.compressor.connect(this.wet)},t.Compressor.prototype=Object.create(e.prototype),t.Compressor.prototype.process=function(t,e,i,n,o,r){t.connect(this.input),this.set(e,i,n,o,r)},t.Compressor.prototype.set=function(t,e,i,n,o){"undefined"!=typeof t&&this.attack(t),"undefined"!=typeof e&&this.knee(e),"undefined"!=typeof i&&this.ratio(i),"undefined"!=typeof n&&this.threshold(n),"undefined"!=typeof o&&this.release(o)},t.Compressor.prototype.attack=function(t,e){var i=e||0;return"number"==typeof t?(this.compressor.attack.value=t,this.compressor.attack.cancelScheduledValues(this.ac.currentTime+.01+i),this.compressor.attack.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):"undefined"!=typeof t&&t.connect(this.compressor.attack),this.compressor.attack.value},t.Compressor.prototype.knee=function(t,e){var i=e||0;return"number"==typeof t?(this.compressor.knee.value=t,this.compressor.knee.cancelScheduledValues(this.ac.currentTime+.01+i),this.compressor.knee.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):"undefined"!=typeof t&&t.connect(this.compressor.knee),this.compressor.knee.value},t.Compressor.prototype.ratio=function(t,e){var i=e||0;return"number"==typeof t?(this.compressor.ratio.value=t,this.compressor.ratio.cancelScheduledValues(this.ac.currentTime+.01+i),this.compressor.ratio.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):"undefined"!=typeof t&&t.connect(this.compressor.ratio),this.compressor.ratio.value},t.Compressor.prototype.threshold=function(t,e){var i=e||0;return"number"==typeof t?(this.compressor.threshold.value=t,this.compressor.threshold.cancelScheduledValues(this.ac.currentTime+.01+i),this.compressor.threshold.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):"undefined"!=typeof t&&t.connect(this.compressor.threshold),this.compressor.threshold.value},t.Compressor.prototype.release=function(t,e){var i=e||0;return"number"==typeof t?(this.compressor.release.value=t,this.compressor.release.cancelScheduledValues(this.ac.currentTime+.01+i),this.compressor.release.linearRampToValueAtTime(t,this.ac.currentTime+.02+i)):"undefined"!=typeof number&&t.connect(this.compressor.release),this.compressor.release.value},t.Compressor.prototype.reduction=function(){return this.compressor.reduction.value},t.Compressor.prototype.dispose=function(){e.prototype.dispose.apply(this),this.compressor&&(this.compressor.disconnect(),delete this.compressor)},t.Compressor}(a,Y,c);var st;st=function(){var e=a,i=u.convertToWav,n=e.audiocontext;t.SoundRecorder=function(){this.input=n.createGain(),this.output=n.createGain(),this.recording=!1,this.bufferSize=1024,this._channels=2,this._clear(),this._jsNode=n.createScriptProcessor(this.bufferSize,this._channels,2),this._jsNode.onaudioprocess=this._audioprocess.bind(this),this._callback=function(){},this._jsNode.connect(t.soundOut._silentNode),this.setInput(),e.soundArray.push(this)},t.SoundRecorder.prototype.setInput=function(e){this.input.disconnect(),this.input=null,this.input=n.createGain(),this.input.connect(this._jsNode),this.input.connect(this.output),e?e.connect(this.input):t.soundOut.output.connect(this.input)},t.SoundRecorder.prototype.record=function(t,e,i){this.recording=!0,e&&(this.sampleLimit=Math.round(e*n.sampleRate)),t&&i?this._callback=function(){this.buffer=this._getBuffer(),t.setBuffer(this.buffer),i()}:t&&(this._callback=function(){this.buffer=this._getBuffer(),t.setBuffer(this.buffer)})},t.SoundRecorder.prototype.stop=function(){this.recording=!1,this._callback(),this._clear()},t.SoundRecorder.prototype._clear=function(){this._leftBuffers=[],this._rightBuffers=[],this.recordedSamples=0,this.sampleLimit=null},t.SoundRecorder.prototype._audioprocess=function(t){if(this.recording!==!1&&this.recording===!0)if(this.sampleLimit&&this.recordedSamples>=this.sampleLimit)this.stop();else{var e=t.inputBuffer.getChannelData(0),i=t.inputBuffer.getChannelData(1);this._leftBuffers.push(new Float32Array(e)),this._rightBuffers.push(new Float32Array(i)),this.recordedSamples+=this.bufferSize}},t.SoundRecorder.prototype._getBuffer=function(){var t=[];return t.push(this._mergeBuffers(this._leftBuffers)),t.push(this._mergeBuffers(this._rightBuffers)),t},t.SoundRecorder.prototype._mergeBuffers=function(t){for(var e=new Float32Array(this.recordedSamples),i=0,n=t.length,o=0;n>o;o++){var r=t[o];e.set(r,i),i+=r.length}return e},t.SoundRecorder.prototype.dispose=function(){this._clear();var t=e.soundArray.indexOf(this);e.soundArray.splice(t,1),this._callback=function(){},this.input&&this.input.disconnect(),this.input=null,this._jsNode=null},t.prototype.saveSound=function(e,n){const o=i(e.buffer);t.prototype.writeFile([o],n,"wav")}}(a,u);var at;at=function(){t.PeakDetect=function(t,e,i,n){this.framesPerPeak=n||20,this.framesSinceLastPeak=0,this.decayRate=.95,this.threshold=i||.35,this.cutoff=0,this.cutoffMult=1.5,this.energy=0,this.penergy=0,this.currentValue=0,this.isDetected=!1,this.f1=t||40,this.f2=e||2e4,this._onPeak=function(){}},t.PeakDetect.prototype.update=function(t){var e=this.energy=t.getEnergy(this.f1,this.f2)/255;e>this.cutoff&&e>this.threshold&&e-this.penergy>0?(this._onPeak(),this.isDetected=!0,this.cutoff=e*this.cutoffMult,this.framesSinceLastPeak=0):(this.isDetected=!1,this.framesSinceLastPeak<=this.framesPerPeak?this.framesSinceLastPeak++:(this.cutoff*=this.decayRate,this.cutoff=Math.max(this.cutoff,this.threshold))),this.currentValue=e,this.penergy=e},t.PeakDetect.prototype.onPeak=function(t,e){var i=this;i._onPeak=function(){t(i.energy,e)}}}();var ut;ut=function(){var e=a;t.Gain=function(){this.ac=e.audiocontext,this.input=this.ac.createGain(),this.output=this.ac.createGain(),this.input.gain.value=.5,this.input.connect(this.output),e.soundArray.push(this)},t.Gain.prototype.setInput=function(t){t.connect(this.input)},t.Gain.prototype.connect=function(e){var i=e||t.soundOut.input;this.output.connect(i.input?i.input:i)},t.Gain.prototype.disconnect=function(){this.output&&this.output.disconnect()},t.Gain.prototype.amp=function(t,i,n){var i=i||0,n=n||0,o=e.audiocontext.currentTime,r=this.output.gain.value;this.output.gain.cancelScheduledValues(o),this.output.gain.linearRampToValueAtTime(r,o+n),this.output.gain.linearRampToValueAtTime(t,o+n+i)},t.Gain.prototype.dispose=function(){var t=e.soundArray.indexOf(this);e.soundArray.splice(t,1),this.output&&(this.output.disconnect(),delete this.output),this.input&&(this.input.disconnect(),delete this.input)}}(a);var ct;ct=function(){var e=a;return t.AudioVoice=function(){this.ac=e.audiocontext,this.output=this.ac.createGain(),this.connect(),e.soundArray.push(this)},t.AudioVoice.prototype.play=function(t,e,i,n){},t.AudioVoice.prototype.triggerAttack=function(t,e,i){},t.AudioVoice.prototype.triggerRelease=function(t){},t.AudioVoice.prototype.amp=function(t,e){},t.AudioVoice.prototype.connect=function(t){var i=t||e.input;this.output.connect(i.input?i.input:i)},t.AudioVoice.prototype.disconnect=function(){this.output.disconnect()},t.AudioVoice.prototype.dispose=function(){this.output&&(this.output.disconnect(),delete this.output)},t.AudioVoice}(a);var pt;pt=function(){var e=a,i=ct,n=u.noteToFreq,o=.15;t.MonoSynth=function(){i.call(this),this.oscillator=new t.Oscillator,this.env=new t.Envelope,this.env.setRange(1,0),this.env.setExp(!0),this.setADSR(.02,.25,.05,.35),this.oscillator.disconnect(),this.oscillator.connect(this.output),this.env.disconnect(),this.env.setInput(this.output.gain),this.oscillator.output.gain.value=1,this.oscillator.start(),this.connect(),e.soundArray.push(this)},t.MonoSynth.prototype=Object.create(t.AudioVoice.prototype),t.MonoSynth.prototype.play=function(t,e,i,n){this.triggerAttack(t,e,~~i),this.triggerRelease(~~i+(n||o))},t.MonoSynth.prototype.triggerAttack=function(t,e,i){var i=~~i,o=n(t),r=e||.1;this.oscillator.freq(o,0,i),this.env.ramp(this.output.gain,i,r)},t.MonoSynth.prototype.triggerRelease=function(t){var t=t||0;this.env.ramp(this.output.gain,t,0)},t.MonoSynth.prototype.setADSR=function(t,e,i,n){this.env.setADSR(t,e,i,n)},Object.defineProperties(t.MonoSynth.prototype,{attack:{get:function(){return this.env.aTime},set:function(t){this.env.setADSR(t,this.env.dTime,this.env.sPercent,this.env.rTime)}},decay:{get:function(){return this.env.dTime},set:function(t){this.env.setADSR(this.env.aTime,t,this.env.sPercent,this.env.rTime)}},sustain:{get:function(){return this.env.sPercent},set:function(t){this.env.setADSR(this.env.aTime,this.env.dTime,t,this.env.rTime)}},release:{get:function(){return this.env.rTime},set:function(t){this.env.setADSR(this.env.aTime,this.env.dTime,this.env.sPercent,t)}}}),t.MonoSynth.prototype.amp=function(t,e){var i=e||0;return"undefined"!=typeof t&&this.oscillator.amp(t,i),this.oscillator.amp().value},t.MonoSynth.prototype.connect=function(t){var i=t||e.input;this.output.connect(i.input?i.input:i)},t.MonoSynth.prototype.disconnect=function(){this.output&&this.output.disconnect()},t.MonoSynth.prototype.dispose=function(){i.prototype.dispose.apply(this),this.env&&this.env.dispose(),this.oscillator&&this.oscillator.dispose()}}(a,ct,u);var ht;ht=function(){var e=a,i=q,n=u.noteToFreq;t.PolySynth=function(n,o){this.audiovoices=[],this.notes={},this._newest=0,this._oldest=0,this.maxVoices=o||8,this.AudioVoice=void 0===n?t.MonoSynth:n,this._voicesInUse=new i(0),this.output=e.audiocontext.createGain(),this.connect(),this._allocateVoices(),e.soundArray.push(this)},t.PolySynth.prototype._allocateVoices=function(){for(var t=0;tf?f:p}this.audiovoices[a].triggerAttack(c,p,s)},t.PolySynth.prototype._updateAfter=function(t,e){if(null!==this._voicesInUse._searchAfter(t)){this._voicesInUse._searchAfter(t).value+=e;var i=this._voicesInUse._searchAfter(t).time;this._updateAfter(i,e)}},t.PolySynth.prototype.noteRelease=function(t,i){var o=e.audiocontext.currentTime,r=i||0,s=o+r;if(t){var a=n(t);if(this.notes[a]&&null!==this.notes[a].getValueAtTime(s)){var u=Math.max(~~this._voicesInUse.getValueAtTime(s).value,1);this._voicesInUse.setValueAtTime(u-1,s),u>0&&this._updateAfter(s,-1),this.audiovoices[this.notes[a].getValueAtTime(s)].triggerRelease(r),this.notes[a].dispose(),delete this.notes[a],this._newest=0===this._newest?0:(this._newest-1)%(this.maxVoices-1)}else console.warn("Cannot release a note that is not already playing")}else{this.audiovoices.forEach(function(t){t.triggerRelease(r)}),this._voicesInUse.setValueAtTime(0,s);for(var c in this.notes)this.notes[c].dispose(),delete this.notes[c]}},t.PolySynth.prototype.connect=function(t){var i=t||e.input;this.output.connect(i.input?i.input:i)},t.PolySynth.prototype.disconnect=function(){this.output&&this.output.disconnect()},t.PolySynth.prototype.dispose=function(){this.audiovoices.forEach(function(t){t.dispose()}),this.output&&(this.output.disconnect(),delete this.output)}}(a,q,u);var lt;lt=function(){function e(t){for(var e,i="number"==typeof t?t:50,n=44100,o=new Float32Array(n),r=Math.PI/180,s=0;n>s;++s)e=2*s/n-1,o[s]=(3+i)*e*20*r/(Math.PI+i*Math.abs(e));return o}var i=Y;t.Distortion=function(n,o){if(i.call(this),"undefined"==typeof n&&(n=.25),"number"!=typeof n)throw new Error("amount must be a number");if("undefined"==typeof o&&(o="2x"),"string"!=typeof o)throw new Error("oversample must be a String");var r=t.prototype.map(n,0,1,0,2e3);this.waveShaperNode=this.ac.createWaveShaper(),this.amount=r,this.waveShaperNode.curve=e(r),this.waveShaperNode.oversample=o,this.input.connect(this.waveShaperNode),this.waveShaperNode.connect(this.wet)},t.Distortion.prototype=Object.create(i.prototype),t.Distortion.prototype.process=function(t,e,i){t.connect(this.input),this.set(e,i)},t.Distortion.prototype.set=function(i,n){if(i){var o=t.prototype.map(i,0,1,0,2e3);this.amount=o,this.waveShaperNode.curve=e(o)}n&&(this.waveShaperNode.oversample=n)},t.Distortion.prototype.getAmount=function(){return this.amount},t.Distortion.prototype.getOversample=function(){return this.waveShaperNode.oversample},t.Distortion.prototype.dispose=function(){i.prototype.dispose.apply(this),this.waveShaperNode&&(this.waveShaperNode.disconnect(),this.waveShaperNode=null)}}(Y);var ft;ft=function(){var t=a;return t}(e,s,a,u,c,p,h,l,f,k,O,M,E,V,R,z,Q,H,$,J,K,it,nt,ot,rt,st,at,ut,pt,ht,lt,ct,pt,ht)}); \ No newline at end of file diff --git a/public/js/p5-v1.1.9.min.js b/public/js/p5-v1.1.9.min.js new file mode 100644 index 0000000..275116f --- /dev/null +++ b/public/js/p5-v1.1.9.min.js @@ -0,0 +1,3 @@ +/*! p5.js v1.1.9 July 22, 2020 */ + +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).p5=e()}}(function(){return function o(i,s,l){function p(t,e){if(!s[t]){if(!i[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(u)return u(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var a=s[t]={exports:{}};i[t][0].call(a.exports,function(e){return p(i[t][1][e]||e)},a,a.exports,o,i,s,l)}return s[t].exports}for(var u="function"==typeof require&&require,e=0;ep5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},blue:{name:"blue",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},brightness:{name:"brightness",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},color:{name:"color",class:"p5",module:"Color",overloads:[{params:[{name:"gray",description:"

number specifying value between white and black.

\n",type:"Number"},{name:"alpha",description:"

alpha value relative to current color range\n (default is 0-255)

\n",type:"Number",optional:!0}]},{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}]},{params:[{name:"value",description:"

a color string

\n",type:"String"}]},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}]},{params:[{name:"color",description:"",type:"p5.Color"}]}]},green:{name:"green",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},hue:{name:"hue",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},lerpColor:{name:"lerpColor",params:[{name:"c1",description:"

interpolate from this color

\n",type:"p5.Color"},{name:"c2",description:"

interpolate to this color

\n",type:"p5.Color"},{name:"amt",description:"

number between 0 and 1

\n",type:"Number"}],class:"p5",module:"Color"},lightness:{name:"lightness",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},red:{name:"red",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},saturation:{name:"saturation",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},background:{name:"background",class:"p5",module:"Color",overloads:[{params:[{name:"color",description:'

any value created by the color() function

\n',type:"p5.Color"}],chainable:1},{params:[{name:"colorstring",description:"

color string, possible formats include: integer\n rgb() or rgba(), percentage rgb() or rgba(),\n 3-digit hex, 6-digit hex

\n",type:"String"},{name:"a",description:"

opacity of the background relative to current\n color range (default is 0-255)

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"gray",description:"

specifies a value between white and black

\n",type:"Number"},{name:"a",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"v1",description:"

red or hue value (depending on the current color\n mode)

\n",type:"Number"},{name:"v2",description:"

green or saturation value (depending on the current\n color mode)

\n",type:"Number"},{name:"v3",description:"

blue or brightness value (depending on the current\n color mode)

\n",type:"Number"},{name:"a",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"values",description:"

an array containing the red, green, blue\n and alpha components of the color

\n",type:"Number[]"}],chainable:1},{params:[{name:"image",description:'

image created with loadImage() or createImage(),\n to set as background\n (must be same size as the sketch window)

\n',type:"p5.Image"},{name:"a",description:"",type:"Number",optional:!0}],chainable:1}]},clear:{name:"clear",class:"p5",module:"Color"},colorMode:{name:"colorMode",class:"p5",module:"Color",overloads:[{params:[{name:"mode",description:"

either RGB, HSB or HSL, corresponding to\n Red/Green/Blue and Hue/Saturation/Brightness\n (or Lightness)

\n",type:"Constant"},{name:"max",description:"

range for all values

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"mode",description:"",type:"Constant"},{name:"max1",description:"

range for the red or hue depending on the\n current color mode

\n",type:"Number"},{name:"max2",description:"

range for the green or saturation depending\n on the current color mode

\n",type:"Number"},{name:"max3",description:"

range for the blue or brightness/lightness\n depending on the current color mode

\n",type:"Number"},{name:"maxA",description:"

range for the alpha

\n",type:"Number",optional:!0}],chainable:1}]},fill:{name:"fill",class:"p5",module:"Color",overloads:[{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

a color string

\n",type:"String"}],chainable:1},{params:[{name:"gray",description:"

a gray value

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}],chainable:1},{params:[{name:"color",description:"

the fill color

\n",type:"p5.Color"}],chainable:1}]},noFill:{name:"noFill",class:"p5",module:"Color"},noStroke:{name:"noStroke",class:"p5",module:"Color"},stroke:{name:"stroke",class:"p5",module:"Color",overloads:[{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

a color string

\n",type:"String"}],chainable:1},{params:[{name:"gray",description:"

a gray value

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}],chainable:1},{params:[{name:"color",description:"

the stroke color

\n",type:"p5.Color"}],chainable:1}]},erase:{name:"erase",params:[{name:"strengthFill",description:"

A number (0-255) for the strength of erasing for a shape's fill.\n This will default to 255 when no argument is given, which\n is full strength.

\n",type:"Number",optional:!0},{name:"strengthStroke",description:"

A number (0-255) for the strength of erasing for a shape's stroke.\n This will default to 255 when no argument is given, which\n is full strength.

\n",type:"Number",optional:!0}],class:"p5",module:"Color"},noErase:{name:"noErase",class:"p5",module:"Color"},arc:{name:"arc",params:[{name:"x",description:"

x-coordinate of the arc's ellipse

\n",type:"Number"},{name:"y",description:"

y-coordinate of the arc's ellipse

\n",type:"Number"},{name:"w",description:"

width of the arc's ellipse by default

\n",type:"Number"},{name:"h",description:"

height of the arc's ellipse by default

\n",type:"Number"},{name:"start",description:"

angle to start the arc, specified in radians

\n",type:"Number"},{name:"stop",description:"

angle to stop the arc, specified in radians

\n",type:"Number"},{name:"mode",description:"

optional parameter to determine the way of drawing\n the arc. either CHORD, PIE or OPEN

\n",type:"Constant",optional:!0},{name:"detail",description:"

optional parameter for WebGL mode only. This is to\n specify the number of vertices that makes up the\n perimeter of the arc. Default value is 25.

\n",type:"Number",optional:!0}],class:"p5",module:"Shape"},ellipse:{name:"ellipse",class:"p5",module:"Shape",overloads:[{params:[{name:"x",description:"

x-coordinate of the center of ellipse.

\n",type:"Number"},{name:"y",description:"

y-coordinate of the center of ellipse.

\n",type:"Number"},{name:"w",description:"

width of the ellipse.

\n",type:"Number"},{name:"h",description:"

height of the ellipse.

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"w",description:"",type:"Number"},{name:"h",description:"",type:"Number"},{name:"detail",description:"

number of radial sectors to draw (for WebGL mode)

\n",type:"Integer"}]}]},circle:{name:"circle",params:[{name:"x",description:"

x-coordinate of the centre of the circle.

\n",type:"Number"},{name:"y",description:"

y-coordinate of the centre of the circle.

\n",type:"Number"},{name:"d",description:"

diameter of the circle.

\n",type:"Number"}],class:"p5",module:"Shape"},line:{name:"line",class:"p5",module:"Shape",overloads:[{params:[{name:"x1",description:"

the x-coordinate of the first point

\n",type:"Number"},{name:"y1",description:"

the y-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"

the x-coordinate of the second point

\n",type:"Number"},{name:"y2",description:"

the y-coordinate of the second point

\n",type:"Number"}],chainable:1},{params:[{name:"x1",description:"",type:"Number"},{name:"y1",description:"",type:"Number"},{name:"z1",description:"

the z-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

the z-coordinate of the second point

\n",type:"Number"}],chainable:1}]},point:{name:"point",class:"p5",module:"Shape",overloads:[{params:[{name:"x",description:"

the x-coordinate

\n",type:"Number"},{name:"y",description:"

the y-coordinate

\n",type:"Number"},{name:"z",description:"

the z-coordinate (for WebGL mode)

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"coordinate_vector",description:"

the coordinate vector

\n",type:"p5.Vector"}],chainable:1}]},quad:{name:"quad",class:"p5",module:"Shape",overloads:[{params:[{name:"x1",description:"

the x-coordinate of the first point

\n",type:"Number"},{name:"y1",description:"

the y-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"

the x-coordinate of the second point

\n",type:"Number"},{name:"y2",description:"

the y-coordinate of the second point

\n",type:"Number"},{name:"x3",description:"

the x-coordinate of the third point

\n",type:"Number"},{name:"y3",description:"

the y-coordinate of the third point

\n",type:"Number"},{name:"x4",description:"

the x-coordinate of the fourth point

\n",type:"Number"},{name:"y4",description:"

the y-coordinate of the fourth point

\n",type:"Number"}],chainable:1},{params:[{name:"x1",description:"",type:"Number"},{name:"y1",description:"",type:"Number"},{name:"z1",description:"

the z-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

the z-coordinate of the second point

\n",type:"Number"},{name:"x3",description:"",type:"Number"},{name:"y3",description:"",type:"Number"},{name:"z3",description:"

the z-coordinate of the third point

\n",type:"Number"},{name:"x4",description:"",type:"Number"},{name:"y4",description:"",type:"Number"},{name:"z4",description:"

the z-coordinate of the fourth point

\n",type:"Number"}],chainable:1}]},rect:{name:"rect",class:"p5",module:"Shape",overloads:[{params:[{name:"x",description:"

x-coordinate of the rectangle.

\n",type:"Number"},{name:"y",description:"

y-coordinate of the rectangle.

\n",type:"Number"},{name:"w",description:"

width of the rectangle.

\n",type:"Number"},{name:"h",description:"

height of the rectangle.

\n",type:"Number",optional:!0},{name:"tl",description:"

optional radius of top-left corner.

\n",type:"Number",optional:!0},{name:"tr",description:"

optional radius of top-right corner.

\n",type:"Number",optional:!0},{name:"br",description:"

optional radius of bottom-right corner.

\n",type:"Number",optional:!0},{name:"bl",description:"

optional radius of bottom-left corner.

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"w",description:"",type:"Number"},{name:"h",description:"",type:"Number"},{name:"detailX",description:"

number of segments in the x-direction (for WebGL mode)

\n",type:"Integer",optional:!0},{name:"detailY",description:"

number of segments in the y-direction (for WebGL mode)

\n",type:"Integer",optional:!0}],chainable:1}]},square:{name:"square",params:[{name:"x",description:"

x-coordinate of the square.

\n",type:"Number"},{name:"y",description:"

y-coordinate of the square.

\n",type:"Number"},{name:"s",description:"

side size of the square.

\n",type:"Number"},{name:"tl",description:"

optional radius of top-left corner.

\n",type:"Number",optional:!0},{name:"tr",description:"

optional radius of top-right corner.

\n",type:"Number",optional:!0},{name:"br",description:"

optional radius of bottom-right corner.

\n",type:"Number",optional:!0},{name:"bl",description:"

optional radius of bottom-left corner.

\n",type:"Number",optional:!0}],class:"p5",module:"Shape"},triangle:{name:"triangle",params:[{name:"x1",description:"

x-coordinate of the first point

\n",type:"Number"},{name:"y1",description:"

y-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"

x-coordinate of the second point

\n",type:"Number"},{name:"y2",description:"

y-coordinate of the second point

\n",type:"Number"},{name:"x3",description:"

x-coordinate of the third point

\n",type:"Number"},{name:"y3",description:"

y-coordinate of the third point

\n",type:"Number"}],class:"p5",module:"Shape"},ellipseMode:{name:"ellipseMode",params:[{name:"mode",description:"

either CENTER, RADIUS, CORNER, or CORNERS

\n",type:"Constant"}],class:"p5",module:"Shape"},noSmooth:{name:"noSmooth",class:"p5",module:"Shape"},rectMode:{name:"rectMode",params:[{name:"mode",description:"

either CORNER, CORNERS, CENTER, or RADIUS

\n",type:"Constant"}],class:"p5",module:"Shape"},smooth:{name:"smooth",class:"p5",module:"Shape"},strokeCap:{name:"strokeCap",params:[{name:"cap",description:"

either ROUND, SQUARE or PROJECT

\n",type:"Constant"}],class:"p5",module:"Shape"},strokeJoin:{name:"strokeJoin",params:[{name:"join",description:"

either MITER, BEVEL, ROUND

\n",type:"Constant"}],class:"p5",module:"Shape"},strokeWeight:{name:"strokeWeight",params:[{name:"weight",description:"

the weight of the stroke (in pixels)

\n",type:"Number"}],class:"p5",module:"Shape"},bezier:{name:"bezier",class:"p5",module:"Shape",overloads:[{params:[{name:"x1",description:"

x-coordinate for the first anchor point

\n",type:"Number"},{name:"y1",description:"

y-coordinate for the first anchor point

\n",type:"Number"},{name:"x2",description:"

x-coordinate for the first control point

\n",type:"Number"},{name:"y2",description:"

y-coordinate for the first control point

\n",type:"Number"},{name:"x3",description:"

x-coordinate for the second control point

\n",type:"Number"},{name:"y3",description:"

y-coordinate for the second control point

\n",type:"Number"},{name:"x4",description:"

x-coordinate for the second anchor point

\n",type:"Number"},{name:"y4",description:"

y-coordinate for the second anchor point

\n",type:"Number"}],chainable:1},{params:[{name:"x1",description:"",type:"Number"},{name:"y1",description:"",type:"Number"},{name:"z1",description:"

z-coordinate for the first anchor point

\n",type:"Number"},{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

z-coordinate for the first control point

\n",type:"Number"},{name:"x3",description:"",type:"Number"},{name:"y3",description:"",type:"Number"},{name:"z3",description:"

z-coordinate for the second control point

\n",type:"Number"},{name:"x4",description:"",type:"Number"},{name:"y4",description:"",type:"Number"},{name:"z4",description:"

z-coordinate for the second anchor point

\n",type:"Number"}],chainable:1}]},bezierDetail:{name:"bezierDetail",params:[{name:"detail",description:"

resolution of the curves

\n",type:"Number"}],class:"p5",module:"Shape"},bezierPoint:{name:"bezierPoint",params:[{name:"a",description:"

coordinate of first point on the curve

\n",type:"Number"},{name:"b",description:"

coordinate of first control point

\n",type:"Number"},{name:"c",description:"

coordinate of second control point

\n",type:"Number"},{name:"d",description:"

coordinate of second point on the curve

\n",type:"Number"},{name:"t",description:"

value between 0 and 1

\n",type:"Number"}],class:"p5",module:"Shape"},bezierTangent:{name:"bezierTangent",params:[{name:"a",description:"

coordinate of first point on the curve

\n",type:"Number"},{name:"b",description:"

coordinate of first control point

\n",type:"Number"},{name:"c",description:"

coordinate of second control point

\n",type:"Number"},{name:"d",description:"

coordinate of second point on the curve

\n",type:"Number"},{name:"t",description:"

value between 0 and 1

\n",type:"Number"}],class:"p5",module:"Shape"},curve:{name:"curve",class:"p5",module:"Shape",overloads:[{params:[{name:"x1",description:"

x-coordinate for the beginning control point

\n",type:"Number"},{name:"y1",description:"

y-coordinate for the beginning control point

\n",type:"Number"},{name:"x2",description:"

x-coordinate for the first point

\n",type:"Number"},{name:"y2",description:"

y-coordinate for the first point

\n",type:"Number"},{name:"x3",description:"

x-coordinate for the second point

\n",type:"Number"},{name:"y3",description:"

y-coordinate for the second point

\n",type:"Number"},{name:"x4",description:"

x-coordinate for the ending control point

\n",type:"Number"},{name:"y4",description:"

y-coordinate for the ending control point

\n",type:"Number"}],chainable:1},{params:[{name:"x1",description:"",type:"Number"},{name:"y1",description:"",type:"Number"},{name:"z1",description:"

z-coordinate for the beginning control point

\n",type:"Number"},{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

z-coordinate for the first point

\n",type:"Number"},{name:"x3",description:"",type:"Number"},{name:"y3",description:"",type:"Number"},{name:"z3",description:"

z-coordinate for the second point

\n",type:"Number"},{name:"x4",description:"",type:"Number"},{name:"y4",description:"",type:"Number"},{name:"z4",description:"

z-coordinate for the ending control point

\n",type:"Number"}],chainable:1}]},curveDetail:{name:"curveDetail",params:[{name:"resolution",description:"

resolution of the curves

\n",type:"Number"}],class:"p5",module:"Shape"},curveTightness:{name:"curveTightness",params:[{name:"amount",description:"

amount of deformation from the original vertices

\n",type:"Number"}],class:"p5",module:"Shape"},curvePoint:{name:"curvePoint",params:[{name:"a",description:"

coordinate of first control point of the curve

\n",type:"Number"},{name:"b",description:"

coordinate of first point

\n",type:"Number"},{name:"c",description:"

coordinate of second point

\n",type:"Number"},{name:"d",description:"

coordinate of second control point

\n",type:"Number"},{name:"t",description:"

value between 0 and 1

\n",type:"Number"}],class:"p5",module:"Shape"},curveTangent:{name:"curveTangent",params:[{name:"a",description:"

coordinate of first control point

\n",type:"Number"},{name:"b",description:"

coordinate of first point on the curve

\n",type:"Number"},{name:"c",description:"

coordinate of second point on the curve

\n",type:"Number"},{name:"d",description:"

coordinate of second conrol point

\n",type:"Number"},{name:"t",description:"

value between 0 and 1

\n",type:"Number"}],class:"p5",module:"Shape"},beginContour:{name:"beginContour",class:"p5",module:"Shape"},beginShape:{name:"beginShape",params:[{name:"kind",description:"

either POINTS, LINES, TRIANGLES, TRIANGLE_FAN\n TRIANGLE_STRIP, QUADS, QUAD_STRIP or TESS

\n",type:"Constant",optional:!0}],class:"p5",module:"Shape"},bezierVertex:{name:"bezierVertex",class:"p5",module:"Shape",overloads:[{params:[{name:"x2",description:"

x-coordinate for the first control point

\n",type:"Number"},{name:"y2",description:"

y-coordinate for the first control point

\n",type:"Number"},{name:"x3",description:"

x-coordinate for the second control point

\n",type:"Number"},{name:"y3",description:"

y-coordinate for the second control point

\n",type:"Number"},{name:"x4",description:"

x-coordinate for the anchor point

\n",type:"Number"},{name:"y4",description:"

y-coordinate for the anchor point

\n",type:"Number"}],chainable:1},{params:[{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

z-coordinate for the first control point (for WebGL mode)

\n",type:"Number"},{name:"x3",description:"",type:"Number"},{name:"y3",description:"",type:"Number"},{name:"z3",description:"

z-coordinate for the second control point (for WebGL mode)

\n",type:"Number"},{name:"x4",description:"",type:"Number"},{name:"y4",description:"",type:"Number"},{name:"z4",description:"

z-coordinate for the anchor point (for WebGL mode)

\n",type:"Number"}],chainable:1}]},curveVertex:{name:"curveVertex",class:"p5",module:"Shape",overloads:[{params:[{name:"x",description:"

x-coordinate of the vertex

\n",type:"Number"},{name:"y",description:"

y-coordinate of the vertex

\n",type:"Number"}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"

z-coordinate of the vertex (for WebGL mode)

\n",type:"Number",optional:!0}],chainable:1}]},endContour:{name:"endContour",class:"p5",module:"Shape"},endShape:{name:"endShape",params:[{name:"mode",description:"

use CLOSE to close the shape

\n",type:"Constant",optional:!0}],class:"p5",module:"Shape"},quadraticVertex:{name:"quadraticVertex",class:"p5",module:"Shape",overloads:[{params:[{name:"cx",description:"

x-coordinate for the control point

\n",type:"Number"},{name:"cy",description:"

y-coordinate for the control point

\n",type:"Number"},{name:"x3",description:"

x-coordinate for the anchor point

\n",type:"Number"},{name:"y3",description:"

y-coordinate for the anchor point

\n",type:"Number"}],chainable:1},{params:[{name:"cx",description:"",type:"Number"},{name:"cy",description:"",type:"Number"},{name:"cz",description:"

z-coordinate for the control point (for WebGL mode)

\n",type:"Number"},{name:"x3",description:"",type:"Number"},{name:"y3",description:"",type:"Number"},{name:"z3",description:"

z-coordinate for the anchor point (for WebGL mode)

\n",type:"Number"}],chainable:1}]},vertex:{name:"vertex",class:"p5",module:"Shape",overloads:[{params:[{name:"x",description:"

x-coordinate of the vertex

\n",type:"Number"},{name:"y",description:"

y-coordinate of the vertex

\n",type:"Number"}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"

z-coordinate of the vertex

\n",type:"Number"},{name:"u",description:"

the vertex's texture u-coordinate

\n",type:"Number",optional:!0},{name:"v",description:"

the vertex's texture v-coordinate

\n",type:"Number",optional:!0}],chainable:1}]},P2D:{name:"P2D",class:"p5",module:"Constants"},WEBGL:{name:"WEBGL",class:"p5",module:"Constants"},ARROW:{name:"ARROW",class:"p5",module:"Constants"},CROSS:{name:"CROSS",class:"p5",module:"Constants"},HAND:{name:"HAND",class:"p5",module:"Constants"},MOVE:{name:"MOVE",class:"p5",module:"Constants"},TEXT:{name:"TEXT",class:"p5",module:"Constants"},WAIT:{name:"WAIT",class:"p5",module:"Constants"},HALF_PI:{name:"HALF_PI",class:"p5",module:"Constants"},PI:{name:"PI",class:"p5",module:"Constants"},QUARTER_PI:{name:"QUARTER_PI",class:"p5",module:"Constants"},TAU:{name:"TAU",class:"p5",module:"Constants"},TWO_PI:{name:"TWO_PI",class:"p5",module:"Constants"},DEGREES:{name:"DEGREES",class:"p5",module:"Constants"},RADIANS:{name:"RADIANS",class:"p5",module:"Constants"},CORNER:{name:"CORNER",class:"p5",module:"Constants"},CORNERS:{name:"CORNERS",class:"p5",module:"Constants"},RADIUS:{name:"RADIUS",class:"p5",module:"Constants"},RIGHT:{name:"RIGHT",class:"p5",module:"Constants"},LEFT:{name:"LEFT",class:"p5",module:"Constants"},CENTER:{name:"CENTER",class:"p5",module:"Constants"},TOP:{name:"TOP",class:"p5",module:"Constants"},BOTTOM:{name:"BOTTOM",class:"p5",module:"Constants"},BASELINE:{name:"BASELINE",class:"p5",module:"Constants"},POINTS:{name:"POINTS",class:"p5",module:"Constants"},LINES:{name:"LINES",class:"p5",module:"Constants"},LINE_STRIP:{name:"LINE_STRIP",class:"p5",module:"Constants"},LINE_LOOP:{name:"LINE_LOOP",class:"p5",module:"Constants"},TRIANGLES:{name:"TRIANGLES",class:"p5",module:"Constants"},TRIANGLE_FAN:{name:"TRIANGLE_FAN",class:"p5",module:"Constants"},TRIANGLE_STRIP:{name:"TRIANGLE_STRIP",class:"p5",module:"Constants"},QUADS:{name:"QUADS",class:"p5",module:"Constants"},QUAD_STRIP:{name:"QUAD_STRIP",class:"p5",module:"Constants"},TESS:{name:"TESS",class:"p5",module:"Constants"},CLOSE:{name:"CLOSE",class:"p5",module:"Constants"},OPEN:{name:"OPEN",class:"p5",module:"Constants"},CHORD:{name:"CHORD",class:"p5",module:"Constants"},PIE:{name:"PIE",class:"p5",module:"Constants"},PROJECT:{name:"PROJECT",class:"p5",module:"Constants"},SQUARE:{name:"SQUARE",class:"p5",module:"Constants"},ROUND:{name:"ROUND",class:"p5",module:"Constants"},BEVEL:{name:"BEVEL",class:"p5",module:"Constants"},MITER:{name:"MITER",class:"p5",module:"Constants"},RGB:{name:"RGB",class:"p5",module:"Constants"},HSB:{name:"HSB",class:"p5",module:"Constants"},HSL:{name:"HSL",class:"p5",module:"Constants"},AUTO:{name:"AUTO",class:"p5",module:"Constants"},ALT:{name:"ALT",class:"p5",module:"Constants"},BACKSPACE:{name:"BACKSPACE",class:"p5",module:"Constants"},CONTROL:{name:"CONTROL",class:"p5",module:"Constants"},DELETE:{name:"DELETE",class:"p5",module:"Constants"},DOWN_ARROW:{name:"DOWN_ARROW",class:"p5",module:"Constants"},ENTER:{name:"ENTER",class:"p5",module:"Constants"},ESCAPE:{name:"ESCAPE",class:"p5",module:"Constants"},LEFT_ARROW:{name:"LEFT_ARROW",class:"p5",module:"Constants"},OPTION:{name:"OPTION",class:"p5",module:"Constants"},RETURN:{name:"RETURN",class:"p5",module:"Constants"},RIGHT_ARROW:{name:"RIGHT_ARROW",class:"p5",module:"Constants"},SHIFT:{name:"SHIFT",class:"p5",module:"Constants"},TAB:{name:"TAB",class:"p5",module:"Constants"},UP_ARROW:{name:"UP_ARROW",class:"p5",module:"Constants"},BLEND:{name:"BLEND",class:"p5",module:"Constants"},REMOVE:{name:"REMOVE",class:"p5",module:"Constants"},ADD:{name:"ADD",class:"p5",module:"Constants"},DARKEST:{name:"DARKEST",class:"p5",module:"Constants"},LIGHTEST:{name:"LIGHTEST",class:"p5",module:"Constants"},DIFFERENCE:{name:"DIFFERENCE",class:"p5",module:"Constants"},SUBTRACT:{name:"SUBTRACT",class:"p5",module:"Constants"},EXCLUSION:{name:"EXCLUSION",class:"p5",module:"Constants"},MULTIPLY:{name:"MULTIPLY",class:"p5",module:"Constants"},SCREEN:{name:"SCREEN",class:"p5",module:"Constants"},REPLACE:{name:"REPLACE",class:"p5",module:"Constants"},OVERLAY:{name:"OVERLAY",class:"p5",module:"Constants"},HARD_LIGHT:{name:"HARD_LIGHT",class:"p5",module:"Constants"},SOFT_LIGHT:{name:"SOFT_LIGHT",class:"p5",module:"Constants"},DODGE:{name:"DODGE",class:"p5",module:"Constants"},BURN:{name:"BURN",class:"p5",module:"Constants"},THRESHOLD:{name:"THRESHOLD",class:"p5",module:"Constants"},GRAY:{name:"GRAY",class:"p5",module:"Constants"},OPAQUE:{name:"OPAQUE",class:"p5",module:"Constants"},INVERT:{name:"INVERT",class:"p5",module:"Constants"},POSTERIZE:{name:"POSTERIZE",class:"p5",module:"Constants"},DILATE:{name:"DILATE",class:"p5",module:"Constants"},ERODE:{name:"ERODE",class:"p5",module:"Constants"},BLUR:{name:"BLUR",class:"p5",module:"Constants"},NORMAL:{name:"NORMAL",class:"p5",module:"Constants"},ITALIC:{name:"ITALIC",class:"p5",module:"Constants"},BOLD:{name:"BOLD",class:"p5",module:"Constants"},BOLDITALIC:{name:"BOLDITALIC",class:"p5",module:"Constants"},LINEAR:{name:"LINEAR",class:"p5",module:"Constants"},QUADRATIC:{name:"QUADRATIC",class:"p5",module:"Constants"},BEZIER:{name:"BEZIER",class:"p5",module:"Constants"},CURVE:{name:"CURVE",class:"p5",module:"Constants"},STROKE:{name:"STROKE",class:"p5",module:"Constants"},FILL:{name:"FILL",class:"p5",module:"Constants"},TEXTURE:{name:"TEXTURE",class:"p5",module:"Constants"},IMMEDIATE:{name:"IMMEDIATE",class:"p5",module:"Constants"},IMAGE:{name:"IMAGE",class:"p5",module:"Constants"},NEAREST:{name:"NEAREST",class:"p5",module:"Constants"},REPEAT:{name:"REPEAT",class:"p5",module:"Constants"},CLAMP:{name:"CLAMP",class:"p5",module:"Constants"},MIRROR:{name:"MIRROR",class:"p5",module:"Constants"},LANDSCAPE:{name:"LANDSCAPE",class:"p5",module:"Constants"},PORTRAIT:{name:"PORTRAIT",class:"p5",module:"Constants"},GRID:{name:"GRID",class:"p5",module:"Constants"},AXES:{name:"AXES",class:"p5",module:"Constants"},print:{name:"print",params:[{name:"contents",description:"

any combination of Number, String, Object, Boolean,\n Array to print

\n",type:"Any"}],class:"p5",module:"Environment"},frameCount:{name:"frameCount",class:"p5",module:"Environment"},deltaTime:{name:"deltaTime",class:"p5",module:"Environment"},focused:{name:"focused",class:"p5",module:"Environment"},cursor:{name:"cursor",params:[{name:"type",description:"

Built-In: either ARROW, CROSS, HAND, MOVE, TEXT and WAIT\n Native CSS properties: 'grab', 'progress', 'cell' etc.\n External: path for cursor's images\n (Allowed File extensions: .cur, .gif, .jpg, .jpeg, .png)\n For more information on Native CSS cursors and url visit:\n https://developer.mozilla.org/en-US/docs/Web/CSS/cursor

\n",type:"String|Constant"},{name:"x",description:"

the horizontal active spot of the cursor (must be less than 32)

\n",type:"Number",optional:!0},{name:"y",description:"

the vertical active spot of the cursor (must be less than 32)

\n",type:"Number",optional:!0}],class:"p5",module:"Environment"},frameRate:{name:"frameRate",class:"p5",module:"Environment",overloads:[{params:[{name:"fps",description:"

number of frames to be displayed every second

\n",type:"Number"}],chainable:1},{params:[]}]},noCursor:{name:"noCursor",class:"p5",module:"Environment"},displayWidth:{name:"displayWidth",class:"p5",module:"Environment"},displayHeight:{name:"displayHeight",class:"p5",module:"Environment"},windowWidth:{name:"windowWidth",class:"p5",module:"Environment"},windowHeight:{name:"windowHeight",class:"p5",module:"Environment"},windowResized:{name:"windowResized",class:"p5",module:"Environment"},width:{name:"width",class:"p5",module:"Environment"},height:{name:"height",class:"p5",module:"Environment"},fullscreen:{name:"fullscreen",params:[{name:"val",description:"

whether the sketch should be in fullscreen mode\nor not

\n",type:"Boolean",optional:!0}],class:"p5",module:"Environment"},pixelDensity:{name:"pixelDensity",class:"p5",module:"Environment",overloads:[{params:[{name:"val",description:"

whether or how much the sketch should scale

\n",type:"Number"}],chainable:1},{params:[]}]},displayDensity:{name:"displayDensity",class:"p5",module:"Environment"},getURL:{name:"getURL",class:"p5",module:"Environment"},getURLPath:{name:"getURLPath",class:"p5",module:"Environment"},getURLParams:{name:"getURLParams",class:"p5",module:"Environment"},preload:{name:"preload",class:"p5",module:"Structure"},setup:{name:"setup",class:"p5",module:"Structure"},draw:{name:"draw",class:"p5",module:"Structure"},remove:{name:"remove",class:"p5",module:"Structure"},disableFriendlyErrors:{name:"disableFriendlyErrors",class:"p5",module:"Structure"},let:{name:"let",class:"p5",module:"Foundation"},const:{name:"const",class:"p5",module:"Foundation"},"===":{name:"===",class:"p5",module:"Foundation"},">":{name:">",class:"p5",module:"Foundation"},">=":{name:">=",class:"p5",module:"Foundation"},"<":{name:"<",class:"p5",module:"Foundation"},"<=":{name:"<=",class:"p5",module:"Foundation"},"if-else":{name:"if-else",class:"p5",module:"Foundation"},function:{name:"function",class:"p5",module:"Foundation"},return:{name:"return",class:"p5",module:"Foundation"},boolean:{name:"boolean",params:[{name:"n",description:"

value to parse

\n",type:"String|Boolean|Number|Array"}],class:"p5",module:"Data"},string:{name:"string",class:"p5",module:"Foundation"},number:{name:"number",class:"p5",module:"Foundation"},object:{name:"object",class:"p5",module:"Foundation"},class:{name:"class",class:"p5",module:"Foundation"},for:{name:"for",class:"p5",module:"Foundation"},while:{name:"while",class:"p5",module:"Foundation"},createCanvas:{name:"createCanvas",params:[{name:"w",description:"

width of the canvas

\n",type:"Number"},{name:"h",description:"

height of the canvas

\n",type:"Number"},{name:"renderer",description:"

either P2D or WEBGL

\n",type:"Constant",optional:!0}],class:"p5",module:"Rendering"},resizeCanvas:{name:"resizeCanvas",params:[{name:"w",description:"

width of the canvas

\n",type:"Number"},{name:"h",description:"

height of the canvas

\n",type:"Number"},{name:"noRedraw",description:"

don't redraw the canvas immediately

\n",type:"Boolean",optional:!0}],class:"p5",module:"Rendering"},noCanvas:{name:"noCanvas",class:"p5",module:"Rendering"},createGraphics:{name:"createGraphics",params:[{name:"w",description:"

width of the offscreen graphics buffer

\n",type:"Number"},{name:"h",description:"

height of the offscreen graphics buffer

\n",type:"Number"},{name:"renderer",description:"

either P2D or WEBGL\n undefined defaults to p2d

\n",type:"Constant",optional:!0}],class:"p5",module:"Rendering"},blendMode:{name:"blendMode",params:[{name:"mode",description:"

blend mode to set for canvas.\n either BLEND, DARKEST, LIGHTEST, DIFFERENCE, MULTIPLY,\n EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,\n SOFT_LIGHT, DODGE, BURN, ADD, REMOVE or SUBTRACT

\n",type:"Constant"}],class:"p5",module:"Rendering"},drawingContext:{name:"drawingContext",class:"p5",module:"Rendering"},noLoop:{name:"noLoop",class:"p5",module:"Structure"},loop:{name:"loop",class:"p5",module:"Structure"},isLooping:{name:"isLooping",class:"p5",module:"Structure"},push:{name:"push",class:"p5",module:"Structure"},pop:{name:"pop",class:"p5",module:"Structure"},redraw:{name:"redraw",params:[{name:"n",description:"

Redraw for n-times. The default value is 1.

\n",type:"Integer",optional:!0}],class:"p5",module:"Structure"},p5:{name:"p5",params:[{name:"sketch",description:"

a function containing a p5.js sketch

\n",type:"Object"},{name:"node",description:"

ID or pointer to HTML DOM node to contain sketch in

\n",type:"String|Object"}],class:"p5",module:"Structure"},applyMatrix:{name:"applyMatrix",params:[{name:"a",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"},{name:"b",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"},{name:"c",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"},{name:"d",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"},{name:"e",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"},{name:"f",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"}],class:"p5",module:"Transform"},resetMatrix:{name:"resetMatrix",class:"p5",module:"Transform"},rotate:{name:"rotate",params:[{name:"angle",description:"

the angle of rotation, specified in radians\n or degrees, depending on current angleMode

\n",type:"Number"},{name:"axis",description:"

(in 3d) the axis to rotate around

\n",type:"p5.Vector|Number[]",optional:!0}],class:"p5",module:"Transform"},rotateX:{name:"rotateX",params:[{name:"angle",description:"

the angle of rotation, specified in radians\n or degrees, depending on current angleMode

\n",type:"Number"}],class:"p5",module:"Transform"},rotateY:{name:"rotateY",params:[{name:"angle",description:"

the angle of rotation, specified in radians\n or degrees, depending on current angleMode

\n",type:"Number"}],class:"p5",module:"Transform"},rotateZ:{name:"rotateZ",params:[{name:"angle",description:"

the angle of rotation, specified in radians\n or degrees, depending on current angleMode

\n",type:"Number"}],class:"p5",module:"Transform"},scale:{name:"scale",class:"p5",module:"Transform",overloads:[{params:[{name:"s",description:"

percent to scale the object, or percentage to\n scale the object in the x-axis if multiple arguments\n are given

\n",type:"Number|p5.Vector|Number[]"},{name:"y",description:"

percent to scale the object in the y-axis

\n",type:"Number",optional:!0},{name:"z",description:"

percent to scale the object in the z-axis (webgl only)

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"scales",description:"

per-axis percents to scale the object

\n",type:"p5.Vector|Number[]"}],chainable:1}]},shearX:{name:"shearX",params:[{name:"angle",description:"

angle of shear specified in radians or degrees,\n depending on current angleMode

\n",type:"Number"}],class:"p5",module:"Transform"},shearY:{name:"shearY",params:[{name:"angle",description:"

angle of shear specified in radians or degrees,\n depending on current angleMode

\n",type:"Number"}],class:"p5",module:"Transform"},translate:{name:"translate",class:"p5",module:"Transform",overloads:[{params:[{name:"x",description:"

left/right translation

\n",type:"Number"},{name:"y",description:"

up/down translation

\n",type:"Number"},{name:"z",description:"

forward/backward translation (webgl only)

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"vector",description:"

the vector to translate by

\n",type:"p5.Vector"}],chainable:1}]},storeItem:{name:"storeItem",params:[{name:"key",description:"",type:"String"},{name:"value",description:"",type:"String|Number|Object|Boolean|p5.Color|p5.Vector"}],class:"p5",module:"Data"},getItem:{name:"getItem",params:[{name:"key",description:"

name that you wish to use to store in local storage

\n",type:"String"}],class:"p5",module:"Data"},clearStorage:{name:"clearStorage",class:"p5",module:"Data"},removeItem:{name:"removeItem",params:[{name:"key",description:"",type:"String"}],class:"p5",module:"Data"},createStringDict:{name:"createStringDict",class:"p5",module:"Data",overloads:[{params:[{name:"key",description:"",type:"String"},{name:"value",description:"",type:"String"}]},{params:[{name:"object",description:"

object

\n",type:"Object"}]}]},createNumberDict:{name:"createNumberDict",class:"p5",module:"Data",overloads:[{params:[{name:"key",description:"",type:"Number"},{name:"value",description:"",type:"Number"}]},{params:[{name:"object",description:"

object

\n",type:"Object"}]}]},select:{name:"select",params:[{name:"selectors",description:"

CSS selector string of element to search for

\n",type:"String"},{name:"container",description:'

CSS selector string, p5.Element, or\n HTML element to search within

\n',type:"String|p5.Element|HTMLElement",optional:!0}],class:"p5",module:"DOM"},selectAll:{name:"selectAll",params:[{name:"selectors",description:"

CSS selector string of elements to search for

\n",type:"String"},{name:"container",description:'

CSS selector string, p5.Element\n , or HTML element to search within

\n',type:"String|p5.Element|HTMLElement",optional:!0}],class:"p5",module:"DOM"},removeElements:{name:"removeElements",class:"p5",module:"DOM"},changed:{name:"changed",params:[{name:"fxn",description:"

function to be fired when the value of\n an element changes.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5",module:"DOM"},input:{name:"input",params:[{name:"fxn",description:"

function to be fired when any user input is\n detected within the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5",module:"DOM"},createDiv:{name:"createDiv",params:[{name:"html",description:"

inner HTML for element created

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},createP:{name:"createP",params:[{name:"html",description:"

inner HTML for element created

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},createSpan:{name:"createSpan",params:[{name:"html",description:"

inner HTML for element created

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},createImg:{name:"createImg",class:"p5",module:"DOM",overloads:[{params:[{name:"src",description:"

src path or url for image

\n",type:"String"},{name:"alt",description:'

alternate text to be used if image does not load. You can use also an empty string ("") if that an image is not intended to be viewed.

\n',type:"String"}]},{params:[{name:"src",description:"",type:"String"},{name:"alt",description:"",type:"String"},{name:"crossOrigin",description:"

crossOrigin property of the img element; use either 'anonymous' or 'use-credentials' to retrieve the image with cross-origin access (for later use with canvas. if an empty string(\"\") is passed, CORS is not used

\n",type:"String"},{name:"successCallback",description:'

callback to be called once image data is loaded with the p5.Element as argument

\n',type:"Function",optional:!0}]}]},createA:{name:"createA",params:[{name:"href",description:"

url of page to link to

\n",type:"String"},{name:"html",description:"

inner html of link element to display

\n",type:"String"},{name:"target",description:"

target where new link should open,\n could be _blank, _self, _parent, _top.

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},createSlider:{name:"createSlider",params:[{name:"min",description:"

minimum value of the slider

\n",type:"Number"},{name:"max",description:"

maximum value of the slider

\n",type:"Number"},{name:"value",description:"

default value of the slider

\n",type:"Number",optional:!0},{name:"step",description:"

step size for each tick of the slider (if step is set to 0, the slider will move continuously from the minimum to the maximum value)

\n",type:"Number",optional:!0}],class:"p5",module:"DOM"},createButton:{name:"createButton",params:[{name:"label",description:"

label displayed on the button

\n",type:"String"},{name:"value",description:"

value of the button

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},createCheckbox:{name:"createCheckbox",params:[{name:"label",description:"

label displayed after checkbox

\n",type:"String",optional:!0},{name:"value",description:"

value of the checkbox; checked is true, unchecked is false

\n",type:"Boolean",optional:!0}],class:"p5",module:"DOM"},createSelect:{name:"createSelect",class:"p5",module:"DOM",overloads:[{params:[{name:"multiple",description:"

true if dropdown should support multiple selections

\n",type:"Boolean",optional:!0}]},{params:[{name:"existing",description:"

DOM select element

\n",type:"Object"}]}]},createRadio:{name:"createRadio",class:"p5",module:"DOM",overloads:[{params:[{name:"containerElement",description:"

An container HTML Element either a div\nor span inside which all existing radio inputs will be considered as options.

\n",type:"Object"},{name:"name",description:"

A name parameter for each Input Element.

\n",type:"String",optional:!0}]},{params:[{name:"name",description:"",type:"String"}]},{params:[]}]},createColorPicker:{name:"createColorPicker",params:[{name:"value",description:"

default color of element

\n",type:"String|p5.Color",optional:!0}],class:"p5",module:"DOM"},createInput:{name:"createInput",class:"p5",module:"DOM",overloads:[{params:[{name:"value",description:"

default value of the input box

\n",type:"String"},{name:"type",description:"

type of text, ie text, password etc. Defaults to text.\n Needs a value to be specified first.

\n",type:"String",optional:!0}]},{params:[{name:"value",description:"",type:"String",optional:!0}]}]},createFileInput:{name:"createFileInput",params:[{name:"callback",description:"

callback function for when a file is loaded

\n",type:"Function"},{name:"multiple",description:"

optional, to allow multiple files to be selected

\n",type:"Boolean",optional:!0}],class:"p5",module:"DOM"},createVideo:{name:"createVideo",params:[{name:"src",description:"

path to a video file, or array of paths for\n supporting different browsers

\n",type:"String|String[]"},{name:"callback",description:"

callback function to be called upon\n 'canplaythrough' event fire, that is, when the\n browser can play the media, and estimates that\n enough data has been loaded to play the media\n up to its end without having to stop for\n further buffering of content

\n",type:"Function",optional:!0}],class:"p5",module:"DOM"},createAudio:{name:"createAudio",params:[{name:"src",description:"

path to an audio file, or array of paths\n for supporting different browsers

\n",type:"String|String[]",optional:!0},{name:"callback",description:"

callback function to be called upon\n 'canplaythrough' event fire, that is, when the\n browser can play the media, and estimates that\n enough data has been loaded to play the media\n up to its end without having to stop for\n further buffering of content

\n",type:"Function",optional:!0}],class:"p5",module:"DOM"},VIDEO:{name:"VIDEO",class:"p5",module:"DOM"},AUDIO:{name:"AUDIO",class:"p5",module:"DOM"},createCapture:{name:"createCapture",params:[{name:"type",description:"

type of capture, either VIDEO or\n AUDIO if none specified, default both,\n or a Constraints object

\n",type:"String|Constant|Object"},{name:"callback",description:"

function to be called once\n stream has loaded

\n",type:"Function",optional:!0}],class:"p5",module:"DOM"},createElement:{name:"createElement",params:[{name:"tag",description:"

tag for the new element

\n",type:"String"},{name:"content",description:"

html content to be inserted into the element

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},deviceOrientation:{name:"deviceOrientation",class:"p5",module:"Events"},accelerationX:{name:"accelerationX",class:"p5",module:"Events"},accelerationY:{name:"accelerationY",class:"p5",module:"Events"},accelerationZ:{name:"accelerationZ",class:"p5",module:"Events"},pAccelerationX:{name:"pAccelerationX",class:"p5",module:"Events"},pAccelerationY:{name:"pAccelerationY",class:"p5",module:"Events"},pAccelerationZ:{name:"pAccelerationZ",class:"p5",module:"Events"},rotationX:{name:"rotationX",class:"p5",module:"Events"},rotationY:{name:"rotationY",class:"p5",module:"Events"},rotationZ:{name:"rotationZ",class:"p5",module:"Events"},pRotationX:{name:"pRotationX",class:"p5",module:"Events"},pRotationY:{name:"pRotationY",class:"p5",module:"Events"},pRotationZ:{name:"pRotationZ",class:"p5",module:"Events"},turnAxis:{name:"turnAxis",class:"p5",module:"Events"},setMoveThreshold:{name:"setMoveThreshold",params:[{name:"value",description:"

The threshold value

\n",type:"Number"}],class:"p5",module:"Events"},setShakeThreshold:{name:"setShakeThreshold",params:[{name:"value",description:"

The threshold value

\n",type:"Number"}],class:"p5",module:"Events"},deviceMoved:{name:"deviceMoved",class:"p5",module:"Events"},deviceTurned:{name:"deviceTurned",class:"p5",module:"Events"},deviceShaken:{name:"deviceShaken",class:"p5",module:"Events"},keyIsPressed:{name:"keyIsPressed",class:"p5",module:"Events"},key:{name:"key",class:"p5",module:"Events"},keyCode:{name:"keyCode",class:"p5",module:"Events"},keyPressed:{name:"keyPressed",class:"p5",module:"Events"},keyReleased:{name:"keyReleased",class:"p5",module:"Events"},keyTyped:{name:"keyTyped",class:"p5",module:"Events"},keyIsDown:{name:"keyIsDown",params:[{name:"code",description:"

The key to check for.

\n",type:"Number"}],class:"p5",module:"Events"},movedX:{name:"movedX",class:"p5",module:"Events"},movedY:{name:"movedY",class:"p5",module:"Events"},mouseX:{name:"mouseX",class:"p5",module:"Events"},mouseY:{name:"mouseY",class:"p5",module:"Events"},pmouseX:{name:"pmouseX",class:"p5",module:"Events"},pmouseY:{name:"pmouseY",class:"p5",module:"Events"},winMouseX:{name:"winMouseX",class:"p5",module:"Events"},winMouseY:{name:"winMouseY",class:"p5",module:"Events"},pwinMouseX:{name:"pwinMouseX",class:"p5",module:"Events"},pwinMouseY:{name:"pwinMouseY",class:"p5",module:"Events"},mouseButton:{name:"mouseButton",class:"p5",module:"Events"},mouseIsPressed:{name:"mouseIsPressed",class:"p5",module:"Events"},mouseMoved:{name:"mouseMoved",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},mouseDragged:{name:"mouseDragged",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},mousePressed:{name:"mousePressed",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},mouseReleased:{name:"mouseReleased",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},mouseClicked:{name:"mouseClicked",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},doubleClicked:{name:"doubleClicked",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},mouseWheel:{name:"mouseWheel",params:[{name:"event",description:"

optional WheelEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},requestPointerLock:{name:"requestPointerLock",class:"p5",module:"Events"},exitPointerLock:{name:"exitPointerLock",class:"p5",module:"Events"},touches:{name:"touches",class:"p5",module:"Events"},touchStarted:{name:"touchStarted",params:[{name:"event",description:"

optional TouchEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},touchMoved:{name:"touchMoved",params:[{name:"event",description:"

optional TouchEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},touchEnded:{name:"touchEnded",params:[{name:"event",description:"

optional TouchEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},createImage:{name:"createImage",params:[{name:"width",description:"

width in pixels

\n",type:"Integer"},{name:"height",description:"

height in pixels

\n",type:"Integer"}],class:"p5",module:"Image"},saveCanvas:{name:"saveCanvas",class:"p5",module:"Image",overloads:[{params:[{name:"selectedCanvas",description:"

a variable\n representing a specific html5 canvas (optional)

\n",type:"p5.Element|HTMLCanvasElement"},{name:"filename",description:"",type:"String",optional:!0},{name:"extension",description:"

'jpg' or 'png'

\n",type:"String",optional:!0}]},{params:[{name:"filename",description:"",type:"String",optional:!0},{name:"extension",description:"",type:"String",optional:!0}]}]},saveFrames:{name:"saveFrames",params:[{name:"filename",description:"",type:"String"},{name:"extension",description:"

'jpg' or 'png'

\n",type:"String"},{name:"duration",description:"

Duration in seconds to save the frames for.

\n",type:"Number"},{name:"framerate",description:"

Framerate to save the frames in.

\n",type:"Number"},{name:"callback",description:"

A callback function that will be executed\n to handle the image data. This function\n should accept an array as argument. The\n array will contain the specified number of\n frames of objects. Each object has three\n properties: imageData - an\n image/octet-stream, filename and extension.

\n",type:"Function(Array)",optional:!0}],class:"p5",module:"Image"},loadImage:{name:"loadImage",params:[{name:"path",description:"

Path of the image to be loaded

\n",type:"String"},{name:"successCallback",description:'

Function to be called once\n the image is loaded. Will be passed the\n p5.Image.

\n',type:"function(p5.Image)",optional:!0},{name:"failureCallback",description:"

called with event error if\n the image fails to load.

\n",type:"Function(Event)",optional:!0}],class:"p5",module:"Image"},image:{name:"image",class:"p5",module:"Image",overloads:[{params:[{name:"img",description:"

the image to display

\n",type:"p5.Image|p5.Element"},{name:"x",description:"

the x-coordinate of the top-left corner of the image

\n",type:"Number"},{name:"y",description:"

the y-coordinate of the top-left corner of the image

\n",type:"Number"},{name:"width",description:"

the width to draw the image

\n",type:"Number",optional:!0},{name:"height",description:"

the height to draw the image

\n",type:"Number",optional:!0}]},{params:[{name:"img",description:"",type:"p5.Image|p5.Element"},{name:"dx",description:"

the x-coordinate of the destination\n rectangle in which to draw the source image

\n",type:"Number"},{name:"dy",description:"

the y-coordinate of the destination\n rectangle in which to draw the source image

\n",type:"Number"},{name:"dWidth",description:"

the width of the destination rectangle

\n",type:"Number"},{name:"dHeight",description:"

the height of the destination rectangle

\n",type:"Number"},{name:"sx",description:"

the x-coordinate of the subsection of the source\nimage to draw into the destination rectangle

\n",type:"Number"},{name:"sy",description:"

the y-coordinate of the subsection of the source\nimage to draw into the destination rectangle

\n",type:"Number"},{name:"sWidth",description:"

the width of the subsection of the\n source image to draw into the destination\n rectangle

\n",type:"Number",optional:!0},{name:"sHeight",description:"

the height of the subsection of the\n source image to draw into the destination rectangle

\n",type:"Number",optional:!0}]}]},tint:{name:"tint",class:"p5",module:"Image",overloads:[{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}]},{params:[{name:"value",description:"

a color string

\n",type:"String"}]},{params:[{name:"gray",description:"

a gray value

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}]},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}]},{params:[{name:"color",description:"

the tint color

\n",type:"p5.Color"}]}]},noTint:{name:"noTint",class:"p5",module:"Image"},imageMode:{name:"imageMode",params:[{name:"mode",description:"

either CORNER, CORNERS, or CENTER

\n",type:"Constant"}],class:"p5",module:"Image"},pixels:{name:"pixels",class:"p5",module:"Image"},blend:{name:"blend",class:"p5",module:"Image",overloads:[{params:[{name:"srcImage",description:"

source image

\n",type:"p5.Image"},{name:"sx",description:"

X coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sy",description:"

Y coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sw",description:"

source image width

\n",type:"Integer"},{name:"sh",description:"

source image height

\n",type:"Integer"},{name:"dx",description:"

X coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dy",description:"

Y coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dw",description:"

destination image width

\n",type:"Integer"},{name:"dh",description:"

destination image height

\n",type:"Integer"},{name:"blendMode",description:"

the blend mode. either\n BLEND, DARKEST, LIGHTEST, DIFFERENCE,\n MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,\n SOFT_LIGHT, DODGE, BURN, ADD or NORMAL.

\n",type:"Constant"}]},{params:[{name:"sx",description:"",type:"Integer"},{name:"sy",description:"",type:"Integer"},{name:"sw",description:"",type:"Integer"},{name:"sh",description:"",type:"Integer"},{name:"dx",description:"",type:"Integer"},{name:"dy",description:"",type:"Integer"},{name:"dw",description:"",type:"Integer"},{name:"dh",description:"",type:"Integer"},{name:"blendMode",description:"",type:"Constant"}]}]},copy:{name:"copy",class:"p5",module:"Image",overloads:[{params:[{name:"srcImage",description:"

source image

\n",type:"p5.Image|p5.Element"},{name:"sx",description:"

X coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sy",description:"

Y coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sw",description:"

source image width

\n",type:"Integer"},{name:"sh",description:"

source image height

\n",type:"Integer"},{name:"dx",description:"

X coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dy",description:"

Y coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dw",description:"

destination image width

\n",type:"Integer"},{name:"dh",description:"

destination image height

\n",type:"Integer"}]},{params:[{name:"sx",description:"",type:"Integer"},{name:"sy",description:"",type:"Integer"},{name:"sw",description:"",type:"Integer"},{name:"sh",description:"",type:"Integer"},{name:"dx",description:"",type:"Integer"},{name:"dy",description:"",type:"Integer"},{name:"dw",description:"",type:"Integer"},{name:"dh",description:"",type:"Integer"}]}]},filter:{name:"filter",params:[{name:"filterType",description:"

either THRESHOLD, GRAY, OPAQUE, INVERT,\n POSTERIZE, BLUR, ERODE, DILATE or BLUR.\n See Filters.js for docs on\n each available filter

\n",type:"Constant"},{name:"filterParam",description:"

an optional parameter unique\n to each filter, see above

\n",type:"Number",optional:!0}],class:"p5",module:"Image"},get:{name:"get",class:"p5",module:"Image",overloads:[{params:[{name:"x",description:"

x-coordinate of the pixel

\n",type:"Number"},{name:"y",description:"

y-coordinate of the pixel

\n",type:"Number"},{name:"w",description:"

width

\n",type:"Number"},{name:"h",description:"

height

\n",type:"Number"}]},{params:[]},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"}]}]},loadPixels:{name:"loadPixels",class:"p5",module:"Image"},set:{name:"set",params:[{name:"x",description:"

x-coordinate of the pixel

\n",type:"Number"},{name:"y",description:"

y-coordinate of the pixel

\n",type:"Number"},{name:"c",description:'

insert a grayscale value | a pixel array |\n a p5.Color object | a p5.Image to copy

\n',type:"Number|Number[]|Object"}],class:"p5",module:"Image"},updatePixels:{name:"updatePixels",params:[{name:"x",description:"

x-coordinate of the upper-left corner of region\n to update

\n",type:"Number",optional:!0},{name:"y",description:"

y-coordinate of the upper-left corner of region\n to update

\n",type:"Number",optional:!0},{name:"w",description:"

width of region to update

\n",type:"Number",optional:!0},{name:"h",description:"

height of region to update

\n",type:"Number",optional:!0}],class:"p5",module:"Image"},loadJSON:{name:"loadJSON",class:"p5",module:"IO",overloads:[{params:[{name:"path",description:"

name of the file or url to load

\n",type:"String"},{name:"jsonpOptions",description:"

options object for jsonp related settings

\n",type:"Object",optional:!0},{name:"datatype",description:'

"json" or "jsonp"

\n',type:"String",optional:!0},{name:"callback",description:'

function to be executed after\n loadJSON() completes, data is passed\n in as first argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"datatype",description:"",type:"String"},{name:"callback",description:"",type:"Function",optional:!0},{name:"errorCallback",description:"",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"callback",description:"",type:"Function"},{name:"errorCallback",description:"",type:"Function",optional:!0}]}]},loadStrings:{name:"loadStrings",params:[{name:"filename",description:"

name of the file or url to load

\n",type:"String"},{name:"callback",description:'

function to be executed after loadStrings()\n completes, Array is passed in as first\n argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}],class:"p5",module:"IO"},loadTable:{name:"loadTable",params:[{name:"filename",description:"

name of the file or URL to load

\n",type:"String"},{name:"extension",description:'

parse the table by comma-separated values "csv", semicolon-separated\n values "ssv", or tab-separated values "tsv"

\n',type:"String",optional:!0},{name:"header",description:'

"header" to indicate table has header row

\n',type:"String",optional:!0},{name:"callback",description:'

function to be executed after\n loadTable() completes. On success, the\n Table object is passed in as the\n first argument.

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}],class:"p5",module:"IO"},loadXML:{name:"loadXML",params:[{name:"filename",description:"

name of the file or URL to load

\n",type:"String"},{name:"callback",description:'

function to be executed after loadXML()\n completes, XML object is passed in as\n first argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}],class:"p5",module:"IO"},loadBytes:{name:"loadBytes",params:[{name:"file",description:"

name of the file or URL to load

\n",type:"String"},{name:"callback",description:'

function to be executed after loadBytes()\n completes

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if there\n is an error

\n",type:"Function",optional:!0}],class:"p5",module:"IO"},httpGet:{name:"httpGet",class:"p5",module:"IO",overloads:[{params:[{name:"path",description:"

name of the file or url to load

\n",type:"String"},{name:"datatype",description:'

"json", "jsonp", "binary", "arrayBuffer",\n "xml", or "text"

\n',type:"String",optional:!0},{name:"data",description:"

param data passed sent with request

\n",type:"Object|Boolean",optional:!0},{name:"callback",description:'

function to be executed after\n httpGet() completes, data is passed in\n as first argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"data",description:"",type:"Object|Boolean"},{name:"callback",description:"",type:"Function",optional:!0},{name:"errorCallback",description:"",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"callback",description:"",type:"Function"},{name:"errorCallback",description:"",type:"Function",optional:!0}]}]},httpPost:{name:"httpPost",class:"p5",module:"IO",overloads:[{params:[{name:"path",description:"

name of the file or url to load

\n",type:"String"},{name:"datatype",description:'

"json", "jsonp", "xml", or "text".\n If omitted, httpPost() will guess.

\n',type:"String",optional:!0},{name:"data",description:"

param data passed sent with request

\n",type:"Object|Boolean",optional:!0},{name:"callback",description:'

function to be executed after\n httpPost() completes, data is passed in\n as first argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"data",description:"",type:"Object|Boolean"},{name:"callback",description:"",type:"Function",optional:!0},{name:"errorCallback",description:"",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"callback",description:"",type:"Function"},{name:"errorCallback",description:"",type:"Function",optional:!0}]}]},httpDo:{name:"httpDo",class:"p5",module:"IO",overloads:[{params:[{name:"path",description:"

name of the file or url to load

\n",type:"String"},{name:"method",description:'

either "GET", "POST", or "PUT",\n defaults to "GET"

\n',type:"String",optional:!0},{name:"datatype",description:'

"json", "jsonp", "xml", or "text"

\n',type:"String",optional:!0},{name:"data",description:"

param data passed sent with request

\n",type:"Object",optional:!0},{name:"callback",description:'

function to be executed after\n httpGet() completes, data is passed in\n as first argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"options",description:'

Request object options as documented in the\n "fetch" API\nreference

\n',type:"Object"},{name:"callback",description:"",type:"Function",optional:!0},{name:"errorCallback",description:"",type:"Function",optional:!0}]}]},createWriter:{name:"createWriter",params:[{name:"name",description:"

name of the file to be created

\n",type:"String"},{name:"extension",description:"",type:"String",optional:!0}],class:"p5",module:"IO"},save:{name:"save",params:[{name:"objectOrFilename",description:"

If filename is provided, will\n save canvas as an image with\n either png or jpg extension\n depending on the filename.\n If object is provided, will\n save depending on the object\n and filename (see examples\n above).

\n",type:"Object|String",optional:!0},{name:"filename",description:"

If an object is provided as the first\n parameter, then the second parameter\n indicates the filename,\n and should include an appropriate\n file extension (see examples above).

\n",type:"String",optional:!0},{name:"options",description:"

Additional options depend on\n filetype. For example, when saving JSON,\n true indicates that the\n output will be optimized for filesize,\n rather than readability.

\n",type:"Boolean|String",optional:!0}],class:"p5",module:"IO"},saveJSON:{name:"saveJSON",params:[{name:"json",description:"",type:"Array|Object"},{name:"filename",description:"",type:"String"},{name:"optimize",description:"

If true, removes line breaks\n and spaces from the output\n file to optimize filesize\n (but not readability).

\n",type:"Boolean",optional:!0}],class:"p5",module:"IO"},saveStrings:{name:"saveStrings",params:[{name:"list",description:"

string array to be written

\n",type:"String[]"},{name:"filename",description:"

filename for output

\n",type:"String"},{name:"extension",description:"

the filename's extension

\n",type:"String",optional:!0},{name:"isCRLF",description:"

if true, change line-break to CRLF

\n",type:"Boolean",optional:!0}],class:"p5",module:"IO"},saveTable:{name:"saveTable",params:[{name:"Table",description:'

the Table object to save to a file

\n',type:"p5.Table"},{name:"filename",description:"

the filename to which the Table should be saved

\n",type:"String"},{name:"options",description:'

can be one of "tsv", "csv", or "html"

\n',type:"String",optional:!0}],class:"p5",module:"IO"},abs:{name:"abs",params:[{name:"n",description:"

number to compute

\n",type:"Number"}],class:"p5",module:"Math"},ceil:{name:"ceil",params:[{name:"n",description:"

number to round up

\n",type:"Number"}],class:"p5",module:"Math"},constrain:{name:"constrain",params:[{name:"n",description:"

number to constrain

\n",type:"Number"},{name:"low",description:"

minimum limit

\n",type:"Number"},{name:"high",description:"

maximum limit

\n",type:"Number"}],class:"p5",module:"Math"},dist:{name:"dist",class:"p5",module:"Math",overloads:[{params:[{name:"x1",description:"

x-coordinate of the first point

\n",type:"Number"},{name:"y1",description:"

y-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"

x-coordinate of the second point

\n",type:"Number"},{name:"y2",description:"

y-coordinate of the second point

\n",type:"Number"}]},{params:[{name:"x1",description:"",type:"Number"},{name:"y1",description:"",type:"Number"},{name:"z1",description:"

z-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

z-coordinate of the second point

\n",type:"Number"}]}]},exp:{name:"exp",params:[{name:"n",description:"

exponent to raise

\n",type:"Number"}],class:"p5",module:"Math"},floor:{name:"floor",params:[{name:"n",description:"

number to round down

\n",type:"Number"}],class:"p5",module:"Math"},lerp:{name:"lerp",params:[{name:"start",description:"

first value

\n",type:"Number"},{name:"stop",description:"

second value

\n",type:"Number"},{name:"amt",description:"

number

\n",type:"Number"}],class:"p5",module:"Math"},log:{name:"log",params:[{name:"n",description:"

number greater than 0

\n",type:"Number"}],class:"p5",module:"Math"},mag:{name:"mag",params:[{name:"a",description:"

first value

\n",type:"Number"},{name:"b",description:"

second value

\n",type:"Number"}],class:"p5",module:"Math"},map:{name:"map",params:[{name:"value",description:"

the incoming value to be converted

\n",type:"Number"},{name:"start1",description:"

lower bound of the value's current range

\n",type:"Number"},{name:"stop1",description:"

upper bound of the value's current range

\n",type:"Number"},{name:"start2",description:"

lower bound of the value's target range

\n",type:"Number"},{name:"stop2",description:"

upper bound of the value's target range

\n",type:"Number"},{name:"withinBounds",description:"

constrain the value to the newly mapped range

\n",type:"Boolean",optional:!0}],class:"p5",module:"Math"},max:{name:"max",class:"p5",module:"Math",overloads:[{params:[{name:"n0",description:"

Number to compare

\n",type:"Number"},{name:"n1",description:"

Number to compare

\n",type:"Number"}]},{params:[{name:"nums",description:"

Numbers to compare

\n",type:"Number[]"}]}]},min:{name:"min",class:"p5",module:"Math",overloads:[{params:[{name:"n0",description:"

Number to compare

\n",type:"Number"},{name:"n1",description:"

Number to compare

\n",type:"Number"}]},{params:[{name:"nums",description:"

Numbers to compare

\n",type:"Number[]"}]}]},norm:{name:"norm",params:[{name:"value",description:"

incoming value to be normalized

\n",type:"Number"},{name:"start",description:"

lower bound of the value's current range

\n",type:"Number"},{name:"stop",description:"

upper bound of the value's current range

\n",type:"Number"}],class:"p5",module:"Math"},pow:{name:"pow",params:[{name:"n",description:"

base of the exponential expression

\n",type:"Number"},{name:"e",description:"

power by which to raise the base

\n",type:"Number"}],class:"p5",module:"Math"},round:{name:"round",params:[{name:"n",description:"

number to round

\n",type:"Number"},{name:"decimals",description:"

number of decimal places to round to, default is 0

\n",type:"Number",optional:!0}],class:"p5",module:"Math"},sq:{name:"sq",params:[{name:"n",description:"

number to square

\n",type:"Number"}],class:"p5",module:"Math"},sqrt:{name:"sqrt",params:[{name:"n",description:"

non-negative number to square root

\n",type:"Number"}],class:"p5",module:"Math"},fract:{name:"fract",params:[{name:"num",description:"

Number whose fractional part needs to be found out

\n",type:"Number"}],class:"p5",module:"Math"},createVector:{name:"createVector",params:[{name:"x",description:"

x component of the vector

\n",type:"Number",optional:!0},{name:"y",description:"

y component of the vector

\n",type:"Number",optional:!0},{name:"z",description:"

z component of the vector

\n",type:"Number",optional:!0}],class:"p5",module:"Math"},noise:{name:"noise",params:[{name:"x",description:"

x-coordinate in noise space

\n",type:"Number"},{name:"y",description:"

y-coordinate in noise space

\n",type:"Number",optional:!0},{name:"z",description:"

z-coordinate in noise space

\n",type:"Number",optional:!0}],class:"p5",module:"Math"},noiseDetail:{name:"noiseDetail",params:[{name:"lod",description:"

number of octaves to be used by the noise

\n",type:"Number"},{name:"falloff",description:"

falloff factor for each octave

\n",type:"Number"}],class:"p5",module:"Math"},noiseSeed:{name:"noiseSeed",params:[{name:"seed",description:"

the seed value

\n",type:"Number"}],class:"p5",module:"Math"},randomSeed:{name:"randomSeed",params:[{name:"seed",description:"

the seed value

\n",type:"Number"}],class:"p5",module:"Math"},random:{name:"random",class:"p5",module:"Math",overloads:[{params:[{name:"min",description:"

the lower bound (inclusive)

\n",type:"Number",optional:!0},{name:"max",description:"

the upper bound (exclusive)

\n",type:"Number",optional:!0}]},{params:[{name:"choices",description:"

the array to choose from

\n",type:"Array"}]}]},randomGaussian:{name:"randomGaussian",params:[{name:"mean",description:"

the mean

\n",type:"Number"},{name:"sd",description:"

the standard deviation

\n",type:"Number"}],class:"p5",module:"Math"},acos:{name:"acos",params:[{name:"value",description:"

the value whose arc cosine is to be returned

\n",type:"Number"}],class:"p5",module:"Math"},asin:{name:"asin",params:[{name:"value",description:"

the value whose arc sine is to be returned

\n",type:"Number"}],class:"p5",module:"Math"},atan:{name:"atan",params:[{name:"value",description:"

the value whose arc tangent is to be returned

\n",type:"Number"}],class:"p5",module:"Math"},atan2:{name:"atan2",params:[{name:"y",description:"

y-coordinate of the point

\n",type:"Number"},{name:"x",description:"

x-coordinate of the point

\n",type:"Number"}],class:"p5",module:"Math"},cos:{name:"cos",params:[{name:"angle",description:"

the angle

\n",type:"Number"}],class:"p5",module:"Math"},sin:{name:"sin",params:[{name:"angle",description:"

the angle

\n",type:"Number"}],class:"p5",module:"Math"},tan:{name:"tan",params:[{name:"angle",description:"

the angle

\n",type:"Number"}],class:"p5",module:"Math"},degrees:{name:"degrees",params:[{name:"radians",description:"

the radians value to convert to degrees

\n",type:"Number"}],class:"p5",module:"Math"},radians:{name:"radians",params:[{name:"degrees",description:"

the degree value to convert to radians

\n",type:"Number"}],class:"p5",module:"Math"},angleMode:{name:"angleMode",params:[{name:"mode",description:"

either RADIANS or DEGREES

\n",type:"Constant"}],class:"p5",module:"Math"},textAlign:{name:"textAlign",class:"p5",module:"Typography",overloads:[{params:[{name:"horizAlign",description:"

horizontal alignment, either LEFT,\n CENTER, or RIGHT

\n",type:"Constant"},{name:"vertAlign",description:"

vertical alignment, either TOP,\n BOTTOM, CENTER, or BASELINE

\n",type:"Constant",optional:!0}],chainable:1},{params:[]}]},textLeading:{name:"textLeading",class:"p5",module:"Typography",overloads:[{params:[{name:"leading",description:"

the size in pixels for spacing between lines

\n",type:"Number"}],chainable:1},{params:[]}]},textSize:{name:"textSize",class:"p5",module:"Typography",overloads:[{params:[{name:"theSize",description:"

the size of the letters in units of pixels

\n",type:"Number"}],chainable:1},{params:[]}]},textStyle:{name:"textStyle",class:"p5",module:"Typography",overloads:[{params:[{name:"theStyle",description:"

styling for text, either NORMAL,\n ITALIC, BOLD or BOLDITALIC

\n",type:"Constant"}],chainable:1},{params:[]}]},textWidth:{name:"textWidth",params:[{name:"theText",description:"

the String of characters to measure

\n",type:"String"}],class:"p5",module:"Typography"},textAscent:{name:"textAscent",class:"p5",module:"Typography"},textDescent:{name:"textDescent",class:"p5",module:"Typography"},loadFont:{name:"loadFont",params:[{name:"path",description:"

name of the file or url to load

\n",type:"String"},{name:"callback",description:'

function to be executed after\n loadFont() completes

\n',type:"Function",optional:!0},{name:"onError",description:"

function to be executed if\n an error occurs

\n",type:"Function",optional:!0}],class:"p5",module:"Typography"},text:{name:"text",params:[{name:"str",description:"

the alphanumeric\n symbols to be displayed

\n",type:"String|Object|Array|Number|Boolean"},{name:"x",description:"

x-coordinate of text

\n",type:"Number"},{name:"y",description:"

y-coordinate of text

\n",type:"Number"},{name:"x2",description:'

by default, the width of the text box,\n see rectMode() for more info

\n',type:"Number",optional:!0},{name:"y2",description:'

by default, the height of the text box,\n see rectMode() for more info

\n',type:"Number",optional:!0}],class:"p5",module:"Typography"},textFont:{name:"textFont",class:"p5",module:"Typography",overloads:[{params:[]},{params:[{name:"font",description:'

a font loaded via loadFont(),\nor a String representing a web safe font\n(a font that is generally available across all systems)

\n',type:"Object|String"},{name:"size",description:"

the font size to use

\n",type:"Number",optional:!0}],chainable:1}]},append:{name:"append",params:[{name:"array",description:"

Array to append

\n",type:"Array"},{name:"value",description:"

to be added to the Array

\n",type:"Any"}],class:"p5",module:"Data"},arrayCopy:{name:"arrayCopy",class:"p5",module:"Data",overloads:[{params:[{name:"src",description:"

the source Array

\n",type:"Array"},{name:"srcPosition",description:"

starting position in the source Array

\n",type:"Integer"},{name:"dst",description:"

the destination Array

\n",type:"Array"},{name:"dstPosition",description:"

starting position in the destination Array

\n",type:"Integer"},{name:"length",description:"

number of Array elements to be copied

\n",type:"Integer"}]},{params:[{name:"src",description:"",type:"Array"},{name:"dst",description:"",type:"Array"},{name:"length",description:"",type:"Integer",optional:!0}]}]},concat:{name:"concat",params:[{name:"a",description:"

first Array to concatenate

\n",type:"Array"},{name:"b",description:"

second Array to concatenate

\n",type:"Array"}],class:"p5",module:"Data"},reverse:{name:"reverse",params:[{name:"list",description:"

Array to reverse

\n",type:"Array"}],class:"p5",module:"Data"},shorten:{name:"shorten",params:[{name:"list",description:"

Array to shorten

\n",type:"Array"}],class:"p5",module:"Data"},shuffle:{name:"shuffle",params:[{name:"array",description:"

Array to shuffle

\n",type:"Array"},{name:"bool",description:"

modify passed array

\n",type:"Boolean",optional:!0}],class:"p5",module:"Data"},sort:{name:"sort",params:[{name:"list",description:"

Array to sort

\n",type:"Array"},{name:"count",description:"

number of elements to sort, starting from 0

\n",type:"Integer",optional:!0}],class:"p5",module:"Data"},splice:{name:"splice",params:[{name:"list",description:"

Array to splice into

\n",type:"Array"},{name:"value",description:"

value to be spliced in

\n",type:"Any"},{name:"position",description:"

in the array from which to insert data

\n",type:"Integer"}],class:"p5",module:"Data"},subset:{name:"subset",params:[{name:"list",description:"

Array to extract from

\n",type:"Array"},{name:"start",description:"

position to begin

\n",type:"Integer"},{name:"count",description:"

number of values to extract

\n",type:"Integer",optional:!0}],class:"p5",module:"Data"},float:{name:"float",params:[{name:"str",description:"

float string to parse

\n",type:"String"}],class:"p5",module:"Data"},int:{name:"int",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"String|Boolean|Number"},{name:"radix",description:"

the radix to convert to (default: 10)

\n",type:"Integer",optional:!0}]},{params:[{name:"ns",description:"

values to parse

\n",type:"Array"}]}]},str:{name:"str",params:[{name:"n",description:"

value to parse

\n",type:"String|Boolean|Number|Array"}],class:"p5",module:"Data"},byte:{name:"byte",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"String|Boolean|Number"}]},{params:[{name:"ns",description:"

values to parse

\n",type:"Array"}]}]},char:{name:"char",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"String|Number"}]},{params:[{name:"ns",description:"

values to parse

\n",type:"Array"}]}]},unchar:{name:"unchar",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"String"}]},{params:[{name:"ns",description:"

values to parse

\n",type:"Array"}]}]},hex:{name:"hex",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"Number"},{name:"digits",description:"",type:"Number",optional:!0}]},{params:[{name:"ns",description:"

array of values to parse

\n",type:"Number[]"},{name:"digits",description:"",type:"Number",optional:!0}]}]},unhex:{name:"unhex",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"String"}]},{params:[{name:"ns",description:"

values to parse

\n",type:"Array"}]}]},join:{name:"join",params:[{name:"list",description:"

array of Strings to be joined

\n",type:"Array"},{name:"separator",description:"

String to be placed between each item

\n",type:"String"}],class:"p5",module:"Data"},match:{name:"match",params:[{name:"str",description:"

the String to be searched

\n",type:"String"},{name:"regexp",description:"

the regexp to be used for matching

\n",type:"String"}],class:"p5",module:"Data"},matchAll:{name:"matchAll",params:[{name:"str",description:"

the String to be searched

\n",type:"String"},{name:"regexp",description:"

the regexp to be used for matching

\n",type:"String"}],class:"p5",module:"Data"},nf:{name:"nf",class:"p5",module:"Data",overloads:[{params:[{name:"num",description:"

the Number to format

\n",type:"Number|String"},{name:"left",description:"

number of digits to the left of the\n decimal point

\n",type:"Integer|String",optional:!0},{name:"right",description:"

number of digits to the right of the\n decimal point

\n",type:"Integer|String",optional:!0}]},{params:[{name:"nums",description:"

the Numbers to format

\n",type:"Array"},{name:"left",description:"",type:"Integer|String",optional:!0},{name:"right",description:"",type:"Integer|String",optional:!0}]}]},nfc:{name:"nfc",class:"p5",module:"Data",overloads:[{params:[{name:"num",description:"

the Number to format

\n",type:"Number|String"},{name:"right",description:"

number of digits to the right of the\n decimal point

\n",type:"Integer|String",optional:!0}]},{params:[{name:"nums",description:"

the Numbers to format

\n",type:"Array"},{name:"right",description:"",type:"Integer|String",optional:!0}]}]},nfp:{name:"nfp",class:"p5",module:"Data",overloads:[{params:[{name:"num",description:"

the Number to format

\n",type:"Number"},{name:"left",description:"

number of digits to the left of the decimal\n point

\n",type:"Integer",optional:!0},{name:"right",description:"

number of digits to the right of the\n decimal point

\n",type:"Integer",optional:!0}]},{params:[{name:"nums",description:"

the Numbers to format

\n",type:"Number[]"},{name:"left",description:"",type:"Integer",optional:!0},{name:"right",description:"",type:"Integer",optional:!0}]}]},nfs:{name:"nfs",class:"p5",module:"Data",overloads:[{params:[{name:"num",description:"

the Number to format

\n",type:"Number"},{name:"left",description:"

number of digits to the left of the decimal\n point

\n",type:"Integer",optional:!0},{name:"right",description:"

number of digits to the right of the\n decimal point

\n",type:"Integer",optional:!0}]},{params:[{name:"nums",description:"

the Numbers to format

\n",type:"Array"},{name:"left",description:"",type:"Integer",optional:!0},{name:"right",description:"",type:"Integer",optional:!0}]}]},split:{name:"split",params:[{name:"value",description:"

the String to be split

\n",type:"String"},{name:"delim",description:"

the String used to separate the data

\n",type:"String"}],class:"p5",module:"Data"},splitTokens:{name:"splitTokens",params:[{name:"value",description:"

the String to be split

\n",type:"String"},{name:"delim",description:"

list of individual Strings that will be used as\n separators

\n",type:"String",optional:!0}],class:"p5",module:"Data"},trim:{name:"trim",class:"p5",module:"Data",overloads:[{params:[{name:"str",description:"

a String to be trimmed

\n",type:"String"}]},{params:[{name:"strs",description:"

an Array of Strings to be trimmed

\n",type:"Array"}]}]},day:{name:"day",class:"p5",module:"IO"},hour:{name:"hour",class:"p5",module:"IO"},minute:{name:"minute",class:"p5",module:"IO"},millis:{name:"millis",class:"p5",module:"IO"},month:{name:"month",class:"p5",module:"IO"},second:{name:"second",class:"p5",module:"IO"},year:{name:"year",class:"p5",module:"IO"},plane:{name:"plane",params:[{name:"width",description:"

width of the plane

\n",type:"Number",optional:!0},{name:"height",description:"

height of the plane

\n",type:"Number",optional:!0},{name:"detailX",description:"

Optional number of triangle\n subdivisions in x-dimension

\n",type:"Integer",optional:!0},{name:"detailY",description:"

Optional number of triangle\n subdivisions in y-dimension

\n",type:"Integer",optional:!0}],class:"p5",module:"Shape"},box:{name:"box",params:[{name:"width",description:"

width of the box

\n",type:"Number",optional:!0},{name:"Height",description:"

height of the box

\n",type:"Number",optional:!0},{name:"depth",description:"

depth of the box

\n",type:"Number",optional:!0},{name:"detailX",description:"

Optional number of triangle\n subdivisions in x-dimension

\n",type:"Integer",optional:!0},{name:"detailY",description:"

Optional number of triangle\n subdivisions in y-dimension

\n",type:"Integer",optional:!0}],class:"p5",module:"Shape"},sphere:{name:"sphere",params:[{name:"radius",description:"

radius of circle

\n",type:"Number",optional:!0},{name:"detailX",description:"

optional number of subdivisions in x-dimension

\n",type:"Integer",optional:!0},{name:"detailY",description:"

optional number of subdivisions in y-dimension

\n",type:"Integer",optional:!0}],class:"p5",module:"Shape"},cylinder:{name:"cylinder",params:[{name:"radius",description:"

radius of the surface

\n",type:"Number",optional:!0},{name:"height",description:"

height of the cylinder

\n",type:"Number",optional:!0},{name:"detailX",description:"

number of subdivisions in x-dimension;\n default is 24

\n",type:"Integer",optional:!0},{name:"detailY",description:"

number of subdivisions in y-dimension;\n default is 1

\n",type:"Integer",optional:!0},{name:"bottomCap",description:"

whether to draw the bottom of the cylinder

\n",type:"Boolean",optional:!0},{name:"topCap",description:"

whether to draw the top of the cylinder

\n",type:"Boolean",optional:!0}],class:"p5",module:"Shape"},cone:{name:"cone",params:[{name:"radius",description:"

radius of the bottom surface

\n",type:"Number",optional:!0},{name:"height",description:"

height of the cone

\n",type:"Number",optional:!0},{name:"detailX",description:"

number of segments,\n the more segments the smoother geometry\n default is 24

\n",type:"Integer",optional:!0},{name:"detailY",description:"

number of segments,\n the more segments the smoother geometry\n default is 1

\n",type:"Integer",optional:!0},{name:"cap",description:"

whether to draw the base of the cone

\n",type:"Boolean",optional:!0}],class:"p5",module:"Shape"},ellipsoid:{name:"ellipsoid",params:[{name:"radiusx",description:"

x-radius of ellipsoid

\n",type:"Number",optional:!0},{name:"radiusy",description:"

y-radius of ellipsoid

\n",type:"Number",optional:!0},{name:"radiusz",description:"

z-radius of ellipsoid

\n",type:"Number",optional:!0},{name:"detailX",description:"

number of segments,\n the more segments the smoother geometry\n default is 24. Avoid detail number above\n 150, it may crash the browser.

\n",type:"Integer",optional:!0},{name:"detailY",description:"

number of segments,\n the more segments the smoother geometry\n default is 16. Avoid detail number above\n 150, it may crash the browser.

\n",type:"Integer",optional:!0}],class:"p5",module:"Shape"},torus:{name:"torus",params:[{name:"radius",description:"

radius of the whole ring

\n",type:"Number",optional:!0},{name:"tubeRadius",description:"

radius of the tube

\n",type:"Number",optional:!0},{name:"detailX",description:"

number of segments in x-dimension,\n the more segments the smoother geometry\n default is 24

\n",type:"Integer",optional:!0},{name:"detailY",description:"

number of segments in y-dimension,\n the more segments the smoother geometry\n default is 16

\n",type:"Integer",optional:!0}],class:"p5",module:"Shape"},orbitControl:{name:"orbitControl",params:[{name:"sensitivityX",description:"

sensitivity to mouse movement along X axis

\n",type:"Number",optional:!0},{name:"sensitivityY",description:"

sensitivity to mouse movement along Y axis

\n",type:"Number",optional:!0},{name:"sensitivityZ",description:"

sensitivity to scroll movement along Z axis

\n",type:"Number",optional:!0}],class:"p5",module:"Lights, Camera"},debugMode:{name:"debugMode",class:"p5",module:"Lights, Camera",overloads:[{params:[]},{params:[{name:"mode",description:"

either GRID or AXES

\n",type:"Constant"}]},{params:[{name:"mode",description:"",type:"Constant"},{name:"gridSize",description:"

size of one side of the grid

\n",type:"Number",optional:!0},{name:"gridDivisions",description:"

number of divisions in the grid

\n",type:"Number",optional:!0},{name:"xOff",description:"

X axis offset from origin (0,0,0)

\n",type:"Number",optional:!0},{name:"yOff",description:"

Y axis offset from origin (0,0,0)

\n",type:"Number",optional:!0},{name:"zOff",description:"

Z axis offset from origin (0,0,0)

\n",type:"Number",optional:!0}]},{params:[{name:"mode",description:"",type:"Constant"},{name:"axesSize",description:"

size of axes icon

\n",type:"Number",optional:!0},{name:"xOff",description:"",type:"Number",optional:!0},{name:"yOff",description:"",type:"Number",optional:!0},{name:"zOff",description:"",type:"Number",optional:!0}]},{params:[{name:"gridSize",description:"",type:"Number",optional:!0},{name:"gridDivisions",description:"",type:"Number",optional:!0},{name:"gridXOff",description:"",type:"Number",optional:!0},{name:"gridYOff",description:"",type:"Number",optional:!0},{name:"gridZOff",description:"",type:"Number",optional:!0},{name:"axesSize",description:"",type:"Number",optional:!0},{name:"axesXOff",description:"",type:"Number",optional:!0},{name:"axesYOff",description:"",type:"Number",optional:!0},{name:"axesZOff",description:"",type:"Number",optional:!0}]}]},noDebugMode:{name:"noDebugMode",class:"p5",module:"Lights, Camera"},ambientLight:{name:"ambientLight",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"

the alpha value

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

a color string

\n",type:"String"}],chainable:1},{params:[{name:"gray",description:"

a gray value

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}],chainable:1},{params:[{name:"color",description:"

the ambient light color

\n",type:"p5.Color"}],chainable:1}]},specularColor:{name:"specularColor",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"}],chainable:1},{params:[{name:"value",description:"

a color string

\n",type:"String"}],chainable:1},{params:[{name:"gray",description:"

a gray value

\n",type:"Number"}],chainable:1},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}],chainable:1},{params:[{name:"color",description:"

the ambient light color

\n",type:"p5.Color"}],chainable:1}]},directionalLight:{name:"directionalLight",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

red or hue value (depending on the current\ncolor mode),

\n",type:"Number"},{name:"v2",description:"

green or saturation value

\n",type:"Number"},{name:"v3",description:"

blue or brightness value

\n",type:"Number"},{name:"position",description:"

the direction of the light

\n",type:"p5.Vector"}],chainable:1},{params:[{name:"color",description:'

color Array, CSS color string,\n or p5.Color value

\n',type:"Number[]|String|p5.Color"},{name:"x",description:"

x axis direction

\n",type:"Number"},{name:"y",description:"

y axis direction

\n",type:"Number"},{name:"z",description:"

z axis direction

\n",type:"Number"}],chainable:1},{params:[{name:"color",description:"",type:"Number[]|String|p5.Color"},{name:"position",description:"",type:"p5.Vector"}],chainable:1},{params:[{name:"v1",description:"",type:"Number"},{name:"v2",description:"",type:"Number"},{name:"v3",description:"",type:"Number"},{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number"}],chainable:1}]},pointLight:{name:"pointLight",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

red or hue value (depending on the current\ncolor mode),

\n",type:"Number"},{name:"v2",description:"

green or saturation value

\n",type:"Number"},{name:"v3",description:"

blue or brightness value

\n",type:"Number"},{name:"x",description:"

x axis position

\n",type:"Number"},{name:"y",description:"

y axis position

\n",type:"Number"},{name:"z",description:"

z axis position

\n",type:"Number"}],chainable:1},{params:[{name:"v1",description:"",type:"Number"},{name:"v2",description:"",type:"Number"},{name:"v3",description:"",type:"Number"},{name:"position",description:"

the position of the light

\n",type:"p5.Vector"}],chainable:1},{params:[{name:"color",description:'

color Array, CSS color string,\nor p5.Color value

\n',type:"Number[]|String|p5.Color"},{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number"}],chainable:1},{params:[{name:"color",description:"",type:"Number[]|String|p5.Color"},{name:"position",description:"",type:"p5.Vector"}],chainable:1}]},lights:{name:"lights",class:"p5",module:"Lights, Camera"},lightFalloff:{name:"lightFalloff",params:[{name:"constant",description:"

constant value for determining falloff

\n",type:"Number"},{name:"linear",description:"

linear value for determining falloff

\n",type:"Number"},{name:"quadratic",description:"

quadratic value for determining falloff

\n",type:"Number"}],class:"p5",module:"Lights, Camera"},spotLight:{name:"spotLight",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

red or hue value (depending on the current\ncolor mode),

\n",type:"Number"},{name:"v2",description:"

green or saturation value

\n",type:"Number"},{name:"v3",description:"

blue or brightness value

\n",type:"Number"},{name:"x",description:"

x axis position

\n",type:"Number"},{name:"y",description:"

y axis position

\n",type:"Number"},{name:"z",description:"

z axis position

\n",type:"Number"},{name:"rx",description:"

x axis direction of light

\n",type:"Number"},{name:"ry",description:"

y axis direction of light

\n",type:"Number"},{name:"rz",description:"

z axis direction of light

\n",type:"Number"},{name:"angle",description:"

optional parameter for angle. Defaults to PI/3

\n",type:"Number",optional:!0},{name:"conc",description:"

optional parameter for concentration. Defaults to 100

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"color",description:'

color Array, CSS color string,\nor p5.Color value

\n',type:"Number[]|String|p5.Color"},{name:"position",description:"

the position of the light

\n",type:"p5.Vector"},{name:"direction",description:"

the direction of the light

\n",type:"p5.Vector"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"v1",description:"",type:"Number"},{name:"v2",description:"",type:"Number"},{name:"v3",description:"",type:"Number"},{name:"position",description:"",type:"p5.Vector"},{name:"direction",description:"",type:"p5.Vector"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"color",description:"",type:"Number[]|String|p5.Color"},{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number"},{name:"direction",description:"",type:"p5.Vector"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"color",description:"",type:"Number[]|String|p5.Color"},{name:"position",description:"",type:"p5.Vector"},{name:"rx",description:"",type:"Number"},{name:"ry",description:"",type:"Number"},{name:"rz",description:"",type:"Number"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"v1",description:"",type:"Number"},{name:"v2",description:"",type:"Number"},{name:"v3",description:"",type:"Number"},{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number"},{name:"direction",description:"",type:"p5.Vector"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"v1",description:"",type:"Number"},{name:"v2",description:"",type:"Number"},{name:"v3",description:"",type:"Number"},{name:"position",description:"",type:"p5.Vector"},{name:"rx",description:"",type:"Number"},{name:"ry",description:"",type:"Number"},{name:"rz",description:"",type:"Number"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"color",description:"",type:"Number[]|String|p5.Color"},{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number"},{name:"rx",description:"",type:"Number"},{name:"ry",description:"",type:"Number"},{name:"rz",description:"",type:"Number"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]}]},noLights:{name:"noLights",class:"p5",module:"Lights, Camera"},loadModel:{name:"loadModel",class:"p5",module:"Shape",overloads:[{params:[{name:"path",description:"

Path of the model to be loaded

\n",type:"String"},{name:"normalize",description:"

If true, scale the model to a\n standardized size when loading

\n",type:"Boolean"},{name:"successCallback",description:"

Function to be called\n once the model is loaded. Will be passed\n the 3D model object.

\n",type:"function(p5.Geometry)",optional:!0},{name:"failureCallback",description:"

called with event error if\n the model fails to load.

\n",type:"Function(Event)",optional:!0},{name:"fileType",description:"

The file extension of the model\n (.stl, .obj).

\n",type:"String",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"successCallback",description:"",type:"function(p5.Geometry)",optional:!0},{name:"failureCallback",description:"",type:"Function(Event)",optional:!0},{name:"fileType",description:"",type:"String",optional:!0}]}]},model:{name:"model",params:[{name:"model",description:"

Loaded 3d model to be rendered

\n",type:"p5.Geometry"}],class:"p5",module:"Shape"},loadShader:{name:"loadShader",params:[{name:"vertFilename",description:"

path to file containing vertex shader\nsource code

\n",type:"String"},{name:"fragFilename",description:"

path to file containing fragment shader\nsource code

\n",type:"String"},{name:"callback",description:"

callback to be executed after loadShader\ncompletes. On success, the Shader object is passed as the first argument.

\n",type:"Function",optional:!0},{name:"errorCallback",description:"

callback to be executed when an error\noccurs inside loadShader. On error, the error is passed as the first\nargument.

\n",type:"Function",optional:!0}],class:"p5",module:"Lights, Camera"},createShader:{name:"createShader",params:[{name:"vertSrc",description:"

source code for the vertex shader

\n",type:"String"},{name:"fragSrc",description:"

source code for the fragment shader

\n",type:"String"}],class:"p5",module:"Lights, Camera"},shader:{name:"shader",params:[{name:"s",description:'

the desired p5.Shader to use for rendering\nshapes.

\n',type:"p5.Shader",optional:!0}],class:"p5",module:"Lights, Camera"},resetShader:{name:"resetShader",class:"p5",module:"Lights, Camera"},normalMaterial:{name:"normalMaterial",class:"p5",module:"Lights, Camera"},texture:{name:"texture",params:[{name:"tex",description:"

2-dimensional graphics\n to render as texture

\n",type:"p5.Image|p5.MediaElement|p5.Graphics"}],class:"p5",module:"Lights, Camera"},textureMode:{name:"textureMode",params:[{name:"mode",description:"

either IMAGE or NORMAL

\n",type:"Constant"}],class:"p5",module:"Lights, Camera"},textureWrap:{name:"textureWrap",params:[{name:"wrapX",description:"

either CLAMP, REPEAT, or MIRROR

\n",type:"Constant"},{name:"wrapY",description:"

either CLAMP, REPEAT, or MIRROR

\n",type:"Constant",optional:!0}],class:"p5",module:"Lights, Camera"},ambientMaterial:{name:"ambientMaterial",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

gray value, red or hue value\n (depending on the current color mode),

\n",type:"Number"},{name:"v2",description:"

green or saturation value

\n",type:"Number",optional:!0},{name:"v3",description:"

blue or brightness value

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"color",description:"

color, color Array, or CSS color string

\n",type:"Number[]|String|p5.Color"}],chainable:1}]},emissiveMaterial:{name:"emissiveMaterial",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

gray value, red or hue value\n (depending on the current color mode),

\n",type:"Number"},{name:"v2",description:"

green or saturation value

\n",type:"Number",optional:!0},{name:"v3",description:"

blue or brightness value

\n",type:"Number",optional:!0},{name:"a",description:"

opacity

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"color",description:"

color, color Array, or CSS color string

\n",type:"Number[]|String|p5.Color"}],chainable:1}]},specularMaterial:{name:"specularMaterial",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"gray",description:"

number specifying value between white and black.

\n",type:"Number"},{name:"alpha",description:"

alpha value relative to current color range\n (default is 0-255)

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"color",description:"

color Array, or CSS color string

\n",type:"Number[]|String|p5.Color"}],chainable:1}]},shininess:{name:"shininess",params:[{name:"shine",description:"

Degree of Shininess.\n Defaults to 1.

\n",type:"Number"}],class:"p5",module:"Lights, Camera"},camera:{name:"camera",params:[{name:"x",description:"

camera position value on x axis

\n",type:"Number",optional:!0},{name:"y",description:"

camera position value on y axis

\n",type:"Number",optional:!0},{name:"z",description:"

camera position value on z axis

\n",type:"Number",optional:!0},{name:"centerX",description:"

x coordinate representing center of the sketch

\n",type:"Number",optional:!0},{name:"centerY",description:"

y coordinate representing center of the sketch

\n",type:"Number",optional:!0},{name:"centerZ",description:"

z coordinate representing center of the sketch

\n",type:"Number",optional:!0},{name:"upX",description:"

x component of direction 'up' from camera

\n",type:"Number",optional:!0},{name:"upY",description:"

y component of direction 'up' from camera

\n",type:"Number",optional:!0},{name:"upZ",description:"

z component of direction 'up' from camera

\n",type:"Number",optional:!0}],class:"p5",module:"Lights, Camera"},perspective:{name:"perspective",params:[{name:"fovy",description:'

camera frustum vertical field of view,\n from bottom to top of view, in angleMode units

\n',type:"Number",optional:!0},{name:"aspect",description:"

camera frustum aspect ratio

\n",type:"Number",optional:!0},{name:"near",description:"

frustum near plane length

\n",type:"Number",optional:!0},{name:"far",description:"

frustum far plane length

\n",type:"Number",optional:!0}],class:"p5",module:"Lights, Camera"},ortho:{name:"ortho",params:[{name:"left",description:"

camera frustum left plane

\n",type:"Number",optional:!0},{name:"right",description:"

camera frustum right plane

\n",type:"Number",optional:!0},{name:"bottom",description:"

camera frustum bottom plane

\n",type:"Number",optional:!0},{name:"top",description:"

camera frustum top plane

\n",type:"Number",optional:!0},{name:"near",description:"

camera frustum near plane

\n",type:"Number",optional:!0},{name:"far",description:"

camera frustum far plane

\n",type:"Number",optional:!0}],class:"p5",module:"Lights, Camera"},frustum:{name:"frustum",params:[{name:"left",description:"

camera frustum left plane

\n",type:"Number",optional:!0},{name:"right",description:"

camera frustum right plane

\n",type:"Number",optional:!0},{name:"bottom",description:"

camera frustum bottom plane

\n",type:"Number",optional:!0},{name:"top",description:"

camera frustum top plane

\n",type:"Number",optional:!0},{name:"near",description:"

camera frustum near plane

\n",type:"Number",optional:!0},{name:"far",description:"

camera frustum far plane

\n",type:"Number",optional:!0}],class:"p5",module:"Lights, Camera"},createCamera:{name:"createCamera",class:"p5",module:"Lights, Camera"},setCamera:{name:"setCamera",params:[{name:"cam",description:"

p5.Camera object

\n",type:"p5.Camera"}],class:"p5",module:"Lights, Camera"},setAttributes:{name:"setAttributes",class:"p5",module:"Rendering",overloads:[{params:[{name:"key",description:"

Name of attribute

\n",type:"String"},{name:"value",description:"

New value of named attribute

\n",type:"Boolean"}]},{params:[{name:"obj",description:"

object with key-value pairs

\n",type:"Object"}]}]},sampleRate:{name:"sampleRate",class:"p5",module:"p5.sound"},freqToMidi:{name:"freqToMidi",params:[{name:"frequency",description:'

A freqeuncy, for example, the "A"\n above Middle C is 440Hz

\n',type:"Number"}],class:"p5",module:"p5.sound"},midiToFreq:{name:"midiToFreq",params:[{name:"midiNote",description:"

The number of a MIDI note

\n",type:"Number"}],class:"p5",module:"p5.sound"},soundFormats:{name:"soundFormats",params:[{name:"formats",description:"

i.e. 'mp3', 'wav', 'ogg'

\n",type:"String",optional:!0,multiple:!0}],class:"p5",module:"p5.sound"},getAudioContext:{name:"getAudioContext",class:"p5",module:"p5.sound"},userStartAudio:{params:[{name:"element(s)",description:"

This argument can be an Element,\n Selector String, NodeList, p5.Element,\n jQuery Element, or an Array of any of those.

\n",type:"Element|Array",optional:!0},{name:"callback",description:"

Callback to invoke when the AudioContext\n has started

\n",type:"Function",optional:!0}],name:"userStartAudio",class:"p5",module:"p5.sound"},loadSound:{name:"loadSound",params:[{name:"path",description:"

Path to the sound file, or an array with\n paths to soundfiles in multiple formats\n i.e. ['sound.ogg', 'sound.mp3'].\n Alternately, accepts an object: either\n from the HTML5 File API, or a p5.File.

\n",type:"String|Array"},{name:"successCallback",description:"

Name of a function to call once file loads

\n",type:"Function",optional:!0},{name:"errorCallback",description:"

Name of a function to call if there is\n an error loading the file.

\n",type:"Function",optional:!0},{name:"whileLoading",description:"

Name of a function to call while file is loading.\n This function will receive the percentage loaded\n so far, from 0.0 to 1.0.

\n",type:"Function",optional:!0}],class:"p5",module:"p5.sound"},createConvolver:{name:"createConvolver",params:[{name:"path",description:"

path to a sound file

\n",type:"String"},{name:"callback",description:"

function to call if loading is successful.\n The object will be passed in as the argument\n to the callback function.

\n",type:"Function",optional:!0},{name:"errorCallback",description:"

function to call if loading is not successful.\n A custom error will be passed in as the argument\n to the callback function.

\n",type:"Function",optional:!0}],class:"p5",module:"p5.sound"},setBPM:{name:"setBPM",params:[{name:"BPM",description:"

Beats Per Minute

\n",type:"Number"},{name:"rampTime",description:"

Seconds from now

\n",type:"Number"}],class:"p5",module:"p5.sound"},saveSound:{name:"saveSound",params:[{name:"soundFile",description:"

p5.SoundFile that you wish to save

\n",type:"p5.SoundFile"},{name:"fileName",description:"

name of the resulting .wav file.

\n",type:"String"}],class:"p5",module:"p5.sound"}},"p5.Color":{toString:{name:"toString",params:[{name:"format",description:"

How the color string will be formatted.\nLeaving this empty formats the string as rgba(r, g, b, a).\n'#rgb' '#rgba' '#rrggbb' and '#rrggbbaa' format as hexadecimal color codes.\n'rgb' 'hsb' and 'hsl' return the color formatted in the specified color mode.\n'rgba' 'hsba' and 'hsla' are the same as above but with alpha channels.\n'rgb%' 'hsb%' 'hsl%' 'rgba%' 'hsba%' and 'hsla%' format as percentages.

\n",type:"String",optional:!0}],class:"p5.Color",module:"Color"},setRed:{name:"setRed",params:[{name:"red",description:"

the new red value

\n",type:"Number"}],class:"p5.Color",module:"Color"},setGreen:{name:"setGreen",params:[{name:"green",description:"

the new green value

\n",type:"Number"}],class:"p5.Color",module:"Color"},setBlue:{name:"setBlue",params:[{name:"blue",description:"

the new blue value

\n",type:"Number"}],class:"p5.Color",module:"Color"},setAlpha:{name:"setAlpha",params:[{name:"alpha",description:"

the new alpha value

\n",type:"Number"}],class:"p5.Color",module:"Color"}},"p5.Element":{elt:{name:"elt",class:"p5.Element",module:"DOM"},parent:{name:"parent",class:"p5.Element",module:"DOM",overloads:[{params:[{name:"parent",description:'

the ID, DOM node, or p5.Element\n of desired parent element

\n',type:"String|p5.Element|Object"}],chainable:1},{params:[]}]},id:{name:"id",class:"p5.Element",module:"DOM",overloads:[{params:[{name:"id",description:"

ID of the element

\n",type:"String"}],chainable:1},{params:[]}]},class:{name:"class",class:"p5.Element",module:"DOM",overloads:[{params:[{name:"class",description:"

class to add

\n",type:"String"}],chainable:1},{params:[]}]},mousePressed:{name:"mousePressed",params:[{name:"fxn",description:"

function to be fired when mouse is\n pressed over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},doubleClicked:{name:"doubleClicked",params:[{name:"fxn",description:"

function to be fired when mouse is\n double clicked over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseWheel:{name:"mouseWheel",params:[{name:"fxn",description:"

function to be fired when mouse is\n scrolled over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseReleased:{name:"mouseReleased",params:[{name:"fxn",description:"

function to be fired when mouse is\n released over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseClicked:{name:"mouseClicked",params:[{name:"fxn",description:"

function to be fired when mouse is\n clicked over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseMoved:{name:"mouseMoved",params:[{name:"fxn",description:"

function to be fired when a mouse moves\n over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseOver:{name:"mouseOver",params:[{name:"fxn",description:"

function to be fired when a mouse moves\n onto the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseOut:{name:"mouseOut",params:[{name:"fxn",description:"

function to be fired when a mouse\n moves off of an element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},touchStarted:{name:"touchStarted",params:[{name:"fxn",description:"

function to be fired when a touch\n starts over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},touchMoved:{name:"touchMoved",params:[{name:"fxn",description:"

function to be fired when a touch moves over\n the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},touchEnded:{name:"touchEnded",params:[{name:"fxn",description:"

function to be fired when a touch ends\n over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},dragOver:{name:"dragOver",params:[{name:"fxn",description:"

function to be fired when a file is\n dragged over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},dragLeave:{name:"dragLeave",params:[{name:"fxn",description:"

function to be fired when a file is\n dragged off the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},addClass:{name:"addClass",params:[{name:"class",description:"

name of class to add

\n",type:"String"}],class:"p5.Element",module:"DOM"},removeClass:{name:"removeClass",params:[{name:"class",description:"

name of class to remove

\n",type:"String"}],class:"p5.Element",module:"DOM"},hasClass:{name:"hasClass",params:[{name:"c",description:"

class name of class to check

\n",type:"String"}],class:"p5.Element",module:"DOM"},toggleClass:{name:"toggleClass",params:[{name:"c",description:"

class name to toggle

\n",type:"String"}],class:"p5.Element",module:"DOM"},child:{name:"child",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"child",description:'

the ID, DOM node, or p5.Element\n to add to the current element

\n',type:"String|p5.Element",optional:!0}],chainable:1}]},center:{name:"center",params:[{name:"align",description:"

passing 'vertical', 'horizontal' aligns element accordingly

\n",type:"String",optional:!0}],class:"p5.Element",module:"DOM"},html:{name:"html",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"html",description:"

the HTML to be placed inside the element

\n",type:"String",optional:!0},{name:"append",description:"

whether to append HTML to existing

\n",type:"Boolean",optional:!0}],chainable:1}]},position:{name:"position",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"x",description:"

x-position relative to upper left of window (optional)

\n",type:"Number",optional:!0},{name:"y",description:"

y-position relative to upper left of window (optional)

\n",type:"Number",optional:!0},{name:"positionType",description:"

it can be static, fixed, relative, sticky, initial or inherit (optional)

\n",type:"String"}],chainable:1}]},style:{name:"style",class:"p5.Element",module:"DOM",overloads:[{params:[{name:"property",description:"

property to be set

\n",type:"String"}]},{params:[{name:"property",description:"",type:"String"},{name:"value",description:"

value to assign to property

\n",type:"String|p5.Color"}],chainable:1}]},attribute:{name:"attribute",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"attr",description:"

attribute to set

\n",type:"String"},{name:"value",description:"

value to assign to attribute

\n",type:"String"}],chainable:1}]},removeAttribute:{name:"removeAttribute",params:[{name:"attr",description:"

attribute to remove

\n",type:"String"}],class:"p5.Element",module:"DOM"},value:{name:"value",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"value",description:"",type:"String|Number"}],chainable:1}]},show:{name:"show",class:"p5.Element",module:"DOM"},hide:{name:"hide",class:"p5.Element",module:"DOM"},size:{name:"size",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"w",description:"

width of the element, either AUTO, or a number

\n",type:"Number|Constant"},{name:"h",description:"

height of the element, either AUTO, or a number

\n",type:"Number|Constant",optional:!0}],chainable:1}]},remove:{name:"remove",class:"p5.Element",module:"DOM"},drop:{name:"drop",params:[{name:"callback",description:"

callback to receive loaded file, called for each file dropped.

\n",type:"Function"},{name:"fxn",description:"

callback triggered once when files are dropped with the drop event.

\n",type:"Function",optional:!0}],class:"p5.Element",module:"DOM"}},"p5.Graphics":{reset:{name:"reset",class:"p5.Graphics",module:"Rendering"},remove:{name:"remove",class:"p5.Graphics",module:"Rendering"}},JSON:{stringify:{name:"stringify",params:[{name:"object",description:"

:Javascript object that you would like to convert to JSON

\n",type:"Object"}],class:"JSON",module:"Foundation"}},console:{log:{name:"log",params:[{name:"message",description:"

:Message that you would like to print to the console

\n",type:"String|Expression|Object"}],class:"console",module:"Foundation"}},"p5.TypedDict":{size:{name:"size",class:"p5.TypedDict",module:"Data"},hasKey:{name:"hasKey",params:[{name:"key",description:"

that you want to look up

\n",type:"Number|String"}],class:"p5.TypedDict",module:"Data"},get:{name:"get",params:[{name:"the",description:"

key you want to access

\n",type:"Number|String"}],class:"p5.TypedDict",module:"Data"},set:{name:"set",params:[{name:"key",description:"",type:"Number|String"},{name:"value",description:"",type:"Number|String"}],class:"p5.TypedDict",module:"Data"},create:{name:"create",class:"p5.TypedDict",module:"Data",overloads:[{params:[{name:"key",description:"",type:"Number|String"},{name:"value",description:"",type:"Number|String"}]},{params:[{name:"obj",description:"

key/value pair

\n",type:"Object"}]}]},clear:{name:"clear",class:"p5.TypedDict",module:"Data"},remove:{name:"remove",params:[{name:"key",description:"

for the pair to remove

\n",type:"Number|String"}],class:"p5.TypedDict",module:"Data"},print:{name:"print",class:"p5.TypedDict",module:"Data"},saveTable:{name:"saveTable",class:"p5.TypedDict",module:"Data"},saveJSON:{name:"saveJSON",class:"p5.TypedDict",module:"Data"}},"p5.NumberDict":{add:{name:"add",params:[{name:"Key",description:"

for the value you wish to add to

\n",type:"Number"},{name:"Number",description:"

to add to the value

\n",type:"Number"}],class:"p5.NumberDict",module:"Data"},sub:{name:"sub",params:[{name:"Key",description:"

for the value you wish to subtract from

\n",type:"Number"},{name:"Number",description:"

to subtract from the value

\n",type:"Number"}],class:"p5.NumberDict",module:"Data"},mult:{name:"mult",params:[{name:"Key",description:"

for value you wish to multiply

\n",type:"Number"},{name:"Amount",description:"

to multiply the value by

\n",type:"Number"}],class:"p5.NumberDict",module:"Data"},div:{name:"div",params:[{name:"Key",description:"

for value you wish to divide

\n",type:"Number"},{name:"Amount",description:"

to divide the value by

\n",type:"Number"}],class:"p5.NumberDict",module:"Data"},minValue:{name:"minValue",class:"p5.NumberDict",module:"Data"},maxValue:{name:"maxValue",class:"p5.NumberDict",module:"Data"},minKey:{name:"minKey",class:"p5.NumberDict",module:"Data"},maxKey:{name:"maxKey",class:"p5.NumberDict",module:"Data"}},"p5.MediaElement":{src:{name:"src",class:"p5.MediaElement",module:"DOM"},play:{name:"play",class:"p5.MediaElement",module:"DOM"},stop:{name:"stop",class:"p5.MediaElement",module:"DOM"},pause:{name:"pause",class:"p5.MediaElement",module:"DOM"},loop:{name:"loop",class:"p5.MediaElement",module:"DOM"},noLoop:{name:"noLoop",class:"p5.MediaElement",module:"DOM"},autoplay:{name:"autoplay",params:[{name:"shouldAutoplay",description:"

whether the element should autoplay

\n",type:"Boolean"}],class:"p5.MediaElement",module:"DOM"},volume:{name:"volume",class:"p5.MediaElement",module:"DOM",overloads:[{params:[]},{params:[{name:"val",description:"

volume between 0.0 and 1.0

\n",type:"Number"}],chainable:1}]},speed:{name:"speed",class:"p5.MediaElement",module:"DOM",overloads:[{params:[]},{params:[{name:"speed",description:"

speed multiplier for element playback

\n",type:"Number"}],chainable:1}]},time:{name:"time",class:"p5.MediaElement",module:"DOM",overloads:[{params:[]},{params:[{name:"time",description:"

time to jump to (in seconds)

\n",type:"Number"}],chainable:1}]},duration:{name:"duration",class:"p5.MediaElement",module:"DOM"},onended:{name:"onended",params:[{name:"callback",description:"

function to call when the\n soundfile has ended. The\n media element will be passed\n in as the argument to the\n callback.

\n",type:"Function"}],class:"p5.MediaElement",module:"DOM"},connect:{name:"connect",params:[{name:"audioNode",description:"

AudioNode from the Web Audio API,\nor an object from the p5.sound library

\n",type:"AudioNode|Object"}],class:"p5.MediaElement",module:"DOM"},disconnect:{name:"disconnect",class:"p5.MediaElement",module:"DOM"},showControls:{name:"showControls",class:"p5.MediaElement",module:"DOM"},hideControls:{name:"hideControls",class:"p5.MediaElement",module:"DOM"},addCue:{name:"addCue",params:[{name:"time",description:"

Time in seconds, relative to this media\n element's playback. For example, to trigger\n an event every time playback reaches two\n seconds, pass in the number 2. This will be\n passed as the first parameter to\n the callback function.

\n",type:"Number"},{name:"callback",description:"

Name of a function that will be\n called at the given time. The callback will\n receive time and (optionally) param as its\n two parameters.

\n",type:"Function"},{name:"value",description:"

An object to be passed as the\n second parameter to the\n callback function.

\n",type:"Object",optional:!0}],class:"p5.MediaElement",module:"DOM"},removeCue:{name:"removeCue",params:[{name:"id",description:"

ID of the cue, as returned by addCue

\n",type:"Number"}],class:"p5.MediaElement",module:"DOM"},clearCues:{name:"clearCues",params:[{name:"id",description:"

ID of the cue, as returned by addCue

\n",type:"Number"}],class:"p5.MediaElement",module:"DOM"}},"p5.File":{file:{name:"file",class:"p5.File",module:"DOM"},type:{name:"type",class:"p5.File",module:"DOM"},subtype:{name:"subtype",class:"p5.File",module:"DOM"},name:{name:"name",class:"p5.File",module:"DOM"},size:{name:"size",class:"p5.File",module:"DOM"},data:{name:"data",class:"p5.File",module:"DOM"}},"p5.Image":{width:{name:"width",class:"p5.Image",module:"Image"},height:{name:"height",class:"p5.Image",module:"Image"},pixels:{name:"pixels",class:"p5.Image",module:"Image"},loadPixels:{name:"loadPixels",class:"p5.Image",module:"Image"},updatePixels:{name:"updatePixels",class:"p5.Image",module:"Image",overloads:[{params:[{name:"x",description:"

x-offset of the target update area for the\n underlying canvas

\n",type:"Integer"},{name:"y",description:"

y-offset of the target update area for the\n underlying canvas

\n",type:"Integer"},{name:"w",description:"

height of the target update area for the\n underlying canvas

\n",type:"Integer"},{name:"h",description:"

height of the target update area for the\n underlying canvas

\n",type:"Integer"}]},{params:[]}]},get:{name:"get",class:"p5.Image",module:"Image",overloads:[{params:[{name:"x",description:"

x-coordinate of the pixel

\n",type:"Number"},{name:"y",description:"

y-coordinate of the pixel

\n",type:"Number"},{name:"w",description:"

width

\n",type:"Number"},{name:"h",description:"

height

\n",type:"Number"}]},{params:[]},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"}]}]},set:{name:"set",params:[{name:"x",description:"

x-coordinate of the pixel

\n",type:"Number"},{name:"y",description:"

y-coordinate of the pixel

\n",type:"Number"},{name:"a",description:'

grayscale value | pixel array |\n a p5.Color | image to copy

\n',type:"Number|Number[]|Object"}],class:"p5.Image",module:"Image"},resize:{name:"resize",params:[{name:"width",description:"

the resized image width

\n",type:"Number"},{name:"height",description:"

the resized image height

\n",type:"Number"}],class:"p5.Image",module:"Image"},copy:{name:"copy",class:"p5.Image",module:"Image",overloads:[{params:[{name:"srcImage",description:"

source image

\n",type:"p5.Image|p5.Element"},{name:"sx",description:"

X coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sy",description:"

Y coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sw",description:"

source image width

\n",type:"Integer"},{name:"sh",description:"

source image height

\n",type:"Integer"},{name:"dx",description:"

X coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dy",description:"

Y coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dw",description:"

destination image width

\n",type:"Integer"},{name:"dh",description:"

destination image height

\n",type:"Integer"}]},{params:[{name:"sx",description:"",type:"Integer"},{name:"sy",description:"",type:"Integer"},{name:"sw",description:"",type:"Integer"},{name:"sh",description:"",type:"Integer"},{name:"dx",description:"",type:"Integer"},{name:"dy",description:"",type:"Integer"},{name:"dw",description:"",type:"Integer"},{name:"dh",description:"",type:"Integer"}]}]},mask:{name:"mask",params:[{name:"srcImage",description:"

source image

\n",type:"p5.Image"}],class:"p5.Image",module:"Image"},filter:{name:"filter",params:[{name:"filterType",description:"

either THRESHOLD, GRAY, OPAQUE, INVERT,\n POSTERIZE, BLUR, ERODE, DILATE or BLUR.\n See Filters.js for docs on\n each available filter

\n",type:"Constant"},{name:"filterParam",description:"

an optional parameter unique\n to each filter, see above

\n",type:"Number",optional:!0}],class:"p5.Image",module:"Image"},blend:{name:"blend",class:"p5.Image",module:"Image",overloads:[{params:[{name:"srcImage",description:"

source image

\n",type:"p5.Image"},{name:"sx",description:"

X coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sy",description:"

Y coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sw",description:"

source image width

\n",type:"Integer"},{name:"sh",description:"

source image height

\n",type:"Integer"},{name:"dx",description:"

X coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dy",description:"

Y coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dw",description:"

destination image width

\n",type:"Integer"},{name:"dh",description:"

destination image height

\n",type:"Integer"},{name:"blendMode",description:'

the blend mode. either\n BLEND, DARKEST, LIGHTEST, DIFFERENCE,\n MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,\n SOFT_LIGHT, DODGE, BURN, ADD or NORMAL.

\n

Available blend modes are: normal | multiply | screen | overlay |\n darken | lighten | color-dodge | color-burn | hard-light |\n soft-light | difference | exclusion | hue | saturation |\n color | luminosity

\n

http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/

\n',type:"Constant"}]},{params:[{name:"sx",description:"",type:"Integer"},{name:"sy",description:"",type:"Integer"},{name:"sw",description:"",type:"Integer"},{name:"sh",description:"",type:"Integer"},{name:"dx",description:"",type:"Integer"},{name:"dy",description:"",type:"Integer"},{name:"dw",description:"",type:"Integer"},{name:"dh",description:"",type:"Integer"},{name:"blendMode",description:"",type:"Constant"}]}]},save:{name:"save",params:[{name:"filename",description:"

give your file a name

\n",type:"String"},{name:"extension",description:"

'png' or 'jpg'

\n",type:"String"}],class:"p5.Image",module:"Image"},reset:{name:"reset",class:"p5.Image",module:"Image"},getCurrentFrame:{name:"getCurrentFrame",class:"p5.Image",module:"Image"},setFrame:{name:"setFrame",params:[{name:"index",description:"

the index for the frame that should be displayed

\n",type:"Number"}],class:"p5.Image",module:"Image"},numFrames:{name:"numFrames",class:"p5.Image",module:"Image"},play:{name:"play",class:"p5.Image",module:"Image"},pause:{name:"pause",class:"p5.Image",module:"Image"},delay:{name:"delay",params:[{name:"d",description:"

the amount in milliseconds to delay between switching frames

\n",type:"Number"},{name:"index",description:"

the index of the frame that should have the new delay value {optional}

\n",type:"Number",optional:!0}],class:"p5.Image",module:"Image"}},"p5.PrintWriter":{write:{name:"write",params:[{name:"data",description:"

all data to be written by the PrintWriter

\n",type:"Array"}],class:"p5.PrintWriter",module:"IO"},print:{name:"print",params:[{name:"data",description:"

all data to be printed by the PrintWriter

\n",type:"Array"}],class:"p5.PrintWriter",module:"IO"},clear:{name:"clear",class:"p5.PrintWriter",module:"IO"},close:{name:"close",class:"p5.PrintWriter",module:"IO"}},"p5.Table":{columns:{name:"columns",class:"p5.Table",module:"IO"},rows:{name:"rows",class:"p5.Table",module:"IO"},addRow:{name:"addRow",params:[{name:"row",description:"

row to be added to the table

\n",type:"p5.TableRow",optional:!0}],class:"p5.Table",module:"IO"},removeRow:{name:"removeRow",params:[{name:"id",description:"

ID number of the row to remove

\n",type:"Integer"}],class:"p5.Table",module:"IO"},getRow:{name:"getRow",params:[{name:"rowID",description:"

ID number of the row to get

\n",type:"Integer"}],class:"p5.Table",module:"IO"},getRows:{name:"getRows",class:"p5.Table",module:"IO"},findRow:{name:"findRow",params:[{name:"value",description:"

The value to match

\n",type:"String"},{name:"column",description:"

ID number or title of the\n column to search

\n",type:"Integer|String"}],class:"p5.Table",module:"IO"},findRows:{name:"findRows",params:[{name:"value",description:"

The value to match

\n",type:"String"},{name:"column",description:"

ID number or title of the\n column to search

\n",type:"Integer|String"}],class:"p5.Table",module:"IO"},matchRow:{name:"matchRow",params:[{name:"regexp",description:"

The regular expression to match

\n",type:"String|RegExp"},{name:"column",description:"

The column ID (number) or\n title (string)

\n",type:"String|Integer"}],class:"p5.Table",module:"IO"},matchRows:{name:"matchRows",params:[{name:"regexp",description:"

The regular expression to match

\n",type:"String"},{name:"column",description:"

The column ID (number) or\n title (string)

\n",type:"String|Integer",optional:!0}],class:"p5.Table",module:"IO"},getColumn:{name:"getColumn",params:[{name:"column",description:"

String or Number of the column to return

\n",type:"String|Number"}],class:"p5.Table",module:"IO"},clearRows:{name:"clearRows",class:"p5.Table",module:"IO"},addColumn:{name:"addColumn",params:[{name:"title",description:"

title of the given column

\n",type:"String",optional:!0}],class:"p5.Table",module:"IO"},getColumnCount:{name:"getColumnCount",class:"p5.Table",module:"IO"},getRowCount:{name:"getRowCount",class:"p5.Table",module:"IO"},removeTokens:{name:"removeTokens",params:[{name:"chars",description:"

String listing characters to be removed

\n",type:"String"},{name:"column",description:"

Column ID (number)\n or name (string)

\n",type:"String|Integer",optional:!0}],class:"p5.Table",module:"IO"},trim:{name:"trim",params:[{name:"column",description:"

Column ID (number)\n or name (string)

\n",type:"String|Integer",optional:!0}],class:"p5.Table",module:"IO"},removeColumn:{name:"removeColumn",params:[{name:"column",description:"

columnName (string) or ID (number)

\n",type:"String|Integer"}],class:"p5.Table",module:"IO"},set:{name:"set",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

column ID (Number)\n or title (String)

\n",type:"String|Integer"},{name:"value",description:"

value to assign

\n",type:"String|Number"}],class:"p5.Table",module:"IO"},setNum:{name:"setNum",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

column ID (Number)\n or title (String)

\n",type:"String|Integer"},{name:"value",description:"

value to assign

\n",type:"Number"}],class:"p5.Table",module:"IO"},setString:{name:"setString",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

column ID (Number)\n or title (String)

\n",type:"String|Integer"},{name:"value",description:"

value to assign

\n",type:"String"}],class:"p5.Table",module:"IO"},get:{name:"get",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.Table",module:"IO"},getNum:{name:"getNum",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.Table",module:"IO"},getString:{name:"getString",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.Table",module:"IO"},getObject:{name:"getObject",params:[{name:"headerColumn",description:"

Name of the column which should be used to\n title each row object (optional)

\n",type:"String",optional:!0}],class:"p5.Table",module:"IO"},getArray:{name:"getArray",class:"p5.Table",module:"IO"}},"p5.TableRow":{set:{name:"set",params:[{name:"column",description:"

Column ID (Number)\n or Title (String)

\n",type:"String|Integer"},{name:"value",description:"

The value to be stored

\n",type:"String|Number"}],class:"p5.TableRow",module:"IO"},setNum:{name:"setNum",params:[{name:"column",description:"

Column ID (Number)\n or Title (String)

\n",type:"String|Integer"},{name:"value",description:"

The value to be stored\n as a Float

\n",type:"Number|String"}],class:"p5.TableRow",module:"IO"},setString:{name:"setString",params:[{name:"column",description:"

Column ID (Number)\n or Title (String)

\n",type:"String|Integer"},{name:"value",description:"

The value to be stored\n as a String

\n",type:"String|Number|Boolean|Object"}],class:"p5.TableRow",module:"IO"},get:{name:"get",params:[{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.TableRow",module:"IO"},getNum:{name:"getNum",params:[{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.TableRow",module:"IO"},getString:{name:"getString",params:[{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.TableRow",module:"IO"}},"p5.XML":{getParent:{name:"getParent",class:"p5.XML",module:"IO"},getName:{name:"getName",class:"p5.XML",module:"IO"},setName:{name:"setName",params:[{name:"the",description:"

new name of the node

\n",type:"String"}],class:"p5.XML",module:"IO"},hasChildren:{name:"hasChildren",class:"p5.XML",module:"IO"},listChildren:{name:"listChildren",class:"p5.XML",module:"IO"},getChildren:{name:"getChildren",params:[{name:"name",description:"

element name

\n",type:"String",optional:!0}],class:"p5.XML",module:"IO"},getChild:{name:"getChild",params:[{name:"name",description:"

element name or index

\n",type:"String|Integer"}],class:"p5.XML",module:"IO"},addChild:{name:"addChild",params:[{name:"node",description:'

a p5.XML Object which will be the child to be added

\n',type:"p5.XML"}],class:"p5.XML",module:"IO"},removeChild:{name:"removeChild",params:[{name:"name",description:"

element name or index

\n",type:"String|Integer"}],class:"p5.XML",module:"IO"},getAttributeCount:{name:"getAttributeCount",class:"p5.XML",module:"IO"},listAttributes:{name:"listAttributes",class:"p5.XML",module:"IO"},hasAttribute:{name:"hasAttribute",params:[{name:"the",description:"

attribute to be checked

\n",type:"String"}],class:"p5.XML",module:"IO"},getNum:{name:"getNum",params:[{name:"name",description:"

the non-null full name of the attribute

\n",type:"String"},{name:"defaultValue",description:"

the default value of the attribute

\n",type:"Number",optional:!0}],class:"p5.XML",module:"IO"},getString:{name:"getString",params:[{name:"name",description:"

the non-null full name of the attribute

\n",type:"String"},{name:"defaultValue",description:"

the default value of the attribute

\n",type:"Number",optional:!0}],class:"p5.XML",module:"IO"},setAttribute:{name:"setAttribute",params:[{name:"name",description:"

the full name of the attribute

\n",type:"String"},{name:"value",description:"

the value of the attribute

\n",type:"Number|String|Boolean"}],class:"p5.XML",module:"IO"},getContent:{name:"getContent",params:[{name:"defaultValue",description:"

value returned if no content is found

\n",type:"String",optional:!0}],class:"p5.XML",module:"IO"},setContent:{name:"setContent",params:[{name:"text",description:"

the new content

\n",type:"String"}],class:"p5.XML",module:"IO"},serialize:{name:"serialize",class:"p5.XML",module:"IO"}},"p5.Vector":{x:{name:"x",class:"p5.Vector",module:"Math"},y:{name:"y",class:"p5.Vector",module:"Math"},z:{name:"z",class:"p5.Vector",module:"Math"},toString:{name:"toString",class:"p5.Vector",module:"Math"},set:{name:"set",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component of the vector

\n",type:"Number",optional:!0},{name:"y",description:"

the y component of the vector

\n",type:"Number",optional:!0},{name:"z",description:"

the z component of the vector

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

the vector to set

\n",type:"p5.Vector|Number[]"}],chainable:1}]},copy:{name:"copy",class:"p5.Vector",module:"Math"},add:{name:"add",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component of the vector to be added

\n",type:"Number"},{name:"y",description:"

the y component of the vector to be added

\n",type:"Number",optional:!0},{name:"z",description:"

the z component of the vector to be added

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

the vector to add

\n",type:"p5.Vector|Number[]"}],chainable:1},{params:[{name:"v1",description:'

a p5.Vector to add

\n',type:"p5.Vector"},{name:"v2",description:'

a p5.Vector to add

\n',type:"p5.Vector"},{name:"target",description:"

the vector to receive the result (Optional)

\n",type:"p5.Vector",optional:!0}],static:1}]},rem:{name:"rem",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component of divisor vector

\n",type:"Number"},{name:"y",description:"

the y component of divisor vector

\n",type:"Number"},{name:"z",description:"

the z component of divisor vector

\n",type:"Number"}],chainable:1},{params:[{name:"value",description:"

divisor vector

\n",type:"p5.Vector | Number[]"}],chainable:1},{params:[{name:"v1",description:'

dividend p5.Vector

\n',type:"p5.Vector"},{name:"v2",description:'

divisor p5.Vector

\n',type:"p5.Vector"}],static:1},{params:[{name:"v1",description:"",type:"p5.Vector"},{name:"v2",description:"",type:"p5.Vector"}],static:1}]},sub:{name:"sub",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component of the vector to subtract

\n",type:"Number"},{name:"y",description:"

the y component of the vector to subtract

\n",type:"Number",optional:!0},{name:"z",description:"

the z component of the vector to subtract

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

the vector to subtract

\n",type:"p5.Vector|Number[]"}],chainable:1},{params:[{name:"v1",description:'

a p5.Vector to subtract from

\n',type:"p5.Vector"},{name:"v2",description:'

a p5.Vector to subtract

\n',type:"p5.Vector"},{name:"target",description:"

the vector to receive the result (Optional)

\n",type:"p5.Vector",optional:!0}],static:1}]},mult:{name:"mult",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"n",description:"

The number to multiply with the vector

\n",type:"Number"}],chainable:1},{params:[{name:"x",description:"

The number to multiply with the x component of the vector

\n",type:"Number"},{name:"y",description:"

The number to multiply with the y component of the vector

\n",type:"Number"},{name:"z",description:"

The number to multiply with the z component of the vector

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"arr",description:"

The array to multiply with the components of the vector

\n",type:"Number[]"}],chainable:1},{params:[{name:"v",description:"

The vector to multiply with the components of the original vector

\n",type:"p5.Vector"}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number",optional:!0}],static:1},{params:[{name:"v",description:"",type:"p5.Vector"},{name:"n",description:"",type:"Number"},{name:"target",description:"

the vector to receive the result (Optional)

\n",type:"p5.Vector",optional:!0}],static:1},{params:[{name:"v0",description:"",type:"p5.Vector"},{name:"v1",description:"",type:"p5.Vector"},{name:"target",description:"",type:"p5.Vector",optional:!0}],static:1},{params:[{name:"v0",description:"",type:"p5.Vector"},{name:"arr",description:"",type:"Number[]"},{name:"target",description:"",type:"p5.Vector",optional:!0}],static:1}]},div:{name:"div",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"n",description:"

The number to divide the vector by

\n",type:"Number"}],chainable:1},{params:[{name:"x",description:"

The number to divide with the x component of the vector

\n",type:"Number"},{name:"y",description:"

The number to divide with the y component of the vector

\n",type:"Number"},{name:"z",description:"

The number to divide with the z component of the vector

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"arr",description:"

The array to divide the components of the vector by

\n",type:"Number[]"}],chainable:1},{params:[{name:"v",description:"

The vector to divide the components of the original vector by

\n",type:"p5.Vector"}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number",optional:!0}],static:1},{params:[{name:"v",description:"",type:"p5.Vector"},{name:"n",description:"",type:"Number"},{name:"target",description:"

the vector to receive the result (Optional)

\n",type:"p5.Vector",optional:!0}],static:1},{params:[{name:"v0",description:"",type:"p5.Vector"},{name:"v1",description:"",type:"p5.Vector"},{name:"target",description:"",type:"p5.Vector",optional:!0}],static:1},{params:[{name:"v0",description:"",type:"p5.Vector"},{name:"arr",description:"",type:"Number[]"},{name:"target",description:"",type:"p5.Vector",optional:!0}],static:1}]},mag:{name:"mag",class:"p5.Vector",module:"Math",overloads:[{params:[]},{params:[{name:"vecT",description:"

the vector to return the magnitude of

\n",type:"p5.Vector"}],static:1}]},magSq:{name:"magSq",class:"p5.Vector",module:"Math"},dot:{name:"dot",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

x component of the vector

\n",type:"Number"},{name:"y",description:"

y component of the vector

\n",type:"Number",optional:!0},{name:"z",description:"

z component of the vector

\n",type:"Number",optional:!0}]},{params:[{name:"value",description:'

value component of the vector or a p5.Vector

\n',type:"p5.Vector"}]},{params:[{name:"v1",description:'

the first p5.Vector

\n',type:"p5.Vector"},{name:"v2",description:'

the second p5.Vector

\n',type:"p5.Vector"}],static:1}]},cross:{name:"cross",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"v",description:'

p5.Vector to be crossed

\n',type:"p5.Vector"}]},{params:[{name:"v1",description:'

the first p5.Vector

\n',type:"p5.Vector"},{name:"v2",description:'

the second p5.Vector

\n',type:"p5.Vector"}],static:1}]},dist:{name:"dist",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"v",description:'

the x, y, and z coordinates of a p5.Vector

\n',type:"p5.Vector"}]},{params:[{name:"v1",description:'

the first p5.Vector

\n',type:"p5.Vector"},{name:"v2",description:'

the second p5.Vector

\n',type:"p5.Vector"}],static:1}]},normalize:{name:"normalize",class:"p5.Vector",module:"Math"},limit:{name:"limit",params:[{name:"max",description:"

the maximum magnitude for the vector

\n",type:"Number"}],class:"p5.Vector",module:"Math"},setMag:{name:"setMag",params:[{name:"len",description:"

the new length for this vector

\n",type:"Number"}],class:"p5.Vector",module:"Math"},heading:{name:"heading",class:"p5.Vector",module:"Math"},rotate:{name:"rotate",params:[{name:"angle",description:"

the angle of rotation

\n",type:"Number"}],class:"p5.Vector",module:"Math"},angleBetween:{name:"angleBetween",params:[{name:"value",description:'

the x, y, and z components of a p5.Vector

\n',type:"p5.Vector"}],class:"p5.Vector",module:"Math"},lerp:{name:"lerp",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component

\n",type:"Number"},{name:"y",description:"

the y component

\n",type:"Number"},{name:"z",description:"

the z component

\n",type:"Number"},{name:"amt",description:"

the amount of interpolation; some value between 0.0\n (old vector) and 1.0 (new vector). 0.9 is very near\n the new vector. 0.5 is halfway in between.

\n",type:"Number"}],chainable:1},{params:[{name:"v",description:'

the p5.Vector to lerp to

\n',type:"p5.Vector"},{name:"amt",description:"",type:"Number"}],chainable:1},{params:[{name:"v1",description:"",type:"p5.Vector"},{name:"v2",description:"",type:"p5.Vector"},{name:"amt",description:"",type:"Number"},{name:"target",description:"

the vector to receive the result (Optional)

\n",type:"p5.Vector",optional:!0}],static:1}]},reflect:{name:"reflect",params:[{name:"surfaceNormal",description:'

the p5.Vector to reflect about, will be normalized by this method

\n',type:"p5.Vector"}],class:"p5.Vector",module:"Math"},array:{name:"array",class:"p5.Vector",module:"Math"},equals:{name:"equals",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component of the vector

\n",type:"Number",optional:!0},{name:"y",description:"

the y component of the vector

\n",type:"Number",optional:!0},{name:"z",description:"

the z component of the vector

\n",type:"Number",optional:!0}]},{params:[{name:"value",description:"

the vector to compare

\n",type:"p5.Vector|Array"}]}]},fromAngle:{name:"fromAngle",params:[{name:"angle",description:'

the desired angle, in radians (unaffected by angleMode)

\n',type:"Number"},{name:"length",description:"

the length of the new vector (defaults to 1)

\n",type:"Number",optional:!0}],class:"p5.Vector",module:"Math"},fromAngles:{name:"fromAngles",params:[{name:"theta",description:"

the polar angle, in radians (zero is up)

\n",type:"Number"},{name:"phi",description:"

the azimuthal angle, in radians\n (zero is out of the screen)

\n",type:"Number"},{name:"length",description:"

the length of the new vector (defaults to 1)

\n",type:"Number",optional:!0}],class:"p5.Vector",module:"Math"},random2D:{name:"random2D",class:"p5.Vector",module:"Math"},random3D:{name:"random3D",class:"p5.Vector",module:"Math"}},"p5.Font":{font:{name:"font",class:"p5.Font",module:"Typography"},textBounds:{name:"textBounds",params:[{name:"line",description:"

a line of text

\n",type:"String"},{name:"x",description:"

x-position

\n",type:"Number"},{name:"y",description:"

y-position

\n",type:"Number"},{name:"fontSize",description:"

font size to use (optional) Default is 12.

\n",type:"Number",optional:!0},{name:"options",description:"

opentype options (optional)\n opentype fonts contains alignment and baseline options.\n Default is 'LEFT' and 'alphabetic'

\n",type:"Object",optional:!0}],class:"p5.Font",module:"Typography"},textToPoints:{name:"textToPoints",params:[{name:"txt",description:"

a line of text

\n",type:"String"},{name:"x",description:"

x-position

\n",type:"Number"},{name:"y",description:"

y-position

\n",type:"Number"},{name:"fontSize",description:"

font size to use (optional)

\n",type:"Number"},{name:"options",description:"

an (optional) object that can contain:

\n


sampleFactor - the ratio of path-length to number of samples\n(default=.1); higher values yield more points and are therefore\nmore precise

\n


simplifyThreshold - if set to a non-zero value, collinear points will be\nbe removed from the polygon; the value represents the threshold angle to use\nwhen determining whether two edges are collinear

\n",type:"Object",optional:!0}],class:"p5.Font",module:"Typography"}},"p5.Camera":{perspective:{name:"perspective",class:"p5.Camera",module:"Lights, Camera"},ortho:{name:"ortho",class:"p5.Camera",module:"Lights, Camera"},frustum:{name:"frustum",class:"p5.Camera",module:"Lights, Camera"},pan:{name:"pan",params:[{name:"angle",description:'

amount to rotate camera in current\nangleMode units.\nGreater than 0 values rotate counterclockwise (to the left).

\n',type:"Number"}],class:"p5.Camera",module:"Lights, Camera"},tilt:{name:"tilt",params:[{name:"angle",description:'

amount to rotate camera in current\nangleMode units.\nGreater than 0 values rotate counterclockwise (to the left).

\n',type:"Number"}],class:"p5.Camera",module:"Lights, Camera"},lookAt:{name:"lookAt",params:[{name:"x",description:"

x position of a point in world space

\n",type:"Number"},{name:"y",description:"

y position of a point in world space

\n",type:"Number"},{name:"z",description:"

z position of a point in world space

\n",type:"Number"}],class:"p5.Camera",module:"Lights, Camera"},camera:{name:"camera",class:"p5.Camera",module:"Lights, Camera"},move:{name:"move",params:[{name:"x",description:"

amount to move along camera's left-right axis

\n",type:"Number"},{name:"y",description:"

amount to move along camera's up-down axis

\n",type:"Number"},{name:"z",description:"

amount to move along camera's forward-backward axis

\n",type:"Number"}],class:"p5.Camera",module:"Lights, Camera"},setPosition:{name:"setPosition",params:[{name:"x",description:"

x position of a point in world space

\n",type:"Number"},{name:"y",description:"

y position of a point in world space

\n",type:"Number"},{name:"z",description:"

z position of a point in world space

\n",type:"Number"}],class:"p5.Camera",module:"Lights, Camera"}},"p5.Geometry":{computeFaces:{name:"computeFaces",class:"p5.Geometry",module:"Lights, Camera"},computeNormals:{name:"computeNormals",class:"p5.Geometry",module:"Lights, Camera"},averageNormals:{name:"averageNormals",class:"p5.Geometry",module:"Lights, Camera"},averagePoleNormals:{name:"averagePoleNormals",class:"p5.Geometry",module:"Lights, Camera"},normalize:{name:"normalize",class:"p5.Geometry",module:"Lights, Camera"}},"p5.Shader":{setUniform:{name:"setUniform",params:[{name:"uniformName",description:"

the name of the uniform in the\nshader program

\n",type:"String"},{name:"data",description:"

the data to be associated\nwith that uniform; type varies (could be a single numerical value, array,\nmatrix, or texture / sampler reference)

\n",type:"Object|Number|Boolean|Number[]"}],class:"p5.Shader",module:"Lights, Camera"}},"p5.sound":{getMasterVolume:{name:"getMasterVolume",class:"p5.sound",module:"p5.sound"},masterVolume:{name:"masterVolume",params:[{name:"volume",description:"

Volume (amplitude) between 0.0\n and 1.0 or modulating signal/oscillator

\n",type:"Number|Object"},{name:"rampTime",description:"

Fade for t seconds

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

Schedule this event to happen at\n t seconds in the future

\n",type:"Number",optional:!0}],class:"p5.sound",module:"p5.sound"},soundOut:{name:"soundOut",class:"p5.sound",module:"p5.sound"}},"p5.Effect":{amp:{name:"amp",params:[{name:"vol",description:"

amplitude between 0 and 1.0

\n",type:"Number",optional:!0},{name:"rampTime",description:"

create a fade that lasts until rampTime

\n",type:"Number",optional:!0},{name:"tFromNow",description:"

schedule this event to happen in tFromNow seconds

\n",type:"Number",optional:!0}],class:"p5.Effect",module:"p5.sound"},chain:{name:"chain",params:[{name:"arguments",description:"

Chain together multiple sound objects

\n",type:"Object",optional:!0}],class:"p5.Effect",module:"p5.sound"},drywet:{name:"drywet",params:[{name:"fade",description:"

The desired drywet value (0 - 1.0)

\n",type:"Number",optional:!0}],class:"p5.Effect",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"",type:"Object"}],class:"p5.Effect",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.Effect",module:"p5.sound"}},"p5.Filter":{biquadFilter:{name:"biquadFilter",class:"p5.Filter",module:"p5.sound"},process:{name:"process",params:[{name:"Signal",description:"

An object that outputs audio

\n",type:"Object"},{name:"freq",description:"

Frequency in Hz, from 10 to 22050

\n",type:"Number",optional:!0},{name:"res",description:"

Resonance/Width of the filter frequency\n from 0.001 to 1000

\n",type:"Number",optional:!0}],class:"p5.Filter",module:"p5.sound"},set:{name:"set",params:[{name:"freq",description:"

Frequency in Hz, from 10 to 22050

\n",type:"Number",optional:!0},{name:"res",description:"

Resonance (Q) from 0.001 to 1000

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Filter",module:"p5.sound"},freq:{name:"freq",params:[{name:"freq",description:"

Filter Frequency

\n",type:"Number"},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Filter",module:"p5.sound"},res:{name:"res",params:[{name:"res",description:"

Resonance/Width of filter freq\n from 0.001 to 1000

\n",type:"Number"},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Filter",module:"p5.sound"},gain:{name:"gain",params:[{name:"gain",description:"",type:"Number"}],class:"p5.Filter",module:"p5.sound"},toggle:{name:"toggle",class:"p5.Filter",module:"p5.sound"},setType:{name:"setType",params:[{name:"t",description:"",type:"String"}],class:"p5.Filter",module:"p5.sound"}},"p5.Oscillator":{start:{name:"start",params:[{name:"time",description:"

startTime in seconds from now.

\n",type:"Number",optional:!0},{name:"frequency",description:"

frequency in Hz.

\n",type:"Number",optional:!0}],class:"p5.Oscillator",module:"p5.sound"},stop:{name:"stop",params:[{name:"secondsFromNow",description:"

Time, in seconds from now.

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"},amp:{name:"amp",params:[{name:"vol",description:"

between 0 and 1.0\n or a modulating signal/oscillator

\n",type:"Number|Object"},{name:"rampTime",description:"

create a fade that lasts rampTime

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Oscillator",module:"p5.sound"},freq:{name:"freq",params:[{name:"Frequency",description:"

Frequency in Hz\n or modulating signal/oscillator

\n",type:"Number|Object"},{name:"rampTime",description:"

Ramp time (in seconds)

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

Schedule this event to happen\n at x seconds from now

\n",type:"Number",optional:!0}],class:"p5.Oscillator",module:"p5.sound"},setType:{name:"setType",params:[{name:"type",description:"

'sine', 'triangle', 'sawtooth' or 'square'.

\n",type:"String"}],class:"p5.Oscillator",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"

A p5.sound or Web Audio object

\n",type:"Object"}],class:"p5.Oscillator",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.Oscillator",module:"p5.sound"},pan:{name:"pan",params:[{name:"panning",description:"

Number between -1 and 1

\n",type:"Number"},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"},phase:{name:"phase",params:[{name:"phase",description:"

float between 0.0 and 1.0

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"},add:{name:"add",params:[{name:"number",description:"

Constant number to add

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"},mult:{name:"mult",params:[{name:"number",description:"

Constant number to multiply

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"},scale:{name:"scale",params:[{name:"inMin",description:"

input range minumum

\n",type:"Number"},{name:"inMax",description:"

input range maximum

\n",type:"Number"},{name:"outMin",description:"

input range minumum

\n",type:"Number"},{name:"outMax",description:"

input range maximum

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"}},"p5.MonoSynth":{play:{name:"play",params:[{name:"note",description:'

the note you want to play, specified as a\n frequency in Hertz (Number) or as a midi\n value in Note/Octave format ("C4", "Eb3"...etc")\n See \n Tone. Defaults to 440 hz.

\n',type:"String | Number"},{name:"velocity",description:"

velocity of the note to play (ranging from 0 to 1)

\n",type:"Number",optional:!0},{name:"secondsFromNow",description:"

time from now (in seconds) at which to play

\n",type:"Number",optional:!0},{name:"sustainTime",description:"

time to sustain before releasing the envelope. Defaults to 0.15 seconds.

\n",type:"Number",optional:!0}],class:"p5.MonoSynth",module:"p5.sound"},triggerAttack:{params:[{name:"note",description:'

the note you want to play, specified as a\n frequency in Hertz (Number) or as a midi\n value in Note/Octave format ("C4", "Eb3"...etc")\n See \n Tone. Defaults to 440 hz

\n',type:"String | Number"},{name:"velocity",description:"

velocity of the note to play (ranging from 0 to 1)

\n",type:"Number",optional:!0},{name:"secondsFromNow",description:"

time from now (in seconds) at which to play

\n",type:"Number",optional:!0}],name:"triggerAttack",class:"p5.MonoSynth",module:"p5.sound"},triggerRelease:{params:[{name:"secondsFromNow",description:"

time to trigger the release

\n",type:"Number"}],name:"triggerRelease",class:"p5.MonoSynth",module:"p5.sound"},setADSR:{name:"setADSR",params:[{name:"attackTime",description:"

Time (in seconds before envelope\n reaches Attack Level

\n",type:"Number"},{name:"decayTime",description:"

Time (in seconds) before envelope\n reaches Decay/Sustain Level

\n",type:"Number",optional:!0},{name:"susRatio",description:"

Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n where 1.0 = attackLevel, 0.0 = releaseLevel.\n The susRatio determines the decayLevel and the level at which the\n sustain portion of the envelope will sustain.\n For example, if attackLevel is 0.4, releaseLevel is 0,\n and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n increased to 1.0 (using setRange),\n then decayLevel would increase proportionally, to become 0.5.

\n",type:"Number",optional:!0},{name:"releaseTime",description:"

Time in seconds from now (defaults to 0)

\n",type:"Number",optional:!0}],class:"p5.MonoSynth",module:"p5.sound"},attack:{name:"attack",class:"p5.MonoSynth",module:"p5.sound"},decay:{name:"decay",class:"p5.MonoSynth",module:"p5.sound"},sustain:{name:"sustain",class:"p5.MonoSynth",module:"p5.sound"},release:{name:"release",class:"p5.MonoSynth",module:"p5.sound"},amp:{name:"amp",params:[{name:"vol",description:"

desired volume

\n",type:"Number"},{name:"rampTime",description:"

Time to reach new volume

\n",type:"Number",optional:!0}],class:"p5.MonoSynth",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"

A p5.sound or Web Audio object

\n",type:"Object"}],class:"p5.MonoSynth",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.MonoSynth",module:"p5.sound"},dispose:{name:"dispose",class:"p5.MonoSynth",module:"p5.sound"}},"p5.AudioVoice":{connect:{name:"connect",params:[{name:"unit",description:"",type:"Object"}],class:"p5.AudioVoice",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.AudioVoice",module:"p5.sound"}},"p5.PolySynth":{notes:{name:"notes",class:"p5.PolySynth",module:"p5.sound"},polyvalue:{name:"polyvalue",class:"p5.PolySynth",module:"p5.sound"},AudioVoice:{name:"AudioVoice",class:"p5.PolySynth",module:"p5.sound"},play:{name:"play",params:[{name:"note",description:"

midi note to play (ranging from 0 to 127 - 60 being a middle C)

\n",type:"Number",optional:!0},{name:"velocity",description:"

velocity of the note to play (ranging from 0 to 1)

\n",type:"Number",optional:!0},{name:"secondsFromNow",description:"

time from now (in seconds) at which to play

\n",type:"Number",optional:!0},{name:"sustainTime",description:"

time to sustain before releasing the envelope

\n",type:"Number",optional:!0}],class:"p5.PolySynth",module:"p5.sound"},noteADSR:{name:"noteADSR",params:[{name:"note",description:"

Midi note on which ADSR should be set.

\n",type:"Number",optional:!0},{name:"attackTime",description:"

Time (in seconds before envelope\n reaches Attack Level

\n",type:"Number",optional:!0},{name:"decayTime",description:"

Time (in seconds) before envelope\n reaches Decay/Sustain Level

\n",type:"Number",optional:!0},{name:"susRatio",description:"

Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n where 1.0 = attackLevel, 0.0 = releaseLevel.\n The susRatio determines the decayLevel and the level at which the\n sustain portion of the envelope will sustain.\n For example, if attackLevel is 0.4, releaseLevel is 0,\n and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n increased to 1.0 (using setRange),\n then decayLevel would increase proportionally, to become 0.5.

\n",type:"Number",optional:!0},{name:"releaseTime",description:"

Time in seconds from now (defaults to 0)

\n",type:"Number",optional:!0}],class:"p5.PolySynth",module:"p5.sound"},setADSR:{name:"setADSR",params:[{name:"attackTime",description:"

Time (in seconds before envelope\n reaches Attack Level

\n",type:"Number",optional:!0},{name:"decayTime",description:"

Time (in seconds) before envelope\n reaches Decay/Sustain Level

\n",type:"Number",optional:!0},{name:"susRatio",description:"

Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n where 1.0 = attackLevel, 0.0 = releaseLevel.\n The susRatio determines the decayLevel and the level at which the\n sustain portion of the envelope will sustain.\n For example, if attackLevel is 0.4, releaseLevel is 0,\n and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n increased to 1.0 (using setRange),\n then decayLevel would increase proportionally, to become 0.5.

\n",type:"Number",optional:!0},{name:"releaseTime",description:"

Time in seconds from now (defaults to 0)

\n",type:"Number",optional:!0}],class:"p5.PolySynth",module:"p5.sound"},noteAttack:{name:"noteAttack",params:[{name:"note",description:"

midi note on which attack should be triggered.

\n",type:"Number",optional:!0},{name:"velocity",description:"

velocity of the note to play (ranging from 0 to 1)/

\n",type:"Number",optional:!0},{name:"secondsFromNow",description:"

time from now (in seconds)

\n",type:"Number",optional:!0}],class:"p5.PolySynth",module:"p5.sound"},noteRelease:{name:"noteRelease",params:[{name:"note",description:"

midi note on which attack should be triggered.\n If no value is provided, all notes will be released.

\n",type:"Number",optional:!0},{name:"secondsFromNow",description:"

time to trigger the release

\n",type:"Number",optional:!0}],class:"p5.PolySynth",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"

A p5.sound or Web Audio object

\n",type:"Object"}],class:"p5.PolySynth",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.PolySynth",module:"p5.sound"},dispose:{name:"dispose",class:"p5.PolySynth",module:"p5.sound"}},"p5.SoundFile":{isLoaded:{name:"isLoaded",class:"p5.SoundFile",module:"p5.sound"},play:{name:"play",params:[{name:"startTime",description:"

(optional) schedule playback to start (in seconds from now).

\n",type:"Number",optional:!0},{name:"rate",description:"

(optional) playback rate

\n",type:"Number",optional:!0},{name:"amp",description:"

(optional) amplitude (volume)\n of playback

\n",type:"Number",optional:!0},{name:"cueStart",description:"

(optional) cue start time in seconds

\n",type:"Number",optional:!0},{name:"duration",description:"

(optional) duration of playback in seconds

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},playMode:{name:"playMode",params:[{name:"str",description:"

'restart' or 'sustain' or 'untilDone'

\n",type:"String"}],class:"p5.SoundFile",module:"p5.sound"},pause:{name:"pause",params:[{name:"startTime",description:"

(optional) schedule event to occur\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},loop:{name:"loop",params:[{name:"startTime",description:"

(optional) schedule event to occur\n seconds from now

\n",type:"Number",optional:!0},{name:"rate",description:"

(optional) playback rate

\n",type:"Number",optional:!0},{name:"amp",description:"

(optional) playback volume

\n",type:"Number",optional:!0},{name:"cueLoopStart",description:"

(optional) startTime in seconds

\n",type:"Number",optional:!0},{name:"duration",description:"

(optional) loop duration in seconds

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},setLoop:{name:"setLoop",params:[{name:"Boolean",description:"

set looping to true or false

\n",type:"Boolean"}],class:"p5.SoundFile",module:"p5.sound"},isLooping:{name:"isLooping",class:"p5.SoundFile",module:"p5.sound"},isPlaying:{name:"isPlaying",class:"p5.SoundFile",module:"p5.sound"},isPaused:{name:"isPaused",class:"p5.SoundFile",module:"p5.sound"},stop:{name:"stop",params:[{name:"startTime",description:"

(optional) schedule event to occur\n in seconds from now

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},setVolume:{name:"setVolume",params:[{name:"volume",description:"

Volume (amplitude) between 0.0\n and 1.0 or modulating signal/oscillator

\n",type:"Number|Object"},{name:"rampTime",description:"

Fade for t seconds

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

Schedule this event to happen at\n t seconds in the future

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},pan:{name:"pan",params:[{name:"panValue",description:"

Set the stereo panner

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},getPan:{name:"getPan",class:"p5.SoundFile",module:"p5.sound"},rate:{name:"rate",params:[{name:"playbackRate",description:"

Set the playback rate. 1.0 is normal,\n .5 is half-speed, 2.0 is twice as fast.\n Values less than zero play backwards.

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},duration:{name:"duration",class:"p5.SoundFile",module:"p5.sound"},currentTime:{name:"currentTime",class:"p5.SoundFile",module:"p5.sound"},jump:{name:"jump",params:[{name:"cueTime",description:"

cueTime of the soundFile in seconds.

\n",type:"Number"},{name:"duration",description:"

duration in seconds.

\n",type:"Number"}],class:"p5.SoundFile",module:"p5.sound"},channels:{name:"channels",class:"p5.SoundFile",module:"p5.sound"},sampleRate:{name:"sampleRate",class:"p5.SoundFile",module:"p5.sound"},frames:{name:"frames",class:"p5.SoundFile",module:"p5.sound"},getPeaks:{name:"getPeaks",params:[{name:"length",description:"

length is the size of the returned array.\n Larger length results in more precision.\n Defaults to 5*width of the browser window.

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},reverseBuffer:{name:"reverseBuffer",class:"p5.SoundFile",module:"p5.sound"},onended:{name:"onended",params:[{name:"callback",description:"

function to call when the\n soundfile has ended.

\n",type:"Function"}],class:"p5.SoundFile",module:"p5.sound"},connect:{name:"connect",params:[{name:"object",description:"

Audio object that accepts an input

\n",type:"Object",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.SoundFile",module:"p5.sound"},setPath:{name:"setPath",params:[{name:"path",description:"

path to audio file

\n",type:"String"},{name:"callback",description:"

Callback

\n",type:"Function"}],class:"p5.SoundFile",module:"p5.sound"},setBuffer:{name:"setBuffer",params:[{name:"buf",description:"

Array of Float32 Array(s). 2 Float32 Arrays\n will create a stereo source. 1 will create\n a mono source.

\n",type:"Array"}],class:"p5.SoundFile",module:"p5.sound"},processPeaks:{name:"processPeaks",params:[{name:"callback",description:"

a function to call once this data is returned

\n",type:"Function"},{name:"initThreshold",description:"

initial threshold defaults to 0.9

\n",type:"Number",optional:!0},{name:"minThreshold",description:"

minimum threshold defaults to 0.22

\n",type:"Number",optional:!0},{name:"minPeaks",description:"

minimum number of peaks defaults to 200

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},addCue:{name:"addCue",params:[{name:"time",description:"

Time in seconds, relative to this media\n element's playback. For example, to trigger\n an event every time playback reaches two\n seconds, pass in the number 2. This will be\n passed as the first parameter to\n the callback function.

\n",type:"Number"},{name:"callback",description:"

Name of a function that will be\n called at the given time. The callback will\n receive time and (optionally) param as its\n two parameters.

\n",type:"Function"},{name:"value",description:"

An object to be passed as the\n second parameter to the\n callback function.

\n",type:"Object",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},removeCue:{name:"removeCue",params:[{name:"id",description:"

ID of the cue, as returned by addCue

\n",type:"Number"}],class:"p5.SoundFile",module:"p5.sound"},clearCues:{name:"clearCues",class:"p5.SoundFile",module:"p5.sound"},save:{name:"save",params:[{name:"fileName",description:"

name of the resulting .wav file.

\n",type:"String",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},getBlob:{name:"getBlob",class:"p5.SoundFile",module:"p5.sound"}},"p5.Amplitude":{setInput:{name:"setInput",params:[{name:"snd",description:"

set the sound source\n (optional, defaults to\n master output)

\n",type:"SoundObject|undefined",optional:!0},{name:"smoothing",description:"

a range between 0.0 and 1.0\n to smooth amplitude readings

\n",type:"Number|undefined",optional:!0}],class:"p5.Amplitude",module:"p5.sound"},getLevel:{name:"getLevel",params:[{name:"channel",description:"

Optionally return only channel 0 (left) or 1 (right)

\n",type:"Number",optional:!0}],class:"p5.Amplitude",module:"p5.sound"},toggleNormalize:{name:"toggleNormalize",params:[{name:"boolean",description:"

set normalize to true (1) or false (0)

\n",type:"Boolean",optional:!0}],class:"p5.Amplitude",module:"p5.sound"},smooth:{name:"smooth",params:[{name:"set",description:"

smoothing from 0.0 <= 1

\n",type:"Number"}],class:"p5.Amplitude",module:"p5.sound"}},"p5.FFT":{setInput:{name:"setInput",params:[{name:"source",description:"

p5.sound object (or web audio API source node)

\n",type:"Object",optional:!0}],class:"p5.FFT",module:"p5.sound"},waveform:{name:"waveform",params:[{name:"bins",description:"

Must be a power of two between\n 16 and 1024. Defaults to 1024.

\n",type:"Number",optional:!0},{name:"precision",description:"

If any value is provided, will return results\n in a Float32 Array which is more precise\n than a regular array.

\n",type:"String",optional:!0}],class:"p5.FFT",module:"p5.sound"},analyze:{name:"analyze",params:[{name:"bins",description:"

Must be a power of two between\n 16 and 1024. Defaults to 1024.

\n",type:"Number",optional:!0},{name:"scale",description:'

If "dB," returns decibel\n float measurements between\n -140 and 0 (max).\n Otherwise returns integers from 0-255.

\n',type:"Number",optional:!0}],class:"p5.FFT",module:"p5.sound"},getEnergy:{name:"getEnergy",params:[{name:"frequency1",description:'

Will return a value representing\n energy at this frequency. Alternately,\n the strings "bass", "lowMid" "mid",\n "highMid", and "treble" will return\n predefined frequency ranges.

\n',type:"Number|String"},{name:"frequency2",description:"

If a second frequency is given,\n will return average amount of\n energy that exists between the\n two frequencies.

\n",type:"Number",optional:!0}],class:"p5.FFT",module:"p5.sound"},getCentroid:{name:"getCentroid",class:"p5.FFT",module:"p5.sound"},smooth:{name:"smooth",params:[{name:"smoothing",description:"

0.0 < smoothing < 1.0.\n Defaults to 0.8.

\n",type:"Number"}],class:"p5.FFT",module:"p5.sound"},linAverages:{name:"linAverages",params:[{name:"N",description:"

Number of returned frequency groups

\n",type:"Number"}],class:"p5.FFT",module:"p5.sound"},logAverages:{name:"logAverages",params:[{name:"octaveBands",description:"

Array of Octave Bands objects for grouping

\n",type:"Array"}],class:"p5.FFT",module:"p5.sound"},getOctaveBands:{name:"getOctaveBands",params:[{name:"N",description:"

Specifies the 1/N type of generated octave bands

\n",type:"Number"},{name:"fCtr0",description:"

Minimum central frequency for the lowest band

\n",type:"Number"}],class:"p5.FFT",module:"p5.sound"}},"p5.Signal":{fade:{name:"fade",params:[{name:"value",description:"

Value to set this signal

\n",type:"Number"},{name:"secondsFromNow",description:"

Length of fade, in seconds from now

\n",type:"Number",optional:!0}],class:"p5.Signal",module:"p5.sound"},setInput:{name:"setInput",params:[{name:"input",description:"",type:"Object"}],class:"p5.Signal",module:"p5.sound"},add:{name:"add",params:[{name:"number",description:"",type:"Number"}],class:"p5.Signal",module:"p5.sound"},mult:{name:"mult",params:[{name:"number",description:"

to multiply

\n",type:"Number"}],class:"p5.Signal",module:"p5.sound"},scale:{name:"scale",params:[{name:"number",description:"

to multiply

\n",type:"Number"},{name:"inMin",description:"

input range minumum

\n",type:"Number"},{name:"inMax",description:"

input range maximum

\n",type:"Number"},{name:"outMin",description:"

input range minumum

\n",type:"Number"},{name:"outMax",description:"

input range maximum

\n",type:"Number"}],class:"p5.Signal",module:"p5.sound"}},"p5.Envelope":{attackTime:{name:"attackTime",class:"p5.Envelope",module:"p5.sound"},attackLevel:{name:"attackLevel",class:"p5.Envelope",module:"p5.sound"},decayTime:{name:"decayTime",class:"p5.Envelope",module:"p5.sound"},decayLevel:{name:"decayLevel",class:"p5.Envelope",module:"p5.sound"},releaseTime:{name:"releaseTime",class:"p5.Envelope",module:"p5.sound"},releaseLevel:{name:"releaseLevel",class:"p5.Envelope",module:"p5.sound"},set:{name:"set",params:[{name:"attackTime",description:"

Time (in seconds) before level\n reaches attackLevel

\n",type:"Number"},{name:"attackLevel",description:"

Typically an amplitude between\n 0.0 and 1.0

\n",type:"Number"},{name:"decayTime",description:"

Time

\n",type:"Number"},{name:"decayLevel",description:"

Amplitude (In a standard ADSR envelope,\n decayLevel = sustainLevel)

\n",type:"Number"},{name:"releaseTime",description:"

Release Time (in seconds)

\n",type:"Number"},{name:"releaseLevel",description:"

Amplitude

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},setADSR:{name:"setADSR",params:[{name:"attackTime",description:"

Time (in seconds before envelope\n reaches Attack Level

\n",type:"Number"},{name:"decayTime",description:"

Time (in seconds) before envelope\n reaches Decay/Sustain Level

\n",type:"Number",optional:!0},{name:"susRatio",description:"

Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n where 1.0 = attackLevel, 0.0 = releaseLevel.\n The susRatio determines the decayLevel and the level at which the\n sustain portion of the envelope will sustain.\n For example, if attackLevel is 0.4, releaseLevel is 0,\n and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n increased to 1.0 (using setRange),\n then decayLevel would increase proportionally, to become 0.5.

\n",type:"Number",optional:!0},{name:"releaseTime",description:"

Time in seconds from now (defaults to 0)

\n",type:"Number",optional:!0}],class:"p5.Envelope",module:"p5.sound"},setRange:{name:"setRange",params:[{name:"aLevel",description:"

attack level (defaults to 1)

\n",type:"Number"},{name:"rLevel",description:"

release level (defaults to 0)

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},setInput:{name:"setInput",params:[{name:"inputs",description:"

A p5.sound object or\n Web Audio Param.

\n",type:"Object",optional:!0,multiple:!0}],class:"p5.Envelope",module:"p5.sound"},setExp:{name:"setExp",params:[{name:"isExp",description:"

true is exponential, false is linear

\n",type:"Boolean"}],class:"p5.Envelope",module:"p5.sound"},play:{name:"play",params:[{name:"unit",description:"

A p5.sound object or\n Web Audio Param.

\n",type:"Object"},{name:"startTime",description:"

time from now (in seconds) at which to play

\n",type:"Number",optional:!0},{name:"sustainTime",description:"

time to sustain before releasing the envelope

\n",type:"Number",optional:!0}],class:"p5.Envelope",module:"p5.sound"},triggerAttack:{name:"triggerAttack",params:[{name:"unit",description:"

p5.sound Object or Web Audio Param

\n",type:"Object"},{name:"secondsFromNow",description:"

time from now (in seconds)

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},triggerRelease:{name:"triggerRelease",params:[{name:"unit",description:"

p5.sound Object or Web Audio Param

\n",type:"Object"},{name:"secondsFromNow",description:"

time to trigger the release

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},ramp:{name:"ramp",params:[{name:"unit",description:"

p5.sound Object or Web Audio Param

\n",type:"Object"},{name:"secondsFromNow",description:"

When to trigger the ramp

\n",type:"Number"},{name:"v",description:"

Target value

\n",type:"Number"},{name:"v2",description:"

Second target value (optional)

\n",type:"Number",optional:!0}],class:"p5.Envelope",module:"p5.sound"},add:{name:"add",params:[{name:"number",description:"

Constant number to add

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},mult:{name:"mult",params:[{name:"number",description:"

Constant number to multiply

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},scale:{name:"scale",params:[{name:"inMin",description:"

input range minumum

\n",type:"Number"},{name:"inMax",description:"

input range maximum

\n",type:"Number"},{name:"outMin",description:"

input range minumum

\n",type:"Number"},{name:"outMax",description:"

input range maximum

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"}},"p5.Pulse":{width:{name:"width",params:[{name:"width",description:"

Width between the pulses (0 to 1.0,\n defaults to 0)

\n",type:"Number",optional:!0}],class:"p5.Pulse",module:"p5.sound"}},"p5.Noise":{setType:{name:"setType",params:[{name:"type",description:"

'white', 'pink' or 'brown'

\n",type:"String",optional:!0}],class:"p5.Noise",module:"p5.sound"}},"p5.AudioIn":{input:{name:"input",class:"p5.AudioIn",module:"p5.sound"},output:{name:"output",class:"p5.AudioIn",module:"p5.sound"},stream:{name:"stream",class:"p5.AudioIn",module:"p5.sound"},mediaStream:{name:"mediaStream",class:"p5.AudioIn",module:"p5.sound"},currentSource:{name:"currentSource",class:"p5.AudioIn",module:"p5.sound"},enabled:{name:"enabled",class:"p5.AudioIn",module:"p5.sound"},amplitude:{name:"amplitude",class:"p5.AudioIn",module:"p5.sound"},start:{name:"start",params:[{name:"successCallback",description:"

Name of a function to call on\n success.

\n",type:"Function",optional:!0},{name:"errorCallback",description:"

Name of a function to call if\n there was an error. For example,\n some browsers do not support\n getUserMedia.

\n",type:"Function",optional:!0}],class:"p5.AudioIn",module:"p5.sound"},stop:{name:"stop",class:"p5.AudioIn",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"

An object that accepts audio input,\n such as an FFT

\n",type:"Object",optional:!0}],class:"p5.AudioIn",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.AudioIn",module:"p5.sound"},getLevel:{name:"getLevel",params:[{name:"smoothing",description:"

Smoothing is 0.0 by default.\n Smooths values based on previous values.

\n",type:"Number",optional:!0}],class:"p5.AudioIn",module:"p5.sound"},amp:{name:"amp",params:[{name:"vol",description:"

between 0 and 1.0

\n",type:"Number"},{name:"time",description:"

ramp time (optional)

\n",type:"Number",optional:!0}],class:"p5.AudioIn",module:"p5.sound"},getSources:{name:"getSources",params:[{name:"successCallback",description:"

This callback function handles the sources when they\n have been enumerated. The callback function\n receives the deviceList array as its only argument

\n",type:"Function",optional:!0},{name:"errorCallback",description:"

This optional callback receives the error\n message as its argument.

\n",type:"Function",optional:!0}],class:"p5.AudioIn",module:"p5.sound"},setSource:{name:"setSource",params:[{name:"num",description:"

position of input source in the array

\n",type:"Number"}],class:"p5.AudioIn",module:"p5.sound"}},"p5.EQ":{bands:{name:"bands",class:"p5.EQ",module:"p5.sound"},process:{name:"process",params:[{name:"src",description:"

Audio source

\n",type:"Object"}],class:"p5.EQ",module:"p5.sound"}},"p5.Panner3D":{panner:{name:"panner",class:"p5.Panner3D",module:"p5.sound"},process:{name:"process",params:[{name:"src",description:"

Input source

\n",type:"Object"}],class:"p5.Panner3D",module:"p5.sound"},set:{name:"set",params:[{name:"xVal",description:"",type:"Number"},{name:"yVal",description:"",type:"Number"},{name:"zVal",description:"",type:"Number"},{name:"time",description:"",type:"Number"}],class:"p5.Panner3D",module:"p5.sound"},positionX:{name:"positionX",class:"p5.Panner3D",module:"p5.sound"},positionY:{name:"positionY",class:"p5.Panner3D",module:"p5.sound"},positionZ:{name:"positionZ",class:"p5.Panner3D",module:"p5.sound"},orient:{name:"orient",params:[{name:"xVal",description:"",type:"Number"},{name:"yVal",description:"",type:"Number"},{name:"zVal",description:"",type:"Number"},{name:"time",description:"",type:"Number"}],class:"p5.Panner3D",module:"p5.sound"},orientX:{name:"orientX",class:"p5.Panner3D",module:"p5.sound"},orientY:{name:"orientY",class:"p5.Panner3D",module:"p5.sound"},orientZ:{name:"orientZ",class:"p5.Panner3D",module:"p5.sound"},setFalloff:{name:"setFalloff",params:[{name:"maxDistance",description:"",type:"Number",optional:!0},{name:"rolloffFactor",description:"",type:"Number",optional:!0}],class:"p5.Panner3D",module:"p5.sound"},maxDist:{name:"maxDist",params:[{name:"maxDistance",description:"",type:"Number"}],class:"p5.Panner3D",module:"p5.sound"},rollof:{name:"rollof",params:[{name:"rolloffFactor",description:"",type:"Number"}],class:"p5.Panner3D",module:"p5.sound"}},"p5.Delay":{leftDelay:{name:"leftDelay",class:"p5.Delay",module:"p5.sound"},rightDelay:{name:"rightDelay",class:"p5.Delay",module:"p5.sound"},process:{name:"process",params:[{name:"Signal",description:"

An object that outputs audio

\n",type:"Object"},{name:"delayTime",description:"

Time (in seconds) of the delay/echo.\n Some browsers limit delayTime to\n 1 second.

\n",type:"Number",optional:!0},{name:"feedback",description:"

sends the delay back through itself\n in a loop that decreases in volume\n each time.

\n",type:"Number",optional:!0},{name:"lowPass",description:"

Cutoff frequency. Only frequencies\n below the lowPass will be part of the\n delay.

\n",type:"Number",optional:!0}],class:"p5.Delay",module:"p5.sound"},delayTime:{name:"delayTime",params:[{name:"delayTime",description:"

Time (in seconds) of the delay

\n",type:"Number"}],class:"p5.Delay",module:"p5.sound"},feedback:{name:"feedback",params:[{name:"feedback",description:"

0.0 to 1.0, or an object such as an\n Oscillator that can be used to\n modulate this param

\n",type:"Number|Object"}],class:"p5.Delay",module:"p5.sound"},filter:{name:"filter",params:[{name:"cutoffFreq",description:"

A lowpass filter will cut off any\n frequencies higher than the filter frequency.

\n",type:"Number|Object"},{name:"res",description:"

Resonance of the filter frequency\n cutoff, or an object (i.e. a p5.Oscillator)\n that can be used to modulate this parameter.\n High numbers (i.e. 15) will produce a resonance,\n low numbers (i.e. .2) will produce a slope.

\n",type:"Number|Object"}],class:"p5.Delay",module:"p5.sound"},setType:{name:"setType",params:[{name:"type",description:"

'pingPong' (1) or 'default' (0)

\n",type:"String|Number"}],class:"p5.Delay",module:"p5.sound"},amp:{name:"amp",params:[{name:"volume",description:"

amplitude between 0 and 1.0

\n",type:"Number"},{name:"rampTime",description:"

create a fade that lasts rampTime

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Delay",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"",type:"Object"}],class:"p5.Delay",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.Delay",module:"p5.sound"}},"p5.Reverb":{process:{name:"process",params:[{name:"src",description:"

p5.sound / Web Audio object with a sound\n output.

\n",type:"Object"},{name:"seconds",description:"

Duration of the reverb, in seconds.\n Min: 0, Max: 10. Defaults to 3.

\n",type:"Number",optional:!0},{name:"decayRate",description:"

Percentage of decay with each echo.\n Min: 0, Max: 100. Defaults to 2.

\n",type:"Number",optional:!0},{name:"reverse",description:"

Play the reverb backwards or forwards.

\n",type:"Boolean",optional:!0}],class:"p5.Reverb",module:"p5.sound"},set:{name:"set",params:[{name:"seconds",description:"

Duration of the reverb, in seconds.\n Min: 0, Max: 10. Defaults to 3.

\n",type:"Number",optional:!0},{name:"decayRate",description:"

Percentage of decay with each echo.\n Min: 0, Max: 100. Defaults to 2.

\n",type:"Number",optional:!0},{name:"reverse",description:"

Play the reverb backwards or forwards.

\n",type:"Boolean",optional:!0}],class:"p5.Reverb",module:"p5.sound"},amp:{name:"amp",params:[{name:"volume",description:"

amplitude between 0 and 1.0

\n",type:"Number"},{name:"rampTime",description:"

create a fade that lasts rampTime

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Reverb",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"",type:"Object"}],class:"p5.Reverb",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.Reverb",module:"p5.sound"}},"p5.Convolver":{convolverNode:{name:"convolverNode",class:"p5.Convolver",module:"p5.sound"},process:{name:"process",params:[{name:"src",description:"

p5.sound / Web Audio object with a sound\n output.

\n",type:"Object"}],class:"p5.Convolver",module:"p5.sound"},impulses:{name:"impulses",class:"p5.Convolver",module:"p5.sound"},addImpulse:{name:"addImpulse",params:[{name:"path",description:"

path to a sound file

\n",type:"String"},{name:"callback",description:"

function (optional)

\n",type:"Function"},{name:"errorCallback",description:"

function (optional)

\n",type:"Function"}],class:"p5.Convolver",module:"p5.sound"},resetImpulse:{name:"resetImpulse",params:[{name:"path",description:"

path to a sound file

\n",type:"String"},{name:"callback",description:"

function (optional)

\n",type:"Function"},{name:"errorCallback",description:"

function (optional)

\n",type:"Function"}],class:"p5.Convolver",module:"p5.sound"},toggleImpulse:{name:"toggleImpulse",params:[{name:"id",description:"

Identify the impulse by its original filename\n (String), or by its position in the\n .impulses Array (Number).

\n",type:"String|Number"}],class:"p5.Convolver",module:"p5.sound"}},"p5.Phrase":{sequence:{name:"sequence",class:"p5.Phrase",module:"p5.sound"}},"p5.Part":{setBPM:{name:"setBPM",params:[{name:"BPM",description:"

Beats Per Minute

\n",type:"Number"},{name:"rampTime",description:"

Seconds from now

\n",type:"Number",optional:!0}],class:"p5.Part",module:"p5.sound"},getBPM:{name:"getBPM",class:"p5.Part",module:"p5.sound"},start:{name:"start",params:[{name:"time",description:"

seconds from now

\n",type:"Number",optional:!0}],class:"p5.Part",module:"p5.sound"},loop:{name:"loop",params:[{name:"time",description:"

seconds from now

\n",type:"Number",optional:!0}],class:"p5.Part",module:"p5.sound"},noLoop:{name:"noLoop",class:"p5.Part",module:"p5.sound"},stop:{name:"stop",params:[{name:"time",description:"

seconds from now

\n",type:"Number",optional:!0}],class:"p5.Part",module:"p5.sound"},pause:{name:"pause",params:[{name:"time",description:"

seconds from now

\n",type:"Number"}],class:"p5.Part",module:"p5.sound"},addPhrase:{name:"addPhrase",params:[{name:"phrase",description:"

reference to a p5.Phrase

\n",type:"p5.Phrase"}],class:"p5.Part",module:"p5.sound"},removePhrase:{name:"removePhrase",params:[{name:"phraseName",description:"",type:"String"}],class:"p5.Part",module:"p5.sound"},getPhrase:{name:"getPhrase",params:[{name:"phraseName",description:"",type:"String"}],class:"p5.Part",module:"p5.sound"},replaceSequence:{name:"replaceSequence",params:[{name:"phraseName",description:"",type:"String"},{name:"sequence",description:"

Array of values to pass into the callback\n at each step of the phrase.

\n",type:"Array"}],class:"p5.Part",module:"p5.sound"},onStep:{name:"onStep",params:[{name:"callback",description:"

The name of the callback\n you want to fire\n on every beat/tatum.

\n",type:"Function"}],class:"p5.Part",module:"p5.sound"}},"p5.Score":{start:{name:"start",class:"p5.Score",module:"p5.sound"},stop:{name:"stop",class:"p5.Score",module:"p5.sound"},pause:{name:"pause",class:"p5.Score",module:"p5.sound"},loop:{name:"loop",class:"p5.Score",module:"p5.sound"},noLoop:{name:"noLoop",class:"p5.Score",module:"p5.sound"},setBPM:{name:"setBPM",params:[{name:"BPM",description:"

Beats Per Minute

\n",type:"Number"},{name:"rampTime",description:"

Seconds from now

\n",type:"Number"}],class:"p5.Score",module:"p5.sound"}},"p5.SoundLoop":{musicalTimeMode:{name:"musicalTimeMode",class:"p5.SoundLoop",module:"p5.sound"},maxIterations:{name:"maxIterations",class:"p5.SoundLoop",module:"p5.sound"},start:{name:"start",params:[{name:"timeFromNow",description:"

schedule a starting time

\n",type:"Number",optional:!0}],class:"p5.SoundLoop",module:"p5.sound"},stop:{name:"stop",params:[{name:"timeFromNow",description:"

schedule a stopping time

\n",type:"Number",optional:!0}],class:"p5.SoundLoop",module:"p5.sound"},pause:{name:"pause",params:[{name:"timeFromNow",description:"

schedule a pausing time

\n",type:"Number",optional:!0}],class:"p5.SoundLoop",module:"p5.sound"},syncedStart:{name:"syncedStart",params:[{name:"otherLoop",description:"

a p5.SoundLoop to sync with

\n",type:"Object"},{name:"timeFromNow",description:"

Start the loops in sync after timeFromNow seconds

\n",type:"Number",optional:!0}],class:"p5.SoundLoop",module:"p5.sound"},bpm:{name:"bpm",class:"p5.SoundLoop",module:"p5.sound"},timeSignature:{name:"timeSignature",class:"p5.SoundLoop",module:"p5.sound"},interval:{name:"interval",class:"p5.SoundLoop",module:"p5.sound"},iterations:{name:"iterations",class:"p5.SoundLoop",module:"p5.sound"}},"p5.Compressor":{compressor:{name:"compressor",class:"p5.Compressor",module:"p5.sound"},process:{name:"process",params:[{name:"src",description:"

Sound source to be connected

\n",type:"Object"},{name:"attack",description:"

The amount of time (in seconds) to reduce the gain by 10dB,\n default = .003, range 0 - 1

\n",type:"Number",optional:!0},{name:"knee",description:'

A decibel value representing the range above the\n threshold where the curve smoothly transitions to the "ratio" portion.\n default = 30, range 0 - 40

\n',type:"Number",optional:!0},{name:"ratio",description:"

The amount of dB change in input for a 1 dB change in output\n default = 12, range 1 - 20

\n",type:"Number",optional:!0},{name:"threshold",description:"

The decibel value above which the compression will start taking effect\n default = -24, range -100 - 0

\n",type:"Number",optional:!0},{name:"release",description:"

The amount of time (in seconds) to increase the gain by 10dB\n default = .25, range 0 - 1

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},set:{name:"set",params:[{name:"attack",description:"

The amount of time (in seconds) to reduce the gain by 10dB,\n default = .003, range 0 - 1

\n",type:"Number"},{name:"knee",description:'

A decibel value representing the range above the\n threshold where the curve smoothly transitions to the "ratio" portion.\n default = 30, range 0 - 40

\n',type:"Number"},{name:"ratio",description:"

The amount of dB change in input for a 1 dB change in output\n default = 12, range 1 - 20

\n",type:"Number"},{name:"threshold",description:"

The decibel value above which the compression will start taking effect\n default = -24, range -100 - 0

\n",type:"Number"},{name:"release",description:"

The amount of time (in seconds) to increase the gain by 10dB\n default = .25, range 0 - 1

\n",type:"Number"}],class:"p5.Compressor",module:"p5.sound"},attack:{name:"attack",params:[{name:"attack",description:"

Attack is the amount of time (in seconds) to reduce the gain by 10dB,\n default = .003, range 0 - 1

\n",type:"Number",optional:!0},{name:"time",description:"

Assign time value to schedule the change in value

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},knee:{name:"knee",params:[{name:"knee",description:'

A decibel value representing the range above the\n threshold where the curve smoothly transitions to the "ratio" portion.\n default = 30, range 0 - 40

\n',type:"Number",optional:!0},{name:"time",description:"

Assign time value to schedule the change in value

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},ratio:{name:"ratio",params:[{name:"ratio",description:"

The amount of dB change in input for a 1 dB change in output\n default = 12, range 1 - 20

\n",type:"Number",optional:!0},{name:"time",description:"

Assign time value to schedule the change in value

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},threshold:{name:"threshold",params:[{name:"threshold",description:"

The decibel value above which the compression will start taking effect\n default = -24, range -100 - 0

\n",type:"Number"},{name:"time",description:"

Assign time value to schedule the change in value

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},release:{name:"release",params:[{name:"release",description:"

The amount of time (in seconds) to increase the gain by 10dB\n default = .25, range 0 - 1

\n",type:"Number"},{name:"time",description:"

Assign time value to schedule the change in value

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},reduction:{name:"reduction",class:"p5.Compressor",module:"p5.sound"}},"p5.SoundRecorder":{setInput:{name:"setInput",params:[{name:"unit",description:"

p5.sound object or a web audio unit\n that outputs sound

\n",type:"Object",optional:!0}],class:"p5.SoundRecorder",module:"p5.sound"},record:{name:"record",params:[{name:"soundFile",description:"

p5.SoundFile

\n",type:"p5.SoundFile"},{name:"duration",description:"

Time (in seconds)

\n",type:"Number",optional:!0},{name:"callback",description:"

The name of a function that will be\n called once the recording completes

\n",type:"Function",optional:!0}],class:"p5.SoundRecorder",module:"p5.sound"},stop:{name:"stop",class:"p5.SoundRecorder",module:"p5.sound"}},"p5.PeakDetect":{isDetected:{name:"isDetected",class:"p5.PeakDetect",module:"p5.sound"},update:{name:"update",params:[{name:"fftObject",description:"

A p5.FFT object

\n",type:"p5.FFT"}],class:"p5.PeakDetect",module:"p5.sound"},onPeak:{name:"onPeak",params:[{name:"callback",description:"

Name of a function that will\n be called when a peak is\n detected.

\n",type:"Function"},{name:"val",description:"

Optional value to pass\n into the function when\n a peak is detected.

\n",type:"Object",optional:!0}],class:"p5.PeakDetect",module:"p5.sound"}},"p5.Gain":{setInput:{name:"setInput",params:[{name:"src",description:"

p5.sound / Web Audio object with a sound\n output.

\n",type:"Object"}],class:"p5.Gain",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"",type:"Object"}],class:"p5.Gain",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.Gain",module:"p5.sound"},amp:{name:"amp",params:[{name:"volume",description:"

amplitude between 0 and 1.0

\n",type:"Number"},{name:"rampTime",description:"

create a fade that lasts rampTime

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Gain",module:"p5.sound"}},"p5.Distortion":{WaveShaperNode:{name:"WaveShaperNode",class:"p5.Distortion",module:"p5.sound"},process:{name:"process",params:[{name:"amount",description:"

Unbounded distortion amount.\n Normal values range from 0-1.

\n",type:"Number",optional:!0,optdefault:"0.25"},{name:"oversample",description:"

'none', '2x', or '4x'.

\n",type:"String",optional:!0,optdefault:"'none'"}],class:"p5.Distortion",module:"p5.sound"},set:{name:"set",params:[{name:"amount",description:"

Unbounded distortion amount.\n Normal values range from 0-1.

\n",type:"Number",optional:!0,optdefault:"0.25"},{name:"oversample",description:"

'none', '2x', or '4x'.

\n",type:"String",optional:!0,optdefault:"'none'"}],class:"p5.Distortion",module:"p5.sound"},getAmount:{name:"getAmount",class:"p5.Distortion",module:"p5.sound"},getOversample:{name:"getOversample",class:"p5.Distortion",module:"p5.sound"}}}},{}],2:[function(e,t,r){"use strict";r.byteLength=function(e){var t=c(e),r=t[0],n=t[1];return 3*(r+n)/4-n},r.toByteArray=function(e){var t,r,n=c(e),a=n[0],o=n[1],i=new u(function(e,t){return 3*(e+t)/4-t}(a,o)),s=0,l=0>16&255,i[s++]=t>>8&255,i[s++]=255&t;2===o&&(t=p[e.charCodeAt(r)]<<2|p[e.charCodeAt(r+1)]>>4,i[s++]=255&t);1===o&&(t=p[e.charCodeAt(r)]<<10|p[e.charCodeAt(r+1)]<<4|p[e.charCodeAt(r+2)]>>2,i[s++]=t>>8&255,i[s++]=255&t);return i},r.fromByteArray=function(e){for(var t,r=e.length,n=r%3,a=[],o=0,i=r-n;o>2]+s[t<<4&63]+"==")):2==n&&(t=(e[r-2]<<8)+e[r-1],a.push(s[t>>10]+s[t>>4&63]+s[t<<2&63]+"="));return a.join("")};for(var s=[],p=[],u="undefined"!=typeof Uint8Array?Uint8Array:Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,o=n.length;a>18&63]+s[a>>12&63]+s[a>>6&63]+s[63&a]);return o.join("")}p["-".charCodeAt(0)]=62,p["_".charCodeAt(0)]=63},{}],3:[function(e,t,r){},{}],4:[function(e,t,r){arguments[4][3][0].apply(r,arguments)},{dup:3}],5:[function(F,e,U){(function(c){"use strict";var n=F("base64-js"),o=F("ieee754"),e="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;U.Buffer=c,U.SlowBuffer=function(e){+e!=e&&(e=0);return c.alloc(+e)},U.INSPECT_MAX_BYTES=50;var r=2147483647;function i(e){if(r>>1;case"base64":return P(e).length;default:if(a)return n?-1:I(e).length;t=(""+t).toLowerCase(),a=!0}}function h(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function m(e,t,r,n,a){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):2147483647=e.length){if(a)return-1;r=e.length-1}else if(r<0){if(!a)return-1;r=0}if("string"==typeof t&&(t=c.from(t,n)),c.isBuffer(t))return 0===t.length?-1:f(e,t,r,n,a);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):f(e,[t],r,n,a);throw new TypeError("val must be string, number or Buffer")}function f(e,t,r,n,a){var o,i=1,s=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s/=i=2,l/=2,r/=2}function p(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(a){var u=-1;for(o=r;o>8,a=r%256,o.push(a),o.push(n);return o}(t,e.length-r),e,r,n)}function b(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function _(e,t,r){r=Math.min(e.length,r);for(var n=[],a=t;a>>10&1023|55296),u=56320|1023&u),n.push(u),a+=c}return function(e){var t=e.length;if(t<=x)return String.fromCharCode.apply(String,e);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e=e||"utf8";;)switch(e){case"hex":return M(this,t,r);case"utf8":case"utf-8":return _(this,t,r);case"ascii":return S(this,t,r);case"latin1":case"binary":return w(this,t,r);case"base64":return b(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}.apply(this,arguments)},c.prototype.equals=function(e){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===c.compare(this,e)},c.prototype.inspect=function(){var e="",t=U.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),""},e&&(c.prototype[e]=c.prototype.inspect),c.prototype.compare=function(e,t,r,n,a){if(D(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),!c.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===a&&(a=this.length),t<0||r>e.length||n<0||a>this.length)throw new RangeError("out of range index");if(a<=n&&r<=t)return 0;if(a<=n)return-1;if(r<=t)return 1;if(this===e)return 0;for(var o=(a>>>=0)-(n>>>=0),i=(r>>>=0)-(t>>>=0),s=Math.min(o,i),l=this.slice(n,a),p=e.slice(t,r),u=0;u>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var a=this.length-t;if((void 0===r||athis.length)throw new RangeError("Attempt to write outside buffer bounds");n=n||"utf8";for(var o,i,s,l,p,u,c=!1;;)switch(n){case"hex":return y(this,e,t,r);case"utf8":case"utf-8":return p=t,u=r,R(I(e,(l=this).length-p),l,p,u);case"ascii":return g(this,e,t,r);case"latin1":case"binary":return g(this,e,t,r);case"base64":return o=this,i=t,s=r,R(P(e),o,i,s);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return v(this,e,t,r);default:if(c)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),c=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var x=4096;function S(e,t,r){var n="";r=Math.min(e.length,r);for(var a=t;ae.length)throw new RangeError("Index out of range")}function N(e,t,r,n){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function O(e,t,r,n,a){return t=+t,r>>>=0,a||N(e,0,r,4),o.write(e,t,r,n,23,4),r+4}function L(e,t,r,n,a){return t=+t,r>>>=0,a||N(e,0,r,8),o.write(e,t,r,n,52,8),r+8}c.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):r>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e],a=1,o=0;++o>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e+--t],a=1;0>>=0,t||T(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e],a=1,o=0;++o>>=0,t>>>=0,r||T(e,t,this.length);for(var n=t,a=1,o=this[e+--n];0>>=0,t||T(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){e>>>=0,t||T(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt16BE=function(e,t){e>>>=0,t||T(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||C(this,e,t,r,Math.pow(2,8*r)-1,0);var a=1,o=0;for(this[t]=255&e;++o>>=0,r>>>=0,n||C(this,e,t,r,Math.pow(2,8*r)-1,0);var a=r-1,o=1;for(this[t+a]=255&e;0<=--a&&(o*=256);)this[t+a]=e/o&255;return t+r},c.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,1,255,0),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},c.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var a=Math.pow(2,8*r-1);C(this,e,t,r,a-1,-a)}var o=0,i=1,s=0;for(this[t]=255&e;++o>0)-s&255;return t+r},c.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var a=Math.pow(2,8*r-1);C(this,e,t,r,a-1,-a)}var o=r-1,i=1,s=0;for(this[t+o]=255&e;0<=--o&&(i*=256);)e<0&&0===s&&0!==this[t+o+1]&&(s=1),this[t+o]=(e/i>>0)-s&255;return t+r},c.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},c.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeFloatLE=function(e,t,r){return O(this,e,t,!0,r)},c.prototype.writeFloatBE=function(e,t,r){return O(this,e,t,!1,r)},c.prototype.writeDoubleLE=function(e,t,r){return L(this,e,t,!0,r)},c.prototype.writeDoubleBE=function(e,t,r){return L(this,e,t,!1,r)},c.prototype.copy=function(e,t,r,n){if(!c.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r=r||0,n||0===n||(n=this.length),t>=e.length&&(t=e.length),t=t||0,0=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,"number"==typeof(e=e||0))for(o=t;o>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function P(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(t,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function R(e,t,r,n){for(var a=0;a=t.length||a>=e.length);++a)t[a+r]=e[a];return a}function D(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function A(e){return e!=e}var k=function(){for(var e="0123456789abcdef",t=new Array(256),r=0;r<16;++r)for(var n=16*r,a=0;a<16;++a)t[n+a]=e[r]+e[a];return t}()}).call(this,F("buffer").Buffer)},{"base64-js":2,buffer:5,ieee754:10}],6:[function(e,t,r){"use strict";t.exports=e("./").polyfill()},{"./":7}],7:[function(z,r,n){(function(j,V){var e,t;e=this,t=function(){"use strict";function l(e){return"function"==typeof e}var r=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},n=0,t=void 0,a=void 0,i=function(e,t){d[n]=e,d[n+1]=t,2===(n+=2)&&(a?a(h):v())};var e="undefined"!=typeof window?window:void 0,o=e||{},s=o.MutationObserver||o.WebKitMutationObserver,p="undefined"==typeof self&&void 0!==j&&"[object process]"==={}.toString.call(j),u="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function c(){var e=setTimeout;return function(){return e(h,1)}}var d=new Array(1e3);function h(){for(var e=0;e>1,u=-7,c=r?a-1:0,d=r?-1:1,h=e[t+c];for(c+=d,o=h&(1<<-u)-1,h>>=-u,u+=s;0>=-u,u+=n;0>1,d=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:o-1,m=n?1:-1,f=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,i=u):(i=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-i))<1&&(i--,l*=2),2<=(t+=1<=i+c?d/l:d*Math.pow(2,1-c))*l&&(i++,l/=2),u<=i+c?(s=0,i=u):1<=i+c?(s=(t*l-1)*Math.pow(2,a),i+=c):(s=t*Math.pow(2,c-1)*Math.pow(2,a),i=0));8<=a;e[r+h]=255&s,h+=m,s/=256,a-=8);for(i=i<Math.abs(e[0])&&(t=1),Math.abs(e[2])>Math.abs(e[t])&&(t=2),t}var C=4e150;function N(e,t){e.f+=t.f,e.b.f+=t.b.f}function p(e,t,r){return e=e.a,t=t.a,r=r.a,t.b.a===e?r.b.a===e?g(t.a,r.a)?b(r.b.a,t.a,r.a)<=0:0<=b(t.b.a,r.a,t.a):b(r.b.a,e,r.a)<=0:r.b.a===e?0<=b(t.b.a,e,t.a):(t=v(t.b.a,e,t.a),(e=v(r.b.a,e,r.a))<=t)}function O(e){e.a.i=null;var t=e.e;t.a.c=t.c,t.c.a=t.a,e.e=null}function u(e,t){c(e.a),e.c=!1,(e.a=t).i=e}function L(e){for(var t=e.a.a;(e=de(e)).a.a===t;);return e.c&&(u(e,t=d(ce(e).a.b,e.a.e)),e=de(e)),e}function I(e,t,r){var n=new ue;return n.a=r,n.e=W(e.f,t.e,n),r.i=n}function P(e,t){switch(e.s){case 100130:return 0!=(1&t);case 100131:return 0!==t;case 100132:return 0>1]],s[i[p]])?le(r,p):pe(r,p)),s[o]=null,l[o]=r.b,r.b=o}else for(r.c[-(o+1)]=null;0Math.max(i.a,l.a))return!1;if(g(o,i)){if(0n.f&&(n.f*=2,n.c=oe(n.c,n.f+1)),0===n.b?r=a:(r=n.b,n.b=n.c[n.b]),n.e[r]=t,n.c[r]=a,n.d[a]=r,n.h&&pe(n,a),r}return n=e.a++,e.c[n]=t,-(n+1)}function ne(e){if(0===e.a)return se(e.b);var t=e.c[e.d[e.a-1]];if(0!==e.b.a&&g(ie(e.b),t))return se(e.b);for(;--e.a,0e.a||g(n[i],n[l])){a[r[o]=i]=o;break}a[r[o]=l]=o,o=s}}function pe(e,t){for(var r=e.d,n=e.e,a=e.c,o=t,i=r[o];;){var s=o>>1,l=r[s];if(0==s||g(n[l],n[i])){a[r[o]=i]=o;break}a[r[o]=l]=o,o=s}}function ue(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function ce(e){return e.e.c.b}function de(e){return e.e.a.b}(n=q.prototype).x=function(){Y(this,0)},n.B=function(e,t){switch(e){case 100142:return;case 100140:switch(t){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=t)}break;case 100141:return void(this.m=!!t);default:return void Z(this,100900)}Z(this,100901)},n.y=function(e){switch(e){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Z(this,100900)}return!1},n.A=function(e,t,r){this.j[0]=e,this.j[1]=t,this.j[2]=r},n.z=function(e,t){var r=t||null;switch(e){case 100100:case 100106:this.h=r;break;case 100104:case 100110:this.l=r;break;case 100101:case 100107:this.k=r;break;case 100102:case 100108:this.i=r;break;case 100103:case 100109:this.p=r;break;case 100105:case 100111:this.o=r;break;case 100112:this.r=r;break;default:Z(this,100900)}},n.C=function(e,t){var r=!1,n=[0,0,0];Y(this,2);for(var a=0;a<3;++a){var o=e[a];o<-1e150&&(o=-1e150,r=!0),1e150a[p]&&(a[p]=u,i[p]=l)}if(l=0,a[1]-o[1]>a[0]-o[0]&&(l=1),a[2]-o[2]>a[l]-o[l]&&(l=2),o[l]>=a[l])n[0]=0,n[1]=0,n[2]=1;else{for(a=0,o=s[l],i=i[l],s=[0,0,0],o=[o.g[0]-i.g[0],o.g[1]-i.g[1],o.g[2]-i.g[2]],p=[0,0,0],l=r.e;l!==r;l=l.e)p[0]=l.g[0]-i.g[0],p[1]=l.g[1]-i.g[1],p[2]=l.g[2]-i.g[2],s[0]=o[1]*p[2]-o[2]*p[1],s[1]=o[2]*p[0]-o[0]*p[2],s[2]=o[0]*p[1]-o[1]*p[0],a<(u=s[0]*s[0]+s[1]*s[1]+s[2]*s[2])&&(a=u,n[0]=s[0],n[1]=s[1],n[2]=s[2]);a<=0&&(n[0]=n[1]=n[2]=0,n[T(o)]=1)}r=!0}for(s=T(n),l=this.b.c,a=(s+1)%3,i=(s+2)%3,s=0>=l,u-=l,y!=o){if(y==i)break;for(var g=y>8,++v;var _=b;if(n>=8;null!==f&&s<4096&&(m[s++]=f<<8|_,p+1<=s&&l<12&&(++l,p=p<<1|1)),f=y}else s=1+i,p=(1<<(l=a+1))-1,f=null}return d!==n&&console.log("Warning, gif stream shorter than expected."),r}try{r.GifWriter=function(g,e,t,r){var v=0,n=void 0===(r=void 0===r?{}:r).loop?null:r.loop,b=void 0===r.palette?null:r.palette;if(e<=0||t<=0||65535>=1;)++a;if(i=1<>8&255,g[v++]=255&t,g[v++]=t>>8&255,g[v++]=(null!==b?128:0)|a,g[v++]=o,g[v++]=0,null!==b)for(var s=0,l=b.length;s>16&255,g[v++]=p>>8&255,g[v++]=255&p}if(null!==n){if(n<0||65535>8&255,g[v++]=0}var x=!1;this.addFrame=function(e,t,r,n,a,o){if(!0===x&&(--v,x=!1),o=void 0===o?{}:o,e<0||t<0||65535>=1;)++p;l=1<>8&255,g[v++]=h,g[v++]=0),g[v++]=44,g[v++]=255&e,g[v++]=e>>8&255,g[v++]=255&t,g[v++]=t>>8&255,g[v++]=255&r,g[v++]=r>>8&255,g[v++]=255&n,g[v++]=n>>8&255,g[v++]=!0===i?128|p-1:0,!0===i)for(var m=0,f=s.length;m>16&255,g[v++]=y>>8&255,g[v++]=255&y}return v=function(t,r,e,n){t[r++]=e;var a=r++,o=1<>=8,u-=8,r===a+256&&(t[a]=255,a=r++)}function h(e){c|=e<>=8,u-=8,r===a+256&&(t[a]=255,a=r++);4096===l?(h(o),l=1+s,p=e+1,f={}):(1<>7,a=1<<1+(7&r);x[e++],x[e++];var o=null,i=null;n&&(o=e,e+=3*(i=a));var s=!0,l=[],p=0,u=null,c=0,d=null;for(this.width=S,this.height=t;s&&e>2&7,e++;break;case 254:for(;;){if(!(0<=(C=x[e++])))throw Error("Invalid block size");if(0===C)break;e+=C}break;default:throw new Error("Unknown graphic control label: 0x"+x[e-1].toString(16))}break;case 44:var m=x[e++]|x[e++]<<8,f=x[e++]|x[e++]<<8,y=x[e++]|x[e++]<<8,g=x[e++]|x[e++]<<8,v=x[e++],b=v>>6&1,_=1<<1+(7&v),w=o,M=i,E=!1;if(v>>7){E=!0;w=e,e+=3*(M=_)}var T=e;for(e++;;){var C;if(!(0<=(C=x[e++])))throw Error("Invalid block size");if(0===C)break;e+=C}l.push({x:m,y:f,width:y,height:g,has_local_palette:E,palette_offset:w,palette_size:M,data_offset:T,data_length:e-T,transparent_index:u,interlaced:!!b,delay:p,disposal:c});break;case 59:s=!1;break;default:throw new Error("Unknown gif block: 0x"+x[e-1].toString(16))}this.numFrames=function(){return l.length},this.loopCount=function(){return d},this.frameInfo=function(e){if(e<0||e>=l.length)throw new Error("Frame index out of range.");return l[e]},this.decodeAndBlitFrameBGRA=function(e,t){var r=this.frameInfo(e),n=r.width*r.height,a=new Uint8Array(n);N(x,r.data_offset,a,n);var o=r.palette_offset,i=r.transparent_index;null===i&&(i=256);var s=r.width,l=S-s,p=s,u=4*(r.y*S+r.x),c=4*((r.y+r.height)*S+r.x),d=u,h=4*l;!0===r.interlaced&&(h+=4*S*7);for(var m=8,f=0,y=a.length;f>=1)),g===i)d+=4;else{var v=x[o+3*g],b=x[o+3*g+1],_=x[o+3*g+2];t[d++]=_,t[d++]=b,t[d++]=v,t[d++]=255}--p}},this.decodeAndBlitFrameRGBA=function(e,t){var r=this.frameInfo(e),n=r.width*r.height,a=new Uint8Array(n);N(x,r.data_offset,a,n);var o=r.palette_offset,i=r.transparent_index;null===i&&(i=256);var s=r.width,l=S-s,p=s,u=4*(r.y*S+r.x),c=4*((r.y+r.height)*S+r.x),d=u,h=4*l;!0===r.interlaced&&(h+=4*S*7);for(var m=8,f=0,y=a.length;f>=1)),g===i)d+=4;else{var v=x[o+3*g],b=x[o+3*g+1],_=x[o+3*g+2];t[d++]=v,t[d++]=b,t[d++]=_,t[d++]=255}--p}}}}catch(e){}},{}],13:[function(jr,t,r){(function(Gr){var e;e=this,function(E){"use strict";function e(e){if(null==this)throw TypeError();var t=String(this),r=t.length,n=e?Number(e):0;if(n!=n&&(n=0),!(n<0||r<=n)){var a,o=t.charCodeAt(n);return 55296<=o&&o<=56319&&n+1>>=1,t}function _(e,t,r){if(!t)return r;for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<>>16-t;return e.tag>>>=t,e.bitcount-=t,n+r}function x(e,t){for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<>>=1,++a,r+=t.table[a],0<=(n-=t.table[a]););return e.tag=o,e.bitcount-=a,t.trans[r+n]}function S(e,t,r){var n,a,o,i,s,l;for(n=_(e,5,257),a=_(e,5,1),o=_(e,4,4),i=0;i<19;++i)y[i]=0;for(i=0;ithis.x2&&(this.x2=e)),"number"==typeof t&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=t,this.y2=t),tthis.y2&&(this.y2=t))},C.prototype.addX=function(e){this.addPoint(e,null)},C.prototype.addY=function(e){this.addPoint(null,e)},C.prototype.addBezier=function(e,t,r,n,a,o,i,s){var l=this,p=[e,t],u=[r,n],c=[a,o],d=[i,s];this.addPoint(e,t),this.addPoint(i,s);for(var h=0;h<=1;h++){var m=6*p[h]-12*u[h]+6*c[h],f=-3*p[h]+9*u[h]-9*c[h]+3*d[h],y=3*u[h]-3*p[h];if(0!=f){var g=Math.pow(m,2)-4*y*f;if(!(g<0)){var v=(-m+Math.sqrt(g))/(2*f);0>8&255,255&e]},D.USHORT=k(2),R.SHORT=function(e){return 32768<=e&&(e=-(65536-e)),[e>>8&255,255&e]},D.SHORT=k(2),R.UINT24=function(e){return[e>>16&255,e>>8&255,255&e]},D.UINT24=k(3),R.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]},D.ULONG=k(4),R.LONG=function(e){return I<=e&&(e=-(2*I-e)),[e>>24&255,e>>16&255,e>>8&255,255&e]},D.LONG=k(4),R.FIXED=R.ULONG,D.FIXED=D.ULONG,R.FWORD=R.SHORT,D.FWORD=D.SHORT,R.UFWORD=R.USHORT,D.UFWORD=D.USHORT,R.LONGDATETIME=function(e){return[0,0,0,0,e>>24&255,e>>16&255,e>>8&255,255&e]},D.LONGDATETIME=k(8),R.TAG=function(e){return L.argument(4===e.length,"Tag should be exactly 4 ASCII characters."),[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]},D.TAG=k(4),R.Card8=R.BYTE,D.Card8=D.BYTE,R.Card16=R.USHORT,D.Card16=D.USHORT,R.OffSize=R.BYTE,D.OffSize=D.BYTE,R.SID=R.USHORT,D.SID=D.USHORT,R.NUMBER=function(e){return-107<=e&&e<=107?[e+139]:108<=e&&e<=1131?[247+((e-=108)>>8),255&e]:-1131<=e&&e<=-108?[251+((e=-e-108)>>8),255&e]:-32768<=e&&e<=32767?R.NUMBER16(e):R.NUMBER32(e)},D.NUMBER=function(e){return R.NUMBER(e).length},R.NUMBER16=function(e){return[28,e>>8&255,255&e]},D.NUMBER16=k(3),R.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,255&e]},D.NUMBER32=k(5),R.REAL=function(e){var t=e.toString(),r=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(t);if(r){var n=parseFloat("1e"+((r[2]?+r[2]:0)+r[1].length));t=(Math.round(e*n)/n).toString()}for(var a="",o=0,i=t.length;o>8&255,t[t.length]=255&n}return t},D.UTF16=function(e){return 2*e.length};var F={"x-mac-croatian":"ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎล โ„ขยดยจโ‰ ลฝร˜โˆžยฑโ‰คโ‰ฅโˆ†ยตโˆ‚โˆ‘โˆลกโˆซยชยบฮฉลพรธยฟยกยฌโˆšฦ’โ‰ˆฤ†ยซฤŒโ€ฆย ร€รƒร•ล’ล“ฤโ€”โ€œโ€โ€˜โ€™รทโ—Š๏ฃฟยฉโ„โ‚ฌโ€นโ€บร†ยปโ€“ยทโ€šโ€žโ€ฐร‚ฤ‡รฤรˆรรŽรรŒร“ร”ฤ‘ร’รšร›ร™ฤฑห†หœยฏฯ€ร‹หšยธรŠรฆห‡","x-mac-cyrillic":"ะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏโ€ ยฐายฃยงโ€ขยถะ†ยฎยฉโ„ขะ‚ั’โ‰ ะƒั“โˆžยฑโ‰คโ‰ฅั–ยตา‘ะˆะ„ั”ะ‡ั—ะ‰ั™ะŠัšั˜ะ…ยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ะ‹ั›ะŒัœั•โ€“โ€”โ€œโ€โ€˜โ€™รทโ€žะŽัžะัŸโ„–ะั‘ัะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽ","x-mac-gaelic":"ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ร†ร˜แธ‚ยฑโ‰คโ‰ฅแธƒฤŠฤ‹แธŠแธ‹แธžแธŸฤ ฤกแน€รฆรธแนแน–แน—ษผฦ’ลฟแน ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™แนกแบ›รฟลธแนชโ‚ฌโ€นโ€บลถลทแนซยทแปฒแปณโŠร‚รŠรร‹รˆรรŽรรŒร“ร”โ™ฃร’รšร›ร™ฤฑรรฝลดลตแบ„แบ…แบ€แบแบ‚แบƒ","x-mac-greek":"ร„ยนยฒร‰ยณร–รœฮ…ร รขรคฮ„ยจรงรฉรจรชรซยฃโ„ขรฎรฏโ€ขยฝโ€ฐรดรถยฆโ‚ฌรนรปรผโ€ ฮ“ฮ”ฮ˜ฮ›ฮžฮ รŸยฎยฉฮฃฮชยงโ‰ ยฐยทฮ‘ยฑโ‰คโ‰ฅยฅฮ’ฮ•ฮ–ฮ—ฮ™ฮšฮœฮฆฮซฮจฮฉฮฌฮยฌฮŸฮกโ‰ˆฮคยซยปโ€ฆย ฮฅฮงฮ†ฮˆล“โ€“โ€•โ€œโ€โ€˜โ€™รทฮ‰ฮŠฮŒฮŽฮญฮฎฮฏฯŒฮฯฮฑฮฒฯˆฮดฮตฯ†ฮณฮทฮนฮพฮบฮปฮผฮฝฮฟฯ€ฯŽฯฯƒฯ„ฮธฯ‰ฯ‚ฯ‡ฯ…ฮถฯŠฯ‹ฮฮฐยญ","x-mac-icelandic":"ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผรยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ร†ร˜โˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบฮฉรฆรธยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šรฟลธโ„โ‚ฌรรฐรžรพรฝยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฃฟร’รšร›ร™ฤฑห†หœยฏห˜ห™หšยธหห›ห‡","x-mac-inuit":"แƒแ„แ…แ†แŠแ‹แฑแฒแณแดแธแนแ‘‰แ‘Žแ‘แ‘แ‘‘แ‘•แ‘–แ‘ฆแ‘ญแ‘ฎแ‘ฏแ‘ฐแ‘ฒแ‘ณแ’ƒแ’‹แ’Œแ’แ’Žแ’แ’‘ยฐแ’กแ’ฅแ’ฆโ€ขยถแ’งยฎยฉโ„ขแ’จแ’ชแ’ซแ’ปแ“‚แ“ƒแ“„แ“…แ“‡แ“ˆแ“แ“ฏแ“ฐแ“ฑแ“ฒแ“ดแ“ตแ”…แ“•แ“–แ“—แ“˜แ“šแ“›แ“ชแ”จแ”ฉแ”ชแ”ซแ”ญโ€ฆย แ”ฎแ”พแ••แ•–แ•—โ€“โ€”โ€œโ€โ€˜โ€™แ•˜แ•™แ•šแ•แ•†แ•‡แ•ˆแ•‰แ•‹แ•Œแ•แ•ฟแ–€แ–แ–‚แ–ƒแ–„แ–…แ–แ–แ–‘แ–’แ–“แ–”แ–•แ™ฑแ™ฒแ™ณแ™ดแ™ตแ™ถแ––แ– แ–กแ–ขแ–ฃแ–คแ–ฅแ–ฆแ•ผลล‚","x-mac-ce":"ร„ฤ€ฤร‰ฤ„ร–รœรกฤ…ฤŒรคฤฤ†ฤ‡รฉลนลบฤŽรญฤฤ’ฤ“ฤ–รณฤ—รดรถรตรบฤšฤ›รผโ€ ยฐฤ˜ยฃยงโ€ขยถรŸยฎยฉโ„ขฤ™ยจโ‰ ฤฃฤฎฤฏฤชโ‰คโ‰ฅฤซฤถโˆ‚โˆ‘ล‚ฤปฤผฤฝฤพฤนฤบล…ล†ลƒยฌโˆšล„ล‡โˆ†ยซยปโ€ฆย ลˆลร•ล‘ลŒโ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šลล”ล•ล˜โ€นโ€บล™ล–ล—ล โ€šโ€žลกลšล›รลคลฅรลฝลพลชร“ร”ลซลฎรšลฏลฐลฑลฒลณรรฝฤทลปลลผฤขห‡",macintosh:"ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ร†ร˜โˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบฮฉรฆรธยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šรฟลธโ„โ‚ฌโ€นโ€บ๏ฌ๏ฌ‚โ€กยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฃฟร’รšร›ร™ฤฑห†หœยฏห˜ห™หšยธหห›ห‡","x-mac-romanian":"ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ฤ‚ศ˜โˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบฮฉฤƒศ™ยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šรฟลธโ„โ‚ฌโ€นโ€บศšศ›โ€กยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฃฟร’รšร›ร™ฤฑห†หœยฏห˜ห™หšยธหห›ห‡","x-mac-turkish":"ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ร†ร˜โˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบฮฉรฆรธยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—ŠรฟลธฤžฤŸฤฐฤฑลžลŸโ€กยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฃฟร’รšร›ร™๏ข ห†หœยฏห˜ห™หšยธหห›ห‡"};P.MACSTRING=function(e,t,r,n){var a=F[n];if(void 0!==a){for(var o="",i=0;i>8&255,l+256&255)}return o}R.MACSTRING=function(e,t){var r=function(e){if(!U)for(var t in U={},F)U[t]=new String(t);var r=U[e];if(void 0!==r){if(B){var n=B.get(r);if(void 0!==n)return n}var a=F[e];if(void 0!==a){for(var o={},i=0;i>8,t[c+1]=255&d,t=t.concat(n[u])}return t},D.TABLE=function(e){for(var t=0,r=e.fields.length,n=0;n>1,t.skip("uShort",3),e.glyphIndexMap={};for(var i=new se.Parser(r,n+a+14),s=new se.Parser(r,n+a+16+2*o),l=new se.Parser(r,n+a+16+4*o),p=new se.Parser(r,n+a+16+6*o),u=n+a+16+8*o,c=0;c>4,o=15&n;if(15==a)break;if(t+=r[a],15==o)break;t+=r[o]}return parseFloat(t)}(e);if(32<=t&&t<=246)return t-139;if(247<=t&&t<=250)return 256*(t-247)+e.parseByte()+108;if(251<=t&&t<=254)return 256*-(t-251)-e.parseByte()-108;throw new Error("Invalid b0 "+t)}function Te(e,t,r){t=void 0!==t?t:0;var n=new se.Parser(e,t),a=[],o=[];for(r=void 0!==r?r:e.length;n.relativeOffset>1,T.length=0,N=!0}return function e(t){for(var r,n,a,o,i,s,l,p,u,c,d,h,m=0;mMath.abs(h-I)?L=d+T.shift():I=h+T.shift(),E.curveTo(v,b,_,x,l,p),E.curveTo(u,c,d,h,L,I);break;default:console.log("Glyph "+g.index+": unknown operator 1200"+f),T.length=0}break;case 14:0>3;break;case 21:2>16),m+=2;break;case 29:i=T.pop()+y.gsubrsBias,(s=y.gsubrs[i])&&e(s);break;case 30:for(;0=r.begin&&e=de.length){var i=n.parseChar();r.names.push(n.parseString(i))}break;case 2.5:r.numberOfGlyphs=n.parseUShort(),r.offset=new Array(r.numberOfGlyphs);for(var s=0;st.value.tag?1:-1}),t.fields=t.fields.concat(n),t.fields=t.fields.concat(a),t}function yt(e,t,r){for(var n=0;n 123 are reserved for internal usage");h|=1<>>1,o=e[a].tag;if(o===t)return a;o>>1,o=e[a];if(o===t)return a;o>>1,i=(r=e[o]).start;if(i===t)return r;i(r=e[n-1]).end?0:r}function xt(e,t){this.font=e,this.tableName=t}function St(e){xt.call(this,e,"gpos")}function wt(e){xt.call(this,e,"gsub")}function Mt(e,t){var r=e.length;if(r!==t.length)return!1;for(var n=0;nt.points.length-1||n.matchedPoints[1]>a.points.length-1)throw Error("Matched points out of range in "+t.name);var i=t.points[n.matchedPoints[0]],s=a.points[n.matchedPoints[1]],l={xScale:n.xScale,scale01:n.scale01,scale10:n.scale10,yScale:n.yScale,dx:0,dy:0};s=Lt([s],l)[0],l.dx=i.x-s.x,l.dy=i.y-s.y,o=Lt(a.points,l)}t.points=t.points.concat(o)}}return It(t.points)}(St.prototype=xt.prototype={searchTag:vt,binSearch:bt,getTable:function(e){var t=this.font.tables[this.tableName];return!t&&e&&(t=this.font.tables[this.tableName]=this.createDefaultTable()),t},getScriptNames:function(){var e=this.getTable();return e?e.scripts.map(function(e){return e.tag}):[]},getDefaultScriptName:function(){var e=this.getTable();if(e){for(var t=!1,r=0;r=s[p-1].tag,"Features must be added in alphabetical order."),o={tag:r,feature:{params:0,lookupListIndexes:[]}},s.push(o),i.push(p),o.feature}}},getLookupTables:function(e,t,r,n,a){var o=this.getFeatureTable(e,t,r,a),i=[];if(o){for(var s,l=o.lookupListIndexes,p=this.font.tables[this.tableName].lookups,u=0;u",s),t.stack.push(Math.round(64*s))}function gr(e,t){var r=t.stack,n=r.pop(),a=t.fv,o=t.pv,i=t.ppem,s=t.deltaBase+16*(e-1),l=t.deltaShift,p=t.z0;E.DEBUG&&console.log(t.step,"DELTAP["+e+"]",n,r);for(var u=0;u>4)===i){var h=(15&d)-8;0<=h&&h++,E.DEBUG&&console.log(t.step,"DELTAPFIX",c,"by",h*l);var m=p[c];a.setRelative(m,m,h*l,o)}}}function vr(e,t){var r=t.stack,n=r.pop();E.DEBUG&&console.log(t.step,"ROUND[]"),r.push(64*t.round(n/64))}function br(e,t){var r=t.stack,n=r.pop(),a=t.ppem,o=t.deltaBase+16*(e-1),i=t.deltaShift;E.DEBUG&&console.log(t.step,"DELTAC["+e+"]",n,r);for(var s=0;s>4)===a){var u=(15&p)-8;0<=u&&u++;var c=u*i;E.DEBUG&&console.log(t.step,"DELTACFIX",l,"by",c),t.cvt[l]+=c}}}function _r(e,t){var r,n,a=t.stack,o=a.pop(),i=a.pop(),s=t.z2[o],l=t.z1[i];E.DEBUG&&console.log(t.step,"SDPVTL["+e+"]",o,i),n=e?(r=s.y-l.y,l.x-s.x):(r=l.x-s.x,l.y-s.y),t.dpv=Zt(r,n)}function xr(e,t){var r=t.stack,n=t.prog,a=t.ip;E.DEBUG&&console.log(t.step,"PUSHB["+e+"]");for(var o=0;o":"_")+(n?"R":"_")+(0===a?"Gr":1===a?"Bl":2===a?"Wh":"")+"]",e?c+"("+o.cvt[c]+","+p+")":"",d,"(d =",i,"->",l*s,")"),o.rp1=o.rp0,o.rp2=d,t&&(o.rp0=d)}Ut.prototype.exec=function(e,t){if("number"!=typeof t)throw new Error("Point size is not a number!");if(!(2",n),s.interpolate(c,o,i,l),s.touch(c)}e.loop=1},hr.bind(void 0,0),hr.bind(void 0,1),function(e){for(var t=e.stack,r=e.rp0,n=e.z0[r],a=e.loop,o=e.fv,i=e.pv,s=e.z1;a--;){var l=t.pop(),p=s[l];E.DEBUG&&console.log(e.step,(1"].indexOf(a[0])?void 0:a[0],lineNumber:a[1],columnNumber:a[2],source:e}},this)},parseFFOrSafari:function(e){return e.stack.split("\n").filter(function(e){return!e.match(n)},this).map(function(e){if(-1 eval")&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),-1===e.indexOf("@")&&-1===e.indexOf(":"))return{functionName:e};var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,r=e.match(t),n=r&&r[1]?r[1]:void 0,a=this.extractLocation(e.replace(t,""));return{functionName:n,fileName:a[0],lineNumber:a[1],columnNumber:a[2],source:e}},this)},parseOpera:function(e){return!e.stacktrace||-1e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(e){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=e.message.split("\n"),n=[],a=2,o=r.length;a/,"$2").replace(/\([^)]*\)/g,"")||void 0;return a.match(/\(([^)]*)\)/)&&(t=a.replace(/^[^(]+\(([^)]*)\)$/,"$1")),{functionName:o,args:void 0===t||"[arguments not available]"===t?void 0:t.split(","),fileName:n[0],lineNumber:n[1],columnNumber:n[2],source:e}},this)}}}a.default._getErrorStackParser=function(){return new o};var i=a.default;r.default=i},{"../main":32}],27:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,a=(n=e("../main"))&&n.__esModule?n:{default:n};(function(e){if(e&&e.__esModule)return;if(null===e||"object"!==s(e)&&"function"!=typeof e)return;var t=i();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var o=n?Object.getOwnPropertyDescriptor(e,a):null;o&&(o.get||o.set)?Object.defineProperty(r,a,o):r[a]=e[a]}r.default=e,t&&t.set(e,r)})(e("../constants")),e("../internationalization");function i(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return i=function(){return e},e}function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}a.default._validateParameters=a.default._clearValidateParamsCache=function(){};var o=a.default;r.default=o},{"../../../docs/parameterData.json":1,"../constants":22,"../internationalization":30,"../main":32}],28:[function(e,t,r){"use strict";function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var o=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==i(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var o=n?Object.getOwnPropertyDescriptor(e,a):null;o&&(o.get||o.set)?Object.defineProperty(r,a,o):r[a]=e[a]}r.default=e,t&&t.set(e,r);return r}(e("./constants"));function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}var n={modeAdjust:function(e,t,r,n,a){return a===o.CORNER?{x:e,y:t,w:r,h:n}:a===o.CORNERS?{x:e,y:t,w:r-e,h:n-t}:a===o.RADIUS?{x:e-r,y:t-n,w:2*r,h:2*n}:a===o.CENTER?{x:e-.5*r,y:t-.5*n,w:r,h:n}:void 0}};r.default=n},{"./constants":22}],29:[function(e,t,r){"use strict";var n,a=(n=e("../core/main"))&&n.__esModule?n:{default:n};e("./internationalization");var o=Promise.resolve();Promise.all([new Promise(function(e,t){"complete"===document.readyState?e():window.addEventListener("load",e,!1)}),o]).then(function(){void 0===window._setupDone?window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!a.default.instance&&new a.default:console.warn("p5.js seems to have been imported multiple times. Please remove the duplicate import")})},{"../core/main":32,"./internationalization":30}],30:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.initialize=n.translator=void 0;var a,o=r(e("i18next")),i=r(e("i18next-browser-languagedetector"));function r(e){return e&&e.__esModule?e:{default:e}}var s=function(){return console.debug("p5.js translator called before translations were loaded"),""};n.translator=s;n.initialize=function(){return new Promise(function(t,r){o.default.use(i.default).init({fallbackLng:"en",nestingPrefix:"$tr(",nestingSuffix:")",defaultNS:"translation",returnEmptyString:!1,interpolation:{escapeValue:!1},detection:{checkWhitelist:!1},resources:a}).then(function(e){n.translator=s=e,t()},function(e){return r("Translations failed to load (".concat(e,")"))})})}},{"../../translations":void 0,i18next:4,"i18next-browser-languagedetector":4}],31:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,a=(n=e("./main"))&&n.__esModule?n:{default:n};a.default.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},a.default.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},a.default.prototype.popMatrix=function(){throw new Error("popMatrix() not used, see pop()")},a.default.prototype.pushMatrix=function(){throw new Error("pushMatrix() not used, see push()")};var o=a.default;r.default=o},{"./main":32}],32:[function(e,t,r){"use strict";function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0,e("./shim");var n=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==i(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var o=n?Object.getOwnPropertyDescriptor(e,a):null;o&&(o.get||o.set)?Object.defineProperty(r,a,o):r[a]=e[a]}r.default=e,t&&t.set(e,r);return r}(e("./constants"));function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}function a(e,t){for(var r=0;r=i.width||t>=i.height?[0,0,0,0]:this._getPixel(e,t);var s=new l.default.Image(r,n);return s.canvas.getContext("2d").drawImage(i,e,t,r*o,n*o,0,0,r,n),s},l.default.Renderer.prototype.textLeading=function(e){return"number"==typeof e?(this._setProperty("_textLeading",e),this._pInst):this._textLeading},l.default.Renderer.prototype.textSize=function(e){return"number"==typeof e?(this._setProperty("_textSize",e),this._setProperty("_textLeading",e*b._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},l.default.Renderer.prototype.textStyle=function(e){return e?(e!==b.NORMAL&&e!==b.ITALIC&&e!==b.BOLD&&e!==b.BOLDITALIC||this._setProperty("_textStyle",e),this._applyTextProperties()):this._textStyle},l.default.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},l.default.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},l.default.Renderer.prototype.textAlign=function(e,t){return void 0!==e?(this._setProperty("_textAlign",e),void 0!==t&&this._setProperty("_textBaseline",t),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},l.default.Renderer.prototype.text=function(e,t,r,n,a){var o,i,s,l,p,u,c,d,h,m=this._pInst,f=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==e){if("string"!=typeof e&&(e=e.toString()),o=(e=e.replace(/(\t)/g," ")).split("\n"),void 0!==n){for(c=1,s=h=0;ss.HALF_PI&&e<=3*s.HALF_PI?Math.atan(r/n*Math.tan(e))+s.PI:Math.atan(r/n*Math.tan(e))+s.TWO_PI,t=t<=s.HALF_PI?Math.atan(r/n*Math.tan(t)):t>s.HALF_PI&&t<=3*s.HALF_PI?Math.atan(r/n*Math.tan(t))+s.PI:Math.atan(r/n*Math.tan(t))+s.TWO_PI),tg||Math.abs(this.accelerationY-this.pAccelerationY)>g||Math.abs(this.accelerationZ-this.pAccelerationZ)>g)&&e();var t=this.deviceTurned||window.deviceTurned;if("function"==typeof t){var r=this.rotationX+180,n=this.pRotationX+180,a=c+180;0>>24],n+=x[(16711680&C)>>16],a+=x[(65280&C)>>8],o+=x[255&C],r+=L[_],s++}S[l=T+v]=i/r,w[l]=n/r,M[l]=a/r,E[l]=o/r}T+=h}for(u=(p=-N)*h,b=T=0;b>>16,e[r+1]=(65280&t[n])>>>8,e[r+2]=255&t[n],e[r+3]=(4278190080&t[n])>>>24},P._toImageData=function(e){return e instanceof ImageData?e:e.getContext("2d").getImageData(0,0,e.width,e.height)},P._createImageData=function(e,t){return P._tmpCanvas=document.createElement("canvas"),P._tmpCtx=P._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(e,t)},P.apply=function(e,t,r){var n=e.getContext("2d"),a=n.getImageData(0,0,e.width,e.height),o=t(a,r);o instanceof ImageData?n.putImageData(o,0,0,0,0,e.width,e.height):n.putImageData(a,0,0,0,0,e.width,e.height)},P.threshold=function(e,t){var r=P._toPixels(e);void 0===t&&(t=.5);for(var n=Math.floor(255*t),a=0;a>8)/n,r[a+1]=255*(i*t>>8)/n,r[a+2]=255*(s*t>>8)/n}},P.dilate=function(e){for(var t,r,n,a,o,i,s,l,p,u,c,d,h,m,f,y,g,v=P._toPixels(e),b=0,_=v.length?v.length/4:0,x=new Int32Array(_);b<_;)for(r=(t=b)+e.width;b>16&255)+151*(n>>8&255)+28*(255&n))<(f=77*(c>>16&255)+151*(c>>8&255)+28*(255&c))&&(a=c,o=f),o<(m=77*((u=P._getARGB(v,i))>>16&255)+151*(u>>8&255)+28*(255&u))&&(a=u,o=m),o<(y=77*(d>>16&255)+151*(d>>8&255)+28*(255&d))&&(a=d,o=y),o<(g=77*(h>>16&255)+151*(h>>8&255)+28*(255&h))&&(a=h,o=g),x[b++]=a;P._setPixels(v,x)},P.erode=function(e){for(var t,r,n,a,o,i,s,l,p,u,c,d,h,m,f,y,g,v=P._toPixels(e),b=0,_=v.length?v.length/4:0,x=new Int32Array(_);b<_;)for(r=(t=b)+e.width;b>16&255)+151*(c>>8&255)+28*(255&c))<(o=77*(n>>16&255)+151*(n>>8&255)+28*(255&n))&&(a=c,o=f),(m=77*((u=P._getARGB(v,i))>>16&255)+151*(u>>8&255)+28*(255&u))>16&255)+151*(d>>8&255)+28*(255&d))>16&255)+151*(h>>8&255)+28*(255&h))=r){var n=Math.floor(t.timeDisplayed/r);if(t.timeDisplayed=0,t.displayIndex+=n,t.loopCount=Math.floor(t.displayIndex/t.numFrames),null!==t.loopLimit&&t.loopCount>=t.loopLimit)t.playing=!1;else{var a=t.displayIndex%t.numFrames;this.drawingContext.putImageData(t.frames[a].image,0,0),t.displayIndex=a,this.setModified(!0)}}}},a.default.Image.prototype._setProperty=function(e,t){this[e]=t,this.setModified(!0)},a.default.Image.prototype.loadPixels=function(){a.default.Renderer2D.prototype.loadPixels.call(this),this.setModified(!0)},a.default.Image.prototype.updatePixels=function(e,t,r,n){a.default.Renderer2D.prototype.updatePixels.call(this,e,t,r,n),this.setModified(!0)},a.default.Image.prototype.get=function(e,t,r,n){return a.default._validateParameters("p5.Image.get",arguments),a.default.Renderer2D.prototype.get.apply(this,arguments)},a.default.Image.prototype._getPixel=a.default.Renderer2D.prototype._getPixel,a.default.Image.prototype.set=function(e,t,r){a.default.Renderer2D.prototype.set.call(this,e,t,r),this.setModified(!0)},a.default.Image.prototype.resize=function(e,t){0===e&&0===t?(e=this.canvas.width,t=this.canvas.height):0===e?e=this.canvas.width*t/this.canvas.height:0===t&&(t=this.canvas.height*e/this.canvas.width),e=Math.floor(e),t=Math.floor(t);var r=document.createElement("canvas");if(r.width=e,r.height=t,this.gifProperties)for(var n=this.gifProperties,a=function(e,t){for(var r=0,n=0;n/g,">").replace(/"/g,""").replace(/'/g,"'")}function l(e,t){t&&!0!==t&&"true"!==t||(t="");var r="";return(e=e||"untitled")&&e.includes(".")&&(r=e.split(".").pop()),t&&r!==t&&(r=t,e="".concat(e,".").concat(r)),[e,r]}e("../core/friendly_errors/validate_params"),e("../core/friendly_errors/file_errors"),e("../core/friendly_errors/fes_core"),g.default.prototype.loadJSON=function(){for(var e=arguments.length,t=new Array(e),r=0;r"),a.print("");if(a.print(' '),a.print(""),a.print(""),a.print(" "),"0"!==o[0]){a.print(" ");for(var u=0;u".concat(c)),a.print(" ")}a.print(" ")}for(var d=0;d");for(var h=0;h".concat(m)),a.print(" ")}a.print(" ")}a.print("
"),a.print(""),a.print("")}a.close(),a.clear()},g.default.prototype.writeFile=function(e,t,r){var n="application/octet-stream";g.default.prototype._isSafari()&&(n="text/plain");var a=new Blob(e,{type:n});g.default.prototype.downloadFile(a,t,r)},g.default.prototype.downloadFile=function(e,t,r){var n=l(t,r),a=n[0];if(e instanceof Blob)s.default.saveAs(e,a);else{var o=document.createElement("a");if(o.href=e,o.download=a,o.onclick=function(e){var t;t=e,document.body.removeChild(t.target),e.stopPropagation()},o.style.display="none",document.body.appendChild(o),g.default.prototype._isSafari()){var i="Hello, Safari user! To download this file...\n";i+="1. Go to File --\x3e Save As.\n",i+='2. Choose "Page Source" as the Format.\n',i+='3. Name it with this extension: ."'.concat(n[1],'"'),alert(i)}o.click()}},g.default.prototype._checkFileExtension=l,g.default.prototype._isSafari=function(){return 0>>0},getSeed:function(){return t},rand:function(){return(r=(1664525*r+1013904223)%n)/n}});a.setSeed(e),_=new Array(4096);for(var o=0;o<4096;o++)_[o]=a.rand()};var o=a.default;r.default=o},{"../core/main":32}],65:[function(e,t,r){"use strict";function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,l=(n=e("../core/main"))&&n.__esModule?n:{default:n},o=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==i(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var o=n?Object.getOwnPropertyDescriptor(e,a):null;o&&(o.get||o.set)?Object.defineProperty(r,a,o):r[a]=e[a]}r.default=e,t&&t.set(e,r);return r}(e("../core/constants"));function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}l.default.Vector=function(e,t,r){var n,a,o;o=e instanceof l.default?(this.p5=e,n=t[0]||0,a=t[1]||0,t[2]||0):(n=e||0,a=t||0,r||0),this.x=n,this.y=a,this.z=o},l.default.Vector.prototype.toString=function(){return"p5.Vector Object : [".concat(this.x,", ").concat(this.y,", ").concat(this.z,"]")},l.default.Vector.prototype.set=function(e,t,r){return e instanceof l.default.Vector?(this.x=e.x||0,this.y=e.y||0,this.z=e.z||0):e instanceof Array?(this.x=e[0]||0,this.y=e[1]||0,this.z=e[2]||0):(this.x=e||0,this.y=t||0,this.z=r||0),this},l.default.Vector.prototype.copy=function(){return this.p5?new l.default.Vector(this.p5,[this.x,this.y,this.z]):new l.default.Vector(this.x,this.y,this.z)},l.default.Vector.prototype.add=function(e,t,r){return e instanceof l.default.Vector?(this.x+=e.x||0,this.y+=e.y||0,this.z+=e.z||0):e instanceof Array?(this.x+=e[0]||0,this.y+=e[1]||0,this.z+=e[2]||0):(this.x+=e||0,this.y+=t||0,this.z+=r||0),this};function p(e,t){return 0!==e&&(this.x=this.x%e),0!==t&&(this.y=this.y%t),this}function u(e,t,r){return 0!==e&&(this.x=this.x%e),0!==t&&(this.y=this.y%t),0!==r&&(this.z=this.z%r),this}l.default.Vector.prototype.rem=function(e,t,r){if(e instanceof l.default.Vector){if(Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)){var n=parseFloat(e.x),a=parseFloat(e.y),o=parseFloat(e.z);u.call(this,n,a,o)}}else if(e instanceof Array)e.every(function(e){return Number.isFinite(e)})&&(2===e.length&&p.call(this,e[0],e[1]),3===e.length&&u.call(this,e[0],e[1],e[2]));else if(1===arguments.length){if(Number.isFinite(e)&&0!==e)return this.x=this.x%e,this.y=this.y%e,this.z=this.z%e,this}else if(2===arguments.length){var i=Array.prototype.slice.call(arguments);i.every(function(e){return Number.isFinite(e)})&&2===i.length&&p.call(this,i[0],i[1])}else if(3===arguments.length){var s=Array.prototype.slice.call(arguments);s.every(function(e){return Number.isFinite(e)})&&3===s.length&&u.call(this,s[0],s[1],s[2])}},l.default.Vector.prototype.sub=function(e,t,r){return e instanceof l.default.Vector?(this.x-=e.x||0,this.y-=e.y||0,this.z-=e.z||0):e instanceof Array?(this.x-=e[0]||0,this.y-=e[1]||0,this.z-=e[2]||0):(this.x-=e||0,this.y-=t||0,this.z-=r||0),this},l.default.Vector.prototype.mult=function(e,t,r){if(e instanceof l.default.Vector)return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)&&"number"==typeof e.x&&"number"==typeof e.y&&"number"==typeof e.z?(this.x*=e.x,this.y*=e.y,this.z*=e.z):console.warn("p5.Vector.prototype.mult:","x contains components that are either undefined or not finite numbers"),this;if(e instanceof Array)return e.every(function(e){return Number.isFinite(e)})&&e.every(function(e){return"number"==typeof e})?1===e.length?(this.x*=e[0],this.y*=e[0],this.z*=e[0]):2===e.length?(this.x*=e[0],this.y*=e[1]):3===e.length&&(this.x*=e[0],this.y*=e[1],this.z*=e[2]):console.warn("p5.Vector.prototype.mult:","x contains elements that are either undefined or not finite numbers"),this;var n=Array.prototype.slice.call(arguments);return n.every(function(e){return Number.isFinite(e)})&&n.every(function(e){return"number"==typeof e})?(1===arguments.length&&(this.x*=e,this.y*=e,this.z*=e),2===arguments.length&&(this.x*=e,this.y*=t),3===arguments.length&&(this.x*=e,this.y*=t,this.z*=r)):console.warn("p5.Vector.prototype.mult:","x, y, or z arguments are either undefined or not a finite number"),this},l.default.Vector.prototype.div=function(e,t,r){if(e instanceof l.default.Vector){if(Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)&&"number"==typeof e.x&&"number"==typeof e.y&&"number"==typeof e.z){if(0===e.x||0===e.y||0===e.z)return console.warn("p5.Vector.prototype.div:","divide by 0"),this;this.x/=e.x,this.y/=e.y,this.z/=e.z}else console.warn("p5.Vector.prototype.div:","x contains components that are either undefined or not finite numbers");return this}if(e instanceof Array){if(e.every(function(e){return Number.isFinite(e)})&&e.every(function(e){return"number"==typeof e})){if(e.some(function(e){return 0===e}))return console.warn("p5.Vector.prototype.div:","divide by 0"),this;1===e.length?(this.x/=e[0],this.y/=e[0],this.z/=e[0]):2===e.length?(this.x/=e[0],this.y/=e[1]):3===e.length&&(this.x/=e[0],this.y/=e[1],this.z/=e[2])}else console.warn("p5.Vector.prototype.div:","x contains components that are either undefined or not finite numbers");return this}var n=Array.prototype.slice.call(arguments);if(n.every(function(e){return Number.isFinite(e)})&&n.every(function(e){return"number"==typeof e})){if(n.some(function(e){return 0===e}))return console.warn("p5.Vector.prototype.div:","divide by 0"),this;1===arguments.length&&(this.x/=e,this.y/=e,this.z/=e),2===arguments.length&&(this.x/=e,this.y/=t),3===arguments.length&&(this.x/=e,this.y/=t,this.z/=r)}else console.warn("p5.Vector.prototype.div:","x, y, or z arguments are either undefined or not a finite number");return this},l.default.Vector.prototype.mag=function(){return Math.sqrt(this.magSq())},l.default.Vector.prototype.magSq=function(){var e=this.x,t=this.y,r=this.z;return e*e+t*t+r*r},l.default.Vector.prototype.dot=function(e,t,r){return e instanceof l.default.Vector?this.dot(e.x,e.y,e.z):this.x*(e||0)+this.y*(t||0)+this.z*(r||0)},l.default.Vector.prototype.cross=function(e){var t=this.y*e.z-this.z*e.y,r=this.z*e.x-this.x*e.z,n=this.x*e.y-this.y*e.x;return this.p5?new l.default.Vector(this.p5,[t,r,n]):new l.default.Vector(t,r,n)},l.default.Vector.prototype.dist=function(e){return e.copy().sub(this).mag()},l.default.Vector.prototype.normalize=function(){var e=this.mag();return 0!==e&&this.mult(1/e),this},l.default.Vector.prototype.limit=function(e){var t=this.magSq();return e*e>>0},a.default.prototype.randomSeed=function(e){this._lcgSetSeed(o,e),this._gaussian_previous=!1},a.default.prototype.random=function(e,t){var r;if(a.default._validateParameters("random",arguments),r=null!=this[o]?this._lcg(o):Math.random(),void 0===e)return r;if(void 0===t)return e instanceof Array?e[Math.floor(r*e.length)]:r*e;if(td){var N=m,O=l,L=p;m=h+d*(s&&h=t&&(r=r.substring(r.length-t,r.length)),r}},a.default.prototype.unhex=function(e){return e instanceof Array?e.map(a.default.prototype.unhex):parseInt("0x".concat(e),16)};var o=a.default;r.default=o},{"../core/main":32}],73:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,i=(n=e("../core/main"))&&n.__esModule?n:{default:n};function a(e,t,r){var n=e<0,a=n?e.toString().substring(1):e.toString(),o=a.indexOf("."),i=-1!==o?a.substring(0,o):a,s=-1!==o?a.substring(o+1):"",l=n?"-":"";if(void 0!==r){var p="";(-1!==o||0r&&(s=s.substring(0,r));for(var u=0;un.length)for(var o=t-(n+=-1===r?".":"").length+1,i=0;i=h.TWO_PI?"".concat("ellipse","|").concat(p,"|"):"".concat("arc","|").concat(i,"|").concat(s,"|").concat(l,"|").concat(p,"|"),!this.geometryInHash(t)){var u=new T.default.Geometry(p,1,function(){if(this.strokeIndices=[],i.toFixed(10)!==s.toFixed(10)){l!==h.PIE&&void 0!==l||(this.vertices.push(new T.default.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var e=0;e<=p;e++){var t=(s-i)*(e/p)+i,r=.5+Math.cos(t)/2,n=.5+Math.sin(t)/2;this.vertices.push(new T.default.Vector(r,n,0)),this.uvs.push([r,n]),e>5&31)/31,(v>>10&31)/31):(r=i,n=s,l)}for(var b=new w.default.Vector(f,y,g),_=1;_<=3;_++){var x=m+12*_,S=new w.default.Vector(p.getFloat32(x,!0),p.getFloat32(4+x,!0),p.getFloat32(8+x,!0));e.vertices.push(S),e.vertexNormals.push(b),c&&o.push(r,n,a)}e.faces.push([3*h,3*h+1,3*h+2]),e.uvs.push([0,0],[0,0],[0,0])}}(e,t);else{var r=new DataView(t);if(!("TextDecoder"in window))return console.warn("Sorry, ASCII STL loading only works in browsers that support TextDecoder (https://caniuse.com/#feat=textencoder)");var n=new TextDecoder("utf-8").decode(r).split("\n");!function(e,t){for(var r,n,a="",o=[],i=0;iMath.PI?l=Math.PI:l<=0&&(l=.001);var p=Math.sin(l)*i*Math.sin(s),u=Math.cos(l)*i,c=Math.sin(l)*i*Math.cos(s);this.camera(p+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},f.default.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},f.default.prototype.setCamera=function(e){this._renderer._curCamera=e,this._renderer.uPMatrix.set(e.projMatrix.mat4[0],e.projMatrix.mat4[1],e.projMatrix.mat4[2],e.projMatrix.mat4[3],e.projMatrix.mat4[4],e.projMatrix.mat4[5],e.projMatrix.mat4[6],e.projMatrix.mat4[7],e.projMatrix.mat4[8],e.projMatrix.mat4[9],e.projMatrix.mat4[10],e.projMatrix.mat4[11],e.projMatrix.mat4[12],e.projMatrix.mat4[13],e.projMatrix.mat4[14],e.projMatrix.mat4[15])};var a=f.default.Camera;r.default=a},{"../core/main":32}],81:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,u=(n=e("../core/main"))&&n.__esModule?n:{default:n};u.default.Geometry=function(e,t,r){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.vertexColors=[],this.detailX=void 0!==e?e:1,this.detailY=void 0!==t?t:1,this.dirtyFlags={},r instanceof Function&&r.call(this),this},u.default.Geometry.prototype.reset=function(){this.lineVertices.length=0,this.lineNormals.length=0,this.vertices.length=0,this.edges.length=0,this.vertexColors.length=0,this.vertexNormals.length=0,this.uvs.length=0,this.dirtyFlags={}},u.default.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var e,t,r,n,a=this.detailX+1,o=0;othis.vertices.length-1-this.detailX;n--)e.add(this.vertexNormals[n]);e=u.default.Vector.div(e,this.detailX);for(var a=this.vertices.length-1;a>this.vertices.length-1-this.detailX;a--)this.vertexNormals[a]=e;return this},u.default.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var e=0,t=this.strokeIndices.length;e vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\nuniform int uPerspective;\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n // using a scale <1 moves the lines towards the camera\n // in order to prevent popping effects due to half of\n // the line disappearing behind the geometry faces.\n vec3 scale = vec3(0.9995);\n\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n vec2 curPerspScale;\n\n if(uPerspective == 1) {\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n curPerspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n } else {\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n curPerspScale = p.w / (0.5 * uViewport.zw);\n }\n\n gl_Position.xy = p.xy + offset.xy * curPerspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};p.default.RendererGL=function(e,t,r,n){return p.default.Renderer.call(this,e,t,r),this._setAttributeDefaults(t),this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this._pInst._setProperty("drawingContext",this.drawingContext),this._isErasing=!1,this._enableLighting=!1,this.ambientLightColors=[],this.specularColors=[1,1,1],this.directionalLightDirections=[],this.directionalLightDiffuseColors=[],this.directionalLightSpecularColors=[],this.pointLightPositions=[],this.pointLightDiffuseColors=[],this.pointLightSpecularColors=[],this.spotLightPositions=[],this.spotLightDirections=[],this.spotLightDiffuseColors=[],this.spotLightSpecularColors=[],this.spotLightAngle=[],this.spotLightConc=[],this.drawMode=o.FILL,this.curFillColor=this._cachedFillStyle=[1,1,1,1],this.curStrokeColor=this._cachedStrokeStyle=[0,0,0,1],this.curBlendMode=o.BLEND,this._cachedBlendMode=void 0,this.blendExt=this.GL.getExtension("EXT_blend_minmax"),this._isBlending=!1,this._useSpecularMaterial=!1,this._useEmissiveMaterial=!1,this._useNormalMaterial=!1,this._useShininess=1,this._tint=[255,255,255,255],this.constantAttenuation=1,this.linearAttenuation=0,this.quadraticAttenuation=0,this.uMVMatrix=new p.default.Matrix,this.uPMatrix=new p.default.Matrix,this.uNMatrix=new p.default.Matrix("mat3"),this._curCamera=new p.default.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.userFillShader=void 0,this.userStrokeShader=void 0,this.userPointShader=void 0,this.retainedMode={geometry:{},buffers:{stroke:[new p.default.RenderBuffer(3,"lineVertices","lineVertexBuffer","aPosition",this,this._flatten),new p.default.RenderBuffer(4,"lineNormals","lineNormalBuffer","aDirection",this,this._flatten)],fill:[new p.default.RenderBuffer(3,"vertices","vertexBuffer","aPosition",this,this._vToNArray),new p.default.RenderBuffer(3,"vertexNormals","normalBuffer","aNormal",this,this._vToNArray),new p.default.RenderBuffer(4,"vertexColors","colorBuffer","aMaterialColor",this),new p.default.RenderBuffer(3,"vertexAmbients","ambientBuffer","aAmbientColor",this),new p.default.RenderBuffer(2,"uvs","uvBuffer","aTexCoord",this,this._flatten)],text:[new p.default.RenderBuffer(3,"vertices","vertexBuffer","aPosition",this,this._vToNArray),new p.default.RenderBuffer(2,"uvs","uvBuffer","aTexCoord",this,this._flatten)]}},this.immediateMode={geometry:new p.default.Geometry,shapeMode:o.TRIANGLE_FAN,_bezierVertex:[],_quadraticVertex:[],_curveVertex:[],buffers:{fill:[new p.default.RenderBuffer(3,"vertices","vertexBuffer","aPosition",this,this._vToNArray),new p.default.RenderBuffer(3,"vertexNormals","normalBuffer","aNormal",this,this._vToNArray),new p.default.RenderBuffer(4,"vertexColors","colorBuffer","aVertexColor",this),new p.default.RenderBuffer(3,"vertexAmbients","ambientBuffer","aAmbientColor",this),new p.default.RenderBuffer(2,"uvs","uvBuffer","aTexCoord",this,this._flatten)],stroke:[new p.default.RenderBuffer(3,"lineVertices","lineVertexBuffer","aPosition",this,this._flatten),new p.default.RenderBuffer(4,"lineNormals","lineNormalBuffer","aDirection",this,this._flatten)],point:this.GL.createBuffer()}},this.pointSize=5,this.curStrokeWeight=1,this.textures=[],this.textureMode=o.IMAGE,this.textureWrapX=o.CLAMP,this.textureWrapY=o.CLAMP,this._tex=null,this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this._curShader=void 0,this},p.default.RendererGL.prototype=Object.create(p.default.Renderer.prototype),p.default.RendererGL.prototype._setAttributeDefaults=function(e){var t={alpha:!0,depth:!0,stencil:!0,antialias:navigator.userAgent.toLowerCase().includes("safari"),premultipliedAlpha:!1,preserveDrawingBuffer:!0,perPixelLighting:!0};null===e._glAttributes?e._glAttributes=t:e._glAttributes=Object.assign(t,e._glAttributes)},p.default.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this._pInst._glAttributes)||this.canvas.getContext("experimental-webgl",this._pInst._glAttributes),null===this.drawingContext)throw new Error("Error creating webgl context");var e=this.drawingContext;e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.viewport(0,0,e.drawingBufferWidth,e.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(e){throw e}},p.default.RendererGL.prototype._resetContext=function(e,t){var r=this.width,n=this.height,a=this.canvas.id,o=this._pInst instanceof p.default.Graphics;if(o){var i=this._pInst;i.canvas.parentNode.removeChild(i.canvas),i.canvas=document.createElement("canvas"),(i._pInst._userNode||document.body).appendChild(i.canvas),p.default.Element.call(i,i.canvas,i._pInst),i.width=r,i.height=n}else{var s=this.canvas;s&&s.parentNode.removeChild(s),(s=document.createElement("canvas")).id=a,this._pInst._userNode?this._pInst._userNode.appendChild(s):document.body.appendChild(s),this._pInst.canvas=s}var l=new p.default.RendererGL(this._pInst.canvas,this._pInst,!o);this._pInst._setProperty("_renderer",l),l.resize(r,n),l._applyDefaults(),o||this._pInst._elements.push(l),"function"==typeof t&&setTimeout(function(){t.apply(window._renderer,e)},0)},p.default.prototype.setAttributes=function(e,t){if(void 0!==this._glAttributes){var r=!0;if(void 0!==t?(null===this._glAttributes&&(this._glAttributes={}),this._glAttributes[e]!==t&&(this._glAttributes[e]=t,r=!1)):e instanceof Object&&this._glAttributes!==e&&(this._glAttributes=e,r=!1),this._renderer.isP3D&&!r){if(!this._setupDone)for(var n in this._renderer.retainedMode.geometry)if(this._renderer.retainedMode.geometry.hasOwnProperty(n))return void console.error("Sorry, Could not set the attributes, you need to call setAttributes() before calling the other drawing methods in setup()");this.push(),this._renderer._resetContext(),this.pop(),this._renderer._curCamera&&(this._renderer._curCamera._renderer=this._renderer)}}else console.log("You are trying to use setAttributes on a p5.Graphics object that does not use a WEBGL renderer.")},p.default.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.specularColors=[1,1,1],this.directionalLightDirections.length=0,this.directionalLightDiffuseColors.length=0,this.directionalLightSpecularColors.length=0,this.pointLightPositions.length=0,this.pointLightDiffuseColors.length=0,this.pointLightSpecularColors.length=0,this.spotLightPositions.length=0,this.spotLightDirections.length=0,this.spotLightDiffuseColors.length=0,this.spotLightSpecularColors.length=0,this.spotLightAngle.length=0,this.spotLightConc.length=0,this._enableLighting=!1,this._tint=[255,255,255,255],this.GL.clear(this.GL.DEPTH_BUFFER_BIT)},p.default.RendererGL.prototype.background=function(){var e,t=(e=this._pInst).color.apply(e,arguments),r=t.levels[0]/255,n=t.levels[1]/255,a=t.levels[2]/255,o=t.levels[3]/255;this.GL.clearColor(r,n,a,o),this.GL.clear(this.GL.COLOR_BUFFER_BIT)},p.default.RendererGL.prototype.fill=function(e,t,r,n){var a=p.default.prototype.color.apply(this._pInst,arguments);this.curFillColor=a._array,this.drawMode=o.FILL,this._useNormalMaterial=!1,this._tex=null},p.default.RendererGL.prototype.stroke=function(e,t,r,n){arguments[3]=255;var a=p.default.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=a._array},p.default.RendererGL.prototype.strokeCap=function(e){console.error("Sorry, strokeCap() is not yet implemented in WEBGL mode")},p.default.RendererGL.prototype.strokeJoin=function(e){console.error("Sorry, strokeJoin() is not yet implemented in WEBGL mode")},p.default.RendererGL.prototype.filter=function(e){console.error("filter() does not work in WEBGL mode")},p.default.RendererGL.prototype.blendMode=function(e){e===o.DARKEST||e===o.LIGHTEST||e===o.ADD||e===o.BLEND||e===o.SUBTRACT||e===o.SCREEN||e===o.EXCLUSION||e===o.REPLACE||e===o.MULTIPLY||e===o.REMOVE?this.curBlendMode=e:e!==o.BURN&&e!==o.OVERLAY&&e!==o.HARD_LIGHT&&e!==o.SOFT_LIGHT&&e!==o.DODGE||console.warn("BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.")},p.default.RendererGL.prototype.erase=function(e,t){this._isErasing||(this._applyBlendMode(o.REMOVE),this._isErasing=!0,this._cachedFillStyle=this.curFillColor.slice(),this.curFillColor=[1,1,1,e/255],this._cachedStrokeStyle=this.curStrokeColor.slice(),this.curStrokeColor=[1,1,1,t/255])},p.default.RendererGL.prototype.noErase=function(){this._isErasing&&(this._isErasing=!1,this.curFillColor=this._cachedFillStyle.slice(),this.curStrokeColor=this._cachedStrokeStyle.slice(),this.blendMode(this._cachedBlendMode))},p.default.RendererGL.prototype.strokeWeight=function(e){this.curStrokeWeight!==e&&(this.pointSize=e,this.curStrokeWeight=e)},p.default.RendererGL.prototype._getPixel=function(e,t){var r;return r=new Uint8Array(4),this.drawingContext.readPixels(e,t,1,1,this.drawingContext.RGBA,this.drawingContext.UNSIGNED_BYTE,r),[r[0],r[1],r[2],r[3]]},p.default.RendererGL.prototype.loadPixels=function(){var e=this._pixelsState;if(!0===this._pInst._glAttributes.preserveDrawingBuffer){var t=e.pixels,r=this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4;t instanceof Uint8Array&&t.length===r||(t=new Uint8Array(r),this._pixelsState._setProperty("pixels",t));var n=this._pInst._pixelDensity;this.GL.readPixels(0,0,this.width*n,this.height*n,this.GL.RGBA,this.GL.UNSIGNED_BYTE,t)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},p.default.RendererGL.prototype.geometryInHash=function(e){return void 0!==this.retainedMode.geometry[e]},p.default.RendererGL.prototype.resize=function(e,t){p.default.Renderer.prototype.resize.call(this,e,t),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize();var r=this._pixelsState;void 0!==r.pixels&&r._setProperty("pixels",new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},p.default.RendererGL.prototype.clear=function(){var e=(arguments.length<=0?void 0:arguments[0])||0,t=(arguments.length<=1?void 0:arguments[1])||0,r=(arguments.length<=2?void 0:arguments[2])||0,n=(arguments.length<=3?void 0:arguments[3])||0;this.GL.clearColor(e,t,r,n),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},p.default.RendererGL.prototype.applyMatrix=function(e,t,r,n,a,o){16===arguments.length?p.default.Matrix.prototype.apply.apply(this.uMVMatrix,arguments):this.uMVMatrix.apply([e,t,0,0,r,n,0,0,0,0,1,0,a,o,0,1])},p.default.RendererGL.prototype.translate=function(e,t,r){return e instanceof p.default.Vector&&(r=e.z,t=e.y,e=e.x),this.uMVMatrix.translate([e,t,r]),this},p.default.RendererGL.prototype.scale=function(e,t,r){return this.uMVMatrix.scale(e,t,r),this},p.default.RendererGL.prototype.rotate=function(e,t){return void 0===t?this.rotateZ(e):(p.default.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},p.default.RendererGL.prototype.rotateX=function(e){return this.rotate(e,1,0,0),this},p.default.RendererGL.prototype.rotateY=function(e){return this.rotate(e,0,1,0),this},p.default.RendererGL.prototype.rotateZ=function(e){return this.rotate(e,0,0,1),this},p.default.RendererGL.prototype.push=function(){var e=p.default.Renderer.prototype.push.apply(this),t=e.properties;return t.uMVMatrix=this.uMVMatrix.copy(),t.uPMatrix=this.uPMatrix.copy(),t._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t.ambientLightColors=this.ambientLightColors.slice(),t.specularColors=this.specularColors.slice(),t.directionalLightDirections=this.directionalLightDirections.slice(),t.directionalLightDiffuseColors=this.directionalLightDiffuseColors.slice(),t.directionalLightSpecularColors=this.directionalLightSpecularColors.slice(),t.pointLightPositions=this.pointLightPositions.slice(),t.pointLightDiffuseColors=this.pointLightDiffuseColors.slice(),t.pointLightSpecularColors=this.pointLightSpecularColors.slice(),t.spotLightPositions=this.spotLightPositions.slice(),t.spotLightDirections=this.spotLightDirections.slice(),t.spotLightDiffuseColors=this.spotLightDiffuseColors.slice(),t.spotLightSpecularColors=this.spotLightSpecularColors.slice(),t.spotLightAngle=this.spotLightAngle.slice(),t.spotLightConc=this.spotLightConc.slice(),t.userFillShader=this.userFillShader,t.userStrokeShader=this.userStrokeShader,t.userPointShader=this.userPointShader,t.pointSize=this.pointSize,t.curStrokeWeight=this.curStrokeWeight,t.curStrokeColor=this.curStrokeColor,t.curFillColor=this.curFillColor,t._useSpecularMaterial=this._useSpecularMaterial,t._useEmissiveMaterial=this._useEmissiveMaterial,t._useShininess=this._useShininess,t.constantAttenuation=this.constantAttenuation,t.linearAttenuation=this.linearAttenuation,t.quadraticAttenuation=this.quadraticAttenuation,t._enableLighting=this._enableLighting,t._useNormalMaterial=this._useNormalMaterial,t._tex=this._tex,t.drawMode=this.drawMode,e},p.default.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=p.default.Matrix.identity(this._pInst),this},p.default.RendererGL.prototype._getImmediateStrokeShader=function(){var e=this.userStrokeShader;return e&&e.isStrokeShader()?e:this._getLineShader()},p.default.RendererGL.prototype._getRetainedStrokeShader=p.default.RendererGL.prototype._getImmediateStrokeShader,p.default.RendererGL.prototype._getImmediateFillShader=function(){var e=this.userFillShader;if(this._useNormalMaterial&&(!e||!e.isNormalShader()))return this._getNormalShader();if(this._enableLighting){if(!e||!e.isLightShader())return this._getLightShader()}else if(this._tex){if(!e||!e.isTextureShader())return this._getLightShader()}else if(!e)return this._getImmediateModeShader();return e},p.default.RendererGL.prototype._getRetainedFillShader=function(){if(this._useNormalMaterial)return this._getNormalShader();var e=this.userFillShader;if(this._enableLighting){if(!e||!e.isLightShader())return this._getLightShader()}else if(this._tex){if(!e||!e.isTextureShader())return this._getLightShader()}else if(!e)return this._getColorShader();return e},p.default.RendererGL.prototype._getImmediatePointShader=function(){var e=this.userPointShader;return e&&e.isPointShader()?e:this._getPointShader()},p.default.RendererGL.prototype._getRetainedLineShader=p.default.RendererGL.prototype._getImmediateLineShader,p.default.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this._pInst._glAttributes.perPixelLighting?this._defaultLightShader=new p.default.Shader(this,c.phongVert,c.phongFrag):this._defaultLightShader=new p.default.Shader(this,c.lightVert,c.lightTextureFrag)),this._defaultLightShader},p.default.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new p.default.Shader(this,c.immediateVert,c.vertexColorFrag)),this._defaultImmediateModeShader},p.default.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new p.default.Shader(this,c.normalVert,c.normalFrag)),this._defaultNormalShader},p.default.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new p.default.Shader(this,c.normalVert,c.basicFrag)),this._defaultColorShader},p.default.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new p.default.Shader(this,c.pointVert,c.pointFrag)),this._defaultPointShader},p.default.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new p.default.Shader(this,c.lineVert,c.lineFrag)),this._defaultLineShader},p.default.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new p.default.Shader(this,c.fontVert,c.fontFrag)),this._defaultFontShader},p.default.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var e=new p.default.Image(1,1);e.set(0,0,255),this._emptyTexture=new p.default.Texture(this,e)}return this._emptyTexture},p.default.RendererGL.prototype.getTexture=function(e){var t=this.textures,r=!0,n=!1,a=void 0;try{for(var o,i=t[Symbol.iterator]();!(r=(o=i.next()).done);r=!0){var s=o.value;if(s.src===e)return s}}catch(e){n=!0,a=e}finally{try{r||null==i.return||i.return()}finally{if(n)throw a}}var l=new p.default.Texture(this,e);return t.push(l),l},p.default.RendererGL.prototype._setStrokeUniforms=function(e){e.bindShader(),e.setUniform("uMaterialColor",this.curStrokeColor),e.setUniform("uStrokeWeight",this.curStrokeWeight)},p.default.RendererGL.prototype._setFillUniforms=function(e){e.bindShader(),e.setUniform("uMaterialColor",this.curFillColor),e.setUniform("isTexture",!!this._tex),this._tex&&e.setUniform("uSampler",this._tex),e.setUniform("uTint",this._tint),e.setUniform("uSpecular",this._useSpecularMaterial),e.setUniform("uEmissive",this._useEmissiveMaterial),e.setUniform("uShininess",this._useShininess),e.setUniform("uUseLighting",this._enableLighting);var t=this.pointLightDiffuseColors.length/3;e.setUniform("uPointLightCount",t),e.setUniform("uPointLightLocation",this.pointLightPositions),e.setUniform("uPointLightDiffuseColors",this.pointLightDiffuseColors),e.setUniform("uPointLightSpecularColors",this.pointLightSpecularColors);var r=this.directionalLightDiffuseColors.length/3;e.setUniform("uDirectionalLightCount",r),e.setUniform("uLightingDirection",this.directionalLightDirections),e.setUniform("uDirectionalDiffuseColors",this.directionalLightDiffuseColors),e.setUniform("uDirectionalSpecularColors",this.directionalLightSpecularColors);var n=this.ambientLightColors.length/3;e.setUniform("uAmbientLightCount",n),e.setUniform("uAmbientColor",this.ambientLightColors);var a=this.spotLightDiffuseColors.length/3;e.setUniform("uSpotLightCount",a),e.setUniform("uSpotLightAngle",this.spotLightAngle),e.setUniform("uSpotLightConc",this.spotLightConc),e.setUniform("uSpotLightDiffuseColors",this.spotLightDiffuseColors),e.setUniform("uSpotLightSpecularColors",this.spotLightSpecularColors),e.setUniform("uSpotLightLocation",this.spotLightPositions),e.setUniform("uSpotLightDirection",this.spotLightDirections),e.setUniform("uConstantAttenuation",this.constantAttenuation),e.setUniform("uLinearAttenuation",this.linearAttenuation),e.setUniform("uQuadraticAttenuation",this.quadraticAttenuation),e.bindTextures()},p.default.RendererGL.prototype._setPointUniforms=function(e){e.bindShader(),e.setUniform("uMaterialColor",this.curStrokeColor),e.setUniform("uPointSize",this.pointSize)},p.default.RendererGL.prototype._bindBuffer=function(e,t,r,n,a){if(t=t||this.GL.ARRAY_BUFFER,this.GL.bindBuffer(t,e),void 0!==r){var o=new(n||Float32Array)(r);this.GL.bufferData(t,o,a||this.GL.STATIC_DRAW)}},p.default.RendererGL.prototype._arraysEqual=function(e,t){var r=e.length;if(r!==t.length)return!1;for(var n=0;n>7,127&d,c>>7,127&c);for(var h=0;h>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:o,dimImageInfo:a}}return(t=this.glyphInfos[e.index]={glyph:e,uGlyphRect:[n.x1,-n.y1,n.x2,-n.y2],strokeImageInfo:k,strokes:h,colInfo:G(f,this.colDimImageInfos,this.colCellImageInfos),rowInfo:G(m,this.rowDimImageInfos,this.rowCellImageInfos)}).uGridOffset=[t.colInfo.dimOffset,t.rowInfo.dimOffset],t}}var z=Math.sqrt(3);j.default.RendererGL.prototype._renderText=function(e,t,r,n,a){if(this._textFont&&"string"!=typeof this._textFont){if(!(a<=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only Opentype (.otf) and Truetype (.ttf) fonts are supported"),e;e.push();var o=this._doStroke,i=this.drawMode;this._doStroke=!1,this.drawMode=R.TEXTURE;var s=this._textFont.font,l=this._textFont._fontInfo;l=l||(this._textFont._fontInfo=new D(s));var p=this._textFont._handleAlignment(this,t,r,n),u=this._textSize/s.unitsPerEm;this.translate(p.x,p.y,0),this.scale(u,u,1);var c=this.GL,d=!this._defaultFontShader,h=this._getFontShader();h.init(),h.bindShader(),d&&(h.setUniform("uGridImageSize",[64,64]),h.setUniform("uCellsImageSize",[64,64]),h.setUniform("uStrokeImageSize",[64,64]),h.setUniform("uGridSize",[9,9])),this._applyColorBlend(this.curFillColor);var m=this.retainedMode.geometry.glyph;if(!m){var f=this._textGeom=new j.default.Geometry(1,1,function(){for(var e=0;e<=1;e++)for(var t=0;t<=1;t++)this.vertices.push(new j.default.Vector(t,e,0)),this.uvs.push(t,e)});f.computeFaces().computeNormals(),m=this.createBuffers("glyph",f)}var y=!0,g=!1,v=void 0;try{for(var b,_=this.retainedMode.buffers.text[Symbol.iterator]();!(y=(b=_.next()).done);y=!0){b.value._prepareBuffer(m,h)}}catch(e){g=!0,v=e}finally{try{y||null==_.return||_.return()}finally{if(g)throw v}}this._bindBuffer(m.indexBuffer,c.ELEMENT_ARRAY_BUFFER),h.setUniform("uMaterialColor",this.curFillColor);try{var x=0,S=null,w=s.stringToGlyphs(t),M=!0,E=!1,T=void 0;try{for(var C,N=w[Symbol.iterator]();!(M=(C=N.next()).done);M=!0){var O=C.value;S&&(x+=s.getKerningValue(S,O));var L=l.getGlyphInfo(O);if(L.uGlyphRect){var I=L.rowInfo,P=L.colInfo;h.setUniform("uSamplerStrokes",L.strokeImageInfo.imageData),h.setUniform("uSamplerRowStrokes",I.cellImageInfo.imageData),h.setUniform("uSamplerRows",I.dimImageInfo.imageData),h.setUniform("uSamplerColStrokes",P.cellImageInfo.imageData),h.setUniform("uSamplerCols",P.dimImageInfo.imageData),h.setUniform("uGridOffset",L.uGridOffset),h.setUniform("uGlyphRect",L.uGlyphRect),h.setUniform("uGlyphOffset",x),h.bindTextures(),c.drawElements(c.TRIANGLES,6,this.GL.UNSIGNED_SHORT,0)}x+=O.advanceWidth,S=O}}catch(e){E=!0,T=e}finally{try{M||null==N.return||N.return()}finally{if(E)throw T}}}finally{h.unbindShader(),this._doStroke=o,this.drawMode=i,e.pop()}return e}}else console.log("WEBGL: you must load and set a font before drawing text. See `loadFont` and `textFont` for more details.")}},{"../core/constants":22,"../core/main":32,"./p5.RendererGL.Retained":85,"./p5.Shader":87}]},{},[17])(17)}); \ No newline at end of file diff --git a/public/js/socket-v2.3.0.io.slim.js b/public/js/socket-v2.3.0.io.slim.js new file mode 100644 index 0000000..2d89d90 --- /dev/null +++ b/public/js/socket-v2.3.0.io.slim.js @@ -0,0 +1,9 @@ +/*! + * Socket.IO v2.3.0 + * (c) 2014-2019 Guillermo Rauch + * Released under the MIT License. + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function n(t,e){"object"===("undefined"==typeof t?"undefined":o(t))&&(e=t,t=void 0),e=e||{};var r,n=i(t),s=n.source,p=n.id,h=n.path,u=c[p]&&h in c[p].nsps,f=e.forceNew||e["force new connection"]||!1===e.multiplex||u;return f?r=a(s,e):(c[p]||(c[p]=a(s,e)),r=c[p]),n.query&&!e.query&&(e.query=n.query),r.socket(n.path,e)}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(1),s=r(4),a=r(9);r(3)("socket.io-client");t.exports=e=n;var c=e.managers={};e.protocol=s.protocol,e.connect=n,e.Manager=r(9),e.Socket=r(33)},function(t,e,r){"use strict";function n(t,e){var r=t;e=e||"undefined"!=typeof location&&location,null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\/\//.test(t)||(t="undefined"!=typeof e?e.protocol+"//"+t:"https://"+t),r=o(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";var n=r.host.indexOf(":")!==-1,i=n?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+i+":"+r.port,r.href=r.protocol+"://"+i+(e&&e.port===r.port?"":":"+r.port),r}var o=r(2);r(3)("socket.io-client:url");t.exports=n},function(t,e){var r=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,n=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,o=t.indexOf("["),i=t.indexOf("]");o!=-1&&i!=-1&&(t=t.substring(0,o)+t.substring(o,i).replace(/:/g,";")+t.substring(i,t.length));for(var s=r.exec(t||""),a={},c=14;c--;)a[n[c]]=s[c]||"";return o!=-1&&i!=-1&&(a.source=e,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a}},function(t,e){"use strict";t.exports=function(){return function(){}}},function(t,e,r){function n(){}function o(t){var r=""+t.type;if(e.BINARY_EVENT!==t.type&&e.BINARY_ACK!==t.type||(r+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(r+=t.nsp+","),null!=t.id&&(r+=t.id),null!=t.data){var n=i(t.data);if(n===!1)return m;r+=n}return r}function i(t){try{return JSON.stringify(t)}catch(t){return!1}}function s(t,e){function r(t){var r=l.deconstructPacket(t),n=o(r.packet),i=r.buffers;i.unshift(n),e(i)}l.removeBlobs(t,r)}function a(){this.reconstructor=null}function c(t){var r=0,n={type:Number(t.charAt(0))};if(null==e.types[n.type])return u("unknown packet type "+n.type);if(e.BINARY_EVENT===n.type||e.BINARY_ACK===n.type){for(var o="";"-"!==t.charAt(++r)&&(o+=t.charAt(r),r!=t.length););if(o!=Number(o)||"-"!==t.charAt(r))throw new Error("Illegal attachments");n.attachments=Number(o)}if("/"===t.charAt(r+1))for(n.nsp="";++r;){var i=t.charAt(r);if(","===i)break;if(n.nsp+=i,r===t.length)break}else n.nsp="/";var s=t.charAt(r+1);if(""!==s&&Number(s)==s){for(n.id="";++r;){var i=t.charAt(r);if(null==i||Number(i)!=i){--r;break}if(n.id+=t.charAt(r),r===t.length)break}n.id=Number(n.id)}if(t.charAt(++r)){var a=p(t.substr(r)),c=a!==!1&&(n.type===e.ERROR||d(a));if(!c)return u("invalid payload");n.data=a}return n}function p(t){try{return JSON.parse(t)}catch(t){return!1}}function h(t){this.reconPack=t,this.buffers=[]}function u(t){return{type:e.ERROR,data:"parser error: "+t}}var f=(r(3)("socket.io-parser"),r(5)),l=r(6),d=r(7),y=r(8);e.protocol=4,e.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],e.CONNECT=0,e.DISCONNECT=1,e.EVENT=2,e.ACK=3,e.ERROR=4,e.BINARY_EVENT=5,e.BINARY_ACK=6,e.Encoder=n,e.Decoder=a;var m=e.ERROR+'"encode error"';n.prototype.encode=function(t,r){if(e.BINARY_EVENT===t.type||e.BINARY_ACK===t.type)s(t,r);else{var n=o(t);r([n])}},f(a.prototype),a.prototype.add=function(t){var r;if("string"==typeof t)r=c(t),e.BINARY_EVENT===r.type||e.BINARY_ACK===r.type?(this.reconstructor=new h(r),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",r)):this.emit("decoded",r);else{if(!y(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");r=this.reconstructor.takeBinaryData(t),r&&(this.reconstructor=null,this.emit("decoded",r))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},h.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=l.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},h.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(t,e,r){function n(t){if(t)return o(t)}function o(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}t.exports=n,n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},n.prototype.once=function(t,e){function r(){this.off(t,r),e.apply(this,arguments)}return r.fn=e,this.on(t,r),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r=this._callbacks["$"+t];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var n,o=0;o0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},n.prototype.cleanup=function(){for(var t=this.subs.length,e=0;e=this._reconnectionAttempts)this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();this.reconnecting=!0;var r=setTimeout(function(){t.skipReconnect||(t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open(function(e){e?(t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):t.onreconnect()}))},e);this.subs.push({destroy:function(){clearTimeout(r)}})}},n.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},function(t,e,r){t.exports=r(11),t.exports.parser=r(18)},function(t,e,r){function n(t,e){return this instanceof n?(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t?(t=p(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=p(e.host).host),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.agent=e.agent||!1,this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.withCredentials=!1!==e.withCredentials,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.transportOptions=e.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),("undefined"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new n(t,e)}function o(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}var i=r(12),s=r(5),a=(r(3)("engine.io-client:socket"),r(32)),c=r(18),p=r(2),h=r(26);t.exports=n,n.priorWebsocketSuccess=!1,s(n.prototype),n.protocol=c.protocol,n.Socket=n,n.Transport=r(17),n.transports=r(12),n.parser=r(18),n.prototype.createTransport=function(t){var e=o(this.query);e.EIO=c.protocol,e.transport=t;var r=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var n=new i[t]({query:e,socket:this,agent:r.agent||this.agent,hostname:r.hostname||this.hostname,port:r.port||this.port,secure:r.secure||this.secure,path:r.path||this.path,forceJSONP:r.forceJSONP||this.forceJSONP,jsonp:r.jsonp||this.jsonp,forceBase64:r.forceBase64||this.forceBase64,enablesXDR:r.enablesXDR||this.enablesXDR,withCredentials:r.withCredentials||this.withCredentials,timestampRequests:r.timestampRequests||this.timestampRequests,timestampParam:r.timestampParam||this.timestampParam,policyPort:r.policyPort||this.policyPort,pfx:r.pfx||this.pfx,key:r.key||this.key,passphrase:r.passphrase||this.passphrase,cert:r.cert||this.cert,ca:r.ca||this.ca,ciphers:r.ciphers||this.ciphers,rejectUnauthorized:r.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:r.perMessageDeflate||this.perMessageDeflate,extraHeaders:r.extraHeaders||this.extraHeaders,forceNode:r.forceNode||this.forceNode,localAddress:r.localAddress||this.localAddress,requestTimeout:r.requestTimeout||this.requestTimeout,protocols:r.protocols||void 0,isReactNative:this.isReactNative});return n},n.prototype.open=function(){var t;if(this.rememberUpgrade&&n.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else{if(0===this.transports.length){var e=this;return void setTimeout(function(){e.emit("error","No transports available")},0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},n.prototype.setTransport=function(t){var e=this;this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",function(){e.onDrain()}).on("packet",function(t){e.onPacket(t)}).on("error",function(t){e.onError(t)}).on("close",function(){e.onClose("transport close")})},n.prototype.probe=function(t){function e(){if(u.onlyBinaryUpgrades){var t=!this.supportsBinary&&u.transport.supportsBinary;h=h||t}h||(p.send([{type:"ping",data:"probe"}]),p.once("packet",function(t){if(!h)if("pong"===t.type&&"probe"===t.data){if(u.upgrading=!0,u.emit("upgrading",p),!p)return;n.priorWebsocketSuccess="websocket"===p.name,u.transport.pause(function(){h||"closed"!==u.readyState&&(c(),u.setTransport(p),p.send([{type:"upgrade"}]),u.emit("upgrade",p),p=null,u.upgrading=!1,u.flush())})}else{var e=new Error("probe error");e.transport=p.name,u.emit("upgradeError",e)}}))}function r(){h||(h=!0,c(),p.close(),p=null)}function o(t){var e=new Error("probe error: "+t);e.transport=p.name,r(),u.emit("upgradeError",e)}function i(){o("transport closed")}function s(){o("socket closed")}function a(t){p&&t.name!==p.name&&r()}function c(){p.removeListener("open",e),p.removeListener("error",o),p.removeListener("close",i),u.removeListener("close",s),u.removeListener("upgrading",a)}var p=this.createTransport(t,{probe:1}),h=!1,u=this;n.priorWebsocketSuccess=!1,p.once("open",e),p.once("error",o),p.once("close",i),this.once("close",s),this.once("upgrading",a),p.open()},n.prototype.onOpen=function(){if(this.readyState="open",n.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause)for(var t=0,e=this.upgrades.length;t1?{type:b[o],data:t.substring(1)}:{type:b[o]}:k}var i=new Uint8Array(t),o=i[0],s=f(t,1);return w&&"blob"===r&&(s=new w([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var r=b[t.charAt(0)];if(!p)return{type:r,data:{base64:!0,data:t.substr(1)}};var n=p.decode(t.substr(1));return"blob"===e&&w&&(n=new w([n])),{type:r,data:n}},e.encodePayload=function(t,r,n){function o(t){return t.length+":"+t}function i(t,n){e.encodePacket(t,!!s&&r,!1,function(t){n(null,o(t))})}"function"==typeof r&&(n=r,r=null);var s=u(t);return r&&s?w&&!g?e.encodePayloadAsBlob(t,n):e.encodePayloadAsArrayBuffer(t,n):t.length?void c(t,i,function(t,e){return n(e.join(""))}):n("0:")},e.decodePayload=function(t,r,n){if("string"!=typeof t)return e.decodePayloadAsBinary(t,r,n);"function"==typeof r&&(n=r,r=null);var o;if(""===t)return n(k,0,1);for(var i,s,a="",c=0,p=t.length;c0;){for(var s=new Uint8Array(o),a=0===s[0],c="",p=1;255!==s[p];p++){if(c.length>310)return n(k,0,1);c+=s[p]}o=f(o,2+c.length),c=parseInt(c);var h=f(o,0,c);if(a)try{h=String.fromCharCode.apply(null,new Uint8Array(h))}catch(t){var u=new Uint8Array(h);h="";for(var p=0;pn&&(r=n),e>=n||e>=r||0===n)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(r-e),s=e,a=0;s=55296&&e<=56319&&o65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var r="";return 0==(4294965248&t)?r=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),r=d(t>>12&15|224),r+=i(t,6)):0==(4292870144&t)&&(r=d(t>>18&7|240),r+=i(t,12),r+=i(t,6)),r+=d(63&t|128)}function a(t,e){e=e||{};for(var n,o=!1!==e.strict,i=r(t),a=i.length,c=-1,p="";++c=f)throw Error("Invalid byte index");var t=255&u[l];if(l++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(t){var e,r,n,i,s;if(l>f)throw Error("Invalid byte index");if(l==f)return!1;if(e=255&u[l],l++,0==(128&e))return e;if(192==(224&e)){if(r=c(),s=(31&e)<<6|r,s>=128)return s;throw Error("Invalid continuation byte")}if(224==(240&e)){if(r=c(),n=c(),s=(15&e)<<12|r<<6|n,s>=2048)return o(s,t)?s:65533;throw Error("Invalid continuation byte")}if(240==(248&e)&&(r=c(),n=c(),i=c(),s=(7&e)<<18|r<<12|n<<6|i,s>=65536&&s<=1114111))return s;throw Error("Invalid UTF-8 detected")}function h(t,e){e=e||{};var o=!1!==e.strict;u=r(t),f=u.length,l=0;for(var i,s=[];(i=p(o))!==!1;)s.push(i);return n(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */ +var u,f,l,d=String.fromCharCode;t.exports={version:"2.1.2",encode:a,decode:h}},function(t,e){!function(){"use strict";for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=new Uint8Array(256),n=0;n>2],i+=t[(3&n[r])<<4|n[r+1]>>4],i+=t[(15&n[r+1])<<2|n[r+2]>>6],i+=t[63&n[r+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(t){var e,n,o,i,s,a=.75*t.length,c=t.length,p=0;"="===t[t.length-1]&&(a--,"="===t[t.length-2]&&a--);var h=new ArrayBuffer(a),u=new Uint8Array(h);for(e=0;e>4,u[p++]=(15&o)<<4|i>>2,u[p++]=(3&i)<<6|63&s;return h}}()},function(t,e){function r(t){return t.map(function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var r=new Uint8Array(t.byteLength);r.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=r.buffer}return e}return t})}function n(t,e){e=e||{};var n=new i;return r(t).forEach(function(t){n.append(t)}),e.type?n.getBlob(e.type):n.getBlob()}function o(t,e){return new Blob(r(t),e||{})}var i="undefined"!=typeof i?i:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob(["hi"]);return 2===t.size}catch(t){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(t){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;"undefined"!=typeof Blob&&(n.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?n:void 0}()},function(t,e){e.encode=function(t){var e="";for(var r in t)t.hasOwnProperty(r)&&(e.length&&(e+="&"),e+=encodeURIComponent(r)+"="+encodeURIComponent(t[r]));return e},e.decode=function(t){for(var e={},r=t.split("&"),n=0,o=r.length;n0);return e}function n(t){var e=0;for(h=0;h';i=document.createElement(t)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),c=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=c,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),n(),t=t.replace(h,"\\\n"),this.area.value=t.replace(p,"\\n");try{this.form.submit()}catch(t){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===o.iframe.readyState&&r()}:this.iframe.onload=r}}).call(e,function(){return this}())},function(t,e,r){function n(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(u=i),s.call(this,t)}var o,i,s=r(17),a=r(18),c=r(26),p=r(27),h=r(28);r(3)("engine.io-client:websocket");if("undefined"!=typeof WebSocket?o=WebSocket:"undefined"!=typeof self&&(o=self.WebSocket||self.MozWebSocket),"undefined"==typeof window)try{i=r(31)}catch(t){}var u=o||i;t.exports=n,p(n,s),n.prototype.name="websocket",n.prototype.supportsBinary=!0,n.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,r={agent:this.agent,perMessageDeflate:this.perMessageDeflate};r.pfx=this.pfx,r.key=this.key,r.passphrase=this.passphrase,r.cert=this.cert,r.ca=this.ca,r.ciphers=this.ciphers,r.rejectUnauthorized=this.rejectUnauthorized,this.extraHeaders&&(r.headers=this.extraHeaders),this.localAddress&&(r.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new u(t,e):new u(t):new u(t,e,r)}catch(t){return this.emit("error",t)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},n.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},n.prototype.write=function(t){function e(){r.emit("flush"),setTimeout(function(){r.writable=!0,r.emit("drain")},0)}var r=this;this.writable=!1;for(var n=t.length,o=0,i=n;o0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=r,r.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),r=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-r:t+r}return 0|Math.min(t,this.max)},r.prototype.reset=function(){this.attempts=0},r.prototype.setMin=function(t){this.ms=t},r.prototype.setMax=function(t){this.max=t},r.prototype.setJitter=function(t){this.jitter=t}}])}); +//# sourceMappingURL=socket.io.slim.js.map \ No newline at end of file diff --git a/public/js/two-v0.8.1.min.js b/public/js/two-v0.8.1.min.js new file mode 100644 index 0000000..bd9fc49 --- /dev/null +++ b/public/js/two-v0.8.1.min.js @@ -0,0 +1,87 @@ +/* +MIT License + +Copyright (c) 2012 - 2021 @jonobr1 / http://jono.fyi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +var Two=(()=>{var ge=Object.defineProperty;var Gi=Object.getOwnPropertyDescriptor;var qi=Object.getOwnPropertyNames;var Ki=Object.prototype.hasOwnProperty;var Ji=(i,t,e)=>t in i?ge(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var $i=i=>ge(i,"__esModule",{value:!0});var Ce=(i,t)=>{for(var e in t)ge(i,e,{get:t[e],enumerable:!0})},Zi=(i,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of qi(t))!Ki.call(i,r)&&(e||r!=="default")&&ge(i,r,{get:()=>t[r],enumerable:!(s=Gi(t,r))||s.enumerable});return i};var Qi=(i=>(t,e)=>i&&i.get(t)||(e=Zi($i({}),t,1),i&&i.set(t,e),e))(typeof WeakMap!="undefined"?new WeakMap:0);var w=(i,t,e)=>(Ji(i,typeof t!="symbol"?t+"":t,e),e);var Js={};Ce(Js,{default:()=>I});var v={move:"M",line:"L",curve:"C",arc:"A",close:"Z"};var Ie={};Ce(Ie,{HALF_PI:()=>$,NumArray:()=>xt,TWO_PI:()=>J,decomposeMatrix:()=>Lt,getComputedMatrix:()=>pt,getPoT:()=>Pe,lerp:()=>nt,mod:()=>it,setMatrix:()=>Le,toFixed:()=>K});var H;typeof window!="undefined"?H=window:typeof global!="undefined"?H=global:typeof self!="undefined"&&(H=self);var oi,J=Math.PI*2,$=Math.PI*.5;function Lt(i,t,e,s,r,n){let a;return arguments.length<=1?(a=i.a,t=i.b,e=i.c,s=i.d,r=i.e,n=i.f):a=i,{translateX:r,translateY:n,scaleX:Math.sqrt(a*a+t*t),scaleY:Math.sqrt(e*e+s*s),rotation:180*Math.atan2(t,a)/Math.PI}}function Le(i){oi=i}function pt(i,t){t=t&&t.identity()||new oi;let e=i,s=[];for(;e&&e._matrix;)s.push(e._matrix),e=e.parent;s.reverse();for(let r=0;rjt,getAnchorsFromArcData:()=>is,getComponentOnCubicBezier:()=>Dt,getControlPoints:()=>ci,getCurveBoundingBox:()=>je,getCurveFromPoints:()=>Ne,getCurveLength:()=>Be,getReflection:()=>pe,integrate:()=>fi,subdivide:()=>te});var m=class{_events={};_bound=!1;constructor(){}addEventListener(t,e){return(this._events[t]||(this._events[t]=[])).push(e),this._bound=!0,this}on(){return this.addEventListener.apply(this,arguments)}bind(){return this.addEventListener.apply(this,arguments)}removeEventListener(t,e){if(!this._events)return this;if(!t&&!e)return this._events={},this._bound=!1,this;let s=t?[t]:Object.keys(this._events);for(let r=0,n=s.length;r=4){let n=arguments[0]-arguments[2],a=arguments[1]-arguments[3];return Math.atan2(a,n)}let s=t.x-e.x,r=t.y-e.y;return Math.atan2(r,s)}static distanceBetween(t,e){return Math.sqrt(Ot.distanceBetweenSquared(t,e))}static distanceBetweenSquared(t,e){let s=t.x-e.x,r=t.y-e.y;return s*s+r*r}set(t,e){return this.x=t,this.y=e,this}copy(t){return this.x=t.x,this.y=t.y,this}clear(){return this.x=0,this.y=0,this}clone(){return new Ot(this.x,this.y)}add(t,e){return arguments.length<=0?this:(arguments.length<=1?typeof t=="number"?(this.x+=t,this.y+=t):t&&typeof t.x=="number"&&typeof t.y=="number"&&(this.x+=t.x,this.y+=t.y):(this.x+=t,this.y+=e),this)}addSelf(t){return this.add.apply(this,arguments)}sub(t,e){return arguments.length<=0?this:(arguments.length<=1?typeof t=="number"?(this.x-=t,this.y-=t):t&&typeof t.x=="number"&&typeof t.y=="number"&&(this.x-=t.x,this.y-=t.y):(this.x-=t,this.y-=e),this)}subtract(){return this.sub.apply(this,arguments)}subSelf(t){return this.sub.apply(this,arguments)}subtractSelf(t){return this.sub.apply(this,arguments)}multiply(t,e){return arguments.length<=0?this:(arguments.length<=1?typeof t=="number"?(this.x*=t,this.y*=t):t&&typeof t.x=="number"&&typeof t.y=="number"&&(this.x*=t.x,this.y*=t.y):(this.x*=t,this.y*=e),this)}multiplySelf(t){return this.multiply.apply(this,arguments)}multiplyScalar(t){return this.multiply(t)}divide(t,e){return arguments.length<=0?this:(arguments.length<=1?typeof t=="number"?(this.x/=t,this.y/=t):t&&typeof t.x=="number"&&typeof t.y=="number"&&(this.x/=t.x,this.y/=t.y):(this.x/=t,this.y/=e),isNaN(this.x)&&(this.x=0),isNaN(this.y)&&(this.y=0),this)}divideSelf(t){return this.divide.apply(this,arguments)}divideScalar(t){return this.divide(t)}negate(){return this.multiply(-1)}dot(t){return this.x*t.x+this.y*t.y}length(){return Math.sqrt(this.lengthSquared())}lengthSquared(){return this.x*this.x+this.y*this.y}normalize(){return this.divideScalar(this.length())}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){let e=this.x-t.x,s=this.y-t.y;return e*e+s*s}setLength(t){return this.normalize().multiplyScalar(t)}equals(t,e){return e=typeof e=="undefined"?1e-4:e,this.distanceTo(t)>1,f=s&1?n[h++]*i(o):0;for(;h=0&&t<4294967296}var S={isNaN:function(i){return typeof i=="number"&&i!==+i},isElement:function(i){return!!(i&&i.nodeType===1)},isObject:function(i){let t=typeof i;return t==="function"||t==="object"&&!!i},extend:function(i){let t=ui.call(arguments,1);for(let e=0;e=0&&this.classList.splice(n,1)}this.classList=this.classList.concat(e)}this._className=i}}};var as=Math.cos,os=Math.sin,_i=Math.tan,ze=[],mt=class extends m{elements=new xt(9);manual=!1;constructor(t,e,s,r,n,a){super();let o=t;Array.isArray(o)||(o=Array.prototype.slice.call(arguments)),this.identity(),o.length>0&&this.set(o)}static Multiply(t,e,s){if(e.length<=3){let E=t,C,j,M,T=e[0]||0,N=e[1]||0,z=e[2]||0;return C=E[0]*T+E[1]*N+E[2]*z,j=E[3]*T+E[4]*N+E[5]*z,M=E[6]*T+E[7]*N+E[8]*z,{x:C,y:j,z:M}}let r=t[0],n=t[1],a=t[2],o=t[3],h=t[4],l=t[5],f=t[6],u=t[7],_=t[8],d=e[0],c=e[1],p=e[2],b=e[3],g=e[4],y=e[5],x=e[6],R=e[7],A=e[8];return s=s||new xt(9),s[0]=r*d+n*b+a*x,s[1]=r*c+n*g+a*R,s[2]=r*p+n*y+a*A,s[3]=o*d+h*b+l*x,s[4]=o*c+h*g+l*R,s[5]=o*p+h*y+l*A,s[6]=f*d+u*b+_*x,s[7]=f*c+u*g+_*R,s[8]=f*p+u*y+_*A,s}set(t,e,s,r,n,a,o,h,l){if(typeof e=="undefined"){let f=t;t=f[0],e=f[1],s=f[2],r=f[3],n=f[4],a=f[5],o=f[6],h=f[7],l=f[8]}return this.elements[0]=t,this.elements[1]=e,this.elements[2]=s,this.elements[3]=r,this.elements[4]=n,this.elements[5]=a,this.elements[6]=o,this.elements[7]=h,this.elements[8]=l,this.trigger(m.Types.change)}copy(t){return this.elements[0]=t.elements[0],this.elements[1]=t.elements[1],this.elements[2]=t.elements[2],this.elements[3]=t.elements[3],this.elements[4]=t.elements[4],this.elements[5]=t.elements[5],this.elements[6]=t.elements[6],this.elements[7]=t.elements[7],this.elements[8]=t.elements[8],this.manual=t.manual,this.trigger(m.Types.change)}identity(){return this.elements[0]=mt.Identity[0],this.elements[1]=mt.Identity[1],this.elements[2]=mt.Identity[2],this.elements[3]=mt.Identity[3],this.elements[4]=mt.Identity[4],this.elements[5]=mt.Identity[5],this.elements[6]=mt.Identity[6],this.elements[7]=mt.Identity[7],this.elements[8]=mt.Identity[8],this.trigger(m.Types.change)}multiply(t,e,s,r,n,a,o,h,l){if(typeof e=="undefined")return this.elements[0]*=t,this.elements[1]*=t,this.elements[2]*=t,this.elements[3]*=t,this.elements[4]*=t,this.elements[5]*=t,this.elements[6]*=t,this.elements[7]*=t,this.elements[8]*=t,this.trigger(m.Types.change);if(typeof r=="undefined"){t=t||0,e=e||0,s=s||0,n=this.elements;let V=n[0]*t+n[1]*e+n[2]*s,ft=n[3]*t+n[4]*e+n[5]*s,ct=n[6]*t+n[7]*e+n[8]*s;return{x:V,y:ft,z:ct}}let f=this.elements,u=[t,e,s,r,n,a,o,h,l],_=f[0],d=f[1],c=f[2],p=f[3],b=f[4],g=f[5],y=f[6],x=f[7],R=f[8],A=u[0],E=u[1],C=u[2],j=u[3],M=u[4],T=u[5],N=u[6],z=u[7],W=u[8];return this.elements[0]=_*A+d*j+c*N,this.elements[1]=_*E+d*M+c*z,this.elements[2]=_*C+d*T+c*W,this.elements[3]=p*A+b*j+g*N,this.elements[4]=p*E+b*M+g*z,this.elements[5]=p*C+b*T+g*W,this.elements[6]=y*A+x*j+R*N,this.elements[7]=y*E+x*M+R*z,this.elements[8]=y*C+x*T+R*W,this.trigger(m.Types.change)}inverse(t){let e=this.elements;t=t||new mt;let s=e[0],r=e[1],n=e[2],a=e[3],o=e[4],h=e[5],l=e[6],f=e[7],u=e[8],_=u*o-h*f,d=-u*a+h*l,c=f*a-o*l,p=s*_+r*d+n*c;return p?(p=1/p,t.elements[0]=_*p,t.elements[1]=(-u*r+n*f)*p,t.elements[2]=(h*r-n*o)*p,t.elements[3]=d*p,t.elements[4]=(u*s-n*l)*p,t.elements[5]=(-h*s+n*a)*p,t.elements[6]=c*p,t.elements[7]=(-f*s+r*l)*p,t.elements[8]=(o*s-r*a)*p,t):null}scale(t,e){return arguments.length<=1&&(e=t),this.multiply(t,0,0,0,e,0,0,0,1)}rotate(t){let e=as(t),s=os(t);return this.multiply(e,-s,0,s,e,0,0,0,1)}translate(t,e){return this.multiply(1,0,t,0,1,e,0,0,1)}skewX(t){let e=_i(t);return this.multiply(1,e,0,0,1,0,0,0,1)}skewY(t){let e=_i(t);return this.multiply(1,0,0,e,1,0,0,0,1)}toString(t){return ze.length=0,this.toTransformArray(t,ze),ze.map(K).join(" ")}toTransformArray(t,e){let s=this.elements,r=!!e,n=s[0],a=s[1],o=s[2],h=s[3],l=s[4],f=s[5];if(t){let u=s[6],_=s[7],d=s[8];if(r){e[0]=n,e[1]=h,e[2]=u,e[3]=a,e[4]=l,e[5]=_,e[6]=o,e[7]=f,e[8]=d;return}return[n,h,u,a,l,_,o,f,d]}if(r){e[0]=n,e[1]=h,e[2]=a,e[3]=l,e[4]=o,e[5]=f;return}return[n,h,a,l,o,f]}toArray(t,e){let s=this.elements,r=!!e,n=s[0],a=s[1],o=s[2],h=s[3],l=s[4],f=s[5];if(t){let u=s[6],_=s[7],d=s[8];if(r){e[0]=n,e[1]=a,e[2]=o,e[3]=h,e[4]=l,e[5]=f,e[6]=u,e[7]=_,e[8]=d;return}return[n,a,o,h,l,f,u,_,d]}if(r){e[0]=n,e[1]=a,e[2]=o,e[3]=h,e[4]=l,e[5]=f;return}return[n,a,o,h,l,f]}toObject(){return{elements:this.toArray(!0),manual:!!this.manual}}clone(){return new mt().copy(this)}},at=mt;w(at,"Identity",[1,0,0,0,1,0,0,0,1]);Le(at);var ot=class extends Et{_flagMatrix=!0;_flagScale=!1;_matrix=null;_worldMatrix=null;_position=null;_rotation=0;_scale=1;_skewX=0;_skewY=0;constructor(){super();for(let t in me)Object.defineProperty(this,t,me[t]);this._renderer.flagMatrix=gi.bind(this),this.isShape=!0,this.id=X.Identifier+X.uniqueId(),this.matrix=new at,this.worldMatrix=new at,this.position=new k,this.rotation=0,this.scale=1,this.skewX=0,this.skewY=0}get renderer(){return this._renderer}set renderer(t){this._renderer=t}get translation(){return me.position.get.apply(this,arguments)}set translation(t){me.position.set.apply(this,arguments)}addTo(t){return t.add(this),this}remove(){return this.parent?(this.parent.remove(this),this):this}clone(t){let e=new ot;return e.position.copy(this.position),e.rotation=this.rotation,e.scale=this.scale,e.skewX=this.skewX,e.skewY=this.skewY,this.matrix.manual&&e.matrix.copy(this.matrix),t&&t.add(e),e._update()}_update(t){return!this._matrix.manual&&this._flagMatrix&&(this._matrix.identity().translate(this.position.x,this.position.y),this._scale instanceof k?this._matrix.scale(this._scale.x,this._scale.y):this._matrix.scale(this._scale),this._matrix.rotate(this.rotation),this._matrix.skewX(this.skewX),this._matrix.skewY(this.skewY)),t&&this.parent&&this.parent._update&&this.parent._update(),this}flagReset(){return this._flagMatrix=this._flagScale=!1,super.flagReset.call(this),this}},me={position:{enumerable:!0,get:function(){return this._position},set:function(i){this._position&&this._position.unbind(m.Types.change,this._renderer.flagMatrix),this._position=i,this._position.bind(m.Types.change,this._renderer.flagMatrix),gi.call(this)}},rotation:{enumerable:!0,get:function(){return this._rotation},set:function(i){this._rotation=i,this._flagMatrix=!0}},scale:{enumerable:!0,get:function(){return this._scale},set:function(i){this._scale instanceof k&&this._scale.unbind(m.Types.change,this._renderer.flagMatrix),this._scale=i,this._scale instanceof k&&this._scale.bind(m.Types.change,this._renderer.flagMatrix),this._flagMatrix=!0,this._flagScale=!0}},skewX:{enumerable:!0,get:function(){return this._skewX},set:function(i){this._skewX=i,this._flagMatrix=!0}},skewY:{enumerable:!0,get:function(){return this._skewY},set:function(i){this._skewY=i,this._flagMatrix=!0}},matrix:{enumerable:!0,get:function(){return this._matrix},set:function(i){this._matrix=i,this._flagMatrix=!0}},worldMatrix:{enumerable:!0,get:function(){return pt(this,this._worldMatrix),this._worldMatrix},set:function(i){this._worldMatrix=i}}};function gi(){this._flagMatrix=!0}var lt=class extends Array{_events=new m;get _bound(){return this._events._bound}set _bound(t){this._events._bound=t}addEventListener(){return this._events.addEventListener.apply(this,arguments)}on(){return this._events.on.apply(this,arguments)}bind(){return this._events.bind.apply(this,arguments)}removeEventListener(){return this._events.removeEventListener.apply(this,arguments)}off(){return this._events.off.apply(this,arguments)}unbind(){return this._events.unbind.apply(this,arguments)}dispatchEvent(){return this._events.dispatchEvent.apply(this,arguments)}trigger(){return this._events.trigger.apply(this,arguments)}listen(){return this._events.listen.apply(this,arguments)}ignore(){return this._events.ignore.apply(this,arguments)}constructor(){super();arguments[0]&&Array.isArray(arguments[0])?arguments[0].length>0&&this.push.apply(this,arguments[0]):arguments.length>0&&this.push.apply(this,arguments)}pop(){let t=super.pop.apply(this,arguments);return this.trigger(m.Types.remove,[t]),t}shift(){let t=super.shift.apply(this,arguments);return this.trigger(m.Types.remove,[t]),t}push(){let t=super.push.apply(this,arguments);return this.trigger(m.Types.insert,arguments),t}unshift(){let t=super.unshift.apply(this,arguments);return this.trigger(m.Types.insert,arguments),t}splice(){let t=super.splice.apply(this,arguments);if(this.trigger(m.Types.remove,t),arguments.length>2){let e=this.slice(arguments[0],arguments[0]+arguments.length-2);this.trigger(m.Types.insert,e),this.trigger(m.Types.order)}return t}sort(){return super.sort.apply(this,arguments),this.trigger(m.Types.order),this}reverse(){return super.reverse.apply(this,arguments),this.trigger(m.Types.order),this}indexOf(){return super.indexOf.apply(this,arguments)}};var ye=class extends lt{ids={};constructor(t){t=Array.isArray(t)?t:Array.prototype.slice.call(arguments);super(t);this.attach(t),this.on(m.Types.insert,this.attach),this.on(m.Types.remove,this.detach)}attach(t){for(let e=0;e=0&&e.push(r),r.children)for(let n=0;n=0&&this.children.splice(r,1),this.children.push(s)}return this}remove(t){let e=arguments.length,s=this.parent;if(e<=0&&s)return s.remove(this),this;t instanceof Array?t=t.slice():t=Array.prototype.slice.call(arguments);for(let r=0;r=0&&this.children.splice(a,1)}return this}getBoundingClientRect(t){let e,s,r,n,a,o,h,l,f,u;this._update(!0);let _=1/0,d=-1/0,c=1/0,p=-1/0,b=/texture|gradient/i;s=t?this._matrix:pt(this);for(let g=0;go+e?(s.beginning=1,s.ending=1):lo&&ho&&l0&&e(this._children)),this._children=new ye(i),this._children.bind(m.Types.insert,t),this._children.bind(m.Types.remove,e),this._children.bind(m.Types.order,s),i.length>0&&t(i)}},mask:{enumerable:!0,get:function(){return this._mask},set:function(i){this._mask=i,this._flagMask=!0,S.isObject(i)&&!i.clip&&(i.clip=!0)}}};function mi(i,t){let e=i.parent,s;if(e===t){r();return}if(e&&e.children.ids[i.id]&&(s=Array.prototype.indexOf.call(e.children,i),e.children.splice(s,1),n()),t){r();return}n(),e._flagAdditions&&e.additions.length===0&&(e._flagAdditions=!1),e._flagSubtractions&&e.subtractions.length===0&&(e._flagSubtractions=!1),delete i.parent;function r(){t.subtractions.length>0&&(s=Array.prototype.indexOf.call(t.subtractions,i),s>=0&&t.subtractions.splice(s,1)),t.additions.length>0&&(s=Array.prototype.indexOf.call(t.additions,i),s>=0&&t.additions.splice(s,1)),i.parent=t,t.additions.push(i),t._flagAdditions=!0}function n(){s=Array.prototype.indexOf.call(e.additions,i),s>=0&&e.additions.splice(s,1),s=Array.prototype.indexOf.call(e.subtractions,i),s<0&&(e.subtractions.push(i),e._flagSubtractions=!0)}}var yi=new at,De=[],He=Math.max,ls=Math.min,xi=Math.abs,ve=Math.sin,we=Math.cos,hs=Math.acos,ke=Math.sqrt,tt={isHidden:/(undefined|none|transparent)/i,alignments:{left:"start",middle:"center",right:"end"},shim:function(i,t){return i.tagName=i.nodeName=t||"canvas",i.nodeType=1,i.getAttribute=function(e){return this[e]},i.setAttribute=function(e,s){return this[e]=s,this},i},group:{renderChild:function(i){tt[i._renderer.type].render.call(i,this.ctx,!0,this.clip)},render:function(i){if(!this._visible)return this;this._update();let t=this._matrix.elements,e=this.parent;this._renderer.opacity=this._opacity*(e&&e._renderer?e._renderer.opacity:1);let s=this._mask,r=Ae(t),n=!r||!!s;if(this._renderer.context||(this._renderer.context={}),this._renderer.context.ctx=i,n&&(i.save(),r||i.transform(t[0],t[3],t[1],t[4],t[2],t[5])),s&&tt[s._renderer.type].render.call(s,i,!0),this._opacity>0&&this._scale!==0)for(let a=0;a0&&(i.lineDashOffset=rt.offset||0,i.setLineDash(rt)),i.beginPath();let Mt,$t,Zt,Qt,wt,Q,ai;for(let Ct=0;Ct=p&&_&&(x=R,N=y.controls&&y.controls.right||k.zero,z=x.controls&&x.controls.left||k.zero,y._relative?(C=N.x+y.x,j=N.y+y.y):(C=N.x,j=N.y),x._relative?(A=z.x+x.x,E=z.y+x.y):(A=z.x,E=z.y),W=x.x,V=x.y,i.bezierCurveTo(C,j,A,E,W,V));break;case v.line:i.lineTo(W,V);break;case v.move:R=y,i.moveTo(W,V);break}return _&&i.closePath(),!ct&&!e&&(tt.isHidden.test(a)||(ut=a._renderer&&a._renderer.offset,ut&&(i.save(),i.translate(-a._renderer.offset.x,-a._renderer.offset.y),i.scale(a._renderer.scale.x,a._renderer.scale.y)),i.fill(),ut&&i.restore()),tt.isHidden.test(r)||(ut=r._renderer&&r._renderer.offset,ut&&(i.save(),i.translate(-r._renderer.offset.x,-r._renderer.offset.y),i.scale(r._renderer.scale.x,r._renderer.scale.y),i.lineWidth=n/r._renderer.scale.x),i.stroke(),ut&&i.restore())),Z||i.restore(),ct&&!e&&i.clip(),rt&&rt.length>0&&i.setLineDash(De),this.flagReset()}},points:{render:function(i,t,e){let s,r,n,a,o,h,l,f,u,_,d,c,p,b,g,y;if(y=this.parent&&this.parent._renderer?this.parent._renderer.opacity:1,o=this._opacity*(y||1),h=this._visible,!t&&(!h||o===0))return this;this._update(),s=this._matrix.elements,r=this._stroke,n=this._linewidth,a=this._fill,f=this._renderer.collection,u=f.length,p=Ae(s),g=this.dashes,l=this._size,p||(i.save(),i.transform(s[0],s[3],s[1],s[4],s[2],s[5])),a&&(typeof a=="string"?i.fillStyle=a:(tt[a._renderer.type].render.call(a,i,this),i.fillStyle=a._renderer.effect)),r&&(typeof r=="string"?i.strokeStyle=r:(tt[r._renderer.type].render.call(r,i,this),i.strokeStyle=r._renderer.effect),n&&(i.lineWidth=n)),typeof o=="number"&&(i.globalAlpha=o),g&&g.length>0&&(i.lineDashOffset=g.offset||0,i.setLineDash(g)),i.beginPath();let x=l*.5,R;this._sizeAttenuation||(pt(this,yi),R=yi.elements,R=Lt(R[0],R[3],R[1],R[4],R[2],R[5]),x/=Math.max(R.scaleX,R.scaleY));for(let A=0;A0&&i.setLineDash(De),this.flagReset()}},text:{render:function(i,t,e){let s=this.parent&&this.parent._renderer?this.parent._renderer.opacity:1,r=this._opacity*s,n=this._visible,a=this._mask,o=this._clip;if(!t&&(!n||o||r===0))return this;this._update();let h=this._matrix.elements,l=this._stroke,f=this._linewidth,u=this._fill,_=this._decoration,d=Ae(h),c=u._renderer&&u._renderer.offset&&l._renderer&&l._renderer.offset,p=this.dashes,b=tt.alignments[this._alignment]||this._alignment,g=this._baseline,y,x,R,A,E,C,j,M,T,N,z;if(d||(i.save(),i.transform(h[0],h[3],h[1],h[4],h[2],h[5])),a&&tt[a._renderer.type].render.call(a,i,!0),c||(i.font=[this._style,this._weight,this._size+"px/"+this._leading+"px",this._family].join(" ")),i.textAlign=b,i.textBaseline=g,u&&(typeof u=="string"?i.fillStyle=u:(tt[u._renderer.type].render.call(u,i,this),i.fillStyle=u._renderer.effect)),l&&(typeof l=="string"?i.strokeStyle=l:(tt[l._renderer.type].render.call(l,i,this),i.strokeStyle=l._renderer.effect),f&&(i.lineWidth=f)),typeof r=="number"&&(i.globalAlpha=r),p&&p.length>0&&(i.lineDashOffset=p.offset||0,i.setLineDash(p)),!o&&!e&&(tt.isHidden.test(u)||(u._renderer&&u._renderer.offset?(C=u._renderer.scale.x,j=u._renderer.scale.y,i.save(),i.translate(-u._renderer.offset.x,-u._renderer.offset.y),i.scale(C,j),y=this._size/u._renderer.scale.y,x=this._leading/u._renderer.scale.y,i.font=[this._style,this._weight,y+"px/",x+"px",this._family].join(" "),R=u._renderer.offset.x/u._renderer.scale.x,A=u._renderer.offset.y/u._renderer.scale.y,i.fillText(this.value,R,A),i.restore()):i.fillText(this.value,0,0)),tt.isHidden.test(l)||(l._renderer&&l._renderer.offset?(C=l._renderer.scale.x,j=l._renderer.scale.y,i.save(),i.translate(-l._renderer.offset.x,-l._renderer.offset.y),i.scale(C,j),y=this._size/l._renderer.scale.y,x=this._leading/l._renderer.scale.y,i.font=[this._style,this._weight,y+"px/",x+"px",this._family].join(" "),R=l._renderer.offset.x/l._renderer.scale.x,A=l._renderer.offset.y/l._renderer.scale.y,E=f/l._renderer.scale.x,i.lineWidth=E,i.strokeText(this.value,R,A),i.restore()):i.strokeText(this.value,0,0))),/(underline|strikethrough)/i.test(_)){let W=i.measureText(this.value),V=1;switch(_){case"underline":T=W.actualBoundingBoxAscent,z=W.actualBoundingBoxAscent;break;case"strikethrough":T=0,z=0,V=.5;break}switch(g){case"top":T+=this._size*V,z+=this._size*V;break;case"baseline":case"bottom":T-=this._size*V,z-=this._size*V;break}switch(b){case"left":case"start":M=0,N=W.width;break;case"right":case"end":M=-W.width,N=0;break;default:M=-W.width/2,N=W.width/2}i.lineWidth=Math.max(Math.floor(this._size/15),1),i.strokeStyle=i.fillStyle,i.beginPath(),i.moveTo(M,T),i.lineTo(N,z),i.stroke()}return d||i.restore(),o&&!e&&i.clip(),p&&p.length>0&&i.setLineDash(De),this.flagReset()}},"linear-gradient":{render:function(i,t){if(!!t){if(this._update(),!this._renderer.effect||this._flagEndPoints||this._flagStops||this._flagUnits){let e,s=this.left._x,r=this.left._y,n=this.right._x,a=this.right._y;/objectBoundingBox/i.test(this._units)&&(e=t.getBoundingClientRect(!0),s=(s-.5)*e.width,r=(r-.5)*e.height,n=(n-.5)*e.width,a=(a-.5)*e.height),this._renderer.effect=i.createLinearGradient(s,r,n,a);for(let o=0;o1){let V=ke(y);s=V*s,r=V*r,b=s*s,g=r*r}let x=b*p+g*c,R=(b*g-x)/x,A=ke(He(0,R));n===a&&(A=-A);let E=A*s*d/r,C=-A*r*_/s,j=we(o)*E-ve(o)*C+(t+h)/2,M=ve(o)*E+we(o)*C+(e+l)/2,T=bi(1,0,(_-E)/s,(d-C)/r),N=bi((_-E)/s,(d-C)/r,(-_-E)/s,(-d-C)/r)%J,z=T+N;fs(i,j,M,s,r,T,z,a===0,o)}},kt=class extends m{constructor(t){super();let e=t.smoothing!==!1;this.domElement=t.domElement||document.createElement("canvas"),this.ctx=this.domElement.getContext("2d"),this.overdraw=t.overdraw||!1,typeof this.ctx.imageSmoothingEnabled!="undefined"&&(this.ctx.imageSmoothingEnabled=e),this.scene=new G,this.scene.parent=this}setSize(t,e,s){return this.width=t,this.height=e,this.ratio=typeof s=="undefined"?Ht(this.ctx):s,this.domElement.width=t*this.ratio,this.domElement.height=e*this.ratio,this.domElement.style&&S.extend(this.domElement.style,{width:t+"px",height:e+"px"}),this.trigger(m.Types.resize,t,e,s)}render(){let t=this.ratio===1;return t||(this.ctx.save(),this.ctx.scale(this.ratio,this.ratio)),this.overdraw||this.ctx.clearRect(0,0,this.width,this.height),tt.group.render.call(this.scene,this.ctx),t||this.ctx.restore(),this}};w(kt,"Utils",tt);function fs(i,t,e,s,r,n,a,o,h){let l=a-n,f=jt.Tolerance.epsilon,u=Math.abs(l)=s)return s-r>=0;r+=a}return!1}function Xt(i,t){let e=i._length;if(t<=0)return 0;if(t>=e)return i._lengths.length-1;for(let s=0,r=0;s=t)return t-=r,Math.max(s-1,0)+t/i._lengths[s];r+=i._lengths[s]}return-1}function Re(i,t,e){let s,r,n,a,o,h,l,f,u=t.controls&&t.controls.right,_=i.controls&&i.controls.left;return s=t.x,o=t.y,r=(u||t).x,h=(u||t).y,n=(_||i).x,l=(_||i).y,a=i.x,f=i.y,u&&t._relative&&(r+=t.x,h+=t.y),_&&i._relative&&(n+=i.x,l+=i.y),Be(s,o,r,h,n,l,a,f,e)}function Xe(i,t,e){let s,r,n,a,o,h,l,f,u=t.controls&&t.controls.right,_=i.controls&&i.controls.left;return s=t.x,o=t.y,r=(u||t).x,h=(u||t).y,n=(_||i).x,l=(_||i).y,a=i.x,f=i.y,u&&t._relative&&(r+=t.x,h+=t.y),_&&i._relative&&(n+=i.x,l+=i.y),te(s,o,r,h,n,l,a,f,e)}var Tt=class extends Et{_flagOffset=!0;_flagOpacity=!0;_flagColor=!0;_offset=0;_opacity=1;_color="#fff";constructor(t,e,s){super();for(let r in vi)Object.defineProperty(this,r,vi[r]);this._renderer.type="stop",this.offset=typeof t=="number"?t:Tt.Index<=0?0:1,this.opacity=typeof s=="number"?s:1,this.color=typeof e=="string"?e:Tt.Index<=0?"#fff":"#000",Tt.Index=(Tt.Index+1)%2}clone(){let t=new Tt;return S.each(Tt.Properties,function(e){t[e]=this[e]},this),t}toObject(){let t={};return S.each(Tt.Properties,function(e){t[e]=this[e]},this),t}flagReset(){return this._flagOffset=this._flagColor=this._flagOpacity=!1,super.flagReset.call(this),this}},_t=Tt;w(_t,"Index",0),w(_t,"Properties",["offset","opacity","color"]);var vi={offset:{enumerable:!0,get:function(){return this._offset},set:function(i){this._offset=i,this._flagOffset=!0,this.parent&&(this.parent._flagStops=!0)}},opacity:{enumerable:!0,get:function(){return this._opacity},set:function(i){this._opacity=i,this._flagOpacity=!0,this.parent&&(this.parent._flagStops=!0)}},color:{enumerable:!0,get:function(){return this._color},set:function(i){this._color=i,this._flagColor=!0,this.parent&&(this.parent._flagStops=!0)}}};var ee=class extends Et{_flagStops=!1;_flagSpread=!1;_flagUnits=!1;_spread="";_units="";constructor(t){super();for(let e in wi)Object.defineProperty(this,e,wi[e]);this._renderer.type="gradient",this.id=X.Identifier+X.uniqueId(),this.classList=[],this._renderer.flagStops=cs.bind(this),this._renderer.bindStops=us.bind(this),this._renderer.unbindStops=ds.bind(this),this.spread="pad",this.units="objectBoundingBox",t&&(this.stops=t)}clone(t){let e=this.stops.map(function(r){return r.clone()}),s=new ee(e);return S.each(ee.Properties,function(r){s[r]=this[r]},this),t&&t.add(s),s}toObject(){let t={stops:this.stops.map(function(e){return e.toObject()})};return S.each(ee.Properties,function(e){t[e]=this[e]},this),t}_update(){return(this._flagSpread||this._flagStops)&&this.trigger(m.Types.change),this}flagReset(){return this._flagSpread=this._flagUnits=this._flagStops=!1,super.flagReset.call(this),this}},Y=ee;w(Y,"Stop",_t),w(Y,"Properties",["spread","stops","renderer","id","units"]);var wi={spread:{enumerable:!0,get:function(){return this._spread},set:function(i){this._spread=i,this._flagSpread=!0}},units:{enumerable:!0,get:function(){return this._units},set:function(i){this._units=i,this._flagUnits=!0}},stops:{enumerable:!0,get:function(){return this._stops},set:function(i){let t=this._renderer.bindStops,e=this._renderer.unbindStops;this._stops&&this._stops.unbind(m.Types.insert,t).unbind(m.Types.remove,e),this._stops=new lt((i||[]).slice(0)),this._stops.bind(m.Types.insert,t).bind(m.Types.remove,e),t(this._stops)}}};function cs(){this._flagStops=!0}function us(i){let t=i.length;for(;t--;)i[t].bind(m.Types.change,this._renderer.flagStops),i[t].parent=this;this._renderer.flagStops()}function ds(i){let t=i.length;for(;t--;)i[t].unbind(m.Types.change,this._renderer.flagStops),delete i[t].parent;this._renderer.flagStops()}var Ye=class extends Y{_flagEndPoints=!1;_left=null;_right=null;constructor(t,e,s,r,n){super(n);for(let a in ki)Object.defineProperty(this,a,ki[a]);this._renderer.type="linear-gradient",this._renderer.flagEndPoints=_s.bind(this),this.left=new k,this.right=new k,typeof t=="number"&&(this.left.x=t),typeof e=="number"&&(this.left.y=e),typeof s=="number"&&(this.right.x=s),typeof r=="number"&&(this.right.y=r)}clone(t){let e=this.stops.map(function(r){return r.clone()}),s=new Ye(this.left._x,this.left._y,this.right._x,this.right._y,e);return S.each(Y.Properties,function(r){s[r]=this[r]},this),t&&t.add(s),s}toObject(){let t=super.toObject.call(this);return t.left=this.left.toObject(),t.right=this.right.toObject(),t}_update(){return(this._flagEndPoints||this._flagSpread||this._flagStops)&&this.trigger(m.Types.change),this}flagReset(){return this._flagEndPoints=!1,super.flagReset.call(this),this}},U=Ye;w(U,"Properties",["left","right"]),w(U,"Stop",_t);var ki={left:{enumerable:!0,get:function(){return this._left},set:function(i){this._left instanceof k&&this._left.unbind(m.Types.change,this._renderer.flagEndPoints),this._left=i,this._left.bind(m.Types.change,this._renderer.flagEndPoints),this._flagEndPoints=!0}},right:{enumerable:!0,get:function(){return this._right},set:function(i){this._right instanceof k&&this._right.unbind(m.Types.change,this._renderer.flagEndPoints),this._right=i,this._right.bind(m.Types.change,this._renderer.flagEndPoints),this._flagEndPoints=!0}}};function _s(){this._flagEndPoints=!0}var ie=class extends Y{_flagRadius=!1;_flagCenter=!1;_flagFocal=!1;_radius=0;_center=null;_focal=null;constructor(t,e,s,r,n,a){super(r);for(let o in Ai)Object.defineProperty(this,o,Ai[o]);this._renderer.type="radial-gradient",this._renderer.flagCenter=gs.bind(this),this._renderer.flagFocal=ps.bind(this),this.center=new k,this.radius=typeof s=="number"?s:20,this.focal=new k,typeof t=="number"&&(this.center.x=t),typeof e=="number"&&(this.center.y=e),this.focal.copy(this.center),typeof n=="number"&&(this.focal.x=n),typeof a=="number"&&(this.focal.y=a)}clone(t){let e=this.stops.map(function(r){return r.clone()}),s=new ie(this.center._x,this.center._y,this._radius,e,this.focal._x,this.focal._y);return S.each(Y.Properties.concat(ie.Properties),function(r){s[r]=this[r]},this),t&&t.add(s),s}toObject(){let t=super.toObject.call(this);return S.each(ie.Properties,function(e){t[e]=this[e]},this),t.center=this.center.toObject(),t.focal=this.focal.toObject(),t}_update(){return(this._flagRadius||this._flatCenter||this._flagFocal||this._flagSpread||this._flagStops)&&this.trigger(m.Types.change),this}flagReset(){return this._flagRadius=this._flagCenter=this._flagFocal=!1,super.flagReset.call(this),this}},D=ie;w(D,"Stop",_t),w(D,"Properties",["center","radius","focal"]);var Ai={radius:{enumerable:!0,get:function(){return this._radius},set:function(i){this._radius=i,this._flagRadius=!0}},center:{enumerable:!0,get:function(){return this._center},set:function(i){this._center&&this._center.unbind(m.Types.change,this._renderer.flagCenter),this._center=i,this._center.bind(m.Types.change,this._renderer.flagCenter),this._flagCenter=!0}},focal:{enumerable:!0,get:function(){return this._focal},set:function(i){this._focal&&this._focal.unbind(m.Types.change,this._renderer.flagFocal),this._focal=i,this._focal.bind(m.Types.change,this._renderer.flagFocal),this._flagFocal=!0}}};function gs(){this._flagCenter=!0}function ps(){this._flagFocal=!0}var Se,Ri={video:/\.(mp4|webm|ogg)$/i,image:/\.(jpe?g|png|gif|tiff|webp)$/i,effect:/texture|gradient/i};H.document&&(Se=document.createElement("a"));var st=class extends Et{_flagSrc=!1;_flagImage=!1;_flagVideo=!1;_flagLoaded=!1;_flagRepeat=!1;_flagOffset=!1;_flagScale=!1;_src="";_image=null;_loaded=!1;_repeat="no-repeat";_scale=1;_offset=null;constructor(t,e){super();this._renderer={};for(let s in Si)Object.defineProperty(this,s,Si[s]);if(this._renderer.type="texture",this._renderer.flagOffset=ms.bind(this),this._renderer.flagScale=ys.bind(this),this.id=X.Identifier+X.uniqueId(),this.classList=[],this.loaded=!1,this.repeat="no-repeat",this.offset=new k,typeof e=="function"){let s=function(){this.unbind(m.Types.load,s),typeof e=="function"&&e()}.bind(this);this.bind(m.Types.load,s)}if(typeof t=="string")this.src=t;else if(typeof t=="object"){let s=Object.prototype.toString.call(t);(s==="[object HTMLImageElement]"||s==="[object HTMLCanvasElement]"||s==="[object HTMLVideoElement]"||s==="[object Image]")&&(this.image=t)}this._update()}static getAbsoluteURL(t){return Se?(Se.href=t,Se.href):t}static loadHeadlessBuffer(t,e){t.image.onload=e,t.image.src=t.src}static getTag(t){return t&&t.nodeName&&t.nodeName.toLowerCase()||"img"}static getImage(t){let e=st.getAbsoluteURL(t);if(st.ImageRegistry.contains(e))return st.ImageRegistry.get(e);let s;return ht.Image?(s=new ht.Image,kt.Utils.shim(s,"img")):H.document?Ri.video.test(e)?s=document.createElement("video"):s=document.createElement("img"):console.warn("Two.js: no prototypical image defined for Two.Texture"),s.crossOrigin="anonymous",s}static load(t,e){let s=t.image,r=st.getTag(s);t._flagImage&&(/canvas/i.test(r)?st.Register.canvas(t,e):(t._src=!ht.isHeadless&&s.getAttribute("two-src")||s.src,st.Register[r](t,e))),t._flagSrc&&(s||(s=st.getImage(t.src),t.image=s),r=st.getTag(s),st.Register[r](t,e))}clone(){let t=new st(this.src);return t.repeat=this.repeat,t.offset.copy(this.origin),t.scale=this.scale,t}toObject(){return{src:this.src,repeat:this.repeat,origin:this.origin.toObject(),scale:typeof this.scale=="number"?this.scale:this.scale.toObject()}}_update(){return(this._flagSrc||this._flagImage)&&(this.trigger(m.Types.change),(this._flagSrc||this._flagImage)&&(this.loaded=!1,st.load(this,function(){this.loaded=!0,this.trigger(m.Types.change).trigger(m.Types.load)}.bind(this)))),this._image&&this._image.readyState>=4&&(this._flagVideo=!0),this}flagReset(){return this._flagSrc=this._flagImage=this._flagLoaded=this._flagRepeat=this._flagVideo=this._flagScale=this._flagOffset=!1,super.flagReset.call(this),this}},B=st;w(B,"Properties",["id","className","src","loaded","repeat","scale","offset","image"]),w(B,"RegularExpressions",Ri),w(B,"ImageRegistry",new Ft),w(B,"Register",{canvas:function(t,e){t._src="#"+t.id,st.ImageRegistry.add(t.src,t.image),typeof e=="function"&&e()},img:function(t,e){let s=t.image,r=function(a){!ht.isHeadless&&s.removeEventListener&&typeof s.removeEventListener=="function"&&(s.removeEventListener("load",r,!1),s.removeEventListener("error",n,!1)),typeof e=="function"&&e()},n=function(a){throw!ht.isHeadless&&typeof s.removeEventListener=="function"&&(s.removeEventListener("load",r,!1),s.removeEventListener("error",n,!1)),new et("unable to load "+t.src)};typeof s.width=="number"&&s.width>0&&typeof s.height=="number"&&s.height>0?r():!ht.isHeadless&&typeof s.addEventListener=="function"&&(s.addEventListener("load",r,!1),s.addEventListener("error",n,!1)),t._src=st.getAbsoluteURL(t._src),!(!ht.isHeadless&&s&&s.getAttribute("two-src"))&&(ht.isHeadless||s.setAttribute("two-src",t.src),st.ImageRegistry.add(t.src,s),ht.isHeadless?st.loadHeadlessBuffer(t,r):t.image.src=t.src)},video:function(t,e){if(ht.isHeadless)throw new et("video textures are not implemented in headless environments.");let s=function(n){t.image.removeEventListener("canplaythrough",s,!1),t.image.removeEventListener("error",r,!1),t.image.width=t.image.videoWidth,t.image.height=t.image.videoHeight,typeof e=="function"&&e()},r=function(n){throw t.image.removeEventListener("canplaythrough",s,!1),t.image.removeEventListener("error",r,!1),new et("unable to load "+t.src)};t._src=st.getAbsoluteURL(t._src),t.image.getAttribute("two-src")||(t.image.setAttribute("two-src",t.src),st.ImageRegistry.add(t.src,t.image)),t.image.readyState>=4?s():(t.image.addEventListener("canplaythrough",s,!1),t.image.addEventListener("error",r,!1),t.image.src=t.src,t.image.load())}});var Si={src:{enumerable:!0,get:function(){return this._src},set:function(i){this._src=i,this._flagSrc=!0}},loaded:{enumerable:!0,get:function(){return this._loaded},set:function(i){this._loaded=i,this._flagLoaded=!0}},repeat:{enumerable:!0,get:function(){return this._repeat},set:function(i){this._repeat=i,this._flagRepeat=!0}},image:{enumerable:!0,get:function(){return this._image},set:function(i){let t=B.getTag(i),e;switch(t){case"canvas":e="#"+i.id;break;default:e=i.src}B.ImageRegistry.contains(e)?this._image=B.ImageRegistry.get(i.src):this._image=i,this._flagImage=!0}},offset:{enumerable:!0,get:function(){return this._offset},set:function(i){this._offset&&this._offset.unbind(m.Types.change,this._renderer.flagOffset),this._offset=i,this._offset.bind(m.Types.change,this._renderer.flagOffset),this._flagOffset=!0}},scale:{enumerable:!0,get:function(){return this._scale},set:function(i){this._scale instanceof k&&this._scale.unbind(m.Types.change,this._renderer.flagScale),this._scale=i,this._scale instanceof k&&this._scale.bind(m.Types.change,this._renderer.flagScale),this._flagScale=!0}}};function ms(){this._flagOffset=!0}function ys(){this._flagScale=!0}var Pt=Math.min,It=Math.max,xs=Math.ceil,bs=Math.floor,vs=new k,Yt=class extends ot{_flagVertices=!0;_flagLength=!0;_flagFill=!0;_flagStroke=!0;_flagLinewidth=!0;_flagOpacity=!0;_flagVisible=!0;_flagCap=!0;_flagJoin=!0;_flagMiter=!0;_flagMask=!1;_flagClip=!1;_length=0;_fill="#fff";_stroke="#000";_linewidth=1;_opacity=1;_visible=!0;_cap="round";_join="round";_miter=4;_closed=!0;_curved=!1;_automatic=!0;_beginning=0;_ending=1;_mask=null;_clip=!1;_dashes=null;constructor(t,e,s,r){super();for(let n in Ei)Object.defineProperty(this,n,Ei[n]);this._renderer.type="path",this._renderer.flagVertices=Ge.bind(this),this._renderer.bindVertices=qe.bind(this),this._renderer.unbindVertices=Ke.bind(this),this._renderer.flagFill=Je.bind(this),this._renderer.flagStroke=$e.bind(this),this._renderer.vertices=[],this._renderer.collection=[],this._closed=!!e,this._curved=!!s,this.beginning=0,this.ending=1,this.fill="#fff",this.stroke="#000",this.linewidth=1,this.opacity=1,this.className="",this.visible=!0,this.cap="butt",this.join="miter",this.miter=4,this.vertices=t,this.automatic=!r,this.dashes=[],this.dashes.offset=0}clone(t){let e=new Yt;for(let s=0;s=y){this._closed?(s=it(Z,x),r=it(Z-1,x),Z===0&&(s=r,r=Z)):(s=Z,r=Math.min(Math.max(Z-1,0),R)),A=this.vertices[s],E=this.vertices[r],y-=rt,this._lengths[Z]!==0?t=y/this._lengths[Z]:t=0;break}rt+=this._lengths[Z]}if(A===null||E===null)return null;if(A){if(!E)return A}else return E;g=E.controls&&E.controls.right,b=A.controls&&A.controls.left,o=E.x,_=E.y,h=(g||E).x,d=(g||E).y,l=(b||A).x,c=(b||A).y,f=A.x,p=A.y,g&&E.relative&&(h+=E.x,d+=E.y),b&&A.relative&&(l+=A.x,c+=A.y),a=Dt(t,o,h,l,f),u=Dt(t,_,d,c,p);let C=nt(o,h,t),j=nt(_,d,t),M=nt(h,l,t),T=nt(d,c,t),N=nt(l,f,t),z=nt(c,p,t),W=nt(C,M,t),V=nt(j,T,t),ft=nt(M,N,t),ct=nt(T,z,t);return S.isObject(e)?(e.x=a,e.y=u,e instanceof F&&(e.controls.left.x=W,e.controls.left.y=V,e.controls.right.x=ft,e.controls.right.y=ct,(typeof e.relative!="boolean"||e.relative)&&(e.controls.left.x-=a,e.controls.left.y-=u,e.controls.right.x-=a,e.controls.right.y-=u)),e.t=t,e):(n=new F(a,u,W-a,V-u,ft-a,ct-u,this._curved?v.curve:v.line),n.t=t,n)}plot(){if(this.curved)return Ne(this._collection,this.closed),this;for(let t=0;t0&&(n[n.length-1].command=v.line),r=o;return}a=Xe(o,r,t),n=n.concat(a),S.each(a,function(l,f){f<=0&&r.command===v.move?l.command=v.move:l.command=v.line}),h>=e&&(this._closed&&this._automatic?(r=o,a=Xe(o,r,t),n=n.concat(a),S.each(a,function(l,f){f<=0&&r.command===v.move?l.command=v.move:l.command=v.line})):s&&n.push(new F(o.x,o.y)),n[n.length-1].command=s?v.close:v.line),r=o},this),this._automatic=!1,this._curved=!1,this.vertices=n,this}_updateLength(t,e){e||this._update();let s=this.vertices.length,r=s-1,n=!1,a=this.vertices[r],o=0;return typeof this._lengths=="undefined"&&(this._lengths=[]),S.each(this.vertices,function(h,l){if(l<=0&&!n||h.command===v.move){a=h,this._lengths[l]=0;return}this._lengths[l]=Re(h,a,t),o+=this._lengths[l],l>=r&&n&&(a=this.vertices[(l+1)%s],this._lengths[l+1]=Re(h,a,t),o+=this._lengths[l+1]),a=h},this),this._length=o,this._flagLength=!1,this}_update(){if(this._flagVertices){this._automatic&&this.plot(),this._flagLength&&this._updateLength(void 0,!0);let t=this._collection.length,e=this._closed,s=Math.min(this._beginning,this._ending),r=Math.max(this._beginning,this._ending),n=Xt(this,s*this._length),a=Xt(this,r*this._length),o=xs(n),h=bs(a),l,f,u,_,d,c;for(this._renderer.vertices.length=0,c=0;ch&&!f?(d=this._renderer.collection[c].copy(this._collection[c]),this.getPointAt(r,d),d.command=this._renderer.collection[c].command,this._renderer.vertices.push(d),f=d,u=this._collection[c-1],u&&u.controls&&(d.controls.relative?d.controls.right.clear():d.controls.right.copy(d),this._renderer.collection[c-1].controls.right.copy(u).lerp(u.controls.right,d.t))):c>=o&&c<=h&&(d=this._renderer.collection[c].copy(this._collection[c]),this._renderer.vertices.push(d),c===h&&We(this,r)?(f=d,!e&&f.controls&&(f.relative?f.controls.right.clear():f.controls.right.copy(f))):c===o&&We(this,s)&&(l=d,l.command=v.move,!e&&l.controls&&(l.relative?l.controls.left.clear():l.controls.left.copy(l))));o>0&&!l&&(c=o-1,d=this._renderer.collection[c].copy(this._collection[c]),this.getPointAt(s,d),d.command=v.move,this._renderer.vertices.unshift(d),_=this._collection[c+1],_&&_.controls&&(d.controls.left.clear(),_.relative?this._renderer.collection[c+1].controls.left.copy(_.controls.left).lerp(k.zero,d.t):(vs.copy(_),this._renderer.collection[c+1].controls.left.copy(_.controls.left).lerp(_,d.t))))}return ot.prototype._update.apply(this,arguments),this}flagReset(){return this._flagVertices=this._flagLength=this._flagFill=this._flagStroke=this._flagLinewidth=this._flagOpacity=this._flagVisible=this._flagCap=this._flagJoin=this._flagMiter=this._flagClip=!1,ot.prototype.flagReset.call(this),this}},L=Yt;w(L,"Properties",["fill","stroke","linewidth","opacity","visible","cap","join","miter","closed","curved","automatic","beginning","ending"]),w(L,"Utils",{getCurveLength:Re});var Ei={linewidth:{enumerable:!0,get:function(){return this._linewidth},set:function(i){this._linewidth=i,this._flagLinewidth=!0}},opacity:{enumerable:!0,get:function(){return this._opacity},set:function(i){this._opacity=i,this._flagOpacity=!0}},visible:{enumerable:!0,get:function(){return this._visible},set:function(i){this._visible=i,this._flagVisible=!0}},cap:{enumerable:!0,get:function(){return this._cap},set:function(i){this._cap=i,this._flagCap=!0}},join:{enumerable:!0,get:function(){return this._join},set:function(i){this._join=i,this._flagJoin=!0}},miter:{enumerable:!0,get:function(){return this._miter},set:function(i){this._miter=i,this._flagMiter=!0}},fill:{enumerable:!0,get:function(){return this._fill},set:function(i){(this._fill instanceof Y||this._fill instanceof U||this._fill instanceof D||this._fill instanceof B)&&this._fill.unbind(m.Types.change,this._renderer.flagFill),this._fill=i,this._flagFill=!0,(this._fill instanceof Y||this._fill instanceof U||this._fill instanceof D||this._fill instanceof B)&&this._fill.bind(m.Types.change,this._renderer.flagFill)}},stroke:{enumerable:!0,get:function(){return this._stroke},set:function(i){(this._stroke instanceof Y||this._stroke instanceof U||this._stroke instanceof D||this._stroke instanceof B)&&this._stroke.unbind(m.Types.change,this._renderer.flagStroke),this._stroke=i,this._flagStroke=!0,(this._stroke instanceof Y||this._stroke instanceof U||this._stroke instanceof D||this._stroke instanceof B)&&this._stroke.bind(m.Types.change,this._renderer.flagStroke)}},length:{get:function(){return this._flagLength&&this._updateLength(),this._length}},closed:{enumerable:!0,get:function(){return this._closed},set:function(i){this._closed=!!i,this._flagVertices=!0}},curved:{enumerable:!0,get:function(){return this._curved},set:function(i){this._curved=!!i,this._flagVertices=!0}},automatic:{enumerable:!0,get:function(){return this._automatic},set:function(i){if(i===this._automatic)return;this._automatic=!!i;let t=this._automatic?"ignore":"listen";S.each(this.vertices,function(e){e[t]()})}},beginning:{enumerable:!0,get:function(){return this._beginning},set:function(i){this._beginning=i,this._flagVertices=!0}},ending:{enumerable:!0,get:function(){return this._ending},set:function(i){this._ending=i,this._flagVertices=!0}},vertices:{enumerable:!0,get:function(){return this._collection},set:function(i){let t=this._renderer.bindVertices,e=this._renderer.unbindVertices;this._collection&&this._collection.unbind(m.Types.insert,t).unbind(m.Types.remove,e),i instanceof lt?this._collection=i:this._collection=new lt(i||[]),this._collection.bind(m.Types.insert,t).bind(m.Types.remove,e),t(this._collection)}},mask:{enumerable:!0,get:function(){return this._mask},set:function(i){this._mask=i,this._flagMask=!0,S.isObject(i)&&!i.clip&&(i.clip=!0)}},clip:{enumerable:!0,get:function(){return this._clip},set:function(i){this._clip=i,this._flagClip=!0}},dashes:{enumerable:!0,get:function(){return this._dashes},set:function(i){typeof i.offset!="number"&&(i.offset=this.dashes&&this._dashes.offset||0),this._dashes=i}}};function Ge(){this._flagVertices=!0,this._flagLength=!0,this.parent&&(this.parent._flagLength=!0)}function qe(i){let t=i.length;for(;t--;)i[t].bind(m.Types.change,this._renderer.flagVertices);this._renderer.flagVertices()}function Ke(i){let t=i.length;for(;t--;)i[t].unbind(m.Types.change,this._renderer.flagVertices);this._renderer.flagVertices()}function Je(){this._flagFill=!0}function $e(){this._flagStroke=!0}var Ze=class extends L{constructor(t,e,s,r){let n=[new F,new F,new F,new F];super(n,!0,!1,!0);for(let a in Fi)Object.defineProperty(this,a,Fi[a]);this.width=s,this.height=r,this.origin=new k,this.translation.set(t,e),this._update()}_flagWidth=0;_flagHeight=0;_width=0;_height=0;_origin=null;_update(){if(this._flagVertices||this._flagWidth||this._flagHeight){let t=this._width/2,e=this._height/2;!this._closed&&this.vertices.length===4&&this.vertices.push(new F),this.vertices[0].set(-t,-e).sub(this._origin).command=v.move,this.vertices[1].set(t,-e).sub(this._origin).command=v.line,this.vertices[2].set(t,e).sub(this._origin).command=v.line,this.vertices[3].set(-t,e).sub(this._origin).command=v.line,this.vertices[4]&&(this.vertices[4].set(-t,-e).sub(this._origin).command=v.line)}return super._update.call(this),this}flagReset(){return this._flagWidth=this._flagHeight=!1,super.flagReset.call(this),this}clone(t){let e=new Ze(0,0,this.width,this.height);e.translation.copy(this.translation),e.rotation=this.rotation,e.scale=this.scale,e.skewX=this.skewX,e.skewY=this.skewY,this.matrix.manual&&e.matrix.copy(this.matrix);for(let s=0;s0&&(S.isNaN(this._lastFrame)&&(this._lastFrame=o-1),a=S.performance.now()-this._startTime,_=this._lastFrame+1,h=1e3*(_-this._firstFrame)/this._frameRate,this._loop?a=a%h:a=Math.min(a,h),l=nt(this._firstFrame,_,a/h),l=Math.floor(l),l!==this._index&&(this._index=l,l>=this._lastFrame-1&&this._onLastFrame&&this._onLastFrame()));let d=this._index%e,c=Math.floor(this._index/e),p=-r*d+(f-r)/2,b=-n*c+(u-n)/2;p!==t.offset.x&&(t.offset.x=p),b!==t.offset.y&&(t.offset.y=b)}return super._update.call(this),this}flagReset(){return this._flagTexture=this._flagColumns=this._flagRows=this._flagFrameRate=!1,super.flagReset.call(this),this}},Nt=Qe;w(Nt,"Properties",["texture","columns","rows","frameRate","index"]);var Ti={texture:{enumerable:!0,get:function(){return this._texture},set:function(i){this._texture=i,this._flagTexture=!0}},columns:{enumerable:!0,get:function(){return this._columns},set:function(i){this._columns=i,this._flagColumns=!0}},rows:{enumerable:!0,get:function(){return this._rows},set:function(i){this._rows=i,this._flagRows=!0}},frameRate:{enumerable:!0,get:function(){return this._frameRate},set:function(i){this._frameRate=i,this._flagFrameRate=!0}},index:{enumerable:!0,get:function(){return this._index},set:function(i){this._index=i,this._flagIndex=!0}}};var ti=Math.cos,ei=Math.sin,se=class extends L{_flagRadius=!1;_radius=0;constructor(t,e,s,r){let n=r?Math.max(r,2):4,a=[];for(let o=0;o2&&(t-=1);let e=4/3*Math.tan(Math.PI/(t*2)),s=this._radius,r=s*e;for(let n=0;n2&&(t-=1);let e=4/3*Math.tan(Math.PI/(this.vertices.length*2)),s=this._width/2,r=this._height/2;for(let n=0;n=0&&t.splice(r,1)}return t}function Ls(i,t){let e=t.split(/[\s,]/),s=-parseFloat(e[0]),r=-parseFloat(e[1]),n=parseFloat(e[2]),a=parseFloat(e[3]);if(s&&r)for(let u=0;u0?i.gradientTransform.baseVal[0].matrix:i.getCTM?i.getCTM():null,o===null))break;switch(_=Lt(o),t._renderer.type){case"linear-gradient":Ni(_,t.left),Ni(_,t.right);break;case"radial-gradient":t.center.x+=_.translateX,t.center.y+=_.translateY,t.focal.x+=_.translateX,t.focal.y+=_.translateY,t.radius*=Math.max(_.scaleX,_.scaleY);break}break;case"transform":if(/none/i.test(l)||(o=i.transform&&i.transform.baseVal&&i.transform.baseVal.length>0?i.transform.baseVal[0].matrix:i.getCTM?i.getCTM():null,o===null))break;X.AutoCalculateImportedMatrices?(_=Lt(o),t.translation.set(_.translateX,_.translateY),t.rotation=Math.PI*(_.rotation/180),t.scale=new k(_.scaleX,_.scaleY),d=parseFloat((s.x+"").replace("px")),c=parseFloat((s.y+"").replace("px")),d&&(t.translation.x=d),c&&(t.translation.y=c)):(o=i.getCTM(),t._matrix.manual=!0,t._matrix.set(o.a,o.b,o.c,o.d,o.e,o.f));break;case"visible":if(t instanceof G){t._visible=l;break}t.visible=l;break;case"stroke-linecap":if(t instanceof G){t._cap=l;break}t.cap=l;break;case"stroke-linejoin":if(t instanceof G){t._join=l;break}t.join=l;break;case"stroke-miterlimit":if(t instanceof G){t._miter=l;break}t.miter=l;break;case"stroke-width":if(t instanceof G){t._linewidth=parseFloat(l);break}t.linewidth=parseFloat(l);break;case"opacity":case"stroke-opacity":case"fill-opacity":if(t instanceof G){t._opacity=parseFloat(l);break}t.opacity=parseFloat(l);break;case"clip-path":if(Rt.cssBackgroundImage.test(l)&&(p=l.replace(Rt.cssBackgroundImage,"$1"),q.defs.current&&q.defs.current.contains(p)&&(g=q.defs.current.get(p),g&&g.childNodes.length>0)))switch(g=g.childNodes[0],y=ae(g.nodeName),t.mask=q[y].call(this,g,{}),t._renderer.type){case"text":case"path":t.position.add(t.mask.position),t.mask.position.clear();break}break;case"fill":case"stroke":f=(t instanceof G?"_":"")+h,Rt.cssBackgroundImage.test(l)?(p=l.replace(Rt.cssBackgroundImage,"$1"),q.defs.current&&q.defs.current.contains(p)?(g=q.defs.current.get(p),g.object||(y=ae(g.nodeName),g.object=q[y].call(this,g,{})),g=g.object):(b=Ps(this),g=b.getById(p)),t[f]=g):t[f]=/none/i.test(l)?"transparent":l;break;case"id":t.id=l;break;case"class":case"className":t.classList=l.split(" "),t._flagClassName=!0;break;case"x":case"y":if(x=t instanceof Y,R=t instanceof U,A=t instanceof D,x||R||A)break;l.match("[a-z%]$")&&!l.endsWith("px")&&(E=new et("only pixel values are supported with the "+h+" attribute."),console.warn(E.name,E.message)),t.translation[h]=parseFloat(l);break;case"font-family":t instanceof gt&&(t.family=l);break;case"font-size":t instanceof gt&&(t.size=l);break;case"font-weight":t instanceof gt&&(t.weight=l);break;case"font-style":t instanceof gt&&(t.style=l);break;case"text-decoration":t instanceof gt&&(t.decoration=l);break;case"line-height":t instanceof gt&&(t.leading=l);break}return Object.keys(i.dataset).length&&(t.dataset=i.dataset),s}function Os(i,t){for(let e=0,s=i.childNodes.length;e with no href."),console.warn(e.name,e.message),null;let r=s.slice(1);if(!q.defs.current.contains(r))return e=new et("unable to find element for reference "+s+"."),console.warn(e.name,e.message),null;let a=q.defs.current.get(r).cloneNode(!0);for(let h=0;h1&&(g=1);break;case"m":case"l":case"t":c.length>2&&(g=2);break;case"s":case"q":c.length>4&&(g=4);break;case"c":c.length>6&&(g=6);break;case"a":c.length>7&&(g=7);break}if(g){for(y=0,x=c.length,A=0;y0)switch(p){case"m":R="l";break;case"M":R="L";break}E.push(R+c.slice(y,y+g).join(" ")),A++}f=Array.prototype.concat.apply(f,E)}else f.push(_)}),S.each(f,function(_,d){let c,p,b,g=_[0],y=g.toLowerCase();l=_.slice(1).trim().match(Rt.path),n=g===y;let x,R,A,E,C,j,M,T,N,z,W,V,ft,ct,Z,ut,rt;switch(y){case"z":if(d>=u)r=!0;else{p=o.x,b=o.y,c=new F(p,b,void 0,void 0,void 0,void 0,v.close);for(let St=s.length-1;St>=0;St--){let Mt=s[St];if(/m/i.test(Mt.command)){o=Mt;break}}}break;case"m":case"l":h=void 0,p=parseFloat(l[0]),b=parseFloat(l[1]),c=new F(p,b,void 0,void 0,void 0,void 0,/m/i.test(y)?v.move:v.line),n&&c.addSelf(o),o=c;break;case"h":case"v":z=/h/i.test(y)?"x":"y",W=/x/i.test(z)?"y":"x",c=new F(void 0,void 0,void 0,void 0,void 0,void 0,v.line),c[z]=parseFloat(l[0]),c[W]=o[W],n&&(c[z]+=o[z]),o=c;break;case"c":case"s":x=o.x,R=o.y,h||(h=new k),/c/i.test(y)?(A=parseFloat(l[0]),E=parseFloat(l[1]),C=parseFloat(l[2]),j=parseFloat(l[3]),M=parseFloat(l[4]),T=parseFloat(l[5])):(N=pe(o,h,n),A=N.x,E=N.y,C=parseFloat(l[0]),j=parseFloat(l[1]),M=parseFloat(l[2]),T=parseFloat(l[3])),n&&(A+=x,E+=R,C+=x,j+=R,M+=x,T+=R),o.controls.right.set(A-o.x,E-o.y),c=new F(M,T,C-M,j-T,void 0,void 0,v.curve),o=c,h=c.controls.left;break;case"t":case"q":x=o.x,R=o.y,h||(h=new k),/q/i.test(y)?(A=parseFloat(l[0]),E=parseFloat(l[1]),C=parseFloat(l[0]),j=parseFloat(l[1]),M=parseFloat(l[2]),T=parseFloat(l[3])):(N=pe(o,h,n),A=N.x,E=N.y,C=N.x,j=N.y,M=parseFloat(l[0]),T=parseFloat(l[1])),n&&(A+=x,E+=R,C+=x,j+=R,M+=x,T+=R),o.controls.right.set((A-o.x)*.33,(E-o.y)*.33),c=new F(M,T,C-M,j-T,void 0,void 0,v.curve),o=c,h=c.controls.left;break;case"a":x=o.x,R=o.y,ft=parseFloat(l[0]),ct=parseFloat(l[1]),Z=parseFloat(l[2]),ut=parseFloat(l[3]),rt=parseFloat(l[4]),M=parseFloat(l[5]),T=parseFloat(l[6]),n&&(M+=x,T+=R),V=new F(M,T),V.command=v.arc,V.rx=ft,V.ry=ct,V.xAxisRotation=Z,V.largeArcFlag=ut,V.sweepFlag=rt,c=V,o=V,h=void 0;break}c&&(Array.isArray(c)?s=s.concat(c):s.push(c))})}e=new L(s,r,void 0,!0).noStroke(),e.fill="black";let a=e.getBoundingClientRect(!0);return a.centroid={x:a.left+a.width/2,y:a.top+a.height/2},S.each(e.vertices,function(o){o.subSelf(a.centroid)}),vt.call(this,i,e,t),e.translation.addSelf(a.centroid),e},circle:function(i,t){let e=parseFloat(i.getAttribute("cx")),s=parseFloat(i.getAttribute("cy")),r=parseFloat(i.getAttribute("r")),n=new Vt(0,0,r).noStroke();return n.fill="black",vt.call(this,i,n,t),n.translation.x=e,n.translation.y=s,n},ellipse:function(i,t){let e=parseFloat(i.getAttribute("cx")),s=parseFloat(i.getAttribute("cy")),r=parseFloat(i.getAttribute("rx")),n=parseFloat(i.getAttribute("ry")),a=new zt(0,0,r,n).noStroke();return a.fill="black",vt.call(this,i,a,t),a.translation.x=e,a.translation.y=s,a},rect:function(i,t){let e=parseFloat(i.getAttribute("rx")),s=parseFloat(i.getAttribute("ry"));if(!S.isNaN(e)||!S.isNaN(s))return q["rounded-rect"](i);let r=parseFloat(i.getAttribute("width")),n=parseFloat(i.getAttribute("height")),a=r/2,o=n/2,h=new bt(0,0,r,n).noStroke();return h.fill="black",vt.call(this,i,h,t),h.translation.x+=a,h.translation.y+=o,h},"rounded-rect":function(i,t){let e=parseFloat(i.getAttribute("rx"))||0,s=parseFloat(i.getAttribute("ry"))||0,r=parseFloat(i.getAttribute("width")),n=parseFloat(i.getAttribute("height")),a=r/2,o=n/2,h=new k(e,s),l=new Ut(0,0,r,n,h).noStroke();return l.fill="black",vt.call(this,i,l,t),l.translation.x+=a,l.translation.y+=o,l},line:function(i,t){let e=parseFloat(i.getAttribute("x1")),s=parseFloat(i.getAttribute("y1")),r=parseFloat(i.getAttribute("x2")),n=parseFloat(i.getAttribute("y2")),a=new Gt(e,s,r,n).noFill();return vt.call(this,i,a,t),a},lineargradient:function(i,t){let e=i.getAttribute("gradientUnits"),s=i.getAttribute("spreadMethod");e||(e="objectBoundingBox"),s||(s="pad");let r=parseFloat(i.getAttribute("x1")||0),n=parseFloat(i.getAttribute("y1")||0),a=parseFloat(i.getAttribute("x2")||0),o=parseFloat(i.getAttribute("y2")||0),h=(a+r)/2,l=(o+n)/2;/userSpaceOnUse/i.test(e)&&(r-=h,n-=l,a-=h,o-=l);let f=[];for(let _=0;_1?y[1]:void 0),b===null?(y=g?g.match(/stop-opacity:\s?([0-9.-]*)/):!1,b=y&&y.length>1?parseFloat(y[1]):1):b=parseFloat(b),f.push(new _t(c,p,b))}let u=new U(r,n,a,o,f);return u.spread=s,u.units=e,vt.call(this,i,u,t),u},radialgradient:function(i,t){let e=i.getAttribute("gradientUnits"),s=i.getAttribute("spreadMethod");e||(e="objectBoundingBox"),s||(s="pad");let r=parseFloat(i.getAttribute("cx"))||0,n=parseFloat(i.getAttribute("cy"))||0,a=parseFloat(i.getAttribute("r")),o=parseFloat(i.getAttribute("fx")),h=parseFloat(i.getAttribute("fy"));S.isNaN(o)&&(o=r),S.isNaN(h)&&(h=n);let l=Math.abs(r+o)/2,f=Math.abs(n+h)/2;/userSpaceOnUse/i.test(e)&&(r-=l,n-=f,o-=l,h-=f);let u=[];for(let d=0;d1?x[1]:void 0),g===null?(x=y?y.match(/stop-opacity:\s?([0-9.-]*)/):!1,g=x&&x.length>1?parseFloat(x[1]):1):g=parseFloat(g),u.push(new _t(p,b,g))}let _=new D(r,n,a,u,o,h);return _.spread=s,_.units=e,vt.call(this,i,_,t),_},text:function(i,t){let e=Es(i.getAttribute("text-anchor"))||"left",s=Fs(i)||"baseline",r=i.textContent,n=new gt(r);return vt.call(this,i,n,t),n.alignment=e,n.baseline=s,n},clippath:function(i,t){return q.defs.current&&!q.defs.current.contains(i.id)&&q.defs.current.add(i.id,i),null},image:function(i,t){let e,s=i.getAttribute("href")||i.getAttribute("xlink:href");if(!s)return e=new et("encountered with no href."),console.warn(e.name,e.message),null;let r=parseFloat(i.getAttribute("x"))||0,n=parseFloat(i.getAttribute("y"))||0,a=parseFloat(i.getAttribute("width")),o=parseFloat(i.getAttribute("height")),h=new Nt(s,r,n);return S.isNaN(a)||(h.width=a),S.isNaN(o)||(h.height=o),vt.call(this,i,h,t),h}};function ri(i,t){let e=new XMLHttpRequest;return e.open("GET",i),e.onreadystatechange=function(){e.readyState===4&&e.status===200&&t(e.responseText)},e.send(),e}var Ee=class extends bt{_flagTextures=!1;_flagFrameRate=!1;_flagIndex=!1;_amount=1;_duration=0;_index=0;_startTime=0;_playing=!1;_firstFrame=0;_lastFrame=0;_loop=!0;_textures=null;_frameRate=0;_origin=null;constructor(t,e,s,r){super(e,s,0,0);for(let n in Vi)Object.defineProperty(this,n,Vi[n]);this._renderer.flagTextures=Is.bind(this),this._renderer.bindTextures=Bs.bind(this),this._renderer.unbindTextures=js.bind(this),this.noStroke(),this.noFill(),Array.isArray(t)?this.textures=t.map(zi.bind(this)):this.textures=[zi(t)],this.origin=new k,this._update(),typeof r=="number"?this.frameRate=r:this.frameRate=Ee.DefaultFrameRate,this.index=0}play(t,e,s){return this._playing=!0,this._firstFrame=0,this._lastFrame=this.amount-1,this._startTime=S.performance.now(),typeof t=="number"&&(this._firstFrame=t),typeof e=="number"&&(this._lastFrame=e),typeof s=="function"?this._onLastFrame=s:delete this._onLastFrame,this._index!==this._firstFrame&&(this._startTime-=1e3*Math.abs(this._index-this._firstFrame)/this._frameRate),this}pause(){return this._playing=!1,this}stop(){return this._playing=!1,this._index=this._firstFrame,this}clone(t){let e=new Ee(this.textures,this.translation.x,this.translation.y,this.frameRate);return e._loop=this._loop,this._playing&&e.play(),t&&t.add(e),e}toObject(){let t=super.toObject.call(this);return t.textures=this.textures.map(function(e){return e.toObject()}),t.frameRate=this.frameRate,t.index=this.index,t._firstFrame=this._firstFrame,t._lastFrame=this._lastFrame,t._loop=this._loop,t}_update(){let t=this._textures,e,s,r,n,a,o,h,l;return t&&(this._flagTextures&&(this._amount=t.length),this._flagFrameRate&&(this._duration=1e3*this._amount/this._frameRate),this._playing&&this._frameRate>0?(n=this._amount,S.isNaN(this._lastFrame)&&(this._lastFrame=n-1),r=S.performance.now()-this._startTime,l=this._lastFrame+1,a=1e3*(l-this._firstFrame)/this._frameRate,this._loop?r=r%a:r=Math.min(r,a),h=nt(this._firstFrame,l,r/a),h=Math.floor(h),h!==this._index&&(this._index=h,o=t[this._index],o.loaded&&(e=o.image.width,s=o.image.height,this.width!==e&&(this.width=e),this.height!==s&&(this.height=s),this.fill=o,h>=this._lastFrame-1&&this._onLastFrame&&this._onLastFrame()))):(this._flagIndex||!(this.fill instanceof B))&&(o=t[this._index],o.loaded&&(e=o.image.width,s=o.image.height,this.width!==e&&(this.width=e),this.height!==s&&(this.height=s)),this.fill=o)),super._update.call(this),this}flagReset(){return this._flagTextures=this._flagFrameRate=!1,super.flagReset.call(this),this}},qt=Ee;w(qt,"Properties",["textures","frameRate","index"]),w(qt,"DefaultFrameRate",30);var Vi={frameRate:{enumerable:!0,get:function(){return this._frameRate},set:function(i){this._frameRate=i,this._flagFrameRate=!0}},index:{enumerable:!0,get:function(){return this._index},set:function(i){this._index=i,this._flagIndex=!0}},textures:{enumerable:!0,get:function(){return this._textures},set:function(i){let t=this._renderer.bindTextures,e=this._renderer.unbindTextures;this._textures&&this._textures.unbind(m.Types.insert,t).unbind(m.Types.remove,e),this._textures=new lt((i||[]).slice(0)),this._textures.bind(m.Types.insert,t).bind(m.Types.remove,e),t(this._textures)}}};function Is(){this._flagTextures=!0}function Bs(i){let t=i.length;for(;t--;)i[t].bind(m.Types.change,this._renderer.flagTextures);this._renderer.flagTextures()}function js(i){let t=i.length;for(;t--;)i[t].unbind(m.Types.change,this._renderer.flagTextures);this._renderer.flagTextures()}function zi(i){if(i instanceof B)return i;if(typeof i=="string")return new B(i)}var le=class extends L{_flagStartAngle=!1;_flagEndAngle=!1;_flagInnerRadius=!1;_flagOuterRadius=!1;_startAngle=0;_endAngle=J;_innerRadius=0;_outerRadius=0;constructor(t,e,s,r,n,a,o){let h=o||X.Resolution*3,l=[];for(let f=0;f0,o=this.vertices,h=a?o.length/2:o.length,l,f=0,u,_,d,c,p,b,g,y,x;for(n?h--:a||(h-=2),u=0,_=h-1;u=n&&l<=a&&(h=this._collection[l],this._renderer.collection.push(h),this._renderer.vertices[o*2+0]=h.x,this._renderer.vertices[o*2+1]=h.y,o++)}return super._update.apply(this,arguments),this}flagReset(){return this._flagVertices=this._flagLength=this._flagFill=this._flagStroke=this._flagLinewidth=this._flagOpacity=this._flagVisible=this._flagSize=this._flagSizeAttenuation=!1,super.flagReset.call(this),this}},he=Kt;w(he,"Properties",["fill","stroke","linewidth","opacity","visible","size","sizeAttenuation","beginning","ending"]);var Di={linewidth:{enumerable:!0,get:function(){return this._linewidth},set:function(i){this._linewidth=i,this._flagLinewidth=!0}},opacity:{enumerable:!0,get:function(){return this._opacity},set:function(i){this._opacity=i,this._flagOpacity=!0}},visible:{enumerable:!0,get:function(){return this._visible},set:function(i){this._visible=i,this._flagVisible=!0}},size:{enumerable:!0,get:function(){return this._size},set:function(i){this._size=i,this._flagSize=!0}},sizeAttenuation:{enumerable:!0,get:function(){return this._sizeAttenuation},set:function(i){this._sizeAttenuation=i,this._flagSizeAttenuation=!0}},fill:{enumerable:!0,get:function(){return this._fill},set:function(i){(this._fill instanceof Y||this._fill instanceof U||this._fill instanceof D||this._fill instanceof B)&&this._fill.unbind(m.Types.change,this._renderer.flagFill),this._fill=i,this._flagFill=!0,(this._fill instanceof Y||this._fill instanceof U||this._fill instanceof D||this._fill instanceof B)&&this._fill.bind(m.Types.change,this._renderer.flagFill)}},stroke:{enumerable:!0,get:function(){return this._stroke},set:function(i){(this._stroke instanceof Y||this._stroke instanceof U||this._stroke instanceof D||this._stroke instanceof B)&&this._stroke.unbind(m.Types.change,this._renderer.flagStroke),this._stroke=i,this._flagStroke=!0,(this._stroke instanceof Y||this._stroke instanceof U||this._stroke instanceof D||this._stroke instanceof B)&&this._stroke.bind(m.Types.change,this._renderer.flagStroke)}},length:{get:function(){return this._flagLength&&this._updateLength(),this._length}},beginning:{enumerable:!0,get:function(){return this._beginning},set:function(i){this._beginning=i,this._flagVertices=!0}},ending:{enumerable:!0,get:function(){return this._ending},set:function(i){this._ending=i,this._flagVertices=!0}},vertices:{enumerable:!0,get:function(){return this._collection},set:function(i){let t=this._renderer.bindVertices,e=this._renderer.unbindVertices;this._collection&&this._collection.unbind(m.Types.insert,t).unbind(m.Types.remove,e),i instanceof lt?this._collection=i:this._collection=new lt(i||[]),this._collection.bind(m.Types.insert,t).bind(m.Types.remove,e),t(this._collection)}},dashes:{enumerable:!0,get:function(){return this._dashes},set:function(i){typeof i.offset!="number"&&(i.offset=this.dashes&&this._dashes.offset||0),this._dashes=i}}};var zs=Math.cos,Us=Math.sin,ce=class extends L{_flagWidth=!1;_flagHeight=!1;_flagSides=!1;_width=0;_height=0;_sides=0;constructor(t,e,s,r){r=Math.max(r||0,3);super();for(let n in Hi)Object.defineProperty(this,n,Hi[n]);this.closed=!0,this.automatic=!1,typeof s=="number"&&(this.width=s*2),typeof s=="number"&&(this.height=s*2),typeof r=="number"&&(this.sides=r),this._update(),typeof t=="number"&&(this.translation.x=t),typeof e=="number"&&(this.translation.y=e)}_update(){if(this._flagVertices||this._flagWidth||this._flagHeight||this._flagSides){let t=this._sides,e=t+1,s=this.vertices.length;s>t&&(this.vertices.splice(t-1,s-t),s=t);for(let r=0;r=s?this.vertices.push(new F(o,h)):this.vertices[r].set(o,h),this.vertices[r].command=r===0?v.move:v.line}}return super._update.call(this),this}flagReset(){return this._flagWidth=this._flagHeight=this._flagSides=!1,super.flagReset.call(this),this}clone(t){let e=new ce(0,0,this.radius,this.sides);e.translation.copy(this.translation),e.rotation=this.rotation,e.scale=this.scale,e.skewX=this.skewX,e.skewY=this.skewY,this.matrix.manual&&e.matrix.copy(this.matrix);for(let s=0;st&&(this.vertices.splice(t-1,s-t),s=t);for(let r=0;r=s?this.vertices.push(new F(h,l)):this.vertices[r].set(h,l),this.vertices[r].command=r===0?v.move:v.line}}return super._update.call(this),this}flagReset(){return this._flagInnerRadius=this._flagOuterRadius=this._flagSides=!1,super.flagReset.call(this),this}clone(t){let e=this.innerRadius,s=this.outerRadius,r=this.sides,n=new de(0,0,e,s,r);n.translation.copy(this.translation),n.rotation=this.rotation,n.scale=this.scale,n.skewX=this.skewX,n.skewY=this.skewY,this.matrix.manual&&n.matrix.copy(this.matrix);for(let a=0;a0&&O.setAttributes(s,t),s},setAttributes:function(i,t){let e=Object.keys(t);for(let s=0;s=s&&t&&(o.command===v.curve&&(u=r,y=o.controls&&o.controls.right||o,x=u.controls&&u.controls.left||u,o.relative?(_=K(y.x+o.x),d=K(y.y+o.y)):(_=K(y.x),d=K(y.y)),u.relative?(c=K(x.x+u.x),p=K(x.y+u.y)):(c=K(x.x),p=K(x.y)),M=K(u.x),T=K(u.y),f+=" C "+_+" "+d+" "+c+" "+p+" "+M+" "+T),o.command!==v.close&&(f+=" Z")),n+=f+" "}return n},pointsToString:function(i,t){let e="",s=t*.5;for(let r=0;r0&&(t["stroke-dasharray"]=this.dashes.join(" "),t["stroke-dashoffset"]=this.dashes.offset||0),this._renderer.elem?O.setAttributes(this._renderer.elem,t):(t.id=this._id,this._renderer.elem=O.createElement("path",t),i.appendChild(this._renderer.elem)),this._flagClip){let s=O.getClip(this,i),r=this._renderer.elem;this._clip?(r.removeAttribute("id"),s.setAttribute("id",this.id),s.appendChild(r)):(s.removeAttribute("id"),r.setAttribute("id",this.id),this.parent._renderer.elem.appendChild(r))}return this._flagMask&&(this._mask?(O[this._mask._renderer.type].render.call(this._mask,i),this._renderer.elem.setAttribute("clip-path","url(#"+this._mask.id+")")):this._renderer.elem.removeAttribute("clip-path")),this.flagReset()}},points:{render:function(i){if(this._opacity===0&&!this._flagOpacity)return this;this._update();let t={};if((this._matrix.manual||this._flagMatrix)&&(t.transform="matrix("+this._matrix.toString()+")"),this._flagId&&(t.id=this._id),this._flagVertices||this._flagSize||this._flagSizeAttenuation){let s=this._size;if(!this._sizeAttenuation){pt(this,Xi);let n=Xi.elements,a=Lt(n[0],n[3],n[1],n[4],n[2],n[5]);s/=Math.max(a.scaleX,a.scaleY)}let r=O.pointsToString(this._renderer.collection,s);t.d=r}return this._fill&&this._fill._renderer&&(this._fill._update(),O[this._fill._renderer.type].render.call(this._fill,i,!0)),this._flagFill&&(t.fill=this._fill&&this._fill.id?"url(#"+this._fill.id+")":this._fill),this._stroke&&this._stroke._renderer&&(this._stroke._update(),O[this._stroke._renderer.type].render.call(this._stroke,i,!0)),this._flagStroke&&(t.stroke=this._stroke&&this._stroke.id?"url(#"+this._stroke.id+")":this._stroke),this._flagLinewidth&&(t["stroke-width"]=this._linewidth),this._flagOpacity&&(t["stroke-opacity"]=this._opacity,t["fill-opacity"]=this._opacity),this._flagClassName&&(t.class=this.classList.join(" ")),this._flagVisible&&(t.visibility=this._visible?"visible":"hidden"),this.dashes&&this.dashes.length>0&&(t["stroke-dasharray"]=this.dashes.join(" "),t["stroke-dashoffset"]=this.dashes.offset||0),this._renderer.elem?O.setAttributes(this._renderer.elem,t):(t.id=this._id,this._renderer.elem=O.createElement("path",t),i.appendChild(this._renderer.elem)),this.flagReset()}},text:{render:function(i){this._update();let t={};if((this._matrix.manual||this._flagMatrix)&&(t.transform="matrix("+this._matrix.toString()+")"),this._flagId&&(t.id=this._id),this._flagFamily&&(t["font-family"]=this._family),this._flagSize&&(t["font-size"]=this._size),this._flagLeading&&(t["line-height"]=this._leading),this._flagAlignment&&(t["text-anchor"]=O.alignments[this._alignment]||this._alignment),this._flagBaseline&&(t["alignment-baseline"]=t["dominant-baseline"]=this._baseline),this._flagStyle&&(t["font-style"]=this._style),this._flagWeight&&(t["font-weight"]=this._weight),this._flagDecoration&&(t["text-decoration"]=this._decoration),this._fill&&this._fill._renderer&&(this._fill._update(),O[this._fill._renderer.type].render.call(this._fill,i,!0)),this._flagFill&&(t.fill=this._fill&&this._fill.id?"url(#"+this._fill.id+")":this._fill),this._stroke&&this._stroke._renderer&&(this._stroke._update(),O[this._stroke._renderer.type].render.call(this._stroke,i,!0)),this._flagStroke&&(t.stroke=this._stroke&&this._stroke.id?"url(#"+this._stroke.id+")":this._stroke),this._flagLinewidth&&(t["stroke-width"]=this._linewidth),this._flagOpacity&&(t.opacity=this._opacity),this._flagClassName&&(t.class=this.classList.join(" ")),this._flagVisible&&(t.visibility=this._visible?"visible":"hidden"),this.dashes&&this.dashes.length>0&&(t["stroke-dasharray"]=this.dashes.join(" "),t["stroke-dashoffset"]=this.dashes.offset||0),this._renderer.elem?O.setAttributes(this._renderer.elem,t):(t.id=this._id,this._renderer.elem=O.createElement("text",t),i.defs.appendChild(this._renderer.elem)),this._flagClip){let s=O.getClip(this,i),r=this._renderer.elem;this._clip?(r.removeAttribute("id"),s.setAttribute("id",this.id),s.appendChild(r)):(s.removeAttribute("id"),r.setAttribute("id",this.id),this.parent._renderer.elem.appendChild(r))}return this._flagMask&&(this._mask?(O[this._mask._renderer.type].render.call(this._mask,i),this._renderer.elem.setAttribute("clip-path","url(#"+this._mask.id+")")):this._renderer.elem.removeAttribute("clip-path")),this._flagValue&&(this._renderer.elem.textContent=this._value),this.flagReset()}},"linear-gradient":{render:function(i,t){t||this._update();let e={};if(this._flagId&&(e.id=this._id),this._flagEndPoints&&(e.x1=this.left._x,e.y1=this.left._y,e.x2=this.right._x,e.y2=this.right._y),this._flagSpread&&(e.spreadMethod=this._spread),this._flagUnits&&(e.gradientUnits=this._units),this._renderer.elem?O.setAttributes(this._renderer.elem,e):(e.id=this._id,this._renderer.elem=O.createElement("linearGradient",e),i.defs.appendChild(this._renderer.elem)),this._flagStops){let s=this._renderer.elem.childNodes.length!==this.stops.length;if(s)for(;this._renderer.elem.lastChild;)this._renderer.elem.removeChild(this._renderer.elem.lastChild);for(let r=0;r0&&(e.x*=-1),e.y>0&&(e.y*=-1)),(this._flagScale||this._flagLoaded||this._flagRepeat)&&(e.width=0,e.height=0,r)){switch(s.width=e.width=r.width,s.height=e.height=r.height,this._repeat){case"no-repeat":e.width+=1,e.height+=1;break}this._scale instanceof k?(e.width*=this._scale.x,e.height*=this._scale.y):(e.width*=this._scale,e.height*=this._scale)}return(this._flagScale||this._flagLoaded)&&(this._renderer.image?O.setAttributes(this._renderer.image,s):this._renderer.image=O.createElement("image",s)),this._renderer.elem?Object.keys(e).length!==0&&O.setAttributes(this._renderer.elem,e):(e.id=this._id,e.patternUnits="userSpaceOnUse",this._renderer.elem=O.createElement("pattern",e),i.defs.appendChild(this._renderer.elem)),this._renderer.elem&&this._renderer.image&&!this._renderer.appended&&(this._renderer.elem.appendChild(this._renderer.image),this._renderer.appended=!0),this.flagReset()}}},Fe=class extends m{constructor(t){super();this.domElement=t.domElement||O.createElement("svg"),this.scene=new G,this.scene.parent=this,this.defs=O.createElement("defs"),this.domElement.appendChild(this.defs),this.domElement.defs=this.defs,this.domElement.style.overflow="hidden"}setSize(t,e){return this.width=t,this.height=e,O.setAttributes(this.domElement,{width:t,height:e}),this.trigger(m.Types.resize,t,e)}render(){return O.group.render.call(this.scene,this.domElement),this}};w(Fe,"Utils",O);var yt={create:function(i,t,e){let s=i.createShader(i[e]);if(i.shaderSource(s,t),i.compileShader(s),!i.getShaderParameter(s,i.COMPILE_STATUS)){let n=i.getShaderInfoLog(s);throw i.deleteShader(s),new et("unable to compile shader "+s+": "+n)}return s},types:{vertex:"VERTEX_SHADER",fragment:"FRAGMENT_SHADER"},path:{vertex:` + precision mediump float; + attribute vec2 a_position; + + uniform mat3 u_matrix; + uniform vec2 u_resolution; + uniform vec4 u_rect; + + varying vec2 v_textureCoords; + + void main() { + vec2 rectCoords = (a_position * (u_rect.zw - u_rect.xy)) + u_rect.xy; + vec2 projected = (u_matrix * vec3(rectCoords, 1.0)).xy; + vec2 normal = projected / u_resolution; + vec2 clipspace = (normal * 2.0) - 1.0; + + gl_Position = vec4(clipspace * vec2(1.0, -1.0), 0.0, 1.0); + v_textureCoords = a_position; + } + `,fragment:` + precision mediump float; + + uniform sampler2D u_image; + varying vec2 v_textureCoords; + + void main() { + vec4 texel = texture2D(u_image, v_textureCoords); + if (texel.a == 0.0) { + discard; + } + gl_FragColor = texel; + } + `},points:{vertex:` + precision mediump float; + attribute vec2 a_position; + + uniform float u_size; + uniform mat3 u_matrix; + uniform vec2 u_resolution; + + varying vec2 v_textureCoords; + + void main() { + vec2 projected = (u_matrix * vec3(a_position, 1.0)).xy; + vec2 normal = projected / u_resolution; + vec2 clipspace = (normal * 2.0) - 1.0; + + gl_PointSize = u_size; + gl_Position = vec4(clipspace * vec2(1.0, -1.0), 0.0, 1.0); + v_textureCoords = a_position; + } + `,fragment:` + precision mediump float; + + uniform sampler2D u_image; + + void main() { + vec4 texel = texture2D(u_image, gl_PointCoord); + if (texel.a == 0.0) { + discard; + } + gl_FragColor = texel; + } + `}};var Te=at.Multiply,Ws=[1,0,0,0,1,0,0,0,1],Bt=new xt(9),Xs=kt.Utils,ni=new xt([0,0,1,0,0,1,0,1,1,0,1,1]),P={precision:.9,isHidden:/(undefined|none|transparent)/i,canvas:H.document?H.document.createElement("canvas"):{getContext:function(){}},alignments:{left:"start",middle:"center",right:"end"},matrix:new at,group:{removeChild:function(i,t){if(i.children)for(let e=0;e0&&(g.lineDashOffset=N.offset||0,g.setLineDash(N));let Z,ut,rt,St,Mt,$t,Zt,Qt;g.save(),g.scale(y.x,y.y),g.translate(ft,ct),g.beginPath();for(let wt=0;wt=W&&T&&(s=Z,f=Q.controls&&Q.controls.right||k.zero,u=s.controls&&s.controls.left||k.zero,Q._relative?(a=f.x+Q.x,o=f.y+Q.y):(a=f.x,o=f.y),s._relative?(r=u.x+s.x,n=u.y+s.y):(r=u.x,n=u.y),_=s.x,d=s.y,g.bezierCurveTo(a,o,r,n,_,d));break;case v.line:g.lineTo(_,d);break;case v.move:Z=Q,g.moveTo(_,d);break}}T&&g.closePath(),P.isHidden.test(A)||(c=A._renderer&&A._renderer.offset,c&&(g.save(),g.translate(-A._renderer.offset.x,-A._renderer.offset.y),g.scale(A._renderer.scale.x,A._renderer.scale.y)),g.fill(),c&&g.restore()),P.isHidden.test(x)||(c=x._renderer&&x._renderer.offset,c&&(g.save(),g.translate(-x._renderer.offset.x,-x._renderer.offset.y),g.scale(x._renderer.scale.x,x._renderer.scale.y),g.lineWidth=R/x._renderer.scale.x),g.stroke(),c&&g.restore()),g.restore()},getBoundingClientRect:function(i,t,e){let s=1/0,r=-1/0,n=1/0,a=-1/0,o,h;i.forEach(function(l){let f=l.x,u=l.y,_=l.controls,d,c,p,b,g,y;n=Math.min(u,n),s=Math.min(f,s),r=Math.max(f,r),a=Math.max(u,a),!!l.controls&&(g=_.left,y=_.right,!(!g||!y)&&(d=l._relative?g.x+f:g.x,c=l._relative?g.y+u:g.y,p=l._relative?y.x+f:y.x,b=l._relative?y.y+u:y.y,!(!d||!c||!p||!b)&&(n=Math.min(c,b,n),s=Math.min(d,p,s),r=Math.max(d,p,r),a=Math.max(c,b,a))))}),typeof t=="number"&&(n-=t,s-=t,r+=t,a+=t),o=r-s,h=a-n,e.top=n,e.left=s,e.right=r,e.bottom=a,e.width=o,e.height=h,e.centroid||(e.centroid={}),e.centroid.x=-s,e.centroid.y=-n},render:function(i,t,e){if(!this._visible||!this._opacity)return this;this._update();let s=e||this.parent,r=t[this._renderer.type],n=s._matrix.manual||s._flagMatrix,a=this._matrix.manual||this._flagMatrix,o=this._renderer.parent!==s,h=this._flagVertices||this._flagFill||this._fill instanceof U&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagEndPoints)||this._fill instanceof D&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagRadius||this._fill._flagCenter||this._fill._flagFocal)||this._fill instanceof B&&(this._fill._flagLoaded&&this._fill.loaded||this._fill._flagImage||this._fill._flagVideo||this._fill._flagRepeat||this._fill._flagOffset||this._fill._flagScale)||this._stroke instanceof U&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagEndPoints)||this._stroke instanceof D&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagRadius||this._stroke._flagCenter||this._stroke._flagFocal)||this._stroke instanceof B&&(this._stroke._flagLoaded&&this._stroke.loaded||this._stroke._flagImage||this._stroke._flagVideo||this._stroke._flagRepeat||this._stroke._flagOffset||this._fill._flagScale)||this._flagStroke||this._flagLinewidth||this._flagOpacity||s._flagOpacity||this._flagVisible||this._flagCap||this._flagJoin||this._flagMiter||this._flagScale||this.dashes&&this.dashes.length>0||!this._renderer.texture;if((n||a||o)&&(this._renderer.matrix||(this._renderer.matrix=new xt(9)),this._matrix.toTransformArray(!0,Bt),Te(Bt,s._renderer.matrix,this._renderer.matrix),this._renderer.scale instanceof k||(this._renderer.scale=new k),this._scale instanceof k?(this._renderer.scale.x=this._scale.x*s._renderer.scale.x,this._renderer.scale.y=this._scale.y*s._renderer.scale.y):(this._renderer.scale.x=this._scale*s._renderer.scale.x,this._renderer.scale.y=this._scale*s._renderer.scale.y),o&&(this._renderer.parent=s)),this._mask&&(i.clear(i.STENCIL_BUFFER_BIT),i.enable(i.STENCIL_TEST),i.stencilFunc(i.ALWAYS,1,0),i.stencilOp(i.KEEP,i.KEEP,i.REPLACE),i.colorMask(!1,!1,!1,!1),P[this._mask._renderer.type].render.call(this._mask,i,t,this),i.stencilFunc(i.EQUAL,1,255),i.stencilOp(i.KEEP,i.KEEP,i.KEEP),i.colorMask(!0,!0,!0,!0)),h?(this._renderer.rect||(this._renderer.rect={}),this._renderer.opacity=this._opacity*s._renderer.opacity,P.path.getBoundingClientRect(this._renderer.vertices,this._linewidth,this._renderer.rect),P.updateTexture.call(P,i,this)):(this._fill&&this._fill._update&&this._fill._update(),this._stroke&&this._stroke._update&&this._stroke._update()),this._clip&&!e||!this._renderer.texture)return this;t.current!==r&&(i.useProgram(r),i.bindBuffer(i.ARRAY_BUFFER,t.buffers.position),i.vertexAttribPointer(r.position,2,i.FLOAT,!1,0,0),i.enableVertexAttribArray(r.position),i.bufferData(i.ARRAY_BUFFER,ni,i.STATIC_DRAW),t.resolution.flagged||i.uniform2f(i.getUniformLocation(r,"u_resolution"),t.resolution.width,t.resolution.height),t.current=r),t.resolution.flagged&&i.uniform2f(i.getUniformLocation(r,"u_resolution"),t.resolution.width,t.resolution.height),i.bindTexture(i.TEXTURE_2D,this._renderer.texture);let l=this._renderer.rect;return i.uniformMatrix3fv(r.matrix,!1,this._renderer.matrix),i.uniform4f(r.rect,l.left,l.top,l.right,l.bottom),i.drawArrays(i.TRIANGLES,0,6),this._mask&&i.disable(i.STENCIL_TEST),this.flagReset()}},points:{updateCanvas:function(i){let t,e=this.canvas,s=this.ctx,r=i._stroke,n=i._linewidth,a=i._fill,o=i._renderer.opacity||i._opacity,h=i.dashes,l=i._size,f=l;P.isHidden.test(r)||(f+=n),e.width=Pe(f),e.height=e.width;let u=f/e.width,_=e.width/2,d=e.height/2;s.clearRect(0,0,e.width,e.height),a&&(typeof a=="string"?s.fillStyle=a:(P[a._renderer.type].render.call(a,s,i),s.fillStyle=a._renderer.effect)),r&&(typeof r=="string"?s.strokeStyle=r:(P[r._renderer.type].render.call(r,s,i),s.strokeStyle=r._renderer.effect),n&&(s.lineWidth=n/u)),typeof o=="number"&&(s.globalAlpha=o),h&&h.length>0&&(s.lineDashOffset=h.offset||0,s.setLineDash(h)),s.save(),s.translate(_,d),s.scale(P.precision,P.precision),s.beginPath(),s.arc(0,0,l/u*.5,0,J),s.restore(),closed&&s.closePath(),P.isHidden.test(a)||(t=a._renderer&&a._renderer.offset,t&&(s.save(),s.translate(-a._renderer.offset.x,-a._renderer.offset.y),s.scale(a._renderer.scale.x,a._renderer.scale.y)),s.fill(),t&&s.restore()),P.isHidden.test(r)||(t=r._renderer&&r._renderer.offset,t&&(s.save(),s.translate(-r._renderer.offset.x,-r._renderer.offset.y),s.scale(r._renderer.scale.x,r._renderer.scale.y),s.lineWidth=n/r._renderer.scale.x),s.stroke(),t&&s.restore())},render:function(i,t,e){if(!this._visible||!this._opacity)return this;this._update();let s=this._size,r=e||this.parent,n=t[this._renderer.type],a=this._sizeAttenuation,o=this._stroke,h=this._linewidth,l=r._matrix.manual||r._flagMatrix,f=this._matrix.manual||this._flagMatrix,u=this._renderer.parent!==r,_=this._renderer.vertices,d=this._renderer.collection.length,c=this._flagVertices,p=this._flagFill||this._fill instanceof U&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagEndPoints)||this._fill instanceof D&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagRadius||this._fill._flagCenter||this._fill._flagFocal)||this._fill instanceof B&&(this._fill._flagLoaded&&this._fill.loaded||this._fill._flagImage||this._fill._flagVideo||this._fill._flagRepeat||this._fill._flagOffset||this._fill._flagScale)||this._stroke instanceof U&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagEndPoints)||this._stroke instanceof D&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagRadius||this._stroke._flagCenter||this._stroke._flagFocal)||this._stroke instanceof B&&(this._stroke._flagLoaded&&this._stroke.loaded||this._stroke._flagImage||this._stroke._flagVideo||this._stroke._flagRepeat||this._stroke._flagOffset||this._fill._flagScale)||this._flagStroke||this._flagLinewidth||this._flagOpacity||r._flagOpacity||this._flagVisible||this._flagScale||this.dashes&&this.dashes.length>0||!this._renderer.texture;if((l||f||u)&&(this._renderer.matrix||(this._renderer.matrix=new xt(9)),this._matrix.toTransformArray(!0,Bt),Te(Bt,r._renderer.matrix,this._renderer.matrix),this._renderer.scale instanceof k||(this._renderer.scale=new k),this._scale instanceof k?(this._renderer.scale.x=this._scale.x*r._renderer.scale.x,this._renderer.scale.y=this._scale.y*r._renderer.scale.y):(this._renderer.scale.x=this._scale*r._renderer.scale.x,this._renderer.scale.y=this._scale*r._renderer.scale.y),u&&(this._renderer.parent=r)),c){let b=this._renderer.positionBuffer;b&&i.deleteBuffer(b),this._renderer.positionBuffer=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,this._renderer.positionBuffer),i.vertexAttribPointer(n.position,2,i.FLOAT,!1,0,0),i.enableVertexAttribArray(n.position),i.bufferData(i.ARRAY_BUFFER,_,i.STATIC_DRAW)}return p?(this._renderer.opacity=this._opacity*r._renderer.opacity,P.updateTexture.call(P,i,this)):(this._fill&&this._fill._update&&this._fill._update(),this._stroke&&this._stroke._update&&this._stroke._update()),this._clip&&!e||!this._renderer.texture?this:(P.isHidden.test(o)||(s+=h),s/=P.precision,a&&(s*=Math.max(this._renderer.scale.x,this._renderer.scale.y)),t.current!==n&&(i.useProgram(n),t.resolution.flagged||i.uniform2f(i.getUniformLocation(n,"u_resolution"),t.resolution.width,t.resolution.height),t.current=n),t.resolution.flagged&&i.uniform2f(i.getUniformLocation(n,"u_resolution"),t.resolution.width,t.resolution.height),i.bindTexture(i.TEXTURE_2D,this._renderer.texture),i.uniformMatrix3fv(n.matrix,!1,this._renderer.matrix),i.uniform1f(n.size,s*t.resolution.ratio),i.drawArrays(i.POINTS,0,d),this.flagReset())}},text:{updateCanvas:function(i){let t=this.canvas,e=this.ctx,s=i._renderer.scale,r=i._stroke,n=i._linewidth*s,a=i._fill,o=i._renderer.opacity||i._opacity,h=i.dashes,l=i._decoration;t.width=Math.max(Math.ceil(i._renderer.rect.width*s.x),1),t.height=Math.max(Math.ceil(i._renderer.rect.height*s.y),1);let f=i._renderer.rect.centroid,u=f.x,_=f.y,d,c,p,b,g,y,x,R,A,E,C,j=a._renderer&&a._renderer.offset&&r._renderer&&r._renderer.offset;if(e.clearRect(0,0,t.width,t.height),j||(e.font=[i._style,i._weight,i._size+"px/"+i._leading+"px",i._family].join(" ")),e.textAlign="center",e.textBaseline="middle",a&&(typeof a=="string"?e.fillStyle=a:(P[a._renderer.type].render.call(a,e,i),e.fillStyle=a._renderer.effect)),r&&(typeof r=="string"?e.strokeStyle=r:(P[r._renderer.type].render.call(r,e,i),e.strokeStyle=r._renderer.effect),n&&(e.lineWidth=n)),typeof o=="number"&&(e.globalAlpha=o),h&&h.length>0&&(e.lineDashOffset=h.offset||0,e.setLineDash(h)),e.save(),e.scale(s.x,s.y),e.translate(u,_),P.isHidden.test(a)||(a._renderer&&a._renderer.offset?(y=a._renderer.scale.x,x=a._renderer.scale.y,e.save(),e.translate(-a._renderer.offset.x,-a._renderer.offset.y),e.scale(y,x),d=i._size/a._renderer.scale.y,c=i._leading/a._renderer.scale.y,e.font=[i._style,i._weight,d+"px/",c+"px",i._family].join(" "),p=a._renderer.offset.x/a._renderer.scale.x,b=a._renderer.offset.y/a._renderer.scale.y,e.fillText(i.value,p,b),e.restore()):e.fillText(i.value,0,0)),P.isHidden.test(r)||(r._renderer&&r._renderer.offset?(y=r._renderer.scale.x,x=r._renderer.scale.y,e.save(),e.translate(-r._renderer.offset.x,-r._renderer.offset.y),e.scale(y,x),d=i._size/r._renderer.scale.y,c=i._leading/r._renderer.scale.y,e.font=[i._style,i._weight,d+"px/",c+"px",i._family].join(" "),p=r._renderer.offset.x/r._renderer.scale.x,b=r._renderer.offset.y/r._renderer.scale.y,g=n/r._renderer.scale.x,e.lineWidth=g,e.strokeText(i.value,p,b),e.restore()):e.strokeText(i.value,0,0)),/(underline|strikethrough)/i.test(l)){let M=e.measureText(i.value);switch(l){case"underline":A=M.actualBoundingBoxAscent,C=M.actualBoundingBoxAscent;break;case"strikethrough":A=0,C=0;break}R=-M.width/2,E=M.width/2,e.lineWidth=Math.max(Math.floor(i._size/15),1),e.strokeStyle=e.fillStyle,e.beginPath(),e.moveTo(R,A),e.lineTo(E,C),e.stroke()}e.restore()},getBoundingClientRect:function(i,t){let e=P.ctx;e.font=[i._style,i._weight,i._size+"px/"+i._leading+"px",i._family].join(" "),e.textAlign="center",e.textBaseline=i._baseline;let s=e.measureText(i._value).width*1.25,r=Math.max(i._size,i._leading)*1.25;this._linewidth&&!P.isHidden.test(this._stroke)&&(s+=this._linewidth*2,r+=this._linewidth*2);let n=s/2,a=r/2;switch(P.alignments[i._alignment]||i._alignment){case P.alignments.left:t.left=0,t.right=s;break;case P.alignments.right:t.left=-s,t.right=0;break;default:t.left=-n,t.right=n}switch(i._baseline){case"bottom":t.top=-r,t.bottom=0;break;case"top":t.top=0,t.bottom=r;break;default:t.top=-a,t.bottom=a}t.width=s,t.height=r,t.centroid||(t.centroid={}),t.centroid.x=n,t.centroid.y=a},render:function(i,t,e){if(!this._visible||!this._opacity)return this;this._update();let s=e||this.parent,r=t[this._renderer.type],n=s._matrix.manual||s._flagMatrix,a=this._matrix.manual||this._flagMatrix,o=this._renderer.parent!==s,h=this._flagVertices||this._flagFill||this._fill instanceof U&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagEndPoints)||this._fill instanceof D&&(this._fill._flagSpread||this._fill._flagStops||this._fill._flagRadius||this._fill._flagCenter||this._fill._flagFocal)||this._fill instanceof B&&(this._fill._flagLoaded&&this._fill.loaded||this._fill._flagImage||this._fill._flagVideo||this._fill._flagRepeat||this._fill._flagOffset||this._fill._flagScale)||this._stroke instanceof U&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagEndPoints)||this._stroke instanceof D&&(this._stroke._flagSpread||this._stroke._flagStops||this._stroke._flagRadius||this._stroke._flagCenter||this._stroke._flagFocal)||this._stroke instanceof B&&(this._stroke._flagLoaded&&this._stroke.loaded||this._stroke._flagImage||this._stroke._flagVideo||this._stroke._flagRepeat||this._stroke._flagOffset||this._fill._flagScale)||this._flagStroke||this._flagLinewidth||this._flagOpacity||s._flagOpacity||this._flagVisible||this._flagScale||this._flagValue||this._flagFamily||this._flagSize||this._flagLeading||this._flagAlignment||this._flagBaseline||this._flagStyle||this._flagWeight||this._flagDecoration||this.dashes&&this.dashes.length>0||!this._renderer.texture;if((n||a||o)&&(this._renderer.matrix||(this._renderer.matrix=new xt(9)),this._matrix.toTransformArray(!0,Bt),Te(Bt,s._renderer.matrix,this._renderer.matrix),this._renderer.scale instanceof k||(this._renderer.scale=new k),this._scale instanceof k?(this._renderer.scale.x=this._scale.x*s._renderer.scale.x,this._renderer.scale.y=this._scale.y*s._renderer.scale.y):(this._renderer.scale.x=this._scale*s._renderer.scale.x,this._renderer.scale.y=this._scale*s._renderer.scale.y),o&&(this._renderer.parent=s)),this._mask&&(i.clear(i.STENCIL_BUFFER_BIT),i.enable(i.STENCIL_TEST),i.stencilFunc(i.ALWAYS,1,0),i.stencilOp(i.KEEP,i.KEEP,i.REPLACE),i.colorMask(!1,!1,!1,!1),P[this._mask._renderer.type].render.call(this._mask,i,t,this),i.stencilFunc(i.EQUAL,1,255),i.stencilOp(i.KEEP,i.KEEP,i.KEEP),i.colorMask(!0,!0,!0,!0)),h?(this._renderer.rect||(this._renderer.rect={}),this._renderer.opacity=this._opacity*s._renderer.opacity,P.text.getBoundingClientRect(this,this._renderer.rect),P.updateTexture.call(P,i,this)):(this._fill&&this._fill._update&&this._fill._update(),this._stroke&&this._stroke._update&&this._stroke._update()),this._clip&&!e||!this._renderer.texture)return this;t.current!==r&&(i.useProgram(r),i.bindBuffer(i.ARRAY_BUFFER,t.buffers.position),i.vertexAttribPointer(r.position,2,i.FLOAT,!1,0,0),i.enableVertexAttribArray(r.position),i.bufferData(i.ARRAY_BUFFER,ni,i.STATIC_DRAW),t.resolution.flagged||i.uniform2f(i.getUniformLocation(r,"u_resolution"),t.resolution.width,t.resolution.height),t.current=r),t.resolution.flagged&&i.uniform2f(i.getUniformLocation(r,"u_resolution"),t.resolution.width,t.resolution.height),i.bindTexture(i.TEXTURE_2D,this._renderer.texture);let l=this._renderer.rect;return i.uniformMatrix3fv(r.matrix,!1,this._renderer.matrix),i.uniform4f(r.rect,l.left,l.top,l.right,l.bottom),i.drawArrays(i.TRIANGLES,0,6),this._mask&&i.disable(i.STENCIL_TEST),this.flagReset()}},"linear-gradient":{render:function(i,t){if(!(!i.canvas.getContext("2d")||!t)){if(this._update(),!this._renderer.effect||this._flagEndPoints||this._flagStops||this._flagUnits){let e,s=this.left._x,r=this.left._y,n=this.right._x,a=this.right._y;/objectBoundingBox/i.test(this._units)&&(e=t.getBoundingClientRect(!0),s=(s-.5)*e.width,r=(r-.5)*e.height,n=(n-.5)*e.width,a=(a-.5)*e.height),this._renderer.effect=i.createLinearGradient(s,r,n,a);for(let o=0;o 1; +#X obj 308 222 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 389 91 vsl 30 128 1 3 0 0 empty empty empty 0 -9 0 10 -262144 +-1 -1 9900 1; +#X floatatom 389 227 5 0 0 0 - - -; +#X obj 166 124 retro2 1000 30000; +#X obj 166 172 retro2 1000 30000; +#X obj 135 202 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 26 202 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 26 137 rscan2 1000 2000; +#X obj 281 276 bng 15 250 50 0 empty INFO news! 17 7 0 10 -262144 -1 +-1; +#X obj 281 320 tabread entries; +#X msg 281 296 0; +#X obj 232 399 s FLOW; +#X obj 699 274 f; +#X obj 699 298 + 1; +#X obj 699 322 mod; +#X floatatom 748 327 5 0 0 0 - - -; +#X obj 795 158 gauss 1 0; +#X obj 795 128 metro 100; +#X obj 795 108 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 795 206 sel 1; +#X obj 795 182 > 1; +#X obj 795 235 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 876 104 vsl 30 128 1 3 0 0 empty empty empty 0 -9 0 10 -262144 +-1 -1 0 1; +#X floatatom 876 240 5 0 0 0 - - -; +#X msg 513 126 5; +#X obj 653 137 retro2 1000 30000; +#X obj 653 185 retro2 1000 30000; +#X obj 622 215 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 513 215 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 513 150 rscan2 1000 2000; +#X obj 748 259 bng 15 250 50 0 empty INFO news! 17 7 0 10 -262144 -1 +-1; +#X obj 748 303 tabread entries; +#X obj 699 396 s FLOW; +#N canvas 0 23 593 706 base 0; +#X obj 34 66 oscformat -f i flow; +#X obj 55 182 oscformat -f b info; +#N canvas 0 23 450 292 websocket 0; +#X obj 20 117 netsend -u -b; +#X msg 20 74 connect localhost 57001; +#X obj 310 138 oscparse; +#X obj 310 114 netreceive -u -b; +#X msg 310 74 listen 57000; +#X obj 158 125 inlet; +#X obj 158 175 list prepend send; +#X obj 158 200 list trim; +#X obj 181 18 loadbang; +#X obj 310 162 list trim; +#X obj 310 186 outlet; +#X connect 1 0 0 0; +#X connect 2 0 9 0; +#X connect 3 0 2 0; +#X connect 4 0 3 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 0 0; +#X connect 8 0 1 0; +#X connect 8 0 4 0; +#X connect 9 0 10 0; +#X restore 34 215 pd websocket talk; +#X obj 55 158 metro 10000; +#X obj 55 138 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 34 255 route info; +#X obj 48 285 print info; +#X obj 34 352 route entries flags bodies objects ones; +#X obj 446 551 table flag; +#X obj 446 581 table body; +#X obj 446 611 table object; +#X obj 446 641 table any; +#X obj 88 553 list trim; +#X msg 168 627 \; entries 0 72 12 16 25 19 \;; +#X msg 168 597 set \, addsemi; +#X obj 88 422 list prepend add flag 0; +#X obj 142 452 list prepend add body 0; +#X obj 196 482 list prepend add object 0; +#X obj 250 512 list prepend add any 0; +#X obj 88 578 t b a b; +#X obj 446 521 table entries; +#X obj 34 392 list prepend add entries 0; +#X obj 145 283 bng 15 250 50 0 INFO empty news! 17 7 0 10 -262144 -1 +-1; +#X obj 34 36 r FLOW; +#X obj 55 108 loadbang; +#X obj 121 26 print flow; +#X connect 0 0 2 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X connect 3 0 1 0; +#X connect 4 0 3 0; +#X connect 5 0 7 0; +#X connect 5 0 22 0; +#X connect 7 0 21 0; +#X connect 7 1 15 0; +#X connect 7 2 16 0; +#X connect 7 3 17 0; +#X connect 7 4 18 0; +#X connect 12 0 19 0; +#X connect 14 0 13 0; +#X connect 15 0 12 0; +#X connect 16 0 12 0; +#X connect 17 0 12 0; +#X connect 18 0 12 0; +#X connect 19 0 13 0; +#X connect 19 1 13 0; +#X connect 19 2 14 0; +#X connect 21 0 12 0; +#X connect 23 0 0 0; +#X connect 23 0 25 0; +#X connect 24 0 4 0; +#X restore 20 26 pd base; +#X text 163 55 ALL; +#X msg 748 279 1; +#X obj 699 349 tabread flag; +#X floatatom 699 373 5 0 0 0 - - -; +#X text 668 69 FLAG; +#X obj 1179 274 f; +#X obj 1179 298 + 1; +#X obj 1179 322 mod; +#X floatatom 1228 327 5 0 0 0 - - -; +#X obj 1275 158 gauss 1 0; +#X obj 1275 128 metro 100; +#X obj 1275 108 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 +0 1; +#X obj 1275 206 sel 1; +#X obj 1275 182 > 1; +#X obj 1275 235 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 1356 104 vsl 30 128 1 3 0 0 empty empty empty 0 -9 0 10 -262144 +-1 -1 0 1; +#X floatatom 1356 240 5 0 0 0 - - -; +#X msg 993 126 5; +#X obj 1133 137 retro2 1000 30000; +#X obj 1133 185 retro2 1000 30000; +#X obj 1102 215 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 993 215 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 993 150 rscan2 1000 2000; +#X obj 1228 259 bng 15 250 50 0 empty INFO news! 17 7 0 10 -262144 +-1 -1; +#X obj 1228 303 tabread entries; +#X obj 1179 396 s FLOW; +#X floatatom 1179 373 5 0 0 0 - - -; +#X obj 459 624 f; +#X obj 459 648 + 1; +#X obj 459 672 mod; +#X floatatom 508 677 5 0 0 0 - - -; +#X obj 555 508 gauss 1 0; +#X obj 555 478 metro 100; +#X obj 555 458 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 555 556 sel 1; +#X obj 555 532 > 1; +#X obj 555 585 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 636 454 vsl 30 128 1 3 0 0 empty empty empty 0 -9 0 10 -262144 +-1 -1 9400 1; +#X floatatom 636 590 5 0 0 0 - - -; +#X msg 273 476 5; +#X obj 413 487 retro2 1000 30000; +#X obj 413 535 retro2 1000 30000; +#X obj 382 565 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 303 525 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 273 500 rscan2 1000 2000; +#X obj 508 609 bng 15 250 50 0 empty INFO news! 17 7 0 10 -262144 -1 +-1; +#X obj 508 653 tabread entries; +#X obj 459 746 s FLOW; +#X floatatom 459 723 5 0 0 0 - - -; +#X obj 939 624 f; +#X obj 939 648 + 1; +#X obj 939 672 mod; +#X floatatom 988 677 5 0 0 0 - - -; +#X obj 1035 508 gauss 1 0; +#X obj 1035 478 metro 100; +#X obj 1035 458 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 +0 1; +#X obj 1035 556 sel 1; +#X obj 1035 532 > 1; +#X obj 1035 585 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 1116 454 vsl 30 128 1 3 0 0 empty empty empty 0 -9 0 10 -262144 +-1 -1 0 1; +#X floatatom 1116 590 5 0 0 0 - - -; +#X msg 753 476 5; +#X obj 893 487 retro2 1000 30000; +#X obj 893 535 retro2 1000 30000; +#X obj 862 565 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 753 565 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 753 500 rscan2 1000 2000; +#X obj 988 609 bng 15 250 50 0 empty INFO news! 17 7 0 10 -262144 -1 +-1; +#X obj 988 653 tabread entries; +#X obj 939 746 s FLOW; +#X floatatom 939 723 5 0 0 0 - - -; +#X text 1148 69 BODY; +#X msg 1228 279 2; +#X msg 508 629 3; +#X msg 988 629 4; +#X text 428 419 OBJECT; +#X text 908 419 ANY; +#X obj 1179 349 tabread body; +#X obj 459 699 tabread object; +#X obj 939 699 tabread any; +#X msg 26 113 15; +#X connect 0 0 1 0; +#X connect 1 0 0 1; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 21 0; +#X connect 5 0 9 0; +#X connect 6 0 5 0; +#X connect 7 0 6 0; +#X connect 8 0 10 0; +#X connect 9 0 8 0; +#X connect 10 0 0 0; +#X connect 11 0 12 0; +#X connect 12 0 9 1; +#X connect 13 0 0 0; +#X connect 14 0 0 0; +#X connect 16 0 0 0; +#X connect 17 0 16 0; +#X connect 17 1 15 0; +#X connect 18 0 20 0; +#X connect 19 0 2 1; +#X connect 19 0 4 0; +#X connect 20 0 19 0; +#X connect 22 0 23 0; +#X connect 23 0 22 1; +#X connect 23 0 24 0; +#X connect 24 0 46 0; +#X connect 26 0 30 0; +#X connect 27 0 26 0; +#X connect 28 0 27 0; +#X connect 29 0 31 0; +#X connect 30 0 29 0; +#X connect 31 0 22 0; +#X connect 32 0 33 0; +#X connect 33 0 30 1; +#X connect 34 0 39 0; +#X connect 35 0 22 0; +#X connect 36 0 22 0; +#X connect 38 0 22 0; +#X connect 39 0 38 0; +#X connect 39 1 37 0; +#X connect 40 0 45 0; +#X connect 41 0 24 1; +#X connect 41 0 25 0; +#X connect 45 0 41 0; +#X connect 46 0 47 0; +#X connect 47 0 42 0; +#X connect 49 0 50 0; +#X connect 50 0 49 1; +#X connect 50 0 51 0; +#X connect 51 0 121 0; +#X connect 53 0 57 0; +#X connect 54 0 53 0; +#X connect 55 0 54 0; +#X connect 56 0 58 0; +#X connect 57 0 56 0; +#X connect 58 0 49 0; +#X connect 59 0 60 0; +#X connect 60 0 57 1; +#X connect 61 0 66 0; +#X connect 62 0 49 0; +#X connect 63 0 49 0; +#X connect 65 0 49 0; +#X connect 66 0 65 0; +#X connect 66 1 64 0; +#X connect 67 0 116 0; +#X connect 68 0 51 1; +#X connect 68 0 52 0; +#X connect 70 0 69 0; +#X connect 71 0 72 0; +#X connect 72 0 71 1; +#X connect 72 0 73 0; +#X connect 73 0 122 0; +#X connect 75 0 79 0; +#X connect 76 0 75 0; +#X connect 77 0 76 0; +#X connect 78 0 80 0; +#X connect 79 0 78 0; +#X connect 80 0 71 0; +#X connect 81 0 82 0; +#X connect 82 0 79 1; +#X connect 83 0 88 0; +#X connect 84 0 71 0; +#X connect 85 0 71 0; +#X connect 87 0 71 0; +#X connect 88 0 87 0; +#X connect 88 1 86 0; +#X connect 89 0 117 0; +#X connect 90 0 73 1; +#X connect 90 0 74 0; +#X connect 92 0 91 0; +#X connect 93 0 94 0; +#X connect 94 0 93 1; +#X connect 94 0 95 0; +#X connect 95 0 123 0; +#X connect 97 0 101 0; +#X connect 98 0 97 0; +#X connect 99 0 98 0; +#X connect 100 0 102 0; +#X connect 101 0 100 0; +#X connect 102 0 93 0; +#X connect 103 0 104 0; +#X connect 104 0 101 1; +#X connect 105 0 110 0; +#X connect 106 0 93 0; +#X connect 107 0 93 0; +#X connect 109 0 93 0; +#X connect 110 0 109 0; +#X connect 110 1 108 0; +#X connect 111 0 118 0; +#X connect 112 0 95 1; +#X connect 112 0 96 0; +#X connect 114 0 113 0; +#X connect 116 0 68 0; +#X connect 117 0 90 0; +#X connect 118 0 112 0; +#X connect 121 0 70 0; +#X connect 122 0 92 0; +#X connect 123 0 114 0; +#X connect 124 0 17 0; diff --git a/puredata/nodejs/package-lock.json b/puredata/nodejs/package-lock.json new file mode 100644 index 0000000..256fe16 --- /dev/null +++ b/puredata/nodejs/package-lock.json @@ -0,0 +1,1750 @@ +{ + "name": "walkingtowardstheflow-nodejs", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@serialport/binding-abstract": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz", + "integrity": "sha512-cQs9tbIlG3P0IrOWyVirqlhWuJ7Ms2Zh9m2108z6Y5UW/iVj6wEOiW8EmK9QX9jmJXYllE7wgGgvVozP5oCj3w==", + "optional": true, + "requires": { + "debug": "^4.3.2" + } + }, + "@serialport/binding-mock": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-9.0.7.tgz", + "integrity": "sha512-aR8H+htZwwZZkVb1MdbnNvGWw8eXVRqQ2qPhkbKyx0N/LY5aVIgCgT98Kt1YylLsG7SzNG+Jbhd4wzwEuPVT5Q==", + "optional": true, + "requires": { + "@serialport/binding-abstract": "^9.0.7", + "debug": "^4.3.1" + } + }, + "@serialport/bindings": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-9.2.8.tgz", + "integrity": "sha512-hSLxTe0tADZ3LMMGwvEJWOC/TaFQTyPeFalUCsJ1lSQ0k6bPF04JwrtB/C81GetmDBTNRY0GlD0SNtKCc7Dr5g==", + "optional": true, + "requires": { + "@serialport/binding-abstract": "9.2.3", + "@serialport/parser-readline": "9.2.4", + "bindings": "^1.5.0", + "debug": "^4.3.2", + "nan": "^2.15.0", + "prebuild-install": "^7.0.0" + }, + "dependencies": { + "@serialport/parser-delimiter": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-9.2.4.tgz", + "integrity": "sha512-4nvTAoYAgkxFiXrkI+3CA49Yd43CODjeszh89EK+I9c8wOZ+etZduRCzINYPiy26g7zO+GRAb9FoPCsY+sYcbQ==", + "optional": true + }, + "@serialport/parser-readline": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-9.2.4.tgz", + "integrity": "sha512-Z1/qrZTQUVhNSJP1hd9YfDvq0o7d87rNwAjjRKbVpa7Qi51tG5BnKt43IV3NFMyBlVcRe0rnIb3tJu57E0SOwg==", + "optional": true, + "requires": { + "@serialport/parser-delimiter": "9.2.4" + } + } + } + }, + "@serialport/parser-byte-length": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-9.0.7.tgz", + "integrity": "sha512-evf7oOOSBMBn2AZZbgBFMRIyEzlsyQkhqaPm7IBCPTxMDXRf4tKkFYJHYZB0/6d1W4eI0meH079UqmSsh/uoDA==", + "optional": true + }, + "@serialport/parser-cctalk": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-9.0.7.tgz", + "integrity": "sha512-ert5jhMkeiTfr44TkbdySC09J8UwAsf/RxBucVN5Mz5enG509RggnkfFi4mfj3UCG2vZ7qsmM6gtZ62DshY02Q==", + "optional": true + }, + "@serialport/parser-delimiter": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-9.0.7.tgz", + "integrity": "sha512-Vb2NPeXPZ/28M4m5x4OAHFd8jRAeddNCgvL+Q+H/hqFPY1w47JcMLchC7pigRW8Cnt1fklmzfwdNQ8Fb+kMkxQ==", + "optional": true + }, + "@serialport/parser-inter-byte-timeout": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.0.7.tgz", + "integrity": "sha512-lUZ3cwgUluBvJ1jf+0LQsqoiPYAokDO6+fRCw9HCfnrF/OS60Gm4rxuyo2uQIueqZkJ7NIFP+ibKsULrA47AEA==", + "optional": true + }, + "@serialport/parser-readline": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-9.0.7.tgz", + "integrity": "sha512-ydoLbgVQQPxWrwbe3Fhh4XnZexbkEQAC6M/qgRTzjnKvTjrD61CJNxLc3vyDaAPI9bJIhTiI7eTX3JB5jJv8Hg==", + "optional": true, + "requires": { + "@serialport/parser-delimiter": "^9.0.7" + } + }, + "@serialport/parser-ready": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-9.0.7.tgz", + "integrity": "sha512-3qYhI4cNUPAYqVYvdwV57Y+PVRl4dJf1fPBtMoWtwDgwopsAXTR93WCs49WuUq9JCyNW+8Hrfqv8x8eNAD5Dqg==", + "optional": true + }, + "@serialport/parser-regex": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-9.0.7.tgz", + "integrity": "sha512-5XF+FXbhqQ/5bVKM4NaGs1m+E9KjfmeCx/obwsKaUZognQF67jwoTfjJJWNP/21jKfxdl8XoCYjZjASl3XKRAw==", + "optional": true + }, + "@serialport/stream": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-9.0.7.tgz", + "integrity": "sha512-c/h7HPAeFiryD9iTGlaSvPqHFHSZ0NMQHxC4rcmKS2Vu3qJuEtkBdTLABwsMp7iWEiSnI4KC3s7bHapaXP06FQ==", + "optional": true, + "requires": { + "debug": "^4.3.1" + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "optional": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "optional": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "optional": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "optional": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "optional": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "optional": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "optional": true + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "optional": true, + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "optional": true + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "engine.io-client": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", + "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", + "requires": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.6.2", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "optional": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "optional": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "requires": { + "ini": "2.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "optional": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "optional": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "optional": true + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "optional": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "optional": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "optional": true + }, + "node-abi": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.5.0.tgz", + "integrity": "sha512-LtHvNIBgOy5mO8mPEUtkCW/YCRWYEKshIvqhe1GHHyXEHEB5mgICyYnAcl4qan3uFeRROErKGzatFHPf6kDxWw==", + "optional": true, + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "osc": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/osc/-/osc-2.4.2.tgz", + "integrity": "sha512-ks3WB7GFa0va0XncZRribnauL53Lmd0GzflAg5M+YKC19ERUeJfdzzAy2VKg4mhIxtGJs1UK9qL4UOupRRFT8Q==", + "requires": { + "long": "4.0.0", + "serialport": "9.2.0", + "slip": "1.0.2", + "wolfy87-eventemitter": "5.2.9", + "ws": "7.5.3" + }, + "dependencies": { + "ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==" + } + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prebuild-install": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.0.0.tgz", + "integrity": "sha512-IvSenf33K7JcgddNz2D5w521EgO+4aMMjFt73Uk9FRzQ7P+QZPKrp7qPsDydsSwjGt3T5xRNnM1bj1zMTD5fTA==", + "optional": true, + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "optional": true + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "serialport": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-9.2.0.tgz", + "integrity": "sha512-C6AQ4jD4mre3tn3QA+atn++mEZDh4r40CIeh1sKhskKE+Q4eiIr/nzVMOiPxHb8gskrSNxujH+Br49tl3i9s9g==", + "optional": true, + "requires": { + "@serialport/binding-mock": "9.0.7", + "@serialport/bindings": "^9.2.0", + "@serialport/parser-byte-length": "9.0.7", + "@serialport/parser-cctalk": "9.0.7", + "@serialport/parser-delimiter": "9.0.7", + "@serialport/parser-inter-byte-timeout": "9.0.7", + "@serialport/parser-readline": "9.0.7", + "@serialport/parser-ready": "9.0.7", + "@serialport/parser-regex": "9.0.7", + "@serialport/stream": "9.0.7", + "debug": "^4.3.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "optional": true + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "optional": true + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "optional": true, + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "optional": true, + "requires": { + "mimic-response": "^3.1.0" + } + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "optional": true + } + } + }, + "slip": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/slip/-/slip-1.0.2.tgz", + "integrity": "sha1-ukWpIwNNbPQbGieuvnEoKCyNVR8=" + }, + "socket.io-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "requires": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "optional": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "optional": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "optional": true + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wolfy87-eventemitter": { + "version": "5.2.9", + "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz", + "integrity": "sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", + "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/puredata/nodejs/package.json b/puredata/nodejs/package.json new file mode 100644 index 0000000..2a818fa --- /dev/null +++ b/puredata/nodejs/package.json @@ -0,0 +1,20 @@ +{ + "name": "walkingtowardstheflow-nodejs", + "version": "1.0.0", + "description": "", + "main": "sender.js", + "scripts": { + "start": "node sender.js", + "dev": "nodemon sender.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "osc": "^2.2.3", + "socket.io-client": "^2.3.0" + }, + "devDependencies": { + "nodemon": "^2.0.15" + } +} diff --git a/puredata/nodejs/sender.js b/puredata/nodejs/sender.js new file mode 100644 index 0000000..aa67200 --- /dev/null +++ b/puredata/nodejs/sender.js @@ -0,0 +1,99 @@ +const osc = require("osc"); +const udp = new osc.UDPPort({ + localAddress: '0.0.0.0', //<-- NOTE: '127.0.0.1' doesn't work!! for comm. between different machines + localPort: 57001, remoteAddress: '0.0.0.0', remotePort: 57000, metadata: true +}); + +//firstly establish/prepare osc conn. +Promise.all([ + new Promise((resolve, reject) => udp.on("ready", () => resolve('resolve: udp ready.'))), +]).then(results => { + console.log(results[0]); + + const io = require('socket.io-client'); + const socket = io('https://walkingtowardstheflow.xyz'); + + socket.on('connect', () => { + console.log("[osc-receiver] i'm connected."); + socket.emit("room", 1, (res) => console.log(res)); + }); + socket.on('disconnect', () => console.log("[osc-receiver] i'm disconnected.")); + + //from browser + socket.on('post', p => { + console.log('post', p); + }); + + //from puredata + udp.on("message", function (m) { + // console.log("osc(pd)", m); + + // + if (m.address == '/flow') { + socket.emit('flow', m.args[0].value); + } + + // + else if (m.address == '/info') { + socket.emit('info', (fields) => { + console.log(fields.length); + // + var flags = []; + for (let k = 0; k < fields.length; k++) { + if (fields[k].group == "flag") flags.push({type:'f', value:k}); + } + udp.send({ + address: '/info/flags', + args: flags + }) + // + var bodies = []; + for (let k = 0; k < fields.length; k++) { + if (fields[k].group == "body") bodies.push({type:'f', value:k}); + } + udp.send({ + address: '/info/bodies', + args: bodies + }) + // + var objects = []; + for (let k = 0; k < fields.length; k++) { + if (fields[k].group == "object") objects.push({type:'f', value:k}); + } + udp.send({ + address: '/info/objects', + args: objects + }) + // + var ones = []; + for (let k = 0; k < fields.length; k++) { + if (fields[k].group == "any") ones.push({type:'f', value:k}); + } + udp.send({ + address: '/info/ones', + args: ones + }) + // + udp.send({ + address: '/info/entries', + args:[ + {type: 'f', value: fields.length}, + {type: 'f', value: flags.length}, + {type: 'f', value: bodies.length}, + {type: 'f', value: objects.length}, + {type: 'f', value: ones.length}, + ] + }); + }); + } + }); + +}); + +//osc.js - start service +udp.open(); +udp.on("ready", () => console.log( + "[udp] ready (udp) : \n" + + "\tlistening on --> " + udp.options.localAddress + ":" + udp.options.localPort + "\n" + + "\tspeaking to -> " + udp.options.remoteAddress + ":" + udp.options.remotePort + "\n" +)); diff --git a/puredata/retro-help.pd b/puredata/retro-help.pd new file mode 100644 index 0000000..3cdb8dc --- /dev/null +++ b/puredata/retro-help.pd @@ -0,0 +1,16 @@ +#N canvas 1 89 370 282 12; +#X obj 94 124 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 94 189 print; +#X msg 189 95 1000 4000; +#X obj 94 143 retro 200 1800; +#X msg 200 125 200 1800; +#X text 2 7 <<<; +#X text 322 7 >>>; +#X text 2 237 <<<; +#X text 322 237 >>>; +#X text 95 39 * a randomized metro !; +#X connect 0 0 3 0; +#X connect 2 0 3 1; +#X connect 3 0 1 0; +#X connect 4 0 3 1; diff --git a/puredata/retro.pd b/puredata/retro.pd new file mode 100644 index 0000000..719e226 --- /dev/null +++ b/puredata/retro.pd @@ -0,0 +1,57 @@ +#N canvas 310 409 364 373 12; +#X obj 43 211 del; +#X obj 43 261 spigot; +#X obj 139 72 tgl 15 0 empty empty empty 17 7 0 10 -4160 -257985 -1 +1 1; +#X obj 234 86 expr \$2-\$1; +#X obj 145 216 random; +#X obj 234 36 loadbang; +#X obj 82 235 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 50 47 inlet; +#X obj 43 286 outlet; +#X obj 50 104 t b f; +#X obj 113 191 t b b; +#X obj 158 72 bng 10 250 50 0 empty empty empty 17 7 0 10 -257985 -4160 +-1; +#X text 2 7 <<<; +#X text 322 7 >>>; +#X text 2 337 <<<; +#X text 322 337 >>>; +#X obj 118 285 inlet; +#X obj 118 310 unpack f f; +#X obj 204 305 expr $f2-$f1; +#X floatatom 234 197 5 0 0 0 range - -; +#X floatatom 289 223 5 0 0 0 start - -; +#X obj 289 117 f \$1; +#X obj 145 242 +; +#X obj 234 61 t b b; +#X floatatom 171 69 5 0 0 1 r - -; +#X obj 288 278 outlet; +#X connect 0 0 1 0; +#X connect 1 0 8 0; +#X connect 1 0 11 0; +#X connect 2 0 9 0; +#X connect 3 0 19 0; +#X connect 4 0 22 0; +#X connect 5 0 23 0; +#X connect 6 0 1 1; +#X connect 7 0 2 0; +#X connect 9 0 11 0; +#X connect 9 1 6 0; +#X connect 10 0 0 0; +#X connect 10 1 4 0; +#X connect 11 0 10 0; +#X connect 16 0 17 0; +#X connect 16 0 18 0; +#X connect 17 0 20 0; +#X connect 18 0 19 0; +#X connect 19 0 4 1; +#X connect 20 0 22 1; +#X connect 21 0 20 0; +#X connect 22 0 0 1; +#X connect 22 0 24 0; +#X connect 22 0 25 0; +#X connect 23 0 3 0; +#X connect 23 1 21 0; +#X coords 0 -1 1 1 85 40 1 135 50; diff --git a/puredata/retro2.pd b/puredata/retro2.pd new file mode 100644 index 0000000..f8ca188 --- /dev/null +++ b/puredata/retro2.pd @@ -0,0 +1,62 @@ +#N canvas 805 23 356 386 12; +#X obj 45 286 del; +#X obj 22 310 spigot; +#X obj 139 72 tgl 15 0 empty empty empty 17 7 0 10 -4160 -257985 -1 +0 1; +#X obj 76 186 random; +#X obj 236 99 loadbang; +#X obj 106 289 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 22 36 inlet; +#X obj 22 342 outlet; +#X obj 157 72 bng 10 250 50 0 empty empty empty 17 7 0 10 -257985 -4160 +-1; +#X obj 236 29 inlet; +#X floatatom 165 140 5 0 0 3 range - -; +#X floatatom 238 180 5 0 0 3 start - -; +#X obj 76 250 +; +#X floatatom 170 69 5 0 0 1 r - -; +#X obj 173 317 outlet; +#X msg 202 238 stop; +#X obj 22 66 sel 1 0; +#X obj 202 212 t b b; +#X msg 243 255 0; +#X msg 161 236 1; +#X obj 22 104 t b b b; +#X obj 45 154 t b b; +#X obj 236 51 expr $f2-$f1 \; $f1; +#X obj 236 121 expr \$2-\$1 \; \$1; +#X text 20 7 retro->retro2: start bang/ stop->delay stop; +#X text 24 208 <-- initial bang bypass; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 1 0 8 0; +#X connect 2 0 16 0; +#X connect 3 0 12 0; +#X connect 4 0 23 0; +#X connect 5 0 1 1; +#X connect 6 0 2 0; +#X connect 8 0 21 0; +#X connect 9 0 22 0; +#X connect 10 0 3 1; +#X connect 11 0 12 1; +#X connect 12 0 0 1; +#X connect 12 0 13 0; +#X connect 12 0 14 0; +#X connect 15 0 0 0; +#X connect 16 0 20 0; +#X connect 16 1 17 0; +#X connect 17 0 15 0; +#X connect 17 1 18 0; +#X connect 18 0 5 0; +#X connect 19 0 5 0; +#X connect 20 0 1 0; +#X connect 20 1 21 0; +#X connect 20 2 19 0; +#X connect 21 0 0 0; +#X connect 21 1 3 0; +#X connect 22 0 10 0; +#X connect 22 1 11 0; +#X connect 23 0 10 0; +#X connect 23 1 11 0; +#X coords 0 -1 1 1 85 40 1 135 50; diff --git a/puredata/rscan.pd b/puredata/rscan.pd new file mode 100644 index 0000000..8d6538b --- /dev/null +++ b/puredata/rscan.pd @@ -0,0 +1,55 @@ +#N canvas 125 216 408 490 12; +#X obj 120 365 f; +#X obj 84 365 + 1; +#X obj 218 340 sel 1; +#X msg 138 340 0; +#X obj 218 315 ==; +#X obj 236 205 - 1; +#X obj 39 81 inlet; +#X msg 179 225 0; +#X msg 106 224 1; +#X obj 106 165 t b b a; +#X msg 39 225 0; +#X obj 236 230 max 0; +#X text 5 4 <<<; +#X text 345 4 >>>; +#X text 5 454 <<<; +#X text 345 454 >>>; +#X text 39 22 generate numbers from 0 to given (inlet-1); +#X text 84 82 1-command:; +#X text 124 98 - number-> target value; +#X text 124 112 - if <= 0 \, stop immediately; +#X obj 39 135 moses 1; +#X obj 278 385 outlet; +#X text 278 364 2#end bng; +#X msg 39 310 bang; +#X obj 120 390 t a a; +#X floatatom 152 415 5 0 0 0 - - -; +#X obj 152 439 outlet; +#X text 202 439 1#values; +#X obj 91 271 retro \$1 \$2; +#X text 39 38 arguments: random range => \$1 ~ \$2; +#X connect 0 0 1 0; +#X connect 0 0 24 0; +#X connect 1 0 0 1; +#X connect 2 0 7 0; +#X connect 2 0 21 0; +#X connect 3 0 0 1; +#X connect 4 0 2 0; +#X connect 5 0 11 0; +#X connect 6 0 20 0; +#X connect 7 0 28 0; +#X connect 8 0 28 0; +#X connect 9 0 8 0; +#X connect 9 1 3 0; +#X connect 9 2 5 0; +#X connect 10 0 23 0; +#X connect 10 0 28 0; +#X connect 11 0 4 1; +#X connect 20 0 10 0; +#X connect 20 1 9 0; +#X connect 23 0 21 0; +#X connect 24 0 4 0; +#X connect 24 1 25 0; +#X connect 25 0 26 0; +#X connect 28 0 0 0; diff --git a/puredata/rscan2.pd b/puredata/rscan2.pd new file mode 100644 index 0000000..487ca30 --- /dev/null +++ b/puredata/rscan2.pd @@ -0,0 +1,59 @@ +#N canvas 92 211 408 490 12; +#X obj 120 365 f; +#X obj 84 365 + 1; +#X obj 218 340 sel 1; +#X msg 138 340 0; +#X obj 218 315 ==; +#X obj 236 205 - 1; +#X obj 39 81 inlet; +#X msg 179 225 0; +#X msg 106 224 1; +#X obj 106 165 t b b a; +#X msg 39 225 0; +#X obj 236 230 max 0; +#X text 5 4 <<<; +#X text 345 4 >>>; +#X text 5 454 <<<; +#X text 345 454 >>>; +#X text 39 22 generate numbers from 0 to given (inlet-1); +#X text 84 82 1-command:; +#X text 124 98 - number-> target value; +#X text 124 112 - if <= 0 \, stop immediately; +#X obj 39 135 moses 1; +#X obj 278 385 outlet; +#X text 278 364 2#end bng; +#X msg 39 310 bang; +#X obj 120 390 t a a; +#X floatatom 152 415 5 0 0 0 - - -; +#X obj 152 439 outlet; +#X text 202 439 1#values; +#X text 39 38 arguments: random range => \$1 ~ \$2; +#X obj 96 268 retro2 \$1 \$2; +#X obj 289 242 inlet; +#X text 288 262 2-random range; +#X connect 0 0 1 0; +#X connect 0 0 24 0; +#X connect 1 0 0 1; +#X connect 2 0 7 0; +#X connect 2 0 21 0; +#X connect 3 0 0 1; +#X connect 4 0 2 0; +#X connect 5 0 11 0; +#X connect 6 0 20 0; +#X connect 7 0 29 0; +#X connect 8 0 29 0; +#X connect 9 0 8 0; +#X connect 9 1 3 0; +#X connect 9 2 5 0; +#X connect 10 0 23 0; +#X connect 10 0 29 0; +#X connect 11 0 4 1; +#X connect 20 0 10 0; +#X connect 20 1 9 0; +#X connect 23 0 21 0; +#X connect 24 0 4 0; +#X connect 24 1 25 0; +#X connect 25 0 26 0; +#X connect 29 0 0 0; +#X connect 30 0 29 1; +#X coords 0 -1 1 1 100 60 1 90 250; diff --git a/server.js b/server.js new file mode 100644 index 0000000..e6c48af --- /dev/null +++ b/server.js @@ -0,0 +1,363 @@ +//dotenv +require('dotenv').config(); + +//ffmpeg +var ffmpeg = require('fluent-ffmpeg'); + +//nextcloud client +const { Client, Server, GetFilesRecursivelyCommand, CommandStatus } = require("nextcloud-node-client"); +const server = new Server({ + basicAuth: { + password: process.env.nextcloud_PASSWD, + username: process.env.nextcloud_ID, + }, + url: process.env.nextcloud_URL, +}); + +//built-in +const path = require("path"); +const fs = require('fs').promises; +const util = require('util'); +// const { pipeline } = require('stream'); +// const pump = util.promisify(pipeline); + +//uuid +const { + v1: uuidv1, + v4: uuidv4, +} = require('uuid'); + +//moment +const moment = require("moment-timezone"); + +//fastify +const fastify = require("fastify")({ + logger: false, +}); +fastify.register(require("fastify-static"), { + root: path.join(__dirname, "public"), + prefix: "/" +}); +fastify.register(require("fastify-formbody")); +fastify.register(require("fastify-multipart")); +fastify.register(require("point-of-view"), { + engine: { + handlebars: require("handlebars") + } +}); + +//socket.io +var io = require("socket.io")(fastify.server, { + pingInterval: 1000, + pingTimeout: 3000 +}); + +//get '/' +fastify.get("/", function (request, reply) { + reply.view("/src/pages/parade.html", {}); +}); + +//get '/live +fastify.get("/live", function (request, reply) { + reply.view("/src/pages/live.html", {}); +}); + +//get '/preview/:foldername' --> request.params.foldername +fastify.get("/preview/:foldername", function (request, reply) { + reply.view("/src/pages/preview.html", {}); +}); + +//get '/entry', '/entry/', '/en/entry', '/en/entry/', '/entry/test' +["/entry", "/entry/", "/en/entry", "/en/entry/", "/entry/test"].forEach(function(item) { + fastify.get(item, async function (request, reply) { + + //console.log(request.url); + let url = request.url.replace(/\/$/, ''); + + //get list + let list = await fs.readdir('/media/storage/public/sound-parade/'); + list.reverse(); + + // console.log(list); + + let folders = []; + for (const item of list) { + let json = await fs.readFile('/media/storage/public/sound-parade/' + item + '/fields.json') + .catch((err) => { + console.error(err); + }); + if (json != undefined) { + var fields = JSON.parse(json.toString('utf8')); + folders.push({ + foldername: item, + group: fields.group, + title: fields.title, + comment: fields.comment, + }); + } + } + + // console.log(folders); + + // + if (url == "/entry") { + reply.view("/src/pages/entry.html", { + list: folders, + }); + } else if (url == "/en/entry") { + reply.view("/src/pages/entry.en.html", { + list: folders, + }); + } else if (url == "/entry/test") { + reply.view("/src/pages/entry.test.html", { + list: folders, + }); + } + + }); +}); +// --> https://stackoverflow.com/a/40899275 +// all the regex didn't work for me -- a 'last resort' method + +//get '/entries' +fastify.get("/entries", async function (request, reply) { + + //get list + let list = await fs.readdir('/media/storage/public/sound-parade/'); + + reply.send(list); +}); + +//get '/fields' +fastify.get("/fields", async function (request, reply) { + + //get list + let list = await fs.readdir('/media/storage/public/sound-parade/'); + //list.reverse(); + + // console.log(list); + + let folders = []; + for (const item of list) { + var fields = JSON.parse((await fs.readFile('/media/storage/public/sound-parade/' + item + '/fields.json')).toString('utf8')); + folders.push({ + foldername: item, + group: fields.group, + title: fields.title, + comment: fields.comment, + }); + } + + reply.send(folders); +}); + +//get '/delete' +fastify.get("/delete/:foldername/:pass", async function (request, reply) { + + //get pw + var fields = JSON.parse((await fs.readFile('/media/storage/public/sound-parade/' + request.params.foldername + '/fields.json')).toString('utf8')); + + var res = false; + if (fields.pass == request.params.pass) { + // console.log('good pass'); + + //ok. let's move it to trashbin. (mv ../sound-parade.trash) + // await fs.rename('/media/storage/public/sound-parade/' + request.params.foldername, '/media/storage/public/sound-parade.trash/' + request.params.foldername); + + const client = new Client(server); + const folder = await client.getFolder("/Storage/public/sound-parade/" + request.params.foldername); + await folder.move("/Storage/public/sound-parade.trash/" + request.params.foldername); + + // + res = true; + } else { + // console.log('wrong pass'); + } + + reply.send({ result: res }); +}); + +//post on '/entry' +fastify.post("/entry", async function (request, reply) { + + // stores files to tmp dir and return paths + const files = await request.saveRequestFiles().catch(err => { + console.error(err); + }); + let audiofile = files.find(f => f.fieldname == 'audiofile'); + let pixelfile = files.find(f => f.fieldname == 'pixels'); + let tmpdir = path.dirname(audiofile.filepath); + // console.log(audiofile.fields.message.value); + + console.log("-- hi."); // got all files. + + //conversion needed? + var conversion = false; + if (path.extname(audiofile.filename) !== ".mp3") { + conversion = true; + console.log("-- well.."); //conversion. is scheduled. + } else { + console.log("-- good"); //no conversion_ + } + + //upload + const client = new Client(server); + + console.log("-- ready"); //file server opened + + //create unique folder ==> timestamp + uuid + const folder = await client.createFolder("Storage/public/sound-parade/" + moment().tz('Asia/Seoul').format('YYYYMMDD-HHmmss-') + uuidv1()); + // + const json = await folder.createFile("fields.json", Buffer.from(JSON.stringify({ + group: audiofile.fields.group.value, + title: audiofile.fields.title.value, + comment: audiofile.fields.comment.value, + pass: audiofile.fields.pass.value + }))); + const image = await folder.createFile("pixels.png", await fs.readFile(pixelfile.filepath)); + // + if (conversion) { + console.log('---- hi conv'); + //save original file as is. + we have scheduled a conversion. + let afile = await fs.readFile(audiofile.filepath) + .catch(err => { + console.error(err); + }); + // + if (afile != undefined) { + const file = await folder.createFile(audiofile.filename, afile) + .catch(err => { + console.error(err); + console.log('---- createFile err.'); + console.log('afile', afile); + }); + } else { + console.log('afile == undef!'); + } + console.log('---- yes conv'); + // + } else { + console.log('---- no conv'); + //rename & save original file. + const file = await folder.createFile("audio.mp3", await fs.readFile(audiofile.filepath).catch(err => console.error(err))); + } + + console.log("-- saved"); //saved in file server. + + //conversion needed? + var converted = false; + if (conversion) { + console.log("-- mp3..."); //converting to mp3... + function converter() { + return new Promise((resolve, reject) => { + // + let outputFile = tmpdir + "/converted.mp3"; + // --> https://stackoverflow.com/a/36109219 (a quick tip on fluent-ffmpeg) + ffmpeg() + .addInput(audiofile.filepath) + .on("error", function(err) { + console.log("-- err:", err); + reject(err); + }) + .on("end", function() { + console.log("-- fine."); //conversion succeesful + converted = true; + resolve(outputFile); + }) + .outputOptions('-b:a 192000') + .output(outputFile) + .run(); + }); + } + await converter().catch((err) => { console.error(err); }); + + if (converted) { + const file = await folder.createFile("audio.mp3", await fs.readFile(tmpdir + '/converted.mp3')); + console.log("-- done"); + } + + } + + console.log("-- well done"); + + reply.send('done!'); + //reply.redirect('/submit'); +}); + +//socket.io +//var score = require("./public/score.json"); + +// +//there will be 16 rooms called: "room0", "room1", ... , "room15" +//if any other room is requested.. well, we will simply reject. +var roommax = 16; + +// +io.on("connection", function(socket) { + console.log("someone connected."); + socket.on("disconnect", function() { console.log("someone disconnected."); }); + + socket.on("room", function(room, fn) { + // parseInt(room) + if (room >= 0 && room < roommax) { + socket.join("room" + room); + fn(true); + } else { + fn(false); + } + }); + + socket.on("flow", function(req) { + io.emit("flow", req); + }); + +}); + +// +var pointer = 0; // pointer : 0 ~ (length-1) +var looper; +(looper = function(timeout) { + setTimeout(async function() { + + //pointer = 20; + // console.log(score[pointer]); + + // + for (var index = 0; index < roommax; index++) { + + // NOTE: 'pointer' must be 'remembered' since 'pointer' will increase almost immediately! pass as argument => 'pointed' + // NOTE: 'index' is same => 'indexed' + setTimeout(function(pointed, indexed) { + + // io.to("room" + indexed).emit("post", score[pointed]); + io.to("room" + indexed).emit("post", pointed); + + // }, score[pointer].object.showtime * index, pointer, index); + }, 30000 * index, pointer, index); + } + + //var timegap = 10000 + Math.random()*(40000); + var timegap = 1000 + Math.random()*(40000); + console.log(timegap); + + //get # list + let list = await fs.readdir('/media/storage/public/sound-parade/'); + console.log(list.length); + + //loop over... + pointer++; + if (pointer >= list.length) pointer = 0; + + looper(timegap); + }, timeout); +})(1000); + +//listen +fastify.listen(10000, function (err, address) { + if (err) { + fastify.log.error(err) + process.exit(1) + } + console.log(`Your app is listening on ${address}`) + fastify.log.info(`server listening on ${address}`) +}); diff --git a/src/pages/entry.en.html b/src/pages/entry.en.html new file mode 100644 index 0000000..ba7ebb6 --- /dev/null +++ b/src/pages/entry.en.html @@ -0,0 +1,386 @@ + + + + + + Walking Towards the Flow | entry + + + + + + + + +
+
+ + +
+
+

Walking  Towards  the Flow

+

+ Have you ever seen a parade outside the procession? Drums and shouts are heard in the distance, many beings shouting, flowing by, groups appearing and moving away... +

+

+ ยซWalking Toward the Flowยป is a sound parade that creates a procession of sounds in the online space. Anyone can participate. This parade is made by collecting the sounds you sent. +

+

+ ยซWalking Toward the Flowยป consists of a total of five 'flock' of sounds: the sounds of promises, the sounds of speaking, the sounds of the body, the sounds of objects around, and the sounds of someone. They will flow in groups for about 3 minutes each and a total of 15 minutes or more. +

+

+ On the night of January 27 (Thursday), the ยซWalking to the Flowยป parade will be broadcasted along with a live performance at the 'the Night of Ideas' hosted by Cultural Service of the Embassy of France in Korea, Liszt Institut Hungarian Cultural Center Seoul and Embassy of Belgium in Seoul and sponsored by UNESCO Korea and Institut Franรงais. Thank you for your participation and interest. +

+
+

+ Recruiting sounds
+ January 17, 2022 (Mon) โ€“ January 26, 2022 (Wed) +

+

+ Live performance
+ January 27th, 2022 (Thursday)
+ 20:45-21:00 (KST), 12:45-13:00 (CET)
+

+

+ Place
+ walkingtowardstheflow.xyz, France en Corรฉe - YouTube channel +

+

+ artists
+ diana band X Choong-geun Yoon (Inquiry: wonjung24@gmail.com) +

+

+ Parade Composition
+ Flock0 promises โ€” Flock1 flags โ€” Flock2 bodies โ€” Flock3 objects โ€” Flock4 someone +

+
+
+
+

How to participate

+
    +
  1. 1. Record the sound for about 30 seconds with a recording device or phone according to the characteristics of the flock. +
      +
    1. โ€ข Flock1 flags โ€” Speak out five times about what you like or value.
    2. +
    3. โ€ข Flock2 bodies โ€” Record the sound of your body. Applause and whistling.
    4. +
    5. โ€ข Flock3 objects โ€” Find the sound of things around you. Bubble wrap sound, Beads sound.
    6. +
    7. โ€ข Flock4 someone โ€” Collect the sound of others. animal, sound of water, place to take a walk.
    8. +
    +
  2. +
  3. 2. Upload the recorded sound file.
  4. +
  5. 3. After filling out the title and description of the sound, draw the shape of the sound and submit it.
  6. +
+
+
+

Sound Submission

+
+
    +
  • +

    1. Sound Type

    +
      +
    • + Flock1 flags +
    • +
    • + Flock2 bodies +
    • +
    • + Flock3 objects +
    • +
    • + Flock4 someone +
    • +
    +
  • +
  • +

    2. Sound File

    + +
  • +
  • +

    3. Title

    + +
  • +
  • +

    4. Description of the sound

    + +
  • + +
  • +

    5. Draw an image of the sound

    +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
  • +
  • +

    6. passward is 2-digit numbers. It's required if you delete it.

    + +
  • +
  • + +
  • +
+

+ โ†“ใ€€ +

+
+
+
+

Sound  List

+

The sounds you submitted will be stacked in chronological order in the list below. By clicking on each shape, you can hear the sound corresponding to the shape and check the information about the sound.

+ {{#each list}} +
+
+ + +

    +
  • Group |
    {{this.group}}

  • +
  • Title |
    {{this.title}}

  • +
  • Desc. |
    {{this.comment}}

  • +
+ + +
+
+ {{/each}} +
+
+
+ + + diff --git a/src/pages/entry.html b/src/pages/entry.html new file mode 100644 index 0000000..f0257b5 --- /dev/null +++ b/src/pages/entry.html @@ -0,0 +1,388 @@ + + + + + + ํ๋ฆ„์„ ํ–ฅํ•˜์—ฌ ๊ฑท๋Š” | ์†Œ๊ฐœ + + + + + + + + +
+
+ + +
+
+

ํ๋ฆ„์„  ํ–ฅํ•˜์—ฌ  ๊ฑท๋Š”

+

+ ํผ๋ ˆ์ด๋“œ๋ฅผ ํ–‰๋ ฌ ๋ฐ–์—์„œ ๋ฐ”๋ผ๋ณธ ์ ์ด ์žˆ๋‚˜์š”? ๋ถ์†Œ๋ฆฌ์™€ ํ•จ์„ฑ์†Œ๋ฆฌ๊ฐ€ ๋ฉ€๋ฆฌ์„œ ๋“ค๋ฆฌ๊ณ , ๋งŽ์€ ์กด์žฌ๋“ค์ด ์™ธ์น˜๊ณ , ํ๋ฅด๋“ฏ ์ง€๋‚˜๊ฐ€๊ณ , ๋ฌด๋ฆฌ๊ฐ€ ๋“ฑ์žฅํ•˜๊ณ , ๋ฉ€์–ด์ง€๋Š”...... +

+

+ ยซํ๋ฆ„์„ ํ–ฅํ•˜์—ฌ ๊ฑท๋Š”ยป์€ ์˜จ๋ผ์ธ ๊ณต๊ฐ„์— ์†Œ๋ฆฌ์˜ ํ–‰๋ ฌ์„ ๋งŒ๋“œ๋Š” ์‚ฌ์šด๋“œ ํผ๋ ˆ์ด๋“œ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ด ํผ๋ ˆ์ด๋“œ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๋ณด๋‚ด์ฃผ์‹œ๋Š” ์†Œ๋ฆฌ๊ฐ€ ๋ชจ์—ฌ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. +

+

+ ยซํ๋ฆ„์„ ํ–ฅํ•˜์—ฌ ๊ฑท๋Š”ยป์€ ์ด ๋‹ค์„ฏ ๊ฐœ์˜ ์†Œ๋ฆฌ ๋ฌด๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์•ฝ์†ํ•˜๋Š” ์†Œ๋ฆฌ๋“ค, ๋งํ•˜๋Š” ์†Œ๋ฆฌ๋“ค, ๋ชธ์ด ๋‚ด๋Š” ์†Œ๋ฆฌ๋“ค, ์ฃผ๋ณ€์˜ ์‚ฌ๋ฌผ๋“ค, ๊ทธ๋ฆฌ๊ณ  ๋ˆ„๊ตฐ๊ฐ€์˜ ์†Œ๋ฆฌ๋“ค์ด ๋ฌด๋ฆฌ๋ฅผ ์ง€์–ด ๊ฐ 3๋ถ„ ๋‚ด์™ธ ์ด 15๋ถ„ ๊ฐ€๋Ÿ‰ ํ˜๋Ÿฌ๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. +

+

+ 1์›” 27์ผ(๋ชฉ) ๋ฐค, ยซํ๋ฆ„์„ ํ–ฅํ•˜์—ฌ ๊ฑท๋Š”ยป ํผ๋ ˆ์ด๋“œ๋Š” ๋ผ์ด๋ธŒ ๊ณต์—ฐ๊ณผ ํ•จ๊ป˜ โ€˜์‚ฌ์œ ์˜ ๋ฐคโ€™ ํ–‰์‚ฌ์—์„œ ์†ก์ถœ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. โ€˜์‚ฌ์œ ์˜ ๋ฐคโ€™์€ ์ฃผํ•œ ํ”„๋ž‘์Šค๋Œ€์‚ฌ๊ด€ ๋ฌธํ™”๊ณผ, ์ฃผํ•œ ๋ฆฌ์ŠคํŠธ ํ—๊ฐ€๋ฆฌ ๋ฌธํ™”์›, ์ฃผํ•œ ๋ฒจ๊ธฐ์— ๋Œ€์‚ฌ๊ด€์ด ์ฃผ์ตœํ•˜๊ณ , ์œ ๋„ค์Šค์ฝ” ํ•œ๊ตญ์œ„์›ํšŒ์™€ ํ”„๋ž‘์Šค ํ•ด์™ธ๋ฌธํ™”์ง„ํฅ์›์ด ํ›„์›ํ•˜์—ฌ ๊ฐœ์ตœ๋ฉ๋‹ˆ๋‹ค. + ๋งŽ์€ ์ฐธ์—ฌ ๋ฐ ๊ด€์‹ฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. +

+
+

+ ์†Œ๋ฆฌ ๋ชจ์ง‘
+ 2022๋…„ 1์›” 17์ผ(์›”)โ€“2022๋…„ 1์›” 26์ผ(์ˆ˜) +

+

+ ๋ผ์ด๋ธŒ ๊ณต์—ฐ
+ 2022๋…„ 1์›” 27์ผ(๋ชฉ)
+ 20:45-21:00 (KST), 12:45-13:00 (CET)
+

+

+ ์žฅ์†Œ
+ walkingtowardstheflow.xyz
์ฃผํ•œํ”„๋ž‘์Šค๋Œ€์‚ฌ๊ด€ ๋ฌธํ™”๊ณผ ์œ ํŠœ๋ธŒ ์ฑ„๋„ +

+

+ ์ž‘๊ฐ€
+ ๋‹ค์ด์• ๋‚˜๋ฐด๋“œ X ์œค์ถฉ๊ทผ (๋ฌธ์˜: wonjung24@gmail.com) +

+

+ ํผ๋ ˆ์ด๋“œ ๊ตฌ์„ฑ
+ ๋ฌด๋ฆฌ0 ์•ฝ์†๋“ค โ€” ๋ฌด๋ฆฌ1 ๊นƒ๋ฐœ๋“ค โ€” ๋ฌด๋ฆฌ2 ์‹ ์ฒด๋“ค โ€” ๋ฌด๋ฆฌ3 ์‚ฌ๋ฌผ๋“ค โ€” ๋ฌด๋ฆฌ4 ๋ˆ„๊ตฌ๋“ค +

+
+
+
+

์ฐธ์—ฌ ๋ฐฉ๋ฒ•

+
    +
  1. 1. ๋ฌด๋ฆฌ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋…น์Œ๊ธฐ๊ธฐ๋‚˜ ํ•ธ๋“œํฐ์œผ๋กœ 30์ดˆ ๊ฐ€๋Ÿ‰์˜ ์†Œ๋ฆฌ๋ฅผ ๋…น์Œํ•ด์ฃผ์„ธ์š”. +
      +
    1. โ€ข ๋ฌด๋ฆฌ1 ๊นƒ๋ฐœ๋“ค โ€” ์ข‹์•„ํ•˜๋Š” ๊ฒƒ, ๊ฐ€์น˜์— ๋Œ€ํ•ด ๋‹ค์„ฏ ๋ฒˆ ์™ธ์ณ์ฃผ์„ธ์š”.
    2. +
    3. โ€ข ๋ฌด๋ฆฌ2 ์‹ ์ฒด๋“ค โ€” ๋ชธ์—์„œ ๋‚˜๋Š” ์†Œ๋ฆฌ๋ฅผ ๋…น์Œํ•ด ๋ณด์•„์š”. ๋ฐ•์ˆ˜, ํœ˜ํŒŒ๋žŒ๋„ ์ข‹์•„์š”.
    4. +
    5. โ€ข ๋ฌด๋ฆฌ3 ์‚ฌ๋ฌผ๋“ค โ€” ์ฃผ๋ณ€ ์‚ฌ๋ฌผ๋“ค์˜ ์†Œ๋ฆฌ๋ฅผ ์ฐพ์•„ ์ฃผ์„ธ์š”. ๋ฝ๋ฝ์ด ์†Œ๋ฆฌ, ๊ตฌ์Šฌ ์†Œ๋ฆฌ
    6. +
    7. โ€ข ๋ฌด๋ฆฌ4 ๋ˆ„๊ตฌ๋“ค โ€” ๋ˆ„๊ตฌ์˜ ์†Œ๋ฆฌ๋ฅผ ๋ชจ์•„์ฃผ์„ธ์š”. ๋ฐ˜๋ ค๋™๋ฌผ, ๋ฌผ ์†Œ๋ฆฌ, ์‚ฐ์ฑ…์˜ ์žฅ์†Œ
    8. +
    +
  2. +
  3. 2. ๋…น์Œํ•œ ์†Œ๋ฆฌ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•ด์ฃผ์„ธ์š”.
  4. +
  5. 3. ์†Œ๋ฆฌ์˜ ์ œ๋ชฉ๊ณผ ๋ฌ˜์‚ฌ์„ ์ž…๋ ฅํ•œ ๋’ค, ์†Œ๋ฆฌ์˜ ๋ชจ์–‘์„ ๊ทธ๋ ค ์ œ์ถœํ•ด์ฃผ์„ธ์š”.
  6. +
+
+
+

์†Œ๋ฆฌ ์ œ์ถœ

+
+
    +
  • +

    1. ์†Œ๋ฆฌ ์œ ํ˜•

    +
      +
    • + ๋ฌด๋ฆฌ1 ๊นƒ๋ฐœ๋“ค +
    • +
    • + ๋ฌด๋ฆฌ2 ์‹ ์ฒด๋“ค +
    • +
    • + ๋ฌด๋ฆฌ3 ์‚ฌ๋ฌผ๋“ค +
    • +
    • + ๋ฌด๋ฆฌ4 ๋ˆ„๊ตฌ๋“ค +
    • +
    +
  • +
  • +

    2. ์†Œ๋ฆฌ ํŒŒ์ผ

    + +
  • +
  • +

    3. ์†Œ๋ฆฌ ์ œ๋ชฉ

    + +
  • +
  • +

    4. ์†Œ๋ฆฌ ๋ฌ˜์‚ฌ

    + +
  • + +
  • +

    5. ์†Œ๋ฆฌ ๋ชจ์–‘

    +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
  • +
  • +

    6. ๋น„๋ฐ€ ๋ฒˆํ˜ธ

    + + ๋‘ ์ž๋ฆฌ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. ์—…๋กœ๋“œํ•œ ์†Œ๋ฆฌ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์“ฐ์ž…๋‹ˆ๋‹ค. +
  • +
  • + +
  • +
+

+ โ†“ใ€€ +

+
+
+
+

์†Œ๋ฆฌ ๋ชฉ๋ก

+

์ œ์ถœํ•ด์ฃผ์‹  ์†Œ๋ฆฌ๋Š” ์•„๋ž˜ ๋ชฉ๋ก์— ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์Œ“์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋ชจ์–‘์„ ํด๋ฆญํ•˜๋ฉด, ๋ชจ์–‘์— ํ•ด๋‹นํ•˜๋Š” ์†Œ๋ฆฌ๋ฅผ ๋“ฃ๊ณ  ์†Œ๋ฆฌ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+ {{#each list}} +
+
+ + +

    +
  • ์œ ํ˜• |
    {{this.group}}

  • +
  • ์ œ๋ชฉ |
    {{this.title}}

  • +
  • ๋ฌ˜์‚ฌ |
    {{this.comment}}

  • +
+ + +
+
+ {{/each}} +
+
+
+ + + diff --git a/src/pages/entry.test.html b/src/pages/entry.test.html new file mode 100644 index 0000000..f91a116 --- /dev/null +++ b/src/pages/entry.test.html @@ -0,0 +1,381 @@ + + + + + + ํ๋ฆ„์„ ํ–ฅํ•˜์—ฌ ๊ฑท๋Š” | ์†Œ๊ฐœ + + + + + + + + +
+
+ + +
+
+

ํ๋ฆ„์„  ํ–ฅํ•˜์—ฌ  ๊ฑท๋Š”

+

+ ํผ๋ ˆ์ด๋“œ๋ฅผ ํ–‰๋ ฌ ๋ฐ–์—์„œ ๋ฐ”๋ผ๋ณธ ์ ์ด ์žˆ๋‚˜์š”? ๋ถ์†Œ๋ฆฌ์™€ ํ•จ์„ฑ์†Œ๋ฆฌ๊ฐ€ ๋ฉ€๋ฆฌ์„œ ๋“ค๋ฆฌ๊ณ , ๋งŽ์€ ์กด์žฌ๋“ค์ด ์™ธ์น˜๊ณ , ํ๋ฅด๋“ฏ ์ง€๋‚˜๊ฐ€๊ณ , ๋ฌด๋ฆฌ๊ฐ€ ๋“ฑ์žฅํ•˜๊ณ , ๋ฉ€์–ด์ง€๋Š”...... +

+

+ ยซํ๋ฆ„์„ ํ–ฅํ•˜์—ฌ ๊ฑท๋Š”ยป์€ ์˜จ๋ผ์ธ ๊ณต๊ฐ„์— ์†Œ๋ฆฌ์˜ ํ–‰๋ ฌ์„ ๋งŒ๋“œ๋Š” ์‚ฌ์šด๋“œ ํผ๋ ˆ์ด๋“œ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ด ํผ๋ ˆ์ด๋“œ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๋ณด๋‚ด์ฃผ์‹œ๋Š” ์†Œ๋ฆฌ๊ฐ€ ๋ชจ์—ฌ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. +

+

+ ยซํ๋ฆ„์„ ํ–ฅํ•˜์—ฌ ๊ฑท๋Š”ยป์€ ์ด ๋‹ค์„ฏ ๊ฐœ์˜ ์†Œ๋ฆฌ ๋ฌด๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์•ฝ์†ํ•˜๋Š” ์†Œ๋ฆฌ๋“ค, ๋งํ•˜๋Š” ์†Œ๋ฆฌ๋“ค, ๋ชธ์ด ๋‚ด๋Š” ์†Œ๋ฆฌ๋“ค, ์ฃผ๋ณ€์˜ ์‚ฌ๋ฌผ๋“ค, ๊ทธ๋ฆฌ๊ณ  ๋ˆ„๊ตฐ๊ฐ€์˜ ์†Œ๋ฆฌ๋“ค์ด ๋ฌด๋ฆฌ๋ฅผ ์ง€์–ด ๊ฐ 3๋ถ„ ๋‚ด์™ธ ์ด 15๋ถ„ ๊ฐ€๋Ÿ‰ ํ˜๋Ÿฌ๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. +

+

+ 1์›” 27์ผ(๋ชฉ) ๋ฐค, ยซํ๋ฆ„์„ ํ–ฅํ•˜์—ฌ ๊ฑท๋Š”ยป ํผ๋ ˆ์ด๋“œ๋Š” ๋ผ์ด๋ธŒ ๊ณต์—ฐ๊ณผ ํ•จ๊ป˜ โ€˜์‚ฌ์œ ์˜ ๋ฐคโ€™ ํ–‰์‚ฌ์—์„œ ์†ก์ถœ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. โ€˜์‚ฌ์œ ์˜ ๋ฐคโ€™์€ ์ฃผํ•œ ํ”„๋ž‘์Šค๋Œ€์‚ฌ๊ด€ ๋ฌธํ™”๊ณผ, ์ฃผํ•œ ๋ฆฌ์ŠคํŠธ ํ—๊ฐ€๋ฆฌ ๋ฌธํ™”์›, ์ฃผํ•œ ๋ฒจ๊ธฐ์— ๋Œ€์‚ฌ๊ด€์ด ์ฃผ์ตœํ•˜๊ณ , ์œ ๋„ค์Šค์ฝ” ํ•œ๊ตญ์œ„์›ํšŒ์™€ ํ”„๋ž‘์Šค ํ•ด์™ธ๋ฌธํ™”์ง„ํฅ์›์ด ํ›„์›ํ•˜์—ฌ ๊ฐœ์ตœ๋ฉ๋‹ˆ๋‹ค. + ๋งŽ์€ ์ฐธ์—ฌ ๋ฐ ๊ด€์‹ฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. +

+
+

+ ์†Œ๋ฆฌ ๋ชจ์ง‘
+ 2022๋…„ 1์›” 17์ผ(์›”)โ€“2022๋…„ 1์›” 26์ผ(์ˆ˜) +

+

+ ๋ผ์ด๋ธŒ ๊ณต์—ฐ
+ 2022๋…„ 1์›” 27์ผ(๋ชฉ)
+ 20:45-21:00 (KST), 12:45-13:00 (CET)
+

+

+ ์žฅ์†Œ
+ walkingtowardstheflow.xyz
์ฃผํ•œํ”„๋ž‘์Šค๋Œ€์‚ฌ๊ด€ ๋ฌธํ™”๊ณผ ์œ ํŠœ๋ธŒ ์ฑ„๋„ +

+

+ ์ž‘๊ฐ€
+ ๋‹ค์ด์• ๋‚˜๋ฐด๋“œ X ์œค์ถฉ๊ทผ (๋ฌธ์˜: wonjung24@gmail.com) +

+

+ ํผ๋ ˆ์ด๋“œ ๊ตฌ์„ฑ
+ ๋ฌด๋ฆฌ0 ์•ฝ์†๋“ค โ€” ๋ฌด๋ฆฌ1 ๊นƒ๋ฐœ๋“ค โ€” ๋ฌด๋ฆฌ2 ์‹ ์ฒด๋“ค โ€” ๋ฌด๋ฆฌ3 ์‚ฌ๋ฌผ๋“ค โ€” ๋ฌด๋ฆฌ4 ๋ˆ„๊ตฌ๋“ค +

+
+
+
+

์ฐธ์—ฌ ๋ฐฉ๋ฒ•

+
    +
  1. 1. ๋ฌด๋ฆฌ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋…น์Œ๊ธฐ๊ธฐ๋‚˜ ํ•ธ๋“œํฐ์œผ๋กœ 30์ดˆ ๊ฐ€๋Ÿ‰์˜ ์†Œ๋ฆฌ๋ฅผ ๋…น์Œํ•ด์ฃผ์„ธ์š”. +
      +
    1. โ€ข ๋ฌด๋ฆฌ1 ๊นƒ๋ฐœ๋“ค โ€” ์ข‹์•„ํ•˜๋Š” ๊ฒƒ, ๊ฐ€์น˜์— ๋Œ€ํ•ด ๋‹ค์„ฏ ๋ฒˆ ์™ธ์ณ์ฃผ์„ธ์š”.
    2. +
    3. โ€ข ๋ฌด๋ฆฌ2 ์‹ ์ฒด๋“ค โ€” ๋ชธ์—์„œ ๋‚˜๋Š” ์†Œ๋ฆฌ๋ฅผ ๋…น์Œํ•ด ๋ณด์•„์š”. ๋ฐ•์ˆ˜, ํœ˜ํŒŒ๋žŒ๋„ ์ข‹์•„์š”.
    4. +
    5. โ€ข ๋ฌด๋ฆฌ3 ์‚ฌ๋ฌผ๋“ค โ€” ์ฃผ๋ณ€ ์‚ฌ๋ฌผ๋“ค์˜ ์†Œ๋ฆฌ๋ฅผ ์ฐพ์•„ ์ฃผ์„ธ์š”. ๋ฝ๋ฝ์ด ์†Œ๋ฆฌ, ๊ตฌ์Šฌ ์†Œ๋ฆฌ
    6. +
    7. โ€ข ๋ฌด๋ฆฌ4 ๋ˆ„๊ตฌ๋“ค โ€” ๋ˆ„๊ตฌ์˜ ์†Œ๋ฆฌ๋ฅผ ๋ชจ์•„์ฃผ์„ธ์š”. ๋ฐ˜๋ ค๋™๋ฌผ, ๋ฌผ ์†Œ๋ฆฌ, ์‚ฐ์ฑ…์˜ ์žฅ์†Œ
    8. +
    +
  2. +
  3. 2. ๋…น์Œํ•œ ์†Œ๋ฆฌ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•ด์ฃผ์„ธ์š”.
  4. +
  5. 3. ์†Œ๋ฆฌ์˜ ์ œ๋ชฉ๊ณผ ๋ฌ˜์‚ฌ์„ ์ž…๋ ฅํ•œ ๋’ค, ์†Œ๋ฆฌ์˜ ๋ชจ์–‘์„ ๊ทธ๋ ค ์ œ์ถœํ•ด์ฃผ์„ธ์š”.
  6. +
+
+
+

์†Œ๋ฆฌ ์ œ์ถœ

+
+
    +
  • +

    1. ์†Œ๋ฆฌ ์œ ํ˜•

    +
      +
    • + ๋ฌด๋ฆฌ1 ๊นƒ๋ฐœ๋“ค +
    • +
    • + ๋ฌด๋ฆฌ2 ์‹ ์ฒด๋“ค +
    • +
    • + ๋ฌด๋ฆฌ3 ์‚ฌ๋ฌผ๋“ค +
    • +
    • + ๋ฌด๋ฆฌ4 ๋ˆ„๊ตฌ๋“ค +
    • +
    +
  • +
  • +

    2. ์†Œ๋ฆฌ ํŒŒ์ผ

    + +
  • +
  • +

    3. ์†Œ๋ฆฌ ์ œ๋ชฉ

    + +
  • +
  • +

    4. ์†Œ๋ฆฌ ๋ฌ˜์‚ฌ

    + +
  • + +
  • +

    5. ์†Œ๋ฆฌ ๋ชจ์–‘

    +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
  • +
  • +

    6. ๋น„๋ฐ€ ๋ฒˆํ˜ธ

    + + ๋‘ ์ž๋ฆฌ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. ์—…๋กœ๋“œํ•œ ์†Œ๋ฆฌ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์“ฐ์ž…๋‹ˆ๋‹ค. +
  • +
  • + +
  • +
+
+
+
+

์†Œ๋ฆฌ ๋ชฉ๋ก

+

์ œ์ถœํ•ด์ฃผ์‹  ์†Œ๋ฆฌ๋Š” ์•„๋ž˜ ๋ชฉ๋ก์— ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์Œ“์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋ชจ์–‘์„ ํด๋ฆญํ•˜๋ฉด, ๋ชจ์–‘์— ํ•ด๋‹นํ•˜๋Š” ์†Œ๋ฆฌ๋ฅผ ๋“ฃ๊ณ  ์†Œ๋ฆฌ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+ {{#each list}} +
+
+ + +

    +
  • ์œ ํ˜• |
    {{this.group}}

  • +
  • ์ œ๋ชฉ |
    {{this.title}}

  • +
  • ๋ฌ˜์‚ฌ |
    {{this.comment}}

  • +
+ + +
+
+ {{/each}} +
+
+
+ + + diff --git a/src/pages/live.html b/src/pages/live.html new file mode 100644 index 0000000..3655f85 --- /dev/null +++ b/src/pages/live.html @@ -0,0 +1,285 @@ + + + + + + + ํ๋ฆ„์„ ํ–ฅํ•˜์—ฌ ๊ฑท๋Š” + + + + + + + + + + + +
+
+
+ + + + diff --git a/src/pages/parade.html b/src/pages/parade.html new file mode 100644 index 0000000..4471c22 --- /dev/null +++ b/src/pages/parade.html @@ -0,0 +1,305 @@ + + + + + + + ํ๋ฆ„์„ ํ–ฅํ•˜์—ฌ ๊ฑท๋Š” + + + + + + + + + + + +
+
+
+ + + + diff --git a/src/pages/preview.html b/src/pages/preview.html new file mode 100644 index 0000000..669ec1f --- /dev/null +++ b/src/pages/preview.html @@ -0,0 +1,376 @@ + + + + + + + ํ๋ฆ„์„ ํ–ฅํ•˜์—ฌ ๊ฑท๋Š” + + + + + + + + + + + +
+
+
+ + + +