summaryrefslogtreecommitdiffstats
path: root/multimedia
diff options
context:
space:
mode:
author Vijay Marcel <vijaymarcel@outlook.com>2024-04-29 20:57:31 +0700
committer Willy Sudiarto Raharjo <willysr@slackbuilds.org>2024-05-04 21:44:58 +0700
commit5fbc3b11a3b55d855334502ad1ff4755f152667f (patch)
tree87c414bb012b46dae5c238c878fe26c4d4c75ddc /multimedia
parent9e64d7870d8a9689c374cacde46d29ee423038e4 (diff)
downloadslackbuilds-5fbc3b11a3b55d855334502ad1ff4755f152667f.tar.gz
slackbuilds-5fbc3b11a3b55d855334502ad1ff4755f152667f.tar.xz
multimedia/shine: Updated for version ab5e352_20230101.
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'multimedia')
-rw-r--r--multimedia/shine/fix-bugs.patch12394
-rw-r--r--multimedia/shine/shine.SlackBuild14
-rw-r--r--multimedia/shine/shine.info6
3 files changed, 11 insertions, 12403 deletions
diff --git a/multimedia/shine/fix-bugs.patch b/multimedia/shine/fix-bugs.patch
deleted file mode 100644
index 8e97a12bce..0000000000
--- a/multimedia/shine/fix-bugs.patch
+++ /dev/null
@@ -1,12394 +0,0 @@
-diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
-new file mode 100644
-index 0000000..500a5f6
---- /dev/null
-+++ b/.github/workflows/ci.yml
-@@ -0,0 +1,73 @@
-+name: Build and install
-+
-+on:
-+ push:
-+ branches: [ "main" ]
-+ pull_request:
-+
-+concurrency:
-+ group: ${{ github.workflow }}-${{ github.ref }}
-+ cancel-in-progress: true
-+
-+jobs:
-+ build:
-+ runs-on: ${{ matrix.os }}
-+ strategy:
-+ fail-fast: false
-+ matrix:
-+ os: [macos-latest, ubuntu-latest]
-+ steps:
-+ - uses: actions/checkout@v3
-+ - name: Install required packages on macos
-+ if: matrix.os == 'macos-latest'
-+ run: brew install autoconf automake pkg-config
-+ - name: Install required packages on ubuntu
-+ if: matrix.os == 'ubuntu-latest'
-+ run: sudo apt-get -y install automake autoconf pkg-config
-+ - name: bootstrap
-+ run: ./bootstrap
-+ - name: configure
-+ run: ./configure
-+ - name: make
-+ run: make
-+ - name: make install on macos
-+ if: matrix.os == 'macos-latest'
-+ run: make install
-+ - name: make install on ubuntu
-+ if: matrix.os == 'ubuntu-latest'
-+ run: sudo make install
-+ - name: Test pkg-config setup
-+ run: pkg-config --libs shine
-+
-+ android_build:
-+ runs-on: ubuntu-latest
-+ steps:
-+ - uses: actions/checkout@v3
-+ - uses: nttld/setup-ndk@v1
-+ with:
-+ ndk-version: r25b
-+ local-cache: true
-+ - name: Install autoconf/automake
-+ run: sudo apt-get -y install automake autoconf
-+ - name: bootstrap
-+ run: ./bootstrap
-+ - name: configure
-+ run: ./configure
-+ - name: make android
-+ run: make android
-+
-+ js_build:
-+ runs-on: ubuntu-latest
-+ steps:
-+ - uses: actions/checkout@v3
-+ - uses: mymindstorm/setup-emsdk@v11
-+ - name: JS build
-+ run: |
-+ cd js
-+ make
-+ - uses: actions/setup-node@v3
-+ - name: Run node test
-+ run: |
-+ cd js/test/node
-+ npm install
-+ npm run test
-diff --git a/.gitignore b/.gitignore
-index aa76abe..ffdd74d 100644
---- a/.gitignore
-+++ b/.gitignore
-@@ -2,9 +2,9 @@
- obj
- libs
- compile
--android/lib
--android/include
--android/bin
-+android/
-+js/src/post-node.js
-+!android/*.mk
- shine
- shine.pc
- m4
-@@ -82,6 +82,6 @@ src/lib/reservoir.o
- src/lib/tables.lo
- src/lib/tables.o
- shine-*.tar.gz
--*.bc
-+*.o
- *.mp3
- node_modules
-diff --git a/ChangeLog b/ChangeLog
-index 122dae5..0713282 100644
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,3 +1,8 @@
-+x.y.z ()
-+=====
-+* Be more specific when enabling MIPS assembly routines.
-+* Fix wave header reading on big endian machines (#34)
-+
- 3.1.1 (2017-07-28)
- =====
- * Remove invalid MPEG 2.5 bitrates.
-diff --git a/Makefile.am b/Makefile.am
-index bebf32d..538256c 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -26,14 +26,14 @@ pkgconfigdir = $(libdir)/pkgconfig
- pkgconfig_DATA = shine.pc
-
- android:
-- [ -d android/bin ] || mkdir android/bin
- [ -d android/include ] || mkdir android/include
-- [ -d android/lib ] || mkdir android/lib
-- NDK_PROJECT_PATH=$(shell pwd) ndk-build APP_BUILD_SCRIPT=$(shell pwd)/android/Library.mk
-- cp libs/armeabi/libshine.so android/lib
-+ [ -d android/lib ] || mkdir android/lib
-+ [ -d android/bin ] || mkdir android/bin
- cp src/lib/layer3.h android/include
-+ NDK_PROJECT_PATH=$(shell pwd) ndk-build APP_BUILD_SCRIPT=$(shell pwd)/android/Library.mk
-+ mv libs/* android/lib
- NDK_PROJECT_PATH=$(shell pwd) ndk-build APP_BUILD_SCRIPT=$(shell pwd)/android/Binary.mk
-- cp libs/armeabi/shineenc android/bin
-+ mv libs/* android/bin
-
- clean-local:
- -rm -rf obj libs android/lib android/bin android/include
-diff --git a/README.md b/README.md
-index 1d30cbd..e9b781a 100644
---- a/README.md
-+++ b/README.md
-@@ -2,15 +2,15 @@ Shine: fast fixed-point mp3 encoding
- ====================================
-
- [shine](https://github.com/savonet/shine) is a blazing fast mp3 encoding library implemented in
--fixed-point arithmetic. The library can thus be used to performe super fast mp3 encoding on architectures
--without a FPU, such as `armel`, etc.. It is also, however, also super fast on architectures with a FPU!
-+fixed-point arithmetic. The library can thus be used to perform super fast mp3 encoding on architectures
-+without a FPU, such as `armel`, etc.. It is also super fast on architectures with a FPU!
-
- How to use?
- -----------
-
- The encoding API should be quite straight forward:
-
--```
-+```c
- #include <shine/layer3.h>
-
- (...)
-@@ -42,46 +42,47 @@ shine_close(s);
- How fast is it?
- ---------------
-
--On a [Raspberry Pi](http://www.raspberrypi.org/) (`ARM`, `FPU`):
-+On a macbook pro (`arm64`/M1 pro, `FPU`, December 30, 2022):
-
--Lame, `3m06s`, `1.8x` realtime:
--```
--pi@raspberrypi ~ $ lame bla.wav bla.mp3
--LAME 3.99.5 32bits (http://lame.sf.net)
-+Lame, `88.7x` realtime:
-+```bash
-+LAME 3.100 64bits (http://lame.sf.net)
- Using polyphase lowpass filter, transition band: 16538 Hz - 17071 Hz
--Encoding bla.wav to bla.mp3
-+Encoding /tmp/decoded.wav to /tmp/lame.mp3
- Encoding as 44.1 kHz j-stereo MPEG-1 Layer III (11x) 128 kbps qval=3
- Frame | CPU time/estim | REAL time/estim | play/CPU | ETA
-- 12987/12987 (100%)| 3:06/ 3:06| 3:06/ 3:06| 1.8216x| 0:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-+ 12203/12203 (100%)| 0:03/ 0:03| 0:04/ 0:04| 88.773x| 0:00
-+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- kbps LR MS % long switch short %
-- 128.0 0.1 99.9 89.1 6.1 4.9
-+ 128.0 32.6 67.4 96.4 1.9 1.7
- Writing LAME Tag...done
--ReplayGain: -10.5dB
-+ReplayGain: -9.3dB
-+lame -b 128 /tmp/decoded.wav /tmp/lame.mp3 3.55s user 0.05s system 99% cpu 3.609 total
- ```
-
--Shine, `1m35s`, `3.6x` realtime:
-+Shine, `318.0x` realtime:
- ```
--pi@raspberrypi ~ $ shineenc bla.wav bla.mp3
- shineenc (Liquidsoap version)
--WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:39
-+WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:18
- MPEG-I layer III, stereo Psychoacoustic Model: Shine
- Bitrate: 128 kbps De-emphasis: none Original
--Encoding "bla.wav" to "bla.mp3"
--Finished in 00:01:35 (3.6x realtime)
-+Encoding "/tmp/bla.wav" to "/tmp/shine.mp3"
-+Finished in 00:00:01 (318.0x realtime)
- ```
-
--Now, on a mac airbook (`x86_64`, `FPU`):
-+### ⚠ The following are outdated tests ⚠
-
--Lame, `15s`, `22x` realtime:
--```
--toots@zulu tmp % lame bla.wav bla.mp3
--LAME 3.99.5 64bits (http://lame.sf.net)
-+On a [Raspberry Pi](http://www.raspberrypi.org/) (`ARM`, `FPU`):
-+
-+Lame, `1.8x` realtime:
-+```bash
-+pi@raspberrypi ~ $ lame bla.wav bla.mp3
-+LAME 3.99.5 32bits (http://lame.sf.net)
- Using polyphase lowpass filter, transition band: 16538 Hz - 17071 Hz
- Encoding bla.wav to bla.mp3
- Encoding as 44.1 kHz j-stereo MPEG-1 Layer III (11x) 128 kbps qval=3
- Frame | CPU time/estim | REAL time/estim | play/CPU | ETA
-- 12987/12987 (100%)| 0:15/ 0:15| 0:17/ 0:17| 22.087x| 0:00
-+ 12987/12987 (100%)| 3:06/ 3:06| 3:06/ 3:06| 1.8216x| 0:00
- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- kbps LR MS % long switch short %
- 128.0 0.1 99.9 89.1 6.1 4.9
-@@ -89,20 +90,21 @@ Writing LAME Tag...done
- ReplayGain: -10.5dB
- ```
-
--Shine, `9s`, `37.7x` realtime:
--```
-+Shine, `3.6x` realtime:
-+```bash
-+pi@raspberrypi ~ $ shineenc bla.wav bla.mp3
- shineenc (Liquidsoap version)
- WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:39
- MPEG-I layer III, stereo Psychoacoustic Model: Shine
- Bitrate: 128 kbps De-emphasis: none Original
--Encoding "/tmp/bla.wav" to "/tmp/bla.mp3"
--Finished in 00:00:09 (37.7x realtime)
-+Encoding "bla.wav" to "bla.mp3"
-+Finished in 00:01:35 (3.6x realtime)
- ```
-
- On a Google Nexus 5 (`ARM`, `FPU`):
-
- Shine, `14s`, `24.2x` realtime:
--```
-+```bash
- u0_a65@hammerhead:/mnt/sdcard $ shineenc bla.wav bla.mp3
- shineenc (Liquidsoap version)
- WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:39
-@@ -128,7 +130,7 @@ A bit of history
- This code was dug out from the dusty crates of those times before internet
- and github. It apparently was created by Gabriel Bouvigne sometime around
- the end of the 20th century. The encoder was converted circa 2001 by Pete
--Everett to fixed-point arithmetic for the RISC OS. Latest we know, Patrick
-+Everett to fixed-point arithmetic for the RISC OS. Last we know, Patrick
- Roberts had worked on the code to make it multi-platform and more library
- oriented. That was around 2006.
-
-diff --git a/configure.ac b/configure.ac
-index 87a5f68..6d6cb23 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1,6 +1,7 @@
--AC_INIT([shine],[3.1.0],[savonet-users@lists.sourceforge.net])
-+AC_INIT([shine],[3.1.1],[toots@rastageeks.org])
- AM_INIT_AUTOMAKE([subdir-objects])
- LT_INIT
- AC_CONFIG_MACRO_DIR([m4])
- AC_C_BIGENDIAN([CFLAGS="$CFLAGS -DSHINE_BIG_ENDIAN"])
-+AC_CHECK_HEADER([byteswap.h],[CFLAGS="$CFLAGS -DSHINE_HAVE_BSWAP_H"])
- AC_OUTPUT([Makefile shine.pc])
-diff --git a/js/.npmignore b/js/.npmignore
-new file mode 100644
-index 0000000..f1b84a5
---- /dev/null
-+++ b/js/.npmignore
-@@ -0,0 +1,4 @@
-+test/
-+src/
-+Makefile
-+.*
-diff --git a/js/.prettierignore b/js/.prettierignore
-new file mode 100644
-index 0000000..1b64941
---- /dev/null
-+++ b/js/.prettierignore
-@@ -0,0 +1,5 @@
-+.next/
-+dist/
-+stubs/
-+public/audio
-+__ENV.js
-diff --git a/js/.prettierrc b/js/.prettierrc
-new file mode 100644
-index 0000000..a995c49
---- /dev/null
-+++ b/js/.prettierrc
-@@ -0,0 +1,12 @@
-+{
-+ "singleQuote": false,
-+ "quoteProps": "as-needed",
-+ "arrowParens": "avoid",
-+ "tabWidth": 2,
-+ "trailingComma": "es5",
-+ "semi": true,
-+ "jsxSingleQuote": true,
-+ "bracketSameLine": false,
-+ "printWidth": 120,
-+ "parser": "typescript"
-+}
-diff --git a/js/Makefile b/js/Makefile
-index 465ffde..3781b6e 100644
---- a/js/Makefile
-+++ b/js/Makefile
-@@ -1,24 +1,37 @@
- # Emscriptem compilation
-
- EMCC:=emcc
--EXPORTED_FUNCTIONS:='["_shine_check_config", "_shine_js_init",\
-+EXPORTED_FUNCTIONS:='["_malloc", "_free", "_shine_check_config", "_shine_js_init",\
-+ "_shine_js_int16_len", "_shine_js_ptr_len", \
- "_shine_samples_per_pass", "_shine_encode_buffer",\
-- "_shine_flush", "_shine_close"]'
-+ "_shine_flush", "_shine_close"]'
- CFLAGS:=-O3
--LINKFLAGS:=-s EXPORTED_FUNCTIONS=$(EXPORTED_FUNCTIONS) --memory-init-file 0 $(CFLAGS)
-+LINKFLAGS:=-s EXPORTED_FUNCTIONS=$(EXPORTED_FUNCTIONS) -s SINGLE_FILE=1 -s EXPORTED_RUNTIME_METHODS=setValue,getValue --memory-init-file 0 $(CFLAGS)
-+WEB_LINKFLAGS:=$(LINKFLAGS) -s ENVIRONMENT='web' -s EXPORT_NAME='createModule' -s USE_ES6_IMPORT_META=0
-
- C_FILES:=$(wildcard ../src/lib/*.c) src/wrapper.c
- HEADER_FILES:=$(wildcard ../src/lib/*.h)
- SOURCES:=$(C_FILES) $(HEADER_FILES)
--OBJECTS:=$(C_FILES:%.c=%.bc)
-+OBJECTS:=$(C_FILES:%.c=%.o)
-
--all: dist/libshine.js
-+all: dist/libshine_node.js dist/libshine_browser.js
-
--dist/libshine.js: $(SOURCES) $(OBJECTS) src/pre.js src/post.js
-- $(EMCC) $(LINKFLAGS) --pre-js src/pre.js --post-js src/post.js $(OBJECTS) -o $@
-+src/post-node.js: src/libshine_class.js src/libshine_node_wrapper.js
-+ rm -f src/post-node.js
-+ cat src/libshine_class.js src/libshine_node_wrapper.js > src/post-node.js
-
--%.bc: %.c
-+dist/libshine_node.js: $(SOURCES) $(OBJECTS) src/post-node.js
-+ $(EMCC) $(LINKFLAGS) --post-js src/post-node.js $(OBJECTS) -o dist/libshine_node.js
-+
-+dist/libshine_browser_stubs.js: $(SOURCES) $(OBJECTS)
-+ $(EMCC) $(WEB_LINKFLAGS) $(OBJECTS) -o dist/libshine_browser_stubs.mjs
-+ mv dist/libshine_browser_stubs.mjs dist/libshine_browser_stubs.js
-+
-+dist/libshine_browser.js: src/libshine_class.js src/libshine_browser_wrapper.js dist/libshine_browser_stubs.js
-+ cat src/libshine_class.js src/libshine_browser_wrapper.js > dist/libshine_browser.js
-+
-+%.o: %.c
- $(EMCC) $(CFLAGS) -I../src/lib -c $< -o $@
-
- clean:
-- rm -f *.bc ../src/lib/*.bc
-+ rm -rf *.o ../src/lib/*.o dist/libshine*js
-diff --git a/js/README.md b/js/README.md
-index 49ca3f6..d521d4b 100644
---- a/js/README.md
-+++ b/js/README.md
-@@ -1,112 +1,156 @@
- Shine encoder library for Javascript
- ====================================
-
--This directory contains a build of shine for Javascript using
--[kripken/emscripten](https://github.com/kripken/emscripten) and
--located in `dist/libshine.js`
-+This package contains a build of the [shine](https://github.com/toots/shine) fixed-point
-+mp3 encoder compiled for Javascript and wasm using [emscripten-core/emscripten](https://github.com/emscripten-core/emscripten).
-+
-+Install
-+-------
-+
-+Using `npm`:
-+
-+```shell
-+npm install @toots/shine.js
-+```
-+
-+Using `yarn`:
-+
-+```shell
-+yarn add @toots/shine.js
-+```
-+
-+Using `pnpm`:
-+
-+```shell
-+pnpm install @toots/shine.js
-+```
-+
-+In a HTML page:
-+
-+When using `webpack`, the package should point to the correct
-+`libshine_browser.js` file automatically.
-+
-+When using directly as a script, you can load the `libshine_node.js`
-+file as:
-+
-+```html
-+<script src="libshine_node.js"></script>
-+```
-+
-+See: [test/browser](https://github.com/toots/shine/tree/main/js/test/browser) for an example.
-
- How to use?
- -----------
-
- The encoding API should be quite straight forward:
-
--```
--shine = new Shine({
-- samplerate: 44100,
-- bitrate: 128,
-- channels: 2,
-- mode: Shine.STEREO
--});
-+```js
-+import { Shine, StereoModel } from "@toots/shine.js";
-+
-+const exec = async () => {
-+ await Shine.initialized;
-+
-+ shine = new Shine({
-+ samplerate: 44100,
-+ bitrate: 128,
-+ channels: 2,
-+ stereoModel: StereoModel.STEREO
-+ });
-
--// All the magic happens here
--while (..) {
-- // data here is an array of channels.
-- // Channels must have the same number of samples
-- // and both be either Int16Array or Float32Array.
-- encoded = shine.encode(data);
-+ // All the magic happens here
-+ while (..) {
-+ // data here is an array of channels.
-+ // Channels must have the same number of samples
-+ // and both be either Int16Array or Float32Array.
-+ encoded = shine.encode(data);
-+ ...
-+ }
-+
-+ // Close and get remaining data.
-+ flushed = shine.close();
-+
- ...
- }
-
--// Close and get remaining data.
--flushed = shine.close();
--...
-+exec();
- ```
-
- How fast is it?
- ---------------
-
--You can run the test suite located in `test/`. As of now (26/07/2014), only firefox
--and seems to show performances decent enough for real-time encoding while Google Chrome
--can encode between 1X and 2X.
-+You can run the test suite located in `test/`. Encoding rate above `1X` means that
-+the browser should be suitable for real-time encoding.
-+
-+Results, as of December 30, 2022:
-
--Chrome:
-+Chrome (`108.0.5359.124`):
- ```
- Executing encoding test
- Got WAV file.
- Encoding..
- Done encoding.
- File duration: 5.57 seconds
--Encoding time: 5.18 seconds
--Encoding rate: 1.08X
-+Encoding time: 0.08 seconds
-+Encoding rate: 67.96X
-
- Executing rounds test
- Encoding 50 buffers of 4096 samples
- Done encoding
- Total duration: 4.64
--Encoding time: 2.73
--Encoding rate: 1.70X
-+Encoding time: 0.03
-+Encoding rate: 160.00X
- ```
-
--Firefox:
-+Firefox (`108.0.1`):
- ```
- Executing encoding test
- Got WAV file.
- Encoding..
- Done encoding.
- File duration: 5.57 seconds
--Encoding time: 1.48 seconds
--Encoding rate: 3.76X
-+Encoding time: 0.06 seconds
-+Encoding rate: 99.52X
-
- Executing rounds test
- Encoding 50 buffers of 4096 samples
- Done encoding
- Total duration: 4.64
--Encoding time: 0.98
--Encoding rate: 4.72X
-+Encoding time: 0.03
-+Encoding rate: 178.46X
- ```
-
--Safari:
-+Safari (`16.2`):
- ```
- Executing encoding test
- Got WAV file.
- Encoding..
- Done encoding.
- File duration: 5.57 seconds
--Encoding time: 11.77 seconds
--Encoding rate: 0.47X
-+Encoding time: 0.12 seconds
-+Encoding rate: 46.44X
-
- Executing rounds test
- Encoding 50 buffers of 4096 samples
- Done encoding
- Total duration: 4.64
--Encoding time: 6.93
--Encoding rate: 0.67X
-+Encoding time: 0.02
-+Encoding rate: 210.91X
- ```
-
--NodeJS, v0.10.24:
-+NodeJS (`v19.3.0`):
- ```
- Executing encoding test
- Got WAV file.
- Encoding..
- Done encoding.
- File duration: 5.57 seconds
--Encoding time: 22.57 seconds
--Encoding rate: 0.25X
-+Encoding time: 0.06 seconds
-+Encoding rate: 94.45X
-
- Executing rounds test
- Encoding 50 buffers of 4096 samples
- Done encoding
- Total duration: 4.64
--Encoding time: 11.46
--Encoding rate: 0.40X
-+Encoding time: 0.03
-+Encoding rate: 178.46X
- ```
-diff --git a/js/dist/libshine.js b/js/dist/libshine.js
-deleted file mode 100644
-index c44f119..0000000
---- a/js/dist/libshine.js
-+++ /dev/null
-@@ -1,16 +0,0 @@
--var Shine=(function(){var context={};return(function(){var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=console.log;if(!Module["printErr"])Module["printErr"]=console.warn;var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function shell_read(){throw"no read() available"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function shell_print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function shell_printErr(x){console.warn(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}if(!Module["quit"]){Module["quit"]=(function(status,toThrow){throw toThrow})}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var Runtime={setTempRet0:(function(value){tempRet0=value;return value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i<Runtime.functionPointers.length;i++){if(!Runtime.functionPointers[i]){Runtime.functionPointers[i]=func;return 2*(1+i)}}throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}),removeFunction:(function(index){Runtime.functionPointers[(index-2)/2]=null}),warnOnce:(function(text){if(!Runtime.warnOnce.shown)Runtime.warnOnce.shown={};if(!Runtime.warnOnce.shown[text]){Runtime.warnOnce.shown[text]=1;Module.printErr(text)}}),funcWrappers:{},getFuncWrapper:(function(func,sig){assert(sig);if(!Runtime.funcWrappers[sig]){Runtime.funcWrappers[sig]={}}var sigCache=Runtime.funcWrappers[sig];if(!sigCache[func]){if(sig.length===1){sigCache[func]=function dynCall_wrapper(){return Runtime.dynCall(sig,func)}}else if(sig.length===2){sigCache[func]=function dynCall_wrapper(arg){return Runtime.dynCall(sig,func,[arg])}}else{sigCache[func]=function dynCall_wrapper(){return Runtime.dynCall(sig,func,Array.prototype.slice.call(arguments))}}}return sigCache[func]}),getCompilerSetting:(function(name){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"}),stackAlloc:(function(size){var ret=STACKTOP;STACKTOP=STACKTOP+size|0;STACKTOP=STACKTOP+15&-16;return ret}),staticAlloc:(function(size){var ret=STATICTOP;STATICTOP=STATICTOP+size|0;STATICTOP=STATICTOP+15&-16;return ret}),dynamicAlloc:(function(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=(ret+size+15|0)&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=Runtime.stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=Runtime.stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);if(returnType==="string")ret=Pointer_stringify(ret);if(stack!==0){if(opts&&opts.async){EmterpreterAsync.asyncFinalizers.push((function(){Runtime.stackRestore(stack)}));return}Runtime.stackRestore(stack)}return ret};var sourceRegex=/^function\s*[a-zA-Z$_0-9]*\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;function parseJSFunc(jsfunc){var parsed=jsfunc.toString().match(sourceRegex).slice(1);return{arguments:parsed[0],body:parsed[1],returnValue:parsed[2]}}var JSsource=null;function ensureJSsource(){if(!JSsource){JSsource={};for(var fun in JSfuncs){if(JSfuncs.hasOwnProperty(fun)){JSsource[fun]=parseJSFunc(JSfuncs[fun])}}}}cwrap=function cwrap(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident);var numericArgs=argTypes.every((function(type){return type==="number"}));var numericRet=returnType!=="string";if(numericRet&&numericArgs){return cfunc}var argNames=argTypes.map((function(x,i){return"$"+i}));var funcstr="(function("+argNames.join(",")+") {";var nargs=argTypes.length;if(!numericArgs){ensureJSsource();funcstr+="var stack = "+JSsource["stackSave"].body+";";for(var i=0;i<nargs;i++){var arg=argNames[i],type=argTypes[i];if(type==="number")continue;var convertCode=JSsource[type+"ToC"];funcstr+="var "+convertCode.arguments+" = "+arg+";";funcstr+=convertCode.body+";";funcstr+=arg+"=("+convertCode.returnValue+");"}}var cfuncname=parseJSFunc((function(){return cfunc})).returnValue;funcstr+="var ret = "+cfuncname+"("+argNames.join(",")+");";if(!numericRet){var strgfy=parseJSFunc((function(){return Pointer_stringify})).returnValue;funcstr+="ret = "+strgfy+"(ret);"}if(!numericArgs){ensureJSsource();funcstr+=JSsource["stackRestore"].body.replace("()","(stack)")+";"}funcstr+="return ret})";return eval(funcstr)}}))();Module["ccall"]=ccall;Module["cwrap"]=cwrap;function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];if(typeof curr==="function"){curr=Runtime.getFunctionIndex(curr)}type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=Runtime.getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}Module["allocate"]=allocate;function getMemory(size){if(!staticSealed)return Runtime.staticAlloc(size);if(!runtimeInitialized)return Runtime.dynamicAlloc(size);return _malloc(size)}Module["getMemory"]=getMemory;function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){var __cxa_demangle_func=Module["___cxa_demangle"]||Module["__cxa_demangle"];if(__cxa_demangle_func){try{var s=func.substr(1);var len=lengthBytesUTF8(s)+1;var buf=_malloc(len);stringToUTF8(s,buf,len);var status=_malloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}return func}Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}Module["stackTrace"]=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)Module.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{{buffer=new ArrayBuffer(TOTAL_MEMORY)}}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY}HEAP32[0]=1668509029;HEAP16[1]=25459;if(HEAPU8[2]!==115||HEAPU8[3]!==99)throw"Runtime error: expected the system to be little-endian!";Module["HEAP"]=HEAP;Module["buffer"]=buffer;Module["HEAP8"]=HEAP8;Module["HEAP16"]=HEAP16;Module["HEAP32"]=HEAP32;Module["HEAPU8"]=HEAPU8;Module["HEAPU16"]=HEAPU16;Module["HEAPU32"]=HEAPU32;Module["HEAPF32"]=HEAPF32;Module["HEAPF64"]=HEAPF64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var lastChar,end;if(dontAddNull){end=buffer+lengthBytesUTF8(string);lastChar=HEAP8[end]}stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end]=lastChar}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];if(!Math["trunc"])Math["trunc"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math["trunc"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var ASM_CONSTS=[];STATIC_BASE=Runtime.GLOBAL_BASE;STATICTOP=STATIC_BASE+10560;__ATINIT__.push();allocate([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,104,18,0,0,108,29,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,112,18,0,0,112,29,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,130,18,0,0,121,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,148,18,0,0,130,29,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,180,18,0,0,146,29,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,212,18,0,0,162,29,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,28,19,0,0,198,29,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,100,19,0,0,234,29,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,172,19,0,0,14,30,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,44,20,0,0,78,30,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,172,20,0,0,142,30,0,0,16,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,44,21,0,0,206,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,44,23,0,0,206,31,0,0,16,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,2,0,0,0,3,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,3,0,0,0,7,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,4,0,0,0,15,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,6,0,0,0,63,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,8,0,0,0,255,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,10,0,0,0,255,3,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,13,0,0,0,255,31,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,4,0,0,0,15,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,5,0,0,0,31,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,6,0,0,0,63,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,7,0,0,0,127,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,8,0,0,0,255,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,9,0,0,0,255,1,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,11,0,0,0,255,7,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,13,0,0,0,255,31,0,0,44,27,0,0,206,33,0,0,1,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,44,29,0,0,206,34,0,0,1,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,76,29,0,0,222,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,7,0,0,0,6,0,0,0,7,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,6,0,0,0,11,0,0,0,16,0,0,0,21,0,0,0,1,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,68,172,0,0,128,187,0,0,0,125,0,0,34,86,0,0,192,93,0,0,128,62,0,0,17,43,0,0,224,46,0,0,64,31,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,8,0,0,0,255,255,255,255,8,0,0,0,32,0,0,0,16,0,0,0,255,255,255,255,16,0,0,0,40,0,0,0,24,0,0,0,255,255,255,255,24,0,0,0,48,0,0,0,32,0,0,0,255,255,255,255,32,0,0,0,56,0,0,0,40,0,0,0,255,255,255,255,40,0,0,0,64,0,0,0,48,0,0,0,255,255,255,255,48,0,0,0,80,0,0,0,56,0,0,0,255,255,255,255,56,0,0,0,96,0,0,0,64,0,0,0,255,255,255,255,64,0,0,0,112,0,0,0,255,255,255,255,255,255,255,255,80,0,0,0,128,0,0,0,255,255,255,255,255,255,255,255,96,0,0,0,160,0,0,0,255,255,255,255,255,255,255,255,112,0,0,0,192,0,0,0,255,255,255,255,255,255,255,255,128,0,0,0,224,0,0,0,255,255,255,255,255,255,255,255,144,0,0,0,0,1,0,0,255,255,255,255,255,255,255,255,160,0,0,0,64,1,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,4,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,52,0,0,0,62,0,0,0,74,0,0,0,90,0,0,0,110,0,0,0,134,0,0,0,162,0,0,0,196,0,0,0,238,0,0,0,32,1,0,0,86,1,0,0,162,1,0,0,64,2,0,0,0,0,0,0,4,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,42,0,0,0,50,0,0,0,60,0,0,0,72,0,0,0,88,0,0,0,106,0,0,0,128,0,0,0,156,0,0,0,190,0,0,0,230,0,0,0,20,1,0,0,74,1,0,0,128,1,0,0,64,2,0,0,0,0,0,0,4,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,82,0,0,0,102,0,0,0,126,0,0,0,156,0,0,0,194,0,0,0,240,0,0,0,40,1,0,0,108,1,0,0,192,1,0,0,38,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,28,1,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,114,0,0,0,136,0,0,0,162,0,0,0,194,0,0,0,232,0,0,0,22,1,0,0,74,1,0,0,138,1,0,0,208,1,0,0,28,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,45,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,248,0,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,28,1,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,28,1,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,12,0,0,0,24,0,0,0,36,0,0,0,48,0,0,0,60,0,0,0,72,0,0,0,88,0,0,0,108,0,0,0,132,0,0,0,160,0,0,0,192,0,0,0,232,0,0,0,24,1,0,0,80,1,0,0,144,1,0,0,220,1,0,0,54,2,0,0,56,2,0,0,58,2,0,0,60,2,0,0,62,2,0,0,64,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,247,255,255,157,247,255,255,157,247,255,255,157,247,255,255,157,247,255,255,157,247,255,255,58,239,255,255,58,239,255,255,58,239,255,255,58,239,255,255,214,230,255,255,214,230,255,255,214,230,255,255,115,222,255,255,115,222,255,255,15,214,255,255,15,214,255,255,172,205,255,255,72,197,255,255,229,188,255,255,229,188,255,255,129,180,255,255,30,172,255,255,186,163,255,255,87,155,255,255,144,138,255,255,44,130,255,255,101,113,255,255,2,105,255,255,59,88,255,255,215,79,255,255,16,63,255,255,73,46,255,255,31,21,255,255,88,4,255,255,145,243,254,255,103,218,254,255,60,193,254,255,18,168,254,255,75,151,254,255,32,126,254,255,146,92,254,255,104,67,254,255,61,42,254,255,175,8,254,255,133,239,253,255,91,214,253,255,205,180,253,255,162,155,253,255,20,122,253,255,134,88,253,255,92,63,253,255,49,38,253,255,163,4,253,255,221,243,252,255,178,218,252,255,136,193,252,255,163,87,3,0,106,104,3,0,49,121,3,0,148,129,3,0,248,137,3,0,91,146,3,0,91,146,3,0,248,137,3,0,148,129,3,0,205,112,3,0,6,96,3,0,120,62,3,0,234,28,3,0,249,242,2,0,164,192,2,0,79,142,2,0,51,75,2,0,180,255,1,0,209,171,1,0,139,79,1,0,126,226,0,0,112,117,0,0,157,247,255,255,101,113,255,255,202,226,254,255,104,67,254,255,162,155,253,255,121,235,252,255,236,50,252,255,153,105,251,255,226,151,250,255,199,189,249,255,230,210,248,255,4,232,247,255,92,236,246,255,80,232,245,255,68,228,244,255,212,215,243,255,1,195,242,255,203,165,241,255,49,128,240,255,250,98,239,255,96,61,238,255,198,23,237,255,45,242,235,255,147,204,234,255,92,175,233,255,137,154,232,255,182,133,231,255,71,121,230,255,59,117,229,255,246,129,228,255,120,159,227,255,93,197,226,255,109,4,226,255,68,84,225,255,69,189,224,255,113,63,224,255,199,218,223,255,171,151,223,255,186,109,223,255,86,101,223,255,129,126,223,255,157,193,223,255,86,209,31,0,187,66,31,0,203,129,30,0,233,150,29,0,179,121,28,0,39,42,27,0,171,176,25,0,118,252,23,0,235,21,22,0,13,253,19,0,117,169,17,0,236,43,15,0,72,107,12,0,235,111,9,0,156,74,6,0,50,226,2,0,215,79,255,255,195,130,251,255,247,122,247,255,57,73,243,255,38,229,238,255,190,78,234,255,101,142,229,255,27,164,224,255,66,152,219,255,120,98,214,255,132,19,209,255,2,163,203,255,85,25,198,255,69,135,192,255,10,220,186,255,207,48,181,255,49,125,175,255,147,201,169,255,188,38,164,255,72,140,158,255,255,10,153,255,224,162,147,255,179,100,142,255,19,72,137,255,44,102,132,255,254,190,127,255,135,82,123,255,144,49,119,255,124,100,115,255,174,243,111,255,39,223,108,255,16,64,106,255,163,5,104,255,11,73,102,255,170,18,101,255,129,98,100,255,86,73,100,255,42,199,100,255,97,228,101,255,93,169,103,255,130,30,106,255,52,76,109,255,115,50,113,255,5,226,117,255,135,82,123,255,93,140,129,255,78,160,136,255,245,133,144,255,73,186,102,0,9,24,93,0,17,164,82,0,56,69,71,0,226,3,59,0,13,224,45,0,86,209,31,0,133,232,16,0,210,20,1,0,6,103,240,255,187,214,222,255,85,108,204,255,213,39,185,255,1,26,165,255,118,58,144,255,151,145,122,255,200,39,100,255,109,5,77,255,232,50,53,255,58,176,28,255,142,150,3,255,227,229,233,254,156,166,207,254,130,233,180,254,90,191,153,254,37,40,126,254,169,52,98,254,18,254,69,254,251,123,41,254,243,207,12,254,92,2,240,253,255,35,211,253,63,61,182,253,226,94,153,253,19,162,124,253,209,6,96,253,172,174,67,253,163,153,39,253,67,233,11,253,141,157,240,252,171,207,213,252,1,136,187,252,86,215,161,252,212,214,136,252,223,142,112,252,218,7,89,252,239,90,66,252,130,144,44,252,247,176,23,252,120,213,3,252,105,6,241,251,44,76,223,251,38,175,206,251,29,64,191,251,117,7,177,251,145,13,164,251,214,90,152,251,165,247,141,251,0,228,132,251,174,48,125,251,173,221,118,251,255,234,113,251,7,97,110,251,197,63,108,251,200,120,148,4,59,192,147,4,249,158,145,4,1,21,142,4,83,34,137,4,82,207,130,4,0,28,123,4,91,8,114,4,42,165,103,4,111,242,91,4,139,248,78,4,227,191,64,4,218,80,49,4,212,179,32,4,151,249,14,4,136,42,252,3,9,79,232,3,126,111,211,3,17,165,189,3,38,248,166,3,33,113,143,3,44,41,119,3,170,40,94,3,255,119,68,3,85,48,42,3,115,98,15,3,189,22,244,2,93,102,216,2,84,81,188,2,47,249,159,2,237,93,131,2,30,161,102,2,193,194,73,2,1,220,44,2,164,253,15,2,13,48,243,1,5,132,214,1,238,1,186,1,87,203,157,1,219,215,129,1,166,64,102,1,126,22,75,1,100,89,48,1,29,26,22,1,114,105,252,0,198,79,227,0,24,205,202,0,147,250,178,0,56,216,155,0,105,110,133,0,138,197,111,0,255,229,90,0,43,216,70,0,171,147,51,0,69,41,33,0,250,152,15,0,46,235,254,255,123,23,239,255,170,46,224,255,243,31,210,255,30,252,196,255,200,186,184,255,239,91,173,255,247,231,162,255,73,186,102,0,11,122,111,0,178,95,119,0,163,115,126,0,121,173,132,0,251,29,138,0,141,205,142,0,204,179,146,0,126,225,149,0,163,86,152,0,159,27,154,0,214,56,155,0,170,182,155,0,127,157,155,0,86,237,154,0,245,182,153,0,93,250,151,0,240,191,149,0,217,32,147,0,82,12,144,0,132,155,140,0,112,206,136,0,121,173,132,0,2,65,128,0,212,153,123,0,237,183,118,0,77,155,113,0,32,93,108,0,1,245,102,0,184,115,97,0,68,217,91,0,109,54,86,0,207,130,80,0,49,207,74,0,246,35,69,0,187,120,63,0,171,230,57,0,254,92,52,0,124,236,46,0,136,157,41,0,190,103,36,0,229,91,31,0,155,113,26,0,66,177,21,0,218,26,17,0,199,182,12,0,9,133,8,0,61,125,4,0,41,176,0,0,206,29,253,255,100,181,249,255,21,144,246,255,184,148,243,255,20,212,240,255,139,86,238,255,243,2,236,255,21,234,233,255,138,3,232,255,85,79,230,255,217,213,228,255,77,134,227,255,23,105,226,255,53,126,225,255,69,189,224,255,86,209,31,0,99,62,32,0,127,129,32,0,170,154,32,0,70,146,32,0,85,104,32,0,57,37,32,0,143,192,31,0,187,66,31,0,188,171,30,0,147,251,29,0,163,58,29,0,136,96,28,0,10,126,27,0,197,138,26,0,185,134,25,0,74,122,24,0,119,101,23,0,164,80,22,0,109,51,21,0,211,13,20,0,58,232,18,0,160,194,17,0,6,157,16,0,207,127,15,0,53,90,14,0,255,60,13,0,44,40,12,0,188,27,11,0,176,23,10,0,164,19,9,0,252,23,8,0,26,45,7,0,57,66,6,0,30,104,5,0,103,150,4,0,20,205,3,0,135,20,3,0,94,100,2,0,152,188,1,0,54,29,1,0,155,142,0,0,99,8,0,0,144,138,255,255,130,29,255,255,117,176,254,255,47,84,254,255,76,0,254,255,205,180,253,255,177,113,253,255,92,63,253,255,7,13,253,255,22,227,252,255,136,193,252,255,250,159,252,255,51,143,252,255,108,126,252,255,8,118,252,255,165,109,252,255,165,109,252,255,8,118,252,255,108,126,252,255,207,134,252,255,150,151,252,255,163,87,3,0,120,62,3,0,78,37,3,0,35,12,3,0,93,251,2,0,207,217,2,0,164,192,2,0,122,167,2,0,236,133,2,0,94,100,2,0,51,75,2,0,165,41,2,0,123,16,2,0,81,247,1,0,195,213,1,0,152,188,1,0,110,163,1,0,224,129,1,0,181,104,1,0,238,87,1,0,196,62,1,0,153,37,1,0,111,12,1,0,168,251,0,0,225,234,0,0,183,209,0,0,240,192,0,0,41,176,0,0,197,167,0,0,254,150,0,0,155,142,0,0,212,125,0,0,112,117,0,0,169,100,0,0,70,92,0,0,226,83,0,0,127,75,0,0,27,67,0,0,27,67,0,0,184,58,0,0,84,50,0,0,241,41,0,0,241,41,0,0,141,33,0,0,141,33,0,0,42,25,0,0,42,25,0,0,42,25,0,0,198,16,0,0,198,16,0,0,198,16,0,0,198,16,0,0,99,8,0,0,99,8,0,0,99,8,0,0,99,8,0,0,99,8,0,0,99,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,52,37,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,17,0,0,1,0,1,0,1,0,0,0,1,0,2,0,1,0,3,0,1,0,1,0,3,0,2,0,0,0,3,0,2,0,1,0,1,0,1,0,1,0,3,0,2,0,0,0,1,0,2,0,6,0,5,0,3,0,1,0,4,0,4,0,7,0,5,0,7,0,1,0,6,0,1,0,1,0,0,0,7,0,3,0,5,0,1,0,6,0,2,0,3,0,2,0,5,0,4,0,4,0,1,0,3,0,3,0,2,0,0,0,1,0,2,0,10,0,19,0,16,0,10,0,3,0,3,0,7,0,10,0,5,0,3,0,11,0,4,0,13,0,17,0,8,0,4,0,12,0,11,0,18,0,15,0,11,0,2,0,7,0,6,0,9,0,14,0,3,0,1,0,6,0,4,0,5,0,3,0,2,0,0,0,3,0,4,0,6,0,18,0,12,0,5,0,5,0,1,0,2,0,16,0,9,0,3,0,7,0,3,0,5,0,14,0,7,0,3,0,19,0,17,0,15,0,13,0,10,0,4,0,13,0,5,0,8,0,11,0,5,0,1,0,12,0,4,0,4,0,1,0,1,0,0,0,7,0,5,0,9,0,14,0,15,0,7,0,6,0,4,0,5,0,5,0,6,0,7,0,7,0,6,0,8,0,8,0,8,0,5,0,15,0,6,0,9,0,10,0,5,0,1,0,11,0,7,0,9,0,6,0,4,0,1,0,14,0,4,0,6,0,2,0,6,0,0,0,1,0,2,0,10,0,23,0,35,0,30,0,12,0,17,0,3,0,3,0,8,0,12,0,18,0,21,0,12,0,7,0,11,0,9,0,15,0,21,0,32,0,40,0,19,0,6,0,14,0,13,0,22,0,34,0,46,0,23,0,18,0,7,0,20,0,19,0,33,0,47,0,27,0,22,0,9,0,3,0,31,0,22,0,41,0,26,0,21,0,20,0,5,0,3,0,14,0,13,0,10,0,11,0,16,0,6,0,5,0,1,0,9,0,8,0,7,0,8,0,4,0,4,0,2,0,0,0,3,0,4,0,10,0,24,0,34,0,33,0,21,0,15,0,5,0,3,0,4,0,10,0,32,0,17,0,11,0,10,0,11,0,7,0,13,0,18,0,30,0,31,0,20,0,5,0,25,0,11,0,19,0,59,0,27,0,18,0,12,0,5,0,35,0,33,0,31,0,58,0,30,0,16,0,7,0,5,0,28,0,26,0,32,0,19,0,17,0,15,0,8,0,14,0,14,0,12,0,9,0,13,0,14,0,9,0,4,0,1,0,11,0,4,0,6,0,6,0,6,0,3,0,2,0,0,0,9,0,6,0,16,0,33,0,41,0,39,0,38,0,26,0,7,0,5,0,6,0,9,0,23,0,16,0,26,0,11,0,17,0,7,0,11,0,14,0,21,0,30,0,10,0,7,0,17,0,10,0,15,0,12,0,18,0,28,0,14,0,5,0,32,0,13,0,22,0,19,0,18,0,16,0,9,0,5,0,40,0,17,0,31,0,29,0,17,0,13,0,4,0,2,0,27,0,12,0,11,0,15,0,10,0,7,0,4,0,1,0,27,0,12,0,8,0,12,0,6,0,3,0,1,0,0,0,1,0,5,0,14,0,21,0,34,0,51,0,46,0,71,0,42,0,52,0,68,0,52,0,67,0,44,0,43,0,19,0,3,0,4,0,12,0,19,0,31,0,26,0,44,0,33,0,31,0,24,0,32,0,24,0,31,0,35,0,22,0,14,0,15,0,13,0,23,0,36,0,59,0,49,0,77,0,65,0,29,0,40,0,30,0,40,0,27,0,33,0,42,0,16,0,22,0,20,0,37,0,61,0,56,0,79,0,73,0,64,0,43,0,76,0,56,0,37,0,26,0,31,0,25,0,14,0,35,0,16,0,60,0,57,0,97,0,75,0,114,0,91,0,54,0,73,0,55,0,41,0,48,0,53,0,23,0,24,0,58,0,27,0,50,0,96,0,76,0,70,0,93,0,84,0,77,0,58,0,79,0,29,0,74,0,49,0,41,0,17,0,47,0,45,0,78,0,74,0,115,0,94,0,90,0,79,0,69,0,83,0,71,0,50,0,59,0,38,0,36,0,15,0,72,0,34,0,56,0,95,0,92,0,85,0,91,0,90,0,86,0,73,0,77,0,65,0,51,0,44,0,43,0,42,0,43,0,20,0,30,0,44,0,55,0,78,0,72,0,87,0,78,0,61,0,46,0,54,0,37,0,30,0,20,0,16,0,53,0,25,0,41,0,37,0,44,0,59,0,54,0,81,0,66,0,76,0,57,0,54,0,37,0,18,0,39,0,11,0,35,0,33,0,31,0,57,0,42,0,82,0,72,0,80,0,47,0,58,0,55,0,21,0,22,0,26,0,38,0,22,0,53,0,25,0,23,0,38,0,70,0,60,0,51,0,36,0,55,0,26,0,34,0,23,0,27,0,14,0,9,0,7,0,34,0,32,0,28,0,39,0,49,0,75,0,30,0,52,0,48,0,40,0,52,0,28,0,18,0,17,0,9,0,5,0,45,0,21,0,34,0,64,0,56,0,50,0,49,0,45,0,31,0,19,0,12,0,15,0,10,0,7,0,6,0,3,0,48,0,23,0,20,0,39,0,36,0,35,0,53,0,21,0,16,0,23,0,13,0,10,0,6,0,1,0,4,0,2,0,16,0,15,0,17,0,27,0,25,0,20,0,29,0,11,0,17,0,12,0,16,0,8,0,1,0,1,0,0,0,1,0,7,0,12,0,18,0,53,0,47,0,76,0,124,0,108,0,89,0,123,0,108,0,119,0,107,0,81,0,122,0,63,0,13,0,5,0,16,0,27,0,46,0,36,0,61,0,51,0,42,0,70,0,52,0,83,0,65,0,41,0,59,0,36,0,19,0,17,0,15,0,24,0,41,0,34,0,59,0,48,0,40,0,64,0,50,0,78,0,62,0,80,0,56,0,33,0,29,0,28,0,25,0,43,0,39,0,63,0,55,0,93,0,76,0,59,0,93,0,72,0,54,0,75,0,50,0,29,0,52,0,22,0,42,0,40,0,67,0,57,0,95,0,79,0,72,0,57,0,89,0,69,0,49,0,66,0,46,0,27,0,77,0,37,0,35,0,66,0,58,0,52,0,91,0,74,0,62,0,48,0,79,0,63,0,90,0,62,0,40,0,38,0,125,0,32,0,60,0,56,0,50,0,92,0,78,0,65,0,55,0,87,0,71,0,51,0,73,0,51,0,70,0,30,0,109,0,53,0,49,0,94,0,88,0,75,0,66,0,122,0,91,0,73,0,56,0,42,0,64,0,44,0,21,0,25,0,90,0,43,0,41,0,77,0,73,0,63,0,56,0,92,0,77,0,66,0,47,0,67,0,48,0,53,0,36,0,20,0,71,0,34,0,67,0,60,0,58,0,49,0,88,0,76,0,67,0,106,0,71,0,54,0,38,0,39,0,23,0,15,0,109,0,53,0,51,0,47,0,90,0,82,0,58,0,57,0,48,0,72,0,57,0,41,0,23,0,27,0,62,0,9,0,86,0,42,0,40,0,37,0,70,0,64,0,52,0,43,0,70,0,55,0,42,0,25,0,29,0,18,0,11,0,11,0,118,0,68,0,30,0,55,0,50,0,46,0,74,0,65,0,49,0,39,0,24,0,16,0,22,0,13,0,14,0,7,0,91,0,44,0,39,0,38,0,34,0,63,0,52,0,45,0,31,0,52,0,28,0,19,0,14,0,8,0,9,0,3,0,123,0,60,0,58,0,53,0,47,0,43,0,32,0,22,0,37,0,24,0,17,0,12,0,15,0,10,0,2,0,1,0,71,0,37,0,34,0,30,0,28,0,20,0,17,0,26,0,21,0,16,0,10,0,6,0,8,0,6,0,2,0,0,0,1,0,5,0,14,0,44,0,74,0,63,0,110,0,93,0,172,0,149,0,138,0,242,0,225,0,195,0,120,1,17,0,3,0,4,0,12,0,20,0,35,0,62,0,53,0,47,0,83,0,75,0,68,0,119,0,201,0,107,0,207,0,9,0,15,0,13,0,23,0,38,0,67,0,58,0,103,0,90,0,161,0,72,0,127,0,117,0,110,0,209,0,206,0,16,0,45,0,21,0,39,0,69,0,64,0,114,0,99,0,87,0,158,0,140,0,252,0,212,0,199,0,131,1,109,1,26,0,75,0,36,0,68,0,65,0,115,0,101,0,179,0,164,0,155,0,8,1,246,0,226,0,139,1,126,1,106,1,9,0,66,0,30,0,59,0,56,0,102,0,185,0,173,0,9,1,142,0,253,0,232,0,144,1,132,1,122,1,189,1,16,0,111,0,54,0,52,0,100,0,184,0,178,0,160,0,133,0,1,1,244,0,228,0,217,0,129,1,110,1,203,2,10,0,98,0,48,0,91,0,88,0,165,0,157,0,148,0,5,1,248,0,151,1,141,1,116,1,124,1,121,3,116,3,8,0,85,0,84,0,81,0,159,0,156,0,143,0,4,1,249,0,171,1,145,1,136,1,127,1,215,2,201,2,196,2,7,0,154,0,76,0,73,0,141,0,131,0,0,1,245,0,170,1,150,1,138,1,128,1,223,2,103,1,198,2,96,1,11,0,139,0,129,0,67,0,125,0,247,0,233,0,229,0,219,0,137,1,231,2,225,2,208,2,117,3,114,3,183,1,4,0,243,0,120,0,118,0,115,0,227,0,223,0,140,1,234,2,230,2,224,2,209,2,200,2,194,2,223,0,180,1,6,0,202,0,224,0,222,0,218,0,216,0,133,1,130,1,125,1,108,1,120,3,187,1,195,2,184,1,181,1,192,6,4,0,235,2,211,0,210,0,208,0,114,1,123,1,222,2,211,2,202,2,199,6,115,3,109,3,108,3,131,13,97,3,2,0,121,1,113,1,102,0,187,0,214,2,210,2,102,1,199,2,197,2,98,3,198,6,103,3,130,13,102,3,178,1,0,0,12,0,10,0,7,0,11,0,10,0,17,0,11,0,9,0,13,0,12,0,10,0,7,0,5,0,3,0,1,0,3,0,15,0,13,0,46,0,80,0,146,0,6,1,248,0,178,1,170,1,157,2,141,2,137,2,109,2,5,2,8,4,88,0,14,0,12,0,21,0,38,0,71,0,130,0,122,0,216,0,209,0,198,0,71,1,89,1,63,1,41,1,23,1,42,0,47,0,22,0,41,0,74,0,68,0,128,0,120,0,221,0,207,0,194,0,182,0,84,1,59,1,39,1,29,2,18,0,81,0,39,0,75,0,70,0,134,0,125,0,116,0,220,0,204,0,190,0,178,0,69,1,55,1,37,1,15,1,16,0,147,0,72,0,69,0,135,0,127,0,118,0,112,0,210,0,200,0,188,0,96,1,67,1,50,1,29,1,28,2,14,0,7,1,66,0,129,0,126,0,119,0,114,0,214,0,202,0,192,0,180,0,85,1,61,1,45,1,25,1,6,1,12,0,249,0,123,0,121,0,117,0,113,0,215,0,206,0,195,0,185,0,91,1,74,1,52,1,35,1,16,1,8,2,10,0,179,1,115,0,111,0,109,0,211,0,203,0,196,0,187,0,97,1,76,1,57,1,42,1,27,1,19,2,125,1,17,0,171,1,212,0,208,0,205,0,201,0,193,0,186,0,177,0,169,0,64,1,47,1,30,1,12,1,2,2,121,1,16,0,79,1,199,0,197,0,191,0,189,0,181,0,174,0,77,1,65,1,49,1,33,1,19,1,9,2,123,1,115,1,11,0,156,2,184,0,183,0,179,0,175,0,88,1,75,1,58,1,48,1,34,1,21,1,18,2,127,1,117,1,110,1,10,0,140,2,90,1,171,0,168,0,164,0,62,1,53,1,43,1,31,1,20,1,7,1,1,2,119,1,112,1,106,1,6,0,136,2,66,1,60,1,56,1,51,1,46,1,36,1,28,1,13,1,5,1,0,2,120,1,114,1,108,1,103,1,4,0,108,2,44,1,40,1,38,1,32,1,26,1,17,1,10,1,3,2,124,1,118,1,113,1,109,1,105,1,101,1,2,0,9,4,24,1,22,1,18,1,11,1,8,1,3,1,126,1,122,1,116,1,111,1,107,1,104,1,102,1,100,1,0,0,43,0,20,0,19,0,17,0,15,0,13,0,11,0,9,0,7,0,6,0,4,0,7,0,5,0,3,0,1,0,3,0,1,0,5,0,4,0,5,0,6,0,5,0,4,0,4,0,7,0,3,0,6,0,0,0,7,0,2,0,3,0,1,0,15,0,14,0,13,0,12,0,11,0,10,0,9,0,8,0,7,0,6,0,5,0,4,0,3,0,2,0,1,0,0,0,1,3,2,3,1,3,6,3,3,5,5,5,6,2,2,6,3,2,5,5,5,6,1,3,6,7,3,3,6,7,6,6,7,8,7,6,7,8,3,3,5,7,3,2,4,5,4,4,5,6,6,5,6,7,1,3,6,8,8,9,3,4,6,7,7,8,6,5,7,8,8,9,7,7,8,9,9,9,7,7,8,9,9,10,8,8,9,10,10,10,2,3,6,8,8,9,3,2,4,8,8,8,6,4,6,8,8,9,8,8,8,9,9,10,8,7,8,9,10,10,9,8,9,9,11,11,3,3,5,6,8,9,3,3,4,5,6,8,4,4,5,6,7,8,6,5,6,7,7,8,7,6,7,7,8,9,8,7,8,8,9,9,1,3,6,8,9,9,9,10,3,4,6,7,8,9,8,8,6,6,7,8,9,10,9,9,7,7,8,9,10,10,9,10,8,8,9,10,10,10,10,10,9,9,10,10,11,11,10,11,8,8,9,10,10,10,11,11,9,8,9,10,10,11,11,11,2,3,5,7,8,9,8,9,3,3,4,6,8,8,7,8,5,5,6,7,8,9,8,8,7,6,7,9,8,10,8,9,8,8,8,9,9,10,9,10,8,8,9,10,10,11,10,11,8,7,7,8,9,10,10,10,8,7,8,9,10,10,10,10,4,3,5,7,8,9,9,9,3,3,4,5,7,7,8,8,5,4,5,6,7,8,7,8,6,5,6,6,7,8,8,8,7,6,7,7,8,8,8,9,8,7,8,8,8,9,8,9,8,7,7,8,8,9,9,10,9,8,8,9,9,9,9,10,1,4,6,7,8,9,9,10,9,10,11,11,12,12,13,13,3,4,6,7,8,8,9,9,9,9,10,10,11,12,12,12,6,6,7,8,9,9,10,10,9,10,10,11,11,12,13,13,7,7,8,9,9,10,10,10,10,11,11,11,11,12,13,13,8,7,9,9,10,10,11,11,10,11,11,12,12,13,13,14,9,8,9,10,10,10,11,11,11,11,12,11,13,13,14,14,9,9,10,10,11,11,11,11,11,12,12,12,13,13,14,14,10,9,10,11,11,11,12,12,12,12,13,13,13,14,16,16,9,8,9,10,10,11,11,12,12,12,12,13,13,14,15,15,10,9,10,10,11,11,11,13,12,13,13,14,14,14,16,15,10,10,10,11,11,12,12,13,12,13,14,13,14,15,16,17,11,10,10,11,12,12,12,12,13,13,13,14,15,15,15,16,11,11,11,12,12,13,12,13,14,14,15,15,15,16,16,16,12,11,12,13,13,13,14,14,14,14,14,15,16,15,16,16,13,12,12,13,13,13,15,14,14,17,15,15,15,17,16,16,12,12,13,14,14,14,15,14,15,15,16,16,19,18,19,16,3,4,5,7,7,8,9,9,9,10,10,11,11,11,12,13,4,3,5,6,7,7,8,8,8,9,9,10,10,10,11,11,5,5,5,6,7,7,8,8,8,9,9,10,10,11,11,11,6,6,6,7,7,8,8,9,9,9,10,10,10,11,11,11,7,6,7,7,8,8,9,9,9,9,10,10,10,11,11,11,8,7,7,8,8,8,9,9,9,9,10,10,11,11,11,12,9,7,8,8,8,9,9,9,9,10,10,10,11,11,12,12,9,8,8,9,9,9,9,10,10,10,10,10,11,11,11,12,9,8,8,9,9,9,9,10,10,10,10,11,11,12,12,12,9,8,9,9,9,9,10,10,10,11,11,11,11,12,12,12,10,9,9,9,10,10,10,10,10,11,11,11,11,12,13,12,10,9,9,9,10,10,10,10,11,11,11,11,12,12,12,13,11,10,9,10,10,10,11,11,11,11,11,11,12,12,13,13,11,10,10,10,10,11,11,11,11,12,12,12,12,12,13,13,12,11,11,11,11,11,11,11,12,12,12,12,13,13,12,13,12,11,11,11,11,11,11,12,12,12,12,12,13,13,13,13,1,4,6,8,9,9,10,10,11,11,11,12,12,12,13,9,3,4,6,7,8,9,9,9,10,10,10,11,12,11,12,8,6,6,7,8,9,9,10,10,11,10,11,11,11,12,12,9,8,7,8,9,9,10,10,10,11,11,12,12,12,13,13,10,9,8,9,9,10,10,11,11,11,12,12,12,13,13,13,9,9,8,9,9,10,11,11,12,11,12,12,13,13,13,14,10,10,9,9,10,11,11,11,11,12,12,12,12,13,13,14,10,10,9,10,10,11,11,11,12,12,13,13,13,13,15,15,10,10,10,10,11,11,11,12,12,13,13,13,13,14,14,14,10,11,10,10,11,11,12,12,13,13,13,13,14,13,14,13,11,11,11,10,11,12,12,12,12,13,14,14,14,15,15,14,10,12,11,11,11,12,12,13,14,14,14,14,14,14,13,14,11,12,12,12,12,12,13,13,13,13,15,14,14,14,14,16,11,14,12,12,12,13,13,14,14,14,16,15,15,15,17,15,11,13,13,11,12,14,14,13,14,14,15,16,15,17,15,14,11,9,8,8,9,9,10,10,10,11,11,11,11,11,11,11,8,4,4,6,7,8,9,9,10,10,11,11,11,11,11,12,9,4,4,5,6,7,8,8,9,9,9,10,10,10,10,10,8,6,5,6,7,7,8,8,9,9,9,9,10,10,10,11,7,7,6,7,7,8,8,8,9,9,9,9,10,10,10,10,7,8,7,7,8,8,8,8,9,9,9,10,10,10,10,11,7,9,7,8,8,8,8,9,9,9,9,10,10,10,10,10,7,9,8,8,8,8,9,9,9,9,10,10,10,10,10,11,7,10,8,8,8,9,9,9,9,10,10,10,10,10,11,11,8,10,9,9,9,9,9,9,9,9,10,10,10,10,11,11,8,10,9,9,9,9,9,9,10,10,10,10,10,11,11,11,8,11,9,9,9,9,10,10,10,10,10,10,11,11,11,11,8,11,10,9,9,9,10,10,10,10,10,10,11,11,11,11,8,11,10,10,10,10,10,10,10,10,10,11,11,11,11,11,8,11,10,10,10,10,10,10,10,11,11,11,11,11,11,11,8,12,10,10,10,10,10,10,11,11,11,11,11,11,11,11,8,8,7,7,7,7,7,7,7,7,7,7,8,8,8,8,4,1,4,4,5,4,6,5,6,4,5,5,6,5,6,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;Module["_i64Add"]=_i64Add;function _llvm_exp2_f32(x){return Math.pow(2,x)}function _llvm_exp2_f64(){return _llvm_exp2_f32.apply(null,arguments)}Module["_memset"]=_memset;Module["_bitshift64Lshr"]=_bitshift64Lshr;function _abort(){Module["abort"]()}function ___lock(){}function ___unlock(){}var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___muldsi3"]=___muldsi3;Module["___muldi3"]=___muldi3;function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}Module["_sbrk"]=_sbrk;function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;Module["_llvm_bswap_i32"]=_llvm_bswap_i32;function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffer){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module["print"]:Module["printErr"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j<len;j++){___syscall146.printChar(stream,HEAPU8[ptr+j])}ret+=len}return ret}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}__ATEXIT__.push((function(){var fflush=Module["_fflush"];if(fflush)fflush(0);var printChar=___syscall146.printChar;if(!printChar)return;var buffers=___syscall146.buffers;if(buffers[1].length)printChar(1,10);if(buffers[2].length)printChar(2,10)}));DYNAMICTOP_PTR=allocate(1,"i32",ALLOC_STATIC);STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=Runtime.alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;function invoke_ii(index,a1){try{return Module["dynCall_ii"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_iiii(index,a1,a2,a3){try{return Module["dynCall_iiii"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}Module.asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,"Infinity":Infinity};Module.asmLibraryArg={"abort":abort,"assert":assert,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"invoke_ii":invoke_ii,"invoke_iiii":invoke_iiii,"_llvm_exp2_f64":_llvm_exp2_f64,"___lock":___lock,"_llvm_exp2_f32":_llvm_exp2_f32,"_abort":_abort,"___setErrNo":___setErrNo,"___syscall6":___syscall6,"___syscall140":___syscall140,"_emscripten_memcpy_big":_emscripten_memcpy_big,"___syscall54":___syscall54,"___unlock":___unlock,"___syscall146":___syscall146,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX};// EMSCRIPTEN_START_ASM
--var asm=(function(global,env,buffer) {
--"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.DYNAMICTOP_PTR|0;var j=env.tempDoublePtr|0;var k=env.ABORT|0;var l=env.STACKTOP|0;var m=env.STACK_MAX|0;var n=0;var o=0;var p=0;var q=0;var r=global.NaN,s=global.Infinity;var t=0,u=0,v=0,w=0,x=0.0;var y=0;var z=global.Math.floor;var A=global.Math.abs;var B=global.Math.sqrt;var C=global.Math.pow;var D=global.Math.cos;var E=global.Math.sin;var F=global.Math.tan;var G=global.Math.acos;var H=global.Math.asin;var I=global.Math.atan;var J=global.Math.atan2;var K=global.Math.exp;var L=global.Math.log;var M=global.Math.ceil;var N=global.Math.imul;var O=global.Math.min;var P=global.Math.max;var Q=global.Math.clz32;var R=env.abort;var S=env.assert;var T=env.enlargeMemory;var U=env.getTotalMemory;var V=env.abortOnCannotGrowMemory;var W=env.invoke_ii;var X=env.invoke_iiii;var Y=env._llvm_exp2_f64;var Z=env.___lock;var _=env._llvm_exp2_f32;var $=env._abort;var aa=env.___setErrNo;var ba=env.___syscall6;var ca=env.___syscall140;var da=env._emscripten_memcpy_big;var ea=env.___syscall54;var fa=env.___unlock;var ga=env.___syscall146;var ha=0.0;
--// EMSCRIPTEN_START_FUNCS
--function ka(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function la(){return l|0}function ma(a){a=a|0;l=a}function na(a,b){a=a|0;b=b|0;l=a;m=b}function oa(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function pa(a){a=a|0;y=a}function qa(){return y|0}function ra(a,b){a=a|0;b=b|0;c[a>>2]=gb(b)|0;c[a+4>>2]=b;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=32;return}function sa(a){a=a|0;a=c[a>>2]|0;if(!a)return;hb(a);return}function ta(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=a+16|0;i=c[k>>2]|0;if(i>>>0>d>>>0){d=i-d|0;c[k>>2]=d;k=a+12|0;c[k>>2]=c[k>>2]|b<<d;return}j=a+8|0;e=c[j>>2]|0;g=a+4|0;h=c[g>>2]|0;f=c[a>>2]|0;if((e+4|0)>>>0<h>>>0)g=i;else{f=jb(f,((h|0)/2|0)+h|0)|0;c[a>>2]=f;e=c[g>>2]|0;c[g>>2]=((e|0)/2|0)+e;g=c[k>>2]|0;e=c[j>>2]|0}i=d-g|0;d=a+12|0;c[f+e>>2]=ub(b>>>i|c[d>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+4;j=32-i|0;c[k>>2]=j;c[d>>2]=(i|0)==0?0:b<<j;return}function ua(a){a=a|0;return (c[a+8>>2]<<3)+32-(c[a+16>>2]|0)|0}function va(a){a=a|0;var b=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;C=l;l=l+416|0;B=C;if((c[a>>2]|0)>0){j=a+16|0;g=0;b=c[j>>2]|0;do{if((b|0)>0){f=0;do{b=0;do{if((c[a+25264+(g*4608|0)+(f*2304|0)+(b<<2)>>2]|0)<0?(h=a+2224+(g*4608|0)+(f*2304|0)+(b<<2)|0,i=c[h>>2]|0,(i|0)>0):0)c[h>>2]=0-i;b=b+1|0}while((b|0)!=576);f=f+1|0;b=c[j>>2]|0}while((f|0)<(b|0))}g=g+1|0}while((g|0)<(c[a>>2]|0))}j=a+116|0;tb(B|0,j|0,408)|0;z=a+96|0;ta(z,2047,11);i=a+8|0;ta(z,c[i>>2]|0,2);ta(z,c[a+12>>2]|0,2);ta(z,(c[a+76>>2]|0)==0&1,1);ta(z,c[a+68>>2]|0,4);A=a+72|0;ta(z,(c[A>>2]|0)%3|0,2);ta(z,c[a+32>>2]|0,1);ta(z,c[a+80>>2]|0,1);ta(z,c[a+20>>2]|0,2);ta(z,c[a+84>>2]|0,2);ta(z,c[a+88>>2]|0,1);ta(z,c[a+92>>2]|0,1);ta(z,c[a+28>>2]|0,2);do if((c[i>>2]|0)==3){ta(z,0,9);b=c[B>>2]|0;if((c[a>>2]|0)==2){ta(z,b,3);break}else{ta(z,b,5);break}}else{ta(z,0,8);b=c[B>>2]|0;if((c[a>>2]|0)==2){ta(z,b,2);break}else{ta(z,b,1);break}}while(0);if((c[i>>2]|0)==3?(c[a>>2]|0)>0:0){b=0;do{ta(z,c[B+8+(b<<4)>>2]|0,1);ta(z,c[B+8+(b<<4)+4>>2]|0,1);ta(z,c[B+8+(b<<4)+8>>2]|0,1);ta(z,c[B+8+(b<<4)+12>>2]|0,1);b=b+1|0}while((b|0)<(c[a>>2]|0))}y=a+16|0;b=c[y>>2]|0;if((b|0)>0){h=0;g=c[a>>2]|0;do{if((g|0)>0){f=0;do{ta(z,c[B+40+(h*184|0)+(f*92|0)>>2]|0,12);ta(z,c[B+40+(h*184|0)+(f*92|0)+4>>2]|0,9);ta(z,c[B+40+(h*184|0)+(f*92|0)+12>>2]|0,8);b=c[B+40+(h*184|0)+(f*92|0)+16>>2]|0;if((c[i>>2]|0)==3)ta(z,b,4);else ta(z,b,9);ta(z,0,1);ta(z,c[B+40+(h*184|0)+(f*92|0)+20>>2]|0,5);ta(z,c[B+40+(h*184|0)+(f*92|0)+24>>2]|0,5);ta(z,c[B+40+(h*184|0)+(f*92|0)+28>>2]|0,5);ta(z,c[B+40+(h*184|0)+(f*92|0)+32>>2]|0,4);ta(z,c[B+40+(h*184|0)+(f*92|0)+36>>2]|0,3);if((c[i>>2]|0)==3)ta(z,c[B+40+(h*184|0)+(f*92|0)+40>>2]|0,1);ta(z,c[B+40+(h*184|0)+(f*92|0)+44>>2]|0,1);ta(z,c[B+40+(h*184|0)+(f*92|0)+48>>2]|0,1);f=f+1|0;g=c[a>>2]|0}while((f|0)<(g|0));b=c[y>>2]|0}h=h+1|0}while((h|0)<(b|0))}tb(B|0,j|0,408)|0;if((b|0)<=0){l=C;return}x=0;f=c[a>>2]|0;do{if((f|0)>0){w=(x|0)==0;v=0;do{f=c[B+40+(x*184|0)+(v*92|0)+16>>2]|0;b=c[1044+(f<<2)>>2]|0;f=c[1108+(f<<2)>>2]|0;if(!w?(c[B+8+(v<<4)>>2]|0)!=0:0)t=39;else{ta(z,c[a+1208+(x*176|0)+(v*88|0)>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+4>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+8>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+12>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+16>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+20>>2]|0,b);if(w)t=40;else t=39}if((t|0)==39)if(!(c[B+8+(v<<4)+4>>2]|0))t=40;else t=41;if((t|0)==40){ta(z,c[a+1208+(x*176|0)+(v*88|0)+24>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+28>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+32>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+36>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+40>>2]|0,b);if(w)t=42;else t=41}if((t|0)==41)if(!(c[B+8+(v<<4)+8>>2]|0))t=42;else t=43;if((t|0)==42){ta(z,c[a+1208+(x*176|0)+(v*88|0)+44>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+48>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+52>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+56>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+60>>2]|0,f);if(w)t=44;else t=43}if((t|0)==43?(t=0,(c[B+8+(v<<4)+12>>2]|0)==0):0)t=44;if((t|0)==44){t=0;ta(z,c[a+1208+(x*176|0)+(v*88|0)+64>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+68>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+72>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+76>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+80>>2]|0,f)}q=c[A>>2]|0;u=ua(z)|0;b=c[B+40+(x*184|0)+(v*92|0)+4>>2]<<1;s=c[B+40+(x*184|0)+(v*92|0)+32>>2]|0;r=c[1464+(q*92|0)+(s+1<<2)>>2]|0;s=c[1464+(q*92|0)+(s+2+(c[B+40+(x*184|0)+(v*92|0)+36>>2]|0)<<2)>>2]|0;if((b|0)>0){q=0;do{g=c[B+40+(x*184|0)+(v*92|0)+20+(((q|0)>=(r|0)&1)+((q|0)>=(s|0)&1)<<2)>>2]|0;do if(g|0){h=c[a+2224+(v*4608|0)+(x*2304|0)+(q<<2)>>2]|0;k=c[a+2224+(v*4608|0)+(x*2304|0)+((q|1)<<2)>>2]|0;i=(h|0)>0;h=i?h:0-h|0;i=(i^1)&1;o=(k|0)>0;k=o?k:0-k|0;o=(o^1)&1;f=c[8+(g*24|0)+4>>2]|0;if((g|0)<=15){p=(N(f,h)|0)+k|0;j=e[(c[8+(g*24|0)+16>>2]|0)+(p<<1)>>1]|0;n=(h|0)==0;j=n?j:j<<1|i;m=(k|0)==0;ta(z,m?j:j<<1|o,((m^1)&1)+((n^1)&1)+(d[(c[8+(g*24|0)+20>>2]|0)+p>>0]|0)|0);break}m=c[8+(g*24|0)+8>>2]|0;E=(h|0)>14;F=E?15:h;D=(k|0)>14;j=D?15:k;n=(N(F,f)|0)+j|0;p=e[(c[8+(g*24|0)+16>>2]|0)+(n<<1)>>1]|0;n=d[(c[8+(g*24|0)+20>>2]|0)+n>>0]|0;f=E?h+-15|0:0;g=(F|0)==0;f=g?f:f<<1|i;g=(E?m:0)+((g^1)&1)|0;if(!D){if(j)t=51}else{g=g+m|0;f=f<<m|k+2147483633;t=51}if((t|0)==51){t=0;g=g+1|0;f=f<<1|o}ta(z,p,n);ta(z,f,g)}while(0);q=q+2|0}while((q|0)<(b|0))}f=(c[B+40+(x*184|0)+(v*92|0)+48>>2]|0)+32|0;h=(c[B+40+(x*184|0)+(v*92|0)+8>>2]<<2)+b|0;if((b|0)<(h|0)){g=c[8+(f*24|0)+16>>2]|0;f=c[8+(f*24|0)+20>>2]|0;do{E=c[a+2224+(v*4608|0)+(x*2304|0)+(b<<2)>>2]|0;D=c[a+2224+(v*4608|0)+(x*2304|0)+((b|1)<<2)>>2]|0;t=c[a+2224+(v*4608|0)+(x*2304|0)+(b+2<<2)>>2]|0;F=c[a+2224+(v*4608|0)+(x*2304|0)+(b+3<<2)>>2]|0;p=(E|0)>0;E=p?E:0-E|0;q=(D|0)>0;D=q?D:0-D|0;r=(t|0)>0;t=r?t:0-t|0;s=(F|0)>0;F=s?F:0-F|0;o=(D<<1)+E+(t<<2)+(F<<3)|0;ta(z,e[g+(o<<1)>>1]|0,d[f+o>>0]|0);E=(E|0)==0;p=((p|E)^1)&1;D=(D|0)==0;q=D?p:p<<1|(q^1)&1;t=(t|0)==0;r=t?q:q<<1|(r^1)&1;F=(F|0)==0;ta(z,F?r:r<<1|(s^1)&1,((t^1)&1)+(D?(E^1)&1:E?1:2)+((F^1)&1)|0);b=b+4|0}while((b|0)<(h|0))}b=ua(z)|0;b=(c[B+40+(x*184|0)+(v*92|0)>>2]|0)-(c[B+40+(x*184|0)+(v*92|0)+52>>2]|0)+(u-b)|0;if(b|0){f=(b|0)%32|0;if((b+31|0)>>>0>=63){b=(b|0)/32|0;do{b=b+-1|0;ta(z,-1,32)}while((b|0)!=0)}if(f|0)ta(z,(1<<f)+-1|0,f)}v=v+1|0;f=c[a>>2]|0}while((v|0)<(f|0));b=c[y>>2]|0}x=x+1|0}while((x|0)<(b|0));l=C;return}function wa(a,b,e,f,g,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,O=0,P=0;J=e+72|0;if((b|0)<0)c[J>>2]=(c[J>>2]|0)+-1;v=i+39100|0;w=i+34488|0;x=e+8|0;z=e+4|0;A=e+48|0;C=e+32|0;D=e+36|0;E=e+20|0;F=e+24|0;G=e+28|0;H=e+60|0;I=e+64|0;r=e+68|0;s=i+72|0;t=c[199]|0;u=c[205]|0;do{while(1){f=c[J>>2]|0;c[J>>2]=f+1;f=f+128|0;l=c[i+40480+(f<<2)>>2]|0;q=c[v>>2]|0;m=((l|0)<0)<<31>>31;q=rb(q|0,((q|0)<0)<<31>>31|0,l|0,m|0)|0;nb(q|0,y|0,-2147483648,0)|0;if((y|0)>165140)continue;k=i+39456+(f<<3)|0;j=c[w>>2]|0;g=0;e=0;do{f=c[j+(e<<2)>>2]|0;f=(f|0)>-1?f:0-f|0;f=rb(f|0,((f|0)<0)<<31>>31|0,l|0,m|0)|0;nb(f|0,y|0,-2147483648,0)|0;f=y;if((f|0)<1e4)f=c[i+40992+(f<<2)>>2]|0;else{K=+h[k>>3]*+(c[i+36796+(e<<2)>>2]|0)*4.656612875e-10;f=~~+B(+(+B(+K)*K))}c[a+(e<<2)>>2]=f;g=(g|0)<(f|0)?f:g;e=e+1|0}while((e|0)!=576);if((g|0)<=8192){g=576;break}}while(1){if((g|0)<=1){n=13;break}if(c[a+(g+-1<<2)>>2]|0){n=16;break}f=g+-2|0;if(!(c[a+(f<<2)>>2]|0))g=f;else{n=16;break}}do if((n|0)==13){c[x>>2]=0;n=23}else if((n|0)==16){c[x>>2]=0;if((g|0)>3){j=0;while(1){if((c[a+(g+-1<<2)>>2]|0)>=2){n=24;break}if((c[a+(g+-2<<2)>>2]|0)>=2){n=24;break}if((c[a+(g+-3<<2)>>2]|0)>=2){n=24;break}f=g+-4|0;e=j+1|0;if((c[a+(f<<2)>>2]|0)>=2){n=24;break}c[x>>2]=e;if((f|0)>3){g=f;j=e}else{n=18;break}}if((n|0)==18){n=0;q=f>>1;c[z>>2]=q;g=f;f=q}else if((n|0)==24){n=0;f=g>>>1;c[z>>2]=f;if(!j){k=0;j=0;break}else e=j}j=0;l=g;m=0;k=0;while(1){o=c[a+(l<<2)>>2]|0;L=c[a+((l|1)<<2)>>2]|0;M=c[a+(l+2<<2)>>2]|0;p=c[a+(l+3<<2)>>2]|0;q=(L<<1)+o+(M<<2)+(p<<3)|0;o=(o|0)!=0;p=((M|0)!=0&1)+((L|0)==0?o&1:o?2:1)+((p|0)!=0&1)|0;j=(d[t+q>>0]|0)+j+p|0;k=p+k+(d[u+q>>0]|0)|0;m=m+1|0;if((m|0)==(e|0))break;else l=l+4|0}}else n=23}while(0);if((n|0)==23){f=g>>1;c[z>>2]=f;k=0;j=0}M=(j|0)<(k|0);q=M?j:k;c[A>>2]=(M^1)&1;if(!f){c[C>>2]=0;c[D>>2]=0;j=c[H>>2]|0}else{j=c[s>>2]|0;e=0;while(1)if((c[1464+(j*92|0)+(e<<2)>>2]|0)<(g|0))e=e+1|0;else break;f=c[824+(e<<3)>>2]|0;while(1){k=1464+(j*92|0)+(f+1<<2)|0;l=c[k>>2]|0;if((f|0)!=0&(l|0)>(g|0))f=f+-1|0;else break}c[C>>2]=f;c[H>>2]=l;f=c[824+(e<<3)+4>>2]|0;while(1){e=c[k+(f+1<<2)>>2]|0;if((f|0)!=0&(e|0)>(g|0))f=f+-1|0;else break}c[D>>2]=f;c[I>>2]=e;c[r>>2]=g;j=l}c[E>>2]=0;c[F>>2]=0;c[G>>2]=0;if(!j)k=0;else{k=xa(a,0,j)|0;c[E>>2]=k}e=c[I>>2]|0;n=e>>>0>j>>>0;if(n){o=xa(a,j,e)|0;c[F>>2]=o}else o=0;if(g>>>0>e>>>0){p=xa(a,e,g)|0;c[G>>2]=p}else p=0;do if(k){m=c[8+(k*24|0)+4>>2]|0;l=c[8+(k*24|0)+8>>2]|0;f=(j|0)!=0;if(k>>>0>15){if(!f){f=0;break}k=c[8+(k*24|0)+20>>2]|0;f=0;g=0;do{L=c[a+(g<<2)>>2]|0;M=c[a+((g|1)<<2)>>2]|0;P=(L|0)>14;L=P?15:L;O=(M|0)>14;M=O?15:M;f=(P?l:0)+f+(O?l:0)+(d[k+((N(L,m)|0)+M)>>0]|0)+((L|0)!=0&1)+((M|0)!=0&1)|0;g=g+2|0}while(g>>>0<j>>>0)}else{if(!f){f=0;break}k=c[8+(k*24|0)+20>>2]|0;g=0;f=0;do{O=c[a+(g<<2)>>2]|0;P=c[a+((g|1)<<2)>>2]|0;f=((O|0)!=0&1)+f+((P|0)!=0&1)+(d[k+((N(O,m)|0)+P)>>0]|0)|0;g=g+2|0}while(g>>>0<j>>>0)}}else f=0;while(0);if(o){m=c[8+(o*24|0)+4>>2]|0;l=c[8+(o*24|0)+8>>2]|0;if(o>>>0>15)if(n){k=c[8+(o*24|0)+20>>2]|0;g=0;do{O=c[a+(j<<2)>>2]|0;P=c[a+(j+1<<2)>>2]|0;L=(O|0)>14;O=L?15:O;M=(P|0)>14;P=M?15:P;g=(L?l:0)+g+(M?l:0)+(d[k+((N(O,m)|0)+P)>>0]|0)+((O|0)!=0&1)+((P|0)!=0&1)|0;j=j+2|0}while(j>>>0<e>>>0)}else g=0;else if(n){k=c[8+(o*24|0)+20>>2]|0;g=0;do{O=c[a+(j<<2)>>2]|0;P=c[a+(j+1<<2)>>2]|0;g=((O|0)!=0&1)+g+((P|0)!=0&1)+(d[k+((N(O,m)|0)+P)>>0]|0)|0;j=j+2|0}while(j>>>0<e>>>0)}else g=0;f=g+f|0}if(p){l=c[r>>2]|0;m=c[8+(p*24|0)+4>>2]|0;k=c[8+(p*24|0)+8>>2]|0;g=e>>>0<l>>>0;if(p>>>0>15)if(g){j=c[8+(p*24|0)+20>>2]|0;g=0;do{O=c[a+(e<<2)>>2]|0;P=c[a+(e+1<<2)>>2]|0;L=(O|0)>14;O=L?15:O;M=(P|0)>14;P=M?15:P;g=(L?k:0)+g+(M?k:0)+(d[j+((N(O,m)|0)+P)>>0]|0)+((O|0)!=0&1)+((P|0)!=0&1)|0;e=e+2|0}while(e>>>0<l>>>0)}else g=0;else if(g){j=c[8+(p*24|0)+20>>2]|0;g=0;do{O=c[a+(e<<2)>>2]|0;P=c[a+(e+1<<2)>>2]|0;g=((O|0)!=0&1)+g+((P|0)!=0&1)+(d[j+((N(O,m)|0)+P)>>0]|0)|0;e=e+2|0}while(e>>>0<l>>>0)}else g=0;f=g+f|0}f=f+q|0}while((f|0)>(b|0));return f|0}function xa(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(b>>>0<e>>>0){f=b;g=0}else{e=0;return e|0}do{m=c[a+(f<<2)>>2]|0;g=(g|0)<(m|0)?m:g;f=f+1|0}while((f|0)!=(e|0));if(!g){e=0;return e|0}if((g|0)>=15){f=g+-15|0;if((c[95]|0)>>>0<f>>>0)if((c[101]|0)>>>0<f>>>0)if((c[107]|0)>>>0<f>>>0)if((c[113]|0)>>>0<f>>>0)if((c[119]|0)>>>0<f>>>0)if((c[125]|0)>>>0<f>>>0)if((c[131]|0)>>>0<f>>>0)if((c[137]|0)>>>0<f>>>0)m=(c[143]|0)>>>0<f>>>0?0:23;else m=22;else m=21;else m=20;else m=19;else m=18;else m=17;else m=16;else m=15;if((c[149]|0)>>>0<f>>>0)if((c[155]|0)>>>0<f>>>0)if((c[161]|0)>>>0<f>>>0)if((c[167]|0)>>>0<f>>>0)if((c[173]|0)>>>0<f>>>0)if((c[179]|0)>>>0<f>>>0)if((c[185]|0)>>>0<f>>>0)l=(c[191]|0)>>>0<f>>>0?0:31;else l=30;else l=29;else l=28;else l=27;else l=26;else l=25;else l=24;if(m){i=c[8+(m*24|0)+4>>2]|0;h=c[8+(m*24|0)+8>>2]|0;j=c[8+(m*24|0)+20>>2]|0;if(m>>>0>15){f=0;g=b;do{n=c[a+(g<<2)>>2]|0;k=c[a+(g+1<<2)>>2]|0;p=(n|0)>14;n=p?15:n;o=(k|0)>14;k=o?15:k;f=(p?h:0)+f+(o?h:0)+(d[j+((N(n,i)|0)+k)>>0]|0)+((n|0)!=0&1)+((k|0)!=0&1)|0;g=g+2|0}while(g>>>0<e>>>0);k=f}else{g=b;f=0;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;f=((o|0)!=0&1)+f+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;g=g+2|0}while(g>>>0<e>>>0);k=f}}else k=0;if(!l){p=0;p=(p|0)<(k|0);p=p?l:m;return p|0}i=c[8+(l*24|0)+4>>2]|0;h=c[8+(l*24|0)+8>>2]|0;j=c[8+(l*24|0)+20>>2]|0;if(l>>>0>15){f=0;g=b;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;b=(o|0)>14;o=b?15:o;n=(p|0)>14;p=n?15:p;f=(b?h:0)+f+(n?h:0)+(d[j+((N(o,i)|0)+p)>>0]|0)+((o|0)!=0&1)+((p|0)!=0&1)|0;g=g+2|0}while(g>>>0<e>>>0);p=(f|0)<(k|0);p=p?l:m;return p|0}else{g=b;f=0;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;f=((o|0)!=0&1)+f+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;g=g+2|0}while(g>>>0<e>>>0);p=(f|0)<(k|0);p=p?l:m;return p|0}}else k=14;while(1){l=k+-1|0;if(!k){f=0;h=44;break}if((c[8+(l*24|0)>>2]|0)>>>0>g>>>0)break;else k=l}if((h|0)==44)return f|0;if(!l){p=0;return p|0}i=c[8+(l*24|0)+4>>2]|0;h=c[8+(l*24|0)+8>>2]|0;j=c[8+(l*24|0)+20>>2]|0;if(l>>>0>15){f=0;g=b;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;m=(o|0)>14;o=m?15:o;n=(p|0)>14;p=n?15:p;f=(m?h:0)+f+(n?h:0)+(d[j+((N(o,i)|0)+p)>>0]|0)+((o|0)!=0&1)+((p|0)!=0&1)|0;g=g+2|0}while(g>>>0<e>>>0);j=f}else{g=b;f=0;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;f=((o|0)!=0&1)+f+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;g=g+2|0}while(g>>>0<e>>>0);j=f}switch(k|0){case 3:{h=c[21]|0;i=c[25]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[i+((N(o,h)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(j|0)?l:3;return p|0}case 6:{h=c[39]|0;i=c[43]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[i+((N(o,h)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(j|0)?l:6;return p|0}case 8:{g=c[51]|0;h=c[55]|0;f=b;i=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;i=((o|0)!=0&1)+i+((p|0)!=0&1)+(d[h+((N(o,g)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);h=(i|0)>(j|0);k=h?l:8;h=h?j:i;i=c[57]|0;j=c[61]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);return ((g|0)>(h|0)?k:9)|0}case 11:{g=c[69]|0;h=c[73]|0;f=b;i=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;i=((o|0)!=0&1)+i+((p|0)!=0&1)+(d[h+((N(o,g)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);h=(i|0)>(j|0);k=h?l:11;h=h?j:i;i=c[75]|0;j=c[79]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(h|0)?k:12;return p|0}case 14:{h=c[93]|0;i=c[97]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[i+((N(o,h)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(j|0)?l:15;return p|0}default:{p=l;return p|0}}return 0}function ya(a,b,e,f,g,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0.0,R=0,S=0,T=0,U=0;K=i+39100|0;L=i+34488|0;M=i+156+(f*184|0)+(g*92|0)+8|0;O=i+156+(f*184|0)+(g*92|0)+4|0;u=i+156+(f*184|0)+(g*92|0)+48|0;v=i+156+(f*184|0)+(g*92|0)+32|0;w=i+156+(f*184|0)+(g*92|0)+36|0;x=i+156+(f*184|0)+(g*92|0)+20|0;z=i+156+(f*184|0)+(g*92|0)+24|0;A=i+156+(f*184|0)+(g*92|0)+28|0;C=i+156+(f*184|0)+(g*92|0)+60|0;D=i+156+(f*184|0)+(g*92|0)+64|0;E=i+156+(f*184|0)+(g*92|0)+68|0;F=i+72|0;G=c[199]|0;H=c[205]|0;t=120;P=-120;do{I=(t|0)/2|0;J=I+P|0;b=J+127|0;n=c[i+40480+(b<<2)>>2]|0;s=c[K>>2]|0;o=((n|0)<0)<<31>>31;s=rb(s|0,((s|0)<0)<<31>>31|0,n|0,o|0)|0;nb(s|0,y|0,-2147483648,0)|0;if((y|0)<=165140){m=i+39456+(b<<3)|0;l=c[L>>2]|0;j=0;k=0;do{b=c[l+(k<<2)>>2]|0;b=(b|0)>-1?b:0-b|0;b=rb(b|0,((b|0)<0)<<31>>31|0,n|0,o|0)|0;nb(b|0,y|0,-2147483648,0)|0;b=y;if((b|0)<1e4)b=c[i+40992+(b<<2)>>2]|0;else{Q=+h[m>>3]*+(c[i+36796+(k<<2)>>2]|0)*4.656612875e-10;b=~~+B(+(+B(+Q)*Q))}c[e+(k<<2)>>2]=b;j=(j|0)<(b|0)?b:j;k=k+1|0}while((k|0)!=576);if((j|0)<=8192){j=576;while(1){if((j|0)<=1){n=10;break}if(c[e+(j+-1<<2)>>2]|0){n=13;break}b=j+-2|0;if(!(c[e+(b<<2)>>2]|0))j=b;else{n=13;break}}do if((n|0)==10){c[M>>2]=0;n=20}else if((n|0)==13){c[M>>2]=0;if((j|0)>3){l=0;while(1){if((c[e+(j+-1<<2)>>2]|0)>=2){n=21;break}if((c[e+(j+-2<<2)>>2]|0)>=2){n=21;break}if((c[e+(j+-3<<2)>>2]|0)>=2){n=21;break}b=j+-4|0;k=l+1|0;if((c[e+(b<<2)>>2]|0)>=2){n=21;break}c[M>>2]=k;if((b|0)>3){j=b;l=k}else{n=15;break}}if((n|0)==15){s=b>>1;c[O>>2]=s;j=b;b=s}else if((n|0)==21){b=j>>>1;c[O>>2]=b;if(!l){c[u>>2]=1;b=0;n=27;break}else k=l}l=0;n=j;o=0;m=0;while(1){q=c[e+(n<<2)>>2]|0;p=c[e+((n|1)<<2)>>2]|0;R=c[e+(n+2<<2)>>2]|0;r=c[e+(n+3<<2)>>2]|0;s=(p<<1)+q+(R<<2)+(r<<3)|0;q=(q|0)!=0;r=((R|0)!=0&1)+((p|0)==0?q&1:q?2:1)+((r|0)!=0&1)|0;l=(d[G+s>>0]|0)+l+r|0;m=r+m+(d[H+s>>0]|0)|0;o=o+1|0;if((o|0)==(k|0)){k=b;n=25;break}else n=n+4|0}}else n=20}while(0);if((n|0)==20){k=j>>1;c[O>>2]=k;m=0;l=0;n=25}if((n|0)==25){n=0;R=(l|0)<(m|0);b=R?l:m;c[u>>2]=(R^1)&1;if(!k){c[v>>2]=0;c[w>>2]=0;s=b;l=c[C>>2]|0}else n=27}if((n|0)==27){m=c[F>>2]|0;l=0;while(1)if((c[1464+(m*92|0)+(l<<2)>>2]|0)<(j|0))l=l+1|0;else break;k=c[824+(l<<3)>>2]|0;while(1){n=1464+(m*92|0)+(k+1<<2)|0;o=c[n>>2]|0;if((k|0)!=0&(o|0)>(j|0))k=k+-1|0;else break}c[v>>2]=k;c[C>>2]=o;k=c[824+(l<<3)+4>>2]|0;while(1){l=c[n+(k+1<<2)>>2]|0;if((k|0)!=0&(l|0)>(j|0))k=k+-1|0;else break}c[w>>2]=k;c[D>>2]=l;c[E>>2]=j;s=b;l=o}c[x>>2]=0;c[z>>2]=0;c[A>>2]=0;if(!l)m=0;else{m=xa(e,0,l)|0;c[x>>2]=m}k=c[D>>2]|0;p=k>>>0>l>>>0;if(p){q=xa(e,l,k)|0;c[z>>2]=q}else q=0;if(j>>>0>k>>>0){r=xa(e,k,j)|0;c[A>>2]=r}else r=0;do if(m){o=c[8+(m*24|0)+4>>2]|0;n=c[8+(m*24|0)+8>>2]|0;b=(l|0)!=0;if(m>>>0>15){if(!b){b=0;break}m=c[8+(m*24|0)+20>>2]|0;b=0;j=0;do{S=c[e+(j<<2)>>2]|0;R=c[e+((j|1)<<2)>>2]|0;U=(S|0)>14;S=U?15:S;T=(R|0)>14;R=T?15:R;b=(U?n:0)+b+(T?n:0)+(d[m+((N(S,o)|0)+R)>>0]|0)+((S|0)!=0&1)+((R|0)!=0&1)|0;j=j+2|0}while(j>>>0<l>>>0)}else{if(!b){b=0;break}m=c[8+(m*24|0)+20>>2]|0;j=0;b=0;do{T=c[e+(j<<2)>>2]|0;U=c[e+((j|1)<<2)>>2]|0;b=((T|0)!=0&1)+b+((U|0)!=0&1)+(d[m+((N(T,o)|0)+U)>>0]|0)|0;j=j+2|0}while(j>>>0<l>>>0)}}else b=0;while(0);if(q){o=c[8+(q*24|0)+4>>2]|0;n=c[8+(q*24|0)+8>>2]|0;if(q>>>0>15)if(p){m=c[8+(q*24|0)+20>>2]|0;j=0;do{T=c[e+(l<<2)>>2]|0;U=c[e+(l+1<<2)>>2]|0;R=(T|0)>14;T=R?15:T;S=(U|0)>14;U=S?15:U;j=(R?n:0)+j+(S?n:0)+(d[m+((N(T,o)|0)+U)>>0]|0)+((T|0)!=0&1)+((U|0)!=0&1)|0;l=l+2|0}while(l>>>0<k>>>0)}else j=0;else if(p){m=c[8+(q*24|0)+20>>2]|0;j=0;do{T=c[e+(l<<2)>>2]|0;U=c[e+(l+1<<2)>>2]|0;j=((T|0)!=0&1)+j+((U|0)!=0&1)+(d[m+((N(T,o)|0)+U)>>0]|0)|0;l=l+2|0}while(l>>>0<k>>>0)}else j=0;b=j+b|0}if(r){n=c[E>>2]|0;o=c[8+(r*24|0)+4>>2]|0;m=c[8+(r*24|0)+8>>2]|0;j=k>>>0<n>>>0;if(r>>>0>15)if(j){l=c[8+(r*24|0)+20>>2]|0;j=0;do{T=c[e+(k<<2)>>2]|0;U=c[e+(k+1<<2)>>2]|0;R=(T|0)>14;T=R?15:T;S=(U|0)>14;U=S?15:U;j=(R?m:0)+j+(S?m:0)+(d[l+((N(T,o)|0)+U)>>0]|0)+((T|0)!=0&1)+((U|0)!=0&1)|0;k=k+2|0}while(k>>>0<n>>>0)}else j=0;else if(j){l=c[8+(r*24|0)+20>>2]|0;j=0;do{T=c[e+(k<<2)>>2]|0;U=c[e+(k+1<<2)>>2]|0;j=((T|0)!=0&1)+j+((U|0)!=0&1)+(d[l+((N(T,o)|0)+U)>>0]|0)|0;k=k+2|0}while(k>>>0<n>>>0)}else j=0;b=j+b|0}b=b+s|0}else b=1e5}else b=1e5;U=(b|0)<(a|0);P=U?P:J;t=U?I:t-I|0}while((t|0)>1);l=i+156+(f*184|0)+(g*92|0)|0;c[i+156+(f*184|0)+(g*92|0)+72>>2]=P;b=c[i+156+(f*184|0)+(g*92|0)+16>>2]|0;k=c[1044+(b<<2)>>2]|0;b=c[1108+(b<<2)>>2]|0;if(f){j=b*5|0;b=((c[i+124+(g<<4)+4>>2]|0)==0?k*5|0:0)+((c[i+124+(g<<4)>>2]|0)==0?k*6|0:0)+((c[i+124+(g<<4)+8>>2]|0)==0?j:0)|0;if(c[i+124+(g<<4)+12>>2]|0){U=b;T=i+156+(f*184|0)+(g*92|0)+52|0;c[T>>2]=U;U=a-U|0;U=wa(e,U,l,0,0,i)|0;T=c[T>>2]|0;U=T+U|0;c[l>>2]=U;return U|0}}else{j=b*5|0;b=j+(k*11|0)|0}U=b+j|0;T=i+156+(f*184|0)+(g*92|0)+52|0;c[T>>2]=U;U=a-U|0;U=wa(e,U,l,0,0,i)|0;T=c[T>>2]|0;U=T+U|0;c[l>>2]=U;return U|0}function za(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=l;l=l+672|0;t=F;b=c[a>>2]|0;if(!b){Pa(a);l=F;return}z=a+16|0;A=a+34488|0;B=a+39100|0;C=a+8|0;D=a+72|0;E=a+39452|0;u=a+39448|0;v=a+39104|0;w=a+39108|0;x=b*23|0;d=c[z>>2]|0;s=0;while(1){r=x+(N(s,-23)|0)|0;b=b+-1|0;if((d|0)>0){q=a+((b<<4)+124)|0;p=0;while(1){o=a+140+(r+(p*46|0)<<2)|0;c[A>>2]=a+25264+(b*4608|0)+(p*2304|0);d=576;e=0;a:while(1){c[B>>2]=e;while(1){f=d+-1|0;if(!d)break a;n=c[(c[A>>2]|0)+(f<<2)>>2]|0;e=((n|0)<0)<<31>>31;e=rb(n|0,e|0,n|0,e|0)|0;e=nb(e|0,y|0,1073741824,0)|0;e=pb(e|0,y|0,31)|0;c[a+34492+(f<<2)>>2]=e;e=c[(c[A>>2]|0)+(f<<2)>>2]|0;e=(e|0)>-1?e:0-e|0;c[a+36796+(f<<2)>>2]=e;if((e|0)>(c[B>>2]|0)){d=f;continue a}else d=f}}m=a+2224+(b*4608|0)+(p*2304|0)|0;n=a+156+(p*184|0)+(b*92|0)|0;c[a+156+(p*184|0)+(b*92|0)+56>>2]=21;ob(t+(p*336|0)+(b*168|0)|0,0,168)|0;b:do if((c[C>>2]|0)==3){k=c[D>>2]|0;c[a+39448+(p<<2)>>2]=c[B>>2];d=0;e=575;while(1){d=(c[a+34492+(e<<2)>>2]>>10)+d|0;if(!e)break;else e=e+-1|0}if(!d)d=0;else d=~~(+L(+(+(d|0)*4.768371584e-07))/.69314718);c[a+39104+(p<<2)>>2]=d;i=20;j=c[1464+(k*92|0)+84>>2]|0;while(1){f=j;j=c[1464+(k*92|0)+(i<<2)>>2]|0;if((j|0)<(f|0)){d=0;e=j;do{d=(c[a+34492+(e<<2)>>2]>>10)+d|0;e=e+1|0}while((e|0)!=(f|0));if(d)d=~~(+L(+(+(d|0)*4.768371584e-07))/.69314718);else d=0}else d=0;c[a+39112+(p*84|0)+(i<<2)>>2]=d;g=+h[t+(p*336|0)+(b*168|0)+(i<<3)>>3];if(g!=0.0)d=~~(+L(+g)/.69314718);else d=0;c[a+39280+(p*84|0)+(i<<2)>>2]=d;if(!i)break;else i=i+-1|0}if((p|0)==1){j=(c[u>>2]|0)!=0;e=c[E>>2]|0?3:2;i=(c[v>>2]|0)-(c[w>>2]|0)|0;i=(((i|0)>-1?i:0-i|0)|0)<10;d=0;f=20;while(1){k=(c[a+39112+(f<<2)>>2]|0)-(c[a+39196+(f<<2)>>2]|0)|0;d=((k|0)>-1?k:0-k|0)+d|0;if(!f)break;else f=f+-1|0}if(((j&1)+e+(i&1)+((d|0)<100&1)|0)==6){d=0;e=0}else{c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;break}do{while(1){k=a+124+(b<<4)+(d<<2)|0;c[k>>2]=0;d=d+1|0;j=e;e=c[1008+(d<<2)>>2]|0;if((j|0)<(e|0)){f=0;i=0;do{G=(c[a+39112+(j<<2)>>2]|0)-(c[a+39196+(j<<2)>>2]|0)|0;f=((G|0)>-1?G:0-G|0)+f|0;G=(c[a+39280+(j<<2)>>2]|0)-(c[a+39364+(j<<2)>>2]|0)|0;i=((G|0)>-1?G:0-G|0)+i|0;j=j+1|0}while((j|0)!=(e|0))}else{i=0;f=0}if((f|0)<10&(i|0)<10)break;c[k>>2]=0;if((d|0)>=4)break b}c[k>>2]=1}while((d|0)<4)}}while(0);d=Na(a+2192+(b<<4)+(p<<3)|0,a)|0;e=a+1208+(p*176|0)+(b*88|0)|0;f=e+88|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));ob(a+1560+(p*312|0)+(b*156|0)|0,0,156)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[n>>2]=0;c[a+156+(p*184|0)+(b*92|0)+4>>2]=0;c[a+156+(p*184|0)+(b*92|0)+8>>2]=0;e=a+156+(p*184|0)+(b*92|0)+16|0;f=e+40|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));if(c[B>>2]|0)c[n>>2]=ya(d,0,m,p,b,a)|0;Oa(n,a);c[a+156+(p*184|0)+(b*92|0)+12>>2]=(c[a+156+(p*184|0)+(b*92|0)+72>>2]|0)+210;p=p+1|0;d=c[z>>2]|0;if((p|0)>=(d|0))break}}if(!b)break;else s=s+1|0}Pa(a);l=F;return}function Aa(a){a=a|0;var b=0,d=0,e=0.0;b=128;d=127;while(1){e=+Y(+(+(128-b|0)*.25));h[a+39456+(d<<3)>>3]=e;e=e*2.0;c[a+40480+(d<<2)>>2]=e>2147483647.0?2147483647:~~(e+.5);if(!d){b=9999;break}else{b=d;d=d+-1|0}}while(1){e=+(b|0);c[a+40992+(b<<2)>>2]=~~(+B(+(e*+B(+e)))+-.0946+.5);if(!b)break;else b=b+-1|0}return}function Ba(a){a=a|0;var b=0,d=0.0,e=0;b=17;while(1){d=+(b<<1|1|0);e=35;while(1){c[a+80992+(b*144|0)+(e<<2)>>2]=~~(+E(+((+(e|0)+.5)*.087266462599717))*+D(+(d*(+((e<<1)+19|0)*.043633231299858195)))*2147483647.0);if(!e)break;else e=e+-1|0}if(!b)break;else b=b+-1|0}return}function Ca(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;s=l;l=l+144|0;p=s;d=c[a>>2]|0;if(!d){l=s;return}q=a+16|0;r=p+140|0;do{d=d+-1|0;e=c[q>>2]|0;if((e|0)>0){o=a+2184+(d<<2)|0;n=0;do{m=a+25264+(d*4608|0)+(n*2304|0)|0;k=n;n=n+1|0;e=0;do{Ea(o,a+11440+(d*6912|0)+(n*2304|0)+(e<<7)|0,d,a,b);j=e|1;Ea(o,a+11440+(d*6912|0)+(n*2304|0)+(j<<7)|0,d,a,b);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+4|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+12|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+20|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+28|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+36|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+44|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+52|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+60|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+68|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+76|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+84|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+92|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+100|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+108|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+116|0;c[i>>2]=0-(c[i>>2]|0);j=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+124|0;c[j>>2]=0-(c[j>>2]|0);e=e+2|0}while((e|0)<18);j=0;while(1){e=18;f=17;while(1){c[p+(f<<2)>>2]=c[a+11440+(d*6912|0)+(k*2304|0)+(f<<7)+(j<<2)>>2];c[p+(e+17<<2)>>2]=c[a+11440+(d*6912|0)+(n*2304|0)+(f<<7)+(j<<2)>>2];if(!f)break;else{e=f;f=f+-1|0}}g=c[r>>2]|0;h=((g|0)<0)<<31>>31;i=17;while(1){e=c[a+80992+(i*144|0)+140>>2]|0;rb(e|0,((e|0)<0)<<31>>31|0,g|0,h|0)|0;e=35;f=y;do{v=e+-1|0;t=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,t|0,((t|0)<0)<<31>>31|0)|0;t=y+f|0;v=e+-2|0;u=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;t=t+y|0;u=e+-3|0;v=c[p+(u<<2)>>2]|0;u=c[a+80992+(i*144|0)+(u<<2)>>2]|0;rb(u|0,((u|0)<0)<<31>>31|0,v|0,((v|0)<0)<<31>>31|0)|0;t=t+y|0;v=e+-4|0;u=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;t=t+y|0;u=e+-5|0;v=c[p+(u<<2)>>2]|0;u=c[a+80992+(i*144|0)+(u<<2)>>2]|0;rb(u|0,((u|0)<0)<<31>>31|0,v|0,((v|0)<0)<<31>>31|0)|0;t=t+y|0;v=e+-6|0;u=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;t=t+y|0;e=e+-7|0;u=c[p+(e<<2)>>2]|0;v=c[a+80992+(i*144|0)+(e<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;f=t+y|0}while((e|0)!=0);c[m+(j*72|0)+(i<<2)>>2]=f;if(!i)break;else i=i+-1|0}if(!j){j=1;continue}v=m+(j*72|0)|0;e=c[v>>2]|0;u=((e|0)<0)<<31>>31;w=rb(e|0,u|0,1841452035,0)|0;i=y;t=j+-1|0;h=m+(t*72|0)+68|0;g=c[h>>2]|0;f=((g|0)<0)<<31>>31;x=rb(g|0,f|0,1104871221,0)|0;i=nb(x|0,y|0,w|0,i|0)|0;i=pb(i|0,y|0,31)|0;u=rb(e|0,u|0,-1104871221,-1)|0;e=y;f=rb(g|0,f|0,1841452035,0)|0;e=nb(f|0,y|0,u|0,e|0)|0;e=pb(e|0,y|0,31)|0;c[h>>2]=e;c[v>>2]=i;v=m+(j*72|0)+4|0;i=c[v>>2]|0;h=((i|0)<0)<<31>>31;e=rb(i|0,h|0,1893526520,0)|0;u=y;f=m+(t*72|0)+64|0;g=c[f>>2]|0;w=((g|0)<0)<<31>>31;x=rb(g|0,w|0,1013036688,0)|0;u=nb(x|0,y|0,e|0,u|0)|0;u=pb(u|0,y|0,31)|0;h=rb(i|0,h|0,-1013036688,-1)|0;i=y;w=rb(g|0,w|0,1893526520,0)|0;i=nb(w|0,y|0,h|0,i|0)|0;i=pb(i|0,y|0,31)|0;c[f>>2]=i;c[v>>2]=u;v=m+(j*72|0)+8|0;u=c[v>>2]|0;f=((u|0)<0)<<31>>31;i=rb(u|0,f|0,2039311994,0)|0;h=y;w=m+(t*72|0)+60|0;g=c[w>>2]|0;e=((g|0)<0)<<31>>31;x=rb(g|0,e|0,672972958,0)|0;h=nb(x|0,y|0,i|0,h|0)|0;h=pb(h|0,y|0,31)|0;f=rb(u|0,f|0,-672972958,-1)|0;u=y;e=rb(g|0,e|0,2039311994,0)|0;u=nb(e|0,y|0,f|0,u|0)|0;u=pb(u|0,y|0,31)|0;c[w>>2]=u;c[v>>2]=h;v=m+(j*72|0)+12|0;h=c[v>>2]|0;w=((h|0)<0)<<31>>31;u=rb(h|0,w|0,2111652007,0)|0;f=y;e=m+(t*72|0)+56|0;g=c[e>>2]|0;i=((g|0)<0)<<31>>31;x=rb(g|0,i|0,390655621,0)|0;f=nb(x|0,y|0,u|0,f|0)|0;f=pb(f|0,y|0,31)|0;w=rb(h|0,w|0,-390655621,-1)|0;h=y;i=rb(g|0,i|0,2111652007,0)|0;h=nb(i|0,y|0,w|0,h|0)|0;h=pb(h|0,y|0,31)|0;c[e>>2]=h;c[v>>2]=f;v=m+(j*72|0)+16|0;f=c[v>>2]|0;e=((f|0)<0)<<31>>31;h=rb(f|0,e|0,2137858230,0)|0;w=y;i=m+(t*72|0)+52|0;g=c[i>>2]|0;u=((g|0)<0)<<31>>31;x=rb(g|0,u|0,203096531,0)|0;w=nb(x|0,y|0,h|0,w|0)|0;w=pb(w|0,y|0,31)|0;e=rb(f|0,e|0,-203096531,-1)|0;f=y;u=rb(g|0,u|0,2137858230,0)|0;f=nb(u|0,y|0,e|0,f|0)|0;f=pb(f|0,y|0,31)|0;c[i>>2]=f;c[v>>2]=w;v=m+(j*72|0)+20|0;w=c[v>>2]|0;i=((w|0)<0)<<31>>31;f=rb(w|0,i|0,2145680959,0)|0;e=y;u=m+(t*72|0)+48|0;g=c[u>>2]|0;h=((g|0)<0)<<31>>31;x=rb(g|0,h|0,87972919,0)|0;e=nb(x|0,y|0,f|0,e|0)|0;e=pb(e|0,y|0,31)|0;i=rb(w|0,i|0,-87972919,-1)|0;w=y;h=rb(g|0,h|0,2145680959,0)|0;w=nb(h|0,y|0,i|0,w|0)|0;w=pb(w|0,y|0,31)|0;c[u>>2]=w;c[v>>2]=e;v=m+(j*72|0)+24|0;e=c[v>>2]|0;u=((e|0)<0)<<31>>31;w=rb(e|0,u|0,2147267170,0)|0;i=y;h=m+(t*72|0)+44|0;g=c[h>>2]|0;f=((g|0)<0)<<31>>31;x=rb(g|0,f|0,30491193,0)|0;i=nb(x|0,y|0,w|0,i|0)|0;i=pb(i|0,y|0,31)|0;u=rb(e|0,u|0,-30491193,-1)|0;e=y;f=rb(g|0,f|0,2147267170,0)|0;e=nb(f|0,y|0,u|0,e|0)|0;e=pb(e|0,y|0,31)|0;c[h>>2]=e;c[v>>2]=i;v=m+(j*72|0)+28|0;i=c[v>>2]|0;h=((i|0)<0)<<31>>31;e=rb(i|0,h|0,2147468947,0)|0;u=y;t=m+(t*72|0)+40|0;f=c[t>>2]|0;g=((f|0)<0)<<31>>31;w=rb(f|0,g|0,7945635,0)|0;u=nb(w|0,y|0,e|0,u|0)|0;u=pb(u|0,y|0,31)|0;h=rb(i|0,h|0,-7945635,-1)|0;i=y;g=rb(f|0,g|0,2147468947,0)|0;i=nb(g|0,y|0,h|0,i|0)|0;i=pb(i|0,y|0,31)|0;c[t>>2]=i;c[v>>2]=u;j=j+1|0;if((j|0)==32)break}e=c[q>>2]|0}while((n|0)<(e|0))}tb(a+11440+(d*6912|0)|0,a+11440+(d*6912|0)+(e*2304|0)|0,2304)|0}while((d|0)!=0);l=s;return}function Da(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+16|0;e=j;c[a+83588>>2]=0;c[a+83584>>2]=0;ob(a+91784|0,0,4096)|0;g=31;while(1){i=g<<1|1;b=64;f=63;while(1){d=+D(+(+(N(17-b|0,i)|0)*.049087385212))*1.0e9;h[e>>3]=d;if(!(d>=0.0))+bb(d+-.5,e);else+bb(d+.5,e);c[a+83592+(g<<8)+(f<<2)>>2]=~~(+h[e>>3]*2.147483647);if(!f)break;else{b=f;f=f+-1|0}}if(!g)break;else g=g+-1|0}l=j;return}function Ea(a,b,d,f,g){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+256|0;o=p;j=c[a>>2]|0;n=f+83584+(d<<2)|0;k=g<<5;h=j;i=31;m=c[n>>2]|0;while(1){c[f+91784+(d<<11)+(i+m<<2)>>2]=(e[h>>1]|0)<<16;m=c[n>>2]|0;if(!i)break;else{h=h+(g<<1)|0;i=i+-1|0}}c[a>>2]=j+(k<<1);h=64;a=63;while(1){j=a+m|0;k=c[f+91784+(d<<11)+((j&511)<<2)>>2]|0;g=c[2292+(a<<2)>>2]|0;rb(g|0,((g|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;k=y;g=c[f+91784+(d<<11)+((j+64&511)<<2)>>2]|0;i=c[2292+(h+63<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=y+k|0;g=c[f+91784+(d<<11)+((j+128&511)<<2)>>2]|0;i=c[2292+(h+127<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+192&511)<<2)>>2]|0;i=c[2292+(h+191<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+256&511)<<2)>>2]|0;i=c[2292+(h+255<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+320&511)<<2)>>2]|0;i=c[2292+(h+319<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+384&511)<<2)>>2]|0;i=c[2292+(h+383<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;j=c[f+91784+(d<<11)+((j+448&511)<<2)>>2]|0;g=c[2292+(h+447<<2)>>2]|0;rb(g|0,((g|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;c[o+(a<<2)>>2]=k+y;if(!a)break;else{h=a;a=a+-1|0}}c[n>>2]=m+480&511;i=c[o+252>>2]|0;g=((i|0)<0)<<31>>31;j=31;while(1){h=c[f+83592+(j<<8)+252>>2]|0;rb(i|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;h=y;a=63;do{m=a+-1|0;n=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;n=y+h|0;m=a+-2|0;d=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;n=n+y|0;d=a+-3|0;m=c[f+83592+(j<<8)+(d<<2)>>2]|0;d=c[o+(d<<2)>>2]|0;rb(d|0,((d|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;n=n+y|0;m=a+-4|0;d=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;n=n+y|0;d=a+-5|0;m=c[f+83592+(j<<8)+(d<<2)>>2]|0;d=c[o+(d<<2)>>2]|0;rb(d|0,((d|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;n=n+y|0;m=a+-6|0;d=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;n=n+y|0;a=a+-7|0;d=c[f+83592+(j<<8)+(a<<2)>>2]|0;m=c[o+(a<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;h=n+y|0}while((a|0)!=0);c[b+(j<<2)>>2]=h;if(!j)break;else j=j+-1|0}l=p;return}function Fa(a){a=a|0;c[a+4>>2]=128;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=1;return}function Ga(a,b){a=a|0;b=b|0;if((c[1208+(b<<2)>>2]|0)==(a|0)){b=0;return b|0}if((c[1224+(b<<2)>>2]|0)==(a|0)){b=1;return b|0}if((c[1240+(b<<2)>>2]|0)==(a|0)){b=2;return b|0}if((c[1256+(b<<2)>>2]|0)==(a|0)){b=3;return b|0}if((c[1272+(b<<2)>>2]|0)==(a|0)){b=4;return b|0}if((c[1288+(b<<2)>>2]|0)==(a|0)){b=5;return b|0}if((c[1304+(b<<2)>>2]|0)==(a|0)){b=6;return b|0}if((c[1320+(b<<2)>>2]|0)==(a|0)){b=7;return b|0}if((c[1336+(b<<2)>>2]|0)==(a|0)){b=8;return b|0}if((c[1352+(b<<2)>>2]|0)==(a|0)){b=9;return b|0}if((c[1368+(b<<2)>>2]|0)==(a|0)){b=10;return b|0}if((c[1384+(b<<2)>>2]|0)==(a|0)){b=11;return b|0}if((c[1400+(b<<2)>>2]|0)==(a|0)){b=12;return b|0}if((c[1416+(b<<2)>>2]|0)==(a|0)){b=13;return b|0}if((c[1432+(b<<2)>>2]|0)==(a|0)){b=14;return b|0}else return ((c[1448+(b<<2)>>2]|0)==(a|0)?15:-1)|0;return 0}function Ha(a,b){a=a|0;b=b|0;if((c[293]|0)!=(a|0))if((c[294]|0)!=(a|0))if((c[295]|0)!=(a|0))if((c[296]|0)!=(a|0))if((c[297]|0)!=(a|0))if((c[298]|0)!=(a|0))if((c[299]|0)!=(a|0))if((c[300]|0)!=(a|0))if((c[301]|0)==(a|0))a=8;else{b=-1;return b|0}else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;a=a>>>0<3?3:a>>>0<6?2:0;b=(Ga(b,a)|0)<0;b=b?-1:a;return b|0}function Ia(a){a=a|0;return (c[a+16>>2]|0)*576|0}function Ja(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0.0;e=a+4|0;b=c[e>>2]|0;i=a+12|0;d=c[i>>2]|0;j=c[293]|0;if((j|0)!=(b|0))if((c[294]|0)!=(b|0))if((c[295]|0)!=(b|0))if((c[296]|0)!=(b|0))if((c[297]|0)!=(b|0))if((c[298]|0)!=(b|0))if((c[299]|0)!=(b|0))if((c[300]|0)!=(b|0))if((c[301]|0)==(b|0))b=8;else{j=0;return j|0}else b=7;else b=6;else b=5;else b=4;else b=3;else b=2;else b=1;else b=0;if((Ga(d,b>>>0<3?3:b>>>0<6?2:0)|0)<0){j=0;return j|0}g=ib(1,95880)|0;if(!g){j=g;return j|0}Da(g);Ba(g);Aa(g);c[g>>2]=c[a>>2];f=c[e>>2]|0;c[g+4>>2]=f;d=g+8|0;c[g+20>>2]=c[a+8>>2];e=c[i>>2]|0;c[g+24>>2]=e;c[g+28>>2]=c[a+16>>2];c[g+88>>2]=c[a+20>>2];c[g+92>>2]=c[a+24>>2];c[g+34484>>2]=0;c[g+34480>>2]=0;c[g+12>>2]=1;c[g+76>>2]=0;c[g+80>>2]=0;c[g+84>>2]=0;c[g+40>>2]=8;if((j|0)!=(f|0))if((c[294]|0)!=(f|0))if((c[295]|0)!=(f|0))if((c[296]|0)!=(f|0))if((c[297]|0)!=(f|0))if((c[298]|0)!=(f|0))if((c[299]|0)!=(f|0))if((c[300]|0)==(f|0))b=7;else b=(c[301]|0)==(f|0)?8:-1;else b=6;else b=5;else b=4;else b=3;else b=2;else b=1;else b=0;c[g+72>>2]=b;j=(b|0)<3?3:(b|0)<6?2:0;c[d>>2]=j;c[g+68>>2]=Ga(e,j)|0;j=c[1028+(j<<2)>>2]|0;b=g+16|0;c[b>>2]=j;k=+(j|0)*576.0/+(f|0)*(+(e|0)*1.0e3*.125);j=~~k;c[g+64>>2]=j;k=k-+(j|0);h[g+48>>3]=k;h[g+56>>3]=-k;if(k==0.0)c[g+32>>2]=0;ra(g+96|0,4096);ob(g+116|0,0,408)|0;j=(c[g>>2]|0)==1;c[g+524>>2]=(c[b>>2]|0)==2?(j?168:288):j?104:168;j=g;return j|0}function Ka(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0;c[a+2184>>2]=c[b>>2];if((c[a>>2]|0)==2)c[a+2188>>2]=c[b+4>>2];e=+h[a+48>>3];if(e!=0.0){f=a+56|0;i=+h[f>>3];g=i<=e+-1.0;b=g&1;c[a+32>>2]=b;h[f>>3]=i+(+(g&1)-e)}else b=c[a+32>>2]|0;g=(c[a+64>>2]|0)+b<<3;c[a+36>>2]=g;c[a+528>>2]=(g-(c[a+524>>2]|0)|0)/(c[a+16>>2]|0)|0;Ca(a,1);za(a);va(a);g=a+104|0;c[d>>2]=c[g>>2];c[g>>2]=0;return c[a+96>>2]|0}function La(a,b){a=a|0;b=b|0;var d=0;d=a+104|0;c[b>>2]=c[d>>2];c[d>>2]=0;return c[a+96>>2]|0}function Ma(a){a=a|0;sa(a+96|0);hb(a);return}function Na(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=(c[b+528>>2]|0)/(c[b>>2]|0)|0;e=(d|0)<4095?d:4095;f=c[b+34484>>2]|0;if(!f){f=e;return f|0}a=~~(+h[a>>3]*3.1-+(d|0));d=c[b+34480>>2]|0;if((a|0)>100){b=(d*6|0)/10|0;a=(b|0)<(a|0)?b:a}else a=0;f=d-((f<<3|0)/10|0)|0;f=((f|0)>(a|0)?f:a)+e|0;f=(f|0)<4095?f:4095;return f|0}function Oa(a,b){a=a|0;b=b|0;var d=0;d=b+34480|0;c[d>>2]=((c[b+528>>2]|0)/(c[b>>2]|0)|0)-(c[a>>2]|0)+(c[d>>2]|0);return}function Pa(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=c[a>>2]|0;if((f|0)==2?c[a+528>>2]&1|0:0){h=a+34480|0;c[h>>2]=(c[h>>2]|0)+1}h=a+34480|0;e=c[h>>2]|0;b=e-(c[a+34484>>2]|0)|0;b=(b|0)>0?b:0;e=e-b|0;g=(e|0)%8|0;b=g+b|0;c[h>>2]=e-g;if(!b)return;d=a+156|0;e=(c[d>>2]|0)+b|0;if(e>>>0<4095){c[d>>2]=e;return}h=a+16|0;d=c[h>>2]|0;if((d|0)>0){g=0;e=f;do{if((e|0)>0){f=0;d=e;while(1){if(!b){b=0;e=d;break}e=a+156+(g*184|0)+(f*92|0)|0;i=c[e>>2]|0;d=4095-i|0;d=(d|0)<(b|0)?d:b;c[e>>2]=d+i;b=b-d|0;f=f+1|0;d=c[a>>2]|0;if((f|0)>=(d|0)){e=d;break}}d=c[h>>2]|0}g=g+1|0}while((g|0)<(d|0))}c[a+120>>2]=b;return}function Qa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+32|0;g=f;c[g>>2]=a;c[g+4>>2]=b;b=g+8|0;Fa(b);c[b>>2]=d;c[g+12>>2]=e;e=Ja(g)|0;l=f;return e|0}function Ra(){return 8944}function Sa(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Za(c[a+60>>2]|0)|0;a=Va(ba(6,d|0)|0)|0;l=b;return a|0}function Ta(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=Va(ga(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=(o<<31>>31)+b|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=Va(ga(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function Ua(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((Va(ca(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function Va(a){a=a|0;if(a>>>0>4294963200){c[(Wa()|0)>>2]=0-a;a=-1}return a|0}function Wa(){return (Xa()|0)+64|0}function Xa(){return Ya()|0}function Ya(){return 4340}function Za(a){a=a|0;return a|0}function _a(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,ea(54,f|0)|0):0)a[b+75>>0]=-1;f=Ta(b,d,e)|0;l=g;return f|0}function $a(a){a=a|0;return 0}function ab(a){a=a|0;return}function bb(a,b){a=+a;b=b|0;var d=0,e=0,f=0,g=0,i=0.0;h[j>>3]=a;f=c[j>>2]|0;g=c[j+4>>2]|0;d=pb(f|0,g|0,52)|0;d=d&2047;e=d+-1023|0;if((e|0)>51){h[b>>3]=a;c[j>>2]=0;c[j+4>>2]=g&-2147483648;return +((f|0)==0&(g&1048575|0)==0|(e|0)!=1024?+h[j>>3]:a)}do if(d>>>0>=1023){d=pb(-1,1048575,e|0)|0;e=y;if((d&f|0)==0&(e&g|0)==0){h[b>>3]=a;c[j>>2]=0;c[j+4>>2]=g&-2147483648;a=+h[j>>3];break}else{d=f&~d;f=g&~e;c[j>>2]=d;c[j+4>>2]=f;i=+h[j>>3];g=b;c[g>>2]=d;c[g+4>>2]=f;a=a-i;break}}else{f=b;c[f>>2]=0;c[f+4>>2]=g&-2147483648}while(0);return +a}function cb(){Z(9008);return 9016}function db(){fa(9008);return}function eb(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=fb(a)|0;break}d=($a(a)|0)==0;b=fb(a)|0;if(!d)ab(a)}else{if(!(c[1177]|0))b=0;else b=eb(c[1177]|0)|0;a=c[(cb()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=$a(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=fb(a)|0|b;if(d|0)ab(a);a=c[a+56>>2]|0}while((a|0)!=0);db()}while(0);return b|0}function fb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(ja[c[a+36>>2]&3](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0<g>>>0)ja[c[a+40>>2]&3](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function gb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=l;l=l+16|0;o=K;do if(a>>>0<245){p=a>>>0<11?16:a+11&-8;a=p>>>3;t=c[2255]|0;d=t>>>a;if(d&3|0){a=(d&1^1)+a|0;d=9060+(a<<1<<2)|0;e=d+8|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[2259]|0)>>>0)$();b=h+12|0;if((c[b>>2]|0)==(f|0)){c[b>>2]=d;c[e>>2]=h;break}else $()}else c[2255]=t&~(1<<a);while(0);J=a<<3;c[f+4>>2]=J|3;J=f+J+4|0;c[J>>2]=c[J>>2]|1;J=g;l=K;return J|0}s=c[2257]|0;if(p>>>0>s>>>0){if(d|0){i=2<<a;a=d<<a&(i|0-i);a=(a&0-a)+-1|0;i=a>>>12&16;a=a>>>i;e=a>>>5&8;a=a>>>e;g=a>>>2&4;a=a>>>g;d=a>>>1&2;a=a>>>d;b=a>>>1&1;b=(e|i|g|d|b)+(a>>>b)|0;a=9060+(b<<1<<2)|0;d=a+8|0;g=c[d>>2]|0;i=g+8|0;e=c[i>>2]|0;do if((a|0)!=(e|0)){if(e>>>0<(c[2259]|0)>>>0)$();f=e+12|0;if((c[f>>2]|0)==(g|0)){c[f>>2]=a;c[d>>2]=e;j=t;break}else $()}else{j=t&~(1<<b);c[2255]=j}while(0);h=(b<<3)-p|0;c[g+4>>2]=p|3;e=g+p|0;c[e+4>>2]=h|1;c[e+h>>2]=h;if(s|0){f=c[2260]|0;b=s>>>3;d=9060+(b<<1<<2)|0;b=1<<b;if(j&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{k=a;m=b}}else{c[2255]=j|b;k=d;m=d+8|0}c[m>>2]=f;c[k+12>>2]=f;c[f+8>>2]=k;c[f+12>>2]=d}c[2257]=h;c[2260]=e;J=i;l=K;return J|0}k=c[2256]|0;if(k){a=(k&0-k)+-1|0;I=a>>>12&16;a=a>>>I;H=a>>>5&8;a=a>>>H;J=a>>>2&4;a=a>>>J;d=a>>>1&2;a=a>>>d;b=a>>>1&1;b=c[9324+((H|I|J|d|b)+(a>>>b)<<2)>>2]|0;a=(c[b+4>>2]&-8)-p|0;d=c[b+16+(((c[b+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){j=b;h=a}else{do{I=(c[d+4>>2]&-8)-p|0;J=I>>>0<a>>>0;a=J?I:a;b=J?d:b;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0}while((d|0)!=0);j=b;h=a}f=c[2259]|0;if(j>>>0<f>>>0)$();i=j+p|0;if(j>>>0>=i>>>0)$();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){n=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0<f>>>0)$();else{c[a>>2]=0;n=b;break}}else{e=c[j+8>>2]|0;if(e>>>0<f>>>0)$();b=e+12|0;if((c[b>>2]|0)!=(j|0))$();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;n=d;break}else $()}while(0);a:do if(g|0){b=c[j+28>>2]|0;a=9324+(b<<2)|0;do if((j|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[2256]=k&~(1<<b);break a}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=n;if(!n)break a;else break}else $();while(0);a=c[2259]|0;if(n>>>0<a>>>0)$();c[n+24>>2]=g;b=c[j+16>>2]|0;do if(b|0)if(b>>>0<a>>>0)$();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);b=c[j+20>>2]|0;if(b|0)if(b>>>0<(c[2259]|0)>>>0)$();else{c[n+20>>2]=b;c[b+24>>2]=n;break}}while(0);if(h>>>0<16){J=h+p|0;c[j+4>>2]=J|3;J=j+J+4|0;c[J>>2]=c[J>>2]|1}else{c[j+4>>2]=p|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(s|0){e=c[2260]|0;b=s>>>3;d=9060+(b<<1<<2)|0;b=1<<b;if(t&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{q=a;r=b}}else{c[2255]=t|b;q=d;r=d+8|0}c[r>>2]=e;c[q+12>>2]=e;c[e+8>>2]=q;c[e+12>>2]=d}c[2257]=h;c[2260]=i}J=j+8|0;l=K;return J|0}}}else if(a>>>0<=4294967231){a=a+11|0;p=a&-8;k=c[2256]|0;if(k){e=0-p|0;a=a>>>8;if(a)if(p>>>0>16777215)i=31;else{r=(a+1048320|0)>>>16&8;C=a<<r;q=(C+520192|0)>>>16&4;C=C<<q;i=(C+245760|0)>>>16&2;i=14-(q|r|i)+(C<<i>>>15)|0;i=p>>>(i+7|0)&1|i<<1}else i=0;d=c[9324+(i<<2)>>2]|0;b:do if(!d){d=0;a=0;C=81}else{a=0;h=p<<((i|0)==31?0:25-(i>>>1)|0);g=0;while(1){f=(c[d+4>>2]&-8)-p|0;if(f>>>0<e>>>0)if(!f){a=d;e=0;f=d;C=85;break b}else{a=d;e=f}f=c[d+20>>2]|0;d=c[d+16+(h>>>31<<2)>>2]|0;g=(f|0)==0|(f|0)==(d|0)?g:f;f=(d|0)==0;if(f){d=g;C=81;break}else h=h<<((f^1)&1)}}while(0);if((C|0)==81){if((d|0)==0&(a|0)==0){a=2<<i;a=k&(a|0-a);if(!a)break;r=(a&0-a)+-1|0;m=r>>>12&16;r=r>>>m;j=r>>>5&8;r=r>>>j;n=r>>>2&4;r=r>>>n;q=r>>>1&2;r=r>>>q;d=r>>>1&1;a=0;d=c[9324+((j|m|n|q|d)+(r>>>d)<<2)>>2]|0}if(!d){j=a;i=e}else{f=d;C=85}}if((C|0)==85)while(1){C=0;d=(c[f+4>>2]&-8)-p|0;r=d>>>0<e>>>0;d=r?d:e;a=r?f:a;f=c[f+16+(((c[f+16>>2]|0)==0&1)<<2)>>2]|0;if(!f){j=a;i=d;break}else{e=d;C=85}}if((j|0)!=0?i>>>0<((c[2257]|0)-p|0)>>>0:0){f=c[2259]|0;if(j>>>0<f>>>0)$();h=j+p|0;if(j>>>0>=h>>>0)$();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){s=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0<f>>>0)$();else{c[a>>2]=0;s=b;break}}else{e=c[j+8>>2]|0;if(e>>>0<f>>>0)$();b=e+12|0;if((c[b>>2]|0)!=(j|0))$();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;s=d;break}else $()}while(0);c:do if(g){b=c[j+28>>2]|0;a=9324+(b<<2)|0;do if((j|0)==(c[a>>2]|0)){c[a>>2]=s;if(!s){t=k&~(1<<b);c[2256]=t;break c}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=s;if(!s){t=k;break c}else break}else $();while(0);a=c[2259]|0;if(s>>>0<a>>>0)$();c[s+24>>2]=g;b=c[j+16>>2]|0;do if(b|0)if(b>>>0<a>>>0)$();else{c[s+16>>2]=b;c[b+24>>2]=s;break}while(0);b=c[j+20>>2]|0;if(b)if(b>>>0<(c[2259]|0)>>>0)$();else{c[s+20>>2]=b;c[b+24>>2]=s;t=k;break}else t=k}else t=k;while(0);do if(i>>>0>=16){c[j+4>>2]=p|3;c[h+4>>2]=i|1;c[h+i>>2]=i;b=i>>>3;if(i>>>0<256){d=9060+(b<<1<<2)|0;a=c[2255]|0;b=1<<b;if(a&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{x=a;y=b}}else{c[2255]=a|b;x=d;y=d+8|0}c[y>>2]=h;c[x+12>>2]=h;c[h+8>>2]=x;c[h+12>>2]=d;break}b=i>>>8;if(b)if(i>>>0>16777215)b=31;else{I=(b+1048320|0)>>>16&8;J=b<<I;H=(J+520192|0)>>>16&4;J=J<<H;b=(J+245760|0)>>>16&2;b=14-(H|I|b)+(J<<b>>>15)|0;b=i>>>(b+7|0)&1|b<<1}else b=0;d=9324+(b<<2)|0;c[h+28>>2]=b;a=h+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<<b;if(!(t&a)){c[2256]=t|a;c[d>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}a=i<<((b|0)==31?0:25-(b>>>1)|0);e=c[d>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(i|0)){C=139;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=136;break}else{a=a<<1;e=b}}if((C|0)==136)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;break}else if((C|0)==139){b=e+8|0;a=c[b>>2]|0;J=c[2259]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=h;c[b>>2]=h;c[h+8>>2]=a;c[h+12>>2]=e;c[h+24>>2]=0;break}else $()}}else{J=i+p|0;c[j+4>>2]=J|3;J=j+J+4|0;c[J>>2]=c[J>>2]|1}while(0);J=j+8|0;l=K;return J|0}}}else p=-1;while(0);d=c[2257]|0;if(d>>>0>=p>>>0){b=d-p|0;a=c[2260]|0;if(b>>>0>15){J=a+p|0;c[2260]=J;c[2257]=b;c[J+4>>2]=b|1;c[J+b>>2]=b;c[a+4>>2]=p|3}else{c[2257]=0;c[2260]=0;c[a+4>>2]=d|3;J=a+d+4|0;c[J>>2]=c[J>>2]|1}J=a+8|0;l=K;return J|0}h=c[2258]|0;if(h>>>0>p>>>0){H=h-p|0;c[2258]=H;J=c[2261]|0;I=J+p|0;c[2261]=I;c[I+4>>2]=H|1;c[J+4>>2]=p|3;J=J+8|0;l=K;return J|0}if(!(c[2373]|0)){c[2375]=4096;c[2374]=4096;c[2376]=-1;c[2377]=-1;c[2378]=0;c[2366]=0;a=o&-16^1431655768;c[o>>2]=a;c[2373]=a;a=4096}else a=c[2375]|0;i=p+48|0;j=p+47|0;g=a+j|0;f=0-a|0;k=g&f;if(k>>>0<=p>>>0){J=0;l=K;return J|0}a=c[2365]|0;if(a|0?(x=c[2363]|0,y=x+k|0,y>>>0<=x>>>0|y>>>0>a>>>0):0){J=0;l=K;return J|0}d:do if(!(c[2366]&4)){d=c[2261]|0;e:do if(d){e=9468;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(w=e+4|0,(a+(c[w>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){C=163;break e}else e=a}b=g-h&f;if(b>>>0<2147483647){a=sb(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[w>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;C=180;break d}}else{e=a;C=171}}else b=0}else C=163;while(0);do if((C|0)==163){d=sb(0)|0;if((d|0)!=(-1|0)?(b=d,u=c[2374]|0,v=u+-1|0,b=((v&b|0)==0?0:(v+b&0-u)-b|0)+k|0,u=c[2363]|0,v=b+u|0,b>>>0>p>>>0&b>>>0<2147483647):0){y=c[2365]|0;if(y|0?v>>>0<=u>>>0|v>>>0>y>>>0:0){b=0;break}a=sb(b|0)|0;if((a|0)==(d|0)){h=b;g=d;C=180;break d}else{e=a;C=171}}else b=0}while(0);do if((C|0)==171){d=0-b|0;if(!(i>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;C=180;break d}a=c[2375]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;C=180;break d}if((sb(a|0)|0)==(-1|0)){sb(d|0)|0;b=0;break}else{h=a+b|0;g=e;C=180;break d}}while(0);c[2366]=c[2366]|4;C=178}else{b=0;C=178}while(0);if(((C|0)==178?k>>>0<2147483647:0)?(B=sb(k|0)|0,y=sb(0)|0,z=y-B|0,A=z>>>0>(p+40|0)>>>0,!((B|0)==(-1|0)|A^1|B>>>0<y>>>0&((B|0)!=(-1|0)&(y|0)!=(-1|0))^1)):0){h=A?z:b;g=B;C=180}if((C|0)==180){b=(c[2363]|0)+h|0;c[2363]=b;if(b>>>0>(c[2364]|0)>>>0)c[2364]=b;k=c[2261]|0;do if(k){b=9468;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){C=190;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((C|0)==190?(c[b+12>>2]&8|0)==0:0)?k>>>0<g>>>0&k>>>0>=a>>>0:0){c[d>>2]=e+h;J=k+8|0;J=(J&7|0)==0?0:0-J&7;I=k+J|0;J=(c[2258]|0)+(h-J)|0;c[2261]=I;c[2258]=J;c[I+4>>2]=J|1;c[I+J+4>>2]=40;c[2262]=c[2377];break}b=c[2259]|0;if(g>>>0<b>>>0){c[2259]=g;i=g}else i=b;d=g+h|0;b=9468;while(1){if((c[b>>2]|0)==(d|0)){C=198;break}a=c[b+8>>2]|0;if(!a)break;else b=a}if((C|0)==198?(c[b+12>>2]&8|0)==0:0){c[b>>2]=g;n=b+4|0;c[n>>2]=(c[n>>2]|0)+h;n=g+8|0;n=g+((n&7|0)==0?0:0-n&7)|0;b=d+8|0;b=d+((b&7|0)==0?0:0-b&7)|0;m=n+p|0;j=b-n-p|0;c[n+4>>2]=p|3;do if((b|0)!=(k|0)){if((b|0)==(c[2260]|0)){J=(c[2257]|0)+j|0;c[2257]=J;c[2260]=m;c[m+4>>2]=J|1;c[m+J>>2]=J;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;f=a>>>3;f:do if(a>>>0>=256){g=c[b+24>>2]|0;e=c[b+12>>2]|0;do if((e|0)==(b|0)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){H=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}if(d>>>0<i>>>0)$();else{c[d>>2]=0;H=a;break}}else{f=c[b+8>>2]|0;if(f>>>0<i>>>0)$();a=f+12|0;if((c[a>>2]|0)!=(b|0))$();d=e+8|0;if((c[d>>2]|0)==(b|0)){c[a>>2]=e;c[d>>2]=f;H=e;break}else $()}while(0);if(!g)break;a=c[b+28>>2]|0;d=9324+(a<<2)|0;do if((b|0)!=(c[d>>2]|0))if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=H;if(!H)break f;else break}else $();else{c[d>>2]=H;if(H|0)break;c[2256]=c[2256]&~(1<<a);break f}while(0);e=c[2259]|0;if(H>>>0<e>>>0)$();c[H+24>>2]=g;a=b+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0<e>>>0)$();else{c[H+16>>2]=d;c[d+24>>2]=H;break}while(0);a=c[a+4>>2]|0;if(!a)break;if(a>>>0<(c[2259]|0)>>>0)$();else{c[H+20>>2]=a;c[a+24>>2]=H;break}}else{d=c[b+8>>2]|0;e=c[b+12>>2]|0;a=9060+(f<<1<<2)|0;do if((d|0)!=(a|0)){if(d>>>0<i>>>0)$();if((c[d+12>>2]|0)==(b|0))break;$()}while(0);if((e|0)==(d|0)){c[2255]=c[2255]&~(1<<f);break}do if((e|0)==(a|0))E=e+8|0;else{if(e>>>0<i>>>0)$();a=e+8|0;if((c[a>>2]|0)==(b|0)){E=a;break}$()}while(0);c[d+12>>2]=e;c[E>>2]=d}while(0);b=b+h|0;f=h+j|0}else f=j;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[m+4>>2]=f|1;c[m+f>>2]=f;b=f>>>3;if(f>>>0<256){d=9060+(b<<1<<2)|0;a=c[2255]|0;b=1<<b;do if(!(a&b)){c[2255]=a|b;I=d;J=d+8|0}else{b=d+8|0;a=c[b>>2]|0;if(a>>>0>=(c[2259]|0)>>>0){I=a;J=b;break}$()}while(0);c[J>>2]=m;c[I+12>>2]=m;c[m+8>>2]=I;c[m+12>>2]=d;break}b=f>>>8;do if(!b)b=0;else{if(f>>>0>16777215){b=31;break}I=(b+1048320|0)>>>16&8;J=b<<I;H=(J+520192|0)>>>16&4;J=J<<H;b=(J+245760|0)>>>16&2;b=14-(H|I|b)+(J<<b>>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=9324+(b<<2)|0;c[m+28>>2]=b;a=m+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[2256]|0;d=1<<b;if(!(a&d)){c[2256]=a|d;c[e>>2]=m;c[m+24>>2]=e;c[m+12>>2]=m;c[m+8>>2]=m;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){C=265;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=262;break}else{a=a<<1;e=b}}if((C|0)==262)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=m;c[m+24>>2]=e;c[m+12>>2]=m;c[m+8>>2]=m;break}else if((C|0)==265){b=e+8|0;a=c[b>>2]|0;J=c[2259]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=m;c[b>>2]=m;c[m+8>>2]=a;c[m+12>>2]=e;c[m+24>>2]=0;break}else $()}}else{J=(c[2258]|0)+j|0;c[2258]=J;c[2261]=m;c[m+4>>2]=J|1}while(0);J=n+8|0;l=K;return J|0}b=9468;while(1){a=c[b>>2]|0;if(a>>>0<=k>>>0?(D=a+(c[b+4>>2]|0)|0,D>>>0>k>>>0):0)break;b=c[b+8>>2]|0}f=D+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=k+16|0;a=a>>>0<f>>>0?k:a;b=a+8|0;d=g+8|0;d=(d&7|0)==0?0:0-d&7;J=g+d|0;d=h+-40-d|0;c[2261]=J;c[2258]=d;c[J+4>>2]=d|1;c[J+d+4>>2]=40;c[2262]=c[2377];d=a+4|0;c[d>>2]=27;c[b>>2]=c[2367];c[b+4>>2]=c[2368];c[b+8>>2]=c[2369];c[b+12>>2]=c[2370];c[2367]=g;c[2368]=h;c[2370]=0;c[2369]=b;b=a+24|0;do{J=b;b=b+4|0;c[b>>2]=7}while((J+8|0)>>>0<D>>>0);if((a|0)!=(k|0)){g=a-k|0;c[d>>2]=c[d>>2]&-2;c[k+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=9060+(b<<1<<2)|0;a=c[2255]|0;b=1<<b;if(a&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{F=a;G=b}}else{c[2255]=a|b;F=d;G=d+8|0}c[G>>2]=k;c[F+12>>2]=k;c[k+8>>2]=F;c[k+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)d=31;else{I=(b+1048320|0)>>>16&8;J=b<<I;H=(J+520192|0)>>>16&4;J=J<<H;d=(J+245760|0)>>>16&2;d=14-(H|I|d)+(J<<d>>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=9324+(d<<2)|0;c[k+28>>2]=d;c[k+20>>2]=0;c[f>>2]=0;b=c[2256]|0;a=1<<d;if(!(b&a)){c[2256]=b|a;c[e>>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(g|0)){C=292;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=289;break}else{a=a<<1;e=b}}if((C|0)==289)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((C|0)==292){b=e+8|0;a=c[b>>2]|0;J=c[2259]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=k;c[b>>2]=k;c[k+8>>2]=a;c[k+12>>2]=e;c[k+24>>2]=0;break}else $()}}}else{J=c[2259]|0;if((J|0)==0|g>>>0<J>>>0)c[2259]=g;c[2367]=g;c[2368]=h;c[2370]=0;c[2264]=c[2373];c[2263]=-1;b=0;do{J=9060+(b<<1<<2)|0;c[J+12>>2]=J;c[J+8>>2]=J;b=b+1|0}while((b|0)!=32);J=g+8|0;J=(J&7|0)==0?0:0-J&7;I=g+J|0;J=h+-40-J|0;c[2261]=I;c[2258]=J;c[I+4>>2]=J|1;c[I+J+4>>2]=40;c[2262]=c[2377]}while(0);b=c[2258]|0;if(b>>>0>p>>>0){H=b-p|0;c[2258]=H;J=c[2261]|0;I=J+p|0;c[2261]=I;c[I+4>>2]=H|1;c[J+4>>2]=p|3;J=J+8|0;l=K;return J|0}}c[(Wa()|0)>>2]=12;J=0;l=K;return J|0}function hb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if(!a)return;d=a+-8|0;h=c[2259]|0;if(d>>>0<h>>>0)$();a=c[a+-4>>2]|0;b=a&3;if((b|0)==1)$();e=a&-8;o=d+e|0;a:do if(!(a&1)){a=c[d>>2]|0;if(!b)return;k=d+(0-a)|0;j=a+e|0;if(k>>>0<h>>>0)$();if((k|0)==(c[2260]|0)){a=o+4|0;b=c[a>>2]|0;if((b&3|0)!=3){r=k;f=j;m=k;break}c[2257]=j;c[a>>2]=b&-2;c[k+4>>2]=j|1;c[k+j>>2]=j;return}e=a>>>3;if(a>>>0<256){b=c[k+8>>2]|0;d=c[k+12>>2]|0;a=9060+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0<h>>>0)$();if((c[b+12>>2]|0)!=(k|0))$()}if((d|0)==(b|0)){c[2255]=c[2255]&~(1<<e);r=k;f=j;m=k;break}if((d|0)!=(a|0)){if(d>>>0<h>>>0)$();a=d+8|0;if((c[a>>2]|0)==(k|0))g=a;else $()}else g=d+8|0;c[b+12>>2]=d;c[g>>2]=b;r=k;f=j;m=k;break}g=c[k+24>>2]|0;d=c[k+12>>2]|0;do if((d|0)==(k|0)){d=k+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){i=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<h>>>0)$();else{c[b>>2]=0;i=a;break}}else{e=c[k+8>>2]|0;if(e>>>0<h>>>0)$();a=e+12|0;if((c[a>>2]|0)!=(k|0))$();b=d+8|0;if((c[b>>2]|0)==(k|0)){c[a>>2]=d;c[b>>2]=e;i=d;break}else $()}while(0);if(g){a=c[k+28>>2]|0;b=9324+(a<<2)|0;do if((k|0)==(c[b>>2]|0)){c[b>>2]=i;if(!i){c[2256]=c[2256]&~(1<<a);r=k;f=j;m=k;break a}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(k|0)&1)<<2)>>2]=i;if(!i){r=k;f=j;m=k;break a}else break}else $();while(0);d=c[2259]|0;if(i>>>0<d>>>0)$();c[i+24>>2]=g;a=k+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0<d>>>0)$();else{c[i+16>>2]=b;c[b+24>>2]=i;break}while(0);a=c[a+4>>2]|0;if(a)if(a>>>0<(c[2259]|0)>>>0)$();else{c[i+20>>2]=a;c[a+24>>2]=i;r=k;f=j;m=k;break}else{r=k;f=j;m=k}}else{r=k;f=j;m=k}}else{r=d;f=e;m=d}while(0);if(m>>>0>=o>>>0)$();a=o+4|0;b=c[a>>2]|0;if(!(b&1))$();if(!(b&2)){a=c[2260]|0;if((o|0)==(c[2261]|0)){q=(c[2258]|0)+f|0;c[2258]=q;c[2261]=r;c[r+4>>2]=q|1;if((r|0)!=(a|0))return;c[2260]=0;c[2257]=0;return}if((o|0)==(a|0)){q=(c[2257]|0)+f|0;c[2257]=q;c[2260]=m;c[r+4>>2]=q|1;c[m+q>>2]=q;return}f=(b&-8)+f|0;e=b>>>3;b:do if(b>>>0>=256){g=c[o+24>>2]|0;a=c[o+12>>2]|0;do if((a|0)==(o|0)){d=o+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){n=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<(c[2259]|0)>>>0)$();else{c[b>>2]=0;n=a;break}}else{b=c[o+8>>2]|0;if(b>>>0<(c[2259]|0)>>>0)$();d=b+12|0;if((c[d>>2]|0)!=(o|0))$();e=a+8|0;if((c[e>>2]|0)==(o|0)){c[d>>2]=a;c[e>>2]=b;n=a;break}else $()}while(0);if(g|0){a=c[o+28>>2]|0;b=9324+(a<<2)|0;do if((o|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[2256]=c[2256]&~(1<<a);break b}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(o|0)&1)<<2)>>2]=n;if(!n)break b;else break}else $();while(0);d=c[2259]|0;if(n>>>0<d>>>0)$();c[n+24>>2]=g;a=o+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0<d>>>0)$();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);a=c[a+4>>2]|0;if(a|0)if(a>>>0<(c[2259]|0)>>>0)$();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}else{b=c[o+8>>2]|0;d=c[o+12>>2]|0;a=9060+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0<(c[2259]|0)>>>0)$();if((c[b+12>>2]|0)!=(o|0))$()}if((d|0)==(b|0)){c[2255]=c[2255]&~(1<<e);break}if((d|0)!=(a|0)){if(d>>>0<(c[2259]|0)>>>0)$();a=d+8|0;if((c[a>>2]|0)==(o|0))l=a;else $()}else l=d+8|0;c[b+12>>2]=d;c[l>>2]=b}while(0);c[r+4>>2]=f|1;c[m+f>>2]=f;if((r|0)==(c[2260]|0)){c[2257]=f;return}}else{c[a>>2]=b&-2;c[r+4>>2]=f|1;c[m+f>>2]=f}a=f>>>3;if(f>>>0<256){d=9060+(a<<1<<2)|0;b=c[2255]|0;a=1<<a;if(b&a){a=d+8|0;b=c[a>>2]|0;if(b>>>0<(c[2259]|0)>>>0)$();else{p=b;q=a}}else{c[2255]=b|a;p=d;q=d+8|0}c[q>>2]=r;c[p+12>>2]=r;c[r+8>>2]=p;c[r+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{p=(a+1048320|0)>>>16&8;q=a<<p;o=(q+520192|0)>>>16&4;q=q<<o;a=(q+245760|0)>>>16&2;a=14-(o|p|a)+(q<<a>>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=9324+(a<<2)|0;c[r+28>>2]=a;c[r+20>>2]=0;c[r+16>>2]=0;b=c[2256]|0;d=1<<a;do if(b&d){b=f<<((a|0)==31?0:25-(a>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){a=124;break}d=e+16+(b>>>31<<2)|0;a=c[d>>2]|0;if(!a){a=121;break}else{b=b<<1;e=a}}if((a|0)==121)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;break}else if((a|0)==124){a=e+8|0;b=c[a>>2]|0;q=c[2259]|0;if(b>>>0>=q>>>0&e>>>0>=q>>>0){c[b+12>>2]=r;c[a>>2]=r;c[r+8>>2]=b;c[r+12>>2]=e;c[r+24>>2]=0;break}else $()}}else{c[2256]=b|d;c[e>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r}while(0);r=(c[2263]|0)+-1|0;c[2263]=r;if(!r)a=9476;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[2263]=-1;return}function ib(a,b){a=a|0;b=b|0;var d=0;if(a){d=N(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=gb(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;ob(a|0,0,d|0)|0;return a|0}function jb(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=gb(b)|0;return b|0}if(b>>>0>4294967231){c[(Wa()|0)>>2]=12;b=0;return b|0}d=kb(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=gb(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;tb(d|0,a|0,(e>>>0<b>>>0?e:b)|0)|0;hb(a);b=d;return b|0}function kb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=a+4|0;n=c[o>>2]|0;d=n&-8;k=a+d|0;i=c[2259]|0;e=n&3;if(!((e|0)!=1&a>>>0>=i>>>0&a>>>0<k>>>0))$();f=c[k+4>>2]|0;if(!(f&1))$();if(!e){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[2375]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;m=a+b|0;c[o>>2]=n&1|b|2;c[m+4>>2]=d|3;o=m+d+4|0;c[o>>2]=c[o>>2]|1;lb(m,d);return a|0}if((k|0)==(c[2261]|0)){m=(c[2258]|0)+d|0;d=m-b|0;e=a+b|0;if(m>>>0<=b>>>0){a=0;return a|0}c[o>>2]=n&1|b|2;c[e+4>>2]=d|1;c[2261]=e;c[2258]=d;return a|0}if((k|0)==(c[2260]|0)){f=(c[2257]|0)+d|0;if(f>>>0<b>>>0){a=0;return a|0}d=f-b|0;e=n&1;if(d>>>0>15){n=a+b|0;m=n+d|0;c[o>>2]=e|b|2;c[n+4>>2]=d|1;c[m>>2]=d;e=m+4|0;c[e>>2]=c[e>>2]&-2;e=n}else{c[o>>2]=e|f|2;e=a+f+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[2257]=d;c[2260]=e;return a|0}if(f&2|0){a=0;return a|0}l=(f&-8)+d|0;if(l>>>0<b>>>0){a=0;return a|0}m=l-b|0;g=f>>>3;a:do if(f>>>0>=256){h=c[k+24>>2]|0;f=c[k+12>>2]|0;do if((f|0)==(k|0)){f=k+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){j=0;break}else e=f}while(1){f=d+20|0;g=c[f>>2]|0;if(g|0){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0<i>>>0)$();else{c[e>>2]=0;j=d;break}}else{g=c[k+8>>2]|0;if(g>>>0<i>>>0)$();d=g+12|0;if((c[d>>2]|0)!=(k|0))$();e=f+8|0;if((c[e>>2]|0)==(k|0)){c[d>>2]=f;c[e>>2]=g;j=f;break}else $()}while(0);if(h|0){d=c[k+28>>2]|0;e=9324+(d<<2)|0;do if((k|0)==(c[e>>2]|0)){c[e>>2]=j;if(!j){c[2256]=c[2256]&~(1<<d);break a}}else if(h>>>0>=(c[2259]|0)>>>0){c[h+16+(((c[h+16>>2]|0)!=(k|0)&1)<<2)>>2]=j;if(!j)break a;else break}else $();while(0);f=c[2259]|0;if(j>>>0<f>>>0)$();c[j+24>>2]=h;d=k+16|0;e=c[d>>2]|0;do if(e|0)if(e>>>0<f>>>0)$();else{c[j+16>>2]=e;c[e+24>>2]=j;break}while(0);d=c[d+4>>2]|0;if(d|0)if(d>>>0<(c[2259]|0)>>>0)$();else{c[j+20>>2]=d;c[d+24>>2]=j;break}}}else{e=c[k+8>>2]|0;f=c[k+12>>2]|0;d=9060+(g<<1<<2)|0;if((e|0)!=(d|0)){if(e>>>0<i>>>0)$();if((c[e+12>>2]|0)!=(k|0))$()}if((f|0)==(e|0)){c[2255]=c[2255]&~(1<<g);break}if((f|0)!=(d|0)){if(f>>>0<i>>>0)$();d=f+8|0;if((c[d>>2]|0)==(k|0))h=d;else $()}else h=f+8|0;c[e+12>>2]=f;c[h>>2]=e}while(0);d=n&1;if(m>>>0<16){c[o>>2]=l|d|2;o=a+l+4|0;c[o>>2]=c[o>>2]|1;return a|0}else{n=a+b|0;c[o>>2]=d|b|2;c[n+4>>2]=m|3;o=n+m+4|0;c[o>>2]=c[o>>2]|1;lb(n,m);return a|0}return 0}function lb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=a+b|0;d=c[a+4>>2]|0;a:do if(!(d&1)){g=c[a>>2]|0;if(!(d&3))return;l=a+(0-g)|0;k=g+b|0;i=c[2259]|0;if(l>>>0<i>>>0)$();if((l|0)==(c[2260]|0)){a=o+4|0;d=c[a>>2]|0;if((d&3|0)!=3){r=l;f=k;break}c[2257]=k;c[a>>2]=d&-2;c[l+4>>2]=k|1;c[l+k>>2]=k;return}e=g>>>3;if(g>>>0<256){d=c[l+8>>2]|0;b=c[l+12>>2]|0;a=9060+(e<<1<<2)|0;if((d|0)!=(a|0)){if(d>>>0<i>>>0)$();if((c[d+12>>2]|0)!=(l|0))$()}if((b|0)==(d|0)){c[2255]=c[2255]&~(1<<e);r=l;f=k;break}if((b|0)!=(a|0)){if(b>>>0<i>>>0)$();a=b+8|0;if((c[a>>2]|0)==(l|0))h=a;else $()}else h=b+8|0;c[d+12>>2]=b;c[h>>2]=d;r=l;f=k;break}g=c[l+24>>2]|0;b=c[l+12>>2]|0;do if((b|0)==(l|0)){b=l+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){j=0;break}else d=b}while(1){b=a+20|0;e=c[b>>2]|0;if(e|0){a=e;d=b;continue}b=a+16|0;e=c[b>>2]|0;if(!e)break;else{a=e;d=b}}if(d>>>0<i>>>0)$();else{c[d>>2]=0;j=a;break}}else{e=c[l+8>>2]|0;if(e>>>0<i>>>0)$();a=e+12|0;if((c[a>>2]|0)!=(l|0))$();d=b+8|0;if((c[d>>2]|0)==(l|0)){c[a>>2]=b;c[d>>2]=e;j=b;break}else $()}while(0);if(g){a=c[l+28>>2]|0;d=9324+(a<<2)|0;do if((l|0)==(c[d>>2]|0)){c[d>>2]=j;if(!j){c[2256]=c[2256]&~(1<<a);r=l;f=k;break a}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(l|0)&1)<<2)>>2]=j;if(!j){r=l;f=k;break a}else break}else $();while(0);b=c[2259]|0;if(j>>>0<b>>>0)$();c[j+24>>2]=g;a=l+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0<b>>>0)$();else{c[j+16>>2]=d;c[d+24>>2]=j;break}while(0);a=c[a+4>>2]|0;if(a)if(a>>>0<(c[2259]|0)>>>0)$();else{c[j+20>>2]=a;c[a+24>>2]=j;r=l;f=k;break}else{r=l;f=k}}else{r=l;f=k}}else{r=a;f=b}while(0);h=c[2259]|0;if(o>>>0<h>>>0)$();a=o+4|0;d=c[a>>2]|0;if(!(d&2)){a=c[2260]|0;if((o|0)==(c[2261]|0)){q=(c[2258]|0)+f|0;c[2258]=q;c[2261]=r;c[r+4>>2]=q|1;if((r|0)!=(a|0))return;c[2260]=0;c[2257]=0;return}if((o|0)==(a|0)){q=(c[2257]|0)+f|0;c[2257]=q;c[2260]=r;c[r+4>>2]=q|1;c[r+q>>2]=q;return}f=(d&-8)+f|0;e=d>>>3;b:do if(d>>>0>=256){g=c[o+24>>2]|0;b=c[o+12>>2]|0;do if((b|0)==(o|0)){b=o+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){n=0;break}else d=b}while(1){b=a+20|0;e=c[b>>2]|0;if(e|0){a=e;d=b;continue}b=a+16|0;e=c[b>>2]|0;if(!e)break;else{a=e;d=b}}if(d>>>0<h>>>0)$();else{c[d>>2]=0;n=a;break}}else{e=c[o+8>>2]|0;if(e>>>0<h>>>0)$();a=e+12|0;if((c[a>>2]|0)!=(o|0))$();d=b+8|0;if((c[d>>2]|0)==(o|0)){c[a>>2]=b;c[d>>2]=e;n=b;break}else $()}while(0);if(g|0){a=c[o+28>>2]|0;d=9324+(a<<2)|0;do if((o|0)==(c[d>>2]|0)){c[d>>2]=n;if(!n){c[2256]=c[2256]&~(1<<a);break b}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(o|0)&1)<<2)>>2]=n;if(!n)break b;else break}else $();while(0);b=c[2259]|0;if(n>>>0<b>>>0)$();c[n+24>>2]=g;a=o+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0<b>>>0)$();else{c[n+16>>2]=d;c[d+24>>2]=n;break}while(0);a=c[a+4>>2]|0;if(a|0)if(a>>>0<(c[2259]|0)>>>0)$();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}else{d=c[o+8>>2]|0;b=c[o+12>>2]|0;a=9060+(e<<1<<2)|0;if((d|0)!=(a|0)){if(d>>>0<h>>>0)$();if((c[d+12>>2]|0)!=(o|0))$()}if((b|0)==(d|0)){c[2255]=c[2255]&~(1<<e);break}if((b|0)!=(a|0)){if(b>>>0<h>>>0)$();a=b+8|0;if((c[a>>2]|0)==(o|0))m=a;else $()}else m=b+8|0;c[d+12>>2]=b;c[m>>2]=d}while(0);c[r+4>>2]=f|1;c[r+f>>2]=f;if((r|0)==(c[2260]|0)){c[2257]=f;return}}else{c[a>>2]=d&-2;c[r+4>>2]=f|1;c[r+f>>2]=f}a=f>>>3;if(f>>>0<256){b=9060+(a<<1<<2)|0;d=c[2255]|0;a=1<<a;if(d&a){a=b+8|0;d=c[a>>2]|0;if(d>>>0<(c[2259]|0)>>>0)$();else{p=d;q=a}}else{c[2255]=d|a;p=b;q=b+8|0}c[q>>2]=r;c[p+12>>2]=r;c[r+8>>2]=p;c[r+12>>2]=b;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{p=(a+1048320|0)>>>16&8;q=a<<p;o=(q+520192|0)>>>16&4;q=q<<o;a=(q+245760|0)>>>16&2;a=14-(o|p|a)+(q<<a>>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=9324+(a<<2)|0;c[r+28>>2]=a;c[r+20>>2]=0;c[r+16>>2]=0;d=c[2256]|0;b=1<<a;if(!(d&b)){c[2256]=d|b;c[e>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;return}d=f<<((a|0)==31?0:25-(a>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){a=121;break}b=e+16+(d>>>31<<2)|0;a=c[b>>2]|0;if(!a){a=118;break}else{d=d<<1;e=a}}if((a|0)==118){if(b>>>0<(c[2259]|0)>>>0)$();c[b>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;return}else if((a|0)==121){a=e+8|0;d=c[a>>2]|0;q=c[2259]|0;if(!(d>>>0>=q>>>0&e>>>0>=q>>>0))$();c[d+12>>2]=r;c[a>>2]=r;c[r+8>>2]=d;c[r+12>>2]=e;c[r+24>>2]=0;return}}function mb(){}function nb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (y=b+d+(c>>>0<a>>>0|0)>>>0,c|0)|0}function ob(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;g=f-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function pb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}y=0;return b>>>c-32|0}function qb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=N(e,f)|0;d=a>>>16;a=(c>>>16)+(N(e,d)|0)|0;e=b>>>16;b=N(e,f)|0;return (y=(a>>>16)+(N(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function rb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=qb(e,f)|0;a=y;return (y=(N(b,f)|0)+(N(d,e)|0)+a|a&0,c|0|0)|0}function sb(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){V()|0;aa(12);return -1}c[i>>2]=a;if((a|0)>(U()|0)?(T()|0)==0:0){c[i>>2]=b;aa(12);return -1}return b|0}function tb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return da(b|0,d|0,e|0)|0;h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function ub(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function vb(a,b){a=a|0;b=b|0;return ia[a&1](b|0)|0}function wb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ja[a&3](b|0,c|0,d|0)|0}function xb(a){a=a|0;R(0);return 0}function yb(a,b,c){a=a|0;b=b|0;c=c|0;R(1);return 0}
--
--// EMSCRIPTEN_END_FUNCS
--var ia=[xb,Sa];var ja=[yb,_a,Ua,Ta];return{_llvm_bswap_i32:ub,_shine_check_config:Ha,_shine_flush:La,setThrew:oa,_bitshift64Lshr:pb,_shine_samples_per_pass:Ia,_fflush:eb,_shine_js_init:Qa,_memset:ob,_sbrk:sb,_memcpy:tb,___errno_location:Wa,_shine_encode_buffer:Ka,_shine_close:Ma,stackAlloc:ka,getTempRet0:qa,___muldi3:rb,setTempRet0:pa,_i64Add:nb,_emscripten_get_global_libc:Ra,stackSave:la,___muldsi3:qb,_free:hb,runPostSets:mb,establishStackSpace:na,stackRestore:ma,_malloc:gb,stackAlloc:ka,stackSave:la,stackRestore:ma,establishStackSpace:na,setThrew:oa,setTempRet0:pa,getTempRet0:qa,dynCall_ii:vb,dynCall_iiii:wb}})
--
--
--// EMSCRIPTEN_END_ASM
--(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _shine_check_config=Module["_shine_check_config"]=asm["_shine_check_config"];var _shine_flush=Module["_shine_flush"]=asm["_shine_flush"];var setThrew=Module["setThrew"]=asm["setThrew"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _shine_samples_per_pass=Module["_shine_samples_per_pass"]=asm["_shine_samples_per_pass"];var _fflush=Module["_fflush"]=asm["_fflush"];var _shine_js_init=Module["_shine_js_init"]=asm["_shine_js_init"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var _shine_encode_buffer=Module["_shine_encode_buffer"]=asm["_shine_encode_buffer"];var _shine_close=Module["_shine_close"]=asm["_shine_close"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=asm["_emscripten_get_global_libc"];var stackSave=Module["stackSave"]=asm["stackSave"];var ___muldsi3=Module["___muldsi3"]=asm["___muldsi3"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var _malloc=Module["_malloc"]=asm["_malloc"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];Runtime.stackAlloc=Module["stackAlloc"];Runtime.stackSave=Module["stackSave"];Runtime.stackRestore=Module["stackRestore"];Runtime.establishStackSpace=Module["establishStackSpace"];Runtime.setTempRet0=Module["setTempRet0"];Runtime.getTempRet0=Module["getTempRet0"];Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i<argc-1;i=i+1){argv.push(allocate(intArrayFromString(args[i]),"i8",ALLOC_NORMAL));pad()}argv.push(0);argv=allocate(argv,"i32",ALLOC_NORMAL);try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}Module.printErr("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(preloadStartTime===null)preloadStartTime=Date.now();if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run();var isNode=typeof process==="object"&&typeof require==="function";var int16Len=Module.HEAP16.BYTES_PER_ELEMENT;var ptrLen=Module.HEAP32.BYTES_PER_ELEMENT;function Shine(args){if(_shine_check_config(args.samplerate,args.bitrate)<0)throw"Invalid configuration";var mode;if(!args.mode){if(args.channels===1){mode=Shine.MONO}else{mode=Shine.JOINT_STEREO}}else{mode=args.mode}this._handle=_shine_js_init(args.channels,args.samplerate,mode,args.bitrate);this._channels=args.channels;this._samples_per_pass=_shine_samples_per_pass(this._handle);this._buffer=_malloc(this._channels*ptrLen);this._pcm=new Array(this._channels);this._rem=new Array(this._channels);this._written=_malloc(int16Len);var _tmp,chan;for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array;_tmp=_malloc(this._samples_per_pass*int16Len);setValue(this._buffer+chan*ptrLen,_tmp,"*");this._pcm[chan]=Module.HEAP16.subarray(_tmp/int16Len,_tmp/int16Len+this._samples_per_pass)}return this}Shine.STEREO=0;Shine.JOINT_STEREO=1;Shine.DUAL_CHANNEL=2;Shine.MONO=3;Shine.prototype._encodePass=(function(data){if(!this._handle)throw"Closed";var chan;for(chan=0;chan<this._channels;chan++)this._pcm[chan].set(data[chan]);var _buf=_shine_encode_buffer(this._handle,this._buffer,this._written);var written=getValue(this._written,"i16");return Module.HEAPU8.subarray(_buf,_buf+written)});function concat(ctr,a,b){if(typeof b==="undefined"){return a}var ret=new ctr(a.length+b.length);ret.set(a);ret.subarray(a.length).set(b);return ret}function clip(x){return x>1?1:x<-1?-1:x}function convertFloat32(buf){var ret=new Array(buf.length);var samples=buf[0].length;var chan,i;for(chan=0;chan<buf.length;chan++){ret[chan]=new Int16Array(samples);for(i=0;i<samples;i++){ret[chan][i]=parseInt(clip(buf[chan][i])*32767)}}return ret}Shine.prototype.encode=(function(data){if(data.length!=this._channels)throw"Invalid data";var encoded=new Uint8Array;var tmp=new Array(this._channels);if(data[0]instanceof Float32Array){data=convertFloat32(data)}var chan;for(chan=0;chan<this._channels;chan++){tmp[chan]=new Float32Array;this._rem[chan]=concat(Int16Array,this._rem[chan],data[chan])}var i,enc;for(i=0;i<this._rem[0].length;i+=this._samples_per_pass){for(chan=0;chan<this._channels;chan++){tmp[chan]=this._rem[chan].subarray(i,i+this._samples_per_pass)}if(tmp[0].length<this._samples_per_pass){break}else{enc=this._encodePass(tmp);if(enc.length>0){encoded=concat(Uint8Array,encoded,enc)}}}if(tmp[0].length<this._samples_per_pass){this._rem=tmp}else{for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array}}return encoded});Shine.prototype.close=(function(){if(!this._handle){throw"Closed"}var _buf=_shine_flush(this._handle,this._written);var written=getValue(this._written,"i16");var encoded=new Uint8Array(written);encoded.set(Module.HEAPU8.subarray(_buf,_buf+written));_free(this._written);_shine_close(this._handle);this._handle=null;var chan;for(chan=0;chan<this._channels;chan++){_free(getValue(this._buffer+chan*ptrLen,"*"))}_free(this._buffer);return encoded});if(isNode){module.exports=Shine}return Shine}).call(context)})()
--
--
--
--
-diff --git a/js/dist/libshine_browser.js b/js/dist/libshine_browser.js
-new file mode 100644
-index 0000000..5e8cd74
---- /dev/null
-+++ b/js/dist/libshine_browser.js
-@@ -0,0 +1,183 @@
-+// libshine function wrappers
-+
-+var StereoMode = {
-+ '0': 'STEREO',
-+ '1': 'JOINT_STEREO',
-+ '2': 'DUAL_CHANNEL',
-+ '3': 'MONO',
-+ STEREO: 0,
-+ JOINT_STEREO: 1,
-+ DUAL_CHANNEL: 2,
-+ MONO: 3
-+};
-+
-+var ShineModule;
-+var int16Len;
-+var ptrLen;
-+
-+function shineInit() {
-+ int16Len = ShineModule._shine_js_int16_len();
-+ ptrLen = ShineModule._shine_js_ptr_len();
-+};
-+
-+function Shine(args) {
-+ if (ShineModule._shine_check_config(args.samplerate, args.bitrate) < 0)
-+ throw "Invalid configuration";
-+
-+ var stereoMode;
-+ if (!args.stereoMode) {
-+ if (args.channels === 1) {
-+ stereoMode = Shine.MONO;
-+ } else {
-+ stereoMode = Shine.JOINT_STEREO;
-+ }
-+ } else {
-+ stereoMode = args.stereoMode;
-+ }
-+
-+ this._handle = ShineModule._shine_js_init(args.channels, args.samplerate, stereoMode, args.bitrate);
-+
-+ this._channels = args.channels;
-+ this._samples_per_pass = ShineModule._shine_samples_per_pass(this._handle);
-+
-+ this._buffer = ShineModule._malloc(this._channels * ptrLen);
-+ this._pcm = new Array(this._channels);
-+ this._rem = new Array(this._channels);
-+ this._written = ShineModule._malloc(int16Len);
-+
-+ var _tmp, chan;
-+ for (chan=0; chan<this._channels; chan++) {
-+ this._rem[chan] = new Int16Array;
-+ _tmp = ShineModule._malloc(this._samples_per_pass * int16Len);
-+ ShineModule.setValue(this._buffer + chan*ptrLen, _tmp, "*")
-+ this._pcm[chan] = ShineModule.HEAP16.subarray(_tmp/int16Len, _tmp/int16Len+this._samples_per_pass)
-+ }
-+
-+ return this;
-+};
-+
-+Shine.checkConfig = function (samplerate, bitrate) {
-+ return ShineModule._shine_check_config(samplerate, bitrate) >= 0;
-+};
-+
-+Shine.prototype._encodePass = function (data) {
-+ if (!this._handle)
-+ throw "Closed";
-+
-+ var chan;
-+ for (chan=0;chan<this._channels;chan++)
-+ this._pcm[chan].set(data[chan]);
-+
-+ var _buf = ShineModule._shine_encode_buffer(this._handle, this._buffer, this._written);
-+
-+ var written = ShineModule.getValue(this._written, "i16");
-+
-+ return ShineModule.HEAPU8.subarray(_buf, _buf+written);
-+};
-+
-+function concat(ctr, a, b) {
-+ if (typeof b === "undefined") {
-+ return a;
-+ }
-+ var ret = new ctr(a.length+b.length);
-+ ret.set(a);
-+ ret.subarray(a.length).set(b);
-+ return ret;
-+}
-+
-+function clip(x) {
-+ return (x > 1 ? 1 : (x < -1 ? -1 : x));
-+}
-+
-+function convertFloat32(buf) {
-+ var ret = new Array(buf.length);
-+ var samples = buf[0].length;
-+ var chan, i;
-+
-+ for (chan=0;chan<buf.length;chan++) {
-+ ret[chan] = new Int16Array(samples);
-+ for (i=0;i<samples;i++) {
-+ ret[chan][i] = parseInt(clip(buf[chan][i]) * 32767);
-+ }
-+ }
-+ return ret;
-+}
-+
-+Shine.prototype.encode = function (data) {
-+ if (data.length != this._channels)
-+ throw "Invalid data";
-+
-+ var encoded = new Uint8Array;
-+ var tmp = new Array(this._channels);
-+
-+ if (data[0] instanceof Float32Array) {
-+ data = convertFloat32(data);
-+ }
-+
-+ var chan;
-+ for (chan=0;chan<this._channels; chan++) {
-+ tmp[chan] = new Float32Array;
-+ this._rem[chan] = concat(Int16Array, this._rem[chan], data[chan]);
-+ }
-+
-+ var i, enc;
-+ for (i=0;i<this._rem[0].length;i+=this._samples_per_pass) {
-+ for (chan=0; chan<this._channels; chan++) {
-+ tmp[chan] = this._rem[chan].subarray(i, i+this._samples_per_pass);
-+ }
-+
-+ if (tmp[0].length < this._samples_per_pass) {
-+ break;
-+ } else {
-+ enc = this._encodePass(tmp);
-+ if (enc.length > 0) {
-+ encoded = concat(Uint8Array, encoded, enc);
-+ }
-+ }
-+ }
-+
-+ if (tmp[0].length < this._samples_per_pass) {
-+ this._rem = tmp;
-+ } else {
-+ for (chan=0; chan<this._channels; chan++) {
-+ this._rem[chan] = new Int16Array;
-+ }
-+ }
-+
-+ return encoded;
-+};
-+
-+Shine.prototype.close = function () {
-+ if (!this._handle) {
-+ throw "Closed";
-+ }
-+
-+ var _buf = ShineModule._shine_flush(this._handle, this._written);
-+
-+ var written = ShineModule.getValue(this._written, "i16");
-+ var encoded = new Uint8Array(written);
-+
-+ encoded.set(ShineModule.HEAPU8.subarray(_buf, _buf + written));
-+
-+ ShineModule._free(this._written);
-+ ShineModule._shine_close(this._handle);
-+ this._handle = null;
-+
-+ var chan;
-+ for (chan=0; chan<this._channels; chan++) {
-+ ShineModule._free(ShineModule.getValue(this._buffer + chan*ptrLen, "*"));
-+ }
-+ ShineModule._free(this._buffer);
-+
-+ return encoded;
-+};
-+var createModule = require("./libshine_browser_stubs").default;
-+
-+Shine.initialized = (createModule()).then(function (Module) {
-+ ShineModule = Module;
-+ shineInit();
-+});
-+
-+module.exports.Shine = Shine;
-+
-+module.exports.StereoMode = StereoMode;
-diff --git a/js/dist/libshine_browser_stubs.js b/js/dist/libshine_browser_stubs.js
-new file mode 100644
-index 0000000..23863a3
---- /dev/null
-+++ b/js/dist/libshine_browser_stubs.js
-@@ -0,0 +1,16 @@
-+
-+var createModule = (() => {
-+ var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
-+
-+ return (
-+function(createModule) {
-+ createModule = createModule || {};
-+
-+var Module=typeof createModule!="undefined"?createModule:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,AGFzbQEAAAABVg9gAX8Bf2ADf39/AGACf38Bf2AEf39/fwF/YAN/f38Bf2ACf38AYAF/AGABfAF8YAABf2ADfHx/AXxgAnx8AXxgAnx/AXxgAABgBH9/f38AYAJ8fwF/Ag0CAWEBYQAAAWEBYgABAxsaAQMBAAQFAAkKBgsCBwwNBQcOAgQAAgMICAYEBQFwAQEBBQYBAYACgAIGCAF/AUHglwULBzUNAWMCAAFkAA8BZQAIAWYACwFnABcBaAAWAWkAFQFqABQBawAbAWwAGgFtABkBbgAYAW8BAArC+gEahQoBDX8gAiAAKAIQIgRJBEAgACAEIAJrIgI2AhAgACAAKAIMIAEgAnRyNgIMDwsgACgCACEKIAAoAgQiBSAAKAIIIgNBBGpNBEAgAAJ/IAVBAm0gBWohCyAKRQRAIAsQCAwBCyALQUBPBEBB5JMBQTA2AgBBAAwBCwJ/QRAgC0ELakF4cSALQQtJGyEHQQAhAyAKQQhrIgUoAgQiDEF4cSEGAkAgDEEDcUUEQEEAIAdBgAJJDQIaIAdBBGogBk0EQCAFIQMgBiAHa0HIlwEoAgBBAXRNDQILQQAMAgsgBSAGaiEIAkAgBiAHTwRAIAYgB2siBEEQSQ0BIAUgDEEBcSAHckECcjYCBCAFIAdqIgMgBEEDcjYCBCAIIAgoAgRBAXI2AgQgAyAEEBEMAQtBgJQBKAIAIAhGBEBB9JMBKAIAIAZqIgYgB00NAiAFIAxBAXEgB3JBAnI2AgQgBSAHaiIEIAYgB2siA0EBcjYCBEH0kwEgAzYCAEGAlAEgBDYCAAwBC0H8kwEoAgAgCEYEQEHwkwEoAgAgBmoiBCAHSQ0CAkAgBCAHayIDQRBPBEAgBSAMQQFxIAdyQQJyNgIEIAUgB2oiBiADQQFyNgIEIAQgBWoiBCADNgIAIAQgBCgCBEF+cTYCBAwBCyAFIAxBAXEgBHJBAnI2AgQgBCAFaiIDIAMoAgRBAXI2AgRBACEDQQAhBgtB/JMBIAY2AgBB8JMBIAM2AgAMAQsgCCgCBCIEQQJxDQEgBEF4cSAGaiINIAdJDQEgDSAHayEPAkAgBEH/AU0EQCAIKAIIIgYgBEEDdiIDQQN0QZCUAWpGGiAGIAgoAgwiBEYEQEHokwFB6JMBKAIAQX4gA3dxNgIADAILIAYgBDYCDCAEIAY2AggMAQsgCCgCGCEOAkAgCCAIKAIMIglHBEAgCCgCCCIDQfiTASgCAEkaIAMgCTYCDCAJIAM2AggMAQsCQCAIQRRqIgYoAgAiAw0AIAhBEGoiBigCACIDDQBBACEJDAELA0AgBiEEIAMiCUEUaiIGKAIAIgMNACAJQRBqIQYgCSgCECIDDQALIARBADYCAAsgDkUNAAJAIAgoAhwiBEECdEGYlgFqIgMoAgAgCEYEQCADIAk2AgAgCQ0BQeyTAUHskwEoAgBBfiAEd3E2AgAMAgsgDkEQQRQgDigCECAIRhtqIAk2AgAgCUUNAQsgCSAONgIYIAgoAhAiAwRAIAkgAzYCECADIAk2AhgLIAgoAhQiA0UNACAJIAM2AhQgAyAJNgIYCyAPQQ9NBEAgBSAMQQFxIA1yQQJyNgIEIAUgDWoiAyADKAIEQQFyNgIEDAELIAUgDEEBcSAHckECcjYCBCAFIAdqIgQgD0EDcjYCBCAFIA1qIgMgAygCBEEBcjYCBCAEIA8QEQsgBSEDCyADCyIDBEAgA0EIagwBC0EAIAsQCCIFRQ0AGiAFIApBfEF4IApBBGsoAgAiA0EDcRsgA0F4cWoiAyALIAMgC0kbEAQgChALIAULIgo2AgAgACAAKAIEIgNBAm0gA2o2AgQgACgCECEEIAAoAgghAwsgAyAKaiAAKAIMIAEgAiAEayIDdnIiBUEYdCAFQYD+A3FBCHRyIAVBCHZBgP4DcSAFQRh2cnI2AgAgAEEgIANrIgM2AhAgACAAKAIIQQRqNgIIIAIgBEcEQCAAIAEgA3Q2AgwPCyAAQQA2AgwLgQIBBn8CQCADRQ0AIANBGGxB0ClqIgUoAgQhByADQQ9NBEAgASACTw0BIANBGGxB0ClqKAIUIQMDQCAEIAAgAUECdGoiBSgCACIGQQBHaiAFKAIEIgRBAEdqIAMgBiAHbCAEamotAABqIQQgAUECaiIBIAJJDQALDAELIAEgAk8NACAFKAIIIQUgA0EYbEHQKWooAhQhAwNAIAQgBUEAIAAgAUECdGoiBCgCACIGQQ5KIggbaiAFQQAgBCgCBCIEQQ5KIgkbaiADQQ8gBCAJGyIEQQ8gBiAIGyIGIAdsamotAABqIAZBAEdqIARBAEdqIQQgAUECaiIBIAJJDQALCyAEC/wDAQJ/IAJBgARPBEAgACABIAIQAQ8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCAAQQNxRQRAIAAhAgwBCyACRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAkEDcUUNASACIANJDQALCwJAIANBfHEiAEHAAEkNACACIABBQGoiBEsNAANAIAIgASgCADYCACACIAEoAgQ2AgQgAiABKAIINgIIIAIgASgCDDYCDCACIAEoAhA2AhAgAiABKAIUNgIUIAIgASgCGDYCGCACIAEoAhw2AhwgAiABKAIgNgIgIAIgASgCJDYCJCACIAEoAig2AiggAiABKAIsNgIsIAIgASgCMDYCMCACIAEoAjQ2AjQgAiABKAI4NgI4IAIgASgCPDYCPCABQUBrIQEgAkFAayICIARNDQALCyAAIAJNDQEDQCACIAEoAgA2AgAgAUEEaiEBIAJBBGoiAiAASQ0ACwwBCyADQQRJBEAgACECDAELIAAgA0EEayIESwRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAiABLQABOgABIAIgAS0AAjoAAiACIAEtAAM6AAMgAUEEaiEBIAJBBGoiAiAETQ0ACwsgAiADSQRAA0AgAiABLQAAOgAAIAFBAWohASACQQFqIgIgA0cNAAsLC1IBAn9B4JMBKAIAIgEgAEEHakF4cSICaiEAAkAgAkEAIAAgAU0bDQAgAD8AQRB0SwRAIAAQAEUNAQtB4JMBIAA2AgAgAQ8LQeSTAUEwNgIAQX8L0gsBCH8CQCABIAJJBH8gAiABayIFQQNxIQYgASEEIAFBf3MgAmpBA08EQCAFQXxxIQkDQCADIAAgBEECdGoiBSgCACIKIAMgCkobIgMgBSgCBCIKIAMgCkobIgMgBSgCCCIKIAMgCkobIgMgBSgCDCIFIAMgBUobIQMgBEEEaiEEIAhBBGoiCCAJRw0ACwsgBgRAA0AgAyAAIARBAnRqKAIAIgUgAyAFShshAyAEQQFqIQQgB0EBaiIHIAZHDQALCyADRQRAQQAPCyADQQ5MBEAgA0GILCgCAE8EQEEMIQQCQAJAAkACQAJAQfArKAIAIANLDQBBCyEEQdgrKAIAIANLDQBBwCsoAgAgA0sNBEEJIQRBqCsoAgAgA0sNAEEIIQRBkCsoAgAgA0sNAEH4KigCACADSw0DQQYhBEHgKigCACADSw0AQcgqKAIAIANLDQJBBCEEQbAqKAIAIANLDQBBAyEEQZgqKAIAIANLDQBBgCooAgAgA0sNAUEBIQRB6CkoAgAgA0sNAEEAIQRB0CkoAgAgA00NCAsgACABIAIgBBADGiAEDwtBrCooAgAhBEGcKigCACEFIAAgASACQQIQAyEGQQAhAwNAIAMgACABQQJ0aiIHKAIAIghBAEdqIAcoAgQiA0EAR2ogBCAFIAhsIANqai0AAGohAyABQQJqIgEgAkkNAAtBAkEDIAMgBkobDwtB9CooAgAhBEHkKigCACEFIAAgASACQQUQAyEGQQAhAwNAIAMgACABQQJ0aiIHKAIAIghBAEdqIAcoAgQiA0EAR2ogBCAFIAhsIANqai0AAGohAyABQQJqIgEgAkkNAAtBBUEGIAMgBkobDwtBpCsoAgAhBkGUKygCACEHIAAgASACQQcQAyEFQQAhBCABIQMDQCAEIAAgA0ECdGoiCCgCACIJQQBHaiAIKAIEIgRBAEdqIAYgByAJbCAEamotAABqIQQgA0ECaiIDIAJJDQALIAQgBSAEIAVIGyEGQQdBCCAEIAVKGyEEQbwrKAIAIQVBrCsoAgAhB0EAIQMDQCADIAAgAUECdGoiCCgCACIJQQBHaiAIKAIEIgNBAEdqIAUgByAJbCADamotAABqIQMgAUECaiIBIAJJDQALQQkgBCADIAZMGw8LQewrKAIAIQZB3CsoAgAhByAAIAEgAkEKEAMhBUEAIQQgASEDA0AgBCAAIANBAnRqIggoAgAiCUEAR2ogCCgCBCIEQQBHaiAGIAcgCWwgBGpqLQAAaiEEIANBAmoiAyACSQ0ACyAEIAUgBCAFSBshBkEKQQsgBCAFShshBEGELCgCACEFQfQrKAIAIQdBACEDA0AgAyAAIAFBAnRqIggoAgAiCUEAR2ogCCgCBCIDQQBHaiAFIAcgCWwgA2pqLQAAaiEDIAFBAmoiASACSQ0AC0EMIAQgAyAGTBsPC0HMLCgCACEEQbwsKAIAIQUgACABIAJBDRADIQZBACEDA0AgAyAAIAFBAnRqIgcoAgAiCEEAR2ogBygCBCIDQQBHaiAEIAUgCGwgA2pqLQAAaiEDIAFBAmoiASACSQ0AC0ENQQ8gAyAGShsPCwJ/QQ8gA0EPayIFQcQsKAIATQ0AGkEQQdwsKAIAIAVPDQAaQRFB9CwoAgAgBU8NABpBEkGMLSgCACAFTw0AGkETQaQtKAIAIAVPDQAaQRRBvC0oAgAgBU8NABpBFUHULSgCACAFTw0AGkEWQewtKAIAIAVPDQAaQRdBAEGELigCACAFTxsLIQQCf0EYQZwuKAIAIAVPDQAaQRlBtC4oAgAgBU8NABpBGkHMLigCACAFTw0AGkEbQeQuKAIAIAVPDQAaQRxB/C4oAgAgBU8NABpBHUGULygCACAFTw0AGkEeQawvKAIAIAVPDQAaQR9BAEHELygCACAFTxsLIQMgACABIAIgBBADIQUgAyAEIAAgASACIAMQAyAFSBsFQQALDwsgACABIAJBABADGkEAC9YCAQF/AkAgAUUNACAAQQA6AAAgACABaiICQQFrQQA6AAAgAUEDSQ0AIABBADoAAiAAQQA6AAEgAkEDa0EAOgAAIAJBAmtBADoAACABQQdJDQAgAEEAOgADIAJBBGtBADoAACABQQlJDQAgAEEAIABrQQNxIgJqIgBBADYCACAAIAEgAmtBfHEiAmoiAUEEa0EANgIAIAJBCUkNACAAQQA2AgggAEEANgIEIAFBCGtBADYCACABQQxrQQA2AgAgAkEZSQ0AIABBADYCGCAAQQA2AhQgAEEANgIQIABBADYCDCABQRBrQQA2AgAgAUEUa0EANgIAIAFBGGtBADYCACABQRxrQQA2AgAgAiAAQQRxQRhyIgJrIgFBIEkNACAAIAJqIQADQCAAQgA3AxggAEIANwMQIABCADcDCCAAQgA3AwAgAEEgaiEAIAFBIGsiAUEfSw0ACwsLtykBC38jAEEQayILJAACQAJAAkACQAJAAkACQAJAAkAgAEH0AU0EQEHokwEoAgAiBkEQIABBC2pBeHEgAEELSRsiBUEDdiIAdiIBQQNxBEACQCABQX9zQQFxIABqIgJBA3QiAUGQlAFqIgAgAUGYlAFqKAIAIgEoAggiBEYEQEHokwEgBkF+IAJ3cTYCAAwBCyAEIAA2AgwgACAENgIICyABQQhqIQAgASACQQN0IgJBA3I2AgQgASACaiIBIAEoAgRBAXI2AgQMCgsgBUHwkwEoAgAiB00NASABBEACQEECIAB0IgJBACACa3IgASAAdHEiAEEAIABrcWgiAUEDdCIAQZCUAWoiAiAAQZiUAWooAgAiACgCCCIERgRAQeiTASAGQX4gAXdxIgY2AgAMAQsgBCACNgIMIAIgBDYCCAsgACAFQQNyNgIEIAAgBWoiCCABQQN0IgEgBWsiBEEBcjYCBCAAIAFqIAQ2AgAgBwRAIAdBeHFBkJQBaiEBQfyTASgCACECAn8gBkEBIAdBA3Z0IgNxRQRAQeiTASADIAZyNgIAIAEMAQsgASgCCAshAyABIAI2AgggAyACNgIMIAIgATYCDCACIAM2AggLIABBCGohAEH8kwEgCDYCAEHwkwEgBDYCAAwKC0HskwEoAgAiCkUNASAKQQAgCmtxaEECdEGYlgFqKAIAIgIoAgRBeHEgBWshAyACIQEDQAJAIAEoAhAiAEUEQCABKAIUIgBFDQELIAAoAgRBeHEgBWsiASADIAEgA0kiARshAyAAIAIgARshAiAAIQEMAQsLIAIoAhghCSACIAIoAgwiBEcEQCACKAIIIgBB+JMBKAIASRogACAENgIMIAQgADYCCAwJCyACQRRqIgEoAgAiAEUEQCACKAIQIgBFDQMgAkEQaiEBCwNAIAEhCCAAIgRBFGoiASgCACIADQAgBEEQaiEBIAQoAhAiAA0ACyAIQQA2AgAMCAtBfyEFIABBv39LDQAgAEELaiIAQXhxIQVB7JMBKAIAIghFDQBBACAFayEDAkACQAJAAn9BACAFQYACSQ0AGkEfIAVB////B0sNABogBUEmIABBCHZnIgBrdkEBcSAAQQF0a0E+agsiB0ECdEGYlgFqKAIAIgFFBEBBACEADAELQQAhACAFQRkgB0EBdmtBACAHQR9HG3QhAgNAAkAgASgCBEF4cSAFayIGIANPDQAgASEEIAYiAw0AQQAhAyABIQAMAwsgACABKAIUIgYgBiABIAJBHXZBBHFqKAIQIgFGGyAAIAYbIQAgAkEBdCECIAENAAsLIAAgBHJFBEBBACEEQQIgB3QiAEEAIABrciAIcSIARQ0DIABBACAAa3FoQQJ0QZiWAWooAgAhAAsgAEUNAQsDQCAAKAIEQXhxIAVrIgIgA0khASACIAMgARshAyAAIAQgARshBCAAKAIQIgEEfyABBSAAKAIUCyIADQALCyAERQ0AIANB8JMBKAIAIAVrTw0AIAQoAhghByAEIAQoAgwiAkcEQCAEKAIIIgBB+JMBKAIASRogACACNgIMIAIgADYCCAwHCyAEQRRqIgEoAgAiAEUEQCAEKAIQIgBFDQMgBEEQaiEBCwNAIAEhBiAAIgJBFGoiASgCACIADQAgAkEQaiEBIAIoAhAiAA0ACyAGQQA2AgAMBgsgBUHwkwEoAgAiAU0EQEH8kwEoAgAhAAJAIAEgBWsiAkEQTwRAQfCTASACNgIAQfyTASAAIAVqIgQ2AgAgBCACQQFyNgIEIAAgAWogAjYCACAAIAVBA3I2AgQMAQtB/JMBQQA2AgBB8JMBQQA2AgAgACABQQNyNgIEIAAgAWoiASABKAIEQQFyNgIECyAAQQhqIQAMCAsgBUH0kwEoAgAiAkkEQEH0kwEgAiAFayIBNgIAQYCUAUGAlAEoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQgAEEIaiEADAgLQQAhACAFQS9qIgMCf0HAlwEoAgAEQEHIlwEoAgAMAQtBzJcBQn83AgBBxJcBQoCggICAgAQ3AgBBwJcBIAtBDGpBcHFB2KrVqgVzNgIAQdSXAUEANgIAQaSXAUEANgIAQYAgCyIBaiIGQQAgAWsiCHEiASAFTQ0HQaCXASgCACIEBEBBmJcBKAIAIgcgAWoiCSAHTQ0IIAQgCUkNCAsCQEGklwEtAABBBHFFBEACQAJAAkACQEGAlAEoAgAiBARAQaiXASEAA0AgBCAAKAIAIgdPBEAgByAAKAIEaiAESw0DCyAAKAIIIgANAAsLQQAQBSICQX9GDQMgASEGQcSXASgCACIAQQFrIgQgAnEEQCABIAJrIAIgBGpBACAAa3FqIQYLIAUgBk8NA0GglwEoAgAiAARAQZiXASgCACIEIAZqIgggBE0NBCAAIAhJDQQLIAYQBSIAIAJHDQEMBQsgBiACayAIcSIGEAUiAiAAKAIAIAAoAgRqRg0BIAIhAAsgAEF/Rg0BIAYgBUEwak8EQCAAIQIMBAtByJcBKAIAIgIgAyAGa2pBACACa3EiAhAFQX9GDQEgAiAGaiEGIAAhAgwDCyACQX9HDQILQaSXAUGklwEoAgBBBHI2AgALIAEQBSECQQAQBSEAIAJBf0YNBSAAQX9GDQUgACACTQ0FIAAgAmsiBiAFQShqTQ0FC0GYlwFBmJcBKAIAIAZqIgA2AgBBnJcBKAIAIABJBEBBnJcBIAA2AgALAkBBgJQBKAIAIgMEQEGolwEhAANAIAIgACgCACIBIAAoAgQiBGpGDQIgACgCCCIADQALDAQLQfiTASgCACIAQQAgACACTRtFBEBB+JMBIAI2AgALQQAhAEGslwEgBjYCAEGolwEgAjYCAEGIlAFBfzYCAEGMlAFBwJcBKAIANgIAQbSXAUEANgIAA0AgAEEDdCIBQZiUAWogAUGQlAFqIgQ2AgAgAUGclAFqIAQ2AgAgAEEBaiIAQSBHDQALQfSTASAGQShrIgBBeCACa0EHcUEAIAJBCGpBB3EbIgFrIgQ2AgBBgJQBIAEgAmoiATYCACABIARBAXI2AgQgACACakEoNgIEQYSUAUHQlwEoAgA2AgAMBAsgAC0ADEEIcQ0CIAEgA0sNAiACIANNDQIgACAEIAZqNgIEQYCUASADQXggA2tBB3FBACADQQhqQQdxGyIAaiIBNgIAQfSTAUH0kwEoAgAgBmoiAiAAayIANgIAIAEgAEEBcjYCBCACIANqQSg2AgRBhJQBQdCXASgCADYCAAwDC0EAIQQMBQtBACECDAMLQfiTASgCACACSwRAQfiTASACNgIACyACIAZqIQFBqJcBIQACQAJAAkACQAJAAkADQCABIAAoAgBHBEAgACgCCCIADQEMAgsLIAAtAAxBCHFFDQELQaiXASEAA0AgAyAAKAIAIgFPBEAgASAAKAIEaiIEIANLDQMLIAAoAgghAAwACwALIAAgAjYCACAAIAAoAgQgBmo2AgQgAkF4IAJrQQdxQQAgAkEIakEHcRtqIgcgBUEDcjYCBCABQXggAWtBB3FBACABQQhqQQdxG2oiBiAFIAdqIgVrIQAgAyAGRgRAQYCUASAFNgIAQfSTAUH0kwEoAgAgAGoiADYCACAFIABBAXI2AgQMAwtB/JMBKAIAIAZGBEBB/JMBIAU2AgBB8JMBQfCTASgCACAAaiIANgIAIAUgAEEBcjYCBCAAIAVqIAA2AgAMAwsgBigCBCIDQQNxQQFGBEAgA0F4cSEJAkAgA0H/AU0EQCAGKAIIIgEgA0EDdiIEQQN0QZCUAWpGGiABIAYoAgwiAkYEQEHokwFB6JMBKAIAQX4gBHdxNgIADAILIAEgAjYCDCACIAE2AggMAQsgBigCGCEIAkAgBiAGKAIMIgJHBEAgBigCCCIBIAI2AgwgAiABNgIIDAELAkAgBkEUaiIDKAIAIgENACAGQRBqIgMoAgAiAQ0AQQAhAgwBCwNAIAMhBCABIgJBFGoiAygCACIBDQAgAkEQaiEDIAIoAhAiAQ0ACyAEQQA2AgALIAhFDQACQCAGKAIcIgFBAnRBmJYBaiIEKAIAIAZGBEAgBCACNgIAIAINAUHskwFB7JMBKAIAQX4gAXdxNgIADAILIAhBEEEUIAgoAhAgBkYbaiACNgIAIAJFDQELIAIgCDYCGCAGKAIQIgEEQCACIAE2AhAgASACNgIYCyAGKAIUIgFFDQAgAiABNgIUIAEgAjYCGAsgBiAJaiIGKAIEIQMgACAJaiEACyAGIANBfnE2AgQgBSAAQQFyNgIEIAAgBWogADYCACAAQf8BTQRAIABBeHFBkJQBaiEBAn9B6JMBKAIAIgJBASAAQQN2dCIAcUUEQEHokwEgACACcjYCACABDAELIAEoAggLIQAgASAFNgIIIAAgBTYCDCAFIAE2AgwgBSAANgIIDAMLQR8hAyAAQf///wdNBEAgAEEmIABBCHZnIgFrdkEBcSABQQF0a0E+aiEDCyAFIAM2AhwgBUIANwIQIANBAnRBmJYBaiEBAkBB7JMBKAIAIgJBASADdCIEcUUEQEHskwEgAiAEcjYCACABIAU2AgAMAQsgAEEZIANBAXZrQQAgA0EfRxt0IQMgASgCACECA0AgAiIBKAIEQXhxIABGDQMgA0EddiECIANBAXQhAyABIAJBBHFqIgQoAhAiAg0ACyAEIAU2AhALIAUgATYCGCAFIAU2AgwgBSAFNgIIDAILQfSTASAGQShrIgBBeCACa0EHcUEAIAJBCGpBB3EbIgFrIgg2AgBBgJQBIAEgAmoiATYCACABIAhBAXI2AgQgACACakEoNgIEQYSUAUHQlwEoAgA2AgAgAyAEQScgBGtBB3FBACAEQSdrQQdxG2pBL2siACAAIANBEGpJGyIBQRs2AgQgAUGwlwEpAgA3AhAgAUGolwEpAgA3AghBsJcBIAFBCGo2AgBBrJcBIAY2AgBBqJcBIAI2AgBBtJcBQQA2AgAgAUEYaiEAA0AgAEEHNgIEIABBCGohAiAAQQRqIQAgAiAESQ0ACyABIANGDQMgASABKAIEQX5xNgIEIAMgASADayICQQFyNgIEIAEgAjYCACACQf8BTQRAIAJBeHFBkJQBaiEAAn9B6JMBKAIAIgFBASACQQN2dCICcUUEQEHokwEgASACcjYCACAADAELIAAoAggLIQEgACADNgIIIAEgAzYCDCADIAA2AgwgAyABNgIIDAQLQR8hACACQf///wdNBEAgAkEmIAJBCHZnIgBrdkEBcSAAQQF0a0E+aiEACyADIAA2AhwgA0IANwIQIABBAnRBmJYBaiEBAkBB7JMBKAIAIgRBASAAdCIGcUUEQEHskwEgBCAGcjYCACABIAM2AgAMAQsgAkEZIABBAXZrQQAgAEEfRxt0IQAgASgCACEEA0AgBCIBKAIEQXhxIAJGDQQgAEEddiEEIABBAXQhACABIARBBHFqIgYoAhAiBA0ACyAGIAM2AhALIAMgATYCGCADIAM2AgwgAyADNgIIDAMLIAEoAggiACAFNgIMIAEgBTYCCCAFQQA2AhggBSABNgIMIAUgADYCCAsgB0EIaiEADAULIAEoAggiACADNgIMIAEgAzYCCCADQQA2AhggAyABNgIMIAMgADYCCAtB9JMBKAIAIgAgBU0NAEH0kwEgACAFayIBNgIAQYCUAUGAlAEoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQgAEEIaiEADAMLQeSTAUEwNgIAQQAhAAwCCwJAIAdFDQACQCAEKAIcIgBBAnRBmJYBaiIBKAIAIARGBEAgASACNgIAIAINAUHskwEgCEF+IAB3cSIINgIADAILIAdBEEEUIAcoAhAgBEYbaiACNgIAIAJFDQELIAIgBzYCGCAEKAIQIgAEQCACIAA2AhAgACACNgIYCyAEKAIUIgBFDQAgAiAANgIUIAAgAjYCGAsCQCADQQ9NBEAgBCADIAVqIgBBA3I2AgQgACAEaiIAIAAoAgRBAXI2AgQMAQsgBCAFQQNyNgIEIAQgBWoiAiADQQFyNgIEIAIgA2ogAzYCACADQf8BTQRAIANBeHFBkJQBaiEAAn9B6JMBKAIAIgFBASADQQN2dCIDcUUEQEHokwEgASADcjYCACAADAELIAAoAggLIQEgACACNgIIIAEgAjYCDCACIAA2AgwgAiABNgIIDAELQR8hACADQf///wdNBEAgA0EmIANBCHZnIgBrdkEBcSAAQQF0a0E+aiEACyACIAA2AhwgAkIANwIQIABBAnRBmJYBaiEBAkACQCAIQQEgAHQiBnFFBEBB7JMBIAYgCHI2AgAgASACNgIADAELIANBGSAAQQF2a0EAIABBH0cbdCEAIAEoAgAhBQNAIAUiASgCBEF4cSADRg0CIABBHXYhBiAAQQF0IQAgASAGQQRxaiIGKAIQIgUNAAsgBiACNgIQCyACIAE2AhggAiACNgIMIAIgAjYCCAwBCyABKAIIIgAgAjYCDCABIAI2AgggAkEANgIYIAIgATYCDCACIAA2AggLIARBCGohAAwBCwJAIAlFDQACQCACKAIcIgBBAnRBmJYBaiIBKAIAIAJGBEAgASAENgIAIAQNAUHskwEgCkF+IAB3cTYCAAwCCyAJQRBBFCAJKAIQIAJGG2ogBDYCACAERQ0BCyAEIAk2AhggAigCECIABEAgBCAANgIQIAAgBDYCGAsgAigCFCIARQ0AIAQgADYCFCAAIAQ2AhgLAkAgA0EPTQRAIAIgAyAFaiIAQQNyNgIEIAAgAmoiACAAKAIEQQFyNgIEDAELIAIgBUEDcjYCBCACIAVqIgQgA0EBcjYCBCADIARqIAM2AgAgBwRAIAdBeHFBkJQBaiEAQfyTASgCACEBAn9BASAHQQN2dCIFIAZxRQRAQeiTASAFIAZyNgIAIAAMAQsgACgCCAshBiAAIAE2AgggBiABNgIMIAEgADYCDCABIAY2AggLQfyTASAENgIAQfCTASADNgIACyACQQhqIQALIAtBEGokACAAC5kBAQN8IAAgAKIiAyADIAOioiADRHzVz1o62eU9okTrnCuK5uVavqCiIAMgA0R9/rFX4x3HPqJE1WHBGaABKr+gokSm+BARERGBP6CgIQUgAyAAoiEEIAJFBEAgBCADIAWiRElVVVVVVcW/oKIgAKAPCyAAIAMgAUQAAAAAAADgP6IgBSAEoqGiIAGhIARESVVVVVVVxT+ioKELkgEBA3xEAAAAAAAA8D8gACAAoiICRAAAAAAAAOA/oiIDoSIERAAAAAAAAPA/IAShIAOhIAIgAiACIAJEkBXLGaAB+j6iRHdRwRZswVa/oKJETFVVVVVVpT+goiACIAKiIgMgA6IgAiACRNQ4iL7p+qi9okTEsbS9nu4hPqCiRK1SnIBPfpK+oKKgoiAAIAGioaCgC4kMAQd/AkAgAEUNACAAQQhrIgIgAEEEaygCACIBQXhxIgBqIQUCQCABQQFxDQAgAUEDcUUNASACIAIoAgAiAWsiAkH4kwEoAgBJDQEgACABaiEAQfyTASgCACACRwRAIAFB/wFNBEAgAigCCCIEIAFBA3YiAUEDdEGQlAFqRhogBCACKAIMIgNGBEBB6JMBQeiTASgCAEF+IAF3cTYCAAwDCyAEIAM2AgwgAyAENgIIDAILIAIoAhghBgJAIAIgAigCDCIBRwRAIAIoAggiAyABNgIMIAEgAzYCCAwBCwJAIAJBFGoiBCgCACIDDQAgAkEQaiIEKAIAIgMNAEEAIQEMAQsDQCAEIQcgAyIBQRRqIgQoAgAiAw0AIAFBEGohBCABKAIQIgMNAAsgB0EANgIACyAGRQ0BAkAgAigCHCIEQQJ0QZiWAWoiAygCACACRgRAIAMgATYCACABDQFB7JMBQeyTASgCAEF+IAR3cTYCAAwDCyAGQRBBFCAGKAIQIAJGG2ogATYCACABRQ0CCyABIAY2AhggAigCECIDBEAgASADNgIQIAMgATYCGAsgAigCFCIDRQ0BIAEgAzYCFCADIAE2AhgMAQsgBSgCBCIBQQNxQQNHDQBB8JMBIAA2AgAgBSABQX5xNgIEIAIgAEEBcjYCBCAAIAJqIAA2AgAPCyACIAVPDQAgBSgCBCIBQQFxRQ0AAkAgAUECcUUEQEGAlAEoAgAgBUYEQEGAlAEgAjYCAEH0kwFB9JMBKAIAIABqIgA2AgAgAiAAQQFyNgIEIAJB/JMBKAIARw0DQfCTAUEANgIAQfyTAUEANgIADwtB/JMBKAIAIAVGBEBB/JMBIAI2AgBB8JMBQfCTASgCACAAaiIANgIAIAIgAEEBcjYCBCAAIAJqIAA2AgAPCyABQXhxIABqIQACQCABQf8BTQRAIAUoAggiBCABQQN2IgFBA3RBkJQBakYaIAQgBSgCDCIDRgRAQeiTAUHokwEoAgBBfiABd3E2AgAMAgsgBCADNgIMIAMgBDYCCAwBCyAFKAIYIQYCQCAFIAUoAgwiAUcEQCAFKAIIIgNB+JMBKAIASRogAyABNgIMIAEgAzYCCAwBCwJAIAVBFGoiBCgCACIDDQAgBUEQaiIEKAIAIgMNAEEAIQEMAQsDQCAEIQcgAyIBQRRqIgQoAgAiAw0AIAFBEGohBCABKAIQIgMNAAsgB0EANgIACyAGRQ0AAkAgBSgCHCIEQQJ0QZiWAWoiAygCACAFRgRAIAMgATYCACABDQFB7JMBQeyTASgCAEF+IAR3cTYCAAwCCyAGQRBBFCAGKAIQIAVGG2ogATYCACABRQ0BCyABIAY2AhggBSgCECIDBEAgASADNgIQIAMgATYCGAsgBSgCFCIDRQ0AIAEgAzYCFCADIAE2AhgLIAIgAEEBcjYCBCAAIAJqIAA2AgAgAkH8kwEoAgBHDQFB8JMBIAA2AgAPCyAFIAFBfnE2AgQgAiAAQQFyNgIEIAAgAmogADYCAAsgAEH/AU0EQCAAQXhxQZCUAWohAQJ/QeiTASgCACIDQQEgAEEDdnQiAHFFBEBB6JMBIAAgA3I2AgAgAQwBCyABKAIICyEAIAEgAjYCCCAAIAI2AgwgAiABNgIMIAIgADYCCA8LQR8hBCAAQf///wdNBEAgAEEmIABBCHZnIgFrdkEBcSABQQF0a0E+aiEECyACIAQ2AhwgAkIANwIQIARBAnRBmJYBaiEHAkACQAJAQeyTASgCACIDQQEgBHQiAXFFBEBB7JMBIAEgA3I2AgAgByACNgIAIAIgBzYCGAwBCyAAQRkgBEEBdmtBACAEQR9HG3QhBCAHKAIAIQEDQCABIgMoAgRBeHEgAEYNAiAEQR12IQEgBEEBdCEEIAMgAUEEcWoiB0EQaigCACIBDQALIAcgAjYCECACIAM2AhgLIAIgAjYCDCACIAI2AggMAQsgAygCCCIAIAI2AgwgAyACNgIIIAJBADYCGCACIAM2AgwgAiAANgIIC0GIlAFBiJQBKAIAQQFrIgBBfyAAGzYCAAsLqAEAAkAgAUGACE4EQCAARAAAAAAAAOB/oiEAIAFB/w9JBEAgAUH/B2shAQwCCyAARAAAAAAAAOB/oiEAQf0XIAEgAUH9F04bQf4PayEBDAELIAFBgXhKDQAgAEQAAAAAAABgA6IhACABQbhwSwRAIAFByQdqIQEMAQsgAEQAAAAAAABgA6IhAEHwaCABIAFB8GhMG0GSD2ohAQsgACABQf8Haq1CNIa/ogu8AgEBfwJ/QQAgAUECdEGAM2oiAigCACAARg0AGkEBIAIoAhAgAEYNABpBAiABQQJ0QaAzaigCACAARg0AGkEDIAFBAnQiAkGwM2ooAgAgAEYNABpBBCACQcAzaigCACAARg0AGkEFIAFBAnQiAkHQM2ooAgAgAEYNABpBBiACQeAzaigCACAARg0AGkEHIAFBAnQiAkHwM2ooAgAgAEYNABpBCCACQYA0aigCACAARg0AGkEJIAFBAnQiAkGQNGooAgAgAEYNABpBCiACQaA0aigCACAARg0AGkELIAFBAnQiAkGwNGooAgAgAEYNABpBDCACQcA0aigCACAARg0AGkENIAFBAnQiAkHQNGooAgAgAEYNABpBDiACQeA0aigCACAARg0AGkEPQX8gAUECdEHwNGooAgAgAEYbCwvoBAMBfwZ8An4gAL0iCEIwiKchASAIQoCAgICAgID3P31C//////+fwgFYBEAgCEKAgICAgICA+D9RBEBEAAAAAAAAAAAPCyAARAAAAAAAAPC/oCIAIAAgAEQAAAAAAACgQaIiAqAgAqEiAiACokGI8wArAwAiBaIiBqAiByAAIAAgAKIiA6IiBCAEIAQgBEHY8wArAwCiIANB0PMAKwMAoiAAQcjzACsDAKJBwPMAKwMAoKCgoiADQbjzACsDAKIgAEGw8wArAwCiQajzACsDAKCgoKIgA0Gg8wArAwCiIABBmPMAKwMAokGQ8wArAwCgoKCiIAAgAqEgBaIgACACoKIgBiAAIAehoKCgoA8LAkAgAUHw/wFrQZ+Afk0EQCAIQv///////////wCDUARAIwBBEGsiAUQAAAAAAADwvzkDCCABKwMIRAAAAAAAAAAAow8LIAhCgICAgICAgPj/AFENASABQYCAAnFFIAFB8P8BcUHw/wFHcUUEQCAAIAChIgAgAKMPCyAARAAAAAAAADBDor1CgICAgICAgKADfSEICyAIQoCAgICAgIDzP30iCUI0h6e3IgNB0PIAKwMAoiAJQi2Ip0H/AHFBBHQiAUHo8wBqKwMAoCIEIAFB4PMAaisDACAIIAlCgICAgICAgHiDfb8gAUHggwFqKwMAoSABQeiDAWorAwChoiIAoCIFIAAgACAAoiICoiACIABBgPMAKwMAokH48gArAwCgoiAAQfDyACsDAKJB6PIAKwMAoKCiIAJB4PIAKwMAoiADQdjyACsDAKIgACAEIAWhoKCgoKAhAAsgAAsDAAELkwwCB38BfiMAQYACayIHJAAgA0GAjQVqIgQgAkECdGoiBSgCAEECdCAEIAJBC3QiCGpBiMAAaiICaiAAKAIAIgQvAQBBEHQ2AnwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AnggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AnQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AnAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AkwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AkggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AkQgBSgCAEECdCACakFAayAEQQJqIgQvAQBBEHQ2AgAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AgwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AgggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AgQgAiAFKAIAQQJ0aiAEQQJqIgIvAQBBEHQ2AgAgACACQQJqNgIAIAUoAgAhCUHAACECA0AgByACQQFrIgBBAnQiCmogAkECdEHAO2oiBjQC/AEgAyAIakGIzQVqIgIgACAJaiIEQUBrQf8DcUECdGo0AgB+QiCIpyAKQcA7ajQCACACIARB/wNxQQJ0ajQCAH5CIIinaiAGNAL8AyACIARBgAFqQf8DcUECdGo0AgB+QiCIp2ogBjQC/AUgAiAEQcABakH/A3FBAnRqNAIAfkIgiKdqIAY0AvwHIAIgBEGAAmpB/wNxQQJ0ajQCAH5CIIinaiAGQfwJajQCACACIARBwAJqQf8DcUECdGo0AgB+QiCIp2ogBkH8C2o0AgAgAiAEQYADakH/A3FBAnRqNAIAfkIgiKdqIAZB/A1qNAIAIAIgBEHAA2pB/wNxQQJ0ajQCAH5CIIinajYCACAAIgINAAsgBSAFKAIAQeADakH/A3E2AgBBHyECIAc0AvwBIQsDQCALIAMgAiIFQQh0aiIIQYSPBWo0AgB+QiCIpyEGQT8hAANAIAYgByAAQQJ0IgRBBGsiCWo0AgAgCSAIQYiNBWoiAmo0AgB+QiCIp2ogByAEQQhrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQQxrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQRBrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQRRrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQRhrIgRqNAIAIAIgBGo0AgB+QiCIp2ogByAAQQdrIgBBAnQiBGo0AgAgAiAEajQCAH5CIIinaiEGIAANAAsgASAFQQJ0aiAGNgIAIAVBAWshAiAFDQALIAdBgAJqJAALyAsBBn8gACABaiEFAkACQCAAKAIEIgJBAXENACACQQNxRQ0BIAAoAgAiAiABaiEBAkAgACACayIAQfyTASgCAEcEQCACQf8BTQRAIAAoAggiBCACQQN2IgJBA3RBkJQBakYaIAAoAgwiAyAERw0CQeiTAUHokwEoAgBBfiACd3E2AgAMAwsgACgCGCEGAkAgACAAKAIMIgJHBEAgACgCCCIDQfiTASgCAEkaIAMgAjYCDCACIAM2AggMAQsCQCAAQRRqIgQoAgAiAw0AIABBEGoiBCgCACIDDQBBACECDAELA0AgBCEHIAMiAkEUaiIEKAIAIgMNACACQRBqIQQgAigCECIDDQALIAdBADYCAAsgBkUNAgJAIAAoAhwiBEECdEGYlgFqIgMoAgAgAEYEQCADIAI2AgAgAg0BQeyTAUHskwEoAgBBfiAEd3E2AgAMBAsgBkEQQRQgBigCECAARhtqIAI2AgAgAkUNAwsgAiAGNgIYIAAoAhAiAwRAIAIgAzYCECADIAI2AhgLIAAoAhQiA0UNAiACIAM2AhQgAyACNgIYDAILIAUoAgQiAkEDcUEDRw0BQfCTASABNgIAIAUgAkF+cTYCBCAAIAFBAXI2AgQgBSABNgIADwsgBCADNgIMIAMgBDYCCAsCQCAFKAIEIgJBAnFFBEBBgJQBKAIAIAVGBEBBgJQBIAA2AgBB9JMBQfSTASgCACABaiIBNgIAIAAgAUEBcjYCBCAAQfyTASgCAEcNA0HwkwFBADYCAEH8kwFBADYCAA8LQfyTASgCACAFRgRAQfyTASAANgIAQfCTAUHwkwEoAgAgAWoiATYCACAAIAFBAXI2AgQgACABaiABNgIADwsgAkF4cSABaiEBAkAgAkH/AU0EQCAFKAIIIgQgAkEDdiICQQN0QZCUAWpGGiAEIAUoAgwiA0YEQEHokwFB6JMBKAIAQX4gAndxNgIADAILIAQgAzYCDCADIAQ2AggMAQsgBSgCGCEGAkAgBSAFKAIMIgJHBEAgBSgCCCIDQfiTASgCAEkaIAMgAjYCDCACIAM2AggMAQsCQCAFQRRqIgMoAgAiBA0AIAVBEGoiAygCACIEDQBBACECDAELA0AgAyEHIAQiAkEUaiIDKAIAIgQNACACQRBqIQMgAigCECIEDQALIAdBADYCAAsgBkUNAAJAIAUoAhwiBEECdEGYlgFqIgMoAgAgBUYEQCADIAI2AgAgAg0BQeyTAUHskwEoAgBBfiAEd3E2AgAMAgsgBkEQQRQgBigCECAFRhtqIAI2AgAgAkUNAQsgAiAGNgIYIAUoAhAiAwRAIAIgAzYCECADIAI2AhgLIAUoAhQiA0UNACACIAM2AhQgAyACNgIYCyAAIAFBAXI2AgQgACABaiABNgIAIABB/JMBKAIARw0BQfCTASABNgIADwsgBSACQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALIAFB/wFNBEAgAUF4cUGQlAFqIQICf0HokwEoAgAiA0EBIAFBA3Z0IgFxRQRAQeiTASABIANyNgIAIAIMAQsgAigCCAshASACIAA2AgggASAANgIMIAAgAjYCDCAAIAE2AggPC0EfIQQgAUH///8HTQRAIAFBJiABQQh2ZyICa3ZBAXEgAkEBdGtBPmohBAsgACAENgIcIABCADcCECAEQQJ0QZiWAWohBwJAAkBB7JMBKAIAIgNBASAEdCICcUUEQEHskwEgAiADcjYCACAHIAA2AgAgACAHNgIYDAELIAFBGSAEQQF2a0EAIARBH0cbdCEEIAcoAgAhAgNAIAIiAygCBEF4cSABRg0CIARBHXYhAiAEQQF0IQQgAyACQQRxaiIHQRBqKAIAIgINAAsgByAANgIQIAAgAzYCGAsgACAANgIMIAAgADYCCA8LIAMoAggiASAANgIMIAMgADYCCCAAQQA2AhggACADNgIMIAAgATYCCAsLwQEBAn8jAEEQayIBJAACfCAAvUIgiKdB/////wdxIgJB+8Ok/wNNBEBEAAAAAAAA8D8gAkGewZryA0kNARogAEQAAAAAAAAAABAKDAELIAAgAKEgAkGAgMD/B08NABoCQAJAAkACQCAAIAEQE0EDcQ4DAAECAwsgASsDACABKwMIEAoMAwsgASsDACABKwMIQQEQCZoMAgsgASsDACABKwMIEAqaDAELIAErAwAgASsDCEEBEAkLIQAgAUEQaiQAIAALzxgDFH8EfAF+IwBBMGsiCSQAAkACQAJAIAC9IhpCIIinIgNB/////wdxIgZB+tS9gARNBEAgA0H//z9xQfvDJEYNASAGQfyyi4AETQRAIBpCAFkEQCABIABEAABAVPsh+b+gIgBEMWNiGmG00L2gIhY5AwAgASAAIBahRDFjYhphtNC9oDkDCEEBIQMMBQsgASAARAAAQFT7Ifk/oCIARDFjYhphtNA9oCIWOQMAIAEgACAWoUQxY2IaYbTQPaA5AwhBfyEDDAQLIBpCAFkEQCABIABEAABAVPshCcCgIgBEMWNiGmG04L2gIhY5AwAgASAAIBahRDFjYhphtOC9oDkDCEECIQMMBAsgASAARAAAQFT7IQlAoCIARDFjYhphtOA9oCIWOQMAIAEgACAWoUQxY2IaYbTgPaA5AwhBfiEDDAMLIAZBu4zxgARNBEAgBkG8+9eABE0EQCAGQfyyy4AERg0CIBpCAFkEQCABIABEAAAwf3zZEsCgIgBEypSTp5EO6b2gIhY5AwAgASAAIBahRMqUk6eRDum9oDkDCEEDIQMMBQsgASAARAAAMH982RJAoCIARMqUk6eRDuk9oCIWOQMAIAEgACAWoUTKlJOnkQ7pPaA5AwhBfSEDDAQLIAZB+8PkgARGDQEgGkIAWQRAIAEgAEQAAEBU+yEZwKAiAEQxY2IaYbTwvaAiFjkDACABIAAgFqFEMWNiGmG08L2gOQMIQQQhAwwECyABIABEAABAVPshGUCgIgBEMWNiGmG08D2gIhY5AwAgASAAIBahRDFjYhphtPA9oDkDCEF8IQMMAwsgBkH6w+SJBEsNAQsgACAARIPIyW0wX+Q/okQAAAAAAAA4Q6BEAAAAAAAAOMOgIhdEAABAVPsh+b+ioCIWIBdEMWNiGmG00D2iIhihIhlEGC1EVPsh6b9jIQICfyAXmUQAAAAAAADgQWMEQCAXqgwBC0GAgICAeAshAwJAIAIEQCADQQFrIQMgF0QAAAAAAADwv6AiF0QxY2IaYbTQPaIhGCAAIBdEAABAVPsh+b+ioCEWDAELIBlEGC1EVPsh6T9kRQ0AIANBAWohAyAXRAAAAAAAAPA/oCIXRDFjYhphtNA9oiEYIAAgF0QAAEBU+yH5v6KgIRYLIAEgFiAYoSIAOQMAAkAgBkEUdiICIAC9QjSIp0H/D3FrQRFIDQAgASAWIBdEAABgGmG00D2iIgChIhkgF0RzcAMuihmjO6IgFiAZoSAAoaEiGKEiADkDACACIAC9QjSIp0H/D3FrQTJIBEAgGSEWDAELIAEgGSAXRAAAAC6KGaM7oiIAoSIWIBdEwUkgJZqDezmiIBkgFqEgAKGhIhihIgA5AwALIAEgFiAAoSAYoTkDCAwBCyAGQYCAwP8HTwRAIAEgACAAoSIAOQMAIAEgADkDCEEAIQMMAQsgGkL/////////B4NCgICAgICAgLDBAIS/IQBBACEDQQEhAgNAIAlBEGogA0EDdGoCfyAAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAu3IhY5AwAgACAWoUQAAAAAAABwQaIhAEEBIQMgAiEEQQAhAiAEDQALIAkgADkDIEECIQMDQCADIgJBAWshAyAJQRBqIAJBA3RqKwMARAAAAAAAAAAAYQ0ACyAJQRBqIQ5BACEEIwBBsARrIgUkACAGQRR2QZYIayIDQQNrQRhtIgZBACAGQQBKGyIPQWhsIANqIQZBxMsAKAIAIgggAkEBaiIKQQFrIgdqQQBOBEAgCCAKaiEDIA8gB2shAgNAIAVBwAJqIARBA3RqIAJBAEgEfEQAAAAAAAAAAAUgAkECdEHQywBqKAIAtws5AwAgAkEBaiECIARBAWoiBCADRw0ACwsgBkEYayELQQAhAyAIQQAgCEEAShshBCAKQQBMIQwDQAJAIAwEQEQAAAAAAAAAACEADAELIAMgB2ohDUEAIQJEAAAAAAAAAAAhAANAIA4gAkEDdGorAwAgBUHAAmogDSACa0EDdGorAwCiIACgIQAgAkEBaiICIApHDQALCyAFIANBA3RqIAA5AwAgAyAERiECIANBAWohAyACRQ0AC0EvIAZrIRJBMCAGayEQIAZBGWshEyAIIQMCQANAIAUgA0EDdGorAwAhAEEAIQIgAyEEIANBAEwiB0UEQANAIAVB4ANqIAJBAnRqAn8CfyAARAAAAAAAAHA+oiIWmUQAAAAAAADgQWMEQCAWqgwBC0GAgICAeAu3IhZEAAAAAAAAcMGiIACgIgCZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4CzYCACAFIARBAWsiBEEDdGorAwAgFqAhACACQQFqIgIgA0cNAAsLAn8gACALEAwiACAARAAAAAAAAMA/opxEAAAAAAAAIMCioCIAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAshDCAAIAy3oSEAAkACQAJAAn8gC0EATCIURQRAIANBAnQgBWoiAiACKALcAyICIAIgEHUiAiAQdGsiBDYC3AMgAiAMaiEMIAQgEnUMAQsgCw0BIANBAnQgBWooAtwDQRd1CyINQQBMDQIMAQtBAiENIABEAAAAAAAA4D9mDQBBACENDAELQQAhAkEAIQQgB0UEQANAIAVB4ANqIAJBAnRqIhUoAgAhEUH///8HIQcCfwJAIAQNAEGAgIAIIQcgEQ0AQQAMAQsgFSAHIBFrNgIAQQELIQQgAkEBaiICIANHDQALCwJAIBQNAEH///8DIQICQAJAIBMOAgEAAgtB////ASECCyADQQJ0IAVqIgcgBygC3AMgAnE2AtwDCyAMQQFqIQwgDUECRw0ARAAAAAAAAPA/IAChIQBBAiENIARFDQAgAEQAAAAAAADwPyALEAyhIQALIABEAAAAAAAAAABhBEBBACEEIAMhAgJAIAMgCEwNAANAIAVB4ANqIAJBAWsiAkECdGooAgAgBHIhBCACIAhKDQALIARFDQAgCyEGA0AgBkEYayEGIAVB4ANqIANBAWsiA0ECdGooAgBFDQALDAMLQQEhAgNAIAIiBEEBaiECIAVB4ANqIAggBGtBAnRqKAIARQ0ACyADIARqIQQDQCAFQcACaiADIApqIgdBA3RqIANBAWoiAyAPakECdEHQywBqKAIAtzkDAEEAIQJEAAAAAAAAAAAhACAKQQBKBEADQCAOIAJBA3RqKwMAIAVBwAJqIAcgAmtBA3RqKwMAoiAAoCEAIAJBAWoiAiAKRw0ACwsgBSADQQN0aiAAOQMAIAMgBEgNAAsgBCEDDAELCwJAIABBGCAGaxAMIgBEAAAAAAAAcEFmBEAgBUHgA2ogA0ECdGoCfwJ/IABEAAAAAAAAcD6iIhaZRAAAAAAAAOBBYwRAIBaqDAELQYCAgIB4CyICt0QAAAAAAABwwaIgAKAiAJlEAAAAAAAA4EFjBEAgAKoMAQtBgICAgHgLNgIAIANBAWohAwwBCwJ/IACZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4CyECIAshBgsgBUHgA2ogA0ECdGogAjYCAAtEAAAAAAAA8D8gBhAMIQACQCADQQBIDQAgAyECA0AgBSACIgRBA3RqIAAgBUHgA2ogAkECdGooAgC3ojkDACACQQFrIQIgAEQAAAAAAABwPqIhACAEDQALQQAhByADQQBIDQAgCEEAIAhBAEobIQYgAyEEA0AgBiAHIAYgB0kbIQsgAyAEayEIQQAhAkQAAAAAAAAAACEAA0AgAkEDdEGg4QBqKwMAIAUgAiAEakEDdGorAwCiIACgIQAgAiALRyEKIAJBAWohAiAKDQALIAVBoAFqIAhBA3RqIAA5AwAgBEEBayEEIAMgB0chAiAHQQFqIQcgAg0ACwtEAAAAAAAAAAAhACADQQBOBEAgAyECA0AgAiIEQQFrIQIgACAFQaABaiAEQQN0aisDAKAhACAEDQALCyAJIACaIAAgDRs5AwAgBSsDoAEgAKEhAEEBIQIgA0EASgRAA0AgACAFQaABaiACQQN0aisDAKAhACACIANHIQQgAkEBaiECIAQNAAsLIAkgAJogACANGzkDCCAFQbAEaiQAIAxBB3EhAyAJKwMAIQAgGkIAUwRAIAEgAJo5AwAgASAJKwMImjkDCEEAIANrIQMMAQsgASAAOQMAIAEgCSsDCDkDCAsgCUEwaiQAIAMLGAAgASAAKAJoNgIAIABBADYCaCAAKAJgC7xUAyF/JH4CfCAAIAEoAgA2AogRIAAoAgBBAkYEQCAAQYwRaiABKAIENgIACwJAIAArAzAiSEQAAAAAAAAAAGEEQCAAKAIgIQEMAQsgACAAKwM4IkkgSEQAAAAAAADwv6BlIgE2AiAgACBJRAAAAAAAAPA/RAAAAAAAAAAAIAEbIEihoDkDOAsgACAAQUBrKAIAIAFqQQN0IgE2AiQgACABIAAoAowEayAAKAIQbTYCkAQCQCAAIgEoAgAiBUUNACAFQQFrIQAgASgCECIEQQBKBEAgAUHg+ARqIQcDQCAAIQMgBEEASgRAIAEgA0ECdGpBiBFqIQpBACEFA0AgBUEBaiEGQQAhAANAIAogASADQYA2bGoiCSAGQYASbCIQakGw2QBqIgQgAEEHdCIIaiADIAEQECAKIAQgCEGAAXJqIgQgAyABEBAgBEEAIAQoAgRrNgIEIARBACAEKAIMazYCDCAEQQAgBCgCFGs2AhQgBEEAIAQoAhxrNgIcIARBACAEKAIkazYCJCAEQQAgBCgCLGs2AiwgBEEAIAQoAjRrNgI0IARBACAEKAI8azYCPCAEQQAgBCgCRGs2AkQgBEEAIAQoAkxrNgJMIARBACAEKAJUazYCVCAEQQAgBCgCXGs2AlwgBEEAIAQoAmRrNgJkIARBACAEKAJsazYCbCAEQQAgBCgCdGs2AnQgBEEAIAQoAnxrNgJ8IABBEEkhBCAAQQJqIQAgBA0ACyAFQYASbCINIAEgA0GAJGxqakGwxQFqIQxBACEFA0AgBUECdCIEIAlBsNkAaiIIIA1qaiIANAIAISQgCCAQaiAEaiIENAIAISUgADQCgAEhJiAANAKAAiEnIAA0AoADISggADQCgAQhKSAANAKABSEqIAA0AoAGISsgADQCgAchLCAAQYAIajQCACEtIABBgAlqNAIAIS4gAEGACmo0AgAhLyAAQYALajQCACEwIABBgAxqNAIAITEgAEGADWo0AgAhMiAAQYAOajQCACEzIABBgA9qNAIAITQgAEGAEGo0AgAhNSAAQYARajQCACE2IAQ0AoABITcgBDQCgAIhOCAENAKAAyE5IAQ0AoAEITogBDQCgAUhOyAENAKABiE8IAQ0AoAHIT0gBEGACGo0AgAhPiAEQYAJajQCACE/IARBgApqNAIAIUAgBEGAC2o0AgAhQSAEQYAMajQCACFCIARBgA1qNAIAIUMgBEGADmo0AgAhRCAEQYAPajQCACFFIARBgBBqNAIAIUYgBEGAEWo0AgAhR0ERIQQDQCAMIAVByABsaiIIIAQiAEECdGogByAAQZABbGoiBDQCjAEgR35CIIinIAQ0AogBIEZ+QiCIp2ogBDQChAEgRX5CIIinaiAENAKAASBEfkIgiKdqIAQ0AnwgQ35CIIinaiAENAJ4IEJ+QiCIp2ogBDQCdCBBfkIgiKdqIAQ0AnAgQH5CIIinaiAENAJsID9+QiCIp2ogBDQCaCA+fkIgiKdqIAQ0AmQgPX5CIIinaiAENAJgIDx+QiCIp2ogBDQCXCA7fkIgiKdqIAQ0AlggOn5CIIinaiAENAJUIDl+QiCIp2ogBDQCUCA4fkIgiKdqIAQ0AkwgN35CIIinaiAENAJIICV+QiCIp2ogBDQCRCA2fkIgiKdqIAQ0AkAgNX5CIIinaiAENAI8IDR+QiCIp2ogBDQCOCAzfkIgiKdqIAQ0AjQgMn5CIIinaiAENAIwIDF+QiCIp2ogBDQCLCAwfkIgiKdqIAQ0AiggL35CIIinaiAENAIkIC5+QiCIp2ogBDQCICAtfkIgiKdqIAQ0AhwgLH5CIIinaiAENAIYICt+QiCIp2ogBDQCFCAqfkIgiKdqIAQ0AhAgKX5CIIinaiAENAIMICh+QiCIp2ogBDQCCCAnfkIgiKdqIAQ0AgQgJn5CIIinaiAENAIAICR+QiCIp2o2AgAgAEEBayEEIAANAAsgBQRAIAhByABrIgAgADQCRCIkQoOoie4GfiAINAIAIiVCy4GU8fv/////AH58Qh+IPgJEIAggADQCQCImQpDthuMDfiAINAIEIidC+Nfzhgd+fEIfiD4CBCAIICRCtf7rjgR+ICVCg6iJ7gZ+fEIfiD4CACAAICZC+Nfzhgd+ICdC8JL5nPz/////AH58Qh+IPgJAIAggADQCPCIkQp6B88ACfiAINAIIIiVC+ty1zAd+fEIfiD4CCCAAICRC+ty1zAd+ICVC4v6Mv/3/////AH58Qh+IPgI8IAAgADQCOCIkQqeB9e4HfiAINAIMIiVC+6Lcxf7/////AH58Qh+IPgI4IAggJEKF3aO6AX4gJUKngfXuB358Qh+IPgIMIAAgADQCNCIkQrbBtPsHfiAINAIQIiVCrfyTn///////AH58Qh+IPgI0IAggJELTg+zgAH4gJUK2wbT7B358Qh+IPgIQIAAgADQCMCIkQr/8kf8HfiAINAIUIiVCyceG1v//////AH58Qh+IPgIwIAggJEK3uPkpfiAlQr/8kf8HfnxCH4g+AhQgACAANAIsIiRC4uTy/wd+IAg0AhgiJULH+7rx//////8AfnxCH4g+AiwgCCAkQrmExQ5+ICVC4uTy/wd+fEIfiD4CGCAIIAA0AigiJEKj++QDfiAINAIcIiVCk43//wd+fEIfiD4CHCAAICRCk43//wd+ICVC3YSb/P//////AH58Qh+IPgIoCyAFQQFqIgVBIEcNAAsgASgCECIEIAYiBUoNAAsLIAEgA0GANmxqQbDZAGoiACAAIARBgBJsakGAEhAEIANBAWshACADDQALDAELIAVBA3EiAwRAA0AgASAAQYA2bGpBsNkAaiIIIAggBEGAEmxqQYASEAQgAEEBayEAIAZBAWoiBiADRw0ACwsgBUEESQ0AA0AgASAAQYA2bGoiBUGw2QBqIgYgBiAEQYASbCIDakGAEhAEIAVBsCNqIgYgAyAGakGAEhAEIAVB0BJrIgYgAyAGakGAEhAEIAVB0MgAayIFIAMgBWpBgBIQBCAAQQNGIQUgAEEEayEAIAVFDQALCyMAQaAFayIVJAACQCABIgMoAgAiEEUNACADKAIQIgFBAEwNACADQbgJaiEZIBBB3ABsQYwBaiEaA0AgEEEBayEQIAFBAEoEQCAaIBdBpH9saiEdIBBBqAFsIRggAyAQQQR0aiEMQQAhDQNAIANBADYCvLECIAMgAyAQQYAkbGogDUGAEmxqIg9BsMUBaiIFNgK4jQIgAyAdIA1BuAFsIghqaiEJQb8EIQADQCADIAAiAUECdCIAaiIGQbyfAmogACAFaigCACIEIARBH3UiAHMgAGsiADYCACAGQbyNAmogBKwiJCAkfkKAgICABHxCH4g+AgAgAygCvLECIgYgAEgEQCADIAA2AryxAiAAIQYLIAFBAWshACABDQALIAMgCGogEEHcAGxqIhFBFTYC1AEgFSANQdACbCISIBhqakGoARAHAkAgAygCCEEDRw0AIAMoAkghBCADIA1BAnRqIghBmLQCaiAGNgIAQcAEIQFBACEFA0AgAUECdCEAIANBvI0CaiIGIAFBBGsiAUECdGooAgBBCnUgACAGaiIAQQxrKAIAQQp1IABBBGsoAgBBCnUgBWogAEEIaygCAEEKdWpqaiEFIAENAAsgBEHcAGxBgDVqIQsgCEHAsQJqAn9BACAFRQ0AGiAFt0RoXxwAAACgPqIQDkScRK3+Qi7mP6MiSJlEAAAAAAAA4EFjBEAgSKoMAQtBgICAgHgLNgIAIAsoAlQhBUEUIQADQEEAIQoCf0EAIAUgCyAAIghBAnQiE2ooAgAiBEwNABogBSAEayIHQQNxIQ5BACEGQQAhACAFIAQiAUF/c2pBA08EQCAHQXxxIRRBACEFA0AgAyABQQJ0aiIHQciNAmooAgBBCnUgB0G8jQJqKAIAQQp1IABqIAdBwI0CaigCAEEKdWogB0HEjQJqKAIAQQp1amohACABQQRqIQEgBUEEaiIFIBRHDQALCyAOBEADQCADIAFBAnRqQbyNAmooAgBBCnUgAGohACABQQFqIQEgBkEBaiIGIA5HDQALC0EAIABFDQAaIAC3RGhfHAAAAKA+ohAORJxErf5CLuY/oyJImUQAAAAAAADgQWMEQCBIqgwBC0GAgICAeAshACADIA1B1ABsaiATaiIBQcixAmogADYCAAJAIBIgFWogGGogCEEDdGorAwAiSEQAAAAAAAAAAGENACBIEA5EnESt/kIu5j+jIkiZRAAAAAAAAOBBYwRAIEiqIQoMAQtBgICAgHghCgsgAUHwsgJqIAo2AgAgCEEBayEAIAQhBSAIDQALIA1BAUcNACADKAKYtAJBAEdBA0ECIAMoApy0AhtqIAMoAsCxAiADKALEsQJrIgAgAEEfdSIAcyAAa0EKSWogAygC0LECIAMoAqSyAmsiACAAQR91IgBzIABrIgAgAygC1LECIAMoAqiyAmsiASABQR91IgFzIAFrIgEgAygC5LECIAMoAriyAmsiBCAEQR91IgRzIARrIgQgAygClLICIAMoAuiyAmsiBSAFQR91IgVzIAVrIAMoApiyAiADKALssgJrIgUgBUEfdSIFcyAFa2ogAygCkLICIAMoAuSyAmsiBSAFQR91IgVzIAVraiADKAKMsgIgAygC4LICayIFIAVBH3UiBXMgBWtqIAMoAoiyAiADKALcsgJrIgUgBUEfdSIFcyAFa2ogAygChLICIAMoAtiyAiIFayIGIAZBH3UiBnMgBmtqIAMoAoCyAiADKALUsgJrIgYgBkEfdSIGcyAGa2ogAygC/LECIAMoAtCyAmsiBiAGQR91IgZzIAZraiADKAL4sQIiBiADKALMsgJrIgggCEEfdSIIcyAIa2ogAygC9LECIAMoAsiyAiIIayIKIApBH3UiCnMgCmtqIAMoAvCxAiADKALEsgIiCmsiByAHQR91IgdzIAdraiADKALssQIgAygCwLICayIHIAdBH3UiB3MgB2tqIAMoAuixAiIHIAMoAryyAmsiCyALQR91IgtzIAtramogAygC4LECIAMoArSyAiILayIOIA5BH3UiDnMgDmtqIAMoAtyxAiADKAKwsgIiDmsiEiASQR91IhJzIBJraiADKALYsQIiEiADKAKssgJrIhMgE0EfdSITcyATa2pqaiADKALMsQIgAygCoLICIhNrIhQgFEEfdSIUcyAUa2ogAygCyLECIhQgAygCnLICayIWIBZBH3UiFnMgFmtqQeQASWpBBkcEQCAMQgA3AnwgDEIANwKEAQwBCyAMQQA2AnwgDCAAIAFqIAMoAtyxAiAOayIAIABBH3UiAHMgAGtqIBIgAygCrLICayIAIABBH3UiAHMgAGtqIAMoAsyxAiATayIAIABBH3UiAHMgAGtqIBQgAygCnLICayIAIABBH3UiAHMgAGtqQQpJIAMoAoCzAiADKALUswJrIgAgAEEfdSIAcyAAayADKAKEswIgAygC2LMCayIAIABBH3UiAHMgAGtqIAMoAvyyAiADKALQswJrIgAgAEEfdSIAcyAAa2ogAygC+LICIAMoAsyzAmsiACAAQR91IgBzIABraiADKAL0sgIgAygCyLMCayIAIABBH3UiAHMgAGtqIAMoAvCyAiADKALEswJrIgAgAEEfdSIAcyAAa2pBCklxNgJ8IAxBADYCgAEgDCADKALwsQIgCmsiACAAQR91IgBzIABrIARqIAMoAuyxAiADKALAsgJrIgAgAEEfdSIAcyAAa2ogByADKAK8sgJrIgAgAEEfdSIAcyAAa2ogAygC4LECIAtrIgAgAEEfdSIAcyAAa2pBCkkgAygClLMCIAMoAuizAmsiACAAQR91IgBzIABrIAMoApizAiADKALsswJrIgAgAEEfdSIAcyAAa2ogAygCkLMCIAMoAuSzAmsiACAAQR91IgBzIABraiADKAKMswIgAygC4LMCayIAIABBH3UiAHMgAGtqIAMoAoizAiADKALcswJrIgAgAEEfdSIAcyAAa2pBCklxNgKAASAMQQA2AoQBIAwgAygCgLICIAMoAtSyAmsiACAAQR91IgBzIABrIAMoAoSyAiAFayIAIABBH3UiAHMgAGtqIAMoAvyxAiADKALQsgJrIgAgAEEfdSIAcyAAa2ogBiADKALMsgJrIgAgAEEfdSIAcyAAa2ogAygC9LECIAhrIgAgAEEfdSIAcyAAa2pBCkkgAygCqLMCIAMoAvyzAmsiACAAQR91IgBzIABrIAMoAqyzAiADKAKAtAJrIgAgAEEfdSIAcyAAa2ogAygCpLMCIAMoAvizAmsiACAAQR91IgBzIABraiADKAKgswIgAygC9LMCayIAIABBH3UiAHMgAGtqIAMoApyzAiADKALwswJrIgAgAEEfdSIAcyAAa2pBCklxNgKEASAMQQA2AogBIAwgAygClLICIAMoAuiyAmsiACAAQR91IgBzIABrIAMoApiyAiADKALssgJrIgAgAEEfdSIAcyAAa2ogAygCkLICIAMoAuSyAmsiACAAQR91IgBzIABraiADKAKMsgIgAygC4LICayIAIABBH3UiAHMgAGtqIAMoAoiyAiADKALcsgJrIgAgAEEfdSIAcyAAa2pBCkkgAygCvLMCIAMoApC0AmsiACAAQR91IgBzIABrIAMoAsCzAiADKAKUtAJrIgAgAEEfdSIAcyAAa2ogAygCuLMCIAMoAoy0AmsiACAAQR91IgBzIABraiADKAK0swIgAygCiLQCayIAIABBH3UiAHMgAGtqIAMoArCzAiADKAKEtAJrIgAgAEEfdSIAcyAAa2pBCklxNgKIAQtB/x8gAygCkAQgAygCAG0iBCAEQf8fThshACADKAK0jQIiBQRAQQAhAUH/HyAAISMgAygCsI0CIgYgBUEDdEF2bWoiBSEiAn8gDCANQQN0akGQEWorAwBEzczMzMzMCECiIAS3oSJImUQAAAAAAADgQWMEQCBIqgwBC0GAgICAeAsiBEHlAE4EQCAGQQZsQQptIgEgBCABIARIGyEBCyAjICIgASABIAVIG2oiACAAQf8fThshAAsgGSANQbABbGogEEHYAGxqQdgAEAcgAyANQbgCbGogEEGcAWxqQZgMakGcARAHIAlCADcCCCAJQgA3AgAgEUIANwKsASARQQA2AqQBIBFCADcCnAEgEUIANwK0ASARQgA3ArwBIBFCADcCxAEgEUIANwLMASADKAK8sQIEQCAAIQogD0GwEWohBiADIA1BuAFsakGcAWoiFCAQQdwAbGohCUH8LygCACEWQeQvKAIAIRtB+AAhEkGIfyEPIANBuI0CaiEeA0BBoI0GIQgCQCADIBJBAXYiEyAPaiIfQf8AaiIAQQJ0akGgvAJqNAIAIiQgAzQCvLECfkKAgICACHxCIIinQZSKCkoNACAeIABBA3RqQegmaiEHIAMoAriNAiELQQAhAEEAIQUDQAJ/IAsgAEECdCIEaigCACIBIAFBH3UiAXMgAWutICR+QoCAgIAIfEIgiKciAUGPzgBMBEAgAyABQQJ0akGgwAJqKAIADAELIAcrAwAgAyAEakG8nwJqKAIAt6JEaF8cAAAAAD6iIkggSJ+inyJImUQAAAAAAADgQWMEQCBIqgwBC0GAgICAeAshASAEIAZqIAE2AgAgBSABIAEgBUgbIQUgAEEBaiIAQcAERw0AC0HABCEAIAVBgMAASg0AAkACQAJAAkADQCAARQRAIAlBADYCCCAAIQQMAgsCQCAAQQJ0IAZqIgFBBGsoAgAEQCAAIQQMAQsgBiAAQQJrIgRBAnRqKAIABEAgACEEDAELIAFBDGsoAgANACAGIABBBGsiAEECdGooAgBFDQELC0EAIQsgCUEANgIIIARBA0wNAAJAAkADQCAEQQJ0IAZqIgBBBGsoAgBBAUoNASAAQQhrKAIAQQFKDQEgAEEMaygCAEEBSg0BIAYgBEEEayIAQQJ0aigCAEECTg0BIAkgC0EBaiILNgIIIARBB0shASAAIQQgAQ0ACyAJIARBAXU2AgQMAQsgCSAEQQF1NgIEIAtFDQILQQAhAUEAIQcgBCEFQQAhCANAIAFBAkEBIAYgBUECdCIcaiIAKAIAIg4bIA5BAEcgBiAcQQRyaigCACIcGyAAKAIIIiBBAEdqIAAoAgwiAEEAR2oiIWogFiAcQQF0IA5qICBBAnRqIABBA3RqIgBqLQAAaiEBIAcgACAbai0AAGogIWohByAFQQRqIQUgCEEBaiIIIAtHDQALQQAhBSABIAdMDQIMAwsgCSAEQQF1NgIEC0EAIQELQQEhBSABIQcLIAkgBTYCMAJAIARFBEAgCUIANwIgIAkoAjwhAQwBCyADKAJIQdwAbEGANWohCEEAIQADQCAAIgVBAWohACAIIAVBAnRqKAIAIARIDQALQQAhAQJAIAVBA3QiC0GAMGooAgAiAEUNAANAIAQgAEECdCAIaigCBE4EQCAAIQEMAgsgAEEBayIADQALCyAJIAE2AiAgCSABQQJ0IAhqQQRqIggoAgAiATYCPCALQYQwaigCACEAAkAgBUEFSQ0AA0AgAEECdCAIaigCBCAETA0BIABBAWsiAA0AC0EAIQALIAkgBDYCRCAJIAA2AiQgCSAAQQJ0IAhqKAIENgJAC0EAIQggCUEANgIcIAlCADcCFEEAIQsgAQRAIAkgBkEAIAEQBiILNgIUCyABIAkoAkAiDkkEQCAJIAYgASAOEAYiCDYCGAtBACEFQQAhACAEIA5LBEAgCSAGIA4gBBAGIgA2AhwLIAsEQCAGQQAgASALEAMhBQsgCARAIAYgASAOIAgQAyAFaiEFCyAABH8gBiAOIAkoAkQgABADIAVqBSAFCyAHaiEICyAPIB8gCCAKSCIAGyEPIBMgEiATayAAGyISQQFKDQALIAkgDzYCSCAUIBBB3ABsaigCEEECdCIBQZAyaigCACEAIAFB0DFqKAIAIQECQAJAIA1FBEAgAEEFbCIAIAFBC2xqIQQMAQtBACABQQVsIAMgEEEEdGoiBSgCgAEbQQAgAUEGbCAFKAJ8G2pBACAAQQVsIgAgBSgChAEbaiEEIAUoAogBDQELIAAgBGohBAsgCSAENgI0IAogBGsiDkEASARAIAkgCSgCSEEBazYCSAsgBiEKQfwvKAIAIQ9B5C8oAgAhEiADQbiNAmohEwNAIAkgCSgCSCIAQQFqNgJIQYCAASEGIAMgAEGAAWoiAEECdGpBoLwCajQCACIkIAM0AryxAn5CgICAgAh8QiCIp0GUigpMBEAgEyAAQQN0akHoJmohBSADKAK4jQIhCEEAIQBBACEGA0ACfyAIIABBAnQiBGooAgAiASABQR91IgFzIAFrrSAkfkKAgICACHxCIIinIgFBj84ATARAIAMgAUECdGpBoMACaigCAAwBCyAFKwMAIAMgBGpBvJ8CaigCALeiRGhfHAAAAAA+oiJIIEifop8iSJlEAAAAAAAA4EFjBEAgSKoMAQtBgICAgHgLIQEgBCAKaiABNgIAIAYgASABIAZIGyEGIABBAWoiAEHABEcNAAsLQcAEIQAgBkGAwABKDQACQAJAAkACQANAIABFBEAgCUEANgIIIAAhAQwCCwJAIABBAnQgCmoiBEEEaygCAARAIAAhAQwBCyAKIABBAmsiAUECdGooAgAEQCAAIQEMAQsgBEEMaygCAA0AIAogAEEEayIAQQJ0aigCAEUNAQsLQQAhBCAJQQA2AgggAUEDTA0AAkACQANAIAFBAnQgCmoiAEEEaygCAEEBSg0BIABBCGsoAgBBAUoNASAAQQxrKAIAQQFKDQEgCiABQQRrIgBBAnRqKAIAQQJODQEgCSAEQQFqIgQ2AgggAUEHSyEFIAAhASAFDQALIAkgAUEBdTYCBAwBCyAJIAFBAXU2AgQgBEUNAgtBACEFQQAhCCABIQZBACEAA0AgBUECQQEgCiAGQQJ0IhRqIgcoAgAiCxsgC0EARyAKIBRBBHJqKAIAIhQbIAcoAggiFkEAR2ogBygCDCIHQQBHaiIbaiAPIBRBAXQgC2ogFkECdGogB0EDdGoiB2otAABqIQUgCCAHIBJqLQAAaiAbaiEIIAZBBGohBiAAQQFqIgAgBEcNAAtBACEGIAUgCEwNAgwDCyAJIAFBAXU2AgQLQQAhBQtBASEGIAUhCAsgCSAGNgIwAkAgAUUEQCAJQgA3AiAgCSgCPCEFDAELIAMoAkhB3ABsQYA1aiEGQQAhAANAIAAiBEEBaiEAIAYgBEECdGooAgAgAUgNAAtBACEFAkAgBEEDdCIHQYAwaigCACIARQ0AA0AgASAAQQJ0IAZqKAIETgRAIAAhBQwCCyAAQQFrIgANAAsLIAkgBTYCICAJIAVBAnQgBmpBBGoiBigCACIFNgI8IAdBhDBqKAIAIQACQCAEQQVJDQADQCAAQQJ0IAZqKAIEIAFMDQEgAEEBayIADQALQQAhAAsgCSABNgJEIAkgADYCJCAJIABBAnQgBmooAgQ2AkALQQAhACAJQQA2AhwgCUIANwIUQQAhByAFBEAgCSAKQQAgBRAGIgc2AhQLIAUgCSgCQCILSQRAIAkgCiAFIAsQBiIANgIYC0EAIQZBACEEIAEgC0sEQCAJIAogCyABEAYiBDYCHAsgBwRAIApBACAFIAcQAyEGCyAABEAgCiAFIAsgABADIAZqIQYLIAQEfyAKIAsgCSgCRCAEEAMgBmoFIAYLIAhqIgAgDkoNAAsgCSAJKAI0IABqIgA2AgAgESAANgKcAQsgAyADKAKwjQIgAygCkAQgAygCAG0gESgCnAFrajYCsI0CIBEgESgC5AFB0gFqNgKoASANQQFqIg0gAygCECIBSA0ACwsgF0EBaiEXIBANAAsLAkAgAygCACIEQQJHDQAgAy0AkARBAXFFDQAgAyADKAKwjQJBAWo2ArCNAgsgAyADKAKwjQIiACADKAK0jQIiASAAIAFIGyIFIAVBCG8iBWs2ArCNAgJAAkAgBSAAIAFrIgBBACAAQQBKG2oiAARAIAMoApwBIABqIgFB/x9JDQECQCADKAIQIgZBAEwNACAEQQBMDQBBACEFA0AgAyAFQbgBbGpBnAFqIQhBACEBA0ACQCAARQRAQQAhAAwBCyAIIAFB3ABsaiIKQf8fIAooAgAiCmsiByAAIAAgB0obIgcgCmo2AgAgACAHayEAIAFBAWoiASAERw0BCwsgBUEBaiIFIAZHDQALCyADIAA2AngLDAELIAMgATYCnAELIBVBoAVqJABBACEEIwBBoANrIggkAAJAIAMoAgAiBUEATA0AIAMoAhAiAEEATA0AA0BBACEGIABBAEoEQANAIAMgBEGAJGxqIAZBgBJsaiIAQbDFAWohASAAQbARaiEFQQAhAANAAkAgASAAQQJ0IgpqKAIAQQBODQAgBSAKaiIKKAIAIgdBAEwNACAKQQAgB2s2AgALAkAgASAAQQFyQQJ0IgpqKAIAQQBODQAgBSAKaiIKKAIAIgdBAEwNACAKQQAgB2s2AgALIABBAmoiAEHABEcNAAsgBkEBaiIGIAMoAhAiAEgNAAsgAygCACEFCyAEQQFqIgQgBUgNAAsLIAhBCGogA0H0AGoiBkGYAxAEIANB4ABqIgBB/w9BCxACIAAgAygCCEECEAIgACADKAIMQQIQAiAAIAMoAkxFQQEQAiAAIAMoAkRBBBACIAAgAygCSEEDb0ECEAIgACADKAIgQQEQAiAAIAMoAlBBARACIAAgAygCFEECEAIgACADKAJUQQIQAiAAIAMoAlhBARACIAAgAygCXEEBEAIgACADKAIcQQIQAgJAIAMoAghBA0YEQCAAQQBBCRACIAgoAgghASADKAIAQQJGBEAgACABQQMQAgwCCyAAIAFBBRACDAELIABBAEEIEAIgCCgCCCEBIAMoAgBBAkYEQCAAIAFBAhACDAELIAAgAUEBEAILAkAgAygCCEEDRw0AIAMoAgBBAEwNAEEAIQQDQCAAIAhBCGogBEEEdGoiASgCCEEBEAIgACABKAIMQQEQAiAAIAEoAhBBARACIAAgASgCFEEBEAIgBEEBaiIEIAMoAgBIDQALC0EAIQECQCADKAIQIgRBAEwNACADKAIAIgVBAEwNAANAIAVBAEoEQCABQbgBbCAIakEwaiEKQQAhBANAIAAgCiAEQdwAbGoiBSgCAEEMEAIgACAFKAIEQQkQAiAAIAUoAgxBCBACIAAgBSgCEEEEQQkgAygCCEEDRhsQAiAAQQBBARACIAAgBSgCFEEFEAIgACAFKAIYQQUQAiAAIAUoAhxBBRACIAAgBSgCIEEEEAIgACAFKAIkQQMQAiADKAIIQQNGBEAgACAFKAIoQQEQAgsgACAFKAIsQQEQAiAAIAUoAjBBARACIARBAWoiBCADKAIAIgVIDQALIAMoAhAhBAsgAUEBaiIBIARIDQALIAhBCGogBkGYAxAEIARBAEwNACAFQQBMDQAgA0G4CWohCUEAIQEDQCAFQQBKBEAgAUG4AWwgCGpBMGohGEEAIQQDQCADIARBgCRsaiABQYASbGohECAYIARB3ABsaiIKKAIQQQJ0IgVBkDJqKAIAIQYgBUHQMWooAgAhBQJAAkACQAJAAkACQAJAIAEEQCAEQQR0IAhqKAIQDQELIAAgCSABQbABbGogBEHYAGxqIgcoAgAgBRACIAAgBygCBCAFEAIgACAHKAIIIAUQAiAAIAcoAgwgBRACIAAgBygCECAFEAIgACAHKAIUIAUQAiABRQ0BCyAEQQR0IAhqKAIUDQELIAAgCSABQbABbGogBEHYAGxqIgcoAhggBRACIAAgBygCHCAFEAIgACAHKAIgIAUQAiAAIAcoAiQgBRACIAAgBygCKCAFEAIgAUUNAQsgBEEEdCAIaigCGA0BCyAAIAkgAUGwAWxqIARB2ABsaiIFKAIsIAYQAiAAIAUoAjAgBhACIAAgBSgCNCAGEAIgACAFKAI4IAYQAiAAIAUoAjwgBhACIAFFDQELIARBBHQgCGooAhwNAQsgACAJIAFBsAFsaiAEQdgAbGoiBSgCQCAGEAIgACAFKAJEIAYQAiAAIAUoAkggBhACIAAgBSgCTCAGEAIgACAFKAJQIAYQAgsgEEGwEWohECADKAJIIQUgACgCCEEDdCAAKAIQa0EgaiETIAooAgRBAXQiBkEASgRAIAVB3ABsQYA1aiIFIAooAiAiB0ECdGooAgQhGSAHIAooAiRqQQJ0IAVqKAIIIRpBACEFA0ACQCAKIAUgGU4gBSAaTmpBAnRqKAIUIg5FDQAgECAFQQJ0IgdqKAIAIg0gDUEfdSIMcyAMayEMIBAgB0EEcmooAgAiESARQR91IgdzIAdrIQsgDUEATCEPIBFBAEwhFyAOQRhsQdApaiIHKAIEIRUgDkEQTgRAIAAgBygCEEEPIAsgC0EOSyINGyIRIBVBDyAMIAxBDksiDhsiEmxqIhVBAXRqLwEAIAcoAhQgFWotAAAQAiAAIAtBD2sgDEEPa0EAIA4bIgxBAXQgD3IgDCASGyIMIAcoAggiB3RyIAwgDRsiDEEBdCAXciAMIBEbIBFBAEcgEkEAR2ogB0EAIA4baiAHQQAgDRtqEAIMAQsgACAHKAIQIAwgFWwgC2oiDEEBdGovAQAiC0EBdCAPciALIA0bIgtBAXQgF3IgCyARGyAHKAIUIAxqLQAAIBFBAEcgDUEAR2pqEAILIAVBAmoiBSAGSA0ACwsgCigCCEECdCAGaiIRIAZKBEAgCigCMEEYbEHQKWoiBSgClAYhCyAFKAKQBiEOA0AgACAOIBAgBkECdCIHQQRyaigCACIFIAVBH3UiDXMgDWtBAXQgByAQaiIMKAIAIgcgB0EfdSINcyANa2ogDCgCCCINIA1BH3UiD3MgD2tBAnRqIAwoAgwiDCAMQR91Ig9zIA9rQQN0aiIPQQF0ai8BACALIA9qLQAAEAIgACAHQR92Ig9BAXQgBUEATHIgDyAFGyIPQQF0IA1BAExyIA8gDRsiD0EBdCAMQQBMciAPIAwbIA1BAEdBAkEBIAcbIAdBAEcgBRtqIAxBAEdqEAIgBkEEaiIGIBFIDQALCwJAIAooAgAgCigCNGsgEyAAKAIIQQN0IAAoAhBrQSBqa2oiBkUNACAGIAZBIG0iBUEFdGshCiAGQR9qQT9PBEADQCAAQX9BIBACIAVBAWsiBQ0ACwsgCkUNACAAQX8gCnRBf3MgChACCyAEQQFqIgQgAygCACIFSA0ACyADKAIQIQQLIAFBAWoiASAESA0ACwsgCEGgA2okACACIAMoAmg2AgAgA0EANgJoIAMoAmALCwAgACgCEEHABGwLigEBAX9BAyECAn8CQEHQMigCACAARg0AQdQyKAIAIABGDQBB2DIoAgAgAEYNAEECIQJB3DIoAgAgAEYNAEHgMigCACAARg0AQeQyKAIAIABGDQBBACECQegyKAIAIABGDQBB7DIoAgAgAEYNAEF/QfAyKAIAIABHDQEaC0F/IAIgASACEA1BAEgbCwvsEgMEfAl/An4jAEEgayIJJAAgCSABNgIEIAkgADYCACAJQoCAgIAQNwIUIAlCgAE3AgwgCSADNgIMIAkgAjYCCAJ/IAkoAgwhAUHYMigCACEMQdQyKAIAIQ1BAyEDAkACQEHQMigCACIOIAkoAgQiAEYNACAAIA1GDQAgACAMRg0AQQIhA0HcMigCACAARg0AQeAyKAIAIABGDQBB5DIoAgAgAEYNAEEAIQNB6DIoAgAgAEYNAEHsMigCACAARg0AQfAyKAIAIABHDQELQQAgASADEA1BAEgNARpBACEDAkBBiO0FEAgiAkUNACACQQRrLQAAQQNxRQ0AIAJBiO0FEAcLIAJFDQAjAEEQayIKJAAgAkIANwKAjQUgAkGIzQVqQYAgEAdBHyEBA0AgASIIQQF0QQFyIQtBwAAhAUE/IQADQCAKQREgAWsgC2y3RGZtQ1T7Iak/ohASRAAAAABlzc1BoiIEOQMIIAREAAAAAAAA4D9EAAAAAAAA4L8gBEQAAAAAAAAAAGYboCIEvSIRQjSIp0H/D3EiAUH/B2shDwJAIAFBswhPBEAgCiAEOQMIDAELIAFB/gdNBEAgCiARQoCAgICAgICAgH+DNwMIDAELIBEgD60iEoZC/////////weDUARAIAogBDkDCAwBCyAKQoCAgICAgIB4IBKHIBGDNwMICyACIAhBCHRqIAAiAUECdGpBiI0FagJ/IAorAwhEfXoE6AsuAUCiIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CzYCACABQQFrIQAgAQ0ACyAIQQFrIQEgCA0ACyAKQRBqJAAgAkHg+ARqIQtBESEAA0AgACIBQQF0QQFytyEFQSQhAANAIAsgAUGQAWxqIABBAWsiAEECdGoCfyMAQRBrIggkAAJAIAC3RAAAAAAAAOA/oEStROdKGFe2P6IiBL1CIIinQf////8HcSIKQfvDpP8DTQRAIApBgIDA8gNJDQEgBEQAAAAAAAAAAEEAEAkhBAwBCyAKQYCAwP8HTwRAIAQgBKEhBAwBCwJAAkACQAJAIAQgCBATQQNxDgMAAQIDCyAIKwMAIAgrAwhBARAJIQQMAwsgCCsDACAIKwMIEAohBAwCCyAIKwMAIAgrAwhBARAJmiEEDAELIAgrAwAgCCsDCBAKmiEECyAIQRBqJAAgBCAAQQF0QRNqt0SBROdKGFemP6IgBaIQEqJEAADA////30GiIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CzYCACAADQALIAFBAWshACABDQALQf8AIQEgAkG4jQJqIQpBgAEhCANAIAogASIAQQN0akHoJmoCfEGAASAIa7dEAAAAAAAA0D+iIgS9QjSIp0H/D3EiAUHJB2siCEE/TwRAIAREAAAAAAAA8D+gIAhBAEgNARogBL0hEQJAIAFBiQhJDQBEAAAAAAAAAAAgEUKAgICAgICAeFENAhogBEQAAAAAAADwP6AgAUH/D08NAhogEUIAWQRAIwBBEGsiAUQAAAAAAAAAcDkDCCABKwMIRAAAAAAAAABwogwDCyARQoCAgICAgLPIQFQNACMAQRBrIgFEAAAAAAAAABA5AwggASsDCEQAAAAAAAAAEKIMAgsgAUEAIBFCAYZCgICAgICAgI2Bf1gbIQELIARBoOIAKwMAIgUgBKAiBiAFoaEiBCAEoiIFIAWiIARByOIAKwMAokHA4gArAwCgoiAFIARBuOIAKwMAokGw4gArAwCgoiAEQajiACsDAKIgBr0iEqdBBHRB8A9xIghB0OIAaisDAKCgoCEEIAhB2OIAaikDACASQi2GfCERIAFFBEACfCASQoCAgIAIg1AEQCARQoCAgICAgIAIfb8iBSAEoiAFoCIEIASgDAELIBFCgICAgICAgPA/fL8iBSAEoiIGIAWgIgREAAAAAAAA8D9jBHwjAEEQayIBIRAgAUKAgICAgICACDcDCCAQIAErAwhEAAAAAAAAEACiOQMIRAAAAAAAAAAAIAREAAAAAAAA8D+gIgcgBiAFIAShoCAERAAAAAAAAPA/IAehoKCgRAAAAAAAAPC/oCIEIAREAAAAAAAAAABhGwUgBAtEAAAAAAAAEACiCwwBCyARvyIFIASiIAWgCyIEOQMAIAQgBKAiBEQAAMD////fQWQhASAKIABBAnRqQeguakH/////BwJ/IAREAAAAAAAA4D+gIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CyABGzYCACAAQQFrIQEgACIIDQALQZDOACEAIAJBoMACaiEBA0AgASAAQQFrIghBAnRqAn8gCLciBJ8gBKKfRA+cM6K0N7i/oEQAAAAAAADgP6AiBJlEAAAAAAAA4EFjBEAgBKoMAQtBgICAgHgLNgIAIAEgAEECayIAQQJ0agJ/IAC3IgSfIASin0QPnDOitDe4v6BEAAAAAAAA4D+gIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CzYCACAADQALIAIgCSgCADYCACACIAkoAgQiADYCBCACIAkoAgg2AhQgAiAJKAIMIgg2AhggAiAJKAIQNgIcIAIgCSgCFDYCWCACIAkoAhg2AlwgAkIANwOwjQIgAkEANgJUIAJCADcCTCACQQE2AgwgAkEINgIoAn8CQCAAIA5GDQBBASEDIAAgDUYNAEECIQMgACAMRg0AQQIhAUEDQdwyKAIAIABGDQEaQQRB4DIoAgAgAEYNARpBBUHkMigCACAARg0BGkEAIQFBBkHoMigCACAARg0BGkEHQewyKAIAIABGDQEaQX8hA0EIQfAyKAIAIABGDQEaC0EDIQEgAwshAyACIAE2AgggAiADNgJIIAIgAUECdEHAMWooAgAiAzYCECACIAggARANNgJEIAJBQGsCfyAIt0QAAAAAAECPQKJEAAAAAAAAwD+iIAO3RAAAAAAAAIJAoiAAt6OiIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CyIANgIAIAIgBCAAt6EiBDkDMCACIASaOQM4IAREAAAAAAAAAABhBEAgAkEANgIgC0GAIBAIIQAgAkEgNgJwIAJCADcCaCACQYAgNgJkIAIgADYCYCACQfQAakGYAxAHIAJBqAFBoAIgAigCAEEBRiIAG0HoAEGoASAAGyACKAIQQQJGGzYCjAQgAiEDCyADCyEAIAlBIGokACAACwQAQQQLBABBAgsWAQF/IAAoAmAiAQRAIAEQCwsgABALCwvXiQEiAEGACAv1AQEAAQABAAAAAQMCAwAAAAABAAIAAQADAAEAAQADAAIAAAABAwYDAwUFBQYAAAAAAAMAAgABAAEAAQABAAMAAgAAAAICBgMCBQUFBgAAAAAAAQACAAYABQADAAEABAAEAAcABQAHAAEABgABAAEAAAABAwYHAwMGBwYGBwgHBgcIBwADAAUAAQAGAAIAAwACAAUABAAEAAEAAwADAAIAAAADAwUHAwIEBQQEBQYGBQYHAQACAAoAEwAQAAoAAwADAAcACgAFAAMACwAEAA0AEQAIAAQADAALABIADwALAAIABwAGAAkADgADAAEABgAEAAUAAwACAEGACgskAQMGCAgJAwQGBwcIBgUHCAgJBwcICQkJBwcICQkKCAgJCgoKAEGwCgtFAwAEAAYAEgAMAAUABQABAAIAEAAJAAMABwADAAUADgAHAAMAEwARAA8ADQAKAAQADQAFAAgACwAFAAEADAAEAAQAAQABAEGACwskAgMGCAgJAwIECAgIBgQGCAgJCAgICQkKCAcICQoKCQgJCQsLAEGwCwtFBwAFAAkADgAPAAcABgAEAAUABQAGAAcABwAGAAgACAAIAAUADwAGAAkACgAFAAEACwAHAAkABgAEAAEADgAEAAYAAgAGAEGADAskAwMFBggJAwMEBQYIBAQFBgcIBgUGBwcIBwYHBwgJCAcICAkJAEGwDAugHQEAAgAKABcAIwAeAAwAEQADAAMACAAMABIAFQAMAAcACwAJAA8AFQAgACgAEwAGAA4ADQAWACIALgAXABIABwAUABMAIQAvABsAFgAJAAMAHwAWACkAGgAVABQABQADAA4ADQAKAAsAEAAGAAUAAQAJAAgABwAIAAQABAACAAAAAQMGCAkJCQoDBAYHCAkICAYGBwgJCgkJBwcICQoKCQoICAkKCgoKCgkJCgoLCwoLCAgJCgoKCwsJCAkKCgsLCwMABAAKABgAIgAhABUADwAFAAMABAAKACAAEQALAAoACwAHAA0AEgAeAB8AFAAFABkACwATADsAGwASAAwABQAjACEAHwA6AB4AEAAHAAUAHAAaACAAEwARAA8ACAAOAA4ADAAJAA0ADgAJAAQAAQALAAQABgAGAAYAAwACAAAAAgMFBwgJCAkDAwQGCAgHCAUFBgcICQgIBwYHCQgKCAkICAgJCQoJCggICQoKCwoLCAcHCAkKCgoIBwgJCgoKCgkABgAQACEAKQAnACYAGgAHAAUABgAJABcAEAAaAAsAEQAHAAsADgAVAB4ACgAHABEACgAPAAwAEgAcAA4ABQAgAA0AFgATABIAEAAJAAUAKAARAB8AHQARAA0ABAACABsADAALAA8ACgAHAAQAAQAbAAwACAAMAAYAAwABAAAABAMFBwgJCQkDAwQFBwcICAUEBQYHCAcIBgUGBgcICAgHBgcHCAgICQgHCAgICQgJCAcHCAgJCQoJCAgJCQkJCgEABQAOABUAIgAzAC4ARwAqADQARAA0AEMALAArABMAAwAEAAwAEwAfABoALAAhAB8AGAAgABgAHwAjABYADgAPAA0AFwAkADsAMQBNAEEAHQAoAB4AKAAbACEAKgAQABYAFAAlAD0AOABPAEkAQAArAEwAOAAlABoAHwAZAA4AIwAQADwAOQBhAEsAcgBbADYASQA3ACkAMAA1ABcAGAA6ABsAMgBgAEwARgBdAFQATQA6AE8AHQBKADEAKQARAC8ALQBOAEoAcwBeAFoATwBFAFMARwAyADsAJgAkAA8ASAAiADgAXwBcAFUAWwBaAFYASQBNAEEAMwAsACsAKgArABQAHgAsADcATgBIAFcATgA9AC4ANgAlAB4AFAAQADUAGQApACUALAA7ADYAUQBCAEwAOQA2ACUAEgAnAAsAIwAhAB8AOQAqAFIASABQAC8AOgA3ABUAFgAaACYAFgA1ABkAFwAmAEYAPAAzACQANwAaACIAFwAbAA4ACQAHACIAIAAcACcAMQBLAB4ANAAwACgANAAcABIAEQAJAAUALQAVACIAQAA4ADIAMQAtAB8AEwAMAA8ACgAHAAYAAwAwABcAFAAnACQAIwA1ABUAEAAXAA0ACgAGAAEABAACABAADwARABsAGQAUAB0ACwARAAwAEAAIAAEAAQAAAAEAAQQGBwgJCQoJCgsLDAwNDQMEBgcICAkJCQkKCgsMDAwGBgcICQkKCgkKCgsLDA0NBwcICQkKCgoKCwsLCwwNDQgHCQkKCgsLCgsLDAwNDQ4JCAkKCgoLCwsLDAsNDQ4OCQkKCgsLCwsLDAwMDQ0ODgoJCgsLCwwMDAwNDQ0OEBAJCAkKCgsLDAwMDA0NDg8PCgkKCgsLCw0MDQ0ODg4QDwoKCgsLDAwNDA0ODQ4PEBELCgoLDAwMDA0NDQ4PDw8QCwsLDAwNDA0ODg8PDxAQEAwLDA0NDQ4ODg4ODxAPEBANDAwNDQ0PDg4RDw8PERAQDAwNDg4ODw4PDxAQExITEAcADAASADUALwBMAHwAbABZAHsAbAB3AGsAUQB6AD8ADQAFABAAGwAuACQAPQAzACoARgA0AFMAQQApADsAJAATABEADwAYACkAIgA7ADAAKABAADIATgA+AFAAOAAhAB0AHAAZACsAJwA/ADcAXQBMADsAXQBIADYASwAyAB0ANAAWACoAKABDADkAXwBPAEgAOQBZAEUAMQBCAC4AGwBNACUAIwBCADoANABbAEoAPgAwAE8APwBaAD4AKAAmAH0AIAA8ADgAMgBcAE4AQQA3AFcARwAzAEkAMwBGAB4AbQA1ADEAXgBYAEsAQgB6AFsASQA4ACoAQAAsABUAGQBaACsAKQBNAEkAPwA4AFwATQBCAC8AQwAwADUAJAAUAEcAIgBDADwAOgAxAFgATABDAGoARwA2ACYAJwAXAA8AbQA1ADMALwBaAFIAOgA5ADAASAA5ACkAFwAbAD4ACQBWACoAKAAlAEYAQAA0ACsARgA3ACoAGQAdABIACwALAHYARAAeADcAMgAuAEoAQQAxACcAGAAQABYADQAOAAcAWwAsACcAJgAiAD8ANAAtAB8ANAAcABMADgAIAAkAAwB7ADwAOgA1AC8AKwAgABYAJQAYABEADAAPAAoAAgABAEcAJQAiAB4AHAAUABEAGgAVABAACgAGAAgABgACAAAAAwQFBwcICQkJCgoLCwsMDQQDBQYHBwgICAkJCgoKCwsFBQUGBwcICAgJCQoKCwsLBgYGBwcICAkJCQoKCgsLCwcGBwcICAkJCQkKCgoLCwsIBwcICAgJCQkJCgoLCwsMCQcICAgJCQkJCgoKCwsMDAkICAkJCQkKCgoKCgsLCwwJCAgJCQkJCgoKCgsLDAwMCQgJCQkJCgoKCwsLCwwMDAoJCQkKCgoKCgsLCwsMDQwKCQkJCgoKCgsLCwsMDAwNCwoJCgoKCwsLCwsLDAwNDQsKCgoKCwsLCwwMDAwMDQ0MCwsLCwsLCwwMDAwNDQwNDAsLCwsLCwwMDAwMDQ0NDQEABQAOACwASgA/AG4AXQCsAJUAigDyAOEAwwB4AREAAwAEAAwAFAAjAD4ANQAvAFMASwBEAHcAyQBrAM8ACQAPAA0AFwAmAEMAOgBnAFoAoQBIAH8AdQBuANEAzgAQAC0AFQAnAEUAQAByAGMAVwCeAIwA/ADUAMcAgwFtARoASwAkAEQAQQBzAGUAswCkAJsACAH2AOIAiwF+AWoBCQBCAB4AOwA4AGYAuQCtAAkBjgD9AOgAkAGEAXoBvQEQAG8ANgA0AGQAuACyAKAAhQABAfQA5ADZAIEBbgHLAgoAYgAwAFsAWAClAJ0AlAAFAfgAlwGNAXQBfAF5A3QDCABVAFQAUQCfAJwAjwAEAfkAqwGRAYgBfwHXAskCxAIHAJoATABJAI0AgwAAAfUAqgGWAYoBgAHfAmcBxgJgAQsAiwCBAEMAfQD3AOkA5QDbAIkB5wLhAtACdQNyA7cBBADzAHgAdgBzAOMA3wCMAeoC5gLgAtECyALCAt8AtAEGAMoA4ADeANoA2ACFAYIBfQFsAXgDuwHDArgBtQHABgQA6wLTANIA0AByAXsB3gLTAsoCxwZzA20DbAODDWEDAgB5AXEBZgC7ANYC0gJmAccCxQJiA8YGZwOCDWYDsgEAAAwACgAHAAsACgARAAsACQANAAwACgAHAAUAAwABAAMAAQQGCAkJCgoLCwsMDAwNCQMEBgcICQkJCgoKCwwLDAgGBgcICQkKCgsKCwsLDAwJCAcICQkKCgoLCwwMDA0NCgkICQkKCgsLCwwMDA0NDQkJCAkJCgsLDAsMDA0NDQ4KCgkJCgsLCwsMDAwMDQ0OCgoJCgoLCwsMDA0NDQ0PDwoKCgoLCwsMDA0NDQ0ODg4KCwoKCwsMDA0NDQ0ODQ4NCwsLCgsMDAwMDQ4ODg8PDgoMCwsLDAwNDg4ODg4ODQ4LDAwMDAwNDQ0NDw4ODg4QCw4MDAwNDQ4ODhAPDw8RDwsNDQsMDg4NDg4PEA8RDw4LCQgICQkKCgoLCwsLCwsLCA8ADQAuAFAAkgAGAfgAsgGqAZ0CjQKJAm0CBQIIBFgADgAMABUAJgBHAIIAegDYANEAxgBHAVkBPwEpARcBKgAvABYAKQBKAEQAgAB4AN0AzwDCALYAVAE7AScBHQISAFEAJwBLAEYAhgB9AHQA3ADMAL4AsgBFATcBJQEPARAAkwBIAEUAhwB/AHYAcADSAMgAvABgAUMBMgEdARwCDgAHAUIAgQB+AHcAcgDWAMoAwAC0AFUBPQEtARkBBgEMAPkAewB5AHUAcQDXAM4AwwC5AFsBSgE0ASMBEAEIAgoAswFzAG8AbQDTAMsAxAC7AGEBTAE5ASoBGwETAn0BEQCrAdQA0ADNAMkAwQC6ALEAqQBAAS8BHgEMAQICeQEQAE8BxwDFAL8AvQC1AK4ATQFBATEBIQETAQkCewFzAQsAnAK4ALcAswCvAFgBSwE6ATABIgEVARICfwF1AW4BCgCMAloBqwCoAKQAPgE1ASsBHwEUAQcBAQJ3AXABagEGAIgCQgE8ATgBMwEuASQBHAENAQUBAAJ4AXIBbAFnAQQAbAIsASgBJgEgARoBEQEKAQMCfAF2AXEBbQFpAWUBAgAJBBgBFgESAQsBCAEDAX4BegF0AW8BawFoAWYBZAEAACsAFAATABEADwANAAsACQAHAAYABAAHAAUAAwABAAMABAQGBwgJCQoKCwsLCwsMCQQEBQYHCAgJCQkKCgoKCggGBQYHBwgICQkJCQoKCgsHBwYHBwgICAkJCQkKCgoKBwgHBwgICAgJCQkKCgoKCwcJBwgICAgJCQkJCgoKCgoHCQgICAgJCQkJCgoKCgoLBwoICAgJCQkJCgoKCgoLCwgKCQkJCQkJCQkKCgoKCwsICgkJCQkJCQoKCgoKCwsLCAsJCQkJCgoKCgoKCwsLCwgLCgkJCQoKCgoKCgsLCwsICwoKCgoKCgoKCgsLCwsLCAsKCgoKCgoKCwsLCwsLCwgMCgoKCgoKCwsLCwsLCwsICAcHBwcHBwcHBwcICAgIBAEABQAEAAUABgAFAAQABAAHAAMABgAAAAcAAgADAAEAAQQEBQQGBQYEBQUGBQYGBg8ADgANAAwACwAKAAkACAAHAAYABQAEAAMAAgABAAAABAQEBAQEBAQEBAQEBAQEBABB6CkLBQIAAAACAEH5KQsMBAAACAQAAAMAAAADAEGQKgsNEAQAACIEAAADAAAAAwBBqCoLBjAEAABCBABByCoLBQQAAAAEAEHYKgsNUAQAAHAEAAAEAAAABABB8CoLDYAEAACgBAAABgAAAAYAQYgrCw2wBAAAAAUAAAYAAAAGAEGgKwsNMAUAAIAFAAAGAAAABgBBuCsLDbAFAAAABgAACAAAAAgAQdArCw0wBgAAsAYAAAgAAAAIAEHoKwsN8AYAAHAHAAAIAAAACABBgCwLDbAHAAAwCAAAEAAAABAAQZgsCwZwCAAAcAoAQbgsCwUQAAAAEABByCwLjQNwCwAAcA0AABAAAAAQAAAAAQAAAAEAAABwDgAAcBAAABAAAAAQAAAAAgAAAAMAAABwDgAAcBAAABAAAAAQAAAAAwAAAAcAAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwDgAAcBAAABAAAAAQAAAABgAAAD8AAABwDgAAcBAAABAAAAAQAAAACAAAAP8AAABwDgAAcBAAABAAAAAQAAAACgAAAP8DAABwDgAAcBAAABAAAAAQAAAADQAAAP8fAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwEQAAcBMAABAAAAAQAAAABQAAAB8AAABwEQAAcBMAABAAAAAQAAAABgAAAD8AAABwEQAAcBMAABAAAAAQAAAABwAAAH8AAABwEQAAcBMAABAAAAAQAAAACAAAAP8AAABwEQAAcBMAABAAAAAQAAAACQAAAP8BAABwEQAAcBMAABAAAAAQAAAACwAAAP8HAABwEQAAcBMAABAAAAAQAAAADQAAAP8fAABwEQAAcBMAAAEAAAAQAEHgLwsNcBQAAJAUAAABAAAAEABB+C8LBqAUAADAFABBrDALiQEBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAMAAAAEAAAABAAAAAUAAAAEAAAABQAAAAQAAAAGAAAABQAAAAYAAAAFAAAABgAAAAUAAAAHAAAABgAAAAcAAAAGAAAABwBBwDELDQEAAAD/////AQAAAAIAQeAxC5IBAwAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAMAAAADAAAAAwAAAAQAAAAEAAAAAAAAAAEAAAACAAAAAwAAAAAAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAACAAAAAwAAAESsAACAuwAAAH0AACJWAADAXQAAgD4AABErAADgLgAAQB8AQYAzC7oI/////////////////////wgAAAD/////CAAAACAAAAAQAAAA/////xAAAAAoAAAAGAAAAP////8YAAAAMAAAACAAAAD/////IAAAADgAAAAoAAAA/////ygAAABAAAAAMAAAAP////8wAAAAUAAAADgAAAD/////OAAAAGAAAABAAAAA/////0AAAABwAAAA//////////9QAAAAgAAAAP//////////YAAAAKAAAAD//////////3AAAADAAAAA//////////+AAAAA4AAAAP//////////kAAAAAABAAD//////////6AAAABAAQAA/////////////////////wAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAeAAAAJAAAACwAAAA0AAAAPgAAAEoAAABaAAAAbgAAAIYAAACiAAAAxAAAAO4AAAAgAQAAVgEAAKIBAABAAgAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAB4AAAAkAAAAKgAAADIAAAA8AAAASAAAAFgAAABqAAAAgAAAAJwAAAC+AAAA5gAAABQBAABKAQAAgAEAAEACAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABSAAAAZgAAAH4AAACcAAAAwgAAAPAAAAAoAQAAbAEAAMABAAAmAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAcgAAAIgAAACiAAAAwgAAAOgAAAAWAQAASgEAAIoBAADQAQAAHAIAAEACAAAAAAAABgAAAAwAAAASAAAAGAAAAB4AAAAkAAAALAAAAC0AAABCAAAAUAAAAGAAAAB0AAAAjAAAAKgAAADIAAAA7gAAAPgAAABQAQAAjAEAANABAAAKAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAdAAAAIwAAACoAAAAyAAAAO4AAAAcAQAAUAEAAIwBAADQAQAACgIAAEACAAAAAAAADAAAABgAAAAkAAAAMAAAADwAAABIAAAAWAAAAGwAAACEAAAAoAAAAMAAAADoAAAAGAEAAFABAACQAQAA3AEAADYCAAA4AgAAOgIAADwCAAA+AgAAQAIAQdw7C8oPnff//533//+d9///nff//533//+d9///Ou///zrv//86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";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["c"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["o"];addOnInit(Module["asm"]["d"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);readyPromiseReject(e)}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort("invalid type for getValue: "+type)}return null}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort("invalid type for setValue: "+type)}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ASSERTIONS=false;var decodeBase64=typeof atob=="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output};function intArrayFromBase64(s){try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}var asmLibraryArg={"b":_emscripten_memcpy_big,"a":_emscripten_resize_heap};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["d"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["e"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["f"]).apply(null,arguments)};var _shine_check_config=Module["_shine_check_config"]=function(){return(_shine_check_config=Module["_shine_check_config"]=Module["asm"]["g"]).apply(null,arguments)};var _shine_samples_per_pass=Module["_shine_samples_per_pass"]=function(){return(_shine_samples_per_pass=Module["_shine_samples_per_pass"]=Module["asm"]["h"]).apply(null,arguments)};var _shine_encode_buffer=Module["_shine_encode_buffer"]=function(){return(_shine_encode_buffer=Module["_shine_encode_buffer"]=Module["asm"]["i"]).apply(null,arguments)};var _shine_flush=Module["_shine_flush"]=function(){return(_shine_flush=Module["_shine_flush"]=Module["asm"]["j"]).apply(null,arguments)};var _shine_close=Module["_shine_close"]=function(){return(_shine_close=Module["_shine_close"]=Module["asm"]["k"]).apply(null,arguments)};var _shine_js_int16_len=Module["_shine_js_int16_len"]=function(){return(_shine_js_int16_len=Module["_shine_js_int16_len"]=Module["asm"]["l"]).apply(null,arguments)};var _shine_js_ptr_len=Module["_shine_js_ptr_len"]=function(){return(_shine_js_ptr_len=Module["_shine_js_ptr_len"]=Module["asm"]["m"]).apply(null,arguments)};var _shine_js_init=Module["_shine_js_init"]=function(){return(_shine_js_init=Module["_shine_js_init"]=Module["asm"]["n"]).apply(null,arguments)};Module["setValue"]=setValue;Module["getValue"]=getValue;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();
-+
-+
-+ return createModule.ready
-+}
-+);
-+})();
-+export default createModule;
-\ No newline at end of file
-diff --git a/js/dist/libshine_node.js b/js/dist/libshine_node.js
-new file mode 100644
-index 0000000..02d7990
---- /dev/null
-+++ b/js/dist/libshine_node.js
-@@ -0,0 +1 @@
-+var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{var ret=tryParseAsDataURI(filename);if(ret){return binary?ret:ret.toString()}filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror)=>{var ret=tryParseAsDataURI(filename);if(ret){onload(ret)}filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=(status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,AGFzbQEAAAABVg9gAX8Bf2ADf39/AGACf38Bf2AEf39/fwF/YAN/f38Bf2ACf38AYAF/AGABfAF8YAABf2ADfHx/AXxgAnx8AXxgAnx/AXxgAABgBH9/f38AYAJ8fwF/Ag0CAWEBYQAAAWEBYgABAxsaAQMBAAQFAAkKBgsCBwwNBQcOAgQAAgMICAYEBQFwAQEBBQYBAYACgAIGCAF/AUHglwULBzUNAWMCAAFkAA8BZQAIAWYACwFnABcBaAAWAWkAFQFqABQBawAbAWwAGgFtABkBbgAYAW8BAArC+gEahQoBDX8gAiAAKAIQIgRJBEAgACAEIAJrIgI2AhAgACAAKAIMIAEgAnRyNgIMDwsgACgCACEKIAAoAgQiBSAAKAIIIgNBBGpNBEAgAAJ/IAVBAm0gBWohCyAKRQRAIAsQCAwBCyALQUBPBEBB5JMBQTA2AgBBAAwBCwJ/QRAgC0ELakF4cSALQQtJGyEHQQAhAyAKQQhrIgUoAgQiDEF4cSEGAkAgDEEDcUUEQEEAIAdBgAJJDQIaIAdBBGogBk0EQCAFIQMgBiAHa0HIlwEoAgBBAXRNDQILQQAMAgsgBSAGaiEIAkAgBiAHTwRAIAYgB2siBEEQSQ0BIAUgDEEBcSAHckECcjYCBCAFIAdqIgMgBEEDcjYCBCAIIAgoAgRBAXI2AgQgAyAEEBEMAQtBgJQBKAIAIAhGBEBB9JMBKAIAIAZqIgYgB00NAiAFIAxBAXEgB3JBAnI2AgQgBSAHaiIEIAYgB2siA0EBcjYCBEH0kwEgAzYCAEGAlAEgBDYCAAwBC0H8kwEoAgAgCEYEQEHwkwEoAgAgBmoiBCAHSQ0CAkAgBCAHayIDQRBPBEAgBSAMQQFxIAdyQQJyNgIEIAUgB2oiBiADQQFyNgIEIAQgBWoiBCADNgIAIAQgBCgCBEF+cTYCBAwBCyAFIAxBAXEgBHJBAnI2AgQgBCAFaiIDIAMoAgRBAXI2AgRBACEDQQAhBgtB/JMBIAY2AgBB8JMBIAM2AgAMAQsgCCgCBCIEQQJxDQEgBEF4cSAGaiINIAdJDQEgDSAHayEPAkAgBEH/AU0EQCAIKAIIIgYgBEEDdiIDQQN0QZCUAWpGGiAGIAgoAgwiBEYEQEHokwFB6JMBKAIAQX4gA3dxNgIADAILIAYgBDYCDCAEIAY2AggMAQsgCCgCGCEOAkAgCCAIKAIMIglHBEAgCCgCCCIDQfiTASgCAEkaIAMgCTYCDCAJIAM2AggMAQsCQCAIQRRqIgYoAgAiAw0AIAhBEGoiBigCACIDDQBBACEJDAELA0AgBiEEIAMiCUEUaiIGKAIAIgMNACAJQRBqIQYgCSgCECIDDQALIARBADYCAAsgDkUNAAJAIAgoAhwiBEECdEGYlgFqIgMoAgAgCEYEQCADIAk2AgAgCQ0BQeyTAUHskwEoAgBBfiAEd3E2AgAMAgsgDkEQQRQgDigCECAIRhtqIAk2AgAgCUUNAQsgCSAONgIYIAgoAhAiAwRAIAkgAzYCECADIAk2AhgLIAgoAhQiA0UNACAJIAM2AhQgAyAJNgIYCyAPQQ9NBEAgBSAMQQFxIA1yQQJyNgIEIAUgDWoiAyADKAIEQQFyNgIEDAELIAUgDEEBcSAHckECcjYCBCAFIAdqIgQgD0EDcjYCBCAFIA1qIgMgAygCBEEBcjYCBCAEIA8QEQsgBSEDCyADCyIDBEAgA0EIagwBC0EAIAsQCCIFRQ0AGiAFIApBfEF4IApBBGsoAgAiA0EDcRsgA0F4cWoiAyALIAMgC0kbEAQgChALIAULIgo2AgAgACAAKAIEIgNBAm0gA2o2AgQgACgCECEEIAAoAgghAwsgAyAKaiAAKAIMIAEgAiAEayIDdnIiBUEYdCAFQYD+A3FBCHRyIAVBCHZBgP4DcSAFQRh2cnI2AgAgAEEgIANrIgM2AhAgACAAKAIIQQRqNgIIIAIgBEcEQCAAIAEgA3Q2AgwPCyAAQQA2AgwLgQIBBn8CQCADRQ0AIANBGGxB0ClqIgUoAgQhByADQQ9NBEAgASACTw0BIANBGGxB0ClqKAIUIQMDQCAEIAAgAUECdGoiBSgCACIGQQBHaiAFKAIEIgRBAEdqIAMgBiAHbCAEamotAABqIQQgAUECaiIBIAJJDQALDAELIAEgAk8NACAFKAIIIQUgA0EYbEHQKWooAhQhAwNAIAQgBUEAIAAgAUECdGoiBCgCACIGQQ5KIggbaiAFQQAgBCgCBCIEQQ5KIgkbaiADQQ8gBCAJGyIEQQ8gBiAIGyIGIAdsamotAABqIAZBAEdqIARBAEdqIQQgAUECaiIBIAJJDQALCyAEC/wDAQJ/IAJBgARPBEAgACABIAIQAQ8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCAAQQNxRQRAIAAhAgwBCyACRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAkEDcUUNASACIANJDQALCwJAIANBfHEiAEHAAEkNACACIABBQGoiBEsNAANAIAIgASgCADYCACACIAEoAgQ2AgQgAiABKAIINgIIIAIgASgCDDYCDCACIAEoAhA2AhAgAiABKAIUNgIUIAIgASgCGDYCGCACIAEoAhw2AhwgAiABKAIgNgIgIAIgASgCJDYCJCACIAEoAig2AiggAiABKAIsNgIsIAIgASgCMDYCMCACIAEoAjQ2AjQgAiABKAI4NgI4IAIgASgCPDYCPCABQUBrIQEgAkFAayICIARNDQALCyAAIAJNDQEDQCACIAEoAgA2AgAgAUEEaiEBIAJBBGoiAiAASQ0ACwwBCyADQQRJBEAgACECDAELIAAgA0EEayIESwRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAiABLQABOgABIAIgAS0AAjoAAiACIAEtAAM6AAMgAUEEaiEBIAJBBGoiAiAETQ0ACwsgAiADSQRAA0AgAiABLQAAOgAAIAFBAWohASACQQFqIgIgA0cNAAsLC1IBAn9B4JMBKAIAIgEgAEEHakF4cSICaiEAAkAgAkEAIAAgAU0bDQAgAD8AQRB0SwRAIAAQAEUNAQtB4JMBIAA2AgAgAQ8LQeSTAUEwNgIAQX8L0gsBCH8CQCABIAJJBH8gAiABayIFQQNxIQYgASEEIAFBf3MgAmpBA08EQCAFQXxxIQkDQCADIAAgBEECdGoiBSgCACIKIAMgCkobIgMgBSgCBCIKIAMgCkobIgMgBSgCCCIKIAMgCkobIgMgBSgCDCIFIAMgBUobIQMgBEEEaiEEIAhBBGoiCCAJRw0ACwsgBgRAA0AgAyAAIARBAnRqKAIAIgUgAyAFShshAyAEQQFqIQQgB0EBaiIHIAZHDQALCyADRQRAQQAPCyADQQ5MBEAgA0GILCgCAE8EQEEMIQQCQAJAAkACQAJAQfArKAIAIANLDQBBCyEEQdgrKAIAIANLDQBBwCsoAgAgA0sNBEEJIQRBqCsoAgAgA0sNAEEIIQRBkCsoAgAgA0sNAEH4KigCACADSw0DQQYhBEHgKigCACADSw0AQcgqKAIAIANLDQJBBCEEQbAqKAIAIANLDQBBAyEEQZgqKAIAIANLDQBBgCooAgAgA0sNAUEBIQRB6CkoAgAgA0sNAEEAIQRB0CkoAgAgA00NCAsgACABIAIgBBADGiAEDwtBrCooAgAhBEGcKigCACEFIAAgASACQQIQAyEGQQAhAwNAIAMgACABQQJ0aiIHKAIAIghBAEdqIAcoAgQiA0EAR2ogBCAFIAhsIANqai0AAGohAyABQQJqIgEgAkkNAAtBAkEDIAMgBkobDwtB9CooAgAhBEHkKigCACEFIAAgASACQQUQAyEGQQAhAwNAIAMgACABQQJ0aiIHKAIAIghBAEdqIAcoAgQiA0EAR2ogBCAFIAhsIANqai0AAGohAyABQQJqIgEgAkkNAAtBBUEGIAMgBkobDwtBpCsoAgAhBkGUKygCACEHIAAgASACQQcQAyEFQQAhBCABIQMDQCAEIAAgA0ECdGoiCCgCACIJQQBHaiAIKAIEIgRBAEdqIAYgByAJbCAEamotAABqIQQgA0ECaiIDIAJJDQALIAQgBSAEIAVIGyEGQQdBCCAEIAVKGyEEQbwrKAIAIQVBrCsoAgAhB0EAIQMDQCADIAAgAUECdGoiCCgCACIJQQBHaiAIKAIEIgNBAEdqIAUgByAJbCADamotAABqIQMgAUECaiIBIAJJDQALQQkgBCADIAZMGw8LQewrKAIAIQZB3CsoAgAhByAAIAEgAkEKEAMhBUEAIQQgASEDA0AgBCAAIANBAnRqIggoAgAiCUEAR2ogCCgCBCIEQQBHaiAGIAcgCWwgBGpqLQAAaiEEIANBAmoiAyACSQ0ACyAEIAUgBCAFSBshBkEKQQsgBCAFShshBEGELCgCACEFQfQrKAIAIQdBACEDA0AgAyAAIAFBAnRqIggoAgAiCUEAR2ogCCgCBCIDQQBHaiAFIAcgCWwgA2pqLQAAaiEDIAFBAmoiASACSQ0AC0EMIAQgAyAGTBsPC0HMLCgCACEEQbwsKAIAIQUgACABIAJBDRADIQZBACEDA0AgAyAAIAFBAnRqIgcoAgAiCEEAR2ogBygCBCIDQQBHaiAEIAUgCGwgA2pqLQAAaiEDIAFBAmoiASACSQ0AC0ENQQ8gAyAGShsPCwJ/QQ8gA0EPayIFQcQsKAIATQ0AGkEQQdwsKAIAIAVPDQAaQRFB9CwoAgAgBU8NABpBEkGMLSgCACAFTw0AGkETQaQtKAIAIAVPDQAaQRRBvC0oAgAgBU8NABpBFUHULSgCACAFTw0AGkEWQewtKAIAIAVPDQAaQRdBAEGELigCACAFTxsLIQQCf0EYQZwuKAIAIAVPDQAaQRlBtC4oAgAgBU8NABpBGkHMLigCACAFTw0AGkEbQeQuKAIAIAVPDQAaQRxB/C4oAgAgBU8NABpBHUGULygCACAFTw0AGkEeQawvKAIAIAVPDQAaQR9BAEHELygCACAFTxsLIQMgACABIAIgBBADIQUgAyAEIAAgASACIAMQAyAFSBsFQQALDwsgACABIAJBABADGkEAC9YCAQF/AkAgAUUNACAAQQA6AAAgACABaiICQQFrQQA6AAAgAUEDSQ0AIABBADoAAiAAQQA6AAEgAkEDa0EAOgAAIAJBAmtBADoAACABQQdJDQAgAEEAOgADIAJBBGtBADoAACABQQlJDQAgAEEAIABrQQNxIgJqIgBBADYCACAAIAEgAmtBfHEiAmoiAUEEa0EANgIAIAJBCUkNACAAQQA2AgggAEEANgIEIAFBCGtBADYCACABQQxrQQA2AgAgAkEZSQ0AIABBADYCGCAAQQA2AhQgAEEANgIQIABBADYCDCABQRBrQQA2AgAgAUEUa0EANgIAIAFBGGtBADYCACABQRxrQQA2AgAgAiAAQQRxQRhyIgJrIgFBIEkNACAAIAJqIQADQCAAQgA3AxggAEIANwMQIABCADcDCCAAQgA3AwAgAEEgaiEAIAFBIGsiAUEfSw0ACwsLtykBC38jAEEQayILJAACQAJAAkACQAJAAkACQAJAAkAgAEH0AU0EQEHokwEoAgAiBkEQIABBC2pBeHEgAEELSRsiBUEDdiIAdiIBQQNxBEACQCABQX9zQQFxIABqIgJBA3QiAUGQlAFqIgAgAUGYlAFqKAIAIgEoAggiBEYEQEHokwEgBkF+IAJ3cTYCAAwBCyAEIAA2AgwgACAENgIICyABQQhqIQAgASACQQN0IgJBA3I2AgQgASACaiIBIAEoAgRBAXI2AgQMCgsgBUHwkwEoAgAiB00NASABBEACQEECIAB0IgJBACACa3IgASAAdHEiAEEAIABrcWgiAUEDdCIAQZCUAWoiAiAAQZiUAWooAgAiACgCCCIERgRAQeiTASAGQX4gAXdxIgY2AgAMAQsgBCACNgIMIAIgBDYCCAsgACAFQQNyNgIEIAAgBWoiCCABQQN0IgEgBWsiBEEBcjYCBCAAIAFqIAQ2AgAgBwRAIAdBeHFBkJQBaiEBQfyTASgCACECAn8gBkEBIAdBA3Z0IgNxRQRAQeiTASADIAZyNgIAIAEMAQsgASgCCAshAyABIAI2AgggAyACNgIMIAIgATYCDCACIAM2AggLIABBCGohAEH8kwEgCDYCAEHwkwEgBDYCAAwKC0HskwEoAgAiCkUNASAKQQAgCmtxaEECdEGYlgFqKAIAIgIoAgRBeHEgBWshAyACIQEDQAJAIAEoAhAiAEUEQCABKAIUIgBFDQELIAAoAgRBeHEgBWsiASADIAEgA0kiARshAyAAIAIgARshAiAAIQEMAQsLIAIoAhghCSACIAIoAgwiBEcEQCACKAIIIgBB+JMBKAIASRogACAENgIMIAQgADYCCAwJCyACQRRqIgEoAgAiAEUEQCACKAIQIgBFDQMgAkEQaiEBCwNAIAEhCCAAIgRBFGoiASgCACIADQAgBEEQaiEBIAQoAhAiAA0ACyAIQQA2AgAMCAtBfyEFIABBv39LDQAgAEELaiIAQXhxIQVB7JMBKAIAIghFDQBBACAFayEDAkACQAJAAn9BACAFQYACSQ0AGkEfIAVB////B0sNABogBUEmIABBCHZnIgBrdkEBcSAAQQF0a0E+agsiB0ECdEGYlgFqKAIAIgFFBEBBACEADAELQQAhACAFQRkgB0EBdmtBACAHQR9HG3QhAgNAAkAgASgCBEF4cSAFayIGIANPDQAgASEEIAYiAw0AQQAhAyABIQAMAwsgACABKAIUIgYgBiABIAJBHXZBBHFqKAIQIgFGGyAAIAYbIQAgAkEBdCECIAENAAsLIAAgBHJFBEBBACEEQQIgB3QiAEEAIABrciAIcSIARQ0DIABBACAAa3FoQQJ0QZiWAWooAgAhAAsgAEUNAQsDQCAAKAIEQXhxIAVrIgIgA0khASACIAMgARshAyAAIAQgARshBCAAKAIQIgEEfyABBSAAKAIUCyIADQALCyAERQ0AIANB8JMBKAIAIAVrTw0AIAQoAhghByAEIAQoAgwiAkcEQCAEKAIIIgBB+JMBKAIASRogACACNgIMIAIgADYCCAwHCyAEQRRqIgEoAgAiAEUEQCAEKAIQIgBFDQMgBEEQaiEBCwNAIAEhBiAAIgJBFGoiASgCACIADQAgAkEQaiEBIAIoAhAiAA0ACyAGQQA2AgAMBgsgBUHwkwEoAgAiAU0EQEH8kwEoAgAhAAJAIAEgBWsiAkEQTwRAQfCTASACNgIAQfyTASAAIAVqIgQ2AgAgBCACQQFyNgIEIAAgAWogAjYCACAAIAVBA3I2AgQMAQtB/JMBQQA2AgBB8JMBQQA2AgAgACABQQNyNgIEIAAgAWoiASABKAIEQQFyNgIECyAAQQhqIQAMCAsgBUH0kwEoAgAiAkkEQEH0kwEgAiAFayIBNgIAQYCUAUGAlAEoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQgAEEIaiEADAgLQQAhACAFQS9qIgMCf0HAlwEoAgAEQEHIlwEoAgAMAQtBzJcBQn83AgBBxJcBQoCggICAgAQ3AgBBwJcBIAtBDGpBcHFB2KrVqgVzNgIAQdSXAUEANgIAQaSXAUEANgIAQYAgCyIBaiIGQQAgAWsiCHEiASAFTQ0HQaCXASgCACIEBEBBmJcBKAIAIgcgAWoiCSAHTQ0IIAQgCUkNCAsCQEGklwEtAABBBHFFBEACQAJAAkACQEGAlAEoAgAiBARAQaiXASEAA0AgBCAAKAIAIgdPBEAgByAAKAIEaiAESw0DCyAAKAIIIgANAAsLQQAQBSICQX9GDQMgASEGQcSXASgCACIAQQFrIgQgAnEEQCABIAJrIAIgBGpBACAAa3FqIQYLIAUgBk8NA0GglwEoAgAiAARAQZiXASgCACIEIAZqIgggBE0NBCAAIAhJDQQLIAYQBSIAIAJHDQEMBQsgBiACayAIcSIGEAUiAiAAKAIAIAAoAgRqRg0BIAIhAAsgAEF/Rg0BIAYgBUEwak8EQCAAIQIMBAtByJcBKAIAIgIgAyAGa2pBACACa3EiAhAFQX9GDQEgAiAGaiEGIAAhAgwDCyACQX9HDQILQaSXAUGklwEoAgBBBHI2AgALIAEQBSECQQAQBSEAIAJBf0YNBSAAQX9GDQUgACACTQ0FIAAgAmsiBiAFQShqTQ0FC0GYlwFBmJcBKAIAIAZqIgA2AgBBnJcBKAIAIABJBEBBnJcBIAA2AgALAkBBgJQBKAIAIgMEQEGolwEhAANAIAIgACgCACIBIAAoAgQiBGpGDQIgACgCCCIADQALDAQLQfiTASgCACIAQQAgACACTRtFBEBB+JMBIAI2AgALQQAhAEGslwEgBjYCAEGolwEgAjYCAEGIlAFBfzYCAEGMlAFBwJcBKAIANgIAQbSXAUEANgIAA0AgAEEDdCIBQZiUAWogAUGQlAFqIgQ2AgAgAUGclAFqIAQ2AgAgAEEBaiIAQSBHDQALQfSTASAGQShrIgBBeCACa0EHcUEAIAJBCGpBB3EbIgFrIgQ2AgBBgJQBIAEgAmoiATYCACABIARBAXI2AgQgACACakEoNgIEQYSUAUHQlwEoAgA2AgAMBAsgAC0ADEEIcQ0CIAEgA0sNAiACIANNDQIgACAEIAZqNgIEQYCUASADQXggA2tBB3FBACADQQhqQQdxGyIAaiIBNgIAQfSTAUH0kwEoAgAgBmoiAiAAayIANgIAIAEgAEEBcjYCBCACIANqQSg2AgRBhJQBQdCXASgCADYCAAwDC0EAIQQMBQtBACECDAMLQfiTASgCACACSwRAQfiTASACNgIACyACIAZqIQFBqJcBIQACQAJAAkACQAJAAkADQCABIAAoAgBHBEAgACgCCCIADQEMAgsLIAAtAAxBCHFFDQELQaiXASEAA0AgAyAAKAIAIgFPBEAgASAAKAIEaiIEIANLDQMLIAAoAgghAAwACwALIAAgAjYCACAAIAAoAgQgBmo2AgQgAkF4IAJrQQdxQQAgAkEIakEHcRtqIgcgBUEDcjYCBCABQXggAWtBB3FBACABQQhqQQdxG2oiBiAFIAdqIgVrIQAgAyAGRgRAQYCUASAFNgIAQfSTAUH0kwEoAgAgAGoiADYCACAFIABBAXI2AgQMAwtB/JMBKAIAIAZGBEBB/JMBIAU2AgBB8JMBQfCTASgCACAAaiIANgIAIAUgAEEBcjYCBCAAIAVqIAA2AgAMAwsgBigCBCIDQQNxQQFGBEAgA0F4cSEJAkAgA0H/AU0EQCAGKAIIIgEgA0EDdiIEQQN0QZCUAWpGGiABIAYoAgwiAkYEQEHokwFB6JMBKAIAQX4gBHdxNgIADAILIAEgAjYCDCACIAE2AggMAQsgBigCGCEIAkAgBiAGKAIMIgJHBEAgBigCCCIBIAI2AgwgAiABNgIIDAELAkAgBkEUaiIDKAIAIgENACAGQRBqIgMoAgAiAQ0AQQAhAgwBCwNAIAMhBCABIgJBFGoiAygCACIBDQAgAkEQaiEDIAIoAhAiAQ0ACyAEQQA2AgALIAhFDQACQCAGKAIcIgFBAnRBmJYBaiIEKAIAIAZGBEAgBCACNgIAIAINAUHskwFB7JMBKAIAQX4gAXdxNgIADAILIAhBEEEUIAgoAhAgBkYbaiACNgIAIAJFDQELIAIgCDYCGCAGKAIQIgEEQCACIAE2AhAgASACNgIYCyAGKAIUIgFFDQAgAiABNgIUIAEgAjYCGAsgBiAJaiIGKAIEIQMgACAJaiEACyAGIANBfnE2AgQgBSAAQQFyNgIEIAAgBWogADYCACAAQf8BTQRAIABBeHFBkJQBaiEBAn9B6JMBKAIAIgJBASAAQQN2dCIAcUUEQEHokwEgACACcjYCACABDAELIAEoAggLIQAgASAFNgIIIAAgBTYCDCAFIAE2AgwgBSAANgIIDAMLQR8hAyAAQf///wdNBEAgAEEmIABBCHZnIgFrdkEBcSABQQF0a0E+aiEDCyAFIAM2AhwgBUIANwIQIANBAnRBmJYBaiEBAkBB7JMBKAIAIgJBASADdCIEcUUEQEHskwEgAiAEcjYCACABIAU2AgAMAQsgAEEZIANBAXZrQQAgA0EfRxt0IQMgASgCACECA0AgAiIBKAIEQXhxIABGDQMgA0EddiECIANBAXQhAyABIAJBBHFqIgQoAhAiAg0ACyAEIAU2AhALIAUgATYCGCAFIAU2AgwgBSAFNgIIDAILQfSTASAGQShrIgBBeCACa0EHcUEAIAJBCGpBB3EbIgFrIgg2AgBBgJQBIAEgAmoiATYCACABIAhBAXI2AgQgACACakEoNgIEQYSUAUHQlwEoAgA2AgAgAyAEQScgBGtBB3FBACAEQSdrQQdxG2pBL2siACAAIANBEGpJGyIBQRs2AgQgAUGwlwEpAgA3AhAgAUGolwEpAgA3AghBsJcBIAFBCGo2AgBBrJcBIAY2AgBBqJcBIAI2AgBBtJcBQQA2AgAgAUEYaiEAA0AgAEEHNgIEIABBCGohAiAAQQRqIQAgAiAESQ0ACyABIANGDQMgASABKAIEQX5xNgIEIAMgASADayICQQFyNgIEIAEgAjYCACACQf8BTQRAIAJBeHFBkJQBaiEAAn9B6JMBKAIAIgFBASACQQN2dCICcUUEQEHokwEgASACcjYCACAADAELIAAoAggLIQEgACADNgIIIAEgAzYCDCADIAA2AgwgAyABNgIIDAQLQR8hACACQf///wdNBEAgAkEmIAJBCHZnIgBrdkEBcSAAQQF0a0E+aiEACyADIAA2AhwgA0IANwIQIABBAnRBmJYBaiEBAkBB7JMBKAIAIgRBASAAdCIGcUUEQEHskwEgBCAGcjYCACABIAM2AgAMAQsgAkEZIABBAXZrQQAgAEEfRxt0IQAgASgCACEEA0AgBCIBKAIEQXhxIAJGDQQgAEEddiEEIABBAXQhACABIARBBHFqIgYoAhAiBA0ACyAGIAM2AhALIAMgATYCGCADIAM2AgwgAyADNgIIDAMLIAEoAggiACAFNgIMIAEgBTYCCCAFQQA2AhggBSABNgIMIAUgADYCCAsgB0EIaiEADAULIAEoAggiACADNgIMIAEgAzYCCCADQQA2AhggAyABNgIMIAMgADYCCAtB9JMBKAIAIgAgBU0NAEH0kwEgACAFayIBNgIAQYCUAUGAlAEoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQgAEEIaiEADAMLQeSTAUEwNgIAQQAhAAwCCwJAIAdFDQACQCAEKAIcIgBBAnRBmJYBaiIBKAIAIARGBEAgASACNgIAIAINAUHskwEgCEF+IAB3cSIINgIADAILIAdBEEEUIAcoAhAgBEYbaiACNgIAIAJFDQELIAIgBzYCGCAEKAIQIgAEQCACIAA2AhAgACACNgIYCyAEKAIUIgBFDQAgAiAANgIUIAAgAjYCGAsCQCADQQ9NBEAgBCADIAVqIgBBA3I2AgQgACAEaiIAIAAoAgRBAXI2AgQMAQsgBCAFQQNyNgIEIAQgBWoiAiADQQFyNgIEIAIgA2ogAzYCACADQf8BTQRAIANBeHFBkJQBaiEAAn9B6JMBKAIAIgFBASADQQN2dCIDcUUEQEHokwEgASADcjYCACAADAELIAAoAggLIQEgACACNgIIIAEgAjYCDCACIAA2AgwgAiABNgIIDAELQR8hACADQf///wdNBEAgA0EmIANBCHZnIgBrdkEBcSAAQQF0a0E+aiEACyACIAA2AhwgAkIANwIQIABBAnRBmJYBaiEBAkACQCAIQQEgAHQiBnFFBEBB7JMBIAYgCHI2AgAgASACNgIADAELIANBGSAAQQF2a0EAIABBH0cbdCEAIAEoAgAhBQNAIAUiASgCBEF4cSADRg0CIABBHXYhBiAAQQF0IQAgASAGQQRxaiIGKAIQIgUNAAsgBiACNgIQCyACIAE2AhggAiACNgIMIAIgAjYCCAwBCyABKAIIIgAgAjYCDCABIAI2AgggAkEANgIYIAIgATYCDCACIAA2AggLIARBCGohAAwBCwJAIAlFDQACQCACKAIcIgBBAnRBmJYBaiIBKAIAIAJGBEAgASAENgIAIAQNAUHskwEgCkF+IAB3cTYCAAwCCyAJQRBBFCAJKAIQIAJGG2ogBDYCACAERQ0BCyAEIAk2AhggAigCECIABEAgBCAANgIQIAAgBDYCGAsgAigCFCIARQ0AIAQgADYCFCAAIAQ2AhgLAkAgA0EPTQRAIAIgAyAFaiIAQQNyNgIEIAAgAmoiACAAKAIEQQFyNgIEDAELIAIgBUEDcjYCBCACIAVqIgQgA0EBcjYCBCADIARqIAM2AgAgBwRAIAdBeHFBkJQBaiEAQfyTASgCACEBAn9BASAHQQN2dCIFIAZxRQRAQeiTASAFIAZyNgIAIAAMAQsgACgCCAshBiAAIAE2AgggBiABNgIMIAEgADYCDCABIAY2AggLQfyTASAENgIAQfCTASADNgIACyACQQhqIQALIAtBEGokACAAC5kBAQN8IAAgAKIiAyADIAOioiADRHzVz1o62eU9okTrnCuK5uVavqCiIAMgA0R9/rFX4x3HPqJE1WHBGaABKr+gokSm+BARERGBP6CgIQUgAyAAoiEEIAJFBEAgBCADIAWiRElVVVVVVcW/oKIgAKAPCyAAIAMgAUQAAAAAAADgP6IgBSAEoqGiIAGhIARESVVVVVVVxT+ioKELkgEBA3xEAAAAAAAA8D8gACAAoiICRAAAAAAAAOA/oiIDoSIERAAAAAAAAPA/IAShIAOhIAIgAiACIAJEkBXLGaAB+j6iRHdRwRZswVa/oKJETFVVVVVVpT+goiACIAKiIgMgA6IgAiACRNQ4iL7p+qi9okTEsbS9nu4hPqCiRK1SnIBPfpK+oKKgoiAAIAGioaCgC4kMAQd/AkAgAEUNACAAQQhrIgIgAEEEaygCACIBQXhxIgBqIQUCQCABQQFxDQAgAUEDcUUNASACIAIoAgAiAWsiAkH4kwEoAgBJDQEgACABaiEAQfyTASgCACACRwRAIAFB/wFNBEAgAigCCCIEIAFBA3YiAUEDdEGQlAFqRhogBCACKAIMIgNGBEBB6JMBQeiTASgCAEF+IAF3cTYCAAwDCyAEIAM2AgwgAyAENgIIDAILIAIoAhghBgJAIAIgAigCDCIBRwRAIAIoAggiAyABNgIMIAEgAzYCCAwBCwJAIAJBFGoiBCgCACIDDQAgAkEQaiIEKAIAIgMNAEEAIQEMAQsDQCAEIQcgAyIBQRRqIgQoAgAiAw0AIAFBEGohBCABKAIQIgMNAAsgB0EANgIACyAGRQ0BAkAgAigCHCIEQQJ0QZiWAWoiAygCACACRgRAIAMgATYCACABDQFB7JMBQeyTASgCAEF+IAR3cTYCAAwDCyAGQRBBFCAGKAIQIAJGG2ogATYCACABRQ0CCyABIAY2AhggAigCECIDBEAgASADNgIQIAMgATYCGAsgAigCFCIDRQ0BIAEgAzYCFCADIAE2AhgMAQsgBSgCBCIBQQNxQQNHDQBB8JMBIAA2AgAgBSABQX5xNgIEIAIgAEEBcjYCBCAAIAJqIAA2AgAPCyACIAVPDQAgBSgCBCIBQQFxRQ0AAkAgAUECcUUEQEGAlAEoAgAgBUYEQEGAlAEgAjYCAEH0kwFB9JMBKAIAIABqIgA2AgAgAiAAQQFyNgIEIAJB/JMBKAIARw0DQfCTAUEANgIAQfyTAUEANgIADwtB/JMBKAIAIAVGBEBB/JMBIAI2AgBB8JMBQfCTASgCACAAaiIANgIAIAIgAEEBcjYCBCAAIAJqIAA2AgAPCyABQXhxIABqIQACQCABQf8BTQRAIAUoAggiBCABQQN2IgFBA3RBkJQBakYaIAQgBSgCDCIDRgRAQeiTAUHokwEoAgBBfiABd3E2AgAMAgsgBCADNgIMIAMgBDYCCAwBCyAFKAIYIQYCQCAFIAUoAgwiAUcEQCAFKAIIIgNB+JMBKAIASRogAyABNgIMIAEgAzYCCAwBCwJAIAVBFGoiBCgCACIDDQAgBUEQaiIEKAIAIgMNAEEAIQEMAQsDQCAEIQcgAyIBQRRqIgQoAgAiAw0AIAFBEGohBCABKAIQIgMNAAsgB0EANgIACyAGRQ0AAkAgBSgCHCIEQQJ0QZiWAWoiAygCACAFRgRAIAMgATYCACABDQFB7JMBQeyTASgCAEF+IAR3cTYCAAwCCyAGQRBBFCAGKAIQIAVGG2ogATYCACABRQ0BCyABIAY2AhggBSgCECIDBEAgASADNgIQIAMgATYCGAsgBSgCFCIDRQ0AIAEgAzYCFCADIAE2AhgLIAIgAEEBcjYCBCAAIAJqIAA2AgAgAkH8kwEoAgBHDQFB8JMBIAA2AgAPCyAFIAFBfnE2AgQgAiAAQQFyNgIEIAAgAmogADYCAAsgAEH/AU0EQCAAQXhxQZCUAWohAQJ/QeiTASgCACIDQQEgAEEDdnQiAHFFBEBB6JMBIAAgA3I2AgAgAQwBCyABKAIICyEAIAEgAjYCCCAAIAI2AgwgAiABNgIMIAIgADYCCA8LQR8hBCAAQf///wdNBEAgAEEmIABBCHZnIgFrdkEBcSABQQF0a0E+aiEECyACIAQ2AhwgAkIANwIQIARBAnRBmJYBaiEHAkACQAJAQeyTASgCACIDQQEgBHQiAXFFBEBB7JMBIAEgA3I2AgAgByACNgIAIAIgBzYCGAwBCyAAQRkgBEEBdmtBACAEQR9HG3QhBCAHKAIAIQEDQCABIgMoAgRBeHEgAEYNAiAEQR12IQEgBEEBdCEEIAMgAUEEcWoiB0EQaigCACIBDQALIAcgAjYCECACIAM2AhgLIAIgAjYCDCACIAI2AggMAQsgAygCCCIAIAI2AgwgAyACNgIIIAJBADYCGCACIAM2AgwgAiAANgIIC0GIlAFBiJQBKAIAQQFrIgBBfyAAGzYCAAsLqAEAAkAgAUGACE4EQCAARAAAAAAAAOB/oiEAIAFB/w9JBEAgAUH/B2shAQwCCyAARAAAAAAAAOB/oiEAQf0XIAEgAUH9F04bQf4PayEBDAELIAFBgXhKDQAgAEQAAAAAAABgA6IhACABQbhwSwRAIAFByQdqIQEMAQsgAEQAAAAAAABgA6IhAEHwaCABIAFB8GhMG0GSD2ohAQsgACABQf8Haq1CNIa/ogu8AgEBfwJ/QQAgAUECdEGAM2oiAigCACAARg0AGkEBIAIoAhAgAEYNABpBAiABQQJ0QaAzaigCACAARg0AGkEDIAFBAnQiAkGwM2ooAgAgAEYNABpBBCACQcAzaigCACAARg0AGkEFIAFBAnQiAkHQM2ooAgAgAEYNABpBBiACQeAzaigCACAARg0AGkEHIAFBAnQiAkHwM2ooAgAgAEYNABpBCCACQYA0aigCACAARg0AGkEJIAFBAnQiAkGQNGooAgAgAEYNABpBCiACQaA0aigCACAARg0AGkELIAFBAnQiAkGwNGooAgAgAEYNABpBDCACQcA0aigCACAARg0AGkENIAFBAnQiAkHQNGooAgAgAEYNABpBDiACQeA0aigCACAARg0AGkEPQX8gAUECdEHwNGooAgAgAEYbCwvoBAMBfwZ8An4gAL0iCEIwiKchASAIQoCAgICAgID3P31C//////+fwgFYBEAgCEKAgICAgICA+D9RBEBEAAAAAAAAAAAPCyAARAAAAAAAAPC/oCIAIAAgAEQAAAAAAACgQaIiAqAgAqEiAiACokGI8wArAwAiBaIiBqAiByAAIAAgAKIiA6IiBCAEIAQgBEHY8wArAwCiIANB0PMAKwMAoiAAQcjzACsDAKJBwPMAKwMAoKCgoiADQbjzACsDAKIgAEGw8wArAwCiQajzACsDAKCgoKIgA0Gg8wArAwCiIABBmPMAKwMAokGQ8wArAwCgoKCiIAAgAqEgBaIgACACoKIgBiAAIAehoKCgoA8LAkAgAUHw/wFrQZ+Afk0EQCAIQv///////////wCDUARAIwBBEGsiAUQAAAAAAADwvzkDCCABKwMIRAAAAAAAAAAAow8LIAhCgICAgICAgPj/AFENASABQYCAAnFFIAFB8P8BcUHw/wFHcUUEQCAAIAChIgAgAKMPCyAARAAAAAAAADBDor1CgICAgICAgKADfSEICyAIQoCAgICAgIDzP30iCUI0h6e3IgNB0PIAKwMAoiAJQi2Ip0H/AHFBBHQiAUHo8wBqKwMAoCIEIAFB4PMAaisDACAIIAlCgICAgICAgHiDfb8gAUHggwFqKwMAoSABQeiDAWorAwChoiIAoCIFIAAgACAAoiICoiACIABBgPMAKwMAokH48gArAwCgoiAAQfDyACsDAKJB6PIAKwMAoKCiIAJB4PIAKwMAoiADQdjyACsDAKIgACAEIAWhoKCgoKAhAAsgAAsDAAELkwwCB38BfiMAQYACayIHJAAgA0GAjQVqIgQgAkECdGoiBSgCAEECdCAEIAJBC3QiCGpBiMAAaiICaiAAKAIAIgQvAQBBEHQ2AnwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AnggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AnQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AnAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AkwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AkggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AkQgBSgCAEECdCACakFAayAEQQJqIgQvAQBBEHQ2AgAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AgwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AgggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AgQgAiAFKAIAQQJ0aiAEQQJqIgIvAQBBEHQ2AgAgACACQQJqNgIAIAUoAgAhCUHAACECA0AgByACQQFrIgBBAnQiCmogAkECdEHAO2oiBjQC/AEgAyAIakGIzQVqIgIgACAJaiIEQUBrQf8DcUECdGo0AgB+QiCIpyAKQcA7ajQCACACIARB/wNxQQJ0ajQCAH5CIIinaiAGNAL8AyACIARBgAFqQf8DcUECdGo0AgB+QiCIp2ogBjQC/AUgAiAEQcABakH/A3FBAnRqNAIAfkIgiKdqIAY0AvwHIAIgBEGAAmpB/wNxQQJ0ajQCAH5CIIinaiAGQfwJajQCACACIARBwAJqQf8DcUECdGo0AgB+QiCIp2ogBkH8C2o0AgAgAiAEQYADakH/A3FBAnRqNAIAfkIgiKdqIAZB/A1qNAIAIAIgBEHAA2pB/wNxQQJ0ajQCAH5CIIinajYCACAAIgINAAsgBSAFKAIAQeADakH/A3E2AgBBHyECIAc0AvwBIQsDQCALIAMgAiIFQQh0aiIIQYSPBWo0AgB+QiCIpyEGQT8hAANAIAYgByAAQQJ0IgRBBGsiCWo0AgAgCSAIQYiNBWoiAmo0AgB+QiCIp2ogByAEQQhrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQQxrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQRBrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQRRrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQRhrIgRqNAIAIAIgBGo0AgB+QiCIp2ogByAAQQdrIgBBAnQiBGo0AgAgAiAEajQCAH5CIIinaiEGIAANAAsgASAFQQJ0aiAGNgIAIAVBAWshAiAFDQALIAdBgAJqJAALyAsBBn8gACABaiEFAkACQCAAKAIEIgJBAXENACACQQNxRQ0BIAAoAgAiAiABaiEBAkAgACACayIAQfyTASgCAEcEQCACQf8BTQRAIAAoAggiBCACQQN2IgJBA3RBkJQBakYaIAAoAgwiAyAERw0CQeiTAUHokwEoAgBBfiACd3E2AgAMAwsgACgCGCEGAkAgACAAKAIMIgJHBEAgACgCCCIDQfiTASgCAEkaIAMgAjYCDCACIAM2AggMAQsCQCAAQRRqIgQoAgAiAw0AIABBEGoiBCgCACIDDQBBACECDAELA0AgBCEHIAMiAkEUaiIEKAIAIgMNACACQRBqIQQgAigCECIDDQALIAdBADYCAAsgBkUNAgJAIAAoAhwiBEECdEGYlgFqIgMoAgAgAEYEQCADIAI2AgAgAg0BQeyTAUHskwEoAgBBfiAEd3E2AgAMBAsgBkEQQRQgBigCECAARhtqIAI2AgAgAkUNAwsgAiAGNgIYIAAoAhAiAwRAIAIgAzYCECADIAI2AhgLIAAoAhQiA0UNAiACIAM2AhQgAyACNgIYDAILIAUoAgQiAkEDcUEDRw0BQfCTASABNgIAIAUgAkF+cTYCBCAAIAFBAXI2AgQgBSABNgIADwsgBCADNgIMIAMgBDYCCAsCQCAFKAIEIgJBAnFFBEBBgJQBKAIAIAVGBEBBgJQBIAA2AgBB9JMBQfSTASgCACABaiIBNgIAIAAgAUEBcjYCBCAAQfyTASgCAEcNA0HwkwFBADYCAEH8kwFBADYCAA8LQfyTASgCACAFRgRAQfyTASAANgIAQfCTAUHwkwEoAgAgAWoiATYCACAAIAFBAXI2AgQgACABaiABNgIADwsgAkF4cSABaiEBAkAgAkH/AU0EQCAFKAIIIgQgAkEDdiICQQN0QZCUAWpGGiAEIAUoAgwiA0YEQEHokwFB6JMBKAIAQX4gAndxNgIADAILIAQgAzYCDCADIAQ2AggMAQsgBSgCGCEGAkAgBSAFKAIMIgJHBEAgBSgCCCIDQfiTASgCAEkaIAMgAjYCDCACIAM2AggMAQsCQCAFQRRqIgMoAgAiBA0AIAVBEGoiAygCACIEDQBBACECDAELA0AgAyEHIAQiAkEUaiIDKAIAIgQNACACQRBqIQMgAigCECIEDQALIAdBADYCAAsgBkUNAAJAIAUoAhwiBEECdEGYlgFqIgMoAgAgBUYEQCADIAI2AgAgAg0BQeyTAUHskwEoAgBBfiAEd3E2AgAMAgsgBkEQQRQgBigCECAFRhtqIAI2AgAgAkUNAQsgAiAGNgIYIAUoAhAiAwRAIAIgAzYCECADIAI2AhgLIAUoAhQiA0UNACACIAM2AhQgAyACNgIYCyAAIAFBAXI2AgQgACABaiABNgIAIABB/JMBKAIARw0BQfCTASABNgIADwsgBSACQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALIAFB/wFNBEAgAUF4cUGQlAFqIQICf0HokwEoAgAiA0EBIAFBA3Z0IgFxRQRAQeiTASABIANyNgIAIAIMAQsgAigCCAshASACIAA2AgggASAANgIMIAAgAjYCDCAAIAE2AggPC0EfIQQgAUH///8HTQRAIAFBJiABQQh2ZyICa3ZBAXEgAkEBdGtBPmohBAsgACAENgIcIABCADcCECAEQQJ0QZiWAWohBwJAAkBB7JMBKAIAIgNBASAEdCICcUUEQEHskwEgAiADcjYCACAHIAA2AgAgACAHNgIYDAELIAFBGSAEQQF2a0EAIARBH0cbdCEEIAcoAgAhAgNAIAIiAygCBEF4cSABRg0CIARBHXYhAiAEQQF0IQQgAyACQQRxaiIHQRBqKAIAIgINAAsgByAANgIQIAAgAzYCGAsgACAANgIMIAAgADYCCA8LIAMoAggiASAANgIMIAMgADYCCCAAQQA2AhggACADNgIMIAAgATYCCAsLwQEBAn8jAEEQayIBJAACfCAAvUIgiKdB/////wdxIgJB+8Ok/wNNBEBEAAAAAAAA8D8gAkGewZryA0kNARogAEQAAAAAAAAAABAKDAELIAAgAKEgAkGAgMD/B08NABoCQAJAAkACQCAAIAEQE0EDcQ4DAAECAwsgASsDACABKwMIEAoMAwsgASsDACABKwMIQQEQCZoMAgsgASsDACABKwMIEAqaDAELIAErAwAgASsDCEEBEAkLIQAgAUEQaiQAIAALzxgDFH8EfAF+IwBBMGsiCSQAAkACQAJAIAC9IhpCIIinIgNB/////wdxIgZB+tS9gARNBEAgA0H//z9xQfvDJEYNASAGQfyyi4AETQRAIBpCAFkEQCABIABEAABAVPsh+b+gIgBEMWNiGmG00L2gIhY5AwAgASAAIBahRDFjYhphtNC9oDkDCEEBIQMMBQsgASAARAAAQFT7Ifk/oCIARDFjYhphtNA9oCIWOQMAIAEgACAWoUQxY2IaYbTQPaA5AwhBfyEDDAQLIBpCAFkEQCABIABEAABAVPshCcCgIgBEMWNiGmG04L2gIhY5AwAgASAAIBahRDFjYhphtOC9oDkDCEECIQMMBAsgASAARAAAQFT7IQlAoCIARDFjYhphtOA9oCIWOQMAIAEgACAWoUQxY2IaYbTgPaA5AwhBfiEDDAMLIAZBu4zxgARNBEAgBkG8+9eABE0EQCAGQfyyy4AERg0CIBpCAFkEQCABIABEAAAwf3zZEsCgIgBEypSTp5EO6b2gIhY5AwAgASAAIBahRMqUk6eRDum9oDkDCEEDIQMMBQsgASAARAAAMH982RJAoCIARMqUk6eRDuk9oCIWOQMAIAEgACAWoUTKlJOnkQ7pPaA5AwhBfSEDDAQLIAZB+8PkgARGDQEgGkIAWQRAIAEgAEQAAEBU+yEZwKAiAEQxY2IaYbTwvaAiFjkDACABIAAgFqFEMWNiGmG08L2gOQMIQQQhAwwECyABIABEAABAVPshGUCgIgBEMWNiGmG08D2gIhY5AwAgASAAIBahRDFjYhphtPA9oDkDCEF8IQMMAwsgBkH6w+SJBEsNAQsgACAARIPIyW0wX+Q/okQAAAAAAAA4Q6BEAAAAAAAAOMOgIhdEAABAVPsh+b+ioCIWIBdEMWNiGmG00D2iIhihIhlEGC1EVPsh6b9jIQICfyAXmUQAAAAAAADgQWMEQCAXqgwBC0GAgICAeAshAwJAIAIEQCADQQFrIQMgF0QAAAAAAADwv6AiF0QxY2IaYbTQPaIhGCAAIBdEAABAVPsh+b+ioCEWDAELIBlEGC1EVPsh6T9kRQ0AIANBAWohAyAXRAAAAAAAAPA/oCIXRDFjYhphtNA9oiEYIAAgF0QAAEBU+yH5v6KgIRYLIAEgFiAYoSIAOQMAAkAgBkEUdiICIAC9QjSIp0H/D3FrQRFIDQAgASAWIBdEAABgGmG00D2iIgChIhkgF0RzcAMuihmjO6IgFiAZoSAAoaEiGKEiADkDACACIAC9QjSIp0H/D3FrQTJIBEAgGSEWDAELIAEgGSAXRAAAAC6KGaM7oiIAoSIWIBdEwUkgJZqDezmiIBkgFqEgAKGhIhihIgA5AwALIAEgFiAAoSAYoTkDCAwBCyAGQYCAwP8HTwRAIAEgACAAoSIAOQMAIAEgADkDCEEAIQMMAQsgGkL/////////B4NCgICAgICAgLDBAIS/IQBBACEDQQEhAgNAIAlBEGogA0EDdGoCfyAAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAu3IhY5AwAgACAWoUQAAAAAAABwQaIhAEEBIQMgAiEEQQAhAiAEDQALIAkgADkDIEECIQMDQCADIgJBAWshAyAJQRBqIAJBA3RqKwMARAAAAAAAAAAAYQ0ACyAJQRBqIQ5BACEEIwBBsARrIgUkACAGQRR2QZYIayIDQQNrQRhtIgZBACAGQQBKGyIPQWhsIANqIQZBxMsAKAIAIgggAkEBaiIKQQFrIgdqQQBOBEAgCCAKaiEDIA8gB2shAgNAIAVBwAJqIARBA3RqIAJBAEgEfEQAAAAAAAAAAAUgAkECdEHQywBqKAIAtws5AwAgAkEBaiECIARBAWoiBCADRw0ACwsgBkEYayELQQAhAyAIQQAgCEEAShshBCAKQQBMIQwDQAJAIAwEQEQAAAAAAAAAACEADAELIAMgB2ohDUEAIQJEAAAAAAAAAAAhAANAIA4gAkEDdGorAwAgBUHAAmogDSACa0EDdGorAwCiIACgIQAgAkEBaiICIApHDQALCyAFIANBA3RqIAA5AwAgAyAERiECIANBAWohAyACRQ0AC0EvIAZrIRJBMCAGayEQIAZBGWshEyAIIQMCQANAIAUgA0EDdGorAwAhAEEAIQIgAyEEIANBAEwiB0UEQANAIAVB4ANqIAJBAnRqAn8CfyAARAAAAAAAAHA+oiIWmUQAAAAAAADgQWMEQCAWqgwBC0GAgICAeAu3IhZEAAAAAAAAcMGiIACgIgCZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4CzYCACAFIARBAWsiBEEDdGorAwAgFqAhACACQQFqIgIgA0cNAAsLAn8gACALEAwiACAARAAAAAAAAMA/opxEAAAAAAAAIMCioCIAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAshDCAAIAy3oSEAAkACQAJAAn8gC0EATCIURQRAIANBAnQgBWoiAiACKALcAyICIAIgEHUiAiAQdGsiBDYC3AMgAiAMaiEMIAQgEnUMAQsgCw0BIANBAnQgBWooAtwDQRd1CyINQQBMDQIMAQtBAiENIABEAAAAAAAA4D9mDQBBACENDAELQQAhAkEAIQQgB0UEQANAIAVB4ANqIAJBAnRqIhUoAgAhEUH///8HIQcCfwJAIAQNAEGAgIAIIQcgEQ0AQQAMAQsgFSAHIBFrNgIAQQELIQQgAkEBaiICIANHDQALCwJAIBQNAEH///8DIQICQAJAIBMOAgEAAgtB////ASECCyADQQJ0IAVqIgcgBygC3AMgAnE2AtwDCyAMQQFqIQwgDUECRw0ARAAAAAAAAPA/IAChIQBBAiENIARFDQAgAEQAAAAAAADwPyALEAyhIQALIABEAAAAAAAAAABhBEBBACEEIAMhAgJAIAMgCEwNAANAIAVB4ANqIAJBAWsiAkECdGooAgAgBHIhBCACIAhKDQALIARFDQAgCyEGA0AgBkEYayEGIAVB4ANqIANBAWsiA0ECdGooAgBFDQALDAMLQQEhAgNAIAIiBEEBaiECIAVB4ANqIAggBGtBAnRqKAIARQ0ACyADIARqIQQDQCAFQcACaiADIApqIgdBA3RqIANBAWoiAyAPakECdEHQywBqKAIAtzkDAEEAIQJEAAAAAAAAAAAhACAKQQBKBEADQCAOIAJBA3RqKwMAIAVBwAJqIAcgAmtBA3RqKwMAoiAAoCEAIAJBAWoiAiAKRw0ACwsgBSADQQN0aiAAOQMAIAMgBEgNAAsgBCEDDAELCwJAIABBGCAGaxAMIgBEAAAAAAAAcEFmBEAgBUHgA2ogA0ECdGoCfwJ/IABEAAAAAAAAcD6iIhaZRAAAAAAAAOBBYwRAIBaqDAELQYCAgIB4CyICt0QAAAAAAABwwaIgAKAiAJlEAAAAAAAA4EFjBEAgAKoMAQtBgICAgHgLNgIAIANBAWohAwwBCwJ/IACZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4CyECIAshBgsgBUHgA2ogA0ECdGogAjYCAAtEAAAAAAAA8D8gBhAMIQACQCADQQBIDQAgAyECA0AgBSACIgRBA3RqIAAgBUHgA2ogAkECdGooAgC3ojkDACACQQFrIQIgAEQAAAAAAABwPqIhACAEDQALQQAhByADQQBIDQAgCEEAIAhBAEobIQYgAyEEA0AgBiAHIAYgB0kbIQsgAyAEayEIQQAhAkQAAAAAAAAAACEAA0AgAkEDdEGg4QBqKwMAIAUgAiAEakEDdGorAwCiIACgIQAgAiALRyEKIAJBAWohAiAKDQALIAVBoAFqIAhBA3RqIAA5AwAgBEEBayEEIAMgB0chAiAHQQFqIQcgAg0ACwtEAAAAAAAAAAAhACADQQBOBEAgAyECA0AgAiIEQQFrIQIgACAFQaABaiAEQQN0aisDAKAhACAEDQALCyAJIACaIAAgDRs5AwAgBSsDoAEgAKEhAEEBIQIgA0EASgRAA0AgACAFQaABaiACQQN0aisDAKAhACACIANHIQQgAkEBaiECIAQNAAsLIAkgAJogACANGzkDCCAFQbAEaiQAIAxBB3EhAyAJKwMAIQAgGkIAUwRAIAEgAJo5AwAgASAJKwMImjkDCEEAIANrIQMMAQsgASAAOQMAIAEgCSsDCDkDCAsgCUEwaiQAIAMLGAAgASAAKAJoNgIAIABBADYCaCAAKAJgC7xUAyF/JH4CfCAAIAEoAgA2AogRIAAoAgBBAkYEQCAAQYwRaiABKAIENgIACwJAIAArAzAiSEQAAAAAAAAAAGEEQCAAKAIgIQEMAQsgACAAKwM4IkkgSEQAAAAAAADwv6BlIgE2AiAgACBJRAAAAAAAAPA/RAAAAAAAAAAAIAEbIEihoDkDOAsgACAAQUBrKAIAIAFqQQN0IgE2AiQgACABIAAoAowEayAAKAIQbTYCkAQCQCAAIgEoAgAiBUUNACAFQQFrIQAgASgCECIEQQBKBEAgAUHg+ARqIQcDQCAAIQMgBEEASgRAIAEgA0ECdGpBiBFqIQpBACEFA0AgBUEBaiEGQQAhAANAIAogASADQYA2bGoiCSAGQYASbCIQakGw2QBqIgQgAEEHdCIIaiADIAEQECAKIAQgCEGAAXJqIgQgAyABEBAgBEEAIAQoAgRrNgIEIARBACAEKAIMazYCDCAEQQAgBCgCFGs2AhQgBEEAIAQoAhxrNgIcIARBACAEKAIkazYCJCAEQQAgBCgCLGs2AiwgBEEAIAQoAjRrNgI0IARBACAEKAI8azYCPCAEQQAgBCgCRGs2AkQgBEEAIAQoAkxrNgJMIARBACAEKAJUazYCVCAEQQAgBCgCXGs2AlwgBEEAIAQoAmRrNgJkIARBACAEKAJsazYCbCAEQQAgBCgCdGs2AnQgBEEAIAQoAnxrNgJ8IABBEEkhBCAAQQJqIQAgBA0ACyAFQYASbCINIAEgA0GAJGxqakGwxQFqIQxBACEFA0AgBUECdCIEIAlBsNkAaiIIIA1qaiIANAIAISQgCCAQaiAEaiIENAIAISUgADQCgAEhJiAANAKAAiEnIAA0AoADISggADQCgAQhKSAANAKABSEqIAA0AoAGISsgADQCgAchLCAAQYAIajQCACEtIABBgAlqNAIAIS4gAEGACmo0AgAhLyAAQYALajQCACEwIABBgAxqNAIAITEgAEGADWo0AgAhMiAAQYAOajQCACEzIABBgA9qNAIAITQgAEGAEGo0AgAhNSAAQYARajQCACE2IAQ0AoABITcgBDQCgAIhOCAENAKAAyE5IAQ0AoAEITogBDQCgAUhOyAENAKABiE8IAQ0AoAHIT0gBEGACGo0AgAhPiAEQYAJajQCACE/IARBgApqNAIAIUAgBEGAC2o0AgAhQSAEQYAMajQCACFCIARBgA1qNAIAIUMgBEGADmo0AgAhRCAEQYAPajQCACFFIARBgBBqNAIAIUYgBEGAEWo0AgAhR0ERIQQDQCAMIAVByABsaiIIIAQiAEECdGogByAAQZABbGoiBDQCjAEgR35CIIinIAQ0AogBIEZ+QiCIp2ogBDQChAEgRX5CIIinaiAENAKAASBEfkIgiKdqIAQ0AnwgQ35CIIinaiAENAJ4IEJ+QiCIp2ogBDQCdCBBfkIgiKdqIAQ0AnAgQH5CIIinaiAENAJsID9+QiCIp2ogBDQCaCA+fkIgiKdqIAQ0AmQgPX5CIIinaiAENAJgIDx+QiCIp2ogBDQCXCA7fkIgiKdqIAQ0AlggOn5CIIinaiAENAJUIDl+QiCIp2ogBDQCUCA4fkIgiKdqIAQ0AkwgN35CIIinaiAENAJIICV+QiCIp2ogBDQCRCA2fkIgiKdqIAQ0AkAgNX5CIIinaiAENAI8IDR+QiCIp2ogBDQCOCAzfkIgiKdqIAQ0AjQgMn5CIIinaiAENAIwIDF+QiCIp2ogBDQCLCAwfkIgiKdqIAQ0AiggL35CIIinaiAENAIkIC5+QiCIp2ogBDQCICAtfkIgiKdqIAQ0AhwgLH5CIIinaiAENAIYICt+QiCIp2ogBDQCFCAqfkIgiKdqIAQ0AhAgKX5CIIinaiAENAIMICh+QiCIp2ogBDQCCCAnfkIgiKdqIAQ0AgQgJn5CIIinaiAENAIAICR+QiCIp2o2AgAgAEEBayEEIAANAAsgBQRAIAhByABrIgAgADQCRCIkQoOoie4GfiAINAIAIiVCy4GU8fv/////AH58Qh+IPgJEIAggADQCQCImQpDthuMDfiAINAIEIidC+Nfzhgd+fEIfiD4CBCAIICRCtf7rjgR+ICVCg6iJ7gZ+fEIfiD4CACAAICZC+Nfzhgd+ICdC8JL5nPz/////AH58Qh+IPgJAIAggADQCPCIkQp6B88ACfiAINAIIIiVC+ty1zAd+fEIfiD4CCCAAICRC+ty1zAd+ICVC4v6Mv/3/////AH58Qh+IPgI8IAAgADQCOCIkQqeB9e4HfiAINAIMIiVC+6Lcxf7/////AH58Qh+IPgI4IAggJEKF3aO6AX4gJUKngfXuB358Qh+IPgIMIAAgADQCNCIkQrbBtPsHfiAINAIQIiVCrfyTn///////AH58Qh+IPgI0IAggJELTg+zgAH4gJUK2wbT7B358Qh+IPgIQIAAgADQCMCIkQr/8kf8HfiAINAIUIiVCyceG1v//////AH58Qh+IPgIwIAggJEK3uPkpfiAlQr/8kf8HfnxCH4g+AhQgACAANAIsIiRC4uTy/wd+IAg0AhgiJULH+7rx//////8AfnxCH4g+AiwgCCAkQrmExQ5+ICVC4uTy/wd+fEIfiD4CGCAIIAA0AigiJEKj++QDfiAINAIcIiVCk43//wd+fEIfiD4CHCAAICRCk43//wd+ICVC3YSb/P//////AH58Qh+IPgIoCyAFQQFqIgVBIEcNAAsgASgCECIEIAYiBUoNAAsLIAEgA0GANmxqQbDZAGoiACAAIARBgBJsakGAEhAEIANBAWshACADDQALDAELIAVBA3EiAwRAA0AgASAAQYA2bGpBsNkAaiIIIAggBEGAEmxqQYASEAQgAEEBayEAIAZBAWoiBiADRw0ACwsgBUEESQ0AA0AgASAAQYA2bGoiBUGw2QBqIgYgBiAEQYASbCIDakGAEhAEIAVBsCNqIgYgAyAGakGAEhAEIAVB0BJrIgYgAyAGakGAEhAEIAVB0MgAayIFIAMgBWpBgBIQBCAAQQNGIQUgAEEEayEAIAVFDQALCyMAQaAFayIVJAACQCABIgMoAgAiEEUNACADKAIQIgFBAEwNACADQbgJaiEZIBBB3ABsQYwBaiEaA0AgEEEBayEQIAFBAEoEQCAaIBdBpH9saiEdIBBBqAFsIRggAyAQQQR0aiEMQQAhDQNAIANBADYCvLECIAMgAyAQQYAkbGogDUGAEmxqIg9BsMUBaiIFNgK4jQIgAyAdIA1BuAFsIghqaiEJQb8EIQADQCADIAAiAUECdCIAaiIGQbyfAmogACAFaigCACIEIARBH3UiAHMgAGsiADYCACAGQbyNAmogBKwiJCAkfkKAgICABHxCH4g+AgAgAygCvLECIgYgAEgEQCADIAA2AryxAiAAIQYLIAFBAWshACABDQALIAMgCGogEEHcAGxqIhFBFTYC1AEgFSANQdACbCISIBhqakGoARAHAkAgAygCCEEDRw0AIAMoAkghBCADIA1BAnRqIghBmLQCaiAGNgIAQcAEIQFBACEFA0AgAUECdCEAIANBvI0CaiIGIAFBBGsiAUECdGooAgBBCnUgACAGaiIAQQxrKAIAQQp1IABBBGsoAgBBCnUgBWogAEEIaygCAEEKdWpqaiEFIAENAAsgBEHcAGxBgDVqIQsgCEHAsQJqAn9BACAFRQ0AGiAFt0RoXxwAAACgPqIQDkScRK3+Qi7mP6MiSJlEAAAAAAAA4EFjBEAgSKoMAQtBgICAgHgLNgIAIAsoAlQhBUEUIQADQEEAIQoCf0EAIAUgCyAAIghBAnQiE2ooAgAiBEwNABogBSAEayIHQQNxIQ5BACEGQQAhACAFIAQiAUF/c2pBA08EQCAHQXxxIRRBACEFA0AgAyABQQJ0aiIHQciNAmooAgBBCnUgB0G8jQJqKAIAQQp1IABqIAdBwI0CaigCAEEKdWogB0HEjQJqKAIAQQp1amohACABQQRqIQEgBUEEaiIFIBRHDQALCyAOBEADQCADIAFBAnRqQbyNAmooAgBBCnUgAGohACABQQFqIQEgBkEBaiIGIA5HDQALC0EAIABFDQAaIAC3RGhfHAAAAKA+ohAORJxErf5CLuY/oyJImUQAAAAAAADgQWMEQCBIqgwBC0GAgICAeAshACADIA1B1ABsaiATaiIBQcixAmogADYCAAJAIBIgFWogGGogCEEDdGorAwAiSEQAAAAAAAAAAGENACBIEA5EnESt/kIu5j+jIkiZRAAAAAAAAOBBYwRAIEiqIQoMAQtBgICAgHghCgsgAUHwsgJqIAo2AgAgCEEBayEAIAQhBSAIDQALIA1BAUcNACADKAKYtAJBAEdBA0ECIAMoApy0AhtqIAMoAsCxAiADKALEsQJrIgAgAEEfdSIAcyAAa0EKSWogAygC0LECIAMoAqSyAmsiACAAQR91IgBzIABrIgAgAygC1LECIAMoAqiyAmsiASABQR91IgFzIAFrIgEgAygC5LECIAMoAriyAmsiBCAEQR91IgRzIARrIgQgAygClLICIAMoAuiyAmsiBSAFQR91IgVzIAVrIAMoApiyAiADKALssgJrIgUgBUEfdSIFcyAFa2ogAygCkLICIAMoAuSyAmsiBSAFQR91IgVzIAVraiADKAKMsgIgAygC4LICayIFIAVBH3UiBXMgBWtqIAMoAoiyAiADKALcsgJrIgUgBUEfdSIFcyAFa2ogAygChLICIAMoAtiyAiIFayIGIAZBH3UiBnMgBmtqIAMoAoCyAiADKALUsgJrIgYgBkEfdSIGcyAGa2ogAygC/LECIAMoAtCyAmsiBiAGQR91IgZzIAZraiADKAL4sQIiBiADKALMsgJrIgggCEEfdSIIcyAIa2ogAygC9LECIAMoAsiyAiIIayIKIApBH3UiCnMgCmtqIAMoAvCxAiADKALEsgIiCmsiByAHQR91IgdzIAdraiADKALssQIgAygCwLICayIHIAdBH3UiB3MgB2tqIAMoAuixAiIHIAMoAryyAmsiCyALQR91IgtzIAtramogAygC4LECIAMoArSyAiILayIOIA5BH3UiDnMgDmtqIAMoAtyxAiADKAKwsgIiDmsiEiASQR91IhJzIBJraiADKALYsQIiEiADKAKssgJrIhMgE0EfdSITcyATa2pqaiADKALMsQIgAygCoLICIhNrIhQgFEEfdSIUcyAUa2ogAygCyLECIhQgAygCnLICayIWIBZBH3UiFnMgFmtqQeQASWpBBkcEQCAMQgA3AnwgDEIANwKEAQwBCyAMQQA2AnwgDCAAIAFqIAMoAtyxAiAOayIAIABBH3UiAHMgAGtqIBIgAygCrLICayIAIABBH3UiAHMgAGtqIAMoAsyxAiATayIAIABBH3UiAHMgAGtqIBQgAygCnLICayIAIABBH3UiAHMgAGtqQQpJIAMoAoCzAiADKALUswJrIgAgAEEfdSIAcyAAayADKAKEswIgAygC2LMCayIAIABBH3UiAHMgAGtqIAMoAvyyAiADKALQswJrIgAgAEEfdSIAcyAAa2ogAygC+LICIAMoAsyzAmsiACAAQR91IgBzIABraiADKAL0sgIgAygCyLMCayIAIABBH3UiAHMgAGtqIAMoAvCyAiADKALEswJrIgAgAEEfdSIAcyAAa2pBCklxNgJ8IAxBADYCgAEgDCADKALwsQIgCmsiACAAQR91IgBzIABrIARqIAMoAuyxAiADKALAsgJrIgAgAEEfdSIAcyAAa2ogByADKAK8sgJrIgAgAEEfdSIAcyAAa2ogAygC4LECIAtrIgAgAEEfdSIAcyAAa2pBCkkgAygClLMCIAMoAuizAmsiACAAQR91IgBzIABrIAMoApizAiADKALsswJrIgAgAEEfdSIAcyAAa2ogAygCkLMCIAMoAuSzAmsiACAAQR91IgBzIABraiADKAKMswIgAygC4LMCayIAIABBH3UiAHMgAGtqIAMoAoizAiADKALcswJrIgAgAEEfdSIAcyAAa2pBCklxNgKAASAMQQA2AoQBIAwgAygCgLICIAMoAtSyAmsiACAAQR91IgBzIABrIAMoAoSyAiAFayIAIABBH3UiAHMgAGtqIAMoAvyxAiADKALQsgJrIgAgAEEfdSIAcyAAa2ogBiADKALMsgJrIgAgAEEfdSIAcyAAa2ogAygC9LECIAhrIgAgAEEfdSIAcyAAa2pBCkkgAygCqLMCIAMoAvyzAmsiACAAQR91IgBzIABrIAMoAqyzAiADKAKAtAJrIgAgAEEfdSIAcyAAa2ogAygCpLMCIAMoAvizAmsiACAAQR91IgBzIABraiADKAKgswIgAygC9LMCayIAIABBH3UiAHMgAGtqIAMoApyzAiADKALwswJrIgAgAEEfdSIAcyAAa2pBCklxNgKEASAMQQA2AogBIAwgAygClLICIAMoAuiyAmsiACAAQR91IgBzIABrIAMoApiyAiADKALssgJrIgAgAEEfdSIAcyAAa2ogAygCkLICIAMoAuSyAmsiACAAQR91IgBzIABraiADKAKMsgIgAygC4LICayIAIABBH3UiAHMgAGtqIAMoAoiyAiADKALcsgJrIgAgAEEfdSIAcyAAa2pBCkkgAygCvLMCIAMoApC0AmsiACAAQR91IgBzIABrIAMoAsCzAiADKAKUtAJrIgAgAEEfdSIAcyAAa2ogAygCuLMCIAMoAoy0AmsiACAAQR91IgBzIABraiADKAK0swIgAygCiLQCayIAIABBH3UiAHMgAGtqIAMoArCzAiADKAKEtAJrIgAgAEEfdSIAcyAAa2pBCklxNgKIAQtB/x8gAygCkAQgAygCAG0iBCAEQf8fThshACADKAK0jQIiBQRAQQAhAUH/HyAAISMgAygCsI0CIgYgBUEDdEF2bWoiBSEiAn8gDCANQQN0akGQEWorAwBEzczMzMzMCECiIAS3oSJImUQAAAAAAADgQWMEQCBIqgwBC0GAgICAeAsiBEHlAE4EQCAGQQZsQQptIgEgBCABIARIGyEBCyAjICIgASABIAVIG2oiACAAQf8fThshAAsgGSANQbABbGogEEHYAGxqQdgAEAcgAyANQbgCbGogEEGcAWxqQZgMakGcARAHIAlCADcCCCAJQgA3AgAgEUIANwKsASARQQA2AqQBIBFCADcCnAEgEUIA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BQAHAAEABgABAAEAAAABAwYHAwMGBwYGBwgHBgcIBwADAAUAAQAGAAIAAwACAAUABAAEAAEAAwADAAIAAAADAwUHAwIEBQQEBQYGBQYHAQACAAoAEwAQAAoAAwADAAcACgAFAAMACwAEAA0AEQAIAAQADAALABIADwALAAIABwAGAAkADgADAAEABgAEAAUAAwACAEGACgskAQMGCAgJAwQGBwcIBgUHCAgJBwcICQkJBwcICQkKCAgJCgoKAEGwCgtFAwAEAAYAEgAMAAUABQABAAIAEAAJAAMABwADAAUADgAHAAMAEwARAA8ADQAKAAQADQAFAAgACwAFAAEADAAEAAQAAQABAEGACwskAgMGCAgJAwIECAgIBgQGCAgJCAgICQkKCAcICQoKCQgJCQsLAEGwCwtFBwAFAAkADgAPAAcABgAEAAUABQAGAAcABwAGAAgACAAIAAUADwAGAAkACgAFAAEACwAHAAkABgAEAAEADgAEAAYAAgAGAEGADAskAwMFBggJAwMEBQYIBAQFBgcIBgUGBwcIBwYHBwgJCAcICAkJAEGwDAugHQEAAgAKABcAIwAeAAwAEQADAAMACAAMABIAFQAMAAcACwAJAA8AFQAgACgAEwAGAA4ADQAWACIALgAXABIABwAUABMAIQAvABsAFgAJAAMAHwAWACkAGgAVABQABQADAA4ADQAKAAsAEAAGAAUAAQAJAAgABwAIAAQABAACAAAAAQMGCAkJCQoDBAYHCAkICAYGBwgJCgkJBwcICQoKCQoICAkKCgoKCgkJCgoLCwoLCAgJCgoKCwsJCAkKCgsLCwMABAAKABgAIgAhABUADwAFAAMABAAKACAAEQALAAoACwAHAA0AEgAeAB8AFAAFABkACwATADsAGwASAAwABQAjACEAHwA6AB4AEAAHAAUAHAAaACAAEwARAA8ACAAOAA4ADAAJAA0ADgAJAAQAAQALAAQABgAGAAYAAwACAAAAAgMFBwgJCAkDAwQGCAgHCAUFBgcICQgIBwYHCQgKCAkICAgJCQoJCggICQoKCwoLCAcHCAkKCgoIBwgJCgoKCgkABgAQACEAKQAnACYAGgAHAAUABgAJABcAEAAaAAsAEQAHAAsADgAVAB4ACgAHABEACgAPAAwAEgAcAA4ABQAgAA0AFgATABIAEAAJAAUAKAARAB8AHQARAA0ABAACABsADAALAA8ACgAHAAQAAQAbAAwACAAMAAYAAwABAAAABAMFBwgJCQkDAwQFBwcICAUEBQYHCAcIBgUGBgcICAgHBgcHCAgICQgHCAgICQgJCAcHCAgJCQoJCAgJCQkJCgEABQAOABUAIgAzAC4ARwAqADQARAA0AEMALAArABMAAwAEAAwAEwAfABoALAAhAB8AGAAgABgAHwAjABYADgAPAA0AFwAkADsAMQBNAEEAHQAoAB4AKAAbACEAKgAQABYAFAAlAD0AOABPAEkAQAArAEwAOAAlABoAHwAZAA4AIwAQADwAOQBhAEsAcgBbADYASQA3ACkAMAA1ABcAGAA6ABsAMgBgAEwARgBdAFQATQA6AE8AHQBKADEAKQARAC8ALQBOAEoAcwBeAFoATwBFAFMARwAyADsAJgAkAA8ASAAiADgAXwBcAFUAWwBaAFYASQBNAEEAMwAsACsAKgArABQAHgAsADcATgBIAFcATgA9AC4ANgAlAB4AFAAQADUAGQApACUALAA7ADYAUQBCAEwAOQA2ACUAEgAnAAsAIwAhAB8AOQAqAFIASABQAC8AOgA3ABUAFgAaACYAFgA1ABkAFwAmAEYAPAAzACQANwAaACIAFwAbAA4ACQAHACIAIAAcACcAMQBLAB4ANAAwACgANAAcABIAEQAJAAUALQAVACIAQAA4ADIAMQAtAB8AEwAMAA8ACgAHAAYAAwAwABcAFAAnACQAIwA1ABUAEAAXAA0ACgAGAAEABAACABAADwARABsAGQAUAB0ACwARAAwAEAAIAAEAAQAAAAEAAQQGBwgJCQoJCgsLDAwNDQMEBgcICAkJCQkKCgsMDAwGBgcICQkKCgkKCgsLDA0NBwcICQkKCgoKCwsLCwwNDQgHCQkKCgsLCgsLDAwNDQ4JCAkKCgoLCwsLDAsNDQ4OCQkKCgsLCwsLDAwMDQ0ODgoJCgsLCwwMDAwNDQ0OEBAJCAkKCgsLDAwMDA0NDg8PCgkKCgsLCw0MDQ0ODg4QDwoKCgsLDAwNDA0ODQ4PEBELCgoLDAwMDA0NDQ4PDw8QCwsLDAwNDA0ODg8PDxAQEAwLDA0NDQ4ODg4ODxAPEBANDAwNDQ0PDg4RDw8PERAQDAwNDg4ODw4PDxAQExITEAcADAASADUALwBMAHwAbABZAHsAbAB3AGsAUQB6AD8ADQAFABAAGwAuACQAPQAzACoARgA0AFMAQQApADsAJAATABEADwAYACkAIgA7ADAAKABAADIATgA+AFAAOAAhAB0AHAAZACsAJwA/ADcAXQBMADsAXQBIADYASwAyAB0ANAAWACoAKABDADkAXwBPAEgAOQBZAEUAMQBCAC4AGwBNACUAIwBCADoANABbAEoAPgAwAE8APwBaAD4AKAAmAH0AIAA8ADgAMgBcAE4AQQA3AFcARwAzAEkAMwBGAB4AbQA1ADEAXgBYAEsAQgB6AFsASQA4ACoAQAAsABUAGQBaACsAKQBNAEkAPwA4AFwATQBCAC8AQwAwADUAJAAUAEcAIgBDADwAOgAxAFgATABDAGoARwA2ACYAJwAXAA8AbQA1ADMALwBaAFIAOgA5ADAASAA5ACkAFwAbAD4ACQBWACoAKAAlAEYAQAA0ACsARgA3ACoAGQAdABIACwALAHYARAAeADcAMgAuAEoAQQAxACcAGAAQABYADQAOAAcAWwAsACcAJgAiAD8ANAAtAB8ANAAcABMADgAIAAkAAwB7ADwAOgA1AC8AKwAgABYAJQAYABEADAAPAAoAAgABAEcAJQAiAB4AHAAUABEAGgAVABAACgAGAAgABgACAAAAAwQFBwcICQkJCgoLCwsMDQQDBQYHBwgICAkJCgoKCwsFBQUGBwcICAgJCQoKCwsLBgYGBwcICAkJCQoKCgsLCwcGBwcICAkJCQkKCgoLCwsIBwcICAgJCQkJCgoLCwsMCQcICAgJCQkJCgoKCwsMDAkICAkJCQkKCgoKCgsLCwwJCAgJCQkJCgoKCgsLDAwMCQgJCQkJCgoKCwsLCwwMDAoJCQkKCgoKCgsLCwsMDQwKCQkJCgoKCgsLCwsMDAwNCwoJCgoKCwsLCwsLDAwNDQsKCgoKCwsLCwwMDAwMDQ0MCwsLCwsLCwwMDAwNDQwNDAsLCwsLCwwMDAwMDQ0NDQEABQAOACwASgA/AG4AXQCsAJUAigDyAOEAwwB4AREAAwAEAAwAFAAjAD4ANQAvAFMASwBEAHcAyQBrAM8ACQAPAA0AFwAmAEMAOgBnAFoAoQBIAH8AdQBuANEAzgAQAC0AFQAnAEUAQAByAGMAVwCeAIwA/ADUAMcAgwFtARoASwAkAEQAQQBzAGUAswCkAJsACAH2AOIAiwF+AWoBCQBCAB4AOwA4AGYAuQCtAAkBjgD9AOgAkAGEAXoBvQEQAG8ANgA0AGQAuACyAKAAhQABAfQA5ADZAIEBbgHLAgoAYgAwAFsAWAClAJ0AlAAFAfgAlwGNAXQBfAF5A3QDCABVAFQAUQCfAJwAjwAEAfkAqwGRAYgBfwHXAskCxAIHAJoATABJAI0AgwAAAfUAqgGWAYoBgAHfAmcBxgJgAQsAiwCBAEMAfQD3AOkA5QDbAIkB5wLhAtACdQNyA7cBBADzAHgAdgBzAOMA3wCMAeoC5gLgAtECyALCAt8AtAEGAMoA4ADeANoA2ACFAYIBfQFsAXgDuwHDArgBtQHABgQA6wLTANIA0AByAXsB3gLTAsoCxwZzA20DbAODDWEDAgB5AXEBZgC7ANYC0gJmAccCxQJiA8YGZwOCDWYDsgEAAAwACgAHAAsACgARAAsACQANAAwACgAHAAUAAwABAAMAAQQGCAkJCgoLCwsMDAwNCQMEBgcICQkJCgoKCwwLDAgGBgcICQkKCgsKCwsLDAwJCAcICQkKCgoLCwwMDA0NCgkICQkKCgsLCwwMDA0NDQkJCAkJCgsLDAsMDA0NDQ4KCgkJCgsLCwsMDAwMDQ0OCgoJCgoLCwsMDA0NDQ0PDwoKCgoLCwsMDA0NDQ0ODg4KCwoKCwsMDA0NDQ0ODQ4NCwsLCgsMDAwMDQ4ODg8PDgoMCwsLDAwNDg4ODg4ODQ4LDAwMDAwNDQ0NDw4ODg4QCw4MDAwNDQ4ODhAPDw8RDwsNDQsMDg4NDg4PEA8RDw4LCQgICQkKCgoLCwsLCwsLCA8ADQAuAFAAkgAGAfgAsgGqAZ0CjQKJAm0CBQIIBFgADgAMABUAJgBHAIIAegDYANEAxgBHAVkBPwEpARcBKgAvABYAKQBKAEQAgAB4AN0AzwDCALYAVAE7AScBHQISAFEAJwBLAEYAhgB9AHQA3ADMAL4AsgBFATcBJQEPARAAkwBIAEUAhwB/AHYAcADSAMgAvABgAUMBMgEdARwCDgAHAUIAgQB+AHcAcgDWAMoAwAC0AFUBPQEtARkBBgEMAPkAewB5AHUAcQDXAM4AwwC5AFsBSgE0ASMBEAEIAgoAswFzAG8AbQDTAMsAxAC7AGEBTAE5ASoBGwETAn0BEQCrAdQA0ADNAMkAwQC6ALEAqQBAAS8BHgEMAQICeQEQAE8BxwDFAL8AvQC1AK4ATQFBATEBIQETAQkCewFzAQsAnAK4ALcAswCvAFgBSwE6ATABIgEVARICfwF1AW4BCgCMAloBqwCoAKQAPgE1ASsBHwEUAQcBAQJ3AXABagEGAIgCQgE8ATgBMwEuASQBHAENAQUBAAJ4AXIBbAFnAQQAbAIsASgBJgEgARoBEQEKAQMCfAF2AXEBbQFpAWUBAgAJBBgBFgESAQsBCAEDAX4BegF0AW8BawFoAWYBZAEAACsAFAATABEADwANAAsACQAHAAYABAAHAAUAAwABAAMABAQGBwgJCQoKCwsLCwsMCQQEBQYHCAgJCQkKCgoKCggGBQYHBwgICQkJCQoKCgsHBwYHBwgICAkJCQkKCgoKBwgHBwgICAgJCQkKCgoKCwcJBwgICAgJCQkJCgoKCgoHCQgICAgJCQkJCgoKCgoLBwoICAgJCQkJCgoKCgoLCwgKCQkJCQkJCQkKCgoKCwsICgkJCQkJCQoKCgoKCwsLCAsJCQkJCgoKCgoKCwsLCwgLCgkJCQoKCgoKCgsLCwsICwoKCgoKCgoKCgsLCwsLCAsKCgoKCgoKCwsLCwsLCwgMCgoKCgoKCwsLCwsLCwsICAcHBwcHBwcHBwcICAgIBAEABQAEAAUABgAFAAQABAAHAAMABgAAAAcAAgADAAEAAQQEBQQGBQYEBQUGBQYGBg8ADgANAAwACwAKAAkACAAHAAYABQAEAAMAAgABAAAABAQEBAQEBAQEBAQEBAQEBABB6CkLBQIAAAACAEH5KQsMBAAACAQAAAMAAAADAEGQKgsNEAQAACIEAAADAAAAAwBBqCoLBjAEAABCBABByCoLBQQAAAAEAEHYKgsNUAQAAHAEAAAEAAAABABB8CoLDYAEAACgBAAABgAAAAYAQYgrCw2wBAAAAAUAAAYAAAAGAEGgKwsNMAUAAIAFAAAGAAAABgBBuCsLDbAFAAAABgAACAAAAAgAQdArCw0wBgAAsAYAAAgAAAAIAEHoKwsN8AYAAHAHAAAIAAAACABBgCwLDbAHAAAwCAAAEAAAABAAQZgsCwZwCAAAcAoAQbgsCwUQAAAAEABByCwLjQNwCwAAcA0AABAAAAAQAAAAAQAAAAEAAABwDgAAcBAAABAAAAAQAAAAAgAAAAMAAABwDgAAcBAAABAAAAAQAAAAAwAAAAcAAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwDgAAcBAAABAAAAAQAAAABgAAAD8AAABwDgAAcBAAABAAAAAQAAAACAAAAP8AAABwDgAAcBAAABAAAAAQAAAACgAAAP8DAABwDgAAcBAAABAAAAAQAAAADQAAAP8fAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwEQAAcBMAABAAAAAQAAAABQAAAB8AAABwEQAAcBMAABAAAAAQAAAABgAAAD8AAABwEQAAcBMAABAAAAAQAAAABwAAAH8AAABwEQAAcBMAABAAAAAQAAAACAAAAP8AAABwEQAAcBMAABAAAAAQAAAACQAAAP8BAABwEQAAcBMAABAAAAAQAAAACwAAAP8HAABwEQAAcBMAABAAAAAQAAAADQAAAP8fAABwEQAAcBMAAAEAAAAQAEHgLwsNcBQAAJAUAAABAAAAEABB+C8LBqAUAADAFABBrDALiQEBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAMAAAAEAAAABAAAAAUAAAAEAAAABQAAAAQAAAAGAAAABQAAAAYAAAAFAAAABgAAAAUAAAAHAAAABgAAAAcAAAAGAAAABwBBwDELDQEAAAD/////AQAAAAIAQeAxC5IBAwAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAMAAAADAAAAAwAAAAQAAAAEAAAAAAAAAAEAAAACAAAAAwAAAAAAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAACAAAAAwAAAESsAACAuwAAAH0AACJWAADAXQAAgD4AABErAADgLgAAQB8AQYAzC7oI/////////////////////wgAAAD/////CAAAACAAAAAQAAAA/////xAAAAAoAAAAGAAAAP////8YAAAAMAAAACAAAAD/////IAAAADgAAAAoAAAA/////ygAAABAAAAAMAAAAP////8wAAAAUAAAADgAAAD/////OAAAAGAAAABAAAAA/////0AAAABwAAAA//////////9QAAAAgAAAAP//////////YAAAAKAAAAD//////////3AAAADAAAAA//////////+AAAAA4AAAAP//////////kAAAAAABAAD//////////6AAAABAAQAA/////////////////////wAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAeAAAAJAAAACwAAAA0AAAAPgAAAEoAAABaAAAAbgAAAIYAAACiAAAAxAAAAO4AAAAgAQAAVgEAAKIBAABAAgAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAB4AAAAkAAAAKgAAADIAAAA8AAAASAAAAFgAAABqAAAAgAAAAJwAAAC+AAAA5gAAABQBAABKAQAAgAEAAEACAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABSAAAAZgAAAH4AAACcAAAAwgAAAPAAAAAoAQAAbAEAAMABAAAmAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAcgAAAIgAAACiAAAAwgAAAOgAAAAWAQAASgEAAIoBAADQAQAAHAIAAEACAAAAAAAABgAAAAwAAAASAAAAGAAAAB4AAAAkAAAALAAAAC0AAABCAAAAUAAAAGAAAAB0AAAAjAAAAKgAAADIAAAA7gAAAPgAAABQAQAAjAEAANABAAAKAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAdAAAAIwAAACoAAAAyAAAAO4AAAAcAQAAUAEAAIwBAADQAQAACgIAAEACAAAAAAAADAAAABgAAAAkAAAAMAAAADwAAABIAAAAWAAAAGwAAACEAAAAoAAAAMAAAADoAAAAGAEAAFABAACQAQAA3AEAADYCAAA4AgAAOgIAADwCAAA+AgAAQAIAQdw7C8oPnff//533//+d9///nff//533//+d9///Ou///zrv//86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";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["c"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["o"];addOnInit(Module["asm"]["d"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort("invalid type for getValue: "+type)}return null}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort("invalid type for setValue: "+type)}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ASSERTIONS=false;var decodeBase64=typeof atob=="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output};function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE=="boolean"&&ENVIRONMENT_IS_NODE){var buf=Buffer.from(s,"base64");return new Uint8Array(buf["buffer"],buf["byteOffset"],buf["byteLength"])}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}var asmLibraryArg={"b":_emscripten_memcpy_big,"a":_emscripten_resize_heap};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["d"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["e"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["f"]).apply(null,arguments)};var _shine_check_config=Module["_shine_check_config"]=function(){return(_shine_check_config=Module["_shine_check_config"]=Module["asm"]["g"]).apply(null,arguments)};var _shine_samples_per_pass=Module["_shine_samples_per_pass"]=function(){return(_shine_samples_per_pass=Module["_shine_samples_per_pass"]=Module["asm"]["h"]).apply(null,arguments)};var _shine_encode_buffer=Module["_shine_encode_buffer"]=function(){return(_shine_encode_buffer=Module["_shine_encode_buffer"]=Module["asm"]["i"]).apply(null,arguments)};var _shine_flush=Module["_shine_flush"]=function(){return(_shine_flush=Module["_shine_flush"]=Module["asm"]["j"]).apply(null,arguments)};var _shine_close=Module["_shine_close"]=function(){return(_shine_close=Module["_shine_close"]=Module["asm"]["k"]).apply(null,arguments)};var _shine_js_int16_len=Module["_shine_js_int16_len"]=function(){return(_shine_js_int16_len=Module["_shine_js_int16_len"]=Module["asm"]["l"]).apply(null,arguments)};var _shine_js_ptr_len=Module["_shine_js_ptr_len"]=function(){return(_shine_js_ptr_len=Module["_shine_js_ptr_len"]=Module["asm"]["m"]).apply(null,arguments)};var _shine_js_init=Module["_shine_js_init"]=function(){return(_shine_js_init=Module["_shine_js_init"]=Module["asm"]["n"]).apply(null,arguments)};Module["setValue"]=setValue;Module["getValue"]=getValue;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();var ShineModule;var int16Len;var ptrLen;function shineInit(){int16Len=ShineModule._shine_js_int16_len();ptrLen=ShineModule._shine_js_ptr_len()}function Shine(args){if(ShineModule._shine_check_config(args.samplerate,args.bitrate)<0)throw"Invalid configuration";var stereoMode;if(!args.stereoMode){if(args.channels===1){stereoMode=Shine.MONO}else{stereoMode=Shine.JOINT_STEREO}}else{stereoMode=args.stereoMode}this._handle=ShineModule._shine_js_init(args.channels,args.samplerate,stereoMode,args.bitrate);this._channels=args.channels;this._samples_per_pass=ShineModule._shine_samples_per_pass(this._handle);this._buffer=ShineModule._malloc(this._channels*ptrLen);this._pcm=new Array(this._channels);this._rem=new Array(this._channels);this._written=ShineModule._malloc(int16Len);var _tmp,chan;for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array;_tmp=ShineModule._malloc(this._samples_per_pass*int16Len);ShineModule.setValue(this._buffer+chan*ptrLen,_tmp,"*");this._pcm[chan]=ShineModule.HEAP16.subarray(_tmp/int16Len,_tmp/int16Len+this._samples_per_pass)}return this}Shine.checkConfig=function(samplerate,bitrate){return ShineModule._shine_check_config(samplerate,bitrate)>=0};Shine.prototype._encodePass=function(data){if(!this._handle)throw"Closed";var chan;for(chan=0;chan<this._channels;chan++)this._pcm[chan].set(data[chan]);var _buf=ShineModule._shine_encode_buffer(this._handle,this._buffer,this._written);var written=ShineModule.getValue(this._written,"i16");return ShineModule.HEAPU8.subarray(_buf,_buf+written)};function concat(ctr,a,b){if(typeof b==="undefined"){return a}var ret=new ctr(a.length+b.length);ret.set(a);ret.subarray(a.length).set(b);return ret}function clip(x){return x>1?1:x<-1?-1:x}function convertFloat32(buf){var ret=new Array(buf.length);var samples=buf[0].length;var chan,i;for(chan=0;chan<buf.length;chan++){ret[chan]=new Int16Array(samples);for(i=0;i<samples;i++){ret[chan][i]=parseInt(clip(buf[chan][i])*32767)}}return ret}Shine.prototype.encode=function(data){if(data.length!=this._channels)throw"Invalid data";var encoded=new Uint8Array;var tmp=new Array(this._channels);if(data[0]instanceof Float32Array){data=convertFloat32(data)}var chan;for(chan=0;chan<this._channels;chan++){tmp[chan]=new Float32Array;this._rem[chan]=concat(Int16Array,this._rem[chan],data[chan])}var i,enc;for(i=0;i<this._rem[0].length;i+=this._samples_per_pass){for(chan=0;chan<this._channels;chan++){tmp[chan]=this._rem[chan].subarray(i,i+this._samples_per_pass)}if(tmp[0].length<this._samples_per_pass){break}else{enc=this._encodePass(tmp);if(enc.length>0){encoded=concat(Uint8Array,encoded,enc)}}}if(tmp[0].length<this._samples_per_pass){this._rem=tmp}else{for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array}}return encoded};Shine.prototype.close=function(){if(!this._handle){throw"Closed"}var _buf=ShineModule._shine_flush(this._handle,this._written);var written=ShineModule.getValue(this._written,"i16");var encoded=new Uint8Array(written);encoded.set(ShineModule.HEAPU8.subarray(_buf,_buf+written));ShineModule._free(this._written);ShineModule._shine_close(this._handle);this._handle=null;var chan;for(chan=0;chan<this._channels;chan++){ShineModule._free(ShineModule.getValue(this._buffer+chan*ptrLen,"*"))}ShineModule._free(this._buffer);return encoded};Shine.initialized=new Promise(function(resolve){Module["onRuntimeInitialized"]=function(){ShineModule=Module;shineInit();resolve()}});Module["Shine"]=Shine;Module["StereoMode"]={0:"STEREO",1:"JOINT_STEREO",2:"DUAL_CHANNEL",3:"MONO",STEREO:0,JOINT_STEREO:1,DUAL_CHANNEL:2,MONO:3};
-diff --git a/js/libshine.d.ts b/js/libshine.d.ts
-new file mode 100644
-index 0000000..8f00edc
---- /dev/null
-+++ b/js/libshine.d.ts
-@@ -0,0 +1,19 @@
-+export type Data = Int16Array | Float32Array;
-+export declare enum StereoMode {
-+ STEREO = 0,
-+ JOINT_STEREO = 1,
-+ DUAL_CHANNEL = 2,
-+ MONO = 3
-+}
-+export class Shine {
-+ static initialized: Promise<void>;
-+ static checkConfig(samplerate: number, bitrate: number): boolean;
-+ constructor(args: {
-+ samplerate: number;
-+ bitrate: number;
-+ channels: number;
-+ stereoMode?: StereoMode;
-+ });
-+ encode(data: Data[]): Uint8Array;
-+ close(): Uint8Array;
-+}
-diff --git a/js/package-lock.json b/js/package-lock.json
-new file mode 100644
-index 0000000..38b374d
---- /dev/null
-+++ b/js/package-lock.json
-@@ -0,0 +1,18 @@
-+{
-+ "name": "@toots/shine.js",
-+ "version": "1.0.1",
-+ "lockfileVersion": 3,
-+ "requires": true,
-+ "packages": {
-+ "": {
-+ "name": "@toots/shine.js",
-+ "version": "1.0.1",
-+ "license": "LGPL-2.0-only"
-+ },
-+ "stubs": {
-+ "version": "1.0.0",
-+ "extraneous": true,
-+ "license": "ISC"
-+ }
-+ }
-+}
-diff --git a/js/package.json b/js/package.json
-new file mode 100644
-index 0000000..0c83619
---- /dev/null
-+++ b/js/package.json
-@@ -0,0 +1,24 @@
-+{
-+ "name": "@toots/shine.js",
-+ "version": "1.0.3",
-+ "description": "Shine fixed-point mp3 encoder",
-+ "main": "dist/libshine_node.js",
-+ "browser": "dist/libshine_browser.js",
-+ "types": "libshine.d.ts",
-+ "repository": {
-+ "type": "git",
-+ "url": "git+https://github.com/toots/shine.git"
-+ },
-+ "keywords": [
-+ "mp3",
-+ "encoder",
-+ "wasm",
-+ "fixed-point"
-+ ],
-+ "author": "Romain Beauxis <toots@rastageeks.org>",
-+ "license": "LGPL-2.0-only",
-+ "bugs": {
-+ "url": "https://github.com/toots/shine/issues"
-+ },
-+ "homepage": "https://github.com/toots/shine#readme"
-+}
-diff --git a/js/src/libshine_browser_wrapper.js b/js/src/libshine_browser_wrapper.js
-new file mode 100644
-index 0000000..f0ef04e
---- /dev/null
-+++ b/js/src/libshine_browser_wrapper.js
-@@ -0,0 +1,10 @@
-+var createModule = require("./libshine_browser_stubs").default;
-+
-+Shine.initialized = (createModule()).then(function (Module) {
-+ ShineModule = Module;
-+ shineInit();
-+});
-+
-+module.exports.Shine = Shine;
-+
-+module.exports.StereoMode = StereoMode;
-diff --git a/js/src/post.js b/js/src/libshine_class.js
-similarity index 57%
-rename from js/src/post.js
-rename to js/src/libshine_class.js
-index f6a07e6..5d88d9e 100644
---- a/js/src/post.js
-+++ b/js/src/libshine_class.js
-@@ -1,50 +1,64 @@
- // libshine function wrappers
-
--var isNode = typeof process === "object" && typeof require === "function";
-+var StereoMode = {
-+ '0': 'STEREO',
-+ '1': 'JOINT_STEREO',
-+ '2': 'DUAL_CHANNEL',
-+ '3': 'MONO',
-+ STEREO: 0,
-+ JOINT_STEREO: 1,
-+ DUAL_CHANNEL: 2,
-+ MONO: 3
-+};
-+
-+var ShineModule;
-+var int16Len;
-+var ptrLen;
-
--var int16Len = Module.HEAP16.BYTES_PER_ELEMENT;
--var ptrLen = Module.HEAP32.BYTES_PER_ELEMENT;
-+function shineInit() {
-+ int16Len = ShineModule._shine_js_int16_len();
-+ ptrLen = ShineModule._shine_js_ptr_len();
-+};
-
- function Shine(args) {
-- if (_shine_check_config(args.samplerate, args.bitrate) < 0)
-+ if (ShineModule._shine_check_config(args.samplerate, args.bitrate) < 0)
- throw "Invalid configuration";
-
-- var mode;
-- if (!args.mode) {
-+ var stereoMode;
-+ if (!args.stereoMode) {
- if (args.channels === 1) {
-- mode = Shine.MONO;
-+ stereoMode = Shine.MONO;
- } else {
-- mode = Shine.JOINT_STEREO;
-+ stereoMode = Shine.JOINT_STEREO;
- }
- } else {
-- mode = args.mode;
-+ stereoMode = args.stereoMode;
- }
-
-- this._handle = _shine_js_init(args.channels, args.samplerate, mode, args.bitrate);
-+ this._handle = ShineModule._shine_js_init(args.channels, args.samplerate, stereoMode, args.bitrate);
-
- this._channels = args.channels;
-- this._samples_per_pass = _shine_samples_per_pass(this._handle);
-+ this._samples_per_pass = ShineModule._shine_samples_per_pass(this._handle);
-
-- this._buffer = _malloc(this._channels * ptrLen);
-+ this._buffer = ShineModule._malloc(this._channels * ptrLen);
- this._pcm = new Array(this._channels);
- this._rem = new Array(this._channels);
-- this._written = _malloc(int16Len);
-+ this._written = ShineModule._malloc(int16Len);
-
- var _tmp, chan;
- for (chan=0; chan<this._channels; chan++) {
- this._rem[chan] = new Int16Array;
-- _tmp = _malloc(this._samples_per_pass * int16Len);
-- setValue(this._buffer + chan*ptrLen, _tmp, "*")
-- this._pcm[chan] = Module.HEAP16.subarray(_tmp/int16Len, _tmp/int16Len+this._samples_per_pass)
-+ _tmp = ShineModule._malloc(this._samples_per_pass * int16Len);
-+ ShineModule.setValue(this._buffer + chan*ptrLen, _tmp, "*")
-+ this._pcm[chan] = ShineModule.HEAP16.subarray(_tmp/int16Len, _tmp/int16Len+this._samples_per_pass)
- }
-
- return this;
- };
-
--Shine.STEREO = 0;
--Shine.JOINT_STEREO = 1;
--Shine.DUAL_CHANNEL = 2;
--Shine.MONO = 3;
-+Shine.checkConfig = function (samplerate, bitrate) {
-+ return ShineModule._shine_check_config(samplerate, bitrate) >= 0;
-+};
-
- Shine.prototype._encodePass = function (data) {
- if (!this._handle)
-@@ -54,11 +68,11 @@ Shine.prototype._encodePass = function (data) {
- for (chan=0;chan<this._channels;chan++)
- this._pcm[chan].set(data[chan]);
-
-- var _buf = _shine_encode_buffer(this._handle, this._buffer, this._written);
-+ var _buf = ShineModule._shine_encode_buffer(this._handle, this._buffer, this._written);
-
-- var written = getValue(this._written, "i16");
-+ var written = ShineModule.getValue(this._written, "i16");
-
-- return Module.HEAPU8.subarray(_buf, _buf+written);
-+ return ShineModule.HEAPU8.subarray(_buf, _buf+written);
- };
-
- function concat(ctr, a, b) {
-@@ -138,30 +152,22 @@ Shine.prototype.close = function () {
- throw "Closed";
- }
-
-- var _buf = _shine_flush(this._handle, this._written);
-+ var _buf = ShineModule._shine_flush(this._handle, this._written);
-
-- var written = getValue(this._written, "i16");
-+ var written = ShineModule.getValue(this._written, "i16");
- var encoded = new Uint8Array(written);
-
-- encoded.set(Module.HEAPU8.subarray(_buf, _buf + written));
-+ encoded.set(ShineModule.HEAPU8.subarray(_buf, _buf + written));
-
-- _free(this._written);
-- _shine_close(this._handle);
-+ ShineModule._free(this._written);
-+ ShineModule._shine_close(this._handle);
- this._handle = null;
-
- var chan;
- for (chan=0; chan<this._channels; chan++) {
-- _free(getValue(this._buffer + chan*ptrLen, "*"));
-+ ShineModule._free(ShineModule.getValue(this._buffer + chan*ptrLen, "*"));
- }
-- _free(this._buffer);
-+ ShineModule._free(this._buffer);
-
- return encoded;
- };
--
--if (isNode) {
-- module.exports = Shine;
--}
--
--return Shine;
--
--}).call(context)})();
-diff --git a/js/src/libshine_node_wrapper.js b/js/src/libshine_node_wrapper.js
-new file mode 100644
-index 0000000..aaaf28c
---- /dev/null
-+++ b/js/src/libshine_node_wrapper.js
-@@ -0,0 +1,10 @@
-+Shine.initialized = new Promise(function (resolve) {
-+ Module['onRuntimeInitialized'] = function () {
-+ ShineModule = Module;
-+ shineInit();
-+ resolve();
-+ }
-+})
-+
-+Module["Shine"] = Shine;
-+Module["StereoMode"] = StereoMode;
-diff --git a/js/src/pre.js b/js/src/pre.js
-deleted file mode 100644
-index 8078b87..0000000
---- a/js/src/pre.js
-+++ /dev/null
-@@ -1,9 +0,0 @@
--// libshine.js - port of libshine to JavaScript using emscripten
--// by Romain Beauxis <toots@rastageeks.org> from code by
--// Andreas Krennmair <ak@synflood.at>
--
--
--var Shine = (function() {
-- var Module;
-- var context = {};
-- return (function() {
-diff --git a/js/src/wrapper.c b/js/src/wrapper.c
-index 506570d..375b35c 100644
---- a/js/src/wrapper.c
-+++ b/js/src/wrapper.c
-@@ -1,7 +1,16 @@
-+#include "layer3.h"
-+#include "types.h"
- #include <stdlib.h>
- #include <string.h>
--#include "types.h"
--#include "layer3.h"
-+#include <stdint.h>
-+
-+size_t shine_js_int16_len() {
-+ return sizeof(int16_t);
-+}
-+
-+size_t shine_js_ptr_len() {
-+ return sizeof(void*);
-+}
-
- shine_t shine_js_init(int channels, int samplerate, int mode, int bitr) {
- shine_config_t config;
-@@ -13,4 +22,4 @@ shine_t shine_js_init(int channels, int samplerate, int mode, int bitr) {
- config.mpeg.bitr = bitr;
-
- return shine_initialise(&config);
--}
-+}
-diff --git a/js/test/browser/Makefile b/js/test/browser/Makefile
-index b3eedc8..befc1ce 100644
---- a/js/test/browser/Makefile
-+++ b/js/test/browser/Makefile
-@@ -1,2 +1,2 @@
- all:
-- python -m SimpleHTTPServer
-+ python -m http.server
-diff --git a/js/test/browser/encode.js b/js/test/browser/encode.js
-index 65e009d..af17116 100644
---- a/js/test/browser/encode.js
-+++ b/js/test/browser/encode.js
-@@ -4,24 +4,22 @@ function runEncodeTest(log, callback) {
- var samplerate = 44100;
- var channels = 2;
- var bitrate = 128;
-- var mode = Shine.STEREO;
-
- var shine = new Shine({
- samplerate: samplerate,
- channels: channels,
- bitrate: bitrate,
-- mode: mode
- });
-
-- var started = new Date;
-+ var started = new Date();
- var duration = 0.0;
- var encoded = [];
-
- var xhr = new XMLHttpRequest();
- xhr.open("GET", "encode.wav", true);
- xhr.responseType = "arraybuffer";
-- xhr.onload = function() {
-- var samples = xhr.response.byteLength / (2*channels);
-+ xhr.onload = function () {
-+ var samples = xhr.response.byteLength / (2 * channels);
- var data = new Int16Array(xhr.response);
- var buf = convertInterleavedBuffer(data, channels, samples);
- duration += parseFloat(samples) / samplerate;
-@@ -33,12 +31,12 @@ function runEncodeTest(log, callback) {
- xhr.addEventListener("load", function () {
- encoded.push(shine.close());
-
-- var ended = new Date
-- var encodingTime = (ended.getTime() - started.getTime())/1000
-+ var ended = new Date();
-+ var encodingTime = (ended.getTime() - started.getTime()) / 1000;
- log("Done encoding.");
- log("File duration: " + duration.toFixed(2) + " seconds");
- log("Encoding time: " + encodingTime.toFixed(2) + " seconds");
-- log("Encoding rate: " + (duration/encodingTime).toFixed(2) + "X");
-+ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X");
- callback(new Blob(encoded));
- });
-
-@@ -48,10 +46,10 @@ function runEncodeTest(log, callback) {
- function convertInterleavedBuffer(buf, channels, samples) {
- var chan, i;
- ret = new Array(channels);
-- for (chan=0; chan<channels; chan++) {
-+ for (chan = 0; chan < channels; chan++) {
- ret[chan] = new Int16Array(samples);
-- for (i=0; i<samples; i++) {
-- ret[chan][i] = buf[i*channels + chan];
-+ for (i = 0; i < samples; i++) {
-+ ret[chan][i] = buf[i * channels + chan];
- }
- }
- return ret;
-diff --git a/js/test/browser/index.html b/js/test/browser/index.html
-index b3a4ee3..6496e46 100644
---- a/js/test/browser/index.html
-+++ b/js/test/browser/index.html
-@@ -1,4 +1,4 @@
--<script src="libshine.js"></script>
-+<script src="libshine_node.js"></script>
- <script src="encode.js"></script>
- <script src="rounds.js"></script>
- <script>
-@@ -7,20 +7,21 @@
- el.innerHTML = el.innerHTML + "<br>" + msg;
- };
-
-- var load = function() {
-- runEncodeTest(log, function (blob) {
-- if (typeof window.URL !== "undefined") {
-- var link = document.getElementById("download-link");
-- link.href = URL.createObjectURL(blob);
-- link.download = "encoded.mp3";
-- }
-+ function onLoad() {
-+ Shine.initialized.then(function () {
-+ runEncodeTest(log, function (blob) {
-+ if (typeof window.URL !== "undefined") {
-+ var link = document.getElementById("download-link");
-+ link.href = URL.createObjectURL(blob);
-+ link.download = "encoded.mp3";
-+ }
-
-- log("");
-- runRoundsTest(Shine, log);
-+ log("");
-+ runRoundsTest(Shine, log);
-+ });
- });
- };
--
-- window.addEventListener("load", load, false);
-+ window.addEventListener("load", onLoad, false);
- </script>
- <a href="#" id="download-link">Download encoded file</a>
- <div id="output"></div>
-diff --git a/js/test/browser/libshine.js b/js/test/browser/libshine.js
-deleted file mode 120000
-index fb57470..0000000
---- a/js/test/browser/libshine.js
-+++ /dev/null
-@@ -1 +0,0 @@
--../../dist/libshine.js
-\ No newline at end of file
-diff --git a/js/test/browser/libshine_node.js b/js/test/browser/libshine_node.js
-new file mode 120000
-index 0000000..07f07a4
---- /dev/null
-+++ b/js/test/browser/libshine_node.js
-@@ -0,0 +1 @@
-+../../dist/libshine_node.js
-\ No newline at end of file
-diff --git a/js/test/lib/rounds.js b/js/test/lib/rounds.js
-index f76410a..1b388b5 100644
---- a/js/test/lib/rounds.js
-+++ b/js/test/lib/rounds.js
-@@ -1,39 +1,35 @@
- var channels = 2; // test.wav is stereo
- var samplerate = 44100; // ditto
-
--var runRoundsTest = function(Shine, log) {
-+var runRoundsTest = function (Shine, log) {
- log("Executing rounds test");
-
- var nPasses = 50;
- var frameSize = 4096;
- var data = new Array(channels);
- var chan;
-- for (chan=0; chan<channels; chan++)
-- data[chan] = new Int16Array(frameSize);
-+ for (chan = 0; chan < channels; chan++) data[chan] = new Int16Array(frameSize);
-
- log("Encoding " + nPasses + " buffers of " + frameSize + " samples");
-- var started = new Date;
-+ var started = new Date();
-
- var shine = new Shine({
- samplerate: samplerate,
- bitrate: 128,
- channels: channels,
-- model: Shine.STEREO
- });
-
- var i;
-- for (i=0; i < nPasses; i++)
-- shine.encode(data);
-+ for (i = 0; i < nPasses; i++) shine.encode(data);
- shine.close();
-
-- var ended = new Date;
-- var duration = (parseFloat(nPasses*frameSize) / parseFloat(samplerate)).toFixed(2);
-- var encodingTime = (ended.getTime() - started.getTime())/1000;
-+ var ended = new Date();
-+ var duration = (parseFloat(nPasses * frameSize) / parseFloat(samplerate)).toFixed(2);
-+ var encodingTime = (ended.getTime() - started.getTime()) / 1000;
- log("Done encoding");
- log("Total duration: " + duration);
- log("Encoding time: " + encodingTime.toFixed(2));
-- log("Encoding rate: " + (duration/encodingTime).toFixed(2) + "X");
-+ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X");
- };
-
--if (typeof process === "object" && typeof require === "function")
-- module.exports = runRoundsTest;
-+if (typeof process === "object" && typeof require === "function") module.exports = runRoundsTest;
-diff --git a/js/test/nextjs/.eslintrc.json b/js/test/nextjs/.eslintrc.json
-new file mode 100644
-index 0000000..bffb357
---- /dev/null
-+++ b/js/test/nextjs/.eslintrc.json
-@@ -0,0 +1,3 @@
-+{
-+ "extends": "next/core-web-vitals"
-+}
-diff --git a/js/test/nextjs/.gitignore b/js/test/nextjs/.gitignore
-new file mode 100644
-index 0000000..c87c9b3
---- /dev/null
-+++ b/js/test/nextjs/.gitignore
-@@ -0,0 +1,36 @@
-+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-+
-+# dependencies
-+/node_modules
-+/.pnp
-+.pnp.js
-+
-+# testing
-+/coverage
-+
-+# next.js
-+/.next/
-+/out/
-+
-+# production
-+/build
-+
-+# misc
-+.DS_Store
-+*.pem
-+
-+# debug
-+npm-debug.log*
-+yarn-debug.log*
-+yarn-error.log*
-+.pnpm-debug.log*
-+
-+# local env files
-+.env*.local
-+
-+# vercel
-+.vercel
-+
-+# typescript
-+*.tsbuildinfo
-+next-env.d.ts
-diff --git a/js/test/nextjs/.prettierignore b/js/test/nextjs/.prettierignore
-new file mode 100644
-index 0000000..799a1ca
---- /dev/null
-+++ b/js/test/nextjs/.prettierignore
-@@ -0,0 +1,4 @@
-+.next/
-+out/
-+public/audio
-+__ENV.js
-diff --git a/js/test/nextjs/.prettierrc b/js/test/nextjs/.prettierrc
-new file mode 100644
-index 0000000..a36a92f
---- /dev/null
-+++ b/js/test/nextjs/.prettierrc
-@@ -0,0 +1,12 @@
-+{
-+ "singleQuote": false,
-+ "quoteProps": "as-needed",
-+ "arrowParens": "avoid",
-+ "tabWidth": 2,
-+ "trailingComma": "es5",
-+ "semi": false,
-+ "jsxSingleQuote": true,
-+ "bracketSameLine": false,
-+ "printWidth": 120,
-+ "parser": "typescript"
-+}
-diff --git a/js/test/nextjs/README.md b/js/test/nextjs/README.md
-new file mode 100644
-index 0000000..fb9bcc9
---- /dev/null
-+++ b/js/test/nextjs/README.md
-@@ -0,0 +1,36 @@
-+This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
-+
-+## Getting Started
-+
-+First, run the development server:
-+
-+```bash
-+npm run dev
-+# or
-+yarn dev
-+```
-+
-+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
-+
-+You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file.
-+
-+[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
-+
-+The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
-+
-+This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
-+
-+## Learn More
-+
-+To learn more about Next.js, take a look at the following resources:
-+
-+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
-+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
-+
-+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
-+
-+## Deploy on Vercel
-+
-+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
-+
-+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
-diff --git a/js/test/nextjs/lib/encode.ts b/js/test/nextjs/lib/encode.ts
-new file mode 100644
-index 0000000..6e1ef2d
---- /dev/null
-+++ b/js/test/nextjs/lib/encode.ts
-@@ -0,0 +1,59 @@
-+import { Shine } from "@toots/shine.js"
-+
-+const convertInterleavedBuffer = (buf: Int16Array, channels: number, samples: number) => {
-+ const ret = new Array(channels)
-+ for (let chan = 0; chan < channels; chan++) {
-+ ret[chan] = new Int16Array(samples)
-+ for (let i = 0; i < samples; i++) {
-+ ret[chan][i] = buf[i * channels + chan]
-+ }
-+ }
-+ return ret
-+}
-+
-+export const runEncodeTest = (log: (_: string) => void, callback: (_: Blob) => void) => {
-+ log("Executing encoding test")
-+
-+ const samplerate = 44100
-+ const channels = 2
-+ const bitrate = 128
-+ //const stereoMode = StereoMode.STEREO
-+
-+ const shine = new Shine({
-+ samplerate: samplerate,
-+ channels: channels,
-+ bitrate: bitrate,
-+ // stereoMode: stereoMode,
-+ })
-+
-+ const started = new Date()
-+ let duration = 0.0
-+ const encoded: Uint8Array[] = []
-+
-+ const xhr = new XMLHttpRequest()
-+ xhr.open("GET", "encode.wav", true)
-+ xhr.responseType = "arraybuffer"
-+ xhr.onload = () => {
-+ const samples = xhr.response.byteLength / (2 * channels)
-+ const data = new Int16Array(xhr.response)
-+ const buf = convertInterleavedBuffer(data, channels, samples)
-+ duration += samples / samplerate
-+ encoded.push(shine.encode(buf))
-+ }
-+
-+ log("Got WAV file.")
-+ log("Encoding..")
-+ xhr.addEventListener("load", () => {
-+ encoded.push(shine.close())
-+
-+ const ended = new Date()
-+ const encodingTime = (ended.getTime() - started.getTime()) / 1000
-+ log("Done encoding.")
-+ log("File duration: " + duration.toFixed(2) + " seconds")
-+ log("Encoding time: " + encodingTime.toFixed(2) + " seconds")
-+ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X")
-+ callback(new Blob(encoded))
-+ })
-+
-+ xhr.send()
-+}
-diff --git a/js/test/nextjs/lib/encode.wav b/js/test/nextjs/lib/encode.wav
-new file mode 100644
-index 0000000..c8cd595
-Binary files /dev/null and b/js/test/nextjs/lib/encode.wav differ
-diff --git a/js/test/nextjs/lib/rounds.ts b/js/test/nextjs/lib/rounds.ts
-new file mode 100644
-index 0000000..fab9b7c
---- /dev/null
-+++ b/js/test/nextjs/lib/rounds.ts
-@@ -0,0 +1,34 @@
-+import { Shine, StereoMode } from "@toots/shine.js"
-+
-+const channels = 2 // test.wav is stereo
-+const samplerate = 44100 // ditto
-+
-+export const runRoundsTest = (log: (_: string) => void) => {
-+ log("Executing rounds test")
-+
-+ const nPasses = 50
-+ const frameSize = 4096
-+ const data = new Array(channels)
-+ for (let chan = 0; chan < channels; chan++) data[chan] = new Int16Array(frameSize)
-+
-+ log("Encoding " + nPasses + " buffers of " + frameSize + " samples")
-+ const started = new Date()
-+
-+ const shine = new Shine({
-+ samplerate: samplerate,
-+ bitrate: 128,
-+ channels: channels,
-+ stereoMode: StereoMode.STEREO,
-+ })
-+
-+ for (let i = 0; i < nPasses; i++) shine.encode(data)
-+ shine.close()
-+
-+ const ended = new Date()
-+ const duration = (nPasses * frameSize) / samplerate
-+ const encodingTime = (ended.getTime() - started.getTime()) / 1000
-+ log("Done encoding")
-+ log("Total duration: " + duration.toFixed(2))
-+ log("Encoding time: " + encodingTime.toFixed(2))
-+ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X")
-+}
-diff --git a/js/test/nextjs/next.config.js b/js/test/nextjs/next.config.js
-new file mode 100644
-index 0000000..a843cbe
---- /dev/null
-+++ b/js/test/nextjs/next.config.js
-@@ -0,0 +1,6 @@
-+/** @type {import('next').NextConfig} */
-+const nextConfig = {
-+ reactStrictMode: true,
-+}
-+
-+module.exports = nextConfig
-diff --git a/js/test/nextjs/package-lock.json b/js/test/nextjs/package-lock.json
-new file mode 100644
-index 0000000..02208b0
---- /dev/null
-+++ b/js/test/nextjs/package-lock.json
-@@ -0,0 +1,3084 @@
-+{
-+ "name": "shine-nextjs-test-app",
-+ "version": "0.1.0",
-+ "lockfileVersion": 3,
-+ "requires": true,
-+ "packages": {
-+ "": {
-+ "name": "shine-nextjs-test-app",
-+ "version": "0.1.0",
-+ "dependencies": {
-+ "@next/font": "13.1.1",
-+ "@toots/shine.js": "file:../..",
-+ "@types/node": "18.11.18",
-+ "@types/react": "18.0.26",
-+ "@types/react-dom": "18.0.10",
-+ "eslint": "8.31.0",
-+ "eslint-config-next": "13.1.1",
-+ "next": "13.1.1",
-+ "react": "18.2.0",
-+ "react-dom": "18.2.0",
-+ "typescript": "4.9.4"
-+ },
-+ "devDependencies": {
-+ "prettier": "^2.8.1"
-+ }
-+ },
-+ "node_modules/@babel/runtime": {
-+ "version": "7.20.7",
-+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz",
-+ "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==",
-+ "dependencies": {
-+ "regenerator-runtime": "^0.13.11"
-+ },
-+ "engines": {
-+ "node": ">=6.9.0"
-+ }
-+ },
-+ "node_modules/@babel/runtime-corejs3": {
-+ "version": "7.20.7",
-+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.7.tgz",
-+ "integrity": "sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg==",
-+ "dependencies": {
-+ "core-js-pure": "^3.25.1",
-+ "regenerator-runtime": "^0.13.11"
-+ },
-+ "engines": {
-+ "node": ">=6.9.0"
-+ }
-+ },
-+ "node_modules/@eslint/eslintrc": {
-+ "version": "1.4.1",
-+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
-+ "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
-+ "dependencies": {
-+ "ajv": "^6.12.4",
-+ "debug": "^4.3.2",
-+ "espree": "^9.4.0",
-+ "globals": "^13.19.0",
-+ "ignore": "^5.2.0",
-+ "import-fresh": "^3.2.1",
-+ "js-yaml": "^4.1.0",
-+ "minimatch": "^3.1.2",
-+ "strip-json-comments": "^3.1.1"
-+ },
-+ "engines": {
-+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-+ },
-+ "funding": {
-+ "url": "https://opencollective.com/eslint"
-+ }
-+ },
-+ "node_modules/@humanwhocodes/config-array": {
-+ "version": "0.11.8",
-+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
-+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
-+ "dependencies": {
-+ "@humanwhocodes/object-schema": "^1.2.1",
-+ "debug": "^4.1.1",
-+ "minimatch": "^3.0.5"
-+ },
-+ "engines": {
-+ "node": ">=10.10.0"
-+ }
-+ },
-+ "node_modules/@humanwhocodes/module-importer": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
-+ "engines": {
-+ "node": ">=12.22"
-+ },
-+ "funding": {
-+ "type": "github",
-+ "url": "https://github.com/sponsors/nzakas"
-+ }
-+ },
-+ "node_modules/@humanwhocodes/object-schema": {
-+ "version": "1.2.1",
-+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
-+ },
-+ "node_modules/@next/env": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.1.tgz",
-+ "integrity": "sha512-vFMyXtPjSAiOXOywMojxfKIqE3VWN5RCAx+tT3AS3pcKjMLFTCJFUWsKv8hC+87Z1F4W3r68qTwDFZIFmd5Xkw=="
-+ },
-+ "node_modules/@next/eslint-plugin-next": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.1.tgz",
-+ "integrity": "sha512-SBrOFS8PC3nQ5aeZmawJkjKkWjwK9RoxvBSv/86nZp0ubdoVQoko8r8htALd9ufp16NhacCdqhu9bzZLDWtALQ==",
-+ "dependencies": {
-+ "glob": "7.1.7"
-+ }
-+ },
-+ "node_modules/@next/font": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.1.tgz",
-+ "integrity": "sha512-amygRorS05hYK1/XQRZo5qBl7l2fpHnezeKU/cNveWU5QJg+sg8gMGkUXHtvesNKpiKIJshBRH1TzvO+2sKpvQ=="
-+ },
-+ "node_modules/@next/swc-android-arm-eabi": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.1.tgz",
-+ "integrity": "sha512-qnFCx1kT3JTWhWve4VkeWuZiyjG0b5T6J2iWuin74lORCupdrNukxkq9Pm+Z7PsatxuwVJMhjUoYz7H4cWzx2A==",
-+ "cpu": [
-+ "arm"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "android"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-android-arm64": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.1.tgz",
-+ "integrity": "sha512-eCiZhTzjySubNqUnNkQCjU3Fh+ep3C6b5DCM5FKzsTH/3Gr/4Y7EiaPZKILbvnXmhWtKPIdcY6Zjx51t4VeTfA==",
-+ "cpu": [
-+ "arm64"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "android"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-darwin-arm64": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.1.tgz",
-+ "integrity": "sha512-9zRJSSIwER5tu9ADDkPw5rIZ+Np44HTXpYMr0rkM656IvssowPxmhK0rTreC1gpUCYwFsRbxarUJnJsTWiutPg==",
-+ "cpu": [
-+ "arm64"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "darwin"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-darwin-x64": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.1.tgz",
-+ "integrity": "sha512-qWr9qEn5nrnlhB0rtjSdR00RRZEtxg4EGvicIipqZWEyayPxhUu6NwKiG8wZiYZCLfJ5KWr66PGSNeDMGlNaiA==",
-+ "cpu": [
-+ "x64"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "darwin"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-freebsd-x64": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.1.tgz",
-+ "integrity": "sha512-UwP4w/NcQ7V/VJEj3tGVszgb4pyUCt3lzJfUhjDMUmQbzG9LDvgiZgAGMYH6L21MoyAATJQPDGiAMWAPKsmumA==",
-+ "cpu": [
-+ "x64"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "freebsd"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-linux-arm-gnueabihf": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.1.tgz",
-+ "integrity": "sha512-CnsxmKHco9sosBs1XcvCXP845Db+Wx1G0qouV5+Gr+HT/ZlDYEWKoHVDgnJXLVEQzq4FmHddBNGbXvgqM1Gfkg==",
-+ "cpu": [
-+ "arm"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "linux"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-linux-arm64-gnu": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.1.tgz",
-+ "integrity": "sha512-JfDq1eri5Dif+VDpTkONRd083780nsMCOKoFG87wA0sa4xL8LGcXIBAkUGIC1uVy9SMsr2scA9CySLD/i+Oqiw==",
-+ "cpu": [
-+ "arm64"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "linux"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-linux-arm64-musl": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.1.tgz",
-+ "integrity": "sha512-GA67ZbDq2AW0CY07zzGt07M5b5Yaq5qUpFIoW3UFfjOPgb0Sqf3DAW7GtFMK1sF4ROHsRDMGQ9rnT0VM2dVfKA==",
-+ "cpu": [
-+ "arm64"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "linux"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-linux-x64-gnu": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.1.tgz",
-+ "integrity": "sha512-nnjuBrbzvqaOJaV+XgT8/+lmXrSCOt1YYZn/irbDb2fR2QprL6Q7WJNgwsZNxiLSfLdv+2RJGGegBx9sLBEzGA==",
-+ "cpu": [
-+ "x64"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "linux"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-linux-x64-musl": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.1.tgz",
-+ "integrity": "sha512-CM9xnAQNIZ8zf/igbIT/i3xWbQZYaF397H+JroF5VMOCUleElaMdQLL5riJml8wUfPoN3dtfn2s4peSr3azz/g==",
-+ "cpu": [
-+ "x64"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "linux"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-win32-arm64-msvc": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.1.tgz",
-+ "integrity": "sha512-pzUHOGrbgfGgPlOMx9xk3QdPJoRPU+om84hqVoe6u+E0RdwOG0Ho/2UxCgDqmvpUrMab1Deltlt6RqcXFpnigQ==",
-+ "cpu": [
-+ "arm64"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "win32"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-win32-ia32-msvc": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.1.tgz",
-+ "integrity": "sha512-WeX8kVS46aobM9a7Xr/kEPcrTyiwJqQv/tbw6nhJ4fH9xNZ+cEcyPoQkwPo570dCOLz3Zo9S2q0E6lJ/EAUOBg==",
-+ "cpu": [
-+ "ia32"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "win32"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "node_modules/@next/swc-win32-x64-msvc": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.1.tgz",
-+ "integrity": "sha512-mVF0/3/5QAc5EGVnb8ll31nNvf3BWpPY4pBb84tk+BfQglWLqc5AC9q1Ht/YMWiEgs8ALNKEQ3GQnbY0bJF2Gg==",
-+ "cpu": [
-+ "x64"
-+ ],
-+ "optional": true,
-+ "os": [
-+ "win32"
-+ ],
-+ "engines": {
-+ "node": ">= 10"
-+ }
-+ },
-+ "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==",
-+ "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==",
-+ "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==",
-+ "dependencies": {
-+ "@nodelib/fs.scandir": "2.1.5",
-+ "fastq": "^1.6.0"
-+ },
-+ "engines": {
-+ "node": ">= 8"
-+ }
-+ },
-+ "node_modules/@pkgr/utils": {
-+ "version": "2.3.1",
-+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz",
-+ "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==",
-+ "dependencies": {
-+ "cross-spawn": "^7.0.3",
-+ "is-glob": "^4.0.3",
-+ "open": "^8.4.0",
-+ "picocolors": "^1.0.0",
-+ "tiny-glob": "^0.2.9",
-+ "tslib": "^2.4.0"
-+ },
-+ "engines": {
-+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
-+ },
-+ "funding": {
-+ "url": "https://opencollective.com/unts"
-+ }
-+ },
-+ "node_modules/@rushstack/eslint-patch": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz",
-+ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg=="
-+ },
-+ "node_modules/@swc/helpers": {
-+ "version": "0.4.14",
-+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
-+ "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
-+ "dependencies": {
-+ "tslib": "^2.4.0"
-+ }
-+ },
-+ "node_modules/@toots/shine.js": {
-+ "version": "1.0.1",
-+ "resolved": "file:../..",
-+ "license": "LGPL-2.0-only"
-+ },
-+ "node_modules/@types/json5": {
-+ "version": "0.0.29",
-+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
-+ },
-+ "node_modules/@types/node": {
-+ "version": "18.11.18",
-+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
-+ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA=="
-+ },
-+ "node_modules/@types/prop-types": {
-+ "version": "15.7.5",
-+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
-+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
-+ },
-+ "node_modules/@types/react": {
-+ "version": "18.0.26",
-+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz",
-+ "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==",
-+ "dependencies": {
-+ "@types/prop-types": "*",
-+ "@types/scheduler": "*",
-+ "csstype": "^3.0.2"
-+ }
-+ },
-+ "node_modules/@types/react-dom": {
-+ "version": "18.0.10",
-+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz",
-+ "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==",
-+ "dependencies": {
-+ "@types/react": "*"
-+ }
-+ },
-+ "node_modules/@types/scheduler": {
-+ "version": "0.16.2",
-+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
-+ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
-+ },
-+ "node_modules/@typescript-eslint/parser": {
-+ "version": "5.47.1",
-+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.47.1.tgz",
-+ "integrity": "sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw==",
-+ "dependencies": {
-+ "@typescript-eslint/scope-manager": "5.47.1",
-+ "@typescript-eslint/types": "5.47.1",
-+ "@typescript-eslint/typescript-estree": "5.47.1",
-+ "debug": "^4.3.4"
-+ },
-+ "engines": {
-+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-+ },
-+ "funding": {
-+ "type": "opencollective",
-+ "url": "https://opencollective.com/typescript-eslint"
-+ },
-+ "peerDependencies": {
-+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
-+ },
-+ "peerDependenciesMeta": {
-+ "typescript": {
-+ "optional": true
-+ }
-+ }
-+ },
-+ "node_modules/@typescript-eslint/scope-manager": {
-+ "version": "5.47.1",
-+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.47.1.tgz",
-+ "integrity": "sha512-9hsFDsgUwrdOoW1D97Ewog7DYSHaq4WKuNs0LHF9RiCmqB0Z+XRR4Pf7u7u9z/8CciHuJ6yxNws1XznI3ddjEw==",
-+ "dependencies": {
-+ "@typescript-eslint/types": "5.47.1",
-+ "@typescript-eslint/visitor-keys": "5.47.1"
-+ },
-+ "engines": {
-+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-+ },
-+ "funding": {
-+ "type": "opencollective",
-+ "url": "https://opencollective.com/typescript-eslint"
-+ }
-+ },
-+ "node_modules/@typescript-eslint/types": {
-+ "version": "5.47.1",
-+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.1.tgz",
-+ "integrity": "sha512-CmALY9YWXEpwuu6377ybJBZdtSAnzXLSQcxLSqSQSbC7VfpMu/HLVdrnVJj7ycI138EHqocW02LPJErE35cE9A==",
-+ "engines": {
-+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-+ },
-+ "funding": {
-+ "type": "opencollective",
-+ "url": "https://opencollective.com/typescript-eslint"
-+ }
-+ },
-+ "node_modules/@typescript-eslint/typescript-estree": {
-+ "version": "5.47.1",
-+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.1.tgz",
-+ "integrity": "sha512-4+ZhFSuISAvRi2xUszEj0xXbNTHceV9GbH9S8oAD2a/F9SW57aJNQVOCxG8GPfSWH/X4eOPdMEU2jYVuWKEpWA==",
-+ "dependencies": {
-+ "@typescript-eslint/types": "5.47.1",
-+ "@typescript-eslint/visitor-keys": "5.47.1",
-+ "debug": "^4.3.4",
-+ "globby": "^11.1.0",
-+ "is-glob": "^4.0.3",
-+ "semver": "^7.3.7",
-+ "tsutils": "^3.21.0"
-+ },
-+ "engines": {
-+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-+ },
-+ "funding": {
-+ "type": "opencollective",
-+ "url": "https://opencollective.com/typescript-eslint"
-+ },
-+ "peerDependenciesMeta": {
-+ "typescript": {
-+ "optional": true
-+ }
-+ }
-+ },
-+ "node_modules/@typescript-eslint/visitor-keys": {
-+ "version": "5.47.1",
-+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.1.tgz",
-+ "integrity": "sha512-rF3pmut2JCCjh6BLRhNKdYjULMb1brvoaiWDlHfLNVgmnZ0sBVJrs3SyaKE1XoDDnJuAx/hDQryHYmPUuNq0ig==",
-+ "dependencies": {
-+ "@typescript-eslint/types": "5.47.1",
-+ "eslint-visitor-keys": "^3.3.0"
-+ },
-+ "engines": {
-+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-+ },
-+ "funding": {
-+ "type": "opencollective",
-+ "url": "https://opencollective.com/typescript-eslint"
-+ }
-+ },
-+ "node_modules/acorn": {
-+ "version": "8.8.1",
-+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
-+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
-+ "bin": {
-+ "acorn": "bin/acorn"
-+ },
-+ "engines": {
-+ "node": ">=0.4.0"
-+ }
-+ },
-+ "node_modules/acorn-jsx": {
-+ "version": "5.3.2",
-+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-+ "peerDependencies": {
-+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
-+ }
-+ },
-+ "node_modules/ajv": {
-+ "version": "6.12.6",
-+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-+ "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/ansi-regex": {
-+ "version": "5.0.1",
-+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "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==",
-+ "dependencies": {
-+ "color-convert": "^2.0.1"
-+ },
-+ "engines": {
-+ "node": ">=8"
-+ },
-+ "funding": {
-+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-+ }
-+ },
-+ "node_modules/argparse": {
-+ "version": "2.0.1",
-+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
-+ },
-+ "node_modules/aria-query": {
-+ "version": "4.2.2",
-+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz",
-+ "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
-+ "dependencies": {
-+ "@babel/runtime": "^7.10.2",
-+ "@babel/runtime-corejs3": "^7.10.2"
-+ },
-+ "engines": {
-+ "node": ">=6.0"
-+ }
-+ },
-+ "node_modules/array-includes": {
-+ "version": "3.1.6",
-+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
-+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.4",
-+ "es-abstract": "^1.20.4",
-+ "get-intrinsic": "^1.1.3",
-+ "is-string": "^1.0.7"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "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==",
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "node_modules/array.prototype.flat": {
-+ "version": "1.3.1",
-+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
-+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.4",
-+ "es-abstract": "^1.20.4",
-+ "es-shim-unscopables": "^1.0.0"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/array.prototype.flatmap": {
-+ "version": "1.3.1",
-+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
-+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.4",
-+ "es-abstract": "^1.20.4",
-+ "es-shim-unscopables": "^1.0.0"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/array.prototype.tosorted": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
-+ "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.4",
-+ "es-abstract": "^1.20.4",
-+ "es-shim-unscopables": "^1.0.0",
-+ "get-intrinsic": "^1.1.3"
-+ }
-+ },
-+ "node_modules/ast-types-flow": {
-+ "version": "0.0.7",
-+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
-+ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag=="
-+ },
-+ "node_modules/axe-core": {
-+ "version": "4.6.1",
-+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.1.tgz",
-+ "integrity": "sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w==",
-+ "engines": {
-+ "node": ">=4"
-+ }
-+ },
-+ "node_modules/axobject-query": {
-+ "version": "2.2.0",
-+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
-+ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA=="
-+ },
-+ "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=="
-+ },
-+ "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==",
-+ "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==",
-+ "dependencies": {
-+ "fill-range": "^7.0.1"
-+ },
-+ "engines": {
-+ "node": ">=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==",
-+ "dependencies": {
-+ "function-bind": "^1.1.1",
-+ "get-intrinsic": "^1.0.2"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/callsites": {
-+ "version": "3.1.0",
-+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-+ "engines": {
-+ "node": ">=6"
-+ }
-+ },
-+ "node_modules/caniuse-lite": {
-+ "version": "1.0.30001441",
-+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz",
-+ "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==",
-+ "funding": [
-+ {
-+ "type": "opencollective",
-+ "url": "https://opencollective.com/browserslist"
-+ },
-+ {
-+ "type": "tidelift",
-+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-+ }
-+ ]
-+ },
-+ "node_modules/chalk": {
-+ "version": "4.1.2",
-+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-+ "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/client-only": {
-+ "version": "0.0.1",
-+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
-+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
-+ },
-+ "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==",
-+ "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=="
-+ },
-+ "node_modules/concat-map": {
-+ "version": "0.0.1",
-+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
-+ },
-+ "node_modules/core-js-pure": {
-+ "version": "3.27.1",
-+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.27.1.tgz",
-+ "integrity": "sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==",
-+ "hasInstallScript": true,
-+ "funding": {
-+ "type": "opencollective",
-+ "url": "https://opencollective.com/core-js"
-+ }
-+ },
-+ "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==",
-+ "dependencies": {
-+ "path-key": "^3.1.0",
-+ "shebang-command": "^2.0.0",
-+ "which": "^2.0.1"
-+ },
-+ "engines": {
-+ "node": ">= 8"
-+ }
-+ },
-+ "node_modules/csstype": {
-+ "version": "3.1.1",
-+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
-+ "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
-+ },
-+ "node_modules/damerau-levenshtein": {
-+ "version": "1.0.8",
-+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
-+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
-+ },
-+ "node_modules/debug": {
-+ "version": "4.3.4",
-+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-+ "dependencies": {
-+ "ms": "2.1.2"
-+ },
-+ "engines": {
-+ "node": ">=6.0"
-+ },
-+ "peerDependenciesMeta": {
-+ "supports-color": {
-+ "optional": true
-+ }
-+ }
-+ },
-+ "node_modules/deep-is": {
-+ "version": "0.1.4",
-+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
-+ },
-+ "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==",
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "node_modules/define-properties": {
-+ "version": "1.1.4",
-+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
-+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
-+ "dependencies": {
-+ "has-property-descriptors": "^1.0.0",
-+ "object-keys": "^1.1.1"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "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==",
-+ "dependencies": {
-+ "path-type": "^4.0.0"
-+ },
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "node_modules/doctrine": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-+ "dependencies": {
-+ "esutils": "^2.0.2"
-+ },
-+ "engines": {
-+ "node": ">=6.0.0"
-+ }
-+ },
-+ "node_modules/emoji-regex": {
-+ "version": "9.2.2",
-+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
-+ },
-+ "node_modules/enhanced-resolve": {
-+ "version": "5.12.0",
-+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
-+ "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
-+ "dependencies": {
-+ "graceful-fs": "^4.2.4",
-+ "tapable": "^2.2.0"
-+ },
-+ "engines": {
-+ "node": ">=10.13.0"
-+ }
-+ },
-+ "node_modules/es-abstract": {
-+ "version": "1.20.5",
-+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz",
-+ "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "es-to-primitive": "^1.2.1",
-+ "function-bind": "^1.1.1",
-+ "function.prototype.name": "^1.1.5",
-+ "get-intrinsic": "^1.1.3",
-+ "get-symbol-description": "^1.0.0",
-+ "gopd": "^1.0.1",
-+ "has": "^1.0.3",
-+ "has-property-descriptors": "^1.0.0",
-+ "has-symbols": "^1.0.3",
-+ "internal-slot": "^1.0.3",
-+ "is-callable": "^1.2.7",
-+ "is-negative-zero": "^2.0.2",
-+ "is-regex": "^1.1.4",
-+ "is-shared-array-buffer": "^1.0.2",
-+ "is-string": "^1.0.7",
-+ "is-weakref": "^1.0.2",
-+ "object-inspect": "^1.12.2",
-+ "object-keys": "^1.1.1",
-+ "object.assign": "^4.1.4",
-+ "regexp.prototype.flags": "^1.4.3",
-+ "safe-regex-test": "^1.0.0",
-+ "string.prototype.trimend": "^1.0.6",
-+ "string.prototype.trimstart": "^1.0.6",
-+ "unbox-primitive": "^1.0.2"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/es-shim-unscopables": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
-+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
-+ "dependencies": {
-+ "has": "^1.0.3"
-+ }
-+ },
-+ "node_modules/es-to-primitive": {
-+ "version": "1.2.1",
-+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-+ "dependencies": {
-+ "is-callable": "^1.1.4",
-+ "is-date-object": "^1.0.1",
-+ "is-symbol": "^1.0.2"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/escape-string-regexp": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-+ "engines": {
-+ "node": ">=10"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/eslint": {
-+ "version": "8.31.0",
-+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz",
-+ "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==",
-+ "dependencies": {
-+ "@eslint/eslintrc": "^1.4.1",
-+ "@humanwhocodes/config-array": "^0.11.8",
-+ "@humanwhocodes/module-importer": "^1.0.1",
-+ "@nodelib/fs.walk": "^1.2.8",
-+ "ajv": "^6.10.0",
-+ "chalk": "^4.0.0",
-+ "cross-spawn": "^7.0.2",
-+ "debug": "^4.3.2",
-+ "doctrine": "^3.0.0",
-+ "escape-string-regexp": "^4.0.0",
-+ "eslint-scope": "^7.1.1",
-+ "eslint-utils": "^3.0.0",
-+ "eslint-visitor-keys": "^3.3.0",
-+ "espree": "^9.4.0",
-+ "esquery": "^1.4.0",
-+ "esutils": "^2.0.2",
-+ "fast-deep-equal": "^3.1.3",
-+ "file-entry-cache": "^6.0.1",
-+ "find-up": "^5.0.0",
-+ "glob-parent": "^6.0.2",
-+ "globals": "^13.19.0",
-+ "grapheme-splitter": "^1.0.4",
-+ "ignore": "^5.2.0",
-+ "import-fresh": "^3.0.0",
-+ "imurmurhash": "^0.1.4",
-+ "is-glob": "^4.0.0",
-+ "is-path-inside": "^3.0.3",
-+ "js-sdsl": "^4.1.4",
-+ "js-yaml": "^4.1.0",
-+ "json-stable-stringify-without-jsonify": "^1.0.1",
-+ "levn": "^0.4.1",
-+ "lodash.merge": "^4.6.2",
-+ "minimatch": "^3.1.2",
-+ "natural-compare": "^1.4.0",
-+ "optionator": "^0.9.1",
-+ "regexpp": "^3.2.0",
-+ "strip-ansi": "^6.0.1",
-+ "strip-json-comments": "^3.1.0",
-+ "text-table": "^0.2.0"
-+ },
-+ "bin": {
-+ "eslint": "bin/eslint.js"
-+ },
-+ "engines": {
-+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-+ },
-+ "funding": {
-+ "url": "https://opencollective.com/eslint"
-+ }
-+ },
-+ "node_modules/eslint-config-next": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.1.1.tgz",
-+ "integrity": "sha512-/5S2XGWlGaiqrRhzpn51ux5JUSLwx8PVK2keLi5xk7QmhfYB8PqE6R6SlVw6hgnf/VexvUXSrlNJ/su00NhtHQ==",
-+ "dependencies": {
-+ "@next/eslint-plugin-next": "13.1.1",
-+ "@rushstack/eslint-patch": "^1.1.3",
-+ "@typescript-eslint/parser": "^5.42.0",
-+ "eslint-import-resolver-node": "^0.3.6",
-+ "eslint-import-resolver-typescript": "^3.5.2",
-+ "eslint-plugin-import": "^2.26.0",
-+ "eslint-plugin-jsx-a11y": "^6.5.1",
-+ "eslint-plugin-react": "^7.31.7",
-+ "eslint-plugin-react-hooks": "^4.5.0"
-+ },
-+ "peerDependencies": {
-+ "eslint": "^7.23.0 || ^8.0.0",
-+ "typescript": ">=3.3.1"
-+ },
-+ "peerDependenciesMeta": {
-+ "typescript": {
-+ "optional": true
-+ }
-+ }
-+ },
-+ "node_modules/eslint-import-resolver-node": {
-+ "version": "0.3.6",
-+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
-+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
-+ "dependencies": {
-+ "debug": "^3.2.7",
-+ "resolve": "^1.20.0"
-+ }
-+ },
-+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
-+ "version": "3.2.7",
-+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-+ "dependencies": {
-+ "ms": "^2.1.1"
-+ }
-+ },
-+ "node_modules/eslint-import-resolver-typescript": {
-+ "version": "3.5.2",
-+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz",
-+ "integrity": "sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==",
-+ "dependencies": {
-+ "debug": "^4.3.4",
-+ "enhanced-resolve": "^5.10.0",
-+ "get-tsconfig": "^4.2.0",
-+ "globby": "^13.1.2",
-+ "is-core-module": "^2.10.0",
-+ "is-glob": "^4.0.3",
-+ "synckit": "^0.8.4"
-+ },
-+ "engines": {
-+ "node": "^14.18.0 || >=16.0.0"
-+ },
-+ "funding": {
-+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
-+ },
-+ "peerDependencies": {
-+ "eslint": "*",
-+ "eslint-plugin-import": "*"
-+ }
-+ },
-+ "node_modules/eslint-import-resolver-typescript/node_modules/globby": {
-+ "version": "13.1.3",
-+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz",
-+ "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==",
-+ "dependencies": {
-+ "dir-glob": "^3.0.1",
-+ "fast-glob": "^3.2.11",
-+ "ignore": "^5.2.0",
-+ "merge2": "^1.4.1",
-+ "slash": "^4.0.0"
-+ },
-+ "engines": {
-+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/eslint-import-resolver-typescript/node_modules/slash": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
-+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
-+ "engines": {
-+ "node": ">=12"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/eslint-module-utils": {
-+ "version": "2.7.4",
-+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
-+ "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
-+ "dependencies": {
-+ "debug": "^3.2.7"
-+ },
-+ "engines": {
-+ "node": ">=4"
-+ },
-+ "peerDependenciesMeta": {
-+ "eslint": {
-+ "optional": true
-+ }
-+ }
-+ },
-+ "node_modules/eslint-module-utils/node_modules/debug": {
-+ "version": "3.2.7",
-+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-+ "dependencies": {
-+ "ms": "^2.1.1"
-+ }
-+ },
-+ "node_modules/eslint-plugin-import": {
-+ "version": "2.26.0",
-+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
-+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
-+ "dependencies": {
-+ "array-includes": "^3.1.4",
-+ "array.prototype.flat": "^1.2.5",
-+ "debug": "^2.6.9",
-+ "doctrine": "^2.1.0",
-+ "eslint-import-resolver-node": "^0.3.6",
-+ "eslint-module-utils": "^2.7.3",
-+ "has": "^1.0.3",
-+ "is-core-module": "^2.8.1",
-+ "is-glob": "^4.0.3",
-+ "minimatch": "^3.1.2",
-+ "object.values": "^1.1.5",
-+ "resolve": "^1.22.0",
-+ "tsconfig-paths": "^3.14.1"
-+ },
-+ "engines": {
-+ "node": ">=4"
-+ },
-+ "peerDependencies": {
-+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
-+ }
-+ },
-+ "node_modules/eslint-plugin-import/node_modules/debug": {
-+ "version": "2.6.9",
-+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-+ "dependencies": {
-+ "ms": "2.0.0"
-+ }
-+ },
-+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-+ "dependencies": {
-+ "esutils": "^2.0.2"
-+ },
-+ "engines": {
-+ "node": ">=0.10.0"
-+ }
-+ },
-+ "node_modules/eslint-plugin-import/node_modules/ms": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
-+ },
-+ "node_modules/eslint-plugin-jsx-a11y": {
-+ "version": "6.6.1",
-+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz",
-+ "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==",
-+ "dependencies": {
-+ "@babel/runtime": "^7.18.9",
-+ "aria-query": "^4.2.2",
-+ "array-includes": "^3.1.5",
-+ "ast-types-flow": "^0.0.7",
-+ "axe-core": "^4.4.3",
-+ "axobject-query": "^2.2.0",
-+ "damerau-levenshtein": "^1.0.8",
-+ "emoji-regex": "^9.2.2",
-+ "has": "^1.0.3",
-+ "jsx-ast-utils": "^3.3.2",
-+ "language-tags": "^1.0.5",
-+ "minimatch": "^3.1.2",
-+ "semver": "^6.3.0"
-+ },
-+ "engines": {
-+ "node": ">=4.0"
-+ },
-+ "peerDependencies": {
-+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
-+ }
-+ },
-+ "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": {
-+ "version": "6.3.0",
-+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-+ "bin": {
-+ "semver": "bin/semver.js"
-+ }
-+ },
-+ "node_modules/eslint-plugin-react": {
-+ "version": "7.31.11",
-+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz",
-+ "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==",
-+ "dependencies": {
-+ "array-includes": "^3.1.6",
-+ "array.prototype.flatmap": "^1.3.1",
-+ "array.prototype.tosorted": "^1.1.1",
-+ "doctrine": "^2.1.0",
-+ "estraverse": "^5.3.0",
-+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
-+ "minimatch": "^3.1.2",
-+ "object.entries": "^1.1.6",
-+ "object.fromentries": "^2.0.6",
-+ "object.hasown": "^1.1.2",
-+ "object.values": "^1.1.6",
-+ "prop-types": "^15.8.1",
-+ "resolve": "^2.0.0-next.3",
-+ "semver": "^6.3.0",
-+ "string.prototype.matchall": "^4.0.8"
-+ },
-+ "engines": {
-+ "node": ">=4"
-+ },
-+ "peerDependencies": {
-+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
-+ }
-+ },
-+ "node_modules/eslint-plugin-react-hooks": {
-+ "version": "4.6.0",
-+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
-+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
-+ "engines": {
-+ "node": ">=10"
-+ },
-+ "peerDependencies": {
-+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
-+ }
-+ },
-+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-+ "dependencies": {
-+ "esutils": "^2.0.2"
-+ },
-+ "engines": {
-+ "node": ">=0.10.0"
-+ }
-+ },
-+ "node_modules/eslint-plugin-react/node_modules/resolve": {
-+ "version": "2.0.0-next.4",
-+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
-+ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
-+ "dependencies": {
-+ "is-core-module": "^2.9.0",
-+ "path-parse": "^1.0.7",
-+ "supports-preserve-symlinks-flag": "^1.0.0"
-+ },
-+ "bin": {
-+ "resolve": "bin/resolve"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/eslint-plugin-react/node_modules/semver": {
-+ "version": "6.3.0",
-+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-+ "bin": {
-+ "semver": "bin/semver.js"
-+ }
-+ },
-+ "node_modules/eslint-scope": {
-+ "version": "7.1.1",
-+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
-+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
-+ "dependencies": {
-+ "esrecurse": "^4.3.0",
-+ "estraverse": "^5.2.0"
-+ },
-+ "engines": {
-+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-+ }
-+ },
-+ "node_modules/eslint-utils": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-+ "dependencies": {
-+ "eslint-visitor-keys": "^2.0.0"
-+ },
-+ "engines": {
-+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/mysticatea"
-+ },
-+ "peerDependencies": {
-+ "eslint": ">=5"
-+ }
-+ },
-+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
-+ "version": "2.1.0",
-+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-+ "engines": {
-+ "node": ">=10"
-+ }
-+ },
-+ "node_modules/eslint-visitor-keys": {
-+ "version": "3.3.0",
-+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-+ "engines": {
-+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-+ }
-+ },
-+ "node_modules/espree": {
-+ "version": "9.4.1",
-+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
-+ "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
-+ "dependencies": {
-+ "acorn": "^8.8.0",
-+ "acorn-jsx": "^5.3.2",
-+ "eslint-visitor-keys": "^3.3.0"
-+ },
-+ "engines": {
-+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-+ },
-+ "funding": {
-+ "url": "https://opencollective.com/eslint"
-+ }
-+ },
-+ "node_modules/esquery": {
-+ "version": "1.4.0",
-+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
-+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
-+ "dependencies": {
-+ "estraverse": "^5.1.0"
-+ },
-+ "engines": {
-+ "node": ">=0.10"
-+ }
-+ },
-+ "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==",
-+ "dependencies": {
-+ "estraverse": "^5.2.0"
-+ },
-+ "engines": {
-+ "node": ">=4.0"
-+ }
-+ },
-+ "node_modules/estraverse": {
-+ "version": "5.3.0",
-+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-+ "engines": {
-+ "node": ">=4.0"
-+ }
-+ },
-+ "node_modules/esutils": {
-+ "version": "2.0.3",
-+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-+ "engines": {
-+ "node": ">=0.10.0"
-+ }
-+ },
-+ "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=="
-+ },
-+ "node_modules/fast-glob": {
-+ "version": "3.2.12",
-+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
-+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
-+ "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.6.0"
-+ }
-+ },
-+ "node_modules/fast-glob/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==",
-+ "dependencies": {
-+ "is-glob": "^4.0.1"
-+ },
-+ "engines": {
-+ "node": ">= 6"
-+ }
-+ },
-+ "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=="
-+ },
-+ "node_modules/fast-levenshtein": {
-+ "version": "2.0.6",
-+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
-+ },
-+ "node_modules/fastq": {
-+ "version": "1.14.0",
-+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz",
-+ "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==",
-+ "dependencies": {
-+ "reusify": "^1.0.4"
-+ }
-+ },
-+ "node_modules/file-entry-cache": {
-+ "version": "6.0.1",
-+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
-+ "dependencies": {
-+ "flat-cache": "^3.0.4"
-+ },
-+ "engines": {
-+ "node": "^10.12.0 || >=12.0.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==",
-+ "dependencies": {
-+ "to-regex-range": "^5.0.1"
-+ },
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "node_modules/find-up": {
-+ "version": "5.0.0",
-+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
-+ "dependencies": {
-+ "locate-path": "^6.0.0",
-+ "path-exists": "^4.0.0"
-+ },
-+ "engines": {
-+ "node": ">=10"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/flat-cache": {
-+ "version": "3.0.4",
-+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
-+ "dependencies": {
-+ "flatted": "^3.1.0",
-+ "rimraf": "^3.0.2"
-+ },
-+ "engines": {
-+ "node": "^10.12.0 || >=12.0.0"
-+ }
-+ },
-+ "node_modules/flatted": {
-+ "version": "3.2.7",
-+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
-+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
-+ },
-+ "node_modules/fs.realpath": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
-+ },
-+ "node_modules/function-bind": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
-+ },
-+ "node_modules/function.prototype.name": {
-+ "version": "1.1.5",
-+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
-+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.3",
-+ "es-abstract": "^1.19.0",
-+ "functions-have-names": "^1.2.2"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/functions-have-names": {
-+ "version": "1.2.3",
-+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
-+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/get-intrinsic": {
-+ "version": "1.1.3",
-+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
-+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
-+ "dependencies": {
-+ "function-bind": "^1.1.1",
-+ "has": "^1.0.3",
-+ "has-symbols": "^1.0.3"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/get-symbol-description": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
-+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "get-intrinsic": "^1.1.1"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/get-tsconfig": {
-+ "version": "4.2.0",
-+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.2.0.tgz",
-+ "integrity": "sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==",
-+ "funding": {
-+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
-+ }
-+ },
-+ "node_modules/glob": {
-+ "version": "7.1.7",
-+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
-+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
-+ "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": "6.0.2",
-+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-+ "dependencies": {
-+ "is-glob": "^4.0.3"
-+ },
-+ "engines": {
-+ "node": ">=10.13.0"
-+ }
-+ },
-+ "node_modules/globals": {
-+ "version": "13.19.0",
-+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
-+ "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
-+ "dependencies": {
-+ "type-fest": "^0.20.2"
-+ },
-+ "engines": {
-+ "node": ">=8"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/globalyzer": {
-+ "version": "0.1.0",
-+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
-+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="
-+ },
-+ "node_modules/globby": {
-+ "version": "11.1.0",
-+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-+ "dependencies": {
-+ "array-union": "^2.1.0",
-+ "dir-glob": "^3.0.1",
-+ "fast-glob": "^3.2.9",
-+ "ignore": "^5.2.0",
-+ "merge2": "^1.4.1",
-+ "slash": "^3.0.0"
-+ },
-+ "engines": {
-+ "node": ">=10"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/globrex": {
-+ "version": "0.1.2",
-+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
-+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
-+ },
-+ "node_modules/gopd": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
-+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
-+ "dependencies": {
-+ "get-intrinsic": "^1.1.3"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/graceful-fs": {
-+ "version": "4.2.10",
-+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
-+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
-+ },
-+ "node_modules/grapheme-splitter": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
-+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
-+ },
-+ "node_modules/has": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-+ "dependencies": {
-+ "function-bind": "^1.1.1"
-+ },
-+ "engines": {
-+ "node": ">= 0.4.0"
-+ }
-+ },
-+ "node_modules/has-bigints": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
-+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "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==",
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "node_modules/has-property-descriptors": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
-+ "dependencies": {
-+ "get-intrinsic": "^1.1.1"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/has-symbols": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
-+ "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==",
-+ "dependencies": {
-+ "has-symbols": "^1.0.2"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/ignore": {
-+ "version": "5.2.4",
-+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
-+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
-+ "engines": {
-+ "node": ">= 4"
-+ }
-+ },
-+ "node_modules/import-fresh": {
-+ "version": "3.3.0",
-+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
-+ "dependencies": {
-+ "parent-module": "^1.0.0",
-+ "resolve-from": "^4.0.0"
-+ },
-+ "engines": {
-+ "node": ">=6"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/imurmurhash": {
-+ "version": "0.1.4",
-+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
-+ "engines": {
-+ "node": ">=0.8.19"
-+ }
-+ },
-+ "node_modules/inflight": {
-+ "version": "1.0.6",
-+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-+ "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=="
-+ },
-+ "node_modules/internal-slot": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
-+ "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
-+ "dependencies": {
-+ "get-intrinsic": "^1.1.3",
-+ "has": "^1.0.3",
-+ "side-channel": "^1.0.4"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ }
-+ },
-+ "node_modules/is-bigint": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
-+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
-+ "dependencies": {
-+ "has-bigints": "^1.0.1"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/is-boolean-object": {
-+ "version": "1.1.2",
-+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
-+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
-+ "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-callable": {
-+ "version": "1.2.7",
-+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
-+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/is-core-module": {
-+ "version": "2.11.0",
-+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
-+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
-+ "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==",
-+ "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==",
-+ "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": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-+ "engines": {
-+ "node": ">=0.10.0"
-+ }
-+ },
-+ "node_modules/is-glob": {
-+ "version": "4.0.3",
-+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-+ "dependencies": {
-+ "is-extglob": "^2.1.1"
-+ },
-+ "engines": {
-+ "node": ">=0.10.0"
-+ }
-+ },
-+ "node_modules/is-negative-zero": {
-+ "version": "2.0.2",
-+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "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==",
-+ "engines": {
-+ "node": ">=0.12.0"
-+ }
-+ },
-+ "node_modules/is-number-object": {
-+ "version": "1.0.7",
-+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
-+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
-+ "dependencies": {
-+ "has-tostringtag": "^1.0.0"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "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==",
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "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==",
-+ "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-shared-array-buffer": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
-+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/is-string": {
-+ "version": "1.0.7",
-+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
-+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
-+ "dependencies": {
-+ "has-tostringtag": "^1.0.0"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/is-symbol": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
-+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
-+ "dependencies": {
-+ "has-symbols": "^1.0.2"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/is-weakref": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "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==",
-+ "dependencies": {
-+ "is-docker": "^2.0.0"
-+ },
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "node_modules/isexe": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
-+ },
-+ "node_modules/js-sdsl": {
-+ "version": "4.2.0",
-+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
-+ "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==",
-+ "funding": {
-+ "type": "opencollective",
-+ "url": "https://opencollective.com/js-sdsl"
-+ }
-+ },
-+ "node_modules/js-tokens": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-+ },
-+ "node_modules/js-yaml": {
-+ "version": "4.1.0",
-+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-+ "dependencies": {
-+ "argparse": "^2.0.1"
-+ },
-+ "bin": {
-+ "js-yaml": "bin/js-yaml.js"
-+ }
-+ },
-+ "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=="
-+ },
-+ "node_modules/json-stable-stringify-without-jsonify": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
-+ },
-+ "node_modules/json5": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-+ "dependencies": {
-+ "minimist": "^1.2.0"
-+ },
-+ "bin": {
-+ "json5": "lib/cli.js"
-+ }
-+ },
-+ "node_modules/jsx-ast-utils": {
-+ "version": "3.3.3",
-+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
-+ "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==",
-+ "dependencies": {
-+ "array-includes": "^3.1.5",
-+ "object.assign": "^4.1.3"
-+ },
-+ "engines": {
-+ "node": ">=4.0"
-+ }
-+ },
-+ "node_modules/language-subtag-registry": {
-+ "version": "0.3.22",
-+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
-+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w=="
-+ },
-+ "node_modules/language-tags": {
-+ "version": "1.0.7",
-+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.7.tgz",
-+ "integrity": "sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw==",
-+ "dependencies": {
-+ "language-subtag-registry": "^0.3.20"
-+ }
-+ },
-+ "node_modules/levn": {
-+ "version": "0.4.1",
-+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-+ "dependencies": {
-+ "prelude-ls": "^1.2.1",
-+ "type-check": "~0.4.0"
-+ },
-+ "engines": {
-+ "node": ">= 0.8.0"
-+ }
-+ },
-+ "node_modules/locate-path": {
-+ "version": "6.0.0",
-+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
-+ "dependencies": {
-+ "p-locate": "^5.0.0"
-+ },
-+ "engines": {
-+ "node": ">=10"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/lodash.merge": {
-+ "version": "4.6.2",
-+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
-+ },
-+ "node_modules/loose-envify": {
-+ "version": "1.4.0",
-+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-+ "dependencies": {
-+ "js-tokens": "^3.0.0 || ^4.0.0"
-+ },
-+ "bin": {
-+ "loose-envify": "cli.js"
-+ }
-+ },
-+ "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==",
-+ "dependencies": {
-+ "yallist": "^4.0.0"
-+ },
-+ "engines": {
-+ "node": ">=10"
-+ }
-+ },
-+ "node_modules/merge2": {
-+ "version": "1.4.1",
-+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-+ "engines": {
-+ "node": ">= 8"
-+ }
-+ },
-+ "node_modules/micromatch": {
-+ "version": "4.0.5",
-+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
-+ "dependencies": {
-+ "braces": "^3.0.2",
-+ "picomatch": "^2.3.1"
-+ },
-+ "engines": {
-+ "node": ">=8.6"
-+ }
-+ },
-+ "node_modules/minimatch": {
-+ "version": "3.1.2",
-+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-+ "dependencies": {
-+ "brace-expansion": "^1.1.7"
-+ },
-+ "engines": {
-+ "node": "*"
-+ }
-+ },
-+ "node_modules/minimist": {
-+ "version": "1.2.7",
-+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
-+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "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=="
-+ },
-+ "node_modules/nanoid": {
-+ "version": "3.3.4",
-+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
-+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
-+ "bin": {
-+ "nanoid": "bin/nanoid.cjs"
-+ },
-+ "engines": {
-+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-+ }
-+ },
-+ "node_modules/natural-compare": {
-+ "version": "1.4.0",
-+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
-+ },
-+ "node_modules/next": {
-+ "version": "13.1.1",
-+ "resolved": "https://registry.npmjs.org/next/-/next-13.1.1.tgz",
-+ "integrity": "sha512-R5eBAaIa3X7LJeYvv1bMdGnAVF4fVToEjim7MkflceFPuANY3YyvFxXee/A+acrSYwYPvOvf7f6v/BM/48ea5w==",
-+ "dependencies": {
-+ "@next/env": "13.1.1",
-+ "@swc/helpers": "0.4.14",
-+ "caniuse-lite": "^1.0.30001406",
-+ "postcss": "8.4.14",
-+ "styled-jsx": "5.1.1"
-+ },
-+ "bin": {
-+ "next": "dist/bin/next"
-+ },
-+ "engines": {
-+ "node": ">=14.6.0"
-+ },
-+ "optionalDependencies": {
-+ "@next/swc-android-arm-eabi": "13.1.1",
-+ "@next/swc-android-arm64": "13.1.1",
-+ "@next/swc-darwin-arm64": "13.1.1",
-+ "@next/swc-darwin-x64": "13.1.1",
-+ "@next/swc-freebsd-x64": "13.1.1",
-+ "@next/swc-linux-arm-gnueabihf": "13.1.1",
-+ "@next/swc-linux-arm64-gnu": "13.1.1",
-+ "@next/swc-linux-arm64-musl": "13.1.1",
-+ "@next/swc-linux-x64-gnu": "13.1.1",
-+ "@next/swc-linux-x64-musl": "13.1.1",
-+ "@next/swc-win32-arm64-msvc": "13.1.1",
-+ "@next/swc-win32-ia32-msvc": "13.1.1",
-+ "@next/swc-win32-x64-msvc": "13.1.1"
-+ },
-+ "peerDependencies": {
-+ "fibers": ">= 3.1.0",
-+ "node-sass": "^6.0.0 || ^7.0.0",
-+ "react": "^18.2.0",
-+ "react-dom": "^18.2.0",
-+ "sass": "^1.3.0"
-+ },
-+ "peerDependenciesMeta": {
-+ "fibers": {
-+ "optional": true
-+ },
-+ "node-sass": {
-+ "optional": true
-+ },
-+ "sass": {
-+ "optional": true
-+ }
-+ }
-+ },
-+ "node_modules/object-assign": {
-+ "version": "4.1.1",
-+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-+ "engines": {
-+ "node": ">=0.10.0"
-+ }
-+ },
-+ "node_modules/object-inspect": {
-+ "version": "1.12.2",
-+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
-+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
-+ "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==",
-+ "engines": {
-+ "node": ">= 0.4"
-+ }
-+ },
-+ "node_modules/object.assign": {
-+ "version": "4.1.4",
-+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
-+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.4",
-+ "has-symbols": "^1.0.3",
-+ "object-keys": "^1.1.1"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/object.entries": {
-+ "version": "1.1.6",
-+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
-+ "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.4",
-+ "es-abstract": "^1.20.4"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ }
-+ },
-+ "node_modules/object.fromentries": {
-+ "version": "2.0.6",
-+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
-+ "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.4",
-+ "es-abstract": "^1.20.4"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/object.hasown": {
-+ "version": "1.1.2",
-+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz",
-+ "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==",
-+ "dependencies": {
-+ "define-properties": "^1.1.4",
-+ "es-abstract": "^1.20.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/object.values": {
-+ "version": "1.1.6",
-+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
-+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.4",
-+ "es-abstract": "^1.20.4"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/once": {
-+ "version": "1.4.0",
-+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-+ "dependencies": {
-+ "wrappy": "1"
-+ }
-+ },
-+ "node_modules/open": {
-+ "version": "8.4.0",
-+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
-+ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
-+ "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/optionator": {
-+ "version": "0.9.1",
-+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
-+ "dependencies": {
-+ "deep-is": "^0.1.3",
-+ "fast-levenshtein": "^2.0.6",
-+ "levn": "^0.4.1",
-+ "prelude-ls": "^1.2.1",
-+ "type-check": "^0.4.0",
-+ "word-wrap": "^1.2.3"
-+ },
-+ "engines": {
-+ "node": ">= 0.8.0"
-+ }
-+ },
-+ "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==",
-+ "dependencies": {
-+ "yocto-queue": "^0.1.0"
-+ },
-+ "engines": {
-+ "node": ">=10"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/p-locate": {
-+ "version": "5.0.0",
-+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
-+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
-+ "dependencies": {
-+ "p-limit": "^3.0.2"
-+ },
-+ "engines": {
-+ "node": ">=10"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/parent-module": {
-+ "version": "1.0.1",
-+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-+ "dependencies": {
-+ "callsites": "^3.0.0"
-+ },
-+ "engines": {
-+ "node": ">=6"
-+ }
-+ },
-+ "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==",
-+ "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
-+ "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==",
-+ "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=="
-+ },
-+ "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==",
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "node_modules/picocolors": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
-+ },
-+ "node_modules/picomatch": {
-+ "version": "2.3.1",
-+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-+ "engines": {
-+ "node": ">=8.6"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/jonschlinkert"
-+ }
-+ },
-+ "node_modules/postcss": {
-+ "version": "8.4.14",
-+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
-+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
-+ "funding": [
-+ {
-+ "type": "opencollective",
-+ "url": "https://opencollective.com/postcss/"
-+ },
-+ {
-+ "type": "tidelift",
-+ "url": "https://tidelift.com/funding/github/npm/postcss"
-+ }
-+ ],
-+ "dependencies": {
-+ "nanoid": "^3.3.4",
-+ "picocolors": "^1.0.0",
-+ "source-map-js": "^1.0.2"
-+ },
-+ "engines": {
-+ "node": "^10 || ^12 || >=14"
-+ }
-+ },
-+ "node_modules/prelude-ls": {
-+ "version": "1.2.1",
-+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-+ "engines": {
-+ "node": ">= 0.8.0"
-+ }
-+ },
-+ "node_modules/prettier": {
-+ "version": "2.8.1",
-+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz",
-+ "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==",
-+ "dev": true,
-+ "bin": {
-+ "prettier": "bin-prettier.js"
-+ },
-+ "engines": {
-+ "node": ">=10.13.0"
-+ },
-+ "funding": {
-+ "url": "https://github.com/prettier/prettier?sponsor=1"
-+ }
-+ },
-+ "node_modules/prop-types": {
-+ "version": "15.8.1",
-+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
-+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
-+ "dependencies": {
-+ "loose-envify": "^1.4.0",
-+ "object-assign": "^4.1.1",
-+ "react-is": "^16.13.1"
-+ }
-+ },
-+ "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==",
-+ "engines": {
-+ "node": ">=6"
-+ }
-+ },
-+ "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==",
-+ "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/react": {
-+ "version": "18.2.0",
-+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
-+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
-+ "dependencies": {
-+ "loose-envify": "^1.1.0"
-+ },
-+ "engines": {
-+ "node": ">=0.10.0"
-+ }
-+ },
-+ "node_modules/react-dom": {
-+ "version": "18.2.0",
-+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
-+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
-+ "dependencies": {
-+ "loose-envify": "^1.1.0",
-+ "scheduler": "^0.23.0"
-+ },
-+ "peerDependencies": {
-+ "react": "^18.2.0"
-+ }
-+ },
-+ "node_modules/react-is": {
-+ "version": "16.13.1",
-+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-+ },
-+ "node_modules/regenerator-runtime": {
-+ "version": "0.13.11",
-+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
-+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
-+ },
-+ "node_modules/regexp.prototype.flags": {
-+ "version": "1.4.3",
-+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
-+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.3",
-+ "functions-have-names": "^1.2.2"
-+ },
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/regexpp": {
-+ "version": "3.2.0",
-+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-+ "engines": {
-+ "node": ">=8"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/mysticatea"
-+ }
-+ },
-+ "node_modules/resolve": {
-+ "version": "1.22.1",
-+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
-+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
-+ "dependencies": {
-+ "is-core-module": "^2.9.0",
-+ "path-parse": "^1.0.7",
-+ "supports-preserve-symlinks-flag": "^1.0.0"
-+ },
-+ "bin": {
-+ "resolve": "bin/resolve"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/resolve-from": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-+ "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==",
-+ "engines": {
-+ "iojs": ">=1.0.0",
-+ "node": ">=0.10.0"
-+ }
-+ },
-+ "node_modules/rimraf": {
-+ "version": "3.0.2",
-+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-+ "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==",
-+ "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-regex-test": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
-+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "get-intrinsic": "^1.1.3",
-+ "is-regex": "^1.1.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/scheduler": {
-+ "version": "0.23.0",
-+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
-+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
-+ "dependencies": {
-+ "loose-envify": "^1.1.0"
-+ }
-+ },
-+ "node_modules/semver": {
-+ "version": "7.3.8",
-+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
-+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
-+ "dependencies": {
-+ "lru-cache": "^6.0.0"
-+ },
-+ "bin": {
-+ "semver": "bin/semver.js"
-+ },
-+ "engines": {
-+ "node": ">=10"
-+ }
-+ },
-+ "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==",
-+ "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==",
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "node_modules/side-channel": {
-+ "version": "1.0.4",
-+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
-+ "dependencies": {
-+ "call-bind": "^1.0.0",
-+ "get-intrinsic": "^1.0.2",
-+ "object-inspect": "^1.9.0"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/slash": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "node_modules/source-map-js": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
-+ "engines": {
-+ "node": ">=0.10.0"
-+ }
-+ },
-+ "node_modules/string.prototype.matchall": {
-+ "version": "4.0.8",
-+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
-+ "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.4",
-+ "es-abstract": "^1.20.4",
-+ "get-intrinsic": "^1.1.3",
-+ "has-symbols": "^1.0.3",
-+ "internal-slot": "^1.0.3",
-+ "regexp.prototype.flags": "^1.4.3",
-+ "side-channel": "^1.0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/string.prototype.trimend": {
-+ "version": "1.0.6",
-+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
-+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.4",
-+ "es-abstract": "^1.20.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/string.prototype.trimstart": {
-+ "version": "1.0.6",
-+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
-+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "define-properties": "^1.1.4",
-+ "es-abstract": "^1.20.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/strip-ansi": {
-+ "version": "6.0.1",
-+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-+ "dependencies": {
-+ "ansi-regex": "^5.0.1"
-+ },
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "node_modules/strip-bom": {
-+ "version": "3.0.0",
-+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
-+ "engines": {
-+ "node": ">=4"
-+ }
-+ },
-+ "node_modules/strip-json-comments": {
-+ "version": "3.1.1",
-+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-+ "engines": {
-+ "node": ">=8"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/styled-jsx": {
-+ "version": "5.1.1",
-+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
-+ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
-+ "dependencies": {
-+ "client-only": "0.0.1"
-+ },
-+ "engines": {
-+ "node": ">= 12.0.0"
-+ },
-+ "peerDependencies": {
-+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
-+ },
-+ "peerDependenciesMeta": {
-+ "@babel/core": {
-+ "optional": true
-+ },
-+ "babel-plugin-macros": {
-+ "optional": true
-+ }
-+ }
-+ },
-+ "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==",
-+ "dependencies": {
-+ "has-flag": "^4.0.0"
-+ },
-+ "engines": {
-+ "node": ">=8"
-+ }
-+ },
-+ "node_modules/supports-preserve-symlinks-flag": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-+ "engines": {
-+ "node": ">= 0.4"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/synckit": {
-+ "version": "0.8.4",
-+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz",
-+ "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==",
-+ "dependencies": {
-+ "@pkgr/utils": "^2.3.1",
-+ "tslib": "^2.4.0"
-+ },
-+ "engines": {
-+ "node": "^14.18.0 || >=16.0.0"
-+ },
-+ "funding": {
-+ "url": "https://opencollective.com/unts"
-+ }
-+ },
-+ "node_modules/tapable": {
-+ "version": "2.2.1",
-+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
-+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
-+ "engines": {
-+ "node": ">=6"
-+ }
-+ },
-+ "node_modules/text-table": {
-+ "version": "0.2.0",
-+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
-+ },
-+ "node_modules/tiny-glob": {
-+ "version": "0.2.9",
-+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
-+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
-+ "dependencies": {
-+ "globalyzer": "0.1.0",
-+ "globrex": "^0.1.2"
-+ }
-+ },
-+ "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==",
-+ "dependencies": {
-+ "is-number": "^7.0.0"
-+ },
-+ "engines": {
-+ "node": ">=8.0"
-+ }
-+ },
-+ "node_modules/tsconfig-paths": {
-+ "version": "3.14.1",
-+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
-+ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
-+ "dependencies": {
-+ "@types/json5": "^0.0.29",
-+ "json5": "^1.0.1",
-+ "minimist": "^1.2.6",
-+ "strip-bom": "^3.0.0"
-+ }
-+ },
-+ "node_modules/tslib": {
-+ "version": "2.4.1",
-+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
-+ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
-+ },
-+ "node_modules/tsutils": {
-+ "version": "3.21.0",
-+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
-+ "dependencies": {
-+ "tslib": "^1.8.1"
-+ },
-+ "engines": {
-+ "node": ">= 6"
-+ },
-+ "peerDependencies": {
-+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
-+ }
-+ },
-+ "node_modules/tsutils/node_modules/tslib": {
-+ "version": "1.14.1",
-+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-+ },
-+ "node_modules/type-check": {
-+ "version": "0.4.0",
-+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-+ "dependencies": {
-+ "prelude-ls": "^1.2.1"
-+ },
-+ "engines": {
-+ "node": ">= 0.8.0"
-+ }
-+ },
-+ "node_modules/type-fest": {
-+ "version": "0.20.2",
-+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-+ "engines": {
-+ "node": ">=10"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ },
-+ "node_modules/typescript": {
-+ "version": "4.9.4",
-+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
-+ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
-+ "bin": {
-+ "tsc": "bin/tsc",
-+ "tsserver": "bin/tsserver"
-+ },
-+ "engines": {
-+ "node": ">=4.2.0"
-+ }
-+ },
-+ "node_modules/unbox-primitive": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
-+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
-+ "dependencies": {
-+ "call-bind": "^1.0.2",
-+ "has-bigints": "^1.0.2",
-+ "has-symbols": "^1.0.3",
-+ "which-boxed-primitive": "^1.0.2"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/uri-js": {
-+ "version": "4.4.1",
-+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-+ "dependencies": {
-+ "punycode": "^2.1.0"
-+ }
-+ },
-+ "node_modules/which": {
-+ "version": "2.0.2",
-+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-+ "dependencies": {
-+ "isexe": "^2.0.0"
-+ },
-+ "bin": {
-+ "node-which": "bin/node-which"
-+ },
-+ "engines": {
-+ "node": ">= 8"
-+ }
-+ },
-+ "node_modules/which-boxed-primitive": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
-+ "dependencies": {
-+ "is-bigint": "^1.0.1",
-+ "is-boolean-object": "^1.1.0",
-+ "is-number-object": "^1.0.4",
-+ "is-string": "^1.0.5",
-+ "is-symbol": "^1.0.3"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/ljharb"
-+ }
-+ },
-+ "node_modules/word-wrap": {
-+ "version": "1.2.3",
-+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-+ "engines": {
-+ "node": ">=0.10.0"
-+ }
-+ },
-+ "node_modules/wrappy": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
-+ },
-+ "node_modules/yallist": {
-+ "version": "4.0.0",
-+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
-+ },
-+ "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==",
-+ "engines": {
-+ "node": ">=10"
-+ },
-+ "funding": {
-+ "url": "https://github.com/sponsors/sindresorhus"
-+ }
-+ }
-+ }
-+}
-diff --git a/js/test/nextjs/package.json b/js/test/nextjs/package.json
-new file mode 100644
-index 0000000..f57e111
---- /dev/null
-+++ b/js/test/nextjs/package.json
-@@ -0,0 +1,28 @@
-+{
-+ "name": "shine-nextjs-test-app",
-+ "version": "0.1.0",
-+ "private": true,
-+ "scripts": {
-+ "dev": "next dev",
-+ "lint": "next lint --fix",
-+ "build": "next build && next export && touch out/.nojekyll",
-+ "format": "prettier '**/*.{ts,tsx,js,jsx}' --write",
-+ "typecheck": "tsc --noEmit"
-+ },
-+ "dependencies": {
-+ "@next/font": "13.1.1",
-+ "@toots/shine.js": "file:../..",
-+ "@types/node": "18.11.18",
-+ "@types/react": "18.0.26",
-+ "@types/react-dom": "18.0.10",
-+ "eslint": "8.31.0",
-+ "eslint-config-next": "13.1.1",
-+ "next": "13.1.1",
-+ "react": "18.2.0",
-+ "react-dom": "18.2.0",
-+ "typescript": "4.9.4"
-+ },
-+ "devDependencies": {
-+ "prettier": "^2.8.1"
-+ }
-+}
-diff --git a/js/test/nextjs/pages/index.tsx b/js/test/nextjs/pages/index.tsx
-new file mode 100644
-index 0000000..4bf771a
---- /dev/null
-+++ b/js/test/nextjs/pages/index.tsx
-@@ -0,0 +1,50 @@
-+import { Fragment, useEffect, useState, useCallback } from "react"
-+import { runEncodeTest } from "@shine/lib/encode"
-+import { runRoundsTest } from "@shine/lib/rounds"
-+
-+const logEntries: string[] = []
-+let encoderStarted = false
-+
-+export default function Home() {
-+ const [logs, setLogs] = useState(logEntries)
-+ const [encodedBlobUrl, setEncodedBlobUrl] = useState<string | undefined>()
-+
-+ const log = useCallback(
-+ (entry: string) => {
-+ logEntries.push(entry)
-+ setLogs(logEntries)
-+ },
-+ [setLogs]
-+ )
-+
-+ useEffect(() => {
-+ if (encoderStarted) return
-+
-+ runEncodeTest(log, blob => {
-+ if (!encodedBlobUrl) setEncodedBlobUrl(URL.createObjectURL(blob))
-+
-+ log("")
-+ runRoundsTest(log)
-+ })
-+
-+ encoderStarted = true
-+ }, [log, encodedBlobUrl, setEncodedBlobUrl])
-+
-+ return (
-+ <>
-+ {encodedBlobUrl && (
-+ <a href={encodedBlobUrl} download='encoded.mp3'>
-+ Download encoded file
-+ </a>
-+ )}
-+ <div>
-+ {logs.map(entry => (
-+ <Fragment key={entry}>
-+ {entry}
-+ <br />
-+ </Fragment>
-+ ))}
-+ </div>
-+ </>
-+ )
-+}
-diff --git a/js/test/nextjs/pnpm-lock.yaml b/js/test/nextjs/pnpm-lock.yaml
-new file mode 100644
-index 0000000..562cc68
---- /dev/null
-+++ b/js/test/nextjs/pnpm-lock.yaml
-@@ -0,0 +1,2032 @@
-+lockfileVersion: 5.4
-+
-+specifiers:
-+ '@next/font': 13.1.1
-+ '@toots/shine.js': file:../..
-+ '@types/node': 18.11.18
-+ '@types/react': 18.0.26
-+ '@types/react-dom': 18.0.10
-+ eslint: 8.31.0
-+ eslint-config-next: 13.1.1
-+ next: 13.1.1
-+ prettier: ^2.8.1
-+ react: 18.2.0
-+ react-dom: 18.2.0
-+ typescript: 4.9.4
-+
-+dependencies:
-+ '@next/font': 13.1.1
-+ '@toots/shine.js': file:../..
-+ '@types/node': 18.11.18
-+ '@types/react': 18.0.26
-+ '@types/react-dom': 18.0.10
-+ eslint: 8.31.0
-+ eslint-config-next: 13.1.1_iukboom6ndih5an6iafl45j2fe
-+ next: 13.1.1_biqbaboplfbrettd7655fr4n2y
-+ react: 18.2.0
-+ react-dom: 18.2.0_react@18.2.0
-+ typescript: 4.9.4
-+
-+devDependencies:
-+ prettier: 2.8.1
-+
-+packages:
-+
-+ /@babel/runtime-corejs3/7.20.7:
-+ resolution: {integrity: sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg==}
-+ engines: {node: '>=6.9.0'}
-+ dependencies:
-+ core-js-pure: 3.27.1
-+ regenerator-runtime: 0.13.11
-+ dev: false
-+
-+ /@babel/runtime/7.20.7:
-+ resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==}
-+ engines: {node: '>=6.9.0'}
-+ dependencies:
-+ regenerator-runtime: 0.13.11
-+ dev: false
-+
-+ /@eslint/eslintrc/1.4.1:
-+ resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==}
-+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-+ dependencies:
-+ ajv: 6.12.6
-+ debug: 4.3.4
-+ espree: 9.4.1
-+ globals: 13.19.0
-+ ignore: 5.2.4
-+ import-fresh: 3.3.0
-+ js-yaml: 4.1.0
-+ minimatch: 3.1.2
-+ strip-json-comments: 3.1.1
-+ transitivePeerDependencies:
-+ - supports-color
-+ dev: false
-+
-+ /@humanwhocodes/config-array/0.11.8:
-+ resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
-+ engines: {node: '>=10.10.0'}
-+ dependencies:
-+ '@humanwhocodes/object-schema': 1.2.1
-+ debug: 4.3.4
-+ minimatch: 3.1.2
-+ transitivePeerDependencies:
-+ - supports-color
-+ dev: false
-+
-+ /@humanwhocodes/module-importer/1.0.1:
-+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
-+ engines: {node: '>=12.22'}
-+ dev: false
-+
-+ /@humanwhocodes/object-schema/1.2.1:
-+ resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
-+ dev: false
-+
-+ /@next/env/13.1.1:
-+ resolution: {integrity: sha512-vFMyXtPjSAiOXOywMojxfKIqE3VWN5RCAx+tT3AS3pcKjMLFTCJFUWsKv8hC+87Z1F4W3r68qTwDFZIFmd5Xkw==}
-+ dev: false
-+
-+ /@next/eslint-plugin-next/13.1.1:
-+ resolution: {integrity: sha512-SBrOFS8PC3nQ5aeZmawJkjKkWjwK9RoxvBSv/86nZp0ubdoVQoko8r8htALd9ufp16NhacCdqhu9bzZLDWtALQ==}
-+ dependencies:
-+ glob: 7.1.7
-+ dev: false
-+
-+ /@next/font/13.1.1:
-+ resolution: {integrity: sha512-amygRorS05hYK1/XQRZo5qBl7l2fpHnezeKU/cNveWU5QJg+sg8gMGkUXHtvesNKpiKIJshBRH1TzvO+2sKpvQ==}
-+ dev: false
-+
-+ /@next/swc-android-arm-eabi/13.1.1:
-+ resolution: {integrity: sha512-qnFCx1kT3JTWhWve4VkeWuZiyjG0b5T6J2iWuin74lORCupdrNukxkq9Pm+Z7PsatxuwVJMhjUoYz7H4cWzx2A==}
-+ engines: {node: '>= 10'}
-+ cpu: [arm]
-+ os: [android]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-android-arm64/13.1.1:
-+ resolution: {integrity: sha512-eCiZhTzjySubNqUnNkQCjU3Fh+ep3C6b5DCM5FKzsTH/3Gr/4Y7EiaPZKILbvnXmhWtKPIdcY6Zjx51t4VeTfA==}
-+ engines: {node: '>= 10'}
-+ cpu: [arm64]
-+ os: [android]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-darwin-arm64/13.1.1:
-+ resolution: {integrity: sha512-9zRJSSIwER5tu9ADDkPw5rIZ+Np44HTXpYMr0rkM656IvssowPxmhK0rTreC1gpUCYwFsRbxarUJnJsTWiutPg==}
-+ engines: {node: '>= 10'}
-+ cpu: [arm64]
-+ os: [darwin]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-darwin-x64/13.1.1:
-+ resolution: {integrity: sha512-qWr9qEn5nrnlhB0rtjSdR00RRZEtxg4EGvicIipqZWEyayPxhUu6NwKiG8wZiYZCLfJ5KWr66PGSNeDMGlNaiA==}
-+ engines: {node: '>= 10'}
-+ cpu: [x64]
-+ os: [darwin]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-freebsd-x64/13.1.1:
-+ resolution: {integrity: sha512-UwP4w/NcQ7V/VJEj3tGVszgb4pyUCt3lzJfUhjDMUmQbzG9LDvgiZgAGMYH6L21MoyAATJQPDGiAMWAPKsmumA==}
-+ engines: {node: '>= 10'}
-+ cpu: [x64]
-+ os: [freebsd]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-linux-arm-gnueabihf/13.1.1:
-+ resolution: {integrity: sha512-CnsxmKHco9sosBs1XcvCXP845Db+Wx1G0qouV5+Gr+HT/ZlDYEWKoHVDgnJXLVEQzq4FmHddBNGbXvgqM1Gfkg==}
-+ engines: {node: '>= 10'}
-+ cpu: [arm]
-+ os: [linux]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-linux-arm64-gnu/13.1.1:
-+ resolution: {integrity: sha512-JfDq1eri5Dif+VDpTkONRd083780nsMCOKoFG87wA0sa4xL8LGcXIBAkUGIC1uVy9SMsr2scA9CySLD/i+Oqiw==}
-+ engines: {node: '>= 10'}
-+ cpu: [arm64]
-+ os: [linux]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-linux-arm64-musl/13.1.1:
-+ resolution: {integrity: sha512-GA67ZbDq2AW0CY07zzGt07M5b5Yaq5qUpFIoW3UFfjOPgb0Sqf3DAW7GtFMK1sF4ROHsRDMGQ9rnT0VM2dVfKA==}
-+ engines: {node: '>= 10'}
-+ cpu: [arm64]
-+ os: [linux]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-linux-x64-gnu/13.1.1:
-+ resolution: {integrity: sha512-nnjuBrbzvqaOJaV+XgT8/+lmXrSCOt1YYZn/irbDb2fR2QprL6Q7WJNgwsZNxiLSfLdv+2RJGGegBx9sLBEzGA==}
-+ engines: {node: '>= 10'}
-+ cpu: [x64]
-+ os: [linux]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-linux-x64-musl/13.1.1:
-+ resolution: {integrity: sha512-CM9xnAQNIZ8zf/igbIT/i3xWbQZYaF397H+JroF5VMOCUleElaMdQLL5riJml8wUfPoN3dtfn2s4peSr3azz/g==}
-+ engines: {node: '>= 10'}
-+ cpu: [x64]
-+ os: [linux]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-win32-arm64-msvc/13.1.1:
-+ resolution: {integrity: sha512-pzUHOGrbgfGgPlOMx9xk3QdPJoRPU+om84hqVoe6u+E0RdwOG0Ho/2UxCgDqmvpUrMab1Deltlt6RqcXFpnigQ==}
-+ engines: {node: '>= 10'}
-+ cpu: [arm64]
-+ os: [win32]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-win32-ia32-msvc/13.1.1:
-+ resolution: {integrity: sha512-WeX8kVS46aobM9a7Xr/kEPcrTyiwJqQv/tbw6nhJ4fH9xNZ+cEcyPoQkwPo570dCOLz3Zo9S2q0E6lJ/EAUOBg==}
-+ engines: {node: '>= 10'}
-+ cpu: [ia32]
-+ os: [win32]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@next/swc-win32-x64-msvc/13.1.1:
-+ resolution: {integrity: sha512-mVF0/3/5QAc5EGVnb8ll31nNvf3BWpPY4pBb84tk+BfQglWLqc5AC9q1Ht/YMWiEgs8ALNKEQ3GQnbY0bJF2Gg==}
-+ engines: {node: '>= 10'}
-+ cpu: [x64]
-+ os: [win32]
-+ requiresBuild: true
-+ dev: false
-+ optional: true
-+
-+ /@nodelib/fs.scandir/2.1.5:
-+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
-+ engines: {node: '>= 8'}
-+ dependencies:
-+ '@nodelib/fs.stat': 2.0.5
-+ run-parallel: 1.2.0
-+ dev: false
-+
-+ /@nodelib/fs.stat/2.0.5:
-+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
-+ engines: {node: '>= 8'}
-+ dev: false
-+
-+ /@nodelib/fs.walk/1.2.8:
-+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
-+ engines: {node: '>= 8'}
-+ dependencies:
-+ '@nodelib/fs.scandir': 2.1.5
-+ fastq: 1.14.0
-+ dev: false
-+
-+ /@pkgr/utils/2.3.1:
-+ resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==}
-+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
-+ dependencies:
-+ cross-spawn: 7.0.3
-+ is-glob: 4.0.3
-+ open: 8.4.0
-+ picocolors: 1.0.0
-+ tiny-glob: 0.2.9
-+ tslib: 2.4.1
-+ dev: false
-+
-+ /@rushstack/eslint-patch/1.2.0:
-+ resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==}
-+ dev: false
-+
-+ /@swc/helpers/0.4.14:
-+ resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
-+ dependencies:
-+ tslib: 2.4.1
-+ dev: false
-+
-+ /@types/json5/0.0.29:
-+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
-+ dev: false
-+
-+ /@types/node/18.11.18:
-+ resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
-+ dev: false
-+
-+ /@types/prop-types/15.7.5:
-+ resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
-+ dev: false
-+
-+ /@types/react-dom/18.0.10:
-+ resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==}
-+ dependencies:
-+ '@types/react': 18.0.26
-+ dev: false
-+
-+ /@types/react/18.0.26:
-+ resolution: {integrity: sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==}
-+ dependencies:
-+ '@types/prop-types': 15.7.5
-+ '@types/scheduler': 0.16.2
-+ csstype: 3.1.1
-+ dev: false
-+
-+ /@types/scheduler/0.16.2:
-+ resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
-+ dev: false
-+
-+ /@typescript-eslint/parser/5.47.1_iukboom6ndih5an6iafl45j2fe:
-+ resolution: {integrity: sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw==}
-+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-+ peerDependencies:
-+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
-+ typescript: '*'
-+ peerDependenciesMeta:
-+ typescript:
-+ optional: true
-+ dependencies:
-+ '@typescript-eslint/scope-manager': 5.47.1
-+ '@typescript-eslint/types': 5.47.1
-+ '@typescript-eslint/typescript-estree': 5.47.1_typescript@4.9.4
-+ debug: 4.3.4
-+ eslint: 8.31.0
-+ typescript: 4.9.4
-+ transitivePeerDependencies:
-+ - supports-color
-+ dev: false
-+
-+ /@typescript-eslint/scope-manager/5.47.1:
-+ resolution: {integrity: sha512-9hsFDsgUwrdOoW1D97Ewog7DYSHaq4WKuNs0LHF9RiCmqB0Z+XRR4Pf7u7u9z/8CciHuJ6yxNws1XznI3ddjEw==}
-+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-+ dependencies:
-+ '@typescript-eslint/types': 5.47.1
-+ '@typescript-eslint/visitor-keys': 5.47.1
-+ dev: false
-+
-+ /@typescript-eslint/types/5.47.1:
-+ resolution: {integrity: sha512-CmALY9YWXEpwuu6377ybJBZdtSAnzXLSQcxLSqSQSbC7VfpMu/HLVdrnVJj7ycI138EHqocW02LPJErE35cE9A==}
-+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-+ dev: false
-+
-+ /@typescript-eslint/typescript-estree/5.47.1_typescript@4.9.4:
-+ resolution: {integrity: sha512-4+ZhFSuISAvRi2xUszEj0xXbNTHceV9GbH9S8oAD2a/F9SW57aJNQVOCxG8GPfSWH/X4eOPdMEU2jYVuWKEpWA==}
-+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-+ peerDependencies:
-+ typescript: '*'
-+ peerDependenciesMeta:
-+ typescript:
-+ optional: true
-+ dependencies:
-+ '@typescript-eslint/types': 5.47.1
-+ '@typescript-eslint/visitor-keys': 5.47.1
-+ debug: 4.3.4
-+ globby: 11.1.0
-+ is-glob: 4.0.3
-+ semver: 7.3.8
-+ tsutils: 3.21.0_typescript@4.9.4
-+ typescript: 4.9.4
-+ transitivePeerDependencies:
-+ - supports-color
-+ dev: false
-+
-+ /@typescript-eslint/visitor-keys/5.47.1:
-+ resolution: {integrity: sha512-rF3pmut2JCCjh6BLRhNKdYjULMb1brvoaiWDlHfLNVgmnZ0sBVJrs3SyaKE1XoDDnJuAx/hDQryHYmPUuNq0ig==}
-+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-+ dependencies:
-+ '@typescript-eslint/types': 5.47.1
-+ eslint-visitor-keys: 3.3.0
-+ dev: false
-+
-+ /acorn-jsx/5.3.2_acorn@8.8.1:
-+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
-+ peerDependencies:
-+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-+ dependencies:
-+ acorn: 8.8.1
-+ dev: false
-+
-+ /acorn/8.8.1:
-+ resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
-+ engines: {node: '>=0.4.0'}
-+ hasBin: true
-+ dev: false
-+
-+ /ajv/6.12.6:
-+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
-+ dependencies:
-+ fast-deep-equal: 3.1.3
-+ fast-json-stable-stringify: 2.1.0
-+ json-schema-traverse: 0.4.1
-+ uri-js: 4.4.1
-+ dev: false
-+
-+ /ansi-regex/5.0.1:
-+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /ansi-styles/4.3.0:
-+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
-+ engines: {node: '>=8'}
-+ dependencies:
-+ color-convert: 2.0.1
-+ dev: false
-+
-+ /argparse/2.0.1:
-+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-+ dev: false
-+
-+ /aria-query/4.2.2:
-+ resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==}
-+ engines: {node: '>=6.0'}
-+ dependencies:
-+ '@babel/runtime': 7.20.7
-+ '@babel/runtime-corejs3': 7.20.7
-+ dev: false
-+
-+ /array-includes/3.1.6:
-+ resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ get-intrinsic: 1.1.3
-+ is-string: 1.0.7
-+ dev: false
-+
-+ /array-union/2.1.0:
-+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /array.prototype.flat/1.3.1:
-+ resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ es-shim-unscopables: 1.0.0
-+ dev: false
-+
-+ /array.prototype.flatmap/1.3.1:
-+ resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ es-shim-unscopables: 1.0.0
-+ dev: false
-+
-+ /array.prototype.tosorted/1.1.1:
-+ resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ es-shim-unscopables: 1.0.0
-+ get-intrinsic: 1.1.3
-+ dev: false
-+
-+ /ast-types-flow/0.0.7:
-+ resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
-+ dev: false
-+
-+ /axe-core/4.6.1:
-+ resolution: {integrity: sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w==}
-+ engines: {node: '>=4'}
-+ dev: false
-+
-+ /axobject-query/2.2.0:
-+ resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==}
-+ dev: false
-+
-+ /balanced-match/1.0.2:
-+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-+ dev: false
-+
-+ /brace-expansion/1.1.11:
-+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
-+ dependencies:
-+ balanced-match: 1.0.2
-+ concat-map: 0.0.1
-+ dev: false
-+
-+ /braces/3.0.2:
-+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
-+ engines: {node: '>=8'}
-+ dependencies:
-+ fill-range: 7.0.1
-+ dev: false
-+
-+ /call-bind/1.0.2:
-+ resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
-+ dependencies:
-+ function-bind: 1.1.1
-+ get-intrinsic: 1.1.3
-+ dev: false
-+
-+ /callsites/3.1.0:
-+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
-+ engines: {node: '>=6'}
-+ dev: false
-+
-+ /caniuse-lite/1.0.30001441:
-+ resolution: {integrity: sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==}
-+ dev: false
-+
-+ /chalk/4.1.2:
-+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
-+ engines: {node: '>=10'}
-+ dependencies:
-+ ansi-styles: 4.3.0
-+ supports-color: 7.2.0
-+ dev: false
-+
-+ /client-only/0.0.1:
-+ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
-+ dev: false
-+
-+ /color-convert/2.0.1:
-+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
-+ engines: {node: '>=7.0.0'}
-+ dependencies:
-+ color-name: 1.1.4
-+ dev: false
-+
-+ /color-name/1.1.4:
-+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-+ dev: false
-+
-+ /concat-map/0.0.1:
-+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
-+ dev: false
-+
-+ /core-js-pure/3.27.1:
-+ resolution: {integrity: sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==}
-+ requiresBuild: true
-+ dev: false
-+
-+ /cross-spawn/7.0.3:
-+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
-+ engines: {node: '>= 8'}
-+ dependencies:
-+ path-key: 3.1.1
-+ shebang-command: 2.0.0
-+ which: 2.0.2
-+ dev: false
-+
-+ /csstype/3.1.1:
-+ resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
-+ dev: false
-+
-+ /damerau-levenshtein/1.0.8:
-+ resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
-+ dev: false
-+
-+ /debug/2.6.9:
-+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
-+ peerDependencies:
-+ supports-color: '*'
-+ peerDependenciesMeta:
-+ supports-color:
-+ optional: true
-+ dependencies:
-+ ms: 2.0.0
-+ dev: false
-+
-+ /debug/3.2.7:
-+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
-+ peerDependencies:
-+ supports-color: '*'
-+ peerDependenciesMeta:
-+ supports-color:
-+ optional: true
-+ dependencies:
-+ ms: 2.1.3
-+ dev: false
-+
-+ /debug/4.3.4:
-+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
-+ engines: {node: '>=6.0'}
-+ peerDependencies:
-+ supports-color: '*'
-+ peerDependenciesMeta:
-+ supports-color:
-+ optional: true
-+ dependencies:
-+ ms: 2.1.2
-+ dev: false
-+
-+ /deep-is/0.1.4:
-+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
-+ dev: false
-+
-+ /define-lazy-prop/2.0.0:
-+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /define-properties/1.1.4:
-+ resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ has-property-descriptors: 1.0.0
-+ object-keys: 1.1.1
-+ dev: false
-+
-+ /dir-glob/3.0.1:
-+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
-+ engines: {node: '>=8'}
-+ dependencies:
-+ path-type: 4.0.0
-+ dev: false
-+
-+ /doctrine/2.1.0:
-+ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
-+ engines: {node: '>=0.10.0'}
-+ dependencies:
-+ esutils: 2.0.3
-+ dev: false
-+
-+ /doctrine/3.0.0:
-+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
-+ engines: {node: '>=6.0.0'}
-+ dependencies:
-+ esutils: 2.0.3
-+ dev: false
-+
-+ /emoji-regex/9.2.2:
-+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-+ dev: false
-+
-+ /enhanced-resolve/5.12.0:
-+ resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==}
-+ engines: {node: '>=10.13.0'}
-+ dependencies:
-+ graceful-fs: 4.2.10
-+ tapable: 2.2.1
-+ dev: false
-+
-+ /es-abstract/1.20.5:
-+ resolution: {integrity: sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ es-to-primitive: 1.2.1
-+ function-bind: 1.1.1
-+ function.prototype.name: 1.1.5
-+ get-intrinsic: 1.1.3
-+ get-symbol-description: 1.0.0
-+ gopd: 1.0.1
-+ has: 1.0.3
-+ has-property-descriptors: 1.0.0
-+ has-symbols: 1.0.3
-+ internal-slot: 1.0.4
-+ is-callable: 1.2.7
-+ is-negative-zero: 2.0.2
-+ is-regex: 1.1.4
-+ is-shared-array-buffer: 1.0.2
-+ is-string: 1.0.7
-+ is-weakref: 1.0.2
-+ object-inspect: 1.12.2
-+ object-keys: 1.1.1
-+ object.assign: 4.1.4
-+ regexp.prototype.flags: 1.4.3
-+ safe-regex-test: 1.0.0
-+ string.prototype.trimend: 1.0.6
-+ string.prototype.trimstart: 1.0.6
-+ unbox-primitive: 1.0.2
-+ dev: false
-+
-+ /es-shim-unscopables/1.0.0:
-+ resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
-+ dependencies:
-+ has: 1.0.3
-+ dev: false
-+
-+ /es-to-primitive/1.2.1:
-+ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ is-callable: 1.2.7
-+ is-date-object: 1.0.5
-+ is-symbol: 1.0.4
-+ dev: false
-+
-+ /escape-string-regexp/4.0.0:
-+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
-+ engines: {node: '>=10'}
-+ dev: false
-+
-+ /eslint-config-next/13.1.1_iukboom6ndih5an6iafl45j2fe:
-+ resolution: {integrity: sha512-/5S2XGWlGaiqrRhzpn51ux5JUSLwx8PVK2keLi5xk7QmhfYB8PqE6R6SlVw6hgnf/VexvUXSrlNJ/su00NhtHQ==}
-+ peerDependencies:
-+ eslint: ^7.23.0 || ^8.0.0
-+ typescript: '>=3.3.1'
-+ peerDependenciesMeta:
-+ typescript:
-+ optional: true
-+ dependencies:
-+ '@next/eslint-plugin-next': 13.1.1
-+ '@rushstack/eslint-patch': 1.2.0
-+ '@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe
-+ eslint: 8.31.0
-+ eslint-import-resolver-node: 0.3.6
-+ eslint-import-resolver-typescript: 3.5.2_ol7jqilc3wemtdbq3nzhywgxq4
-+ eslint-plugin-import: 2.26.0_bpx4furzt4ibermwbsj75osuwi
-+ eslint-plugin-jsx-a11y: 6.6.1_eslint@8.31.0
-+ eslint-plugin-react: 7.31.11_eslint@8.31.0
-+ eslint-plugin-react-hooks: 4.6.0_eslint@8.31.0
-+ typescript: 4.9.4
-+ transitivePeerDependencies:
-+ - eslint-import-resolver-webpack
-+ - supports-color
-+ dev: false
-+
-+ /eslint-import-resolver-node/0.3.6:
-+ resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==}
-+ dependencies:
-+ debug: 3.2.7
-+ resolve: 1.22.1
-+ transitivePeerDependencies:
-+ - supports-color
-+ dev: false
-+
-+ /eslint-import-resolver-typescript/3.5.2_ol7jqilc3wemtdbq3nzhywgxq4:
-+ resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==}
-+ engines: {node: ^14.18.0 || >=16.0.0}
-+ peerDependencies:
-+ eslint: '*'
-+ eslint-plugin-import: '*'
-+ dependencies:
-+ debug: 4.3.4
-+ enhanced-resolve: 5.12.0
-+ eslint: 8.31.0
-+ eslint-plugin-import: 2.26.0_bpx4furzt4ibermwbsj75osuwi
-+ get-tsconfig: 4.2.0
-+ globby: 13.1.3
-+ is-core-module: 2.11.0
-+ is-glob: 4.0.3
-+ synckit: 0.8.4
-+ transitivePeerDependencies:
-+ - supports-color
-+ dev: false
-+
-+ /eslint-module-utils/2.7.4_of6uaipqaoaobv57tu2gvxhnhu:
-+ resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
-+ engines: {node: '>=4'}
-+ peerDependencies:
-+ '@typescript-eslint/parser': '*'
-+ eslint: '*'
-+ eslint-import-resolver-node: '*'
-+ eslint-import-resolver-typescript: '*'
-+ eslint-import-resolver-webpack: '*'
-+ peerDependenciesMeta:
-+ '@typescript-eslint/parser':
-+ optional: true
-+ eslint:
-+ optional: true
-+ eslint-import-resolver-node:
-+ optional: true
-+ eslint-import-resolver-typescript:
-+ optional: true
-+ eslint-import-resolver-webpack:
-+ optional: true
-+ dependencies:
-+ '@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe
-+ debug: 3.2.7
-+ eslint: 8.31.0
-+ eslint-import-resolver-node: 0.3.6
-+ eslint-import-resolver-typescript: 3.5.2_ol7jqilc3wemtdbq3nzhywgxq4
-+ transitivePeerDependencies:
-+ - supports-color
-+ dev: false
-+
-+ /eslint-plugin-import/2.26.0_bpx4furzt4ibermwbsj75osuwi:
-+ resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
-+ engines: {node: '>=4'}
-+ peerDependencies:
-+ '@typescript-eslint/parser': '*'
-+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
-+ peerDependenciesMeta:
-+ '@typescript-eslint/parser':
-+ optional: true
-+ dependencies:
-+ '@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe
-+ array-includes: 3.1.6
-+ array.prototype.flat: 1.3.1
-+ debug: 2.6.9
-+ doctrine: 2.1.0
-+ eslint: 8.31.0
-+ eslint-import-resolver-node: 0.3.6
-+ eslint-module-utils: 2.7.4_of6uaipqaoaobv57tu2gvxhnhu
-+ has: 1.0.3
-+ is-core-module: 2.11.0
-+ is-glob: 4.0.3
-+ minimatch: 3.1.2
-+ object.values: 1.1.6
-+ resolve: 1.22.1
-+ tsconfig-paths: 3.14.1
-+ transitivePeerDependencies:
-+ - eslint-import-resolver-typescript
-+ - eslint-import-resolver-webpack
-+ - supports-color
-+ dev: false
-+
-+ /eslint-plugin-jsx-a11y/6.6.1_eslint@8.31.0:
-+ resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==}
-+ engines: {node: '>=4.0'}
-+ peerDependencies:
-+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
-+ dependencies:
-+ '@babel/runtime': 7.20.7
-+ aria-query: 4.2.2
-+ array-includes: 3.1.6
-+ ast-types-flow: 0.0.7
-+ axe-core: 4.6.1
-+ axobject-query: 2.2.0
-+ damerau-levenshtein: 1.0.8
-+ emoji-regex: 9.2.2
-+ eslint: 8.31.0
-+ has: 1.0.3
-+ jsx-ast-utils: 3.3.3
-+ language-tags: 1.0.7
-+ minimatch: 3.1.2
-+ semver: 6.3.0
-+ dev: false
-+
-+ /eslint-plugin-react-hooks/4.6.0_eslint@8.31.0:
-+ resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
-+ engines: {node: '>=10'}
-+ peerDependencies:
-+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
-+ dependencies:
-+ eslint: 8.31.0
-+ dev: false
-+
-+ /eslint-plugin-react/7.31.11_eslint@8.31.0:
-+ resolution: {integrity: sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==}
-+ engines: {node: '>=4'}
-+ peerDependencies:
-+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
-+ dependencies:
-+ array-includes: 3.1.6
-+ array.prototype.flatmap: 1.3.1
-+ array.prototype.tosorted: 1.1.1
-+ doctrine: 2.1.0
-+ eslint: 8.31.0
-+ estraverse: 5.3.0
-+ jsx-ast-utils: 3.3.3
-+ minimatch: 3.1.2
-+ object.entries: 1.1.6
-+ object.fromentries: 2.0.6
-+ object.hasown: 1.1.2
-+ object.values: 1.1.6
-+ prop-types: 15.8.1
-+ resolve: 2.0.0-next.4
-+ semver: 6.3.0
-+ string.prototype.matchall: 4.0.8
-+ dev: false
-+
-+ /eslint-scope/7.1.1:
-+ resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
-+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-+ dependencies:
-+ esrecurse: 4.3.0
-+ estraverse: 5.3.0
-+ dev: false
-+
-+ /eslint-utils/3.0.0_eslint@8.31.0:
-+ resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
-+ engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
-+ peerDependencies:
-+ eslint: '>=5'
-+ dependencies:
-+ eslint: 8.31.0
-+ eslint-visitor-keys: 2.1.0
-+ dev: false
-+
-+ /eslint-visitor-keys/2.1.0:
-+ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
-+ engines: {node: '>=10'}
-+ dev: false
-+
-+ /eslint-visitor-keys/3.3.0:
-+ resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
-+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-+ dev: false
-+
-+ /eslint/8.31.0:
-+ resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==}
-+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-+ hasBin: true
-+ dependencies:
-+ '@eslint/eslintrc': 1.4.1
-+ '@humanwhocodes/config-array': 0.11.8
-+ '@humanwhocodes/module-importer': 1.0.1
-+ '@nodelib/fs.walk': 1.2.8
-+ ajv: 6.12.6
-+ chalk: 4.1.2
-+ cross-spawn: 7.0.3
-+ debug: 4.3.4
-+ doctrine: 3.0.0
-+ escape-string-regexp: 4.0.0
-+ eslint-scope: 7.1.1
-+ eslint-utils: 3.0.0_eslint@8.31.0
-+ eslint-visitor-keys: 3.3.0
-+ espree: 9.4.1
-+ esquery: 1.4.0
-+ esutils: 2.0.3
-+ fast-deep-equal: 3.1.3
-+ file-entry-cache: 6.0.1
-+ find-up: 5.0.0
-+ glob-parent: 6.0.2
-+ globals: 13.19.0
-+ grapheme-splitter: 1.0.4
-+ ignore: 5.2.4
-+ import-fresh: 3.3.0
-+ imurmurhash: 0.1.4
-+ is-glob: 4.0.3
-+ is-path-inside: 3.0.3
-+ js-sdsl: 4.2.0
-+ js-yaml: 4.1.0
-+ json-stable-stringify-without-jsonify: 1.0.1
-+ levn: 0.4.1
-+ lodash.merge: 4.6.2
-+ minimatch: 3.1.2
-+ natural-compare: 1.4.0
-+ optionator: 0.9.1
-+ regexpp: 3.2.0
-+ strip-ansi: 6.0.1
-+ strip-json-comments: 3.1.1
-+ text-table: 0.2.0
-+ transitivePeerDependencies:
-+ - supports-color
-+ dev: false
-+
-+ /espree/9.4.1:
-+ resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==}
-+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-+ dependencies:
-+ acorn: 8.8.1
-+ acorn-jsx: 5.3.2_acorn@8.8.1
-+ eslint-visitor-keys: 3.3.0
-+ dev: false
-+
-+ /esquery/1.4.0:
-+ resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==}
-+ engines: {node: '>=0.10'}
-+ dependencies:
-+ estraverse: 5.3.0
-+ dev: false
-+
-+ /esrecurse/4.3.0:
-+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
-+ engines: {node: '>=4.0'}
-+ dependencies:
-+ estraverse: 5.3.0
-+ dev: false
-+
-+ /estraverse/5.3.0:
-+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
-+ engines: {node: '>=4.0'}
-+ dev: false
-+
-+ /esutils/2.0.3:
-+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
-+ engines: {node: '>=0.10.0'}
-+ dev: false
-+
-+ /fast-deep-equal/3.1.3:
-+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-+ dev: false
-+
-+ /fast-glob/3.2.12:
-+ resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
-+ engines: {node: '>=8.6.0'}
-+ dependencies:
-+ '@nodelib/fs.stat': 2.0.5
-+ '@nodelib/fs.walk': 1.2.8
-+ glob-parent: 5.1.2
-+ merge2: 1.4.1
-+ micromatch: 4.0.5
-+ dev: false
-+
-+ /fast-json-stable-stringify/2.1.0:
-+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-+ dev: false
-+
-+ /fast-levenshtein/2.0.6:
-+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
-+ dev: false
-+
-+ /fastq/1.14.0:
-+ resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==}
-+ dependencies:
-+ reusify: 1.0.4
-+ dev: false
-+
-+ /file-entry-cache/6.0.1:
-+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
-+ engines: {node: ^10.12.0 || >=12.0.0}
-+ dependencies:
-+ flat-cache: 3.0.4
-+ dev: false
-+
-+ /fill-range/7.0.1:
-+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
-+ engines: {node: '>=8'}
-+ dependencies:
-+ to-regex-range: 5.0.1
-+ dev: false
-+
-+ /find-up/5.0.0:
-+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
-+ engines: {node: '>=10'}
-+ dependencies:
-+ locate-path: 6.0.0
-+ path-exists: 4.0.0
-+ dev: false
-+
-+ /flat-cache/3.0.4:
-+ resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
-+ engines: {node: ^10.12.0 || >=12.0.0}
-+ dependencies:
-+ flatted: 3.2.7
-+ rimraf: 3.0.2
-+ dev: false
-+
-+ /flatted/3.2.7:
-+ resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
-+ dev: false
-+
-+ /fs.realpath/1.0.0:
-+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
-+ dev: false
-+
-+ /function-bind/1.1.1:
-+ resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
-+ dev: false
-+
-+ /function.prototype.name/1.1.5:
-+ resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ functions-have-names: 1.2.3
-+ dev: false
-+
-+ /functions-have-names/1.2.3:
-+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
-+ dev: false
-+
-+ /get-intrinsic/1.1.3:
-+ resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==}
-+ dependencies:
-+ function-bind: 1.1.1
-+ has: 1.0.3
-+ has-symbols: 1.0.3
-+ dev: false
-+
-+ /get-symbol-description/1.0.0:
-+ resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ get-intrinsic: 1.1.3
-+ dev: false
-+
-+ /get-tsconfig/4.2.0:
-+ resolution: {integrity: sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==}
-+ dev: false
-+
-+ /glob-parent/5.1.2:
-+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
-+ engines: {node: '>= 6'}
-+ dependencies:
-+ is-glob: 4.0.3
-+ dev: false
-+
-+ /glob-parent/6.0.2:
-+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
-+ engines: {node: '>=10.13.0'}
-+ dependencies:
-+ is-glob: 4.0.3
-+ dev: false
-+
-+ /glob/7.1.7:
-+ resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
-+ dependencies:
-+ fs.realpath: 1.0.0
-+ inflight: 1.0.6
-+ inherits: 2.0.4
-+ minimatch: 3.1.2
-+ once: 1.4.0
-+ path-is-absolute: 1.0.1
-+ dev: false
-+
-+ /glob/7.2.3:
-+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
-+ dependencies:
-+ fs.realpath: 1.0.0
-+ inflight: 1.0.6
-+ inherits: 2.0.4
-+ minimatch: 3.1.2
-+ once: 1.4.0
-+ path-is-absolute: 1.0.1
-+ dev: false
-+
-+ /globals/13.19.0:
-+ resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==}
-+ engines: {node: '>=8'}
-+ dependencies:
-+ type-fest: 0.20.2
-+ dev: false
-+
-+ /globalyzer/0.1.0:
-+ resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
-+ dev: false
-+
-+ /globby/11.1.0:
-+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
-+ engines: {node: '>=10'}
-+ dependencies:
-+ array-union: 2.1.0
-+ dir-glob: 3.0.1
-+ fast-glob: 3.2.12
-+ ignore: 5.2.4
-+ merge2: 1.4.1
-+ slash: 3.0.0
-+ dev: false
-+
-+ /globby/13.1.3:
-+ resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==}
-+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-+ dependencies:
-+ dir-glob: 3.0.1
-+ fast-glob: 3.2.12
-+ ignore: 5.2.4
-+ merge2: 1.4.1
-+ slash: 4.0.0
-+ dev: false
-+
-+ /globrex/0.1.2:
-+ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
-+ dev: false
-+
-+ /gopd/1.0.1:
-+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
-+ dependencies:
-+ get-intrinsic: 1.1.3
-+ dev: false
-+
-+ /graceful-fs/4.2.10:
-+ resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
-+ dev: false
-+
-+ /grapheme-splitter/1.0.4:
-+ resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
-+ dev: false
-+
-+ /has-bigints/1.0.2:
-+ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
-+ dev: false
-+
-+ /has-flag/4.0.0:
-+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /has-property-descriptors/1.0.0:
-+ resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
-+ dependencies:
-+ get-intrinsic: 1.1.3
-+ dev: false
-+
-+ /has-symbols/1.0.3:
-+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
-+ engines: {node: '>= 0.4'}
-+ dev: false
-+
-+ /has-tostringtag/1.0.0:
-+ resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ has-symbols: 1.0.3
-+ dev: false
-+
-+ /has/1.0.3:
-+ resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
-+ engines: {node: '>= 0.4.0'}
-+ dependencies:
-+ function-bind: 1.1.1
-+ dev: false
-+
-+ /ignore/5.2.4:
-+ resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
-+ engines: {node: '>= 4'}
-+ dev: false
-+
-+ /import-fresh/3.3.0:
-+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
-+ engines: {node: '>=6'}
-+ dependencies:
-+ parent-module: 1.0.1
-+ resolve-from: 4.0.0
-+ dev: false
-+
-+ /imurmurhash/0.1.4:
-+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
-+ engines: {node: '>=0.8.19'}
-+ dev: false
-+
-+ /inflight/1.0.6:
-+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
-+ dependencies:
-+ once: 1.4.0
-+ wrappy: 1.0.2
-+ dev: false
-+
-+ /inherits/2.0.4:
-+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-+ dev: false
-+
-+ /internal-slot/1.0.4:
-+ resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ get-intrinsic: 1.1.3
-+ has: 1.0.3
-+ side-channel: 1.0.4
-+ dev: false
-+
-+ /is-bigint/1.0.4:
-+ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
-+ dependencies:
-+ has-bigints: 1.0.2
-+ dev: false
-+
-+ /is-boolean-object/1.1.2:
-+ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ has-tostringtag: 1.0.0
-+ dev: false
-+
-+ /is-callable/1.2.7:
-+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
-+ engines: {node: '>= 0.4'}
-+ dev: false
-+
-+ /is-core-module/2.11.0:
-+ resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
-+ dependencies:
-+ has: 1.0.3
-+ dev: false
-+
-+ /is-date-object/1.0.5:
-+ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ has-tostringtag: 1.0.0
-+ dev: false
-+
-+ /is-docker/2.2.1:
-+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
-+ engines: {node: '>=8'}
-+ hasBin: true
-+ dev: false
-+
-+ /is-extglob/2.1.1:
-+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
-+ engines: {node: '>=0.10.0'}
-+ dev: false
-+
-+ /is-glob/4.0.3:
-+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
-+ engines: {node: '>=0.10.0'}
-+ dependencies:
-+ is-extglob: 2.1.1
-+ dev: false
-+
-+ /is-negative-zero/2.0.2:
-+ resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
-+ engines: {node: '>= 0.4'}
-+ dev: false
-+
-+ /is-number-object/1.0.7:
-+ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ has-tostringtag: 1.0.0
-+ dev: false
-+
-+ /is-number/7.0.0:
-+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
-+ engines: {node: '>=0.12.0'}
-+ dev: false
-+
-+ /is-path-inside/3.0.3:
-+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /is-regex/1.1.4:
-+ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ has-tostringtag: 1.0.0
-+ dev: false
-+
-+ /is-shared-array-buffer/1.0.2:
-+ resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
-+ dependencies:
-+ call-bind: 1.0.2
-+ dev: false
-+
-+ /is-string/1.0.7:
-+ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ has-tostringtag: 1.0.0
-+ dev: false
-+
-+ /is-symbol/1.0.4:
-+ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ has-symbols: 1.0.3
-+ dev: false
-+
-+ /is-weakref/1.0.2:
-+ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
-+ dependencies:
-+ call-bind: 1.0.2
-+ dev: false
-+
-+ /is-wsl/2.2.0:
-+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
-+ engines: {node: '>=8'}
-+ dependencies:
-+ is-docker: 2.2.1
-+ dev: false
-+
-+ /isexe/2.0.0:
-+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-+ dev: false
-+
-+ /js-sdsl/4.2.0:
-+ resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==}
-+ dev: false
-+
-+ /js-tokens/4.0.0:
-+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-+ dev: false
-+
-+ /js-yaml/4.1.0:
-+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
-+ hasBin: true
-+ dependencies:
-+ argparse: 2.0.1
-+ dev: false
-+
-+ /json-schema-traverse/0.4.1:
-+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-+ dev: false
-+
-+ /json-stable-stringify-without-jsonify/1.0.1:
-+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
-+ dev: false
-+
-+ /json5/1.0.2:
-+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
-+ hasBin: true
-+ dependencies:
-+ minimist: 1.2.7
-+ dev: false
-+
-+ /jsx-ast-utils/3.3.3:
-+ resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==}
-+ engines: {node: '>=4.0'}
-+ dependencies:
-+ array-includes: 3.1.6
-+ object.assign: 4.1.4
-+ dev: false
-+
-+ /language-subtag-registry/0.3.22:
-+ resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
-+ dev: false
-+
-+ /language-tags/1.0.7:
-+ resolution: {integrity: sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw==}
-+ dependencies:
-+ language-subtag-registry: 0.3.22
-+ dev: false
-+
-+ /levn/0.4.1:
-+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
-+ engines: {node: '>= 0.8.0'}
-+ dependencies:
-+ prelude-ls: 1.2.1
-+ type-check: 0.4.0
-+ dev: false
-+
-+ /locate-path/6.0.0:
-+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
-+ engines: {node: '>=10'}
-+ dependencies:
-+ p-locate: 5.0.0
-+ dev: false
-+
-+ /lodash.merge/4.6.2:
-+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-+ dev: false
-+
-+ /loose-envify/1.4.0:
-+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
-+ hasBin: true
-+ dependencies:
-+ js-tokens: 4.0.0
-+ dev: false
-+
-+ /lru-cache/6.0.0:
-+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
-+ engines: {node: '>=10'}
-+ dependencies:
-+ yallist: 4.0.0
-+ dev: false
-+
-+ /merge2/1.4.1:
-+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
-+ engines: {node: '>= 8'}
-+ dev: false
-+
-+ /micromatch/4.0.5:
-+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
-+ engines: {node: '>=8.6'}
-+ dependencies:
-+ braces: 3.0.2
-+ picomatch: 2.3.1
-+ dev: false
-+
-+ /minimatch/3.1.2:
-+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
-+ dependencies:
-+ brace-expansion: 1.1.11
-+ dev: false
-+
-+ /minimist/1.2.7:
-+ resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
-+ dev: false
-+
-+ /ms/2.0.0:
-+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
-+ dev: false
-+
-+ /ms/2.1.2:
-+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
-+ dev: false
-+
-+ /ms/2.1.3:
-+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-+ dev: false
-+
-+ /nanoid/3.3.4:
-+ resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
-+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-+ hasBin: true
-+ dev: false
-+
-+ /natural-compare/1.4.0:
-+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
-+ dev: false
-+
-+ /next/13.1.1_biqbaboplfbrettd7655fr4n2y:
-+ resolution: {integrity: sha512-R5eBAaIa3X7LJeYvv1bMdGnAVF4fVToEjim7MkflceFPuANY3YyvFxXee/A+acrSYwYPvOvf7f6v/BM/48ea5w==}
-+ engines: {node: '>=14.6.0'}
-+ hasBin: true
-+ peerDependencies:
-+ fibers: '>= 3.1.0'
-+ node-sass: ^6.0.0 || ^7.0.0
-+ react: ^18.2.0
-+ react-dom: ^18.2.0
-+ sass: ^1.3.0
-+ peerDependenciesMeta:
-+ fibers:
-+ optional: true
-+ node-sass:
-+ optional: true
-+ sass:
-+ optional: true
-+ dependencies:
-+ '@next/env': 13.1.1
-+ '@swc/helpers': 0.4.14
-+ caniuse-lite: 1.0.30001441
-+ postcss: 8.4.14
-+ react: 18.2.0
-+ react-dom: 18.2.0_react@18.2.0
-+ styled-jsx: 5.1.1_react@18.2.0
-+ optionalDependencies:
-+ '@next/swc-android-arm-eabi': 13.1.1
-+ '@next/swc-android-arm64': 13.1.1
-+ '@next/swc-darwin-arm64': 13.1.1
-+ '@next/swc-darwin-x64': 13.1.1
-+ '@next/swc-freebsd-x64': 13.1.1
-+ '@next/swc-linux-arm-gnueabihf': 13.1.1
-+ '@next/swc-linux-arm64-gnu': 13.1.1
-+ '@next/swc-linux-arm64-musl': 13.1.1
-+ '@next/swc-linux-x64-gnu': 13.1.1
-+ '@next/swc-linux-x64-musl': 13.1.1
-+ '@next/swc-win32-arm64-msvc': 13.1.1
-+ '@next/swc-win32-ia32-msvc': 13.1.1
-+ '@next/swc-win32-x64-msvc': 13.1.1
-+ transitivePeerDependencies:
-+ - '@babel/core'
-+ - babel-plugin-macros
-+ dev: false
-+
-+ /object-assign/4.1.1:
-+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
-+ engines: {node: '>=0.10.0'}
-+ dev: false
-+
-+ /object-inspect/1.12.2:
-+ resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
-+ dev: false
-+
-+ /object-keys/1.1.1:
-+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
-+ engines: {node: '>= 0.4'}
-+ dev: false
-+
-+ /object.assign/4.1.4:
-+ resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ has-symbols: 1.0.3
-+ object-keys: 1.1.1
-+ dev: false
-+
-+ /object.entries/1.1.6:
-+ resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ dev: false
-+
-+ /object.fromentries/2.0.6:
-+ resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ dev: false
-+
-+ /object.hasown/1.1.2:
-+ resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==}
-+ dependencies:
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ dev: false
-+
-+ /object.values/1.1.6:
-+ resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ dev: false
-+
-+ /once/1.4.0:
-+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-+ dependencies:
-+ wrappy: 1.0.2
-+ dev: false
-+
-+ /open/8.4.0:
-+ resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==}
-+ engines: {node: '>=12'}
-+ dependencies:
-+ define-lazy-prop: 2.0.0
-+ is-docker: 2.2.1
-+ is-wsl: 2.2.0
-+ dev: false
-+
-+ /optionator/0.9.1:
-+ resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
-+ engines: {node: '>= 0.8.0'}
-+ dependencies:
-+ deep-is: 0.1.4
-+ fast-levenshtein: 2.0.6
-+ levn: 0.4.1
-+ prelude-ls: 1.2.1
-+ type-check: 0.4.0
-+ word-wrap: 1.2.3
-+ dev: false
-+
-+ /p-limit/3.1.0:
-+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
-+ engines: {node: '>=10'}
-+ dependencies:
-+ yocto-queue: 0.1.0
-+ dev: false
-+
-+ /p-locate/5.0.0:
-+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
-+ engines: {node: '>=10'}
-+ dependencies:
-+ p-limit: 3.1.0
-+ dev: false
-+
-+ /parent-module/1.0.1:
-+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
-+ engines: {node: '>=6'}
-+ dependencies:
-+ callsites: 3.1.0
-+ dev: false
-+
-+ /path-exists/4.0.0:
-+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /path-is-absolute/1.0.1:
-+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
-+ engines: {node: '>=0.10.0'}
-+ dev: false
-+
-+ /path-key/3.1.1:
-+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /path-parse/1.0.7:
-+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-+ dev: false
-+
-+ /path-type/4.0.0:
-+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /picocolors/1.0.0:
-+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
-+ dev: false
-+
-+ /picomatch/2.3.1:
-+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
-+ engines: {node: '>=8.6'}
-+ dev: false
-+
-+ /postcss/8.4.14:
-+ resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
-+ engines: {node: ^10 || ^12 || >=14}
-+ dependencies:
-+ nanoid: 3.3.4
-+ picocolors: 1.0.0
-+ source-map-js: 1.0.2
-+ dev: false
-+
-+ /prelude-ls/1.2.1:
-+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
-+ engines: {node: '>= 0.8.0'}
-+ dev: false
-+
-+ /prettier/2.8.1:
-+ resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==}
-+ engines: {node: '>=10.13.0'}
-+ hasBin: true
-+ dev: true
-+
-+ /prop-types/15.8.1:
-+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
-+ dependencies:
-+ loose-envify: 1.4.0
-+ object-assign: 4.1.1
-+ react-is: 16.13.1
-+ dev: false
-+
-+ /punycode/2.1.1:
-+ resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
-+ engines: {node: '>=6'}
-+ dev: false
-+
-+ /queue-microtask/1.2.3:
-+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-+ dev: false
-+
-+ /react-dom/18.2.0_react@18.2.0:
-+ resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
-+ peerDependencies:
-+ react: ^18.2.0
-+ dependencies:
-+ loose-envify: 1.4.0
-+ react: 18.2.0
-+ scheduler: 0.23.0
-+ dev: false
-+
-+ /react-is/16.13.1:
-+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
-+ dev: false
-+
-+ /react/18.2.0:
-+ resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
-+ engines: {node: '>=0.10.0'}
-+ dependencies:
-+ loose-envify: 1.4.0
-+ dev: false
-+
-+ /regenerator-runtime/0.13.11:
-+ resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
-+ dev: false
-+
-+ /regexp.prototype.flags/1.4.3:
-+ resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==}
-+ engines: {node: '>= 0.4'}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ functions-have-names: 1.2.3
-+ dev: false
-+
-+ /regexpp/3.2.0:
-+ resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /resolve-from/4.0.0:
-+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
-+ engines: {node: '>=4'}
-+ dev: false
-+
-+ /resolve/1.22.1:
-+ resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
-+ hasBin: true
-+ dependencies:
-+ is-core-module: 2.11.0
-+ path-parse: 1.0.7
-+ supports-preserve-symlinks-flag: 1.0.0
-+ dev: false
-+
-+ /resolve/2.0.0-next.4:
-+ resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
-+ hasBin: true
-+ dependencies:
-+ is-core-module: 2.11.0
-+ path-parse: 1.0.7
-+ supports-preserve-symlinks-flag: 1.0.0
-+ dev: false
-+
-+ /reusify/1.0.4:
-+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
-+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-+ dev: false
-+
-+ /rimraf/3.0.2:
-+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
-+ hasBin: true
-+ dependencies:
-+ glob: 7.2.3
-+ dev: false
-+
-+ /run-parallel/1.2.0:
-+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-+ dependencies:
-+ queue-microtask: 1.2.3
-+ dev: false
-+
-+ /safe-regex-test/1.0.0:
-+ resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
-+ dependencies:
-+ call-bind: 1.0.2
-+ get-intrinsic: 1.1.3
-+ is-regex: 1.1.4
-+ dev: false
-+
-+ /scheduler/0.23.0:
-+ resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
-+ dependencies:
-+ loose-envify: 1.4.0
-+ dev: false
-+
-+ /semver/6.3.0:
-+ resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
-+ hasBin: true
-+ dev: false
-+
-+ /semver/7.3.8:
-+ resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
-+ engines: {node: '>=10'}
-+ hasBin: true
-+ dependencies:
-+ lru-cache: 6.0.0
-+ dev: false
-+
-+ /shebang-command/2.0.0:
-+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
-+ engines: {node: '>=8'}
-+ dependencies:
-+ shebang-regex: 3.0.0
-+ dev: false
-+
-+ /shebang-regex/3.0.0:
-+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /side-channel/1.0.4:
-+ resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
-+ dependencies:
-+ call-bind: 1.0.2
-+ get-intrinsic: 1.1.3
-+ object-inspect: 1.12.2
-+ dev: false
-+
-+ /slash/3.0.0:
-+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /slash/4.0.0:
-+ resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
-+ engines: {node: '>=12'}
-+ dev: false
-+
-+ /source-map-js/1.0.2:
-+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
-+ engines: {node: '>=0.10.0'}
-+ dev: false
-+
-+ /string.prototype.matchall/4.0.8:
-+ resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ get-intrinsic: 1.1.3
-+ has-symbols: 1.0.3
-+ internal-slot: 1.0.4
-+ regexp.prototype.flags: 1.4.3
-+ side-channel: 1.0.4
-+ dev: false
-+
-+ /string.prototype.trimend/1.0.6:
-+ resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ dev: false
-+
-+ /string.prototype.trimstart/1.0.6:
-+ resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
-+ dependencies:
-+ call-bind: 1.0.2
-+ define-properties: 1.1.4
-+ es-abstract: 1.20.5
-+ dev: false
-+
-+ /strip-ansi/6.0.1:
-+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
-+ engines: {node: '>=8'}
-+ dependencies:
-+ ansi-regex: 5.0.1
-+ dev: false
-+
-+ /strip-bom/3.0.0:
-+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
-+ engines: {node: '>=4'}
-+ dev: false
-+
-+ /strip-json-comments/3.1.1:
-+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
-+ engines: {node: '>=8'}
-+ dev: false
-+
-+ /styled-jsx/5.1.1_react@18.2.0:
-+ resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
-+ engines: {node: '>= 12.0.0'}
-+ peerDependencies:
-+ '@babel/core': '*'
-+ babel-plugin-macros: '*'
-+ react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
-+ peerDependenciesMeta:
-+ '@babel/core':
-+ optional: true
-+ babel-plugin-macros:
-+ optional: true
-+ dependencies:
-+ client-only: 0.0.1
-+ react: 18.2.0
-+ dev: false
-+
-+ /supports-color/7.2.0:
-+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
-+ engines: {node: '>=8'}
-+ dependencies:
-+ has-flag: 4.0.0
-+ dev: false
-+
-+ /supports-preserve-symlinks-flag/1.0.0:
-+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
-+ engines: {node: '>= 0.4'}
-+ dev: false
-+
-+ /synckit/0.8.4:
-+ resolution: {integrity: sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==}
-+ engines: {node: ^14.18.0 || >=16.0.0}
-+ dependencies:
-+ '@pkgr/utils': 2.3.1
-+ tslib: 2.4.1
-+ dev: false
-+
-+ /tapable/2.2.1:
-+ resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
-+ engines: {node: '>=6'}
-+ dev: false
-+
-+ /text-table/0.2.0:
-+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
-+ dev: false
-+
-+ /tiny-glob/0.2.9:
-+ resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
-+ dependencies:
-+ globalyzer: 0.1.0
-+ globrex: 0.1.2
-+ dev: false
-+
-+ /to-regex-range/5.0.1:
-+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
-+ engines: {node: '>=8.0'}
-+ dependencies:
-+ is-number: 7.0.0
-+ dev: false
-+
-+ /tsconfig-paths/3.14.1:
-+ resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==}
-+ dependencies:
-+ '@types/json5': 0.0.29
-+ json5: 1.0.2
-+ minimist: 1.2.7
-+ strip-bom: 3.0.0
-+ dev: false
-+
-+ /tslib/1.14.1:
-+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
-+ dev: false
-+
-+ /tslib/2.4.1:
-+ resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
-+ dev: false
-+
-+ /tsutils/3.21.0_typescript@4.9.4:
-+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
-+ engines: {node: '>= 6'}
-+ peerDependencies:
-+ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
-+ dependencies:
-+ tslib: 1.14.1
-+ typescript: 4.9.4
-+ dev: false
-+
-+ /type-check/0.4.0:
-+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
-+ engines: {node: '>= 0.8.0'}
-+ dependencies:
-+ prelude-ls: 1.2.1
-+ dev: false
-+
-+ /type-fest/0.20.2:
-+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
-+ engines: {node: '>=10'}
-+ dev: false
-+
-+ /typescript/4.9.4:
-+ resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==}
-+ engines: {node: '>=4.2.0'}
-+ hasBin: true
-+ dev: false
-+
-+ /unbox-primitive/1.0.2:
-+ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
-+ dependencies:
-+ call-bind: 1.0.2
-+ has-bigints: 1.0.2
-+ has-symbols: 1.0.3
-+ which-boxed-primitive: 1.0.2
-+ dev: false
-+
-+ /uri-js/4.4.1:
-+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-+ dependencies:
-+ punycode: 2.1.1
-+ dev: false
-+
-+ /which-boxed-primitive/1.0.2:
-+ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
-+ dependencies:
-+ is-bigint: 1.0.4
-+ is-boolean-object: 1.1.2
-+ is-number-object: 1.0.7
-+ is-string: 1.0.7
-+ is-symbol: 1.0.4
-+ dev: false
-+
-+ /which/2.0.2:
-+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
-+ engines: {node: '>= 8'}
-+ hasBin: true
-+ dependencies:
-+ isexe: 2.0.0
-+ dev: false
-+
-+ /word-wrap/1.2.3:
-+ resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
-+ engines: {node: '>=0.10.0'}
-+ dev: false
-+
-+ /wrappy/1.0.2:
-+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-+ dev: false
-+
-+ /yallist/4.0.0:
-+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
-+ dev: false
-+
-+ /yocto-queue/0.1.0:
-+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
-+ engines: {node: '>=10'}
-+ dev: false
-+
-+ file:../..:
-+ resolution: {directory: ../.., type: directory}
-+ name: '@toots/shine.js'
-+ version: 1.0.1
-+ dev: false
-diff --git a/js/test/nextjs/public/encode.wav b/js/test/nextjs/public/encode.wav
-new file mode 120000
-index 0000000..0f5f127
---- /dev/null
-+++ b/js/test/nextjs/public/encode.wav
-@@ -0,0 +1 @@
-+../lib/encode.wav
-\ No newline at end of file
-diff --git a/js/test/nextjs/tsconfig.json b/js/test/nextjs/tsconfig.json
-new file mode 100644
-index 0000000..66151f2
---- /dev/null
-+++ b/js/test/nextjs/tsconfig.json
-@@ -0,0 +1,23 @@
-+{
-+ "compilerOptions": {
-+ "target": "es5",
-+ "lib": ["dom", "dom.iterable", "esnext"],
-+ "allowJs": true,
-+ "skipLibCheck": true,
-+ "strict": true,
-+ "forceConsistentCasingInFileNames": true,
-+ "noEmit": true,
-+ "esModuleInterop": true,
-+ "module": "esnext",
-+ "moduleResolution": "node",
-+ "resolveJsonModule": true,
-+ "isolatedModules": true,
-+ "jsx": "preserve",
-+ "incremental": true,
-+ "paths": {
-+ "@shine/*": ["./*"]
-+ }
-+ },
-+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
-+ "exclude": ["node_modules"]
-+}
-diff --git a/js/test/node/encode.coffee b/js/test/node/encode.coffee
-deleted file mode 100644
-index 3e1ba72..0000000
---- a/js/test/node/encode.coffee
-+++ /dev/null
-@@ -1,58 +0,0 @@
--Shine = require "../../dist/libshine.js"
--{Reader} = require "wav"
--fs = require "fs"
--
--console.log ""
--console.log "Executing encoding test"
--
--bitrate = 128
--str = fs.createReadStream "../lib/encode.wav"
--fd = fs.openSync "./encode.mp3", "w"
--reader = new Reader
--
--str.pipe reader
--
--write = (encoded) ->
-- return unless encoded.length > 0
-- buf = new Buffer encoded
-- fs.writeSync fd, buf, 0, buf.length
--
--reader.on "format", (format) ->
-- console.log "Got WAV file."
--
-- shine = new Shine
-- bitrate: bitrate
-- samplerate: format.sampleRate
-- channels: format.channels
--
-- console.log "Encoding.."
-- started = new Date
-- duration = 0.0
-- samplerate = parseFloat format.sampleRate
--
-- reader.on "data", (buf) ->
-- samples = buf.length/(2*format.channels)
--
-- duration += parseFloat(samples) / samplerate
--
-- write shine.encode(convertInterleavedBuffer(buf, format.channels, samples))
--
-- reader.on "end", ->
-- write shine.close()
--
-- ended = new Date
-- encodingTime = (ended.getTime() - started.getTime())/1000
-- console.log "Done encoding."
-- console.log "File duration: #{duration.toFixed(2)} seconds"
-- console.log "Encoding time: #{encodingTime.toFixed(2)} seconds"
-- console.log "Encoding rate: #{(duration/encodingTime).toFixed(2)}X"
-- process.exit 0
--
--convertInterleavedBuffer = (buf, channels, samples) ->
-- ret = new Array channels
-- for chan in [0..channels-1]
-- ret[chan] = new Int16Array samples
-- for i in [0..samples-1]
-- ret[chan][i] = buf.readInt16LE 2*(i*channels + chan)
--
-- ret
-diff --git a/js/test/node/encode.ts b/js/test/node/encode.ts
-new file mode 100644
-index 0000000..cc971e1
---- /dev/null
-+++ b/js/test/node/encode.ts
-@@ -0,0 +1,73 @@
-+import { Shine } from "@toots/shine.js";
-+import { Reader } from "wav";
-+import fs from "fs";
-+
-+const convertInterleavedBuffer = (buf, channels, samples) => {
-+ const ret = new Array(channels);
-+ for (let chan = 0; chan < channels; chan++) {
-+ ret[chan] = new Int16Array(samples);
-+ for (let i = 0; i < samples; i++) {
-+ ret[chan][i] = buf.readInt16LE(2 * (i * channels + chan));
-+ }
-+ }
-+
-+ return ret;
-+};
-+
-+const exec = async () => {
-+ await Shine.initialized;
-+
-+ console.log("");
-+ console.log("Executing encoding test");
-+
-+ const bitrate = 128;
-+ const str = fs.createReadStream("../lib/encode.wav");
-+ const fd = fs.openSync("./encode.mp3", "w");
-+ const reader = new Reader();
-+
-+ str.pipe(reader);
-+
-+ const write = encoded => {
-+ if (encoded.length <= 0) return;
-+
-+ const buf = Buffer.from(encoded);
-+ fs.writeSync(fd, buf, 0, buf.length);
-+ };
-+
-+ reader.on("format", format => {
-+ console.log("Got WAV file.");
-+
-+ const shine = new Shine({
-+ bitrate: bitrate,
-+ samplerate: format.sampleRate,
-+ channels: format.channels,
-+ });
-+
-+ console.log("Encoding..");
-+ const started = new Date();
-+ let duration = 0.0;
-+ const samplerate = format.sampleRate;
-+
-+ reader.on("data", buf => {
-+ const samples = buf.length / (2 * format.channels);
-+
-+ duration += samples / samplerate;
-+
-+ write(shine.encode(convertInterleavedBuffer(buf, format.channels, samples)));
-+ });
-+
-+ reader.on("end", () => {
-+ write(shine.close());
-+
-+ const ended = new Date();
-+ const encodingTime = (ended.getTime() - started.getTime()) / 1000;
-+ console.log("Done encoding.");
-+ console.log(`File duration: ${duration.toFixed(2)} seconds`);
-+ console.log(`Encoding time: ${encodingTime.toFixed(2)} seconds`);
-+ console.log(`Encoding rate: ${(duration / encodingTime).toFixed(2)}X`);
-+ process.exit(0);
-+ });
-+ });
-+};
-+
-+exec();
-diff --git a/js/test/node/package-lock.json b/js/test/node/package-lock.json
-index 0096742..752a7c7 100644
---- a/js/test/node/package-lock.json
-+++ b/js/test/node/package-lock.json
-@@ -1,49 +1,493 @@
- {
- "name": "shine-js-test",
- "version": "0.0.1",
-- "lockfileVersion": 1,
-+ "lockfileVersion": 2,
- "requires": true,
-+ "packages": {
-+ "": {
-+ "name": "shine-js-test",
-+ "version": "0.0.1",
-+ "dependencies": {
-+ "@toots/shine.js": "file:../..",
-+ "@types/node": "^18.11.18",
-+ "ts-node": "^10.9.1",
-+ "typescript": "^4.9.4",
-+ "wav": "^1.0.2"
-+ }
-+ },
-+ "../..": {
-+ "name": "@toots/shine.js",
-+ "version": "1.0.1",
-+ "license": "LGPL-2.0-only"
-+ },
-+ "node_modules/@cspotcode/source-map-support": {
-+ "version": "0.8.1",
-+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
-+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
-+ "dependencies": {
-+ "@jridgewell/trace-mapping": "0.3.9"
-+ },
-+ "engines": {
-+ "node": ">=12"
-+ }
-+ },
-+ "node_modules/@jridgewell/resolve-uri": {
-+ "version": "3.1.0",
-+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
-+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
-+ "engines": {
-+ "node": ">=6.0.0"
-+ }
-+ },
-+ "node_modules/@jridgewell/sourcemap-codec": {
-+ "version": "1.4.14",
-+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
-+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
-+ },
-+ "node_modules/@jridgewell/trace-mapping": {
-+ "version": "0.3.9",
-+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
-+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
-+ "dependencies": {
-+ "@jridgewell/resolve-uri": "^3.0.3",
-+ "@jridgewell/sourcemap-codec": "^1.4.10"
-+ }
-+ },
-+ "node_modules/@toots/shine.js": {
-+ "resolved": "../..",
-+ "link": true
-+ },
-+ "node_modules/@tsconfig/node10": {
-+ "version": "1.0.9",
-+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
-+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA=="
-+ },
-+ "node_modules/@tsconfig/node12": {
-+ "version": "1.0.11",
-+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
-+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="
-+ },
-+ "node_modules/@tsconfig/node14": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
-+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="
-+ },
-+ "node_modules/@tsconfig/node16": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
-+ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ=="
-+ },
-+ "node_modules/@types/node": {
-+ "version": "18.11.18",
-+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
-+ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA=="
-+ },
-+ "node_modules/acorn": {
-+ "version": "8.8.1",
-+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
-+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
-+ "bin": {
-+ "acorn": "bin/acorn"
-+ },
-+ "engines": {
-+ "node": ">=0.4.0"
-+ }
-+ },
-+ "node_modules/acorn-walk": {
-+ "version": "8.2.0",
-+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
-+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
-+ "engines": {
-+ "node": ">=0.4.0"
-+ }
-+ },
-+ "node_modules/arg": {
-+ "version": "4.1.3",
-+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
-+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
-+ },
-+ "node_modules/buffer-alloc": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
-+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
-+ "dependencies": {
-+ "buffer-alloc-unsafe": "^1.1.0",
-+ "buffer-fill": "^1.0.0"
-+ }
-+ },
-+ "node_modules/buffer-alloc-unsafe": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
-+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
-+ },
-+ "node_modules/buffer-fill": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
-+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
-+ },
-+ "node_modules/buffer-from": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
-+ },
-+ "node_modules/core-util-is": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
-+ },
-+ "node_modules/create-require": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
-+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
-+ },
-+ "node_modules/debug": {
-+ "version": "2.6.9",
-+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-+ "dependencies": {
-+ "ms": "2.0.0"
-+ }
-+ },
-+ "node_modules/diff": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
-+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
-+ "engines": {
-+ "node": ">=0.3.1"
-+ }
-+ },
-+ "node_modules/inherits": {
-+ "version": "2.0.3",
-+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-+ },
-+ "node_modules/isarray": {
-+ "version": "0.0.1",
-+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
-+ },
-+ "node_modules/make-error": {
-+ "version": "1.3.6",
-+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
-+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
-+ },
-+ "node_modules/ms": {
-+ "version": "2.0.0",
-+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
-+ },
-+ "node_modules/readable-stream": {
-+ "version": "1.1.14",
-+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
-+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
-+ "dependencies": {
-+ "core-util-is": "~1.0.0",
-+ "inherits": "~2.0.1",
-+ "isarray": "0.0.1",
-+ "string_decoder": "~0.10.x"
-+ }
-+ },
-+ "node_modules/stream-parser": {
-+ "version": "0.3.1",
-+ "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
-+ "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=",
-+ "dependencies": {
-+ "debug": "2"
-+ }
-+ },
-+ "node_modules/string_decoder": {
-+ "version": "0.10.31",
-+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
-+ },
-+ "node_modules/ts-node": {
-+ "version": "10.9.1",
-+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
-+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
-+ "dependencies": {
-+ "@cspotcode/source-map-support": "^0.8.0",
-+ "@tsconfig/node10": "^1.0.7",
-+ "@tsconfig/node12": "^1.0.7",
-+ "@tsconfig/node14": "^1.0.0",
-+ "@tsconfig/node16": "^1.0.2",
-+ "acorn": "^8.4.1",
-+ "acorn-walk": "^8.1.1",
-+ "arg": "^4.1.0",
-+ "create-require": "^1.1.0",
-+ "diff": "^4.0.1",
-+ "make-error": "^1.1.1",
-+ "v8-compile-cache-lib": "^3.0.1",
-+ "yn": "3.1.1"
-+ },
-+ "bin": {
-+ "ts-node": "dist/bin.js",
-+ "ts-node-cwd": "dist/bin-cwd.js",
-+ "ts-node-esm": "dist/bin-esm.js",
-+ "ts-node-script": "dist/bin-script.js",
-+ "ts-node-transpile-only": "dist/bin-transpile.js",
-+ "ts-script": "dist/bin-script-deprecated.js"
-+ },
-+ "peerDependencies": {
-+ "@swc/core": ">=1.2.50",
-+ "@swc/wasm": ">=1.2.50",
-+ "@types/node": "*",
-+ "typescript": ">=2.7"
-+ },
-+ "peerDependenciesMeta": {
-+ "@swc/core": {
-+ "optional": true
-+ },
-+ "@swc/wasm": {
-+ "optional": true
-+ }
-+ }
-+ },
-+ "node_modules/typescript": {
-+ "version": "4.9.4",
-+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
-+ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
-+ "bin": {
-+ "tsc": "bin/tsc",
-+ "tsserver": "bin/tsserver"
-+ },
-+ "engines": {
-+ "node": ">=4.2.0"
-+ }
-+ },
-+ "node_modules/v8-compile-cache-lib": {
-+ "version": "3.0.1",
-+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
-+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
-+ },
-+ "node_modules/wav": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz",
-+ "integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==",
-+ "dependencies": {
-+ "buffer-alloc": "^1.1.0",
-+ "buffer-from": "^1.0.0",
-+ "debug": "^2.2.0",
-+ "readable-stream": "^1.1.14",
-+ "stream-parser": "^0.3.1"
-+ }
-+ },
-+ "node_modules/yn": {
-+ "version": "3.1.1",
-+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
-+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
-+ "engines": {
-+ "node": ">=6"
-+ }
-+ }
-+ },
- "dependencies": {
-- "coffee-script": {
-- "version": "1.6.3",
-- "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.3.tgz",
-- "integrity": "sha1-Y1XTLPGwTN/2tITl5xF4Ky8MOb4="
-+ "@cspotcode/source-map-support": {
-+ "version": "0.8.1",
-+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
-+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
-+ "requires": {
-+ "@jridgewell/trace-mapping": "0.3.9"
-+ }
-+ },
-+ "@jridgewell/resolve-uri": {
-+ "version": "3.1.0",
-+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
-+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
-+ },
-+ "@jridgewell/sourcemap-codec": {
-+ "version": "1.4.14",
-+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
-+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
-+ },
-+ "@jridgewell/trace-mapping": {
-+ "version": "0.3.9",
-+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
-+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
-+ "requires": {
-+ "@jridgewell/resolve-uri": "^3.0.3",
-+ "@jridgewell/sourcemap-codec": "^1.4.10"
-+ }
-+ },
-+ "@toots/shine.js": {
-+ "version": "file:../.."
-+ },
-+ "@tsconfig/node10": {
-+ "version": "1.0.9",
-+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
-+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA=="
-+ },
-+ "@tsconfig/node12": {
-+ "version": "1.0.11",
-+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
-+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="
-+ },
-+ "@tsconfig/node14": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
-+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="
-+ },
-+ "@tsconfig/node16": {
-+ "version": "1.0.3",
-+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
-+ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ=="
-+ },
-+ "@types/node": {
-+ "version": "18.11.18",
-+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
-+ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA=="
-+ },
-+ "acorn": {
-+ "version": "8.8.1",
-+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
-+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA=="
-+ },
-+ "acorn-walk": {
-+ "version": "8.2.0",
-+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
-+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA=="
-+ },
-+ "arg": {
-+ "version": "4.1.3",
-+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
-+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
-+ },
-+ "buffer-alloc": {
-+ "version": "1.2.0",
-+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
-+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
-+ "requires": {
-+ "buffer-alloc-unsafe": "^1.1.0",
-+ "buffer-fill": "^1.0.0"
-+ }
-+ },
-+ "buffer-alloc-unsafe": {
-+ "version": "1.1.0",
-+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
-+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
-+ },
-+ "buffer-fill": {
-+ "version": "1.0.0",
-+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
-+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
-+ },
-+ "buffer-from": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
-+ },
-+ "core-util-is": {
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
-+ },
-+ "create-require": {
-+ "version": "1.1.1",
-+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
-+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
- },
- "debug": {
-- "version": "2.6.8",
-- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
-- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
-+ "version": "2.6.9",
-+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
-+ "diff": {
-+ "version": "4.0.2",
-+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
-+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="
-+ },
-+ "inherits": {
-+ "version": "2.0.3",
-+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-+ },
-+ "isarray": {
-+ "version": "0.0.1",
-+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
-+ },
-+ "make-error": {
-+ "version": "1.3.6",
-+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
-+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
-+ },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "readable-stream": {
-- "version": "0.0.4",
-- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz",
-- "integrity": "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40="
-+ "version": "1.1.14",
-+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
-+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
-+ "requires": {
-+ "core-util-is": "~1.0.0",
-+ "inherits": "~2.0.1",
-+ "isarray": "0.0.1",
-+ "string_decoder": "~0.10.x"
-+ }
- },
- "stream-parser": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
- "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=",
- "requires": {
-- "debug": "2.6.8"
-+ "debug": "2"
- }
- },
-+ "string_decoder": {
-+ "version": "0.10.31",
-+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
-+ },
-+ "ts-node": {
-+ "version": "10.9.1",
-+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
-+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
-+ "requires": {
-+ "@cspotcode/source-map-support": "^0.8.0",
-+ "@tsconfig/node10": "^1.0.7",
-+ "@tsconfig/node12": "^1.0.7",
-+ "@tsconfig/node14": "^1.0.0",
-+ "@tsconfig/node16": "^1.0.2",
-+ "acorn": "^8.4.1",
-+ "acorn-walk": "^8.1.1",
-+ "arg": "^4.1.0",
-+ "create-require": "^1.1.0",
-+ "diff": "^4.0.1",
-+ "make-error": "^1.1.1",
-+ "v8-compile-cache-lib": "^3.0.1",
-+ "yn": "3.1.1"
-+ }
-+ },
-+ "typescript": {
-+ "version": "4.9.4",
-+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
-+ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg=="
-+ },
-+ "v8-compile-cache-lib": {
-+ "version": "3.0.1",
-+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
-+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
-+ },
- "wav": {
-- "version": "0.1.0",
-- "resolved": "https://registry.npmjs.org/wav/-/wav-0.1.0.tgz",
-- "integrity": "sha1-5wTSp2nqIz858tZ5Xout1l9YsAk=",
-+ "version": "1.0.2",
-+ "resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz",
-+ "integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==",
- "requires": {
-- "debug": "2.6.8",
-- "readable-stream": "0.0.4",
-- "stream-parser": "0.3.1"
-+ "buffer-alloc": "^1.1.0",
-+ "buffer-from": "^1.0.0",
-+ "debug": "^2.2.0",
-+ "readable-stream": "^1.1.14",
-+ "stream-parser": "^0.3.1"
- }
-+ },
-+ "yn": {
-+ "version": "3.1.1",
-+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
-+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="
- }
- }
- }
-diff --git a/js/test/node/package.json b/js/test/node/package.json
-index 5160dab..650299c 100644
---- a/js/test/node/package.json
-+++ b/js/test/node/package.json
-@@ -2,26 +2,16 @@
- "name": "shine-js-test",
- "description": "Test encoder for libshine.js",
- "version": "0.0.1",
-- "homepage": "https://github.com/savonet/shine",
- "author": "Romain Beauxis <toots@rastageeks.org",
-- "repository": {
-- "type": "git",
-- "url": "git://github.com/savonet/shine"
-- },
-- "bugs": {
-- "mail": "toots@rastageeks.org",
-- "url": "http://github.com/savonet/shine/issues"
-- },
-- "main": "test.coffee",
- "scripts": {
-- "test": "coffee ./encode.coffee && coffee ./rounds.coffee"
-- },
-- "engine": {
-- "node": ">= 0.10.7",
-- "npm": "1"
-+ "test": "ts-node ./encode.ts && ts-node ./rounds.ts"
- },
- "dependencies": {
-- "coffee-script": "1.6.3",
-- "wav": "0.1.0"
-+ "@toots/shine.js": "file:../..",
-+ "@types/node": "^18.11.18",
-+ "@types/wav": "^1.0.1",
-+ "ts-node": "^10.9.1",
-+ "typescript": "^4.9.4",
-+ "wav": "^1.0.2"
- }
- }
-diff --git a/js/test/node/pnpm-lock.yaml b/js/test/node/pnpm-lock.yaml
-new file mode 100644
-index 0000000..58a8b69
---- /dev/null
-+++ b/js/test/node/pnpm-lock.yaml
-@@ -0,0 +1,227 @@
-+lockfileVersion: 5.4
-+
-+specifiers:
-+ '@toots/shine.js': file:../..
-+ '@types/node': ^18.11.18
-+ '@types/wav': ^1.0.1
-+ ts-node: ^10.9.1
-+ typescript: ^4.9.4
-+ wav: ^1.0.2
-+
-+dependencies:
-+ '@toots/shine.js': file:../..
-+ '@types/node': 18.11.18
-+ '@types/wav': 1.0.1
-+ ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq
-+ typescript: 4.9.4
-+ wav: 1.0.2
-+
-+packages:
-+
-+ /@cspotcode/source-map-support/0.8.1:
-+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
-+ engines: {node: '>=12'}
-+ dependencies:
-+ '@jridgewell/trace-mapping': 0.3.9
-+ dev: false
-+
-+ /@jridgewell/resolve-uri/3.1.0:
-+ resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
-+ engines: {node: '>=6.0.0'}
-+ dev: false
-+
-+ /@jridgewell/sourcemap-codec/1.4.14:
-+ resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
-+ dev: false
-+
-+ /@jridgewell/trace-mapping/0.3.9:
-+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
-+ dependencies:
-+ '@jridgewell/resolve-uri': 3.1.0
-+ '@jridgewell/sourcemap-codec': 1.4.14
-+ dev: false
-+
-+ /@tsconfig/node10/1.0.9:
-+ resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
-+ dev: false
-+
-+ /@tsconfig/node12/1.0.11:
-+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
-+ dev: false
-+
-+ /@tsconfig/node14/1.0.3:
-+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
-+ dev: false
-+
-+ /@tsconfig/node16/1.0.3:
-+ resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==}
-+ dev: false
-+
-+ /@types/node/18.11.18:
-+ resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
-+ dev: false
-+
-+ /@types/wav/1.0.1:
-+ resolution: {integrity: sha512-AKJeM5mqO1pdR2/HaTUQzSCm12No36KUM1larivXUmsLx+4JmMuC2Tv0kCdZzTx66h7IH2Xr92DGc9NQsXxa9Q==}
-+ dependencies:
-+ '@types/node': 18.11.18
-+ dev: false
-+
-+ /acorn-walk/8.2.0:
-+ resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
-+ engines: {node: '>=0.4.0'}
-+ dev: false
-+
-+ /acorn/8.8.1:
-+ resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
-+ engines: {node: '>=0.4.0'}
-+ hasBin: true
-+ dev: false
-+
-+ /arg/4.1.3:
-+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
-+ dev: false
-+
-+ /buffer-alloc-unsafe/1.1.0:
-+ resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
-+ dev: false
-+
-+ /buffer-alloc/1.2.0:
-+ resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}
-+ dependencies:
-+ buffer-alloc-unsafe: 1.1.0
-+ buffer-fill: 1.0.0
-+ dev: false
-+
-+ /buffer-fill/1.0.0:
-+ resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
-+ dev: false
-+
-+ /buffer-from/1.1.2:
-+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
-+ dev: false
-+
-+ /core-util-is/1.0.3:
-+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-+ dev: false
-+
-+ /create-require/1.1.1:
-+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
-+ dev: false
-+
-+ /debug/2.6.9:
-+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
-+ peerDependencies:
-+ supports-color: '*'
-+ peerDependenciesMeta:
-+ supports-color:
-+ optional: true
-+ dependencies:
-+ ms: 2.0.0
-+ dev: false
-+
-+ /diff/4.0.2:
-+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
-+ engines: {node: '>=0.3.1'}
-+ dev: false
-+
-+ /inherits/2.0.4:
-+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-+ dev: false
-+
-+ /isarray/0.0.1:
-+ resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
-+ dev: false
-+
-+ /make-error/1.3.6:
-+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
-+ dev: false
-+
-+ /ms/2.0.0:
-+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
-+ dev: false
-+
-+ /readable-stream/1.1.14:
-+ resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
-+ dependencies:
-+ core-util-is: 1.0.3
-+ inherits: 2.0.4
-+ isarray: 0.0.1
-+ string_decoder: 0.10.31
-+ dev: false
-+
-+ /stream-parser/0.3.1:
-+ resolution: {integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==}
-+ dependencies:
-+ debug: 2.6.9
-+ transitivePeerDependencies:
-+ - supports-color
-+ dev: false
-+
-+ /string_decoder/0.10.31:
-+ resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
-+ dev: false
-+
-+ /ts-node/10.9.1_awa2wsr5thmg3i7jqycphctjfq:
-+ resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
-+ hasBin: true
-+ peerDependencies:
-+ '@swc/core': '>=1.2.50'
-+ '@swc/wasm': '>=1.2.50'
-+ '@types/node': '*'
-+ typescript: '>=2.7'
-+ peerDependenciesMeta:
-+ '@swc/core':
-+ optional: true
-+ '@swc/wasm':
-+ optional: true
-+ dependencies:
-+ '@cspotcode/source-map-support': 0.8.1
-+ '@tsconfig/node10': 1.0.9
-+ '@tsconfig/node12': 1.0.11
-+ '@tsconfig/node14': 1.0.3
-+ '@tsconfig/node16': 1.0.3
-+ '@types/node': 18.11.18
-+ acorn: 8.8.1
-+ acorn-walk: 8.2.0
-+ arg: 4.1.3
-+ create-require: 1.1.1
-+ diff: 4.0.2
-+ make-error: 1.3.6
-+ typescript: 4.9.4
-+ v8-compile-cache-lib: 3.0.1
-+ yn: 3.1.1
-+ dev: false
-+
-+ /typescript/4.9.4:
-+ resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==}
-+ engines: {node: '>=4.2.0'}
-+ hasBin: true
-+ dev: false
-+
-+ /v8-compile-cache-lib/3.0.1:
-+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
-+ dev: false
-+
-+ /wav/1.0.2:
-+ resolution: {integrity: sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==}
-+ dependencies:
-+ buffer-alloc: 1.2.0
-+ buffer-from: 1.1.2
-+ debug: 2.6.9
-+ readable-stream: 1.1.14
-+ stream-parser: 0.3.1
-+ transitivePeerDependencies:
-+ - supports-color
-+ dev: false
-+
-+ /yn/3.1.1:
-+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
-+ engines: {node: '>=6'}
-+ dev: false
-+
-+ file:../..:
-+ resolution: {directory: ../.., type: directory}
-+ name: '@toots/shine.js'
-+ version: 1.0.3
-+ dev: false
-diff --git a/js/test/node/rounds.coffee b/js/test/node/rounds.coffee
-deleted file mode 100644
-index 7be6690..0000000
---- a/js/test/node/rounds.coffee
-+++ /dev/null
-@@ -1,6 +0,0 @@
--Shine = require "../../dist/libshine.js"
--runRoundsTest = require "../lib/rounds.js"
--
--console.log ""
--runRoundsTest Shine, (s) ->
-- console.log s
-diff --git a/js/test/node/rounds.ts b/js/test/node/rounds.ts
-new file mode 100644
-index 0000000..6f3e664
---- /dev/null
-+++ b/js/test/node/rounds.ts
-@@ -0,0 +1,11 @@
-+import { Shine } from "@toots/shine.js";
-+import runRoundsTest from "../lib/rounds";
-+
-+const exec = async () => {
-+ await Shine.initialized;
-+
-+ console.log("");
-+ runRoundsTest(Shine, s => console.log(s));
-+};
-+
-+exec();
-diff --git a/js/test/node/tsconfig.json b/js/test/node/tsconfig.json
-new file mode 100644
-index 0000000..d1045e4
---- /dev/null
-+++ b/js/test/node/tsconfig.json
-@@ -0,0 +1,8 @@
-+{
-+ "include": ["**/*.ts"],
-+ "compilerOptions": {
-+ "allowJs": true,
-+ "skipLibCheck": true,
-+ "esModuleInterop": true
-+ }
-+}
-diff --git a/src/bin/main.c b/src/bin/main.c
-index ab16fea..b7b70a4 100644
---- a/src/bin/main.c
-+++ b/src/bin/main.c
-@@ -35,32 +35,25 @@ int _verbose = 0;
- int stereo = STEREO;
- int force_mono = 0;
-
--int verbose()
--{
-- return _verbose;
--}
-+int verbose() { return _verbose; }
-
- /* Write out the MP3 file */
--int write_mp3(long bytes, void *buffer, void *config)
--{
-- return fwrite(buffer, sizeof(unsigned char), bytes, outfile) / sizeof(unsigned char);
-+int write_mp3(long bytes, void *buffer, void *config) {
-+ return fwrite(buffer, sizeof(unsigned char), bytes, outfile) /
-+ sizeof(unsigned char);
- }
-
- /* Output error message and exit */
--void error(char *s)
--{
-+void error(char *s) {
- fprintf(stderr, "Error: %s\n", s);
- exit(1);
- }
-
--static void print_name()
--{
-- printf("shineenc (Liquidsoap version)\n");
--}
-+static void print_name() { printf("shineenc (Liquidsoap version)\n"); }
-
--static void print_usage()
--{
-+static void print_usage() {
- printf("Usage: shineenc [options] <infile> <outfile>\n\n");
-+ printf("Use \"-\" for standard input or output.\n\n");
- printf("Options:\n");
- printf(" -h this help message\n");
- printf(" -b <bitrate> set the bitrate [8-320], default 128kbit\n");
-@@ -73,88 +66,88 @@ static void print_usage()
- }
-
- /* Use these default settings, can be overridden */
--static void set_defaults(shine_config_t *config)
--{
-+static void set_defaults(shine_config_t *config) {
- shine_set_config_mpeg_defaults(&config->mpeg);
- }
-
- /* Parse command line arguments */
--static int parse_command(int argc, char** argv, shine_config_t *config)
--{
-+static int parse_command(int argc, char **argv, shine_config_t *config) {
- int i = 0;
-
-- if(argc < 3) return 0;
-+ if (argc < 3)
-+ return 0;
-
- while (argv[++i][0] == '-' && argv[i][1] != '\000' && argv[i][1] != ' ')
- switch (argv[i][1]) {
-- case 'b':
-- config->mpeg.bitr = atoi(argv[++i]);
-- break;
--
-- case 'm':
-- force_mono = 1;
-- break;
--
-- case 'j':
-- stereo = JOINT_STEREO;
-- break;
--
-- case 'd':
-- stereo = DUAL_CHANNEL;
-- break;
--
-- case 'c':
-- config->mpeg.copyright = 1;
-- break;
--
-- case 'q':
-- quiet = 1;
-- _verbose = 0;
-- break;
--
-- case 'v':
-- _verbose = 1;
-- quiet = 0;
-- break;
--
-- case 'h':
-- default :
-- return 0;
-+ case 'b':
-+ config->mpeg.bitr = atoi(argv[++i]);
-+ break;
-+
-+ case 'm':
-+ force_mono = 1;
-+ break;
-+
-+ case 'j':
-+ stereo = JOINT_STEREO;
-+ break;
-+
-+ case 'd':
-+ stereo = DUAL_CHANNEL;
-+ break;
-+
-+ case 'c':
-+ config->mpeg.copyright = 1;
-+ break;
-+
-+ case 'q':
-+ quiet = 1;
-+ _verbose = 0;
-+ break;
-+
-+ case 'v':
-+ _verbose = 1;
-+ quiet = 0;
-+ break;
-+
-+ case 'h':
-+ default:
-+ return 0;
- }
-
-- if (argc - i != 2) return 0;
-+ if (argc - i != 2)
-+ return 0;
- infname = argv[i++];
- outfname = argv[i];
- return 1;
- }
-
- /* Print some info about what we're going to encode */
--static void check_config(shine_config_t *config)
--{
-- static char *version_names[4] = { "2.5", "reserved", "II", "I" };
-- static char *mode_names[4] = { "stereo", "joint-stereo", "dual-channel", "mono" };
-- static char *demp_names[4] = { "none", "50/15us", "", "CITT" };
-+static void check_config(shine_config_t *config) {
-+ static char *version_names[4] = {"2.5", "reserved", "II", "I"};
-+ static char *mode_names[4] = {"stereo", "joint-stereo", "dual-channel",
-+ "mono"};
-+ static char *demp_names[4] = {"none", "50/15us", "", "CITT"};
-
- printf("MPEG-%s layer III, %s Psychoacoustic Model: Shine\n",
-- version_names[shine_check_config(config->wave.samplerate, config->mpeg.bitr)],
-- mode_names[config->mpeg.mode]);
-+ version_names[shine_check_config(config->wave.samplerate,
-+ config->mpeg.bitr)],
-+ mode_names[config->mpeg.mode]);
- printf("Bitrate: %d kbps ", config->mpeg.bitr);
-- printf("De-emphasis: %s %s %s\n",
-- demp_names[config->mpeg.emph],
-- ((config->mpeg.original) ? "Original" : ""),
-- ((config->mpeg.copyright) ? "(C)" : ""));
-+ printf("De-emphasis: %s %s %s\n", demp_names[config->mpeg.emph],
-+ ((config->mpeg.original) ? "Original" : ""),
-+ ((config->mpeg.copyright) ? "(C)" : ""));
- printf("Encoding \"%s\" to \"%s\"\n", infname, outfname);
- }
-
--int main(int argc, char **argv)
--{
-- wave_t wave;
-- time_t start_time, end_time;
-- int16_t buffer[2*SHINE_MAX_SAMPLES];
-+int main(int argc, char **argv) {
-+ wave_t wave;
-+ time_t start_time, end_time;
-+ int16_t buffer[2 * SHINE_MAX_SAMPLES];
- shine_config_t config;
-- shine_t s;
-- int written;
-- unsigned char *data;
-+ shine_t s;
-+ int written;
-+ unsigned char *data;
-+ int samples_per_pass;
-
- time(&start_time);
-
-@@ -168,7 +161,8 @@ int main(int argc, char **argv)
-
- quiet = quiet || !strcmp(outfname, "-");
-
-- if (!quiet) print_name();
-+ if (!quiet)
-+ print_name();
-
- /* Open the input file and fill the config shine_wave_t header */
- if (!wave_open(infname, &wave, &config, quiet))
-@@ -205,17 +199,17 @@ int main(int argc, char **argv)
- // assert(s != NULL);
-
- /* Print some info about the file about to be created (optional) */
-- if (!quiet) check_config(&config);
-+ if (!quiet)
-+ check_config(&config);
-
-- int samples_per_pass = shine_samples_per_pass(s);
-+ samples_per_pass = shine_samples_per_pass(s);
-
- /* All the magic happens here */
- while (wave_get(buffer, &wave, samples_per_pass)) {
- data = shine_encode_buffer_interleaved(s, buffer, &written);
-- if ( write_mp3(written, data, &config) != written )
-- {
-- fprintf(stderr, "shineenc: write error\n");
-- return 1;
-+ if (write_mp3(written, data, &config) != written) {
-+ fprintf(stderr, "shineenc: write error\n");
-+ return 1;
- }
- }
-
-@@ -235,7 +229,9 @@ int main(int argc, char **argv)
- time(&end_time);
- end_time -= start_time;
- if (!quiet)
-- printf("Finished in %02ld:%02ld:%02ld (%01.1fx realtime)\n", end_time / 3600, (end_time / 60) % 60, end_time % 60, (float)wave.duration / (float)end_time);
-+ printf("Finished in %02ld:%02ld:%02ld (%01.1fx realtime)\n",
-+ end_time / 3600, (end_time / 60) % 60, end_time % 60,
-+ (float)wave.duration / (float)end_time);
-
- return 0;
- }
-diff --git a/src/bin/main.h b/src/bin/main.h
-index 52fbbb2..7ab9691 100644
---- a/src/bin/main.h
-+++ b/src/bin/main.h
-@@ -2,6 +2,6 @@
- #define MAIN_H
-
- void error(char *s);
--int verbose();
-+int verbose();
-
- #endif
-diff --git a/src/bin/wave.c b/src/bin/wave.c
-index 5d19004..3c7ab81 100644
---- a/src/bin/wave.c
-+++ b/src/bin/wave.c
-@@ -9,17 +9,32 @@
- #include "layer3.h"
-
- /* Local header */
--#include <stdint.h>
--#include <string.h>
- #include "main.h"
- #include "wave.h"
-+#include <stdint.h>
-+#include <string.h>
-
- /* RISC OS specifics */
--#define WAVE 0xfb1 /* Wave filetype */
--#define DATA 0xffd /* Data filetype */
-+#define WAVE 0xfb1 /* Wave filetype */
-+#define DATA 0xffd /* Data filetype */
-
- #define MODE_MONO 3
-
-+#ifdef SHINE_BIG_ENDIAN
-+#if defined(SHINE_HAVE_BSWAP_H)
-+#include <byteswap.h>
-+#elif defined(__GNUC__) && \
-+ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
-+#define bswap_16(x) __builtin_bswap16(x)
-+#define bswap_32(x) __builtin_bswap32(x)
-+#else
-+#define bswap_16(x) ((((x) >> 8) & 0xff) | (((x)&0xff) << 8))
-+#define bswap_32(x) \
-+ ((((x)&0xFF) << 24) | (((x) >> 24) & 0xFF) | (((x)&0x0000FF00) << 8) | \
-+ (((x)&0x00FF0000) >> 8))
-+#endif
-+#endif
-+
- typedef struct {
- char id[4];
- uint32_t length;
-@@ -32,14 +47,28 @@ typedef struct {
-
- typedef struct {
- riff_chunk_header_t header;
-- uint16_t format; /* MS PCM = 1 */
-- uint16_t channels; /* channels, mono = 1, stereo = 2 */
-- uint32_t sample_rate; /* samples per second = 44100 */
-- uint32_t byte_rate; /* bytes per second = samp_rate * byte_samp = 176400 */
-- uint16_t frame_size; /* block align (bytes per sample) = channels * bits_per_sample / 8 = 4 */
-- uint16_t depth; /* bits per sample = 16 for MS PCM (format specific) */
-+ uint16_t format; /* MS PCM = 1 */
-+ uint16_t channels; /* channels, mono = 1, stereo = 2 */
-+ uint32_t sample_rate; /* samples per second = 44100 */
-+ uint32_t byte_rate; /* bytes per second = samp_rate * byte_samp = 176400 */
-+ uint16_t frame_size; /* block align (bytes per sample) = channels *
-+ bits_per_sample / 8 = 4 */
-+ uint16_t depth; /* bits per sample = 16 for MS PCM (format specific) */
- } fmt_chunk_t;
-
-+#ifdef SHINE_BIG_ENDIAN
-+#define native_fmt_chunk(fmt) \
-+ { \
-+ fmt.header.length = bswap_32(fmt.header.length); \
-+ fmt.format = bswap_16(fmt.format); \
-+ fmt.channels = bswap_16(fmt.channels); \
-+ fmt.sample_rate = bswap_32(fmt.sample_rate); \
-+ fmt.byte_rate = bswap_32(fmt.byte_rate); \
-+ fmt.frame_size = bswap_16(fmt.frame_size); \
-+ fmt.depth = bswap_16(fmt.depth); \
-+ }
-+#endif
-+
- void wave_seek(FILE *file, int has_seek, uint32_t bytes) {
- uint32_t i;
- if (has_seek == 1)
-@@ -50,15 +79,15 @@ void wave_seek(FILE *file, int has_seek, uint32_t bytes) {
- }
- }
-
--unsigned char wave_get_chunk_header(FILE *file, int has_seek, const char id[4], riff_chunk_header_t *header)
--{
-+unsigned char wave_get_chunk_header(FILE *file, int has_seek, const char id[4],
-+ riff_chunk_header_t *header) {
- unsigned char found = 0;
- uint32_t chunk_length;
-
- if (verbose())
- fprintf(stderr, "Looking for chunk '%s'\n", id);
-
-- while(!found) {
-+ while (!found) {
- if (fread(header, sizeof(riff_chunk_header_t), 1, file) != 1) {
- if (feof(file))
- return 0;
-@@ -69,24 +98,20 @@ unsigned char wave_get_chunk_header(FILE *file, int has_seek, const char id[4],
- /* chunks must be word-aligned, chunk data doesn't need to */
- chunk_length = header->length + header->length % 2;
- if (verbose()) {
-- fprintf(stderr, "Found chunk '%.4s', length: %u\n", header->id, header->length);
-+ fprintf(stderr, "Found chunk '%.4s', length: %u\n", header->id,
-+ header->length);
- }
-
- if (strncmp(header->id, id, 4) == 0)
- return 1;
--
-+
- wave_seek(file, has_seek, chunk_length);
- }
-
- return 1;
- }
-
--
--void wave_close(wave_t *wave)
--{
-- fclose(wave->file);
--}
--
-+void wave_close(wave_t *wave) { fclose(wave->file); }
-
- /*
- * wave_open:
-@@ -94,16 +119,17 @@ void wave_close(wave_t *wave)
- * Opens and verifies the header of the Input Wave file. The file pointer is
- * left pointing to the start of the samples.
- */
--unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config, int quiet)
--{
-- static char *channel_mappings[] = { NULL, "mono", "stereo" };
-+unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config,
-+ int quiet) {
-+ static char *channel_mappings[] = {NULL, "mono", "stereo"};
- wave_chunk_t wave_chunk;
- fmt_chunk_t fmt_chunk;
- riff_chunk_header_t data_chunk;
- uint32_t fmt_data, fmt_length;
-
- if (!strcmp(fname, "-")) {
-- /* TODO: support raw PCM stream with commandline parameters specifying format */
-+ /* TODO: support raw PCM stream with commandline parameters specifying
-+ * format */
- wave->file = stdin;
- wave->has_seek = 0;
- } else {
-@@ -124,14 +150,19 @@ unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config,
- error("Not a WAVE audio file");
-
- /* Check the fmt chunk */
-- if (!wave_get_chunk_header(wave->file, wave->has_seek, "fmt ", (riff_chunk_header_t *)&fmt_chunk))
-+ if (!wave_get_chunk_header(wave->file, wave->has_seek, "fmt ",
-+ (riff_chunk_header_t *)&fmt_chunk))
- error("WAVE fmt chunk not found");
-
- fmt_data = sizeof(fmt_chunk_t) - sizeof(riff_chunk_header_t);
-
-- if(fread(&fmt_chunk.format, fmt_data, 1, wave->file) != 1)
-+ if (fread(&fmt_chunk.format, fmt_data, 1, wave->file) != 1)
- error("Read error");
-
-+#ifdef SHINE_BIG_ENDIAN
-+ native_fmt_chunk(fmt_chunk);
-+#endif
-+
- if (verbose())
- fprintf(stderr, "WAVE format: %u\n", fmt_chunk.format);
-
-@@ -153,34 +184,31 @@ unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config,
- if (!wave_get_chunk_header(wave->file, wave->has_seek, "data", &data_chunk))
- error("WAVE data chunk not found");
-
-- config->wave.channels = fmt_chunk.channels;
-+ config->wave.channels = fmt_chunk.channels;
- config->wave.samplerate = fmt_chunk.sample_rate;
-
- wave->channels = fmt_chunk.channels;
-- wave->length = data_chunk.length;
-+ wave->length = data_chunk.length;
- wave->duration = data_chunk.length / fmt_chunk.byte_rate;
-
- if (!quiet)
- printf("%s, %s %ldHz %ldbit, duration: %02ld:%02ld:%02ld\n",
-- "WAVE PCM Data", channel_mappings[fmt_chunk.channels], (long)fmt_chunk.sample_rate, (long)fmt_chunk.depth,
-- (long)wave->duration / 3600, (long)(wave->duration / 60) % 60, (long)wave->duration % 60);
-+ "WAVE PCM Data", channel_mappings[fmt_chunk.channels],
-+ (long)fmt_chunk.sample_rate, (long)fmt_chunk.depth,
-+ (long)wave->duration / 3600, (long)(wave->duration / 60) % 60,
-+ (long)wave->duration % 60);
- return 1;
- }
-
- #ifdef SHINE_BIG_ENDIAN
--#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
--#define bswap_16(x) __builtin_bswap16(x)
--#else
--#define bswap_16(x) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
--#endif
--
--void swap_buffer(int16_t *sample_buffer, int length)
--{
-+void swap_buffer(int16_t *sample_buffer, int length) {
- int16_t *end = sample_buffer + length;
-
- if (length >= 2 * sizeof(long) / sizeof(int16_t)) {
-- const unsigned long mask = (~0UL / 0xffff) * 0xff; /* 0x00ff00ff or 0x00ff00ff00ff00ff */
-- unsigned long *long_ptr = (unsigned long *)((unsigned long)sample_buffer & -sizeof(long));
-+ const unsigned long mask =
-+ (~0UL / 0xffff) * 0xff; /* 0x00ff00ff or 0x00ff00ff00ff00ff */
-+ unsigned long *long_ptr =
-+ (unsigned long *)((unsigned long)sample_buffer & -sizeof(long));
-
- /* make sample_buffer aligned on word boundary */
- if ((int16_t *)long_ptr != sample_buffer) {
-@@ -212,18 +240,19 @@ void swap_buffer(int16_t *sample_buffer, int length)
- */
-
- /* TODO: respect data chunk length */
--int read_samples(int16_t *sample_buffer, int frame_size, FILE *file)
--{
-- int samples_read=0;
-+int read_samples(int16_t *sample_buffer, int frame_size, FILE *file) {
-+ int samples_read = 0;
-
-- samples_read = fread(sample_buffer,sizeof(int16_t),frame_size, file);
-+ samples_read = fread(sample_buffer, sizeof(int16_t), frame_size, file);
-
- #ifdef SHINE_BIG_ENDIAN
- swap_buffer(sample_buffer, samples_read);
- #endif
-
-- if(samples_read<frame_size && samples_read>0) { /* Pad sample with zero's */
-- memset(sample_buffer + samples_read, 0, (frame_size - samples_read) * sizeof(int16_t));
-+ if (samples_read < frame_size &&
-+ samples_read > 0) { /* Pad sample with zero's */
-+ memset(sample_buffer + samples_read, 0,
-+ (frame_size - samples_read) * sizeof(int16_t));
- samples_read = frame_size;
- }
-
-@@ -236,8 +265,6 @@ int read_samples(int16_t *sample_buffer, int frame_size, FILE *file)
- * Expects an interleaved 16bit pcm stream from read_samples, which it
- * reads into the given buffer.
- */
--int wave_get(int16_t *buffer, wave_t *wave, int samp_per_pass)
--{
-- return read_samples(buffer,samp_per_pass*wave->channels, wave->file);
-+int wave_get(int16_t *buffer, wave_t *wave, int samp_per_pass) {
-+ return read_samples(buffer, samp_per_pass * wave->channels, wave->file);
- }
--
-diff --git a/src/bin/wave.h b/src/bin/wave.h
-index 5a290a0..b77f0b5 100644
---- a/src/bin/wave.h
-+++ b/src/bin/wave.h
-@@ -4,15 +4,16 @@
- #include <stdio.h>
-
- typedef struct {
-- FILE *file;
-- int has_seek;
-- int channels;
-- long length;
-- long duration;
-+ FILE *file;
-+ int has_seek;
-+ int channels;
-+ long length;
-+ long duration;
- } wave_t;
-
--unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config, int quiet);
--int wave_get(int16_t *buffer, wave_t *wave, int samp_per_frame);
-+unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config,
-+ int quiet);
-+int wave_get(int16_t *buffer, wave_t *wave, int samp_per_frame);
- void wave_close(wave_t *wave);
-
- #endif
-diff --git a/src/lib/bitstream.c b/src/lib/bitstream.c
-index 29afcb1..9408f2c 100644
---- a/src/lib/bitstream.c
-+++ b/src/lib/bitstream.c
-@@ -7,17 +7,16 @@
- * Removed unused functions. Feb 2001 P.Everett
- */
-
--#include "types.h"
- #include "bitstream.h"
-+#include "types.h"
-
--#if !defined(__APPLE__)
-+#if !defined(__APPLE__) && !defined(__FreeBSD__)
- #include <malloc.h>
- #endif
-
- /* open the device to write the bit stream into it */
--void shine_open_bit_stream(bitstream_t *bs, int size)
--{
-- bs->data = (unsigned char *)malloc(size*sizeof(unsigned char));
-+void shine_open_bit_stream(bitstream_t *bs, int size) {
-+ bs->data = (unsigned char *)malloc(size * sizeof(unsigned char));
- bs->data_size = size;
- bs->data_position = 0;
- bs->cache = 0;
-@@ -25,8 +24,7 @@ void shine_open_bit_stream(bitstream_t *bs, int size)
- }
-
- /*close the device containing the bit stream */
--void shine_close_bit_stream(bitstream_t *bs)
--{
-+void shine_close_bit_stream(bitstream_t *bs) {
- if (bs->data)
- free(bs->data);
- }
-@@ -39,42 +37,40 @@ void shine_close_bit_stream(bitstream_t *bs)
- * val = value to write into the buffer
- * N = number of bits of val
- */
--void shine_putbits(bitstream_t *bs, unsigned int val, unsigned int N)
--{
-+void shine_putbits(bitstream_t *bs, unsigned int val, unsigned int N) {
- #ifdef DEBUG
-- if (N > 32)
-- printf("Cannot write more than 32 bits at a time.\n");
-- if (N < 32 && (val >> N) != 0)
-- printf("Upper bits (higher than %d) are not all zeros.\n", N);
-+ if (N > 32)
-+ printf("Cannot write more than 32 bits at a time.\n");
-+ if (N < 32 && (val >> N) != 0)
-+ printf("Upper bits (higher than %d) are not all zeros.\n", N);
- #endif
-
-- if (bs->cache_bits > N) {
-- bs->cache_bits -= N;
-- bs->cache |= val << bs->cache_bits;
-- } else {
-- if (bs->data_position + sizeof(unsigned int) >= bs->data_size) {
-- bs->data = (unsigned char *)realloc(bs->data, bs->data_size + (bs->data_size / 2));
-- bs->data_size += (bs->data_size / 2);
-- }
-+ if (bs->cache_bits > N) {
-+ bs->cache_bits -= N;
-+ bs->cache |= val << bs->cache_bits;
-+ } else {
-+ if (bs->data_position + sizeof(unsigned int) >= bs->data_size) {
-+ bs->data = (unsigned char *)realloc(bs->data,
-+ bs->data_size + (bs->data_size / 2));
-+ bs->data_size += (bs->data_size / 2);
-+ }
-
-- N -= bs->cache_bits;
-- bs->cache |= val >> N;
-+ N -= bs->cache_bits;
-+ bs->cache |= val >> N;
- #ifdef SHINE_BIG_ENDIAN
-- *(unsigned int*)(bs->data + bs->data_position) = bs->cache;
-+ *(unsigned int *)(bs->data + bs->data_position) = bs->cache;
- #else
-- *(unsigned int*)(bs->data + bs->data_position) = SWAB32(bs->cache);
-+ *(unsigned int *)(bs->data + bs->data_position) = SWAB32(bs->cache);
- #endif
-- bs->data_position += sizeof(unsigned int);
-- bs->cache_bits = 32 - N;
-- if (N != 0)
-- bs->cache = val << bs->cache_bits;
-- else
-- bs->cache = 0;
-- }
-+ bs->data_position += sizeof(unsigned int);
-+ bs->cache_bits = 32 - N;
-+ if (N != 0)
-+ bs->cache = val << bs->cache_bits;
-+ else
-+ bs->cache = 0;
-+ }
- }
-
--int shine_get_bits_count(bitstream_t *bs)
--{
-- return bs->data_position * 8 + 32 - bs->cache_bits;
-+int shine_get_bits_count(bitstream_t *bs) {
-+ return bs->data_position * 8 + 32 - bs->cache_bits;
- }
--
-diff --git a/src/lib/bitstream.h b/src/lib/bitstream.h
-index d910ef9..4f7efb6 100644
---- a/src/lib/bitstream.h
-+++ b/src/lib/bitstream.h
-@@ -1,28 +1,29 @@
- #ifndef BITSTREAM_H
- #define BITSTREAM_H
-
--typedef struct bit_stream_struc {
-- unsigned char *data; /* Processed data */
-- int data_size; /* Total data size */
-- int data_position; /* Data position */
-- unsigned int cache; /* bit stream cache */
-- int cache_bits; /* free bits in cache */
-+typedef struct bit_stream_struc {
-+ unsigned char *data; /* Processed data */
-+ int data_size; /* Total data size */
-+ int data_position; /* Data position */
-+ unsigned int cache; /* bit stream cache */
-+ int cache_bits; /* free bits in cache */
- } bitstream_t;
-
- /* "bit_stream.h" Definitions */
-
--#define MINIMUM 4 /* Minimum size of the buffer in bytes */
--#define MAX_LENGTH 32 /* Maximum length of word written or
-- read from bit stream */
-+#define MINIMUM 4 /* Minimum size of the buffer in bytes */
-+#define MAX_LENGTH \
-+ 32 /* Maximum length of word written or \
-+ read from bit stream */
-
--#define BUFFER_SIZE 4096
-+#define BUFFER_SIZE 4096
-
--#define MIN(A, B) ((A) < (B) ? (A) : (B))
--#define MAX(A, B) ((A) > (B) ? (A) : (B))
-+#define MIN(A, B) ((A) < (B) ? (A) : (B))
-+#define MAX(A, B) ((A) > (B) ? (A) : (B))
-
--void shine_open_bit_stream(bitstream_t *bs,const int size);
-+void shine_open_bit_stream(bitstream_t *bs, const int size);
- void shine_close_bit_stream(bitstream_t *bs);
--void shine_putbits(bitstream_t *bs,unsigned int val, unsigned int N);
--int shine_get_bits_count(bitstream_t *bs);
-+void shine_putbits(bitstream_t *bs, unsigned int val, unsigned int N);
-+int shine_get_bits_count(bitstream_t *bs);
-
- #endif
-diff --git a/src/lib/huffman.c b/src/lib/huffman.c
-index d4bd6aa..854ae41 100644
---- a/src/lib/huffman.c
-+++ b/src/lib/huffman.c
-@@ -1,120 +1,248 @@
- /* huffman.c */
-
--#include "types.h"
- #include "huffman.h"
- #include "bitstream.h"
- #include "l3bitstream.h"
-+#include "types.h"
-
--const HUFFBITS dmask = 1 << (((sizeof(HUFFBITS))<<3)-1);
--const unsigned int hs = sizeof(HUFFBITS)<<3;
-+const HUFFBITS dmask = 1 << (((sizeof(HUFFBITS)) << 3) - 1);
-+const unsigned int hs = sizeof(HUFFBITS) << 3;
-
--static const HUFFBITS t1HB[] = {1, 1, 1, 0};
--static const HUFFBITS t2HB[] = {1, 2, 1, 3, 1, 1, 3, 2, 0};
--static const HUFFBITS t3HB[] = {3, 2, 1, 1, 1, 1, 3, 2, 0};
--static const HUFFBITS t5HB[] = {1, 2, 6, 5, 3, 1, 4, 4, 7, 5, 7, 1, 6, 1, 1, 0};
--static const HUFFBITS t6HB[] = {7, 3, 5, 1, 6, 2, 3, 2, 5, 4, 4, 1, 3, 3, 2, 0};
--static const HUFFBITS t7HB[] = {1, 2, 10, 19, 16, 10, 3, 3, 7, 10, 5, 3, 11, 4, 13, 17, 8, 4, 12, 11, 18, 15, 11, 2, 7, 6, 9, 14, 3, 1, 6, 4, 5, 3, 2, 0};
--static const HUFFBITS t8HB[] = {3, 4, 6, 18, 12, 5, 5, 1, 2, 16, 9, 3, 7, 3, 5, 14, 7, 3, 19, 17, 15, 13, 10, 4, 13, 5, 8, 11, 5, 1, 12, 4, 4, 1, 1, 0};
--static const HUFFBITS t9HB[] = {7, 5, 9, 14, 15, 7, 6, 4, 5, 5, 6, 7, 7, 6, 8, 8, 8, 5, 15, 6, 9, 10, 5, 1, 11, 7, 9, 6, 4, 1, 14, 4, 6, 2, 6, 0};
--static const HUFFBITS t10HB[] = {1, 2, 10, 23, 35, 30, 12, 17, 3, 3, 8, 12, 18, 21, 12, 7, 11, 9, 15, 21, 32, 40, 19, 6, 14, 13, 22, 34, 46, 23, 18, 7, 20, 19, 33, 47, 27, 22, 9, 3, 31, 22, 41, 26, 21, 20, 5, 3, 14, 13, 10, 11, 16, 6, 5, 1, 9, 8, 7, 8, 4 , 4, 2, 0};
--static const HUFFBITS t11HB[] = {3, 4, 10, 24, 34, 33, 21, 15, 5, 3, 4, 10, 32, 17, 11, 10, 11, 7, 13, 18, 30, 31, 20, 5, 25, 11, 19, 59, 27, 18, 12, 5, 35, 33, 31, 58, 30, 16, 7, 5, 28, 26, 32, 19, 17, 15, 8, 14, 14, 12, 9, 13, 14, 9, 4, 1, 11, 4, 6, 6, 6, 3, 2, 0};
--static const HUFFBITS t12HB[] = {9, 6, 16, 33, 41, 39, 38, 26, 7, 5, 6, 9, 23, 16, 26, 11, 17, 7, 11, 14, 21, 30, 10, 7, 17, 10, 15, 12, 18, 28, 14, 5, 32, 13, 22, 19, 18, 16, 9, 5, 40, 17, 31, 29, 17, 13, 4, 2, 27, 12, 11, 15, 10, 7, 4, 1, 27, 12, 8, 12 , 6, 3, 1, 0};
--static const HUFFBITS t13HB[] = {1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19, 3, 4, 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14, 15, 13, 23, 36, 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16, 22,
-- 20, 37, 61, 56, 79, 73, 64, 43, 76, 56, 37, 26, 31, 25, 14, 35, 16, 60, 57, 97, 75, 114, 91, 54, 73, 55, 41, 48, 53, 23, 24, 58, 27, 50, 96, 76, 70, 93, 84, 77, 58, 79, 29, 74, 49, 41, 17, 47,
-- 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50, 59, 38, 36, 15, 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44, 43, 42, 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16, 53,
-- 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11, 35, 33, 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22, 53, 25, 23, 38, 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7, 34, 32,
-- 28, 39, 49, 75, 30, 52, 48, 40, 52, 28, 18, 17, 9, 5, 45, 21, 34, 64, 56, 50, 49, 45, 31, 19, 12, 15, 10, 7, 6, 3, 48, 23, 20, 39, 36, 35, 53, 21, 16, 23, 13, 10, 6, 1, 4, 2, 16, 15, 17, 27, 25,
-- 20, 29, 11, 17, 12, 16, 8, 1, 1, 0, 1};
--static const HUFFBITS t15HB[] = {7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63, 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36, 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56,
-- 33, 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29, 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27, 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38,
-- 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30, 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25, 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20,
-- 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15, 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9, 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11,
-- 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7, 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3, 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1, 71,
-- 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0};
--static const HUFFBITS t16HB[] = {1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195, 376, 17, 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119, 201, 107, 207, 9, 15, 13, 23, 38, 67, 58, 103, 90, 161, 72, 127, 117,
-- 110, 209, 206, 16, 45, 21, 39, 69, 64, 114, 99, 87, 158, 140, 252, 212, 199, 387, 365, 26, 75, 36, 68, 65, 115, 101, 179, 164, 155, 264, 246, 226, 395, 382, 362, 9, 66, 30, 59, 56, 102,
-- 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16, 111, 54, 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10, 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372,
-- 380, 889, 884, 8, 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383, 727, 713, 708, 7, 154, 76, 73, 141, 131, 256, 245, 426, 406, 394, 384, 735, 359, 710, 352, 11, 139, 129, 67, 125,
-- 247, 233, 229, 219, 393, 743, 737, 720, 885, 882, 439, 4, 243, 120, 118, 115, 227, 223, 396, 746, 742, 736, 721, 712, 706, 223, 436, 6, 202, 224, 222, 218, 216, 389, 386, 381, 364, 888,
-- 443, 707, 440, 437, 1728, 4, 747, 211, 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2, 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870, 434,
-- 0, 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7, 5, 3, 1, 3};
--static const HUFFBITS t24HB[] = {15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032, 88, 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297, 279, 42, 47, 22, 41, 74, 68, 128, 120, 221,
-- 207, 194, 182, 340, 315, 295, 541, 18, 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325, 311, 293, 271, 16, 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352, 323, 306, 285,
-- 540, 14, 263, 66, 129, 126, 119, 114, 214, 202, 192, 180, 341, 317, 301, 281, 262, 12, 249, 123, 121, 117, 113, 215, 206, 195, 185, 347, 330, 308, 291, 272, 520, 10, 435, 115, 111,
-- 109, 211, 203, 196, 187, 353, 332, 313, 298, 283, 531, 381, 17, 427, 212, 208, 205, 201, 193, 186, 177, 169, 320, 303, 286, 268, 514, 377, 16, 335, 199, 197, 191, 189, 181, 174, 333,
-- 321, 305, 289, 275, 521, 379, 371, 11, 668, 184, 183, 179, 175, 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10, 652, 346, 171, 168, 164, 318, 309, 299, 287, 276, 263, 513, 375,
-- 368, 362, 6, 648, 322, 316, 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4, 620, 300, 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2, 1033, 280, 278,
-- 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0, 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1, 3};
--static const HUFFBITS t32HB[] = {1, 5, 4, 5, 6, 5, 4, 4, 7, 3, 6, 0, 7, 2, 3, 1};
--static const HUFFBITS t33HB[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
-+static const HUFFBITS t1HB[] = {1, 1, 1, 0};
-+static const HUFFBITS t2HB[] = {1, 2, 1, 3, 1, 1, 3, 2, 0};
-+static const HUFFBITS t3HB[] = {3, 2, 1, 1, 1, 1, 3, 2, 0};
-+static const HUFFBITS t5HB[] = {1, 2, 6, 5, 3, 1, 4, 4, 7, 5, 7, 1, 6, 1, 1, 0};
-+static const HUFFBITS t6HB[] = {7, 3, 5, 1, 6, 2, 3, 2, 5, 4, 4, 1, 3, 3, 2, 0};
-+static const HUFFBITS t7HB[] = {1, 2, 10, 19, 16, 10, 3, 3, 7, 10, 5, 3,
-+ 11, 4, 13, 17, 8, 4, 12, 11, 18, 15, 11, 2,
-+ 7, 6, 9, 14, 3, 1, 6, 4, 5, 3, 2, 0};
-+static const HUFFBITS t8HB[] = {3, 4, 6, 18, 12, 5, 5, 1, 2, 16, 9, 3,
-+ 7, 3, 5, 14, 7, 3, 19, 17, 15, 13, 10, 4,
-+ 13, 5, 8, 11, 5, 1, 12, 4, 4, 1, 1, 0};
-+static const HUFFBITS t9HB[] = {7, 5, 9, 14, 15, 7, 6, 4, 5, 5, 6, 7,
-+ 7, 6, 8, 8, 8, 5, 15, 6, 9, 10, 5, 1,
-+ 11, 7, 9, 6, 4, 1, 14, 4, 6, 2, 6, 0};
-+static const HUFFBITS t10HB[] = {
-+ 1, 2, 10, 23, 35, 30, 12, 17, 3, 3, 8, 12, 18, 21, 12, 7,
-+ 11, 9, 15, 21, 32, 40, 19, 6, 14, 13, 22, 34, 46, 23, 18, 7,
-+ 20, 19, 33, 47, 27, 22, 9, 3, 31, 22, 41, 26, 21, 20, 5, 3,
-+ 14, 13, 10, 11, 16, 6, 5, 1, 9, 8, 7, 8, 4, 4, 2, 0};
-+static const HUFFBITS t11HB[] = {
-+ 3, 4, 10, 24, 34, 33, 21, 15, 5, 3, 4, 10, 32, 17, 11, 10,
-+ 11, 7, 13, 18, 30, 31, 20, 5, 25, 11, 19, 59, 27, 18, 12, 5,
-+ 35, 33, 31, 58, 30, 16, 7, 5, 28, 26, 32, 19, 17, 15, 8, 14,
-+ 14, 12, 9, 13, 14, 9, 4, 1, 11, 4, 6, 6, 6, 3, 2, 0};
-+static const HUFFBITS t12HB[] = {
-+ 9, 6, 16, 33, 41, 39, 38, 26, 7, 5, 6, 9, 23, 16, 26, 11,
-+ 17, 7, 11, 14, 21, 30, 10, 7, 17, 10, 15, 12, 18, 28, 14, 5,
-+ 32, 13, 22, 19, 18, 16, 9, 5, 40, 17, 31, 29, 17, 13, 4, 2,
-+ 27, 12, 11, 15, 10, 7, 4, 1, 27, 12, 8, 12, 6, 3, 1, 0};
-+static const HUFFBITS t13HB[] = {
-+ 1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19, 3, 4,
-+ 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14, 15, 13, 23, 36,
-+ 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16, 22, 20, 37, 61, 56, 79,
-+ 73, 64, 43, 76, 56, 37, 26, 31, 25, 14, 35, 16, 60, 57, 97, 75, 114, 91,
-+ 54, 73, 55, 41, 48, 53, 23, 24, 58, 27, 50, 96, 76, 70, 93, 84, 77, 58,
-+ 79, 29, 74, 49, 41, 17, 47, 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50,
-+ 59, 38, 36, 15, 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44,
-+ 43, 42, 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16,
-+ 53, 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11, 35, 33,
-+ 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22, 53, 25, 23, 38,
-+ 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7, 34, 32, 28, 39, 49, 75,
-+ 30, 52, 48, 40, 52, 28, 18, 17, 9, 5, 45, 21, 34, 64, 56, 50, 49, 45,
-+ 31, 19, 12, 15, 10, 7, 6, 3, 48, 23, 20, 39, 36, 35, 53, 21, 16, 23,
-+ 13, 10, 6, 1, 4, 2, 16, 15, 17, 27, 25, 20, 29, 11, 17, 12, 16, 8,
-+ 1, 1, 0, 1};
-+static const HUFFBITS t15HB[] = {
-+ 7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63,
-+ 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36,
-+ 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56, 33,
-+ 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29,
-+ 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27,
-+ 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38,
-+ 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30,
-+ 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25,
-+ 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20,
-+ 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15,
-+ 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9,
-+ 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11,
-+ 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7,
-+ 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3,
-+ 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1,
-+ 71, 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0};
-+static const HUFFBITS t16HB[] = {
-+ 1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195,
-+ 376, 17, 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119,
-+ 201, 107, 207, 9, 15, 13, 23, 38, 67, 58, 103, 90, 161, 72,
-+ 127, 117, 110, 209, 206, 16, 45, 21, 39, 69, 64, 114, 99, 87,
-+ 158, 140, 252, 212, 199, 387, 365, 26, 75, 36, 68, 65, 115, 101,
-+ 179, 164, 155, 264, 246, 226, 395, 382, 362, 9, 66, 30, 59, 56,
-+ 102, 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16, 111, 54,
-+ 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10,
-+ 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372, 380, 889,
-+ 884, 8, 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383,
-+ 727, 713, 708, 7, 154, 76, 73, 141, 131, 256, 245, 426, 406, 394,
-+ 384, 735, 359, 710, 352, 11, 139, 129, 67, 125, 247, 233, 229, 219,
-+ 393, 743, 737, 720, 885, 882, 439, 4, 243, 120, 118, 115, 227, 223,
-+ 396, 746, 742, 736, 721, 712, 706, 223, 436, 6, 202, 224, 222, 218,
-+ 216, 389, 386, 381, 364, 888, 443, 707, 440, 437, 1728, 4, 747, 211,
-+ 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2,
-+ 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870,
-+ 434, 0, 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7,
-+ 5, 3, 1, 3};
-+static const HUFFBITS t24HB[] = {
-+ 15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032,
-+ 88, 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297,
-+ 279, 42, 47, 22, 41, 74, 68, 128, 120, 221, 207, 194, 182, 340, 315,
-+ 295, 541, 18, 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325,
-+ 311, 293, 271, 16, 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352,
-+ 323, 306, 285, 540, 14, 263, 66, 129, 126, 119, 114, 214, 202, 192, 180,
-+ 341, 317, 301, 281, 262, 12, 249, 123, 121, 117, 113, 215, 206, 195, 185,
-+ 347, 330, 308, 291, 272, 520, 10, 435, 115, 111, 109, 211, 203, 196, 187,
-+ 353, 332, 313, 298, 283, 531, 381, 17, 427, 212, 208, 205, 201, 193, 186,
-+ 177, 169, 320, 303, 286, 268, 514, 377, 16, 335, 199, 197, 191, 189, 181,
-+ 174, 333, 321, 305, 289, 275, 521, 379, 371, 11, 668, 184, 183, 179, 175,
-+ 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10, 652, 346, 171, 168,
-+ 164, 318, 309, 299, 287, 276, 263, 513, 375, 368, 362, 6, 648, 322, 316,
-+ 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4, 620, 300,
-+ 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2, 1033,
-+ 280, 278, 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0,
-+ 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1,
-+ 3};
-+static const HUFFBITS t32HB[] = {1, 5, 4, 5, 6, 5, 4, 4,
-+ 7, 3, 6, 0, 7, 2, 3, 1};
-+static const HUFFBITS t33HB[] = {15, 14, 13, 12, 11, 10, 9, 8,
-+ 7, 6, 5, 4, 3, 2, 1, 0};
-
--static const unsigned char t1l[] = {1, 3, 2, 3};
--static const unsigned char t2l[] = {1, 3, 6, 3, 3, 5, 5, 5, 6};
--static const unsigned char t3l[] = {2, 2, 6, 3, 2, 5, 5, 5, 6};
--static const unsigned char t5l[] = {1, 3, 6, 7, 3, 3, 6, 7, 6, 6, 7, 8, 7, 6, 7, 8};
--static const unsigned char t6l[] = {3, 3, 5, 7, 3, 2, 4, 5, 4, 4, 5, 6, 6, 5, 6, 7};
--static const unsigned char t7l[] = {1, 3, 6, 8, 8, 9, 3, 4, 6, 7, 7, 8, 6, 5, 7, 8, 8, 9, 7, 7, 8, 9, 9, 9, 7, 7, 8, 9, 9, 10, 8, 8, 9, 10, 10, 10};
--static const unsigned char t8l[] = {2, 3, 6, 8, 8, 9, 3, 2, 4, 8, 8, 8, 6, 4, 6, 8, 8, 9, 8, 8, 8, 9, 9, 10, 8, 7, 8, 9, 10, 10, 9, 8, 9, 9, 11, 11};
--static const unsigned char t9l[] = {3, 3, 5, 6, 8, 9, 3, 3, 4, 5, 6, 8, 4, 4, 5, 6, 7, 8, 6, 5, 6, 7, 7, 8, 7, 6, 7, 7, 8, 9, 8, 7, 8, 8, 9, 9};
--static const unsigned char t10l[] = {1, 3, 6, 8, 9, 9, 9, 10, 3, 4, 6, 7, 8, 9, 8, 8, 6, 6, 7, 8, 9, 10, 9, 9, 7, 7, 8, 9, 10, 10, 9, 10, 8, 8, 9, 10, 10, 10, 10, 10, 9, 9, 10, 10, 11, 11, 10, 11, 8, 8, 9, 10, 10, 10, 11, 11, 9, 8, 9, 10, 10, 11, 11, 11};
--static const unsigned char t11l[] = {2, 3, 5, 7, 8, 9, 8, 9, 3, 3, 4, 6, 8, 8, 7, 8, 5, 5, 6, 7, 8, 9, 8, 8, 7, 6, 7, 9, 8, 10, 8, 9, 8, 8, 8, 9, 9, 10, 9, 10, 8, 8, 9, 10, 10, 11, 10, 11, 8, 7, 7, 8, 9, 10, 10, 10, 8, 7, 8, 9, 10, 10, 10, 10};
--static const unsigned char t12l[] = {4, 3, 5, 7, 8, 9, 9, 9, 3, 3, 4, 5, 7, 7, 8, 8, 5, 4, 5, 6, 7, 8, 7, 8, 6, 5, 6, 6, 7, 8, 8, 8, 7, 6, 7, 7, 8, 8, 8, 9, 8, 7, 8, 8, 8, 9, 8, 9, 8, 7, 7, 8, 8, 9, 9, 10, 9, 8, 8, 9, 9, 9, 9, 10};
--static const unsigned char t13l[] = {1, 4, 6, 7, 8, 9, 9, 10, 9, 10, 11, 11, 12, 12, 13, 13, 3, 4, 6, 7, 8, 8, 9, 9, 9, 9, 10, 10, 11, 12, 12, 12, 6, 6, 7, 8, 9, 9, 10, 10, 9, 10, 10, 11, 11, 12, 13, 13, 7, 7, 8, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 13, 13,
--8, 7, 9, 9, 10, 10, 11, 11, 10, 11, 11, 12, 12, 13, 13, 14, 9, 8, 9, 10, 10, 10, 11, 11, 11, 11, 12, 11, 13, 13, 14, 14, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 10, 9, 10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 16, 16, 9, 8, 9, 10,
--10, 11, 11, 12, 12, 12, 12, 13, 13, 14, 15, 15, 10, 9, 10, 10, 11, 11, 11, 13, 12, 13, 13, 14, 14, 14, 16, 15, 10, 10, 10, 11, 11, 12, 12, 13, 12, 13, 14, 13, 14, 15, 16, 17, 11, 10, 10, 11, 12, 12, 12, 12, 13, 13, 13, 14, 15, 15, 15, 16, 11, 11, 11, 12, 12,
--13, 12, 13, 14, 14, 15, 15, 15, 16, 16, 16, 12, 11, 12, 13, 13, 13, 14, 14, 14, 14, 14, 15, 16, 15, 16, 16, 13, 12, 12, 13, 13, 13, 15, 14, 14, 17, 15, 15, 15, 17, 16, 16, 12, 12, 13, 14, 14, 14, 15, 14, 15, 15, 16, 16, 19, 18, 19, 16};
--static const unsigned char t15l[] = {3, 4, 5, 7, 7, 8, 9, 9, 9, 10, 10, 11, 11, 11, 12, 13, 4, 3, 5, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 5, 5, 5, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 11, 11, 11, 6, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 7, 6, 7,
-- 7, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 11, 8, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 11, 12, 9, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 9, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 12, 9, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11,
-- 12, 12, 12, 9, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 10, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 13, 12, 10, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 11, 10, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 13, 13,
--11, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 12, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 12, 13, 12, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13};
--static const unsigned char t16l[] = {1, 4, 6, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 9, 3, 4, 6, 7, 8, 9, 9, 9, 10, 10, 10, 11, 12, 11, 12, 8, 6, 6, 7, 8, 9, 9, 10, 10, 11, 10, 11, 11, 11, 12, 12, 9, 8, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13,
-- 10, 9, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 9, 9, 8, 9, 9, 10, 11, 11, 12, 11, 12, 12, 13, 13, 13, 14, 10, 10, 9, 9, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 10, 10, 9, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 15, 15, 10, 10, 10,
-- 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 10, 11, 10, 10, 11, 11, 12, 12, 13, 13, 13, 13, 14, 13, 14, 13, 11, 11, 11, 10, 11, 12, 12, 12, 12, 13, 14, 14, 14, 15, 15, 14, 10, 12, 11, 11, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 13, 14, 11, 12, 12,
-- 12, 12, 12, 13, 13, 13, 13, 15, 14, 14, 14, 14, 16, 11, 14, 12, 12, 12, 13, 13, 14, 14, 14, 16, 15, 15, 15, 17, 15, 11, 13, 13, 11, 12, 14, 14, 13, 14, 14, 15, 16, 15, 17, 15, 14, 11, 9, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 8};
--static const unsigned char t24l[] = {4, 4, 6, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 9, 4, 4, 5, 6, 7, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10, 8, 6, 5, 6, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 7, 7, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 7, 8, 7, 7, 8,
-- 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 7, 9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 7, 9, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 7, 10, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 8, 10, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11,
--8, 10, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 8, 11, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 8, 11, 10, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 8, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 8, 11, 10, 10,
-- 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 8, 12, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 4};
--static const unsigned char t32l[] = {1, 4, 4, 5, 4, 6, 5, 6, 4, 5, 5, 6, 5, 6, 6, 6};
--static const unsigned char t33l[] = {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4};
-+static const unsigned char t1l[] = {1, 3, 2, 3};
-+static const unsigned char t2l[] = {1, 3, 6, 3, 3, 5, 5, 5, 6};
-+static const unsigned char t3l[] = {2, 2, 6, 3, 2, 5, 5, 5, 6};
-+static const unsigned char t5l[] = {1, 3, 6, 7, 3, 3, 6, 7,
-+ 6, 6, 7, 8, 7, 6, 7, 8};
-+static const unsigned char t6l[] = {3, 3, 5, 7, 3, 2, 4, 5,
-+ 4, 4, 5, 6, 6, 5, 6, 7};
-+static const unsigned char t7l[] = {1, 3, 6, 8, 8, 9, 3, 4, 6, 7, 7, 8,
-+ 6, 5, 7, 8, 8, 9, 7, 7, 8, 9, 9, 9,
-+ 7, 7, 8, 9, 9, 10, 8, 8, 9, 10, 10, 10};
-+static const unsigned char t8l[] = {2, 3, 6, 8, 8, 9, 3, 2, 4, 8, 8, 8,
-+ 6, 4, 6, 8, 8, 9, 8, 8, 8, 9, 9, 10,
-+ 8, 7, 8, 9, 10, 10, 9, 8, 9, 9, 11, 11};
-+static const unsigned char t9l[] = {3, 3, 5, 6, 8, 9, 3, 3, 4, 5, 6, 8,
-+ 4, 4, 5, 6, 7, 8, 6, 5, 6, 7, 7, 8,
-+ 7, 6, 7, 7, 8, 9, 8, 7, 8, 8, 9, 9};
-+static const unsigned char t10l[] = {
-+ 1, 3, 6, 8, 9, 9, 9, 10, 3, 4, 6, 7, 8, 9, 8, 8,
-+ 6, 6, 7, 8, 9, 10, 9, 9, 7, 7, 8, 9, 10, 10, 9, 10,
-+ 8, 8, 9, 10, 10, 10, 10, 10, 9, 9, 10, 10, 11, 11, 10, 11,
-+ 8, 8, 9, 10, 10, 10, 11, 11, 9, 8, 9, 10, 10, 11, 11, 11};
-+static const unsigned char t11l[] = {
-+ 2, 3, 5, 7, 8, 9, 8, 9, 3, 3, 4, 6, 8, 8, 7, 8,
-+ 5, 5, 6, 7, 8, 9, 8, 8, 7, 6, 7, 9, 8, 10, 8, 9,
-+ 8, 8, 8, 9, 9, 10, 9, 10, 8, 8, 9, 10, 10, 11, 10, 11,
-+ 8, 7, 7, 8, 9, 10, 10, 10, 8, 7, 8, 9, 10, 10, 10, 10};
-+static const unsigned char t12l[] = {
-+ 4, 3, 5, 7, 8, 9, 9, 9, 3, 3, 4, 5, 7, 7, 8, 8, 5, 4, 5, 6, 7, 8,
-+ 7, 8, 6, 5, 6, 6, 7, 8, 8, 8, 7, 6, 7, 7, 8, 8, 8, 9, 8, 7, 8, 8,
-+ 8, 9, 8, 9, 8, 7, 7, 8, 8, 9, 9, 10, 9, 8, 8, 9, 9, 9, 9, 10};
-+static const unsigned char t13l[] = {
-+ 1, 4, 6, 7, 8, 9, 9, 10, 9, 10, 11, 11, 12, 12, 13, 13, 3, 4, 6,
-+ 7, 8, 8, 9, 9, 9, 9, 10, 10, 11, 12, 12, 12, 6, 6, 7, 8, 9, 9,
-+ 10, 10, 9, 10, 10, 11, 11, 12, 13, 13, 7, 7, 8, 9, 9, 10, 10, 10, 10,
-+ 11, 11, 11, 11, 12, 13, 13, 8, 7, 9, 9, 10, 10, 11, 11, 10, 11, 11, 12,
-+ 12, 13, 13, 14, 9, 8, 9, 10, 10, 10, 11, 11, 11, 11, 12, 11, 13, 13, 14,
-+ 14, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 10, 9,
-+ 10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 16, 16, 9, 8, 9, 10, 10,
-+ 11, 11, 12, 12, 12, 12, 13, 13, 14, 15, 15, 10, 9, 10, 10, 11, 11, 11, 13,
-+ 12, 13, 13, 14, 14, 14, 16, 15, 10, 10, 10, 11, 11, 12, 12, 13, 12, 13, 14,
-+ 13, 14, 15, 16, 17, 11, 10, 10, 11, 12, 12, 12, 12, 13, 13, 13, 14, 15, 15,
-+ 15, 16, 11, 11, 11, 12, 12, 13, 12, 13, 14, 14, 15, 15, 15, 16, 16, 16, 12,
-+ 11, 12, 13, 13, 13, 14, 14, 14, 14, 14, 15, 16, 15, 16, 16, 13, 12, 12, 13,
-+ 13, 13, 15, 14, 14, 17, 15, 15, 15, 17, 16, 16, 12, 12, 13, 14, 14, 14, 15,
-+ 14, 15, 15, 16, 16, 19, 18, 19, 16};
-+static const unsigned char t15l[] = {
-+ 3, 4, 5, 7, 7, 8, 9, 9, 9, 10, 10, 11, 11, 11, 12, 13, 4, 3, 5,
-+ 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 5, 5, 5, 6, 7, 7,
-+ 8, 8, 8, 9, 9, 10, 10, 11, 11, 11, 6, 6, 6, 7, 7, 8, 8, 9, 9,
-+ 9, 10, 10, 10, 11, 11, 11, 7, 6, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10,
-+ 10, 11, 11, 11, 8, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 11,
-+ 12, 9, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 9, 8,
-+ 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 12, 9, 8, 8, 9, 9,
-+ 9, 9, 10, 10, 10, 10, 11, 11, 12, 12, 12, 9, 8, 9, 9, 9, 9, 10, 10,
-+ 10, 11, 11, 11, 11, 12, 12, 12, 10, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11,
-+ 11, 11, 12, 13, 12, 10, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
-+ 12, 13, 11, 10, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 13, 13, 11,
-+ 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 12, 11, 11, 11,
-+ 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 12, 13, 12, 11, 11, 11, 11, 11, 11,
-+ 12, 12, 12, 12, 12, 13, 13, 13, 13};
-+static const unsigned char t16l[] = {
-+ 1, 4, 6, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 9, 3, 4, 6,
-+ 7, 8, 9, 9, 9, 10, 10, 10, 11, 12, 11, 12, 8, 6, 6, 7, 8, 9, 9,
-+ 10, 10, 11, 10, 11, 11, 11, 12, 12, 9, 8, 7, 8, 9, 9, 10, 10, 10, 11,
-+ 11, 12, 12, 12, 13, 13, 10, 9, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12,
-+ 13, 13, 13, 9, 9, 8, 9, 9, 10, 11, 11, 12, 11, 12, 12, 13, 13, 13, 14,
-+ 10, 10, 9, 9, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 10, 10, 9,
-+ 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 15, 15, 10, 10, 10, 10, 11, 11,
-+ 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 10, 11, 10, 10, 11, 11, 12, 12, 13,
-+ 13, 13, 13, 14, 13, 14, 13, 11, 11, 11, 10, 11, 12, 12, 12, 12, 13, 14, 14,
-+ 14, 15, 15, 14, 10, 12, 11, 11, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 13,
-+ 14, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 15, 14, 14, 14, 14, 16, 11, 14,
-+ 12, 12, 12, 13, 13, 14, 14, 14, 16, 15, 15, 15, 17, 15, 11, 13, 13, 11, 12,
-+ 14, 14, 13, 14, 14, 15, 16, 15, 17, 15, 14, 11, 9, 8, 8, 9, 9, 10, 10,
-+ 10, 11, 11, 11, 11, 11, 11, 11, 8};
-+static const unsigned char t24l[] = {
-+ 4, 4, 6, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 9, 4, 4, 5,
-+ 6, 7, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10, 8, 6, 5, 6, 7, 7, 8,
-+ 8, 9, 9, 9, 9, 10, 10, 10, 11, 7, 7, 6, 7, 7, 8, 8, 8, 9, 9,
-+ 9, 9, 10, 10, 10, 10, 7, 8, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10,
-+ 10, 10, 11, 7, 9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10,
-+ 7, 9, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 7, 10, 8,
-+ 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 8, 10, 9, 9, 9, 9,
-+ 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 8, 10, 9, 9, 9, 9, 9, 9, 10,
-+ 10, 10, 10, 10, 11, 11, 11, 8, 11, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
-+ 11, 11, 11, 11, 8, 11, 10, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11,
-+ 11, 8, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 8, 11,
-+ 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 8, 12, 10, 10, 10,
-+ 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 8, 8, 7, 7, 7, 7, 7, 7,
-+ 7, 7, 7, 7, 8, 8, 8, 8, 4};
-+static const unsigned char t32l[] = {1, 4, 4, 5, 4, 6, 5, 6,
-+ 4, 5, 5, 6, 5, 6, 6, 6};
-+static const unsigned char t33l[] = {4, 4, 4, 4, 4, 4, 4, 4,
-+ 4, 4, 4, 4, 4, 4, 4, 4};
-
- #define NOREF -1
--const struct huffcodetab shine_huffman_table[HTN] =
--{
--{ 0, 0, 0, 0,NULL,NULL},
--{ 2, 2, 0, 0,t1HB, t1l},
--{ 3, 3, 0, 0,t2HB, t2l},
--{ 3, 3, 0, 0,t3HB, t3l},
--{ 0, 0, 0, 0,NULL,NULL},/* Apparently not used*/
--{ 4, 4, 0, 0,t5HB, t5l},
--{ 4, 4, 0, 0,t6HB, t6l},
--{ 6, 6, 0, 0,t7HB, t7l},
--{ 6, 6, 0, 0,t8HB, t8l},
--{ 6, 6, 0, 0,t9HB, t9l},
--{ 8, 8, 0, 0,t10HB, t10l},
--{ 8, 8, 0, 0,t11HB, t11l},
--{ 8, 8, 0, 0,t12HB, t12l},
--{16,16, 0, 0,t13HB, t13l},
--{ 0, 0, 0, 0,NULL,NULL},/* Apparently not used*/
--{16,16, 0, 0,t15HB, t15l},
--{16,16, 1, 1,t16HB, t16l},
--{16,16, 2, 3,t16HB, t16l},
--{16,16, 3, 7,t16HB, t16l},
--{16,16, 4, 15,t16HB, t16l},
--{16,16, 6, 63,t16HB, t16l},
--{16,16, 8, 255,t16HB, t16l},
--{16,16,10,1023,t16HB, t16l},
--{16,16,13,8191,t16HB, t16l},
--{16,16, 4, 15,t24HB, t24l},
--{16,16, 5, 31,t24HB, t24l},
--{16,16, 6, 63,t24HB, t24l},
--{16,16, 7, 127,t24HB, t24l},
--{16,16, 8, 255,t24HB, t24l},
--{16,16, 9, 511,t24HB, t24l},
--{16,16,11,2047,t24HB, t24l},
--{16,16,13,8191,t24HB, t24l},
--{ 1,16, 0, 0,t32HB, t32l},
--{ 1,16, 0, 0,t33HB, t33l},
-+const struct huffcodetab shine_huffman_table[HTN] = {
-+ {0, 0, 0, 0, NULL, NULL},
-+ {2, 2, 0, 0, t1HB, t1l},
-+ {3, 3, 0, 0, t2HB, t2l},
-+ {3, 3, 0, 0, t3HB, t3l},
-+ {0, 0, 0, 0, NULL, NULL}, /* Apparently not used*/
-+ {4, 4, 0, 0, t5HB, t5l},
-+ {4, 4, 0, 0, t6HB, t6l},
-+ {6, 6, 0, 0, t7HB, t7l},
-+ {6, 6, 0, 0, t8HB, t8l},
-+ {6, 6, 0, 0, t9HB, t9l},
-+ {8, 8, 0, 0, t10HB, t10l},
-+ {8, 8, 0, 0, t11HB, t11l},
-+ {8, 8, 0, 0, t12HB, t12l},
-+ {16, 16, 0, 0, t13HB, t13l},
-+ {0, 0, 0, 0, NULL, NULL}, /* Apparently not used*/
-+ {16, 16, 0, 0, t15HB, t15l},
-+ {16, 16, 1, 1, t16HB, t16l},
-+ {16, 16, 2, 3, t16HB, t16l},
-+ {16, 16, 3, 7, t16HB, t16l},
-+ {16, 16, 4, 15, t16HB, t16l},
-+ {16, 16, 6, 63, t16HB, t16l},
-+ {16, 16, 8, 255, t16HB, t16l},
-+ {16, 16, 10, 1023, t16HB, t16l},
-+ {16, 16, 13, 8191, t16HB, t16l},
-+ {16, 16, 4, 15, t24HB, t24l},
-+ {16, 16, 5, 31, t24HB, t24l},
-+ {16, 16, 6, 63, t24HB, t24l},
-+ {16, 16, 7, 127, t24HB, t24l},
-+ {16, 16, 8, 255, t24HB, t24l},
-+ {16, 16, 9, 511, t24HB, t24l},
-+ {16, 16, 11, 2047, t24HB, t24l},
-+ {16, 16, 13, 8191, t24HB, t24l},
-+ {1, 16, 0, 0, t32HB, t32l},
-+ {1, 16, 0, 0, t33HB, t33l},
- };
--
--
-diff --git a/src/lib/huffman.h b/src/lib/huffman.h
-index d2d5b51..6a341c7 100644
---- a/src/lib/huffman.h
-+++ b/src/lib/huffman.h
-@@ -1,6 +1,8 @@
-+#include <stdint.h>
-+
- #define HUFFBITS uint16_t
--#define HTN 34
--#define MXOFF 250
-+#define HTN 34
-+#define MXOFF 250
-
- struct huffcodetab {
- unsigned int xlen; /*max. x-index+ */
-@@ -11,9 +13,8 @@ struct huffcodetab {
- const unsigned char *hlen; /*pointer to array[xlen][ylen] */
- };
-
--extern const struct huffcodetab shine_huffman_table[HTN];/* global memory block */
-- /* array of all huffcodtable headers */
-- /* 0..31 Huffman code table 0..31 */
-- /* 32,33 count1-tables */
--
--
-+extern const struct huffcodetab
-+ shine_huffman_table[HTN]; /* global memory block */
-+ /* array of all huffcodtable headers */
-+ /* 0..31 Huffman code table 0..31 */
-+ /* 32,33 count1-tables */
-diff --git a/src/lib/l3bitstream.c b/src/lib/l3bitstream.c
-index ba788e6..1b2849e 100644
---- a/src/lib/l3bitstream.c
-+++ b/src/lib/l3bitstream.c
-@@ -1,20 +1,22 @@
- /* l3bitstrea.c */
-
--#include "types.h"
--#include "l3mdct.h"
-+#include "l3bitstream.h" /* the public interface */
-+#include "bitstream.h"
-+#include "huffman.h"
- #include "l3loop.h"
-+#include "l3mdct.h"
- #include "layer3.h"
--#include "huffman.h"
--#include "bitstream.h"
- #include "tables.h"
--#include "l3bitstream.h" /* the public interface */
-+#include "types.h"
-
- static void shine_HuffmanCode(bitstream_t *bs, int table_select, int x, int y);
--static void shine_huffman_coder_count1(bitstream_t *bs, const struct huffcodetab *h, int v, int w, int x, int y);
-+static void shine_huffman_coder_count1(bitstream_t *bs,
-+ const struct huffcodetab *h, int v,
-+ int w, int x, int y);
-
--static void encodeSideInfo( shine_global_config *config );
--static void encodeMainData( shine_global_config *config );
--static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi);
-+static void encodeSideInfo(shine_global_config *config);
-+static void encodeMainData(shine_global_config *config);
-+static void Huffmancodebits(shine_global_config *config, int *ix, gr_info *gi);
-
- /*
- shine_format_bitstream()
-@@ -27,130 +29,121 @@ static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi);
- in the IS).
- */
-
--void
--shine_format_bitstream(shine_global_config *config)
--{
-+void shine_format_bitstream(shine_global_config *config) {
- int gr, ch, i;
-
-- for ( ch = 0; ch < config->wave.channels; ch++ )
-- for ( gr = 0; gr < config->mpeg.granules_per_frame; gr++ )
-- {
-- int *pi = &config->l3_enc[ch][gr][0];
-- int32_t *pr = &config->mdct_freq[ch][gr][0];
-- for ( i = 0; i < GRANULE_SIZE; i++ )
-- {
-- if ( (pr[i] < 0) && (pi[i] > 0) )
-- pi[i] *= -1;
-- }
-+ for (ch = 0; ch < config->wave.channels; ch++)
-+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) {
-+ int *pi = &config->l3_enc[ch][gr][0];
-+ int32_t *pr = &config->mdct_freq[ch][gr][0];
-+ for (i = 0; i < GRANULE_SIZE; i++) {
-+ if ((pr[i] < 0) && (pi[i] > 0))
-+ pi[i] *= -1;
- }
-+ }
-
-- encodeSideInfo( config );
-- encodeMainData( config );
-+ encodeSideInfo(config);
-+ encodeMainData(config);
- }
-
--static void encodeMainData(shine_global_config *config)
--{
-+static void encodeMainData(shine_global_config *config) {
- int gr, ch, sfb;
-- shine_side_info_t si = config->side_info;
--
-- for ( gr = 0; gr < config->mpeg.granules_per_frame; gr++ )
-- {
-- for ( ch = 0; ch < config->wave.channels; ch++ )
-- {
-- gr_info *gi = &(si.gr[gr].ch[ch].tt);
-- unsigned slen1 = shine_slen1_tab[ gi->scalefac_compress ];
-- unsigned slen2 = shine_slen2_tab[ gi->scalefac_compress ];
-- int *ix = &config->l3_enc[ch][gr][0];
--
-- if ( gr == 0 || si.scfsi[ch][0] == 0 )
-- for ( sfb = 0; sfb < 6; sfb++ )
-- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen1 );
-- if ( gr == 0 || si.scfsi[ch][1] == 0 )
-- for ( sfb = 6; sfb < 11; sfb++ )
-- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen1 );
-- if ( gr == 0 || si.scfsi[ch][2] == 0 )
-- for ( sfb = 11; sfb < 16; sfb++ )
-- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen2 );
-- if ( gr == 0 || si.scfsi[ch][3] == 0 )
-- for ( sfb = 16; sfb < 21; sfb++ )
-- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen2 );
--
-- Huffmancodebits( config, ix, gi );
-- }
-+ shine_side_info_t si = config->side_info;
-+
-+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) {
-+ for (ch = 0; ch < config->wave.channels; ch++) {
-+ gr_info *gi = &(si.gr[gr].ch[ch].tt);
-+ unsigned slen1 = shine_slen1_tab[gi->scalefac_compress];
-+ unsigned slen2 = shine_slen2_tab[gi->scalefac_compress];
-+ int *ix = &config->l3_enc[ch][gr][0];
-+
-+ if (gr == 0 || si.scfsi[ch][0] == 0)
-+ for (sfb = 0; sfb < 6; sfb++)
-+ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen1);
-+ if (gr == 0 || si.scfsi[ch][1] == 0)
-+ for (sfb = 6; sfb < 11; sfb++)
-+ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen1);
-+ if (gr == 0 || si.scfsi[ch][2] == 0)
-+ for (sfb = 11; sfb < 16; sfb++)
-+ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen2);
-+ if (gr == 0 || si.scfsi[ch][3] == 0)
-+ for (sfb = 16; sfb < 21; sfb++)
-+ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen2);
-+
-+ Huffmancodebits(config, ix, gi);
- }
-+ }
- }
-
--static void encodeSideInfo( shine_global_config *config )
--{
-+static void encodeSideInfo(shine_global_config *config) {
- int gr, ch, scfsi_band, region;
-- shine_side_info_t si = config->side_info;
--
-- shine_putbits( &config->bs, 0x7ff, 11 );
-- shine_putbits( &config->bs, config->mpeg.version, 2 );
-- shine_putbits( &config->bs, config->mpeg.layer, 2 );
-- shine_putbits( &config->bs, !config->mpeg.crc, 1 );
-- shine_putbits( &config->bs, config->mpeg.bitrate_index, 4 );
-- shine_putbits( &config->bs, config->mpeg.samplerate_index % 3, 2 );
-- shine_putbits( &config->bs, config->mpeg.padding, 1 );
-- shine_putbits( &config->bs, config->mpeg.ext, 1 );
-- shine_putbits( &config->bs, config->mpeg.mode, 2 );
-- shine_putbits( &config->bs, config->mpeg.mode_ext, 2 );
-- shine_putbits( &config->bs, config->mpeg.copyright, 1 );
-- shine_putbits( &config->bs, config->mpeg.original, 1 );
-- shine_putbits( &config->bs, config->mpeg.emph, 2 );
--
-- if ( config->mpeg.version == MPEG_I ) {
-- shine_putbits( &config->bs, 0, 9 );
-- if ( config->wave.channels == 2 )
-- shine_putbits( &config->bs, si.private_bits, 3 );
-+ shine_side_info_t si = config->side_info;
-+
-+ shine_putbits(&config->bs, 0x7ff, 11);
-+ shine_putbits(&config->bs, config->mpeg.version, 2);
-+ shine_putbits(&config->bs, config->mpeg.layer, 2);
-+ shine_putbits(&config->bs, !config->mpeg.crc, 1);
-+ shine_putbits(&config->bs, config->mpeg.bitrate_index, 4);
-+ shine_putbits(&config->bs, config->mpeg.samplerate_index % 3, 2);
-+ shine_putbits(&config->bs, config->mpeg.padding, 1);
-+ shine_putbits(&config->bs, config->mpeg.ext, 1);
-+ shine_putbits(&config->bs, config->mpeg.mode, 2);
-+ shine_putbits(&config->bs, config->mpeg.mode_ext, 2);
-+ shine_putbits(&config->bs, config->mpeg.copyright, 1);
-+ shine_putbits(&config->bs, config->mpeg.original, 1);
-+ shine_putbits(&config->bs, config->mpeg.emph, 2);
-+
-+ if (config->mpeg.version == MPEG_I) {
-+ shine_putbits(&config->bs, 0, 9);
-+ if (config->wave.channels == 2)
-+ shine_putbits(&config->bs, si.private_bits, 3);
- else
-- shine_putbits( &config->bs, si.private_bits, 5 );
-+ shine_putbits(&config->bs, si.private_bits, 5);
- } else {
-- shine_putbits( &config->bs, 0, 8 );
-- if ( config->wave.channels == 2 )
-- shine_putbits( &config->bs, si.private_bits, 2 );
-+ shine_putbits(&config->bs, 0, 8);
-+ if (config->wave.channels == 2)
-+ shine_putbits(&config->bs, si.private_bits, 2);
- else
-- shine_putbits( &config->bs, si.private_bits, 1 );
-+ shine_putbits(&config->bs, si.private_bits, 1);
- }
-
-- if ( config->mpeg.version == MPEG_I )
-- for ( ch = 0; ch < config->wave.channels; ch++ ) {
-- for ( scfsi_band = 0; scfsi_band < 4; scfsi_band++ )
-- shine_putbits( &config->bs, si.scfsi[ch][scfsi_band], 1 );
-+ if (config->mpeg.version == MPEG_I)
-+ for (ch = 0; ch < config->wave.channels; ch++) {
-+ for (scfsi_band = 0; scfsi_band < 4; scfsi_band++)
-+ shine_putbits(&config->bs, si.scfsi[ch][scfsi_band], 1);
- }
-
-- for ( gr = 0; gr < config->mpeg.granules_per_frame; gr++ )
-- for ( ch = 0; ch < config->wave.channels ; ch++ )
-- {
-- gr_info *gi = &(si.gr[gr].ch[ch].tt);
--
-- shine_putbits( &config->bs, gi->part2_3_length, 12 );
-- shine_putbits( &config->bs, gi->big_values, 9 );
-- shine_putbits( &config->bs, gi->global_gain, 8 );
-- if ( config->mpeg.version == MPEG_I )
-- shine_putbits( &config->bs, gi->scalefac_compress, 4 );
-- else
-- shine_putbits( &config->bs, gi->scalefac_compress, 9 );
-- shine_putbits( &config->bs, 0, 1 );
--
-- for ( region = 0; region < 3; region++ )
-- shine_putbits( &config->bs, gi->table_select[region], 5 );
--
-- shine_putbits( &config->bs, gi->region0_count, 4 );
-- shine_putbits( &config->bs, gi->region1_count, 3 );
--
-- if ( config->mpeg.version == MPEG_I )
-- shine_putbits( &config->bs, gi->preflag, 1 );
-- shine_putbits( &config->bs, gi->scalefac_scale, 1 );
-- shine_putbits( &config->bs, gi->count1table_select, 1 );
-- }
-+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++)
-+ for (ch = 0; ch < config->wave.channels; ch++) {
-+ gr_info *gi = &(si.gr[gr].ch[ch].tt);
-+
-+ shine_putbits(&config->bs, gi->part2_3_length, 12);
-+ shine_putbits(&config->bs, gi->big_values, 9);
-+ shine_putbits(&config->bs, gi->global_gain, 8);
-+ if (config->mpeg.version == MPEG_I)
-+ shine_putbits(&config->bs, gi->scalefac_compress, 4);
-+ else
-+ shine_putbits(&config->bs, gi->scalefac_compress, 9);
-+ shine_putbits(&config->bs, 0, 1);
-+
-+ for (region = 0; region < 3; region++)
-+ shine_putbits(&config->bs, gi->table_select[region], 5);
-+
-+ shine_putbits(&config->bs, gi->region0_count, 4);
-+ shine_putbits(&config->bs, gi->region1_count, 3);
-+
-+ if (config->mpeg.version == MPEG_I)
-+ shine_putbits(&config->bs, gi->preflag, 1);
-+ shine_putbits(&config->bs, gi->scalefac_scale, 1);
-+ shine_putbits(&config->bs, gi->count1table_select, 1);
-+ }
- }
-
- /* Note the discussion of huffmancodebits() on pages 28 and 29 of the IS, as
- well as the definitions of the side information on pages 26 and 27. */
--static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi )
--{
-- const int *scalefac = &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
-+static void Huffmancodebits(shine_global_config *config, int *ix, gr_info *gi) {
-+ const int *scalefac =
-+ &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
- unsigned scalefac_index;
- int region1Start, region2Start;
- int i, bigvalues, count1End;
-@@ -164,168 +157,153 @@ static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi )
- bigvalues = gi->big_values << 1;
-
- scalefac_index = gi->region0_count + 1;
-- region1Start = scalefac[ scalefac_index ];
-+ region1Start = scalefac[scalefac_index];
- scalefac_index += gi->region1_count + 1;
-- region2Start = scalefac[ scalefac_index ];
--
-- for ( i = 0; i < bigvalues; i += 2 )
-- {
-- /* get table pointer */
-- int idx = (i >= region1Start) + (i >= region2Start);
-- unsigned tableindex = gi->table_select[idx];
-- /* get huffman code */
-- if ( tableindex )
-- {
-- x = ix[i];
-- y = ix[i + 1];
-- shine_HuffmanCode( &config->bs, tableindex, x, y );
-- }
-+ region2Start = scalefac[scalefac_index];
-+
-+ for (i = 0; i < bigvalues; i += 2) {
-+ /* get table pointer */
-+ int idx = (i >= region1Start) + (i >= region2Start);
-+ unsigned tableindex = gi->table_select[idx];
-+ /* get huffman code */
-+ if (tableindex) {
-+ x = ix[i];
-+ y = ix[i + 1];
-+ shine_HuffmanCode(&config->bs, tableindex, x, y);
- }
-+ }
-
- /* 2: Write count1 area */
- h = &shine_huffman_table[gi->count1table_select + 32];
-- count1End = bigvalues + (gi->count1 <<2);
-- for ( i = bigvalues; i < count1End; i += 4 )
-- {
-- v = ix[i];
-- w = ix[i+1];
-- x = ix[i+2];
-- y = ix[i+3];
-- shine_huffman_coder_count1( &config->bs, h, v, w, x, y );
-- }
-+ count1End = bigvalues + (gi->count1 << 2);
-+ for (i = bigvalues; i < count1End; i += 4) {
-+ v = ix[i];
-+ w = ix[i + 1];
-+ x = ix[i + 2];
-+ y = ix[i + 3];
-+ shine_huffman_coder_count1(&config->bs, h, v, w, x, y);
-+ }
-
- bits = shine_get_bits_count(&config->bs) - bits;
- bits = gi->part2_3_length - gi->part2_length - bits;
-- if (bits)
-- {
-- int stuffingWords = bits / 32;
-- int remainingBits = bits % 32;
--
-- /* Due to the nature of the Huffman code tables, we will pad with ones */
-- while ( stuffingWords-- )
-- shine_putbits( &config->bs, ~0, 32 );
-- if ( remainingBits )
-- shine_putbits( &config->bs, (1UL << remainingBits) - 1, remainingBits );
-- }
-+ if (bits) {
-+ int stuffingWords = bits / 32;
-+ int remainingBits = bits % 32;
-+
-+ /* Due to the nature of the Huffman code tables, we will pad with ones */
-+ while (stuffingWords--)
-+ shine_putbits(&config->bs, ~0, 32);
-+ if (remainingBits)
-+ shine_putbits(&config->bs, (1UL << remainingBits) - 1, remainingBits);
-+ }
- }
-
--static inline int shine_abs_and_sign( int *x )
--{
-- if ( *x > 0 ) return 0;
-+static inline int shine_abs_and_sign(int *x) {
-+ if (*x > 0)
-+ return 0;
- *x *= -1;
- return 1;
- }
-
--static void shine_huffman_coder_count1( bitstream_t *bs, const struct huffcodetab *h, int v, int w, int x, int y )
--{
-+static void shine_huffman_coder_count1(bitstream_t *bs,
-+ const struct huffcodetab *h, int v,
-+ int w, int x, int y) {
- unsigned int signv, signw, signx, signy;
- unsigned int code = 0;
- int p, cbits = 0;
-
-- signv = shine_abs_and_sign( &v );
-- signw = shine_abs_and_sign( &w );
-- signx = shine_abs_and_sign( &x );
-- signy = shine_abs_and_sign( &y );
-+ signv = shine_abs_and_sign(&v);
-+ signw = shine_abs_and_sign(&w);
-+ signx = shine_abs_and_sign(&x);
-+ signy = shine_abs_and_sign(&y);
-
- p = v + (w << 1) + (x << 2) + (y << 3);
-- shine_putbits( bs, h->table[p], h->hlen[p] );
-+ shine_putbits(bs, h->table[p], h->hlen[p]);
-
-- if ( v ) {
-+ if (v) {
- code = signv;
- cbits = 1;
- }
-- if ( w ) {
-+ if (w) {
- code = (code << 1) | signw;
- cbits++;
- }
-- if ( x ) {
-+ if (x) {
- code = (code << 1) | signx;
- cbits++;
- }
-- if ( y ) {
-+ if (y) {
- code = (code << 1) | signy;
- cbits++;
- }
-- shine_putbits( bs, code, cbits );
-+ shine_putbits(bs, code, cbits);
- }
-
- /* Implements the pseudocode of page 98 of the IS */
--static void shine_HuffmanCode(bitstream_t *bs, int table_select, int x, int y)
--{
-+static void shine_HuffmanCode(bitstream_t *bs, int table_select, int x, int y) {
- int cbits = 0, xbits = 0;
- unsigned int code = 0, ext = 0;
- unsigned signx, signy, ylen, idx;
- const struct huffcodetab *h;
-
-- signx = shine_abs_and_sign( &x );
-- signy = shine_abs_and_sign( &y );
-+ signx = shine_abs_and_sign(&x);
-+ signy = shine_abs_and_sign(&y);
-
- h = &(shine_huffman_table[table_select]);
- ylen = h->ylen;
-
-- if ( table_select > 15 )
-- { /* ESC-table is used */
-- unsigned linbitsx = 0, linbitsy = 0, linbits = h->linbits;
--
-- if ( x > 14 )
-- {
-- linbitsx = x - 15;
-- x = 15;
-- }
-- if ( y > 14 )
-- {
-- linbitsy = y - 15;
-- y = 15;
-- }
--
-- idx = (x * ylen) + y;
-- code = h->table[idx];
-- cbits = h->hlen [idx];
-- if ( x > 14 )
-- {
-- ext |= linbitsx;
-- xbits += linbits;
-- }
-- if ( x != 0 )
-- {
-- ext <<= 1;
-- ext |= signx;
-- xbits += 1;
-- }
-- if ( y > 14 )
-- {
-- ext <<= linbits;
-- ext |= linbitsy;
-- xbits += linbits;
-- }
-- if ( y != 0 )
-- {
-- ext <<= 1;
-- ext |= signy;
-- xbits += 1;
-- }
--
-- shine_putbits( bs, code, cbits);
-- shine_putbits( bs, ext, xbits);
-+ if (table_select > 15) { /* ESC-table is used */
-+ unsigned linbitsx = 0, linbitsy = 0, linbits = h->linbits;
-+
-+ if (x > 14) {
-+ linbitsx = x - 15;
-+ x = 15;
-+ }
-+ if (y > 14) {
-+ linbitsy = y - 15;
-+ y = 15;
-+ }
-+
-+ idx = (x * ylen) + y;
-+ code = h->table[idx];
-+ cbits = h->hlen[idx];
-+ if (x > 14) {
-+ ext |= linbitsx;
-+ xbits += linbits;
- }
-- else
-- { /* No ESC-words */
-- idx = (x * ylen) + y;
-- code = h->table[idx];
-- cbits = h->hlen[idx];
-- if ( x != 0 )
-- {
-- code <<= 1;
-- code |= signx;
-- cbits += 1;
-- }
-- if ( y != 0 )
-- {
-- code <<= 1;
-- code |= signy;
-- cbits += 1;
-- }
--
-- shine_putbits( bs, code, cbits);
-+ if (x != 0) {
-+ ext <<= 1;
-+ ext |= signx;
-+ xbits += 1;
- }
-+ if (y > 14) {
-+ ext <<= linbits;
-+ ext |= linbitsy;
-+ xbits += linbits;
-+ }
-+ if (y != 0) {
-+ ext <<= 1;
-+ ext |= signy;
-+ xbits += 1;
-+ }
-+
-+ shine_putbits(bs, code, cbits);
-+ shine_putbits(bs, ext, xbits);
-+ } else { /* No ESC-words */
-+ idx = (x * ylen) + y;
-+ code = h->table[idx];
-+ cbits = h->hlen[idx];
-+ if (x != 0) {
-+ code <<= 1;
-+ code |= signx;
-+ cbits += 1;
-+ }
-+ if (y != 0) {
-+ code <<= 1;
-+ code |= signy;
-+ cbits += 1;
-+ }
-+
-+ shine_putbits(bs, code, cbits);
-+ }
- }
-diff --git a/src/lib/l3bitstream.h b/src/lib/l3bitstream.h
-index 6e165f5..fa61899 100644
---- a/src/lib/l3bitstream.h
-+++ b/src/lib/l3bitstream.h
-@@ -1,6 +1,8 @@
- #ifndef shine_BITSTREAM_H
- #define shine_BITSTREAM_H
-
-+#include "types.h"
-+
- void shine_format_bitstream(shine_global_config *config);
-
- #endif
-diff --git a/src/lib/l3loop.c b/src/lib/l3loop.c
-index 609c2b2..d3799fb 100644
---- a/src/lib/l3loop.c
-+++ b/src/lib/l3loop.c
-@@ -1,34 +1,40 @@
- /* l3loop.c */
-
--#include "types.h"
--#include "tables.h"
- #include "l3loop.h"
--#include "layer3.h"
--#include "huffman.h"
- #include "bitstream.h"
-+#include "huffman.h"
- #include "l3bitstream.h"
-+#include "layer3.h"
- #include "reservoir.h"
-+#include "tables.h"
-+#include "types.h"
-
--#define e 2.71828182845
--#define CBLIMIT 21
-+#define e 2.71828182845
-+#define CBLIMIT 21
- #define SFB_LMAX 22
- #define en_tot_krit 10
- #define en_dif_krit 100
- #define en_scfsi_band_krit 10
- #define xm_scfsi_band_krit 10
-
--static void calc_scfsi(shine_psy_xmin_t *l3_xmin, int ch, int gr, shine_global_config *config);
-+static void calc_scfsi(shine_psy_xmin_t *l3_xmin, int ch, int gr,
-+ shine_global_config *config);
- static int part2_length(int gr, int ch, shine_global_config *config);
--static int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE], gr_info * cod_info, shine_global_config *config);
--static int count_bit(int ix[GRANULE_SIZE], unsigned int start, unsigned int end, unsigned int table );
-+static int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE],
-+ gr_info *cod_info, shine_global_config *config);
-+static int count_bit(int ix[GRANULE_SIZE], unsigned int start, unsigned int end,
-+ unsigned int table);
- static int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi);
--static int new_choose_table( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end );
--static void bigv_tab_select( int ix[GRANULE_SIZE], gr_info *cod_info );
--static void subdivide(gr_info *cod_info, shine_global_config *config );
--static int count1_bitcount( int ix[ GRANULE_SIZE ], gr_info *cod_info );
--static void calc_runlen( int ix[GRANULE_SIZE], gr_info *cod_info );
--static void calc_xmin(shine_psy_ratio_t *ratio, gr_info *cod_info, shine_psy_xmin_t *l3_xmin, int gr, int ch );
--static int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config);
-+static int new_choose_table(int ix[GRANULE_SIZE], unsigned int begin,
-+ unsigned int end);
-+static void bigv_tab_select(int ix[GRANULE_SIZE], gr_info *cod_info);
-+static void subdivide(gr_info *cod_info, shine_global_config *config);
-+static int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info);
-+static void calc_runlen(int ix[GRANULE_SIZE], gr_info *cod_info);
-+static void calc_xmin(shine_psy_ratio_t *ratio, gr_info *cod_info,
-+ shine_psy_xmin_t *l3_xmin, int gr, int ch);
-+static int quantize(int ix[GRANULE_SIZE], int stepsize,
-+ shine_global_config *config);
-
- /*
- * shine_inner_loop:
-@@ -36,25 +42,22 @@ static int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *con
- * The code selects the best quantizerStepSize for a particular set
- * of scalefacs.
- */
--int shine_inner_loop(int ix[GRANULE_SIZE],
-- int max_bits, gr_info *cod_info, int gr, int ch,
-- shine_global_config *config )
--{
-+int shine_inner_loop(int ix[GRANULE_SIZE], int max_bits, gr_info *cod_info,
-+ int gr, int ch, shine_global_config *config) {
- int bits, c1bits, bvbits;
-
-- if(max_bits<0)
-+ if (max_bits < 0)
- cod_info->quantizerStepSize--;
-- do
-- {
-- while(quantize(ix,++cod_info->quantizerStepSize,config) > 8192); /* within table range? */
--
-- calc_runlen(ix,cod_info); /* rzero,count1,big_values*/
-- bits = c1bits = count1_bitcount(ix,cod_info); /* count1_table selection*/
-- subdivide(cod_info, config); /* bigvalues sfb division */
-- bigv_tab_select(ix,cod_info); /* codebook selection*/
-- bits += bvbits = bigv_bitcount( ix, cod_info ); /* bit count */
-- }
-- while(bits>max_bits);
-+ do {
-+ while (quantize(ix, ++cod_info->quantizerStepSize, config) > 8192)
-+ ; /* within table range? */
-+
-+ calc_runlen(ix, cod_info); /* rzero,count1,big_values*/
-+ bits = c1bits = count1_bitcount(ix, cod_info); /* count1_table selection*/
-+ subdivide(cod_info, config); /* bigvalues sfb division */
-+ bigv_tab_select(ix, cod_info); /* codebook selection*/
-+ bits += bvbits = bigv_bitcount(ix, cod_info); /* bit count */
-+ } while (bits > max_bits);
- return bits;
- }
-
-@@ -66,21 +69,22 @@ int shine_inner_loop(int ix[GRANULE_SIZE],
- * global gain. This module calls the inner iteration loop.
- */
-
--int shine_outer_loop( int max_bits,
-- shine_psy_xmin_t *l3_xmin, /* the allowed distortion of the scalefactor */
-- int ix[GRANULE_SIZE], /* vector of quantized values ix(0..575) */
-- int gr, int ch, shine_global_config *config)
--{
-+int shine_outer_loop(
-+ int max_bits,
-+ shine_psy_xmin_t *l3_xmin, /* the allowed distortion of the scalefactor */
-+ int ix[GRANULE_SIZE], /* vector of quantized values ix(0..575) */
-+ int gr, int ch, shine_global_config *config) {
- int bits, huff_bits;
-- shine_side_info_t *side_info = &config->side_info;
-+ shine_side_info_t *side_info = &config->side_info;
- gr_info *cod_info = &side_info->gr[gr].ch[ch].tt;
-
-- cod_info->quantizerStepSize = bin_search_StepSize(max_bits,ix,cod_info, config);
-+ cod_info->quantizerStepSize =
-+ bin_search_StepSize(max_bits, ix, cod_info, config);
-
-- cod_info->part2_length = part2_length(gr,ch,config);
-+ cod_info->part2_length = part2_length(gr, ch, config);
- huff_bits = max_bits - cod_info->part2_length;
-
-- bits = shine_inner_loop(ix, huff_bits, cod_info, gr, ch, config );
-+ bits = shine_inner_loop(ix, huff_bits, cod_info, gr, ch, config);
- cod_info->part2_3_length = cod_info->part2_length + bits;
-
- return cod_info->part2_3_length;
-@@ -90,18 +94,15 @@ int shine_outer_loop( int max_bits,
- * shine_iteration_loop:
- * ------------------
- */
--void shine_iteration_loop(shine_global_config *config)
--{
-+void shine_iteration_loop(shine_global_config *config) {
- shine_psy_xmin_t l3_xmin;
- gr_info *cod_info;
- int max_bits;
- int ch, gr, i;
- int *ix;
-
-- for(ch=config->wave.channels; ch--; )
-- {
-- for(gr=0; gr<config->mpeg.granules_per_frame; gr++)
-- {
-+ for (ch = config->wave.channels; ch--;) {
-+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) {
- /* setup pointers */
- ix = config->l3_enc[ch][gr];
- config->l3loop.xr = config->mdct_freq[ch][gr];
-@@ -109,56 +110,58 @@ void shine_iteration_loop(shine_global_config *config)
- /* Precalculate the square, abs, and maximum,
- * for use later on.
- */
-- for (i=GRANULE_SIZE, config->l3loop.xrmax=0; i--;)
-- {
-- config->l3loop.xrsq[i] = mulsr(config->l3loop.xr[i],config->l3loop.xr[i]);
-+ for (i = GRANULE_SIZE, config->l3loop.xrmax = 0; i--;) {
-+ config->l3loop.xrsq[i] =
-+ mulsr(config->l3loop.xr[i], config->l3loop.xr[i]);
- config->l3loop.xrabs[i] = labs(config->l3loop.xr[i]);
-- if(config->l3loop.xrabs[i]>config->l3loop.xrmax)
-- config->l3loop.xrmax=config->l3loop.xrabs[i];
-+ if (config->l3loop.xrabs[i] > config->l3loop.xrmax)
-+ config->l3loop.xrmax = config->l3loop.xrabs[i];
- }
-
-- cod_info = (gr_info *) &(config->side_info.gr[gr].ch[ch]);
-+ cod_info = (gr_info *)&(config->side_info.gr[gr].ch[ch]);
- cod_info->sfb_lmax = SFB_LMAX - 1; /* gr_deco */
-
-- calc_xmin(&config->ratio, cod_info, &l3_xmin, gr, ch );
-+ calc_xmin(&config->ratio, cod_info, &l3_xmin, gr, ch);
-
-- if ( config->mpeg.version == MPEG_I )
-- calc_scfsi(&l3_xmin,ch,gr,config);
-+ if (config->mpeg.version == MPEG_I)
-+ calc_scfsi(&l3_xmin, ch, gr, config);
-
- /* calculation of number of available bit( per granule ) */
-- max_bits = shine_max_reservoir_bits(&config->pe[ch][gr],config);
-+ max_bits = shine_max_reservoir_bits(&config->pe[ch][gr], config);
-
- /* reset of iteration variables */
-- memset(config->scalefactor.l[gr][ch],0,sizeof(config->scalefactor.l[gr][ch]));
-- memset(config->scalefactor.s[gr][ch],0,sizeof(config->scalefactor.s[gr][ch]));
-+ memset(config->scalefactor.l[gr][ch], 0,
-+ sizeof(config->scalefactor.l[gr][ch]));
-+ memset(config->scalefactor.s[gr][ch], 0,
-+ sizeof(config->scalefactor.s[gr][ch]));
-
-- for ( i=4; i--; )
-+ for (i = 4; i--;)
- cod_info->slen[i] = 0;
-
-- cod_info->part2_3_length = 0;
-- cod_info->big_values = 0;
-- cod_info->count1 = 0;
-+ cod_info->part2_3_length = 0;
-+ cod_info->big_values = 0;
-+ cod_info->count1 = 0;
- cod_info->scalefac_compress = 0;
-- cod_info->table_select[0] = 0;
-- cod_info->table_select[1] = 0;
-- cod_info->table_select[2] = 0;
-- cod_info->region0_count = 0;
-- cod_info->region1_count = 0;
-- cod_info->part2_length = 0;
-- cod_info->preflag = 0;
-- cod_info->scalefac_scale = 0;
-- cod_info->count1table_select= 0;
-+ cod_info->table_select[0] = 0;
-+ cod_info->table_select[1] = 0;
-+ cod_info->table_select[2] = 0;
-+ cod_info->region0_count = 0;
-+ cod_info->region1_count = 0;
-+ cod_info->part2_length = 0;
-+ cod_info->preflag = 0;
-+ cod_info->scalefac_scale = 0;
-+ cod_info->count1table_select = 0;
-
- /* all spectral values zero ? */
-- if(config->l3loop.xrmax)
-- cod_info->part2_3_length = shine_outer_loop(max_bits,&l3_xmin,ix,
-- gr,ch,config);
-+ if (config->l3loop.xrmax)
-+ cod_info->part2_3_length =
-+ shine_outer_loop(max_bits, &l3_xmin, ix, gr, ch, config);
-
-- shine_ResvAdjust(cod_info, config );
-- cod_info->global_gain = cod_info->quantizerStepSize+210;
-+ shine_ResvAdjust(cod_info, config);
-+ cod_info->global_gain = cod_info->quantizerStepSize + 210;
-
- } /* for gr */
-- } /* for ch */
-+ } /* for ch */
-
- shine_ResvFrameEnd(config);
- }
-@@ -168,21 +171,20 @@ void shine_iteration_loop(shine_global_config *config)
- * -----------
- * calculation of the scalefactor select information ( scfsi ).
- */
--void calc_scfsi( shine_psy_xmin_t *l3_xmin, int ch, int gr,
-- shine_global_config *config )
--{
-+void calc_scfsi(shine_psy_xmin_t *l3_xmin, int ch, int gr,
-+ shine_global_config *config) {
- shine_side_info_t *l3_side = &config->side_info;
- /* This is the scfsi_band table from 2.4.2.7 of the IS */
-- static const int scfsi_band_long[5] = { 0, 6, 11, 16, 21 };
-+ static const int scfsi_band_long[5] = {0, 6, 11, 16, 21};
-
- int scfsi_band;
-- unsigned scfsi_set;
-
- int sfb, start, end, i;
- int condition = 0;
- int temp;
-
-- const int *scalefac_band_long = &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
-+ const int *scalefac_band_long =
-+ &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
-
- /* note. it goes quite a bit faster if you uncomment the next bit and exit
- early from scfsi, but you then loose the advantage of common scale factors.
-@@ -194,82 +196,75 @@ void calc_scfsi( shine_psy_xmin_t *l3_xmin, int ch, int gr,
- */
-
- config->l3loop.xrmaxl[gr] = config->l3loop.xrmax;
-- scfsi_set = 0;
-
- /* the total energy of the granule */
-- for ( temp = 0, i =GRANULE_SIZE; i--; )
-- temp += config->l3loop.xrsq[i]>>10; /* a bit of scaling to avoid overflow, (not very good) */
-- if ( temp )
-- config->l3loop.en_tot[gr] = log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */
-+ for (temp = 0, i = GRANULE_SIZE; i--;)
-+ temp += config->l3loop.xrsq[i] >>
-+ 10; /* a bit of scaling to avoid overflow, (not very good) */
-+ if (temp)
-+ config->l3loop.en_tot[gr] =
-+ log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */
- else
- config->l3loop.en_tot[gr] = 0;
-
- /* the energy of each scalefactor band, en */
- /* the allowed distortion of each scalefactor band, xm */
-
-- for(sfb=21; sfb--; )
-- {
-- start = scalefac_band_long[ sfb ];
-- end = scalefac_band_long[ sfb+1 ];
-+ for (sfb = 21; sfb--;) {
-+ start = scalefac_band_long[sfb];
-+ end = scalefac_band_long[sfb + 1];
-
-- for ( temp = 0, i = start; i < end; i++ )
-- temp += config->l3loop.xrsq[i]>>10;
-- if ( temp )
-- config->l3loop.en[gr][sfb] = log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */
-+ for (temp = 0, i = start; i < end; i++)
-+ temp += config->l3loop.xrsq[i] >> 10;
-+ if (temp)
-+ config->l3loop.en[gr][sfb] =
-+ log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */
- else
- config->l3loop.en[gr][sfb] = 0;
-
-- if ( l3_xmin->l[gr][ch][sfb])
-- config->l3loop.xm[gr][sfb] = log( l3_xmin->l[gr][ch][sfb] ) / LN2;
-+ if (l3_xmin->l[gr][ch][sfb])
-+ config->l3loop.xm[gr][sfb] = log(l3_xmin->l[gr][ch][sfb]) / LN2;
- else
- config->l3loop.xm[gr][sfb] = 0;
- }
-
-- if(gr==1)
-- {
-+ if (gr == 1) {
- int gr2, tp;
-
-- for(gr2=2; gr2--; )
-- {
-+ for (gr2 = 2; gr2--;) {
- /* The spectral values are not all zero */
-- if(config->l3loop.xrmaxl[gr2])
-+ if (config->l3loop.xrmaxl[gr2])
- condition++;
-
- condition++;
- }
-- if(abs(config->l3loop.en_tot[0]-config->l3loop.en_tot[1]) < en_tot_krit)
-+ if (abs(config->l3loop.en_tot[0] - config->l3loop.en_tot[1]) < en_tot_krit)
- condition++;
-- for(tp=0,sfb=21; sfb--; )
-- tp += abs(config->l3loop.en[0][sfb]-config->l3loop.en[1][sfb]);
-+ for (tp = 0, sfb = 21; sfb--;)
-+ tp += abs(config->l3loop.en[0][sfb] - config->l3loop.en[1][sfb]);
- if (tp < en_dif_krit)
- condition++;
-
-- if(condition==6)
-- {
-- for(scfsi_band=0;scfsi_band<4;scfsi_band++)
-- {
-+ if (condition == 6) {
-+ for (scfsi_band = 0; scfsi_band < 4; scfsi_band++) {
- int sum0 = 0, sum1 = 0;
- l3_side->scfsi[ch][scfsi_band] = 0;
- start = scfsi_band_long[scfsi_band];
-- end = scfsi_band_long[scfsi_band+1];
-- for ( sfb = start; sfb < end; sfb++ )
-- {
-- sum0 += abs( config->l3loop.en[0][sfb] - config->l3loop.en[1][sfb] );
-- sum1 += abs( config->l3loop.xm[0][sfb] - config->l3loop.xm[1][sfb] );
-+ end = scfsi_band_long[scfsi_band + 1];
-+ for (sfb = start; sfb < end; sfb++) {
-+ sum0 += abs(config->l3loop.en[0][sfb] - config->l3loop.en[1][sfb]);
-+ sum1 += abs(config->l3loop.xm[0][sfb] - config->l3loop.xm[1][sfb]);
- }
-
-- if(sum0<en_scfsi_band_krit && sum1<xm_scfsi_band_krit)
-- {
-+ if (sum0 < en_scfsi_band_krit && sum1 < xm_scfsi_band_krit) {
- l3_side->scfsi[ch][scfsi_band] = 1;
-- scfsi_set |= (1 << scfsi_band);
-- }
-- else
-+ } else
- l3_side->scfsi[ch][scfsi_band] = 0;
- } /* for scfsi_band */
-- } /* if condition == 6 */
-+ } /* if condition == 6 */
- else
-- for(scfsi_band=0;scfsi_band<4;scfsi_band++)
-- l3_side->scfsi[ch][scfsi_band] = 0;
-+ for (scfsi_band = 0; scfsi_band < 4; scfsi_band++)
-+ l3_side->scfsi[ch][scfsi_band] = 0;
- } /* if gr == 1 */
- }
-
-@@ -279,27 +274,26 @@ void calc_scfsi( shine_psy_xmin_t *l3_xmin, int ch, int gr,
- * calculates the number of bits needed to encode the scalefacs in the
- * main data block.
- */
--int part2_length(int gr, int ch, shine_global_config *config)
--{
-+int part2_length(int gr, int ch, shine_global_config *config) {
- int slen1, slen2, bits;
- gr_info *gi = &config->side_info.gr[gr].ch[ch].tt;
-
- bits = 0;
-
- {
-- slen1 = shine_slen1_tab[ gi->scalefac_compress ];
-- slen2 = shine_slen2_tab[ gi->scalefac_compress ];
-+ slen1 = shine_slen1_tab[gi->scalefac_compress];
-+ slen2 = shine_slen2_tab[gi->scalefac_compress];
-
-- if ( !gr || !(config->side_info.scfsi[ch][0]) )
-+ if (!gr || !(config->side_info.scfsi[ch][0]))
- bits += (6 * slen1);
-
-- if ( !gr || !(config->side_info.scfsi[ch][1]) )
-+ if (!gr || !(config->side_info.scfsi[ch][1]))
- bits += (5 * slen1);
-
-- if ( !gr || !(config->side_info.scfsi[ch][2]) )
-+ if (!gr || !(config->side_info.scfsi[ch][2]))
- bits += (5 * slen2);
-
-- if ( !gr || !(config->side_info.scfsi[ch][3]) )
-+ if (!gr || !(config->side_info.scfsi[ch][3]))
- bits += (5 * slen2);
- }
- return bits;
-@@ -312,26 +306,22 @@ int part2_length(int gr, int ch, shine_global_config *config)
- * as determined by the psychoacoustic model.
- * xmin(sb) = ratio(sb) * en(sb) / bw(sb)
- */
--void calc_xmin(shine_psy_ratio_t *ratio,
-- gr_info *cod_info,
-- shine_psy_xmin_t *l3_xmin,
-- int gr, int ch )
--{
-+void calc_xmin(shine_psy_ratio_t *ratio, gr_info *cod_info,
-+ shine_psy_xmin_t *l3_xmin, int gr, int ch) {
- int sfb;
-
-- for ( sfb = cod_info->sfb_lmax; sfb--; )
-- {
--/* note. xmin will always be zero with no psychoacoustic model
-+ for (sfb = cod_info->sfb_lmax; sfb--;) {
-+ /* note. xmin will always be zero with no psychoacoustic model
-
-- start = scalefac_band_long[ sfb ];
-- end = scalefac_band_long[ sfb+1 ];
-- bw = end - start;
-+ start = scalefac_band_long[ sfb ];
-+ end = scalefac_band_long[ sfb+1 ];
-+ bw = end - start;
-
-- for ( en = 0, l = start; l < end; l++ )
-- en += config->l3loop.xrsq[l];
-+ for ( en = 0, l = start; l < end; l++ )
-+ en += config->l3loop.xrsq[l];
-
-- l3_xmin->l[gr][ch][sfb] = ratio->l[gr][ch][sfb] * en / bw;
--*/
-+ l3_xmin->l[gr][ch][sfb] = ratio->l[gr][ch][sfb] * en / bw;
-+ */
- l3_xmin->l[gr][ch][sfb] = 0;
- }
- }
-@@ -341,8 +331,7 @@ void calc_xmin(shine_psy_ratio_t *ratio,
- * -------------------
- * Calculates the look up tables used by the iteration loop.
- */
--void shine_loop_initialise(shine_global_config *config)
--{
-+void shine_loop_initialise(shine_global_config *config) {
- int i;
-
- /* quantize: stepsize conversion, fourth root of 2 table.
-@@ -350,24 +339,26 @@ void shine_loop_initialise(shine_global_config *config)
- * in the spec because it is quicker to do x*y than x/y.
- * The 0.5 is for rounding.
- */
-- for(i=128; i--;)
-- {
-- config->l3loop.steptab[i] = pow(2.0,(double)(127-i)/4);
-- if((config->l3loop.steptab[i]*2)>0x7fffffff) /* MAXINT = 2**31 = 2**(124/4) */
-- config->l3loop.steptabi[i]=0x7fffffff;
-+ for (i = 128; i--;) {
-+ config->l3loop.steptab[i] = pow(2.0, (double)(127 - i) / 4);
-+ if ((config->l3loop.steptab[i] * 2) >
-+ 0x7fffffff) /* MAXINT = 2**31 = 2**(124/4) */
-+ config->l3loop.steptabi[i] = 0x7fffffff;
- else
- /* The table is multiplied by 2 to give an extra bit of accuracy.
- * In quantize, the long multiply does not shift it's result left one
- * bit to compensate.
- */
-- config->l3loop.steptabi[i] = (int32_t)((config->l3loop.steptab[i]*2) + 0.5);
-+ config->l3loop.steptabi[i] =
-+ (int32_t)((config->l3loop.steptab[i] * 2) + 0.5);
- }
-
- /* quantize: vector conversion, three quarter power table.
- * The 0.5 is for rounding, the .0946 comes from the spec.
- */
-- for(i=10000; i--;)
-- config->l3loop.int2idx[i] = (int)(sqrt(sqrt((double)i)*(double)i) - 0.0946 + 0.5);
-+ for (i = 10000; i--;)
-+ config->l3loop.int2idx[i] =
-+ (int)(sqrt(sqrt((double)i) * (double)i) - 0.0946 + 0.5);
- }
-
- /*
-@@ -376,39 +367,37 @@ void shine_loop_initialise(shine_global_config *config)
- * Function: Quantization of the vector xr ( -> ix).
- * Returns maximum value of ix.
- */
--int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config )
--{
-+int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config) {
- int i, max, ln;
- int32_t scalei;
- double scale, dbl;
-
-- scalei = config->l3loop.steptabi[stepsize+127]; /* 2**(-stepsize/4) */
-+ scalei = config->l3loop.steptabi[stepsize + 127]; /* 2**(-stepsize/4) */
-
- /* a quick check to see if ixmax will be less than 8192 */
- /* this speeds up the early calls to bin_search_StepSize */
-- if((mulr(config->l3loop.xrmax,scalei)) > 165140) /* 8192**(4/3) */
-+ if ((mulr(config->l3loop.xrmax, scalei)) > 165140) /* 8192**(4/3) */
- max = 16384; /* no point in continuing, stepsize not big enough */
- else
-- for(i=0, max=0;i<GRANULE_SIZE;i++)
-- {
-+ for (i = 0, max = 0; i < GRANULE_SIZE; i++) {
- /* This calculation is very sensitive. The multiply must round it's
- * result or bad things happen to the quality.
- */
-- ln = mulr(labs(config->l3loop.xr[i]),scalei);
-+ ln = mulr(labs(config->l3loop.xr[i]), scalei);
-
-- if(ln<10000) /* ln < 10000 catches most values */
-+ if (ln < 10000) /* ln < 10000 catches most values */
- ix[i] = config->l3loop.int2idx[ln]; /* quick look up method */
-- else
-- {
-+ else {
- /* outside table range so have to do it using floats */
-- scale = config->l3loop.steptab[stepsize+127]; /* 2**(-stepsize/4) */
-- dbl = ((double)config->l3loop.xrabs[i]) * scale * 4.656612875e-10; /* 0x7fffffff */
-- ix[i] = (int)sqrt(sqrt(dbl)*dbl); /* dbl**(3/4) */
-+ scale = config->l3loop.steptab[stepsize + 127]; /* 2**(-stepsize/4) */
-+ dbl = ((double)config->l3loop.xrabs[i]) * scale *
-+ 4.656612875e-10; /* 0x7fffffff */
-+ ix[i] = (int)sqrt(sqrt(dbl) * dbl); /* dbl**(3/4) */
- }
-
- /* calculate ixmax while we're here */
- /* note. ix cannot be negative */
-- if(max < ix[i])
-+ if (max < ix[i])
- max = ix[i];
- }
-
-@@ -420,13 +409,13 @@ int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config )
- * -------
- * Function: Calculate the maximum of ix from 0 to 575
- */
--static inline int ix_max( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end )
--{
-+static inline int ix_max(int ix[GRANULE_SIZE], unsigned int begin,
-+ unsigned int end) {
- register int i;
- register int max = 0;
-
-- for(i=begin;i<end;i++)
-- if(max < ix[i])
-+ for (i = begin; i < end; i++)
-+ if (max < ix[i])
- max = ix[i];
- return max;
- }
-@@ -437,28 +426,24 @@ static inline int ix_max( int ix[GRANULE_SIZE], unsigned int begin, unsigned int
- * Function: Calculation of rzero, count1, big_values
- * (Partitions ix into big values, quadruples and zeros).
- */
--void calc_runlen( int ix[GRANULE_SIZE], gr_info *cod_info )
--{
-+void calc_runlen(int ix[GRANULE_SIZE], gr_info *cod_info) {
- int i;
- int rzero = 0;
-
-- for ( i = GRANULE_SIZE; i > 1; i -= 2 )
-- if ( !ix[i-1] && !ix[i-2] )
-+ for (i = GRANULE_SIZE; i > 1; i -= 2)
-+ if (!ix[i - 1] && !ix[i - 2])
- rzero++;
- else
- break;
-
-- cod_info->count1 = 0 ;
-- for ( ; i > 3; i -= 4 )
-- if ( ix[i-1] <= 1
-- && ix[i-2] <= 1
-- && ix[i-3] <= 1
-- && ix[i-4] <= 1 )
-+ cod_info->count1 = 0;
-+ for (; i > 3; i -= 4)
-+ if (ix[i - 1] <= 1 && ix[i - 2] <= 1 && ix[i - 3] <= 1 && ix[i - 4] <= 1)
- cod_info->count1++;
- else
- break;
-
-- cod_info->big_values = i>>1;
-+ cod_info->big_values = i >> 1;
- }
-
- /*
-@@ -466,27 +451,29 @@ void calc_runlen( int ix[GRANULE_SIZE], gr_info *cod_info )
- * ----------------
- * Determines the number of bits to encode the quadruples.
- */
--int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info)
--{
-+int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info) {
- int p, i, k;
- int v, w, x, y, signbits;
-- int sum0 = 0,
-- sum1 = 0;
-+ int sum0 = 0, sum1 = 0;
-
-- for(i=cod_info->big_values<<1, k=0; k<cod_info->count1; i+=4, k++)
-- {
-+ for (i = cod_info->big_values << 1, k = 0; k < cod_info->count1;
-+ i += 4, k++) {
- v = ix[i];
-- w = ix[i+1];
-- x = ix[i+2];
-- y = ix[i+3];
-+ w = ix[i + 1];
-+ x = ix[i + 2];
-+ y = ix[i + 3];
-
-- p = v + (w<<1) + (x<<2) + (y<<3);
-+ p = v + (w << 1) + (x << 2) + (y << 3);
-
- signbits = 0;
-- if(v!=0) signbits++;
-- if(w!=0) signbits++;
-- if(x!=0) signbits++;
-- if(y!=0) signbits++;
-+ if (v != 0)
-+ signbits++;
-+ if (w != 0)
-+ signbits++;
-+ if (x != 0)
-+ signbits++;
-+ if (y != 0)
-+ signbits++;
-
- sum0 += signbits;
- sum1 += signbits;
-@@ -495,13 +482,10 @@ int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info)
- sum1 += shine_huffman_table[33].hlen[p];
- }
-
-- if(sum0<sum1)
-- {
-+ if (sum0 < sum1) {
- cod_info->count1table_select = 0;
- return sum0;
-- }
-- else
-- {
-+ } else {
- cod_info->count1table_select = 1;
- return sum1;
- }
-@@ -510,59 +494,56 @@ int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info)
- /*
- * subdivide:
- * ----------
-- * presumable subdivides the bigvalue region which will use separate Huffman tables.
-+ * presumable subdivides the bigvalue region which will use separate Huffman
-+ * tables.
- */
--void subdivide(gr_info *cod_info, shine_global_config *config)
--{
-- static const struct
-- {
-+void subdivide(gr_info *cod_info, shine_global_config *config) {
-+ static const struct {
- unsigned region0_count;
- unsigned region1_count;
-- } subdv_table[ 23 ] =
-- {
-- {0, 0}, /* 0 bands */
-- {0, 0}, /* 1 bands */
-- {0, 0}, /* 2 bands */
-- {0, 0}, /* 3 bands */
-- {0, 0}, /* 4 bands */
-- {0, 1}, /* 5 bands */
-- {1, 1}, /* 6 bands */
-- {1, 1}, /* 7 bands */
-- {1, 2}, /* 8 bands */
-- {2, 2}, /* 9 bands */
-- {2, 3}, /* 10 bands */
-- {2, 3}, /* 11 bands */
-- {3, 4}, /* 12 bands */
-- {3, 4}, /* 13 bands */
-- {3, 4}, /* 14 bands */
-- {4, 5}, /* 15 bands */
-- {4, 5}, /* 16 bands */
-- {4, 6}, /* 17 bands */
-- {5, 6}, /* 18 bands */
-- {5, 6}, /* 19 bands */
-- {5, 7}, /* 20 bands */
-- {6, 7}, /* 21 bands */
-- {6, 7}, /* 22 bands */
-+ } subdv_table[23] = {
-+ {0, 0}, /* 0 bands */
-+ {0, 0}, /* 1 bands */
-+ {0, 0}, /* 2 bands */
-+ {0, 0}, /* 3 bands */
-+ {0, 0}, /* 4 bands */
-+ {0, 1}, /* 5 bands */
-+ {1, 1}, /* 6 bands */
-+ {1, 1}, /* 7 bands */
-+ {1, 2}, /* 8 bands */
-+ {2, 2}, /* 9 bands */
-+ {2, 3}, /* 10 bands */
-+ {2, 3}, /* 11 bands */
-+ {3, 4}, /* 12 bands */
-+ {3, 4}, /* 13 bands */
-+ {3, 4}, /* 14 bands */
-+ {4, 5}, /* 15 bands */
-+ {4, 5}, /* 16 bands */
-+ {4, 6}, /* 17 bands */
-+ {5, 6}, /* 18 bands */
-+ {5, 6}, /* 19 bands */
-+ {5, 7}, /* 20 bands */
-+ {6, 7}, /* 21 bands */
-+ {6, 7}, /* 22 bands */
- };
-
-- if (!cod_info->big_values)
-- { /* no big_values region */
-+ if (!cod_info->big_values) { /* no big_values region */
- cod_info->region0_count = 0;
- cod_info->region1_count = 0;
-- }
-- else
-- {
-- const int *scalefac_band_long = &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
-+ } else {
-+ const int *scalefac_band_long =
-+ &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
- int bigvalues_region, scfb_anz, thiscount;
-
- bigvalues_region = 2 * cod_info->big_values;
-
- /* Calculate scfb_anz */
- scfb_anz = 0;
-- while ( scalefac_band_long[scfb_anz] < bigvalues_region )
-+ while (scalefac_band_long[scfb_anz] < bigvalues_region)
- scfb_anz++;
-
-- for (thiscount = subdv_table[scfb_anz].region0_count; thiscount; thiscount--) {
-+ for (thiscount = subdv_table[scfb_anz].region0_count; thiscount;
-+ thiscount--) {
- if (scalefac_band_long[thiscount + 1] <= bigvalues_region)
- break;
- }
-@@ -571,7 +552,8 @@ void subdivide(gr_info *cod_info, shine_global_config *config)
-
- scalefac_band_long += cod_info->region0_count + 1;
-
-- for (thiscount = subdv_table[scfb_anz].region1_count; thiscount; thiscount--) {
-+ for (thiscount = subdv_table[scfb_anz].region1_count; thiscount;
-+ thiscount--) {
- if (scalefac_band_long[thiscount + 1] <= bigvalues_region)
- break;
- }
-@@ -587,21 +569,22 @@ void subdivide(gr_info *cod_info, shine_global_config *config)
- * ----------------
- * Function: Select huffman code tables for bigvalues regions
- */
--void bigv_tab_select( int ix[GRANULE_SIZE], gr_info *cod_info )
--{
-+void bigv_tab_select(int ix[GRANULE_SIZE], gr_info *cod_info) {
- cod_info->table_select[0] = 0;
- cod_info->table_select[1] = 0;
- cod_info->table_select[2] = 0;
-
- {
-- if ( cod_info->address1 > 0 )
-- cod_info->table_select[0] = new_choose_table( ix, 0, cod_info->address1 );
-+ if (cod_info->address1 > 0)
-+ cod_info->table_select[0] = new_choose_table(ix, 0, cod_info->address1);
-
-- if ( cod_info->address2 > cod_info->address1 )
-- cod_info->table_select[1] = new_choose_table( ix, cod_info->address1, cod_info->address2 );
-+ if (cod_info->address2 > cod_info->address1)
-+ cod_info->table_select[1] =
-+ new_choose_table(ix, cod_info->address1, cod_info->address2);
-
-- if ( cod_info->big_values<<1 > cod_info->address2 )
-- cod_info->table_select[2] = new_choose_table( ix, cod_info->address2, cod_info->big_values<<1 );
-+ if (cod_info->big_values << 1 > cod_info->address2)
-+ cod_info->table_select[2] =
-+ new_choose_table(ix, cod_info->address2, cod_info->big_values << 1);
- }
- }
-
-@@ -614,98 +597,89 @@ void bigv_tab_select( int ix[GRANULE_SIZE], gr_info *cod_info )
- * of the Huffman tables as defined in the IS (Table B.7), and will not work
- * with any arbitrary tables.
- */
--int new_choose_table( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end )
--{
-+int new_choose_table(int ix[GRANULE_SIZE], unsigned int begin,
-+ unsigned int end) {
- int i, max;
- int choice[2];
- int sum[2];
-
-- max = ix_max(ix,begin,end);
-- if(!max)
-+ max = ix_max(ix, begin, end);
-+ if (!max)
- return 0;
-
- choice[0] = 0;
- choice[1] = 0;
-
-- if(max<15)
-- {
-+ if (max < 15) {
- /* try tables with no linbits */
-- for ( i =14; i--; )
-- if ( shine_huffman_table[i].xlen > max )
-- {
-+ for (i = 14; i--;)
-+ if (shine_huffman_table[i].xlen > max) {
- choice[0] = i;
- break;
- }
-
-- sum[0] = count_bit( ix, begin, end, choice[0] );
-+ sum[0] = count_bit(ix, begin, end, choice[0]);
-
-- switch (choice[0])
-- {
-- case 2:
-- sum[1] = count_bit( ix, begin, end, 3 );
-- if ( sum[1] <= sum[0] )
-- choice[0] = 3;
-- break;
-+ switch (choice[0]) {
-+ case 2:
-+ sum[1] = count_bit(ix, begin, end, 3);
-+ if (sum[1] <= sum[0])
-+ choice[0] = 3;
-+ break;
-
-- case 5:
-- sum[1] = count_bit( ix, begin, end, 6 );
-- if ( sum[1] <= sum[0] )
-- choice[0] = 6;
-- break;
-+ case 5:
-+ sum[1] = count_bit(ix, begin, end, 6);
-+ if (sum[1] <= sum[0])
-+ choice[0] = 6;
-+ break;
-
-- case 7:
-- sum[1] = count_bit( ix, begin, end, 8 );
-- if ( sum[1] <= sum[0] )
-- {
-- choice[0] = 8;
-- sum[0] = sum[1];
-- }
-- sum[1] = count_bit( ix, begin, end, 9 );
-- if ( sum[1] <= sum[0] )
-- choice[0] = 9;
-- break;
-+ case 7:
-+ sum[1] = count_bit(ix, begin, end, 8);
-+ if (sum[1] <= sum[0]) {
-+ choice[0] = 8;
-+ sum[0] = sum[1];
-+ }
-+ sum[1] = count_bit(ix, begin, end, 9);
-+ if (sum[1] <= sum[0])
-+ choice[0] = 9;
-+ break;
-
-- case 10:
-- sum[1] = count_bit( ix, begin, end, 11 );
-- if ( sum[1] <= sum[0] )
-- {
-- choice[0] = 11;
-- sum[0] = sum[1];
-- }
-- sum[1] = count_bit( ix, begin, end, 12 );
-- if ( sum[1] <= sum[0] )
-- choice[0] = 12;
-- break;
-+ case 10:
-+ sum[1] = count_bit(ix, begin, end, 11);
-+ if (sum[1] <= sum[0]) {
-+ choice[0] = 11;
-+ sum[0] = sum[1];
-+ }
-+ sum[1] = count_bit(ix, begin, end, 12);
-+ if (sum[1] <= sum[0])
-+ choice[0] = 12;
-+ break;
-
-- case 13:
-- sum[1] = count_bit( ix, begin, end, 15 );
-- if ( sum[1] <= sum[0] )
-- choice[0] = 15;
-- break;
-+ case 13:
-+ sum[1] = count_bit(ix, begin, end, 15);
-+ if (sum[1] <= sum[0])
-+ choice[0] = 15;
-+ break;
- }
-- }
-- else
-- {
-+ } else {
- /* try tables with linbits */
- max -= 15;
-
-- for(i=15;i<24;i++)
-- if(shine_huffman_table[i].linmax>=max)
-- {
-+ for (i = 15; i < 24; i++)
-+ if (shine_huffman_table[i].linmax >= max) {
- choice[0] = i;
- break;
- }
-
-- for(i=24;i<32;i++)
-- if(shine_huffman_table[i].linmax>=max)
-- {
-+ for (i = 24; i < 32; i++)
-+ if (shine_huffman_table[i].linmax >= max) {
- choice[1] = i;
- break;
- }
-
-- sum[0] = count_bit(ix,begin,end,choice[0]);
-- sum[1] = count_bit(ix,begin,end,choice[1]);
-- if (sum[1]<sum[0])
-+ sum[0] = count_bit(ix, begin, end, choice[0]);
-+ sum[1] = count_bit(ix, begin, end, choice[1]);
-+ if (sum[1] < sum[0])
- choice[0] = choice[1];
- }
- return choice[0];
-@@ -716,17 +690,16 @@ int new_choose_table( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end
- * --------------
- * Function: Count the number of bits necessary to code the bigvalues region.
- */
--int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi)
--{
-+int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi) {
- int bits = 0;
- unsigned int table;
-
-- if( (table=gi->table_select[0])) /* region0 */
-- bits += count_bit(ix, 0, gi->address1, table );
-- if( (table=gi->table_select[1])) /* region1 */
-- bits += count_bit(ix, gi->address1, gi->address2, table );
-- if( (table=gi->table_select[2])) /* region2 */
-- bits += count_bit(ix, gi->address2, gi->address3, table );
-+ if ((table = gi->table_select[0])) /* region0 */
-+ bits += count_bit(ix, 0, gi->address1, table);
-+ if ((table = gi->table_select[1])) /* region1 */
-+ bits += count_bit(ix, gi->address1, gi->address2, table);
-+ if ((table = gi->table_select[2])) /* region2 */
-+ bits += count_bit(ix, gi->address2, gi->address3, table);
- return bits;
- }
-
-@@ -735,61 +708,51 @@ int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi)
- * ----------
- * Function: Count the number of bits necessary to code the subregion.
- */
--int count_bit(int ix[GRANULE_SIZE],
-- unsigned int start,
-- unsigned int end,
-- unsigned int table )
--{
-- unsigned linbits, ylen;
-- register int i, sum;
-- register int x,y;
-+int count_bit(int ix[GRANULE_SIZE], unsigned int start, unsigned int end,
-+ unsigned int table) {
-+ unsigned linbits, ylen;
-+ register int i, sum;
-+ register int x, y;
- const struct huffcodetab *h;
-
-- if(!table)
-+ if (!table)
- return 0;
-
-- h = &(shine_huffman_table[table]);
-+ h = &(shine_huffman_table[table]);
- sum = 0;
-
-- ylen = h->ylen;
-+ ylen = h->ylen;
- linbits = h->linbits;
-
-- if(table>15)
-- { /* ESC-table is used */
-- for(i=start;i<end;i+=2)
-- {
-+ if (table > 15) { /* ESC-table is used */
-+ for (i = start; i < end; i += 2) {
- x = ix[i];
-- y = ix[i+1];
-- if(x>14)
-- {
-+ y = ix[i + 1];
-+ if (x > 14) {
- x = 15;
- sum += linbits;
- }
-- if(y>14)
-- {
-+ if (y > 14) {
- y = 15;
- sum += linbits;
- }
-
-- sum += h->hlen[(x*ylen)+y];
-- if(x)
-+ sum += h->hlen[(x * ylen) + y];
-+ if (x)
- sum++;
-- if(y)
-+ if (y)
- sum++;
- }
-- }
-- else
-- { /* No ESC-words */
-- for(i=start;i<end;i+=2)
-- {
-+ } else { /* No ESC-words */
-+ for (i = start; i < end; i += 2) {
- x = ix[i];
-- y = ix[i+1];
-+ y = ix[i + 1];
-
-- sum += h->hlen[(x*ylen)+y];
-+ sum += h->hlen[(x * ylen) + y];
-
-- if(x!=0)
-+ if (x != 0)
- sum++;
-- if(y!=0)
-+ if (y != 0)
- sum++;
- }
- }
-@@ -809,20 +772,18 @@ int count_bit(int ix[GRANULE_SIZE],
- * returns a good starting quantizerStepSize.
- */
- int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE],
-- gr_info * cod_info, shine_global_config *config)
--{
-+ gr_info *cod_info, shine_global_config *config) {
- int bit, next, count;
-
-- next = -120;
-+ next = -120;
- count = 120;
-
- do {
- int half = count / 2;
-
- if (quantize(ix, next + half, config) > 8192)
-- bit = 100000; /* fail */
-- else
-- {
-+ bit = 100000; /* fail */
-+ else {
- calc_runlen(ix, cod_info); /* rzero,count1,big_values */
- bit = count1_bitcount(ix, cod_info); /* count1_table selection */
- subdivide(cod_info, config); /* bigvalues sfb division */
-@@ -832,8 +793,7 @@ int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE],
-
- if (bit < desired_rate)
- count = half;
-- else
-- {
-+ else {
- next += half;
- count -= half;
- }
-diff --git a/src/lib/l3loop.h b/src/lib/l3loop.h
-index 0e71a91..94ecea3 100644
---- a/src/lib/l3loop.h
-+++ b/src/lib/l3loop.h
-@@ -1,9 +1,10 @@
- #ifndef L3LOOP_H
- #define L3LOOP_H
-
-+#include "types.h"
-+
- void shine_loop_initialise(shine_global_config *config);
-
- void shine_iteration_loop(shine_global_config *config);
-
- #endif
--
-diff --git a/src/lib/l3mdct.c b/src/lib/l3mdct.c
-index 7553a54..a76b702 100644
---- a/src/lib/l3mdct.c
-+++ b/src/lib/l3mdct.c
-@@ -1,88 +1,87 @@
- /* L3mdct */
-
--#include "types.h"
- #include "l3mdct.h"
- #include "l3subband.h"
-+#include "types.h"
-
- /* This is table B.9: coefficients for aliasing reduction */
--#define MDCT_CA(coef) (int32_t)(coef / sqrt(1.0 + (coef * coef)) * 0x7fffffff)
--#define MDCT_CS(coef) (int32_t)(1.0 / sqrt(1.0 + (coef * coef)) * 0x7fffffff)
-+#define MDCT_CA(coef) (int32_t)(coef / sqrt(1.0 + (coef * coef)) * 0x7fffffff)
-+#define MDCT_CS(coef) (int32_t)(1.0 / sqrt(1.0 + (coef * coef)) * 0x7fffffff)
-
--#define MDCT_CA0 MDCT_CA(-0.6)
--#define MDCT_CA1 MDCT_CA(-0.535)
--#define MDCT_CA2 MDCT_CA(-0.33)
--#define MDCT_CA3 MDCT_CA(-0.185)
--#define MDCT_CA4 MDCT_CA(-0.095)
--#define MDCT_CA5 MDCT_CA(-0.041)
--#define MDCT_CA6 MDCT_CA(-0.0142)
--#define MDCT_CA7 MDCT_CA(-0.0037)
-+#define MDCT_CA0 MDCT_CA(-0.6)
-+#define MDCT_CA1 MDCT_CA(-0.535)
-+#define MDCT_CA2 MDCT_CA(-0.33)
-+#define MDCT_CA3 MDCT_CA(-0.185)
-+#define MDCT_CA4 MDCT_CA(-0.095)
-+#define MDCT_CA5 MDCT_CA(-0.041)
-+#define MDCT_CA6 MDCT_CA(-0.0142)
-+#define MDCT_CA7 MDCT_CA(-0.0037)
-
--#define MDCT_CS0 MDCT_CS(-0.6)
--#define MDCT_CS1 MDCT_CS(-0.535)
--#define MDCT_CS2 MDCT_CS(-0.33)
--#define MDCT_CS3 MDCT_CS(-0.185)
--#define MDCT_CS4 MDCT_CS(-0.095)
--#define MDCT_CS5 MDCT_CS(-0.041)
--#define MDCT_CS6 MDCT_CS(-0.0142)
--#define MDCT_CS7 MDCT_CS(-0.0037)
-+#define MDCT_CS0 MDCT_CS(-0.6)
-+#define MDCT_CS1 MDCT_CS(-0.535)
-+#define MDCT_CS2 MDCT_CS(-0.33)
-+#define MDCT_CS3 MDCT_CS(-0.185)
-+#define MDCT_CS4 MDCT_CS(-0.095)
-+#define MDCT_CS5 MDCT_CS(-0.041)
-+#define MDCT_CS6 MDCT_CS(-0.0142)
-+#define MDCT_CS7 MDCT_CS(-0.0037)
-
- /*
- * shine_mdct_initialise:
- * -------------------
- */
--void shine_mdct_initialise(shine_global_config *config)
--{
-- int m,k;
-+void shine_mdct_initialise(shine_global_config *config) {
-+ int m, k;
-
- /* prepare the mdct coefficients */
-- for(m=18; m--; )
-- for(k=36; k--; )
-+ for (m = 18; m--;)
-+ for (k = 36; k--;)
- /* combine window and mdct coefficients into a single table */
- /* scale and convert to fixed point before storing */
-- config->mdct.cos_l[m][k] = (int32_t)(sin(PI36*(k+0.5))
-- * cos((PI/72)*(2*k+19)*(2*m+1)) * 0x7fffffff);
-+ config->mdct.cos_l[m][k] =
-+ (int32_t)(sin(PI36 * (k + 0.5)) *
-+ cos((PI / 72) * (2 * k + 19) * (2 * m + 1)) * 0x7fffffff);
- }
-
- /*
- * shine_mdct_sub:
- * ------------
- */
--void shine_mdct_sub(shine_global_config *config, int stride)
--{
-+void shine_mdct_sub(shine_global_config *config, int stride) {
- /* note. we wish to access the array 'config->mdct_freq[2][2][576]' as
- * [2][2][32][18]. (32*18=576),
- */
-- int32_t (*mdct_enc)[18];
-+ int32_t(*mdct_enc)[18];
-
-- int ch,gr,band,j,k;
-+ int ch, gr, band, j, k;
- int32_t mdct_in[36];
-
-- for(ch=config->wave.channels; ch--; )
-- {
-- for(gr=0; gr<config->mpeg.granules_per_frame; gr++)
-- {
-+ for (ch = config->wave.channels; ch--;) {
-+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) {
- /* set up pointer to the part of config->mdct_freq we're using */
-- mdct_enc = (int32_t (*)[18]) config->mdct_freq[ch][gr];
-+ mdct_enc = (int32_t(*)[18])config->mdct_freq[ch][gr];
-
- /* polyphase filtering */
-- for(k=0; k<18; k+=2)
-- {
-- shine_window_filter_subband(&config->buffer[ch], &config->l3_sb_sample[ch][gr+1][k ][0], ch, config, stride);
-- shine_window_filter_subband(&config->buffer[ch], &config->l3_sb_sample[ch][gr+1][k+1][0], ch, config, stride);
-+ for (k = 0; k < 18; k += 2) {
-+ shine_window_filter_subband(&config->buffer[ch],
-+ &config->l3_sb_sample[ch][gr + 1][k][0], ch,
-+ config, stride);
-+ shine_window_filter_subband(&config->buffer[ch],
-+ &config->l3_sb_sample[ch][gr + 1][k + 1][0],
-+ ch, config, stride);
- /* Compensate for inversion in the analysis filter
- * (every odd index of band AND k)
- */
-- for(band=1; band<32; band+=2)
-- config->l3_sb_sample[ch][gr+1][k+1][band] *= -1;
-+ for (band = 1; band < 32; band += 2)
-+ config->l3_sb_sample[ch][gr + 1][k + 1][band] *= -1;
- }
-
-- /* Perform imdct of 18 previous subband samples + 18 current subband samples */
-- for(band=0; band<32; band++)
-- {
-- for(k=18; k--; )
-- {
-- mdct_in[k ] = config->l3_sb_sample[ch][gr ][k][band];
-- mdct_in[k+18] = config->l3_sb_sample[ch][gr+1][k][band];
-+ /* Perform imdct of 18 previous subband samples + 18 current subband
-+ * samples */
-+ for (band = 0; band < 32; band++) {
-+ for (k = 18; k--;) {
-+ mdct_in[k] = config->l3_sb_sample[ch][gr][k][band];
-+ mdct_in[k + 18] = config->l3_sb_sample[ch][gr + 1][k][band];
- }
-
- /* Calculation of the MDCT
-@@ -90,41 +89,61 @@ void shine_mdct_sub(shine_global_config *config, int stride)
- * 36 coefficients in the time domain and 18 in the frequency
- * domain.
- */
-- for(k=18; k--; )
-- {
-+ for (k = 18; k--;) {
- int32_t vm;
-+#ifdef __BORLANDC__
-+ uint32_t vm_lo;
-+#else
- uint32_t vm_lo __attribute__((unused));
-+#endif
-
- mul0(vm, vm_lo, mdct_in[35], config->mdct.cos_l[k][35]);
-- for(j=35; j; j-=7) {
-- muladd(vm, vm_lo, mdct_in[j-1], config->mdct.cos_l[k][j-1]);
-- muladd(vm, vm_lo, mdct_in[j-2], config->mdct.cos_l[k][j-2]);
-- muladd(vm, vm_lo, mdct_in[j-3], config->mdct.cos_l[k][j-3]);
-- muladd(vm, vm_lo, mdct_in[j-4], config->mdct.cos_l[k][j-4]);
-- muladd(vm, vm_lo, mdct_in[j-5], config->mdct.cos_l[k][j-5]);
-- muladd(vm, vm_lo, mdct_in[j-6], config->mdct.cos_l[k][j-6]);
-- muladd(vm, vm_lo, mdct_in[j-7], config->mdct.cos_l[k][j-7]);
-+ for (j = 35; j; j -= 7) {
-+ muladd(vm, vm_lo, mdct_in[j - 1], config->mdct.cos_l[k][j - 1]);
-+ muladd(vm, vm_lo, mdct_in[j - 2], config->mdct.cos_l[k][j - 2]);
-+ muladd(vm, vm_lo, mdct_in[j - 3], config->mdct.cos_l[k][j - 3]);
-+ muladd(vm, vm_lo, mdct_in[j - 4], config->mdct.cos_l[k][j - 4]);
-+ muladd(vm, vm_lo, mdct_in[j - 5], config->mdct.cos_l[k][j - 5]);
-+ muladd(vm, vm_lo, mdct_in[j - 6], config->mdct.cos_l[k][j - 6]);
-+ muladd(vm, vm_lo, mdct_in[j - 7], config->mdct.cos_l[k][j - 7]);
- }
- mulz(vm, vm_lo);
- mdct_enc[band][k] = vm;
- }
-
- /* Perform aliasing reduction butterfly */
-- if (band != 0)
-- {
-- cmuls(mdct_enc[band][0], mdct_enc[band-1][17-0], mdct_enc[band][0], mdct_enc[band-1][17-0], MDCT_CS0, MDCT_CA0);
-- cmuls(mdct_enc[band][1], mdct_enc[band-1][17-1], mdct_enc[band][1], mdct_enc[band-1][17-1], MDCT_CS1, MDCT_CA1);
-- cmuls(mdct_enc[band][2], mdct_enc[band-1][17-2], mdct_enc[band][2], mdct_enc[band-1][17-2], MDCT_CS2, MDCT_CA2);
-- cmuls(mdct_enc[band][3], mdct_enc[band-1][17-3], mdct_enc[band][3], mdct_enc[band-1][17-3], MDCT_CS3, MDCT_CA3);
-- cmuls(mdct_enc[band][4], mdct_enc[band-1][17-4], mdct_enc[band][4], mdct_enc[band-1][17-4], MDCT_CS4, MDCT_CA4);
-- cmuls(mdct_enc[band][5], mdct_enc[band-1][17-5], mdct_enc[band][5], mdct_enc[band-1][17-5], MDCT_CS5, MDCT_CA5);
-- cmuls(mdct_enc[band][6], mdct_enc[band-1][17-6], mdct_enc[band][6], mdct_enc[band-1][17-6], MDCT_CS6, MDCT_CA6);
-- cmuls(mdct_enc[band][7], mdct_enc[band-1][17-7], mdct_enc[band][7], mdct_enc[band-1][17-7], MDCT_CS7, MDCT_CA7);
-+ if (band != 0) {
-+ cmuls(mdct_enc[band][0], mdct_enc[band - 1][17 - 0],
-+ mdct_enc[band][0], mdct_enc[band - 1][17 - 0], MDCT_CS0,
-+ MDCT_CA0);
-+ cmuls(mdct_enc[band][1], mdct_enc[band - 1][17 - 1],
-+ mdct_enc[band][1], mdct_enc[band - 1][17 - 1], MDCT_CS1,
-+ MDCT_CA1);
-+ cmuls(mdct_enc[band][2], mdct_enc[band - 1][17 - 2],
-+ mdct_enc[band][2], mdct_enc[band - 1][17 - 2], MDCT_CS2,
-+ MDCT_CA2);
-+ cmuls(mdct_enc[band][3], mdct_enc[band - 1][17 - 3],
-+ mdct_enc[band][3], mdct_enc[band - 1][17 - 3], MDCT_CS3,
-+ MDCT_CA3);
-+ cmuls(mdct_enc[band][4], mdct_enc[band - 1][17 - 4],
-+ mdct_enc[band][4], mdct_enc[band - 1][17 - 4], MDCT_CS4,
-+ MDCT_CA4);
-+ cmuls(mdct_enc[band][5], mdct_enc[band - 1][17 - 5],
-+ mdct_enc[band][5], mdct_enc[band - 1][17 - 5], MDCT_CS5,
-+ MDCT_CA5);
-+ cmuls(mdct_enc[band][6], mdct_enc[band - 1][17 - 6],
-+ mdct_enc[band][6], mdct_enc[band - 1][17 - 6], MDCT_CS6,
-+ MDCT_CA6);
-+ cmuls(mdct_enc[band][7], mdct_enc[band - 1][17 - 7],
-+ mdct_enc[band][7], mdct_enc[band - 1][17 - 7], MDCT_CS7,
-+ MDCT_CA7);
- }
- }
- }
-
- /* Save latest granule's subband samples to be used in the next mdct call */
-- memcpy(config->l3_sb_sample[ch][0], config->l3_sb_sample[ch][config->mpeg.granules_per_frame], sizeof(config->l3_sb_sample[0][0]));
-+ memcpy(config->l3_sb_sample[ch][0],
-+ config->l3_sb_sample[ch][config->mpeg.granules_per_frame],
-+ sizeof(config->l3_sb_sample[0][0]));
- }
- }
-diff --git a/src/lib/l3mdct.h b/src/lib/l3mdct.h
-index 1288259..3018eb9 100644
---- a/src/lib/l3mdct.h
-+++ b/src/lib/l3mdct.h
-@@ -1,7 +1,9 @@
- #ifndef shine_MDCT_H
- #define shine_MDCT_H
-
--void shine_mdct_initialise();
-+#include "types.h"
-+
-+void shine_mdct_initialise(shine_global_config *config);
- void shine_mdct_sub(shine_global_config *config, int stride);
-
- #endif
-diff --git a/src/lib/l3subband.c b/src/lib/l3subband.c
-index 58abf5f..78f428e 100644
---- a/src/lib/l3subband.c
-+++ b/src/lib/l3subband.c
-@@ -1,8 +1,8 @@
- /* L3SubBand */
-
--#include "types.h"
--#include "tables.h"
- #include "l3subband.h"
-+#include "tables.h"
-+#include "types.h"
-
- /*
- * shine_subband_initialise:
-@@ -11,23 +11,21 @@
- * 9th decimal place accuracy of the filterbank tables in the ISO
- * document. The coefficients are stored in #filter#
- */
--void shine_subband_initialise(shine_global_config *config)
--{
-- int i,j;
-+void shine_subband_initialise(shine_global_config *config) {
-+ int i, j;
- double filter;
-
-- for(i=MAX_CHANNELS; i-- ; ) {
-+ for (i = MAX_CHANNELS; i--;) {
- config->subband.off[i] = 0;
- memset(config->subband.x[i], 0, sizeof(config->subband.x[i]));
- }
-
-- for (i=SBLIMIT; i--; )
-- for (j=64; j--; )
-- {
-- if ((filter = 1e9*cos((double)((2*i+1)*(16-j)*PI64))) >= 0)
-- modf(filter+0.5, &filter);
-+ for (i = SBLIMIT; i--;)
-+ for (j = 64; j--;) {
-+ if ((filter = 1e9 * cos((double)((2 * i + 1) * (16 - j) * PI64))) >= 0)
-+ modf(filter + 0.5, &filter);
- else
-- modf(filter-0.5, &filter);
-+ modf(filter - 0.5, &filter);
- /* scale and convert to fixed point before storing */
- config->subband.fl[i][j] = (int32_t)(filter * (0x7fffffff * 1e-9));
- }
-@@ -39,58 +37,90 @@ void shine_subband_initialise(shine_global_config *config)
- * Overlapping window on PCM samples
- * 32 16-bit pcm samples are scaled to fractional 2's complement and
- * concatenated to the end of the window buffer #x#. The updated window
-- * buffer #x# is then windowed by the analysis window #shine_enwindow# to produce
-- * the windowed sample #z#
-- * Calculates the analysis filter bank coefficients
-- * The windowed samples #z# is filtered by the digital filter matrix #filter#
-- * to produce the subband samples #s#. This done by first selectively
-- * picking out values from the windowed samples, and then multiplying
-- * them by the filter matrix, producing 32 subband samples.
-+ * buffer #x# is then windowed by the analysis window #shine_enwindow# to
-+ * produce the windowed sample #z# Calculates the analysis filter bank
-+ * coefficients The windowed samples #z# is filtered by the digital filter
-+ * matrix #filter# to produce the subband samples #s#. This done by first
-+ * selectively picking out values from the windowed samples, and then
-+ * multiplying them by the filter matrix, producing 32 subband samples.
- */
--void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int ch, shine_global_config *config, int stride)
--{
-+void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int ch,
-+ shine_global_config *config, int stride) {
- int32_t y[64];
-- int i,j;
-+ int i, j;
- int16_t *ptr = *buffer;
-
- /* replace 32 oldest samples with 32 new samples */
-- for (i=32;i--;) {
-- config->subband.x[ch][i+config->subband.off[ch]] = ((int32_t)*ptr) << 16;
-+ for (i = 32; i--;) {
-+ config->subband.x[ch][i + config->subband.off[ch]] = ((int32_t)*ptr) << 16;
- ptr += stride;
- }
- *buffer = ptr;
-
-- for (i=64; i--; ) {
-+ for (i = 64; i--;) {
- int32_t s_value;
-+#ifdef __BORLANDC__
-+ uint32_t s_value_lo;
-+#else
- uint32_t s_value_lo __attribute__((unused));
-+#endif
-
-- mul0 (s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (0<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (0<<6)]);
-- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (1<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (1<<6)]);
-- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (2<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (2<<6)]);
-- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (3<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (3<<6)]);
-- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (4<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (4<<6)]);
-- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (5<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (5<<6)]);
-- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (6<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (6<<6)]);
-- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (7<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (7<<6)]);
-- mulz (s_value, s_value_lo);
-+ mul0(s_value, s_value_lo,
-+ config->subband
-+ .x[ch][(config->subband.off[ch] + i + (0 << 6)) & (HAN_SIZE - 1)],
-+ shine_enwindow[i + (0 << 6)]);
-+ muladd(s_value, s_value_lo,
-+ config->subband.x[ch][(config->subband.off[ch] + i + (1 << 6)) &
-+ (HAN_SIZE - 1)],
-+ shine_enwindow[i + (1 << 6)]);
-+ muladd(s_value, s_value_lo,
-+ config->subband.x[ch][(config->subband.off[ch] + i + (2 << 6)) &
-+ (HAN_SIZE - 1)],
-+ shine_enwindow[i + (2 << 6)]);
-+ muladd(s_value, s_value_lo,
-+ config->subband.x[ch][(config->subband.off[ch] + i + (3 << 6)) &
-+ (HAN_SIZE - 1)],
-+ shine_enwindow[i + (3 << 6)]);
-+ muladd(s_value, s_value_lo,
-+ config->subband.x[ch][(config->subband.off[ch] + i + (4 << 6)) &
-+ (HAN_SIZE - 1)],
-+ shine_enwindow[i + (4 << 6)]);
-+ muladd(s_value, s_value_lo,
-+ config->subband.x[ch][(config->subband.off[ch] + i + (5 << 6)) &
-+ (HAN_SIZE - 1)],
-+ shine_enwindow[i + (5 << 6)]);
-+ muladd(s_value, s_value_lo,
-+ config->subband.x[ch][(config->subband.off[ch] + i + (6 << 6)) &
-+ (HAN_SIZE - 1)],
-+ shine_enwindow[i + (6 << 6)]);
-+ muladd(s_value, s_value_lo,
-+ config->subband.x[ch][(config->subband.off[ch] + i + (7 << 6)) &
-+ (HAN_SIZE - 1)],
-+ shine_enwindow[i + (7 << 6)]);
-+ mulz(s_value, s_value_lo);
- y[i] = s_value;
- }
-
-- config->subband.off[ch] = (config->subband.off[ch] + 480) & (HAN_SIZE-1); /* offset is modulo (HAN_SIZE)*/
-+ config->subband.off[ch] = (config->subband.off[ch] + 480) &
-+ (HAN_SIZE - 1); /* offset is modulo (HAN_SIZE)*/
-
-- for (i=SBLIMIT; i--; ) {
-+ for (i = SBLIMIT; i--;) {
- int32_t s_value;
-+#ifdef __BORLANDC__
-+ uint32_t s_value_lo;
-+#else
- uint32_t s_value_lo __attribute__((unused));
-+#endif
-
- mul0(s_value, s_value_lo, config->subband.fl[i][63], y[63]);
-- for (j=63; j; j-=7) {
-- muladd(s_value, s_value_lo, config->subband.fl[i][j-1], y[j-1]);
-- muladd(s_value, s_value_lo, config->subband.fl[i][j-2], y[j-2]);
-- muladd(s_value, s_value_lo, config->subband.fl[i][j-3], y[j-3]);
-- muladd(s_value, s_value_lo, config->subband.fl[i][j-4], y[j-4]);
-- muladd(s_value, s_value_lo, config->subband.fl[i][j-5], y[j-5]);
-- muladd(s_value, s_value_lo, config->subband.fl[i][j-6], y[j-6]);
-- muladd(s_value, s_value_lo, config->subband.fl[i][j-7], y[j-7]);
-+ for (j = 63; j; j -= 7) {
-+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 1], y[j - 1]);
-+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 2], y[j - 2]);
-+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 3], y[j - 3]);
-+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 4], y[j - 4]);
-+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 5], y[j - 5]);
-+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 6], y[j - 6]);
-+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 7], y[j - 7]);
- }
- mulz(s_value, s_value_lo);
- s[i] = s_value;
-diff --git a/src/lib/l3subband.h b/src/lib/l3subband.h
-index 9bfe861..5cfbef5 100644
---- a/src/lib/l3subband.h
-+++ b/src/lib/l3subband.h
-@@ -1,9 +1,11 @@
- #ifndef L3SUBBAND_H
- #define L3SUBBAND_H
-
-+#include "types.h"
- #include <stdint.h>
-
--void shine_subband_initialise( shine_global_config *config );
--void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int k, shine_global_config *config, int stride);
-+void shine_subband_initialise(shine_global_config *config);
-+void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int k,
-+ shine_global_config *config, int stride);
-
- #endif
-diff --git a/src/lib/layer3.c b/src/lib/layer3.c
-index 0b574ad..f3d1ecd 100644
---- a/src/lib/layer3.c
-+++ b/src/lib/layer3.c
-@@ -1,28 +1,27 @@
- /* layer3.c */
-
--#include "types.h"
--#include "tables.h"
- #include "layer3.h"
--#include "l3subband.h"
--#include "l3mdct.h"
--#include "l3loop.h"
- #include "bitstream.h"
- #include "l3bitstream.h"
-+#include "l3loop.h"
-+#include "l3mdct.h"
-+#include "l3subband.h"
-+#include "tables.h"
-+#include "types.h"
-
- static int granules_per_frame[4] = {
- 1, /* MPEG 2.5 */
-- -1, /* Reserved */
-+ -1, /* Reserved */
- 1, /* MPEG II */
-- 2 /* MPEG I */
-+ 2 /* MPEG I */
- };
-
- /* Set default values for important vars */
--void shine_set_config_mpeg_defaults(shine_mpeg_t *mpeg)
--{
-+void shine_set_config_mpeg_defaults(shine_mpeg_t *mpeg) {
- mpeg->bitr = 128;
- mpeg->emph = NONE;
- mpeg->copyright = 0;
-- mpeg->original = 1;
-+ mpeg->original = 1;
- }
-
- int shine_mpeg_version(int samplerate_index) {
-@@ -38,56 +37,56 @@ int shine_mpeg_version(int samplerate_index) {
- return MPEG_25;
- }
-
--int shine_find_samplerate_index(int freq)
--{
-+int shine_find_samplerate_index(int freq) {
- int i;
-
-- for(i=0;i<9;i++)
-- if(freq==samplerates[i]) return i;
-+ for (i = 0; i < 9; i++)
-+ if (freq == samplerates[i])
-+ return i;
-
- return -1; /* error - not a valid samplerate for encoder */
- }
-
--int shine_find_bitrate_index(int bitr, int mpeg_version)
--{
-+int shine_find_bitrate_index(int bitr, int mpeg_version) {
- int i;
-
-- for(i=0;i<16;i++)
-- if(bitr==bitrates[i][mpeg_version]) return i;
-+ for (i = 0; i < 16; i++)
-+ if (bitr == bitrates[i][mpeg_version])
-+ return i;
-
- return -1; /* error - not a valid samplerate for encoder */
- }
-
--int shine_check_config(int freq, int bitr)
--{
-+int shine_check_config(int freq, int bitr) {
- int samplerate_index, bitrate_index, mpeg_version;
-
- samplerate_index = shine_find_samplerate_index(freq);
-- if (samplerate_index < 0) return -1;
-+ if (samplerate_index < 0)
-+ return -1;
-
- mpeg_version = shine_mpeg_version(samplerate_index);
-
- bitrate_index = shine_find_bitrate_index(bitr, mpeg_version);
-- if (bitrate_index < 0) return -1;
-+ if (bitrate_index < 0)
-+ return -1;
-
- return mpeg_version;
- }
-
--int shine_samples_per_pass(shine_t s)
--{
-+int shine_samples_per_pass(shine_t s) {
- return s->mpeg.granules_per_frame * GRANULE_SIZE;
- }
-
- /* Compute default encoding values. */
--shine_global_config *shine_initialise(shine_config_t *pub_config)
--{
-+shine_global_config *shine_initialise(shine_config_t *pub_config) {
- double avg_slots_per_frame;
- shine_global_config *config;
-
-- if (shine_check_config(pub_config->wave.samplerate, pub_config->mpeg.bitr) < 0)
-+ if (shine_check_config(pub_config->wave.samplerate, pub_config->mpeg.bitr) <
-+ 0)
- return NULL;
-
-- config = calloc(1,sizeof(shine_global_config));
-+ config = calloc(1, sizeof(shine_global_config));
- if (config == NULL)
- return config;
-
-@@ -96,65 +95,71 @@ shine_global_config *shine_initialise(shine_config_t *pub_config)
- shine_loop_initialise(config);
-
- /* Copy public config. */
-- config->wave.channels = pub_config->wave.channels;
-- config->wave.samplerate = pub_config->wave.samplerate;
-- config->mpeg.mode = pub_config->mpeg.mode;
-- config->mpeg.bitr = pub_config->mpeg.bitr;
-- config->mpeg.emph = pub_config->mpeg.emph;
-- config->mpeg.copyright = pub_config->mpeg.copyright;
-- config->mpeg.original = pub_config->mpeg.original;
-+ config->wave.channels = pub_config->wave.channels;
-+ config->wave.samplerate = pub_config->wave.samplerate;
-+ config->mpeg.mode = pub_config->mpeg.mode;
-+ config->mpeg.bitr = pub_config->mpeg.bitr;
-+ config->mpeg.emph = pub_config->mpeg.emph;
-+ config->mpeg.copyright = pub_config->mpeg.copyright;
-+ config->mpeg.original = pub_config->mpeg.original;
-
- /* Set default values. */
-- config->ResvMax = 0;
-- config->ResvSize = 0;
-- config->mpeg.layer = LAYER_III;
-- config->mpeg.crc = 0;
-- config->mpeg.ext = 0;
-- config->mpeg.mode_ext = 0;
-- config->mpeg.bits_per_slot = 8;
--
-- config->mpeg.samplerate_index = shine_find_samplerate_index(config->wave.samplerate);
-- config->mpeg.version = shine_mpeg_version(config->mpeg.samplerate_index);
-- config->mpeg.bitrate_index = shine_find_bitrate_index(config->mpeg.bitr, config->mpeg.version);
-+ config->ResvMax = 0;
-+ config->ResvSize = 0;
-+ config->mpeg.layer = LAYER_III;
-+ config->mpeg.crc = 0;
-+ config->mpeg.ext = 0;
-+ config->mpeg.mode_ext = 0;
-+ config->mpeg.bits_per_slot = 8;
-+
-+ config->mpeg.samplerate_index =
-+ shine_find_samplerate_index(config->wave.samplerate);
-+ config->mpeg.version = shine_mpeg_version(config->mpeg.samplerate_index);
-+ config->mpeg.bitrate_index =
-+ shine_find_bitrate_index(config->mpeg.bitr, config->mpeg.version);
- config->mpeg.granules_per_frame = granules_per_frame[config->mpeg.version];
-
- /* Figure average number of 'slots' per frame. */
-- avg_slots_per_frame = ((double)config->mpeg.granules_per_frame * GRANULE_SIZE /
-- ((double)config->wave.samplerate)) *
-- (1000*(double)config->mpeg.bitr /
-- (double)config->mpeg.bits_per_slot);
-+ avg_slots_per_frame =
-+ ((double)config->mpeg.granules_per_frame * GRANULE_SIZE /
-+ ((double)config->wave.samplerate)) *
-+ (1000 * (double)config->mpeg.bitr / (double)config->mpeg.bits_per_slot);
-
-- config->mpeg.whole_slots_per_frame = (int)avg_slots_per_frame;
-+ config->mpeg.whole_slots_per_frame = (int)avg_slots_per_frame;
-
-- config->mpeg.frac_slots_per_frame = avg_slots_per_frame - (double)config->mpeg.whole_slots_per_frame;
-- config->mpeg.slot_lag = -config->mpeg.frac_slots_per_frame;
-+ config->mpeg.frac_slots_per_frame =
-+ avg_slots_per_frame - (double)config->mpeg.whole_slots_per_frame;
-+ config->mpeg.slot_lag = -config->mpeg.frac_slots_per_frame;
-
-- if(config->mpeg.frac_slots_per_frame==0)
-+ if (config->mpeg.frac_slots_per_frame == 0)
- config->mpeg.padding = 0;
-
- shine_open_bit_stream(&config->bs, BUFFER_SIZE);
-
-- memset((char *)&config->side_info,0,sizeof(shine_side_info_t));
-+ memset((char *)&config->side_info, 0, sizeof(shine_side_info_t));
-
- /* determine the mean bitrate for main data */
- if (config->mpeg.granules_per_frame == 2) /* MPEG 1 */
-- config->sideinfo_len = 8 * ((config->wave.channels==1) ? 4 + 17 : 4 + 32);
-- else /* MPEG 2 */
-- config->sideinfo_len = 8 * ((config->wave.channels==1) ? 4 + 9 : 4 + 17);
-+ config->sideinfo_len = 8 * ((config->wave.channels == 1) ? 4 + 17 : 4 + 32);
-+ else /* MPEG 2 */
-+ config->sideinfo_len = 8 * ((config->wave.channels == 1) ? 4 + 9 : 4 + 17);
-
- return config;
- }
-
--static unsigned char *shine_encode_buffer_internal(shine_global_config *config, int *written, int stride)
--{
-- if(config->mpeg.frac_slots_per_frame)
-- {
-- config->mpeg.padding = (config->mpeg.slot_lag <= (config->mpeg.frac_slots_per_frame - 1.0));
-- config->mpeg.slot_lag += (config->mpeg.padding - config->mpeg.frac_slots_per_frame);
-+static unsigned char *shine_encode_buffer_internal(shine_global_config *config,
-+ int *written, int stride) {
-+ if (config->mpeg.frac_slots_per_frame) {
-+ config->mpeg.padding =
-+ (config->mpeg.slot_lag <= (config->mpeg.frac_slots_per_frame - 1.0));
-+ config->mpeg.slot_lag +=
-+ (config->mpeg.padding - config->mpeg.frac_slots_per_frame);
- }
-
-- config->mpeg.bits_per_frame = 8*(config->mpeg.whole_slots_per_frame + config->mpeg.padding);
-- config->mean_bits = (config->mpeg.bits_per_frame - config->sideinfo_len)/config->mpeg.granules_per_frame;
-+ config->mpeg.bits_per_frame =
-+ 8 * (config->mpeg.whole_slots_per_frame + config->mpeg.padding);
-+ config->mean_bits = (config->mpeg.bits_per_frame - config->sideinfo_len) /
-+ config->mpeg.granules_per_frame;
-
- /* apply mdct to the polyphase output */
- shine_mdct_sub(config, stride);
-@@ -172,8 +177,8 @@ static unsigned char *shine_encode_buffer_internal(shine_global_config *config,
- return config->bs.data;
- }
-
--unsigned char *shine_encode_buffer(shine_global_config *config, int16_t **data, int *written)
--{
-+unsigned char *shine_encode_buffer(shine_global_config *config, int16_t **data,
-+ int *written) {
- config->buffer[0] = data[0];
- if (config->wave.channels == 2)
- config->buffer[1] = data[1];
-@@ -181,8 +186,8 @@ unsigned char *shine_encode_buffer(shine_global_config *config, int16_t **data,
- return shine_encode_buffer_internal(config, written, 1);
- }
-
--unsigned char *shine_encode_buffer_interleaved(shine_global_config *config, int16_t *data, int *written)
--{
-+unsigned char *shine_encode_buffer_interleaved(shine_global_config *config,
-+ int16_t *data, int *written) {
- config->buffer[0] = data;
- if (config->wave.channels == 2)
- config->buffer[1] = data + 1;
-@@ -197,7 +202,6 @@ unsigned char *shine_flush(shine_global_config *config, int *written) {
- return config->bs.data;
- }
-
--
- void shine_close(shine_global_config *config) {
- shine_close_bit_stream(&config->bs);
- free(config);
-diff --git a/src/lib/layer3.h b/src/lib/layer3.h
-index 7fb11e0..d72b6a4 100644
---- a/src/lib/layer3.h
-+++ b/src/lib/layer3.h
-@@ -5,48 +5,31 @@
-
- /* This is the struct used to tell the encoder about the input PCM */
-
--enum channels {
-- PCM_MONO = 1,
-- PCM_STEREO = 2
--};
-+enum channels { PCM_MONO = 1, PCM_STEREO = 2 };
-
--enum mpeg_versions {
-- MPEG_I = 3,
-- MPEG_II = 2,
-- MPEG_25 = 0
--};
-+enum mpeg_versions { MPEG_I = 3, MPEG_II = 2, MPEG_25 = 0 };
-
- /* Only Layer III currently implemented. */
--enum mpeg_layers {
-- LAYER_III = 1
--};
-+enum mpeg_layers { LAYER_III = 1 };
-
- typedef struct {
-- enum channels channels;
-- int samplerate;
-+ enum channels channels;
-+ int samplerate;
- } shine_wave_t;
-
--/* This is the struct the encoder uses to tell the encoder about the output MP3 */
-+/* This is the struct the encoder uses to tell the encoder about the output MP3
-+ */
-
--enum modes {
-- STEREO = 0,
-- JOINT_STEREO = 1,
-- DUAL_CHANNEL = 2,
-- MONO = 3
--};
-+enum modes { STEREO = 0, JOINT_STEREO = 1, DUAL_CHANNEL = 2, MONO = 3 };
-
--enum emph {
-- NONE = 0,
-- MU50_15 = 1,
-- CITT = 3
--};
-+enum emph { NONE = 0, MU50_15 = 1, CITT = 3 };
-
- typedef struct {
-- enum modes mode; /* Stereo mode */
-- int bitr; /* Must conform to known bitrate */
-- enum emph emph; /* De-emphasis */
-- int copyright;
-- int original;
-+ enum modes mode; /* Stereo mode */
-+ int bitr; /* Must conform to known bitrate */
-+ enum emph emph; /* De-emphasis */
-+ int copyright;
-+ int original;
- } shine_mpeg_t;
-
- typedef struct {
-@@ -60,7 +43,7 @@ typedef struct {
- * const int samplerates[9] = {
- * 44100, 48000, 32000, // MPEG-I
- * 22050, 24000, 16000, // MPEG-II
-- * 11025, 12000, 8000 // MPEG-2.5
-+ * 11025, 12000, 8000 // MPEG-2.5
- * };
- *
- * const int bitrates[16][4] = {
-@@ -92,37 +75,37 @@ typedef struct shine_global_flags *shine_t;
- /* Fill in a `mpeg_t` structure with default values. */
- void shine_set_config_mpeg_defaults(shine_mpeg_t *mpeg);
-
--/* Check if a given bitrate is supported by the encoder (see `bitrates` above for a list
-- * of acceptable values. */
-+/* Check if a given bitrate is supported by the encoder (see `bitrates` above
-+ * for a list of acceptable values. */
- int shine_find_bitrate_index(int bitr, int mpeg_version);
-
--/* Check if a given samplerate is supported by the encoder (see `samplerates` above for a list
-- * of acceptable values. */
-+/* Check if a given samplerate is supported by the encoder (see `samplerates`
-+ * above for a list of acceptable values. */
- int shine_find_samplerate_index(int freq);
-
- /* Returns the MPEG version used for the given samplerate index. See above
-- * `mpeg_versions` for a list of possible values. */
-+ * `mpeg_versions` for a list of possible values. */
- int shine_mpeg_version(int samplerate_index);
-
--/* Check if a given bitrate and samplerate is supported by the encoder (see `samplerates`
-- * and `bitrates` above for a list of acceptable values).
-+/* Check if a given bitrate and samplerate is supported by the encoder (see
-+ * `samplerates` and `bitrates` above for a list of acceptable values).
- *
- * Returns -1 on error, mpeg_version on success. */
- int shine_check_config(int freq, int bitr);
-
- /* Pass a pointer to a `config_t` structure and returns an initialized
-- * encoder.
-+ * encoder.
- *
- * Configuration data is copied over to the encoder. It is not possible
- * to change its values after initializing the encoder at the moment.
- *
-- * Checking for valid configuration values is left for the application to
-- * implement. You can use the `shine_find_bitrate_index` and
-- * `shine_find_samplerate_index` functions or the `bitrates` and
-- * `samplerates` arrays above to check those parameters. Mone and stereo
-+ * Checking for valid configuration values is left for the application to
-+ * implement. You can use the `shine_find_bitrate_index` and
-+ * `shine_find_samplerate_index` functions or the `bitrates` and
-+ * `samplerates` arrays above to check those parameters. Mone and stereo
- * mode for wave and mpeg should also be consistent with each other.
- *
-- * This function returns NULL if it was not able to allocate memory data for
-+ * This function returns NULL if it was not able to allocate memory data for
- * the encoder. */
- shine_t shine_initialise(shine_config_t *config);
-
-@@ -132,26 +115,28 @@ shine_t shine_initialise(shine_config_t *config);
- /* Returns audio samples expected in each frame. */
- int shine_samples_per_pass(shine_t s);
-
--/* Encode audio data. Source data must have `shine_samples_per_pass(s)` audio samples per
-- * channels. Mono encoder only expect one channel.
-+/* Encode audio data. Source data must have `shine_samples_per_pass(s)` audio
-+ * samples per channels. Mono encoder only expect one channel.
- *
-- * Returns a pointer to freshly encoded data while `written` contains the size of
-- * available data. This pointer's memory is handled by the library and is only valid
-- * until the next call to `shine_encode_buffer` or `shine_close` and may be NULL if no data
-- * was written. */
-+ * Returns a pointer to freshly encoded data while `written` contains the size
-+ * of available data. This pointer's memory is handled by the library and is
-+ * only valid until the next call to `shine_encode_buffer` or `shine_close` and
-+ * may be NULL if no data was written. */
- unsigned char *shine_encode_buffer(shine_t s, int16_t **data, int *written);
-
--/* Encode interleaved audio data. Source data must have `shine_samples_per_pass(s)` audio samples per
-- * channels. Mono encoder only expect one channel.
-+/* Encode interleaved audio data. Source data must have
-+ * `shine_samples_per_pass(s)` audio samples per channels. Mono encoder only
-+ * expect one channel.
- *
-- * Returns a pointer to freshly encoded data while `written` contains the size of
-- * available data. This pointer's memory is handled by the library and is only valid
-- * until the next call to `shine_encode_buffer` or `shine_close` and may be NULL if no data
-- * was written. */
--unsigned char *shine_encode_buffer_interleaved(shine_t s, int16_t *data, int *written);
--
--/* Flush all data currently in the encoding buffer. Should be used before closing
-- * the encoder, to make all encoded data has been written. */
-+ * Returns a pointer to freshly encoded data while `written` contains the size
-+ * of available data. This pointer's memory is handled by the library and is
-+ * only valid until the next call to `shine_encode_buffer` or `shine_close` and
-+ * may be NULL if no data was written. */
-+unsigned char *shine_encode_buffer_interleaved(shine_t s, int16_t *data,
-+ int *written);
-+
-+/* Flush all data currently in the encoding buffer. Should be used before
-+ * closing the encoder, to make all encoded data has been written. */
- unsigned char *shine_flush(shine_t s, int *written);
-
- /* Close an encoder, freeing all associated memory. Encoder handler is not
-diff --git a/src/lib/mult_mips_gcc.h b/src/lib/mult_mips_gcc.h
-index 092ed84..d49d215 100644
---- a/src/lib/mult_mips_gcc.h
-+++ b/src/lib/mult_mips_gcc.h
-@@ -1,51 +1,50 @@
- #include <stdint.h>
-
--#define mul(a,b) \
--({ \
-- register int32_t res; \
-- __asm__ __volatile__("mult %0, %1" : : "r" (a), "r" (b)); \
-- __asm__ __volatile__("mfhi %0" : "=r" (res)); \
-- res; \
--})
-+#define mul(a, b) \
-+ ({ \
-+ register int32_t res; \
-+ __asm__ __volatile__("mult %0, %1" : : "r"(a), "r"(b)); \
-+ __asm__ __volatile__("mfhi %0" : "=r"(res)); \
-+ res; \
-+ })
-
--#define mul0(hi,lo,a,b) \
-- __asm__ __volatile__("mult %0, %1" : : "r" (a), "r" (b))
-+#define mul0(hi, lo, a, b) \
-+ __asm__ __volatile__("mult %0, %1" : : "r"(a), "r"(b))
-
--#define muladd(hi,lo,a,b) \
-- __asm__ __volatile__("madd %0, %1" : : "r" (a), "r" (b))
-+#define muladd(hi, lo, a, b) \
-+ __asm__ __volatile__("madd %0, %1" : : "r"(a), "r"(b))
-
--#define mulsub(hi,lo,a,b) \
-- __asm__ __volatile__("msub %0, %1" : : "r" (a), "r" (b))
-+#define mulsub(hi, lo, a, b) \
-+ __asm__ __volatile__("msub %0, %1" : : "r"(a), "r"(b))
-
--#define mulz(hi,lo) \
--do { \
-- register int32_t t; \
-- __asm__ __volatile__("mfhi %0" : "=r" (t)); \
-- (hi) = t; \
--} while (0)
-+#define mulz(hi, lo) \
-+ do { \
-+ register int32_t t; \
-+ __asm__ __volatile__("mfhi %0" : "=r"(t)); \
-+ (hi) = t; \
-+ } while (0)
-
--#define cmuls(dre, dim, are, aim, bre, bim) \
--do { \
-- register int32_t t1, t2, tre; \
-- __asm__ __volatile__("mult %0, %1" : : "r" (are), "r" (bre)); \
-- __asm__ __volatile__("msub %0, %1" : : "r" (aim), "r" (bim)); \
-- __asm__ __volatile__("mfhi %0; mflo %1" : "=r" (t1), "=r" (t2)); \
-- tre = (t1 << 1) | ((uint32_t)t2 >> 31); \
-- __asm__ __volatile__("mult %0, %1" : : "r" (are), "r" (bim)); \
-- __asm__ __volatile__("madd %0, %1" : : "r" (bre), "r" (aim)); \
-- dre = tre; \
-- __asm__ __volatile__("mfhi %0; mflo %1" : "=r" (t1), "=r" (t2)); \
-- dim = (t1 << 1) | ((uint32_t)t2 >> 31); \
--} while (0)
-+#define cmuls(dre, dim, are, aim, bre, bim) \
-+ do { \
-+ register int32_t t1, t2, tre; \
-+ __asm__ __volatile__("mult %0, %1" : : "r"(are), "r"(bre)); \
-+ __asm__ __volatile__("msub %0, %1" : : "r"(aim), "r"(bim)); \
-+ __asm__ __volatile__("mfhi %0; mflo %1" : "=r"(t1), "=r"(t2)); \
-+ tre = (t1 << 1) | ((uint32_t)t2 >> 31); \
-+ __asm__ __volatile__("mult %0, %1" : : "r"(are), "r"(bim)); \
-+ __asm__ __volatile__("madd %0, %1" : : "r"(bre), "r"(aim)); \
-+ dre = tre; \
-+ __asm__ __volatile__("mfhi %0; mflo %1" : "=r"(t1), "=r"(t2)); \
-+ dim = (t1 << 1) | ((uint32_t)t2 >> 31); \
-+ } while (0)
-
- #if __mips_isa_rev >= 2
--static inline uint32_t SWAB32(uint32_t x)
--{
-- __asm__(
-- " wsbh %0, %1 \n"
-- " rotr %0, %0, 16 \n"
-- : "=r" (x) : "r" (x));
-- return x;
-+static inline uint32_t SWAB32(uint32_t x) {
-+ __asm__(" wsbh %0, %1 \n"
-+ " rotr %0, %0, 16 \n"
-+ : "=r"(x)
-+ : "r"(x));
-+ return x;
- }
- #define SWAB32 SWAB32
- #endif
-diff --git a/src/lib/mult_noarch_gcc.h b/src/lib/mult_noarch_gcc.h
-index 516e66c..2ee207e 100644
---- a/src/lib/mult_noarch_gcc.h
-+++ b/src/lib/mult_noarch_gcc.h
-@@ -1,34 +1,40 @@
- #include <stdint.h>
-
- #ifndef mul
--#define mul(a,b) (int32_t) ( ( ((int64_t) a) * ((int64_t) b) ) >>32 )
-+#define mul(a, b) (int32_t)((((int64_t)a) * ((int64_t)b)) >> 32)
- #endif
-
- #ifndef muls
--#define muls(a,b) (int32_t) ( ( ((int64_t) a) * ((int64_t) b) ) >>31 )
-+#define muls(a, b) (int32_t)((((int64_t)a) * ((int64_t)b)) >> 31)
- #endif
-
- #ifndef mulr
--#define mulr(a,b) (int32_t) ( ( ( ((int64_t) a) * ((int64_t) b)) + 0x80000000LL ) >>32 )
-+#define mulr(a, b) \
-+ (int32_t)(((((int64_t)a) * ((int64_t)b)) + 0x80000000LL) >> 32)
- #endif
-
- #ifndef mulsr
--#define mulsr(a,b) (int32_t) ( ( ( ((int64_t) a) * ((int64_t) b)) + 0x40000000LL ) >>31 )
-+#define mulsr(a, b) \
-+ (int32_t)(((((int64_t)a) * ((int64_t)b)) + 0x40000000LL) >> 31)
- #endif
-
- #ifndef mul0
--#define mul0(hi,lo,a,b) ((hi) = mul((a), (b)))
--#define muladd(hi,lo,a,b) ((hi) += mul((a), (b)))
--#define mulsub(hi,lo,a,b) ((hi) -= mul((a), (b)))
--#define mulz(hi,lo)
-+#define mul0(hi, lo, a, b) ((hi) = mul((a), (b)))
-+#define muladd(hi, lo, a, b) ((hi) += mul((a), (b)))
-+#define mulsub(hi, lo, a, b) ((hi) -= mul((a), (b)))
-+#define mulz(hi, lo)
- #endif
-
- #ifndef cmuls
--#define cmuls(dre, dim, are, aim, bre, bim) \
--do { \
-- int32_t tre; \
-- (tre) = (int32_t) (((int64_t) (are) * (int64_t) (bre) - (int64_t) (aim) * (int64_t) (bim)) >> 31); \
-- (dim) = (int32_t) (((int64_t) (are) * (int64_t) (bim) + (int64_t) (aim) * (int64_t) (bre)) >> 31); \
-- (dre) = tre; \
--} while (0)
-+#define cmuls(dre, dim, are, aim, bre, bim) \
-+ do { \
-+ int32_t tre; \
-+ (tre) = (int32_t)(((int64_t)(are) * (int64_t)(bre) - \
-+ (int64_t)(aim) * (int64_t)(bim)) >> \
-+ 31); \
-+ (dim) = (int32_t)(((int64_t)(are) * (int64_t)(bim) + \
-+ (int64_t)(aim) * (int64_t)(bre)) >> \
-+ 31); \
-+ (dre) = tre; \
-+ } while (0)
- #endif
-diff --git a/src/lib/mult_sarm_gcc.h b/src/lib/mult_sarm_gcc.h
-index d229eff..0cf8e08 100644
---- a/src/lib/mult_sarm_gcc.h
-+++ b/src/lib/mult_sarm_gcc.h
-@@ -2,108 +2,102 @@
-
- /* Fractional multiply */
- #if __ARM_ARCH >= 6
--#define mul(x,y) \
--({ \
-- register int32_t result; \
-- asm ("smmul %0, %2, %1" : "=r" (result) : "r" (x), "r" (y)); \
-- result ;\
--})
-+#define mul(x, y) \
-+ ({ \
-+ register int32_t result; \
-+ asm("smmul %0, %2, %1" : "=r"(result) : "r"(x), "r"(y)); \
-+ result; \
-+ })
- #else
--#define mul(x,y) \
--({ \
-- register int32_t result; \
-- asm ("smull r3, %0, %2, %1" : "=r" (result) : "r" (x), "r" (y) : "r3"); \
-- result ; \
--})
-+#define mul(x, y) \
-+ ({ \
-+ register int32_t result; \
-+ asm("smull r3, %0, %2, %1" : "=r"(result) : "r"(x), "r"(y) : "r3"); \
-+ result; \
-+ })
- #endif
-
- /* Fractional multiply with single bit left shift. */
--#define muls(x,y) \
--({ \
-- register int32_t result; \
-- asm ( \
-- "smull r3, %0, %2, %1\n\t" \
-- "movs r3, r3, lsl #1\n\t" \
-- "adc %0, %0, %0" \
-- : "=r" (result) : "r" (x), "r" (y) : "r3", "cc" \
-- ); \
-- result; \
--})
--
-+#define muls(x, y) \
-+ ({ \
-+ register int32_t result; \
-+ asm("smull r3, %0, %2, %1\n\t" \
-+ "movs r3, r3, lsl #1\n\t" \
-+ "adc %0, %0, %0" \
-+ : "=r"(result) \
-+ : "r"(x), "r"(y) \
-+ : "r3", "cc"); \
-+ result; \
-+ })
-
- #if __ARM_ARCH >= 6
--#define mulr(x,y) \
--({ \
-- register int32_t result; \
-- asm ( \
-- "smmulr %0, %2, %1" : "=r" (result) : "r" (x), "r" (y) \
-- ); \
-- result; \
--})
-+#define mulr(x, y) \
-+ ({ \
-+ register int32_t result; \
-+ asm("smmulr %0, %2, %1" : "=r"(result) : "r"(x), "r"(y)); \
-+ result; \
-+ })
- #else
--#define mulr(x,y) \
--({ \
-- register int32_t result; \
-- asm ( \
-- "smull r3, %0, %2, %1\n\t" \
-- "adds r3, r3, #0x80000000\n\t" \
-- "adc %0, %0, #0" \
-- : "=r" (result) : "r" (x), "r" (y) : "r3", "cc" \
-- ); \
-- result; \
--})
-+#define mulr(x, y) \
-+ ({ \
-+ register int32_t result; \
-+ asm("smull r3, %0, %2, %1\n\t" \
-+ "adds r3, r3, #0x80000000\n\t" \
-+ "adc %0, %0, #0" \
-+ : "=r"(result) \
-+ : "r"(x), "r"(y) \
-+ : "r3", "cc"); \
-+ result; \
-+ })
- #endif
-
--#define mulsr(x,y) \
--({ \
-- register int32_t result; \
-- asm ( \
-- "smull r3, %0, %1, %2\n\t" \
-- "movs r3, r3, lsl #1\n\t" \
-- "adc %0, %0, %0\n\t" \
-- "adds r3, r3, #0x80000000\n\t" \
-- "adc %0, %0, #0" \
-- : "=r" (result) : "r" (x), "r" (y) : "r3", "cc" \
-- ); \
-- result; \
--})
-+#define mulsr(x, y) \
-+ ({ \
-+ register int32_t result; \
-+ asm("smull r3, %0, %1, %2\n\t" \
-+ "movs r3, r3, lsl #1\n\t" \
-+ "adc %0, %0, %0\n\t" \
-+ "adds r3, r3, #0x80000000\n\t" \
-+ "adc %0, %0, #0" \
-+ : "=r"(result) \
-+ : "r"(x), "r"(y) \
-+ : "r3", "cc"); \
-+ result; \
-+ })
-
--#define mul0(hi,lo,a,b) \
-- asm ("smull %0, %1, %2, %3" : "=r" (lo), "=r" (hi) : "r" (a), "r" (b))
-+#define mul0(hi, lo, a, b) \
-+ asm("smull %0, %1, %2, %3" : "=r"(lo), "=r"(hi) : "r"(a), "r"(b))
-
--#define muladd(hi,lo,a,b) \
-- asm ("smlal %0, %1, %2, %3" : "+r" (lo), "+r" (hi) : "r" (a), "r" (b))
-+#define muladd(hi, lo, a, b) \
-+ asm("smlal %0, %1, %2, %3" : "+r"(lo), "+r"(hi) : "r"(a), "r"(b))
-
--#define mulsub(hi,lo,a,b) \
-- asm ("smlal %0, %1, %2, %3" : "+r" (lo), "+r" (hi) : "r" (a), "r" (-(b)))
-+#define mulsub(hi, lo, a, b) \
-+ asm("smlal %0, %1, %2, %3" : "+r"(lo), "+r"(hi) : "r"(a), "r"(-(b)))
-
--#define mulz(hi,lo)
-+#define mulz(hi, lo)
-
--#define cmuls(dre, dim, are, aim, bre, bim) \
--do { \
-- register int32_t tre, tim; \
-- asm ( \
-- "smull r3, %0, %2, %4\n\t" \
-- "smlal r3, %0, %3, %5\n\t" \
-- "movs r3, r3, lsl #1\n\t" \
-- "adc %0, %0, %0\n\t" \
-- "smull r3, %1, %2, %6\n\t" \
-- "smlal r3, %1, %4, %3\n\t" \
-- "movs r3, r3, lsl #1\n\t" \
-- "adc %1, %1, %1\n\t" \
-- : "=&r" (tre), "=&r" (tim) \
-- : "r" (are), "r" (aim), "r" (bre), "r" (-(bim)), "r" (bim) \
-- : "r3", "cc" \
-- ); \
-- dre = tre; \
-- dim = tim; \
--} while (0)
-+#define cmuls(dre, dim, are, aim, bre, bim) \
-+ do { \
-+ register int32_t tre, tim; \
-+ asm("smull r3, %0, %2, %4\n\t" \
-+ "smlal r3, %0, %3, %5\n\t" \
-+ "movs r3, r3, lsl #1\n\t" \
-+ "adc %0, %0, %0\n\t" \
-+ "smull r3, %1, %2, %6\n\t" \
-+ "smlal r3, %1, %4, %3\n\t" \
-+ "movs r3, r3, lsl #1\n\t" \
-+ "adc %1, %1, %1\n\t" \
-+ : "=&r"(tre), "=&r"(tim) \
-+ : "r"(are), "r"(aim), "r"(bre), "r"(-(bim)), "r"(bim) \
-+ : "r3", "cc"); \
-+ dre = tre; \
-+ dim = tim; \
-+ } while (0)
-
- #if __ARM_ARCH >= 6
--static inline uint32_t SWAB32(uint32_t x)
--{
-- asm ("rev %0, %1" : "=r" (x) : "r" (x));
-- return x;
-+static inline uint32_t SWAB32(uint32_t x) {
-+ asm("rev %0, %1" : "=r"(x) : "r"(x));
-+ return x;
- }
- #define SWAB32 SWAB32
- #endif
-diff --git a/src/lib/reservoir.c b/src/lib/reservoir.c
-index ca84f3d..cea0a9b 100644
---- a/src/lib/reservoir.c
-+++ b/src/lib/reservoir.c
-@@ -2,13 +2,13 @@
- * Layer3 bit reservoir: Described in C.1.5.4.2.2 of the IS
- */
-
--#include "types.h"
--#include "layer3.h"
--#include "l3loop.h"
--#include "huffman.h"
-+#include "reservoir.h"
- #include "bitstream.h"
-+#include "huffman.h"
- #include "l3bitstream.h"
--#include "reservoir.h"
-+#include "l3loop.h"
-+#include "layer3.h"
-+#include "types.h"
-
- /*
- * shine_max_reservoir_bits:
-@@ -17,36 +17,34 @@
- * allowance for the current granule based on reservoir size
- * and perceptual entropy.
- */
--int shine_max_reservoir_bits (double *pe, shine_global_config *config )
--{
-+int shine_max_reservoir_bits(double *pe, shine_global_config *config) {
- int more_bits, max_bits, add_bits, over_bits;
- int mean_bits = config->mean_bits;
-
- mean_bits /= config->wave.channels;
- max_bits = mean_bits;
-
-- if(max_bits>4095)
-+ if (max_bits > 4095)
- max_bits = 4095;
-- if(!config->ResvMax)
-+ if (!config->ResvMax)
- return max_bits;
-
- more_bits = *pe * 3.1 - mean_bits;
- add_bits = 0;
-- if(more_bits>100)
-- {
-+ if (more_bits > 100) {
- int frac = (config->ResvSize * 6) / 10;
-
-- if(frac<more_bits)
-+ if (frac < more_bits)
- add_bits = frac;
- else
- add_bits = more_bits;
- }
-- over_bits = config->ResvSize - ((config->ResvMax <<3) / 10) - add_bits;
-- if (over_bits>0)
-+ over_bits = config->ResvSize - ((config->ResvMax << 3) / 10) - add_bits;
-+ if (over_bits > 0)
- add_bits += over_bits;
-
- max_bits += add_bits;
-- if(max_bits>4095)
-+ if (max_bits > 4095)
- max_bits = 4095;
- return max_bits;
- }
-@@ -57,9 +55,9 @@ int shine_max_reservoir_bits (double *pe, shine_global_config *config )
- * Called after a granule's bit allocation. Readjusts the size of
- * the reservoir to reflect the granule's usage.
- */
--void shine_ResvAdjust(gr_info *gi, shine_global_config *config )
--{
-- config->ResvSize += (config->mean_bits / config->wave.channels) - gi->part2_3_length;
-+void shine_ResvAdjust(gr_info *gi, shine_global_config *config) {
-+ config->ResvSize +=
-+ (config->mean_bits / config->wave.channels) - gi->part2_3_length;
- }
-
- /*
-@@ -71,8 +69,7 @@ void shine_ResvAdjust(gr_info *gi, shine_global_config *config )
- * part2_3_length. The bitstream formatter will detect this and write the
- * appropriate stuffing bits to the bitstream.
- */
--void shine_ResvFrameEnd(shine_global_config *config )
--{
-+void shine_ResvFrameEnd(shine_global_config *config) {
- gr_info *gi;
- int gr, ch, ancillary_pad, stuffingBits;
- int over_bits;
-@@ -81,42 +78,38 @@ void shine_ResvFrameEnd(shine_global_config *config )
- ancillary_pad = 0;
-
- /* just in case mean_bits is odd, this is necessary... */
-- if((config->wave.channels==2) && (config->mean_bits & 1))
-+ if ((config->wave.channels == 2) && (config->mean_bits & 1))
- config->ResvSize += 1;
-
- over_bits = config->ResvSize - config->ResvMax;
-- if(over_bits<0)
-+ if (over_bits < 0)
- over_bits = 0;
-
- config->ResvSize -= over_bits;
- stuffingBits = over_bits + ancillary_pad;
-
- /* we must be byte aligned */
-- if((over_bits = config->ResvSize % 8))
-- {
-+ if ((over_bits = config->ResvSize % 8)) {
- stuffingBits += over_bits;
- config->ResvSize -= over_bits;
- }
-
-- if(stuffingBits)
-- {
-+ if (stuffingBits) {
- /*
- * plan a: put all into the first granule
- * This was preferred by someone designing a
- * real-time decoder...
- */
-- gi = (gr_info *) &(l3_side->gr[0].ch[0]);
-+ gi = (gr_info *)&(l3_side->gr[0].ch[0]);
-
-- if ( gi->part2_3_length + stuffingBits < 4095 )
-+ if (gi->part2_3_length + stuffingBits < 4095)
- gi->part2_3_length += stuffingBits;
-- else
-- {
-+ else {
- /* plan b: distribute throughout the granules */
-- for (gr = 0; gr < config->mpeg.granules_per_frame; gr++ )
-- for (ch = 0; ch < config->wave.channels; ch++ )
-- {
-+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++)
-+ for (ch = 0; ch < config->wave.channels; ch++) {
- int extraBits, bitsThisGr;
-- gr_info *gi = (gr_info *) &(l3_side->gr[gr].ch[ch]);
-+ gr_info *gi = (gr_info *)&(l3_side->gr[gr].ch[ch]);
- if (!stuffingBits)
- break;
- extraBits = 4095 - gi->part2_3_length;
-@@ -133,5 +126,3 @@ void shine_ResvFrameEnd(shine_global_config *config )
- }
- }
- }
--
--
-diff --git a/src/lib/reservoir.h b/src/lib/reservoir.h
-index 2f1ffa5..2245778 100644
---- a/src/lib/reservoir.h
-+++ b/src/lib/reservoir.h
-@@ -1,9 +1,11 @@
- #ifndef RESERVOIR_H
- #define RESERVOIR_H
-
-+#include "types.h"
-+
- void shine_ResvFrameBegin(int frameLength, shine_global_config *config);
--int shine_max_reservoir_bits (double *pe, shine_global_config *config);
--void shine_ResvAdjust (gr_info *gi, shine_global_config *config );
--void shine_ResvFrameEnd (shine_global_config *config );
-+int shine_max_reservoir_bits(double *pe, shine_global_config *config);
-+void shine_ResvAdjust(gr_info *gi, shine_global_config *config);
-+void shine_ResvFrameEnd(shine_global_config *config);
-
- #endif
-diff --git a/src/lib/tables.c b/src/lib/tables.c
-index ff7e374..3c63b4f 100644
---- a/src/lib/tables.c
-+++ b/src/lib/tables.c
-@@ -7,120 +7,171 @@
-
- #include "tables.h"
-
--const int shine_slen1_tab[16] = { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 };
--const int shine_slen2_tab[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 };
-+const int shine_slen1_tab[16] = {0, 0, 0, 0, 3, 1, 1, 1,
-+ 2, 2, 2, 3, 3, 3, 4, 4};
-+const int shine_slen2_tab[16] = {0, 1, 2, 3, 0, 1, 2, 3,
-+ 1, 2, 3, 1, 2, 3, 2, 3};
-
- /* Valid samplerates and bitrates. */
- const int samplerates[9] = {
-- 44100, 48000, 32000, /* MPEG-I */
-- 22050, 24000, 16000, /* MPEG-II */
-- 11025, 12000, 8000 /* MPEG-2.5 */
-+ 44100, 48000, 32000, /* MPEG-I */
-+ 22050, 24000, 16000, /* MPEG-II */
-+ 11025, 12000, 8000 /* MPEG-2.5 */
- };
-
- const int bitrates[16][4] = {
-- /* MPEG version:
-- * 2.5, reserved, II, I */
-- { -1, -1, -1, -1},
-- { 8, -1, 8, 32},
-- { 16, -1, 16, 40},
-- { 24, -1, 24, 48},
-- { 32, -1, 32, 56},
-- { 40, -1, 40, 64},
-- { 48, -1, 48, 80},
-- { 56, -1, 56, 96},
-- { 64, -1, 64, 112},
-- { -1, -1, 80, 128},
-- { -1, -1, 96, 160},
-- { -1, -1, 112, 192},
-- { -1, -1, 128, 224},
-- { -1, -1, 144, 256},
-- { -1, -1, 160, 320},
-- { -1, -1, -1, -1}
--};
-+ /* MPEG version:
-+ * 2.5, reserved, II, I */
-+ {-1, -1, -1, -1}, {8, -1, 8, 32}, {16, -1, 16, 40},
-+ {24, -1, 24, 48}, {32, -1, 32, 56}, {40, -1, 40, 64},
-+ {48, -1, 48, 80}, {56, -1, 56, 96}, {64, -1, 64, 112},
-+ {-1, -1, 80, 128}, {-1, -1, 96, 160}, {-1, -1, 112, 192},
-+ {-1, -1, 128, 224}, {-1, -1, 144, 256}, {-1, -1, 160, 320},
-+ {-1, -1, -1, -1}};
-
--const int shine_scale_fact_band_index[9][23] =
--{
-- /* MPEG-I */
-+const int shine_scale_fact_band_index[9][23] = {
-+ /* MPEG-I */
- /* Table B.8.b: 44.1 kHz */
-- {0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576},
-+ {0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62,
-+ 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, 576},
- /* Table B.8.c: 48 kHz */
-- {0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576},
-+ {0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60,
-+ 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, 576},
- /* Table B.8.a: 32 kHz */
-- {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576},
-- /* MPEG-II */
-+ {0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66,
-+ 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, 576},
-+ /* MPEG-II */
- /* Table B.2.b: 22.05 kHz */
-- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
-+ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96,
-+ 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576},
- /* Table B.2.c: 24 kHz */
-- {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
-+ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96,
-+ 114, 136, 162, 194, 232, 278, 330, 394, 464, 540, 576},
- /* Table B.2.a: 16 kHz */
-- {0,6,12,18,24,30,36,44,45,66,80,96,116,140,168,200,238,248,336,396,464,522,576},
-+ {0, 6, 12, 18, 24, 30, 36, 44, 45, 66, 80, 96,
-+ 116, 140, 168, 200, 238, 248, 336, 396, 464, 522, 576},
-
-- /* MPEG-2.5 */
-+ /* MPEG-2.5 */
- /* 11.025 kHz */
-- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
-+ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96,
-+ 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576},
- /* 12 kHz */
-- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
-+ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96,
-+ 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576},
- /* MPEG-2.5 8 kHz */
-- {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576},
-+ {0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192,
-+ 232, 280, 336, 400, 476, 566, 568, 570, 572, 574, 576},
- };
-
- /* note. 0.035781 is shine_enwindow maximum value */
- /* scale and convert to fixed point before storing */
--#define SHINE_EW(x) (int32_t)((double)(x) * 0x7fffffff)
--#define SHINE_EW2(a,b) SHINE_EW(a), SHINE_EW(b)
--#define SHINE_EW10(a,b,c,d,e,f,g,h,i,j) SHINE_EW2(a,b), SHINE_EW2(c,d), SHINE_EW2(e,f), SHINE_EW2(g,h), SHINE_EW2(i,j)
-+#define SHINE_EW(x) (int32_t)((double)(x)*0x7fffffff)
-+#define SHINE_EW2(a, b) SHINE_EW(a), SHINE_EW(b)
-+#define SHINE_EW10(a, b, c, d, e, f, g, h, i, j) \
-+ SHINE_EW2(a, b), SHINE_EW2(c, d), SHINE_EW2(e, f), SHINE_EW2(g, h), \
-+ SHINE_EW2(i, j)
-
- const int32_t shine_enwindow[] = {
--SHINE_EW10( 0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000001, -0.000001, -0.000001),
--SHINE_EW10( -0.000001, -0.000001, -0.000001, -0.000002, -0.000002, -0.000002, -0.000002, -0.000003, -0.000003, -0.000003),
--SHINE_EW10( -0.000004, -0.000004, -0.000005, -0.000005, -0.000006, -0.000007, -0.000008, -0.000008, -0.000009, -0.000010),
--SHINE_EW10( -0.000011, -0.000012, -0.000014, -0.000015, -0.000017, -0.000018, -0.000020, -0.000021, -0.000023, -0.000025),
--SHINE_EW10( -0.000028, -0.000030, -0.000032, -0.000035, -0.000038, -0.000041, -0.000043, -0.000046, -0.000050, -0.000053),
--SHINE_EW10( -0.000056, -0.000060, -0.000063, -0.000066, -0.000070, -0.000073, -0.000077, -0.000081, -0.000084, -0.000087),
--SHINE_EW10( -0.000091, -0.000093, -0.000096, -0.000099, 0.000102, 0.000104, 0.000106, 0.000107, 0.000108, 0.000109),
--SHINE_EW10( 0.000109, 0.000108, 0.000107, 0.000105, 0.000103, 0.000099, 0.000095, 0.000090, 0.000084, 0.000078),
--SHINE_EW10( 0.000070, 0.000061, 0.000051, 0.000040, 0.000027, 0.000014, -0.000001, -0.000017, -0.000034, -0.000053),
--SHINE_EW10( -0.000073, -0.000094, -0.000116, -0.000140, -0.000165, -0.000191, -0.000219, -0.000247, -0.000277, -0.000308),
--SHINE_EW10( -0.000339, -0.000371, -0.000404, -0.000438, -0.000473, -0.000507, -0.000542, -0.000577, -0.000612, -0.000647),
--SHINE_EW10( -0.000681, -0.000714, -0.000747, -0.000779, -0.000810, -0.000839, -0.000866, -0.000892, -0.000915, -0.000936),
--SHINE_EW10( -0.000954, -0.000969, -0.000981, -0.000989, -0.000994, -0.000995, -0.000992, -0.000984, 0.000971, 0.000954),
--SHINE_EW10( 0.000931, 0.000903, 0.000869, 0.000829, 0.000784, 0.000732, 0.000674, 0.000610, 0.000539, 0.000463),
--SHINE_EW10( 0.000379, 0.000288, 0.000192, 0.000088, -0.000021, -0.000137, -0.000260, -0.000388, -0.000522, -0.000662),
--SHINE_EW10( -0.000807, -0.000957, -0.001111, -0.001270, -0.001432, -0.001598, -0.001767, -0.001937, -0.002110, -0.002283),
--SHINE_EW10( -0.002457, -0.002631, -0.002803, -0.002974, -0.003142, -0.003307, -0.003467, -0.003623, -0.003772, -0.003914),
--SHINE_EW10( -0.004049, -0.004175, -0.004291, -0.004396, -0.004490, -0.004570, -0.004638, -0.004691, -0.004728, -0.004749),
--SHINE_EW10( -0.004752, -0.004737, -0.004703, -0.004649, -0.004574, -0.004477, -0.004358, -0.004215, -0.004049, -0.003859),
--SHINE_EW10( -0.003643, -0.003402, 0.003135, 0.002841, 0.002522, 0.002175, 0.001801, 0.001400, 0.000971, 0.000516),
--SHINE_EW10( 0.000033, -0.000476, -0.001012, -0.001574, -0.002162, -0.002774, -0.003411, -0.004072, -0.004756, -0.005462),
--SHINE_EW10( -0.006189, -0.006937, -0.007703, -0.008487, -0.009288, -0.010104, -0.010933, -0.011775, -0.012628, -0.013489),
--SHINE_EW10( -0.014359, -0.015234, -0.016113, -0.016994, -0.017876, -0.018757, -0.019634, -0.020507, -0.021372, -0.022229),
--SHINE_EW10( -0.023074, -0.023907, -0.024725, -0.025527, -0.026311, -0.027074, -0.027815, -0.028533, -0.029225, -0.029890),
--SHINE_EW10( -0.030527, -0.031133, -0.031707, -0.032248, -0.032755, -0.033226, -0.033660, -0.034056, -0.034413, -0.034730),
--SHINE_EW10( -0.035007, -0.035242, -0.035435, -0.035586, -0.035694, -0.035759, 0.035781, 0.035759, 0.035694, 0.035586),
--SHINE_EW10( 0.035435, 0.035242, 0.035007, 0.034730, 0.034413, 0.034056, 0.033660, 0.033226, 0.032755, 0.032248),
--SHINE_EW10( 0.031707, 0.031133, 0.030527, 0.029890, 0.029225, 0.028533, 0.027815, 0.027074, 0.026311, 0.025527),
--SHINE_EW10( 0.024725, 0.023907, 0.023074, 0.022229, 0.021372, 0.020507, 0.019634, 0.018757, 0.017876, 0.016994),
--SHINE_EW10( 0.016113, 0.015234, 0.014359, 0.013489, 0.012628, 0.011775, 0.010933, 0.010104, 0.009288, 0.008487),
--SHINE_EW10( 0.007703, 0.006937, 0.006189, 0.005462, 0.004756, 0.004072, 0.003411, 0.002774, 0.002162, 0.001574),
--SHINE_EW10( 0.001012, 0.000476, -0.000033, -0.000516, -0.000971, -0.001400, -0.001801, -0.002175, -0.002522, -0.002841),
--SHINE_EW10( 0.003135, 0.003402, 0.003643, 0.003859, 0.004049, 0.004215, 0.004358, 0.004477, 0.004574, 0.004649),
--SHINE_EW10( 0.004703, 0.004737, 0.004752, 0.004749, 0.004728, 0.004691, 0.004638, 0.004570, 0.004490, 0.004396),
--SHINE_EW10( 0.004291, 0.004175, 0.004049, 0.003914, 0.003772, 0.003623, 0.003467, 0.003307, 0.003142, 0.002974),
--SHINE_EW10( 0.002803, 0.002631, 0.002457, 0.002283, 0.002110, 0.001937, 0.001767, 0.001598, 0.001432, 0.001270),
--SHINE_EW10( 0.001111, 0.000957, 0.000807, 0.000662, 0.000522, 0.000388, 0.000260, 0.000137, 0.000021, -0.000088),
--SHINE_EW10( -0.000192, -0.000288, -0.000379, -0.000463, -0.000539, -0.000610, -0.000674, -0.000732, -0.000784, -0.000829),
--SHINE_EW10( -0.000869, -0.000903, -0.000931, -0.000954, 0.000971, 0.000984, 0.000992, 0.000995, 0.000994, 0.000989),
--SHINE_EW10( 0.000981, 0.000969, 0.000954, 0.000936, 0.000915, 0.000892, 0.000866, 0.000839, 0.000810, 0.000779),
--SHINE_EW10( 0.000747, 0.000714, 0.000681, 0.000647, 0.000612, 0.000577, 0.000542, 0.000507, 0.000473, 0.000438),
--SHINE_EW10( 0.000404, 0.000371, 0.000339, 0.000308, 0.000277, 0.000247, 0.000219, 0.000191, 0.000165, 0.000140),
--SHINE_EW10( 0.000116, 0.000094, 0.000073, 0.000053, 0.000034, 0.000017, 0.000001, -0.000014, -0.000027, -0.000040),
--SHINE_EW10( -0.000051, -0.000061, -0.000070, -0.000078, -0.000084, -0.000090, -0.000095, -0.000099, -0.000103, -0.000105),
--SHINE_EW10( -0.000107, -0.000108, -0.000109, -0.000109, -0.000108, -0.000107, -0.000106, -0.000104, 0.000102, 0.000099),
--SHINE_EW10( 0.000096, 0.000093, 0.000091, 0.000087, 0.000084, 0.000081, 0.000077, 0.000073, 0.000070, 0.000066),
--SHINE_EW10( 0.000063, 0.000060, 0.000056, 0.000053, 0.000050, 0.000046, 0.000043, 0.000041, 0.000038, 0.000035),
--SHINE_EW10( 0.000032, 0.000030, 0.000028, 0.000025, 0.000023, 0.000021, 0.000020, 0.000018, 0.000017, 0.000015),
--SHINE_EW10( 0.000014, 0.000012, 0.000011, 0.000010, 0.000009, 0.000008, 0.000008, 0.000007, 0.000006, 0.000005),
--SHINE_EW10( 0.000005, 0.000004, 0.000004, 0.000003, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002),
--SHINE_EW10( 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000),
--SHINE_EW2 ( 0.000000, 0.000000)
--};
-+ SHINE_EW10(0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000000,
-+ -0.000000, -0.000001, -0.000001, -0.000001),
-+ SHINE_EW10(-0.000001, -0.000001, -0.000001, -0.000002, -0.000002, -0.000002,
-+ -0.000002, -0.000003, -0.000003, -0.000003),
-+ SHINE_EW10(-0.000004, -0.000004, -0.000005, -0.000005, -0.000006, -0.000007,
-+ -0.000008, -0.000008, -0.000009, -0.000010),
-+ SHINE_EW10(-0.000011, -0.000012, -0.000014, -0.000015, -0.000017, -0.000018,
-+ -0.000020, -0.000021, -0.000023, -0.000025),
-+ SHINE_EW10(-0.000028, -0.000030, -0.000032, -0.000035, -0.000038, -0.000041,
-+ -0.000043, -0.000046, -0.000050, -0.000053),
-+ SHINE_EW10(-0.000056, -0.000060, -0.000063, -0.000066, -0.000070, -0.000073,
-+ -0.000077, -0.000081, -0.000084, -0.000087),
-+ SHINE_EW10(-0.000091, -0.000093, -0.000096, -0.000099, 0.000102, 0.000104,
-+ 0.000106, 0.000107, 0.000108, 0.000109),
-+ SHINE_EW10(0.000109, 0.000108, 0.000107, 0.000105, 0.000103, 0.000099,
-+ 0.000095, 0.000090, 0.000084, 0.000078),
-+ SHINE_EW10(0.000070, 0.000061, 0.000051, 0.000040, 0.000027, 0.000014,
-+ -0.000001, -0.000017, -0.000034, -0.000053),
-+ SHINE_EW10(-0.000073, -0.000094, -0.000116, -0.000140, -0.000165, -0.000191,
-+ -0.000219, -0.000247, -0.000277, -0.000308),
-+ SHINE_EW10(-0.000339, -0.000371, -0.000404, -0.000438, -0.000473, -0.000507,
-+ -0.000542, -0.000577, -0.000612, -0.000647),
-+ SHINE_EW10(-0.000681, -0.000714, -0.000747, -0.000779, -0.000810, -0.000839,
-+ -0.000866, -0.000892, -0.000915, -0.000936),
-+ SHINE_EW10(-0.000954, -0.000969, -0.000981, -0.000989, -0.000994, -0.000995,
-+ -0.000992, -0.000984, 0.000971, 0.000954),
-+ SHINE_EW10(0.000931, 0.000903, 0.000869, 0.000829, 0.000784, 0.000732,
-+ 0.000674, 0.000610, 0.000539, 0.000463),
-+ SHINE_EW10(0.000379, 0.000288, 0.000192, 0.000088, -0.000021, -0.000137,
-+ -0.000260, -0.000388, -0.000522, -0.000662),
-+ SHINE_EW10(-0.000807, -0.000957, -0.001111, -0.001270, -0.001432, -0.001598,
-+ -0.001767, -0.001937, -0.002110, -0.002283),
-+ SHINE_EW10(-0.002457, -0.002631, -0.002803, -0.002974, -0.003142, -0.003307,
-+ -0.003467, -0.003623, -0.003772, -0.003914),
-+ SHINE_EW10(-0.004049, -0.004175, -0.004291, -0.004396, -0.004490, -0.004570,
-+ -0.004638, -0.004691, -0.004728, -0.004749),
-+ SHINE_EW10(-0.004752, -0.004737, -0.004703, -0.004649, -0.004574, -0.004477,
-+ -0.004358, -0.004215, -0.004049, -0.003859),
-+ SHINE_EW10(-0.003643, -0.003402, 0.003135, 0.002841, 0.002522, 0.002175,
-+ 0.001801, 0.001400, 0.000971, 0.000516),
-+ SHINE_EW10(0.000033, -0.000476, -0.001012, -0.001574, -0.002162, -0.002774,
-+ -0.003411, -0.004072, -0.004756, -0.005462),
-+ SHINE_EW10(-0.006189, -0.006937, -0.007703, -0.008487, -0.009288, -0.010104,
-+ -0.010933, -0.011775, -0.012628, -0.013489),
-+ SHINE_EW10(-0.014359, -0.015234, -0.016113, -0.016994, -0.017876, -0.018757,
-+ -0.019634, -0.020507, -0.021372, -0.022229),
-+ SHINE_EW10(-0.023074, -0.023907, -0.024725, -0.025527, -0.026311, -0.027074,
-+ -0.027815, -0.028533, -0.029225, -0.029890),
-+ SHINE_EW10(-0.030527, -0.031133, -0.031707, -0.032248, -0.032755, -0.033226,
-+ -0.033660, -0.034056, -0.034413, -0.034730),
-+ SHINE_EW10(-0.035007, -0.035242, -0.035435, -0.035586, -0.035694, -0.035759,
-+ 0.035781, 0.035759, 0.035694, 0.035586),
-+ SHINE_EW10(0.035435, 0.035242, 0.035007, 0.034730, 0.034413, 0.034056,
-+ 0.033660, 0.033226, 0.032755, 0.032248),
-+ SHINE_EW10(0.031707, 0.031133, 0.030527, 0.029890, 0.029225, 0.028533,
-+ 0.027815, 0.027074, 0.026311, 0.025527),
-+ SHINE_EW10(0.024725, 0.023907, 0.023074, 0.022229, 0.021372, 0.020507,
-+ 0.019634, 0.018757, 0.017876, 0.016994),
-+ SHINE_EW10(0.016113, 0.015234, 0.014359, 0.013489, 0.012628, 0.011775,
-+ 0.010933, 0.010104, 0.009288, 0.008487),
-+ SHINE_EW10(0.007703, 0.006937, 0.006189, 0.005462, 0.004756, 0.004072,
-+ 0.003411, 0.002774, 0.002162, 0.001574),
-+ SHINE_EW10(0.001012, 0.000476, -0.000033, -0.000516, -0.000971, -0.001400,
-+ -0.001801, -0.002175, -0.002522, -0.002841),
-+ SHINE_EW10(0.003135, 0.003402, 0.003643, 0.003859, 0.004049, 0.004215,
-+ 0.004358, 0.004477, 0.004574, 0.004649),
-+ SHINE_EW10(0.004703, 0.004737, 0.004752, 0.004749, 0.004728, 0.004691,
-+ 0.004638, 0.004570, 0.004490, 0.004396),
-+ SHINE_EW10(0.004291, 0.004175, 0.004049, 0.003914, 0.003772, 0.003623,
-+ 0.003467, 0.003307, 0.003142, 0.002974),
-+ SHINE_EW10(0.002803, 0.002631, 0.002457, 0.002283, 0.002110, 0.001937,
-+ 0.001767, 0.001598, 0.001432, 0.001270),
-+ SHINE_EW10(0.001111, 0.000957, 0.000807, 0.000662, 0.000522, 0.000388,
-+ 0.000260, 0.000137, 0.000021, -0.000088),
-+ SHINE_EW10(-0.000192, -0.000288, -0.000379, -0.000463, -0.000539, -0.000610,
-+ -0.000674, -0.000732, -0.000784, -0.000829),
-+ SHINE_EW10(-0.000869, -0.000903, -0.000931, -0.000954, 0.000971, 0.000984,
-+ 0.000992, 0.000995, 0.000994, 0.000989),
-+ SHINE_EW10(0.000981, 0.000969, 0.000954, 0.000936, 0.000915, 0.000892,
-+ 0.000866, 0.000839, 0.000810, 0.000779),
-+ SHINE_EW10(0.000747, 0.000714, 0.000681, 0.000647, 0.000612, 0.000577,
-+ 0.000542, 0.000507, 0.000473, 0.000438),
-+ SHINE_EW10(0.000404, 0.000371, 0.000339, 0.000308, 0.000277, 0.000247,
-+ 0.000219, 0.000191, 0.000165, 0.000140),
-+ SHINE_EW10(0.000116, 0.000094, 0.000073, 0.000053, 0.000034, 0.000017,
-+ 0.000001, -0.000014, -0.000027, -0.000040),
-+ SHINE_EW10(-0.000051, -0.000061, -0.000070, -0.000078, -0.000084, -0.000090,
-+ -0.000095, -0.000099, -0.000103, -0.000105),
-+ SHINE_EW10(-0.000107, -0.000108, -0.000109, -0.000109, -0.000108, -0.000107,
-+ -0.000106, -0.000104, 0.000102, 0.000099),
-+ SHINE_EW10(0.000096, 0.000093, 0.000091, 0.000087, 0.000084, 0.000081,
-+ 0.000077, 0.000073, 0.000070, 0.000066),
-+ SHINE_EW10(0.000063, 0.000060, 0.000056, 0.000053, 0.000050, 0.000046,
-+ 0.000043, 0.000041, 0.000038, 0.000035),
-+ SHINE_EW10(0.000032, 0.000030, 0.000028, 0.000025, 0.000023, 0.000021,
-+ 0.000020, 0.000018, 0.000017, 0.000015),
-+ SHINE_EW10(0.000014, 0.000012, 0.000011, 0.000010, 0.000009, 0.000008,
-+ 0.000008, 0.000007, 0.000006, 0.000005),
-+ SHINE_EW10(0.000005, 0.000004, 0.000004, 0.000003, 0.000003, 0.000003,
-+ 0.000002, 0.000002, 0.000002, 0.000002),
-+ SHINE_EW10(0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001,
-+ 0.000000, 0.000000, 0.000000, 0.000000),
-+ SHINE_EW2(0.000000, 0.000000)};
-diff --git a/src/lib/tables.h b/src/lib/tables.h
-index 5c94228..fe06502 100644
---- a/src/lib/tables.h
-+++ b/src/lib/tables.h
-@@ -9,8 +9,7 @@ extern const int shine_slen2_tab[16];
- extern const int samplerates[9];
- extern const int bitrates[16][4];
-
--extern const int shine_scale_fact_band_index[9][23];
-+extern const int shine_scale_fact_band_index[9][23];
- extern const int32_t shine_enwindow[];
-
- #endif
--
-diff --git a/src/lib/types.h b/src/lib/types.h
-index f3def1a..11a05fc 100644
---- a/src/lib/types.h
-+++ b/src/lib/types.h
-@@ -2,18 +2,18 @@
- #define PRIV_TYPES_H
-
- #include <stdio.h>
--#include <string.h>
- #include <stdlib.h>
-+#include <string.h>
-
- #include <math.h>
-
--#define GRANULE_SIZE 576
-+#define GRANULE_SIZE 576
-
- #include "bitstream.h"
-
- /* Include arch-specific instructions,
- * when defined. */
--#if defined(__mips__) && (__mips != 64)
-+#if defined(__mips__) && (__mips == 32)
- #include "mult_mips_gcc.h"
- #elif defined(__arm__) && !defined(__thumb__)
- #include "mult_sarm_gcc.h"
-@@ -24,29 +24,32 @@
- #include "mult_noarch_gcc.h"
-
- #ifndef SWAB32
--#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
--#define SWAB32(x) __builtin_bswap32(x)
-+#if defined(__GNUC__) && \
-+ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
-+#define SWAB32(x) __builtin_bswap32(x)
- #else
--#define SWAB32(x) (((unsigned int)(x) >> 24) | (((unsigned int)(x) >> 8) & 0xff00) | (((unsigned int)(x) & 0xff00) << 8) | ((unsigned int)(x) << 24))
-+#define SWAB32(x) \
-+ (((unsigned int)(x) >> 24) | (((unsigned int)(x) >> 8) & 0xff00) | \
-+ (((unsigned int)(x)&0xff00) << 8) | ((unsigned int)(x) << 24))
- #endif
- #endif
-
- /* #define DEBUG if you want the library to dump info to stdout */
-
--#define PI 3.14159265358979
--#define PI4 0.78539816339745
--#define PI12 0.26179938779915
--#define PI36 0.087266462599717
--#define PI64 0.049087385212
--#define SQRT2 1.41421356237
--#define LN2 0.69314718
-+#define PI 3.14159265358979
-+#define PI4 0.78539816339745
-+#define PI12 0.26179938779915
-+#define PI36 0.087266462599717
-+#define PI64 0.049087385212
-+#define SQRT2 1.41421356237
-+#define LN2 0.69314718
- #define LN_TO_LOG10 0.2302585093
--#define BLKSIZE 1024
--#define HAN_SIZE 512 /* for loop unrolling, require that HAN_SIZE%8==0 */
-+#define BLKSIZE 1024
-+#define HAN_SIZE 512 /* for loop unrolling, require that HAN_SIZE%8==0 */
- #define SCALE_BLOCK 12
- #define SCALE_RANGE 64
--#define SCALE 32768
--#define SBLIMIT 32
-+#define SCALE 32768
-+#define SBLIMIT 32
-
- #ifndef MAX_CHANNELS
- #define MAX_CHANNELS 2
-@@ -57,44 +60,44 @@
- #endif
-
- typedef struct {
-- int channels;
-- int samplerate;
-+ int channels;
-+ int samplerate;
- } priv_shine_wave_t;
-
- typedef struct {
-- int version;
-- int layer;
-- int granules_per_frame;
-- int mode; /* + */ /* Stereo mode */
-- int bitr; /* + */ /* Must conform to known bitrate - see Main.c */
-- int emph; /* + */ /* De-emphasis */
-- int padding;
-- int bits_per_frame;
-- int bits_per_slot;
-- double frac_slots_per_frame;
-- double slot_lag;
-- int whole_slots_per_frame;
-- int bitrate_index; /* + */ /* See Main.c and Layer3.c */
-- int samplerate_index; /* + */ /* See Main.c and Layer3.c */
-- int crc;
-- int ext;
-- int mode_ext;
-- int copyright; /* + */
-- int original; /* + */
-+ int version;
-+ int layer;
-+ int granules_per_frame;
-+ int mode; /* + */ /* Stereo mode */
-+ int bitr; /* + */ /* Must conform to known bitrate - see Main.c */
-+ int emph; /* + */ /* De-emphasis */
-+ int padding;
-+ int bits_per_frame;
-+ int bits_per_slot;
-+ double frac_slots_per_frame;
-+ double slot_lag;
-+ int whole_slots_per_frame;
-+ int bitrate_index; /* + */ /* See Main.c and Layer3.c */
-+ int samplerate_index; /* + */ /* See Main.c and Layer3.c */
-+ int crc;
-+ int ext;
-+ int mode_ext;
-+ int copyright; /* + */
-+ int original; /* + */
- } priv_shine_mpeg_t;
-
- typedef struct {
-- int32_t *xr; /* magnitudes of the spectral values */
-- int32_t xrsq[GRANULE_SIZE]; /* xr squared */
-- int32_t xrabs[GRANULE_SIZE]; /* xr absolute */
-- int32_t xrmax; /* maximum of xrabs array */
-- int32_t en_tot[MAX_GRANULES]; /* gr */
-+ int32_t *xr; /* magnitudes of the spectral values */
-+ int32_t xrsq[GRANULE_SIZE]; /* xr squared */
-+ int32_t xrabs[GRANULE_SIZE]; /* xr absolute */
-+ int32_t xrmax; /* maximum of xrabs array */
-+ int32_t en_tot[MAX_GRANULES]; /* gr */
- int32_t en[MAX_GRANULES][21];
- int32_t xm[MAX_GRANULES][21];
- int32_t xrmaxl[MAX_GRANULES];
-- double steptab[128]; /* 2**(-x/4) for x = -127..0 */
-- int32_t steptabi[128]; /* 2**(-x/4) for x = -127..0 */
-- int int2idx[10000]; /* x**(3/4) for x = 0..9999 */
-+ double steptab[128]; /* 2**(-x/4) for x = -127..0 */
-+ int32_t steptabi[128]; /* 2**(-x/4) for x = -127..0 */
-+ int int2idx[10000]; /* x**(3/4) for x = 0..9999 */
- } l3loop_t;
-
- typedef struct {
-@@ -105,7 +108,7 @@ typedef struct {
- int off[MAX_CHANNELS];
- int32_t fl[SBLIMIT][64];
- int32_t x[MAX_CHANNELS][HAN_SIZE];
--} subband_t;
-+} subband_t;
-
- /* Side information */
- typedef struct {
-@@ -130,49 +133,48 @@ typedef struct {
- } gr_info;
-
- typedef struct {
-- unsigned private_bits;
-- int resvDrain;
-- unsigned scfsi[MAX_CHANNELS][4];
-+ unsigned private_bits;
-+ int resvDrain;
-+ unsigned scfsi[MAX_CHANNELS][4];
-+ struct {
- struct {
-- struct {
-- gr_info tt;
-- } ch[MAX_CHANNELS];
-- } gr[MAX_GRANULES];
-+ gr_info tt;
-+ } ch[MAX_CHANNELS];
-+ } gr[MAX_GRANULES];
- } shine_side_info_t;
-
- typedef struct {
-- double l[MAX_GRANULES][MAX_CHANNELS][21];
-+ double l[MAX_GRANULES][MAX_CHANNELS][21];
- } shine_psy_ratio_t;
-
- typedef struct {
-- double l[MAX_GRANULES][MAX_CHANNELS][21];
-+ double l[MAX_GRANULES][MAX_CHANNELS][21];
- } shine_psy_xmin_t;
-
- typedef struct {
-- int32_t l[MAX_GRANULES][MAX_CHANNELS][22]; /* [cb] */
-- int32_t s[MAX_GRANULES][MAX_CHANNELS][13][3]; /* [window][cb] */
-+ int32_t l[MAX_GRANULES][MAX_CHANNELS][22]; /* [cb] */
-+ int32_t s[MAX_GRANULES][MAX_CHANNELS][13][3]; /* [window][cb] */
- } shine_scalefac_t;
-
--
--typedef struct shine_global_flags {
-- priv_shine_wave_t wave;
-- priv_shine_mpeg_t mpeg;
-- bitstream_t bs;
-+typedef struct shine_global_flags {
-+ priv_shine_wave_t wave;
-+ priv_shine_mpeg_t mpeg;
-+ bitstream_t bs;
- shine_side_info_t side_info;
-- int sideinfo_len;
-- int mean_bits;
-+ int sideinfo_len;
-+ int mean_bits;
- shine_psy_ratio_t ratio;
-- shine_scalefac_t scalefactor;
-- int16_t *buffer[MAX_CHANNELS];
-- double pe[MAX_CHANNELS][MAX_GRANULES];
-- int l3_enc[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE];
-- int32_t l3_sb_sample[MAX_CHANNELS][MAX_GRANULES+1][18][SBLIMIT];
-- int32_t mdct_freq[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE];
-- int ResvSize;
-- int ResvMax;
-- l3loop_t l3loop;
-- mdct_t mdct;
-- subband_t subband;
-+ shine_scalefac_t scalefactor;
-+ int16_t *buffer[MAX_CHANNELS];
-+ double pe[MAX_CHANNELS][MAX_GRANULES];
-+ int l3_enc[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE];
-+ int32_t l3_sb_sample[MAX_CHANNELS][MAX_GRANULES + 1][18][SBLIMIT];
-+ int32_t mdct_freq[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE];
-+ int ResvSize;
-+ int ResvMax;
-+ l3loop_t l3loop;
-+ mdct_t mdct;
-+ subband_t subband;
- } shine_global_config;
-
- #endif
diff --git a/multimedia/shine/shine.SlackBuild b/multimedia/shine/shine.SlackBuild
index 81d701d8f3..14cac1b0cb 100644
--- a/multimedia/shine/shine.SlackBuild
+++ b/multimedia/shine/shine.SlackBuild
@@ -25,10 +25,12 @@
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=shine
-VERSION=${VERSION:-3.1.1}
+VERSION=${VERSION:-ab5e352_20230101}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
+COMMIT=${COMMIT:-ab5e3526b64af1a2eaa43aa6f441a7312e013519}
+COMMITDATE=${COMMITDATE:-20230101}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
@@ -67,9 +69,9 @@ trap 'echo "$0 FAILED at line $LINENO!" | tee -a $OUTPUT/error-${PRGNAM}.log' ER
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
-rm -rf $PRGNAM-$VERSION
-tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
-cd $PRGNAM-$VERSION
+rm -rf $PRGNAM-$COMMIT
+tar xvf $CWD/$PRGNAM-$COMMIT.tar.gz
+cd $PRGNAM-$COMMIT
chown -R root:root .
find -L . \
@@ -78,8 +80,6 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-patch -p1 --verbose --unified < $CWD/fix-bugs.patch
-
./bootstrap
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
@@ -90,6 +90,8 @@ CXXFLAGS="$SLKCFLAGS" \
--localstatedir=/var \
--mandir=/usr/man \
--docdir=/usr/doc/$PRGNAM-$VERSION \
+ --enable-shared \
+ --disable-static \
--build=$ARCH-slackware-linux
make
diff --git a/multimedia/shine/shine.info b/multimedia/shine/shine.info
index 401505a283..32ae886033 100644
--- a/multimedia/shine/shine.info
+++ b/multimedia/shine/shine.info
@@ -1,8 +1,8 @@
PRGNAM="shine"
-VERSION="3.1.1"
+VERSION="ab5e352_20230101"
HOMEPAGE="https://github.com/toots/shine"
-DOWNLOAD="https://github.com/toots/shine/archive/3.1.1/shine-3.1.1.tar.gz"
-MD5SUM="ff41cb139c25470f2d9c9acc9f97cc8d"
+DOWNLOAD="https://github.com/toots/shine/archive/ab5e352/shine-ab5e3526b64af1a2eaa43aa6f441a7312e013519.tar.gz"
+MD5SUM="1f8ac33d4819acf526b5de4a9a5c1bec"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""