From 8b8f012d607739fadffd08bd3182088423431fc2 Mon Sep 17 00:00:00 2001 From: yuz796 Date: Sun, 11 Sep 2022 12:16:16 -0400 Subject: [PATCH 1/5] first --- .DS_Store | Bin 0 -> 8196 bytes package-lock.json | 4086 +++++++++++++++++++++++++++- src/.DS_Store | Bin 0 -> 8196 bytes src/geometry/.DS_Store | Bin 0 -> 6148 bytes src/geometry/Cube.ts | 116 + src/main.ts | 56 +- src/rendering/.DS_Store | Bin 0 -> 6148 bytes src/rendering/gl/OpenGLRenderer.ts | 2 +- src/rendering/gl/ShaderProgram.ts | 10 + src/shaders/.DS_Store | Bin 0 -> 6148 bytes src/shaders/custom-frag.glsl | 122 + src/shaders/custom-vert.glsl | 59 + src/shaders/customq-vert.glsl | 57 + src/shaders/customs-frag.glsl | 77 + 14 files changed, 4558 insertions(+), 27 deletions(-) create mode 100644 .DS_Store create mode 100644 src/.DS_Store create mode 100644 src/geometry/.DS_Store create mode 100644 src/geometry/Cube.ts create mode 100644 src/rendering/.DS_Store create mode 100644 src/shaders/.DS_Store create mode 100644 src/shaders/custom-frag.glsl create mode 100644 src/shaders/custom-vert.glsl create mode 100644 src/shaders/customq-vert.glsl create mode 100644 src/shaders/customs-frag.glsl diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e56fb5433af6ec1eebfa3571e001b13163491e2a GIT binary patch literal 8196 zcmeHMO>7%Q6n-x;)TT|dPLn1rAX!*Qm1?3GLM;weH*P8j2qn!%B~enG^?L1WyV)_j z>zLF8`HsXD=oN_*5+@{%a6p0sy&`exfhz|tAaN>he(c&_TPmWZAa9aM=FfG|PbqL3{<{RuO? zgHTu4mPkERP=*r9P*f=fs>}gpIF0Mdzb#RQ1B#Vt9yIInv zFEcMR9nbbfuv4+gW#=u&tFUH~HM~k7<}u`eSg54Uwp#f@A(tuSk8+vTD=#kOGK&`$ zkB(Bw+2`{YS9bRgZ?)b#djDg=1fY5i!K7?=>rcoU$&+IpsO!ZaI@fzw)4Esu)bSG& zCnvS^)T#7zdS>SI?A*+mvuB?vX{XAjb+hL4bHB`7<`>tF^Xpof#KvoaF7It#F)1?qMJm%S{R91gO^(5guEWztw zz#cT=L%0o}!B_At`~<(i@0h^T_#B?cMZAcY@HM=O>uBK~I(S3Ik9BVPv;8Y!K<$w? z{lM@&mw7ev;qhsxg9#Sgq`F4pd4VLvM0*}?kO&!gL*&#i!~PjY#34V+-nbO3!xg&z zWq6Zto+Mo9UkN`Lh#05y@xdDK`eV3PkC?yjJlu~<%yX?)A)n7>UdjtKUsxQWX0BE$ zBh`GH1{Dc^QM+8cXQrMWq21_%|FA_I5#d&^tRJR`yYHc)+9mZxH5-*`Rw=-*MJ>(2iouvd@MSEZj!UH7ZQMokfwZe`@qkh%Af)Ht z;);YSZICt6%ut1nac%c1ElqD18_Hd!&qrtJ*A%I;f6L@lJn}LwSD54Z|CQ0d|3C8c zh!=<%h#7c%3}9l}ST54~o$s5$Q{lOGhK^l2c;S9+i6Vq5k&Y9JbeypJhauS+a^*3) d!nQ=}q4JOa5YYQIAMgKv|06!$|NoQw|DWdKu=10.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/dat.gui": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@types/dat.gui/-/dat.gui-0.7.7.tgz", + "integrity": "sha512-CxLCme0He5Jk3uQwfO/fGZMyNhb/ypANzqX0yU9lviBQMlen5SOvQTBQ/Cd9x5mFlUAK5Tk8RgvTyLj1nYkz+w==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", + "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", + "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "9.6.61", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.61.tgz", + "integrity": "sha512-/aKAdg5c8n468cYLy2eQrcR5k6chlbNwZNGUj3TboyPa2hcO2QAJcfymlqPzMiRj8B6nYKXjzQz36minFE0RwQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, + "node_modules/@types/webgl2": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.6.tgz", + "integrity": "sha512-50GQhDVTq/herLMiqSQkdtRu+d5q/cWHn4VvKJtrj4DJAjo1MNkWYa2MA41BaBO1q1HgsUjuQvEOk0QHvlnAaQ==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", + "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz", + "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.2.tgz", + "integrity": "sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/3d-view": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/3d-view/-/3d-view-2.0.1.tgz", "integrity": "sha512-YSLRHXNpSziaaiK2R0pI5+JKguoJVbtWmIv9YyBFtl0+q42kQwJB/JUulbFR/1zYFm58ifjKQ6kVdgZ6tyKtCA==", - "requires": { + "dependencies": { "matrix-camera-controller": "^2.1.1", "orbit-camera-controller": "^4.0.0", "turntable-camera-controller": "^3.0.0" } }, - "3d-view-controls": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-2.2.2.tgz", - "integrity": "sha512-WL0u3PN41lEx/4qvKqV6bJlweUYoW18FXMshW/qHb41AVdZxDReLoJNGYsI7x6jf9bYelEF62BJPQmO7yEnG2w==", - "requires": { - "3d-view": "^2.0.0", - "has-passive-events": "^1.0.0", - "mouse-change": "^1.1.1", - "mouse-event-offset": "^3.0.2", - "mouse-wheel": "^1.0.2", - "right-now": "^1.0.0" + "node_modules/3d-view-controls": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-2.2.2.tgz", + "integrity": "sha512-WL0u3PN41lEx/4qvKqV6bJlweUYoW18FXMshW/qHb41AVdZxDReLoJNGYsI7x6jf9bYelEF62BJPQmO7yEnG2w==", + "dependencies": { + "3d-view": "^2.0.0", + "has-passive-events": "^1.0.0", + "mouse-change": "^1.1.1", + "mouse-event-offset": "^3.0.2", + "mouse-wheel": "^1.0.2", + "right-now": "^1.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz", + "integrity": "sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.0.tgz", + "integrity": "sha512-tAaOSrWCHF+1Ear1Z4wnJCXA9GGox4K6Ic85a5qalES2aeEwQGr7UC93mwef49536PkCYjzkp0zIxfFvexJ6zQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/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 + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/binary-search-bounds": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz", + "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==" + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", + "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001254", + "colorette": "^1.3.0", + "electron-to-chromium": "^1.3.830", + "escalade": "^3.1.1", + "node-releases": "^1.1.75" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001255", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001255.tgz", + "integrity": "sha512-F+A3N9jTZL882f/fg/WWVnKSu6IOo3ueLz4zwaOPbPYHNmM/ZaDUyzyJwS1mZhX7Ex5jqTyW599Gdelh5PDYLQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/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 + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/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==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/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==", + "dev": true + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/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==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cubic-hermite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cubic-hermite/-/cubic-hermite-1.0.0.tgz", + "integrity": "sha1-hOOy8nKzFFToOTuZu2rtRRaMFOU=" + }, + "node_modules/dat.gui": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/dat.gui/-/dat.gui-0.7.7.tgz", + "integrity": "sha512-sRl/28gF/XRC5ywC9I4zriATTsQcpSsRG7seXCPnTkK8/EQMIbCu5NPMpICLGxX9ZEUvcXR3ArLYCtgreFoMDw==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.3.832", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.832.tgz", + "integrity": "sha512-x7lO8tGoW0CyV53qON4Lb5Rok9ipDelNdBIAiYUZ03dqy4u9vohMM1qV047+s/hiyJiqUWX/3PNwkX3kexX5ig==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", + "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/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==", + "dev": true + }, + "node_modules/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==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", + "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/filtered-vector": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/filtered-vector/-/filtered-vector-1.2.5.tgz", + "integrity": "sha512-5Vu6wdtQJ1O2nRmz39dIr9m3hEDq1skYby5k1cJQdNWK4dMgvYcUEiA/9j7NcKfNZ5LGxn8w2LSLiigyH7pTAw==", + "dependencies": { + "binary-search-bounds": "^2.0.0", + "cubic-hermite": "^1.0.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.3.tgz", + "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz", + "integrity": "sha1-4fJE7zkzwbKmS9R5kTYGDQ9ZFPg=", + "dev": true + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gl-mat3": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gl-mat3/-/gl-mat3-1.0.0.tgz", + "integrity": "sha1-iWMyGcpCk3mha5GF2V1BcTRTuRI=" + }, + "node_modules/gl-mat4": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gl-mat4/-/gl-mat4-1.2.0.tgz", + "integrity": "sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==" + }, + "node_modules/gl-matrix": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.3.0.tgz", + "integrity": "sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA==" + }, + "node_modules/gl-quat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gl-quat/-/gl-quat-1.0.0.tgz", + "integrity": "sha1-CUXskjOG9FMpvl3DV7HIwtR1hsU=", + "dependencies": { + "gl-mat3": "^1.0.0", + "gl-vec3": "^1.0.3", + "gl-vec4": "^1.0.0" + } + }, + "node_modules/gl-vec3": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gl-vec3/-/gl-vec3-1.1.3.tgz", + "integrity": "sha512-jduKUqT0SGH02l8Yl+mV1yVsDfYgQAJyXGxkJQGyxPLHRiW25DwVIRPt6uvhrEMHftJfqhqKthRcyZqNEl9Xdw==" + }, + "node_modules/gl-vec4": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gl-vec4/-/gl-vec4-1.0.1.tgz", + "integrity": "sha1-l9loeCgbFLUyy84QF4Xf0cs0CWQ=" + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/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, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-passive-events": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-passive-events/-/has-passive-events-1.0.0.tgz", + "integrity": "sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==", + "dependencies": { + "is-browser": "^2.0.1" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/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==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/hpack.js/node_modules/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==", + "dev": true + }, + "node_modules/html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-ip": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", + "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", + "dev": true, + "dependencies": { + "default-gateway": "^6.0.0", + "ipaddr.js": "^1.9.1", + "is-ip": "^3.1.0", + "p-event": "^4.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/internal-ip?sponsor=1" + } + }, + "node_modules/internal-ip/node_modules/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==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz", + "integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==" + }, + "node_modules/is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-ip": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "dev": true, + "dependencies": { + "ip-regex": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.1.tgz", + "integrity": "sha512-XJKCL7tu+362IUYTWvw8+3S75U7qMiYiRU6u5yqscB48bTvzwN6i8L/7wVTXiFLwkRsxARNM7TISnTvcgv9hxA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/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==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mat4-decompose": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mat4-decompose/-/mat4-decompose-1.0.4.tgz", + "integrity": "sha1-ZetP451wh496RE60Yk1S9+frL68=", + "dependencies": { + "gl-mat4": "^1.0.1", + "gl-vec3": "^1.0.2" + } + }, + "node_modules/mat4-interpolate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mat4-interpolate/-/mat4-interpolate-1.0.4.tgz", + "integrity": "sha1-Vf/p6zw1KV4sDVqfdyXZBoqJ/3Q=", + "dependencies": { + "gl-mat4": "^1.0.1", + "gl-vec3": "^1.0.2", + "mat4-decompose": "^1.0.3", + "mat4-recompose": "^1.0.3", + "quat-slerp": "^1.0.0" + } + }, + "node_modules/mat4-recompose": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mat4-recompose/-/mat4-recompose-1.0.4.tgz", + "integrity": "sha1-OVPCMP8kc9x3LuAUpSySXPgbDk0=", + "dependencies": { + "gl-mat4": "^1.0.1" + } + }, + "node_modules/matrix-camera-controller": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/matrix-camera-controller/-/matrix-camera-controller-2.1.4.tgz", + "integrity": "sha512-zsPGPONclrKSImNpqqKDTcqFpWLAIwMXEJtCde4IFPOw1dA9udzFg4HOFytOTosOFanchrx7+Hqq6glLATIxBA==", + "dependencies": { + "binary-search-bounds": "^2.0.0", + "gl-mat4": "^1.1.2", + "gl-vec3": "^1.0.3", + "mat4-interpolate": "^1.0.3" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/mem?sponsor=1" + } + }, + "node_modules/mem/node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/memfs": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.4.tgz", + "integrity": "sha512-2mDCPhuduRPOxlfgsXF9V+uqC6Jgz8zt/bNe4d4W7d5f6pCzHrWkxLNr17jKGXd4+j2kQNsAG2HARPnt74sqVQ==", + "dev": true, + "dependencies": { + "fs-monkey": "1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "dev": true, + "dependencies": { + "mime-db": "1.49.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mouse-change": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mouse-change/-/mouse-change-1.4.0.tgz", + "integrity": "sha1-wrd+W/o0pDzhRFyBV6Tk3JiVwU8=", + "dependencies": { + "mouse-event": "^1.0.0" + } + }, + "node_modules/mouse-event": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/mouse-event/-/mouse-event-1.0.5.tgz", + "integrity": "sha1-s3ie23EJmX1aky0dAdqhVDpQFzI=" + }, + "node_modules/mouse-event-offset": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz", + "integrity": "sha1-39hqbiSMa6jK1TuQXVA3ogY+mYQ=" + }, + "node_modules/mouse-wheel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mouse-wheel/-/mouse-wheel-1.2.0.tgz", + "integrity": "sha1-bSkDseqPtI5h8bU7kDZ3PwQs21w=", + "dependencies": { + "right-now": "^1.0.0", + "signum": "^1.0.0", + "to-px": "^1.0.1" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-releases": { + "version": "1.1.75", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", + "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", + "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orbit-camera-controller": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/orbit-camera-controller/-/orbit-camera-controller-4.0.0.tgz", + "integrity": "sha1-bis28OeHhmPDMPUNqbfOaGwncAU=", + "dependencies": { + "filtered-vector": "^1.2.1", + "gl-mat4": "^1.0.3" + } + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "dependencies": { + "p-timeout": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "dev": true, + "dependencies": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-unit/-/parse-unit-1.0.1.tgz", + "integrity": "sha1-fhu21b7zh0wo45JSaiVBFwKR7s8=" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/path/-/path-0.11.14.tgz", + "integrity": "sha1-y8dWk1XLPIOv60rOQ+z/lSMeWn0=", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/portfinder/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/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==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/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==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/quat-slerp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/quat-slerp/-/quat-slerp-1.0.1.tgz", + "integrity": "sha1-K6oVzjprvcMkHZcusXKDE57Wnyk=", + "dependencies": { + "gl-quat": "^1.0.0" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/right-now": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/right-now/-/right-now-1.0.0.tgz", + "integrity": "sha1-bolgne69fc2vja7Mmuo5z1haCRg=" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dev": true, + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "dependencies": { + "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.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/signum": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/signum/-/signum-1.0.0.tgz", + "integrity": "sha1-dKfSvyogtA66FqkrFSEk8dVZ+nc=" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy-transport/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/spdy/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/stats-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stats-js/-/stats-js-1.0.1.tgz", + "integrity": "sha512-EAwEFghGNv8mlYC4CZzI5kWghsnP8uBKXw6VLRHtXkOk5xySfUKLTqTkjgJFfDluIkf/O7eZwi5MXP50VeTbUg==" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/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==", + "dev": true + }, + "node_modules/strip-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.0.tgz", + "integrity": "sha512-UhDTSnGF1dc0DRbUqr1aXwNoY3RgVkSWG8BrpnuFIxhP57IqbS7IRta2Gfiavds4yCxc5+fEAVVOgBZWnYkvzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.2.tgz", + "integrity": "sha512-0Omye+RD4X7X69O0eql3lC4Heh/5iLj3ggxR/B5ketZLOtLiOqukUgjw3q4PDnNQbsrkKr3UMypqStQG3XKRvw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.3.tgz", + "integrity": "sha512-eDbuaDlXhVaaoKuLD3DTNTozKqln6xOG6Us0SzlKG5tNlazG+/cdl8pm9qiF1Di89iWScTI0HcO+CDcf2dkXiw==", + "dev": true, + "dependencies": { + "jest-worker": "^27.0.6", + "p-limit": "^3.1.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/to-px": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-px/-/to-px-1.1.0.tgz", + "integrity": "sha512-bfg3GLYrGoEzrGoE05TAL/Uw+H/qrf2ptr9V3W7U0lkjjyYnIfgxmVLUfhQ1hZpIQwin81uxhDjvUkDYsC0xWw==", + "dependencies": { + "parse-unit": "^1.0.1" + } + }, + "node_modules/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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-loader": { + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.5.tgz", + "integrity": "sha512-al/ATFEffybdRMUIr5zMEWQdVnCGMUA9d3fXJ8dBVvBlzytPvIszoG9kZoR+94k6/i293RnVOXwMaWbXhNy9pQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/turntable-camera-controller": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/turntable-camera-controller/-/turntable-camera-controller-3.0.1.tgz", + "integrity": "sha1-jb0/4AVQGRxlFky4iJcQSVeK/Zk=", + "dependencies": { + "filtered-vector": "^1.2.1", + "gl-mat4": "^1.0.2", + "gl-vec3": "^1.0.2" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", + "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webpack": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.52.0.tgz", + "integrity": "sha512-yRZOat8jWGwBwHpco3uKQhVU7HYaNunZiJ4AkAVQkPCUGoZk/tiIXiwG+8HIy/F+qsiZvSOa+GLQOj3q5RKRYg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^3.2.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.8.0.tgz", + "integrity": "sha512-+iBSWsX16uVna5aAYN6/wjhJy1q/GKk4KjKvfg90/6hykCTSgozbfz5iRgDTSJt/LgSbYxdBX3KBHeobIs+ZEw==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.0.4", + "@webpack-cli/info": "^1.3.0", + "@webpack-cli/serve": "^1.5.2", + "colorette": "^1.2.1", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.0.0.tgz", + "integrity": "sha512-9zng2Z60pm6A98YoRcA0wSxw1EYn7B7y5owX/Tckyt9KGyULTkLtiavjaXlWqOMkM0YtqGgL3PvMOFgyFLq8vw==", + "dev": true, + "dependencies": { + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.1.1.tgz", + "integrity": "sha512-Kl1mnCEw8Cy1Kw173gCxLIB242LfPKEOj9WoKhKz/MbryZTNrILzOJTk8kiczw/YUEPzn3gcltCQv6hDsLudRg==", + "dev": true, + "dependencies": { + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.1", + "colorette": "^1.2.2", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "internal-ip": "^6.2.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^3.1.0", + "selfsigned": "^1.10.11", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^5.0.0", + "ws": "^8.1.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-glsl-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/webpack-glsl-loader/-/webpack-glsl-loader-1.0.1.tgz", + "integrity": "sha1-cqDjAZK9V5R9YNbVBckVvmgNCsw=", + "dev": true, + "dependencies": { + "fs": "0.0.2", + "path": "^0.11.14" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-Q6B6H2oc8QY3llc3cB8kVmQ6pnJWVQbP7Q5algTcIxx7YEpc0oU4NBVHlztA7Ekzfhw2r0rPducMUiCGWKQRzw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { "@discoveryjs/json-ext": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", @@ -272,7 +4290,8 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", - "dev": true + "dev": true, + "requires": {} }, "@webpack-cli/info": { "version": "1.3.0", @@ -287,7 +4306,8 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.2.tgz", "integrity": "sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw==", - "dev": true + "dev": true, + "requires": {} }, "@xtuc/ieee754": { "version": "1.2.0", @@ -301,6 +4321,29 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "3d-view": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/3d-view/-/3d-view-2.0.1.tgz", + "integrity": "sha512-YSLRHXNpSziaaiK2R0pI5+JKguoJVbtWmIv9YyBFtl0+q42kQwJB/JUulbFR/1zYFm58ifjKQ6kVdgZ6tyKtCA==", + "requires": { + "matrix-camera-controller": "^2.1.1", + "orbit-camera-controller": "^4.0.0", + "turntable-camera-controller": "^3.0.0" + } + }, + "3d-view-controls": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-2.2.2.tgz", + "integrity": "sha512-WL0u3PN41lEx/4qvKqV6bJlweUYoW18FXMshW/qHb41AVdZxDReLoJNGYsI7x6jf9bYelEF62BJPQmO7yEnG2w==", + "requires": { + "3d-view": "^2.0.0", + "has-passive-events": "^1.0.0", + "mouse-change": "^1.1.1", + "mouse-event-offset": "^3.0.2", + "mouse-wheel": "^1.0.2", + "right-now": "^1.0.0" + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -321,7 +4364,8 @@ "version": "1.7.6", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz", "integrity": "sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA==", - "dev": true + "dev": true, + "requires": {} }, "aggregate-error": { "version": "3.1.0", @@ -349,7 +4393,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "ansi-html-community": { "version": "0.0.8", @@ -3102,7 +7147,8 @@ "version": "8.2.2", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.2.tgz", "integrity": "sha512-Q6B6H2oc8QY3llc3cB8kVmQ6pnJWVQbP7Q5algTcIxx7YEpc0oU4NBVHlztA7Ekzfhw2r0rPducMUiCGWKQRzw==", - "dev": true + "dev": true, + "requires": {} }, "yallist": { "version": "4.0.0", diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..776e07246567832ec0dabb1c7470f16e5ef00a84 GIT binary patch literal 8196 zcmeI1&2G~`5XWcJKw>^b4wae^nqtBC4WEU%QEJjmdf0 zR;*;s+=3U-6OG8FUCJo!MJv&Kf(bAICcp%k02BBd2w=^YR^71f>sjuZ02BBx3CQPz zjV67^_?hJhQoJ^pJ}h< zB($7_xw9}8icoil&Q{?hI@)v31em}o0a?3Sbbz}3go0xIp1k&=#KWxoLOnv;{h*okn4rHJjf=X{&tgdZlVvRqM9(sy|F7{mjkA zY1bXSkVjA4Z0MQs((gj&w1E8J~?}vpHJU?Q16_Cc>vKJeLU|! zVzk2LO@9)j6LWBkc|MbzRIRl z4Hk1FzF)2=WasOj&Q3kg+m6$)A2=#Kd#w%Wk@#U7)AI?FYv3#;sDh*nfm`FlHdZk; zC7H&>)GS2*tJs#H6p^V_7@urj|K*2|jR{;K0$cjE)@A+wc=P`M6?#YfQkeh~_*DX; zeAqwiLUr-ecKHHwmABE3(WJ?^nf6M8ZsCUjj^}?EVr(N+YC6Wxw8t43Zv-d|+%bXQ GO5i6$*e}Td literal 0 HcmV?d00001 diff --git a/src/geometry/.DS_Store b/src/geometry/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8ad720f9899d9b2a00c42bfdc89a54289bae228a GIT binary patch literal 6148 zcmeHK%Sr=55UkdK33|xUi!fgh$RDgR9&*kP=tjXqU^OxK`6EA3s~?Jq>rF(Y8>VY^ zx@%^qU}v@g$ZU5v1;zk|Y>J|t9@F98&`~5G6UFA3;2GP+x?8pDo{9eAkiPo~uCPOk zdwhETu4RO>$OUooYGxZa!vZUG*y0fnfrny?7B@o%0tscBx-4vqc2p8!7SIdX16j~DGTuL-P document.getElementById('canvas'); @@ -52,6 +63,7 @@ function main() { // Initial call to load scene loadScene(); + prevColor = [0, 1, 0, 0.3]; const camera = new Camera(vec3.fromValues(0, 0, 5), vec3.fromValues(0, 0, 0)); @@ -63,6 +75,15 @@ function main() { new Shader(gl.VERTEX_SHADER, require('./shaders/lambert-vert.glsl')), new Shader(gl.FRAGMENT_SHADER, require('./shaders/lambert-frag.glsl')), ]); + //lambert.setGeometryColor(vec4.fromValues(controls.color[0]/255.0, controls.color[1]/255.0, controls.color[2]/255.0, controls.color[3])); + + const custom = new ShaderProgram([ + new Shader(gl.VERTEX_SHADER, require('./shaders/custom-vert.glsl')), + new Shader(gl.FRAGMENT_SHADER, require('./shaders/custom-frag.glsl')), + ]); + //custom.setGeometryColor(vec4.fromValues(controls.color[0]/255.0, controls.color[1]/255.0, controls.color[2]/255.0, controls.color[3])); + + // This function will be called every frame function tick() { @@ -76,10 +97,32 @@ function main() { icosphere = new Icosphere(vec3.fromValues(0, 0, 0), 1, prevTesselations); icosphere.create(); } - renderer.render(camera, lambert, [ - icosphere, - // square, - ]); + //prevColor = controls.color; + + if(controls.color != prevColor){ + prevColor = controls.color; + lambert.setGeometryColor(vec4.fromValues(controls.color[0]/255.0, controls.color[1]/255.0, controls.color[2]/255.0, controls.color[3])); + custom.setGeometryColor(vec4.fromValues(controls.color[0]/255.0, controls.color[1]/255.0, controls.color[2]/255.0, controls.color[3])); + } + + console.log(Date.now() - starttime); + lambert.setTime(Date.now() - starttime); + custom.setTime(Date.now() - starttime); + if(controls.shaders == 0){ + renderer.render(camera, lambert, [ + //icosphere, + //square, + cube + ]); + }else{ + renderer.render(camera, custom, [ + // icosphere, + // square, + cube, + ]); + } + + stats.end(); // Tell the browser to call `tick` again whenever it renders a new frame @@ -101,3 +144,4 @@ function main() { } main(); + diff --git a/src/rendering/.DS_Store b/src/rendering/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..92235275883a16d20912f3bfc73e652c493920eb GIT binary patch literal 6148 zcmeHKPfP1S5Z`U9CWzRB@I3CtTagBfo`hKI!P|p8o(C08Y|%i>N}F1=uad9f`$m2O zKhAqIv(tkAPJ&38f!W_=cV?IQCG2FBQo23t21?bHQXVK`#fRY?!FAL(QsJ2@pvFCt z%qC#tW_!FQ@VyzpcUMuDDm%>V#jE$X`HzGWAfIG3xM82C%{fwB!CUKK+b~tAy=e)@Cz1PJXAo(OG?M-{wV}=Dj`zr`;a7oE)Wj z*N)nDn0E)XPvjQpptJh=c)Sw?4YL&llZF{@x0(&p+HOrIzV~Az*gZVIzPlg)nLIo? z{xy7{B&&>5_zMOlcN_Kd%;uNyJoTOW2nqwjfG{v;4DdDQEzenAl8!JS41AseydMlG zV#ruJq^ko4Y5@RiFiiqB{{CZ(VGJ2dhp+;oT_~Un)!bre7Y_4={X)jlp$k`qMP4iy@Fash#0z`uh!oZg@@E^g~S1kYl literal 0 HcmV?d00001 diff --git a/src/rendering/gl/OpenGLRenderer.ts b/src/rendering/gl/OpenGLRenderer.ts index 7e527c2..98c7a3a 100644 --- a/src/rendering/gl/OpenGLRenderer.ts +++ b/src/rendering/gl/OpenGLRenderer.ts @@ -31,7 +31,7 @@ class OpenGLRenderer { mat4.multiply(viewProj, camera.projectionMatrix, camera.viewMatrix); prog.setModelMatrix(model); prog.setViewProjMatrix(viewProj); - prog.setGeometryColor(color); + //prog.setGeometryColor(color); for (let drawable of drawables) { prog.draw(drawable); diff --git a/src/rendering/gl/ShaderProgram.ts b/src/rendering/gl/ShaderProgram.ts index 67fef40..f6494aa 100644 --- a/src/rendering/gl/ShaderProgram.ts +++ b/src/rendering/gl/ShaderProgram.ts @@ -29,6 +29,7 @@ class ShaderProgram { unifModelInvTr: WebGLUniformLocation; unifViewProj: WebGLUniformLocation; unifColor: WebGLUniformLocation; + unifTime: WebGLUniformLocation; constructor(shaders: Array) { this.prog = gl.createProgram(); @@ -48,6 +49,7 @@ class ShaderProgram { this.unifModelInvTr = gl.getUniformLocation(this.prog, "u_ModelInvTr"); this.unifViewProj = gl.getUniformLocation(this.prog, "u_ViewProj"); this.unifColor = gl.getUniformLocation(this.prog, "u_Color"); + this.unifTime = gl.getUniformLocation(this.prog, "u_Time"); } use() { @@ -85,6 +87,14 @@ class ShaderProgram { } } + setTime(time: number){ + this.use(); + if(this.unifTime !== -1){ + gl.uniform1f(this.unifTime, time); + } + } + + draw(d: Drawable) { this.use(); diff --git a/src/shaders/.DS_Store b/src/shaders/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c46019da2aed4c0470e73c7674fc88d7d3fbc9ea GIT binary patch literal 6148 zcmeHKO;5r=5Php0h+gpK#iV}#(SJ}0CYl&8M9*44FqZG4!Bg-46%&7=zL{MK1u7&a zM$Hb{ecjoaY3H@O!vZkXN%I&e0VuKw7IxUJ5Sf>@BwJ1+enw;T(M1_|7~yuw+ABN* zo`K)SfUMmT8kk^=1oP{+jYG5%Qy-tl{YDh`Beexih_CM|n$DvCBU;=6l3f3{1^>Ow z{fFE^)F~mKd(cxT=+=!)kJScMmjyrh55r1Xc^{5>&av2frB~FF?h`9<%jOHvhuvrF| zE`trMnP=8&JlmOb->iB0lGl|H{uHly8LZ}YrM2=J^X+x{UhQ}OS@Cjt)fJQdUKb;* z`QjmKWajJ-+Kl;1D=5y1F}B^Y=WV~)S_-3?DPmgEKse&YdK4ZPv9_g zm|Elv#aLIObv5pYVXQm#fwK!8rWUO`j5~Z7cW2{HC`Rwj_<@?kgcg188So5b8Q8YN zlGOjx{PTa-$&Wk(o`HYGfGO1KwJK9`wRI^uskH&y4V#GAr54qNoh!$BA*FbqO@(uT XTo6NtsYPli{*Qpt;5*O2k23H9xC7mB literal 0 HcmV?d00001 diff --git a/src/shaders/custom-frag.glsl b/src/shaders/custom-frag.glsl new file mode 100644 index 0000000..a918983 --- /dev/null +++ b/src/shaders/custom-frag.glsl @@ -0,0 +1,122 @@ +#version 300 es + +// This is a fragment shader. If you've opened this file first, please +// open and read lambert.vert.glsl before reading on. +// Unlike the vertex shader, the fragment shader actually does compute +// the shading of geometry. For every pixel in your program's output +// screen, the fragment shader is run for every bit of geometry that +// particular pixel overlaps. By implicitly interpolating the position +// data passed into the fragment shader by the vertex shader, the fragment shader +// can compute what color to apply to its pixel based on things like vertex +// position, light position, and vertex color. +precision highp float; + +uniform vec4 u_Color; // The color with which to render this instance of geometry. +uniform float u_Time; +// These are the interpolated values out of the rasterizer, so you can't know +// their specific values without knowing the vertices that contributed to them +in vec4 fs_Pos; +in vec4 fs_Nor; +in vec4 fs_LightVec; +in vec4 fs_Col; + +out vec4 out_Col; // This is the final output color that you will see on your + // screen for the pixel that is currently being processed. + + +//float perlin2D(vec2 uv){ +// float surfletSum = 0.f; +// for(int dx = 0; dx <= 1; ++dx) { +// for(int dy = 0; dy <= 1; ++dy) { +// surfletSum += random2(uv); +// } +// } +// return surfletSum; +//} +float random2(vec2 p) { + return fract(sin(dot(p.xy, vec2(1223.9898, 78435.233))) * 43758.5453); +} + +float random(vec2 p) +{ + float x = dot(p,vec2(4371.321,-9137.327)); + return 2.0 * fract(sin(x)*17381.94472) - 1.0; +} + +//float fbm(vec2 p){ +// float total = 0.f; +// float persistence = 1.0f/ 2.0f; +// float amplitude = persistence; +// for(int i = 0; i < 8; i++){ +// p = p * 2.0; +// amplitude *= 0.5; +// total += random2(p * amplitude); +// } +// return total; +//} +float noise(vec2 p){ + return fract(sin(fract(sin(p.x) * (43.13311)) + p.y) * 31.0011); +} + +float fbm( vec2 p ) +{ + float f = 0.0; + float gat = 0.0; + + for (float octave = 0.; octave < 5.; ++octave) + { + float la = pow(2.0, octave); + float ga = pow(0.5, octave + 1.); + f += ga*noise( la * p ); + gat += ga; + } + + f = f/gat; + + return f; +} + +float length2(vec2 p){ + return dot(p,p); +} + +float worley(vec2 p) { + //Set our distance to infinity + float d = 1e30; + //For the 9 surrounding grid points + for (int xo = -1; xo <= 1; ++xo) { + for (int yo = -1; yo <= 1; ++yo) { + //Floor our vec2 and add an offset to create our point + vec2 tp = floor(p) + vec2(xo, yo); + //Calculate the minimum distance for this grid point + //Mix in the noise value too! + d = min(d, length2(p - tp - noise(tp))); + } + } + return 3.0*exp(-4.0*abs(2.5*d - 1.0)); +} + +float fworley(vec2 p) { + //Stack noise layers + return sqrt(sqrt(sqrt( + worley(p*5.0 + 0.05*u_Time) * + sqrt(worley(p * 50.0 + 0.12 + -0.1*u_Time)) * + sqrt(sqrt(worley(p * -10.0 + 0.03*u_Time)))))); +} + +void main() +{ + vec2 pos = fs_Pos.xy; + float rand = fbm(pos); + + float t = fworley(fs_Col.xy / 1500.0); + + float r = cos(0.0001 * u_Time + rand) / 2.f + 0.3 * sin(fs_Pos.x * fs_Pos.y) + 0.7; + float g = sin(0.0010 * u_Time + rand * t) / 3.f + 0.3 * cos(fs_Pos.y) + 0.7; + float b = sin(0.0016 * u_Time + rand) / 2.f + 0.4 * sin(fs_Pos.z) + 0.7; + + vec4 color_final = vec4(r, g, b, 1.0); + out_Col = color_final; + +} + diff --git a/src/shaders/custom-vert.glsl b/src/shaders/custom-vert.glsl new file mode 100644 index 0000000..858cdcf --- /dev/null +++ b/src/shaders/custom-vert.glsl @@ -0,0 +1,59 @@ +#version 300 es + +//This is a vertex shader. While it is called a "shader" due to outdated conventions, this file +//is used to apply matrix transformations to the arrays of vertex data passed to it. +//Since this code is run on your GPU, each vertex is transformed simultaneously. +//If it were run on your CPU, each vertex would have to be processed in a FOR loop, one at a time. +//This simultaneous transformation allows your program to run much faster, especially when rendering +//geometry with millions of vertices. + +uniform mat4 u_Model; // The matrix that defines the transformation of the + // object we're rendering. In this assignment, + // this will be the result of traversing your scene graph. + +uniform mat4 u_ModelInvTr; // The inverse transpose of the model matrix. + // This allows us to transform the object's normals properly + // if the object has been non-uniformly scaled. + +uniform mat4 u_ViewProj; // The matrix that defines the camera's transformation. + // We've written a static matrix for you to use for HW2, + // but in HW3 you'll have to generate one yourself + +uniform float u_Time; + +in vec4 vs_Pos; // The array of vertex positions passed to the shader + +in vec4 vs_Nor; // The array of vertex normals passed to the shader + +in vec4 vs_Col; // The array of vertex colors passed to the shader. + +out vec4 fs_Pos; + +out vec4 fs_Nor; // The array of normals that has been transformed by u_ModelInvTr. This is implicitly passed to the fragment shader. +out vec4 fs_LightVec; // The direction in which our virtual light lies, relative to each vertex. This is implicitly passed to the fragment shader. +out vec4 fs_Col; // The color of each vertex. This is implicitly passed to the fragment shader. + +const vec4 lightPos = vec4(5, 5, 3, 1); //The position of our virtual light, which is used to compute the shading of + //the geometry in the fragment shader. + + + +void main() +{ + fs_Col = vs_Col; // Pass the vertex colors to the fragment shader for interpolation + + mat3 invTranspose = mat3(u_ModelInvTr); + fs_Nor = vec4(invTranspose * vec3(vs_Nor), 0); // Pass the vertex normals to the fragment shader for interpolation. + // Transform the geometry's normals by the inverse transpose of the + // model matrix. This is necessary to ensure the normals remain + // perpendicular to the surface after the surface is transformed by + // the model matrix. + + + vec4 modelposition = u_Model * vs_Pos; // Temporarily store the transformed vertex positions for use below + + fs_LightVec = lightPos - modelposition; // Compute the direction in which the light source lies + + gl_Position = u_ViewProj * modelposition;// gl_Position is a built-in variable of OpenGL which is + // used to render the final positions of the geometry's vertices +} diff --git a/src/shaders/customq-vert.glsl b/src/shaders/customq-vert.glsl new file mode 100644 index 0000000..1024283 --- /dev/null +++ b/src/shaders/customq-vert.glsl @@ -0,0 +1,57 @@ +#version 300 es + +//This is a vertex shader. While it is called a "shader" due to outdated conventions, this file +//is used to apply matrix transformations to the arrays of vertex data passed to it. +//Since this code is run on your GPU, each vertex is transformed simultaneously. +//If it were run on your CPU, each vertex would have to be processed in a FOR loop, one at a time. +//This simultaneous transformation allows your program to run much faster, especially when rendering +//geometry with millions of vertices. + +uniform mat4 u_Model; // The matrix that defines the transformation of the + // object we're rendering. In this assignment, + // this will be the result of traversing your scene graph. + +uniform mat4 u_ModelInvTr; // The inverse transpose of the model matrix. + // This allows us to transform the object's normals properly + // if the object has been non-uniformly scaled. + +uniform mat4 u_ViewProj; // The matrix that defines the camera's transformation. + // We've written a static matrix for you to use for HW2, + // but in HW3 you'll have to generate one yourself +uniform float u_Time; + +in vec4 vs_Pos; // The array of vertex positions passed to the shader + +in vec4 vs_Nor; // The array of vertex normals passed to the shader + +in vec4 vs_Col; // The array of vertex colors passed to the shader. + +out vec4 fs_Pos; +out vec4 fs_Nor; // The array of normals that has been transformed by u_ModelInvTr. This is implicitly passed to the fragment shader. +out vec4 fs_LightVec; // The direction in which our virtual light lies, relative to each vertex. This is implicitly passed to the fragment shader. +out vec4 fs_Col; // The color of each vertex. This is implicitly passed to the fragment shader. + +const vec4 lightPos = vec4(5, 5, 3, 1); //The position of our virtual light, which is used to compute the shading of + //the geometry in the fragment shader. + +void main() +{ + fs_Col = vs_Col; // Pass the vertex colors to the fragment shader for interpolation + + mat3 invTranspose = mat3(u_ModelInvTr); + fs_Nor = vec4(invTranspose * vec3(vs_Nor), 0); // Pass the vertex normals to the fragment shader for interpolation. + // Transform the geometry's normals by the inverse transpose of the + // model matrix. This is necessary to ensure the normals remain + // perpendicular to the surface after the surface is transformed by + // the model matrix. + + + vec4 modelposition = u_Model * vs_Pos; // Temporarily store the transformed vertex positions for use below + + fs_LightVec = lightPos - modelposition; // Compute the direction in which the light source lies + + fs_Pos = u_ViewProj * modelposition; + + gl_Position = u_ViewProj * modelposition;// gl_Position is a built-in variable of OpenGL which is + // used to render the final positions of the geometry's vertices +} diff --git a/src/shaders/customs-frag.glsl b/src/shaders/customs-frag.glsl new file mode 100644 index 0000000..0eb1b57 --- /dev/null +++ b/src/shaders/customs-frag.glsl @@ -0,0 +1,77 @@ +#version 300 es + +// This is a fragment shader. If you've opened this file first, please +// open and read lambert.vert.glsl before reading on. +// Unlike the vertex shader, the fragment shader actually does compute +// the shading of geometry. For every pixel in your program's output +// screen, the fragment shader is run for every bit of geometry that +// particular pixel overlaps. By implicitly interpolating the position +// data passed into the fragment shader by the vertex shader, the fragment shader +// can compute what color to apply to its pixel based on things like vertex +// position, light position, and vertex color. +precision highp float; + +uniform vec4 u_Color; // The color with which to render this instance of geometry. + +// These are the interpolated values out of the rasterizer, so you can't know +// their specific values without knowing the vertices that contributed to them +in vec4 fs_Nor; +in vec4 fs_LightVec; +in vec4 fs_Col; + +out vec4 out_Col; // This is the final output color that you will see on your + // screen for the pixel that is currently being processed. + +//float fbm(vec2 p){ +// float total = 0.f; +// float persistence = 1/ 2.0f; +// for(int i = 0; i < 8; i++){ +// float frequency = pow(2,i); +// float amplitude = pow(persistence, i); +// total += perlin2D(p * frequency) * amplitude; +// } +// return total; +//} +// +//float perlin2D(vec2 uv){ +// float surfletSum = 0.f; +// for(int dx = 0; dx <= 1; ++dx) { +// for(int dy = 0; dy <= 1; ++dy) { +// surfletSum += random2(uv); +// } +// } +// return surfletSum; +//} +// +//vec2 random2(vec2 gridPoint){ +// float x = fract(sin(dot(gridPoint, vec2(127.1, 311.7))) * 43758.5453); +// float y = fract(sin(dot(gridPoint, vec2(269.5, 183.3))) * 43758.5453); +// return vec2(x,y); +// +//} + +float random (vec2 p) { + return fract(sin(dot(p.xy, vec2(12.9898, 78.233))) * 43758.5453); +} + +void main() +{ + // Material base color (before shading) +// vec4 diffuseColor = u_Color; +// +// // Calculate the diffuse term for Lambert shading +// float diffuseTerm = dot(normalize(fs_Nor), normalize(fs_LightVec)); +// // Avoid negative lighting values +// // diffuseTerm = clamp(diffuseTerm, 0, 1); +// +// float ambientTerm = 0.2; +// +// float lightIntensity = diffuseTerm + ambientTerm; //Add a small float value to the color multiplier +// //to simulate ambient lighting. This ensures that faces that are not +// //lit by our point light are not completely black. +// +// // Compute final shaded color +// out_Col = vec4(diffuseColor.rgb * lightIntensity, diffuseColor.a); + vec4 color = u_Color * vec4(sin(u_Time * fs_Pos.xyz), 1); + out_Col = color; +} From cc6de5cd0657fc05f16577512b3035afc8703573 Mon Sep 17 00:00:00 2001 From: yuz796 Date: Mon, 12 Sep 2022 17:32:39 -0400 Subject: [PATCH 2/5] new --- .DS_Store | Bin 8196 -> 8196 bytes src/.DS_Store | Bin 8196 -> 8196 bytes src/shaders/.DS_Store | Bin 6148 -> 6148 bytes src/shaders/custom-frag.glsl | 116 ++++++++++++---------------------- src/shaders/custom-vert.glsl | 63 ++++++++++++++++-- src/shaders/customq-vert.glsl | 57 ----------------- src/shaders/customs-frag.glsl | 77 ---------------------- 7 files changed, 100 insertions(+), 213 deletions(-) delete mode 100644 src/shaders/customq-vert.glsl delete mode 100644 src/shaders/customs-frag.glsl diff --git a/.DS_Store b/.DS_Store index e56fb5433af6ec1eebfa3571e001b13163491e2a..269c10a655d72430bec627b3ef081b70f3b031ae 100644 GIT binary patch delta 149 zcmZp1XmOa}&&a(oU^hP__hcS{UiRAt@<6dA(r%OfD0)Vq7+Pqp);vAY%|?GGhi~CSw-RRv=(vgwPDK zP#Q`x76TbLT~!ubl$VpAmkw0JxH(54n^DBv&`?Lg*bwYrGZTn^C%+bS2fJF0RYFoo z8sua#A&@gO^21Gzo7pA4u}uCT=rruS GmIwd<#;9`u diff --git a/src/.DS_Store b/src/.DS_Store index 776e07246567832ec0dabb1c7470f16e5ef00a84..831b03a036eb8f2c86f5197d8b7646f55322708f 100644 GIT binary patch delta 62 zcmZp1XmQxEUP#2y%tA-O$jG=>N1@u%$UsNI#Mo@|FJaTkKZM?4mE8PGn2QGhM3fQi delta 58 xcmZp1XmQxEUWm`!&`?Lg*wC<6N1@uxWU`!~_+)MomB~MZ-eHm2%q{Yh8vyEz5KjOA diff --git a/src/shaders/.DS_Store b/src/shaders/.DS_Store index c46019da2aed4c0470e73c7674fc88d7d3fbc9ea..3d77edf70cc50b7decaa70ff32c0d33206093ac4 100644 GIT binary patch delta 70 zcmZoMXfc=|#>B)qu~2NHo+2a5#(>?7j4YFRSXw7LvLD;5z`@Qkv0>$Ab`E|HpsLM+ Y9N(EI^NTogFaQA~0|U$E2$40+0E?>-!T@BwJ1+enw;T(M1_|7~yuw+ABN* zo`K)SfUMmT8kk^=1oP{+jYG5%Qy-tl{YDh`Beexih_CM|n$DvCBU;=6l3f3{1^>Ow z{fFE^)F~mKd(cxT=+=!)kJScMmjyrh55r1Xc^{5>&av2frB~FF?h`9<%jOHvhuvrF| zE`trMnP=8&JlmOb->iB0lGl|H{uHly8LZ}YrM2=J^X+x{UhQ}OS@Cjt)fJQdUKb;* z`QjmKWajJ-+Kl;1D=5y1F}B^Y=WV~)S_-3?DPmgEKse&YdK4ZPv9_g zm|Elv#aLIObv5pYVXQm#fwK!8rWUO`j5~Z7cW2{HC`Rwj_<@?kgcg188So5b8Q8YN zlGOjx{PTa-$&Wk(o`HYGfGO1KwJK9`wRI^uskH&y4V#GAr54qNoh!$BA*FbqO@(uT XTo6NtsYPli{*Qpt;5*O2k23H9xC7mB diff --git a/src/shaders/custom-frag.glsl b/src/shaders/custom-frag.glsl index a918983..0bac233 100644 --- a/src/shaders/custom-frag.glsl +++ b/src/shaders/custom-frag.glsl @@ -24,95 +24,61 @@ out vec4 out_Col; // This is the final output color that you will see on your // screen for the pixel that is currently being processed. -//float perlin2D(vec2 uv){ -// float surfletSum = 0.f; -// for(int dx = 0; dx <= 1; ++dx) { -// for(int dy = 0; dy <= 1; ++dy) { -// surfletSum += random2(uv); -// } -// } -// return surfletSum; -//} -float random2(vec2 p) { - return fract(sin(dot(p.xy, vec2(1223.9898, 78435.233))) * 43758.5453); -} -float random(vec2 p) -{ - float x = dot(p,vec2(4371.321,-9137.327)); - return 2.0 * fract(sin(x)*17381.94472) - 1.0; -} -//float fbm(vec2 p){ -// float total = 0.f; -// float persistence = 1.0f/ 2.0f; -// float amplitude = persistence; -// for(int i = 0; i < 8; i++){ -// p = p * 2.0; -// amplitude *= 0.5; -// total += random2(p * amplitude); -// } -// return total; -//} -float noise(vec2 p){ - return fract(sin(fract(sin(p.x) * (43.13311)) + p.y) * 31.0011); -} +vec3 random3(vec3 p ) { + float x = fract(sin((dot(p, vec3(127.1,311.7,191.999)))) * 43758.5453); + float y = fract(sin((dot(p, vec3(269.5,183.3,154.645)))) * 43758.5453); + float z = fract(sin((dot(p, vec3(420.6,631.2,183.453)))) * 43758.5453); -float fbm( vec2 p ) -{ - float f = 0.0; - float gat = 0.0; - - for (float octave = 0.; octave < 5.; ++octave) - { - float la = pow(2.0, octave); - float ga = pow(0.5, octave + 1.); - f += ga*noise( la * p ); - gat += ga; - } - - f = f/gat; - - return f; + return vec3(x, y, z); } -float length2(vec2 p){ - return dot(p,p); -} -float worley(vec2 p) { - //Set our distance to infinity - float d = 1e30; - //For the 9 surrounding grid points - for (int xo = -1; xo <= 1; ++xo) { - for (int yo = -1; yo <= 1; ++yo) { - //Floor our vec2 and add an offset to create our point - vec2 tp = floor(p) + vec2(xo, yo); - //Calculate the minimum distance for this grid point - //Mix in the noise value too! - d = min(d, length2(p - tp - noise(tp))); - } +float surflet3D(vec3 p, vec3 gridPoint) { + // Compute the distance between p and the grid point along each axis, and warp it with a + // quintic function so we can smooth our cells + vec3 t2 = abs(p - gridPoint); + + vec3 poweroffive = vec3(t2.x * t2.x * t2.x * t2.x * t2.x, t2.y * t2.y * t2.y * t2.y * t2.y, t2.z * t2.z * t2.z * t2.z * t2.z); + vec3 poweroffour = vec3(t2.x * t2.x * t2.x * t2.x, t2.y * t2.y * t2.y * t2.y , t2.z * t2.z * t2.z * t2.z ); + vec3 powerofthree = vec3(t2.x * t2.x * t2.x, t2.y * t2.y * t2.y, t2.z * t2.z * t2.z); + + + vec3 t = vec3(1.f) - 6.f * poweroffive + 15.f * poweroffour - 10.f * powerofthree; + // Get the random vector for the grid point (assume we wrote a function random2 + // that returns a vec2 in the range [0, 1]) + vec3 gradient = random3(gridPoint) * 2.f - vec3(1.f, 1.f, 1.f); + // Get the vector from the grid point to P + vec3 diff = p - gridPoint; + // Get the value of our height field by dotting grid->P with our gradient + float height = dot(diff, gradient); + // Scale our height field (i.e. reduce it) by our polynomial falloff function + return height * t.x * t.y * t.z; +} +// +float perlin3D(vec3 p) { + float surfletSum = 0.f; + // Iterate over the four integer corners surrounding uv + for(int dx = 0; dx <= 1; ++dx) { + for(int dy = 0; dy <= 1; ++dy) { + for(int dz = 0; dz <= 1; ++dz) { + surfletSum += surflet3D(p, (floor(p) + vec3(dx, dy, dz))); + } } - return 3.0*exp(-4.0*abs(2.5*d - 1.0)); + } + return surfletSum; } -float fworley(vec2 p) { - //Stack noise layers - return sqrt(sqrt(sqrt( - worley(p*5.0 + 0.05*u_Time) * - sqrt(worley(p * 50.0 + 0.12 + -0.1*u_Time)) * - sqrt(sqrt(worley(p * -10.0 + 0.03*u_Time)))))); -} void main() { - vec2 pos = fs_Pos.xy; - float rand = fbm(pos); - - float t = fworley(fs_Col.xy / 1500.0); + vec3 pos = fs_Pos.xyz; + vec3 q = vec3(0.3, 0.4, 0.5); + float rand = perlin3D(pos); float r = cos(0.0001 * u_Time + rand) / 2.f + 0.3 * sin(fs_Pos.x * fs_Pos.y) + 0.7; - float g = sin(0.0010 * u_Time + rand * t) / 3.f + 0.3 * cos(fs_Pos.y) + 0.7; + float g = sin(0.0010 * u_Time + rand) / 3.f + 0.3 * cos(fs_Pos.y) + 0.7; float b = sin(0.0016 * u_Time + rand) / 2.f + 0.4 * sin(fs_Pos.z) + 0.7; vec4 color_final = vec4(r, g, b, 1.0); diff --git a/src/shaders/custom-vert.glsl b/src/shaders/custom-vert.glsl index 858cdcf..721403a 100644 --- a/src/shaders/custom-vert.glsl +++ b/src/shaders/custom-vert.glsl @@ -35,7 +35,49 @@ out vec4 fs_Col; // The color of each vertex. This is implicitly pass const vec4 lightPos = vec4(5, 5, 3, 1); //The position of our virtual light, which is used to compute the shading of //the geometry in the fragment shader. +vec3 random3(vec3 p ) { + float x = fract(sin((dot(p, vec3(127.1,311.7,191.999)))) * 43758.5453); + float y = fract(sin((dot(p, vec3(269.5,183.3,154.645)))) * 43758.5453); + float z = fract(sin((dot(p, vec3(420.6,631.2,183.453)))) * 43758.5453); + return vec3(x, y, z); +} + + +float surflet3D(vec3 p, vec3 gridPoint) { + // Compute the distance between p and the grid point along each axis, and warp it with a + // quintic function so we can smooth our cells + vec3 t2 = abs(p - gridPoint); + + vec3 poweroffive = vec3(t2.x * t2.x * t2.x * t2.x * t2.x, t2.y * t2.y * t2.y * t2.y * t2.y, t2.z * t2.z * t2.z * t2.z * t2.z); + vec3 poweroffour = vec3(t2.x * t2.x * t2.x * t2.x, t2.y * t2.y * t2.y * t2.y , t2.z * t2.z * t2.z * t2.z ); + vec3 powerofthree = vec3(t2.x * t2.x * t2.x, t2.y * t2.y * t2.y, t2.z * t2.z * t2.z); + + + vec3 t = vec3(1.f) - 6.f * poweroffive + 15.f * poweroffour - 10.f * powerofthree; + // Get the random vector for the grid point (assume we wrote a function random2 + // that returns a vec2 in the range [0, 1]) + vec3 gradient = random3(gridPoint) * 2.f - vec3(1.f, 1.f, 1.f); + // Get the vector from the grid point to P + vec3 diff = p - gridPoint; + // Get the value of our height field by dotting grid->P with our gradient + float height = dot(diff, gradient); + // Scale our height field (i.e. reduce it) by our polynomial falloff function + return height * t.x * t.y * t.z; +} +// +float perlin3D(vec3 p) { + float surfletSum = 0.f; + // Iterate over the four integer corners surrounding uv + for(int dx = 0; dx <= 1; ++dx) { + for(int dy = 0; dy <= 1; ++dy) { + for(int dz = 0; dz <= 1; ++dz) { + surfletSum += surflet3D(p, (floor(p) + vec3(dx, dy, dz))); + } + } + } + return surfletSum; +} void main() @@ -48,12 +90,25 @@ void main() // model matrix. This is necessary to ensure the normals remain // perpendicular to the surface after the surface is transformed by // the model matrix. - - - vec4 modelposition = u_Model * vs_Pos; // Temporarily store the transformed vertex positions for use below - + vec4 noisepos = vec4(sin(perlin3D(vs_Pos.xyz) * u_Time * 0.5)); + float noise = perlin3D(vs_Pos.xyz); + //float t = sin(0.02 * float(u_Time)/ 100.f); + float t = 0.8 * sin(0.001 * float(u_Time)); + + vec4 pos = vs_Pos + noise * fs_Nor; + vec4 target_pos = vs_Nor * 0.04f; + + + vec4 modelposition = u_Model * (pos); + modelposition = mix(modelposition, target_pos, t); + //vec4 modelposition = u_Model * vs_Pos; // Temporarily store the transformed vertex positions for use below fs_LightVec = lightPos - modelposition; // Compute the direction in which the light source lies + modelposition += vec4(0.5 * sin(u_Time * 0.14/100.0f + noisepos[0]), + 0.5 * cos(u_Time * 0.24/100.0f), + 0.5 * sin(u_Time * 0.04/100.0f), + 0); + fs_Pos = modelposition; gl_Position = u_ViewProj * modelposition;// gl_Position is a built-in variable of OpenGL which is // used to render the final positions of the geometry's vertices } diff --git a/src/shaders/customq-vert.glsl b/src/shaders/customq-vert.glsl deleted file mode 100644 index 1024283..0000000 --- a/src/shaders/customq-vert.glsl +++ /dev/null @@ -1,57 +0,0 @@ -#version 300 es - -//This is a vertex shader. While it is called a "shader" due to outdated conventions, this file -//is used to apply matrix transformations to the arrays of vertex data passed to it. -//Since this code is run on your GPU, each vertex is transformed simultaneously. -//If it were run on your CPU, each vertex would have to be processed in a FOR loop, one at a time. -//This simultaneous transformation allows your program to run much faster, especially when rendering -//geometry with millions of vertices. - -uniform mat4 u_Model; // The matrix that defines the transformation of the - // object we're rendering. In this assignment, - // this will be the result of traversing your scene graph. - -uniform mat4 u_ModelInvTr; // The inverse transpose of the model matrix. - // This allows us to transform the object's normals properly - // if the object has been non-uniformly scaled. - -uniform mat4 u_ViewProj; // The matrix that defines the camera's transformation. - // We've written a static matrix for you to use for HW2, - // but in HW3 you'll have to generate one yourself -uniform float u_Time; - -in vec4 vs_Pos; // The array of vertex positions passed to the shader - -in vec4 vs_Nor; // The array of vertex normals passed to the shader - -in vec4 vs_Col; // The array of vertex colors passed to the shader. - -out vec4 fs_Pos; -out vec4 fs_Nor; // The array of normals that has been transformed by u_ModelInvTr. This is implicitly passed to the fragment shader. -out vec4 fs_LightVec; // The direction in which our virtual light lies, relative to each vertex. This is implicitly passed to the fragment shader. -out vec4 fs_Col; // The color of each vertex. This is implicitly passed to the fragment shader. - -const vec4 lightPos = vec4(5, 5, 3, 1); //The position of our virtual light, which is used to compute the shading of - //the geometry in the fragment shader. - -void main() -{ - fs_Col = vs_Col; // Pass the vertex colors to the fragment shader for interpolation - - mat3 invTranspose = mat3(u_ModelInvTr); - fs_Nor = vec4(invTranspose * vec3(vs_Nor), 0); // Pass the vertex normals to the fragment shader for interpolation. - // Transform the geometry's normals by the inverse transpose of the - // model matrix. This is necessary to ensure the normals remain - // perpendicular to the surface after the surface is transformed by - // the model matrix. - - - vec4 modelposition = u_Model * vs_Pos; // Temporarily store the transformed vertex positions for use below - - fs_LightVec = lightPos - modelposition; // Compute the direction in which the light source lies - - fs_Pos = u_ViewProj * modelposition; - - gl_Position = u_ViewProj * modelposition;// gl_Position is a built-in variable of OpenGL which is - // used to render the final positions of the geometry's vertices -} diff --git a/src/shaders/customs-frag.glsl b/src/shaders/customs-frag.glsl deleted file mode 100644 index 0eb1b57..0000000 --- a/src/shaders/customs-frag.glsl +++ /dev/null @@ -1,77 +0,0 @@ -#version 300 es - -// This is a fragment shader. If you've opened this file first, please -// open and read lambert.vert.glsl before reading on. -// Unlike the vertex shader, the fragment shader actually does compute -// the shading of geometry. For every pixel in your program's output -// screen, the fragment shader is run for every bit of geometry that -// particular pixel overlaps. By implicitly interpolating the position -// data passed into the fragment shader by the vertex shader, the fragment shader -// can compute what color to apply to its pixel based on things like vertex -// position, light position, and vertex color. -precision highp float; - -uniform vec4 u_Color; // The color with which to render this instance of geometry. - -// These are the interpolated values out of the rasterizer, so you can't know -// their specific values without knowing the vertices that contributed to them -in vec4 fs_Nor; -in vec4 fs_LightVec; -in vec4 fs_Col; - -out vec4 out_Col; // This is the final output color that you will see on your - // screen for the pixel that is currently being processed. - -//float fbm(vec2 p){ -// float total = 0.f; -// float persistence = 1/ 2.0f; -// for(int i = 0; i < 8; i++){ -// float frequency = pow(2,i); -// float amplitude = pow(persistence, i); -// total += perlin2D(p * frequency) * amplitude; -// } -// return total; -//} -// -//float perlin2D(vec2 uv){ -// float surfletSum = 0.f; -// for(int dx = 0; dx <= 1; ++dx) { -// for(int dy = 0; dy <= 1; ++dy) { -// surfletSum += random2(uv); -// } -// } -// return surfletSum; -//} -// -//vec2 random2(vec2 gridPoint){ -// float x = fract(sin(dot(gridPoint, vec2(127.1, 311.7))) * 43758.5453); -// float y = fract(sin(dot(gridPoint, vec2(269.5, 183.3))) * 43758.5453); -// return vec2(x,y); -// -//} - -float random (vec2 p) { - return fract(sin(dot(p.xy, vec2(12.9898, 78.233))) * 43758.5453); -} - -void main() -{ - // Material base color (before shading) -// vec4 diffuseColor = u_Color; -// -// // Calculate the diffuse term for Lambert shading -// float diffuseTerm = dot(normalize(fs_Nor), normalize(fs_LightVec)); -// // Avoid negative lighting values -// // diffuseTerm = clamp(diffuseTerm, 0, 1); -// -// float ambientTerm = 0.2; -// -// float lightIntensity = diffuseTerm + ambientTerm; //Add a small float value to the color multiplier -// //to simulate ambient lighting. This ensures that faces that are not -// //lit by our point light are not completely black. -// -// // Compute final shaded color -// out_Col = vec4(diffuseColor.rgb * lightIntensity, diffuseColor.a); - vec4 color = u_Color * vec4(sin(u_Time * fs_Pos.xyz), 1); - out_Col = color; -} From 1df694d98a2b7af5a1c0778859bd482829ccf39f Mon Sep 17 00:00:00 2001 From: Yuqi Zhang <35361994+yuz796@users.noreply.github.com> Date: Mon, 12 Sep 2022 17:50:27 -0400 Subject: [PATCH 3/5] Update README.md --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index b898cbb..38142f1 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,16 @@ # HW 0: Intro to Javascript and WebGL + + + +## Description +- Implemented the fragment shader that based on Perlin3d +- Implemented the vertex shader uses a trigonometric function to non-uniformly modify cube's vertex positions over time + +## LiveDemo +https://yuz796.github.io/hw00-intro-base/ + +

From 565fc644130f52a210cc8c3cb797442f28775ab8 Mon Sep 17 00:00:00 2001 From: Yuqi Zhang <35361994+yuz796@users.noreply.github.com> Date: Mon, 12 Sep 2022 17:58:14 -0400 Subject: [PATCH 4/5] Add files via upload --- 1.png | Bin 0 -> 39405 bytes 2.png | Bin 0 -> 100390 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 1.png create mode 100644 2.png diff --git a/1.png b/1.png new file mode 100644 index 0000000000000000000000000000000000000000..457ef48dd0b89950472dadd839eb65e84246bc6f GIT binary patch literal 39405 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̶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 literal 0 HcmV?d00001 diff --git a/2.png b/2.png new file mode 100644 index 0000000000000000000000000000000000000000..06276cc657e01d8e45af6e70b1fd87494f52dfb4 GIT binary patch literal 100390 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%0D;CpPrSqWPif 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 ASO5S3 literal 0 HcmV?d00001 From 700c616e407d09eaac7bb29812e03c5f20dda27c Mon Sep 17 00:00:00 2001 From: Yuqi Zhang <35361994+yuz796@users.noreply.github.com> Date: Mon, 12 Sep 2022 17:59:28 -0400 Subject: [PATCH 5/5] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 38142f1..4d249c4 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,15 @@ # HW 0: Intro to Javascript and WebGL - - ## Description - Implemented the fragment shader that based on Perlin3d - Implemented the vertex shader uses a trigonometric function to non-uniformly modify cube's vertex positions over time ## LiveDemo https://yuz796.github.io/hw00-intro-base/ +![](1.png) +![](2.png) +