diff --git a/CHANGELOG.md b/CHANGELOG.md index 44c93972..aaf43d56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ##### 4.1.7 (X Xxx 2026) +- fix: a device change that still fails now reports `SoLoudAudioDeviceFailedToStartCppException` instead of hanging. Thanks to @Colton127 - fix: `changeDevice()` now selects the system default device when called without an argument and reports device-change failures instead of silently succeeding. Thanks to @Colton127 #532 +- fix: `init()` no longer blocks the UI thread while the audio device starts. On Android a slow or busy audio HAL could stall the platform thread long enough for the app to be reported as not responding; engine startup and teardown now run on a short-lived worker isolate. Thanks to @Colton127 #481 +- added `deinitAsync()`, a non-blocking counterpart to `deinit()`. `deinit()` is unchanged and still supported, but it can stall the UI thread when it lands while `init()` is still starting the device — prefer `deinitAsync()` in new code. ##### 4.1.6 (3 Aug 2026) - fix: iOS/macOS SPM build fails with error: unknown argument: '-Wl,-undefined,dynamic_lookup' #530 diff --git a/example/tests/tests/asynchronous_deinit.dart b/example/tests/tests/asynchronous_deinit.dart index 589510d9..cf99592d 100644 --- a/example/tests/tests/asynchronous_deinit.dart +++ b/example/tests/tests/asynchronous_deinit.dart @@ -10,30 +10,25 @@ import 'common.dart'; Future testAsynchronousDeinit() async { /// test asynchronous init-deinit looping with a short decreasing time for (var t = 10; t >= 0; t--) { - var error = ''; - - /// Initialize the player - unawaited( - SoLoud.instance.init().then( - (_) {}, - onError: (Object e) { - deinit(); - if (e is SoLoudInitializationStoppedByDeinitException) { - // This is to be expected. - debugPrint('$e\n'); - return; - } - debugPrint('TEST FAILED delay: $t. Player starting error: $e\n'); - error = e.toString(); - }, - ), - ); - - assert(error.isEmpty, error); + final initResult = + SoLoud.instance.init().then<({Object? error, StackTrace? stack})>( + (_) => (error: null, stack: null), + onError: (Object error, StackTrace stack) => + (error: error, stack: stack), + ); - /// wait for [t] ms and deinit() await delay(t); - deinit(); + await SoLoud.instance.deinitAsync(); + + final result = await initResult; + final error = result.error; + + if (error is SoLoudInitializationStoppedByDeinitException) { + debugPrint('$error\n'); + } else if (error != null) { + Error.throwWithStackTrace(error, result.stack!); + } + final after = SoLoudController().soLoudFFI.isInited(); assert( diff --git a/example/tests/tests/playback_devices.dart b/example/tests/tests/playback_devices.dart index f38955c7..9aaec447 100644 --- a/example/tests/tests/playback_devices.dart +++ b/example/tests/tests/playback_devices.dart @@ -5,6 +5,18 @@ import 'package:flutter_soloud/src/enums.dart'; import 'common.dart'; +/// Wall-clock budget for a single `changeDevice()` call. +/// +/// A swap closes one stream and opens another: tens of milliseconds in +/// practice, a few hundred on a slow emulator. What matters is the number this +/// excludes. Holding SoLoud's audio-thread mutex across the swap starves the +/// audio callback, and on AAudio's legacy (non-MMAP) path a stream only reports +/// STARTED once its first data callback has run — so `ma_device_start()` sits +/// in `AAudioStream_waitForStateChange()` for its full 5s timeout before it +/// fails. +/// Anything near that is the mutex regression, not a slow device. +const _changeDeviceBudget = Duration(seconds: 2); + /// Test playback device enumeration and switching. Future testPlaybackDevices() async { final strBuf = OutputBuffer(); @@ -38,22 +50,29 @@ Future testPlaybackDevices() async { // device count. // Note: this is also the first time this path is reachable on Web, where it // tears down and re-initializes the WebAudio device. - SoLoud.instance.changeDevice(); + final toDefault = _timeChangeDevice('Switching to the default device'); assert( await _isPlaybackUsable(sound), 'The engine should still play after switching to the default device', ); - strBuf.writeln('Switched to the default device, playback still usable'); + strBuf.writeln( + 'Switched to the default device in ${toDefault.inMilliseconds}ms, ' + 'playback still usable', + ); // Regression: an enumerated device still works. Only one device is required // because CI/desktop machines commonly expose a single one. - SoLoud.instance.changeDevice(newDevice: devices.first); + final toEnumerated = _timeChangeDevice( + 'Switching to device "${devices.first.name}"', + newDevice: devices.first, + ); assert( await _isPlaybackUsable(sound), 'The engine should still play after switching to an enumerated device', ); strBuf.writeln( - 'Switched to device "${devices.first.name}", playback still usable', + 'Switched to device "${devices.first.name}" in ' + '${toEnumerated.inMilliseconds}ms, playback still usable', ); // Invalid native selectors are rejected before the current device is @@ -77,6 +96,57 @@ Future testPlaybackDevices() async { ); strBuf.writeln('Invalid device IDs rejected without disrupting playback'); + // Swap repeatedly while the mixer is actually running. Nothing serializes the + // audio callback against the swap any more: `ma_device_uninit()` alone is + // responsible for quiescing the callback before its stream is closed, and + // `Soloud::mix()` takes the audio mutex itself. If that ordering were not + // enough, a live voice across back-to-back swaps is what would expose it. + final looped = SoLoud.instance.play(sound, looping: true); + assert( + SoLoud.instance.getIsValidVoiceHandle(looped), + 'The looping voice used for the swap stress test should start', + ); + var slowestSwap = Duration.zero; + for (var i = 0; i < 10; i++) { + final elapsed = _timeChangeDevice('Stress swap $i'); + if (elapsed > slowestSwap) slowestSwap = elapsed; + assert( + SoLoud.instance.getIsValidVoiceHandle(looped), + 'The looping voice should survive swap $i: a device change replaces the ' + 'output device, it does not touch voices', + ); + await delay(100); + } + assert( + SoLoud.instance.getActiveVoiceCount() > 0, + 'The engine should still be mixing after 10 device swaps', + ); + strBuf.writeln( + '10 back-to-back swaps under a live voice, slowest ' + '${slowestSwap.inMilliseconds}ms', + ); + + // Aim a swap at the deferred engine pause. `Player`'s pause scheduler stops + // the audio device from its own thread ~500ms (kPauseEngineDelayMs) after the + // last voice ends, so it is the one device operation an app can drive + // concurrently with a swap without any OS lifecycle event. Both act on the + // same `ma_device`, and mid-swap there is no device at all — a start or stop + // landing there is operating on a torn struct. + // + // Note this is a probe, not a proof: it can only make the collision likely, + // and on web there is no scheduler thread at all (the wasm build pauses + // inline). A green run is evidence, not a guarantee of correct locking. + await SoLoud.instance.stop(looped); + for (var i = 0; i < 5; i++) { + await delay(450); + _timeChangeDevice('Swap $i racing the deferred engine pause'); + assert( + await _isPlaybackUsable(sound), + 'The engine should still play after swap $i raced the engine pause', + ); + } + strBuf.writeln('5 swaps aimed at the deferred engine pause window survived'); + // On desktop platforms, we can test changing devices // On mobile and web, there's typically only the default device // Note: not all output devices can be heard. @@ -84,7 +154,7 @@ Future testPlaybackDevices() async { for (final device in devices) { strBuf.writeln('Testing device: ${device.name}'); debugPrint('Testing device: ${device.name}'); - SoLoud.instance.changeDevice(newDevice: device); + _timeChangeDevice('Switching to "${device.name}"', newDevice: device); await delay(3000); } @@ -134,6 +204,27 @@ Future testPlaybackDevices() async { return strBuf; } +/// Calls `changeDevice()` and reports how long the native call took, asserting +/// it stayed inside [_changeDeviceBudget]. +/// +/// This cannot catch a true deadlock: `changeDevice()` is a synchronous FFI +/// call on the UI isolate, so once the native side wedges there is no Dart code +/// left to time it out — the app just freezes (the Android ANR). What it does +/// catch is the multi-second stall that precedes that deadlock, which has the +/// same cause and is visible on every platform where the swap then recovers. +Duration _timeChangeDevice(String what, {PlaybackDevice? newDevice}) { + final stopwatch = Stopwatch()..start(); + SoLoud.instance.changeDevice(newDevice: newDevice); + stopwatch.stop(); + assert( + stopwatch.elapsed < _changeDeviceBudget, + '$what took ${stopwatch.elapsedMilliseconds}ms, over the ' + '${_changeDeviceBudget.inMilliseconds}ms budget. The audio callback is ' + 'being starved during the swap — see _changeDeviceBudget.', + ); + return stopwatch.elapsed; +} + /// Starts a voice and checks the engine handed back a usable handle, then /// stops it again. Used to confirm the output device survived a change. Future _isPlaybackUsable(AudioSource sound) async { diff --git a/lib/src/bindings/bindings_player.dart b/lib/src/bindings/bindings_player.dart index b04fb728..c45c6bb5 100644 --- a/lib/src/bindings/bindings_player.dart +++ b/lib/src/bindings/bindings_player.dart @@ -169,7 +169,7 @@ abstract class FlutterSoLoud { /// /// Returns [PlayerErrors.noError] if success. @mustBeOverridden - PlayerErrors initEngine( + Future initEngine( int deviceId, int sampleRate, int bufferSize, @@ -198,6 +198,18 @@ abstract class FlutterSoLoud { @mustBeOverridden void deinit(); + /// Dispose the native engine without blocking the calling isolate. + @mustBeOverridden + Future deinitAsync(); + + /// Prepare native init state before dispatching an asynchronous init. + @mustBeOverridden + void prepareEngineInit(); + + /// Publish a native shutdown request before dispatching asynchronous dispose. + @mustBeOverridden + void requestEngineShutdown(); + /// Gets the state of player /// /// Return true if initilized diff --git a/lib/src/bindings/bindings_player_ffi.dart b/lib/src/bindings/bindings_player_ffi.dart index 1f8e4dda..c9151528 100644 --- a/lib/src/bindings/bindings_player_ffi.dart +++ b/lib/src/bindings/bindings_player_ffi.dart @@ -6,6 +6,7 @@ import 'dart:async'; import 'dart:ffi' as ffi; +import 'dart:isolate'; import 'dart:typed_data'; import 'package:ffi/ffi.dart'; @@ -73,6 +74,36 @@ typedef OnAudioDurationCallbackTFunction = void Function(double duration); typedef OnMoreDataIsNeededCallbackTFunction = void Function(int offset); +int _invokeInitEngine( + int address, + int deviceId, + int sampleRate, + int bufferSize, + int channels, + int lowLatency, +) { + final function = + ffi.Pointer< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Int, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ) + > + >.fromAddress(address) + .asFunction(); + return function(deviceId, sampleRate, bufferSize, channels, lowLatency); +} + +void _invokeVoidNative(int address) { + ffi.Pointer>.fromAddress( + address, + ).asFunction()(); +} + final class _BufferStreamNativeCallbacks { _BufferStreamNativeCallbacks({ this.onBuffering, @@ -509,21 +540,27 @@ class FlutterSoLoudFfi extends FlutterSoLoud { .asFunction)>(); @override - PlayerErrors initEngine( + Future initEngine( int deviceId, int sampleRate, int bufferSize, Channels channels, bool lowLatency, - ) { - final ret = _initEngine( - deviceId, - sampleRate, - bufferSize, - channels.count, - lowLatency ? 1 : 0, + ) async { + final address = _initEnginePtr.address; + final channelCount = channels.count; + final lowLatencyValue = lowLatency ? 1 : 0; + final result = await Isolate.run( + () => _invokeInitEngine( + address, + deviceId, + sampleRate, + bufferSize, + channelCount, + lowLatencyValue, + ), ); - return PlayerErrors.values[ret]; + return PlayerErrors.values[result]; } late final _initEnginePtr = @@ -538,8 +575,6 @@ class FlutterSoLoudFfi extends FlutterSoLoud { ) > >('initEngine'); - late final _initEngine = _initEnginePtr - .asFunction(); @override void setAndroidAAudioAttributes(bool managed) { @@ -663,6 +698,28 @@ class FlutterSoLoudFfi extends FlutterSoLoud { return _dispose(); } + @override + Future deinitAsync() async { + final address = _disposePtr.address; + await Isolate.run(() => _invokeVoidNative(address)); + } + + @override + void prepareEngineInit() => _prepareEngineInit(); + + late final _prepareEngineInit = _prepareEngineInitPtr + .asFunction(); + late final _prepareEngineInitPtr = + _lookup>('prepareEngineInit'); + + @override + void requestEngineShutdown() => _requestEngineShutdown(); + + late final _requestEngineShutdown = _requestEngineShutdownPtr + .asFunction(); + late final _requestEngineShutdownPtr = + _lookup>('requestEngineShutdown'); + late final _disposePtr = _lookup>( 'dispose', ); diff --git a/lib/src/bindings/bindings_player_web.dart b/lib/src/bindings/bindings_player_web.dart index 7f14e49e..bc01bb8f 100644 --- a/lib/src/bindings/bindings_player_web.dart +++ b/lib/src/bindings/bindings_player_web.dart @@ -233,13 +233,13 @@ class FlutterSoLoudWeb extends FlutterSoLoud { } @override - PlayerErrors initEngine( + Future initEngine( int deviceId, int sampleRate, int bufferSize, Channels channels, bool lowLatency, - ) { + ) async { // [lowLatency] only affects the native miniaudio backends (it selects the // AAudio/CoreAudio performance profile); the Web Audio backend ignores it. final ret = wasmInitEngine( @@ -252,6 +252,15 @@ class FlutterSoLoudWeb extends FlutterSoLoud { return PlayerErrors.values[ret]; } + @override + Future deinitAsync() async => deinit(); + + @override + void prepareEngineInit() {} + + @override + void requestEngineShutdown() {} + @override void setAndroidAAudioAttributes(bool managed) { // No-op on web: AAudio stream attributes are Android-only. diff --git a/lib/src/soloud.dart b/lib/src/soloud.dart index 6ae6f1b6..b05cc115 100644 --- a/lib/src/soloud.dart +++ b/lib/src/soloud.dart @@ -267,6 +267,15 @@ interface class SoLoud { /// engine must be treated as not ready from Dart. bool _nativeCallbacksInitialized = false; + /// Invalidates initialization continuations after deinitialization starts. + int _lifecycleGeneration = 0; + + /// The single in-flight asynchronous native teardown, if any. + Future? _pendingAsyncDeinit; + + /// Serializes init calls while preserving reinitialization behavior. + Future? _pendingInitialization; + /// The current status of the engine. This is `true` when the engine /// has been initialized and is immediately ready. /// @@ -398,10 +407,86 @@ interface class SoLoud { bool lowLatency = true, AndroidAAudioAttributes androidAAudioAttributes = AndroidAAudioAttributes.mediaMusic, + }) { + final requestGeneration = _lifecycleGeneration; + final previous = _pendingInitialization; + final initialization = _runQueuedInitialization( + previous: previous, + requestGeneration: requestGeneration, + device: device, + automaticCleanup: automaticCleanup, + sampleRate: sampleRate, + bufferSize: bufferSize, + channels: channels, + lowLatency: lowLatency, + androidAAudioAttributes: androidAAudioAttributes, + ); + _pendingInitialization = initialization; + return initialization.whenComplete(() { + if (identical(_pendingInitialization, initialization)) { + _pendingInitialization = null; + } + }); + } + + Future _runQueuedInitialization({ + required Future? previous, + required int requestGeneration, + required PlaybackDevice? device, + required bool automaticCleanup, + required int sampleRate, + required int bufferSize, + required Channels channels, + required bool lowLatency, + required AndroidAAudioAttributes androidAAudioAttributes, + }) async { + if (previous != null) { + try { + await previous; + } catch (_) { + // A failed initialization must not permanently block a retry. + } + } + + if (requestGeneration != _lifecycleGeneration) { + await _waitForInitializationTeardownAndThrow(); + } + await _initialize( + initializationGeneration: requestGeneration, + device: device, + automaticCleanup: automaticCleanup, + sampleRate: sampleRate, + bufferSize: bufferSize, + channels: channels, + lowLatency: lowLatency, + androidAAudioAttributes: androidAAudioAttributes, + ); + } + + Future _initialize({ + required int initializationGeneration, + PlaybackDevice? device, + bool automaticCleanup = false, + int sampleRate = 44100, + int bufferSize = 2048, + Channels channels = Channels.stereo, + bool lowLatency = true, + AndroidAAudioAttributes androidAAudioAttributes = + AndroidAAudioAttributes.mediaMusic, }) async { - final nativeIsInitialized = _controller.soLoudFFI.isInited(); _log.finest('init() called'); + final pendingDeinit = _pendingAsyncDeinit; + if (pendingDeinit != null) { + await pendingDeinit; + } + + if (initializationGeneration != _lifecycleGeneration) { + await _waitForInitializationTeardownAndThrow(); + } + + final nativeIsInitialized = _controller.soLoudFFI.isInited(); + // Removing these asserts because they could not be true after a // hot restart or after calling deinit(). Discussed in #452. // Making extra sure no state is dangling after a hot-restart. @@ -437,22 +522,30 @@ interface class SoLoud { 'during the current lifetime of the app.', ); _controller.soLoudFFI.clearDartCallbackRegistrations(); - deinit(); + await _deinitAsync(invalidateInitialization: false); + if (initializationGeneration != _lifecycleGeneration) { + await _waitForInitializationTeardownAndThrow(); + } } + _controller.soLoudFFI.prepareEngineInit(); + // Must be set before the engine opens the device so the backend picks it // up at stream creation (and re-applies it on device changes). _controller.soLoudFFI.setAndroidAAudioAttributes( androidAAudioAttributes == AndroidAAudioAttributes.mediaMusic, ); - final error = _controller.soLoudFFI.initEngine( + final error = await _controller.soLoudFFI.initEngine( device?.id ?? -1, sampleRate, bufferSize, channels, lowLatency, ); + if (initializationGeneration != _lifecycleGeneration) { + await _waitForInitializationTeardownAndThrow(); + } _logPlayerError(error, from: 'initialize() result'); if (error == PlayerErrors.noError) { /// get the visualization flag from the player on C side. @@ -467,12 +560,25 @@ interface class SoLoud { // Initialize [SoLoudLoader] _loader.automaticCleanup = automaticCleanup; - // Register fresh Dart callbacks only after the native player has been - // reset and re-initialized. - await _initializeNativeCallbacks(); - _nativeCallbacksInitialized = true; + try { + // Register fresh Dart callbacks only after the native player has been + // reset and re-initialized. + await _initializeNativeCallbacks(); + if (initializationGeneration != _lifecycleGeneration) { + await _waitForInitializationTeardownAndThrow(); + } - await _loader.initialize(); + await _loader.initialize(); + if (initializationGeneration != _lifecycleGeneration) { + await _waitForInitializationTeardownAndThrow(); + } + _nativeCallbacksInitialized = true; + } catch (_) { + if (_controller.soLoudFFI.isInited()) { + await deinitAsync(); + } + rethrow; + } } else { _nativeCallbacksInitialized = false; _log.severe('initialize() failed with error: $error'); @@ -522,26 +628,70 @@ interface class SoLoud { /// or inside "AppLifecycleListener.onExitRequested". void deinit() { _log.finest('deinit() called'); + _predeinit(); + _controller.soLoudFFI.deinit(); + _postdeinit(); + } + + /// Stops the engine and disposes native resources without blocking the UI + /// isolate while the native audio device is being stopped. + Future deinitAsync() async { + await _deinitAsync(invalidateInitialization: true); + } + + Future _deinitAsync({required bool invalidateInitialization}) async { + final existing = _pendingAsyncDeinit; + if (existing != null) { + if (invalidateInitialization) { + _predeinit(); + } + await existing; + return; + } + + _predeinit(invalidateInitialization: invalidateInitialization); + final teardown = _deinitNativeAsync(); + _pendingAsyncDeinit = teardown; + try { + await teardown; + } finally { + if (identical(_pendingAsyncDeinit, teardown)) { + _pendingAsyncDeinit = null; + } + } + } + + void _predeinit({bool invalidateInitialization = true}) { + _controller.soLoudFFI.requestEngineShutdown(); + if (invalidateInitialization) { + _lifecycleGeneration++; + } _nativeCallbacksInitialized = false; if (_controller.soLoudFFI.isMixerOutputCaptureRunning()) { _controller.soLoudFFI.stopMixerOutputCapture(); } - // Stop the engine first: natively this stops all sounds, clears the - // Dart callback registrations and stops the audio device, joining the - // audio thread. Closing the NativeCallable trampolines before this - // point races with the audio thread invoking them (voices ending from - // the mixing thread) and crashes with "Callback invoked after it has - // been deleted". - _controller.soLoudFFI.deinit(); - // Destroy the sounds (and their BufferStreams) before closing the - // NativeCallable trampolines: an in-flight addData on another isolate - // could otherwise invoke a freed metadata/buffering trampoline while - // its BufferStream is still alive. - _controller.soLoudFFI.disposeAllSound(); + } + + Future _deinitNativeAsync() async { + await _controller.soLoudFFI.deinitAsync(); + _postdeinit(); + } + + void _postdeinit() { + // Native teardown has completed before this runs, so no native thread can + // invoke a callback while its owning NativeCallable is being closed. _controller.soLoudFFI.disposeNativeCallables(); _activeSounds.clear(); } + Future _waitForInitializationTeardownAndThrow() async { + final pendingDeinit = _pendingAsyncDeinit; + if (pendingDeinit != null) { + await pendingDeinit; + } + throw const SoLoudInitializationStoppedByDeinitException(); + } + /// Find the [AudioSource] which owns the given [handle]. AudioSource? findAudioSourceByHandle(SoundHandle handle) { for (final sound in _activeSounds) { diff --git a/src/bindings.cpp b/src/bindings.cpp index 720f4eb1..07c1f725 100644 --- a/src/bindings.cpp +++ b/src/bindings.cpp @@ -30,6 +30,13 @@ extern "C" /// mutex to lock the init and dispose methods. std::mutex init_deinit_mutex; + /// Set by Dart as soon as a shutdown is requested, so worker scheduling + /// cannot make a later init resurrect the engine. + std::atomic engine_shutdown_requested{false}; + + /// Lock-free readiness publication for UI-side isInitialized queries. + std::atomic engine_initialized{false}; + /// mutex to lock the loading audio methods and make safe operations on /// player.sounds list. std::mutex loadMutex; @@ -399,6 +406,12 @@ extern "C" std::lock_guard guard(init_deinit_mutex); std::lock_guard guard_load(loadMutex); + if (engine_shutdown_requested.load(std::memory_order_acquire)) + { + engine_initialized.store(false, std::memory_order_release); + return backendNotInited; + } + if (player.get() == nullptr) player = std::make_unique(); @@ -407,7 +420,10 @@ extern "C" channels, deviceID, lowLatency != 0); if (res != noError) + { + engine_initialized.store(false, std::memory_order_release); return res; + } // Set window size for filters const int windowSize = (player.get()->soloud.getBackendBufferSize() / @@ -418,6 +434,14 @@ extern "C" // Set the callback for when a voice is ended/stopped player.get()->setVoiceEndedCallback(voiceEndedCallback); + if (engine_shutdown_requested.load(std::memory_order_acquire)) + { + engine_initialized.store(false, std::memory_order_release); + return backendNotInited; + } + + engine_initialized.store(true, std::memory_order_release); + return PlayerErrors::noError; } @@ -435,7 +459,13 @@ extern "C" FFI_PLUGIN_EXPORT void listPlaybackDevices(char **devicesName, int **deviceId, int **isDefault, int *n_devices) { - std::vector d = player.get()->listPlaybackDevices(); + // Deliberately not routed through the global `player`: `dispose()` now runs + // on a worker isolate, so reading that `unique_ptr` here would race with it + // being reset and replaced. Enumeration needs no player state, so call it + // directly instead of guarding with the lifecycle mutex — taking that lock + // would stall this (UI-thread) call for the whole of an in-flight + // `initEngine()`, which is the very block this release removes. + std::vector d = Player::listPlaybackDevices(); int numDevices = 0; for (int i = 0; i < (int)d.size(); i++) @@ -500,11 +530,16 @@ extern "C" /// FFI_PLUGIN_EXPORT void dispose() { + engine_shutdown_requested.store(true, std::memory_order_release); + engine_initialized.store(false, std::memory_order_release); + std::lock_guard guard(init_deinit_mutex); + std::lock_guard guard_load(loadMutex); + // An in-flight init may have published readiness before releasing the + // lifecycle lock. Reassert shutdown after acquiring it. + engine_initialized.store(false, std::memory_order_release); if (player.get() == nullptr) return; player.get()->disposeAllSound(); - std::lock_guard guard(init_deinit_mutex); - std::lock_guard guard_load(loadMutex); dartVoiceEndedCallback = nullptr; dartFileLoadedCallback = nullptr; dartStateChangedCallback = nullptr; @@ -516,11 +551,20 @@ extern "C" analyzer = std::make_unique(256); } + FFI_PLUGIN_EXPORT void prepareEngineInit() + { + engine_shutdown_requested.store(false, std::memory_order_release); + engine_initialized.store(false, std::memory_order_release); + } + + FFI_PLUGIN_EXPORT void requestEngineShutdown() + { + engine_shutdown_requested.store(true, std::memory_order_release); + } + FFI_PLUGIN_EXPORT int isInited() { - if (player.get() == nullptr) - return 0; - return player.get()->isInited() ? 1 : 0; + return engine_initialized.load(std::memory_order_acquire) ? 1 : 0; } /// Load a new sound to be played once or multiple times later. diff --git a/src/ffi_gen_tmp.h b/src/ffi_gen_tmp.h index aef6c1e7..59c35a18 100644 --- a/src/ffi_gen_tmp.h +++ b/src/ffi_gen_tmp.h @@ -21,6 +21,9 @@ #define FFI_PLUGIN_EXPORT +FFI_PLUGIN_EXPORT void prepareEngineInit(); +FFI_PLUGIN_EXPORT void requestEngineShutdown(); + //--------------------- copy here the new functions to generate /// Create a new mixing bus. diff --git a/src/player.h b/src/player.h index 9c91bd11..11cd9c0f 100644 --- a/src/player.h +++ b/src/player.h @@ -56,7 +56,15 @@ class Player /// @param deviceID the device ID. -1 for default OS output device. PlayerErrors changeDevice(int deviceID); - std::vector listPlaybackDevices(); + /// @brief Enumerate the OS playback devices. + /// + /// Static because it reads no player state: it spins up its own local + /// `ma_context` and tears it down before returning. Callers must be able to + /// enumerate devices while the engine is being created or destroyed on + /// another thread, so this must not depend on the lifetime of the global + /// `player` instance nor take the lifecycle lock (which an in-flight + /// `init()` can hold for the whole audio-device startup). + static std::vector listPlaybackDevices(); /// @brief Set a function callback triggered when a voice is stopped/ended. void setVoiceEndedCallback(void (*voiceEndedCallback)(unsigned int *)); @@ -836,7 +844,7 @@ class Player std::vector> sounds; /// true when the backend is initialized - bool mInited; + std::atomic mInited; /// main SoLoud engine SoLoud::Soloud soloud; diff --git a/src/soloud/src/backend/miniaudio/soloud_miniaudio.cpp b/src/soloud/src/backend/miniaudio/soloud_miniaudio.cpp index c6c373cb..b5865aad 100644 --- a/src/soloud/src/backend/miniaudio/soloud_miniaudio.cpp +++ b/src/soloud/src/backend/miniaudio/soloud_miniaudio.cpp @@ -114,8 +114,12 @@ namespace SoLoud static bool gDeviceInitialized = false; // Track if device is actually initialized static std::thread *gInitThread = nullptr; // Background thread for device init static std::mutex gInitMutex; // Protect device init state - // Serializes device start/stop operations (e.g. resume) against device - // teardown in soloud_miniaudio_deinit(). + // Serializes every operation that touches `gDevice`: pause, resume, the + // device swap in miniaudio_changeDevice_impl() and teardown in + // soloud_miniaudio_deinit(). Any two of these running at once act on a + // half-initialized or already-freed device. Note this is NOT SoLoud's + // audio-thread mutex and must not be confused with it: the data callback + // never takes this one, so holding it cannot starve the audio thread. static std::mutex gDeviceOpsMutex; // Configuration to store for deferred initialization @@ -315,6 +319,15 @@ namespace SoLoud // state and keeps MPRemoteCommandCenter routing intact. result soloud_miniaudio_pause(SoLoud::Soloud *aSoloud) { + // Take the same device-ops lock as resume()/deinit()/changeDevice(). + // Without it this is the one device operation that can still land on a + // `gDevice` another thread is swapping or tearing down — and it is the + // most likely one to do so, since Player's pause scheduler fires it + // from its own thread ~500ms after the last voice ends. + std::lock_guard deviceOpsLock(gDeviceOpsMutex); + if (!gDeviceInitialized) + return 0; // No device to pause. + if (ma_device_get_state(&gDevice) == ma_device_state_started) { #if defined(__EMSCRIPTEN__) || defined(__ANDROID__) @@ -625,17 +638,37 @@ namespace SoLoud if (soloud == nullptr) return UNKNOWN_ERROR; + // Serialize the whole swap against the other operations that act on + // `gDevice`: soloud_miniaudio_pause(), soloud_miniaudio_resume() and + // soloud_miniaudio_deinit(). Between the uninit and the init below + // there is no device at all, and a concurrent start/stop on that torn + // struct is the SIGABRT documented in soloud_miniaudio_resume(). + // This is reachable in ordinary use, not just on lifecycle events: + // Player's pause scheduler runs on its own thread and calls + // Soloud::pause() ~500ms after the last voice ends. + std::lock_guard deviceOpsLock(gDeviceOpsMutex); + // Stop the device before uninitializing to ensure clean shutdown if (ma_device_get_state(&gDevice) == ma_device_state_started) { ma_device_stop(&gDevice); } - // Lock the audio mutex to prevent race conditions during device change - soloud->lockAudioMutex_internal(); - + // SoLoud's audio-thread mutex is deliberately NOT held across the swap + // below, even though it guards the mixer, because it does not protect + // `gDevice`: the data callback reaches the engine through + // `pDevice->pUserData` and takes that mutex itself inside + // `Soloud::mix()`, and `ma_device_uninit()` already guarantees the + // callback has stopped before it returns. Holding it here only starves + // the audio thread, and on Android that is fatal: on AAudio's legacy + // (non-MMAP) path a stream reports STARTED only once its first data + // callback has run, so a held mutex makes that callback block, + // `ma_device_start()` time out after 5s, and the cleanup + // `ma_device_uninit()` then wait forever on the very callback the + // caller is blocking. That deadlock is the Android ANR. ma_device_uninit(&gDevice); gDeviceInitialized = false; + gDeviceStopped = true; ma_device_config deviceConfig = ma_device_config_init(ma_device_type_playback); deviceConfig.playback.pDeviceID = (ma_device_id *)pPlaybackInfos_id; @@ -679,8 +712,8 @@ namespace SoLoud #endif if (result != MA_SUCCESS) { + soloud_platform_log("miniaudio_changeDevice_impl: ma_device_init failed with error %d\n", result); gDeviceInitialized = false; - soloud->unlockAudioMutex_internal(); return UNKNOWN_ERROR; } @@ -692,11 +725,13 @@ namespace SoLoud soloud_platform_log("miniaudio_changeDevice_impl: ma_device_start failed with error %d\n", startResult); ma_device_uninit(&gDevice); gDeviceInitialized = false; - soloud->unlockAudioMutex_internal(); + // The device never reached a running state and is now gone, so + // don't leave `deinit()` polling for a "stopped" notification that + // can no longer arrive. + gDeviceStopped = true; return UNKNOWN_ERROR; } - soloud->unlockAudioMutex_internal(); return 0; } }; diff --git a/test/change_device_test.cpp b/test/change_device_test.cpp new file mode 100644 index 00000000..ece16dca --- /dev/null +++ b/test/change_device_test.cpp @@ -0,0 +1,217 @@ +// Standalone native regression tests for the output-device swap. +// +// miniaudio_changeDevice_impl() replaces the engine's ma_device in place: +// uninit the old one, init the new one, start it. Two things about that were +// wrong, and both are only reachable once a device change actually reaches the +// backend (before #532 it did not, so nothing exercised this). +// +// 1. The swap ran with SoLoud's audio-thread mutex held. That mutex does not +// protect gDevice at all -- the data callback reaches the engine through +// pDevice->pUserData and takes the mutex itself inside Soloud::mix() -- so +// holding it across the swap only starves the audio thread. On Android that +// is fatal: on AAudio's legacy (non-MMAP) path a stream reports STARTED only +// once its first data callback has run, so the blocked callback makes +// ma_device_start() time out after 5s, and the cleanup ma_device_uninit() +// then waits forever on that same blocked callback. Permanent freeze (ANR). +// +// 2. Nothing serialized the swap against the other operations on the same +// gDevice: soloud_miniaudio_pause(), soloud_miniaudio_resume() and +// soloud_miniaudio_deinit(). Between the uninit and the init there is no +// device at all, so a concurrent start/stop runs against a torn struct. +// This is not hypothetical or lifecycle-only: flutter_soloud's Player runs a +// pause scheduler on its own thread that calls Soloud::pause() ~500ms after +// the last voice ends. Without the device-ops lock, kConcurrentSwaps below +// segfaults or hangs; with it, it is stable. +// +// Build and run from the flutter_soloud repository root with: +// +// ./test/run_change_device_test.sh + +#include "soloud.h" +#include "soloud_audiosource.h" + +#include +#include +#include +#include +#include + +namespace { + +constexpr int kSerialSwaps = 30; +constexpr int kConcurrentThreads = 4; +constexpr int kSwapsPerThread = 25; + +// A single swap closes one stream and opens another: tens of milliseconds. +// The number that matters is the one this excludes -- the 5s AAudio +// state-transition timeout that the held audio mutex used to produce. +constexpr long long kSwapBudgetMs = 2000; + +int gFailures = 0; + +void check(bool condition, const char *what) +{ + if (condition) + { + std::printf(" ok: %s\n", what); + return; + } + std::printf(" FAILED: %s\n", what); + gFailures++; +} + +long long nowMs() +{ + return std::chrono::duration_cast( + std::chrono::steady_clock::now().time_since_epoch()) + .count(); +} + +// A never-ending silent source, so the mixer is actually running while the +// device underneath it is replaced. +class SilenceInstance : public SoLoud::AudioSourceInstance +{ +public: + unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, + unsigned int aBufferSize) override + { + for (unsigned int c = 0; c < mChannels; c++) + for (unsigned int i = 0; i < aSamplesToRead; i++) + aBuffer[i + c * aBufferSize] = 0.0f; + return aSamplesToRead; + } + + bool hasEnded() override { return false; } +}; + +class Silence : public SoLoud::AudioSource +{ +public: + Silence() { mChannels = 2; } + + SoLoud::AudioSourceInstance *createInstance() override + { + return new SilenceInstance(); + } +}; + +// Swapping to the null device id asks miniaudio for the current OS default, +// which is what SoLoud.changeDevice() does when called without an argument. +SoLoud::result swapToDefault(SoLoud::Soloud &soloud) +{ + return soloud.miniaudio_changeDevice(nullptr); +} + +// A swap that never finishes cannot be caught from inside the process, so this +// pins down the stall that precedes the deadlock instead: with the audio mutex +// held across ma_device_start(), each swap costs the full AAudio timeout. +void testSwapsAreFastAndSurviveMixing(SoLoud::Soloud &soloud) +{ + std::printf("swaps under a live voice\n"); + + Silence silence; + const SoLoud::handle handle = soloud.play(silence); + check(soloud.isValidVoiceHandle(handle), "the test voice is playing"); + + long long worstMs = 0; + int errors = 0; + for (int i = 0; i < kSerialSwaps; i++) + { + const long long start = nowMs(); + if (swapToDefault(soloud) != SoLoud::SO_NO_ERROR) + errors++; + const long long elapsed = nowMs() - start; + if (elapsed > worstMs) + worstMs = elapsed; + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + + std::printf(" %d swaps, slowest %lldms\n", kSerialSwaps, worstMs); + check(errors == 0, "every swap reported success"); + check(worstMs < kSwapBudgetMs, + "no swap blocked for the AAudio state-transition timeout"); + check(soloud.isValidVoiceHandle(handle), + "the voice survived: a device change replaces the output device, " + "it does not touch voices"); + + soloud.stop(handle); +} + +// The realistic collision is a swap against the pause scheduler's +// Soloud::pause() on its own thread. Racing swaps against each other reaches +// the same shared gDevice through the same lock, and is far easier to aim. +void testConcurrentDeviceOps(SoLoud::Soloud &soloud) +{ + std::printf("concurrent device operations\n"); + + Silence silence; + const SoLoud::handle handle = soloud.play(silence); + + std::atomic errors{0}; + std::vector threads; + threads.reserve(kConcurrentThreads); + for (int t = 0; t < kConcurrentThreads; t++) + { + threads.emplace_back([&soloud, &errors] + { + for (int i = 0; i < kSwapsPerThread; i++) + { + if (swapToDefault(soloud) != SoLoud::SO_NO_ERROR) + errors++; + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } }); + } + + // Pause/resume are the operations flutter_soloud itself drives concurrently + // with a swap, so run them against it too rather than only swap-vs-swap. + std::thread pauser([&soloud] + { + for (int i = 0; i < kSwapsPerThread; i++) + { + soloud.pause(); + soloud.resume(); + std::this_thread::sleep_for(std::chrono::milliseconds(3)); + } }); + + for (auto &thread : threads) + thread.join(); + pauser.join(); + + std::printf(" %d swaps across %d threads, interleaved with pause/resume\n", + kConcurrentThreads * kSwapsPerThread, kConcurrentThreads); + check(errors.load() == 0, "every concurrent swap reported success"); + check(soloud.isValidVoiceHandle(handle), + "the voice survived the concurrent swaps"); + + soloud.stop(handle); +} + +} // namespace + +int main() +{ + SoLoud::Soloud soloud; + const SoLoud::result init = soloud.init(SoLoud::Soloud::CLIP_ROUNDOFF, + SoLoud::Soloud::MINIAUDIO); + if (init != SoLoud::SO_NO_ERROR) + { + // No usable audio backend (headless CI, no /dev/snd). There is nothing + // to swap, and reporting a failure here would only be noise. + std::printf("SKIPPED: miniaudio could not open a device (error %d)\n", + init); + return 0; + } + + testSwapsAreFastAndSurviveMixing(soloud); + testConcurrentDeviceOps(soloud); + + soloud.deinit(); + + if (gFailures == 0) + { + std::printf("All change-device tests passed.\n"); + return 0; + } + std::printf("%d change-device test(s) failed.\n", gFailures); + return 1; +} diff --git a/test/run_change_device_test.sh b/test/run_change_device_test.sh new file mode 100755 index 00000000..2aff4e50 --- /dev/null +++ b/test/run_change_device_test.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Build and run the standalone native output-device swap regression tests. +# +# Unlike the other native tests here this one needs the miniaudio backend +# (that is where changeDevice lives) and therefore a real output device. On a +# machine without one the test reports SKIPPED and exits 0. + +set -e + +REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$REPO_ROOT" + +OUT="${TMPDIR:-/tmp}/change_device_test" + +c++ -std=c++17 -O2 -Wall -Wextra -pthread \ + -DWITH_MINIAUDIO \ + -DNO_XIPH_LIBS \ + -I src/soloud/include \ + -I src \ + -o "$OUT" \ + test/change_device_test.cpp \ + src/soloud_common.cpp \ + src/soloud/src/core/*.cpp \ + src/soloud/src/backend/miniaudio/soloud_miniaudio.cpp \ + src/mixeroutput/*.cpp \ + -ldl -lm + +"$OUT" diff --git a/web/libflutter_soloud_plugin.js b/web/libflutter_soloud_plugin.js index 1a27bb9c..3d070dc2 100644 --- a/web/libflutter_soloud_plugin.js +++ b/web/libflutter_soloud_plugin.js @@ -1,2 +1,2 @@ -var Module_soloud=(()=>{var _scriptName=globalThis.document?.currentScript?.src;return async function(moduleArg={}){var moduleRtn;(function(){function humanReadableVersionToPacked(str){str=str.split("-")[0];var vers=str.split(".").slice(0,3);while(vers.length<3)vers.push("00");vers=vers.map((n,i,arr)=>n.padStart(2,"0"));return vers.join("")}var packedVersionToHumanReadable=n=>[n/1e4|0,(n/100|0)%100,n%100].join(".");var TARGET_NOT_SUPPORTED=2147483647;var currentNodeVersion=typeof process!=="undefined"&&process.versions?.node?humanReadableVersionToPacked(process.versions.node):TARGET_NOT_SUPPORTED;if(currentNodeVersion<16e4){throw new Error(`This emscripten-generated code requires node v${packedVersionToHumanReadable(16e4)} (detected v${packedVersionToHumanReadable(currentNodeVersion)})`)}var userAgent=typeof navigator!=="undefined"&&navigator.userAgent;if(!userAgent){return}var currentSafariVersion=userAgent.includes("Safari/")&&!userAgent.includes("Chrome/")&&userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)?humanReadableVersionToPacked(userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):TARGET_NOT_SUPPORTED;if(currentSafariVersion<15e4){throw new Error(`This emscripten-generated code requires Safari v${packedVersionToHumanReadable(15e4)} (detected v${currentSafariVersion})`)}var currentFirefoxVersion=userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentFirefoxVersion<79){throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${currentFirefoxVersion})`)}var currentChromeVersion=userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentChromeVersion<85){throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${currentChromeVersion})`)}})();var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};if(typeof __filename!="undefined"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){const isNode=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(!isNode)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?)");var fs=require("fs");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);assert(Buffer.isBuffer(ret));return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");assert(binary?Buffer.isBuffer(ret):typeof ret=="string");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))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){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{throw new Error("environment detection error")}var out=console.log.bind(console);var err=console.error.bind(console);assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.");var wasmBinary;if(!globalThis.WebAssembly){err("no native wasm support detected")}var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+text:""))}}var isFileURI=filename=>filename.startsWith("file://");function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[SAFE_HEAP_INDEX(HEAPU32,max>>2,"storing")]=34821223;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,max+4>>2,"storing")]=2310721022}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=HEAPU32[SAFE_HEAP_INDEX(HEAPU32,max>>2,"loading")];var cookie2=HEAPU32[SAFE_HEAP_INDEX(HEAPU32,max+4>>2,"loading")];if(cookie1!=34821223||cookie2!=2310721022){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`)}}var runtimeDebug=true;(()=>{var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)abort("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function consumedModuleProp(prop){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,set(){abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}}function makeInvalidEarlyAccess(name){return()=>assert(false,`call to '${name}' via reference taken before Wasm module initialization`)}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`)}}function isExportedByForceFilesystem(name){return name==="FS_createPath"||name==="FS_createDataFile"||name==="FS_createPreloadedFile"||name==="FS_preloadFile"||name==="FS_unlink"||name==="addRunDependency"||name==="FS_createLazyFile"||name==="FS_createDevice"||name==="removeRunDependency"}function missingLibrarySymbol(sym){unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg=`'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}abort(msg)}})}}function SAFE_HEAP_INDEX(arr,idx,action){const bytes=arr.BYTES_PER_ELEMENT;const dest=idx*bytes;if(idx<=0)abort(`segmentation fault ${action} ${bytes} bytes at address ${dest}`);if(runtimeInitialized){var brk=_sbrk(0);if(dest+bytes>brk)abort(`segmentation fault, exceeded the top of the available dynamic heap when ${action} ${bytes} bytes at address ${dest}. DYNAMICTOP=${brk}`);if(brk<_emscripten_stack_get_base())abort(`brk >= _emscripten_stack_get_base() (brk=${brk}, _emscripten_stack_get_base()=${_emscripten_stack_get_base()})`);if(brk>wasmMemory.buffer.byteLength)abort(`brk <= wasmMemory.buffer.byteLength (brk=${brk}, wasmMemory.buffer.byteLength=${wasmMemory.buffer.byteLength})`)}return idx}function segfault(){abort("segmentation fault")}function alignfault(){abort("alignment fault")}var readyPromiseResolve,readyPromiseReject;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}assert(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}consumedModuleProp("preRun");callRuntimeCallbacks(onPreRuns)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){checkStackCookie();if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}consumedModuleProp("postRun");callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}function createExportWrapper(name,nargs){return(...args)=>{assert(runtimeInitialized,`native function \`${name}\` called before runtime initialization`);var f=wasmExports[name];assert(f,`exported native function \`${name}\` not found`);assert(args.length<=nargs,`native function \`${name}\` called with ${args.length} args but expects ${nargs}`);return f(...args)}}var wasmBinaryFile;function findWasmBinary(){return locateFile("libflutter_soloud_plugin.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);if(isFileURI(binaryFile)){err(`warning: Loading from a file URI (${binaryFile}) 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)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}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;return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{try{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);reject(e)}})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[SAFE_HEAP_INDEX(HEAP8,ptr,"loading")];case"i8":return HEAP8[SAFE_HEAP_INDEX(HEAP8,ptr,"loading")];case"i16":return HEAP16[SAFE_HEAP_INDEX(HEAP16,ptr>>1,"loading")];case"i32":return HEAP32[SAFE_HEAP_INDEX(HEAP32,ptr>>2,"loading")];case"i64":return HEAP64[SAFE_HEAP_INDEX(HEAP64,ptr>>3,"loading")];case"float":return HEAPF32[SAFE_HEAP_INDEX(HEAPF32,ptr>>2,"loading")];case"double":return HEAPF64[SAFE_HEAP_INDEX(HEAPF64,ptr>>3,"loading")];case"*":return HEAPU32[SAFE_HEAP_INDEX(HEAPU32,ptr>>2,"loading")];default:abort(`invalid type for getValue: ${type}`)}}var noExitRuntime=true;var ptrToString=ptr=>{assert(typeof ptr==="number",`ptrToString expects a number, got ${typeof ptr}`);ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[SAFE_HEAP_INDEX(HEAP8,ptr,"storing")]=value;break;case"i8":HEAP8[SAFE_HEAP_INDEX(HEAP8,ptr,"storing")]=value;break;case"i16":HEAP16[SAFE_HEAP_INDEX(HEAP16,ptr>>1,"storing")]=value;break;case"i32":HEAP32[SAFE_HEAP_INDEX(HEAP32,ptr>>2,"storing")]=value;break;case"i64":HEAP64[SAFE_HEAP_INDEX(HEAP64,ptr>>3,"storing")]=BigInt(value);break;case"float":HEAPF32[SAFE_HEAP_INDEX(HEAPF32,ptr>>2,"storing")]=value;break;case"double":HEAPF64[SAFE_HEAP_INDEX(HEAPF64,ptr>>3,"storing")]=value;break;case"*":HEAPU32[SAFE_HEAP_INDEX(HEAPU32,ptr>>2,"storing")]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(typeof ptr=="number",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):""};var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+4>>2,"storing")]=type}get_type(){return HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+4>>2,"loading")]}set_destructor(destructor){HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+8>>2,"storing")]=destructor}get_destructor(){return HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+8>>2,"loading")]}set_caught(caught){caught=caught?1:0;HEAP8[SAFE_HEAP_INDEX(HEAP8,this.ptr+12,"storing")]=caught}get_caught(){return HEAP8[SAFE_HEAP_INDEX(HEAP8,this.ptr+12,"loading")]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[SAFE_HEAP_INDEX(HEAP8,this.ptr+13,"storing")]=rethrown}get_rethrown(){return HEAP8[SAFE_HEAP_INDEX(HEAP8,this.ptr+13,"loading")]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+16>>2,"storing")]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+16>>2,"loading")]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;assert(false,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")};var syscallGetVarargI=()=>{assert(SYSCALLS.varargs!=undefined);var ret=HEAP32[SAFE_HEAP_INDEX(HEAP32,+SYSCALLS.varargs>>2,"loading")];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{assert(typeof str==="string",`stringToUTF8Array expects a string (got ${typeof str})`);if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=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 "+ptrToString(u)+" 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;i++}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var strError=errno=>UTF8ToString(_strerror(errno));var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>{var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}};var runDependencies=0;var dependenciesFulfilled=null;var runDependencyTracking={};var runDependencyWatcher=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"removeRunDependency requires an ID");assert(runDependencyTracking[id]);delete runDependencyTracking[id];if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"addRunDependency requires an ID");assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&globalThis.setInterval){runDependencyWatcher=setInterval(()=>{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);runDependencyWatcher.unref?.()}};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){assert(plugin["handle"].constructor.name==="AsyncFunction","Filesystem plugin handlers must be async functions (See #24914)");return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class extends Error{name="ErrnoError";constructor(errno){super(runtimeInitialized?strError(errno):"");this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){assert(typeof parent=="object");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){assert(fd>=-1);stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},mount(type,opts,mountpoint){if(typeof type=="string"){throw type}var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable)){while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){assert(offset>=0);if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){abort(`Invalid encoding type "${opts.encoding}"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{abort("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){assert(!FS.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)abort("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")abort("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};for(const[key,fn]of Object.entries(node.stream_ops)){stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}}function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node},absolutePath(){abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder(){abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink(){abort("FS.createLink has been removed; use FS.symlink instead")},joinPath(){abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc(){abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath(){abort("FS.standardizePath has been removed; use PATH.normalize instead")}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf>>2,"storing")]=stat.dev;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+4>>2,"storing")]=stat.mode;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+8>>2,"storing")]=stat.nlink;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+12>>2,"storing")]=stat.uid;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+16>>2,"storing")]=stat.gid;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+20>>2,"storing")]=stat.rdev;HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+24>>3,"storing")]=BigInt(stat.size);HEAP32[SAFE_HEAP_INDEX(HEAP32,buf+32>>2,"storing")]=4096;HEAP32[SAFE_HEAP_INDEX(HEAP32,buf+36>>2,"storing")]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+40>>3,"storing")]=BigInt(Math.floor(atime/1e3));HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+48>>2,"storing")]=atime%1e3*1e3*1e3;HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+56>>3,"storing")]=BigInt(Math.floor(mtime/1e3));HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+64>>2,"storing")]=mtime%1e3*1e3*1e3;HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+72>>3,"storing")]=BigInt(Math.floor(ctime/1e3));HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+80>>2,"storing")]=ctime%1e3*1e3*1e3;HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+88>>3,"storing")]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+4>>2,"storing")]=stats.bsize;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+60>>2,"storing")]=stats.bsize;HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+8>>3,"storing")]=BigInt(stats.blocks);HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+16>>3,"storing")]=BigInt(stats.bfree);HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+24>>3,"storing")]=BigInt(stats.bavail);HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+32>>3,"storing")]=BigInt(stats.files);HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+40>>3,"storing")]=BigInt(stats.ffree);HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+48>>2,"storing")]=stats.fsid;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+64>>2,"storing")]=stats.flags;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+56>>2,"storing")]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[SAFE_HEAP_INDEX(HEAP16,arg+offset>>1,"storing")]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[SAFE_HEAP_INDEX(HEAP32,argp>>2,"storing")]=termios.c_iflag||0;HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+4>>2,"storing")]=termios.c_oflag||0;HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+8>>2,"storing")]=termios.c_cflag||0;HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+12>>2,"storing")]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[SAFE_HEAP_INDEX(HEAP8,argp+i+17,"storing")]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[SAFE_HEAP_INDEX(HEAP32,argp>>2,"loading")];var c_oflag=HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+4>>2,"loading")];var c_cflag=HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+8>>2,"loading")];var c_lflag=HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+12>>2,"loading")];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[SAFE_HEAP_INDEX(HEAP8,argp+i+17,"loading")])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[SAFE_HEAP_INDEX(HEAP32,argp>>2,"storing")]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[SAFE_HEAP_INDEX(HEAP16,argp>>1,"storing")]=winsize[0];HEAP16[SAFE_HEAP_INDEX(HEAP16,argp+2>>1,"storing")]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>abort("native code called abort()");var jsStackTrace=()=>(new Error).stack.toString();var getCallstack=flags=>{var callstack=jsStackTrace();if(flags&8){warnOnce("emscripten_log with EM_LOG_C_STACK no longer has any effect")}var lines=callstack.split("\n");callstack="";var firefoxRe=new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)");var chromeRe=new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");for(var line of lines){var symbolName="";var file="";var lineno=0;var column=0;var parts=chromeRe.exec(line);if(parts?.length==5){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]}else{parts=firefoxRe.exec(line);if(parts?.length>=4){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]|0}else{callstack+=line+"\n";continue}}if(symbolName=="_emscripten_log"||symbolName=="_emscripten_get_callstack"){callstack="";continue}if(flags&24){if(flags&64){file=file.substring(file.replace(/\\/g,"/").lastIndexOf("/")+1)}callstack+=` at ${symbolName} (${file}:${lineno}:${column})\n`}}callstack=callstack.replace(/\s+$/,"");return callstack};var __emscripten_log_formatted=(flags,str)=>{str=UTF8ToString(str);if(flags&24){str=str.replace(/\s+$/,"");str+=(str.length>0?"\n":"")+getCallstack(flags)}if(flags&1){if(flags&4){console.error(str)}else if(flags&2){console.warn(str)}else if(flags&512){console.info(str)}else if(flags&256){console.debug(str)}else{console.log(str)}}else if(flags&6){err(str)}else{out(str)}};var 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)};var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[SAFE_HEAP_INDEX(HEAPU32,timezone>>2,"storing")]=stdTimezoneOffset*60;HEAP32[SAFE_HEAP_INDEX(HEAP32,daylight>>2,"storing")]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);assert(winterName);assert(summerName);assert(lengthBytesUTF8(winterName)<=16,`timezone name truncated to fit in TZNAME_MAX (${winterName})`);assert(lengthBytesUTF8(summerName)<=16,`timezone name truncated to fit in TZNAME_MAX (${summerName})`);if(summerOffsetperformance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[SAFE_HEAP_INDEX(HEAP64,ptime>>3,"storing")]=BigInt(nsec);return 0}var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{assert(Array.isArray(readEmAsmArgsArray));assert(buf%16==0);readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[SAFE_HEAP_INDEX(HEAPU8,sigPtr++,"loading")]){var chr=String.fromCharCode(ch);var validChars=["d","f","i","p"];validChars.push("j");assert(validChars.includes(chr),`Invalid character ${ch}("${chr}") in readEmAsmArgs! Use only [${validChars}], and do not specify "v" for void return argument.`);var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf>>2,"loading")]:ch==106?HEAP64[SAFE_HEAP_INDEX(HEAP64,buf>>3,"loading")]:ch==105?HEAP32[SAFE_HEAP_INDEX(HEAP32,buf>>2,"loading")]:HEAPF64[SAFE_HEAP_INDEX(HEAPF64,buf>>3,"loading")]);buf+=wide?8:4}return readEmAsmArgsArray};var runMainThreadEmAsm=(emAsmAddr,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(emAsmAddr),`No EM_ASM constant found at address ${emAsmAddr}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[emAsmAddr](...args)};var _emscripten_asm_const_async_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,0);var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(code),`No EM_ASM constant found at address ${code}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>{assert(alignment,"alignment argument is required");return Math.ceil(size/alignment)*alignment};var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){err(`growMemory: Attempted to grow heap from ${oldHeapSize} bytes to ${size} bytes, but got error: ${e}`)}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, requested ${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,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,__environ+envp>>2,"storing")]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[SAFE_HEAP_INDEX(HEAPU32,penviron_count>>2,"storing")]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[SAFE_HEAP_INDEX(HEAPU32,penviron_buf_size>>2,"storing")]=bufSize;return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;checkUnflushedContent();if(keepRuntimeAlive()&&!implicit){var msg=`program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`;readyPromiseReject?.(msg);err(msg)}_proc_exit(status)};var _exit=exitJS;function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2,"loading")];var len=HEAPU32[SAFE_HEAP_INDEX(HEAPU32,iov+4>>2,"loading")];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2,"storing")]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[SAFE_HEAP_INDEX(HEAP64,newOffset>>3,"storing")]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2,"loading")];var len=HEAPU32[SAFE_HEAP_INDEX(HEAPU32,iov+4>>2,"loading")];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2,"storing")]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _random_get(buffer,size){try{randomFill(HEAPU8.subarray(buffer,buffer+size));return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var getCFunc=ident=>{var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func};var writeArrayToMemory=(array,buffer)=>{assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array: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(...args)=>ccall(ident,returnType,argTypes,args,opts);FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];checkIncomingModuleAPI();if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];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");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 emscripten_set_window_title in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");assert(typeof Module["ENVIRONMENT"]=="undefined","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");assert(typeof Module["STACK_SIZE"]=="undefined","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");assert(typeof Module["wasmMemory"]=="undefined","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally");assert(typeof Module["INITIAL_MEMORY"]=="undefined","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically");if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}consumedModuleProp("preInit")}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["setValue"]=setValue;Module["getValue"]=getValue;Module["UTF8ToString"]=UTF8ToString;var missingLibrarySymbols=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","getTempRet0","setTempRet0","createNamedFunction","zeroMemory","withStackSave","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","jstoi_q","autoResumeAudioContext","getDynCaller","dynCall","handleException","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asmjsMangle","HandleAllocator","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","getFunctionAddress","addFunction","removeFunction","intArrayToString","AsciiToString","stringToAscii","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","stringToNewUTF8","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","convertPCtoSourceLocation","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=["run","out","err","callMain","abort","wasmExports","HEAPF64","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAP64","HEAPU64","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","stackSave","stackRestore","stackAlloc","ptrToString","exitJS","getHeapMax","growMemory","ENV","ERRNO_CODES","strError","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","readEmAsmArgs","runEmAsmFunction","runMainThreadEmAsm","getExecutableName","keepRuntimeAlive","asyncLoad","alignMemory","mmapAlloc","wasmTable","wasmMemory","getUniqueRunDependency","noExitRuntime","addRunDependency","removeRunDependency","addOnPreRun","addOnPostRun","freeTableIndexes","functionsInTableMap","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","intArrayFromString","UTF16Decoder","stringToUTF8OnStack","writeArrayToMemory","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","jsStackTrace","getCallstack","UNWIND_CACHE","ExitStatus","getEnvStrings","checkWasiClock","doReadv","doWritev","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar_buffer","FS_stdin_getChar","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_readFiles","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","FS_absolutePath","FS_createFolder","FS_createLink","FS_joinPath","FS_mmapAlloc","FS_standardizePath","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s"];unexportedSymbols.forEach(unexportedRuntimeSymbol);function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings")}var ASM_CONSTS={722656:($0,$1,$2,$3,$4)=>{if(typeof window==="undefined"||(window.AudioContext||window.webkitAudioContext)===undefined){return 0}if(typeof window.miniaudio==="undefined"){window.miniaudio={referenceCount:0};window.miniaudio.device_type={};window.miniaudio.device_type.playback=$0;window.miniaudio.device_type.capture=$1;window.miniaudio.device_type.duplex=$2;window.miniaudio.device_state={};window.miniaudio.device_state.stopped=$3;window.miniaudio.device_state.started=$4;let miniaudio=window.miniaudio;miniaudio.devices=[];miniaudio.track_device=function(device){for(var iDevice=0;iDevice0){if(miniaudio.devices[miniaudio.devices.length-1]==null){miniaudio.devices.pop()}else{break}}};miniaudio.untrack_device=function(device){for(var iDevice=0;iDevice{_ma_device__on_notification_unlocked(device.pDevice)},error=>{console.error("Failed to resume audiocontext",error)})}}miniaudio.unlock_event_types.map(function(event_type){document.removeEventListener(event_type,miniaudio.unlock,true)})};miniaudio.unlock_event_types.map(function(event_type){document.addEventListener(event_type,miniaudio.unlock,true)})}window.miniaudio.referenceCount+=1;return 1},724834:()=>{if(typeof window.miniaudio!=="undefined"){window.miniaudio.unlock_event_types.map(function(event_type){document.removeEventListener(event_type,window.miniaudio.unlock,true)});window.miniaudio.referenceCount-=1;if(window.miniaudio.referenceCount===0){delete window.miniaudio}}},725138:()=>navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined,725242:()=>{try{var temp=new(window.AudioContext||window.webkitAudioContext);var sampleRate=temp.sampleRate;temp.close();return sampleRate}catch(e){return 0}},725413:($0,$1,$2,$3,$4,$5)=>{var deviceType=$0;var channels=$1;var sampleRate=$2;var bufferSize=$3;var pIntermediaryBuffer=$4;var pDevice=$5;if(typeof window.miniaudio==="undefined"){return-1}var device={};var audioContextOptions={};if(deviceType==window.miniaudio.device_type.playback&&sampleRate!=0){audioContextOptions.sampleRate=sampleRate}device.webaudio=new(window.AudioContext||window.webkitAudioContext)(audioContextOptions);device.webaudio.suspend();device.state=window.miniaudio.device_state.stopped;var channelCountIn=0;var channelCountOut=channels;if(deviceType!=window.miniaudio.device_type.playback){channelCountIn=channels}device.scriptNode=device.webaudio.createScriptProcessor(bufferSize,channelCountIn,channelCountOut);device.scriptNode.onaudioprocess=function(e){if(device.intermediaryBufferView==null||device.intermediaryBufferView.length==0){device.intermediaryBufferView=new Float32Array(HEAPF32.buffer,pIntermediaryBuffer,bufferSize*channels)}if(deviceType==window.miniaudio.device_type.capture||deviceType==window.miniaudio.device_type.duplex){for(var iChannel=0;iChannelwindow.miniaudio.get_device_by_index($0).webaudio.sampleRate,728363:$0=>{var device=window.miniaudio.get_device_by_index($0);if(device.scriptNode!==undefined){device.scriptNode.onaudioprocess=function(e){};device.scriptNode.disconnect();device.scriptNode=undefined}if(device.streamNode!==undefined){device.streamNode.disconnect();device.streamNode=undefined}device.webaudio.close();device.webaudio=undefined;device.pDevice=undefined},728763:$0=>{window.miniaudio.untrack_device_by_index($0)},728813:$0=>{var device=window.miniaudio.get_device_by_index($0);device.webaudio.resume();device.state=window.miniaudio.device_state.started},728952:$0=>{var device=window.miniaudio.get_device_by_index($0);device.webaudio.suspend();device.state=window.miniaudio.device_state.stopped},729092:()=>{if(Module_soloud.wasmWorker){try{Module_soloud.wasmWorker.terminate();console.log("EM_ASM terminated existing Web Worker.")}catch(e){console.error("Failed to terminate existing worker:",e)}Module_soloud.wasmWorker=null}var workerUri="assets/packages/flutter_soloud/web/worker.dart.js";console.log("EM_ASM creating Web Worker!");try{Module_soloud.wasmWorker=new Worker(workerUri);return 1}catch(e){console.error("Failed to create worker:",e);return 0}},729587:($0,$1)=>{if(Module_soloud.wasmWorker){Module_soloud.wasmWorker.postMessage({message:UTF8ToString($0),value:$1})}else{console.error("Worker not found.")}},729753:($0,$1,$2)=>{if(Module_soloud.wasmWorker){Module_soloud.wasmWorker.postMessage({message:"mixerOutputData",offset:$0,length:$1,captureId:$2})}},729905:($0,$1)=>{var functionName="dartOnMetadataCallback_"+$1;if(typeof window[functionName]==="function"){window[functionName]($0)}else{}},730047:($0,$1,$2,$3)=>{var functionName="dartOnBufferingCallback_"+$3;if(typeof window[functionName]==="function"){var buffering=$0==1?true:false;window[functionName](buffering,$1,$2)}else{console.log("EM_ASM 'dartOnBufferingCallback_$hash' not found.")}},730311:($0,$1,$2,$3)=>{var functionName="dartOnBufferingCallback_"+$3;if(typeof window[functionName]==="function"){var buffering=$0==1?true:false;window[functionName](buffering,$1,$2)}},730500:($0,$1)=>{var functionName="dartOnMetadataCallback_"+$1;if(typeof window[functionName]==="function"){window[functionName]($0)}},730633:($0,$1)=>{var functionName="dartOnMoreDataIsNeededCallback_"+$1;if(typeof window[functionName]==="function"){window[functionName]($0)}},730774:($0,$1)=>{var functionName="dartOnAudioDurationCallback_"+$1;if(typeof window[functionName]==="function"){window[functionName]($0)}}};var _malloc=Module["_malloc"]=makeInvalidEarlyAccess("_malloc");var _free=Module["_free"]=makeInvalidEarlyAccess("_free");var _ma_device__on_notification_unlocked=Module["_ma_device__on_notification_unlocked"]=makeInvalidEarlyAccess("_ma_device__on_notification_unlocked");var _ma_malloc_emscripten=Module["_ma_malloc_emscripten"]=makeInvalidEarlyAccess("_ma_malloc_emscripten");var _ma_free_emscripten=Module["_ma_free_emscripten"]=makeInvalidEarlyAccess("_ma_free_emscripten");var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=makeInvalidEarlyAccess("_ma_device_process_pcm_frames_capture__webaudio");var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=makeInvalidEarlyAccess("_ma_device_process_pcm_frames_playback__webaudio");var _createWorkerInWasm=Module["_createWorkerInWasm"]=makeInvalidEarlyAccess("_createWorkerInWasm");var _sendToWorker=Module["_sendToWorker"]=makeInvalidEarlyAccess("_sendToWorker");var _nativeFree=Module["_nativeFree"]=makeInvalidEarlyAccess("_nativeFree");var _voiceEndedCallback=Module["_voiceEndedCallback"]=makeInvalidEarlyAccess("_voiceEndedCallback");var _setDartEventCallback=Module["_setDartEventCallback"]=makeInvalidEarlyAccess("_setDartEventCallback");var _clearDartCallbackRegistrations=Module["_clearDartCallbackRegistrations"]=makeInvalidEarlyAccess("_clearDartCallbackRegistrations");var _startMixerCapture=Module["_startMixerCapture"]=makeInvalidEarlyAccess("_startMixerCapture");var _stopMixerCapture=Module["_stopMixerCapture"]=makeInvalidEarlyAccess("_stopMixerCapture");var _isMixerCaptureRunning=Module["_isMixerCaptureRunning"]=makeInvalidEarlyAccess("_isMixerCaptureRunning");var _getMixerCaptureBufferPointer=Module["_getMixerCaptureBufferPointer"]=makeInvalidEarlyAccess("_getMixerCaptureBufferPointer");var _getMixerCaptureBufferSize=Module["_getMixerCaptureBufferSize"]=makeInvalidEarlyAccess("_getMixerCaptureBufferSize");var _getMixerCaptureAvailableBytes=Module["_getMixerCaptureAvailableBytes"]=makeInvalidEarlyAccess("_getMixerCaptureAvailableBytes");var _getMixerCaptureReadOffset=Module["_getMixerCaptureReadOffset"]=makeInvalidEarlyAccess("_getMixerCaptureReadOffset");var _advanceMixerCaptureReadPosition=Module["_advanceMixerCaptureReadPosition"]=makeInvalidEarlyAccess("_advanceMixerCaptureReadPosition");var _getMixerOutputWavHeader=Module["_getMixerOutputWavHeader"]=makeInvalidEarlyAccess("_getMixerOutputWavHeader");var _setMixerOutputCallback=Module["_setMixerOutputCallback"]=makeInvalidEarlyAccess("_setMixerOutputCallback");var _areXiphLibsAvailable=Module["_areXiphLibsAvailable"]=makeInvalidEarlyAccess("_areXiphLibsAvailable");var _initEngine=Module["_initEngine"]=makeInvalidEarlyAccess("_initEngine");var _setAndroidAAudioAttributes=Module["_setAndroidAAudioAttributes"]=makeInvalidEarlyAccess("_setAndroidAAudioAttributes");var _listPlaybackDevices=Module["_listPlaybackDevices"]=makeInvalidEarlyAccess("_listPlaybackDevices");var _changeDevice=Module["_changeDevice"]=makeInvalidEarlyAccess("_changeDevice");var _freeListPlaybackDevices=Module["_freeListPlaybackDevices"]=makeInvalidEarlyAccess("_freeListPlaybackDevices");var _dispose=Module["_dispose"]=makeInvalidEarlyAccess("_dispose");var _isInited=Module["_isInited"]=makeInvalidEarlyAccess("_isInited");var _loadFile=Module["_loadFile"]=makeInvalidEarlyAccess("_loadFile");var _loadMem=Module["_loadMem"]=makeInvalidEarlyAccess("_loadMem");var _setBufferStream=Module["_setBufferStream"]=makeInvalidEarlyAccess("_setBufferStream");var _resetBufferStream=Module["_resetBufferStream"]=makeInvalidEarlyAccess("_resetBufferStream");var _getStreamTimeConsumed=Module["_getStreamTimeConsumed"]=makeInvalidEarlyAccess("_getStreamTimeConsumed");var _setBufferIcyMetaInt=Module["_setBufferIcyMetaInt"]=makeInvalidEarlyAccess("_setBufferIcyMetaInt");var _setPullBufferStream=Module["_setPullBufferStream"]=makeInvalidEarlyAccess("_setPullBufferStream");var _resetPullBufferStream=Module["_resetPullBufferStream"]=makeInvalidEarlyAccess("_resetPullBufferStream");var _addPullBufferDataStream=Module["_addPullBufferDataStream"]=makeInvalidEarlyAccess("_addPullBufferDataStream");var _getPullBufferTimeRange=Module["_getPullBufferTimeRange"]=makeInvalidEarlyAccess("_getPullBufferTimeRange");var _addAudioDataStream=Module["_addAudioDataStream"]=makeInvalidEarlyAccess("_addAudioDataStream");var _setDataIsEnded=Module["_setDataIsEnded"]=makeInvalidEarlyAccess("_setDataIsEnded");var _getBufferSize=Module["_getBufferSize"]=makeInvalidEarlyAccess("_getBufferSize");var _loadWaveform=Module["_loadWaveform"]=makeInvalidEarlyAccess("_loadWaveform");var _setWaveformScale=Module["_setWaveformScale"]=makeInvalidEarlyAccess("_setWaveformScale");var _setWaveformDetune=Module["_setWaveformDetune"]=makeInvalidEarlyAccess("_setWaveformDetune");var _setWaveformFreq=Module["_setWaveformFreq"]=makeInvalidEarlyAccess("_setWaveformFreq");var _setSuperWave=Module["_setSuperWave"]=makeInvalidEarlyAccess("_setSuperWave");var _setWaveform=Module["_setWaveform"]=makeInvalidEarlyAccess("_setWaveform");var _speechText=Module["_speechText"]=makeInvalidEarlyAccess("_speechText");var _pauseSwitch=Module["_pauseSwitch"]=makeInvalidEarlyAccess("_pauseSwitch");var _setPause=Module["_setPause"]=makeInvalidEarlyAccess("_setPause");var _getPause=Module["_getPause"]=makeInvalidEarlyAccess("_getPause");var _setRelativePlaySpeed=Module["_setRelativePlaySpeed"]=makeInvalidEarlyAccess("_setRelativePlaySpeed");var _getRelativePlaySpeed=Module["_getRelativePlaySpeed"]=makeInvalidEarlyAccess("_getRelativePlaySpeed");var _getApproximateVolume=Module["_getApproximateVolume"]=makeInvalidEarlyAccess("_getApproximateVolume");var _play=Module["_play"]=makeInvalidEarlyAccess("_play");var _playWithLoopPoints=Module["_playWithLoopPoints"]=makeInvalidEarlyAccess("_playWithLoopPoints");var _playClocked=Module["_playClocked"]=makeInvalidEarlyAccess("_playClocked");var _setDelaySamples=Module["_setDelaySamples"]=makeInvalidEarlyAccess("_setDelaySamples");var _getStreamTime=Module["_getStreamTime"]=makeInvalidEarlyAccess("_getStreamTime");var _resetStreamTime=Module["_resetStreamTime"]=makeInvalidEarlyAccess("_resetStreamTime");var _getEngineTime=Module["_getEngineTime"]=makeInvalidEarlyAccess("_getEngineTime");var _playScheduled=Module["_playScheduled"]=makeInvalidEarlyAccess("_playScheduled");var _stopScheduled=Module["_stopScheduled"]=makeInvalidEarlyAccess("_stopScheduled");var _fadeScheduled=Module["_fadeScheduled"]=makeInvalidEarlyAccess("_fadeScheduled");var _stop=Module["_stop"]=makeInvalidEarlyAccess("_stop");var _disposeSound=Module["_disposeSound"]=makeInvalidEarlyAccess("_disposeSound");var _disposeAllSound=Module["_disposeAllSound"]=makeInvalidEarlyAccess("_disposeAllSound");var _getLooping=Module["_getLooping"]=makeInvalidEarlyAccess("_getLooping");var _setLooping=Module["_setLooping"]=makeInvalidEarlyAccess("_setLooping");var _getLoopPoint=Module["_getLoopPoint"]=makeInvalidEarlyAccess("_getLoopPoint");var _setLoopPoint=Module["_setLoopPoint"]=makeInvalidEarlyAccess("_setLoopPoint");var _getLoopEndPoint=Module["_getLoopEndPoint"]=makeInvalidEarlyAccess("_getLoopEndPoint");var _setLoopEndPoint=Module["_setLoopEndPoint"]=makeInvalidEarlyAccess("_setLoopEndPoint");var _setVisualizationEnabled=Module["_setVisualizationEnabled"]=makeInvalidEarlyAccess("_setVisualizationEnabled");var _getVisualizationEnabled=Module["_getVisualizationEnabled"]=makeInvalidEarlyAccess("_getVisualizationEnabled");var _getFft=Module["_getFft"]=makeInvalidEarlyAccess("_getFft");var _getWave=Module["_getWave"]=makeInvalidEarlyAccess("_getWave");var _setFftSmoothing=Module["_setFftSmoothing"]=makeInvalidEarlyAccess("_setFftSmoothing");var _getAudioTexture=Module["_getAudioTexture"]=makeInvalidEarlyAccess("_getAudioTexture");var _getAudioTexture2D=Module["_getAudioTexture2D"]=makeInvalidEarlyAccess("_getAudioTexture2D");var _getTextureValue=Module["_getTextureValue"]=makeInvalidEarlyAccess("_getTextureValue");var _getLength=Module["_getLength"]=makeInvalidEarlyAccess("_getLength");var _seek=Module["_seek"]=makeInvalidEarlyAccess("_seek");var _getPosition=Module["_getPosition"]=makeInvalidEarlyAccess("_getPosition");var _getGlobalVolume=Module["_getGlobalVolume"]=makeInvalidEarlyAccess("_getGlobalVolume");var _setGlobalVolume=Module["_setGlobalVolume"]=makeInvalidEarlyAccess("_setGlobalVolume");var _getVolume=Module["_getVolume"]=makeInvalidEarlyAccess("_getVolume");var _setVolume=Module["_setVolume"]=makeInvalidEarlyAccess("_setVolume");var _getPan=Module["_getPan"]=makeInvalidEarlyAccess("_getPan");var _setPan=Module["_setPan"]=makeInvalidEarlyAccess("_setPan");var _setPanAbsolute=Module["_setPanAbsolute"]=makeInvalidEarlyAccess("_setPanAbsolute");var _getIsValidVoiceHandle=Module["_getIsValidVoiceHandle"]=makeInvalidEarlyAccess("_getIsValidVoiceHandle");var _getActiveVoiceCount=Module["_getActiveVoiceCount"]=makeInvalidEarlyAccess("_getActiveVoiceCount");var _countAudioSource=Module["_countAudioSource"]=makeInvalidEarlyAccess("_countAudioSource");var _getVoiceCount=Module["_getVoiceCount"]=makeInvalidEarlyAccess("_getVoiceCount");var _getProtectVoice=Module["_getProtectVoice"]=makeInvalidEarlyAccess("_getProtectVoice");var _setProtectVoice=Module["_setProtectVoice"]=makeInvalidEarlyAccess("_setProtectVoice");var _setInaudibleBehavior=Module["_setInaudibleBehavior"]=makeInvalidEarlyAccess("_setInaudibleBehavior");var _getMaxActiveVoiceCount=Module["_getMaxActiveVoiceCount"]=makeInvalidEarlyAccess("_getMaxActiveVoiceCount");var _setMaxActiveVoiceCount=Module["_setMaxActiveVoiceCount"]=makeInvalidEarlyAccess("_setMaxActiveVoiceCount");var _createVoiceGroup=Module["_createVoiceGroup"]=makeInvalidEarlyAccess("_createVoiceGroup");var _destroyVoiceGroup=Module["_destroyVoiceGroup"]=makeInvalidEarlyAccess("_destroyVoiceGroup");var _addVoiceToGroup=Module["_addVoiceToGroup"]=makeInvalidEarlyAccess("_addVoiceToGroup");var _isVoiceGroup=Module["_isVoiceGroup"]=makeInvalidEarlyAccess("_isVoiceGroup");var _isVoiceGroupEmpty=Module["_isVoiceGroupEmpty"]=makeInvalidEarlyAccess("_isVoiceGroupEmpty");var _fadeGlobalVolume=Module["_fadeGlobalVolume"]=makeInvalidEarlyAccess("_fadeGlobalVolume");var _fadeVolume=Module["_fadeVolume"]=makeInvalidEarlyAccess("_fadeVolume");var _fadePan=Module["_fadePan"]=makeInvalidEarlyAccess("_fadePan");var _fadeRelativePlaySpeed=Module["_fadeRelativePlaySpeed"]=makeInvalidEarlyAccess("_fadeRelativePlaySpeed");var _schedulePause=Module["_schedulePause"]=makeInvalidEarlyAccess("_schedulePause");var _scheduleStop=Module["_scheduleStop"]=makeInvalidEarlyAccess("_scheduleStop");var _oscillateVolume=Module["_oscillateVolume"]=makeInvalidEarlyAccess("_oscillateVolume");var _oscillatePan=Module["_oscillatePan"]=makeInvalidEarlyAccess("_oscillatePan");var _oscillateRelativePlaySpeed=Module["_oscillateRelativePlaySpeed"]=makeInvalidEarlyAccess("_oscillateRelativePlaySpeed");var _oscillateGlobalVolume=Module["_oscillateGlobalVolume"]=makeInvalidEarlyAccess("_oscillateGlobalVolume");var _isFilterActive=Module["_isFilterActive"]=makeInvalidEarlyAccess("_isFilterActive");var _getFilterParamNames=Module["_getFilterParamNames"]=makeInvalidEarlyAccess("_getFilterParamNames");var _addFilter=Module["_addFilter"]=makeInvalidEarlyAccess("_addFilter");var _removeFilter=Module["_removeFilter"]=makeInvalidEarlyAccess("_removeFilter");var _setFilterParams=Module["_setFilterParams"]=makeInvalidEarlyAccess("_setFilterParams");var _getFilterParams=Module["_getFilterParams"]=makeInvalidEarlyAccess("_getFilterParams");var _fadeFilterParameter=Module["_fadeFilterParameter"]=makeInvalidEarlyAccess("_fadeFilterParameter");var _oscillateFilterParameter=Module["_oscillateFilterParameter"]=makeInvalidEarlyAccess("_oscillateFilterParameter");var _play3d=Module["_play3d"]=makeInvalidEarlyAccess("_play3d");var _play3dWithLoopPoints=Module["_play3dWithLoopPoints"]=makeInvalidEarlyAccess("_play3dWithLoopPoints");var _play3dClocked=Module["_play3dClocked"]=makeInvalidEarlyAccess("_play3dClocked");var _set3dSoundSpeed=Module["_set3dSoundSpeed"]=makeInvalidEarlyAccess("_set3dSoundSpeed");var _get3dSoundSpeed=Module["_get3dSoundSpeed"]=makeInvalidEarlyAccess("_get3dSoundSpeed");var _set3dListenerParameters=Module["_set3dListenerParameters"]=makeInvalidEarlyAccess("_set3dListenerParameters");var _set3dListenerPosition=Module["_set3dListenerPosition"]=makeInvalidEarlyAccess("_set3dListenerPosition");var _set3dListenerAt=Module["_set3dListenerAt"]=makeInvalidEarlyAccess("_set3dListenerAt");var _set3dListenerUp=Module["_set3dListenerUp"]=makeInvalidEarlyAccess("_set3dListenerUp");var _set3dListenerVelocity=Module["_set3dListenerVelocity"]=makeInvalidEarlyAccess("_set3dListenerVelocity");var _set3dSourceParameters=Module["_set3dSourceParameters"]=makeInvalidEarlyAccess("_set3dSourceParameters");var _set3dSourcePosition=Module["_set3dSourcePosition"]=makeInvalidEarlyAccess("_set3dSourcePosition");var _set3dSourceVelocity=Module["_set3dSourceVelocity"]=makeInvalidEarlyAccess("_set3dSourceVelocity");var _set3dSourceMinMaxDistance=Module["_set3dSourceMinMaxDistance"]=makeInvalidEarlyAccess("_set3dSourceMinMaxDistance");var _set3dSourceAttenuation=Module["_set3dSourceAttenuation"]=makeInvalidEarlyAccess("_set3dSourceAttenuation");var _set3dSourceDopplerFactor=Module["_set3dSourceDopplerFactor"]=makeInvalidEarlyAccess("_set3dSourceDopplerFactor");var _readSamplesFromFile=Module["_readSamplesFromFile"]=makeInvalidEarlyAccess("_readSamplesFromFile");var _readSamplesFromMem=Module["_readSamplesFromMem"]=makeInvalidEarlyAccess("_readSamplesFromMem");var _createBus=Module["_createBus"]=makeInvalidEarlyAccess("_createBus");var _destroyBus=Module["_destroyBus"]=makeInvalidEarlyAccess("_destroyBus");var _busPlayOnEngine=Module["_busPlayOnEngine"]=makeInvalidEarlyAccess("_busPlayOnEngine");var _busSetChannels=Module["_busSetChannels"]=makeInvalidEarlyAccess("_busSetChannels");var _busSetVisualizationEnable=Module["_busSetVisualizationEnable"]=makeInvalidEarlyAccess("_busSetVisualizationEnable");var _busCalcFFT=Module["_busCalcFFT"]=makeInvalidEarlyAccess("_busCalcFFT");var _busGetWave=Module["_busGetWave"]=makeInvalidEarlyAccess("_busGetWave");var _busGetApproximateVolume=Module["_busGetApproximateVolume"]=makeInvalidEarlyAccess("_busGetApproximateVolume");var _busAnnexSound=Module["_busAnnexSound"]=makeInvalidEarlyAccess("_busAnnexSound");var _busGetActiveVoiceCount=Module["_busGetActiveVoiceCount"]=makeInvalidEarlyAccess("_busGetActiveVoiceCount");var _memcpy=Module["_memcpy"]=makeInvalidEarlyAccess("_memcpy");var _memset=Module["_memset"]=makeInvalidEarlyAccess("_memset");var _fflush=makeInvalidEarlyAccess("_fflush");var _strerror=makeInvalidEarlyAccess("_strerror");var _emscripten_stack_get_end=makeInvalidEarlyAccess("_emscripten_stack_get_end");var _emscripten_stack_get_base=makeInvalidEarlyAccess("_emscripten_stack_get_base");var _sbrk=makeInvalidEarlyAccess("_sbrk");var _emscripten_get_sbrk_ptr=makeInvalidEarlyAccess("_emscripten_get_sbrk_ptr");var _emscripten_stack_init=makeInvalidEarlyAccess("_emscripten_stack_init");var _emscripten_stack_get_free=makeInvalidEarlyAccess("_emscripten_stack_get_free");var __emscripten_stack_restore=makeInvalidEarlyAccess("__emscripten_stack_restore");var __emscripten_stack_alloc=makeInvalidEarlyAccess("__emscripten_stack_alloc");var _emscripten_stack_get_current=makeInvalidEarlyAccess("_emscripten_stack_get_current");var memory=makeInvalidEarlyAccess("memory");var __indirect_function_table=makeInvalidEarlyAccess("__indirect_function_table");var wasmMemory=makeInvalidEarlyAccess("wasmMemory");function assignWasmExports(wasmExports){assert(typeof wasmExports["malloc"]!="undefined","missing Wasm export: malloc");assert(typeof wasmExports["free"]!="undefined","missing Wasm export: free");assert(typeof wasmExports["ma_device__on_notification_unlocked"]!="undefined","missing Wasm export: ma_device__on_notification_unlocked");assert(typeof wasmExports["ma_malloc_emscripten"]!="undefined","missing Wasm export: ma_malloc_emscripten");assert(typeof wasmExports["ma_free_emscripten"]!="undefined","missing Wasm export: ma_free_emscripten");assert(typeof wasmExports["ma_device_process_pcm_frames_capture__webaudio"]!="undefined","missing Wasm export: ma_device_process_pcm_frames_capture__webaudio");assert(typeof wasmExports["ma_device_process_pcm_frames_playback__webaudio"]!="undefined","missing Wasm export: ma_device_process_pcm_frames_playback__webaudio");assert(typeof wasmExports["createWorkerInWasm"]!="undefined","missing Wasm export: createWorkerInWasm");assert(typeof wasmExports["sendToWorker"]!="undefined","missing Wasm export: sendToWorker");assert(typeof wasmExports["nativeFree"]!="undefined","missing Wasm export: nativeFree");assert(typeof wasmExports["voiceEndedCallback"]!="undefined","missing Wasm export: voiceEndedCallback");assert(typeof wasmExports["setDartEventCallback"]!="undefined","missing Wasm export: setDartEventCallback");assert(typeof wasmExports["clearDartCallbackRegistrations"]!="undefined","missing Wasm export: clearDartCallbackRegistrations");assert(typeof wasmExports["startMixerCapture"]!="undefined","missing Wasm export: startMixerCapture");assert(typeof wasmExports["stopMixerCapture"]!="undefined","missing Wasm export: stopMixerCapture");assert(typeof wasmExports["isMixerCaptureRunning"]!="undefined","missing Wasm export: isMixerCaptureRunning");assert(typeof wasmExports["getMixerCaptureBufferPointer"]!="undefined","missing Wasm export: getMixerCaptureBufferPointer");assert(typeof wasmExports["getMixerCaptureBufferSize"]!="undefined","missing Wasm export: getMixerCaptureBufferSize");assert(typeof wasmExports["getMixerCaptureAvailableBytes"]!="undefined","missing Wasm export: getMixerCaptureAvailableBytes");assert(typeof wasmExports["getMixerCaptureReadOffset"]!="undefined","missing Wasm export: getMixerCaptureReadOffset");assert(typeof wasmExports["advanceMixerCaptureReadPosition"]!="undefined","missing Wasm export: advanceMixerCaptureReadPosition");assert(typeof wasmExports["getMixerOutputWavHeader"]!="undefined","missing Wasm export: getMixerOutputWavHeader");assert(typeof wasmExports["setMixerOutputCallback"]!="undefined","missing Wasm export: setMixerOutputCallback");assert(typeof wasmExports["areXiphLibsAvailable"]!="undefined","missing Wasm export: areXiphLibsAvailable");assert(typeof wasmExports["initEngine"]!="undefined","missing Wasm export: initEngine");assert(typeof wasmExports["setAndroidAAudioAttributes"]!="undefined","missing Wasm export: setAndroidAAudioAttributes");assert(typeof wasmExports["listPlaybackDevices"]!="undefined","missing Wasm export: listPlaybackDevices");assert(typeof wasmExports["changeDevice"]!="undefined","missing Wasm export: changeDevice");assert(typeof wasmExports["freeListPlaybackDevices"]!="undefined","missing Wasm export: freeListPlaybackDevices");assert(typeof wasmExports["dispose"]!="undefined","missing Wasm export: dispose");assert(typeof wasmExports["isInited"]!="undefined","missing Wasm export: isInited");assert(typeof wasmExports["loadFile"]!="undefined","missing Wasm export: loadFile");assert(typeof wasmExports["loadMem"]!="undefined","missing Wasm export: loadMem");assert(typeof wasmExports["setBufferStream"]!="undefined","missing Wasm export: setBufferStream");assert(typeof wasmExports["resetBufferStream"]!="undefined","missing Wasm export: resetBufferStream");assert(typeof wasmExports["getStreamTimeConsumed"]!="undefined","missing Wasm export: getStreamTimeConsumed");assert(typeof wasmExports["setBufferIcyMetaInt"]!="undefined","missing Wasm export: setBufferIcyMetaInt");assert(typeof wasmExports["setPullBufferStream"]!="undefined","missing Wasm export: setPullBufferStream");assert(typeof wasmExports["resetPullBufferStream"]!="undefined","missing Wasm export: resetPullBufferStream");assert(typeof wasmExports["addPullBufferDataStream"]!="undefined","missing Wasm export: addPullBufferDataStream");assert(typeof wasmExports["getPullBufferTimeRange"]!="undefined","missing Wasm export: getPullBufferTimeRange");assert(typeof wasmExports["addAudioDataStream"]!="undefined","missing Wasm export: addAudioDataStream");assert(typeof wasmExports["setDataIsEnded"]!="undefined","missing Wasm export: setDataIsEnded");assert(typeof wasmExports["getBufferSize"]!="undefined","missing Wasm export: getBufferSize");assert(typeof wasmExports["loadWaveform"]!="undefined","missing Wasm export: loadWaveform");assert(typeof wasmExports["setWaveformScale"]!="undefined","missing Wasm export: setWaveformScale");assert(typeof wasmExports["setWaveformDetune"]!="undefined","missing Wasm export: setWaveformDetune");assert(typeof wasmExports["setWaveformFreq"]!="undefined","missing Wasm export: setWaveformFreq");assert(typeof wasmExports["setSuperWave"]!="undefined","missing Wasm export: setSuperWave");assert(typeof wasmExports["setWaveform"]!="undefined","missing Wasm export: setWaveform");assert(typeof wasmExports["speechText"]!="undefined","missing Wasm export: speechText");assert(typeof wasmExports["pauseSwitch"]!="undefined","missing Wasm export: pauseSwitch");assert(typeof wasmExports["setPause"]!="undefined","missing Wasm export: setPause");assert(typeof wasmExports["getPause"]!="undefined","missing Wasm export: getPause");assert(typeof wasmExports["setRelativePlaySpeed"]!="undefined","missing Wasm export: setRelativePlaySpeed");assert(typeof wasmExports["getRelativePlaySpeed"]!="undefined","missing Wasm export: getRelativePlaySpeed");assert(typeof wasmExports["getApproximateVolume"]!="undefined","missing Wasm export: getApproximateVolume");assert(typeof wasmExports["play"]!="undefined","missing Wasm export: play");assert(typeof wasmExports["playWithLoopPoints"]!="undefined","missing Wasm export: playWithLoopPoints");assert(typeof wasmExports["playClocked"]!="undefined","missing Wasm export: playClocked");assert(typeof wasmExports["setDelaySamples"]!="undefined","missing Wasm export: setDelaySamples");assert(typeof wasmExports["getStreamTime"]!="undefined","missing Wasm export: getStreamTime");assert(typeof wasmExports["resetStreamTime"]!="undefined","missing Wasm export: resetStreamTime");assert(typeof wasmExports["getEngineTime"]!="undefined","missing Wasm export: getEngineTime");assert(typeof wasmExports["playScheduled"]!="undefined","missing Wasm export: playScheduled");assert(typeof wasmExports["stopScheduled"]!="undefined","missing Wasm export: stopScheduled");assert(typeof wasmExports["fadeScheduled"]!="undefined","missing Wasm export: fadeScheduled");assert(typeof wasmExports["stop"]!="undefined","missing Wasm export: stop");assert(typeof wasmExports["disposeSound"]!="undefined","missing Wasm export: disposeSound");assert(typeof wasmExports["disposeAllSound"]!="undefined","missing Wasm export: disposeAllSound");assert(typeof wasmExports["getLooping"]!="undefined","missing Wasm export: getLooping");assert(typeof wasmExports["setLooping"]!="undefined","missing Wasm export: setLooping");assert(typeof wasmExports["getLoopPoint"]!="undefined","missing Wasm export: getLoopPoint");assert(typeof wasmExports["setLoopPoint"]!="undefined","missing Wasm export: setLoopPoint");assert(typeof wasmExports["getLoopEndPoint"]!="undefined","missing Wasm export: getLoopEndPoint");assert(typeof wasmExports["setLoopEndPoint"]!="undefined","missing Wasm export: setLoopEndPoint");assert(typeof wasmExports["setVisualizationEnabled"]!="undefined","missing Wasm export: setVisualizationEnabled");assert(typeof wasmExports["getVisualizationEnabled"]!="undefined","missing Wasm export: getVisualizationEnabled");assert(typeof wasmExports["getFft"]!="undefined","missing Wasm export: getFft");assert(typeof wasmExports["getWave"]!="undefined","missing Wasm export: getWave");assert(typeof wasmExports["setFftSmoothing"]!="undefined","missing Wasm export: setFftSmoothing");assert(typeof wasmExports["getAudioTexture"]!="undefined","missing Wasm export: getAudioTexture");assert(typeof wasmExports["getAudioTexture2D"]!="undefined","missing Wasm export: getAudioTexture2D");assert(typeof wasmExports["getTextureValue"]!="undefined","missing Wasm export: getTextureValue");assert(typeof wasmExports["getLength"]!="undefined","missing Wasm export: getLength");assert(typeof wasmExports["seek"]!="undefined","missing Wasm export: seek");assert(typeof wasmExports["getPosition"]!="undefined","missing Wasm export: getPosition");assert(typeof wasmExports["getGlobalVolume"]!="undefined","missing Wasm export: getGlobalVolume");assert(typeof wasmExports["setGlobalVolume"]!="undefined","missing Wasm export: setGlobalVolume");assert(typeof wasmExports["getVolume"]!="undefined","missing Wasm export: getVolume");assert(typeof wasmExports["setVolume"]!="undefined","missing Wasm export: setVolume");assert(typeof wasmExports["getPan"]!="undefined","missing Wasm export: getPan");assert(typeof wasmExports["setPan"]!="undefined","missing Wasm export: setPan");assert(typeof wasmExports["setPanAbsolute"]!="undefined","missing Wasm export: setPanAbsolute");assert(typeof wasmExports["getIsValidVoiceHandle"]!="undefined","missing Wasm export: getIsValidVoiceHandle");assert(typeof wasmExports["getActiveVoiceCount"]!="undefined","missing Wasm export: getActiveVoiceCount");assert(typeof wasmExports["countAudioSource"]!="undefined","missing Wasm export: countAudioSource");assert(typeof wasmExports["getVoiceCount"]!="undefined","missing Wasm export: getVoiceCount");assert(typeof wasmExports["getProtectVoice"]!="undefined","missing Wasm export: getProtectVoice");assert(typeof wasmExports["setProtectVoice"]!="undefined","missing Wasm export: setProtectVoice");assert(typeof wasmExports["setInaudibleBehavior"]!="undefined","missing Wasm export: setInaudibleBehavior");assert(typeof wasmExports["getMaxActiveVoiceCount"]!="undefined","missing Wasm export: getMaxActiveVoiceCount");assert(typeof wasmExports["setMaxActiveVoiceCount"]!="undefined","missing Wasm export: setMaxActiveVoiceCount");assert(typeof wasmExports["createVoiceGroup"]!="undefined","missing Wasm export: createVoiceGroup");assert(typeof wasmExports["destroyVoiceGroup"]!="undefined","missing Wasm export: destroyVoiceGroup");assert(typeof wasmExports["addVoiceToGroup"]!="undefined","missing Wasm export: addVoiceToGroup");assert(typeof wasmExports["isVoiceGroup"]!="undefined","missing Wasm export: isVoiceGroup");assert(typeof wasmExports["isVoiceGroupEmpty"]!="undefined","missing Wasm export: isVoiceGroupEmpty");assert(typeof wasmExports["fadeGlobalVolume"]!="undefined","missing Wasm export: fadeGlobalVolume");assert(typeof wasmExports["fadeVolume"]!="undefined","missing Wasm export: fadeVolume");assert(typeof wasmExports["fadePan"]!="undefined","missing Wasm export: fadePan");assert(typeof wasmExports["fadeRelativePlaySpeed"]!="undefined","missing Wasm export: fadeRelativePlaySpeed");assert(typeof wasmExports["schedulePause"]!="undefined","missing Wasm export: schedulePause");assert(typeof wasmExports["scheduleStop"]!="undefined","missing Wasm export: scheduleStop");assert(typeof wasmExports["oscillateVolume"]!="undefined","missing Wasm export: oscillateVolume");assert(typeof wasmExports["oscillatePan"]!="undefined","missing Wasm export: oscillatePan");assert(typeof wasmExports["oscillateRelativePlaySpeed"]!="undefined","missing Wasm export: oscillateRelativePlaySpeed");assert(typeof wasmExports["oscillateGlobalVolume"]!="undefined","missing Wasm export: oscillateGlobalVolume");assert(typeof wasmExports["isFilterActive"]!="undefined","missing Wasm export: isFilterActive");assert(typeof wasmExports["getFilterParamNames"]!="undefined","missing Wasm export: getFilterParamNames");assert(typeof wasmExports["addFilter"]!="undefined","missing Wasm export: addFilter");assert(typeof wasmExports["removeFilter"]!="undefined","missing Wasm export: removeFilter");assert(typeof wasmExports["setFilterParams"]!="undefined","missing Wasm export: setFilterParams");assert(typeof wasmExports["getFilterParams"]!="undefined","missing Wasm export: getFilterParams");assert(typeof wasmExports["fadeFilterParameter"]!="undefined","missing Wasm export: fadeFilterParameter");assert(typeof wasmExports["oscillateFilterParameter"]!="undefined","missing Wasm export: oscillateFilterParameter");assert(typeof wasmExports["play3d"]!="undefined","missing Wasm export: play3d");assert(typeof wasmExports["play3dWithLoopPoints"]!="undefined","missing Wasm export: play3dWithLoopPoints");assert(typeof wasmExports["play3dClocked"]!="undefined","missing Wasm export: play3dClocked");assert(typeof wasmExports["set3dSoundSpeed"]!="undefined","missing Wasm export: set3dSoundSpeed");assert(typeof wasmExports["get3dSoundSpeed"]!="undefined","missing Wasm export: get3dSoundSpeed");assert(typeof wasmExports["set3dListenerParameters"]!="undefined","missing Wasm export: set3dListenerParameters");assert(typeof wasmExports["set3dListenerPosition"]!="undefined","missing Wasm export: set3dListenerPosition");assert(typeof wasmExports["set3dListenerAt"]!="undefined","missing Wasm export: set3dListenerAt");assert(typeof wasmExports["set3dListenerUp"]!="undefined","missing Wasm export: set3dListenerUp");assert(typeof wasmExports["set3dListenerVelocity"]!="undefined","missing Wasm export: set3dListenerVelocity");assert(typeof wasmExports["set3dSourceParameters"]!="undefined","missing Wasm export: set3dSourceParameters");assert(typeof wasmExports["set3dSourcePosition"]!="undefined","missing Wasm export: set3dSourcePosition");assert(typeof wasmExports["set3dSourceVelocity"]!="undefined","missing Wasm export: set3dSourceVelocity");assert(typeof wasmExports["set3dSourceMinMaxDistance"]!="undefined","missing Wasm export: set3dSourceMinMaxDistance");assert(typeof wasmExports["set3dSourceAttenuation"]!="undefined","missing Wasm export: set3dSourceAttenuation");assert(typeof wasmExports["set3dSourceDopplerFactor"]!="undefined","missing Wasm export: set3dSourceDopplerFactor");assert(typeof wasmExports["readSamplesFromFile"]!="undefined","missing Wasm export: readSamplesFromFile");assert(typeof wasmExports["readSamplesFromMem"]!="undefined","missing Wasm export: readSamplesFromMem");assert(typeof wasmExports["createBus"]!="undefined","missing Wasm export: createBus");assert(typeof wasmExports["destroyBus"]!="undefined","missing Wasm export: destroyBus");assert(typeof wasmExports["busPlayOnEngine"]!="undefined","missing Wasm export: busPlayOnEngine");assert(typeof wasmExports["busSetChannels"]!="undefined","missing Wasm export: busSetChannels");assert(typeof wasmExports["busSetVisualizationEnable"]!="undefined","missing Wasm export: busSetVisualizationEnable");assert(typeof wasmExports["busCalcFFT"]!="undefined","missing Wasm export: busCalcFFT");assert(typeof wasmExports["busGetWave"]!="undefined","missing Wasm export: busGetWave");assert(typeof wasmExports["busGetApproximateVolume"]!="undefined","missing Wasm export: busGetApproximateVolume");assert(typeof wasmExports["busAnnexSound"]!="undefined","missing Wasm export: busAnnexSound");assert(typeof wasmExports["busGetActiveVoiceCount"]!="undefined","missing Wasm export: busGetActiveVoiceCount");assert(typeof wasmExports["memcpy"]!="undefined","missing Wasm export: memcpy");assert(typeof wasmExports["memset"]!="undefined","missing Wasm export: memset");assert(typeof wasmExports["fflush"]!="undefined","missing Wasm export: fflush");assert(typeof wasmExports["strerror"]!="undefined","missing Wasm export: strerror");assert(typeof wasmExports["emscripten_stack_get_end"]!="undefined","missing Wasm export: emscripten_stack_get_end");assert(typeof wasmExports["emscripten_stack_get_base"]!="undefined","missing Wasm export: emscripten_stack_get_base");assert(typeof wasmExports["sbrk"]!="undefined","missing Wasm export: sbrk");assert(typeof wasmExports["emscripten_get_sbrk_ptr"]!="undefined","missing Wasm export: emscripten_get_sbrk_ptr");assert(typeof wasmExports["emscripten_stack_init"]!="undefined","missing Wasm export: emscripten_stack_init");assert(typeof wasmExports["emscripten_stack_get_free"]!="undefined","missing Wasm export: emscripten_stack_get_free");assert(typeof wasmExports["_emscripten_stack_restore"]!="undefined","missing Wasm export: _emscripten_stack_restore");assert(typeof wasmExports["_emscripten_stack_alloc"]!="undefined","missing Wasm export: _emscripten_stack_alloc");assert(typeof wasmExports["emscripten_stack_get_current"]!="undefined","missing Wasm export: emscripten_stack_get_current");assert(typeof wasmExports["memory"]!="undefined","missing Wasm export: memory");assert(typeof wasmExports["__indirect_function_table"]!="undefined","missing Wasm export: __indirect_function_table");_malloc=Module["_malloc"]=createExportWrapper("malloc",1);_free=Module["_free"]=createExportWrapper("free",1);_ma_device__on_notification_unlocked=Module["_ma_device__on_notification_unlocked"]=createExportWrapper("ma_device__on_notification_unlocked",1);_ma_malloc_emscripten=Module["_ma_malloc_emscripten"]=createExportWrapper("ma_malloc_emscripten",2);_ma_free_emscripten=Module["_ma_free_emscripten"]=createExportWrapper("ma_free_emscripten",2);_ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=createExportWrapper("ma_device_process_pcm_frames_capture__webaudio",3);_ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=createExportWrapper("ma_device_process_pcm_frames_playback__webaudio",3);_createWorkerInWasm=Module["_createWorkerInWasm"]=createExportWrapper("createWorkerInWasm",0);_sendToWorker=Module["_sendToWorker"]=createExportWrapper("sendToWorker",2);_nativeFree=Module["_nativeFree"]=createExportWrapper("nativeFree",1);_voiceEndedCallback=Module["_voiceEndedCallback"]=createExportWrapper("voiceEndedCallback",1);_setDartEventCallback=Module["_setDartEventCallback"]=createExportWrapper("setDartEventCallback",3);_clearDartCallbackRegistrations=Module["_clearDartCallbackRegistrations"]=createExportWrapper("clearDartCallbackRegistrations",0);_startMixerCapture=Module["_startMixerCapture"]=createExportWrapper("startMixerCapture",6);_stopMixerCapture=Module["_stopMixerCapture"]=createExportWrapper("stopMixerCapture",0);_isMixerCaptureRunning=Module["_isMixerCaptureRunning"]=createExportWrapper("isMixerCaptureRunning",0);_getMixerCaptureBufferPointer=Module["_getMixerCaptureBufferPointer"]=createExportWrapper("getMixerCaptureBufferPointer",0);_getMixerCaptureBufferSize=Module["_getMixerCaptureBufferSize"]=createExportWrapper("getMixerCaptureBufferSize",0);_getMixerCaptureAvailableBytes=Module["_getMixerCaptureAvailableBytes"]=createExportWrapper("getMixerCaptureAvailableBytes",0);_getMixerCaptureReadOffset=Module["_getMixerCaptureReadOffset"]=createExportWrapper("getMixerCaptureReadOffset",0);_advanceMixerCaptureReadPosition=Module["_advanceMixerCaptureReadPosition"]=createExportWrapper("advanceMixerCaptureReadPosition",1);_getMixerOutputWavHeader=Module["_getMixerOutputWavHeader"]=createExportWrapper("getMixerOutputWavHeader",0);_setMixerOutputCallback=Module["_setMixerOutputCallback"]=createExportWrapper("setMixerOutputCallback",1);_areXiphLibsAvailable=Module["_areXiphLibsAvailable"]=createExportWrapper("areXiphLibsAvailable",0);_initEngine=Module["_initEngine"]=createExportWrapper("initEngine",5);_setAndroidAAudioAttributes=Module["_setAndroidAAudioAttributes"]=createExportWrapper("setAndroidAAudioAttributes",1);_listPlaybackDevices=Module["_listPlaybackDevices"]=createExportWrapper("listPlaybackDevices",4);_changeDevice=Module["_changeDevice"]=createExportWrapper("changeDevice",1);_freeListPlaybackDevices=Module["_freeListPlaybackDevices"]=createExportWrapper("freeListPlaybackDevices",4);_dispose=Module["_dispose"]=createExportWrapper("dispose",0);_isInited=Module["_isInited"]=createExportWrapper("isInited",0);_loadFile=Module["_loadFile"]=createExportWrapper("loadFile",3);_loadMem=Module["_loadMem"]=createExportWrapper("loadMem",5);_setBufferStream=Module["_setBufferStream"]=createExportWrapper("setBufferStream",9);_resetBufferStream=Module["_resetBufferStream"]=createExportWrapper("resetBufferStream",1);_getStreamTimeConsumed=Module["_getStreamTimeConsumed"]=createExportWrapper("getStreamTimeConsumed",2);_setBufferIcyMetaInt=Module["_setBufferIcyMetaInt"]=createExportWrapper("setBufferIcyMetaInt",2);_setPullBufferStream=Module["_setPullBufferStream"]=createExportWrapper("setPullBufferStream",11);_resetPullBufferStream=Module["_resetPullBufferStream"]=createExportWrapper("resetPullBufferStream",1);_addPullBufferDataStream=Module["_addPullBufferDataStream"]=createExportWrapper("addPullBufferDataStream",4);_getPullBufferTimeRange=Module["_getPullBufferTimeRange"]=createExportWrapper("getPullBufferTimeRange",3);_addAudioDataStream=Module["_addAudioDataStream"]=createExportWrapper("addAudioDataStream",3);_setDataIsEnded=Module["_setDataIsEnded"]=createExportWrapper("setDataIsEnded",1);_getBufferSize=Module["_getBufferSize"]=createExportWrapper("getBufferSize",2);_loadWaveform=Module["_loadWaveform"]=createExportWrapper("loadWaveform",5);_setWaveformScale=Module["_setWaveformScale"]=createExportWrapper("setWaveformScale",2);_setWaveformDetune=Module["_setWaveformDetune"]=createExportWrapper("setWaveformDetune",2);_setWaveformFreq=Module["_setWaveformFreq"]=createExportWrapper("setWaveformFreq",2);_setSuperWave=Module["_setSuperWave"]=createExportWrapper("setSuperWave",2);_setWaveform=Module["_setWaveform"]=createExportWrapper("setWaveform",2);_speechText=Module["_speechText"]=createExportWrapper("speechText",2);_pauseSwitch=Module["_pauseSwitch"]=createExportWrapper("pauseSwitch",1);_setPause=Module["_setPause"]=createExportWrapper("setPause",2);_getPause=Module["_getPause"]=createExportWrapper("getPause",1);_setRelativePlaySpeed=Module["_setRelativePlaySpeed"]=createExportWrapper("setRelativePlaySpeed",2);_getRelativePlaySpeed=Module["_getRelativePlaySpeed"]=createExportWrapper("getRelativePlaySpeed",1);_getApproximateVolume=Module["_getApproximateVolume"]=createExportWrapper("getApproximateVolume",1);_play=Module["_play"]=createExportWrapper("play",8);_playWithLoopPoints=Module["_playWithLoopPoints"]=createExportWrapper("playWithLoopPoints",9);_playClocked=Module["_playClocked"]=createExportWrapper("playClocked",6);_setDelaySamples=Module["_setDelaySamples"]=createExportWrapper("setDelaySamples",2);_getStreamTime=Module["_getStreamTime"]=createExportWrapper("getStreamTime",1);_resetStreamTime=Module["_resetStreamTime"]=createExportWrapper("resetStreamTime",0);_getEngineTime=Module["_getEngineTime"]=createExportWrapper("getEngineTime",0);_playScheduled=Module["_playScheduled"]=createExportWrapper("playScheduled",7);_stopScheduled=Module["_stopScheduled"]=createExportWrapper("stopScheduled",2);_fadeScheduled=Module["_fadeScheduled"]=createExportWrapper("fadeScheduled",5);_stop=Module["_stop"]=createExportWrapper("stop",1);_disposeSound=Module["_disposeSound"]=createExportWrapper("disposeSound",1);_disposeAllSound=Module["_disposeAllSound"]=createExportWrapper("disposeAllSound",0);_getLooping=Module["_getLooping"]=createExportWrapper("getLooping",1);_setLooping=Module["_setLooping"]=createExportWrapper("setLooping",2);_getLoopPoint=Module["_getLoopPoint"]=createExportWrapper("getLoopPoint",1);_setLoopPoint=Module["_setLoopPoint"]=createExportWrapper("setLoopPoint",2);_getLoopEndPoint=Module["_getLoopEndPoint"]=createExportWrapper("getLoopEndPoint",1);_setLoopEndPoint=Module["_setLoopEndPoint"]=createExportWrapper("setLoopEndPoint",2);_setVisualizationEnabled=Module["_setVisualizationEnabled"]=createExportWrapper("setVisualizationEnabled",1);_getVisualizationEnabled=Module["_getVisualizationEnabled"]=createExportWrapper("getVisualizationEnabled",0);_getFft=Module["_getFft"]=createExportWrapper("getFft",2);_getWave=Module["_getWave"]=createExportWrapper("getWave",2);_setFftSmoothing=Module["_setFftSmoothing"]=createExportWrapper("setFftSmoothing",1);_getAudioTexture=Module["_getAudioTexture"]=createExportWrapper("getAudioTexture",2);_getAudioTexture2D=Module["_getAudioTexture2D"]=createExportWrapper("getAudioTexture2D",2);_getTextureValue=Module["_getTextureValue"]=createExportWrapper("getTextureValue",2);_getLength=Module["_getLength"]=createExportWrapper("getLength",1);_seek=Module["_seek"]=createExportWrapper("seek",2);_getPosition=Module["_getPosition"]=createExportWrapper("getPosition",1);_getGlobalVolume=Module["_getGlobalVolume"]=createExportWrapper("getGlobalVolume",0);_setGlobalVolume=Module["_setGlobalVolume"]=createExportWrapper("setGlobalVolume",1);_getVolume=Module["_getVolume"]=createExportWrapper("getVolume",1);_setVolume=Module["_setVolume"]=createExportWrapper("setVolume",2);_getPan=Module["_getPan"]=createExportWrapper("getPan",1);_setPan=Module["_setPan"]=createExportWrapper("setPan",2);_setPanAbsolute=Module["_setPanAbsolute"]=createExportWrapper("setPanAbsolute",3);_getIsValidVoiceHandle=Module["_getIsValidVoiceHandle"]=createExportWrapper("getIsValidVoiceHandle",1);_getActiveVoiceCount=Module["_getActiveVoiceCount"]=createExportWrapper("getActiveVoiceCount",0);_countAudioSource=Module["_countAudioSource"]=createExportWrapper("countAudioSource",1);_getVoiceCount=Module["_getVoiceCount"]=createExportWrapper("getVoiceCount",0);_getProtectVoice=Module["_getProtectVoice"]=createExportWrapper("getProtectVoice",1);_setProtectVoice=Module["_setProtectVoice"]=createExportWrapper("setProtectVoice",2);_setInaudibleBehavior=Module["_setInaudibleBehavior"]=createExportWrapper("setInaudibleBehavior",3);_getMaxActiveVoiceCount=Module["_getMaxActiveVoiceCount"]=createExportWrapper("getMaxActiveVoiceCount",0);_setMaxActiveVoiceCount=Module["_setMaxActiveVoiceCount"]=createExportWrapper("setMaxActiveVoiceCount",1);_createVoiceGroup=Module["_createVoiceGroup"]=createExportWrapper("createVoiceGroup",0);_destroyVoiceGroup=Module["_destroyVoiceGroup"]=createExportWrapper("destroyVoiceGroup",1);_addVoiceToGroup=Module["_addVoiceToGroup"]=createExportWrapper("addVoiceToGroup",2);_isVoiceGroup=Module["_isVoiceGroup"]=createExportWrapper("isVoiceGroup",1);_isVoiceGroupEmpty=Module["_isVoiceGroupEmpty"]=createExportWrapper("isVoiceGroupEmpty",1);_fadeGlobalVolume=Module["_fadeGlobalVolume"]=createExportWrapper("fadeGlobalVolume",2);_fadeVolume=Module["_fadeVolume"]=createExportWrapper("fadeVolume",3);_fadePan=Module["_fadePan"]=createExportWrapper("fadePan",3);_fadeRelativePlaySpeed=Module["_fadeRelativePlaySpeed"]=createExportWrapper("fadeRelativePlaySpeed",3);_schedulePause=Module["_schedulePause"]=createExportWrapper("schedulePause",2);_scheduleStop=Module["_scheduleStop"]=createExportWrapper("scheduleStop",2);_oscillateVolume=Module["_oscillateVolume"]=createExportWrapper("oscillateVolume",4);_oscillatePan=Module["_oscillatePan"]=createExportWrapper("oscillatePan",4);_oscillateRelativePlaySpeed=Module["_oscillateRelativePlaySpeed"]=createExportWrapper("oscillateRelativePlaySpeed",4);_oscillateGlobalVolume=Module["_oscillateGlobalVolume"]=createExportWrapper("oscillateGlobalVolume",3);_isFilterActive=Module["_isFilterActive"]=createExportWrapper("isFilterActive",4);_getFilterParamNames=Module["_getFilterParamNames"]=createExportWrapper("getFilterParamNames",3);_addFilter=Module["_addFilter"]=createExportWrapper("addFilter",3);_removeFilter=Module["_removeFilter"]=createExportWrapper("removeFilter",3);_setFilterParams=Module["_setFilterParams"]=createExportWrapper("setFilterParams",5);_getFilterParams=Module["_getFilterParams"]=createExportWrapper("getFilterParams",5);_fadeFilterParameter=Module["_fadeFilterParameter"]=createExportWrapper("fadeFilterParameter",6);_oscillateFilterParameter=Module["_oscillateFilterParameter"]=createExportWrapper("oscillateFilterParameter",7);_play3d=Module["_play3d"]=createExportWrapper("play3d",13);_play3dWithLoopPoints=Module["_play3dWithLoopPoints"]=createExportWrapper("play3dWithLoopPoints",14);_play3dClocked=Module["_play3dClocked"]=createExportWrapper("play3dClocked",11);_set3dSoundSpeed=Module["_set3dSoundSpeed"]=createExportWrapper("set3dSoundSpeed",1);_get3dSoundSpeed=Module["_get3dSoundSpeed"]=createExportWrapper("get3dSoundSpeed",0);_set3dListenerParameters=Module["_set3dListenerParameters"]=createExportWrapper("set3dListenerParameters",12);_set3dListenerPosition=Module["_set3dListenerPosition"]=createExportWrapper("set3dListenerPosition",3);_set3dListenerAt=Module["_set3dListenerAt"]=createExportWrapper("set3dListenerAt",3);_set3dListenerUp=Module["_set3dListenerUp"]=createExportWrapper("set3dListenerUp",3);_set3dListenerVelocity=Module["_set3dListenerVelocity"]=createExportWrapper("set3dListenerVelocity",3);_set3dSourceParameters=Module["_set3dSourceParameters"]=createExportWrapper("set3dSourceParameters",7);_set3dSourcePosition=Module["_set3dSourcePosition"]=createExportWrapper("set3dSourcePosition",4);_set3dSourceVelocity=Module["_set3dSourceVelocity"]=createExportWrapper("set3dSourceVelocity",4);_set3dSourceMinMaxDistance=Module["_set3dSourceMinMaxDistance"]=createExportWrapper("set3dSourceMinMaxDistance",3);_set3dSourceAttenuation=Module["_set3dSourceAttenuation"]=createExportWrapper("set3dSourceAttenuation",3);_set3dSourceDopplerFactor=Module["_set3dSourceDopplerFactor"]=createExportWrapper("set3dSourceDopplerFactor",2);_readSamplesFromFile=Module["_readSamplesFromFile"]=createExportWrapper("readSamplesFromFile",6);_readSamplesFromMem=Module["_readSamplesFromMem"]=createExportWrapper("readSamplesFromMem",7);_createBus=Module["_createBus"]=createExportWrapper("createBus",0);_destroyBus=Module["_destroyBus"]=createExportWrapper("destroyBus",1);_busPlayOnEngine=Module["_busPlayOnEngine"]=createExportWrapper("busPlayOnEngine",4);_busSetChannels=Module["_busSetChannels"]=createExportWrapper("busSetChannels",2);_busSetVisualizationEnable=Module["_busSetVisualizationEnable"]=createExportWrapper("busSetVisualizationEnable",2);_busCalcFFT=Module["_busCalcFFT"]=createExportWrapper("busCalcFFT",1);_busGetWave=Module["_busGetWave"]=createExportWrapper("busGetWave",1);_busGetApproximateVolume=Module["_busGetApproximateVolume"]=createExportWrapper("busGetApproximateVolume",2);_busAnnexSound=Module["_busAnnexSound"]=createExportWrapper("busAnnexSound",2);_busGetActiveVoiceCount=Module["_busGetActiveVoiceCount"]=createExportWrapper("busGetActiveVoiceCount",1);_memcpy=Module["_memcpy"]=createExportWrapper("memcpy",3);_memset=Module["_memset"]=createExportWrapper("memset",3);_fflush=createExportWrapper("fflush",1);_strerror=createExportWrapper("strerror",1);_emscripten_stack_get_end=wasmExports["emscripten_stack_get_end"];_emscripten_stack_get_base=wasmExports["emscripten_stack_get_base"];_sbrk=createExportWrapper("sbrk",1);_emscripten_get_sbrk_ptr=wasmExports["emscripten_get_sbrk_ptr"];_emscripten_stack_init=wasmExports["emscripten_stack_init"];_emscripten_stack_get_free=wasmExports["emscripten_stack_get_free"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmExports["__indirect_function_table"]}var wasmImports={__assert_fail:___assert_fail,__cxa_throw:___cxa_throw,__syscall_fcntl64:___syscall_fcntl64,__syscall_ioctl:___syscall_ioctl,__syscall_openat:___syscall_openat,_abort_js:__abort_js,_emscripten_log_formatted:__emscripten_log_formatted,_tzset_js:__tzset_js,alignfault,clock_time_get:_clock_time_get,emscripten_asm_const_async_on_main_thread:_emscripten_asm_const_async_on_main_thread,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,random_get:_random_get,segfault};var calledRun;function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}stackCheckInit();preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){assert(!calledRun);calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();consumedModuleProp("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(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}checkStackCookie()}function checkUnflushedContent(){var oldOut=out;var oldErr=err;var has=false;out=err=x=>{has=true};try{_fflush(0);for(var name of["stdout","stderr"]){var info=FS.analyzePath("/dev/"+name);if(!info)return;var stream=info.object;var rdev=stream.rdev;var tty=TTY.ttys[rdev];if(tty?.output?.length){has=true}}}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 Emscripten FAQ), or make sure to emit a newline when you printf etc.")}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}for(const prop of Object.keys(Module)){if(!(prop in moduleArg)){Object.defineProperty(moduleArg,prop,{configurable:true,get(){abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}})}} +var Module_soloud=(()=>{var _scriptName=globalThis.document?.currentScript?.src;return async function(moduleArg={}){var moduleRtn;(function(){function humanReadableVersionToPacked(str){str=str.split("-")[0];var vers=str.split(".").slice(0,3);while(vers.length<3)vers.push("00");vers=vers.map((n,i,arr)=>n.padStart(2,"0"));return vers.join("")}var packedVersionToHumanReadable=n=>[n/1e4|0,(n/100|0)%100,n%100].join(".");var TARGET_NOT_SUPPORTED=2147483647;var currentNodeVersion=typeof process!=="undefined"&&process.versions?.node?humanReadableVersionToPacked(process.versions.node):TARGET_NOT_SUPPORTED;if(currentNodeVersion<16e4){throw new Error(`This emscripten-generated code requires node v${packedVersionToHumanReadable(16e4)} (detected v${packedVersionToHumanReadable(currentNodeVersion)})`)}var userAgent=typeof navigator!=="undefined"&&navigator.userAgent;if(!userAgent){return}var currentSafariVersion=userAgent.includes("Safari/")&&!userAgent.includes("Chrome/")&&userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)?humanReadableVersionToPacked(userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):TARGET_NOT_SUPPORTED;if(currentSafariVersion<15e4){throw new Error(`This emscripten-generated code requires Safari v${packedVersionToHumanReadable(15e4)} (detected v${currentSafariVersion})`)}var currentFirefoxVersion=userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentFirefoxVersion<79){throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${currentFirefoxVersion})`)}var currentChromeVersion=userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentChromeVersion<85){throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${currentChromeVersion})`)}})();var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};if(typeof __filename!="undefined"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){const isNode=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(!isNode)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?)");var fs=require("fs");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);assert(Buffer.isBuffer(ret));return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");assert(binary?Buffer.isBuffer(ret):typeof ret=="string");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))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){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{throw new Error("environment detection error")}var out=console.log.bind(console);var err=console.error.bind(console);assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.");var wasmBinary;if(!globalThis.WebAssembly){err("no native wasm support detected")}var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+text:""))}}var isFileURI=filename=>filename.startsWith("file://");function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[SAFE_HEAP_INDEX(HEAPU32,max>>2,"storing")]=34821223;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,max+4>>2,"storing")]=2310721022}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=HEAPU32[SAFE_HEAP_INDEX(HEAPU32,max>>2,"loading")];var cookie2=HEAPU32[SAFE_HEAP_INDEX(HEAPU32,max+4>>2,"loading")];if(cookie1!=34821223||cookie2!=2310721022){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`)}}var runtimeDebug=true;(()=>{var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)abort("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function consumedModuleProp(prop){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,set(){abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}}function makeInvalidEarlyAccess(name){return()=>assert(false,`call to '${name}' via reference taken before Wasm module initialization`)}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`)}}function isExportedByForceFilesystem(name){return name==="FS_createPath"||name==="FS_createDataFile"||name==="FS_createPreloadedFile"||name==="FS_preloadFile"||name==="FS_unlink"||name==="addRunDependency"||name==="FS_createLazyFile"||name==="FS_createDevice"||name==="removeRunDependency"}function missingLibrarySymbol(sym){unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg=`'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}abort(msg)}})}}function SAFE_HEAP_INDEX(arr,idx,action){const bytes=arr.BYTES_PER_ELEMENT;const dest=idx*bytes;if(idx<=0)abort(`segmentation fault ${action} ${bytes} bytes at address ${dest}`);if(runtimeInitialized){var brk=_sbrk(0);if(dest+bytes>brk)abort(`segmentation fault, exceeded the top of the available dynamic heap when ${action} ${bytes} bytes at address ${dest}. DYNAMICTOP=${brk}`);if(brk<_emscripten_stack_get_base())abort(`brk >= _emscripten_stack_get_base() (brk=${brk}, _emscripten_stack_get_base()=${_emscripten_stack_get_base()})`);if(brk>wasmMemory.buffer.byteLength)abort(`brk <= wasmMemory.buffer.byteLength (brk=${brk}, wasmMemory.buffer.byteLength=${wasmMemory.buffer.byteLength})`)}return idx}function segfault(){abort("segmentation fault")}function alignfault(){abort("alignment fault")}var readyPromiseResolve,readyPromiseReject;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}assert(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}consumedModuleProp("preRun");callRuntimeCallbacks(onPreRuns)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){checkStackCookie();if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}consumedModuleProp("postRun");callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}function createExportWrapper(name,nargs){return(...args)=>{assert(runtimeInitialized,`native function \`${name}\` called before runtime initialization`);var f=wasmExports[name];assert(f,`exported native function \`${name}\` not found`);assert(args.length<=nargs,`native function \`${name}\` called with ${args.length} args but expects ${nargs}`);return f(...args)}}var wasmBinaryFile;function findWasmBinary(){return locateFile("libflutter_soloud_plugin.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);if(isFileURI(binaryFile)){err(`warning: Loading from a file URI (${binaryFile}) 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)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}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;return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{try{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);reject(e)}})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[SAFE_HEAP_INDEX(HEAP8,ptr,"loading")];case"i8":return HEAP8[SAFE_HEAP_INDEX(HEAP8,ptr,"loading")];case"i16":return HEAP16[SAFE_HEAP_INDEX(HEAP16,ptr>>1,"loading")];case"i32":return HEAP32[SAFE_HEAP_INDEX(HEAP32,ptr>>2,"loading")];case"i64":return HEAP64[SAFE_HEAP_INDEX(HEAP64,ptr>>3,"loading")];case"float":return HEAPF32[SAFE_HEAP_INDEX(HEAPF32,ptr>>2,"loading")];case"double":return HEAPF64[SAFE_HEAP_INDEX(HEAPF64,ptr>>3,"loading")];case"*":return HEAPU32[SAFE_HEAP_INDEX(HEAPU32,ptr>>2,"loading")];default:abort(`invalid type for getValue: ${type}`)}}var noExitRuntime=true;var ptrToString=ptr=>{assert(typeof ptr==="number",`ptrToString expects a number, got ${typeof ptr}`);ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[SAFE_HEAP_INDEX(HEAP8,ptr,"storing")]=value;break;case"i8":HEAP8[SAFE_HEAP_INDEX(HEAP8,ptr,"storing")]=value;break;case"i16":HEAP16[SAFE_HEAP_INDEX(HEAP16,ptr>>1,"storing")]=value;break;case"i32":HEAP32[SAFE_HEAP_INDEX(HEAP32,ptr>>2,"storing")]=value;break;case"i64":HEAP64[SAFE_HEAP_INDEX(HEAP64,ptr>>3,"storing")]=BigInt(value);break;case"float":HEAPF32[SAFE_HEAP_INDEX(HEAPF32,ptr>>2,"storing")]=value;break;case"double":HEAPF64[SAFE_HEAP_INDEX(HEAPF64,ptr>>3,"storing")]=value;break;case"*":HEAPU32[SAFE_HEAP_INDEX(HEAPU32,ptr>>2,"storing")]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(typeof ptr=="number",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):""};var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+4>>2,"storing")]=type}get_type(){return HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+4>>2,"loading")]}set_destructor(destructor){HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+8>>2,"storing")]=destructor}get_destructor(){return HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+8>>2,"loading")]}set_caught(caught){caught=caught?1:0;HEAP8[SAFE_HEAP_INDEX(HEAP8,this.ptr+12,"storing")]=caught}get_caught(){return HEAP8[SAFE_HEAP_INDEX(HEAP8,this.ptr+12,"loading")]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[SAFE_HEAP_INDEX(HEAP8,this.ptr+13,"storing")]=rethrown}get_rethrown(){return HEAP8[SAFE_HEAP_INDEX(HEAP8,this.ptr+13,"loading")]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+16>>2,"storing")]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[SAFE_HEAP_INDEX(HEAPU32,this.ptr+16>>2,"loading")]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;assert(false,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")};var syscallGetVarargI=()=>{assert(SYSCALLS.varargs!=undefined);var ret=HEAP32[SAFE_HEAP_INDEX(HEAP32,+SYSCALLS.varargs>>2,"loading")];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{assert(typeof str==="string",`stringToUTF8Array expects a string (got ${typeof str})`);if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=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 "+ptrToString(u)+" 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;i++}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var strError=errno=>UTF8ToString(_strerror(errno));var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>{var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}};var runDependencies=0;var dependenciesFulfilled=null;var runDependencyTracking={};var runDependencyWatcher=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"removeRunDependency requires an ID");assert(runDependencyTracking[id]);delete runDependencyTracking[id];if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"addRunDependency requires an ID");assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&globalThis.setInterval){runDependencyWatcher=setInterval(()=>{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);runDependencyWatcher.unref?.()}};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){assert(plugin["handle"].constructor.name==="AsyncFunction","Filesystem plugin handlers must be async functions (See #24914)");return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class extends Error{name="ErrnoError";constructor(errno){super(runtimeInitialized?strError(errno):"");this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){assert(typeof parent=="object");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){assert(fd>=-1);stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},mount(type,opts,mountpoint){if(typeof type=="string"){throw type}var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable)){while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){assert(offset>=0);if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){abort(`Invalid encoding type "${opts.encoding}"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{abort("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){assert(!FS.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)abort("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")abort("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};for(const[key,fn]of Object.entries(node.stream_ops)){stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}}function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node},absolutePath(){abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder(){abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink(){abort("FS.createLink has been removed; use FS.symlink instead")},joinPath(){abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc(){abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath(){abort("FS.standardizePath has been removed; use PATH.normalize instead")}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf>>2,"storing")]=stat.dev;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+4>>2,"storing")]=stat.mode;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+8>>2,"storing")]=stat.nlink;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+12>>2,"storing")]=stat.uid;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+16>>2,"storing")]=stat.gid;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+20>>2,"storing")]=stat.rdev;HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+24>>3,"storing")]=BigInt(stat.size);HEAP32[SAFE_HEAP_INDEX(HEAP32,buf+32>>2,"storing")]=4096;HEAP32[SAFE_HEAP_INDEX(HEAP32,buf+36>>2,"storing")]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+40>>3,"storing")]=BigInt(Math.floor(atime/1e3));HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+48>>2,"storing")]=atime%1e3*1e3*1e3;HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+56>>3,"storing")]=BigInt(Math.floor(mtime/1e3));HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+64>>2,"storing")]=mtime%1e3*1e3*1e3;HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+72>>3,"storing")]=BigInt(Math.floor(ctime/1e3));HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+80>>2,"storing")]=ctime%1e3*1e3*1e3;HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+88>>3,"storing")]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+4>>2,"storing")]=stats.bsize;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+60>>2,"storing")]=stats.bsize;HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+8>>3,"storing")]=BigInt(stats.blocks);HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+16>>3,"storing")]=BigInt(stats.bfree);HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+24>>3,"storing")]=BigInt(stats.bavail);HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+32>>3,"storing")]=BigInt(stats.files);HEAP64[SAFE_HEAP_INDEX(HEAP64,buf+40>>3,"storing")]=BigInt(stats.ffree);HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+48>>2,"storing")]=stats.fsid;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+64>>2,"storing")]=stats.flags;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf+56>>2,"storing")]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[SAFE_HEAP_INDEX(HEAP16,arg+offset>>1,"storing")]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[SAFE_HEAP_INDEX(HEAP32,argp>>2,"storing")]=termios.c_iflag||0;HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+4>>2,"storing")]=termios.c_oflag||0;HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+8>>2,"storing")]=termios.c_cflag||0;HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+12>>2,"storing")]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[SAFE_HEAP_INDEX(HEAP8,argp+i+17,"storing")]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[SAFE_HEAP_INDEX(HEAP32,argp>>2,"loading")];var c_oflag=HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+4>>2,"loading")];var c_cflag=HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+8>>2,"loading")];var c_lflag=HEAP32[SAFE_HEAP_INDEX(HEAP32,argp+12>>2,"loading")];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[SAFE_HEAP_INDEX(HEAP8,argp+i+17,"loading")])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[SAFE_HEAP_INDEX(HEAP32,argp>>2,"storing")]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[SAFE_HEAP_INDEX(HEAP16,argp>>1,"storing")]=winsize[0];HEAP16[SAFE_HEAP_INDEX(HEAP16,argp+2>>1,"storing")]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>abort("native code called abort()");var jsStackTrace=()=>(new Error).stack.toString();var getCallstack=flags=>{var callstack=jsStackTrace();if(flags&8){warnOnce("emscripten_log with EM_LOG_C_STACK no longer has any effect")}var lines=callstack.split("\n");callstack="";var firefoxRe=new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)");var chromeRe=new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");for(var line of lines){var symbolName="";var file="";var lineno=0;var column=0;var parts=chromeRe.exec(line);if(parts?.length==5){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]}else{parts=firefoxRe.exec(line);if(parts?.length>=4){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]|0}else{callstack+=line+"\n";continue}}if(symbolName=="_emscripten_log"||symbolName=="_emscripten_get_callstack"){callstack="";continue}if(flags&24){if(flags&64){file=file.substring(file.replace(/\\/g,"/").lastIndexOf("/")+1)}callstack+=` at ${symbolName} (${file}:${lineno}:${column})\n`}}callstack=callstack.replace(/\s+$/,"");return callstack};var __emscripten_log_formatted=(flags,str)=>{str=UTF8ToString(str);if(flags&24){str=str.replace(/\s+$/,"");str+=(str.length>0?"\n":"")+getCallstack(flags)}if(flags&1){if(flags&4){console.error(str)}else if(flags&2){console.warn(str)}else if(flags&512){console.info(str)}else if(flags&256){console.debug(str)}else{console.log(str)}}else if(flags&6){err(str)}else{out(str)}};var 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)};var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[SAFE_HEAP_INDEX(HEAPU32,timezone>>2,"storing")]=stdTimezoneOffset*60;HEAP32[SAFE_HEAP_INDEX(HEAP32,daylight>>2,"storing")]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);assert(winterName);assert(summerName);assert(lengthBytesUTF8(winterName)<=16,`timezone name truncated to fit in TZNAME_MAX (${winterName})`);assert(lengthBytesUTF8(summerName)<=16,`timezone name truncated to fit in TZNAME_MAX (${summerName})`);if(summerOffsetperformance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[SAFE_HEAP_INDEX(HEAP64,ptime>>3,"storing")]=BigInt(nsec);return 0}var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{assert(Array.isArray(readEmAsmArgsArray));assert(buf%16==0);readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[SAFE_HEAP_INDEX(HEAPU8,sigPtr++,"loading")]){var chr=String.fromCharCode(ch);var validChars=["d","f","i","p"];validChars.push("j");assert(validChars.includes(chr),`Invalid character ${ch}("${chr}") in readEmAsmArgs! Use only [${validChars}], and do not specify "v" for void return argument.`);var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[SAFE_HEAP_INDEX(HEAPU32,buf>>2,"loading")]:ch==106?HEAP64[SAFE_HEAP_INDEX(HEAP64,buf>>3,"loading")]:ch==105?HEAP32[SAFE_HEAP_INDEX(HEAP32,buf>>2,"loading")]:HEAPF64[SAFE_HEAP_INDEX(HEAPF64,buf>>3,"loading")]);buf+=wide?8:4}return readEmAsmArgsArray};var runMainThreadEmAsm=(emAsmAddr,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(emAsmAddr),`No EM_ASM constant found at address ${emAsmAddr}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[emAsmAddr](...args)};var _emscripten_asm_const_async_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,0);var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(code),`No EM_ASM constant found at address ${code}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>{assert(alignment,"alignment argument is required");return Math.ceil(size/alignment)*alignment};var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){err(`growMemory: Attempted to grow heap from ${oldHeapSize} bytes to ${size} bytes, but got error: ${e}`)}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, requested ${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,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[SAFE_HEAP_INDEX(HEAPU32,__environ+envp>>2,"storing")]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[SAFE_HEAP_INDEX(HEAPU32,penviron_count>>2,"storing")]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[SAFE_HEAP_INDEX(HEAPU32,penviron_buf_size>>2,"storing")]=bufSize;return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;checkUnflushedContent();if(keepRuntimeAlive()&&!implicit){var msg=`program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`;readyPromiseReject?.(msg);err(msg)}_proc_exit(status)};var _exit=exitJS;function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2,"loading")];var len=HEAPU32[SAFE_HEAP_INDEX(HEAPU32,iov+4>>2,"loading")];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2,"storing")]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[SAFE_HEAP_INDEX(HEAP64,newOffset>>3,"storing")]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2,"loading")];var len=HEAPU32[SAFE_HEAP_INDEX(HEAPU32,iov+4>>2,"loading")];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2,"storing")]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _random_get(buffer,size){try{randomFill(HEAPU8.subarray(buffer,buffer+size));return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var getCFunc=ident=>{var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func};var writeArrayToMemory=(array,buffer)=>{assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array: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(...args)=>ccall(ident,returnType,argTypes,args,opts);FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];checkIncomingModuleAPI();if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];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");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 emscripten_set_window_title in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");assert(typeof Module["ENVIRONMENT"]=="undefined","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");assert(typeof Module["STACK_SIZE"]=="undefined","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");assert(typeof Module["wasmMemory"]=="undefined","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally");assert(typeof Module["INITIAL_MEMORY"]=="undefined","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically");if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}consumedModuleProp("preInit")}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["setValue"]=setValue;Module["getValue"]=getValue;Module["UTF8ToString"]=UTF8ToString;var missingLibrarySymbols=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","getTempRet0","setTempRet0","createNamedFunction","zeroMemory","withStackSave","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","jstoi_q","autoResumeAudioContext","getDynCaller","dynCall","handleException","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asmjsMangle","HandleAllocator","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","getFunctionAddress","addFunction","removeFunction","intArrayToString","AsciiToString","stringToAscii","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","stringToNewUTF8","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","convertPCtoSourceLocation","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=["run","out","err","callMain","abort","wasmExports","HEAPF64","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAP64","HEAPU64","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","stackSave","stackRestore","stackAlloc","ptrToString","exitJS","getHeapMax","growMemory","ENV","ERRNO_CODES","strError","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","readEmAsmArgs","runEmAsmFunction","runMainThreadEmAsm","getExecutableName","keepRuntimeAlive","asyncLoad","alignMemory","mmapAlloc","wasmTable","wasmMemory","getUniqueRunDependency","noExitRuntime","addRunDependency","removeRunDependency","addOnPreRun","addOnPostRun","freeTableIndexes","functionsInTableMap","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","intArrayFromString","UTF16Decoder","stringToUTF8OnStack","writeArrayToMemory","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","jsStackTrace","getCallstack","UNWIND_CACHE","ExitStatus","getEnvStrings","checkWasiClock","doReadv","doWritev","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar_buffer","FS_stdin_getChar","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_readFiles","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","FS_absolutePath","FS_createFolder","FS_createLink","FS_joinPath","FS_mmapAlloc","FS_standardizePath","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s"];unexportedSymbols.forEach(unexportedRuntimeSymbol);function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings")}var ASM_CONSTS={722720:($0,$1,$2,$3,$4)=>{if(typeof window==="undefined"||(window.AudioContext||window.webkitAudioContext)===undefined){return 0}if(typeof window.miniaudio==="undefined"){window.miniaudio={referenceCount:0};window.miniaudio.device_type={};window.miniaudio.device_type.playback=$0;window.miniaudio.device_type.capture=$1;window.miniaudio.device_type.duplex=$2;window.miniaudio.device_state={};window.miniaudio.device_state.stopped=$3;window.miniaudio.device_state.started=$4;let miniaudio=window.miniaudio;miniaudio.devices=[];miniaudio.track_device=function(device){for(var iDevice=0;iDevice0){if(miniaudio.devices[miniaudio.devices.length-1]==null){miniaudio.devices.pop()}else{break}}};miniaudio.untrack_device=function(device){for(var iDevice=0;iDevice{_ma_device__on_notification_unlocked(device.pDevice)},error=>{console.error("Failed to resume audiocontext",error)})}}miniaudio.unlock_event_types.map(function(event_type){document.removeEventListener(event_type,miniaudio.unlock,true)})};miniaudio.unlock_event_types.map(function(event_type){document.addEventListener(event_type,miniaudio.unlock,true)})}window.miniaudio.referenceCount+=1;return 1},724898:()=>{if(typeof window.miniaudio!=="undefined"){window.miniaudio.unlock_event_types.map(function(event_type){document.removeEventListener(event_type,window.miniaudio.unlock,true)});window.miniaudio.referenceCount-=1;if(window.miniaudio.referenceCount===0){delete window.miniaudio}}},725202:()=>navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined,725306:()=>{try{var temp=new(window.AudioContext||window.webkitAudioContext);var sampleRate=temp.sampleRate;temp.close();return sampleRate}catch(e){return 0}},725477:($0,$1,$2,$3,$4,$5)=>{var deviceType=$0;var channels=$1;var sampleRate=$2;var bufferSize=$3;var pIntermediaryBuffer=$4;var pDevice=$5;if(typeof window.miniaudio==="undefined"){return-1}var device={};var audioContextOptions={};if(deviceType==window.miniaudio.device_type.playback&&sampleRate!=0){audioContextOptions.sampleRate=sampleRate}device.webaudio=new(window.AudioContext||window.webkitAudioContext)(audioContextOptions);device.webaudio.suspend();device.state=window.miniaudio.device_state.stopped;var channelCountIn=0;var channelCountOut=channels;if(deviceType!=window.miniaudio.device_type.playback){channelCountIn=channels}device.scriptNode=device.webaudio.createScriptProcessor(bufferSize,channelCountIn,channelCountOut);device.scriptNode.onaudioprocess=function(e){if(device.intermediaryBufferView==null||device.intermediaryBufferView.length==0){device.intermediaryBufferView=new Float32Array(HEAPF32.buffer,pIntermediaryBuffer,bufferSize*channels)}if(deviceType==window.miniaudio.device_type.capture||deviceType==window.miniaudio.device_type.duplex){for(var iChannel=0;iChannelwindow.miniaudio.get_device_by_index($0).webaudio.sampleRate,728427:$0=>{var device=window.miniaudio.get_device_by_index($0);if(device.scriptNode!==undefined){device.scriptNode.onaudioprocess=function(e){};device.scriptNode.disconnect();device.scriptNode=undefined}if(device.streamNode!==undefined){device.streamNode.disconnect();device.streamNode=undefined}device.webaudio.close();device.webaudio=undefined;device.pDevice=undefined},728827:$0=>{window.miniaudio.untrack_device_by_index($0)},728877:$0=>{var device=window.miniaudio.get_device_by_index($0);device.webaudio.resume();device.state=window.miniaudio.device_state.started},729016:$0=>{var device=window.miniaudio.get_device_by_index($0);device.webaudio.suspend();device.state=window.miniaudio.device_state.stopped},729156:()=>{if(Module_soloud.wasmWorker){try{Module_soloud.wasmWorker.terminate();console.log("EM_ASM terminated existing Web Worker.")}catch(e){console.error("Failed to terminate existing worker:",e)}Module_soloud.wasmWorker=null}var workerUri="assets/packages/flutter_soloud/web/worker.dart.js";console.log("EM_ASM creating Web Worker!");try{Module_soloud.wasmWorker=new Worker(workerUri);return 1}catch(e){console.error("Failed to create worker:",e);return 0}},729651:($0,$1)=>{if(Module_soloud.wasmWorker){Module_soloud.wasmWorker.postMessage({message:UTF8ToString($0),value:$1})}else{console.error("Worker not found.")}},729817:($0,$1,$2)=>{if(Module_soloud.wasmWorker){Module_soloud.wasmWorker.postMessage({message:"mixerOutputData",offset:$0,length:$1,captureId:$2})}},729969:($0,$1)=>{var functionName="dartOnMetadataCallback_"+$1;if(typeof window[functionName]==="function"){window[functionName]($0)}else{}},730111:($0,$1,$2,$3)=>{var functionName="dartOnBufferingCallback_"+$3;if(typeof window[functionName]==="function"){var buffering=$0==1?true:false;window[functionName](buffering,$1,$2)}else{console.log("EM_ASM 'dartOnBufferingCallback_$hash' not found.")}},730375:($0,$1,$2,$3)=>{var functionName="dartOnBufferingCallback_"+$3;if(typeof window[functionName]==="function"){var buffering=$0==1?true:false;window[functionName](buffering,$1,$2)}},730564:($0,$1)=>{var functionName="dartOnMetadataCallback_"+$1;if(typeof window[functionName]==="function"){window[functionName]($0)}},730697:($0,$1)=>{var functionName="dartOnMoreDataIsNeededCallback_"+$1;if(typeof window[functionName]==="function"){window[functionName]($0)}},730838:($0,$1)=>{var functionName="dartOnAudioDurationCallback_"+$1;if(typeof window[functionName]==="function"){window[functionName]($0)}}};var _malloc=Module["_malloc"]=makeInvalidEarlyAccess("_malloc");var _free=Module["_free"]=makeInvalidEarlyAccess("_free");var _ma_device__on_notification_unlocked=Module["_ma_device__on_notification_unlocked"]=makeInvalidEarlyAccess("_ma_device__on_notification_unlocked");var _ma_malloc_emscripten=Module["_ma_malloc_emscripten"]=makeInvalidEarlyAccess("_ma_malloc_emscripten");var _ma_free_emscripten=Module["_ma_free_emscripten"]=makeInvalidEarlyAccess("_ma_free_emscripten");var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=makeInvalidEarlyAccess("_ma_device_process_pcm_frames_capture__webaudio");var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=makeInvalidEarlyAccess("_ma_device_process_pcm_frames_playback__webaudio");var _createWorkerInWasm=Module["_createWorkerInWasm"]=makeInvalidEarlyAccess("_createWorkerInWasm");var _sendToWorker=Module["_sendToWorker"]=makeInvalidEarlyAccess("_sendToWorker");var _nativeFree=Module["_nativeFree"]=makeInvalidEarlyAccess("_nativeFree");var _voiceEndedCallback=Module["_voiceEndedCallback"]=makeInvalidEarlyAccess("_voiceEndedCallback");var _setDartEventCallback=Module["_setDartEventCallback"]=makeInvalidEarlyAccess("_setDartEventCallback");var _clearDartCallbackRegistrations=Module["_clearDartCallbackRegistrations"]=makeInvalidEarlyAccess("_clearDartCallbackRegistrations");var _startMixerCapture=Module["_startMixerCapture"]=makeInvalidEarlyAccess("_startMixerCapture");var _stopMixerCapture=Module["_stopMixerCapture"]=makeInvalidEarlyAccess("_stopMixerCapture");var _isMixerCaptureRunning=Module["_isMixerCaptureRunning"]=makeInvalidEarlyAccess("_isMixerCaptureRunning");var _getMixerCaptureBufferPointer=Module["_getMixerCaptureBufferPointer"]=makeInvalidEarlyAccess("_getMixerCaptureBufferPointer");var _getMixerCaptureBufferSize=Module["_getMixerCaptureBufferSize"]=makeInvalidEarlyAccess("_getMixerCaptureBufferSize");var _getMixerCaptureAvailableBytes=Module["_getMixerCaptureAvailableBytes"]=makeInvalidEarlyAccess("_getMixerCaptureAvailableBytes");var _getMixerCaptureReadOffset=Module["_getMixerCaptureReadOffset"]=makeInvalidEarlyAccess("_getMixerCaptureReadOffset");var _advanceMixerCaptureReadPosition=Module["_advanceMixerCaptureReadPosition"]=makeInvalidEarlyAccess("_advanceMixerCaptureReadPosition");var _getMixerOutputWavHeader=Module["_getMixerOutputWavHeader"]=makeInvalidEarlyAccess("_getMixerOutputWavHeader");var _setMixerOutputCallback=Module["_setMixerOutputCallback"]=makeInvalidEarlyAccess("_setMixerOutputCallback");var _areXiphLibsAvailable=Module["_areXiphLibsAvailable"]=makeInvalidEarlyAccess("_areXiphLibsAvailable");var _initEngine=Module["_initEngine"]=makeInvalidEarlyAccess("_initEngine");var _setAndroidAAudioAttributes=Module["_setAndroidAAudioAttributes"]=makeInvalidEarlyAccess("_setAndroidAAudioAttributes");var _listPlaybackDevices=Module["_listPlaybackDevices"]=makeInvalidEarlyAccess("_listPlaybackDevices");var _changeDevice=Module["_changeDevice"]=makeInvalidEarlyAccess("_changeDevice");var _freeListPlaybackDevices=Module["_freeListPlaybackDevices"]=makeInvalidEarlyAccess("_freeListPlaybackDevices");var _dispose=Module["_dispose"]=makeInvalidEarlyAccess("_dispose");var _prepareEngineInit=Module["_prepareEngineInit"]=makeInvalidEarlyAccess("_prepareEngineInit");var _requestEngineShutdown=Module["_requestEngineShutdown"]=makeInvalidEarlyAccess("_requestEngineShutdown");var _isInited=Module["_isInited"]=makeInvalidEarlyAccess("_isInited");var _loadFile=Module["_loadFile"]=makeInvalidEarlyAccess("_loadFile");var _loadMem=Module["_loadMem"]=makeInvalidEarlyAccess("_loadMem");var _setBufferStream=Module["_setBufferStream"]=makeInvalidEarlyAccess("_setBufferStream");var _resetBufferStream=Module["_resetBufferStream"]=makeInvalidEarlyAccess("_resetBufferStream");var _getStreamTimeConsumed=Module["_getStreamTimeConsumed"]=makeInvalidEarlyAccess("_getStreamTimeConsumed");var _setBufferIcyMetaInt=Module["_setBufferIcyMetaInt"]=makeInvalidEarlyAccess("_setBufferIcyMetaInt");var _setPullBufferStream=Module["_setPullBufferStream"]=makeInvalidEarlyAccess("_setPullBufferStream");var _resetPullBufferStream=Module["_resetPullBufferStream"]=makeInvalidEarlyAccess("_resetPullBufferStream");var _addPullBufferDataStream=Module["_addPullBufferDataStream"]=makeInvalidEarlyAccess("_addPullBufferDataStream");var _getPullBufferTimeRange=Module["_getPullBufferTimeRange"]=makeInvalidEarlyAccess("_getPullBufferTimeRange");var _addAudioDataStream=Module["_addAudioDataStream"]=makeInvalidEarlyAccess("_addAudioDataStream");var _setDataIsEnded=Module["_setDataIsEnded"]=makeInvalidEarlyAccess("_setDataIsEnded");var _getBufferSize=Module["_getBufferSize"]=makeInvalidEarlyAccess("_getBufferSize");var _loadWaveform=Module["_loadWaveform"]=makeInvalidEarlyAccess("_loadWaveform");var _setWaveformScale=Module["_setWaveformScale"]=makeInvalidEarlyAccess("_setWaveformScale");var _setWaveformDetune=Module["_setWaveformDetune"]=makeInvalidEarlyAccess("_setWaveformDetune");var _setWaveformFreq=Module["_setWaveformFreq"]=makeInvalidEarlyAccess("_setWaveformFreq");var _setSuperWave=Module["_setSuperWave"]=makeInvalidEarlyAccess("_setSuperWave");var _setWaveform=Module["_setWaveform"]=makeInvalidEarlyAccess("_setWaveform");var _speechText=Module["_speechText"]=makeInvalidEarlyAccess("_speechText");var _pauseSwitch=Module["_pauseSwitch"]=makeInvalidEarlyAccess("_pauseSwitch");var _setPause=Module["_setPause"]=makeInvalidEarlyAccess("_setPause");var _getPause=Module["_getPause"]=makeInvalidEarlyAccess("_getPause");var _setRelativePlaySpeed=Module["_setRelativePlaySpeed"]=makeInvalidEarlyAccess("_setRelativePlaySpeed");var _getRelativePlaySpeed=Module["_getRelativePlaySpeed"]=makeInvalidEarlyAccess("_getRelativePlaySpeed");var _getApproximateVolume=Module["_getApproximateVolume"]=makeInvalidEarlyAccess("_getApproximateVolume");var _play=Module["_play"]=makeInvalidEarlyAccess("_play");var _playWithLoopPoints=Module["_playWithLoopPoints"]=makeInvalidEarlyAccess("_playWithLoopPoints");var _playClocked=Module["_playClocked"]=makeInvalidEarlyAccess("_playClocked");var _setDelaySamples=Module["_setDelaySamples"]=makeInvalidEarlyAccess("_setDelaySamples");var _getStreamTime=Module["_getStreamTime"]=makeInvalidEarlyAccess("_getStreamTime");var _resetStreamTime=Module["_resetStreamTime"]=makeInvalidEarlyAccess("_resetStreamTime");var _getEngineTime=Module["_getEngineTime"]=makeInvalidEarlyAccess("_getEngineTime");var _playScheduled=Module["_playScheduled"]=makeInvalidEarlyAccess("_playScheduled");var _stopScheduled=Module["_stopScheduled"]=makeInvalidEarlyAccess("_stopScheduled");var _fadeScheduled=Module["_fadeScheduled"]=makeInvalidEarlyAccess("_fadeScheduled");var _stop=Module["_stop"]=makeInvalidEarlyAccess("_stop");var _disposeSound=Module["_disposeSound"]=makeInvalidEarlyAccess("_disposeSound");var _disposeAllSound=Module["_disposeAllSound"]=makeInvalidEarlyAccess("_disposeAllSound");var _getLooping=Module["_getLooping"]=makeInvalidEarlyAccess("_getLooping");var _setLooping=Module["_setLooping"]=makeInvalidEarlyAccess("_setLooping");var _getLoopPoint=Module["_getLoopPoint"]=makeInvalidEarlyAccess("_getLoopPoint");var _setLoopPoint=Module["_setLoopPoint"]=makeInvalidEarlyAccess("_setLoopPoint");var _getLoopEndPoint=Module["_getLoopEndPoint"]=makeInvalidEarlyAccess("_getLoopEndPoint");var _setLoopEndPoint=Module["_setLoopEndPoint"]=makeInvalidEarlyAccess("_setLoopEndPoint");var _setVisualizationEnabled=Module["_setVisualizationEnabled"]=makeInvalidEarlyAccess("_setVisualizationEnabled");var _getVisualizationEnabled=Module["_getVisualizationEnabled"]=makeInvalidEarlyAccess("_getVisualizationEnabled");var _getFft=Module["_getFft"]=makeInvalidEarlyAccess("_getFft");var _getWave=Module["_getWave"]=makeInvalidEarlyAccess("_getWave");var _setFftSmoothing=Module["_setFftSmoothing"]=makeInvalidEarlyAccess("_setFftSmoothing");var _getAudioTexture=Module["_getAudioTexture"]=makeInvalidEarlyAccess("_getAudioTexture");var _getAudioTexture2D=Module["_getAudioTexture2D"]=makeInvalidEarlyAccess("_getAudioTexture2D");var _getTextureValue=Module["_getTextureValue"]=makeInvalidEarlyAccess("_getTextureValue");var _getLength=Module["_getLength"]=makeInvalidEarlyAccess("_getLength");var _seek=Module["_seek"]=makeInvalidEarlyAccess("_seek");var _getPosition=Module["_getPosition"]=makeInvalidEarlyAccess("_getPosition");var _getGlobalVolume=Module["_getGlobalVolume"]=makeInvalidEarlyAccess("_getGlobalVolume");var _setGlobalVolume=Module["_setGlobalVolume"]=makeInvalidEarlyAccess("_setGlobalVolume");var _getVolume=Module["_getVolume"]=makeInvalidEarlyAccess("_getVolume");var _setVolume=Module["_setVolume"]=makeInvalidEarlyAccess("_setVolume");var _getPan=Module["_getPan"]=makeInvalidEarlyAccess("_getPan");var _setPan=Module["_setPan"]=makeInvalidEarlyAccess("_setPan");var _setPanAbsolute=Module["_setPanAbsolute"]=makeInvalidEarlyAccess("_setPanAbsolute");var _getIsValidVoiceHandle=Module["_getIsValidVoiceHandle"]=makeInvalidEarlyAccess("_getIsValidVoiceHandle");var _getActiveVoiceCount=Module["_getActiveVoiceCount"]=makeInvalidEarlyAccess("_getActiveVoiceCount");var _countAudioSource=Module["_countAudioSource"]=makeInvalidEarlyAccess("_countAudioSource");var _getVoiceCount=Module["_getVoiceCount"]=makeInvalidEarlyAccess("_getVoiceCount");var _getProtectVoice=Module["_getProtectVoice"]=makeInvalidEarlyAccess("_getProtectVoice");var _setProtectVoice=Module["_setProtectVoice"]=makeInvalidEarlyAccess("_setProtectVoice");var _setInaudibleBehavior=Module["_setInaudibleBehavior"]=makeInvalidEarlyAccess("_setInaudibleBehavior");var _getMaxActiveVoiceCount=Module["_getMaxActiveVoiceCount"]=makeInvalidEarlyAccess("_getMaxActiveVoiceCount");var _setMaxActiveVoiceCount=Module["_setMaxActiveVoiceCount"]=makeInvalidEarlyAccess("_setMaxActiveVoiceCount");var _createVoiceGroup=Module["_createVoiceGroup"]=makeInvalidEarlyAccess("_createVoiceGroup");var _destroyVoiceGroup=Module["_destroyVoiceGroup"]=makeInvalidEarlyAccess("_destroyVoiceGroup");var _addVoiceToGroup=Module["_addVoiceToGroup"]=makeInvalidEarlyAccess("_addVoiceToGroup");var _isVoiceGroup=Module["_isVoiceGroup"]=makeInvalidEarlyAccess("_isVoiceGroup");var _isVoiceGroupEmpty=Module["_isVoiceGroupEmpty"]=makeInvalidEarlyAccess("_isVoiceGroupEmpty");var _fadeGlobalVolume=Module["_fadeGlobalVolume"]=makeInvalidEarlyAccess("_fadeGlobalVolume");var _fadeVolume=Module["_fadeVolume"]=makeInvalidEarlyAccess("_fadeVolume");var _fadePan=Module["_fadePan"]=makeInvalidEarlyAccess("_fadePan");var _fadeRelativePlaySpeed=Module["_fadeRelativePlaySpeed"]=makeInvalidEarlyAccess("_fadeRelativePlaySpeed");var _schedulePause=Module["_schedulePause"]=makeInvalidEarlyAccess("_schedulePause");var _scheduleStop=Module["_scheduleStop"]=makeInvalidEarlyAccess("_scheduleStop");var _oscillateVolume=Module["_oscillateVolume"]=makeInvalidEarlyAccess("_oscillateVolume");var _oscillatePan=Module["_oscillatePan"]=makeInvalidEarlyAccess("_oscillatePan");var _oscillateRelativePlaySpeed=Module["_oscillateRelativePlaySpeed"]=makeInvalidEarlyAccess("_oscillateRelativePlaySpeed");var _oscillateGlobalVolume=Module["_oscillateGlobalVolume"]=makeInvalidEarlyAccess("_oscillateGlobalVolume");var _isFilterActive=Module["_isFilterActive"]=makeInvalidEarlyAccess("_isFilterActive");var _getFilterParamNames=Module["_getFilterParamNames"]=makeInvalidEarlyAccess("_getFilterParamNames");var _addFilter=Module["_addFilter"]=makeInvalidEarlyAccess("_addFilter");var _removeFilter=Module["_removeFilter"]=makeInvalidEarlyAccess("_removeFilter");var _setFilterParams=Module["_setFilterParams"]=makeInvalidEarlyAccess("_setFilterParams");var _getFilterParams=Module["_getFilterParams"]=makeInvalidEarlyAccess("_getFilterParams");var _fadeFilterParameter=Module["_fadeFilterParameter"]=makeInvalidEarlyAccess("_fadeFilterParameter");var _oscillateFilterParameter=Module["_oscillateFilterParameter"]=makeInvalidEarlyAccess("_oscillateFilterParameter");var _play3d=Module["_play3d"]=makeInvalidEarlyAccess("_play3d");var _play3dWithLoopPoints=Module["_play3dWithLoopPoints"]=makeInvalidEarlyAccess("_play3dWithLoopPoints");var _play3dClocked=Module["_play3dClocked"]=makeInvalidEarlyAccess("_play3dClocked");var _set3dSoundSpeed=Module["_set3dSoundSpeed"]=makeInvalidEarlyAccess("_set3dSoundSpeed");var _get3dSoundSpeed=Module["_get3dSoundSpeed"]=makeInvalidEarlyAccess("_get3dSoundSpeed");var _set3dListenerParameters=Module["_set3dListenerParameters"]=makeInvalidEarlyAccess("_set3dListenerParameters");var _set3dListenerPosition=Module["_set3dListenerPosition"]=makeInvalidEarlyAccess("_set3dListenerPosition");var _set3dListenerAt=Module["_set3dListenerAt"]=makeInvalidEarlyAccess("_set3dListenerAt");var _set3dListenerUp=Module["_set3dListenerUp"]=makeInvalidEarlyAccess("_set3dListenerUp");var _set3dListenerVelocity=Module["_set3dListenerVelocity"]=makeInvalidEarlyAccess("_set3dListenerVelocity");var _set3dSourceParameters=Module["_set3dSourceParameters"]=makeInvalidEarlyAccess("_set3dSourceParameters");var _set3dSourcePosition=Module["_set3dSourcePosition"]=makeInvalidEarlyAccess("_set3dSourcePosition");var _set3dSourceVelocity=Module["_set3dSourceVelocity"]=makeInvalidEarlyAccess("_set3dSourceVelocity");var _set3dSourceMinMaxDistance=Module["_set3dSourceMinMaxDistance"]=makeInvalidEarlyAccess("_set3dSourceMinMaxDistance");var _set3dSourceAttenuation=Module["_set3dSourceAttenuation"]=makeInvalidEarlyAccess("_set3dSourceAttenuation");var _set3dSourceDopplerFactor=Module["_set3dSourceDopplerFactor"]=makeInvalidEarlyAccess("_set3dSourceDopplerFactor");var _readSamplesFromFile=Module["_readSamplesFromFile"]=makeInvalidEarlyAccess("_readSamplesFromFile");var _readSamplesFromMem=Module["_readSamplesFromMem"]=makeInvalidEarlyAccess("_readSamplesFromMem");var _createBus=Module["_createBus"]=makeInvalidEarlyAccess("_createBus");var _destroyBus=Module["_destroyBus"]=makeInvalidEarlyAccess("_destroyBus");var _busPlayOnEngine=Module["_busPlayOnEngine"]=makeInvalidEarlyAccess("_busPlayOnEngine");var _busSetChannels=Module["_busSetChannels"]=makeInvalidEarlyAccess("_busSetChannels");var _busSetVisualizationEnable=Module["_busSetVisualizationEnable"]=makeInvalidEarlyAccess("_busSetVisualizationEnable");var _busCalcFFT=Module["_busCalcFFT"]=makeInvalidEarlyAccess("_busCalcFFT");var _busGetWave=Module["_busGetWave"]=makeInvalidEarlyAccess("_busGetWave");var _busGetApproximateVolume=Module["_busGetApproximateVolume"]=makeInvalidEarlyAccess("_busGetApproximateVolume");var _busAnnexSound=Module["_busAnnexSound"]=makeInvalidEarlyAccess("_busAnnexSound");var _busGetActiveVoiceCount=Module["_busGetActiveVoiceCount"]=makeInvalidEarlyAccess("_busGetActiveVoiceCount");var _memcpy=Module["_memcpy"]=makeInvalidEarlyAccess("_memcpy");var _memset=Module["_memset"]=makeInvalidEarlyAccess("_memset");var _fflush=makeInvalidEarlyAccess("_fflush");var _strerror=makeInvalidEarlyAccess("_strerror");var _emscripten_stack_get_end=makeInvalidEarlyAccess("_emscripten_stack_get_end");var _emscripten_stack_get_base=makeInvalidEarlyAccess("_emscripten_stack_get_base");var _sbrk=makeInvalidEarlyAccess("_sbrk");var _emscripten_get_sbrk_ptr=makeInvalidEarlyAccess("_emscripten_get_sbrk_ptr");var _emscripten_stack_init=makeInvalidEarlyAccess("_emscripten_stack_init");var _emscripten_stack_get_free=makeInvalidEarlyAccess("_emscripten_stack_get_free");var __emscripten_stack_restore=makeInvalidEarlyAccess("__emscripten_stack_restore");var __emscripten_stack_alloc=makeInvalidEarlyAccess("__emscripten_stack_alloc");var _emscripten_stack_get_current=makeInvalidEarlyAccess("_emscripten_stack_get_current");var memory=makeInvalidEarlyAccess("memory");var __indirect_function_table=makeInvalidEarlyAccess("__indirect_function_table");var wasmMemory=makeInvalidEarlyAccess("wasmMemory");function assignWasmExports(wasmExports){assert(typeof wasmExports["malloc"]!="undefined","missing Wasm export: malloc");assert(typeof wasmExports["free"]!="undefined","missing Wasm export: free");assert(typeof wasmExports["ma_device__on_notification_unlocked"]!="undefined","missing Wasm export: ma_device__on_notification_unlocked");assert(typeof wasmExports["ma_malloc_emscripten"]!="undefined","missing Wasm export: ma_malloc_emscripten");assert(typeof wasmExports["ma_free_emscripten"]!="undefined","missing Wasm export: ma_free_emscripten");assert(typeof wasmExports["ma_device_process_pcm_frames_capture__webaudio"]!="undefined","missing Wasm export: ma_device_process_pcm_frames_capture__webaudio");assert(typeof wasmExports["ma_device_process_pcm_frames_playback__webaudio"]!="undefined","missing Wasm export: ma_device_process_pcm_frames_playback__webaudio");assert(typeof wasmExports["createWorkerInWasm"]!="undefined","missing Wasm export: createWorkerInWasm");assert(typeof wasmExports["sendToWorker"]!="undefined","missing Wasm export: sendToWorker");assert(typeof wasmExports["nativeFree"]!="undefined","missing Wasm export: nativeFree");assert(typeof wasmExports["voiceEndedCallback"]!="undefined","missing Wasm export: voiceEndedCallback");assert(typeof wasmExports["setDartEventCallback"]!="undefined","missing Wasm export: setDartEventCallback");assert(typeof wasmExports["clearDartCallbackRegistrations"]!="undefined","missing Wasm export: clearDartCallbackRegistrations");assert(typeof wasmExports["startMixerCapture"]!="undefined","missing Wasm export: startMixerCapture");assert(typeof wasmExports["stopMixerCapture"]!="undefined","missing Wasm export: stopMixerCapture");assert(typeof wasmExports["isMixerCaptureRunning"]!="undefined","missing Wasm export: isMixerCaptureRunning");assert(typeof wasmExports["getMixerCaptureBufferPointer"]!="undefined","missing Wasm export: getMixerCaptureBufferPointer");assert(typeof wasmExports["getMixerCaptureBufferSize"]!="undefined","missing Wasm export: getMixerCaptureBufferSize");assert(typeof wasmExports["getMixerCaptureAvailableBytes"]!="undefined","missing Wasm export: getMixerCaptureAvailableBytes");assert(typeof wasmExports["getMixerCaptureReadOffset"]!="undefined","missing Wasm export: getMixerCaptureReadOffset");assert(typeof wasmExports["advanceMixerCaptureReadPosition"]!="undefined","missing Wasm export: advanceMixerCaptureReadPosition");assert(typeof wasmExports["getMixerOutputWavHeader"]!="undefined","missing Wasm export: getMixerOutputWavHeader");assert(typeof wasmExports["setMixerOutputCallback"]!="undefined","missing Wasm export: setMixerOutputCallback");assert(typeof wasmExports["areXiphLibsAvailable"]!="undefined","missing Wasm export: areXiphLibsAvailable");assert(typeof wasmExports["initEngine"]!="undefined","missing Wasm export: initEngine");assert(typeof wasmExports["setAndroidAAudioAttributes"]!="undefined","missing Wasm export: setAndroidAAudioAttributes");assert(typeof wasmExports["listPlaybackDevices"]!="undefined","missing Wasm export: listPlaybackDevices");assert(typeof wasmExports["changeDevice"]!="undefined","missing Wasm export: changeDevice");assert(typeof wasmExports["freeListPlaybackDevices"]!="undefined","missing Wasm export: freeListPlaybackDevices");assert(typeof wasmExports["dispose"]!="undefined","missing Wasm export: dispose");assert(typeof wasmExports["prepareEngineInit"]!="undefined","missing Wasm export: prepareEngineInit");assert(typeof wasmExports["requestEngineShutdown"]!="undefined","missing Wasm export: requestEngineShutdown");assert(typeof wasmExports["isInited"]!="undefined","missing Wasm export: isInited");assert(typeof wasmExports["loadFile"]!="undefined","missing Wasm export: loadFile");assert(typeof wasmExports["loadMem"]!="undefined","missing Wasm export: loadMem");assert(typeof wasmExports["setBufferStream"]!="undefined","missing Wasm export: setBufferStream");assert(typeof wasmExports["resetBufferStream"]!="undefined","missing Wasm export: resetBufferStream");assert(typeof wasmExports["getStreamTimeConsumed"]!="undefined","missing Wasm export: getStreamTimeConsumed");assert(typeof wasmExports["setBufferIcyMetaInt"]!="undefined","missing Wasm export: setBufferIcyMetaInt");assert(typeof wasmExports["setPullBufferStream"]!="undefined","missing Wasm export: setPullBufferStream");assert(typeof wasmExports["resetPullBufferStream"]!="undefined","missing Wasm export: resetPullBufferStream");assert(typeof wasmExports["addPullBufferDataStream"]!="undefined","missing Wasm export: addPullBufferDataStream");assert(typeof wasmExports["getPullBufferTimeRange"]!="undefined","missing Wasm export: getPullBufferTimeRange");assert(typeof wasmExports["addAudioDataStream"]!="undefined","missing Wasm export: addAudioDataStream");assert(typeof wasmExports["setDataIsEnded"]!="undefined","missing Wasm export: setDataIsEnded");assert(typeof wasmExports["getBufferSize"]!="undefined","missing Wasm export: getBufferSize");assert(typeof wasmExports["loadWaveform"]!="undefined","missing Wasm export: loadWaveform");assert(typeof wasmExports["setWaveformScale"]!="undefined","missing Wasm export: setWaveformScale");assert(typeof wasmExports["setWaveformDetune"]!="undefined","missing Wasm export: setWaveformDetune");assert(typeof wasmExports["setWaveformFreq"]!="undefined","missing Wasm export: setWaveformFreq");assert(typeof wasmExports["setSuperWave"]!="undefined","missing Wasm export: setSuperWave");assert(typeof wasmExports["setWaveform"]!="undefined","missing Wasm export: setWaveform");assert(typeof wasmExports["speechText"]!="undefined","missing Wasm export: speechText");assert(typeof wasmExports["pauseSwitch"]!="undefined","missing Wasm export: pauseSwitch");assert(typeof wasmExports["setPause"]!="undefined","missing Wasm export: setPause");assert(typeof wasmExports["getPause"]!="undefined","missing Wasm export: getPause");assert(typeof wasmExports["setRelativePlaySpeed"]!="undefined","missing Wasm export: setRelativePlaySpeed");assert(typeof wasmExports["getRelativePlaySpeed"]!="undefined","missing Wasm export: getRelativePlaySpeed");assert(typeof wasmExports["getApproximateVolume"]!="undefined","missing Wasm export: getApproximateVolume");assert(typeof wasmExports["play"]!="undefined","missing Wasm export: play");assert(typeof wasmExports["playWithLoopPoints"]!="undefined","missing Wasm export: playWithLoopPoints");assert(typeof wasmExports["playClocked"]!="undefined","missing Wasm export: playClocked");assert(typeof wasmExports["setDelaySamples"]!="undefined","missing Wasm export: setDelaySamples");assert(typeof wasmExports["getStreamTime"]!="undefined","missing Wasm export: getStreamTime");assert(typeof wasmExports["resetStreamTime"]!="undefined","missing Wasm export: resetStreamTime");assert(typeof wasmExports["getEngineTime"]!="undefined","missing Wasm export: getEngineTime");assert(typeof wasmExports["playScheduled"]!="undefined","missing Wasm export: playScheduled");assert(typeof wasmExports["stopScheduled"]!="undefined","missing Wasm export: stopScheduled");assert(typeof wasmExports["fadeScheduled"]!="undefined","missing Wasm export: fadeScheduled");assert(typeof wasmExports["stop"]!="undefined","missing Wasm export: stop");assert(typeof wasmExports["disposeSound"]!="undefined","missing Wasm export: disposeSound");assert(typeof wasmExports["disposeAllSound"]!="undefined","missing Wasm export: disposeAllSound");assert(typeof wasmExports["getLooping"]!="undefined","missing Wasm export: getLooping");assert(typeof wasmExports["setLooping"]!="undefined","missing Wasm export: setLooping");assert(typeof wasmExports["getLoopPoint"]!="undefined","missing Wasm export: getLoopPoint");assert(typeof wasmExports["setLoopPoint"]!="undefined","missing Wasm export: setLoopPoint");assert(typeof wasmExports["getLoopEndPoint"]!="undefined","missing Wasm export: getLoopEndPoint");assert(typeof wasmExports["setLoopEndPoint"]!="undefined","missing Wasm export: setLoopEndPoint");assert(typeof wasmExports["setVisualizationEnabled"]!="undefined","missing Wasm export: setVisualizationEnabled");assert(typeof wasmExports["getVisualizationEnabled"]!="undefined","missing Wasm export: getVisualizationEnabled");assert(typeof wasmExports["getFft"]!="undefined","missing Wasm export: getFft");assert(typeof wasmExports["getWave"]!="undefined","missing Wasm export: getWave");assert(typeof wasmExports["setFftSmoothing"]!="undefined","missing Wasm export: setFftSmoothing");assert(typeof wasmExports["getAudioTexture"]!="undefined","missing Wasm export: getAudioTexture");assert(typeof wasmExports["getAudioTexture2D"]!="undefined","missing Wasm export: getAudioTexture2D");assert(typeof wasmExports["getTextureValue"]!="undefined","missing Wasm export: getTextureValue");assert(typeof wasmExports["getLength"]!="undefined","missing Wasm export: getLength");assert(typeof wasmExports["seek"]!="undefined","missing Wasm export: seek");assert(typeof wasmExports["getPosition"]!="undefined","missing Wasm export: getPosition");assert(typeof wasmExports["getGlobalVolume"]!="undefined","missing Wasm export: getGlobalVolume");assert(typeof wasmExports["setGlobalVolume"]!="undefined","missing Wasm export: setGlobalVolume");assert(typeof wasmExports["getVolume"]!="undefined","missing Wasm export: getVolume");assert(typeof wasmExports["setVolume"]!="undefined","missing Wasm export: setVolume");assert(typeof wasmExports["getPan"]!="undefined","missing Wasm export: getPan");assert(typeof wasmExports["setPan"]!="undefined","missing Wasm export: setPan");assert(typeof wasmExports["setPanAbsolute"]!="undefined","missing Wasm export: setPanAbsolute");assert(typeof wasmExports["getIsValidVoiceHandle"]!="undefined","missing Wasm export: getIsValidVoiceHandle");assert(typeof wasmExports["getActiveVoiceCount"]!="undefined","missing Wasm export: getActiveVoiceCount");assert(typeof wasmExports["countAudioSource"]!="undefined","missing Wasm export: countAudioSource");assert(typeof wasmExports["getVoiceCount"]!="undefined","missing Wasm export: getVoiceCount");assert(typeof wasmExports["getProtectVoice"]!="undefined","missing Wasm export: getProtectVoice");assert(typeof wasmExports["setProtectVoice"]!="undefined","missing Wasm export: setProtectVoice");assert(typeof wasmExports["setInaudibleBehavior"]!="undefined","missing Wasm export: setInaudibleBehavior");assert(typeof wasmExports["getMaxActiveVoiceCount"]!="undefined","missing Wasm export: getMaxActiveVoiceCount");assert(typeof wasmExports["setMaxActiveVoiceCount"]!="undefined","missing Wasm export: setMaxActiveVoiceCount");assert(typeof wasmExports["createVoiceGroup"]!="undefined","missing Wasm export: createVoiceGroup");assert(typeof wasmExports["destroyVoiceGroup"]!="undefined","missing Wasm export: destroyVoiceGroup");assert(typeof wasmExports["addVoiceToGroup"]!="undefined","missing Wasm export: addVoiceToGroup");assert(typeof wasmExports["isVoiceGroup"]!="undefined","missing Wasm export: isVoiceGroup");assert(typeof wasmExports["isVoiceGroupEmpty"]!="undefined","missing Wasm export: isVoiceGroupEmpty");assert(typeof wasmExports["fadeGlobalVolume"]!="undefined","missing Wasm export: fadeGlobalVolume");assert(typeof wasmExports["fadeVolume"]!="undefined","missing Wasm export: fadeVolume");assert(typeof wasmExports["fadePan"]!="undefined","missing Wasm export: fadePan");assert(typeof wasmExports["fadeRelativePlaySpeed"]!="undefined","missing Wasm export: fadeRelativePlaySpeed");assert(typeof wasmExports["schedulePause"]!="undefined","missing Wasm export: schedulePause");assert(typeof wasmExports["scheduleStop"]!="undefined","missing Wasm export: scheduleStop");assert(typeof wasmExports["oscillateVolume"]!="undefined","missing Wasm export: oscillateVolume");assert(typeof wasmExports["oscillatePan"]!="undefined","missing Wasm export: oscillatePan");assert(typeof wasmExports["oscillateRelativePlaySpeed"]!="undefined","missing Wasm export: oscillateRelativePlaySpeed");assert(typeof wasmExports["oscillateGlobalVolume"]!="undefined","missing Wasm export: oscillateGlobalVolume");assert(typeof wasmExports["isFilterActive"]!="undefined","missing Wasm export: isFilterActive");assert(typeof wasmExports["getFilterParamNames"]!="undefined","missing Wasm export: getFilterParamNames");assert(typeof wasmExports["addFilter"]!="undefined","missing Wasm export: addFilter");assert(typeof wasmExports["removeFilter"]!="undefined","missing Wasm export: removeFilter");assert(typeof wasmExports["setFilterParams"]!="undefined","missing Wasm export: setFilterParams");assert(typeof wasmExports["getFilterParams"]!="undefined","missing Wasm export: getFilterParams");assert(typeof wasmExports["fadeFilterParameter"]!="undefined","missing Wasm export: fadeFilterParameter");assert(typeof wasmExports["oscillateFilterParameter"]!="undefined","missing Wasm export: oscillateFilterParameter");assert(typeof wasmExports["play3d"]!="undefined","missing Wasm export: play3d");assert(typeof wasmExports["play3dWithLoopPoints"]!="undefined","missing Wasm export: play3dWithLoopPoints");assert(typeof wasmExports["play3dClocked"]!="undefined","missing Wasm export: play3dClocked");assert(typeof wasmExports["set3dSoundSpeed"]!="undefined","missing Wasm export: set3dSoundSpeed");assert(typeof wasmExports["get3dSoundSpeed"]!="undefined","missing Wasm export: get3dSoundSpeed");assert(typeof wasmExports["set3dListenerParameters"]!="undefined","missing Wasm export: set3dListenerParameters");assert(typeof wasmExports["set3dListenerPosition"]!="undefined","missing Wasm export: set3dListenerPosition");assert(typeof wasmExports["set3dListenerAt"]!="undefined","missing Wasm export: set3dListenerAt");assert(typeof wasmExports["set3dListenerUp"]!="undefined","missing Wasm export: set3dListenerUp");assert(typeof wasmExports["set3dListenerVelocity"]!="undefined","missing Wasm export: set3dListenerVelocity");assert(typeof wasmExports["set3dSourceParameters"]!="undefined","missing Wasm export: set3dSourceParameters");assert(typeof wasmExports["set3dSourcePosition"]!="undefined","missing Wasm export: set3dSourcePosition");assert(typeof wasmExports["set3dSourceVelocity"]!="undefined","missing Wasm export: set3dSourceVelocity");assert(typeof wasmExports["set3dSourceMinMaxDistance"]!="undefined","missing Wasm export: set3dSourceMinMaxDistance");assert(typeof wasmExports["set3dSourceAttenuation"]!="undefined","missing Wasm export: set3dSourceAttenuation");assert(typeof wasmExports["set3dSourceDopplerFactor"]!="undefined","missing Wasm export: set3dSourceDopplerFactor");assert(typeof wasmExports["readSamplesFromFile"]!="undefined","missing Wasm export: readSamplesFromFile");assert(typeof wasmExports["readSamplesFromMem"]!="undefined","missing Wasm export: readSamplesFromMem");assert(typeof wasmExports["createBus"]!="undefined","missing Wasm export: createBus");assert(typeof wasmExports["destroyBus"]!="undefined","missing Wasm export: destroyBus");assert(typeof wasmExports["busPlayOnEngine"]!="undefined","missing Wasm export: busPlayOnEngine");assert(typeof wasmExports["busSetChannels"]!="undefined","missing Wasm export: busSetChannels");assert(typeof wasmExports["busSetVisualizationEnable"]!="undefined","missing Wasm export: busSetVisualizationEnable");assert(typeof wasmExports["busCalcFFT"]!="undefined","missing Wasm export: busCalcFFT");assert(typeof wasmExports["busGetWave"]!="undefined","missing Wasm export: busGetWave");assert(typeof wasmExports["busGetApproximateVolume"]!="undefined","missing Wasm export: busGetApproximateVolume");assert(typeof wasmExports["busAnnexSound"]!="undefined","missing Wasm export: busAnnexSound");assert(typeof wasmExports["busGetActiveVoiceCount"]!="undefined","missing Wasm export: busGetActiveVoiceCount");assert(typeof wasmExports["memcpy"]!="undefined","missing Wasm export: memcpy");assert(typeof wasmExports["memset"]!="undefined","missing Wasm export: memset");assert(typeof wasmExports["fflush"]!="undefined","missing Wasm export: fflush");assert(typeof wasmExports["strerror"]!="undefined","missing Wasm export: strerror");assert(typeof wasmExports["emscripten_stack_get_end"]!="undefined","missing Wasm export: emscripten_stack_get_end");assert(typeof wasmExports["emscripten_stack_get_base"]!="undefined","missing Wasm export: emscripten_stack_get_base");assert(typeof wasmExports["sbrk"]!="undefined","missing Wasm export: sbrk");assert(typeof wasmExports["emscripten_get_sbrk_ptr"]!="undefined","missing Wasm export: emscripten_get_sbrk_ptr");assert(typeof wasmExports["emscripten_stack_init"]!="undefined","missing Wasm export: emscripten_stack_init");assert(typeof wasmExports["emscripten_stack_get_free"]!="undefined","missing Wasm export: emscripten_stack_get_free");assert(typeof wasmExports["_emscripten_stack_restore"]!="undefined","missing Wasm export: _emscripten_stack_restore");assert(typeof wasmExports["_emscripten_stack_alloc"]!="undefined","missing Wasm export: _emscripten_stack_alloc");assert(typeof wasmExports["emscripten_stack_get_current"]!="undefined","missing Wasm export: emscripten_stack_get_current");assert(typeof wasmExports["memory"]!="undefined","missing Wasm export: memory");assert(typeof wasmExports["__indirect_function_table"]!="undefined","missing Wasm export: __indirect_function_table");_malloc=Module["_malloc"]=createExportWrapper("malloc",1);_free=Module["_free"]=createExportWrapper("free",1);_ma_device__on_notification_unlocked=Module["_ma_device__on_notification_unlocked"]=createExportWrapper("ma_device__on_notification_unlocked",1);_ma_malloc_emscripten=Module["_ma_malloc_emscripten"]=createExportWrapper("ma_malloc_emscripten",2);_ma_free_emscripten=Module["_ma_free_emscripten"]=createExportWrapper("ma_free_emscripten",2);_ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=createExportWrapper("ma_device_process_pcm_frames_capture__webaudio",3);_ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=createExportWrapper("ma_device_process_pcm_frames_playback__webaudio",3);_createWorkerInWasm=Module["_createWorkerInWasm"]=createExportWrapper("createWorkerInWasm",0);_sendToWorker=Module["_sendToWorker"]=createExportWrapper("sendToWorker",2);_nativeFree=Module["_nativeFree"]=createExportWrapper("nativeFree",1);_voiceEndedCallback=Module["_voiceEndedCallback"]=createExportWrapper("voiceEndedCallback",1);_setDartEventCallback=Module["_setDartEventCallback"]=createExportWrapper("setDartEventCallback",3);_clearDartCallbackRegistrations=Module["_clearDartCallbackRegistrations"]=createExportWrapper("clearDartCallbackRegistrations",0);_startMixerCapture=Module["_startMixerCapture"]=createExportWrapper("startMixerCapture",6);_stopMixerCapture=Module["_stopMixerCapture"]=createExportWrapper("stopMixerCapture",0);_isMixerCaptureRunning=Module["_isMixerCaptureRunning"]=createExportWrapper("isMixerCaptureRunning",0);_getMixerCaptureBufferPointer=Module["_getMixerCaptureBufferPointer"]=createExportWrapper("getMixerCaptureBufferPointer",0);_getMixerCaptureBufferSize=Module["_getMixerCaptureBufferSize"]=createExportWrapper("getMixerCaptureBufferSize",0);_getMixerCaptureAvailableBytes=Module["_getMixerCaptureAvailableBytes"]=createExportWrapper("getMixerCaptureAvailableBytes",0);_getMixerCaptureReadOffset=Module["_getMixerCaptureReadOffset"]=createExportWrapper("getMixerCaptureReadOffset",0);_advanceMixerCaptureReadPosition=Module["_advanceMixerCaptureReadPosition"]=createExportWrapper("advanceMixerCaptureReadPosition",1);_getMixerOutputWavHeader=Module["_getMixerOutputWavHeader"]=createExportWrapper("getMixerOutputWavHeader",0);_setMixerOutputCallback=Module["_setMixerOutputCallback"]=createExportWrapper("setMixerOutputCallback",1);_areXiphLibsAvailable=Module["_areXiphLibsAvailable"]=createExportWrapper("areXiphLibsAvailable",0);_initEngine=Module["_initEngine"]=createExportWrapper("initEngine",5);_setAndroidAAudioAttributes=Module["_setAndroidAAudioAttributes"]=createExportWrapper("setAndroidAAudioAttributes",1);_listPlaybackDevices=Module["_listPlaybackDevices"]=createExportWrapper("listPlaybackDevices",4);_changeDevice=Module["_changeDevice"]=createExportWrapper("changeDevice",1);_freeListPlaybackDevices=Module["_freeListPlaybackDevices"]=createExportWrapper("freeListPlaybackDevices",4);_dispose=Module["_dispose"]=createExportWrapper("dispose",0);_prepareEngineInit=Module["_prepareEngineInit"]=createExportWrapper("prepareEngineInit",0);_requestEngineShutdown=Module["_requestEngineShutdown"]=createExportWrapper("requestEngineShutdown",0);_isInited=Module["_isInited"]=createExportWrapper("isInited",0);_loadFile=Module["_loadFile"]=createExportWrapper("loadFile",3);_loadMem=Module["_loadMem"]=createExportWrapper("loadMem",5);_setBufferStream=Module["_setBufferStream"]=createExportWrapper("setBufferStream",9);_resetBufferStream=Module["_resetBufferStream"]=createExportWrapper("resetBufferStream",1);_getStreamTimeConsumed=Module["_getStreamTimeConsumed"]=createExportWrapper("getStreamTimeConsumed",2);_setBufferIcyMetaInt=Module["_setBufferIcyMetaInt"]=createExportWrapper("setBufferIcyMetaInt",2);_setPullBufferStream=Module["_setPullBufferStream"]=createExportWrapper("setPullBufferStream",11);_resetPullBufferStream=Module["_resetPullBufferStream"]=createExportWrapper("resetPullBufferStream",1);_addPullBufferDataStream=Module["_addPullBufferDataStream"]=createExportWrapper("addPullBufferDataStream",4);_getPullBufferTimeRange=Module["_getPullBufferTimeRange"]=createExportWrapper("getPullBufferTimeRange",3);_addAudioDataStream=Module["_addAudioDataStream"]=createExportWrapper("addAudioDataStream",3);_setDataIsEnded=Module["_setDataIsEnded"]=createExportWrapper("setDataIsEnded",1);_getBufferSize=Module["_getBufferSize"]=createExportWrapper("getBufferSize",2);_loadWaveform=Module["_loadWaveform"]=createExportWrapper("loadWaveform",5);_setWaveformScale=Module["_setWaveformScale"]=createExportWrapper("setWaveformScale",2);_setWaveformDetune=Module["_setWaveformDetune"]=createExportWrapper("setWaveformDetune",2);_setWaveformFreq=Module["_setWaveformFreq"]=createExportWrapper("setWaveformFreq",2);_setSuperWave=Module["_setSuperWave"]=createExportWrapper("setSuperWave",2);_setWaveform=Module["_setWaveform"]=createExportWrapper("setWaveform",2);_speechText=Module["_speechText"]=createExportWrapper("speechText",2);_pauseSwitch=Module["_pauseSwitch"]=createExportWrapper("pauseSwitch",1);_setPause=Module["_setPause"]=createExportWrapper("setPause",2);_getPause=Module["_getPause"]=createExportWrapper("getPause",1);_setRelativePlaySpeed=Module["_setRelativePlaySpeed"]=createExportWrapper("setRelativePlaySpeed",2);_getRelativePlaySpeed=Module["_getRelativePlaySpeed"]=createExportWrapper("getRelativePlaySpeed",1);_getApproximateVolume=Module["_getApproximateVolume"]=createExportWrapper("getApproximateVolume",1);_play=Module["_play"]=createExportWrapper("play",8);_playWithLoopPoints=Module["_playWithLoopPoints"]=createExportWrapper("playWithLoopPoints",9);_playClocked=Module["_playClocked"]=createExportWrapper("playClocked",6);_setDelaySamples=Module["_setDelaySamples"]=createExportWrapper("setDelaySamples",2);_getStreamTime=Module["_getStreamTime"]=createExportWrapper("getStreamTime",1);_resetStreamTime=Module["_resetStreamTime"]=createExportWrapper("resetStreamTime",0);_getEngineTime=Module["_getEngineTime"]=createExportWrapper("getEngineTime",0);_playScheduled=Module["_playScheduled"]=createExportWrapper("playScheduled",7);_stopScheduled=Module["_stopScheduled"]=createExportWrapper("stopScheduled",2);_fadeScheduled=Module["_fadeScheduled"]=createExportWrapper("fadeScheduled",5);_stop=Module["_stop"]=createExportWrapper("stop",1);_disposeSound=Module["_disposeSound"]=createExportWrapper("disposeSound",1);_disposeAllSound=Module["_disposeAllSound"]=createExportWrapper("disposeAllSound",0);_getLooping=Module["_getLooping"]=createExportWrapper("getLooping",1);_setLooping=Module["_setLooping"]=createExportWrapper("setLooping",2);_getLoopPoint=Module["_getLoopPoint"]=createExportWrapper("getLoopPoint",1);_setLoopPoint=Module["_setLoopPoint"]=createExportWrapper("setLoopPoint",2);_getLoopEndPoint=Module["_getLoopEndPoint"]=createExportWrapper("getLoopEndPoint",1);_setLoopEndPoint=Module["_setLoopEndPoint"]=createExportWrapper("setLoopEndPoint",2);_setVisualizationEnabled=Module["_setVisualizationEnabled"]=createExportWrapper("setVisualizationEnabled",1);_getVisualizationEnabled=Module["_getVisualizationEnabled"]=createExportWrapper("getVisualizationEnabled",0);_getFft=Module["_getFft"]=createExportWrapper("getFft",2);_getWave=Module["_getWave"]=createExportWrapper("getWave",2);_setFftSmoothing=Module["_setFftSmoothing"]=createExportWrapper("setFftSmoothing",1);_getAudioTexture=Module["_getAudioTexture"]=createExportWrapper("getAudioTexture",2);_getAudioTexture2D=Module["_getAudioTexture2D"]=createExportWrapper("getAudioTexture2D",2);_getTextureValue=Module["_getTextureValue"]=createExportWrapper("getTextureValue",2);_getLength=Module["_getLength"]=createExportWrapper("getLength",1);_seek=Module["_seek"]=createExportWrapper("seek",2);_getPosition=Module["_getPosition"]=createExportWrapper("getPosition",1);_getGlobalVolume=Module["_getGlobalVolume"]=createExportWrapper("getGlobalVolume",0);_setGlobalVolume=Module["_setGlobalVolume"]=createExportWrapper("setGlobalVolume",1);_getVolume=Module["_getVolume"]=createExportWrapper("getVolume",1);_setVolume=Module["_setVolume"]=createExportWrapper("setVolume",2);_getPan=Module["_getPan"]=createExportWrapper("getPan",1);_setPan=Module["_setPan"]=createExportWrapper("setPan",2);_setPanAbsolute=Module["_setPanAbsolute"]=createExportWrapper("setPanAbsolute",3);_getIsValidVoiceHandle=Module["_getIsValidVoiceHandle"]=createExportWrapper("getIsValidVoiceHandle",1);_getActiveVoiceCount=Module["_getActiveVoiceCount"]=createExportWrapper("getActiveVoiceCount",0);_countAudioSource=Module["_countAudioSource"]=createExportWrapper("countAudioSource",1);_getVoiceCount=Module["_getVoiceCount"]=createExportWrapper("getVoiceCount",0);_getProtectVoice=Module["_getProtectVoice"]=createExportWrapper("getProtectVoice",1);_setProtectVoice=Module["_setProtectVoice"]=createExportWrapper("setProtectVoice",2);_setInaudibleBehavior=Module["_setInaudibleBehavior"]=createExportWrapper("setInaudibleBehavior",3);_getMaxActiveVoiceCount=Module["_getMaxActiveVoiceCount"]=createExportWrapper("getMaxActiveVoiceCount",0);_setMaxActiveVoiceCount=Module["_setMaxActiveVoiceCount"]=createExportWrapper("setMaxActiveVoiceCount",1);_createVoiceGroup=Module["_createVoiceGroup"]=createExportWrapper("createVoiceGroup",0);_destroyVoiceGroup=Module["_destroyVoiceGroup"]=createExportWrapper("destroyVoiceGroup",1);_addVoiceToGroup=Module["_addVoiceToGroup"]=createExportWrapper("addVoiceToGroup",2);_isVoiceGroup=Module["_isVoiceGroup"]=createExportWrapper("isVoiceGroup",1);_isVoiceGroupEmpty=Module["_isVoiceGroupEmpty"]=createExportWrapper("isVoiceGroupEmpty",1);_fadeGlobalVolume=Module["_fadeGlobalVolume"]=createExportWrapper("fadeGlobalVolume",2);_fadeVolume=Module["_fadeVolume"]=createExportWrapper("fadeVolume",3);_fadePan=Module["_fadePan"]=createExportWrapper("fadePan",3);_fadeRelativePlaySpeed=Module["_fadeRelativePlaySpeed"]=createExportWrapper("fadeRelativePlaySpeed",3);_schedulePause=Module["_schedulePause"]=createExportWrapper("schedulePause",2);_scheduleStop=Module["_scheduleStop"]=createExportWrapper("scheduleStop",2);_oscillateVolume=Module["_oscillateVolume"]=createExportWrapper("oscillateVolume",4);_oscillatePan=Module["_oscillatePan"]=createExportWrapper("oscillatePan",4);_oscillateRelativePlaySpeed=Module["_oscillateRelativePlaySpeed"]=createExportWrapper("oscillateRelativePlaySpeed",4);_oscillateGlobalVolume=Module["_oscillateGlobalVolume"]=createExportWrapper("oscillateGlobalVolume",3);_isFilterActive=Module["_isFilterActive"]=createExportWrapper("isFilterActive",4);_getFilterParamNames=Module["_getFilterParamNames"]=createExportWrapper("getFilterParamNames",3);_addFilter=Module["_addFilter"]=createExportWrapper("addFilter",3);_removeFilter=Module["_removeFilter"]=createExportWrapper("removeFilter",3);_setFilterParams=Module["_setFilterParams"]=createExportWrapper("setFilterParams",5);_getFilterParams=Module["_getFilterParams"]=createExportWrapper("getFilterParams",5);_fadeFilterParameter=Module["_fadeFilterParameter"]=createExportWrapper("fadeFilterParameter",6);_oscillateFilterParameter=Module["_oscillateFilterParameter"]=createExportWrapper("oscillateFilterParameter",7);_play3d=Module["_play3d"]=createExportWrapper("play3d",13);_play3dWithLoopPoints=Module["_play3dWithLoopPoints"]=createExportWrapper("play3dWithLoopPoints",14);_play3dClocked=Module["_play3dClocked"]=createExportWrapper("play3dClocked",11);_set3dSoundSpeed=Module["_set3dSoundSpeed"]=createExportWrapper("set3dSoundSpeed",1);_get3dSoundSpeed=Module["_get3dSoundSpeed"]=createExportWrapper("get3dSoundSpeed",0);_set3dListenerParameters=Module["_set3dListenerParameters"]=createExportWrapper("set3dListenerParameters",12);_set3dListenerPosition=Module["_set3dListenerPosition"]=createExportWrapper("set3dListenerPosition",3);_set3dListenerAt=Module["_set3dListenerAt"]=createExportWrapper("set3dListenerAt",3);_set3dListenerUp=Module["_set3dListenerUp"]=createExportWrapper("set3dListenerUp",3);_set3dListenerVelocity=Module["_set3dListenerVelocity"]=createExportWrapper("set3dListenerVelocity",3);_set3dSourceParameters=Module["_set3dSourceParameters"]=createExportWrapper("set3dSourceParameters",7);_set3dSourcePosition=Module["_set3dSourcePosition"]=createExportWrapper("set3dSourcePosition",4);_set3dSourceVelocity=Module["_set3dSourceVelocity"]=createExportWrapper("set3dSourceVelocity",4);_set3dSourceMinMaxDistance=Module["_set3dSourceMinMaxDistance"]=createExportWrapper("set3dSourceMinMaxDistance",3);_set3dSourceAttenuation=Module["_set3dSourceAttenuation"]=createExportWrapper("set3dSourceAttenuation",3);_set3dSourceDopplerFactor=Module["_set3dSourceDopplerFactor"]=createExportWrapper("set3dSourceDopplerFactor",2);_readSamplesFromFile=Module["_readSamplesFromFile"]=createExportWrapper("readSamplesFromFile",6);_readSamplesFromMem=Module["_readSamplesFromMem"]=createExportWrapper("readSamplesFromMem",7);_createBus=Module["_createBus"]=createExportWrapper("createBus",0);_destroyBus=Module["_destroyBus"]=createExportWrapper("destroyBus",1);_busPlayOnEngine=Module["_busPlayOnEngine"]=createExportWrapper("busPlayOnEngine",4);_busSetChannels=Module["_busSetChannels"]=createExportWrapper("busSetChannels",2);_busSetVisualizationEnable=Module["_busSetVisualizationEnable"]=createExportWrapper("busSetVisualizationEnable",2);_busCalcFFT=Module["_busCalcFFT"]=createExportWrapper("busCalcFFT",1);_busGetWave=Module["_busGetWave"]=createExportWrapper("busGetWave",1);_busGetApproximateVolume=Module["_busGetApproximateVolume"]=createExportWrapper("busGetApproximateVolume",2);_busAnnexSound=Module["_busAnnexSound"]=createExportWrapper("busAnnexSound",2);_busGetActiveVoiceCount=Module["_busGetActiveVoiceCount"]=createExportWrapper("busGetActiveVoiceCount",1);_memcpy=Module["_memcpy"]=createExportWrapper("memcpy",3);_memset=Module["_memset"]=createExportWrapper("memset",3);_fflush=createExportWrapper("fflush",1);_strerror=createExportWrapper("strerror",1);_emscripten_stack_get_end=wasmExports["emscripten_stack_get_end"];_emscripten_stack_get_base=wasmExports["emscripten_stack_get_base"];_sbrk=createExportWrapper("sbrk",1);_emscripten_get_sbrk_ptr=wasmExports["emscripten_get_sbrk_ptr"];_emscripten_stack_init=wasmExports["emscripten_stack_init"];_emscripten_stack_get_free=wasmExports["emscripten_stack_get_free"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmExports["__indirect_function_table"]}var wasmImports={__assert_fail:___assert_fail,__cxa_throw:___cxa_throw,__syscall_fcntl64:___syscall_fcntl64,__syscall_ioctl:___syscall_ioctl,__syscall_openat:___syscall_openat,_abort_js:__abort_js,_emscripten_log_formatted:__emscripten_log_formatted,_tzset_js:__tzset_js,alignfault,clock_time_get:_clock_time_get,emscripten_asm_const_async_on_main_thread:_emscripten_asm_const_async_on_main_thread,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,random_get:_random_get,segfault};var calledRun;function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}stackCheckInit();preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){assert(!calledRun);calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();consumedModuleProp("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(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}checkStackCookie()}function checkUnflushedContent(){var oldOut=out;var oldErr=err;var has=false;out=err=x=>{has=true};try{_fflush(0);for(var name of["stdout","stderr"]){var info=FS.analyzePath("/dev/"+name);if(!info)return;var stream=info.object;var rdev=stream.rdev;var tty=TTY.ttys[rdev];if(tty?.output?.length){has=true}}}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 Emscripten FAQ), or make sure to emit a newline when you printf etc.")}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}for(const prop of Object.keys(Module)){if(!(prop in moduleArg)){Object.defineProperty(moduleArg,prop,{configurable:true,get(){abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}})}} ;return moduleRtn}})();if(typeof exports==="object"&&typeof module==="object"){module.exports=Module_soloud;module.exports.default=Module_soloud}else if(typeof define==="function"&&define["amd"])define([],()=>Module_soloud); diff --git a/web/libflutter_soloud_plugin.wasm b/web/libflutter_soloud_plugin.wasm index f23fb3e2..a3184478 100755 Binary files a/web/libflutter_soloud_plugin.wasm and b/web/libflutter_soloud_plugin.wasm differ