diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 5cb7c09..a7de83c 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -79,6 +79,9 @@ if (GGWAVE_SUPPORT_SDL2) ) endif() +# modified ggwave used by some of the examples +add_subdirectory(ggwave-mod/src) + # examples if (EMSCRIPTEN) @@ -93,6 +96,7 @@ if (GGWAVE_SUPPORT_SDL2) add_subdirectory(r2t2) endif() + add_subdirectory(arduino-rx) if (EMSCRIPTEN) # emscripten sdl2 examples diff --git a/examples/arduino-rx/CMakeLists.txt b/examples/arduino-rx/CMakeLists.txt new file mode 100644 index 0000000..ffbdfe5 --- /dev/null +++ b/examples/arduino-rx/CMakeLists.txt @@ -0,0 +1,24 @@ +# +# arduino-rx + +set(TARGET arduino-rx) + +if (NOT EMSCRIPTEN) + add_executable(${TARGET} + arduino-rx.cpp + ) + + target_include_directories(${TARGET} PRIVATE + .. + ${SDL2_INCLUDE_DIRS} + ) + + target_link_libraries(${TARGET} PRIVATE + ggwave-common + ggwave-mod + ${SDL2_LIBRARIES} + ) +else() + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/index-tmpl.html ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TARGET}/index.html @ONLY) + configure_file(${CMAKE_SOURCE_DIR}/examples/ggwave-mod/src/ggwave-mod.js ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TARGET}/ggwave-mod.js COPYONLY) +endif() diff --git a/examples/arduino-rx/arduino-rx.cpp b/examples/arduino-rx/arduino-rx.cpp new file mode 100644 index 0000000..83e909a --- /dev/null +++ b/examples/arduino-rx/arduino-rx.cpp @@ -0,0 +1,402 @@ +#include "ggwave-common.h" + +#include "ggwave/ggwave.h" + +#ifdef __EMSCRIPTEN__ +#include "build_timestamp.h" +#include +#else +#define EMSCRIPTEN_KEEPALIVE +#endif + +#include +#include + +#include +#include +#include +#include + +namespace { + +// Direct-sequence spread magic numbers +// Used to xor the actual payload +const std::array kDSSMagic = { + 0x96, 0x9f, 0xb4, 0xaf, 0x1b, 0x91, 0xde, 0xc5, 0x45, 0x75, 0xe8, 0x2e, 0x0f, 0x32, 0x4a, 0x5f, + 0xb4, 0x56, 0x95, 0xcb, 0x7f, 0x6a, 0x54, 0x6a, 0x48, 0xf2, 0x0b, 0x7b, 0xcd, 0xfb, 0x93, 0x6d, + 0x3c, 0x77, 0x5e, 0xc3, 0x33, 0x47, 0xc0, 0xf1, 0x71, 0x32, 0x33, 0x27, 0x35, 0x68, 0x47, 0x1f, + 0x4e, 0xac, 0x23, 0x42, 0x5f, 0x00, 0x37, 0xa4, 0x50, 0x6d, 0x48, 0x24, 0x91, 0x7c, 0xa1, 0x4e, +}; + +std::string g_defaultCaptureDeviceName = ""; + +SDL_AudioDeviceID g_devIdInp = 0; +SDL_AudioDeviceID g_devIdOut = 0; + +SDL_AudioSpec g_obtainedSpecInp; +SDL_AudioSpec g_obtainedSpecOut; + +GGWave *g_ggWave = nullptr; + +} + +static std::function g_doInit; +static std::function g_setWindowSize; +static std::function g_mainUpdate; + +void mainUpdate(void *) { + g_mainUpdate(); +} + +// JS interface + +extern "C" { + EMSCRIPTEN_KEEPALIVE + int sendData(int textLength, const char * text, int protocolId, int volume) { + g_ggWave->init(textLength, text, g_ggWave->getTxProtocol(protocolId), volume); + return 0; + } + + EMSCRIPTEN_KEEPALIVE + int getText(char * text) { + std::copy(g_ggWave->getRxData().begin(), g_ggWave->getRxData().end(), text); + return 0; + } + + EMSCRIPTEN_KEEPALIVE + float getSampleRate() { return g_ggWave->getSampleRateInp(); } + + EMSCRIPTEN_KEEPALIVE + int getFramesToRecord() { return g_ggWave->getFramesToRecord(); } + + EMSCRIPTEN_KEEPALIVE + int getFramesLeftToRecord() { return g_ggWave->getFramesLeftToRecord(); } + + EMSCRIPTEN_KEEPALIVE + int getFramesToAnalyze() { return g_ggWave->getFramesToAnalyze(); } + + EMSCRIPTEN_KEEPALIVE + int getFramesLeftToAnalyze() { return g_ggWave->getFramesLeftToAnalyze(); } + + EMSCRIPTEN_KEEPALIVE + int hasDeviceOutput() { return g_devIdOut; } + + EMSCRIPTEN_KEEPALIVE + int hasDeviceCapture() { return g_devIdInp; } + + EMSCRIPTEN_KEEPALIVE + int doInit() { + return g_doInit(); + } +} + +void GGWave_setDefaultCaptureDeviceName(std::string name) { + g_defaultCaptureDeviceName = std::move(name); +} + +bool GGWave_init( + const int playbackId, + const int captureId, + const int payloadLength, + const float sampleRateOffset) { + + if (g_devIdInp && g_devIdOut) { + return false; + } + + if (g_devIdInp == 0 && g_devIdOut == 0) { + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + SDL_SetHintWithPriority(SDL_HINT_AUDIO_RESAMPLING_MODE, "medium", SDL_HINT_OVERRIDE); + + { + int nDevices = SDL_GetNumAudioDevices(SDL_FALSE); + printf("Found %d playback devices:\n", nDevices); + for (int i = 0; i < nDevices; i++) { + printf(" - Playback device #%d: '%s'\n", i, SDL_GetAudioDeviceName(i, SDL_FALSE)); + } + } + { + int nDevices = SDL_GetNumAudioDevices(SDL_TRUE); + printf("Found %d capture devices:\n", nDevices); + for (int i = 0; i < nDevices; i++) { + printf(" - Capture device #%d: '%s'\n", i, SDL_GetAudioDeviceName(i, SDL_TRUE)); + } + } + } + + bool reinit = false; + + if (g_devIdOut == 0) { + printf("Initializing playback ...\n"); + + SDL_AudioSpec playbackSpec; + SDL_zero(playbackSpec); + + playbackSpec.freq = GGWave::kBaseSampleRate + sampleRateOffset; + playbackSpec.format = AUDIO_S16SYS; + playbackSpec.channels = 1; + playbackSpec.samples = 16*1024; + playbackSpec.callback = NULL; + + SDL_zero(g_obtainedSpecOut); + + if (playbackId >= 0) { + printf("Attempt to open playback device %d : '%s' ...\n", playbackId, SDL_GetAudioDeviceName(playbackId, SDL_FALSE)); + g_devIdOut = SDL_OpenAudioDevice(SDL_GetAudioDeviceName(playbackId, SDL_FALSE), SDL_FALSE, &playbackSpec, &g_obtainedSpecOut, 0); + } else { + printf("Attempt to open default playback device ...\n"); + g_devIdOut = SDL_OpenAudioDevice(NULL, SDL_FALSE, &playbackSpec, &g_obtainedSpecOut, 0); + } + + if (!g_devIdOut) { + printf("Couldn't open an audio device for playback: %s!\n", SDL_GetError()); + g_devIdOut = 0; + } else { + printf("Obtained spec for output device (SDL Id = %d):\n", g_devIdOut); + printf(" - Sample rate: %d (required: %d)\n", g_obtainedSpecOut.freq, playbackSpec.freq); + printf(" - Format: %d (required: %d)\n", g_obtainedSpecOut.format, playbackSpec.format); + printf(" - Channels: %d (required: %d)\n", g_obtainedSpecOut.channels, playbackSpec.channels); + printf(" - Samples per frame: %d (required: %d)\n", g_obtainedSpecOut.samples, playbackSpec.samples); + + if (g_obtainedSpecOut.format != playbackSpec.format || + g_obtainedSpecOut.channels != playbackSpec.channels || + g_obtainedSpecOut.samples != playbackSpec.samples) { + g_devIdOut = 0; + SDL_CloseAudio(); + fprintf(stderr, "Failed to initialize playback SDL_OpenAudio!"); + + return false; + } + + reinit = true; + } + } + + if (g_devIdInp == 0) { + SDL_AudioSpec captureSpec; + captureSpec = g_obtainedSpecOut; + captureSpec.freq = GGWave::kBaseSampleRate + sampleRateOffset; + captureSpec.format = AUDIO_F32SYS; + captureSpec.samples = 1024; + + SDL_zero(g_obtainedSpecInp); + + if (captureId >= 0) { + printf("Attempt to open capture device %d : '%s' ...\n", captureId, SDL_GetAudioDeviceName(captureId, SDL_TRUE)); + g_devIdInp = SDL_OpenAudioDevice(SDL_GetAudioDeviceName(captureId, SDL_TRUE), SDL_TRUE, &captureSpec, &g_obtainedSpecInp, 0); + } else { + printf("Attempt to open default capture device ...\n"); + g_devIdInp = SDL_OpenAudioDevice(g_defaultCaptureDeviceName.empty() ? nullptr : g_defaultCaptureDeviceName.c_str(), + SDL_TRUE, &captureSpec, &g_obtainedSpecInp, 0); + } + if (!g_devIdInp) { + printf("Couldn't open an audio device for capture: %s!\n", SDL_GetError()); + g_devIdInp = 0; + } else { + printf("Obtained spec for input device (SDL Id = %d):\n", g_devIdInp); + printf(" - Sample rate: %d\n", g_obtainedSpecInp.freq); + printf(" - Format: %d (required: %d)\n", g_obtainedSpecInp.format, captureSpec.format); + printf(" - Channels: %d (required: %d)\n", g_obtainedSpecInp.channels, captureSpec.channels); + printf(" - Samples per frame: %d\n", g_obtainedSpecInp.samples); + + reinit = true; + } + } + + GGWave::SampleFormat sampleFormatInp = GGWAVE_SAMPLE_FORMAT_UNDEFINED; + GGWave::SampleFormat sampleFormatOut = GGWAVE_SAMPLE_FORMAT_UNDEFINED; + + switch (g_obtainedSpecInp.format) { + case AUDIO_U8: sampleFormatInp = GGWAVE_SAMPLE_FORMAT_U8; break; + case AUDIO_S8: sampleFormatInp = GGWAVE_SAMPLE_FORMAT_I8; break; + case AUDIO_U16SYS: sampleFormatInp = GGWAVE_SAMPLE_FORMAT_U16; break; + case AUDIO_S16SYS: sampleFormatInp = GGWAVE_SAMPLE_FORMAT_I16; break; + case AUDIO_S32SYS: sampleFormatInp = GGWAVE_SAMPLE_FORMAT_F32; break; + case AUDIO_F32SYS: sampleFormatInp = GGWAVE_SAMPLE_FORMAT_F32; break; + } + + switch (g_obtainedSpecOut.format) { + case AUDIO_U8: sampleFormatOut = GGWAVE_SAMPLE_FORMAT_U8; break; + case AUDIO_S8: sampleFormatOut = GGWAVE_SAMPLE_FORMAT_I8; break; + case AUDIO_U16SYS: sampleFormatOut = GGWAVE_SAMPLE_FORMAT_U16; break; + case AUDIO_S16SYS: sampleFormatOut = GGWAVE_SAMPLE_FORMAT_I16; break; + case AUDIO_S32SYS: sampleFormatOut = GGWAVE_SAMPLE_FORMAT_F32; break; + case AUDIO_F32SYS: sampleFormatOut = GGWAVE_SAMPLE_FORMAT_F32; break; + break; + } + + if (reinit) { + if (g_ggWave) delete g_ggWave; + + g_ggWave = new GGWave({ + payloadLength, + (float) g_obtainedSpecInp.freq, + (float) g_obtainedSpecOut.freq, + 512, + GGWave::kDefaultSoundMarkerThreshold, + sampleFormatInp, + sampleFormatOut}); + } + + return true; +} + +GGWave *& GGWave_instance() { return g_ggWave; } + +bool GGWave_mainLoop() { + if (g_devIdInp == 0 && g_devIdOut == 0) { + return false; + } + + static GGWave::CBWaveformOut cbWaveformOut = [&](const void * data, uint32_t nBytes) { + SDL_QueueAudio(g_devIdOut, data, nBytes); + }; + + static GGWave::CBWaveformInp cbWaveformInp = [&](void * data, uint32_t nMaxBytes) { + return SDL_DequeueAudio(g_devIdInp, data, nMaxBytes); + }; + + if (g_ggWave->hasTxData() == false) { + SDL_PauseAudioDevice(g_devIdOut, SDL_FALSE); + + static auto tLastNoData = std::chrono::high_resolution_clock::now(); + auto tNow = std::chrono::high_resolution_clock::now(); + + if ((int) SDL_GetQueuedAudioSize(g_devIdOut) < g_ggWave->getSamplesPerFrame()*g_ggWave->getSampleSizeBytesOut()) { + SDL_PauseAudioDevice(g_devIdInp, SDL_FALSE); + if (::getTime_ms(tLastNoData, tNow) > 500.0f) { + g_ggWave->decode(cbWaveformInp); + + GGWave::TxRxData rxData; + int n = g_ggWave->takeRxData(rxData); + if (n > 0) { + for (int i = 0; i < n; i++) { + rxData[i] ^= kDSSMagic[i%kDSSMagic.size()]; + } + std::time_t timestamp = std::time(nullptr); + std::string tstr = std::asctime(std::localtime(×tamp)); + tstr.back() = 0; + printf("[%s] Received: '%s'\n", tstr.c_str(), rxData.data()); + } + + if ((int) SDL_GetQueuedAudioSize(g_devIdInp) > 32*g_ggWave->getSamplesPerFrame()*g_ggWave->getSampleSizeBytesInp()) { + fprintf(stderr, "Warning: slow processing, clearing queued audio buffer of %d bytes ...", SDL_GetQueuedAudioSize(g_devIdInp)); + SDL_ClearQueuedAudio(g_devIdInp); + } + } else { + SDL_ClearQueuedAudio(g_devIdInp); + } + } else { + tLastNoData = tNow; + } + } else { + SDL_PauseAudioDevice(g_devIdOut, SDL_TRUE); + SDL_PauseAudioDevice(g_devIdInp, SDL_TRUE); + + g_ggWave->encode(cbWaveformOut); + } + + return true; +} + +bool GGWave_deinit() { + if (g_devIdInp == 0 && g_devIdOut == 0) { + return false; + } + + delete g_ggWave; + g_ggWave = nullptr; + + SDL_PauseAudioDevice(g_devIdInp, 1); + SDL_CloseAudioDevice(g_devIdInp); + SDL_PauseAudioDevice(g_devIdOut, 1); + SDL_CloseAudioDevice(g_devIdOut); + + g_devIdInp = 0; + g_devIdOut = 0; + + return true; +} + +int main(int argc, char** argv) { +#ifdef __EMSCRIPTEN__ + printf("Build time: %s\n", BUILD_TIMESTAMP); + printf("Press the Init button to start\n"); + + if (argv[1]) { + GGWave_setDefaultCaptureDeviceName(argv[1]); + } +#else + printf("Usage: %s [-cN] [-lN]\n", argv[0]); + printf(" -cN - select capture device N\n"); + printf(" -lN - fixed payload length of size N, N in [1, %d]\n", GGWave::kMaxLengthFixed); + printf("\n"); +#endif + + const GGWave::TxProtocols protocols = { + { GGWAVE_TX_PROTOCOL_CUSTOM_0, { "[R2T2] Normal", 64, 9, 1, } }, + { GGWAVE_TX_PROTOCOL_CUSTOM_1, { "[R2T2] Fast", 64, 6, 1, } }, + { GGWAVE_TX_PROTOCOL_CUSTOM_2, { "[R2T2] Fastest", 64, 3, 1, } }, + { GGWAVE_TX_PROTOCOL_CUSTOM_3, { "[R2T2] Low Normal", 16, 9, 1, } }, + { GGWAVE_TX_PROTOCOL_CUSTOM_4, { "[R2T2] Low Fast", 16, 6, 1, } }, + { GGWAVE_TX_PROTOCOL_CUSTOM_5, { "[R2T2] Low Fastest", 16, 3, 1, } }, + }; + + const auto argm = parseCmdArguments(argc, argv); + const int captureId = argm.count("c") == 0 ? 0 : std::stoi(argm.at("c")); + const int payloadLength = argm.count("l") == 0 ? 16 : std::stoi(argm.at("l")); + + bool isInitialized = false; + + g_doInit = [&]() { + if (GGWave_init(0, captureId, payloadLength, 0) == false) { + fprintf(stderr, "Failed to initialize GGWave\n"); + return false; + } + + g_ggWave->setRxProtocols(protocols); + + isInitialized = true; + printf("Listening for payload with length = %d bytes ..\n", payloadLength); + + return true; + }; + + g_mainUpdate = [&]() { + if (isInitialized == false) { + return true; + } + + GGWave_mainLoop(); + + return true; + }; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop_arg(mainUpdate, NULL, 60, true); +#else + if (g_doInit() == false) { + printf("Error: failed to initialize audio\n"); + return -2; + } + + while (true) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + if (g_mainUpdate() == false) break; + } + + GGWave_deinit(); + + // Cleanup + SDL_CloseAudio(); + SDL_Quit(); +#endif + + return 0; +} diff --git a/examples/arduino-rx/index-tmpl.html b/examples/arduino-rx/index-tmpl.html new file mode 100644 index 0000000..a426014 --- /dev/null +++ b/examples/arduino-rx/index-tmpl.html @@ -0,0 +1,235 @@ + + + + ggwave : arduino-rx + + + + +
+
+
+ +
+ +
+ + +
+ + + + + diff --git a/examples/r2t2/arduino-tx/arduino-tx.ino b/examples/arduino-tx/arduino-tx.ino similarity index 54% rename from examples/r2t2/arduino-tx/arduino-tx.ino rename to examples/arduino-tx/arduino-tx.ino index 3df3f9a..eb9ef73 100644 --- a/examples/r2t2/arduino-tx/arduino-tx.ino +++ b/examples/arduino-tx/arduino-tx.ino @@ -25,5 +25,23 @@ void loop() { GGWave::send(kPinSpeaker, "This is GGWave!!", GGWave::TX_ARDUINO_512_FASTEST); digitalWrite(kPinLed0, LOW); + delay(250); + + digitalWrite(kPinLed0, HIGH); + GGWave::send(kPinSpeaker, "This is NORMAL", GGWave::TX_ARDUINO_512_NORMAL); + digitalWrite(kPinLed0, LOW); + + delay(250); + + digitalWrite(kPinLed0, HIGH); + GGWave::send(kPinSpeaker, "This is FAST", GGWave::TX_ARDUINO_512_FAST); + digitalWrite(kPinLed0, LOW); + + delay(250); + + digitalWrite(kPinLed0, HIGH); + GGWave::send(kPinSpeaker, "This is FASTEST", GGWave::TX_ARDUINO_512_FASTEST); + digitalWrite(kPinLed0, LOW); + delay(5000); } diff --git a/examples/r2t2/arduino-tx/ggwave.h b/examples/arduino-tx/ggwave.h similarity index 100% rename from examples/r2t2/arduino-tx/ggwave.h rename to examples/arduino-tx/ggwave.h diff --git a/examples/r2t2/ggwave-mod/include/ggwave/ggwave.h b/examples/ggwave-mod/include/ggwave/ggwave.h similarity index 83% rename from examples/r2t2/ggwave-mod/include/ggwave/ggwave.h rename to examples/ggwave-mod/include/ggwave/ggwave.h index 5753993..a1ed0e4 100644 --- a/examples/r2t2/ggwave-mod/include/ggwave/ggwave.h +++ b/examples/ggwave-mod/include/ggwave/ggwave.h @@ -90,6 +90,23 @@ extern "C" { // the python module and unfortunately had to do it this way typedef int ggwave_Instance; + // Change file stream for internal ggwave logging. NULL - disable logging + // + // Intentionally passing it as void * instead of FILE * to avoid including a header + // + // // log to standard error + // ggwave_setLogFile(stderr); + // + // // log to standard output + // ggwave_setLogFile(stdout); + // + // // disable logging + // ggwave_setLogFile(NULL); + // + // Note: not thread-safe. Do not call while any GGWave instances are running + // + GGWAVE_API void ggwave_setLogFile(void * fptr); + // Helper method to get default instance parameters GGWAVE_API ggwave_Parameters ggwave_getDefaultParameters(void); @@ -189,8 +206,10 @@ extern "C" { // If the return value is -1 then there was an error during the decoding process. // Usually can occur if there is a lot of background noise in the audio. // - // If the return value is greater than 0, then there will be that number of bytes - // decoded in the outputBuffer + // If the return value is greater than 0, then there are that number of bytes decoded. + // + // IMPORTANT: + // Notice that the decoded data written to the outputBuffer is NOT null terminated. // // Example: // @@ -218,6 +237,39 @@ extern "C" { int dataSize, char * outputBuffer); + // Memory-safe overload of ggwave_decode + // + // outputSize - optionally specify the size of the output buffer + // + // If the return value is -2 then the provided outputBuffer was not big enough to + // store the decoded data. + // + // See ggwave_decode for more information + // + GGWAVE_API int ggwave_ndecode( + ggwave_Instance instance, + const char * dataBuffer, + int dataSize, + char * outputBuffer, + int outputSize); + + // Toggle Rx protocols on and off + // + // instance - the GGWave instance to use + // rxProtocolId - Id of the Rx protocol to modify + // state - 0 - disable, 1 - enable + // + // If an Rx protocol is enabled, the GGWave instance will attempt to decode received + // data using this protocol. By default, all protocols are enabled. + // Use this function to restrict the number of Rx protocols used in the decoding + // process. This helps to reduce the number of false positives and improves the transmission + // accuracy, especially when the Tx/Rx protocol is known in advance. + // + GGWAVE_API void ggwave_toggleRxProtocol( + ggwave_Instance instance, + ggwave_TxProtocolId rxProtocolId, + int state); + #ifdef __cplusplus } @@ -272,15 +324,19 @@ public: static const TxProtocols & getTxProtocols() { static const TxProtocols kTxProtocols { - { GGWAVE_TX_PROTOCOL_AUDIBLE_NORMAL, { "Normal", 40, 9, 3, } }, - { GGWAVE_TX_PROTOCOL_AUDIBLE_FAST, { "Fast", 40, 6, 3, } }, - { GGWAVE_TX_PROTOCOL_AUDIBLE_FASTEST, { "Fastest", 40, 3, 3, } }, - { GGWAVE_TX_PROTOCOL_ULTRASOUND_NORMAL, { "[U] Normal", 320, 9, 3, } }, - { GGWAVE_TX_PROTOCOL_ULTRASOUND_FAST, { "[U] Fast", 320, 6, 3, } }, - { GGWAVE_TX_PROTOCOL_ULTRASOUND_FASTEST, { "[U] Fastest", 320, 3, 3, } }, - { GGWAVE_TX_PROTOCOL_DT_NORMAL, { "[DT] Normal", 24, 9, 1, } }, - { GGWAVE_TX_PROTOCOL_DT_FAST, { "[DT] Fast", 24, 6, 1, } }, - { GGWAVE_TX_PROTOCOL_DT_FASTEST, { "[DT] Fastest", 24, 3, 1, } }, + //{ GGWAVE_TX_PROTOCOL_AUDIBLE_NORMAL, { "Normal", 40, 9, 3, } }, + //{ GGWAVE_TX_PROTOCOL_AUDIBLE_FAST, { "Fast", 40, 6, 3, } }, + //{ GGWAVE_TX_PROTOCOL_AUDIBLE_FASTEST, { "Fastest", 40, 3, 3, } }, + //{ GGWAVE_TX_PROTOCOL_ULTRASOUND_NORMAL, { "[U] Normal", 320, 9, 3, } }, + //{ GGWAVE_TX_PROTOCOL_ULTRASOUND_FAST, { "[U] Fast", 320, 6, 3, } }, + //{ GGWAVE_TX_PROTOCOL_ULTRASOUND_FASTEST, { "[U] Fastest", 320, 3, 3, } }, + //{ GGWAVE_TX_PROTOCOL_DT_NORMAL, { "[DT] Normal", 24, 9, 1, } }, + //{ GGWAVE_TX_PROTOCOL_DT_FAST, { "[DT] Fast", 24, 6, 1, } }, + //{ GGWAVE_TX_PROTOCOL_DT_FASTEST, { "[DT] Fastest", 24, 3, 1, } }, + + { GGWAVE_TX_PROTOCOL_DT_NORMAL, { "Arduino", 16, 9, 1, } }, + { GGWAVE_TX_PROTOCOL_DT_FAST, { "Arduino", 16, 6, 1, } }, + { GGWAVE_TX_PROTOCOL_DT_FASTEST, { "Arduino", 16, 3, 1, } }, }; return kTxProtocols; @@ -306,6 +362,15 @@ public: GGWave(const Parameters & parameters); ~GGWave(); + // set file stream for the internal ggwave logging + // + // By default, ggwave prints internal log messages to stderr. + // To disable logging all together, call this method with nullptr. + // + // Note: not thread-safe. Do not call while any GGWave instances are running + // + static void setLogFile(FILE * fptr); + static const Parameters & getDefaultParameters(); // set Tx data to encode @@ -369,7 +434,7 @@ public: // Tx - static TxProtocolId getDefaultTxProtocolId() { return GGWAVE_TX_PROTOCOL_AUDIBLE_FAST; } + static TxProtocolId getDefaultTxProtocolId() { return GGWAVE_TX_PROTOCOL_DT_NORMAL; } static const TxProtocol & getDefaultTxProtocol() { return getTxProtocols().at(getDefaultTxProtocolId()); } static const TxProtocol & getTxProtocol(int id) { return getTxProtocols().at(TxProtocolId(id)); } static const TxProtocol & getTxProtocol(TxProtocolId id) { return getTxProtocols().at(id); } @@ -388,6 +453,8 @@ public: void setRxProtocols(const RxProtocols & rxProtocols) { m_rxProtocols = rxProtocols; } const RxProtocols & getRxProtocols() const { return m_rxProtocols; } + int lastRxDataLength() const { return m_lastRxDataLength; } + const TxRxData & getRxData() const { return m_rxData; } const RxProtocol & getRxProtocol() const { return m_rxProtocol; } const RxProtocolId & getRxProtocolId() const { return m_rxProtocolId; } diff --git a/examples/ggwave-mod/src/CMakeLists.txt b/examples/ggwave-mod/src/CMakeLists.txt new file mode 100644 index 0000000..c377d7e --- /dev/null +++ b/examples/ggwave-mod/src/CMakeLists.txt @@ -0,0 +1,60 @@ +set(TARGET ggwave-mod) + +add_library(${TARGET} + ggwave.cpp + resampler.cpp + ) + +target_include_directories(${TARGET} PUBLIC + . + ../include + ) + +if (BUILD_SHARED_LIBS) + target_link_libraries(${TARGET} PUBLIC + ${CMAKE_DL_LIBS} + ) + + target_compile_definitions(${TARGET} PUBLIC + GGWAVE_SHARED + ) +endif() + +if (MINGW) + target_link_libraries(${TARGET} PUBLIC + stdc++ + ) +endif() + +if (EMSCRIPTEN) + set(TARGET libggwave-mod) + + add_executable(${TARGET} + ${PROJECT_SOURCE_DIR}/bindings/javascript/emscripten.cpp + ) + + target_link_libraries(${TARGET} PRIVATE + ggwave-mod + ) + + unset(EXTRA_FLAGS) + if (GGWAVE_WASM_SINGLE_FILE) + set(EXTRA_FLAGS "-s SINGLE_FILE=1") + message(STATUS "Embedding WASM inside ggwave-mod.js") + + add_custom_command( + TARGET libggwave-mod POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_BINARY_DIR}/bin/libggwave-mod.js + ${CMAKE_CURRENT_SOURCE_DIR}/ggwave-mod.js + ) + endif() + + set_target_properties(${TARGET} PROPERTIES LINK_FLAGS " \ + --bind \ + -s MODULARIZE=1 \ + -s ALLOW_MEMORY_GROWTH=1 \ + -s EXPORT_NAME=\"'ggwave_factory'\" \ + ${EXTRA_FLAGS} \ + ") +endif() diff --git a/examples/ggwave-mod/src/ggwave-mod.js b/examples/ggwave-mod/src/ggwave-mod.js new file mode 100644 index 0000000..e7e74a1 --- /dev/null +++ b/examples/ggwave-mod/src/ggwave-mod.js @@ -0,0 +1,21 @@ + +var ggwave_factory = (() => { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(ggwave_factory) { + ggwave_factory = ggwave_factory || {}; + +var Module=typeof ggwave_factory!=="undefined"?ggwave_factory:{};var objAssign=Object.assign;var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});if(!Object.getOwnPropertyDescriptor(Module["ready"],"_main")){Object.defineProperty(Module["ready"],"_main",{configurable:true,get:function(){abort("You are getting _main on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_main",{configurable:true,set:function(){abort("You are setting _main on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"___getTypeName")){Object.defineProperty(Module["ready"],"___getTypeName",{configurable:true,get:function(){abort("You are getting ___getTypeName on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"___getTypeName",{configurable:true,set:function(){abort("You are setting ___getTypeName on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"___embind_register_native_and_builtin_types")){Object.defineProperty(Module["ready"],"___embind_register_native_and_builtin_types",{configurable:true,get:function(){abort("You are getting ___embind_register_native_and_builtin_types on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"___embind_register_native_and_builtin_types",{configurable:true,set:function(){abort("You are setting ___embind_register_native_and_builtin_types on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_fflush")){Object.defineProperty(Module["ready"],"_fflush",{configurable:true,get:function(){abort("You are getting _fflush on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_fflush",{configurable:true,set:function(){abort("You are setting _fflush on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"onRuntimeInitialized")){Object.defineProperty(Module["ready"],"onRuntimeInitialized",{configurable:true,get:function(){abort("You are getting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"onRuntimeInitialized",{configurable:true,set:function(){abort("You are setting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}var moduleOverrides=objAssign({},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 ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(Module["ENVIRONMENT"]){throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)")}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;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exiting due to exception: "+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(!(typeof process==="object"&&typeof require==="function"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}requireNodeFS=(()=>{if(!nodePath){fs=require("fs");nodePath=require("path")}});read_=function shell_read(filename,binary){var ret=tryParseAsDataURI(filename);if(ret){return binary?ret:ret.toString()}requireNodeFS();filename=nodePath["normalize"](filename);return fs.readFileSync(filename,binary?null:"utf8")};readBinary=(filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret});readAsync=((filename,onload,onerror)=>{var ret=tryParseAsDataURI(filename);if(ret){onload(ret)}requireNodeFS();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);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_SHELL){if(typeof process==="object"&&typeof require==="function"||typeof window==="object"||typeof importScripts==="function")throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");if(typeof read!="undefined"){read_=function shell_read(f){const data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}readBinary=function readBinary(f){let data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};readAsync=function readAsync(f,onload,onerror){setTimeout(()=>onload(readBinary(f)),0)};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=((status,toThrow)=>{logExceptionOnExit(toThrow);quit(status)})}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}if(!(typeof window==="object"||typeof importScripts==="function"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");{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{throw new Error("environment detection error")}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);objAssign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(!Object.getOwnPropertyDescriptor(Module,"arguments")){Object.defineProperty(Module,"arguments",{configurable:true,get:function(){abort("Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(!Object.getOwnPropertyDescriptor(Module,"thisProgram")){Object.defineProperty(Module,"thisProgram",{configurable:true,get:function(){abort("Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(Module["quit"])quit_=Module["quit"];if(!Object.getOwnPropertyDescriptor(Module,"quit")){Object.defineProperty(Module,"quit",{configurable:true,get:function(){abort("Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}assert(typeof Module["memoryInitializerPrefixURL"]==="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["pthreadMainPrefixURL"]==="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["cdInitializerPrefixURL"]==="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["filePackagePrefixURL"]==="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["read"]==="undefined","Module.read option was removed (modify read_ in JS)");assert(typeof Module["readAsync"]==="undefined","Module.readAsync option was removed (modify readAsync in JS)");assert(typeof Module["readBinary"]==="undefined","Module.readBinary option was removed (modify readBinary in JS)");assert(typeof Module["setWindowTitle"]==="undefined","Module.setWindowTitle option was removed (modify setWindowTitle in JS)");assert(typeof Module["TOTAL_MEMORY"]==="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");if(!Object.getOwnPropertyDescriptor(Module,"read")){Object.defineProperty(Module,"read",{configurable:true,get:function(){abort("Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(Module,"readAsync")){Object.defineProperty(Module,"readAsync",{configurable:true,get:function(){abort("Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(Module,"readBinary")){Object.defineProperty(Module,"readBinary",{configurable:true,get:function(){abort("Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(Module,"setWindowTitle")){Object.defineProperty(Module,"setWindowTitle",{configurable:true,get:function(){abort("Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add 'shell' to `-s ENVIRONMENT` to enable.");var POINTER_SIZE=4;function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function==="function"){var typeNames={"i":"i32","j":"i64","f":"f32","d":"f64"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i{tempRet0=value};var getTempRet0=()=>tempRet0;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(!Object.getOwnPropertyDescriptor(Module,"wasmBinary")){Object.defineProperty(Module,"wasmBinary",{configurable:true,get:function(){abort("Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}var noExitRuntime=Module["noExitRuntime"]||true;if(!Object.getOwnPropertyDescriptor(Module,"noExitRuntime")){Object.defineProperty(Module,"noExitRuntime",{configurable:true,get:function(){abort("Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+text:""))}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce("Invalid Unicode code point 0x"+u.toString(16)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){assert(ptr%2==0,"Pointer passed to UTF16ToString must be aligned to two bytes!");var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){assert(outPtr%2==0,"Pointer passed to stringToUTF16 must be aligned to two bytes!");assert(typeof maxBytesToWrite=="number","stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){assert(ptr%4==0,"Pointer passed to UTF32ToString must be aligned to four bytes!");var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){assert(outPtr%4==0,"Pointer passed to stringToUTF32 must be aligned to four bytes!");assert(typeof maxBytesToWrite=="number","stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var TOTAL_STACK=5242880;if(Module["TOTAL_STACK"])assert(TOTAL_STACK===Module["TOTAL_STACK"],"the stack size can no longer be determined at runtime");var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||67108864;if(!Object.getOwnPropertyDescriptor(Module,"INITIAL_MEMORY")){Object.defineProperty(Module,"INITIAL_MEMORY",{configurable:true,get:function(){abort("Module.INITIAL_MEMORY has been replaced with plain INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}assert(INITIAL_MEMORY>=TOTAL_STACK,"INITIAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");assert(typeof Int32Array!=="undefined"&&typeof Float64Array!=="undefined"&&Int32Array.prototype.subarray!==undefined&&Int32Array.prototype.set!==undefined,"JS engine does not provide full typed array support");assert(!Module["wasmMemory"],"Use of `wasmMemory` detected. Use -s IMPORTED_MEMORY to define wasmMemory externally");assert(INITIAL_MEMORY==67108864,"Detected runtime INITIAL_MEMORY setting. Use -s IMPORTED_MEMORY to define wasmMemory dynamically");var wasmTable;function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);HEAP32[max+4>>2]=34821223;HEAP32[max+8>>2]=2310721022;HEAP32[0]=1668509029}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();var cookie1=HEAPU32[max+4>>2];var cookie2=HEAPU32[max+8>>2];if(cookie1!=34821223||cookie2!=2310721022){abort("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x"+cookie2.toString(16)+" 0x"+cookie1.toString(16))}if(HEAP32[0]!==1668509029)abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}(function(){var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)throw"Runtime error: expected the system to be little-endian! (Run with -s SUPPORT_BIG_ENDIAN=1 to bypass)"})();var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){checkStackCookie();assert(!runtimeInitialized);runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){checkStackCookie();runtimeExited=true}function postRun(){checkStackCookie();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)}assert(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;var runDependencyTracking={};function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&typeof setInterval!=="undefined"){runDependencyWatcher=setInterval(function(){if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err("still waiting on run dependencies:")}err("dependency: "+dep)}if(shown){err("(end of list)")}},1e4)}}else{err("warning: run dependency added without ID")}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id]}else{err("warning: run dependency removed without ID")}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var FS={error:function(){abort("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -s FORCE_FILESYSTEM=1")},init:function(){FS.error()},createDataFile:function(){FS.error()},createPreloadedFile:function(){FS.error()},createLazyFile:function(){FS.error()},open:function(){FS.error()},mkdev:function(){FS.error()},registerDevice:function(){FS.error()},analyzePath:function(){FS.error()},loadFilesFromDB:function(){FS.error()},ErrnoError:function ErrnoError(){FS.error()}};Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}function createExportWrapper(name,fixedasm){return function(){var displayName=name;var asm=fixedasm;if(!fixedasm){asm=Module["asm"]}assert(runtimeInitialized,"native function `"+displayName+"` called before runtime initialization");assert(!runtimeExited,"native function `"+displayName+"` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)");if(!asm[name]){assert(asm[name],"exported native function `"+displayName+"` not found")}return asm[name].apply(null,arguments)}}var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,AGFzbQEAAAAB+QEhYAF/AX9gAX8AYAN/f38AYAN/f38Bf2ACf38AYAJ/fwF/YAR/f39/AGAAAGAAAX9gBX9/f39/AGAGf39/f39/AGAFf39/f38Bf2AEf39/fwF/YAd/f39/f39/AX9gAXwBfGADf35/AX5gAAF+YAZ/f39/f38Bf2ACfH8BfGAGf3x/f39/AX9gDX9/f39/f39/f39/f38AYAp/f39/f39/f39/AGAIf39/f39/f38Bf2AGf399f39/AX9gB39/f39/f38AYAJ/fwF9YAN/f30AYAV/fX9/fwF/YAJ8fAF8YAJ8fwF/YAN8fH8BfGACfn8Bf2AEf39+fgACmQo1A2VudhVfZW1iaW5kX3JlZ2lzdGVyX2VudW0ABgNlbnYbX2VtYmluZF9yZWdpc3Rlcl9lbnVtX3ZhbHVlAAIDZW52Fl9lbWJpbmRfcmVnaXN0ZXJfY2xhc3MAFANlbnYiX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcgAKA2Vudh9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5ABUDZW52GV9lbWJpbmRfcmVnaXN0ZXJfZnVuY3Rpb24ACgNlbnYJaW52b2tlX3ZpAAQDZW52CWludm9rZV9paQAFA2VudgppbnZva2VfdmlpAAIDZW52D2ludm9rZV9paWlpaWlpaQAWA2VudhtfX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzIACANlbnYLZ2V0VGVtcFJldDAACANlbnYRX2VtdmFsX3Rha2VfdmFsdWUABQNlbnYKaW52b2tlX2lpaQADA2VudhFfX3Jlc3VtZUV4Y2VwdGlvbgABA2Vudg1pbnZva2VfdmlpaWlpAAoDZW52DV9lbXZhbF9pbmNyZWYAAQNlbnYNX2VtdmFsX2RlY3JlZgABA2VudhtfX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzMAAANlbnYLaW52b2tlX3ZpaWkABgNlbnYNaW52b2tlX2lpZmlpaQAXA2VudghpbnZva2VfdgABA2VudgtpbnZva2VfaWlpaQAMA2VudghpbnZva2VfaQAAA2VudhhfX2N4YV9hbGxvY2F0ZV9leGNlcHRpb24AAANlbnYLX19jeGFfdGhyb3cAAgNlbnYUX19jeGFfZnJlZV9leGNlcHRpb24AAQNlbnYNaW52b2tlX2lpaWlpaQARA2Vudg5pbnZva2VfaWlpaWlpaQANA2VudgR0aW1lAAADZW52DGludm9rZV92aWlpaQAJA2VudgxpbnZva2VfaWlpaWkACwNlbnYVX2VtYmluZF9yZWdpc3Rlcl92b2lkAAQDZW52FV9lbWJpbmRfcmVnaXN0ZXJfYm9vbAAJA2VudhhfZW1iaW5kX3JlZ2lzdGVyX2ludGVnZXIACQNlbnYWX2VtYmluZF9yZWdpc3Rlcl9mbG9hdAACA2VudhtfZW1iaW5kX3JlZ2lzdGVyX3N0ZF9zdHJpbmcABANlbnYcX2VtYmluZF9yZWdpc3Rlcl9zdGRfd3N0cmluZwACA2VudhZfZW1iaW5kX3JlZ2lzdGVyX2VtdmFsAAQDZW52HF9lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXcAAgNlbnYVZW1zY3JpcHRlbl9tZW1jcHlfYmlnAAMDZW52DV9fbG9jYWx0aW1lX3IABRZ3YXNpX3NuYXBzaG90X3ByZXZpZXcxCGZkX2Nsb3NlAAAWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF93cml0ZQAMA2VudhZlbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwAAADZW52DWNsb2NrX2dldHRpbWUABQNlbnYRX19jeGFfYmVnaW5fY2F0Y2gAAANlbnYPX19jeGFfZW5kX2NhdGNoAAcDZW52BWFib3J0AAcDZW52C3NldFRlbXBSZXQwAAEDZW52F19lbWJpbmRfcmVnaXN0ZXJfYmlnaW50ABgWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQdmZF9zZWVrAAsDZW52CGludm9rZV9qAAADygHIAQcAAQAIBQIZGgAFBAsJAwIBBwcGAgEEBwEEAQQBAAUEAQQNCAsFAQQBAgQBAgcEBAICAwECBAQCEQUBBgwGBQEABAECBQAAAAQDBQAAARsABwAcHR4OAwIDAgIAAwAACAgIDhIODAADDwAIEgsNAgAGHwkTBAwDBQABAAQQEAAAAAUEBQUCAgEDBQICAwMEAAIAAgIHAgUDAAEEAAEHAwMDBQIGBgYGAwUGCQoJCQkKCgoDAAAAAAEBAAABAQgBAAcICAAECwAgBAcBcAGaAZoBBQcBAYAIgIACBg4CfwFBgPfB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AQ0ACwsgACAEKAIURgRAIAQgAzYCFAsgBCAEKAIcQQFrNgIcIAcgABBWIAAQrgELQZjwACEDAkBBmPAAKAIAIgFFBEBBmPAAIQEMAQsDQAJAIAUgASgCECIASARAIAEoAgAiAA0BIAEhAwwDCyAAIAVODQIgAUEEaiEDIAEoAgQiAEUNAiADIQELIAEhAyAAIQEMAAsACyADKAIAIgBFBEBBGBC0ASIAIAU2AhAgACABNgIIIABCADcCACAAQQA2AhQgAyAANgIAQZTwACgCACgCACIBBH9BlPAAIAE2AgAgAygCAAUgAAshAUGY8AAoAgAgARBUQZzwAEGc8AAoAgBBAWo2AgALIAAhAkGk8AAhAwJAQaTwACgCACIBRQRAQaTwACEBDAELA0ACQCAFIAEoAhAiAEgEQCABKAIAIgANASABIQMMAwsgACAFTg0CIAFBBGohAyABKAIEIgBFDQIgAyEBCyABIQMgACEBDAALAAsgAigCFCECIAMoAgAiAEUEQEEgELQBIgAgBTYCECAAIAE2AgggAEIANwIAIABBGGoiAUIANwIAIAAgATYCFCADIAA2AgBBoPAAKAIAKAIAIgEEf0Gg8AAgATYCACADKAIABSAACyEBQaTwACgCACABEFRBqPAAQajwACgCAEEBajYCAAsgAkHgAWoiASAAQRRqRwRAIAEgACgCFCAAQRhqEGYLCwgAQegJEGAAC9wBAQV/AkACQCABIAAoAgQiAiAAKAIAIgNrIgRLBEAgASAEayIGIAAoAggiBSACa00EQCAAIAYEfyACQQAgBhCNASAGagUgAgs2AgQPCyABQQBIDQIgASAFIANrIgJBAXQiBSABIAVLG0H/////ByACQf////8DSRsiBRC0ASICIARqQQAgBhCNARogBEEASgRAIAIgAyAEEIsBGgsgACACIAVqNgIIIAAgASACajYCBCAAIAI2AgAgA0UNASADEK4BDwsgASAETw0AIAAgASADajYCBAsPCyAAEEoACwgAQfwMEGAACw8AQZTwAEGY8AAoAgAQTgseACABBEAgACABKAIAEE4gACABKAIEEE4gARCuAQsLDwBBoPAAQaTwACgCABBQCyoAIAEEQCAAIAEoAgAQUCAAIAEoAgQQUCABQRRqIAEoAhgQaiABEK4BCwsyACAAQdjuACgCADYCGCAAQdDu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NgIEIAMQrgELIAEQrgELCyAAQZQDahBdIAAoAogDIgEEQCAAIAE2AowDIAEQrgELIAAoAvwCIgFFDQAgACABNgKAAyABEK4BCyAMKAIAIgFFDQEgACABNgL0AiABEK4BDAELEAohAhALGiAMKAIAIgFFDQAgACABNgL0AiABEK4BCyAAKALkAiIBRQ0AIAAgATYC6AIgARCuAQsgACgC2AIiAUUNACAAIAE2AtwCIAEQrgELIAAoArwCIgFFDQAgACABNgLAAiABEK4BCyAAKAKwAiIBRQ0AIAAgATYCtAIgARCuAQsgEBBdIBEoAgAiAQRAIAAgATYCjAIgARCuAQsLIBIQXSAAKALwASIBRQ0AIAAgATYC9AEgARCuAQsgDyAAKALkARBqDAELEAohAhALGgsgACgCwAEiAUUNACAAIAE2AsQBIAEQrgELIAsoAgAiAUUNACAAIAE2ArABIAEQrgELIAAoAqABIgFFDQAgACABNgKkASABEK4BCyAAKAKUASIBRQ0AIAAgATYCmAEgARCuAQsgACgCiAEiAUUNACAAIAE2AowBIAEQrgELIAAoAngiAUUNACAAIAE2AnwgARCuAQsgACgCbCIBBEAgACABNgJwIAEQrgELIAIQDgALAAubBAEDfyABIAAgAUYiAjoADAJAIAINAANAIAEoAggiAi0ADA0BAkACfyACIAIoAggiAygCACIERgRAAkAgAygCBCIERQ0AIAQtAAwNAAwDCwJAIAEgAigCAEYEQCACIQEMAQsgAiACKAIEIgEoAgAiADYCBCABIAAEfyAAIAI2AgggAigCCAUgAws2AgggAigCCCIAIAAoAgAgAkdBAnRqIAE2AgAgASACNgIAIAIgATYCCCABKAIIIQMLIAFBAToADCADQQA6AAwgAyADKAIAIgAoAgQiATYCACABBEAgASADNgIICyAAIAMoAgg2AgggAygCCCIBIAEoAgAgA0dBAnRqIAA2AgAgACADNgIEIANBCGoMAQsCQCAERQ0AIAQtAAwNAAwCCwJAIAEgAigCAEcEQCACIQEMAQsgAiABKAIEIgA2AgAgASAABH8gACACNgIIIAIoAggFIAMLNgIIIAIoAggiACAAKAIAIAJHQQJ0aiABNgIAIAEgAjYCBCACIAE2AgggASgCCCEDCyABQQE6AAwgA0EAOgAMIAMgAygCBCIAKAIAIgE2AgQgAQRAIAEgAzYCCAsgACADKAIINgIIIAMoAggiASABKAIAIANHQQJ0aiAANgIAIAAgAzYCACADQQhqCyAANgIADAILIARBDGohASACQQE6AAwgAyAAIANGIgI6AAwgAUEBOgAAIAMhASACRQ0ACwsLywkBBX9BmPAAIQMCQEGY8AAoAgAiAUUEQEGY8AAhAQwBCwNAAkAgACABKAIQIgRIBEAgASgCACIEDQEgASEDDAMLIAAgBEwNAiABQQRqIQMgASgCBCIERQ0CIAMhAQsgASEDIAQhAQwACwALIAMoAgAiBEUEQEEYELQBIgQgADYCECAEIAE2AgggBEIANwIAIARBADYCFCADIAQ2AgBBlPAAKAIAKAIAIgEEf0GU8AAgATYCACADKAIABSAECyEBQZjwACgCACABEFRBnPAAQZzwACgCAEEBajYCAAsgBCgCFCICBEAgAigCoAMhASACQQA2AqADIAEEQCABKAIkIgMEQCABIAM2AiggAxCuAQsgASgCGCIDBEAgASADNgIcIAMQrgELIAEoAgwiAwRAIAEgAzYCECADEK4BCyABKAIAIgMEQCABIAM2AgQgAxCuAQsgARCuAQsgAigClAMiAwRAIAMgAigCmAMiAUYEfyADBQNAIAFBDGsiBCgCACIFBEAgAUEIayAFNgIAIAUQrgELIAQiASADRw0ACyACKAKUAwshASACIAM2ApgDIAEQrgELIAIoAogDIgEEQCACIAE2AowDIAEQrgELIAIoAvwCIgEEQCACIAE2AoADIAEQrgELIAIoAvACIgEEQCACIAE2AvQCIAEQrgELIAIoAuQCIgEEQCACIAE2AugCIAEQrgELIAIoAtgCIgEEQCACIAE2AtwCIAEQrgELIAIoArwCIgEEQCACIAE2AsACIAEQrgELIAIoArACIgEEQCACIAE2ArQCIAEQrgELIAIoApgCIgMEQCADIAIoApwCIgFGBH8gAwUDQCABQQxrIgQoAgAiBQRAIAFBCGsgBTYCACAFEK4BCyAEIgEgA0cNAAsgAigCmAILIQEgAiADNgKcAiABEK4BCyACKAKIAiIBBEAgAiABNgKMAiABEK4BCyACKAL8ASIDBEAgAyACKAKAAiIBRgR/IAMFA0AgAUEMayIEKAIAIgUEQCABQQhrIAU2AgAgBRCuAQsgBCIBIANHDQALIAIoAvwBCyEBIAIgAzYCgAIgARCuAQsgAigC8AEiAQRAIAIgATYC9AEgARCuAQsgAkHgAWogAigC5AEQaiACKALAASIBBEAgAiABNgLEASABEK4BCyACKAKsASIBBEAgAiABNgKwASABEK4BCyACKAKgASIBBEAgAiABNgKkASABEK4BCyACKAKUASIBBEAgAiABNgKYASABEK4BCyACKAKIASIBBEAgAiABNgKMASABEK4BCyACKAJ4IgEEQCACIAE2AnwgARCuAQsgAigCbCIBBEAgAiABNgJwIAEQrgELIAIQrgELAkBBmPAAKAIAIgJFDQBBmPAAIQMgAiEBA0AgAyABIAEoAhAgAEgiBBshAyABIARBAnRqKAIAIgENAAsgA0GY8ABGDQAgAygCECAASg0AAkAgAygCBCIBRQRAIAMoAggiACgCACADRg0BIANBCGohBANAIAQoAgAiAUEIaiEEIAEgASgCCCIAKAIARw0ACwwBCwNAIAEiACgCACIBDQALCyADQZTwACgCAEYEQEGU8AAgADYCAAtBnPAAQZzwACgCAEEBazYCACACIAMQViADEK4BCwumCQEGfwJ/AkACQCABIgMoAgAiBARAIAEoAgQiAkUNAQNAIAIiAygCACICDQALCyADKAIEIgQNAUEAIQRBAQwCCwsgBCADKAIINgIIQQALIQYCQCADIAMoAggiBSgCACICRgRAIAUgBDYCACAAIANGBEBBACECIAQhAAwCCyAFKAIEIQIMAQsgBSAENgIECyADLQAMIQcgASADRwRAIAMgASgCCCIFNgIIIAUgASgCCCgCACABR0ECdGogAzYCACADIAEoAgAiBTYCACAFIAM2AgggAyABKAIEIgU2AgQgBQRAIAUgAzYCCAsgAyABLQAMOgAMIAMgACAAIAFGGyEACwJAIAdFDQAgAEUNACAGBEADQCACLQAMIQMCQCACIAIoAggiASgCAEcEQCADRQRAIAJBAToADCABQQA6AAwgASABKAIEIgMoAgAiBDYCBCAEBEAgBCABNgIICyADIAEoAgg2AgggASgCCCIEIAQoAgAgAUdBAnRqIAM2AgAgAyABNgIAIAEgAzYCCCACIAAgACACKAIAIgFGGyEAIAEoAgQhAgsCQAJAAkACQCACKAIAIgMEQCADLQAMRQ0BCyACKAIEIgEEQCABLQAMRQ0CCyACQQA6AAwCQCAAIAIoAggiAkYEQCAAIQIMAQsgAi0ADA0GCyACQQE6AAwPCyACKAIEIgFFDQELIAEtAAwNACACIQMMAQsgA0EBOgAMIAJBADoADCACIAMoAgQiADYCACAABEAgACACNgIICyADIAIoAgg2AgggAigCCCIAIAAoAgAgAkdBAnRqIAM2AgAgAyACNgIEIAIgAzYCCCACIQELIAMgAygCCCIALQAMOgAMIABBAToADCABQQE6AAwgACAAKAIEIgEoAgAiAjYCBCACBEAgAiAANgIICyABIAAoAgg2AgggACgCCCICIAIoAgAgAEdBAnRqIAE2AgAgASAANgIAIAAgATYCCA8LIANFBEAgAkEBOgAMIAFBADoADCABIAIoAgQiAzYCACADBEAgAyABNgIICyACIAEoAgg2AgggASgCCCIDIAMoAgAgAUdBAnRqIAI2AgAgAiABNgIEIAEgAjYCCCACIAAgACABRhshACABKAIAIQILAkACQCACKAIAIgFFDQAgAS0ADA0AIAIhAwwBCwJAIAIoAgQiAwRAIAMtAAxFDQELIAJBADoADCACKAIIIgItAAxBACAAIAJHGw0CIAJBAToADA8LIAEEQCABLQAMRQRAIAIhAwwCCyACKAIEIQMLIANBAToADCACQQA6AAwgAiADKAIAIgA2AgQgAARAIAAgAjYCCAsgAyACKAIINgIIIAIoAggiACAAKAIAIAJHQQJ0aiADNgIAIAMgAjYCACACIAM2AgggAiEBCyADIAMoAggiAC0ADDoADCAAQQE6AAwgAUEBOgAMIAAgACgCACIBKAIEIgI2AgAgAgRAIAIgADYCCAsgASAAKAIINgIIIAAoAggiAiACKAIAIABHQQJ0aiABNgIAIAEgADYCBCAAIAE2AggPCyACKAIIIgEgASgCACACRkECdGooAgAhAgwACwALIARBAToADAsL2gcCA38BfSMAQUBqIggkACAIIAU2AjxBmPAAIQcCQEGY8AAoAgAiBUUEQEGY8AAhBQwBCwNAAkAgACAFKAIQIglIBEAgBSgCACIJDQEgBSEHDAMLIAAgCUwNAiAFQQRqIQcgBSgCBCIJRQ0CIAchBQsgBSEHIAkhBQwACwALIAcoAgAiCUUEQEEYELQBIgkgADYCECAJIAU2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NgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa1CgYCAgBB+IQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLIAALKQEBfyMAQRBrIgMkACADIAI2AgwgACABIAJBAEEAEKEBGiADQRBqJAALKgEBfyMAQRBrIgMkACADIAI2AgwgACABIAJB3QBBABChARogA0EQaiQAC1kBAX8gACAAKAJIIgFBAWsgAXI2AkggACgCACIBQQhxBEAgACABQSByNgIAQX8PCyAAQgA3AgQgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCEEEAC8IBAQN/AkAgASACKAIQIgMEfyADBSACEJABDQEgAigCEAsgAigCFCIFa0sEQCACIAAgASACKAIkEQMADwsCQCACKAJQQQBIBEBBACEDDAELIAEhBANAIAQiA0UEQEEAIQMMAgsgACADQQFrIgRqLQAAQQpHDQALIAIgACADIAIoAiQRAwAiBCADSQ0BIAAgA2ohACABIANrIQEgAigCFCEFCyAFIAAgARCLARogAiACKAIUIAFqNgIUIAEgA2ohBAsgBAuBAgEEfyAAQQ5GBEBBuRhBxhJBtDQoAgAbDwsgAEH//wNxIQEgAEEQdSEDAkAgAEH//xdKDQAgAUH//wNHDQAgA0ECdEG0NGooAgAiAEEIakHvEiAAGw8LQeogIQICQAJAAkACQAJAAkACQCADQQFrDgUAAQYCAwYLQfDKACEAIAFBAU0NAwwFC0GAywAhACABQTFNDQIMBAsgAUUNAgwDC0HAzQAhACABQQNLDQILAkAgAUUEQCAAIQIMAQsDQCAALQAAIQQgAEEBaiICIQAgBA0AIAIhACABQQFrIgENAAsLIANBAUYNAQsgAi0AAEUNACADQQJ0QbQ0aigCABoLIAILCgAgAEHw8AEQKQsGAEGc8QELBgBBpPEBCwYAQajxAQusAQMBfAF+AX8gAL0iAkI0iKdB/w9xIgNBsghNBHwgA0H9B00EQCAARAAAAAAAAAAAog8LAnwgACAAmiACQgBZGyIA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AUEQajYCACAAAnwgASkDACEEIAEpAwghBSMAQSBrIgAkAAJAIAVC////////////AIMiA0KAgICAgIDAgDx9IANCgICAgICAwP/DAH1UBEAgBUIEhiAEQjyIhCEDIARC//////////8PgyIEQoGAgICAgICACFoEQCADQoGAgICAgICAwAB8IQIMAgsgA0KAgICAgICAgEB9IQIgBEKAgICAgICAgAiFQgBSDQEgAiADQgGDfCECDAELIARQIANCgICAgICAwP//AFQgA0KAgICAgIDA//8AURtFBEAgBUIEhiAEQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgA0L///////+//8MAVg0AQgAhAiADQjCIpyIBQZH3AEkNACAEIQIgBUL///////8/g0KAgICAgIDAAIQiAyEGAkAgAUGB9wBrIghBwABxBEAgAiAIQUBqrYYhBkIAIQIMAQsgCEUNACAGIAitIgeGIAJBwAAgCGutiIQhBiACIAeGIQILIAAgAjcDECAAIAY3AxgCQEGB+AAgAWsiAUHAAHEEQCADIAFBQGqtiCEEQgAhAwwBCyABRQ0AIANBwAAgAWuthiAEIAGtIgKIhCEEIAMgAoghAwsgACAENwMAIAAgAzcDCCAAKQMIQgSGIAApAwAiBEI8iIQhAiAAKQMQIAApAxiEQgBSrSAEQv//////////D4OEIgRCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyAEQoCAgICAgICACIVCAFINACACQgGDIAJ8IQILIABBIGokACACIAVCgICAgICAgICAf4OEvws5AwALowEBAn8jAEGgAWsiBCQAQX8hBSAEIAFBAWtBACABGzYClAEgBCAAIARBngFqIAEbIgA2ApABIARBAEGQARCNASIEQX82AkwgBEHfADYCJCAEQX82AlAgBCAEQZ8BajYCLCAEIARBkAFqNgJUAkAgAUEASARAQeTyAUE9NgIADAELIABBADoAACAEIAIgA0HdAEHeABChASEFCyAEQaABaiQAIAULqwEBBH8gACgCVCIDKAIEIgUgACgCFCAAKAIcIgZrIgQgBCAFSxsiBARAIAMoAgAgBiAEEIsBGiADIAMoAgAgBGo2AgAgAyADKAIEIARrIgU2AgQLIAMoAgAhBCAFIAIgAiAFSxsiBQRAIAQgASAFEIsBGiADIAMoAgAgBWoiBDYCACADIAMoAgQgBWs2AgQLIARBADoAACAAIAAoAiwiATYCHCAAIAE2AhQgAguZAgAgAEUEQEEADwsCfwJAIAAEfyABQf8ATQ0BAkBBxPIBKAIAKAIARQRAIAFBgH9xQYC/A0YNAwwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDAQLIAFBgEBxQYDAA0cgAUGAsANPcUUEQCAAIAFBP3FBgAFyOgACIAAgAUEMdkHgAXI6AAAgACABQQZ2QT9xQYABcjoAAUEDDAQLIAFBgIAEa0H//z9NBEAgACABQT9xQYABcjoAAyAAIAFBEnZB8AFyOgAAIAAgAUEGdkE/cUGAAXI6AAIgACABQQx2QT9xQYABcjoAAUEEDAQLC0Hk8gFBGTYCAEF/BUEBCwwBCyAAIAE6AABBAQsLlC4BC38jAEEQayILJAACQAJAAkACQAJAAkACQAJAAkACQAJAIABB9AFNBEBB6PIBKAIAIgZBECAAQQtqQXhxIABBC0kbIgdBA3YiAnYiAUEDcQRAIAFBf3NBAXEgAmoiA0EDdCIBQZjzAWooAgAiBEEIaiEAAkAgBCgCCCICIAFBkPMBaiIBRgRAQejyASAGQX4gA3dxNgIADAELIAIgATYCDCABIAI2AggLIAQgA0EDdCIBQQNyNgIEIAEgBGoiASABKAIEQQFyNgIEDAwLIAdB8PIBKAIAIgpNDQEgAQRAAkBBAiACdCIAQQAgAGtyIAEgAnRxIgBBACAAa3FBAWsiACAAQQx2QRBxIgJ2IgFBBXZBCHEiACACciABIAB2IgFBAnZBBHEiAHIgASAAdiIBQQF2QQJxIgByIAEgAHYiAUEBdkEBcSIAciABIAB2aiIDQQN0IgBBmPMBaigCACIEKAIIIgEgAEGQ8wFqIgBGBEBB6PIBIAZBfiADd3EiBjYCAAwBCyABIAA2AgwgACABNgIICyAEQQhqIQAgBCAHQQNyNgIEIAQgB2oiAiADQQN0IgEgB2siA0EBcjYCBCABIARqIAM2AgAgCgRAIApBA3YiAUEDdEGQ8wFqIQVB/PIBKAIAIQQCfyAGQQEgAXQiAXFFBEBB6PIBIAEgBnI2AgAgBQwBCyAFKAIICyEBIAUgBDYCCCABIAQ2AgwgBCAFNgIMIAQgATYCCAtB/PIBIAI2AgBB8PIBIAM2AgAMDAtB7PIBKAIAIglFDQEgCUEAIAlrcUEBayIAIABBDHZBEHEiAnYiAUEFdkEIcSIAIAJyIAEgAHYiAUECdkEEcSIAciABIAB2IgFBAXZBAnEiAHIgASAAdiIBQQF2QQFxIgByIAEgAHZqQQJ0QZj1AWooAgAiASgCBEF4cSAHayEDIAEhAgNAAkAgAigCECIARQRAIAIoAhQiAEUNAQsgACgCBEF4cSAHayICIAMgAiADSSICGyEDIAAgASACGyEBIAAhAgwBCwsgASgCGCEIIAEgASgCDCIERwRAIAEoAggiAEH48gEoAgBJGiAAIAQ2AgwgBCAANgIIDAsLIAFBFGoiAigCACIARQRAIAEoAhAiAEUNAyABQRBqIQILA0AgAiEFIAAiBEEUaiICKAIAIgANACAEQRBqIQIgBCgCECIADQALIAVBADYCAAwKC0F/IQcgAEG/f0sNACAAQQtqIgBBeHEhB0Hs8gEoAgAiCUUNAEEAIAdrIQMCQAJAAkACf0EAIAdBgAJJDQAaQR8gB0H///8HSw0AGiAAQQh2IgAgAEGA/j9qQRB2QQhxIgJ0IgAgAEGA4B9qQRB2QQRxIgF0IgAgAEGAgA9qQRB2QQJxIgB0QQ92IAEgAnIgAHJrIgBBAXQgByAAQRVqdkEBcXJBHGoLIgZBAnRBmPUBaigCACICRQRAQQAhAAwBC0EAIQAgB0EAQRkgBkEBdmsgBkEfRht0IQEDQAJAIAIoAgRBeHEgB2siBSADTw0AIAIhBCAFIgMNAEEAIQMgAiEADAMLIAAgAigCFCIFIAUgAiABQR12QQRxaigCECICRhsgACAFGyEAIAFBAXQhASACDQALCyAAIARyRQRAQQAhBEECIAZ0IgBBACAAa3IgCXEiAEUNAyAAQQAgAGtxQQFrIgAgAEEMdkEQcSICdiIBQQV2QQhxIgAgAnIgASAAdiIBQQJ2QQRxIgByIAEgAHYiAUEBdkECcSIAciABIAB2IgFBAXZBAXEiAHIgASAAdmpBAnRBmPUBaigCACEACyAARQ0BCwNAIAAoAgRBeHEgB2siASADSSECIAEgAyACGyEDIAAgBCACGyEEIAAoAhAiAQR/IAEFIAAoAhQLIgANAAsLIARFDQAgA0Hw8gEoAgAgB2tPDQAgBCgCGCEGIAQgBCgCDCIBRwRAIAQoAggiAEH48gEoAgBJGiAAIAE2AgwgASAANgIIDAkLIARBFGoiAigCACIARQRAIAQoAhAiAEUNAyAEQRBqIQILA0AgAiEFIAAiAUEUaiICKAIAIgANACABQRBqIQIgASgCECIADQALIAVBADYCAAwICyAHQfDyASgCACICTQRAQfzyASgCACEDAkAgAiAHayIBQRBPBEBB8PIBIAE2AgBB/PIBIAMgB2oiADYCACAAIAFBAXI2AgQgAiADaiABNgIAIAMgB0EDcjYCBAwBC0H88gFBADYCAEHw8gFBADYCACADIAJBA3I2AgQgAiADaiIAIAAoAgRBAXI2AgQLIANBCGohAAwKCyAHQfTyASgCACIISQRAQfTyASAIIAdrIgE2AgBBgPMBQYDzASgCACICIAdqIgA2AgAgACABQQFyNgIEIAIgB0EDcjYCBCACQQhqIQAMCgtBACEAIAdBL2oiCQJ/QcD2ASgCAARAQcj2ASgCAAwBC0HM9gFCfzcCAEHE9gFCgKCAgICABDcCAEHA9gEgC0EMakFwcUHYqtWqBXM2AgBB1PYBQQA2AgBBpPYBQQA2AgBBgCALIgFqIgZBACABayIFcSICIAdNDQlBoPYBKAIAIgQEQEGY9gEoAgAiAyACaiIBIANNDQogASAESw0KC0Gk9gEtAABBBHENBAJAAkBBgPMBKAIAIgMEQEGo9gEhAANAIAMgACgCACIBTwRAIAEgACgCBGogA0sNAwsgACgCCCIADQALC0EAEK8BIgFBf0YNBSACIQZBxPYBKAIAIgNBAWsiACABcQRAIAIgAWsgACABakEAIANrcWohBgsgBiAHTQ0FIAZB/v///wdLDQVBoPYBKAIAIgQEQEGY9gEoAgAiAyAGaiIAIANNDQYgACAESw0GCyAGEK8BIgAgAUcNAQwHCyAGIAhrIAVxIgZB/v///wdLDQQgBhCvASIBIAAoAgAgACgCBGpGDQMgASEACwJAIABBf0YNACAHQTBqIAZNDQBByPYBKAIAIgEgCSAGa2pBACABa3EiAUH+////B0sEQCAAIQEMBwsgARCvAUF/RwRAIAEgBmohBiAAIQEMBwtBACAGaxCvARoMBAsgACIBQX9HDQUMAwtBACEEDAcLQQAhAQwFCyABQX9HDQILQaT2AUGk9gEoAgBBBHI2AgALIAJB/v///wdLDQEgAhCvASEBQQAQrwEhACABQX9GDQEgAEF/Rg0BIAAgAU0NASAAIAFrIgYgB0Eoak0NAQtBmPYBQZj2ASgCACAGaiIANgIAQZz2ASgCACAASQRAQZz2ASAANgIACwJAAkACQEGA8wEoAgAiBQRAQaj2ASEAA0AgASAAKAIAIgMgACgCBCICakYNAiAAKAIIIgANAAsMAgtB+PIBKAIAIgBBACAAIAFNG0UEQEH48gEgATYCAAtBACEAQaz2ASAGNgIAQaj2ASABNgIAQYjzAUF/NgIAQYzzAUHA9gEoAgA2AgBBtPYBQQA2AgADQCAAQQN0IgNBmPMBaiADQZDzAWoiAjYCACADQZzzAWogAjYCACAAQQFqIgBBIEcNAAtB9PIBIAZBKGsiA0F4IAFrQQdxQQAgAUEIakEHcRsiAGsiAjYCAEGA8wEgACABaiIANgIAIAAgAkEBcjYCBCABIANqQSg2AgRBhPMBQdD2ASgCADYCAAwCCyAALQAMQQhxDQAgAyAFSw0AIAEgBU0NACAAIAIgBmo2AgRBgPMBIAVBeCAFa0EHcUEAIAVBCGpBB3EbIgBqIgI2AgBB9PIBQfTyASgCACAGaiIBIABrIgA2AgAgAiAAQQFyNgIEIAEgBWpBKDYCBEGE8wFB0PYBKAIANgIADAELQfjyASgCACABSwRAQfjyASABNgIACyABIAZqIQJBqPYBIQACQAJAAkACQAJAAkADQCACIAAoAgBHBEAgACgCCCIADQEMAgsLIAAtAAxBCHFFDQELQaj2ASEAA0AgBSAAKAIAIgJPBEAgAiAAKAIEaiIEIAVLDQMLIAAoAgghAAwACwALIAAgATYCACAAIAAoAgQgBmo2AgQgAUF4IAFrQQdxQQAgAUEIakEHcRtqIgkgB0EDcjYCBCACQXggAmtBB3FBACACQQhqQQdxG2oiBiAHIAlqIghrIQIgBSAGRgRAQYDzASAINgIAQfTyAUH08gEoAgAgAmoiADYCACAIIABBAXI2AgQMAwsgBkH88gEoAgBGBEBB/PIBIAg2AgBB8PIBQfDyASgCACACaiIANgIAIAggAEEBcjYCBCAAIAhqIAA2AgAMAwsgBigCBCIAQQNxQQFGBEAgAEF4cSEFAkAgAEH/AU0EQCAGKAIIIgMgAEEDdiIAQQN0QZDzAWpGGiADIAYoAgwiAUYEQEHo8gFB6PIBKAIAQX4gAHdxNgIADAILIAMgATYCDCABIAM2AggMAQsgBigCGCEHAkAgBiAGKAIMIgFHBEAgBigCCCIAIAE2AgwgASAANgIIDAELAkAgBkEUaiIAKAIAIgMNACAGQRBqIgAoAgAiAw0AQQAhAQwBCwNAIAAhBCADIgFBFGoiACgCACIDDQAgAUEQaiEAIAEoAhAiAw0ACyAEQQA2AgALIAdFDQACQCAGIAYoAhwiA0ECdEGY9QFqIgAoAgBGBEAgACABNgIAIAENAUHs8gFB7PIBKAIAQX4gA3dxNgIADAILIAdBEEEUIAcoAhAgBkYbaiABNgIAIAFFDQELIAEgBzYCGCAGKAIQIgAEQCABIAA2AhAgACABNgIYCyAGKAIUIgBFDQAgASAANgIUIAAgATYCGAsgBSAGaiEGIAIgBWohAgsgBiAGKAIEQX5xNgIEIAggAkEBcjYCBCACIAhqIAI2AgAgAkH/AU0EQCACQQN2IgBBA3RBkPMBaiECAn9B6PIBKAIAIgFBASAAdCIAcUUEQEHo8gEgACABcjYCACACDAELIAIoAggLIQAgAiAINgIIIAAgCDYCDCAIIAI2AgwgCCAANgIIDAMLQR8hACACQf///wdNBEAgAkEIdiIAIABBgP4/akEQdkEIcSIDdCIAIABBgOAfakEQdkEEcSIBdCIAIABBgIAPakEQdkECcSIAdEEPdiABIANyIAByayIAQQF0IAIgAEEVanZBAXFyQRxqIQALIAggADYCHCAIQgA3AhAgAEECdEGY9QFqIQQCQEHs8gEoAgAiA0EBIAB0IgFxRQRAQezyASABIANyNgIAIAQgCDYCACAIIAQ2AhgMAQsgAkEAQRkgAEEBdmsgAEEfRht0IQAgBCgCACEBA0AgASIDKAIEQXhxIAJGDQMgAEEddiEBIABBAXQhACADIAFBBHFqIgQoAhAiAQ0ACyAEIAg2AhAgCCADNgIYCyAIIAg2AgwgCCAINgIIDAILQfTyASAGQShrIgNBeCABa0EHcUEAIAFBCGpBB3EbIgBrIgI2AgBBgPMBIAAgAWoiADYCACAAIAJBAXI2AgQgASADakEoNgIEQYTzAUHQ9gEoAgA2AgAgBSAEQScgBGtBB3FBACAEQSdrQQdxG2pBL2siACAAIAVBEGpJGyICQRs2AgQgAkGw9gEpAgA3AhAgAkGo9gEpAgA3AghBsPYBIAJBCGo2AgBBrPYBIAY2AgBBqPYBIAE2AgBBtPYBQQA2AgAgAkEYaiEAA0AgAEEHNgIEIABBCGohASAAQQRqIQAgASAESQ0ACyACIAVGDQMgAiACKAIEQX5xNgIEIAUgAiAFayIEQQFyNgIEIAIgBDYCACAEQf8BTQRAIARBA3YiAEEDdEGQ8wFqIQICf0Ho8gEoAgAiAUEBIAB0IgBxRQRAQejyASAAIAFyNgIAIAIMAQsgAigCCAshACACIAU2AgggACAFNgIMIAUgAjYCDCAFIAA2AggMBAtBHyEAIAVCADcCECAEQf///wdNBEAgBEEIdiIAIABBgP4/akEQdkEIcSICdCIAIABBgOAfakEQdkEEcSIBdCIAIABBgIAPakEQdkECcSIAdEEPdiABIAJyIAByayIAQQF0IAQgAEEVanZBAXFyQRxqIQALIAUgADYCHCAAQQJ0QZj1AWohAwJAQezyASgCACICQQEgAHQiAXFFBEBB7PIBIAEgAnI2AgAgAyAFNgIAIAUgAzYCGAwBCyAEQQBBGSAAQQF2ayAAQR9GG3QhACADKAIAIQEDQCABIgIoAgRBeHEgBEYNBCAAQR12IQEgAEEBdCEAIAIgAUEEcWoiAygCECIBDQALIAMgBTYCECAFIAI2AhgLIAUgBTYCDCAFIAU2AggMAwsgAygCCCIAIAg2AgwgAyAINgIIIAhBADYCGCAIIAM2AgwgCCAANgIICyAJQQhqIQAMBQsgAigCCCIAIAU2AgwgAiAFNgIIIAVBADYCGCAFIAI2AgwgBSAANgIIC0H08gEoAgAiACAHTQ0AQfTyASAAIAdrIgE2AgBBgPMBQYDzASgCACICIAdqIgA2AgAgACABQQFyNgIEIAIgB0EDcjYCBCACQQhqIQAMAwtB5PIBQTA2AgBBACEADAILAkAgBkUNAAJAIAQoAhwiAkECdEGY9QFqIgAoAgAgBEYEQCAAIAE2AgAgAQ0BQezyASAJQX4gAndxIgk2AgAMAgsgBkEQQRQgBigCECAERhtqIAE2AgAgAUUNAQsgASAGNgIYIAQoAhAiAARAIAEgADYCECAAIAE2AhgLIAQoAhQiAEUNACABIAA2AhQgACABNgIYCwJAIANBD00EQCAEIAMgB2oiAEEDcjYCBCAAIARqIgAgACgCBEEBcjYCBAwBCyAEIAdBA3I2AgQgBCAHaiIFIANBAXI2AgQgAyAFaiADNgIAIANB/wFNBEAgA0EDdiIAQQN0QZDzAWohAgJ/QejyASgCACIBQQEgAHQiAHFFBEBB6PIBIAAgAXI2AgAgAgwBCyACKAIICyEAIAIgBTYCCCAAIAU2AgwgBSACNgIMIAUgADYCCAwBC0EfIQAgA0H///8HTQRAIANBCHYiACAAQYD+P2pBEHZBCHEiAnQiACAAQYDgH2pBEHZBBHEiAXQiACAAQYCAD2pBEHZBAnEiAHRBD3YgASACciAAcmsiAEEBdCADIABBFWp2QQFxckEcaiEACyAFIAA2AhwgBUIANwIQIABBAnRBmPUBaiEBAkACQCAJQQEgAHQiAnFFBEBB7PIBIAIgCXI2AgAgASAFNgIADAELIANBAEEZIABBAXZrIABBH0YbdCEAIAEoAgAhBwNAIAciASgCBEF4cSADRg0CIABBHXYhAiAAQQF0IQAgASACQQRxaiICKAIQIgcNAAsgAiAFNgIQCyAFIAE2AhggBSAFNgIMIAUgBTYCCAwBCyABKAIIIgAgBTYCDCABIAU2AgggBUEANgIYIAUgATYCDCAFIAA2AggLIARBCGohAAwBCwJAIAhFDQACQCABKAIcIgJBAnRBmPUBaiIAKAIAIAFGBEAgACAENgIAIAQNAUHs8gEgCUF+IAJ3cTYCAAwCCyAIQRBBFCAIKAIQIAFGG2ogBDYCACAERQ0BCyAEIAg2AhggASgCECIABEAgBCAANgIQIAAgBDYCGAsgASgCFCIARQ0AIAQgADYCFCAAIAQ2AhgLAkAgA0EPTQRAIAEgAyAHaiIAQQNyNgIEIAAgAWoiACAAKAIEQQFyNgIEDAELIAEgB0EDcjYCBCABIAdqIgIgA0EBcjYCBCACIANqIAM2AgAgCgRAIApBA3YiAEEDdEGQ8wFqIQVB/PIBKAIAIQQCf0EBIAB0IgAgBnFFBEBB6PIBIAAgBnI2AgAgBQwBCyAFKAIICyEAIAUgBDYCCCAAIAQ2AgwgBCAFNgIMIAQgADYCCAtB/PIBIAI2AgBB8PIBIAM2AgALIAFBCGohAAsgC0EQaiQAIAALzAwBB38CQCAARQ0AIABBCGsiAyAAQQRrKAIAIgFBeHEiAGohBQJAIAFBAXENACABQQNxRQ0BIAMgAygCACIBayIDQfjyASgCAEkNASAAIAFqIQAgA0H88gEoAgBHBEAgAUH/AU0EQCADKAIIIgIgAUEDdiIEQQN0QZDzAWpGGiACIAMoAgwiAUYEQEHo8gFB6PIBKAIAQX4gBHdxNgIADAMLIAIgATYCDCABIAI2AggMAgsgAygCGCEGAkAgAyADKAIMIgFHBEAgAygCCCICIAE2AgwgASACNgIIDAELAkAgA0EUaiICKAIAIgQNACADQRBqIgIoAgAiBA0AQQAhAQwBCwNAIAIhByAEIgFBFGoiAigCACIEDQAgAUEQaiECIAEoAhAiBA0ACyAHQQA2AgALIAZFDQECQCADIAMoAhwiAkECdEGY9QFqIgQoAgBGBEAgBCABNgIAIAENAUHs8gFB7PIBKAIAQX4gAndxNgIADAMLIAZBEEEUIAYoAhAgA0YbaiABNgIAIAFFDQILIAEgBjYCGCADKAIQIgIEQCABIAI2AhAgAiABNgIYCyADKAIUIgJFDQEgASACNgIUIAIgATYCGAwBCyAFKAIEIgFBA3FBA0cNAEHw8gEgADYCACAFIAFBfnE2AgQgAyAAQQFyNgIEIAAgA2ogADYCAA8LIAMgBU8NACAFKAIEIgFBAXFFDQACQCABQQJxRQRAIAVBgPMBKAIARgRAQYDzASADNgIAQfTyAUH08gEoAgAgAGoiADYCACADIABBAXI2AgQgA0H88gEoAgBHDQNB8PIBQQA2AgBB/PIBQQA2AgAPCyAFQfzyASgCAEYEQEH88gEgAzYCAEHw8gFB8PIBKAIAIABqIgA2AgAgAyAAQQFyNgIEIAAgA2ogADYCAA8LIAFBeHEgAGohAAJAIAFB/wFNBEAgBSgCCCICIAFBA3YiBEEDdEGQ8wFqRhogAiAFKAIMIgFGBEBB6PIBQejyASgCAEF+IAR3cTYCAAwCCyACIAE2AgwgASACNgIIDAELIAUoAhghBgJAIAUgBSgCDCIBRwRAIAUoAggiAkH48gEoAgBJGiACIAE2AgwgASACNgIIDAELAkAgBUEUaiICKAIAIgQNACAFQRBqIgIoAgAiBA0AQQAhAQwBCwNAIAIhByAEIgFBFGoiAigCACIEDQAgAUEQaiECIAEoAhAiBA0ACyAHQQA2AgALIAZFDQACQCAFIAUoAhwiAkECdEGY9QFqIgQoAgBGBEAgBCABNgIAIAENAUHs8gFB7PIBKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiABNgIAIAFFDQELIAEgBjYCGCAFKAIQIgIEQCABIAI2AhAgAiABNgIYCyAFKAIUIgJFDQAgASACNgIUIAIgATYCGAsgAyAAQQFyNgIEIAAgA2ogADYCACADQfzyASgCAEcNAUHw8gEgADYCAA8LIAUgAUF+cTYCBCADIABBAXI2AgQgACADaiAANgIACyAAQf8BTQRAIABBA3YiAUEDdEGQ8wFqIQACf0Ho8gEoAgAiAkEBIAF0IgFxRQRAQejyASABIAJyNgIAIAAMAQsgACgCCAshAiAAIAM2AgggAiADNgIMIAMgADYCDCADIAI2AggPC0EfIQIgA0IANwIQIABB////B00EQCAAQQh2IgEgAUGA/j9qQRB2QQhxIgF0IgIgAkGA4B9qQRB2QQRxIgJ0IgQgBEGAgA9qQRB2QQJxIgR0QQ92IAEgAnIgBHJrIgFBAXQgACABQRVqdkEBcXJBHGohAgsgAyACNgIcIAJBAnRBmPUBaiEBAkACQAJAQezyASgCACIEQQEgAnQiB3FFBEBB7PIBIAQgB3I2AgAgASADNgIAIAMgATYCGAwBCyAAQQBBGSACQQF2ayACQR9GG3QhAiABKAIAIQEDQCABIgQoAgRBeHEgAEYNAiACQR12IQEgAkEBdCECIAQgAUEEcWoiB0EQaigCACIBDQALIAcgAzYCECADIAQ2AhgLIAMgAzYCDCADIAM2AggMAQsgBCgCCCIAIAM2AgwgBCADNgIIIANBADYCGCADIAQ2AgwgAyAANgIIC0GI8wFBiPMBKAIAQQFrIgBBfyAAGzYCAAsLUgECf0H07wAoAgAiASAAQQNqQXxxIgJqIQACQCACQQAgACABTRsNACAAPwBBEHRLBEAgABAsRQ0BC0H07wAgADYCACABDwtB5PIBQTA2AgBBfwsfAEHY9gEoAgBFBEBB3PYBIAE2AgBB2PYBIAA2AgALC0cCAX4Bf0HY9gFBADYCAEHgABA0rRALrUIghoQhAEHY9gEoAgAhAUHY9gFBADYCACABQQFHBEAgAA8LQQAQEhoQCxoQ0gEAC4ADAgZ/AX4jAEEwayIAJABBASAAQSBqEC0EQEHk8gEoAgAhAiMAQRBrIgAkAEEQEBghARDJASAAQfzvADYCDCAAIAI2AghB2PYBQQA2AgAgACAAKQIINwMAQekAIAEgAEG+DxAWGkHY9gEoAgAhAEHY9gFBADYCACAAQQFHBEAgAUHA4wBB6gAQGQALEAohABALGiABEBogABAOAAsgAEEQaiIEIABBIGoiATQCADcDACAAIAFBBHI0AgA3AwgjAEEgayIBJAAjAEEQayIDJAAjAEEQayIFJAAjAEEQayICJAAgAiAEKQMAQoCU69wDfjcDACACIAIpAwA3AwggAikDCCEGIAJBEGokACAFQRBqJAAgAyAGNwMIIAEgAykDCDcDCCADQRBqJAAgASkDCCEGIAEgACkDCDcDACABIAYgASkDAHw3AxAgASABKQMQNwMYIAEpAxghBiABQSBqJAAgACAGNwMYIAAgACkDGDcDKCAAKQMoIQYgAEEwaiQAIAYLBQBBgAwLUwEBfyAAQQEgABshAAJAA0AgABCtASIBDQFB6PYBKAIAIgEEQCABEQcADAELC0EEEBgiAEGY7AA2AgAgAEGE7AA2AgAgAEHM7ABB4wAQGQALIAELBwAgABC0AQs8AQJ/IAEQngEiAkENahC0ASIDQQA2AgggAyACNgIEIAMgAjYCACAAIANBDGogASACQQFqEIsBNgIAIAALUQAgAEGY7AA2AgAgAEHg7AA2AgBB2PYBQQA2AgBB5AAgAEEEaiABEA0aQdj2ASgCACEAQdj2AUEANgIAIABBAUcEQA8LEAohABALGiAAEA4AC2wAIABBmOwANgIAIABB9OwANgIAAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQshAUHY9gFBADYCAEHkACAAQQRqIAEQDRpB2PYBKAIAIQFB2PYBQQA2AgAgAUEBRwRAIAAPCxAKIQAQCxogABAOAAtTACAAQZjsADYCACAAQfTsADYCAEHY9gFBADYCAEHkACAAQQRqIAEQDRpB2PYBKAIAIQFB2PYBQQA2AgAgAUEBRwRAIAAPCxAKIQAQCxogABAOAAsRACACBEAgACABIAIQiwEaCws4AAJAQdj2AUEANgIAIAEQrgFB2PYBKAIAIQBB2PYBQQA2AgAgAEEBRw0AQQAQEhoQCxoQ0gEACwsjACAALQALQQd2BEAgACAAKAIAIAAoAghB/////wdxELsBCwuPBAEJfyMAQRBrIgkkAAJAIAIgAC0AC0EHdgR/IAAoAghB/////wdxQQFrBUEKCyIFAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0ACwsiA2tNBEAgAkUNAQJ/IAAtAAtBB3YEQCAAKAIADAELIAALIgUgA2ogASACELoBIAIgA2ohAQJAIAAtAAtBB3YEQCAAIAE2AgQMAQsgACABOgALCyAJQQA6AA8gASAFaiAJLQAPOgAADAELIwBBEGsiBiQAAkAgAiADaiAFayIEIAVBf3NBEWtNBEACfyAALQALQQd2BEAgACgCAAwBCyAACyEKAn8gBUHn////B0kEQCAGIAVBAXQ2AgggBiAEIAVqNgIMIwBBEGsiCyQAIAZBDGoiBygCACAGQQhqIggoAgBJIQQgC0EQaiQAIAggByAEGygCACIEQQtPBH8gBEEQakFwcSIEIARBAWsiBCAEQQtGGwVBCgsMAQtBbgtBAWoiBBC0ASEHIAMEQCAHIAogAxC6AQsgAgRAIAMgB2ogASACELoBC0EAIggEQCADIAdqIAJqIAMgCmogCBC6AQsgBUEBaiIBQQtHBEAgACAKIAEQuwELIAAgBzYCACAAIARBgICAgHhyNgIIIAAgAiADaiAIaiIBNgIEIAZBADoAByABIAdqIAYtAAc6AAAgBkEQaiQADAELEEwACwsgCUEQaiQAIAALuAEBBX8jAEEQayIFJAAgARCeASECIwBBEGsiBCQAAkAgAkFvTQRAAkAgAkEKTQRAIAAgAjoACyAAIQMMAQsgACACQQtPBH8gAkEQakFwcSIDIANBAWsiAyADQQtGGwVBCgtBAWoiBhC0ASIDNgIAIAAgBkGAgICAeHI2AgggACACNgIECyADIAEgAhC6ASAEQQA6AA8gAiADaiAELQAPOgAAIARBEGokAAwBCxBMAAsgBUEQaiQAIAALBwAgABCuAQsQACAAIAE2AgQgACACNgIAC0oBAn8jAEEQayIDJAAgA0EIaiIEIAAgASAAKAIAKAIMEQIAIAQoAgQgAigCBEYEfyAEKAIAIAIoAgBGBUEACyEAIANBEGokACAACxgAIAEoAgQgAEYEfyACIAEoAgBGBUEACwvnAQEFfyAAIQQjAEGQCGsiAiQAQeTyASgCACEFAkACQAJAAn8gAkEQaiEAQcTyASgCACgCFBpBACABIAFBlQFLG0EBdEGg4ABqLwEAQfzRAGoiAxCeASIGQYAITwRAIAAgA0H/BxCLARogAEEAOgD/B0HEAAwBCyAAIAMgBkEBahCLARpBAAsiA0EBag4CAAIBC0Hk8gEoAgAhAwtB6iAhACADQRxGDQAQMAALIAAtAABFBEAgAiABNgIAIAJBEGoiAEGACEHxDyACEJoBGgtB5PIBIAU2AgAgBCAAEL4BGiACQZAIaiQACwUAQZEQCxwAIAJBgQJOBEAgAEGRChC+ARoPCyAAIAIQwwELBQBB4wsLHAAgAkGBAk4EQCAAQe8JEL4BGg8LIAAgAhDDAQtHACAAAn8gAkGBAk4EQBDJAUH87wAMAQsCQEHg9gEtAABBAXENAEHg9gEQ0AFFDQBB4PYBENEBC0H47wALNgIEIAAgAjYCAAsiAAJAQeT2AS0AAEEBcQ0AQeT2ARDQAUUNAEHk9gEQ0QELC+ABAQJ/IwBBEGsiAyQAAkAgASgCAARAAn8gAi0AC0EHdgRAIAIoAgQMAQsgAi0ACwsEQCACQfMaQfMaEJ4BEL0BGgsgAyABKAIEIgQgASgCACAEKAIAKAIYEQIAQdj2AUEANgIAQeYAIAIgAxANGkHY9gEoAgAhAUHY9gFBADYCACABQQFGDQEgAxC8AQsgACACKQIANwIAIAAgAigCCDYCCEEAIQADQCAAQQNHBEAgAiAAQQJ0akEANgIAIABBAWohAAwBCwsgA0EQaiQADwsQCiEAEAsaIAMQvAEgABAOAAs4ACAAAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsCfyABLQALQQd2BEAgASgCBAwBCyABLQALCxC9AQvIAQECfyMAQSBrIgMkACADIAIQvgEhAkHY9gFBADYCAEHnACADQRBqIAEgAhATQdj2ASgCACEEQdj2AUEANgIAAkACQCAEQQFHBEBB2PYBQQA2AgBB6AAgACADQRBqEA0aQdj2ASgCACEEQdj2AUEANgIAIARBAUYNASADQRBqELwBIAIQvAEgAEGc4wA2AgAgACABKQIANwIIIANBIGokACAADwsQCiEAEAsaDAELEAohABALGiADQRBqELwBCyACELwBIAAQDgALCgAgABDvARogAAsKACAAEM0BEK4BCwUAEDAAC5wBAQR/IwBBEGsiASQAIAFBADYCDCABIAA2AgQgASAANgIAIAEgAEEBajYCCCABIQMjAEEQayIEJAAgBEEIaiIAIAMoAgQ2AgAgACgCAC0AAEUEQAJ/AkAgAygCCCICLQAAIgBBAUcEfyAAQQJxDQEgAkECOgAAQQEFQQALDAELQakLQQAQzwEACyECCyAEQRBqJAAgAUEQaiQAIAILagEDfyMAQRBrIgEkACABQQA2AgwgASAANgIEIAEgADYCACABIABBAWo2AgggASECIwBBEGsiAyQAIANBCGoiACACKAIENgIAIAAoAgBBAToAACACKAIIQQE6AAAgA0EQaiQAIAFBEGokAAvZAQEBf0GA8AAoAgAhAEHY9gFBADYCACAAEBVB2PYBKAIAIQBB2PYBQQA2AgACQCAAQQFHBEBB2PYBQQA2AgBB+QBBlg9BABAIQdj2ASgCACEAQdj2AUEANgIAIABBAUcNAQtBABASIQAQCxogABAuGkHY9gFBADYCAEH5AEH3CkEAEAhB2PYBKAIAIQBB2PYBQQA2AgAgAEEBRw0AQQAQEhoQCxpB2PYBQQA2AgBB+gAQFUHY9gEoAgAhAEHY9gFBADYCACAAQQFGBEBBABASGhALGgsQ0gELAAsLACAAIAFBABDUAQt0AQF/IAJFBEAgACgCBCABKAIERg8LIAAgAUYEQEEBDwsgASgCBCICLQAAIQECQCAAKAIEIgMtAAAiAEUNACAAIAFHDQADQCACLQABIQEgAy0AASIARQ0BIAJBAWohAiADQQFqIQMgACABRg0ACwsgACABRguiAQECfyMAQUBqIgMkAAJ/QQEgACABQQAQ1AENABpBACABRQ0AGkEAIAFByOUAENYBIgFFDQAaIANBCGoiBEEEckEAQTQQjQEaIANBATYCOCADQX82AhQgAyAANgIQIAMgATYCCCABIAQgAigCAEEBIAEoAgAoAhwRBgAgAygCICIAQQFGBEAgAiADKAIYNgIACyAAQQFGCyEAIANBQGskACAAC6UCAQR/IwBBQGoiAiQAIAAoAgAiA0EEaygCACEEIANBCGsoAgAhBSACQQA2AhQgAkGY5QA2AhAgAiAANgIMIAIgATYCCEEAIQMgAkEYakEAQScQjQEaIAAgBWohAAJAIAQgAUEAENQBBEAgAkEBNgI4IAQgAkEIaiAAIABBAUEAIAQoAgAoAhQRCgAgAEEAIAIoAiBBAUYbIQMMAQsgBCACQQhqIABBAUEAIAQoAgAoAhgRCQACQAJAIAIoAiwOAgABAgsgAigCHEEAIAIoAihBAUYbQQAgAigCJEEBRhtBACACKAIwQQFGGyEDDAELIAIoAiBBAUcEQCACKAIwDQEgAigCJEEBRw0BIAIoAihBAUcNAQsgAigCGCEDCyACQUBrJAAgAwtdAQF/IAAoAhAiA0UEQCAAQQE2AiQgACACNgIYIAAgATYCEA8LAkAgASADRgRAIAAoAhhBAkcNASAAIAI2AhgPCyAAQQE6ADYgAEECNgIYIAAgACgCJEEBajYCJAsLGgAgACABKAIIQQAQ1AEEQCABIAIgAxDXAQsLMwAgACABKAIIQQAQ1AEEQCABIAIgAxDXAQ8LIAAoAggiACABIAIgAyAAKAIAKAIcEQYAC1IBAX8gACgCBCEEIAAoAgAiACABAn9BACACRQ0AGiAEQQh1IgEgBEEBcUUNABogASACKAIAaigCAAsgAmogA0ECIARBAnEbIAAoAgAoAhwRBgALcAECfyAAIAEoAghBABDUAQRAIAEgAiADENcBDwsgACgCDCEEIABBEGoiBSABIAIgAxDaAQJAIARBAkgNACAFIARBA3RqIQQgAEEYaiEAA0AgACABIAIgAxDaASABLQA2DQEgAEEIaiIAIARJDQALCwu6BQEEfyMAQUBqIgUkAAJAIAFBhOgAQQAQ1AEEQCACQQA2AgBBASEDDAELAkAgACABIAAtAAhBGHEEf0EBBSABRQ0BIAFB+OUAENYBIgZFDQEgBi0ACEEYcUEARwsQ1AEhBAsgBARAQQEhAyACKAIAIgBFDQEgAiAAKAIANgIADAELAkAgAUUNACABQajmABDWASIERQ0BIAIoAgAiAQRAIAIgASgCADYCAAsgBCgCCCIBIAAoAggiBkF/c3FBB3ENASABQX9zIAZxQeAAcQ0BQQEhAyAAKAIMIAQoAgxBABDUAQ0BIAAoAgxB+OcAQQAQ1AEEQCAEKAIMIgBFDQIgAEHc5gAQ1gFFIQMMAgsgACgCDCIBRQ0AQQAhAyABQajmABDWASIBBEAgAC0ACEEBcUUNAgJ/IAEhACAEKAIMIQICQANAQQAgAkUNAhogAkGo5gAQ1gEiAkUNASACKAIIIAAoAghBf3NxDQFBASAAKAIMIAIoAgxBABDUAQ0CGiAALQAIQQFxRQ0BIAAoAgwiAUUNASABQajmABDWASIBBEAgAigCDCECIAEhAAwBCwsgACgCDCIARQ0AIABBmOcAENYBIgBFDQAgACACKAIMEN0BIQMLIAMLIQMMAgsgACgCDCIBRQ0BIAFBmOcAENYBIgEEQCAALQAIQQFxRQ0CIAEgBCgCDBDdASEDDAILIAAoAgwiAEUNASAAQcjlABDWASIBRQ0BIAQoAgwiAEUNASAAQcjlABDWASIARQ0BIAVBCGoiA0EEckEAQTQQjQEaIAVBATYCOCAFQX82AhQgBSABNgIQIAUgADYCCCAAIAMgAigCAEEBIAAoAgAoAhwRBgACQCAFKAIgIgBBAUcNACACKAIARQ0AIAIgBSgCGDYCAAsgAEEBRiEDDAELQQAhAwsgBUFAayQAIAMLTwEBfwJAIAFFDQAgAUGY5wAQ1gEiAUUNACABKAIIIAAoAghBf3NxDQAgACgCDCABKAIMQQAQ1AFFDQAgACgCECABKAIQQQAQ1AEhAgsgAguaAQAgAEEBOgA1AkAgACgCBCACRw0AIABBAToANAJAIAAoAhAiAkUEQCAAQQE2AiQgACADNgIYIAAgATYCECADQQFHDQIgACgCMEEBRg0BDAILIAEgAkYEQCAAKAIYIgJBAkYEQCAAIAM2AhggAyECCyAAKAIwQQFHDQIgAkEBRg0BDAILIAAgACgCJEEBajYCJAsgAEEBOgA2Cwu0BAEDfyAAIAEoAgggBBDUAQRAAkAgASgCBCACRw0AIAEoAhxBAUYNACABIAM2AhwLDwsCQCAAIAEoAgAgBBDUAQRAAkAgAiABKAIQRwRAIAEoAhQgAkcNAQsgA0EBRw0CIAFBATYCIA8LIAEgAzYCICABKAIsQQRHBEAgAEEQaiIFIAAoAgxBA3RqIQdBACEDIAECfwJAA0ACQCAFIAdPDQAgAUEAOwE0IAUgASACIAJBASAEEOABIAEtADYNAAJAIAEtADVFDQAgAS0ANARAQQEhAyABKAIYQQFGDQRBASEGIAAtAAhBAnENAQwEC0EBIQYgAC0ACEEBcUUNAwsgBUEIaiEFDAELC0EEIAZFDQEaC0EDCzYCLCADQQFxDQILIAEgAjYCFCABIAEoAihBAWo2AiggASgCJEEBRw0BIAEoAhhBAkcNASABQQE6ADYPCyAAKAIMIQUgAEEQaiIGIAEgAiADIAQQ4QEgBUECSA0AIAYgBUEDdGohBiAAQRhqIQUCQCAAKAIIIgBBAnFFBEAgASgCJEEBRw0BCwNAIAEtADYNAiAFIAEgAiADIAQQ4QEgBUEIaiIFIAZJDQALDAELIABBAXFFBEADQCABLQA2DQIgASgCJEEBRg0CIAUgASACIAMgBBDhASAFQQhqIgUgBkkNAAwCCwALA0AgAS0ANg0BIAEoAiRBAUYEQCABKAIYQQFGDQILIAUgASACIAMgBBDhASAFQQhqIgUgBkkNAAsLC0sBAn8gACgCBCIGQQh1IQcgACgCACIAIAEgAiAGQQFxBH8gByADKAIAaigCAAUgBwsgA2ogBEECIAZBAnEbIAUgACgCACgCFBEKAAtJAQJ/IAAoAgQiBUEIdSEGIAAoAgAiACABIAVBAXEEfyAGIAIoAgBqKAIABSAGCyACaiADQQIgBUECcRsgBCAAKAIAKAIYEQkAC4oCACAAIAEoAgggBBDUAQRAAkAgASgCBCACRw0AIAEoAhxBAUYNACABIAM2AhwLDwsCQCAAIAEoAgAgBBDUAQRAAkAgAiABKAIQRwRAIAEoAhQgAkcNAQsgA0EBRw0CIAFBATYCIA8LIAEgAzYCIAJAIAEoAixBBEYNACABQQA7ATQgACgCCCIAIAEgAiACQQEgBCAAKAIAKAIUEQoAIAEtADUEQCABQQM2AiwgAS0ANEUNAQwDCyABQQQ2AiwLIAEgAjYCFCABIAEoAihBAWo2AiggASgCJEEBRw0BIAEoAhhBAkcNASABQQE6ADYPCyAAKAIIIgAgASACIAMgBCAAKAIAKAIYEQkACwupAQAgACABKAIIIAQQ1AEEQAJAIAEoAgQgAkcNACABKAIcQQFGDQAgASADNgIcCw8LAkAgACABKAIAIAQQ1AFFDQACQCACIAEoAhBHBEAgASgCFCACRw0BCyADQQFHDQEgAUEBNgIgDwsgASACNgIUIAEgAzYCICABIAEoAihBAWo2AigCQCABKAIkQQFHDQAgASgCGEECRw0AIAFBAToANgsgAUEENgIsCwuXAgEGfyAAIAEoAgggBRDUAQRAIAEgAiADIAQQ3gEPCyABLQA1IQcgACgCDCEGIAFBADoANSABLQA0IQggAUEAOgA0IABBEGoiCSABIAIgAyAEIAUQ4AEgByABLQA1IgpyIQcgCCABLQA0IgtyIQgCQCAGQQJIDQAgCSAGQQN0aiEJIABBGGohBgNAIAEtADYNAQJAIAsEQCABKAIYQQFGDQMgAC0ACEECcQ0BDAMLIApFDQAgAC0ACEEBcUUNAgsgAUEAOwE0IAYgASACIAMgBCAFEOABIAEtADUiCiAHciEHIAEtADQiCyAIciEIIAZBCGoiBiAJSQ0ACwsgASAHQf8BcUEARzoANSABIAhB/wFxQQBHOgA0CzkAIAAgASgCCCAFENQBBEAgASACIAMgBBDeAQ8LIAAoAggiACABIAIgAyAEIAUgACgCACgCFBEKAAscACAAIAEoAgggBRDUAQRAIAEgAiADIAQQ3gELC0MBAX8jAEEQayIDJAAgAyACKAIANgIMIAAgASADQQxqIAAoAgAoAhARAwAiAARAIAIgAygCDDYCAAsgA0EQaiQAIAALFwAgAEUEQEEADwsgAEGo5gAQ1gFBAEcLBQBB6AoLBQBBghALFQAgAEHg7AA2AgAgAEEEahDsASAACygBAX8gACgCAEEMayIAIAAoAghBAWsiATYCCCABQQBIBEAgABCuAQsLCgAgABDrARCuAQsHACAAKAIECxUAIABB9OwANgIAIABBBGoQ7AEgAAsKACAAEO8BEK4BCw0AIAAQ6wEaIAAQrgELBAAjAAsGACAAJAALEAAjACAAa0FwcSIAJAAgAAsIAEGA9wEkAQsHACMAIwFrCwQAIwEL8AEBA38gAEUEQEHs8AEoAgAEQEHs8AEoAgAQ+AEhAQtB8O8AKAIABEBB8O8AKAIAEPgBIAFyIQELQbDxASgCACIABEADQCAAKAJMGiAAKAIUIAAoAhxHBEAgABD4ASABciEBCyAAKAI4IgANAAsLIAEPCyAAKAJMQQBOIQICQAJAIAAoAhQgACgCHEYNACAAQQBBACAAKAIkEQMAGiAAKAIUDQBBfyEBDAELIAAoAgQiASAAKAIIIgNHBEAgACABIANrrEEBIAAoAigRDwAaC0EAIQEgAEEANgIcIABCADcDECAAQgA3AgQgAkUNAAsgAQvRAQEDfyMAQRBrIgMkACADIAE2AgwgACEEIwBBEGsiAiQAIAIgATYCDEHw9gEoAgAhAEHw9gFBADYCACAABEADQCAAKAIAIQEgABCuASABIgANAAsLIAIgAigCDDYCCEHM8gEoAgAiAEF/RwRAIAAQrgELQczyAUEAQQAgBCACKAIIEKoBIgBBBCAAQQRLG0EBaiIBEK0BIgAEfyAAIAEgBCACKAIMEKoBGiAABUF/CzYCAEGO8gFBjvIBLQAAQQJyOgAAIAJBEGokACADQRBqJAALIgEBfiABIAKtIAOtQiCGhCAEIAARDwAiBUIgiKcQMSAFpwsUAQF+IAAREAAiAUIgiKcQMSABpwscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAyCwujZR8AQYAIC/YaLSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABzYW1wbGVGb3JtYXRPdXQAc2FtcGxlUmF0ZU91dAB1bnNpZ25lZCBzaG9ydAB1bnNpZ25lZCBpbnQAaW5pdABmbG9hdABJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIHBsYXliYWNrIHNhbXBsZSBmb3JtYXQASW52YWxpZCBvciB1bnN1cHBvcnRlZCBjYXB0dXJlIHNhbXBsZSBmb3JtYXQAU2FtcGxlRm9ybWF0AHVpbnQ2NF90AGdldERlZmF1bHRQYXJhbWV0ZXJzAHZlY3RvcgB1bnNwZWNpZmllZCBzeXN0ZW1fY2F0ZWdvcnkgZXJyb3IAdW5zcGVjaWZpZWQgZ2VuZXJpY19jYXRlZ29yeSBlcnJvcgB1bnNpZ25lZCBjaGFyAHNhbXBsZUZvcm1hdElucABzYW1wbGVSYXRlSW5wAEFyZHVpbm8Ac3RkOjpleGNlcHRpb24AdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHRocmV3IGFuIGV4Y2VwdGlvbgBfX2N4YV9ndWFyZF9hY3F1aXJlIGRldGVjdGVkIHJlY3Vyc2l2ZSBpbml0aWFsaXphdGlvbgBuYW4Ac3lzdGVtAGJvb2wAdG9nZ2xlUnhQcm90b2NvbABzdGQ6OmJhZF9mdW5jdGlvbl9jYWxsAGVtc2NyaXB0ZW46OnZhbABJbnZhbGlkIHBheWxvYWQgbGVnbnRoAHBheWxvYWRMZW5ndGgAZGlzYWJsZUxvZwBlbmFibGVMb2cAdW5zaWduZWQgbG9uZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAEludmFsaWQgY2FwdHVyZS9wbGF5YmFjayBzYW1wbGUgcmF0ZQBJbnZhbGlkIHNhbXBsZXMgcGVyIGZyYW1lAHNhbXBsZXNQZXJGcmFtZQBkb3VibGUAZnJlZQBlbmNvZGUAZGVjb2RlAG1hcDo6YXQ6ICBrZXkgbm90IGZvdW5kAHNvdW5kTWFya2VyVGhyZXNob2xkAHZvaWQAdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHJldHVybmVkAGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDKSBmYWlsZWQAVHhQcm90b2NvbElkAFVua25vd24gZXJyb3IgJWQAc3RkOjpiYWRfYWxsb2MAZ2VuZXJpYwBHR1dBVkVfVFhfUFJPVE9DT0xfRFRfRkFTVEVTVABHR1dBVkVfVFhfUFJPVE9DT0xfQVVESUJMRV9GQVNURVNUAEdHV0FWRV9UWF9QUk9UT0NPTF9VTFRSQVNPVU5EX0ZBU1RFU1QAR0dXQVZFX1RYX1BST1RPQ09MX0RUX0ZBU1QAR0dXQVZFX1RYX1BST1RPQ09MX0FVRElCTEVfRkFTVABHR1dBVkVfVFhfUFJPVE9DT0xfVUxUUkFTT1VORF9GQVNUAE5BTgBHR1dBVkVfVFhfUFJPVE9DT0xfRFRfTk9STUFMAEdHV0FWRV9UWF9QUk9UT0NPTF9BVURJQkxFX05PUk1BTABHR1dBVkVfVFhfUFJPVE9DT0xfVUxUUkFTT1VORF9OT1JNQUwAQVNDSUkASU5GAEdHV0FWRV9TQU1QTEVfRk9STUFUX1VOREVGSU5FRABDAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AR0dXQVZFX1RYX1BST1RPQ09MX0NVU1RPTV85AEdHV0FWRV9UWF9QUk9UT0NPTF9DVVNUT01fOABHR1dBVkVfU0FNUExFX0ZPUk1BVF9VOABHR1dBVkVfU0FNUExFX0ZPUk1BVF9JOABVVEYtOABHR1dBVkVfVFhfUFJPVE9DT0xfQ1VTVE9NXzcAR0dXQVZFX1RYX1BST1RPQ09MX0NVU1RPTV82AEdHV0FWRV9TQU1QTEVfRk9STUFUX1UxNgBHR1dBVkVfU0FNUExFX0ZPUk1BVF9JMTYAR0dXQVZFX1RYX1BST1RPQ09MX0NVU1RPTV81AEdHV0FWRV9UWF9QUk9UT0NPTF9DVVNUT01fNABHR1dBVkVfVFhfUFJPVE9DT0xfQ1VTVE9NXzMAR0dXQVZFX1RYX1BST1RPQ09MX0NVU1RPTV8yAEdHV0FWRV9TQU1QTEVfRk9STUFUX0YzMgBHR1dBVkVfVFhfUFJPVE9DT0xfQ1VTVE9NXzEAR0dXQVZFX1RYX1BST1RPQ09MX0NVU1RPTV8wAC4AKG51bGwpADogAEVycm9yOiBjYXB0dXJlIHNhbXBsZSByYXRlICglZyBIeikgbXVzdCBiZSA+PSAlZyBIegoARXJyb3I6IGNhcHR1cmUgc2FtcGxlIHJhdGUgKCVnIEh6KSBtdXN0IGJlIDw9ICVnIEh6CgBUaW1lIHRvIGFuYWx5emU6ICVnIG1zCgBUcnVuY2F0aW5nIGRhdGEgZnJvbSAlZCB0byAlZCBieXRlcwoARmFpbGVkIHRvIGluaXRpYWxpemUgR0dXYXZlIGluc3RhbmNlICVkCgBJbnZhbGlkIEdHV2F2ZSBpbnN0YW5jZSAlZAoAJS4zcyAlLjNzJTNkICUuMmQ6JS4yZDolLjJkICVkCgAlc1JlY2VpdmVkIGVuZCBtYXJrZXIuIEZyYW1lcyBsZWZ0ID0gJWQsIHJlY29yZGVkID0gJWQKAEludmFsaWQgc2FtcGxlIGZvcm1hdDogJWQKAE5lZ2F0aXZlIGRhdGEgc2l6ZTogJWQKAEludmFsaWQgdm9sdW1lOiAlZAoAJXNSZWNlaXZpbmcgc291bmQgZGF0YSAuLi4KAEFuYWx5emluZyBjYXB0dXJlZCBkYXRhIC4uCgBGYWlsdXJlIGR1cmluZyBjYXB0dXJlIC0gcHJvdmlkZWQgYnl0ZXMgKCVkKSBhcmUgbm90IG11bHRpcGxlIG9mIHNhbXBsZSBzaXplICglZCkKAEZhaWx1cmUgZHVyaW5nIGNhcHR1cmUgLSBtb3JlIHNhbXBsZXMgd2VyZSBwcm92aWRlZCAoJWQpIHRoYW4gcmVxdWVzdGVkICglZCkKAERlY29kZWQgbGVuZ3RoID0gJWQsIHByb3RvY29sID0gJyVzJyAoJWQpCgBGYWlsZWQgdG8gY2FwdHVyZSBzb3VuZCBkYXRhLiBQbGVhc2UgdHJ5IGFnYWluIChsZW5ndGggPSAlZCkKAFJlY2VpdmVkIHNvdW5kIGRhdGEgc3VjY2Vzc2Z1bGx5OiAnJXMnCgAxOWdnd2F2ZV9TYW1wbGVGb3JtYXQAAAAAvDQAAGsQAAAxOWdnd2F2ZV9UeFByb3RvY29sSWQAAAC8NAAAjBAAADE3Z2d3YXZlX1BhcmFtZXRlcnMACDUAAKwQAABQMTdnZ3dhdmVfUGFyYW1ldGVycwAAAADoNQAAyBAAAAAAAADAEAAAUEsxN2dnd2F2ZV9QYXJhbWV0ZXJzAAAA6DUAAPAQAAABAAAAwBAAAGlpAHYAdmkA4BAAAGlpaQB2aWlpAGZpaQB2aWlmAAAAwBAAAFg0AADAEAAA+DMAAFg0AAB2aWkATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAAAINQAAUBEAQYAjC9YBqBEAAFg0AAAgEgAApBAAAFg0AABOMTBlbXNjcmlwdGVuM3ZhbEUAAAg1AACUEQAATlN0M19fMjEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUATlN0M19fMjIxX19iYXNpY19zdHJpbmdfY29tbW9uSUxiMUVFRQAAAAAINQAA7xEAAIw1AACwEQAAAAAAAAEAAAAYEgAAAAAAAGlpaWlpaQAAqBEAAFg0AAAgEgAAaWlpaQAAAAD4MwBB4CQLFfgzAABYNAAApBAAAFg0AAB2aWlpaQBBgiULsA8BGQIyGsYD3zPuG2jHSwRk4A40je+BHMFp+MgITHEFimUv4SQPITWTjtrwEoJFHbXCfWon+bnJmgl4TeRypga/i2Jm3TD94pglsxCRIog20JTOj5bbvfHSE1yDOEZAHkK2o8NIfm5rOihU+oW6Pcpem58KFXkrTtTlrHPzp1cHcMD3jIBjDWdK3u0xxf4Y46WZdya4tHwRRJLZIyCJLjc/0VuVvM/NkIeXstz8vmHyVtOrFCpdnoQ8OVNHbUGiHy1D2Ld7pHbEF0nsfwxv9myhO1IpnVWq+2CGsbvMPlrLWV+wnKmgUQv1Fut6dSzXT67V6ebnreh01vTqqFBYrwECBAgQIECAHTp06M2HEyZMmC1atHXqyY8DBgwYMGDAnSdOnCVKlDVq1LV37sGfI0aMBQoUKFCgXbpp0rlv3qFfvmHCmS9evGXKiQ8ePHjw/efTu2vWsX/+4d+jW7Zx4tmvQ4YRIkSIDRo0aNC9Z86BHz58+O3Hkzt27MWXM2bMhRcuXLht2qlPniFChBUqVKhNmilSpFWqSZI5cuTVt3Pm0b9jxpE/fvzl17N79vH/49urS5YxYsSVN27cpVeuQYIZMmTIjQcOHDhw4N2nU6ZRolmyefL578ObK1asRYoJEiRIkD169PX38/vry4sLFixYsH366c+DGzZs2K1HjgECBAgQIECAHTp06M2HEyZMmC1atHXqyY8DBgwYMGDAnSdOnCVKlDVq1LV37sGfI0aMBQoUKFCgXbpp0rlv3qFfvmHCmS9evGXKiQ8ePHjw/efTu2vWsX/+4d+jW7Zx4tmvQ4YRIkSIDRo0aNC9Z86BHz58+O3Hkzt27MWXM2bMhRcuXLht2qlPniFChBUqVKhNmilSpFWqSZI5cuTVt3Pm0b9jxpE/fvzl17N79vH/49urS5YxYsSVN27cpVeuQYIZMmTIjQcOHDhw4N2nU6ZRolmyefL578ObK1asRYoJEiRIkD169PX38/vry4sLFixYsH366c+DGzZs2K1HjgECAAAAACgWAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABOAAAATwAAAFAAAABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laMTNnZ3dhdmVfZW5jb2RlRTMkXzBOU185YWxsb2NhdG9ySVMyX0VFRnZQS3ZqRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UEt2akVFRQAAAAg1AAD5FQAAMDUAAKwVAAAgFgAAWjEzZ2d3YXZlX2VuY29kZUUzJF8wAAAACDUAADQWAAAAAAAA+BYAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAAWQAAAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVoxM2dnd2F2ZV9kZWNvZGVFMyRfMU5TXzlhbGxvY2F0b3JJUzJfRUVGalB2akVFRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGalB2akVFRQAINQAAzBYAADA1AACAFgAA8BYAAFoxM2dnd2F2ZV9kZWNvZGVFMyRfMQAAAAg1AAAEFwAAAAAAAAEAAAABAAAAAgAAAAIAAAAEAAAATlN0M19fMjEyYmFzaWNfc3RyaW5nSWhOU18xMWNoYXJfdHJhaXRzSWhFRU5TXzlhbGxvY2F0b3JJaEVFRUUAAIw1AAA8FwAAAAAAAAEAAAAYEgAAAAAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAACMNQAAlBcAAAAAAAABAAAAGBIAAAAAAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQAAAIw1AADsFwAAAAAAAAEAAAAYEgAAAAAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0lEaU5T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dGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2Nv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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)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"env":asmLibraryArg,"wasi_snapshot_preview1":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];assert(wasmMemory,"memory not found in wasm exports");updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["__indirect_function_table"];assert(wasmTable,"table not found in wasm exports");addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");trueModule=null;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);if(isFileURI(wasmBinaryFile)){err("warning: Loading from a file URI ("+wasmBinaryFile+") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing")}abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function listenOnce(object,event,func){object.addEventListener(event,func,{"once":true})}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function demangle(func){warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function dynCallLegacy(sig,ptr,args){assert("dynCall_"+sig in Module,"bad function pointer type - no table for sig '"+sig+"'");if(args&&args.length){assert(args.length===sig.substring(1).replace(/j/g,"--").length)}else{assert(sig.length==1)}var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,"JavaScript-side Wasm function table mirror is out of date!");return func}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}assert(getWasmTableEntry(ptr),"missing table entry in dynCall: "+ptr);return getWasmTableEntry(ptr).apply(null,args)}function jsStackTrace(){var error=new Error;if(!error.stack){try{throw new Error}catch(e){error=e}if(!error.stack){return"(no stack trace available)"}}return error.stack.toString()}function setWasmTableEntry(idx,func){wasmTable.set(idx,func);wasmTableMirror[idx]=func}function ___cxa_allocate_exception(size){return _malloc(size+16)+16}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-16;this.set_type=function(type){HEAP32[this.ptr+4>>2]=type};this.get_type=function(){return HEAP32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;assert(prev>0);return prev===1}}function CatchInfo(ptr){this.free=function(){_free(this.ptr);this.ptr=0};this.set_base_ptr=function(basePtr){HEAP32[this.ptr>>2]=basePtr};this.get_base_ptr=function(){return HEAP32[this.ptr>>2]};this.set_adjusted_ptr=function(adjustedPtr){HEAP32[this.ptr+4>>2]=adjustedPtr};this.get_adjusted_ptr_addr=function(){return this.ptr+4};this.get_adjusted_ptr=function(){return HEAP32[this.ptr+4>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_exception_info().get_type());if(isPointer){return HEAP32[this.get_base_ptr()>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.get_base_ptr()};this.get_exception_info=function(){return new ExceptionInfo(this.get_base_ptr())};if(ptr===undefined){this.ptr=_malloc(8);this.set_adjusted_ptr(0)}else{this.ptr=ptr}}var exceptionCaught=[];function exception_addRef(info){info.add_ref()}var uncaughtExceptionCount=0;function ___cxa_begin_catch(ptr){var catchInfo=new CatchInfo(ptr);var info=catchInfo.get_exception_info();if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(catchInfo);exception_addRef(info);return catchInfo.get_exception_ptr()}var exceptionLast=0;function ___cxa_free_exception(ptr){try{return _free(new ExceptionInfo(ptr).ptr)}catch(e){err("exception during cxa_free_exception: "+e)}}function exception_decRef(info){if(info.release_ref()&&!info.get_rethrown()){var destructor=info.get_destructor();if(destructor){getWasmTableEntry(destructor)(info.excPtr)}___cxa_free_exception(info.excPtr)}}function ___cxa_end_catch(){_setThrew(0);assert(exceptionCaught.length>0);var catchInfo=exceptionCaught.pop();exception_decRef(catchInfo.get_exception_info());catchInfo.free();exceptionLast=0}function ___resumeException(catchInfoPtr){var catchInfo=new CatchInfo(catchInfoPtr);var ptr=catchInfo.get_base_ptr();if(!exceptionLast){exceptionLast=ptr}catchInfo.free();throw ptr}function ___cxa_find_matching_catch_2(){var thrown=exceptionLast;if(!thrown){setTempRet0(0);return 0|0}var info=new ExceptionInfo(thrown);var thrownType=info.get_type();var catchInfo=new CatchInfo;catchInfo.set_base_ptr(thrown);catchInfo.set_adjusted_ptr(thrown);if(!thrownType){setTempRet0(0);return catchInfo.ptr|0}var typeArray=Array.prototype.slice.call(arguments);for(var i=0;i>2]=stdTimezoneOffset*60;HEAP32[__get_daylight()>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _tzset(){if(_tzset.called)return;_tzset.called=true;_tzset_impl()}function _localtime_r(time,tmPtr){_tzset();var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}function ___localtime_r(a0,a1){return _localtime_r(a0,a1)}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=(handle=>handle);return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=(handle=>{finalizationGroup.register(handle,handle.$$,handle.$$);return handle});detachFinalizer=(handle=>{finalizationGroup.unregister(handle.$$)});return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function getDynCaller(sig,ptr){assert(sig.includes("j"),"getDynCaller should only be called with i64 sigs");var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i>2)+i])}return array}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=(()=>{throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)});whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=(()=>{throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])})}else{desc.set=(v=>{throwBindingError(humanName+" is a read-only property")})}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>1])};case 2:return function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":function(c){return this.constructor.values[c]},"toWireType":function(destructors,c){return c.value},"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=(value=>value<>>bitshift)}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+toTypeName)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;ilengthBytesUTF8(value))}else{getLength=(()=>value.length)}var length=getLength();var ptr=_malloc(4+length+1);HEAPU32[ptr>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;iHEAPU16);shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=(()=>HEAPU32);shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emval_incref(handle){if(handle>4){emval_handle_array[handle].refcount+=1}}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return Emval.toHandle(v)}function _abort(){abort("native code called abort()")}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=(()=>{var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6})}else _emscripten_get_now=(()=>performance.now());var _emscripten_get_now_is_monotonic=true;function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{setErrNo(28);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){err("emscripten_realloc_buffer: Attempted to grow heap from "+buffer.byteLength+" bytes to "+size+" bytes, but got error: "+e)}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;assert(requestedSize>oldSize);var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){err("Cannot enlarge memory, asked to go up to "+requestedSize+" bytes, but the limit is "+maxHeapSize+" bytes!");return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}err("Failed to grow the heap from "+oldSize+" bytes to "+newSize+" bytes, not enough memory!");return false}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){assert(SYSCALLS.varargs!=undefined);SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){if(low>=0)assert(high===0);else assert(high===-1);return low}};function _fd_close(fd){abort("it should not be possible to operate on streams when !SYSCALLS_REQUIRE_FILESYSTEM");return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){abort("it should not be possible to operate on streams when !SYSCALLS_REQUIRE_FILESYSTEM")}function flush_NO_FILESYSTEM(){if(typeof _fflush!=="undefined")_fflush(0);var buffers=SYSCALLS.buffers;if(buffers[1].length)SYSCALLS.printChar(1,10);if(buffers[2].length)SYSCALLS.printChar(2,10)}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}function _getTempRet0(){return getTempRet0()}function _setTempRet0(val){setTempRet0(val)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var ASSERTIONS=true;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(iabort("'intArrayFromString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"intArrayToString"))Module["intArrayToString"]=(()=>abort("'intArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ccall"))Module["ccall"]=(()=>abort("'ccall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"cwrap"))Module["cwrap"]=(()=>abort("'cwrap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setValue"))Module["setValue"]=(()=>abort("'setValue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getValue"))Module["getValue"]=(()=>abort("'getValue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"allocate"))Module["allocate"]=(()=>abort("'allocate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"UTF8ArrayToString"))Module["UTF8ArrayToString"]=(()=>abort("'UTF8ArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"UTF8ToString"))Module["UTF8ToString"]=(()=>abort("'UTF8ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF8Array"))Module["stringToUTF8Array"]=(()=>abort("'stringToUTF8Array' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF8"))Module["stringToUTF8"]=(()=>abort("'stringToUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF8"))Module["lengthBytesUTF8"]=(()=>abort("'lengthBytesUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stackTrace"))Module["stackTrace"]=(()=>abort("'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addOnPreRun"))Module["addOnPreRun"]=(()=>abort("'addOnPreRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addOnInit"))Module["addOnInit"]=(()=>abort("'addOnInit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addOnPreMain"))Module["addOnPreMain"]=(()=>abort("'addOnPreMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addOnExit"))Module["addOnExit"]=(()=>abort("'addOnExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addOnPostRun"))Module["addOnPostRun"]=(()=>abort("'addOnPostRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeStringToMemory"))Module["writeStringToMemory"]=(()=>abort("'writeStringToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));Module["writeArrayToMemory"]=writeArrayToMemory;if(!Object.getOwnPropertyDescriptor(Module,"writeAsciiToMemory"))Module["writeAsciiToMemory"]=(()=>abort("'writeAsciiToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addRunDependency"))Module["addRunDependency"]=(()=>abort("'addRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"removeRunDependency"))Module["removeRunDependency"]=(()=>abort("'removeRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createFolder"))Module["FS_createFolder"]=(()=>abort("'FS_createFolder' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createPath"))Module["FS_createPath"]=(()=>abort("'FS_createPath' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createDataFile"))Module["FS_createDataFile"]=(()=>abort("'FS_createDataFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createPreloadedFile"))Module["FS_createPreloadedFile"]=(()=>abort("'FS_createPreloadedFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createLazyFile"))Module["FS_createLazyFile"]=(()=>abort("'FS_createLazyFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createLink"))Module["FS_createLink"]=(()=>abort("'FS_createLink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createDevice"))Module["FS_createDevice"]=(()=>abort("'FS_createDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_unlink"))Module["FS_unlink"]=(()=>abort("'FS_unlink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"getLEB"))Module["getLEB"]=(()=>abort("'getLEB' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getFunctionTables"))Module["getFunctionTables"]=(()=>abort("'getFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"alignFunctionTables"))Module["alignFunctionTables"]=(()=>abort("'alignFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerFunctions"))Module["registerFunctions"]=(()=>abort("'registerFunctions' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addFunction"))Module["addFunction"]=(()=>abort("'addFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"removeFunction"))Module["removeFunction"]=(()=>abort("'removeFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getFuncWrapper"))Module["getFuncWrapper"]=(()=>abort("'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"prettyPrint"))Module["prettyPrint"]=(()=>abort("'prettyPrint' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"dynCall"))Module["dynCall"]=(()=>abort("'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getCompilerSetting"))Module["getCompilerSetting"]=(()=>abort("'getCompilerSetting' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"print"))Module["print"]=(()=>abort("'print' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"printErr"))Module["printErr"]=(()=>abort("'printErr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getTempRet0"))Module["getTempRet0"]=(()=>abort("'getTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setTempRet0"))Module["setTempRet0"]=(()=>abort("'setTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"callMain"))Module["callMain"]=(()=>abort("'callMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"abort"))Module["abort"]=(()=>abort("'abort' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"keepRuntimeAlive"))Module["keepRuntimeAlive"]=(()=>abort("'keepRuntimeAlive' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"zeroMemory"))Module["zeroMemory"]=(()=>abort("'zeroMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToNewUTF8"))Module["stringToNewUTF8"]=(()=>abort("'stringToNewUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setFileTime"))Module["setFileTime"]=(()=>abort("'setFileTime' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emscripten_realloc_buffer"))Module["emscripten_realloc_buffer"]=(()=>abort("'emscripten_realloc_buffer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ENV"))Module["ENV"]=(()=>abort("'ENV' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"withStackSave"))Module["withStackSave"]=(()=>abort("'withStackSave' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ERRNO_CODES"))Module["ERRNO_CODES"]=(()=>abort("'ERRNO_CODES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ERRNO_MESSAGES"))Module["ERRNO_MESSAGES"]=(()=>abort("'ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setErrNo"))Module["setErrNo"]=(()=>abort("'setErrNo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"inetPton4"))Module["inetPton4"]=(()=>abort("'inetPton4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"inetNtop4"))Module["inetNtop4"]=(()=>abort("'inetNtop4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"inetPton6"))Module["inetPton6"]=(()=>abort("'inetPton6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"inetNtop6"))Module["inetNtop6"]=(()=>abort("'inetNtop6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"readSockaddr"))Module["readSockaddr"]=(()=>abort("'readSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeSockaddr"))Module["writeSockaddr"]=(()=>abort("'writeSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"DNS"))Module["DNS"]=(()=>abort("'DNS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getHostByName"))Module["getHostByName"]=(()=>abort("'getHostByName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"GAI_ERRNO_MESSAGES"))Module["GAI_ERRNO_MESSAGES"]=(()=>abort("'GAI_ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"Protocols"))Module["Protocols"]=(()=>abort("'Protocols' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"Sockets"))Module["Sockets"]=(()=>abort("'Sockets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getRandomDevice"))Module["getRandomDevice"]=(()=>abort("'getRandomDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"traverseStack"))Module["traverseStack"]=(()=>abort("'traverseStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"convertFrameToPC"))Module["convertFrameToPC"]=(()=>abort("'convertFrameToPC' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"UNWIND_CACHE"))Module["UNWIND_CACHE"]=(()=>abort("'UNWIND_CACHE' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"saveInUnwindCache"))Module["saveInUnwindCache"]=(()=>abort("'saveInUnwindCache' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"convertPCtoSourceLocation"))Module["convertPCtoSourceLocation"]=(()=>abort("'convertPCtoSourceLocation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"readAsmConstArgsArray"))Module["readAsmConstArgsArray"]=(()=>abort("'readAsmConstArgsArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"readAsmConstArgs"))Module["readAsmConstArgs"]=(()=>abort("'readAsmConstArgs' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"mainThreadEM_ASM"))Module["mainThreadEM_ASM"]=(()=>abort("'mainThreadEM_ASM' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"jstoi_q"))Module["jstoi_q"]=(()=>abort("'jstoi_q' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"jstoi_s"))Module["jstoi_s"]=(()=>abort("'jstoi_s' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getExecutableName"))Module["getExecutableName"]=(()=>abort("'getExecutableName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"listenOnce"))Module["listenOnce"]=(()=>abort("'listenOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"autoResumeAudioContext"))Module["autoResumeAudioContext"]=(()=>abort("'autoResumeAudioContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"dynCallLegacy"))Module["dynCallLegacy"]=(()=>abort("'dynCallLegacy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getDynCaller"))Module["getDynCaller"]=(()=>abort("'getDynCaller' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"dynCall"))Module["dynCall"]=(()=>abort("'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"callRuntimeCallbacks"))Module["callRuntimeCallbacks"]=(()=>abort("'callRuntimeCallbacks' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"wasmTableMirror"))Module["wasmTableMirror"]=(()=>abort("'wasmTableMirror' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setWasmTableEntry"))Module["setWasmTableEntry"]=(()=>abort("'setWasmTableEntry' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getWasmTableEntry"))Module["getWasmTableEntry"]=(()=>abort("'getWasmTableEntry' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"handleException"))Module["handleException"]=(()=>abort("'handleException' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"runtimeKeepalivePush"))Module["runtimeKeepalivePush"]=(()=>abort("'runtimeKeepalivePush' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"runtimeKeepalivePop"))Module["runtimeKeepalivePop"]=(()=>abort("'runtimeKeepalivePop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"callUserCallback"))Module["callUserCallback"]=(()=>abort("'callUserCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"maybeExit"))Module["maybeExit"]=(()=>abort("'maybeExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"safeSetTimeout"))Module["safeSetTimeout"]=(()=>abort("'safeSetTimeout' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"asmjsMangle"))Module["asmjsMangle"]=(()=>abort("'asmjsMangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"asyncLoad"))Module["asyncLoad"]=(()=>abort("'asyncLoad' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"alignMemory"))Module["alignMemory"]=(()=>abort("'alignMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"mmapAlloc"))Module["mmapAlloc"]=(()=>abort("'mmapAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"reallyNegative"))Module["reallyNegative"]=(()=>abort("'reallyNegative' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"unSign"))Module["unSign"]=(()=>abort("'unSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"reSign"))Module["reSign"]=(()=>abort("'reSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"formatString"))Module["formatString"]=(()=>abort("'formatString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"PATH"))Module["PATH"]=(()=>abort("'PATH' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"PATH_FS"))Module["PATH_FS"]=(()=>abort("'PATH_FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"SYSCALLS"))Module["SYSCALLS"]=(()=>abort("'SYSCALLS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"syscallMmap2"))Module["syscallMmap2"]=(()=>abort("'syscallMmap2' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"syscallMunmap"))Module["syscallMunmap"]=(()=>abort("'syscallMunmap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getSocketFromFD"))Module["getSocketFromFD"]=(()=>abort("'getSocketFromFD' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getSocketAddress"))Module["getSocketAddress"]=(()=>abort("'getSocketAddress' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"JSEvents"))Module["JSEvents"]=(()=>abort("'JSEvents' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerKeyEventCallback"))Module["registerKeyEventCallback"]=(()=>abort("'registerKeyEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"specialHTMLTargets"))Module["specialHTMLTargets"]=(()=>abort("'specialHTMLTargets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"maybeCStringToJsString"))Module["maybeCStringToJsString"]=(()=>abort("'maybeCStringToJsString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"findEventTarget"))Module["findEventTarget"]=(()=>abort("'findEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"findCanvasEventTarget"))Module["findCanvasEventTarget"]=(()=>abort("'findCanvasEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getBoundingClientRect"))Module["getBoundingClientRect"]=(()=>abort("'getBoundingClientRect' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillMouseEventData"))Module["fillMouseEventData"]=(()=>abort("'fillMouseEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerMouseEventCallback"))Module["registerMouseEventCallback"]=(()=>abort("'registerMouseEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerWheelEventCallback"))Module["registerWheelEventCallback"]=(()=>abort("'registerWheelEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerUiEventCallback"))Module["registerUiEventCallback"]=(()=>abort("'registerUiEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerFocusEventCallback"))Module["registerFocusEventCallback"]=(()=>abort("'registerFocusEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillDeviceOrientationEventData"))Module["fillDeviceOrientationEventData"]=(()=>abort("'fillDeviceOrientationEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerDeviceOrientationEventCallback"))Module["registerDeviceOrientationEventCallback"]=(()=>abort("'registerDeviceOrientationEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillDeviceMotionEventData"))Module["fillDeviceMotionEventData"]=(()=>abort("'fillDeviceMotionEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerDeviceMotionEventCallback"))Module["registerDeviceMotionEventCallback"]=(()=>abort("'registerDeviceMotionEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"screenOrientation"))Module["screenOrientation"]=(()=>abort("'screenOrientation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillOrientationChangeEventData"))Module["fillOrientationChangeEventData"]=(()=>abort("'fillOrientationChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerOrientationChangeEventCallback"))Module["registerOrientationChangeEventCallback"]=(()=>abort("'registerOrientationChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillFullscreenChangeEventData"))Module["fillFullscreenChangeEventData"]=(()=>abort("'fillFullscreenChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerFullscreenChangeEventCallback"))Module["registerFullscreenChangeEventCallback"]=(()=>abort("'registerFullscreenChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerRestoreOldStyle"))Module["registerRestoreOldStyle"]=(()=>abort("'registerRestoreOldStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"hideEverythingExceptGivenElement"))Module["hideEverythingExceptGivenElement"]=(()=>abort("'hideEverythingExceptGivenElement' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"restoreHiddenElements"))Module["restoreHiddenElements"]=(()=>abort("'restoreHiddenElements' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setLetterbox"))Module["setLetterbox"]=(()=>abort("'setLetterbox' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"currentFullscreenStrategy"))Module["currentFullscreenStrategy"]=(()=>abort("'currentFullscreenStrategy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"restoreOldWindowedStyle"))Module["restoreOldWindowedStyle"]=(()=>abort("'restoreOldWindowedStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"softFullscreenResizeWebGLRenderTarget"))Module["softFullscreenResizeWebGLRenderTarget"]=(()=>abort("'softFullscreenResizeWebGLRenderTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"doRequestFullscreen"))Module["doRequestFullscreen"]=(()=>abort("'doRequestFullscreen' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillPointerlockChangeEventData"))Module["fillPointerlockChangeEventData"]=(()=>abort("'fillPointerlockChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerPointerlockChangeEventCallback"))Module["registerPointerlockChangeEventCallback"]=(()=>abort("'registerPointerlockChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerPointerlockErrorEventCallback"))Module["registerPointerlockErrorEventCallback"]=(()=>abort("'registerPointerlockErrorEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"requestPointerLock"))Module["requestPointerLock"]=(()=>abort("'requestPointerLock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillVisibilityChangeEventData"))Module["fillVisibilityChangeEventData"]=(()=>abort("'fillVisibilityChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerVisibilityChangeEventCallback"))Module["registerVisibilityChangeEventCallback"]=(()=>abort("'registerVisibilityChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerTouchEventCallback"))Module["registerTouchEventCallback"]=(()=>abort("'registerTouchEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillGamepadEventData"))Module["fillGamepadEventData"]=(()=>abort("'fillGamepadEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerGamepadEventCallback"))Module["registerGamepadEventCallback"]=(()=>abort("'registerGamepadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerBeforeUnloadEventCallback"))Module["registerBeforeUnloadEventCallback"]=(()=>abort("'registerBeforeUnloadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillBatteryEventData"))Module["fillBatteryEventData"]=(()=>abort("'fillBatteryEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"battery"))Module["battery"]=(()=>abort("'battery' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerBatteryEventCallback"))Module["registerBatteryEventCallback"]=(()=>abort("'registerBatteryEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setCanvasElementSize"))Module["setCanvasElementSize"]=(()=>abort("'setCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getCanvasElementSize"))Module["getCanvasElementSize"]=(()=>abort("'getCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"demangle"))Module["demangle"]=(()=>abort("'demangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"demangleAll"))Module["demangleAll"]=(()=>abort("'demangleAll' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"jsStackTrace"))Module["jsStackTrace"]=(()=>abort("'jsStackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stackTrace"))Module["stackTrace"]=(()=>abort("'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getEnvStrings"))Module["getEnvStrings"]=(()=>abort("'getEnvStrings' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"checkWasiClock"))Module["checkWasiClock"]=(()=>abort("'checkWasiClock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"flush_NO_FILESYSTEM"))Module["flush_NO_FILESYSTEM"]=(()=>abort("'flush_NO_FILESYSTEM' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64"))Module["writeI53ToI64"]=(()=>abort("'writeI53ToI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64Clamped"))Module["writeI53ToI64Clamped"]=(()=>abort("'writeI53ToI64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64Signaling"))Module["writeI53ToI64Signaling"]=(()=>abort("'writeI53ToI64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToU64Clamped"))Module["writeI53ToU64Clamped"]=(()=>abort("'writeI53ToU64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToU64Signaling"))Module["writeI53ToU64Signaling"]=(()=>abort("'writeI53ToU64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"readI53FromI64"))Module["readI53FromI64"]=(()=>abort("'readI53FromI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"readI53FromU64"))Module["readI53FromU64"]=(()=>abort("'readI53FromU64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"convertI32PairToI53"))Module["convertI32PairToI53"]=(()=>abort("'convertI32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"convertU32PairToI53"))Module["convertU32PairToI53"]=(()=>abort("'convertU32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setImmediateWrapped"))Module["setImmediateWrapped"]=(()=>abort("'setImmediateWrapped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"clearImmediateWrapped"))Module["clearImmediateWrapped"]=(()=>abort("'clearImmediateWrapped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"polyfillSetImmediate"))Module["polyfillSetImmediate"]=(()=>abort("'polyfillSetImmediate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"uncaughtExceptionCount"))Module["uncaughtExceptionCount"]=(()=>abort("'uncaughtExceptionCount' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"exceptionLast"))Module["exceptionLast"]=(()=>abort("'exceptionLast' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"exceptionCaught"))Module["exceptionCaught"]=(()=>abort("'exceptionCaught' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ExceptionInfo"))Module["ExceptionInfo"]=(()=>abort("'ExceptionInfo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"CatchInfo"))Module["CatchInfo"]=(()=>abort("'CatchInfo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"exception_addRef"))Module["exception_addRef"]=(()=>abort("'exception_addRef' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"exception_decRef"))Module["exception_decRef"]=(()=>abort("'exception_decRef' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"Browser"))Module["Browser"]=(()=>abort("'Browser' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"funcWrappers"))Module["funcWrappers"]=(()=>abort("'funcWrappers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getFuncWrapper"))Module["getFuncWrapper"]=(()=>abort("'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setMainLoop"))Module["setMainLoop"]=(()=>abort("'setMainLoop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"wget"))Module["wget"]=(()=>abort("'wget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"FS"))Module["FS"]=(()=>abort("'FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"MEMFS"))Module["MEMFS"]=(()=>abort("'MEMFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"TTY"))Module["TTY"]=(()=>abort("'TTY' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"PIPEFS"))Module["PIPEFS"]=(()=>abort("'PIPEFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"SOCKFS"))Module["SOCKFS"]=(()=>abort("'SOCKFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"_setNetworkCallback"))Module["_setNetworkCallback"]=(()=>abort("'_setNetworkCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"tempFixedLengthArray"))Module["tempFixedLengthArray"]=(()=>abort("'tempFixedLengthArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"miniTempWebGLFloatBuffers"))Module["miniTempWebGLFloatBuffers"]=(()=>abort("'miniTempWebGLFloatBuffers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"heapObjectForWebGLType"))Module["heapObjectForWebGLType"]=(()=>abort("'heapObjectForWebGLType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"heapAccessShiftForWebGLHeap"))Module["heapAccessShiftForWebGLHeap"]=(()=>abort("'heapAccessShiftForWebGLHeap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"GL"))Module["GL"]=(()=>abort("'GL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGet"))Module["emscriptenWebGLGet"]=(()=>abort("'emscriptenWebGLGet' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"computeUnpackAlignedImageSize"))Module["computeUnpackAlignedImageSize"]=(()=>abort("'computeUnpackAlignedImageSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGetTexPixelData"))Module["emscriptenWebGLGetTexPixelData"]=(()=>abort("'emscriptenWebGLGetTexPixelData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGetUniform"))Module["emscriptenWebGLGetUniform"]=(()=>abort("'emscriptenWebGLGetUniform' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"webglGetUniformLocation"))Module["webglGetUniformLocation"]=(()=>abort("'webglGetUniformLocation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"webglPrepareUniformLocationsBeforeFirstUse"))Module["webglPrepareUniformLocationsBeforeFirstUse"]=(()=>abort("'webglPrepareUniformLocationsBeforeFirstUse' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"webglGetLeftBracePos"))Module["webglGetLeftBracePos"]=(()=>abort("'webglGetLeftBracePos' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGetVertexAttrib"))Module["emscriptenWebGLGetVertexAttrib"]=(()=>abort("'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeGLArray"))Module["writeGLArray"]=(()=>abort("'writeGLArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"AL"))Module["AL"]=(()=>abort("'AL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"SDL_unicode"))Module["SDL_unicode"]=(()=>abort("'SDL_unicode' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"SDL_ttfContext"))Module["SDL_ttfContext"]=(()=>abort("'SDL_ttfContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"SDL_audio"))Module["SDL_audio"]=(()=>abort("'SDL_audio' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"SDL"))Module["SDL"]=(()=>abort("'SDL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"SDL_gfx"))Module["SDL_gfx"]=(()=>abort("'SDL_gfx' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"GLUT"))Module["GLUT"]=(()=>abort("'GLUT' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"EGL"))Module["EGL"]=(()=>abort("'EGL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"GLFW_Window"))Module["GLFW_Window"]=(()=>abort("'GLFW_Window' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"GLFW"))Module["GLFW"]=(()=>abort("'GLFW' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"GLEW"))Module["GLEW"]=(()=>abort("'GLEW' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"IDBStore"))Module["IDBStore"]=(()=>abort("'IDBStore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"runAndAbortIfError"))Module["runAndAbortIfError"]=(()=>abort("'runAndAbortIfError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emval_handle_array"))Module["emval_handle_array"]=(()=>abort("'emval_handle_array' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emval_free_list"))Module["emval_free_list"]=(()=>abort("'emval_free_list' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emval_symbols"))Module["emval_symbols"]=(()=>abort("'emval_symbols' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"init_emval"))Module["init_emval"]=(()=>abort("'init_emval' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"count_emval_handles"))Module["count_emval_handles"]=(()=>abort("'count_emval_handles' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"get_first_emval"))Module["get_first_emval"]=(()=>abort("'get_first_emval' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getStringOrSymbol"))Module["getStringOrSymbol"]=(()=>abort("'getStringOrSymbol' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"Emval"))Module["Emval"]=(()=>abort("'Emval' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emval_newers"))Module["emval_newers"]=(()=>abort("'emval_newers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"craftEmvalAllocator"))Module["craftEmvalAllocator"]=(()=>abort("'craftEmvalAllocator' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emval_get_global"))Module["emval_get_global"]=(()=>abort("'emval_get_global' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emval_methodCallers"))Module["emval_methodCallers"]=(()=>abort("'emval_methodCallers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emval_registeredMethods"))Module["emval_registeredMethods"]=(()=>abort("'emval_registeredMethods' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"InternalError"))Module["InternalError"]=(()=>abort("'InternalError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"BindingError"))Module["BindingError"]=(()=>abort("'BindingError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"UnboundTypeError"))Module["UnboundTypeError"]=(()=>abort("'UnboundTypeError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"PureVirtualError"))Module["PureVirtualError"]=(()=>abort("'PureVirtualError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"init_embind"))Module["init_embind"]=(()=>abort("'init_embind' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"throwInternalError"))Module["throwInternalError"]=(()=>abort("'throwInternalError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"throwBindingError"))Module["throwBindingError"]=(()=>abort("'throwBindingError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"throwUnboundTypeError"))Module["throwUnboundTypeError"]=(()=>abort("'throwUnboundTypeError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ensureOverloadTable"))Module["ensureOverloadTable"]=(()=>abort("'ensureOverloadTable' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"exposePublicSymbol"))Module["exposePublicSymbol"]=(()=>abort("'exposePublicSymbol' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"replacePublicSymbol"))Module["replacePublicSymbol"]=(()=>abort("'replacePublicSymbol' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"extendError"))Module["extendError"]=(()=>abort("'extendError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"createNamedFunction"))Module["createNamedFunction"]=(()=>abort("'createNamedFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registeredInstances"))Module["registeredInstances"]=(()=>abort("'registeredInstances' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getBasestPointer"))Module["getBasestPointer"]=(()=>abort("'getBasestPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerInheritedInstance"))Module["registerInheritedInstance"]=(()=>abort("'registerInheritedInstance' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"unregisterInheritedInstance"))Module["unregisterInheritedInstance"]=(()=>abort("'unregisterInheritedInstance' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getInheritedInstance"))Module["getInheritedInstance"]=(()=>abort("'getInheritedInstance' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getInheritedInstanceCount"))Module["getInheritedInstanceCount"]=(()=>abort("'getInheritedInstanceCount' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getLiveInheritedInstances"))Module["getLiveInheritedInstances"]=(()=>abort("'getLiveInheritedInstances' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registeredTypes"))Module["registeredTypes"]=(()=>abort("'registeredTypes' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"awaitingDependencies"))Module["awaitingDependencies"]=(()=>abort("'awaitingDependencies' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"typeDependencies"))Module["typeDependencies"]=(()=>abort("'typeDependencies' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registeredPointers"))Module["registeredPointers"]=(()=>abort("'registeredPointers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerType"))Module["registerType"]=(()=>abort("'registerType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"whenDependentTypesAreResolved"))Module["whenDependentTypesAreResolved"]=(()=>abort("'whenDependentTypesAreResolved' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"embind_charCodes"))Module["embind_charCodes"]=(()=>abort("'embind_charCodes' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"embind_init_charCodes"))Module["embind_init_charCodes"]=(()=>abort("'embind_init_charCodes' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"readLatin1String"))Module["readLatin1String"]=(()=>abort("'readLatin1String' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getTypeName"))Module["getTypeName"]=(()=>abort("'getTypeName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"heap32VectorToArray"))Module["heap32VectorToArray"]=(()=>abort("'heap32VectorToArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"requireRegisteredType"))Module["requireRegisteredType"]=(()=>abort("'requireRegisteredType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getShiftFromSize"))Module["getShiftFromSize"]=(()=>abort("'getShiftFromSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"integerReadValueFromPointer"))Module["integerReadValueFromPointer"]=(()=>abort("'integerReadValueFromPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"enumReadValueFromPointer"))Module["enumReadValueFromPointer"]=(()=>abort("'enumReadValueFromPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"floatReadValueFromPointer"))Module["floatReadValueFromPointer"]=(()=>abort("'floatReadValueFromPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"simpleReadValueFromPointer"))Module["simpleReadValueFromPointer"]=(()=>abort("'simpleReadValueFromPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"runDestructors"))Module["runDestructors"]=(()=>abort("'runDestructors' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"new_"))Module["new_"]=(()=>abort("'new_' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"craftInvokerFunction"))Module["craftInvokerFunction"]=(()=>abort("'craftInvokerFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"embind__requireFunction"))Module["embind__requireFunction"]=(()=>abort("'embind__requireFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"tupleRegistrations"))Module["tupleRegistrations"]=(()=>abort("'tupleRegistrations' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"structRegistrations"))Module["structRegistrations"]=(()=>abort("'structRegistrations' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"genericPointerToWireType"))Module["genericPointerToWireType"]=(()=>abort("'genericPointerToWireType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"constNoSmartPtrRawPointerToWireType"))Module["constNoSmartPtrRawPointerToWireType"]=(()=>abort("'constNoSmartPtrRawPointerToWireType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"nonConstNoSmartPtrRawPointerToWireType"))Module["nonConstNoSmartPtrRawPointerToWireType"]=(()=>abort("'nonConstNoSmartPtrRawPointerToWireType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"init_RegisteredPointer"))Module["init_RegisteredPointer"]=(()=>abort("'init_RegisteredPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"RegisteredPointer"))Module["RegisteredPointer"]=(()=>abort("'RegisteredPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"RegisteredPointer_getPointee"))Module["RegisteredPointer_getPointee"]=(()=>abort("'RegisteredPointer_getPointee' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"RegisteredPointer_destructor"))Module["RegisteredPointer_destructor"]=(()=>abort("'RegisteredPointer_destructor' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"RegisteredPointer_deleteObject"))Module["RegisteredPointer_deleteObject"]=(()=>abort("'RegisteredPointer_deleteObject' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"RegisteredPointer_fromWireType"))Module["RegisteredPointer_fromWireType"]=(()=>abort("'RegisteredPointer_fromWireType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"runDestructor"))Module["runDestructor"]=(()=>abort("'runDestructor' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"releaseClassHandle"))Module["releaseClassHandle"]=(()=>abort("'releaseClassHandle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"finalizationGroup"))Module["finalizationGroup"]=(()=>abort("'finalizationGroup' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"detachFinalizer_deps"))Module["detachFinalizer_deps"]=(()=>abort("'detachFinalizer_deps' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"detachFinalizer"))Module["detachFinalizer"]=(()=>abort("'detachFinalizer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"attachFinalizer"))Module["attachFinalizer"]=(()=>abort("'attachFinalizer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"makeClassHandle"))Module["makeClassHandle"]=(()=>abort("'makeClassHandle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"init_ClassHandle"))Module["init_ClassHandle"]=(()=>abort("'init_ClassHandle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle"))Module["ClassHandle"]=(()=>abort("'ClassHandle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle_isAliasOf"))Module["ClassHandle_isAliasOf"]=(()=>abort("'ClassHandle_isAliasOf' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"throwInstanceAlreadyDeleted"))Module["throwInstanceAlreadyDeleted"]=(()=>abort("'throwInstanceAlreadyDeleted' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle_clone"))Module["ClassHandle_clone"]=(()=>abort("'ClassHandle_clone' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle_delete"))Module["ClassHandle_delete"]=(()=>abort("'ClassHandle_delete' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"deletionQueue"))Module["deletionQueue"]=(()=>abort("'deletionQueue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle_isDeleted"))Module["ClassHandle_isDeleted"]=(()=>abort("'ClassHandle_isDeleted' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle_deleteLater"))Module["ClassHandle_deleteLater"]=(()=>abort("'ClassHandle_deleteLater' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"flushPendingDeletes"))Module["flushPendingDeletes"]=(()=>abort("'flushPendingDeletes' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"delayFunction"))Module["delayFunction"]=(()=>abort("'delayFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setDelayFunction"))Module["setDelayFunction"]=(()=>abort("'setDelayFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"RegisteredClass"))Module["RegisteredClass"]=(()=>abort("'RegisteredClass' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"shallowCopyInternalPointer"))Module["shallowCopyInternalPointer"]=(()=>abort("'shallowCopyInternalPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"downcastPointer"))Module["downcastPointer"]=(()=>abort("'downcastPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"upcastPointer"))Module["upcastPointer"]=(()=>abort("'upcastPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"validateThis"))Module["validateThis"]=(()=>abort("'validateThis' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"char_0"))Module["char_0"]=(()=>abort("'char_0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"char_9"))Module["char_9"]=(()=>abort("'char_9' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"makeLegalFunctionName"))Module["makeLegalFunctionName"]=(()=>abort("'makeLegalFunctionName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"warnOnce"))Module["warnOnce"]=(()=>abort("'warnOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stackSave"))Module["stackSave"]=(()=>abort("'stackSave' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stackRestore"))Module["stackRestore"]=(()=>abort("'stackRestore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stackAlloc"))Module["stackAlloc"]=(()=>abort("'stackAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"AsciiToString"))Module["AsciiToString"]=(()=>abort("'AsciiToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToAscii"))Module["stringToAscii"]=(()=>abort("'stringToAscii' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"UTF16ToString"))Module["UTF16ToString"]=(()=>abort("'UTF16ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF16"))Module["stringToUTF16"]=(()=>abort("'stringToUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF16"))Module["lengthBytesUTF16"]=(()=>abort("'lengthBytesUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"UTF32ToString"))Module["UTF32ToString"]=(()=>abort("'UTF32ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF32"))Module["stringToUTF32"]=(()=>abort("'stringToUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF32"))Module["lengthBytesUTF32"]=(()=>abort("'lengthBytesUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"allocateUTF8"))Module["allocateUTF8"]=(()=>abort("'allocateUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"allocateUTF8OnStack"))Module["allocateUTF8OnStack"]=(()=>abort("'allocateUTF8OnStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));Module["writeStackCookie"]=writeStackCookie;Module["checkStackCookie"]=checkStackCookie;if(!Object.getOwnPropertyDescriptor(Module,"intArrayFromBase64"))Module["intArrayFromBase64"]=(()=>abort("'intArrayFromBase64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"tryParseAsDataURI"))Module["tryParseAsDataURI"]=(()=>abort("'tryParseAsDataURI' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ALLOC_NORMAL"))Object.defineProperty(Module,"ALLOC_NORMAL",{configurable:true,get:function(){abort("'ALLOC_NORMAL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")}});if(!Object.getOwnPropertyDescriptor(Module,"ALLOC_STACK"))Object.defineProperty(Module,"ALLOC_STACK",{configurable:true,get:function(){abort("'ALLOC_STACK' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")}});var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(args){args=args||arguments_;if(runDependencies>0){return}stackCheckInit();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"]();assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}checkStackCookie()}Module["run"]=run;function checkUnflushedContent(){var oldOut=out;var oldErr=err;var has=false;out=err=(x=>{has=true});try{var flush=flush_NO_FILESYSTEM;if(flush)flush()}catch(e){}out=oldOut;err=oldErr;if(has){warnOnce("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.");warnOnce("(this may also be due to not including full filesystem support - try building with -s FORCE_FILESYSTEM=1)")}}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); + + + return ggwave_factory.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = ggwave_factory; +else if (typeof define === 'function' && define['amd']) + define([], function() { return ggwave_factory; }); +else if (typeof exports === 'object') + exports["ggwave_factory"] = ggwave_factory; diff --git a/examples/r2t2/ggwave-mod/src/ggwave.cpp b/examples/ggwave-mod/src/ggwave.cpp similarity index 91% rename from examples/r2t2/ggwave-mod/src/ggwave.cpp rename to examples/ggwave-mod/src/ggwave.cpp index 07cc3d4..9dcb70f 100644 --- a/examples/r2t2/ggwave-mod/src/ggwave.cpp +++ b/examples/ggwave-mod/src/ggwave.cpp @@ -11,12 +11,26 @@ #include //#include +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +#define ggprintf(...) \ + g_fptr && fprintf(g_fptr, __VA_ARGS__) + // // C interface // namespace { +FILE * g_fptr = stderr; std::map g_instances; +std::map g_rxProtocols; +} + +extern "C" +void ggwave_setLogFile(void * fptr) { + GGWave::setLogFile((FILE *) fptr); } extern "C" @@ -58,12 +72,12 @@ int ggwave_encode( GGWave * ggWave = (GGWave *) g_instances[instance]; if (ggWave == nullptr) { - fprintf(stderr, "Invalid GGWave instance %d\n", instance); + ggprintf("Invalid GGWave instance %d\n", instance); return -1; } if (ggWave->init(dataSize, dataBuffer, ggWave->getTxProtocol(txProtocolId), volume) == false) { - fprintf(stderr, "Failed to initialize GGWave instance %d\n", instance); + ggprintf("Failed to initialize GGWave instance %d\n", instance); return -1; } @@ -85,7 +99,7 @@ int ggwave_encode( }; if (ggWave->encode(cbWaveformOut) == false) { - fprintf(stderr, "Failed to encode data - GGWave instance %d\n", instance); + ggprintf("Failed to encode data - GGWave instance %d\n", instance); return -1; } @@ -112,7 +126,7 @@ int ggwave_decode( ggWave->decode(cbWaveformInp); - // todo : avoid allocation + // TODO : avoid allocation GGWave::TxRxData rxData; auto rxDataLength = ggWave->takeRxData(rxData); @@ -120,12 +134,72 @@ int ggwave_decode( // failed to decode message return -1; } else if (rxDataLength > 0) { - std::copy(rxData.begin(), rxData.end(), outputBuffer); + memcpy(outputBuffer, rxData.data(), rxDataLength); } return rxDataLength; } +extern "C" +int ggwave_ndecode( + ggwave_Instance instance, + const char * dataBuffer, + int dataSize, + char * outputBuffer, + int outputSize) { + // TODO : avoid duplicated code + GGWave * ggWave = (GGWave *) g_instances[instance]; + + GGWave::CBWaveformInp cbWaveformInp = [&](void * data, uint32_t nMaxBytes) -> uint32_t { + uint32_t nCopied = std::min((uint32_t) dataSize, nMaxBytes); + std::copy(dataBuffer, dataBuffer + nCopied, (char *) data); + + dataSize -= nCopied; + dataBuffer += nCopied; + + return nCopied; + }; + + ggWave->decode(cbWaveformInp); + + // TODO : avoid allocation + GGWave::TxRxData rxData; + + auto rxDataLength = ggWave->takeRxData(rxData); + if (rxDataLength == -1) { + // failed to decode message + return -1; + } else if (rxDataLength > outputSize) { + // the outputBuffer is not big enough to store the data + return -2; + } else if (rxDataLength > 0) { + memcpy(outputBuffer, rxData.data(), rxDataLength); + } + + return rxDataLength; +} + +extern "C" +void ggwave_toggleRxProtocol( + ggwave_Instance instance, + ggwave_TxProtocolId rxProtocolId, + int state) { + // if never called - initialize with all available protocols + if (g_rxProtocols.find(instance) == g_rxProtocols.end()) { + g_rxProtocols[instance] = GGWave::getTxProtocols(); + } + + if (state == 0) { + // disable Rx protocol + g_rxProtocols[instance].erase(rxProtocolId); + } else if (state == 1) { + // enable Rx protocol + g_rxProtocols[instance][rxProtocolId] = GGWave::getTxProtocols().at(rxProtocolId); + } + + g_instances[instance]->setRxProtocols(g_rxProtocols[instance]); +} + // // C++ implementation // @@ -259,7 +333,7 @@ int bytesForSampleFormat(GGWave::SampleFormat sampleFormat) { case GGWAVE_SAMPLE_FORMAT_F32: return sizeof(float); break; }; - fprintf(stderr, "Invalid sample format: %d\n", (int) sampleFormat); + ggprintf("Invalid sample format: %d\n", (int) sampleFormat); return 0; } @@ -270,6 +344,10 @@ struct GGWave::Impl { Resampler resampler; }; +void GGWave::setLogFile(FILE * fptr) { + g_fptr = fptr; +} + const GGWave::Parameters & GGWave::getDefaultParameters() { static ggwave_Parameters result { -1, // vaiable payload length @@ -366,12 +444,12 @@ GGWave::GGWave(const Parameters & parameters) : } if (m_sampleRateInp < kSampleRateMin) { - fprintf(stderr, "Error: capture sample rate (%g Hz) must be >= %g Hz\n", m_sampleRateInp, kSampleRateMin); + ggprintf("Error: capture sample rate (%g Hz) must be >= %g Hz\n", m_sampleRateInp, kSampleRateMin); throw std::runtime_error("Invalid capture/playback sample rate"); } if (m_sampleRateInp > kSampleRateMax) { - fprintf(stderr, "Error: capture sample rate (%g Hz) must be <= %g Hz\n", m_sampleRateInp, kSampleRateMax); + ggprintf("Error: capture sample rate (%g Hz) must be <= %g Hz\n", m_sampleRateInp, kSampleRateMax); throw std::runtime_error("Invalid capture/playback sample rate"); } @@ -382,11 +460,11 @@ GGWave::~GGWave() { } bool GGWave::init(const std::string & text, const int volume) { - return init(text.size(), text.data(), getDefaultTxProtocol(), volume); + return init((int) text.size(), text.data(), getDefaultTxProtocol(), volume); } bool GGWave::init(const std::string & text, const TxProtocol & txProtocol, const int volume) { - return init(text.size(), text.data(), txProtocol, volume); + return init((int) text.size(), text.data(), txProtocol, volume); } bool GGWave::init(int dataSize, const char * dataBuffer, const int volume) { @@ -395,18 +473,18 @@ bool GGWave::init(int dataSize, const char * dataBuffer, const int volume) { bool GGWave::init(int dataSize, const char * dataBuffer, const TxProtocol & txProtocol, const int volume) { if (dataSize < 0) { - fprintf(stderr, "Negative data size: %d\n", dataSize); + ggprintf("Negative data size: %d\n", dataSize); return false; } auto maxLength = m_isFixedPayloadLength ? m_payloadLength : kMaxLengthVarible; if (dataSize > maxLength) { - fprintf(stderr, "Truncating data from %d to %d bytes\n", dataSize, maxLength); + ggprintf("Truncating data from %d to %d bytes\n", dataSize, maxLength); dataSize = maxLength; } if (volume < 0 || volume > 100) { - fprintf(stderr, "Invalid volume: %d\n", volume); + ggprintf("Invalid volume: %d\n", volume); return false; } @@ -481,7 +559,7 @@ uint32_t GGWave::encodeSize_samples() const { int nECCBytesPerTx = getECCBytesForLength(m_txDataLength); int sendDataLength = m_txDataLength + m_encodedDataOffset; int totalBytes = sendDataLength + nECCBytesPerTx; - int totalDataFrames = ((totalBytes + m_txProtocol.bytesPerTx - 1)/m_txProtocol.bytesPerTx)*m_txProtocol.framesPerTx; + int totalDataFrames = 2*((totalBytes + m_txProtocol.bytesPerTx - 1)/m_txProtocol.bytesPerTx)*m_txProtocol.framesPerTx; return ( m_nMarkerFrames + totalDataFrames + m_nMarkerFrames @@ -737,14 +815,14 @@ void GGWave::decode(const CBWaveformInp & cbWaveformInp) { } if (nBytesRecorded % m_sampleSizeBytesInp != 0) { - fprintf(stderr, "Failure during capture - provided bytes (%d) are not multiple of sample size (%d)\n", + ggprintf("Failure during capture - provided bytes (%d) are not multiple of sample size (%d)\n", nBytesRecorded, m_sampleSizeBytesInp); m_samplesNeeded = m_samplesPerFrame; break; } if (nBytesRecorded > nBytesNeeded) { - fprintf(stderr, "Failure during capture - more samples were provided (%d) than requested (%d)\n", + ggprintf("Failure during capture - more samples were provided (%d) than requested (%d)\n", nBytesRecorded/m_sampleSizeBytesInp, nBytesNeeded/m_sampleSizeBytesInp); m_samplesNeeded = m_samplesPerFrame; break; @@ -888,7 +966,7 @@ bool GGWave::takeRxAmplitude(AmplitudeData & dst) { bool GGWave::computeFFTR(const float * src, float * dst, int N, float d) { if (N > kMaxSamplesPerFrame) { - fprintf(stderr, "computeFFTR: N (%d) must be <= %d\n", N, GGWave::kMaxSamplesPerFrame); + ggprintf("computeFFTR: N (%d) must be <= %d\n", N, GGWave::kMaxSamplesPerFrame); return false; } @@ -945,7 +1023,7 @@ void GGWave::decode_variable() { } if (m_analyzingData) { - fprintf(stderr, "Analyzing captured data ..\n"); + ggprintf("Analyzing captured data ..\n"); auto tStart = std::chrono::high_resolution_clock::now(); const int stepsPerFrame = 16; @@ -1054,8 +1132,8 @@ void GGWave::decode_variable() { if (m_rxData[0] != 0) { std::string s((char *) m_rxData.data(), decodedLength); - fprintf(stderr, "Decoded length = %d, protocol = '%s' (%d)\n", decodedLength, rxProtocol.name, rxProtocolId); - fprintf(stderr, "Received sound data successfully: '%s'\n", s.c_str()); + ggprintf("Decoded length = %d, protocol = '%s' (%d)\n", decodedLength, rxProtocol.name, rxProtocolId); + ggprintf("Received sound data successfully: '%s'\n", s.c_str()); isValid = true; m_hasNewRxData = true; @@ -1078,7 +1156,7 @@ void GGWave::decode_variable() { m_framesToRecord = 0; if (isValid == false) { - fprintf(stderr, "Failed to capture sound data. Please try again (length = %d)\n", m_rxData[0]); + ggprintf("Failed to capture sound data. Please try again (length = %d)\n", m_rxData[0]); m_lastRxDataLength = -1; m_framesToRecord = -1; } @@ -1092,7 +1170,7 @@ void GGWave::decode_variable() { m_framesLeftToAnalyze = 0; auto tEnd = std::chrono::high_resolution_clock::now(); - fprintf(stderr, "Time to analyze: %g ms\n", getTime_ms(tStart, tEnd)); + ggprintf("Time to analyze: %g ms\n", getTime_ms(tStart, tEnd)); } // check if receiving data @@ -1131,7 +1209,7 @@ void GGWave::decode_variable() { if (isReceiving) { std::time_t timestamp = std::time(nullptr); - fprintf(stderr, "%sReceiving sound data ...\n", std::asctime(std::localtime(×tamp))); + ggprintf("%sReceiving sound data ...\n", std::asctime(std::localtime(×tamp))); m_receivingData = true; std::fill(m_rxData.begin(), m_rxData.end(), 0); @@ -1180,7 +1258,7 @@ void GGWave::decode_variable() { if (isEnded && m_framesToRecord > 1) { std::time_t timestamp = std::time(nullptr); m_recvDuration_frames -= m_framesLeftToRecord - 1; - fprintf(stderr, "%sReceived end marker. Frames left = %d, recorded = %d\n", std::asctime(std::localtime(×tamp)), m_framesLeftToRecord, m_recvDuration_frames); + ggprintf("%sReceived end marker. Frames left = %d, recorded = %d\n", std::asctime(std::localtime(×tamp)), m_framesLeftToRecord, m_recvDuration_frames); m_nMarkersSuccess = 0; m_framesLeftToRecord = 1; } @@ -1321,10 +1399,7 @@ void GGWave::decode_fixed() { if (rsData.Decode(m_txDataEncoded.data(), m_rxData.data()) == 0) { if (m_rxData[0] != 0) { - std::time_t timestamp = std::time(nullptr); - std::string tstr = std::asctime(std::localtime(×tamp)); - tstr.back() = 0; - fprintf(stderr, "[%s] Received: '%s'\n", tstr.c_str(), m_rxData.data()); + ggprintf("Received sound data successfully: '%s'\n", m_rxData.data()); isValid = true; m_hasNewRxData = true; diff --git a/examples/r2t2/ggwave-mod/src/reed-solomon/LICENSE b/examples/ggwave-mod/src/reed-solomon/LICENSE similarity index 100% rename from examples/r2t2/ggwave-mod/src/reed-solomon/LICENSE rename to examples/ggwave-mod/src/reed-solomon/LICENSE diff --git a/examples/r2t2/ggwave-mod/src/reed-solomon/gf.hpp b/examples/ggwave-mod/src/reed-solomon/gf.hpp similarity index 100% rename from examples/r2t2/ggwave-mod/src/reed-solomon/gf.hpp rename to examples/ggwave-mod/src/reed-solomon/gf.hpp diff --git a/examples/r2t2/ggwave-mod/src/reed-solomon/poly.hpp b/examples/ggwave-mod/src/reed-solomon/poly.hpp similarity index 100% rename from examples/r2t2/ggwave-mod/src/reed-solomon/poly.hpp rename to examples/ggwave-mod/src/reed-solomon/poly.hpp diff --git a/examples/r2t2/ggwave-mod/src/reed-solomon/rs.hpp b/examples/ggwave-mod/src/reed-solomon/rs.hpp similarity index 100% rename from examples/r2t2/ggwave-mod/src/reed-solomon/rs.hpp rename to examples/ggwave-mod/src/reed-solomon/rs.hpp diff --git a/examples/r2t2/ggwave-mod/src/resampler.cpp b/examples/ggwave-mod/src/resampler.cpp similarity index 100% rename from examples/r2t2/ggwave-mod/src/resampler.cpp rename to examples/ggwave-mod/src/resampler.cpp diff --git a/examples/r2t2/ggwave-mod/src/resampler.h b/examples/ggwave-mod/src/resampler.h similarity index 100% rename from examples/r2t2/ggwave-mod/src/resampler.h rename to examples/ggwave-mod/src/resampler.h diff --git a/examples/r2t2/CMakeLists.txt b/examples/r2t2/CMakeLists.txt index df64459..af120ca 100644 --- a/examples/r2t2/CMakeLists.txt +++ b/examples/r2t2/CMakeLists.txt @@ -6,18 +6,15 @@ set(TARGET r2t2) if (NOT EMSCRIPTEN) add_executable(${TARGET} main.cpp - ggwave-mod/src/ggwave.cpp - ggwave-mod/src/resampler.cpp ) target_include_directories(${TARGET} PRIVATE .. - ggwave-mod/include - ggwave-mod/src ) target_link_libraries(${TARGET} PRIVATE ggwave-common + ggwave-mod ) endif() @@ -29,19 +26,16 @@ set(TARGET r2t2-rx) if (NOT EMSCRIPTEN) add_executable(${TARGET} r2t2-rx.cpp - ggwave-mod/src/ggwave.cpp - ggwave-mod/src/resampler.cpp ) target_include_directories(${TARGET} PRIVATE .. - ggwave-mod/include - ggwave-mod/src ${SDL2_INCLUDE_DIRS} ) target_link_libraries(${TARGET} PRIVATE ggwave-common + ggwave-mod ${SDL2_LIBRARIES} ) else() @@ -49,19 +43,16 @@ else() add_executable(${TARGET} r2t2-rx.cpp - ggwave-mod/src/ggwave.cpp - ggwave-mod/src/resampler.cpp ) target_include_directories(${TARGET} PRIVATE .. - ggwave-mod/include - ggwave-mod/src ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TARGET}/ ) target_link_libraries(${TARGET} PRIVATE ggwave-common + ggwave-mod ) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/index-tmpl.html ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TARGET}/index.html @ONLY)