From ce48f77cd4f0171aabc6f61f4c80e5cdb82126d3 Mon Sep 17 00:00:00 2001 From: Surma Date: Tue, 21 Aug 2018 10:00:48 +0100 Subject: [PATCH 1/3] Make WebP decoder use memory views --- codecs/webp_dec/example.html | 33 ++++-------------- codecs/webp_dec/package.json | 2 +- codecs/webp_dec/webp_dec.c | 51 ---------------------------- codecs/webp_dec/webp_dec.cpp | 47 ++++++++++++++++++++++++++ codecs/webp_dec/webp_dec.d.ts | 14 +++++++- codecs/webp_dec/webp_dec.js | 23 ++++++++----- codecs/webp_dec/webp_dec.wasm | Bin 134492 -> 155413 bytes src/codecs/webp/Decoder.worker.ts | 54 +++++------------------------- 8 files changed, 90 insertions(+), 134 deletions(-) delete mode 100644 codecs/webp_dec/webp_dec.c create mode 100644 codecs/webp_dec/webp_dec.cpp diff --git a/codecs/webp_dec/example.html b/codecs/webp_dec/example.html index eea1a9755..3f971ca73 100644 --- a/codecs/webp_dec/example.html +++ b/codecs/webp_dec/example.html @@ -9,35 +9,14 @@ } Module.onRuntimeInitialized = async _ => { - const api = { - version: Module.cwrap('version', 'number', []), - create_buffer: Module.cwrap('create_buffer', 'number', ['number', 'number']), - destroy_buffer: Module.cwrap('destroy_buffer', '', ['number']), - decode: Module.cwrap('decode', '', ['number', 'number']), - free_result: Module.cwrap('free_result', '', ['number']), - get_result_pointer: Module.cwrap('get_result_pointer', 'number', []), - get_result_width: Module.cwrap('get_result_width', 'number', []), - get_result_height: Module.cwrap('get_result_height', 'number', []), - }; - console.log('Version:', api.version().toString(16)); + console.log('Version:', Module.version().toString(16)); const image = await loadFile('../example.webp'); - const p = api.create_buffer(image.byteLength); - Module.HEAP8.set(new Uint8Array(image), p); - api.decode(p, image.byteLength); - const resultPointer = api.get_result_pointer(); - if(resultPointer === 0) { - throw new Error("Could not decode image"); - } - const resultWidth = api.get_result_width(); - const resultHeight = api.get_result_height(); - const resultView = new Uint8Array(Module.HEAP8.buffer, resultPointer, resultWidth * resultHeight * 4); - const result = new Uint8ClampedArray(resultView); - const imageData = new ImageData(result, resultWidth, resultHeight); - api.free_result(resultPointer); - api.destroy_buffer(p); + const result = Module.decode(image); + const imageData = new ImageData(new Uint8ClampedArray(result.buffer), result.width, result.height); + Module.free_result(); const canvas = document.createElement('canvas'); - canvas.width = resultWidth; - canvas.height = resultHeight; + canvas.width = result.width; + canvas.height = result.height; document.body.appendChild(canvas); const ctx = canvas.getContext('2d'); ctx.putImageData(imageData, 0, 0); diff --git a/codecs/webp_dec/package.json b/codecs/webp_dec/package.json index 6a5271b24..ccc2e5a72 100644 --- a/codecs/webp_dec/package.json +++ b/codecs/webp_dec/package.json @@ -2,7 +2,7 @@ "name": "webp_dec", "scripts": { "install": "napa", - "build": "docker run --rm -v $(pwd):/src trzeci/emscripten emcc -O3 -s WASM=1 -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"cwrap\"]' -s ALLOW_MEMORY_GROWTH=1 -s MODULARIZE=1 -s 'EXPORT_NAME=\"webp_dec\"' -I node_modules/libwebp -o ./webp_dec.js webp_dec.c node_modules/libwebp/src/{dec,dsp,demux,enc,mux,utils}/*.c" + "build": "docker run --rm -v $(pwd):/src trzeci/emscripten emcc -O3 --bind -s ALLOW_MEMORY_GROWTH=1 -s MODULARIZE=1 -s 'EXPORT_NAME=\"webp_dec\"' --std=c++11 -I node_modules/libwebp -o ./webp_dec.js node_modules/libwebp/src/{dec,dsp,demux,enc,mux,utils}/*.c -x c++ webp_dec.cpp" }, "napa": { "libwebp": "webmproject/libwebp#v1.0.0" diff --git a/codecs/webp_dec/webp_dec.c b/codecs/webp_dec/webp_dec.c deleted file mode 100644 index eccdb67d9..000000000 --- a/codecs/webp_dec/webp_dec.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "emscripten.h" -#include "src/webp/decode.h" -#include "src/webp/demux.h" -#include - -EMSCRIPTEN_KEEPALIVE -int version() { - return WebPGetDecoderVersion(); -} - -EMSCRIPTEN_KEEPALIVE -uint8_t* create_buffer(int size) { - return malloc(size); -} - -EMSCRIPTEN_KEEPALIVE -void destroy_buffer(uint8_t* p) { - free(p); -} - -int result[3]; -EMSCRIPTEN_KEEPALIVE -void decode(uint8_t* img_in, int size) { - int width, height; - uint8_t* img_out = WebPDecodeRGBA(img_in, size, &width, &height); - result[0] = (int)img_out; - result[1] = width; - result[2] = height; - -} - -EMSCRIPTEN_KEEPALIVE -void free_result() { - WebPFree(result[0]); -} - -EMSCRIPTEN_KEEPALIVE -int get_result_pointer() { - return result[0]; -} - -EMSCRIPTEN_KEEPALIVE -int get_result_width() { - return result[1]; -} - -EMSCRIPTEN_KEEPALIVE -int get_result_height() { - return result[2]; -} - diff --git a/codecs/webp_dec/webp_dec.cpp b/codecs/webp_dec/webp_dec.cpp new file mode 100644 index 000000000..1edff9acf --- /dev/null +++ b/codecs/webp_dec/webp_dec.cpp @@ -0,0 +1,47 @@ +#include "emscripten/bind.h" +#include "emscripten/val.h" +#include "src/webp/decode.h" +#include "src/webp/demux.h" +#include + +using namespace emscripten; + +int version() { + return WebPGetDecoderVersion(); +} + +class RawImage { +public: + val buffer; + int width; + int height; + + RawImage(val b, int w, int h) + : buffer(b), width(w), height(h) {} +}; + +uint8_t* last_result; +RawImage decode(std::string buffer) { + int width, height; + last_result = WebPDecodeRGBA((const uint8_t*)buffer.c_str(), buffer.size(), &width, &height); + return RawImage( + val(typed_memory_view(width*height*4, last_result)), + width, + height + ); +} + +void free_result() { + free(last_result); +} + +EMSCRIPTEN_BINDINGS(my_module) { + class_("RawImage") + .property("buffer", &RawImage::buffer) + .property("width", &RawImage::width) + .property("height", &RawImage::height); + + function("decode", &decode); + function("version", &version); + function("free_result", &free_result); +} diff --git a/codecs/webp_dec/webp_dec.d.ts b/codecs/webp_dec/webp_dec.d.ts index 9f2e9ca16..a53187bbf 100644 --- a/codecs/webp_dec/webp_dec.d.ts +++ b/codecs/webp_dec/webp_dec.d.ts @@ -1 +1,13 @@ -export default function(opts: EmscriptenWasm.ModuleOpts): EmscriptenWasm.Module; +interface RawImage { + buffer: Uint8Array; + width: number; + height: number; +} + +interface WebPModule extends EmscriptenWasm.Module { + decode(data: BufferSource): RawImage; + free_result(): void; +} + +export default function(opts: EmscriptenWasm.ModuleOpts): WebPModule; + diff --git a/codecs/webp_dec/webp_dec.js b/codecs/webp_dec/webp_dec.js index cb257285e..3aa5968bd 100644 --- a/codecs/webp_dec/webp_dec.js +++ b/codecs/webp_dec/webp_dec.js @@ -1,17 +1,24 @@ -var webp_dec = function(webp_dec) { + +var webp_dec = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + return ( +function(webp_dec) { webp_dec = webp_dec || {}; -var Module=typeof webp_dec!=="undefined"?webp_dec:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["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()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}var functionPointers=new Array(0);var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}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)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}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;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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}function integrateWasmJS(){var wasmTextFile="webp_dec.wast";var wasmBinaryFile="webp_dec.wasm";var asmjsCodeFile="webp_dec.temp.asm.js";if(typeof Module["locateFile"]==="function"){if(!isDataURI(wasmTextFile)){wasmTextFile=Module["locateFile"](wasmTextFile)}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=Module["locateFile"](wasmBinaryFile)}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=Module["locateFile"](asmjsCodeFile)}}var wasmPageSize=64*1024;var info={"global":null,"env":null,"asm2wasm":{"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})},"parent":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module["buffer"];if(newBuffer.byteLength>2]=value;return value}DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;Module["wasmTableSize"]=168;Module["wasmMaxTableSize"]=168;Module.asmGlobalArg={};Module.asmLibraryArg={"abort":abort,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"___assert_fail":___assert_fail,"___setErrNo":___setErrNo,"_emscripten_memcpy_big":_emscripten_memcpy_big,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"STACKTOP":STACKTOP};var asm=Module["asm"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=(function(){return Module["asm"]["___errno_location"].apply(null,arguments)});var _create_buffer=Module["_create_buffer"]=(function(){return Module["asm"]["_create_buffer"].apply(null,arguments)});var _decode=Module["_decode"]=(function(){return Module["asm"]["_decode"].apply(null,arguments)});var _destroy_buffer=Module["_destroy_buffer"]=(function(){return Module["asm"]["_destroy_buffer"].apply(null,arguments)});var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=(function(){return Module["asm"]["_emscripten_replace_memory"].apply(null,arguments)});var _free_result=Module["_free_result"]=(function(){return Module["asm"]["_free_result"].apply(null,arguments)});var _get_result_height=Module["_get_result_height"]=(function(){return Module["asm"]["_get_result_height"].apply(null,arguments)});var _get_result_pointer=Module["_get_result_pointer"]=(function(){return Module["asm"]["_get_result_pointer"].apply(null,arguments)});var _get_result_width=Module["_get_result_width"]=(function(){return Module["asm"]["_get_result_width"].apply(null,arguments)});var _version=Module["_version"]=(function(){return Module["asm"]["_version"].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 stackSave=Module["stackSave"]=(function(){return Module["asm"]["stackSave"].apply(null,arguments)});var dynCall_vi=Module["dynCall_vi"]=(function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)});Module["asm"]=asm;Module["cwrap"]=cwrap;Module["then"]=(function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();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&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() +var Module=typeof webp_dec!=="undefined"?webp_dec:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["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()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["quit"]=(function(status){process["exit"](status)});Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WEB){if(document.currentScript){scriptDirectory=document.currentScript.src}}else{scriptDirectory=self.location.href}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.split("/").slice(0,-1).join("/")+"/"}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=(function(title){document.title=title})}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}var asm2wasmImports={"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})};var functionPointers=new Array(0);var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}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(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){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;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function 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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}function integrateWasmJS(){var wasmTextFile="webp_dec.wast";var wasmBinaryFile="webp_dec.wasm";var asmjsCodeFile="webp_dec.temp.asm.js";if(!isDataURI(wasmTextFile)){wasmTextFile=locateFile(wasmTextFile)}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=locateFile(asmjsCodeFile)}var wasmPageSize=64*1024;var info={"global":null,"env":null,"asm2wasm":asm2wasmImports,"parent":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module["buffer"];if(newBuffer.byteLength0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module["dynCall_vi"](info.destructor,ptr)}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])});case 3:return(function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])});default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){return value}),"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",(function(){}));dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var endChar=HEAPU8[value+4+length];var endCharSwap=0;if(endChar!=0){endCharSwap=endChar;HEAPU8[value+4+length]=0}var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0){var stringSegment=UTF8ToString(decodeStartPtr);if(str===undefined)str=stringSegment;else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}if(endCharSwap!=0)HEAPU8[value+4+length]=endCharSwap}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var a=new Array(length);var start=value+4>>shift;for(var i=0;i>2]=length;var start=ptr+4>>shift;for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){Module["abort"]()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}var PTHREAD_SPECIFIC_NEXT_KEY=1;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module["dynCall_v"](func);_pthread_once.seen[ptr]=1}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;Module["wasmTableSize"]=222;Module["wasmMaxTableSize"]=222;Module.asmGlobalArg={};Module.asmLibraryArg={"abort":abort,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"___assert_fail":___assert_fail,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall146":___syscall146,"___syscall6":___syscall6,"__embind_register_bool":__embind_register_bool,"__embind_register_class":__embind_register_class,"__embind_register_class_property":__embind_register_class_property,"__embind_register_emval":__embind_register_emval,"__embind_register_float":__embind_register_float,"__embind_register_function":__embind_register_function,"__embind_register_integer":__embind_register_integer,"__embind_register_memory_view":__embind_register_memory_view,"__embind_register_std_string":__embind_register_std_string,"__embind_register_std_wstring":__embind_register_std_wstring,"__embind_register_void":__embind_register_void,"__emval_decref":__emval_decref,"__emval_incref":__emval_incref,"__emval_take_value":__emval_take_value,"_abort":_abort,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_pthread_getspecific":_pthread_getspecific,"_pthread_key_create":_pthread_key_create,"_pthread_once":_pthread_once,"_pthread_setspecific":_pthread_setspecific,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"STACKTOP":STACKTOP};var asm=Module["asm"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module["asm"]=asm;var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_bind_cpp"].apply(null,arguments)});var __GLOBAL__sub_I_webp_dec_cpp=Module["__GLOBAL__sub_I_webp_dec_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_webp_dec_cpp"].apply(null,arguments)});var ___errno_location=Module["___errno_location"]=(function(){return Module["asm"]["___errno_location"].apply(null,arguments)});var ___getTypeName=Module["___getTypeName"]=(function(){return Module["asm"]["___getTypeName"].apply(null,arguments)});var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=(function(){return Module["asm"]["_emscripten_replace_memory"].apply(null,arguments)});var _free=Module["_free"]=(function(){return Module["asm"]["_free"].apply(null,arguments)});var _malloc=Module["_malloc"]=(function(){return Module["asm"]["_malloc"].apply(null,arguments)});var dynCall_i=Module["dynCall_i"]=(function(){return Module["asm"]["dynCall_i"].apply(null,arguments)});var dynCall_ii=Module["dynCall_ii"]=(function(){return Module["asm"]["dynCall_ii"].apply(null,arguments)});var dynCall_iii=Module["dynCall_iii"]=(function(){return Module["asm"]["dynCall_iii"].apply(null,arguments)});var dynCall_iiii=Module["dynCall_iiii"]=(function(){return Module["asm"]["dynCall_iiii"].apply(null,arguments)});var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=(function(){return Module["asm"]["dynCall_iiiiiii"].apply(null,arguments)});var dynCall_jiiii=Module["dynCall_jiiii"]=(function(){return Module["asm"]["dynCall_jiiii"].apply(null,arguments)});var dynCall_v=Module["dynCall_v"]=(function(){return Module["asm"]["dynCall_v"].apply(null,arguments)});var dynCall_vi=Module["dynCall_vi"]=(function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)});var dynCall_vii=Module["dynCall_vii"]=(function(){return Module["asm"]["dynCall_vii"].apply(null,arguments)});var dynCall_viii=Module["dynCall_viii"]=(function(){return Module["asm"]["dynCall_viii"].apply(null,arguments)});var dynCall_viiii=Module["dynCall_viiii"]=(function(){return Module["asm"]["dynCall_viiii"].apply(null,arguments)});var dynCall_viiiii=Module["dynCall_viiiii"]=(function(){return Module["asm"]["dynCall_viiiii"].apply(null,arguments)});var dynCall_viiiiii=Module["dynCall_viiiiii"]=(function(){return Module["asm"]["dynCall_viiiiii"].apply(null,arguments)});var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=(function(){return Module["asm"]["dynCall_viiiiiiiii"].apply(null,arguments)});Module["asm"]=asm;Module["then"]=(function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() return webp_dec; -}; +} +); +})(); if (typeof exports === 'object' && typeof module === 'object') - module.exports = webp_dec; -else if (typeof define === 'function' && define['amd']) - define([], function() { return webp_dec; }); -else if (typeof exports === 'object') - exports["webp_dec"] = webp_dec; + module.exports = webp_dec; + else if (typeof define === 'function' && define['amd']) + define([], function() { return webp_dec; }); + else if (typeof exports === 'object') + exports["webp_dec"] = webp_dec; + \ No newline at end of file diff --git a/codecs/webp_dec/webp_dec.wasm b/codecs/webp_dec/webp_dec.wasm index 94a96846e628e045fcb9b9754ace765d499edc4e..86369dbc5a839f6822b74adcca2380483310d8da 100644 GIT binary patch literal 155413 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 literal 134492 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 - private api: Promise; + private emscriptenModule: Promise; constructor() { this.emscriptenModule = new Promise((resolve) => { @@ -41,44 +30,17 @@ export default class WebpDecoder { }, }); }); - - this.api = (async () => { - // Not sure why, but TypeScript complains that I am using - // `emscriptenModule` before it’s getting assigned, which is clearly not - // true :shrug: Using `any` - const m = await (this as any).emscriptenModule; - return { - version: m.cwrap('version', 'number', []), - create_buffer: m.cwrap('create_buffer', 'number', ['number']), - destroy_buffer: m.cwrap('destroy_buffer', '', ['number']), - decode: m.cwrap('decode', '', ['number', 'number']), - free_result: m.cwrap('free_result', '', []), - get_result_pointer: m.cwrap('get_result_pointer', 'number', []), - get_result_height: m.cwrap('get_result_height', 'number', []), - get_result_width: m.cwrap('get_result_width', 'number', []), - }; - })(); } async decode(data: ArrayBuffer): Promise { const m = await this.emscriptenModule; - const api = await this.api; + const rawImage = m.decode(data); + m.free_result(); - const p = api.create_buffer(data.byteLength); - m.HEAP8.set(new Uint8Array(data), p); - api.decode(p, data.byteLength); - const resultPointer = api.get_result_pointer(); - const resultWidth = api.get_result_width(); - const resultHeight = api.get_result_height(); - const resultView = new Uint8Array( - m.HEAP8.buffer, - resultPointer, - resultWidth * resultHeight * 4, + return new ImageData( + new Uint8ClampedArray(rawImage.buffer), + rawImage.width, + rawImage.height, ); - const result = new Uint8ClampedArray(resultView); - api.free_result(); - api.destroy_buffer(p); - - return new ImageData(result, resultWidth, resultHeight); } } From f333e2ec85e4c098f46725e678fc9ea14f55dabe Mon Sep 17 00:00:00 2001 From: Surma Date: Tue, 21 Aug 2018 11:54:21 +0100 Subject: [PATCH 2/3] Update webp_dec README --- codecs/webp_dec/README.md | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/codecs/webp_dec/README.md b/codecs/webp_dec/README.md index 5b231002d..46117f359 100644 --- a/codecs/webp_dec/README.md +++ b/codecs/webp_dec/README.md @@ -13,30 +13,10 @@ See `example.html` Returns the version of libwebp as a number. va.b.c is encoded as 0x0a0b0c -### `uint8_t* create_buffer(int size)` +### `RawImage decode(std::string buffer)` -Allocates an buffer for the file data. - -### `void destroy_buffer(uint8_t* p)` - -Frees a buffer created with `create_buffer`. - -### `void decode(uint8_t* img_in, int size)` - -Decodes the given webp file into raw RGBA. The result is implicitly stored and can be accessed using the `get_result_*()` functions. +Decodes the given webp buffer into raw RGBA. `RawImage` is a class with 3 fields: `buffer`, `width`, and `height`. ### `void free_result()` Frees the result created by `decode()`. - -### `int get_result_pointer()` - -Returns the pointer to the start of the buffer holding the encoded data. Length is width x height x 4 bytes. - -### `int get_result_width()` - -Returns the width of the image. - -### `int get_result_height()` - -Returns the height of the image. From 7b9d2d16815ecab8234ecb064cc56b029a9deb49 Mon Sep 17 00:00:00 2001 From: Surma Date: Tue, 21 Aug 2018 13:19:58 +0100 Subject: [PATCH 3/3] Port quantizer to memory views as well --- .gitignore | 1 + codecs/imagequant/README.md | 18 ++-- codecs/imagequant/example.html | 25 ++---- .../{imagequant.c => imagequant.cpp} | 77 +++++++++++------- codecs/imagequant/imagequant.d.ts | 16 +++- codecs/imagequant/imagequant.js | 23 ++++-- codecs/imagequant/imagequant.wasm | Bin 62147 -> 74470 bytes codecs/imagequant/package.json | 5 +- src/codecs/imagequant/Quantizer.worker.ts | 57 ++----------- 9 files changed, 102 insertions(+), 120 deletions(-) rename codecs/imagequant/{imagequant.c => imagequant.cpp} (81%) diff --git a/.gitignore b/.gitignore index 94757426a..9d58f0085 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules /*.log *.scss.d.ts *.css.d.ts +*.o diff --git a/codecs/imagequant/README.md b/codecs/imagequant/README.md index 1ef857adb..2d9d7343d 100644 --- a/codecs/imagequant/README.md +++ b/codecs/imagequant/README.md @@ -17,22 +17,14 @@ See `example.html` Returns the version of libimagequant as a number. va.b.c is encoded as 0x0a0b0c -### `uint8_t* create_buffer(int width, int height)` +### `RawImage quantize(std::string buffer, int image_width, int image_height, int numColors, float dithering)` -Allocates an RGBA buffer for an image with the given dimension. +Quantizes the given images, using at most `numColors`, a value between 2 and 256. `dithering` is a value between 0 and 1 controlling the amount of dithering. `RawImage` is a class with 3 fields: `buffer`, `width`, and `height`. -### `void destroy_buffer(uint8_t* p)` +### `RawImage zx_quantize(std::string buffer, int image_width, int image_height, float dithering)` -Frees a buffer created with `create_buffer`. - -### `void quantize(uint8_t* image_buffer, int image_width, int image_height, int numColors, float dithering)` - -Quantizes the given images, using at most `numColors`, a value between 2 and 256. `dithering` is a value between 0 and 1 controlling the amount of dithering. +??? ### `void free_result()` -Frees the result created by `encode()`. - -### `int get_result_pointer()` - -Returns the pointer to the start of the buffer holding the encoded data. It has the same size as the input image buffer. +Frees the result created by `quantize()`. diff --git a/codecs/imagequant/example.html b/codecs/imagequant/example.html index a1e27885c..36da340ca 100644 --- a/codecs/imagequant/example.html +++ b/codecs/imagequant/example.html @@ -23,29 +23,14 @@ } Module.onRuntimeInitialized = async _ => { - const api = { - version: Module.cwrap('version', 'number', []), - create_buffer: Module.cwrap('create_buffer', 'number', ['number', 'number']), - destroy_buffer: Module.cwrap('destroy_buffer', '', ['number']), - quantize: Module.cwrap('quantize', '', ['number', 'number', 'number', 'number', 'number']), - zx_quantize: Module.cwrap('zx_quantize', '', ['number', 'number', 'number', 'number']), - free_result: Module.cwrap('free_result', '', ['number']), - get_result_pointer: Module.cwrap('get_result_pointer', 'number', []), - }; - console.log('Version:', api.version().toString(16)); + console.log('Version:', Module.version().toString(16)); const image = await loadImage('../example.png'); - const p = api.create_buffer(image.width, image.height); - Module.HEAP8.set(image.data, p); - //api.quantize(p, image.width, image.height, 256, 1.0); - api.zx_quantize(p, image.width, image.height, 1); + // const rawImage = Module.quantize(image.data, image.width, image.height, 256, 1.0); + const rawImage = Module.zx_quantize(image.data, image.width, image.height, 1.0); console.log('done'); - const resultPointer = api.get_result_pointer(); - const resultView = new Uint8Array(Module.HEAP8.buffer, resultPointer, image.width * image.height * 4); - const result = new Uint8ClampedArray(resultView); - api.free_result(); - api.destroy_buffer(p); + Module.free_result(); - const imageData = new ImageData(result, image.width, image.height); + const imageData = new ImageData(new Uint8ClampedArray(rawImage.buffer), rawImage.width, rawImage.height); const canvas = document.createElement('canvas'); canvas.width = image.width; canvas.height = image.height; diff --git a/codecs/imagequant/imagequant.c b/codecs/imagequant/imagequant.cpp similarity index 81% rename from codecs/imagequant/imagequant.c rename to codecs/imagequant/imagequant.cpp index 28032382d..034eaee33 100644 --- a/codecs/imagequant/imagequant.c +++ b/codecs/imagequant/imagequant.cpp @@ -1,4 +1,5 @@ -#include "emscripten.h" +#include "emscripten/bind.h" +#include "emscripten/val.h" #include #include #include @@ -6,29 +7,31 @@ #include "libimagequant.h" -EMSCRIPTEN_KEEPALIVE +using namespace emscripten; + int version() { return (((LIQ_VERSION/10000) % 100) << 16) | (((LIQ_VERSION/100 ) % 100) << 8) | (((LIQ_VERSION/1 ) % 100) << 0); } -EMSCRIPTEN_KEEPALIVE -uint8_t* create_buffer(int width, int height) { - return malloc(width * height * 4 * sizeof(uint8_t)); -} +class RawImage { +public: + val buffer; + int width; + int height; + + RawImage(val b, int w, int h) + : buffer(b), width(w), height(h) {} +}; -EMSCRIPTEN_KEEPALIVE -void destroy_buffer(uint8_t* p) { - free(p); -} liq_attr *attr; liq_image *image; liq_result *res; -int result; -EMSCRIPTEN_KEEPALIVE -void quantize(uint8_t* image_buffer, int image_width, int image_height, int num_colors, float dithering) { +uint8_t* result; +RawImage quantize(std::string rawimage, int image_width, int image_height, int num_colors, float dithering) { + const uint8_t* image_buffer = (uint8_t*)rawimage.c_str(); int size = image_width * image_height; attr = liq_attr_create(); image = liq_image_create_rgba(attr, image_buffer, image_width, image_height, 0); @@ -36,20 +39,25 @@ void quantize(uint8_t* image_buffer, int image_width, int image_height, int num_ liq_image_quantize(image, attr, &res); liq_set_dithering_level(res, dithering); uint8_t* image8bit = (uint8_t*) malloc(size); - result = (int) malloc(size * 4); + result = (uint8_t*) malloc(size * 4); liq_write_remapped_image(res, image, image8bit, size); const liq_palette *pal = liq_get_palette(res); // Turn palletted image back into an RGBA image for(int i = 0; i < size; i++) { - ((uint8_t*)result)[i * 4 + 0] = pal->entries[image8bit[i]].r; - ((uint8_t*)result)[i * 4 + 1] = pal->entries[image8bit[i]].g; - ((uint8_t*)result)[i * 4 + 2] = pal->entries[image8bit[i]].b; - ((uint8_t*)result)[i * 4 + 3] = pal->entries[image8bit[i]].a; + result[i * 4 + 0] = pal->entries[image8bit[i]].r; + result[i * 4 + 1] = pal->entries[image8bit[i]].g; + result[i * 4 + 2] = pal->entries[image8bit[i]].b; + result[i * 4 + 3] = pal->entries[image8bit[i]].a; } free(image8bit); liq_result_destroy(res); liq_image_destroy(image); liq_attr_destroy(attr); + return { + val(typed_memory_view(image_width*image_height*4, result)), + image_width, + image_height + }; } const liq_color zx_colors[] = { @@ -76,11 +84,11 @@ uint8_t block[8 * 8 * 4]; * The ZX has one bit per pixel, but can assign two colours to an 8x8 block. The two colours must * both be 'regular' or 'bright'. Black exists as both regular and bright. */ -EMSCRIPTEN_KEEPALIVE -void zx_quantize(uint8_t* image_buffer, int image_width, int image_height, float dithering) { +RawImage zx_quantize(std::string rawimage, int image_width, int image_height, float dithering) { + const uint8_t* image_buffer = (uint8_t*) rawimage.c_str(); int size = image_width * image_height; int bytes_per_pixel = 4; - result = (int) malloc(size * bytes_per_pixel); + result = (uint8_t*) malloc(size * bytes_per_pixel); uint8_t* image8bit = (uint8_t*) malloc(8 * 8); // For each 8x8 grid @@ -199,10 +207,10 @@ void zx_quantize(uint8_t* image_buffer, int image_width, int image_height, float for(int x = 0; x < block_width; x++) { int image8BitPos = y * block_width + x; int resultStartPos = ((block_start_y + y) * bytes_per_pixel * image_width) + ((block_start_x + x) * bytes_per_pixel); - ((uint8_t*)result)[resultStartPos + 0] = pal->entries[image8bit[image8BitPos]].r; - ((uint8_t*)result)[resultStartPos + 1] = pal->entries[image8bit[image8BitPos]].g; - ((uint8_t*)result)[resultStartPos + 2] = pal->entries[image8bit[image8BitPos]].b; - ((uint8_t*)result)[resultStartPos + 3] = pal->entries[image8bit[image8BitPos]].a; + result[resultStartPos + 0] = pal->entries[image8bit[image8BitPos]].r; + result[resultStartPos + 1] = pal->entries[image8bit[image8BitPos]].g; + result[resultStartPos + 2] = pal->entries[image8bit[image8BitPos]].b; + result[resultStartPos + 3] = pal->entries[image8bit[image8BitPos]].a; } } @@ -213,14 +221,25 @@ void zx_quantize(uint8_t* image_buffer, int image_width, int image_height, float } free(image8bit); + return { + val(typed_memory_view(image_width*image_height*4, result)), + image_width, + image_height + }; } -EMSCRIPTEN_KEEPALIVE void free_result() { free(result); } -EMSCRIPTEN_KEEPALIVE -int get_result_pointer() { - return result; +EMSCRIPTEN_BINDINGS(my_module) { + class_("RawImage") + .property("buffer", &RawImage::buffer) + .property("width", &RawImage::width) + .property("height", &RawImage::height); + + function("quantize", &quantize); + function("zx_quantize", &zx_quantize); + function("version", &version); + function("free_result", &free_result); } diff --git a/codecs/imagequant/imagequant.d.ts b/codecs/imagequant/imagequant.d.ts index 9f2e9ca16..ebba1574d 100644 --- a/codecs/imagequant/imagequant.d.ts +++ b/codecs/imagequant/imagequant.d.ts @@ -1 +1,15 @@ -export default function(opts: EmscriptenWasm.ModuleOpts): EmscriptenWasm.Module; +interface RawImage { + buffer: Uint8Array; + width: number; + height: number; +} + +interface QuantizerModule extends EmscriptenWasm.Module { + quantize(data: BufferSource, width: number, height: number, numColors: number, dither: number): RawImage; + zx_quantize(data: BufferSource, width: number, height: number, dither: number): RawImage; + free_result(): void; +} + +export default function(opts: EmscriptenWasm.ModuleOpts): QuantizerModule; + + diff --git a/codecs/imagequant/imagequant.js b/codecs/imagequant/imagequant.js index 474c495ed..b965c1de0 100644 --- a/codecs/imagequant/imagequant.js +++ b/codecs/imagequant/imagequant.js @@ -1,17 +1,24 @@ -var imagequant = function(imagequant) { + +var imagequant = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + return ( +function(imagequant) { imagequant = imagequant || {}; -var Module=typeof imagequant!=="undefined"?imagequant:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["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()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}var functionPointers=new Array(0);var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}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)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}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;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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}function integrateWasmJS(){var wasmTextFile="imagequant.wast";var wasmBinaryFile="imagequant.wasm";var asmjsCodeFile="imagequant.temp.asm.js";if(typeof Module["locateFile"]==="function"){if(!isDataURI(wasmTextFile)){wasmTextFile=Module["locateFile"](wasmTextFile)}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=Module["locateFile"](wasmBinaryFile)}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=Module["locateFile"](asmjsCodeFile)}}var wasmPageSize=64*1024;var info={"global":null,"env":null,"asm2wasm":{"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})},"parent":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module["buffer"];if(newBuffer.byteLength>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module["print"]:Module["printErr"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;Module["wasmTableSize"]=22;Module["wasmMaxTableSize"]=22;Module.asmGlobalArg={};Module.asmLibraryArg={"abort":abort,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"___assert_fail":___assert_fail,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall146":___syscall146,"___syscall6":___syscall6,"_abort":_abort,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_llvm_stackrestore":_llvm_stackrestore,"_llvm_stacksave":_llvm_stacksave,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"STACKTOP":STACKTOP};var asm=Module["asm"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=(function(){return Module["asm"]["___errno_location"].apply(null,arguments)});var _create_buffer=Module["_create_buffer"]=(function(){return Module["asm"]["_create_buffer"].apply(null,arguments)});var _destroy_buffer=Module["_destroy_buffer"]=(function(){return Module["asm"]["_destroy_buffer"].apply(null,arguments)});var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=(function(){return Module["asm"]["_emscripten_replace_memory"].apply(null,arguments)});var _free_result=Module["_free_result"]=(function(){return Module["asm"]["_free_result"].apply(null,arguments)});var _get_result_pointer=Module["_get_result_pointer"]=(function(){return Module["asm"]["_get_result_pointer"].apply(null,arguments)});var _quantize=Module["_quantize"]=(function(){return Module["asm"]["_quantize"].apply(null,arguments)});var _version=Module["_version"]=(function(){return Module["asm"]["_version"].apply(null,arguments)});var _zx_quantize=Module["_zx_quantize"]=(function(){return Module["asm"]["_zx_quantize"].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 stackSave=Module["stackSave"]=(function(){return Module["asm"]["stackSave"].apply(null,arguments)});var dynCall_vi=Module["dynCall_vi"]=(function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)});Module["asm"]=asm;Module["cwrap"]=cwrap;Module["then"]=(function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();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&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() +var Module=typeof imagequant!=="undefined"?imagequant:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["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()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["quit"]=(function(status){process["exit"](status)});Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["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"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WEB){if(document.currentScript){scriptDirectory=document.currentScript.src}}else{scriptDirectory=self.location.href}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.split("/").slice(0,-1).join("/")+"/"}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=(function(title){document.title=title})}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}var asm2wasmImports={"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})};var functionPointers=new Array(0);var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}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(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){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;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function 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"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}function integrateWasmJS(){var wasmTextFile="imagequant.wast";var wasmBinaryFile="imagequant.wasm";var asmjsCodeFile="imagequant.temp.asm.js";if(!isDataURI(wasmTextFile)){wasmTextFile=locateFile(wasmTextFile)}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=locateFile(asmjsCodeFile)}var wasmPageSize=64*1024;var info={"global":null,"env":null,"asm2wasm":asm2wasmImports,"parent":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module["buffer"];if(newBuffer.byteLength0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module["dynCall_vi"](info.destructor,ptr)}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])});case 3:return(function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])});default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){return value}),"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",(function(){}));dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var endChar=HEAPU8[value+4+length];var endCharSwap=0;if(endChar!=0){endCharSwap=endChar;HEAPU8[value+4+length]=0}var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0){var stringSegment=UTF8ToString(decodeStartPtr);if(str===undefined)str=stringSegment;else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}if(endCharSwap!=0)HEAPU8[value+4+length]=endCharSwap}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var a=new Array(length);var start=value+4>>shift;for(var i=0;i>2]=length;var start=ptr+4>>shift;for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){Module["abort"]()}function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);stackRestore(ret)}function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}var PTHREAD_SPECIFIC_NEXT_KEY=1;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module["dynCall_v"](func);_pthread_once.seen[ptr]=1}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;Module["wasmTableSize"]=74;Module["wasmMaxTableSize"]=74;Module.asmGlobalArg={};Module.asmLibraryArg={"abort":abort,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"___assert_fail":___assert_fail,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall146":___syscall146,"___syscall6":___syscall6,"__embind_register_bool":__embind_register_bool,"__embind_register_class":__embind_register_class,"__embind_register_class_property":__embind_register_class_property,"__embind_register_emval":__embind_register_emval,"__embind_register_float":__embind_register_float,"__embind_register_function":__embind_register_function,"__embind_register_integer":__embind_register_integer,"__embind_register_memory_view":__embind_register_memory_view,"__embind_register_std_string":__embind_register_std_string,"__embind_register_std_wstring":__embind_register_std_wstring,"__embind_register_void":__embind_register_void,"__emval_decref":__emval_decref,"__emval_incref":__emval_incref,"__emval_take_value":__emval_take_value,"_abort":_abort,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_llvm_stackrestore":_llvm_stackrestore,"_llvm_stacksave":_llvm_stacksave,"_pthread_getspecific":_pthread_getspecific,"_pthread_key_create":_pthread_key_create,"_pthread_once":_pthread_once,"_pthread_setspecific":_pthread_setspecific,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"STACKTOP":STACKTOP};var asm=Module["asm"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module["asm"]=asm;var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_bind_cpp"].apply(null,arguments)});var __GLOBAL__sub_I_imagequant_cpp=Module["__GLOBAL__sub_I_imagequant_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_imagequant_cpp"].apply(null,arguments)});var ___errno_location=Module["___errno_location"]=(function(){return Module["asm"]["___errno_location"].apply(null,arguments)});var ___getTypeName=Module["___getTypeName"]=(function(){return Module["asm"]["___getTypeName"].apply(null,arguments)});var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=(function(){return Module["asm"]["_emscripten_replace_memory"].apply(null,arguments)});var _free=Module["_free"]=(function(){return Module["asm"]["_free"].apply(null,arguments)});var _malloc=Module["_malloc"]=(function(){return Module["asm"]["_malloc"].apply(null,arguments)});var stackRestore=Module["stackRestore"]=(function(){return Module["asm"]["stackRestore"].apply(null,arguments)});var stackSave=Module["stackSave"]=(function(){return Module["asm"]["stackSave"].apply(null,arguments)});var dynCall_i=Module["dynCall_i"]=(function(){return Module["asm"]["dynCall_i"].apply(null,arguments)});var dynCall_ifi=Module["dynCall_ifi"]=(function(){return Module["asm"]["dynCall_ifi"].apply(null,arguments)});var dynCall_ii=Module["dynCall_ii"]=(function(){return Module["asm"]["dynCall_ii"].apply(null,arguments)});var dynCall_iii=Module["dynCall_iii"]=(function(){return Module["asm"]["dynCall_iii"].apply(null,arguments)});var dynCall_iiii=Module["dynCall_iiii"]=(function(){return Module["asm"]["dynCall_iiii"].apply(null,arguments)});var dynCall_iiiiif=Module["dynCall_iiiiif"]=(function(){return Module["asm"]["dynCall_iiiiif"].apply(null,arguments)});var dynCall_iiiiiif=Module["dynCall_iiiiiif"]=(function(){return Module["asm"]["dynCall_iiiiiif"].apply(null,arguments)});var dynCall_v=Module["dynCall_v"]=(function(){return Module["asm"]["dynCall_v"].apply(null,arguments)});var dynCall_vi=Module["dynCall_vi"]=(function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)});var dynCall_vif=Module["dynCall_vif"]=(function(){return Module["asm"]["dynCall_vif"].apply(null,arguments)});var dynCall_vii=Module["dynCall_vii"]=(function(){return Module["asm"]["dynCall_vii"].apply(null,arguments)});var dynCall_viii=Module["dynCall_viii"]=(function(){return Module["asm"]["dynCall_viii"].apply(null,arguments)});var dynCall_viiii=Module["dynCall_viiii"]=(function(){return Module["asm"]["dynCall_viiii"].apply(null,arguments)});var dynCall_viiiif=Module["dynCall_viiiif"]=(function(){return Module["asm"]["dynCall_viiiif"].apply(null,arguments)});var dynCall_viiiii=Module["dynCall_viiiii"]=(function(){return Module["asm"]["dynCall_viiiii"].apply(null,arguments)});var dynCall_viiiiif=Module["dynCall_viiiiif"]=(function(){return Module["asm"]["dynCall_viiiiif"].apply(null,arguments)});var dynCall_viiiiii=Module["dynCall_viiiiii"]=(function(){return Module["asm"]["dynCall_viiiiii"].apply(null,arguments)});Module["asm"]=asm;Module["then"]=(function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() return imagequant; -}; +} +); +})(); if (typeof exports === 'object' && typeof module === 'object') - module.exports = imagequant; -else if (typeof define === 'function' && define['amd']) - define([], function() { return imagequant; }); -else if (typeof exports === 'object') - exports["imagequant"] = imagequant; + module.exports = imagequant; + else if (typeof define === 'function' && define['amd']) + define([], function() { return imagequant; }); + else if (typeof exports === 'object') + exports["imagequant"] = imagequant; + \ No newline at end of file diff --git a/codecs/imagequant/imagequant.wasm b/codecs/imagequant/imagequant.wasm index 3dfae7276c61f08db45f14e21aee1475d7f5f727..40f2472d7dfe9c58388326c5e4f8f294d3761733 100644 GIT binary patch literal 74470 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 GlK%_Ecl#6o literal 62147 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∈!2t4= z0P=4W1uc+&b1W=VYUQ_mQo{0)%yN4qAN5I&{FJLcDFl4RCwGzj8K2xw@^e0UfaDi^ za-QTDee!mazv7c`C;7ZjzKi5neey1nU-QWyCi!)re2C;92{6|uACg3YnAv;zGaW*_ z6HjW)T!(w7d4&ARk=#afa`;Kj5lPLJPFlUz3-B3d3K#cRCwf_jOG2^ab`nlTg#^D~ zZ}}XPf`!uF8<3Fn=9N(_gfghx%I&Ai?H|CRkk0S`kFqJyLT{AETlW_s{Ve;5$vF8) zB@tcp%SCd_bssCzpDkaWI61!3i(Y*T_j@J22Z8TF;Cm4G9t6Gzf$u@!zb**G_@?6# z*Wx|09&U~7&r65S5qEk()&~YhIp3E(fpvmETLun>xET@UM?d7f+I9#G^XMRn~j6}zEg!Y$|AQeinQFdSpGAv{_@v(*DzEq3uD$U z8}D5$_ceoImw}%iK@O2N=Lk#1%1_gIxu2+lM;ecLNXcTZvo2>pcOy$(;tb^4nRME- z!julB=D4h^yLw(5ZdFcH!%IGRXyGd#Jaq8ga$<(z(zdHBaG-0)CTM|$PW4V(o`cup z7retzAH18m;2lAIgLl0P-pOSWy7Zkj@qDooI$2KkCmVtoRwUj!xev7XNdj1GgMg|m zUj!h5C9S~1_JYHeRe_}{BcOEX-hg7Y*#9)3ga;3l@Zf>cG@x*Kjex>RWiE;a6R>vz z%HZ`7DE=Kl8N3?;#lO?3kgC}sQ2aZ9QoZv)0U+|p8x$~)$9k7}5(}hKhX6Q|)_Rhu z;jVL&cBn!(1A$UT9#|lX)^JA-vRfnB@_mQWy^-vhVfO4u_Qqkh8)g^PmPZub0~u>+ z%U+&5m3oq!*)s64Pd#Z{w4nsk`x!}0=HWanbsPkyPM;1FHZzF0DfSDa`_g@9K|>fH!lc@0Nj@Op?^UbBUH!RsM* zd5y>Yg4ZCJwT);hHUww;?Y?6G<&VQ44f2?U4`QLCg>8st7aZ9bBnTt>r&|AWF%Poh zAI_9tnJKrG|6#^Xh*~2owYZmq<1)wa_bVs>Pd|=b_6ijKb`+}T>9%|VZesPWQ#3_O z-o6G)a3EwyQndRyVX}y=%h-Hra(~x#E=BLi6!X?#O&F7qKpMlzs56(%ejl#O7F3+g zN2`ISVeA2M#ue3&v-P(*`;$#@0 z;#}ot653`ZENP|VVr@lm5_fbIDUNj4fsB^)xS&bYDBpl0g89 zr9vPAK`A|Xdn|8O4j*>oeaDxGYvD~OZz(GejxOGHRi3qLZ&glv#mt?sEAUUGocsiu zZyRcfaD~PK6PO*&+O-8A91Eg<-Px`C;Ped#YWfj|$S>X+2n7}#MwJV~!_Kwuq{}!T zqZ$PjIEx|(Beqn41bG1xq-#{(X|f z%Q{nP!DRUL(FpWFu+{mZt&1@baaC4y-nGxI?>{HQWN(35_efS~rvm0|hv%hABF{MO46w+)p4V!B+NDSsm^ z&zmT(e-~vN-$mKxYc5-dznZ42BUj@WSi3sE+5u_s%f7ES0V z8}(9N_x=M#>>>-nk=u|Bkr)0_?WmwqKKE%|nN|Mb?}E>Ne4f}w6o_}x0ygS(*)ewf?GL`!2D=ZTal=1 z^Oh^FXoVAg?p2XaI)K_~)j2y6>+goXaYB}cjDR54H?{!&6j zVL%+sF7ft9nm?$r1(%A%*~c5{baf|=)>ZrM#*A`jznG#Zwv26yZcv)GdRrNQ;~oj^ zL4L`0rN7LUh7NZ4W78KFkfq2zGn~)j3yXn*nzSbj`_Ub}&=L;kje;2Xzyg)EqZlyT z?n&4JBy5y7s%{HaIqddp9u;C>2E_ z*$rGR9xMfRf?R5lW3GZ6bYjC#Sv6eLQDqlk2VdBcNI)H>>L{#TA^kBuj=7GvS(8#> z*7qQ5E@K9wZYQ!{eD=v_K-4r*l!_7Elzlb!yWX;oLimODqso7!K!mu8Vi;y6g#{b3 z(YU3w!}B7SkqWSq#Q`WDlx2v{7P2Ce8LL9ypjC()!d48mNuMEc`}hG$s*(i^2y9r) zB1HfUlPnr9hlyKwshMa%v!4qn*axPt-)-xiYCKg@vm zDJvQB*_KwfB%by6$LvG9d?6;lBUXS%fR=}pg{au|CJD{14@j~2O~r&>6p(@z(Wu}t z2wf4SgT)wXZ4i)h!Hb&TRb&Kf3KExNMl={j@3GK~m4olqQM#{NAc>2K?t!l#Z70*q zlZ=`hfneC$QKfbwOlrDW4@{>e%c`2)Z{t9g$+}$}`(sQ#qytH`s7k|YSQHM#kr`=2 z+k2Jj@L}Z?mH5=@iA1!XE*6cDQN--E4Du7E(>qB@ir$MaPYQO?0n2^4{v99yNMvc z!P`!8#beHex0my_5G+HlsLd+*m{YeKhc9uzRWECgIrU1UdX>`}zHB|_)Tu6F4Q+LX zFFTJp^?5n88oLe1nm!|0Ifwww-%H5T=DN$XVg}e0dfZfZMX@PUa;EM!6@)o%bldbu zuaw_HT$51K$a`iRR znu~p=eci}zz~JlF>* z_DrstaSGEKZ8uUG2eyELu5lDB%1%(5)$+hwLXp-jLV83uZbfhiS4(5Dx==S;gZ$mdN|+r#SwZq z?u&Sc{9;+8!OMsxJ-DH*wyJfLFJSSZ6wr-&Au9=WbeA68a)G??nKDJG1XojJFAdrQ zSLwZT@W54i?;1RCmEI5PNDXGf-%kJzVOzZ!E`bt|%?^+$G;tDf37?Z7|C=4fw0U z=T{j3mQ^kSnMjWbWbcvTiU6TievH#k#P?CZr`^O2}I zyVs3^qNoCSXb7y$(-ray`9vQpiBxH%%j~nFMvJB2MU0_3)sh&aFHv=2IeJz(c+=kb zh*9QXUM=1+Xq}O@D*;k}iJN)c!gd8SXJ$GZ&oE?b2?qGWp+a)ynXi{lKJ7T$XZAiF zLW#Y%6~^LB9dnf@k(a89@3qj)vITz=(65P5q!^hv9lXrprP$xpNlP$MOW(Z^T%BU} zbmvDT84oe*N6spG*rUt#`2ME+Jvxa(N4t{!$RRu=SrKLbI%YJElmPPpQ^YAaVh?Xc+ngFXKboYs#@O%AP7Oh`5R`e6su!C)%~}w-fV- zHSmi3`TLxhe~uIL+C&N`=CSBCum6qm45KS2i>}~!6m>s=)!!{wNVU+^`37#GvYv2S z=?|{YQ8(!Kfl;VN$M87^uv~tHzJ80oWYWg>NF$Q@J7oS-GTR{90jo(xtIH_U-3;NJ z^Q6u>%ZKRCL}Rb%+_Orn;EF%e%$13;>lTgPfmbz!LI@ z*x0H6y+{X!#|b%QOd7D=wZai@E!DDPC7yP^J#<*N6NKj6e0~}DzbriNpFf8|%C*Gc zUoJCUVOQ?G4W|fuyPtNKJ+by_4eqivlDI|j*L(j^Tiqk{E8jqM-c%eCe1zEnU%f$+M_Z^9l^>=SkdIo!#`2pz7ht20pP z+4$#a?4Mt)jWy#t)c7wwF){&pYmp|Lx>?W(YHlUNGdP6b-6zGMoONuJ`_wIW2J~@4 zHVmCZC^LP#^(94S5M?^Gz#gMZ-wF>RrWA0`;kgB|o_>o|S2cJ{Zr~CogrSb0+D>FZ zeJdPs*T*P8bvWXVcc&3vaMpD}CWn=0`)xoPR^F3_9dy(lM?n95h+Q#LHM^(Eb9v0F zQv65Udb?a>sB%pkW;lo6DB4^L03gwWf2%N4wWSp|kFN2ohvJD}|MhYm!HE)RLS{)@ zTVXtG6Q;R!WgB-HvGhJ`!64d3>wMmBL>f~mlhL1dn}5QMeg15*<(8GzKm1zyQQamH z(knj;f}2%sbu&g24P~$!D$34ms0~zL=!KaQYReCE~@U?6~{+}tnQ@0V)m5pDek(QPcwka27dHq!Z$Miz=r+2+pDvaOq%K#Vp! zW7py9I5|^3P}{ zEgh9=k^oJrrH`I7cAe|Es2rDWc+rt&G}n^?rFC|57RuxUt|tU>`OOe0fjWeK=(Yh# zKmj&U5eJw-n^c`YR1e%fe<)+=t!|R{7n_da$e@zj#4WaGLy4CTR%O3+5V@!OeZrd; z56YI9L_%);G@=tFwXKqx#WaJ(^ONBbIP10{I5SFY(h47p~yV3{6m^i1$U-cw<%}6t$ zhinY`{0%!{W4TEok&wO?Fec(1dnlNIZ7~D<4I?y0sS+_EWh$w_SlH%}G%(?3@-8Zx znJzPK!nI|@C@FxX{|;pkJaFAu7&#Av_6wk30tDA3*X)zjceXg1>815FaSTC^@)0uK zWe=WojEmt&l~U634ZX^z;;1^cb7gF;RYk=tm1Tm>n)1IJTPilfxm49Lm)fY6Qtrnp zA+J(ZLfHhCMKKPDCS*&=1K5#6gIhn_Y@nK~&{>+#b1%+jPzJ-_MlG(t&`-;cTGuLp zRHsix(vI$YnOeX{!sLW`94HgVG$k3LI_p|rKoJ@R;)N9ravzV_-)$rvmH*e(tbtf? zLX$@&?{#;gnyQ8YqYQd#4|>uaU-rg;#~uJx?W!6MN49ktO^SfRlGDB_BeJI3b}eJu z-$uZX4UzFv6LliJ&5R|p>riI6OhF>n+u37>34=5EjcFH@kzj!u7}?AdtW2?L#q)W# z);41}jtOYv9%$oqml&5RGZjg*o=}3ZPBP5cmVD?E?Rr*FaXgDeClucxP^WH6QJ%oZ zOnlx9KrMR)Z#b5WuJoZ=U0{$hLKSz8@|JhHSm-30g!P~BW0Rlims7!LX&Oli8=lUL zdc5HRuySlgZL>H?d6~~XI*`0C;==~fI}Byj_YZ!SPfrcLeUN@kJLK;$G{xB)E?Jz* z(7ZLscbY`((Ji%gwK`;>BDl=GHWY6tCG0ovV{q$pnbcWGG*gT`CM2I@^p~;dcqAO#8B|5^r(L3dGTC& zn>ovP?wsMgoF6<-v@xit;SHWR1sa-JIopRZpNnj9O^K;9oIV{iKy&LG7-`W~g@e}^ z8Kd(-B+C2z*LA3jR^`;Lg;l7QKEM$dsozoYZ|l%fgdxs1_gDqmML!7ztf+Z@e0jqk z>sMr)u50pDtcAj$o5*Tq-S*K(T8o1oZU2uq>H?Iw+NmNbS19u#fTy2Rbolar_|p&e zO~2z4u_dT9VqB&KfPo!E4K2{6dbPXFGy?LgaiGsT|1M-7P2(}T!pCegEzkYV zAO92G{neYs*-SPe)Fc7Fb{LgxChUyTMsmiC0E`D6sfR(2qOR-uU@E`q64)}m0&rQh zoG}xaA2gR1Q?vozsEKogPfYTi`_ovJVVSzlb8y`hxYPEkt3Q7!)m0!W=l@t3EO&vs}%5gc7O;OtS{Qs!z4DpNc`X zNIsbdrAhh!Y}7i_Md6!f8pl70a7C40*_1~l@u(ygD8`JHMfjopir_>O-o4`KD>c9< zPc#s?#f!G;L*C{!;~&u8`)@^h1Fuw;J(c>?wK{5UAt?H6qU?WjghESOg9XeLJi>&9 zvy2(%EEMDcZ@HVa*Mn~qngZK)^G$~`s=^zU!VIRAu{|zh$gq4YCL(|@aF#1~DS`_5 zhg4cH2`H8TzhlqTK>%Vps$!^xN z!)DJCM(y$+;PB2naTR7@86ib%=nI*7(0rjiMXa*swG%g}HjV~Rh{nv($jGH<2|hx* z&ij62`VBE~j8^@YAf(qWqEP@v6@aXP*czAt7VI6kn1A?$Rtae@E66*kFW1i+muo zYlx;XF}Htits&lEs_MD7mTT2Bc%EIu7*h~tDDT#gLt)S7QW2BF4sk=_q<|tddn1cR^)b_zlX(C<$QR2g)v4Ba(kjk*?3cz;0`f=_-5R0T^L!7Muh+U%0-5JUfG z5Rs3(L_q5^E%4Ma7A-Y>09&>eY(rf(>TV{bTduL?dN(6E5<)kKRKQ0I2D!HUJ&*>T zMxjz(=`8#BrnF#lsw>ZH2AQxKB*bf2<79C=Hk`}-$P@i=T!>fP1Zd{kUbb~DNLcZ# zYdPQS)FfmpG6^lf@SJ4GDa_tXu5|9!#+r>l$==?cWS)k#vEkxp^Xu^mqPn;7!>WRd zJLQqRoFAmyW&ChG&~|WL z;n#F2|F7lO=px7Uw6+%lBXp37qTp^W6S=X%^X_ziv2Xa`sw8tR=7tZ`#jfGQY;pDQ zVQaBl;RaXN-R|OQi#*s>cUKp?EIC(qyR!4=iv8!@HBaVy+&*`W0?PK(-Tq=v=Jwua z?%O^2-ryk8Et3_Pr))cfnaCqD#qt^jN*I?Wp^MFCghTmbe9q1NVv}+<13;5<+p1R} zRFa6WEd5+Q%(gq;E|V&V-1cEMpK^=b*3!0m1P*JT_8IHhAK<5pWFTVW8^XLASLRy=w zXhz>e(TfMqk=w0u*LX13(4cY@aSz(sNIPuM=;Omiw{~h{bl_4yXxDMqvN5rkWzi^G z>56;<18$d}L9SiNFBEx|C=QzAW8flc4sD#t8}@8xFMM5`YW}DIAh?pbbI&}-DMDUh zD~O)!9>ozx)TO*{EiKu5*rzxqwL0q_^Y5_v*1dx${Lu?sKq1o5QWj}wDLWWoDLX)b zqsVt$R0kAz4grIfvhtP+2Ne8$4OoAUl#gIkDjZB8rE)rY!PG~OUR>pI%!j0~@o+Sm zRTVmiYFtmu7BHYYw}(eBLZQ5C%nWg8$=(uJqMV+Xj7N;M;*VbFbIKIdmK8qG0VGHT zNRSGUAZ0V_R?QR>p***thw_%P@|Lpl6Ph*K!Vx&CAYmyhXDO83 zuzCDhN0EBduxY-_<>J=-T36Wbb#90Kz9Go*D9Rrt;F4*3LasTrI0$F9k+4sK4ZJ zZzzXUt9;K90%@?0;Ft)_V@PQq|K!I2TZgXi^jc)%1Wx)d2a9zbOc3UWp98-`C@QGCPj zi7Sc+JGW6zyoQ;uEk-%P0!?U|i&_xw8!$)1qX>83@X-_Qev#-6(1s|Jhilz|VG+^m zb;{ijfU9;0B`|8eh&n6cyw+X2o@lRg*NJG2riV1X_6$cup%HBsV2)ndip1J`l8XilyfX3ch}R{0TYRO*E;WLa5=#h_DN9IJJxi~5?TcZxNs5&F@Q zZw!642(_x9>i5miAMFTR8Oytt{aUObN63;Rp89Ed2av+PFg`B*jVvuGa7(a2spIgW zEBmCVM&l!LSdwd%iH}I@W1V>}VL|-BVigprn81VqK3PKB8N8i~wr@0>BafE-Lv?(R z3+&NCM$gP2H?mwC8lOKl9NAKT@SOeacG6vL=$=uzH&*;d zY4IeMIs`J96&o=}%-P57bY*0YX5uVuRN zhUei)=*mqZn;>n!ezY(!rX4`?S=NkVdq3^Z{nt3{MD}ep!)KYVmQXroWuRc4AWUoP zh2x00NJ2_}w~UH-vJCy%E2F(NE@u=qGCw{Z)&G{_4TdUp*N5tB2Qu zejLd(MH@xx*;knPPAJD8x}LNruz z2w#z|O9Uj88&9H`TVO08&vycCn=r!DiVHFH42fS*My<8f)ku*Gdoiz(jT{0p1!h|c zghf-4X=;mK+wMfLn>Uxu1d)?9E%HkRY9AM)6j@&Dcwi`VaW^G=+L| z1%eykbG5U^Mvj76*&@<_kWCtfMvZfaU1GG1Hl6$|8H90?ddHik!p{kdbT!)buvc0y z*#+$L*$~QS8geIG@#>)=hog=qn-Z%YE&{N?iOOb)XGAzcUQj5GM9)ZUlD`5nvi~7Z zuUZ}--aHge$W})K@kdt?%~j<4APeh7KEhPaJHGQ_2ajW&tre;~F`Cl=$EEO7)CqqC zZfvDgM+splGs-SJVn}|VQ#FN1uvLLJp=~hm0H%;fg&nr5?t_L|dqo`_+J3|E9E<$4 z43cdO9lx_PWY+OOKB$1dB^VDZT@GKUF9C!3JgZF?SVSU01-!YY?v$hLHd%dyg))lX z{rI#=guTC6LI$eyg}I{3pK8ewp5I7v%?=x~7K+L*V#(<9b65j)<|LdEUm&I;wn8Q# zl&C!hPKGP$LvePb*?A~Df;lPPFLt;opAWSXA`>YN6pkqN7Le>>~qexdi^X(0{Ly(Ln>sC|P{R0>+vz6vE`LzjOXTu6H`{4(uxzTQ7 zb(^#f9X+FoXIwXt_R9R)x(V^i=(~XC^Z~>ayVHq^G%~kX{@7#RjE@otQL^6$%kcu5 zjCIyP+Sl(G!8L;xErI)5wFx#<1#oG?Xd7di!IsIdqyd8A@O;l85^#BM)6Z2%U@3R} z`XYasi0(?N=vc0OdJlT6xvP%i+Eo$6vbjZbNAApGo&)xInt%~4JjwXwRj0 zy3GnTc23jfW4tzz2D=H6DW7Svja9qjUfRk+%Ys&KX~C%uOiXii4&4da2l;2MMAT0A zpZ?_I`5Xi1@TSZA3euVLhANlfK7HtklXC}GS9RAns54bHMw0~DSR@ur^BpsFI>AhD-p zF>LJnHZvii;jSJ;wpG3~gMJfJy=reZ=kGA>4?muzNa?%MOWUTc3+ zqV+5P&r=8GH#|`JPM$iLJ(FMOg@NL^Vmp;=Y+q<^#9I#B578x9h_6RtNO24cxgnp0 zdd8?9)fjZ`w(5Lg#?28O+g?EqP5M(z_9L$oTRsG6`I{q%r=u~>d7#ZDiasD!8w49U{-TC!;r*|3GQ=0bSM$Fh!(c|GD#S|u*+)Ixs6ZfHvmlbkDqWz*t96sge{ILDz?KqURV9j&wnB4v~5N@S%k_Zt$i9 zL+TI1fRlZVT*3pPMmVvzSMm#E(4JeXxIIUnJFB>*N1jSd?_*%%*Pnm%;Cq3Pe%PC-M&v2yX|unyRCH(!i}t3I-{a*#b&e!1a*p;#izcQX;Df~$TNpXJ_Fxl30clh1zjvB&VTUI(0P)Ng@u z=d_>odeuB&vzd0+%iXxiy-q)~Zoj;RQiRiPcX&agbE}Vq*EAj;v@1YTj?-;!k6tU9 zc01I}Cmtb-96e*4!1q-gD^~7D(TDG~?FrS35AC6s?;bu(Yb&67GYhSS<{;%Q2!V*` z;fh9U#lG`yHxAtb3e1=CN(K=Z46b?#%F&%4rD${_!xl9XZ`;UGN_DWvIaAD)EMAA zu+cR|Mr;AIf?U(n_NCqexu)Ujl641=)7t?Ra7U30!pjj$4LAN)xytbU+>SOiQ%mP? zh?n2^R(5wd%YlxZTwu{osGnX$GyY>94*IJWWE zt>U^q+nvx7I8l@o zzI{R2NmHyGeC!kAx2(YukHzk`*nN((4W0maD(=&h;BfPMSY7V^Dn;+4E ze7g^CvemF(tty(@E(Ri)S>9@ySU+&0cd?x+|4mxZ+$2?Z5B|QEMU=9 z`DJ)zSMsiMdQ#h=ZG4bAgx4-Dimxqy9iKv^FiOQPj_As5xySFr-H8d!0o&Us(}fYk+O&%OZkW&&4kz;O+&NLAveP`-RRg2;?}O53b&!?6rY$)B!W}Mdi0Rg zy%%r_Cs#3Udc8Y!AA`L)1QWCEPTZV-))g0yK)V^ySbJX-y)iO>i%H zmy}=E@v5z~$)P|zGDnI{N{?`eef1ch+XeZy`v8adlP%pl+$PBZRg~x&@Cfv)uN8Y9 z(I9jp9s+KT@=9m;uyMdEqyn#y8s(Ld?@jACg0TtXgH7;^aHN_}#Er%xVt<&@v&iKa zv4{jVVral3;n}mu<*&jb8^t1H6^k_8CR-GB1cMPa;ksU~*6Y@{z;gPEd?3GIx?Cx--EV5QRENCr<|>@&jtG@4pXrj?m-BiQH00d{JHxW z-UsXDhjHiir3bZfXE(qM=PpBU$GvW6s06v6M4%So@tZK9RPxRzi(O_N?#f}n2F>I- zyBxM3!{7)!(#B&$@_lEX1I1-5?&i~O`zH%$h$9%ne(R2}8|SVvx18H76}IX%8CUfI zCvS4;bBwc2mA`z;>Sw(@^w%fdEcOubDsRDLt}{-ApTU-k3y^{Qg;fai?KbWug}I2 zgd4j1Pp`u_L)zi;Cw|Hm_i_k3k6Qf8pvLOi8c`3~V+8YP!XASVp@ zrTKFqH9P+#L;Jdo4MK=Wa_vfZ8AbJ5zx{Ln_A7VZ^YMc&`lX@>Pj5fC_GFd((ps@| zP<)^-;LN()ncd1V;r{y@@1A$X6QK~J2nd<)&#w)nd@p*k8q&MxpIpms{cHc`7uWvX zuRitWHJ9H{9k!Chp1OI4;2dVDODB??+mx&{jY~XMnNsU7#@t){bjob4) z@aMY)LWAhrY&mlr7Fy*ao#fB9SsG>P;t!9sI*xsbYofssSm>`3k4<&+Kl{-^aazh0 zCuBW{%&YB1x@qnS0H^0JH=LJ+Fs_d?~-`!Gtz5YS^OKT68% z#PRSQ@mn1^;OyoAzoe`Ib@Kdc=;Y@A*iOFw8amOc_Rl>PaeWd1Xq07KCHTT2w&)2c z6ohTrn3d1*33b^8gIzks1(<=Hcmp}CU|81diEhhdTKlTM_RvQ?L68zJ(5(VABHbmb zh1fKq66I?6syRUy?kdS5i~n%BPjcC`kE5{o54+NU0>6wyCnn4yiV#w$eY|%T9#lqk zdB&u4Cwf05-;|58Uuwl0)*VzGIIAMLx6`Z&|*->YBxVv-* zr$WLNnK8kyu8Gv?Hbysrx$v|$yKtnglisT5V^9XLx$wj4i7aWm>7Oaj4Zi8FyK=Z+ z&+e{W|5bHm&r8Cs&z2nF64_!*o6~lzlacJt@XaEj7A;h1J(+*-!^P|Nf z6o%Zhi1s`J#H|{DMqC<(^!YC24&X4#b<<3`cTlI3p*#)b_an4EU@}dlyLgbwlyO9n zS?peKo&`*$jldo!+V`un;`(rDQIJhvB)aNo6Cy^y>DrVs%2d^i3z<+Y<1I;e{sYP2 z$$y=@u<#)T+6(F4?*7CE?w&yrYp{D|;VE1A(ug%+Hr74fKK)ahQNdbZR*q9}=4WKp zyQ!6r6axZ6xs?|MCDMI0z!=%cODX|EEQyS5o3l~0@HkZLIMp;l1*?C>DF8rf*ypgVqKrFwbgJt zqYX8?AyCA>o6rTXf6Br8o-TNenM(}b;n8wtvWCd{Oiu;A9SUS?bz*3V_~!$Kumdn2 zdVcO5q+dFCpWTu&xP_IY^#-0+`TX!o;TA~$e@i=;;5d%+05{%`0m$Vmq$$hlg$NKJ zMF_M^T5*YzhHp?3C5y5}J9aj+yN$&V^H|OUB%GwgvM#C0A-UN{mwofa2UjJsbI8eO zmru+^msI&+pKQme%E4vj`@3g%0TKZV6&A5G{rtQCSO5L`XOO@N1DpcL+*gi~D~=}7 zlz|`DUd9Rk&x0B!1~vHqp~=lAiyR0W=yE$f>6MkF-eJ9Ia--s`*FA1Np$~=Y*vscI zmK?kjnc$S2Oq-zv-%yaVnKc(WN@&pSCaW&vV^?1?pZm|d$3K08uNrZpj&)b|UaWmE zA%pX@Q}h!8(>k+7xpU-Wgu5N`pkf(J-sFL;dewos$wO2Zb5PedJhZH=~_d2FIr7iD3W={WlMfu-C(+4GQYMcP(bM;!=>M+-a4-O((r z!3(`BN?{oGdsRj238YKv-VyeHv>gbgHEXfz#Zm7Kw^Q_yNRPNHW<=#c*oneFQQD(% zHCeck0akpu)Q*h#znm2||MiIfTXA&kF7(TO%m2?ovbg(wbOxMy2SBlttbeIJVnL@L z1kF6_{N!$aED}RE=bXBZ&L}JEW!kBX(JYwAkQ}J-`McJ2M93Ni#XsG9qmGysQ z?$H^@G8D}nhZkzc;3D<~YR4F2kT5wwbhyT4(Nm+Kc9vUFcC1mi*eQ?`&8$bx$^dkd z2g3Or503wQo(BfN^E{5qxyM=AT6lqnz2iSC`wewMr{s?REZkmyk;hBi@#nE}uRhP? zOL7H!mU~%p1)EJNDnBaT`Dp4v*`Z`xPyAUO;=4y&Zs7u6eNoG)p!zYidyOKq?y!`7 z@a-K5anV{HC)`83$D(_z01O$1^L1?l)1@X`W*iX{|80}vXH^b%5G_M4cMaU~A$t{e z5exO43qkjmWvx4YM7MAS(yo0*9YRdy>iuN#oGU!XAfd7ZT#yTM`C{HB7g59 z&s32=aIt@Iv1fa+Kc1VsHTM!do~%!KT3$xQ?SorV@(;=?Af18kET`%jdWkvi_A1@E z{>tX^Zc0Wh09iX+v;jLZaWr1=`cZ!uL#zpIV93%N6-@|bWm%2S!jM2^9C1|y{TDXn zj4Mlh_$zZ;G~&6WF2y+zhY}(eb8^}<=UTmSozAVMQMdpueoqdRkh5BQvKyZ3h2+etvzw^zTNLGEM5uQkpYaoN z1{lpL?`$+PQ|)PMdpw3cCmAN`h+Ju7FV-#|j$+D=S-tEox@l~Qn<(%x->PkrWKt>n zRTKW!Jt^)I7?lQ_?-Msjms+H5_KT=nw%cv~aesngj$Q(jHqty9#MqR&z5_lb?Y>b3 zO1vZsCN~`ViW#x37TL|-a1JpUg;)Z_h#r9 zJ7ZC)i`XYb)o%9EM@h#8`}TCA`sr1Le_Exd)iOtM=Jd7hmM{>EJB_wBIf%=Abqc}wAQG6GQjY2Uuc^G2GFf3CEnH9KMge7W4 zNhTQEDT%+po(+vi4A+kQUkDMe1r-H^U~}TCUkJ&p6RPe;MeqzQIKJ3V+(t$C@rlH3 zRKzNKBGFP&)}`jak2QMtXsWlsbdp66aR+D@J(%svlw43dQoB%xzwK)5SFFoXE&)Q1 zqwc!koUHci;kTgla2<C;InzG;b zyrB{0|2rEuRmy*P-p40DQ|j?&kCo!@@n`C>;*T)T$2^Iq3V!T=(p*XVyOtTF=5t-< zrmcgu!eqK>!la`mp{=6uej_M~%)VqMFQcM*je~BNe2pq{MPItaRjS1@Op0!iHHsyE zm-K=@e_=@_Y1=g7v|UCfe>n=9VH|YK{W3_3ouTEH0~m#!#Izf65JhQArE6=sDfH`H zg;-e7Rp_-#`uxQmxouCRy|#9nv>xU~+R1`gX>GDB&Ay`NbM+u>7wbAm+IroDo%KS; zWnR#0fuL+*U8Jdwf~;dyCy3)Z8n}?=V7D6B>n>G4rg^9Zjnnnxaplx&? zMN~ZBrlnDu<$6upr0%@^?uWWk#(9uqZ>XnQN9?)ouzHb ztsoJkyDXquAPYmqL9$gLpsw%GzX3u>r;FVz-88xt!Hy;)k*08N0ha8Xd%aJ$K8H6t zrVvV6INLI>ec?cb@@C^8)cqPbNVqzTSVT1H(> z;~-3&W>fE5<&5|hIx}6gGAt~@s%{e#=%UzC@0rXhC#0usk`VR&Zcj>WIRc0d(m@%W zm#uZZCK8TNx5Eqp7RA*|fmd6oCUsqMn1?9ZTzx%=M5KDU)2ai}fV$Y~N;@<PnX8`8fv;^^j~(K4_my6AIZLx~kRHUN0>+s2QAHNs~l$7wr|C zGEQviu0h)lP*;R-uujWjXXZ6wDs?kuYzcGSP9G%wK$*ZUt##W{zul(dTti3-sLNTp zVG`X9!Px4{?^eX^VZG`D6bW20bs0^$QK6C+-Y@CHfPNK<9SaPIxSGQegWw0|Vc`&A zk$#P#LueNVMFqZxO-95rhOd-gy?{-+XDOa09d&0bZl+P#vPedUr(Me*Nf1|TA(=kt zsX~T`#DcY*uV_F|ElJuYZ)IT@o};aOvR)3_PbLdrwbsL^t$QpfnR@84?AhnY0c_!d zT#5?%wnON1RvQ+vxP6e8RGzk4D3?10QeMee3uT>I626zg$!VEuXpH^T-YHoO2Q9|G zwz^&>j*&!0(e{xMTsmsSumE~bhAnz7G;~6_2WsSoJ^|ysEG<%$eMNu4Xw^a|@B``y z-!@6k1v9imbWILUO+iC*#(XzgSM(Tg=sQ)12ej$Ke2~E=w)<9tRJHY!1$%>j?ugFI zF4{m)ddD`wRU!ojDbmD2s9$_7h((9&%-fUA-4d-LsL-T(8F#krwkaN9<@LqC7v3)Z zyXlw2mD{dPf~M;igl?8=Yp{dUr2|A%Jx0}FZHmeoU_n|nh`bUcwwDI0(;55@!#ZCt z3#+CEsx63MulAM@xtn20i^d zhK@{mo>Eie{CH|yN=P~XCkx&Xxj$L(PEeQRrbeb-Q{+=qWR<#pL#7$!|M!A-Y(}cL zKU4Ns-bwn=X>aHNwVn2k&60ujD*jC!kYB|wNuQFVMpdW1FC3Iu`!iLOSH&;?5A$~T z@L}cuV9`6!3)u82<^O8Yw)4|P?-=b<(ntVEBc+AX$bVe2jr`t{_pRLb8Gdt(^bjD_^>B@yoCNrGNR# J)oa(6{}; - private api: Promise; + private emscriptenModule: Promise; constructor() { this.emscriptenModule = new Promise((resolve) => { @@ -41,45 +29,18 @@ export default class ImageQuant { }, }); }); - - this.api = (async () => { - // Not sure why, but TypeScript complains that I am using - // `emscriptenModule` before it’s getting assigned, which is clearly not - // true :shrug: Using `any` - const m = await (this as any).emscriptenModule; - return { - version: m.cwrap('version', 'number', []), - create_buffer: m.cwrap('create_buffer', 'number', ['number', 'number']), - destroy_buffer: m.cwrap('destroy_buffer', '', ['number']), - quantize: m.cwrap('quantize', '', ['number', 'number', 'number', 'number', 'number']), - zx_quantize: m.cwrap('zx_quantize', '', ['number', 'number', 'number', 'number']), - free_result: m.cwrap('free_result', '', []), - get_result_pointer: m.cwrap('get_result_pointer', 'number', []), - }; - })(); } async quantize(data: ImageData, opts: QuantizeOptions): Promise { const m = await this.emscriptenModule; - const api = await this.api; - const p = api.create_buffer(data.width, data.height); - m.HEAP8.set(new Uint8Array(data.data), p); - if (opts.zx) { - api.zx_quantize(p, data.width, data.height, opts.dither); - } else { - api.quantize(p, data.width, data.height, opts.maxNumColors, opts.dither); - } - const resultPointer = api.get_result_pointer(); - const resultView = new Uint8Array( - m.HEAP8.buffer, - resultPointer, - data.width * data.height * 4, - ); - const result = new Uint8ClampedArray(resultView); - api.free_result(); - api.destroy_buffer(p); + const result = opts.zx ? + m.zx_quantize(data.data, data.width, data.height, opts.dither) + : + m.quantize(data.data, data.width, data.height, opts.maxNumColors, opts.dither); + + m.free_result(); - return new ImageData(result, data.width, data.height); + return new ImageData(new Uint8ClampedArray(result.buffer), result.width, result.height); } }