closevector-hnswlib-wasm
Version:
typescript and wasm bindings for Hnswlib
1 lines • 1.19 MB
Source Map (JSON)
{"version":3,"file":"hnswlib-9ee4032d.mjs","sources":["../lib/hnswlib.mjs"],"sourcesContent":["\nvar hnswlib = (() => {\n var _scriptDir = import.meta.url;\n \n return (\nfunction(moduleArg = {}) {\n\n// include: shell.js\n// The Module object: Our interface to the outside world. We import\n// and export values on it. There are various ways Module can be used:\n// 1. Not defined. We create it here\n// 2. A function parameter, function(Module) { ..generated code.. }\n// 3. pre-run appended it, var Module = {}; ..generated code..\n// 4. External script tag defines var Module.\n// We need to check if Module already exists (e.g. case 3 above).\n// Substitution will be replaced with actual code on later stage of the build,\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\n// Note that if you want to run closure, and also to use Module\n// after the generated code, you will need to define var Module = {};\n// before the code. Then that object will be used in the code, and you\n// can continue to use Module afterwards as well.\nvar Module = moduleArg;\n\n// Set up the promise that indicates the Module is initialized\nvar readyPromiseResolve, readyPromiseReject;\nModule['ready'] = new Promise((resolve, reject) => {\n readyPromiseResolve = resolve;\n readyPromiseReject = reject;\n});\n[\"_main\",\"getExceptionMessage\",\"___get_exception_message\",\"_free\",\"___cpp_exception\",\"___cxa_increment_exception_refcount\",\"___cxa_decrement_exception_refcount\",\"___thrown_object_from_unwind_exception\",\"_memory\",\"_syncIdb_js\",\"___indirect_function_table\",\"__embind_initialize_bindings\",\"_fflush\",\"___start_em_js\",\"___stop_em_js\",\"___start_em_asm\",\"___stop_em_asm\",\"onRuntimeInitialized\"].forEach((prop) => {\n if (!Object.getOwnPropertyDescriptor(Module['ready'], prop)) {\n Object.defineProperty(Module['ready'], prop, {\n get: () => abort('You are getting ' + prop + ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js'),\n set: () => abort('You are setting ' + prop + ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js'),\n });\n }\n});\n\n// --pre-jses are emitted after the Module integration code, so that they can\n// refer to Module (if they choose; they can also define Module)\n\n\n// Sometimes an existing Module object exists with properties\n// meant to overwrite the default module functionality. Here\n// we collect those properties and reapply _after_ we configure\n// the current environment's defaults to avoid having to be so\n// defensive during initialization.\nvar moduleOverrides = Object.assign({}, Module);\n\nvar arguments_ = [];\nvar thisProgram = './this.program';\nvar quit_ = (status, toThrow) => {\n throw toThrow;\n};\n\n// Determine the runtime environment we are in. You can customize this by\n// setting the ENVIRONMENT setting at compile time (see settings.js).\n\nvar ENVIRONMENT_IS_WEB = true;\nvar ENVIRONMENT_IS_WORKER = false;\nvar ENVIRONMENT_IS_NODE = false;\nvar ENVIRONMENT_IS_SHELL = false;\n\nif (Module['ENVIRONMENT']) {\n throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)');\n}\n\n// `/` should be present at the end if `scriptDirectory` is not empty\nvar scriptDirectory = '';\nfunction locateFile(path) {\n if (Module['locateFile']) {\n return Module['locateFile'](path, scriptDirectory);\n }\n return scriptDirectory + path;\n}\n\n// Hooks that are implemented differently in different runtime environments.\nvar read_,\n readAsync,\n readBinary,\n setWindowTitle;\n\nif (ENVIRONMENT_IS_SHELL) {\n\n if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof importScripts == 'function') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');\n\n if (typeof read != 'undefined') {\n read_ = read;\n }\n\n readBinary = (f) => {\n if (typeof readbuffer == 'function') {\n return new Uint8Array(readbuffer(f));\n }\n let data = read(f, 'binary');\n assert(typeof data == 'object');\n return data;\n };\n\n readAsync = (f, onload, onerror) => {\n setTimeout(() => onload(readBinary(f)));\n };\n\n if (typeof clearTimeout == 'undefined') {\n globalThis.clearTimeout = (id) => {};\n }\n\n if (typeof setTimeout == 'undefined') {\n // spidermonkey lacks setTimeout but we use it above in readAsync.\n globalThis.setTimeout = (f) => (typeof f == 'function') ? f() : abort();\n }\n\n if (typeof scriptArgs != 'undefined') {\n arguments_ = scriptArgs;\n } else if (typeof arguments != 'undefined') {\n arguments_ = arguments;\n }\n\n if (typeof quit == 'function') {\n quit_ = (status, toThrow) => {\n // Unlike node which has process.exitCode, d8 has no such mechanism. So we\n // have no way to set the exit code and then let the program exit with\n // that code when it naturally stops running (say, when all setTimeouts\n // have completed). For that reason, we must call `quit` - the only way to\n // set the exit code - but quit also halts immediately. To increase\n // consistency with node (and the web) we schedule the actual quit call\n // using a setTimeout to give the current stack and any exception handlers\n // a chance to run. This enables features such as addOnPostRun (which\n // expected to be able to run code after main returns).\n setTimeout(() => {\n if (!(toThrow instanceof ExitStatus)) {\n let toLog = toThrow;\n if (toThrow && typeof toThrow == 'object' && toThrow.stack) {\n toLog = [toThrow, toThrow.stack];\n }\n err(`exiting due to exception: ${toLog}`);\n }\n quit(status);\n });\n throw toThrow;\n };\n }\n\n if (typeof print != 'undefined') {\n // Prefer to use print/printErr where they exist, as they usually work better.\n if (typeof console == 'undefined') console = /** @type{!Console} */({});\n console.log = /** @type{!function(this:Console, ...*): undefined} */ (print);\n console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (typeof printErr != 'undefined' ? printErr : print);\n }\n\n} else\n\n// Note that this includes Node.js workers when relevant (pthreads is enabled).\n// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and\n// ENVIRONMENT_IS_NODE.\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled\n scriptDirectory = self.location.href;\n } else if (typeof document != 'undefined' && document.currentScript) { // web\n scriptDirectory = document.currentScript.src;\n }\n // When MODULARIZE, this JS may be executed later, after document.currentScript\n // is gone, so we saved it, and we use it here instead of any other info.\n if (_scriptDir) {\n scriptDirectory = _scriptDir;\n }\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\n // otherwise, slice off the final part of the url to find the script directory.\n // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\n // and scriptDirectory will correctly be replaced with an empty string.\n // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #),\n // they are removed because they could contain a slash.\n if (scriptDirectory.indexOf('blob:') !== 0) {\n scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, \"\").lastIndexOf('/')+1);\n } else {\n scriptDirectory = '';\n }\n\n if (!(typeof window == 'object' || typeof importScripts == 'function')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');\n\n // Differentiate the Web Worker from the Node Worker case, as reading must\n // be done differently.\n {\n// include: web_or_worker_shell_read.js\nread_ = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.send(null);\n return xhr.responseText;\n }\n\n if (ENVIRONMENT_IS_WORKER) {\n readBinary = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.responseType = 'arraybuffer';\n xhr.send(null);\n return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response));\n };\n }\n\n readAsync = (url, onload, onerror) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\n onload(xhr.response);\n return;\n }\n onerror();\n };\n xhr.onerror = onerror;\n xhr.send(null);\n }\n\n// end include: web_or_worker_shell_read.js\n }\n\n setWindowTitle = (title) => document.title = title;\n} else\n{\n throw new Error('environment detection error');\n}\n\nvar out = Module['print'] || console.log.bind(console);\nvar err = Module['printErr'] || console.error.bind(console);\n\n// Merge back in the overrides\nObject.assign(Module, moduleOverrides);\n// Free the object hierarchy contained in the overrides, this lets the GC\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\nmoduleOverrides = null;\ncheckIncomingModuleAPI();\n\n// Emit code to handle expected values on the Module object. This applies Module.x\n// to the proper local x. This has two benefits: first, we only emit it if it is\n// expected to arrive, and second, by using a local everywhere else that can be\n// minified.\n\nif (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_');\n\nif (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram');\n\nif (Module['quit']) quit_ = Module['quit'];legacyModuleProp('quit', 'quit_');\n\n// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\n// Assertions on removed incoming Module JS APIs.\nassert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead');\nassert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead');\nassert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead');\nassert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead');\nassert(typeof Module['read'] == 'undefined', 'Module.read option was removed (modify read_ in JS)');\nassert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)');\nassert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)');\nassert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)');\nassert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY');\nlegacyModuleProp('asm', 'wasmExports');\nlegacyModuleProp('read', 'read_');\nlegacyModuleProp('readAsync', 'readAsync');\nlegacyModuleProp('readBinary', 'readBinary');\nlegacyModuleProp('setWindowTitle', 'setWindowTitle');\n\nvar PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js';\nvar WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js';\nvar NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js';\n\nassert(!ENVIRONMENT_IS_WORKER, \"worker environment detected but not enabled at build time. Add 'worker' to `-sENVIRONMENT` to enable.\");\n\nassert(!ENVIRONMENT_IS_NODE, \"node environment detected but not enabled at build time. Add 'node' to `-sENVIRONMENT` to enable.\");\n\nassert(!ENVIRONMENT_IS_SHELL, \"shell environment detected but not enabled at build time. Add 'shell' to `-sENVIRONMENT` to enable.\");\n\n\n// end include: shell.js\n// include: preamble.js\n// === Preamble library stuff ===\n\n// Documentation for the public APIs defined in this file must be updated in:\n// site/source/docs/api_reference/preamble.js.rst\n// A prebuilt local version of the documentation is available at:\n// site/build/text/docs/api_reference/preamble.js.txt\n// You can also build docs locally as HTML or other formats in site/\n// An online HTML version (which may be of a different version of Emscripten)\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\n\nvar wasmBinary;\nif (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary');\nvar noExitRuntime = Module['noExitRuntime'] || true;legacyModuleProp('noExitRuntime', 'noExitRuntime');\n\nif (typeof WebAssembly != 'object') {\n abort('no native wasm support detected');\n}\n\n// Wasm globals\n\nvar wasmMemory;\nvar wasmExports;\n\n//========================================\n// Runtime essentials\n//========================================\n\n// whether we are quitting the application. no code should run after this.\n// set in exit() and abort()\nvar ABORT = false;\n\n// set by exit() and abort(). Passed to 'onExit' handler.\n// NOTE: This is also used as the process return code code in shell environments\n// but only when noExitRuntime is false.\nvar EXITSTATUS;\n\n/** @type {function(*, string=)} */\nfunction assert(condition, text) {\n if (!condition) {\n abort('Assertion failed' + (text ? ': ' + text : ''));\n }\n}\n\n// We used to include malloc/free by default in the past. Show a helpful error in\n// builds with assertions.\n\n// Memory management\n\nvar HEAP,\n/** @type {!Int8Array} */\n HEAP8,\n/** @type {!Uint8Array} */\n HEAPU8,\n/** @type {!Int16Array} */\n HEAP16,\n/** @type {!Uint16Array} */\n HEAPU16,\n/** @type {!Int32Array} */\n HEAP32,\n/** @type {!Uint32Array} */\n HEAPU32,\n/** @type {!Float32Array} */\n HEAPF32,\n/** @type {!Float64Array} */\n HEAPF64;\n\nfunction updateMemoryViews() {\n var b = wasmMemory.buffer;\n Module['HEAP8'] = HEAP8 = new Int8Array(b);\n Module['HEAP16'] = HEAP16 = new Int16Array(b);\n Module['HEAP32'] = HEAP32 = new Int32Array(b);\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(b);\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(b);\n Module['HEAPF32'] = HEAPF32 = new Float32Array(b);\n Module['HEAPF64'] = HEAPF64 = new Float64Array(b);\n}\n\nassert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time')\n\nassert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined,\n 'JS engine does not provide full typed array support');\n\n// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY\nassert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally');\nassert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically');\n\n// include: runtime_init_table.js\n// In regular non-RELOCATABLE mode the table is exported\n// from the wasm module and this will be assigned once\n// the exports are available.\nvar wasmTable;\n// end include: runtime_init_table.js\n// include: runtime_stack_check.js\n// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.\nfunction writeStackCookie() {\n var max = _emscripten_stack_get_end();\n assert((max & 3) == 0);\n // If the stack ends at address zero we write our cookies 4 bytes into the\n // stack. This prevents interference with SAFE_HEAP and ASAN which also\n // monitor writes to address zero.\n if (max == 0) {\n max += 4;\n }\n // The stack grow downwards towards _emscripten_stack_get_end.\n // We write cookies to the final two words in the stack and detect if they are\n // ever overwritten.\n HEAPU32[((max)>>2)] = 0x02135467;\n HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE;\n // Also test the global address 0 for integrity.\n HEAPU32[((0)>>2)] = 1668509029;\n}\n\nfunction checkStackCookie() {\n if (ABORT) return;\n var max = _emscripten_stack_get_end();\n // See writeStackCookie().\n if (max == 0) {\n max += 4;\n }\n var cookie1 = HEAPU32[((max)>>2)];\n var cookie2 = HEAPU32[(((max)+(4))>>2)];\n if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) {\n abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`);\n }\n // Also test the global address 0 for integrity.\n if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) {\n abort('Runtime error: The application has corrupted its heap memory area (address zero)!');\n }\n}\n// end include: runtime_stack_check.js\n// include: runtime_assertions.js\n// Endianness check\n(function() {\n var h16 = new Int16Array(1);\n var h8 = new Int8Array(h16.buffer);\n h16[0] = 0x6373;\n if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)';\n})();\n\n// end include: runtime_assertions.js\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\nvar __ATINIT__ = []; // functions called during startup\nvar __ATEXIT__ = []; // functions called during shutdown\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\n\nvar runtimeInitialized = false;\n\nvar runtimeKeepaliveCounter = 0;\n\nfunction keepRuntimeAlive() {\n return noExitRuntime || runtimeKeepaliveCounter > 0;\n}\n\nfunction preRun() {\n if (Module['preRun']) {\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\n while (Module['preRun'].length) {\n addOnPreRun(Module['preRun'].shift());\n }\n }\n callRuntimeCallbacks(__ATPRERUN__);\n}\n\nfunction initRuntime() {\n assert(!runtimeInitialized);\n runtimeInitialized = true;\n\n checkStackCookie();\n\n \nif (!Module[\"noFSInit\"] && !FS.init.initialized)\n FS.init();\nFS.ignorePermissions = false;\n\nTTY.init();\n callRuntimeCallbacks(__ATINIT__);\n}\n\nfunction postRun() {\n checkStackCookie();\n\n if (Module['postRun']) {\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\n while (Module['postRun'].length) {\n addOnPostRun(Module['postRun'].shift());\n }\n }\n\n callRuntimeCallbacks(__ATPOSTRUN__);\n}\n\nfunction addOnPreRun(cb) {\n __ATPRERUN__.unshift(cb);\n}\n\nfunction addOnInit(cb) {\n __ATINIT__.unshift(cb);\n}\n\nfunction addOnExit(cb) {\n}\n\nfunction addOnPostRun(cb) {\n __ATPOSTRUN__.unshift(cb);\n}\n\n// include: runtime_math.js\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc\n\nassert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');\nassert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');\nassert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');\nassert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');\n// end include: runtime_math.js\n// A counter of dependencies for calling run(). If we need to\n// do asynchronous work before running, increment this and\n// decrement it. Incrementing must happen in a place like\n// Module.preRun (used by emcc to add file preloading).\n// Note that you can add dependencies in preRun, even though\n// it happens right before run - run will be postponed until\n// the dependencies are met.\nvar runDependencies = 0;\nvar runDependencyWatcher = null;\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\nvar runDependencyTracking = {};\n\nfunction getUniqueRunDependency(id) {\n var orig = id;\n while (1) {\n if (!runDependencyTracking[id]) return id;\n id = orig + Math.random();\n }\n}\n\nfunction addRunDependency(id) {\n runDependencies++;\n\n if (Module['monitorRunDependencies']) {\n Module['monitorRunDependencies'](runDependencies);\n }\n\n if (id) {\n assert(!runDependencyTracking[id]);\n runDependencyTracking[id] = 1;\n if (runDependencyWatcher === null && typeof setInterval != 'undefined') {\n // Check for missing dependencies every few seconds\n runDependencyWatcher = setInterval(() => {\n if (ABORT) {\n clearInterval(runDependencyWatcher);\n runDependencyWatcher = null;\n return;\n }\n var shown = false;\n for (var dep in runDependencyTracking) {\n if (!shown) {\n shown = true;\n err('still waiting on run dependencies:');\n }\n err('dependency: ' + dep);\n }\n if (shown) {\n err('(end of list)');\n }\n }, 10000);\n }\n } else {\n err('warning: run dependency added without ID');\n }\n}\n\nfunction removeRunDependency(id) {\n runDependencies--;\n\n if (Module['monitorRunDependencies']) {\n Module['monitorRunDependencies'](runDependencies);\n }\n\n if (id) {\n assert(runDependencyTracking[id]);\n delete runDependencyTracking[id];\n } else {\n err('warning: run dependency removed without ID');\n }\n if (runDependencies == 0) {\n if (runDependencyWatcher !== null) {\n clearInterval(runDependencyWatcher);\n runDependencyWatcher = null;\n }\n if (dependenciesFulfilled) {\n var callback = dependenciesFulfilled;\n dependenciesFulfilled = null;\n callback(); // can add another dependenciesFulfilled\n }\n }\n}\n\n/** @param {string|number=} what */\nfunction abort(what) {\n if (Module['onAbort']) {\n Module['onAbort'](what);\n }\n\n what = 'Aborted(' + what + ')';\n // TODO(sbc): Should we remove printing and leave it up to whoever\n // catches the exception?\n err(what);\n\n ABORT = true;\n EXITSTATUS = 1;\n\n // Use a wasm runtime error, because a JS error might be seen as a foreign\n // exception, which means we'd run destructors on it. We need the error to\n // simply make the program stop.\n // FIXME This approach does not work in Wasm EH because it currently does not assume\n // all RuntimeErrors are from traps; it decides whether a RuntimeError is from\n // a trap or not based on a hidden field within the object. So at the moment\n // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that\n // allows this in the wasm spec.\n\n // Suppress closure compiler warning here. Closure compiler's builtin extern\n // defintion for WebAssembly.RuntimeError claims it takes no arguments even\n // though it can.\n // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.\n // See above, in the meantime, we resort to wasm code for trapping.\n //\n // In case abort() is called before the module is initialized, wasmExports\n // and its exported '__trap' function is not available, in which case we throw\n // a RuntimeError.\n //\n // We trap instead of throwing RuntimeError to prevent infinite-looping in\n // Wasm EH code (because RuntimeError is considered as a foreign exception and\n // caught by 'catch_all'), but in case throwing RuntimeError is fine because\n // the module has not even been instantiated, even less running.\n if (runtimeInitialized) {\n ___trap();\n }\n /** @suppress {checkTypes} */\n var e = new WebAssembly.RuntimeError(what);\n\n readyPromiseReject(e);\n // Throw the error whether or not MODULARIZE is set because abort is used\n // in code paths apart from instantiation where an exception is expected\n // to be thrown when abort is called.\n throw e;\n}\n\n// include: memoryprofiler.js\n// end include: memoryprofiler.js\n// include: URIUtils.js\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\n\n// Indicates whether filename is a base64 data URI.\nfunction isDataURI(filename) {\n // Prefix of data URIs emitted by SINGLE_FILE and related options.\n return filename.startsWith(dataURIPrefix);\n}\n\n// Indicates whether filename is delivered via file protocol (as opposed to http/https)\nfunction isFileURI(filename) {\n return filename.startsWith('file://');\n}\n// end include: URIUtils.js\nfunction createExportWrapper(name) {\n return function() {\n assert(runtimeInitialized, `native function \\`${name}\\` called before runtime initialization`);\n var f = wasmExports[name];\n assert(f, `exported native function \\`${name}\\` not found`);\n return f.apply(null, arguments);\n };\n}\n\n// include: runtime_exceptions.js\n// end include: runtime_exceptions.js\nvar wasmBinaryFile;\n wasmBinaryFile = 'data:application/octet-stream;base64,AGFzbQEAAAAB/QM+YAJ/fwBgAX8Bf2ABfwBgAn9/AX9gA39/fwF/YAN/f38AYAR/f39/AX9gBH9/f38AYAZ/f39/f38Bf2AFf39/f38Bf2AFf39/f38AYAN/f38BfWAAAGAGf39/f39/AGAIf39/f39/f38Bf2AAAX9gB39/f39/f38Bf2AHf39/f39/fwBgBX9+fn5+AGADf35/AX5gBX9/fn9/AGAFf39/f34Bf2AEf39/fwF+YAh/f39/f39/fwBgBH9+fn8AYAp/f39/f39/f39/AX9gBn9/f39+fgF/YAd/f39/f35+AX9gA39/fwF8YAZ/fH9/f38Bf2ADf35/AX9gAn9+AGAMf39/f39/f39/f39/AX9gBX9/f398AX9gBH9/f3wBf2AFf39/fn4Bf2ALf39/f39/f39/f38Bf2AKf39/f39/f39/fwBgD39/f39/f39/f39/f39/fwBgDX9/f39/f39/f39/f38AYAl/f39/f39/f38AYAV/f39/fwF8YAABfGAEf39/fwF9YAF8AXxgAnx/AXxgAn5/AX9gAn5+AXxgAAF+YAF/AX5gA39+fwBgAn98AGAEfn5+fgF/YAN+fn4Bf2ABfwF8YAJ/fwF+YAJ+fgF9YAN/f34AYAR/f39+AX5gBX5/f39/AX9gCX9/f39/f39/fwF/YAR/f35+AAKtCzMDZW52DV9lbXZhbF9kZWNyZWYAAgNlbnYYX2VtdmFsX2dldF9tZXRob2RfY2FsbGVyAAMDZW52DV9lbXZhbF9pbmNyZWYAAgNlbnYXX2VtdmFsX2NhbGxfdm9pZF9tZXRob2QABwNlbnYZX2VtYmluZF9yZWdpc3Rlcl9mdW5jdGlvbgARA2VudhZfZW1iaW5kX3JlZ2lzdGVyX2NsYXNzACcDZW52Il9lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IADQNlbnYfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbgAoA2VudiVfZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NsYXNzX2Z1bmN0aW9uABcDZW52EV9lbXZhbF90YWtlX3ZhbHVlAAMDZW52EF9lbXZhbF9uZXdfYXJyYXkADwNlbnYRX2VtdmFsX25ld19vYmplY3QADwNlbnYSX2VtdmFsX25ld19jc3RyaW5nAAEDZW52E19lbXZhbF9zZXRfcHJvcGVydHkABQNlbnYYZW1zY3JpcHRlbl9hc21fY29uc3RfaW50AAQDZW52CnN5bmNJZGJfanMAAgNlbnYTX2VtdmFsX2dldF9wcm9wZXJ0eQADA2VudglfZW12YWxfYXMAHANlbnYWX2VtdmFsX3J1bl9kZXN0cnVjdG9ycwACA2VudhFfZW12YWxfZ2V0X2dsb2JhbAABA2VudgpfZW12YWxfbmV3AAYDZW52IV9lbXZhbF9uZXdfYXJyYXlfZnJvbV9tZW1vcnlfdmlldwABA2VudhJfZW12YWxfY2FsbF9tZXRob2QAKQNlbnYNX19hc3NlcnRfZmFpbAAHA2VudhVfZW1iaW5kX3JlZ2lzdGVyX3ZvaWQAAANlbnYVX2VtYmluZF9yZWdpc3Rlcl9ib29sAAoDZW52GF9lbWJpbmRfcmVnaXN0ZXJfaW50ZWdlcgAKA2VudhZfZW1iaW5kX3JlZ2lzdGVyX2Zsb2F0AAUDZW52G19lbWJpbmRfcmVnaXN0ZXJfc3RkX3N0cmluZwAAA2VudhxfZW1iaW5kX3JlZ2lzdGVyX3N0ZF93c3RyaW5nAAUDZW52Fl9lbWJpbmRfcmVnaXN0ZXJfZW12YWwAAANlbnYcX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldwAFA2VudhVlbXNjcmlwdGVuX21lbWNweV9iaWcABQNlbnYSZW1zY3JpcHRlbl9nZXRfbm93ACoWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF93cml0ZQAGA2VudhZlbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwAAEDZW52IF9lbXNjcmlwdGVuX2dldF9ub3dfaXNfbW9ub3RvbmljAA8DZW52EF9fc3lzY2FsbF9vcGVuYXQABgNlbnYRX19zeXNjYWxsX2ZjbnRsNjQABANlbnYPX19zeXNjYWxsX2lvY3RsAAQWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQdmZF9yZWFkAAYWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF9jbG9zZQABFndhc2lfc25hcHNob3RfcHJldmlldzERZW52aXJvbl9zaXplc19nZXQAAxZ3YXNpX3NuYXBzaG90X3ByZXZpZXcxC2Vudmlyb25fZ2V0AAMDZW52CnN0cmZ0aW1lX2wACQNlbnYQX19zeXNjYWxsX3N0YXQ2NAADA2VudhFfX3N5c2NhbGxfbWtkaXJhdAAEA2VudgVhYm9ydAAMA2VudiJfX3Rocm93X2V4Y2VwdGlvbl93aXRoX3N0YWNrX3RyYWNlAAIDZW52F19lbWJpbmRfcmVnaXN0ZXJfYmlnaW50ABEWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQdmZF9zZWVrAAkD+Af2BwwCAgIDDAICAAwMAwECAwELKwEDAQELAQIDAQQBAgQDAAUAAwAFAAUHAAoJAQEBAgYECg0FBwAABQQHCgcKBwYAAwABAAAFAAEBAAoAAQIBDwACDwUAAg8DAQMABwUDAAcFBAUCAwUKAAMFBQUIAgACBQAAAwEDAQABDAIDCwEBAQILAQMHCgAKAAECAAYCAwICAQcFAAUKAAEBAgAKBQkNBwUBBwAAAgEAAQEMDAQEBCwEBAABAwEBBAYCAgQTAQ8tCRAFAQcuCgQdAAMDAQECAwAYGC8wAQQMAwMDEwQBHh4BAQEEMQIBAgAEFAcEBQQBAQMEAwEBAgIAAgEAAwEBBQAyAQECAgACAAUFAQMBAQABAAUABAEBAQEEAgIBDAMDBBQHAQACAQICAQIEBQoHBQAFAwMBAQEFAQIAAQIAAh8BABISMzQ1NhIAEhgSEhIHNzgGOQQEAwMEAQMGBAMGAgAGOgcJBwUECQcFBAgBEAMAAggBBRkGBwgWCAYIBggWCAogCwgcCAcIDwQEAwgBEAgDBRkICAgICAogCAgIBAkBAQkHCQQRCBUJFSEiBAYRGiMJBAkBCREIFQkVISIRGiMJBAAADgEICAgNCA0ICgkODggICA0IDQgKCQ4QDRACAQAAAAEAAxAkAAUFEAUAAQEDABAkABAFAQABAxslJgQIGyUmBAgEDQ0BDAIAAgIBBQICAQIAAwIAAAICAgQGBgYDBAMEBgQJAQIDBAMEBgQJDgkJAg4EDgkJAQEJAQ4OCQEODgkBAgECAQEAAAAAAAAAAAECAQIAAQIBAgECAQIBAgECAQIBAgECAQIBAgECAgEFAwAFBQAFAQEFBQACAwwMAQIWFgIMAQMBAgIABQwCAwUABQcGAQAABQAFBQEAAAMCAQACAQUABQcCAQICAgUCAAMHAwMAAwMDBRcBCgUFBQQGAwABAxcBCgAFHwADAwMDAwUEBAABBQEFBQQEAAECBQACAQwMAgAMDAwCDAIEBAQDBQcHBwcEAwcKDQoKCg0NDQEBAQECAgEBAwEBOwACDA8PDw8CAQYCAwMDAQMFBAEAAgIBAQMDAQEABRACAwADAQEDAQMEBAQBAwABAwMDAAEFAQMECAADAAADAwAAAAEBAgYDBAEDAwMJAwMDAwMAAAEABAYBAQMDBQMDAwAGAQEEAQMAAAcAAAAAAAAAAAAAAAAGAAMBAgAAAAAAAAMAAAAAAAAAAAAAAAAAAwAAAgMAAAAEAAAAAAAAAAADAAAAAAAEAAAAAAAGAAAAAwMDAwAAAAAAAwAAAAQAAAAAAAADAwMAAAAAAAQAAAAAAAADAAEAAAUABAABBQkREDwZPQQFAXAA2gUFBwEBgAKAgAINAwEAAgYXBH8BQYCSBwt/AUEAC38BQQALfwFBAAsH7QQdBm1lbW9yeQIAEV9fd2FzbV9jYWxsX2N0b3JzADMPX19jcHBfZXhjZXB0aW9uBAAGbWFsbG9jAIICBGZyZWUAgwIZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEADV9fZ2V0VHlwZU5hbWUA3gEbX2VtYmluZF9pbml0aWFsaXplX2JpbmRpbmdzAN8BEF9fZXJybm9fbG9jYXRpb24A8wEGZmZsdXNoAJUCBl9fdHJhcADEBRVlbXNjcmlwdGVuX3N0YWNrX2luaXQAxwYZZW1zY3JpcHRlbl9zdGFja19nZXRfZnJlZQDIBhllbXNjcmlwdGVuX3N0YWNrX2dldF9iYXNlAMkGGGVtc2NyaXB0ZW5fc3RhY2tfZ2V0X2VuZADKBglzdGFja1NhdmUAywYMc3RhY2tSZXN0b3JlAMwGCnN0YWNrQWxsb2MAzQYcZW1zY3JpcHRlbl9zdGFja19nZXRfY3VycmVudADLBiJfX2N4YV9kZWNyZW1lbnRfZXhjZXB0aW9uX3JlZmNvdW50AJkGIl9fY3hhX2luY3JlbWVudF9leGNlcHRpb25fcmVmY291bnQAnQYOX19jeGFfZGVtYW5nbGUAzgYlX190aHJvd25fb2JqZWN0X2Zyb21fdW53aW5kX2V4Y2VwdGlvbgChCBdfX2dldF9leGNlcHRpb25fbWVzc2FnZQCiCAxkeW5DYWxsX2ppamkAowgOZHluQ2FsbF92aWlqaWkApAgOZHluQ2FsbF9paWlpaWoApQgPZHluQ2FsbF9paWlpaWpqAKYIEGR5bkNhbGxfaWlpaWlpamoApwgJ2woBAEEBC9kFvwY+Oz9AQUJDREVGR0BBSElERUZKS0xNTk9QUVJTVFVWV1hZWltcXV5fRmBFYWJjZGVmVVZnaGlYalRrbG1ub3BxcnN0dXZGd3h5entGRXx9fl5/OoABgQGCAYMBhAGFAYIBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBvAa1AbYBsAE0NDU2OT2xAbIBswG2AbQBsQGyAbMBtAG3AbgBuQG7AbwBvQG+AcYBygHLAcwBzgHgAeoB8AHxAf0B/gGQApECkgKWArYBmwKcAp0CngKfAqAC6gHqAaECpAKlAqYCpwKmAqkCqwKqAqwCtwK5ArgCugLMAs8C2QLVAtYC1wLYAtEC0wLUAqgB2gLbAtwCqgHdAt4C3wI07QK2AbQB6wKJBooGiwbsAu4CsgHwAvECigORA4MCNM8E0QSJBYsFjgWQBZIFlAWWBZgFmgWcBZ4FoAWiBaQFyATJBNAE3QTeBN8E4AThBOIEjQLjBOQE5QS+BOkE6gTsBO4E7wTqAfEE8gT6BPsE/gT/BIAFggWFBfwE/QSxAcUCgQWDBYYFtgG0AbQB0gTTBNQE1QTWBNcE2ATZBI0C2gTbBNwEtAHmBOYE5wToAegB6AToAbQB8wT0BOcE6gHqAfUE9gS0AfME9ATnBOoB6gH1BPYEtAH3BPgE5wTqAeoB+QT2BLQB9wT4BOcE6gHqAfkE9gS2AbQBmQOaA5wDtgG0AZ0DngOgA7QBoQOnA60DrwOxA7EDswO1A7kDuwO9A7QBwgPFA8kDygPLA8sDzAPNA9AD0QPSA7QB1APXA90D3gPfA+AD5QPnA7QB6QPrA+4D7wPwA/ED9AP2A7YBtAH7A/wD/QP+A4AEggSFBIgFjQWRBZ0FoQWVBZkFtgG0AfsDhwSIBIkEiwSNBJAEigWPBZMFnwWjBZcFmwWmBaUFkQSmBaUFkwS0AZUElQSWBJYElgSXBOoBmASYBLQBlQSVBJYElgSWBJcE6gGYBJgEtAGZBJkElgSWBJYEmgTqAZgEmAS0AZkEmQSWBJYElgSaBOoBmASYBLQBnAShBLQBqASrBLQBsQS1BLQBtgS6BLQBuwS8BJ0CtAG7BL0EnQK2AbsFowa7BekBvwXBBdsF4QXiBeMF5AXtArQBjQaOBrQBjwaQBo4G7gKYBjSfBqAGtgG0ATQ0pQa0AacGuAa1BqoGtAG3BrQGqwa0AbYGsQatBrQBrga0AboGtAG7BrQBuQa+BrIB7gK+Br4GvgbuArQBwAbpAekB6QGoAv4GnQKAB7YBtAG7BYEHtAGEB4UHtAGGB7QBkgeUB5UHlgeXB5gHtAGsB7QBsAe0AbEHtAGyB7QBswe0AbQHtAG2B7QBtwe0AbgHtAG5B7QBuge0AbwHtAHAB7QBwQe0AcIHtAHDB7QBxAe0AcUHtAHHB7QByAe0AckHyge0AcsHzAe0Ac0Hyge0Ac4Hzwe0AdAHtAHSB7QB0we0AdUHtAHWB7QB2Qe0AdoHtAHbB7QB3Qe0Ad4HtAHfB7QB4Ae0AeEHtAHiB7QB4wfkB7QB5ge0AecHtAHoB7QB6QfqB7QB7AftB7QB7wfuB7QB8Ae0AfIHtAHzB7QB9AfkB7QB4wfkB7QB4we0AfUH9gf3B/gH+Qf6B7QB+we0AfwH6ge0AeEHtAH9B7QB/gf+B/8HgAi0AYEItAGDCLQBhAi0Af4H/geFCIYItAGHCLQBiAi0AYkIigiLCIwIjQi0AY4ItAGPCLQBkAi0AZIItAH+B/4HkwiUCLQBiQiVCJYItAGXCLQBmAiZCJsItAGYCJwIngi0AaAItAEK6swR9gfPAgECf0GAkgckA0GAkgMkAiMAQRBrIgAkAAJAIABBDGogAEEIahAqDQBBgP0CIAAoAgxBAnRBBGoQggIiATYCACABRQ0AIAAoAggQggIiAQRAQYD9AigCACAAKAIMQQJ0akEANgIAQYD9AigCACABECtFDQELQYD9AkEANgIACyAAQRBqJABB9O4CQQA6AABB8O4CQQA2AgBB+O4CQQE2AgBBgO8CQRAQvQUiADYCAEGE7wJCjoCAgICCgICAfzcCACAAQcILKQAANwAGIABBvAspAAA3AAAgAEEAOgAOQYzvAkH0ADYCAEGQ7wJBADYCABA9QZDvAkGs7wIoAgA2AgBBrO8CQYzvAjYCAEGw7wJBigE2AgBBtO8CQQA2AgAQ4AFBtO8CQazvAigCADYCAEGs7wJBsO8CNgIAQeT4AkHs9wI2AgBBnPgCQSo2AgALAwABCxQAQfTuAi0AAARAQfDuAigCABoLCxsAIwAhAAZAQfjuAigCABAAGSAAJAAQoQYACwtvAQN/IAEQ8gEiAkHw////B0kEQAJAIAJBCk0EQCAAIAI6AAsgACEDDAELIAJBD3JBAWoiBBC9BSEDIAAgBEGAgICAeHI2AgggACADNgIAIAAgAjYCBAsgAyABIAIQ4gEgAmpBADoAACAADwsQOAALCQBBgyMQrgEACxkAQYvvAiwAAEEASARAQYDvAigCABCDAgsLqQIBAn8jAEEQayIBJABB/e4CLQAABEBBzCkQ7wELQf7uAiAAOgAAQfjuAigCAEEBRwRAQZQ9EO8BQfjuAigCACEABkBBmO8CLQAAQQFxRQRAQQJBlN0AEAEhAkGY7wJBAToAAEGU7wIgAjYCAAtBlO8CKAIAIQJBARACIAFBATYCCCACIABB+x0gAUEIahADGSABJAAGQEEBEAAZIAEkABChBgALCQALBkBBARAAGSABJAAQoQYACwZAQfjuAigCABAAGSABJAAGQEEBEAAZIAEkABChBgALCQALQfjuAkEBNgIABkBBABAAGSABJAAQoQYACwsCQEH07gItAABFDQBB8O4CKAIAGkH07gJBADoAAEH97gItAABFDQBBuCkQ7wELIAFBEGokAAv2BQIGfwJ9IwBBIGsiAiQAIABBADYCCCAAQgA3AgACQCABKAIEIgYgASgCACIBRg0ABkAgBiABayIEQQBIBEAQPAALIAQQvQUhAxkgAiQAIAAoAgAiAQRAIAAgATYCBCABEIMCCwZACQEHACEAIAIkAEH0kQNBgAg2AgBB8JEDQQA2AgAgABDGBgJAQfiRAygCAEEBRgRAIAAQmgYhAEH97gItAAAEQCACIAAgACgCACgCCBEBADYCAEH11gAgAhDnAQtBCBCVBiEDIAAgACgCACgCCBEBACEAIAJBAToAHwZAIAJBBGogABA3IQAgAkEBOgAeBkAgAiAAQeTLABD5BSIBKAIINgIYIAIgASkCADcDECABQgA3AgAgAUEANgIIIAJBAToAHQZAIAMgAkEQahDuBSEBIAJBADoAHSABQcSbAkEBEJcGDAQZIAIkACACLQAdIQEgAiwAG0EASARAIAIoAhAQgwILIAIgAUEBcToAHgkACwAZIAIkACACLQAeIQEgACwAC0EASARAIAAoAgAQgwILIAIgAUEBcToAHwkA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ATYCFAZAIAJBCGogAkEUahCrARkgAiQABkAgAigCFBAAGSACJAAQoQYACwkACwZAIAIoAhQQABkgAiQAEKEGAAsGQCACQRRqIgEgAkEIaiAAEQAABkAgARCsASEBGSACJAAgAigCFCIABEAgAiAANgIYIAAQgwILCQALGSACJAAgAigCCCIABEAgAiAANgIMIAAQgwILCQALIAIoAhQiAARAIAIgADYCGCAAEIMCCyACKAIIIgAEQCACIAA2AgwgABCDAgsgAkEgaiQAIAELBgBBhN4ACy4BAX8gAARAIAAoAgQhASAAQQA2AgQgAQRAIAEgASgCACgCEBECAAsgABCDAgsLKQEBfyMAQRBrIgIkACACIAE2AgwgAkEMaiAAEQEAIQAgAkEQaiQAIAALMAECfyMAIQIGQAZAQQgQvQUhARgBIAEgACgCABCvASEAGSACJAAgARCDAgkACyAAC/oDAgN/AX0jAEEwayIDJAACQAJAIAEoAgQgASgCAGtBAnUiBCAAKAIAIgVGBEAgAigCBCACKAIAa0ECdSAERg0BC0H97gItAAAEQCADIAU2AgBBidsAIAMQ5wELQQgQlQYhASAAKAIAIQAgA0EBOgAvBkAgA0EEaiICIAAQgwYgA0EBOgAuBkAgAyACQavFABD5BSIAKAIINgIYIAMgACkCADcDECAAQgA3AgAgAEEANgIIIANBAToALQZAIAMgA0EQakGSPhD8BSIAKAIINgIoIAMgACkCADcDICAAQgA3AgAgAEEANgIIIANBAToALAZAIAEgA0EgahDrBSIAQZiaAjYCACADQQA6ACwgAEG8mgJB6wAQlwYMBRkgAyQAIAMtACwhACADLAArQQBIBEAgAygCIBCDAgsgAyAAQQFxOgAtCQALABkgAyQAIAMtAC0hACADLAAbQQBIBEAgAygCEBCDAgsgAyAAQQFxOgAuCQALABkgAyQAIAMtAC4hACADLAAPQQBIBEAgAygCBBCDAgsgAyAAQQFxOgAvCQALABkgAyQAIAMtAC8EQCABEJYGCwkACwALIAAoAgQiBCAEKAIAKAIEEQEAIQQgASgCACACKAIAIAAoAgQiACAAKAIAKAIIEQEAIAQRCwAhBiADQTBqJAAgBg8LAAvKAgICfwF9IwBBIGsiBCQAIAEgACgCBCIFQQF1aiEBIAAoAgAhACAFQQFxBEAgASgCACAAaigCACEACyAEIAI2AgQGQCAEQRBqIARBBGoQqwEZIAQkAAZAIAQoAgQQABkgBCQAEKEGAAsJAAsGQCAEKAIEEAAZIAQkABChBgALIAQgAzYCHAZABkAgBEEEaiAEQRxqEKsBGSAEJAAGQCAEKAIcEAAZIAQkABChBgALCQALBkAgBCgCHBAAGSAEJAAQoQYACwZAIAEgBEEQaiAEQQRqIAARCwAhBhkgBCQAIAQoAgQiAARAIAQgADYCCCAAEIMCCwkACxkgBCQAIAQoAhAiAARAIAQgADYCFCAAEIMCCwkACyAEKAIEIgAEQCAEIAA2AgggABCDAgsgBCgCECIABEAgBCAANgIUIAAQgwILIARBIGokACAGCwcAIAAoAgALNQEBfyABIAAoAgQiAkEBdWohASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRAQALBgBBpOAAC2wBAn8jACEBQQgQvQUhAiAAKAIAIQAgAkEANgIEIAIgADYCAAZAQRAQvQUhARkgASQAIAJBADYCBCACEIMCCQALIAEgADYCDCABQewANgIEIAFBpOEANgIAIAEgAEECdDYCCCACIAE2AgQgAguXAwIDfwF9IwBBIGsiAyQAAkACQCABKAIEIAEoAgBrQQJ1IgQgACgCACIFRgRAIAIoAgQgAigCAGtBAnUgBEYNAQtB/e4CLQAABEAgAyAFNgIAQYnbACADEOcBC0EIEJUGIQEgACgCACEAIANBAToAHwZAIANBBGoiAiAAEIMGIANBAToAHgZAIAMgAkGrxQAQ+QUiACgCCDYCGCADIAApAgA3AxAgAEIANwIAIABBADYCCCADQQE6AB0GQCABIANBEGoQ6wUiAEGYmgI2AgAgA0EAOgAdIABBvJoCQesAEJcGDAQZIAMkACADLQAdIQAgAywAG0EASARAIAMoAhAQgwILIAMgAEEBcToAHgkACwAZIAMkACADLQAeIQAgAywAD0EASARAIAMoAgQQgwILIAMgAEEBcToAHwkACwAZIAMkACADLQAfBEAgARCWBgsJAAsACyAAKAIEIgQgBCgCACgCBBEBACEEIAEoAgAgAigCACAAKAIEIgAgACgCACgCCBEBACAEEQsAIQYgA0EgaiQAIAYPCwALDQAgACgCAEEEaygCAAsuAQF/IAAE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AygCBBCDAgsJAAsACxA4AAsgAywAD0EASARAIAMoAgQQgwILIANBEGokAAvUBwIGfwF+IwBB0ABrIgIkACACIAEoAgAgASABLAALQQBIGzYCEEG41QAgAkEQahDnAQJAIAAoAgRFBEAGQAZAQQgQlQYhABgDIABBvTsQ7wUhAAwCGSACJAAgABCWBgkACwALAkBBhO8CKAIAQYvvAiwAACIFQf8BcSAFQQBIGyIGQQFqIgNB8P///wdJBEACQCADQQpNBEAgAkEANgIwIAJCADcDKCACIAM6ADMgAkEoaiEEDAELIANBD3JBAWoiBxC9BSEEIAIgAzYCLCACIAQ2AiggAiAHQYCAgIB4cjYCMAsgBEGA7wJBgO8CKAIAIAVBAE4bIAYQ4gEgBmpBLzsAAAZAIAJBKGogASgCACABIAEtAAsiA8BBAEgiBBsgASgCBCADIAQbEPcFIQEMAhkgAiQAIAIsADNBAEgEQCACKAIoEIMCCwkACwALEDgACyACQUBrIAEoAgg2AgAgAiABKQIANwM4IAFCADcCACABQQA2AgggAiwAM0EASARAIAIoAigQgwILBkAgAkEoaiACQThqIgEgARD7BSACQRhqIgMQ+AUhASACQQA2AiAgAkIANwMYBkAGQCADIAEoAgAgASABLQALIgPAQQBIIgQbIgUgBSABKAIEIAMgBBtqEJkBGSACJAAgAiwAI0EASARAIAIoAhgQgwILCQALBkAgAkHIAGogAkEYakEAENIFGSACJAAgAiwAI0EASARAIAIoAhgQgwILCQALIAIpA0ghCCACLAAjQQBIBEAgAigCGBCDAgsCQCAIp0H/AXEiA0H/AUdBACADGw0AIAIgASgCACABIAEsAAtBAEgbNgIAQeHUACACEOcBIAJBADYCICACQgA3AxgGQCACQRhqIAEoAgAgASABLQALIgPAQQBIIgQbIgUgBSABKAIEIAMgBBtqEJkBGSACJAAgAiwAI0EASARAIAIoAhgQgwILCQALBkAgAkEYakEAENAFGSACJAAgAiwAI0EASARAIAIoAhgQgwILCQALIAIsACNBAE4NACACKAIYEIMCCyAAKAIEIgAgAkE4aiAAKAIAKAIMEQAAIAJBATYCFAZAQQAgAkEUahCIARkgAiQABkAgAigCFBAAGSACJAAQoQYACwkACxkgAiQAIAEsAAtBAEgEQCABKAIAEIMCCwkACxkgAiQAIAIsAENBAEgEQCACKAI4EIMCCwkACwZAIAIoAhQQABkgAiQAEKEGAAsgASwAC0EASARAIAEoAgAQgwILIAIsAENBAEgEQCACKAI4EIMCCyACQdAAaiQADwsgAEHEmwJBARCXBgAL/AkCCH8CfSMAQUBqIgMkAAJAIAAoAgQiB0UEQAZABkBBCBCVBiEAGAMgAEG9OxDvBSEADAIZIAMkACAAEJYGCQALAAsCQCABKAIEIgQgASgCACIFayIJQQJ1IgggACgCAEcEQEEIEJUGIQEgACgCACEAIANBAToAOQZAIANBDGoiAiAAEIMGIANBAToAOAZAIAMgAkGrxQAQ+QUiACgCCDYCICADIAApAgA3AxggAEIANwIAIABBADYCCCADQQE6ADcGQCADIANBGGpBkj4Q/AUiACgCCDYCMCADIAApAgA3AyggAEIANwIAIABBADYCCCADQQE6ADYGQCABIANBKGoQ6wUiAEGYmgI2AgAgA0EAOgA2IABBvJoCQesAEJcGDAUZIAMkACADLQA2IQAgAywAM0EASARAIAMoAigQgwILIAMgAEEBcToANwkACwAZIAMkACADLQA3IQAgAywAI0EASARAIAMoAhgQgwILIAMgAEEBcToAOAkACwAZIAMkACADLQA4IQAgAywAF0EASARAIAMoAgwQgwILIAMgAEEBcToAOQkACwAZIAMkACADLQA5BEAgARCWBgsJAAsACwJAIAAtAAxFDQAgBCAFRiIGRQRAIAUhAQNAIAEqAgAiDCAMlCALkiELIAFBBGoiASAERw0ACwsgBg0AIAuLkSILQwAAAABeRQ0AQQEgCCAIQQFNGyIEQQFxIQhBACEBIAlBCE8EQCAEQX5xIQlBACEEA0AgBSABQQJ0IgZqIgogCioCACALlTgCACAFIAZBBHJqIgYgBioCACALlTgCACABQQJqIQEgBEECaiIEIAlHDQALCyAIRQ0AIAUgAUECdGoiASABKgIAIAuVOAIACyAHKAIMIAcoAghGBEBBCBCVBiEBIAAoAgQoAgghACADQQE6ADwGQCADQRhqIgIgABCDBiADQQE6ADsGQCADIAJB0MwAEPkFIgAoAgg2AjAgAyAAKQIANwMoIABCADcCACAAQQA2AgggA0EBOgA6BkAgASADQShqEO4FIQAgA0EAOgA6IABBxJsCQQEQlwYMBBkgAyQAIAMtADohACADLAAzQQBIBEAgAygCKBCDAgsgAyAAQQFxOgA7CQALABkgAyQAIAMtADshACADLAAjQQBIBEAgAygCGBCDAgsgAyAAQQFxOgA8CQALABkgAyQAIAMtADwEQCABEJYGCwkACwALBkAgByAFIAJBACAHKAIAKAIAEQcABwAhACADJABB9JEDQawINgIAQfCRA0EANgIAIAAQxgYCQEH4kQMoAgBBAUYEQCAAEJoGIQBBCBCVBiECIAAgACgCACgCCBEBACEAIANBAToAPwZAIANBGGogABA3IQAgA0EBOgA+BkAgAyAAQcfPABD5BSIBKAIINgIwIAMgASkCADcDKCABQgA3AgAgAUEANgIIIANBAToAPQZAIAIgA0EoahDuBSEBIANBADoAPSABQcSbAkEBEJcGDAQZIAMkACADLQA9IQEgAywAM0EASARAIAMoAigQgwILIAMgAUEBcToAPgkACwAZIAMkACADLQA+IQEgACwAC0EASARAIAAoAgAQgwILIAMgAUEBcToAPwkACwAZIAMkACADLQA/BEAgAhCWBgsGQBCbBhkgAyQAEKEGAAsJAAsACwkBCwALIANBQGskAA8LAAsgAEHEmwJBARCXBgALwQEBAn8jAEEQayIEJAAgASAAKAIEIgVBAXVqIQEgACgCACEAIAVBAXEEQCABKAIAIABqKAIAIQALIAQgAjYCDAZAIAQgBEEMahCrARkgBCQABkAgBCgCDBAAGSAEJAAQoQYACwkACwZAIAQoAgwQABkgBCQAEKEGAAsGQCABIAQgAyAAEQUAGSAEJAAgBCgCACIABEAgBCAANgIEIAAQgwILCQALIAQoAgAiAARAIAQgADYCBCAAEIMCCyAEQRBqJAALlwIBBn8jAEEgayICJAACQCAAKAIEIgBFBEAGQAZAQQgQlQYhABgDIABBvTsQ7wUhAAwCGSACJAAgABCWBgkACwALIAIgATYCDCACIAJBDGoiAzYCFCACQRhqIgYgAEE4aiIBIAMgAkEUaiIHIAJBCGoiBBCaASACKAIYKAIMIQUgASADEJsBIAIgACgCFCAAKAIEIAAoAhAgACgCDEEBa2xqaigCADYCCCACIAQ2AhQgBiABIAQgByACQRNqEJoBIAIoAhggBTYC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