From 86d84f3849d83a7709a64e7a097fc56b1074a89d Mon Sep 17 00:00:00 2001 From: Volodymyr Shymanskyy Date: Fri, 29 Nov 2019 15:40:54 +0200 Subject: [PATCH] Update CoreMark --- test/benchmark/coremark/README.md | 10 +- test/benchmark/coremark/coremark-emcc.wasm | Bin 0 -> 24900 bytes test/benchmark/coremark/coremark-side.wasm | Bin 13678 -> 0 bytes test/benchmark/coremark/coremark-wasi.wasm | Bin 42547 -> 34064 bytes test/benchmark/coremark/coremark.html | 1301 +---------- test/benchmark/coremark/coremark.js | 2282 +------------------- test/benchmark/coremark/coremark.wasm | Bin 55873 -> 24773 bytes 7 files changed, 7 insertions(+), 3586 deletions(-) create mode 100644 test/benchmark/coremark/coremark-emcc.wasm delete mode 100644 test/benchmark/coremark/coremark-side.wasm diff --git a/test/benchmark/coremark/README.md b/test/benchmark/coremark/README.md index e07cf70..26cf8d6 100644 --- a/test/benchmark/coremark/README.md +++ b/test/benchmark/coremark/README.md @@ -3,9 +3,9 @@ The `coremark` files in this directory were produced by: ```sh -$ make compile PORT_DIR=linux CC=wasicc EXE=-wasi.wasm XCFLAGS="-O3" -$ make compile PORT_DIR=linux CC=emcc EXE=-side.wasm XCFLAGS="-s SIDE_MODULE=1" -$ make compile PORT_DIR=linux CC=emcc EXE=.html XCFLAGS="-g2" +$ make compile PORT_DIR=barebones CC=wasicc EXE=-wasi.wasm +$ make compile PORT_DIR=barebones CC=emcc EXE=-emcc.wasm +$ make compile PORT_DIR=barebones CC=emcc EXE=.html ``` ### Running WASI version in Wasm3 @@ -34,12 +34,12 @@ wasmer run coremark-wasi.wasm wapm upload coremark-wasi -# Wasmer-JS (V8) => 9883.376161 +# Wasmer-JS (V8) => 10024.057739 # https://www.npmjs.com/package/@wasmer/cli wasmer-js run coremark-wasi.wasm -# WAVM => 14650.941323 +# WAVM => 14781.966001 $ENGINES_PATH/wasm-jit-prototype/_build/bin/wavm run coremark-wasi.wasm ``` diff --git a/test/benchmark/coremark/coremark-emcc.wasm b/test/benchmark/coremark/coremark-emcc.wasm new file mode 100644 index 0000000000000000000000000000000000000000..122a09957984b286d9e1fb7224063094498ad525 GIT binary patch literal 24900 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 diff --git a/test/benchmark/coremark/coremark-wasi.wasm b/test/benchmark/coremark/coremark-wasi.wasm index 655f29b350b4c7602a4153259340b82ce4c4f707..37fbb318e1313fa205df952c1c42aa41061c9b19 100755 GIT binary patch delta 11786 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 - - - - - Emscripten-Generated Code - - - - - image/svg+xml - - -
-
Downloading...
- - - Resize canvas - Lock/hide mouse pointer     - - - - -
- -
- - -
- -
- - - - - - - - +Emscripten-Generated Codeimage/svg+xml
Downloading...
Resize canvasLock/hide mouse pointer    
\ No newline at end of file diff --git a/test/benchmark/coremark/coremark.js b/test/benchmark/coremark/coremark.js index 6a69975..2fac78c 100644 --- a/test/benchmark/coremark/coremark.js +++ b/test/benchmark/coremark/coremark.js @@ -1,2281 +1 @@ -// Copyright 2010 The Emscripten Authors. All rights reserved. -// Emscripten is available under two separate licenses, the MIT license and the -// University of Illinois/NCSA Open Source License. Both these licenses can be -// found in the LICENSE file. - -// The Module object: Our interface to the outside world. We import -// and export values on it. There are various ways Module can be used: -// 1. Not defined. We create it here -// 2. A function parameter, function(Module) { ..generated code.. } -// 3. pre-run appended it, var Module = {}; ..generated code.. -// 4. External script tag defines var Module. -// We need to check if Module already exists (e.g. case 3 above). -// Substitution will be replaced with actual code on later stage of the build, -// this way Closure Compiler will not mangle it (e.g. case 4. above). -// Note that if you want to run closure, and also to use Module -// after the generated code, you will need to define var Module = {}; -// before the code. Then that object will be used in the code, and you -// can continue to use Module afterwards as well. -var Module = typeof Module !== 'undefined' ? Module : {}; - -// --pre-jses are emitted after the Module integration code, so that they can -// refer to Module (if they choose; they can also define Module) -// {{PRE_JSES}} - -// Sometimes an existing Module object exists with properties -// meant to overwrite the default module functionality. Here -// we collect those properties and reapply _after_ we configure -// the current environment's defaults to avoid having to be so -// defensive during initialization. -var moduleOverrides = {}; -var key; -for (key in Module) { - if (Module.hasOwnProperty(key)) { - moduleOverrides[key] = Module[key]; - } -} - -var arguments_ = []; -var thisProgram = './this.program'; -var quit_ = function(status, toThrow) { - throw toThrow; -}; - -// Determine the runtime environment we are in. You can customize this by -// setting the ENVIRONMENT setting at compile time (see settings.js). - -var ENVIRONMENT_IS_WEB = false; -var ENVIRONMENT_IS_WORKER = false; -var ENVIRONMENT_IS_NODE = false; -var ENVIRONMENT_HAS_NODE = false; -var ENVIRONMENT_IS_SHELL = false; -ENVIRONMENT_IS_WEB = typeof window === 'object'; -ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; -// A web environment like Electron.js can have Node enabled, so we must -// distinguish between Node-enabled environments and Node environments per se. -// This will allow the former to do things like mount NODEFS. -// Extended check using process.versions fixes issue #8816. -// (Also makes redundant the original check that 'require' is a function.) -ENVIRONMENT_HAS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string'; -ENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER; -ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; - - - -// Three configurations we can be running in: -// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false) -// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false) -// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true) - - - - -// `/` should be present at the end if `scriptDirectory` is not empty -var scriptDirectory = ''; -function locateFile(path) { - if (Module['locateFile']) { - return Module['locateFile'](path, scriptDirectory); - } - return scriptDirectory + path; -} - -// Hooks that are implemented differently in different runtime environments. -var read_, - readAsync, - readBinary, - setWindowTitle; - -if (ENVIRONMENT_IS_NODE) { - scriptDirectory = __dirname + '/'; - - // Expose functionality in the same simple way that the shells work - // Note that we pollute the global namespace here, otherwise we break in node - var nodeFS; - var nodePath; - - read_ = function shell_read(filename, binary) { - var ret; - if (!nodeFS) nodeFS = require('fs'); - if (!nodePath) nodePath = require('path'); - filename = nodePath['normalize'](filename); - ret = nodeFS['readFileSync'](filename); - return binary ? ret : ret.toString(); - }; - - readBinary = function readBinary(filename) { - var ret = read_(filename, true); - if (!ret.buffer) { - ret = new Uint8Array(ret); - } - assert(ret.buffer); - return ret; - }; - - if (process['argv'].length > 1) { - thisProgram = process['argv'][1].replace(/\\/g, '/'); - } - - arguments_ = process['argv'].slice(2); - - if (typeof module !== 'undefined') { - module['exports'] = Module; - } - - process['on']('uncaughtException', function(ex) { - // suppress ExitStatus exceptions from showing an error - if (!(ex instanceof ExitStatus)) { - throw ex; - } - }); - - process['on']('unhandledRejection', abort); - - quit_ = function(status) { - process['exit'](status); - }; - - Module['inspect'] = function () { return '[Emscripten Module object]'; }; -} else -if (ENVIRONMENT_IS_SHELL) { - - - if (typeof read != 'undefined') { - read_ = function shell_read(f) { - return read(f); - }; - } - - readBinary = function readBinary(f) { - var data; - if (typeof readbuffer === 'function') { - return new Uint8Array(readbuffer(f)); - } - data = read(f, 'binary'); - assert(typeof data === 'object'); - return data; - }; - - if (typeof scriptArgs != 'undefined') { - arguments_ = scriptArgs; - } else if (typeof arguments != 'undefined') { - arguments_ = arguments; - } - - if (typeof quit === 'function') { - quit_ = function(status) { - quit(status); - }; - } - - if (typeof print !== 'undefined') { - // Prefer to use print/printErr where they exist, as they usually work better. - if (typeof console === 'undefined') console = {}; - console.log = print; - console.warn = console.error = typeof printErr !== 'undefined' ? printErr : print; - } -} else -if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled - scriptDirectory = self.location.href; - } else if (document.currentScript) { // web - scriptDirectory = document.currentScript.src; - } - // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. - // otherwise, slice off the final part of the url to find the script directory. - // if scriptDirectory does not contain a slash, lastIndexOf will return -1, - // and scriptDirectory will correctly be replaced with an empty string. - if (scriptDirectory.indexOf('blob:') !== 0) { - scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1); - } else { - scriptDirectory = ''; - } - - - read_ = function shell_read(url) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, false); - xhr.send(null); - return xhr.responseText; - }; - - if (ENVIRONMENT_IS_WORKER) { - readBinary = function readBinary(url) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, false); - xhr.responseType = 'arraybuffer'; - xhr.send(null); - return new Uint8Array(xhr.response); - }; - } - - readAsync = function readAsync(url, onload, onerror) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.responseType = 'arraybuffer'; - xhr.onload = function xhr_onload() { - if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 - onload(xhr.response); - return; - } - onerror(); - }; - xhr.onerror = onerror; - xhr.send(null); - }; - - setWindowTitle = function(title) { document.title = title }; -} else -{ -} - -// Set up the out() and err() hooks, which are how we can print to stdout or -// stderr, respectively. -var out = Module['print'] || console.log.bind(console); -var err = Module['printErr'] || console.warn.bind(console); - -// Merge back in the overrides -for (key in moduleOverrides) { - if (moduleOverrides.hasOwnProperty(key)) { - Module[key] = moduleOverrides[key]; - } -} -// Free the object hierarchy contained in the overrides, this lets the GC -// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array. -moduleOverrides = null; - -// Emit code to handle expected values on the Module object. This applies Module.x -// to the proper local x. This has two benefits: first, we only emit it if it is -// expected to arrive, and second, by using a local everywhere else that can be -// minified. -if (Module['arguments']) arguments_ = Module['arguments']; -if (Module['thisProgram']) thisProgram = Module['thisProgram']; -if (Module['quit']) quit_ = Module['quit']; - -// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message - -// TODO remove when SDL2 is fixed (also see above) - - - -// Copyright 2017 The Emscripten Authors. All rights reserved. -// Emscripten is available under two separate licenses, the MIT license and the -// University of Illinois/NCSA Open Source License. Both these licenses can be -// found in the LICENSE file. - -// {{PREAMBLE_ADDITIONS}} - -var STACK_ALIGN = 16; - - -function dynamicAlloc(size) { - var ret = HEAP32[DYNAMICTOP_PTR>>2]; - var end = (ret + size + 15) & -16; - if (end > _emscripten_get_heap_size()) { - abort(); - } - HEAP32[DYNAMICTOP_PTR>>2] = end; - return ret; -} - -function alignMemory(size, factor) { - if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default - return Math.ceil(size / factor) * factor; -} - -function getNativeTypeSize(type) { - switch (type) { - case 'i1': case 'i8': return 1; - case 'i16': return 2; - case 'i32': return 4; - case 'i64': return 8; - case 'float': return 4; - case 'double': return 8; - default: { - if (type[type.length-1] === '*') { - return 4; // A pointer - } else if (type[0] === 'i') { - var bits = parseInt(type.substr(1)); - assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type); - return bits / 8; - } else { - return 0; - } - } - } -} - -function warnOnce(text) { - if (!warnOnce.shown) warnOnce.shown = {}; - if (!warnOnce.shown[text]) { - warnOnce.shown[text] = 1; - err(text); - } -} - -var asm2wasmImports = { // special asm2wasm imports - "f64-rem": function(x, y) { - return x % y; - }, - "debugger": function() { - } -}; - - - - -// Wraps a JS function as a wasm function with a given signature. -// In the future, we may get a WebAssembly.Function constructor. Until then, -// we create a wasm module that takes the JS function as an import with a given -// signature, and re-exports that as a wasm function. -function convertJsFunctionToWasm(func, sig) { - - // The module is static, with the exception of the type section, which is - // generated based on the signature passed in. - var typeSection = [ - 0x01, // id: section, - 0x00, // length: 0 (placeholder) - 0x01, // count: 1 - 0x60, // form: func - ]; - var sigRet = sig.slice(0, 1); - var sigParam = sig.slice(1); - var typeCodes = { - 'i': 0x7f, // i32 - 'j': 0x7e, // i64 - 'f': 0x7d, // f32 - 'd': 0x7c, // f64 - }; - - // Parameters, length + signatures - typeSection.push(sigParam.length); - for (var i = 0; i < sigParam.length; ++i) { - typeSection.push(typeCodes[sigParam[i]]); - } - - // Return values, length + signatures - // With no multi-return in MVP, either 0 (void) or 1 (anything else) - if (sigRet == 'v') { - typeSection.push(0x00); - } else { - typeSection = typeSection.concat([0x01, typeCodes[sigRet]]); - } - - // Write the overall length of the type section back into the section header - // (excepting the 2 bytes for the section id and length) - typeSection[1] = typeSection.length - 2; - - // Rest of the module is static - var bytes = new Uint8Array([ - 0x00, 0x61, 0x73, 0x6d, // magic ("\0asm") - 0x01, 0x00, 0x00, 0x00, // version: 1 - ].concat(typeSection, [ - 0x02, 0x07, // import section - // (import "e" "f" (func 0 (type 0))) - 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00, - 0x07, 0x05, // export section - // (export "f" (func 0 (type 0))) - 0x01, 0x01, 0x66, 0x00, 0x00, - ])); - - // We can compile this wasm module synchronously because it is very small. - // This accepts an import (at "e.f"), that it reroutes to an export (at "f") - var module = new WebAssembly.Module(bytes); - var instance = new WebAssembly.Instance(module, { - e: { - f: func - } - }); - var wrappedFunc = instance.exports.f; - return wrappedFunc; -} - -// Add a wasm function to the table. -function addFunctionWasm(func, sig) { - var table = wasmTable; - var ret = table.length; - - // Grow the table - try { - table.grow(1); - } catch (err) { - if (!err instanceof RangeError) { - throw err; - } - throw 'Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH.'; - } - - // Insert new element - try { - // Attempting to call this with JS function will cause of table.set() to fail - table.set(ret, func); - } catch (err) { - if (!err instanceof TypeError) { - throw err; - } - assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction'); - var wrapped = convertJsFunctionToWasm(func, sig); - table.set(ret, wrapped); - } - - return ret; -} - -function removeFunctionWasm(index) { - // TODO(sbc): Look into implementing this to allow re-using of table slots -} - -// 'sig' parameter is required for the llvm backend but only when func is not -// already a WebAssembly function. -function addFunction(func, sig) { - - return addFunctionWasm(func, sig); -} - -function removeFunction(index) { - removeFunctionWasm(index); -} - -var funcWrappers = {}; - -function getFuncWrapper(func, sig) { - if (!func) return; // on null pointer, return undefined - assert(sig); - if (!funcWrappers[sig]) { - funcWrappers[sig] = {}; - } - var sigCache = funcWrappers[sig]; - if (!sigCache[func]) { - // optimize away arguments usage in common cases - if (sig.length === 1) { - sigCache[func] = function dynCall_wrapper() { - return dynCall(sig, func); - }; - } else if (sig.length === 2) { - sigCache[func] = function dynCall_wrapper(arg) { - return dynCall(sig, func, [arg]); - }; - } else { - // general case - sigCache[func] = function dynCall_wrapper() { - return dynCall(sig, func, Array.prototype.slice.call(arguments)); - }; - } - } - return sigCache[func]; -} - - -function makeBigInt(low, high, unsigned) { - return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0)); -} - -function dynCall(sig, ptr, args) { - if (args && args.length) { - return Module['dynCall_' + sig].apply(null, [ptr].concat(args)); - } else { - return Module['dynCall_' + sig].call(null, ptr); - } -} - -var tempRet0 = 0; - -var setTempRet0 = function(value) { - tempRet0 = value; -}; - -var getTempRet0 = function() { - return tempRet0; -}; - - -var Runtime = { -}; - -// The address globals begin at. Very low in memory, for code size and optimization opportunities. -// Above 0 is static memory, starting with globals. -// Then the stack. -// Then 'dynamic' memory for sbrk. -var GLOBAL_BASE = 1024; - - - - -// === Preamble library stuff === - -// Documentation for the public APIs defined in this file must be updated in: -// site/source/docs/api_reference/preamble.js.rst -// A prebuilt local version of the documentation is available at: -// site/build/text/docs/api_reference/preamble.js.txt -// You can also build docs locally as HTML or other formats in site/ -// An online HTML version (which may be of a different version of Emscripten) -// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html - - -var wasmBinary;if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; -var noExitRuntime;if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime']; - - -if (typeof WebAssembly !== 'object') { - err('no native wasm support detected'); -} - - -// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking. -// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties) - -/** @type {function(number, number, string, boolean=)} */ -function setValue(ptr, value, type, noSafe) { - type = type || 'i8'; - if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit - switch(type) { - case 'i1': HEAP8[((ptr)>>0)]=value; break; - case 'i8': HEAP8[((ptr)>>0)]=value; break; - case 'i16': HEAP16[((ptr)>>1)]=value; break; - case 'i32': HEAP32[((ptr)>>2)]=value; break; - case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break; - case 'float': HEAPF32[((ptr)>>2)]=value; break; - case 'double': HEAPF64[((ptr)>>3)]=value; break; - default: abort('invalid type for setValue: ' + type); - } -} - -/** @type {function(number, string, boolean=)} */ -function getValue(ptr, type, noSafe) { - type = type || 'i8'; - if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit - switch(type) { - case 'i1': return HEAP8[((ptr)>>0)]; - case 'i8': return HEAP8[((ptr)>>0)]; - case 'i16': return HEAP16[((ptr)>>1)]; - case 'i32': return HEAP32[((ptr)>>2)]; - case 'i64': return HEAP32[((ptr)>>2)]; - case 'float': return HEAPF32[((ptr)>>2)]; - case 'double': return HEAPF64[((ptr)>>3)]; - default: abort('invalid type for getValue: ' + type); - } - return null; -} - - - - - -// Wasm globals - -var wasmMemory; - -// In fastcomp asm.js, we don't need a wasm Table at all. -// In the wasm backend, we polyfill the WebAssembly object, -// so this creates a (non-native-wasm) table for us. -var wasmTable = new WebAssembly.Table({ - 'initial': 5, - 'maximum': 5 + 0, - 'element': 'anyfunc' -}); - - -//======================================== -// Runtime essentials -//======================================== - -// whether we are quitting the application. no code should run after this. -// set in exit() and abort() -var ABORT = false; - -// set by exit() and abort(). Passed to 'onExit' handler. -// NOTE: This is also used as the process return code code in shell environments -// but only when noExitRuntime is false. -var EXITSTATUS = 0; - -/** @type {function(*, string=)} */ -function assert(condition, text) { - if (!condition) { - abort('Assertion failed: ' + text); - } -} - -// Returns the C function with a specified identifier (for C++, you need to do manual name mangling) -function getCFunc(ident) { - var func = Module['_' + ident]; // closure exported function - assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported'); - return func; -} - -// C calling interface. -function ccall(ident, returnType, argTypes, args, opts) { - // For fast lookup of conversion functions - var toC = { - 'string': function(str) { - var ret = 0; - if (str !== null && str !== undefined && str !== 0) { // null string - // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' - var len = (str.length << 2) + 1; - ret = stackAlloc(len); - stringToUTF8(str, ret, len); - } - return ret; - }, - 'array': function(arr) { - var ret = stackAlloc(arr.length); - writeArrayToMemory(arr, ret); - return ret; - } - }; - - function convertReturnValue(ret) { - if (returnType === 'string') return UTF8ToString(ret); - if (returnType === 'boolean') return Boolean(ret); - return ret; - } - - var func = getCFunc(ident); - var cArgs = []; - var stack = 0; - if (args) { - for (var i = 0; i < args.length; i++) { - var converter = toC[argTypes[i]]; - if (converter) { - if (stack === 0) stack = stackSave(); - cArgs[i] = converter(args[i]); - } else { - cArgs[i] = args[i]; - } - } - } - var ret = func.apply(null, cArgs); - - ret = convertReturnValue(ret); - if (stack !== 0) stackRestore(stack); - return ret; -} - -function cwrap(ident, returnType, argTypes, opts) { - argTypes = argTypes || []; - // When the function takes numbers and returns a number, we can just return - // the original function - var numericArgs = argTypes.every(function(type){ return type === 'number'}); - var numericRet = returnType !== 'string'; - if (numericRet && numericArgs && !opts) { - return getCFunc(ident); - } - return function() { - return ccall(ident, returnType, argTypes, arguments, opts); - } -} - -var ALLOC_NORMAL = 0; // Tries to use _malloc() -var ALLOC_STACK = 1; // Lives for the duration of the current function call -var ALLOC_DYNAMIC = 2; // Cannot be freed except through sbrk -var ALLOC_NONE = 3; // Do not allocate - -// allocate(): This is for internal use. You can use it yourself as well, but the interface -// is a little tricky (see docs right below). The reason is that it is optimized -// for multiple syntaxes to save space in generated code. So you should -// normally not use allocate(), and instead allocate memory using _malloc(), -// initialize it with setValue(), and so forth. -// @slab: An array of data, or a number. If a number, then the size of the block to allocate, -// in *bytes* (note that this is sometimes confusing: the next parameter does not -// affect this!) -// @types: Either an array of types, one for each byte (or 0 if no type at that position), -// or a single type which is used for the entire block. This only matters if there -// is initial data - if @slab is a number, then this does not matter at all and is -// ignored. -// @allocator: How to allocate memory, see ALLOC_* -/** @type {function((TypedArray|Array|number), string, number, number=)} */ -function allocate(slab, types, allocator, ptr) { - var zeroinit, size; - if (typeof slab === 'number') { - zeroinit = true; - size = slab; - } else { - zeroinit = false; - size = slab.length; - } - - var singleType = typeof types === 'string' ? types : null; - - var ret; - if (allocator == ALLOC_NONE) { - ret = ptr; - } else { - ret = [_malloc, - stackAlloc, - dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length)); - } - - if (zeroinit) { - var stop; - ptr = ret; - assert((ret & 3) == 0); - stop = ret + (size & ~3); - for (; ptr < stop; ptr += 4) { - HEAP32[((ptr)>>2)]=0; - } - stop = ret + size; - while (ptr < stop) { - HEAP8[((ptr++)>>0)]=0; - } - return ret; - } - - if (singleType === 'i8') { - if (slab.subarray || slab.slice) { - HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret); - } else { - HEAPU8.set(new Uint8Array(slab), ret); - } - return ret; - } - - var i = 0, type, typeSize, previousType; - while (i < size) { - var curr = slab[i]; - - type = singleType || types[i]; - if (type === 0) { - i++; - continue; - } - - if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later - - setValue(ret+i, curr, type); - - // no need to look up size unless type changes, so cache it - if (previousType !== type) { - typeSize = getNativeTypeSize(type); - previousType = type; - } - i += typeSize; - } - - return ret; -} - -// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready -function getMemory(size) { - if (!runtimeInitialized) return dynamicAlloc(size); - return _malloc(size); -} - - - - -/** @type {function(number, number=)} */ -function Pointer_stringify(ptr, length) { - abort("this function has been removed - you should use UTF8ToString(ptr, maxBytesToRead) instead!"); -} - -// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns -// a copy of that string as a Javascript String object. - -function AsciiToString(ptr) { - var str = ''; - while (1) { - var ch = HEAPU8[((ptr++)>>0)]; - if (!ch) return str; - str += String.fromCharCode(ch); - } -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP. - -function stringToAscii(str, outPtr) { - return writeAsciiToMemory(str, outPtr, false); -} - - -// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns -// a copy of that string as a Javascript String object. - -var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined; - -/** - * @param {number} idx - * @param {number=} maxBytesToRead - * @return {string} - */ -function UTF8ArrayToString(u8Array, idx, maxBytesToRead) { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; - // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. - // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. - // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity) - while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr; - - if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) { - return UTF8Decoder.decode(u8Array.subarray(idx, endPtr)); - } else { - var str = ''; - // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that - while (idx < endPtr) { - // For UTF8 byte structure, see: - // http://en.wikipedia.org/wiki/UTF-8#Description - // https://www.ietf.org/rfc/rfc2279.txt - // https://tools.ietf.org/html/rfc3629 - var u0 = u8Array[idx++]; - if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } - var u1 = u8Array[idx++] & 63; - if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } - var u2 = u8Array[idx++] & 63; - if ((u0 & 0xF0) == 0xE0) { - u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; - } else { - u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (u8Array[idx++] & 63); - } - - if (u0 < 0x10000) { - str += String.fromCharCode(u0); - } else { - var ch = u0 - 0x10000; - str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); - } - } - } - return str; -} - -// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a -// copy of that string as a Javascript String object. -// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit -// this parameter to scan the string until the first \0 byte. If maxBytesToRead is -// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the -// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will -// not produce a string of exact length [ptr, ptr+maxBytesToRead[) -// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may -// throw JS JIT optimizations off, so it is worth to consider consistently using one -// style or the other. -/** - * @param {number} ptr - * @param {number=} maxBytesToRead - * @return {string} - */ -function UTF8ToString(ptr, maxBytesToRead) { - return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; -} - -// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx', -// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP. -// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. -// Parameters: -// str: the Javascript string to copy. -// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element. -// outIdx: The starting offset in the array to begin the copying. -// maxBytesToWrite: The maximum number of bytes this function can write to the array. -// This count should include the null terminator, -// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else. -// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes. - return 0; - - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 - var u = str.charCodeAt(i); // possibly a lead surrogate - if (u >= 0xD800 && u <= 0xDFFF) { - var u1 = str.charCodeAt(++i); - u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); - } - if (u <= 0x7F) { - if (outIdx >= endIdx) break; - outU8Array[outIdx++] = u; - } else if (u <= 0x7FF) { - if (outIdx + 1 >= endIdx) break; - outU8Array[outIdx++] = 0xC0 | (u >> 6); - outU8Array[outIdx++] = 0x80 | (u & 63); - } else if (u <= 0xFFFF) { - if (outIdx + 2 >= endIdx) break; - outU8Array[outIdx++] = 0xE0 | (u >> 12); - outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); - outU8Array[outIdx++] = 0x80 | (u & 63); - } else { - if (outIdx + 3 >= endIdx) break; - outU8Array[outIdx++] = 0xF0 | (u >> 18); - outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); - outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); - outU8Array[outIdx++] = 0x80 | (u & 63); - } - } - // Null-terminate the pointer to the buffer. - outU8Array[outIdx] = 0; - return outIdx - startIdx; -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP. -// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF8(str, outPtr, maxBytesToWrite) { - return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite); -} - -// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte. -function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - var u = str.charCodeAt(i); // possibly a lead surrogate - if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); - if (u <= 0x7F) ++len; - else if (u <= 0x7FF) len += 2; - else if (u <= 0xFFFF) len += 3; - else len += 4; - } - return len; -} - - -// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns -// a copy of that string as a Javascript String object. - -var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined; -function UTF16ToString(ptr) { - var endPtr = ptr; - // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. - // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. - var idx = endPtr >> 1; - while (HEAP16[idx]) ++idx; - endPtr = idx << 1; - - if (endPtr - ptr > 32 && UTF16Decoder) { - return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)); - } else { - var i = 0; - - var str = ''; - while (1) { - var codeUnit = HEAP16[(((ptr)+(i*2))>>1)]; - if (codeUnit == 0) return str; - ++i; - // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. - str += String.fromCharCode(codeUnit); - } - } -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP. -// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write. -// Parameters: -// str: the Javascript string to copy. -// outPtr: Byte address in Emscripten HEAP where to write the string to. -// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null -// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else. -// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF16(str, outPtr, maxBytesToWrite) { - // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. - if (maxBytesToWrite === undefined) { - maxBytesToWrite = 0x7FFFFFFF; - } - if (maxBytesToWrite < 2) return 0; - maxBytesToWrite -= 2; // Null terminator. - var startPtr = outPtr; - var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length; - for (var i = 0; i < numCharsToWrite; ++i) { - // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. - var codeUnit = str.charCodeAt(i); // possibly a lead surrogate - HEAP16[((outPtr)>>1)]=codeUnit; - outPtr += 2; - } - // Null-terminate the pointer to the HEAP. - HEAP16[((outPtr)>>1)]=0; - return outPtr - startPtr; -} - -// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. - -function lengthBytesUTF16(str) { - return str.length*2; -} - -function UTF32ToString(ptr) { - var i = 0; - - var str = ''; - while (1) { - var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; - if (utf32 == 0) - return str; - ++i; - // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - if (utf32 >= 0x10000) { - var ch = utf32 - 0x10000; - str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); - } else { - str += String.fromCharCode(utf32); - } - } -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP. -// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write. -// Parameters: -// str: the Javascript string to copy. -// outPtr: Byte address in Emscripten HEAP where to write the string to. -// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null -// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else. -// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF32(str, outPtr, maxBytesToWrite) { - // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. - if (maxBytesToWrite === undefined) { - maxBytesToWrite = 0x7FFFFFFF; - } - if (maxBytesToWrite < 4) return 0; - var startPtr = outPtr; - var endPtr = startPtr + maxBytesToWrite - 4; - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - var codeUnit = str.charCodeAt(i); // possibly a lead surrogate - if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { - var trailSurrogate = str.charCodeAt(++i); - codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); - } - HEAP32[((outPtr)>>2)]=codeUnit; - outPtr += 4; - if (outPtr + 4 > endPtr) break; - } - // Null-terminate the pointer to the HEAP. - HEAP32[((outPtr)>>2)]=0; - return outPtr - startPtr; -} - -// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. - -function lengthBytesUTF32(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - var codeUnit = str.charCodeAt(i); - if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate. - len += 4; - } - - return len; -} - -// Allocate heap space for a JS string, and write it there. -// It is the responsibility of the caller to free() that memory. -function allocateUTF8(str) { - var size = lengthBytesUTF8(str) + 1; - var ret = _malloc(size); - if (ret) stringToUTF8Array(str, HEAP8, ret, size); - return ret; -} - -// Allocate stack space for a JS string, and write it there. -function allocateUTF8OnStack(str) { - var size = lengthBytesUTF8(str) + 1; - var ret = stackAlloc(size); - stringToUTF8Array(str, HEAP8, ret, size); - return ret; -} - -// Deprecated: This function should not be called because it is unsafe and does not provide -// a maximum length limit of how many bytes it is allowed to write. Prefer calling the -// function stringToUTF8Array() instead, which takes in a maximum length that can be used -// to be secure from out of bounds writes. -/** @deprecated */ -function writeStringToMemory(string, buffer, dontAddNull) { - warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!'); - - var /** @type {number} */ lastChar, /** @type {number} */ end; - if (dontAddNull) { - // stringToUTF8Array always appends null. If we don't want to do that, remember the - // character that existed at the location where the null will be placed, and restore - // that after the write (below). - end = buffer + lengthBytesUTF8(string); - lastChar = HEAP8[end]; - } - stringToUTF8(string, buffer, Infinity); - if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character. -} - -function writeArrayToMemory(array, buffer) { - HEAP8.set(array, buffer); -} - -function writeAsciiToMemory(str, buffer, dontAddNull) { - for (var i = 0; i < str.length; ++i) { - HEAP8[((buffer++)>>0)]=str.charCodeAt(i); - } - // Null-terminate the pointer to the HEAP. - if (!dontAddNull) HEAP8[((buffer)>>0)]=0; -} - - - - -// Memory management - -var PAGE_SIZE = 16384; -var WASM_PAGE_SIZE = 65536; -var ASMJS_PAGE_SIZE = 16777216; - -function alignUp(x, multiple) { - if (x % multiple > 0) { - x += multiple - (x % multiple); - } - return x; -} - -var HEAP, -/** @type {ArrayBuffer} */ - buffer, -/** @type {Int8Array} */ - HEAP8, -/** @type {Uint8Array} */ - HEAPU8, -/** @type {Int16Array} */ - HEAP16, -/** @type {Uint16Array} */ - HEAPU16, -/** @type {Int32Array} */ - HEAP32, -/** @type {Uint32Array} */ - HEAPU32, -/** @type {Float32Array} */ - HEAPF32, -/** @type {Float64Array} */ - HEAPF64; - -function updateGlobalBufferAndViews(buf) { - buffer = buf; - Module['HEAP8'] = HEAP8 = new Int8Array(buf); - Module['HEAP16'] = HEAP16 = new Int16Array(buf); - Module['HEAP32'] = HEAP32 = new Int32Array(buf); - Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf); - Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf); - Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf); - Module['HEAPF32'] = HEAPF32 = new Float32Array(buf); - Module['HEAPF64'] = HEAPF64 = new Float64Array(buf); -} - - -var STATIC_BASE = 1024, - STACK_BASE = 5248240, - STACKTOP = STACK_BASE, - STACK_MAX = 5360, - DYNAMIC_BASE = 5248240, - DYNAMICTOP_PTR = 5168; - - - - -var TOTAL_STACK = 5242880; - -var INITIAL_TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216; - - - - - - - -// In standalone mode, the wasm creates the memory, and the user can't provide it. -// In non-standalone/normal mode, we create the memory here. - -// Create the main memory. (Note: this isn't used in STANDALONE_WASM mode since the wasm -// memory is created in the wasm, not in JS.) - - if (Module['wasmMemory']) { - wasmMemory = Module['wasmMemory']; - } else - { - wasmMemory = new WebAssembly.Memory({ - 'initial': INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE - , - 'maximum': INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE - }); - } - - -if (wasmMemory) { - buffer = wasmMemory.buffer; -} - -// If the user provides an incorrect length, just use that length instead rather than providing the user to -// specifically provide the memory length with Module['TOTAL_MEMORY']. -INITIAL_TOTAL_MEMORY = buffer.byteLength; -updateGlobalBufferAndViews(buffer); - -HEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE; - - - - - - - - - - -function callRuntimeCallbacks(callbacks) { - while(callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback == 'function') { - callback(); - continue; - } - var func = callback.func; - if (typeof func === 'number') { - if (callback.arg === undefined) { - Module['dynCall_v'](func); - } else { - Module['dynCall_vi'](func, callback.arg); - } - } else { - func(callback.arg === undefined ? null : callback.arg); - } - } -} - -var __ATPRERUN__ = []; // functions called before the runtime is initialized -var __ATINIT__ = []; // functions called during startup -var __ATMAIN__ = []; // functions called when main() is to be run -var __ATEXIT__ = []; // functions called during shutdown -var __ATPOSTRUN__ = []; // functions called after the main() is called - -var runtimeInitialized = false; -var runtimeExited = false; - - -function preRun() { - - if (Module['preRun']) { - if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; - while (Module['preRun'].length) { - addOnPreRun(Module['preRun'].shift()); - } - } - - callRuntimeCallbacks(__ATPRERUN__); -} - -function initRuntime() { - runtimeInitialized = true; - - callRuntimeCallbacks(__ATINIT__); -} - -function preMain() { - - callRuntimeCallbacks(__ATMAIN__); -} - -function exitRuntime() { - runtimeExited = true; -} - -function postRun() { - - if (Module['postRun']) { - if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; - while (Module['postRun'].length) { - addOnPostRun(Module['postRun'].shift()); - } - } - - callRuntimeCallbacks(__ATPOSTRUN__); -} - -function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb); -} - -function addOnInit(cb) { - __ATINIT__.unshift(cb); -} - -function addOnPreMain(cb) { - __ATMAIN__.unshift(cb); -} - -function addOnExit(cb) { -} - -function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb); -} - -function unSign(value, bits, ignore) { - if (value >= 0) { - return value; - } - return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts - : Math.pow(2, bits) + value; -} -function reSign(value, bits, ignore) { - if (value <= 0) { - return value; - } - var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32 - : Math.pow(2, bits-1); - if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that - // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors - // TODO: In i64 mode 1, resign the two parts separately and safely - value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts - } - return value; -} - - - -var Math_abs = Math.abs; -var Math_cos = Math.cos; -var Math_sin = Math.sin; -var Math_tan = Math.tan; -var Math_acos = Math.acos; -var Math_asin = Math.asin; -var Math_atan = Math.atan; -var Math_atan2 = Math.atan2; -var Math_exp = Math.exp; -var Math_log = Math.log; -var Math_sqrt = Math.sqrt; -var Math_ceil = Math.ceil; -var Math_floor = Math.floor; -var Math_pow = Math.pow; -var Math_imul = Math.imul; -var Math_fround = Math.fround; -var Math_round = Math.round; -var Math_min = Math.min; -var Math_max = Math.max; -var Math_clz32 = Math.clz32; -var Math_trunc = Math.trunc; - - - -// A counter of dependencies for calling run(). If we need to -// do asynchronous work before running, increment this and -// decrement it. Incrementing must happen in a place like -// Module.preRun (used by emcc to add file preloading). -// Note that you can add dependencies in preRun, even though -// it happens right before run - run will be postponed until -// the dependencies are met. -var runDependencies = 0; -var runDependencyWatcher = null; -var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled - -function getUniqueRunDependency(id) { - return id; -} - -function addRunDependency(id) { - runDependencies++; - - if (Module['monitorRunDependencies']) { - Module['monitorRunDependencies'](runDependencies); - } - -} - -function removeRunDependency(id) { - runDependencies--; - - if (Module['monitorRunDependencies']) { - Module['monitorRunDependencies'](runDependencies); - } - - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null; - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); // can add another dependenciesFulfilled - } - } -} - -Module["preloadedImages"] = {}; // maps url to image data -Module["preloadedAudios"] = {}; // maps url to audio data - - -function abort(what) { - if (Module['onAbort']) { - Module['onAbort'](what); - } - - what += ''; - out(what); - err(what); - - ABORT = true; - EXITSTATUS = 1; - - throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.'; -} - - -var memoryInitializer = null; - - - - - - - -// Copyright 2017 The Emscripten Authors. All rights reserved. -// Emscripten is available under two separate licenses, the MIT license and the -// University of Illinois/NCSA Open Source License. Both these licenses can be -// found in the LICENSE file. - -// Prefix of data URIs emitted by SINGLE_FILE and related options. -var dataURIPrefix = 'data:application/octet-stream;base64,'; - -// Indicates whether filename is a base64 data URI. -function isDataURI(filename) { - return String.prototype.startsWith ? - filename.startsWith(dataURIPrefix) : - filename.indexOf(dataURIPrefix) === 0; -} - - - - -var wasmBinaryFile = 'coremark.wasm'; -if (!isDataURI(wasmBinaryFile)) { - wasmBinaryFile = locateFile(wasmBinaryFile); -} - -function getBinary() { - try { - if (wasmBinary) { - return new Uint8Array(wasmBinary); - } - - if (readBinary) { - return readBinary(wasmBinaryFile); - } else { - throw "both async and sync fetching of the wasm failed"; - } - } - catch (err) { - abort(err); - } -} - -function getBinaryPromise() { - // if we don't have the binary yet, and have the Fetch api, use that - // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web - if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') { - return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) { - if (!response['ok']) { - throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; - } - return response['arrayBuffer'](); - }).catch(function () { - return getBinary(); - }); - } - // Otherwise, getBinary should be able to get it synchronously - return new Promise(function(resolve, reject) { - resolve(getBinary()); - }); -} - - - -// Create the wasm instance. -// Receives the wasm imports, returns the exports. -function createWasm() { - // prepare imports - var info = { - 'env': asmLibraryArg, - 'wasi_unstable': asmLibraryArg - }; - // Load the wasm module and create an instance of using native support in the JS engine. - // handle a generated wasm instance, receiving its exports and - // performing other necessary setup - function receiveInstance(instance, module) { - var exports = instance.exports; - Module['asm'] = exports; - removeRunDependency('wasm-instantiate'); - } - // we can't run yet (except in a pthread, where we have a custom sync instantiator) - addRunDependency('wasm-instantiate'); - - - function receiveInstantiatedSource(output) { - // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance. - // receiveInstance() will swap in the exports (to Module.asm) so they can be called - // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. - // When the regression is fixed, can restore the above USE_PTHREADS-enabled path. - receiveInstance(output['instance']); - } - - - function instantiateArrayBuffer(receiver) { - return getBinaryPromise().then(function(binary) { - return WebAssembly.instantiate(binary, info); - }).then(receiver, function(reason) { - err('failed to asynchronously prepare wasm: ' + reason); - abort(reason); - }); - } - - // Prefer streaming instantiation if available. - function instantiateAsync() { - if (!wasmBinary && - typeof WebAssembly.instantiateStreaming === 'function' && - !isDataURI(wasmBinaryFile) && - typeof fetch === 'function') { - fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) { - var result = WebAssembly.instantiateStreaming(response, info); - return result.then(receiveInstantiatedSource, function(reason) { - // We expect the most common failure cause to be a bad MIME type for the binary, - // in which case falling back to ArrayBuffer instantiation should work. - err('wasm streaming compile failed: ' + reason); - err('falling back to ArrayBuffer instantiation'); - instantiateArrayBuffer(receiveInstantiatedSource); - }); - }); - } else { - return instantiateArrayBuffer(receiveInstantiatedSource); - } - } - // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback - // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel - // to any other async startup actions they are performing. - if (Module['instantiateWasm']) { - try { - var exports = Module['instantiateWasm'](info, receiveInstance); - return exports; - } catch(e) { - err('Module.instantiateWasm callback failed with error: ' + e); - return false; - } - } - - instantiateAsync(); - return {}; // no exports yet; we'll fill them in later -} - - -// Globals used by JS i64 conversions -var tempDouble; -var tempI64; - -// === Body === - -var ASM_CONSTS = []; - - - - -// STATICTOP = STATIC_BASE + 4336; -/* global initializers */ __ATINIT__.push({ func: function() { ___wasm_call_ctors() } }); - - - -/* no memory initializer */ -// {{PRE_LIBRARY}} - - - function demangle(func) { - return func; - } - - function demangleAll(text) { - var regex = - /\b_Z[\w\d_]+/g; - return text.replace(regex, - function(x) { - var y = demangle(x); - return x === y ? x : (y + ' [' + x + ']'); - }); - } - - function jsStackTrace() { - var err = new Error(); - if (!err.stack) { - // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown, - // so try that as a special-case. - try { - throw new Error(0); - } catch(e) { - err = e; - } - if (!err.stack) { - return '(no stack trace available)'; - } - } - return err.stack.toString(); - } - - function stackTrace() { - var js = jsStackTrace(); - if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace'](); - return demangleAll(js); - } - - function _abort() { - abort(); - } - - - function _emscripten_get_now() { abort() } - - function _emscripten_get_now_is_monotonic() { - // return whether emscripten_get_now is guaranteed monotonic; the Date.now - // implementation is not :( - return (0 - || ENVIRONMENT_IS_NODE - || (typeof dateNow !== 'undefined') - || (typeof performance === 'object' && performance && typeof performance['now'] === 'function') - ); - } - - function ___setErrNo(value) { - if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value; - return value; - }function _clock_gettime(clk_id, tp) { - // int clock_gettime(clockid_t clk_id, struct timespec *tp); - var now; - if (clk_id === 0) { - now = Date.now(); - } else if (clk_id === 1 && _emscripten_get_now_is_monotonic()) { - now = _emscripten_get_now(); - } else { - ___setErrNo(28); - return -1; - } - HEAP32[((tp)>>2)]=(now/1000)|0; // seconds - HEAP32[(((tp)+(4))>>2)]=((now % 1000)*1000*1000)|0; // nanoseconds - return 0; - } - - function _emscripten_get_heap_size() { - return HEAP8.length; - } - - function _emscripten_get_sbrk_ptr() { - return 5168; - } - - function _emscripten_memcpy_big(dest, src, num) { - HEAPU8.set(HEAPU8.subarray(src, src+num), dest); - } - - - function abortOnCannotGrowMemory(requestedSize) { - abort('OOM'); - }function _emscripten_resize_heap(requestedSize) { - abortOnCannotGrowMemory(requestedSize); - } - - - function flush_NO_FILESYSTEM() { - // flush anything remaining in the buffers during shutdown - var fflush = Module["_fflush"]; - if (fflush) fflush(0); - var buffers = SYSCALLS.buffers; - if (buffers[1].length) SYSCALLS.printChar(1, 10); - if (buffers[2].length) SYSCALLS.printChar(2, 10); - } - - - var PATH={splitPath:function(filename) { - var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; - return splitPathRe.exec(filename).slice(1); - },normalizeArray:function(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - 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 the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up; up--) { - parts.unshift('..'); - } - } - return parts; - },normalize:function(path) { - var isAbsolute = path.charAt(0) === '/', - trailingSlash = path.substr(-1) === '/'; - // Normalize the path - path = PATH.normalizeArray(path.split('/').filter(function(p) { - return !!p; - }), !isAbsolute).join('/'); - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - return (isAbsolute ? '/' : '') + path; - },dirname:function(path) { - var result = PATH.splitPath(path), - root = result[0], - dir = result[1]; - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - return root + dir; - },basename:function(path) { - // EMSCRIPTEN return '/'' for '/', not an empty string - if (path === '/') return '/'; - var lastSlash = path.lastIndexOf('/'); - if (lastSlash === -1) return path; - return path.substr(lastSlash+1); - },extname:function(path) { - return PATH.splitPath(path)[3]; - },join:function() { - var paths = Array.prototype.slice.call(arguments, 0); - return PATH.normalize(paths.join('/')); - },join2:function(l, r) { - return PATH.normalize(l + '/' + r); - }};var SYSCALLS={buffers:[null,[],[]],printChar:function(stream, curr) { - var buffer = SYSCALLS.buffers[stream]; - if (curr === 0 || curr === 10) { - (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0)); - buffer.length = 0; - } else { - buffer.push(curr); - } - },varargs:0,get:function(varargs) { - SYSCALLS.varargs += 4; - var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)]; - return ret; - },getStr:function() { - var ret = UTF8ToString(SYSCALLS.get()); - return ret; - },get64:function() { - var low = SYSCALLS.get(), high = SYSCALLS.get(); - return low; - },getZero:function() { - SYSCALLS.get(); - }};function _fd_write(fd, iov, iovcnt, pnum) {try { - - // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0 - var num = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[(((iov)+(i*8))>>2)]; - var len = HEAP32[(((iov)+(i*8 + 4))>>2)]; - for (var j = 0; j < len; j++) { - SYSCALLS.printChar(fd, HEAPU8[ptr+j]); - } - num += len; - } - HEAP32[((pnum)>>2)]=num - return 0; - } catch (e) { - if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - - - function _memcpy(dest, src, num) { - dest = dest|0; src = src|0; num = num|0; - var ret = 0; - var aligned_dest_end = 0; - var block_aligned_dest_end = 0; - var dest_end = 0; - // Test against a benchmarked cutoff limit for when HEAPU8.set() becomes faster to use. - if ((num|0) >= 8192) { - _emscripten_memcpy_big(dest|0, src|0, num|0)|0; - return dest|0; - } - - ret = dest|0; - dest_end = (dest + num)|0; - if ((dest&3) == (src&3)) { - // The initial unaligned < 4-byte front. - while (dest & 3) { - if ((num|0) == 0) return ret|0; - HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); - dest = (dest+1)|0; - src = (src+1)|0; - num = (num-1)|0; - } - aligned_dest_end = (dest_end & -4)|0; - block_aligned_dest_end = (aligned_dest_end - 64)|0; - while ((dest|0) <= (block_aligned_dest_end|0) ) { - HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0); - HEAP32[(((dest)+(4))>>2)]=((HEAP32[(((src)+(4))>>2)])|0); - HEAP32[(((dest)+(8))>>2)]=((HEAP32[(((src)+(8))>>2)])|0); - HEAP32[(((dest)+(12))>>2)]=((HEAP32[(((src)+(12))>>2)])|0); - HEAP32[(((dest)+(16))>>2)]=((HEAP32[(((src)+(16))>>2)])|0); - HEAP32[(((dest)+(20))>>2)]=((HEAP32[(((src)+(20))>>2)])|0); - HEAP32[(((dest)+(24))>>2)]=((HEAP32[(((src)+(24))>>2)])|0); - HEAP32[(((dest)+(28))>>2)]=((HEAP32[(((src)+(28))>>2)])|0); - HEAP32[(((dest)+(32))>>2)]=((HEAP32[(((src)+(32))>>2)])|0); - HEAP32[(((dest)+(36))>>2)]=((HEAP32[(((src)+(36))>>2)])|0); - HEAP32[(((dest)+(40))>>2)]=((HEAP32[(((src)+(40))>>2)])|0); - HEAP32[(((dest)+(44))>>2)]=((HEAP32[(((src)+(44))>>2)])|0); - HEAP32[(((dest)+(48))>>2)]=((HEAP32[(((src)+(48))>>2)])|0); - HEAP32[(((dest)+(52))>>2)]=((HEAP32[(((src)+(52))>>2)])|0); - HEAP32[(((dest)+(56))>>2)]=((HEAP32[(((src)+(56))>>2)])|0); - HEAP32[(((dest)+(60))>>2)]=((HEAP32[(((src)+(60))>>2)])|0); - dest = (dest+64)|0; - src = (src+64)|0; - } - while ((dest|0) < (aligned_dest_end|0) ) { - HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0); - dest = (dest+4)|0; - src = (src+4)|0; - } - } else { - // In the unaligned copy case, unroll a bit as well. - aligned_dest_end = (dest_end - 4)|0; - while ((dest|0) < (aligned_dest_end|0) ) { - HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); - HEAP8[(((dest)+(1))>>0)]=((HEAP8[(((src)+(1))>>0)])|0); - HEAP8[(((dest)+(2))>>0)]=((HEAP8[(((src)+(2))>>0)])|0); - HEAP8[(((dest)+(3))>>0)]=((HEAP8[(((src)+(3))>>0)])|0); - dest = (dest+4)|0; - src = (src+4)|0; - } - } - // The remaining unaligned < 4 byte tail. - while ((dest|0) < (dest_end|0)) { - HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); - dest = (dest+1)|0; - src = (src+1)|0; - } - return ret|0; - } - - function _memset(ptr, value, num) { - ptr = ptr|0; value = value|0; num = num|0; - var end = 0, aligned_end = 0, block_aligned_end = 0, value4 = 0; - end = (ptr + num)|0; - - value = value & 0xff; - if ((num|0) >= 67 /* 64 bytes for an unrolled loop + 3 bytes for unaligned head*/) { - while ((ptr&3) != 0) { - HEAP8[((ptr)>>0)]=value; - ptr = (ptr+1)|0; - } - - aligned_end = (end & -4)|0; - value4 = value | (value << 8) | (value << 16) | (value << 24); - - block_aligned_end = (aligned_end - 64)|0; - - while((ptr|0) <= (block_aligned_end|0)) { - HEAP32[((ptr)>>2)]=value4; - HEAP32[(((ptr)+(4))>>2)]=value4; - HEAP32[(((ptr)+(8))>>2)]=value4; - HEAP32[(((ptr)+(12))>>2)]=value4; - HEAP32[(((ptr)+(16))>>2)]=value4; - HEAP32[(((ptr)+(20))>>2)]=value4; - HEAP32[(((ptr)+(24))>>2)]=value4; - HEAP32[(((ptr)+(28))>>2)]=value4; - HEAP32[(((ptr)+(32))>>2)]=value4; - HEAP32[(((ptr)+(36))>>2)]=value4; - HEAP32[(((ptr)+(40))>>2)]=value4; - HEAP32[(((ptr)+(44))>>2)]=value4; - HEAP32[(((ptr)+(48))>>2)]=value4; - HEAP32[(((ptr)+(52))>>2)]=value4; - HEAP32[(((ptr)+(56))>>2)]=value4; - HEAP32[(((ptr)+(60))>>2)]=value4; - ptr = (ptr + 64)|0; - } - - while ((ptr|0) < (aligned_end|0) ) { - HEAP32[((ptr)>>2)]=value4; - ptr = (ptr+4)|0; - } - } - // The remaining bytes. - while ((ptr|0) < (end|0)) { - HEAP8[((ptr)>>0)]=value; - ptr = (ptr+1)|0; - } - return (end-num)|0; - } - - function _setTempRet0($i) { - setTempRet0(($i) | 0); - } -if (ENVIRONMENT_IS_NODE) { - _emscripten_get_now = function _emscripten_get_now_actual() { - var t = process['hrtime'](); - return t[0] * 1e3 + t[1] / 1e6; - }; - } else if (typeof dateNow !== 'undefined') { - _emscripten_get_now = dateNow; - } else if (typeof performance === 'object' && performance && typeof performance['now'] === 'function') { - _emscripten_get_now = function() { return performance['now'](); }; - } else { - _emscripten_get_now = Date.now; - }; -var ASSERTIONS = false; - -// Copyright 2017 The Emscripten Authors. All rights reserved. -// Emscripten is available under two separate licenses, the MIT license and the -// University of Illinois/NCSA Open Source License. Both these licenses can be -// found in the LICENSE file. - -/** @type {function(string, boolean=, number=)} */ -function intArrayFromString(stringy, dontAddNull, length) { - var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; - var u8array = new Array(len); - var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); - if (dontAddNull) u8array.length = numBytesWritten; - return u8array; -} - -function intArrayToString(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - var chr = array[i]; - if (chr > 0xFF) { - if (ASSERTIONS) { - assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.'); - } - chr &= 0xFF; - } - ret.push(String.fromCharCode(chr)); - } - return ret.join(''); -} - - -// ASM_LIBRARY EXTERN PRIMITIVES: Int8Array,Int32Array - -var asmGlobalArg = {}; -var asmLibraryArg = { "abort": _abort, "clock_gettime": _clock_gettime, "emscripten_get_sbrk_ptr": _emscripten_get_sbrk_ptr, "emscripten_memcpy_big": _emscripten_memcpy_big, "emscripten_resize_heap": _emscripten_resize_heap, "fd_write": _fd_write, "memory": wasmMemory, "setTempRet0": _setTempRet0, "table": wasmTable }; -var asm = createWasm(); -Module["asm"] = asm; -var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function() { - return Module["asm"]["__wasm_call_ctors"].apply(null, arguments) -}; - -var _main = Module["_main"] = function() { - return Module["asm"]["main"].apply(null, arguments) -}; - -var _malloc = Module["_malloc"] = function() { - return Module["asm"]["malloc"].apply(null, arguments) -}; - -var _free = Module["_free"] = function() { - return Module["asm"]["free"].apply(null, arguments) -}; - -var ___errno_location = Module["___errno_location"] = function() { - return Module["asm"]["__errno_location"].apply(null, arguments) -}; - -var _setThrew = Module["_setThrew"] = function() { - return Module["asm"]["setThrew"].apply(null, arguments) -}; - -var stackSave = Module["stackSave"] = function() { - return Module["asm"]["stackSave"].apply(null, arguments) -}; - -var stackAlloc = Module["stackAlloc"] = function() { - return Module["asm"]["stackAlloc"].apply(null, arguments) -}; - -var stackRestore = Module["stackRestore"] = function() { - return Module["asm"]["stackRestore"].apply(null, arguments) -}; - -var __growWasmMemory = Module["__growWasmMemory"] = function() { - return Module["asm"]["__growWasmMemory"].apply(null, arguments) -}; - -var dynCall_ii = Module["dynCall_ii"] = function() { - return Module["asm"]["dynCall_ii"].apply(null, arguments) -}; - -var dynCall_iiii = Module["dynCall_iiii"] = function() { - return Module["asm"]["dynCall_iiii"].apply(null, arguments) -}; - -var dynCall_jiji = Module["dynCall_jiji"] = function() { - return Module["asm"]["dynCall_jiji"].apply(null, arguments) -}; - -var dynCall_iidiiii = Module["dynCall_iidiiii"] = function() { - return Module["asm"]["dynCall_iidiiii"].apply(null, arguments) -}; - - - - -// === Auto-generated postamble setup entry stuff === - -Module['asm'] = asm; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -var calledRun; - - -/** - * @constructor - * @this {ExitStatus} - */ -function ExitStatus(status) { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status; -} - -var calledMain = false; - -dependenciesFulfilled = function runCaller() { - // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) - if (!calledRun) run(); - if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled -}; - -function callMain(args) { - - - args = args || []; - - var argc = args.length+1; - var argv = stackAlloc((argc + 1) * 4); - HEAP32[argv >> 2] = allocateUTF8OnStack(thisProgram); - for (var i = 1; i < argc; i++) { - HEAP32[(argv >> 2) + i] = allocateUTF8OnStack(args[i - 1]); - } - HEAP32[(argv >> 2) + argc] = 0; - - - try { - - - var ret = Module['_main'](argc, argv); - - - // if we're not running an evented main loop, it's time to exit - exit(ret, /* implicit = */ true); - } - catch(e) { - if (e instanceof ExitStatus) { - // exit() throws this once it's done to make sure execution - // has been stopped completely - return; - } else if (e == 'SimulateInfiniteLoop') { - // running an evented main loop, don't immediately exit - noExitRuntime = true; - return; - } else { - var toLog = e; - if (e && typeof e === 'object' && e.stack) { - toLog = [e, e.stack]; - } - err('exception thrown: ' + toLog); - quit_(1, e); - } - } finally { - calledMain = true; - } -} - - - - -/** @type {function(Array=)} */ -function run(args) { - args = args || arguments_; - - if (runDependencies > 0) { - return; - } - - - preRun(); - - if (runDependencies > 0) return; // a preRun added a dependency, run will be called later - - function doRun() { - // run may have just been called through dependencies being fulfilled just in this very frame, - // or while the async setStatus time below was happening - if (calledRun) return; - calledRun = true; - - if (ABORT) return; - - initRuntime(); - - preMain(); - - if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized'](); - - if (shouldRunNow) callMain(args); - - postRun(); - } - - if (Module['setStatus']) { - Module['setStatus']('Running...'); - setTimeout(function() { - setTimeout(function() { - Module['setStatus'](''); - }, 1); - doRun(); - }, 1); - } else - { - doRun(); - } -} -Module['run'] = run; - - -function exit(status, implicit) { - - // if this is just main exit-ing implicitly, and the status is 0, then we - // don't need to do anything here and can just leave. if the status is - // non-zero, though, then we need to report it. - // (we may have warned about this earlier, if a situation justifies doing so) - if (implicit && noExitRuntime && status === 0) { - return; - } - - if (noExitRuntime) { - } else { - - ABORT = true; - EXITSTATUS = status; - - exitRuntime(); - - if (Module['onExit']) Module['onExit'](status); - } - - quit_(status, new ExitStatus(status)); -} - -if (Module['preInit']) { - if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; - while (Module['preInit'].length > 0) { - Module['preInit'].pop()(); - } -} - -// shouldRunNow refers to calling main(), not run(). -var shouldRunNow = true; - -if (Module['noInitialRun']) shouldRunNow = false; - - - noExitRuntime = true; - -run(); - - - - - -// {{MODULE_ADDITIONS}} - - - +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_HAS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_HAS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_NODE=ENVIRONMENT_HAS_NODE&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;read_=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable=new WebAssembly.Table({"initial":4,"maximum":4+0,"element":"anyfunc"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var DYNAMIC_BASE=5247376,DYNAMICTOP_PTR=4304;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_TOTAL_MEMORY/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_TOTAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="coremark.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={"env":asmLibraryArg,"wasi_unstable":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}__ATINIT__.push({func:function(){___wasm_call_ctors()}});function _emscripten_get_now(){abort()}function _emscripten_get_now_is_monotonic(){return 0||ENVIRONMENT_IS_NODE||typeof dateNow!=="undefined"||typeof performance==="object"&&performance&&typeof performance["now"]==="function"}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if(clk_id===1&&_emscripten_get_now_is_monotonic()){now=_emscripten_get_now()}else{___setErrNo(28);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(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:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};var SYSCALLS={buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function _fd_write(fd,iov,iovcnt,pnum){try{var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var asmLibraryArg={"a":_clock_gettime,"b":_emscripten_memcpy_big,"c":_emscripten_resize_heap,"d":_fd_write,"memory":wasmMemory,"table":wasmTable};var asm=createWasm();Module["asm"]=asm;var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return Module["asm"]["e"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["f"].apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["g"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["h"].apply(null,arguments)};Module["asm"]=asm;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){args=args||[];var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(thisProgram);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;noExitRuntime=true;run(); diff --git a/test/benchmark/coremark/coremark.wasm b/test/benchmark/coremark/coremark.wasm index a60c268256f9a10418aab51e1030197faba6026d..b6b6fd99441eafe70aff6c64c59c3cabde4590fd 100644 GIT binary patch literal 24773 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 literal 55873 zcmeFa37B0~mG^yyd(NG!ZVgE)sbEfBf(b$@l@LOJ0CmC?0tg~DL2W~&QkA5tGS!d- zo1|hu1)QRwttcdpAjVJZwp*N|VyoTSVz(`*XyYr|bZfV$X!EuM@9)3PovM<6_VB#l z^L$?==bUx+u=ZMOueJ8t!@bw(8{6VKj^p0r&c4o{oSbwguL~z{01)I&PCB{)rYcE} zbDhJhtF%CANsTHb6b^{?PP%(5`C#B}@;ZNSg7bz+_Xg@a*QFY2r8F2jKuD-F&>n662jrXk|8ORK7Shs6*^Z0<1 zQsJO){kG9@ClEYyV9Qwl=;rO?16$XP4vcMn`M|nO1AW__v@&NjWNsPQ(!c%sb?Y~8 zbR6a7#|Fl)9@w(|s)6wyr=*mSBHKo<_uPHnK2HgOHSTVwrL)cqeBbdityw?k_`V+m zX{W8d-AU)$TW93bGYiG0qC0C==yx=yJJO}}%$Z)u!%wwj!e(#MjqkhXh?k#q;`c1f zr@!Vlx2#(Shg;V5_l=CK>mT1XI_89_Eq$A}I=OHQY1{gpC8@#DfdOY}Y2CVk(b28j z){)pZzIoeL=ah_S-!wX~%UPaVw{AnH2@H}4=VH6D4RU8#tSVJf%_y$;>lBe&aibn~KAT-J4IXXGw+SCoofo`7?U zZsbPZ+3vXoH*YygU+68=ZJBPT>edsbO8LkuwI#Jy(zw-HNu9_Ltthpe?XHNN$P=+; z5x4Jm{*F;t7(E*rocsrJZu4a9c4Z=Gp*O$FgB_>aO_jsgT`iis3PwU#!S9W{u9VkH zfkIpwk4qD=^ZZmV$*F~2YB9VN;-{bXcU)BTmEx3BMW^67c_&{fvdD3wrub=h$Jm8M z7_St`=VPZUrCShrhR!Sdyxz@xFcDj<|VeR2b?i zKs;>k+m{-G_i|Gdu7;>6j3y5OwH#f@?%LGj|6L6w6jfah{P&g_)lNBP8~$eYkl$IGG) z!sI3`OWLw_@zbvMXcPhqy27eb=ILXDYtJtPZf3Ho+i)8>ar@SI?@&1# z`{P4p>)9~g_X=-0(g@KDZ=8OkLS~5W4CB-gz1Qo>0r>dND8tZ@8Y-tRMW4hI2*r;X z57oqLfg(@ymljGn3^y(bS-LBLEKoThFXy803OX^t7G(tE-3(WPl00djaJgsG75KZz zAA{=nDQ5?xLVCw&ITdHdqf|03&=4(PrZ^y9s^&-8OXQ8rZ#&SQjf1T?7-Z&S2~yC& z6a=@OzJjqb09(ATX-Cq~(+oeOLFDJHapcVSpgwZc3n0me7ql#C{s>)w;mOdSn zGUZouP?U@zru;b9suJrTiMD4uMNx)tT82p&y0b3!?@ z=W;qqOT&>=qWr14^5>%5@v^AnDc6)gY0KJ?i*-<3*YsI5AQ#$KlCq?efs{Yh*Y}-A{Au+a*f@HT;I@>*@Y;%Uyly@n`oM|=XJxXCvTPS4ITJC*PDK@$$DPM+h}gUvIJd9!7jU-{s+4cpmb~&gdw7(;>z!-tpq18^8H+-W3&$VlH6)k#jb6 zMf=&*O`eAk6Tw)W0>*5bBv^T{nP$tdc|R3OOTgsCRD9GbF8A)y6S~Ree#9#)qJSPZ z_I4;3+BpQ6+EGr&-p-+|W#8}w^o@z`FtQ?wiNYiSB2yzn%f0&);9(i$q^IV5MBRy% zV1;V$Fs*jOcqzNwd!SB%w*&8&SFtK#V6=jXykKq=HooKyl?n;j5S)ihHI`HnR>2?f zN~i_ECp~Et^r~;5+V#bQ8|OxpP->67Rn8gy!w3iUvGQfi-3oc}A#W&lOBuEPu&3Da zVUUAN>67*JvTr#S9>C$*?zdqVfew}3$dR4qOEcn!J5lxcLEVSr$I~P6BbM-uB;m+S z=WH4J=mn1cdf(9d?s9ViJ5QX~AG>45gP0+Pa0v~KNBGHklToc?++TwoXHY_E{s5(8 zCyz=%N#|BbGPd(|zUw?o0{?gTw!ke+dOCIpEF8h;cnwDH4OZmQ<;RmYt`HKcoGEx) zITPRXD_22KCjR-7i*RI__(OMMNPbMr89!Z;N6Ey${CodmEbZGZ!256a2zTZHz4BL9 z(52vqS|}L%K!0D7@Ca(+4>#pYa}bXoKhQz<(FPVGJG(inK-r1E!hl!g`6ixC6qHL( zNtTJpiO!ml)eW6OFuE9RDQBZ5&9!nD;hpiF%e}Ws(Xfu&^<*qN;KlDi590&q{>ke8 z#h9`*tYXtb-{t0MNfxXKj}ngvad9f*n=6QKsvzFy#orX-eZL3dR2A{}@E1`*h_eaB zQ2G?+6Jcdf>Iub9xbd3^5aTD@V^M5@A_G7oQF9v%Gn!D917?+|c*uw^MrGH_y+_^n zbHes$1zUQ#_n;epTS*UAlN!wDO#g@*|6I98$bDXvZpf<`mg8)w8dhQh2`MA@PbvKF zGyVJA_?8@)?h_`(X~YUgqnqE`pP-B1QYtZ

L9To;uY0N(KLN?~ofG62e0X;qlk# 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