From 93cbe557cdc2d297ec191c59fe02475cfaccb181 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Thu, 14 May 2020 18:08:42 +0100 Subject: [PATCH] Simplify memory management for other C++ codecs --- codecs/imagequant/README.md | 4 -- codecs/imagequant/example.html | 1 - codecs/imagequant/imagequant.d.ts | 3 - codecs/mozjpeg_enc/README.md | 4 -- codecs/mozjpeg_enc/example.html | 45 ++++++------ codecs/mozjpeg_enc/mozjpeg_enc.cpp | 38 +++++----- codecs/mozjpeg_enc/mozjpeg_enc.d.ts | 1 - codecs/mozjpeg_enc/mozjpeg_enc.js | 85 +++++++++++------------ codecs/mozjpeg_enc/mozjpeg_enc.wasm | Bin 228472 -> 227914 bytes codecs/webp/dec/README.md | 4 -- codecs/webp/dec/example.html | 4 +- codecs/webp/dec/webp_dec.cpp | 28 ++------ codecs/webp/dec/webp_dec.d.ts | 10 +-- codecs/webp/dec/webp_dec.js | 103 ++++++++++++---------------- codecs/webp/dec/webp_dec.wasm | Bin 81478 -> 80135 bytes codecs/webp/enc/README.md | 4 -- codecs/webp/enc/example.html | 2 - codecs/webp/enc/webp_enc.cpp | 13 ++-- codecs/webp/enc/webp_enc.d.ts | 4 +- codecs/webp/enc/webp_enc.js | 53 +++++++------- codecs/webp/enc/webp_enc.wasm | Bin 147797 -> 147814 bytes src/codecs/imagequant/processor.ts | 2 +- src/codecs/mozjpeg/encoder.ts | 5 +- src/codecs/webp/decoder.ts | 10 +-- src/codecs/webp/encoder.ts | 5 +- 25 files changed, 171 insertions(+), 257 deletions(-) diff --git a/codecs/imagequant/README.md b/codecs/imagequant/README.md index 2d9d7343..c2f86a94 100644 --- a/codecs/imagequant/README.md +++ b/codecs/imagequant/README.md @@ -24,7 +24,3 @@ Quantizes the given images, using at most `numColors`, a value between 2 and 256 ### `RawImage zx_quantize(std::string buffer, int image_width, int image_height, float dithering)` ??? - -### `void free_result()` - -Frees the result created by `quantize()`. diff --git a/codecs/imagequant/example.html b/codecs/imagequant/example.html index 36da340c..cae32c8e 100644 --- a/codecs/imagequant/example.html +++ b/codecs/imagequant/example.html @@ -28,7 +28,6 @@ // 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'); - Module.free_result(); const imageData = new ImageData(new Uint8ClampedArray(rawImage.buffer), rawImage.width, rawImage.height); const canvas = document.createElement('canvas'); diff --git a/codecs/imagequant/imagequant.d.ts b/codecs/imagequant/imagequant.d.ts index 122d15b8..d25d7a35 100644 --- a/codecs/imagequant/imagequant.d.ts +++ b/codecs/imagequant/imagequant.d.ts @@ -1,9 +1,6 @@ interface QuantizerModule extends EmscriptenWasm.Module { quantize(data: BufferSource, width: number, height: number, numColors: number, dither: number): Uint8ClampedArray; zx_quantize(data: BufferSource, width: number, height: number, dither: number): Uint8ClampedArray; - free_result(ptr: number): void; } export default function(opts: EmscriptenWasm.ModuleOpts): QuantizerModule; - - diff --git a/codecs/mozjpeg_enc/README.md b/codecs/mozjpeg_enc/README.md index e7b99769..780a7d62 100644 --- a/codecs/mozjpeg_enc/README.md +++ b/codecs/mozjpeg_enc/README.md @@ -17,10 +17,6 @@ See `example.html` Returns the version of MozJPEG as a number. va.b.c is encoded as 0x0a0b0c -### `void free_result()` - -Frees the result created by `encode()`. - ### `Uint8Array encode(std::string image_in, int image_width, int image_height, MozJpegOptions opts)` Encodes the given image with given dimension to JPEG. Options looks like this: diff --git a/codecs/mozjpeg_enc/example.html b/codecs/mozjpeg_enc/example.html index 2cff900f..6900e1d0 100644 --- a/codecs/mozjpeg_enc/example.html +++ b/codecs/mozjpeg_enc/example.html @@ -20,29 +20,28 @@ module.onRuntimeInitialized = async _ => { console.log('Version:', module.version().toString(16)); const image = await loadImage('../example.png'); - const result = module.encode(image.data, image.width, image.height, { - quality: 75, - baseline: false, - arithmetic: false, - progressive: true, - optimize_coding: true, - smoothing: 0, - color_space: 3, - quant_table: 3, - trellis_multipass: false, - trellis_opt_zero: false, - trellis_opt_table: false, - trellis_loops: 1, - auto_subsample: true, - chroma_subsample: 2, - separate_chroma_quality: false, - chroma_quality: 75, - }); + let results = []; + for (let i = 0; i < 2; i++) { + results.push(module.encode(image.data, image.width, image.height, { + quality: 75, + baseline: false, + arithmetic: false, + progressive: true, + optimize_coding: true, + smoothing: 0, + color_space: 3, + quant_table: 3, + trellis_multipass: false, + trellis_opt_zero: false, + trellis_opt_table: false, + trellis_loops: 1, + auto_subsample: true, + chroma_subsample: 2, + separate_chroma_quality: false, + chroma_quality: 75, + })); + } - const blob = new Blob([result], {type: 'image/jpeg'}); - const blobURL = URL.createObjectURL(blob); - const img = document.createElement('img'); - img.src = blobURL; - document.body.appendChild(img); + console.log(results); }; diff --git a/codecs/mozjpeg_enc/mozjpeg_enc.cpp b/codecs/mozjpeg_enc/mozjpeg_enc.cpp index ae368c15..b1528550 100644 --- a/codecs/mozjpeg_enc/mozjpeg_enc.cpp +++ b/codecs/mozjpeg_enc/mozjpeg_enc.cpp @@ -55,8 +55,7 @@ int version() { return version; } -uint8_t* last_result; -struct jpeg_compress_struct cinfo; +const val Uint8Array = val::global("Uint8Array"); val encode(std::string image_in, int image_width, int image_height, MozJpegOptions opts) { uint8_t* image_buffer = (uint8_t*)image_in.c_str(); @@ -65,12 +64,15 @@ val encode(std::string image_in, int image_width, int image_height, MozJpegOptio // https://github.com/mozilla/mozjpeg/blob/master/example.c // I just write to memory instead of a file. + /* Step 1: allocate and initialize JPEG compression object */ + /* This struct contains the JPEG compression parameters and pointers to * working space (which is allocated as needed by the JPEG library). * It is possible to have several such structures, representing multiple * compression/decompression processes, in existence at once. We refer * to any one struct (and its associated working data) as a "JPEG object". */ + jpeg_compress_struct cinfo; /* This struct represents a JPEG error handler. It is declared separately * because applications often want to supply a specialized error handler * (see the second half of this file for an example). But here we just @@ -79,15 +81,7 @@ val encode(std::string image_in, int image_width, int image_height, MozJpegOptio * Note that this struct must live as long as the main JPEG parameter * struct, to avoid dangling-pointer problems. */ - struct jpeg_error_mgr jerr; - /* More stuff */ - JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ - int row_stride; /* physical row width in image buffer */ - uint8_t* output; - unsigned long size; - - /* Step 1: allocate and initialize JPEG compression object */ - + jpeg_error_mgr jerr; /* We have to set up the error handler first, in case the initialization * step fails. (Unlikely, but it could happen if you are out of memory.) * This routine fills in the contents of struct jerr, and returns jerr's @@ -109,6 +103,8 @@ val encode(std::string image_in, int image_width, int image_height, MozJpegOptio // fprintf(stderr, "can't open %s\n", filename); // exit(1); // } + uint8_t* output; + unsigned long size; jpeg_mem_dest(&cinfo, &output, &size); /* Step 3: set parameters for compression */ @@ -184,31 +180,32 @@ val encode(std::string image_in, int image_width, int image_height, MozJpegOptio * To keep things simple, we pass one scanline per call; you can pass * more if you wish, though. */ - row_stride = image_width * 4; /* JSAMPLEs per row in image_buffer */ + int row_stride = image_width * 4; /* JSAMPLEs per row in image_buffer */ while (cinfo.next_scanline < cinfo.image_height) { /* jpeg_write_scanlines expects an array of pointers to scanlines. * Here the array is only one element long, but you could pass * more than one scanline at a time if that's more convenient. */ - row_pointer[0] = &image_buffer[cinfo.next_scanline * row_stride]; - (void)jpeg_write_scanlines(&cinfo, row_pointer, 1); + + JSAMPROW row_pointer = + &image_buffer[cinfo.next_scanline * row_stride]; /* pointer to JSAMPLE row[s] */ + (void)jpeg_write_scanlines(&cinfo, &row_pointer, 1); } /* Step 6: Finish compression */ jpeg_finish_compress(&cinfo); + /* Step 7: release JPEG compression object */ - last_result = output; + auto js_result = Uint8Array.new_(typed_memory_view(size, output)); - /* And we're done! */ - return val(typed_memory_view(size, output)); -} - -void free_result() { /* This is an important step since it will release a good deal of memory. */ jpeg_destroy_compress(&cinfo); + + /* And we're done! */ + return js_result; } EMSCRIPTEN_BINDINGS(my_module) { @@ -232,5 +229,4 @@ EMSCRIPTEN_BINDINGS(my_module) { function("version", &version); function("encode", &encode); - function("free_result", &free_result); } diff --git a/codecs/mozjpeg_enc/mozjpeg_enc.d.ts b/codecs/mozjpeg_enc/mozjpeg_enc.d.ts index 0c3691f4..58e808f4 100644 --- a/codecs/mozjpeg_enc/mozjpeg_enc.d.ts +++ b/codecs/mozjpeg_enc/mozjpeg_enc.d.ts @@ -2,7 +2,6 @@ import { EncodeOptions } from '../../src/codecs/mozjpeg/encoder-meta'; interface MozJPEGModule extends EmscriptenWasm.Module { encode(data: BufferSource, width: number, height: number, options: EncodeOptions): Uint8Array; - free_result(): void; } export default function(opts: EmscriptenWasm.ModuleOpts): MozJPEGModule; diff --git a/codecs/mozjpeg_enc/mozjpeg_enc.js b/codecs/mozjpeg_enc/mozjpeg_enc.js index e08ce046..29a97983 100644 --- a/codecs/mozjpeg_enc/mozjpeg_enc.js +++ b/codecs/mozjpeg_enc/mozjpeg_enc.js @@ -6,55 +6,56 @@ var mozjpeg_enc = (function() { function(mozjpeg_enc) { mozjpeg_enc = mozjpeg_enc || {}; -var c;c||(c=typeof mozjpeg_enc !== 'undefined' ? mozjpeg_enc : {});var r={},t;for(t in c)c.hasOwnProperty(t)&&(r[t]=c[t]);var aa="./this.program";function u(a,b){throw b;}var ba=!1,v=!1,ca=!1,da=!1;ba="object"===typeof window;v="function"===typeof importScripts;ca="object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node;da=!ba&&!ca&&!v;var w="",ea,x,fa,ha; +var d;d||(d=typeof mozjpeg_enc !== 'undefined' ? mozjpeg_enc : {});var r={},t;for(t in d)d.hasOwnProperty(t)&&(r[t]=d[t]);var aa="./this.program";function u(a,b){throw b;}var ba=!1,v=!1,ca=!1,da=!1;ba="object"===typeof window;v="function"===typeof importScripts;ca="object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node;da=!ba&&!ca&&!v;var w="",ea,x,fa,ha; if(ca)w=v?require("path").dirname(w)+"/":__dirname+"/",ea=function(a,b){fa||(fa=require("fs"));ha||(ha=require("path"));a=ha.normalize(a);return fa.readFileSync(a,b?null:"utf8")},x=function(a){a=ea(a,!0);a.buffer||(a=new Uint8Array(a));a.buffer||A("Assertion failed: undefined");return a},1=e);)++d;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e} -function oa(a,b,d){var e=H;if(0=g){var m=a.charCodeAt(++f);g=65536+((g&1023)<<10)|m&1023}if(127>=g){if(b>=d)break;e[b++]=g}else{if(2047>=g){if(b+1>=d)break;e[b++]=192|g>>6}else{if(65535>=g){if(b+2>=d)break;e[b++]=224|g>>12}else{if(b+3>=d)break;e[b++]=240|g>>18;e[b++]=128|g>>12&63}e[b++]=128|g>>6&63}e[b++]=128|g&63}}e[b]=0}}var pa="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; -function qa(a){var b;for(b=a>>1;I[b];)++b;b<<=1;if(32>1];if(0==e)return d;++b;d+=String.fromCharCode(e)}}function ra(a,b,d){void 0===d&&(d=2147483647);if(2>d)return 0;d-=2;var e=b;d=d<2*a.length?d/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;I[b>>1]=0;return b-e}function sa(a){return 2*a.length} -function ta(a){for(var b=0,d="";;){var e=J[a+4*b>>2];if(0==e)return d;++b;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}}function ua(a,b,d){void 0===d&&(d=2147483647);if(4>d)return 0;var e=b;d=e+d-4;for(var f=0;f=g){var m=a.charCodeAt(++f);g=65536+((g&1023)<<10)|m&1023}J[b>>2]=g;b+=4;if(b+4>d)break}J[b>>2]=0;return b-e} -function va(a){for(var b=0,d=0;d=e&&++d;b+=4}return b}var K,L,H,I,wa,J,M,xa,ya;function za(a){K=a;c.HEAP8=L=new Int8Array(a);c.HEAP16=I=new Int16Array(a);c.HEAP32=J=new Int32Array(a);c.HEAPU8=H=new Uint8Array(a);c.HEAPU16=wa=new Uint16Array(a);c.HEAPU32=M=new Uint32Array(a);c.HEAPF32=xa=new Float32Array(a);c.HEAPF64=ya=new Float64Array(a)}var Aa=c.INITIAL_MEMORY||16777216;c.wasmMemory?F=c.wasmMemory:F=new WebAssembly.Memory({initial:Aa/65536}); -F&&(K=F.buffer);Aa=K.byteLength;za(K);J[23104]=5335456;function Ba(a){for(;0=e);)++c;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e} +function oa(a,b,c){var e=H;if(0=g){var m=a.charCodeAt(++f);g=65536+((g&1023)<<10)|m&1023}if(127>=g){if(b>=c)break;e[b++]=g}else{if(2047>=g){if(b+1>=c)break;e[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;e[b++]=224|g>>12}else{if(b+3>=c)break;e[b++]=240|g>>18;e[b++]=128|g>>12&63}e[b++]=128|g>>6&63}e[b++]=128|g&63}}e[b]=0}}var pa="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; +function qa(a){var b;for(b=a>>1;I[b];)++b;b<<=1;if(32>1];if(0==e)return c;++b;c+=String.fromCharCode(e)}}function ra(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var e=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;I[b>>1]=0;return b-e}function sa(a){return 2*a.length} +function ta(a){for(var b=0,c="";;){var e=J[a+4*b>>2];if(0==e)return c;++b;65536<=e?(e-=65536,c+=String.fromCharCode(55296|e>>10,56320|e&1023)):c+=String.fromCharCode(e)}}function ua(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var e=b;c=e+c-4;for(var f=0;f=g){var m=a.charCodeAt(++f);g=65536+((g&1023)<<10)|m&1023}J[b>>2]=g;b+=4;if(b+4>c)break}J[b>>2]=0;return b-e} +function va(a){for(var b=0,c=0;c=e&&++c;b+=4}return b}var K,L,H,I,wa,J,M,xa,ya;function za(a){K=a;d.HEAP8=L=new Int8Array(a);d.HEAP16=I=new Int16Array(a);d.HEAP32=J=new Int32Array(a);d.HEAPU8=H=new Uint8Array(a);d.HEAPU16=wa=new Uint16Array(a);d.HEAPU32=M=new Uint32Array(a);d.HEAPF32=xa=new Float32Array(a);d.HEAPF64=ya=new Float64Array(a)}var Aa=d.INITIAL_MEMORY||16777216;d.wasmMemory?F=d.wasmMemory:F=new WebAssembly.Memory({initial:Aa/65536}); +F&&(K=F.buffer);Aa=K.byteLength;za(K);J[23012]=5335088;function Ba(a){for(;0>2])}var Q={},R={},Ra={};function Sa(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Ta(a,b){a=Sa(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)} -function Ua(a){var b=Error,d=Ta(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});d.prototype=Object.create(b.prototype);d.prototype.constructor=d;d.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return d}var Va=void 0; -function Wa(a,b,d){function e(h){h=d(h);if(h.length!==a.length)throw new Va("Mismatched type converter count");for(var k=0;k>2])};case 3:return function(d){return this.fromWireType(ya[d>>3])};default:throw new TypeError("Unknown float type: "+a);}}function eb(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var d=Ta(b.name||"unknownFunctionName",function(){});d.prototype=b.prototype;d=new d;a=b.apply(d,a);return a instanceof Object?a:d} -function fb(a,b){var d=c;if(void 0===d[a].W){var e=d[a];d[a]=function(){d[a].W.hasOwnProperty(arguments.length)||U("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+d[a].W+")!");return d[a].W[arguments.length].apply(this,arguments)};d[a].W=[];d[a].W[e.ba]=e}} -function gb(a,b,d){c.hasOwnProperty(a)?((void 0===d||void 0!==c[a].W&&void 0!==c[a].W[d])&&U("Cannot register public name '"+a+"' twice"),fb(a,a),c.hasOwnProperty(d)&&U("Cannot register multiple overloads of a function with the same number of arguments ("+d+")!"),c[a].W[d]=b):(c[a]=b,void 0!==d&&(c[a].pa=d))}function hb(a,b){for(var d=[],e=0;e>2)+e]);return d} -function W(a,b){a=T(a);var d=c["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return wa[e>>1]};case 2:return d?function(e){return J[e>>2]}:function(e){return M[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var nb={}; -function ob(){if(!pb){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:aa||"./this.program"},b;for(b in nb)a[b]=nb[b];var d=[];for(b in a)d.push(b+"="+a[b]);pb=d}return pb}var pb,qb=[null,[],[]];Va=c.InternalError=Ua("InternalError");for(var rb=Array(256),sb=0;256>sb;++sb)rb[sb]=String.fromCharCode(sb);Ya=rb;Za=c.BindingError=Ua("BindingError"); -c.count_emval_handles=function(){for(var a=0,b=5;b>g])},X:null})},s:function(a,b){b=T(b);S(a,{name:b,fromWireType:function(d){var e=V[d].value;ab(d);return e},toWireType:function(d,e){return bb(e)},argPackAdvance:8,readValueFromPointer:Qa,X:null})},g:function(a,b,d){d=Xa(d);b=T(b);S(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+cb(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:db(b,d), -X:null})},d:function(a,b,d,e,f,g){var m=hb(b,d);a=T(a);f=W(e,f);gb(a,function(){lb("Cannot call "+a+" due to unbound types",m)},b-1);Wa([],m,function(h){var k=[h[0],null].concat(h.slice(1)),l=h=a,n=f,q=k.length;2>q&&U("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var D=null!==k[1]&&!1,y=!1,p=1;p>2])};case 3:return function(c){return this.fromWireType(ya[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function eb(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ta(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} +function fb(a,b){var c=d;if(void 0===c[a].W){var e=c[a];c[a]=function(){c[a].W.hasOwnProperty(arguments.length)||U("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].W+")!");return c[a].W[arguments.length].apply(this,arguments)};c[a].W=[];c[a].W[e.ba]=e}} +function gb(a,b,c){d.hasOwnProperty(a)?((void 0===c||void 0!==d[a].W&&void 0!==d[a].W[c])&&U("Cannot register public name '"+a+"' twice"),fb(a,a),d.hasOwnProperty(c)&&U("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),d[a].W[c]=b):(d[a]=b,void 0!==c&&(d[a].pa=c))}function hb(a,b){for(var c=[],e=0;e>2)+e]);return c} +function W(a,b){a=T(a);var c=d["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return wa[e>>1]};case 2:return c?function(e){return J[e>>2]}:function(e){return M[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var nb={}; +function ob(){return"object"===typeof globalThis?globalThis:Function("return this")()}function pb(a,b){var c=R[a];void 0===c&&U(b+" has unknown type "+jb(a));return c}var qb={},rb={};function sb(){if(!tb){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:aa||"./this.program"},b;for(b in rb)a[b]=rb[b];var c=[];for(b in a)c.push(b+"="+a[b]);tb=c}return tb} +var tb,ub=[null,[],[]];Va=d.InternalError=Ua("InternalError");for(var vb=Array(256),wb=0;256>wb;++wb)vb[wb]=String.fromCharCode(wb);Ya=vb;Za=d.BindingError=Ua("BindingError");d.count_emval_handles=function(){for(var a=0,b=5;b>g])},X:null})},s:function(a,b){b=T(b);S(a,{name:b,fromWireType:function(c){var e=V[c].value;ab(c);return e},toWireType:function(c,e){return bb(e)},argPackAdvance:8,readValueFromPointer:Qa,X:null})},g:function(a,b,c){c=Xa(c);b=T(b);S(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+cb(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:db(b,c), +X:null})},e:function(a,b,c,e,f,g){var m=hb(b,c);a=T(a);f=W(e,f);gb(a,function(){lb("Cannot call "+a+" due to unbound types",m)},b-1);Wa([],m,function(h){var k=[h[0],null].concat(h.slice(1)),l=h=a,n=f,q=k.length;2>q&&U("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var D=null!==k[1]&&!1,y=!1,p=1;p>>h}}var k=-1!=b.indexOf("unsigned");S(a,{name:b,fromWireType:g,toWireType:function(l,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+cb(n)+'" to '+this.name);if(nf)throw new TypeError('Passing a number "'+cb(n)+'" from JS side to C/C++ side to an argument of type "'+ -b+'", which is outside the valid range ['+e+", "+f+"]!");return k?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:mb(b,m,0!==e),X:null})},a:function(a,b,d){function e(g){g>>=2;var m=M;return new f(K,m[g+1],m[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];d=T(d);S(a,{name:d,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{ia:!0})},h:function(a,b){b=T(b);var d="std::string"===b;S(a,{name:b,fromWireType:function(e){var f=M[e>>2];if(d){var g= +p+"); // "+k[p+2].name+"\n",z.push("argType"+p),n.push(k[p+2]);D&&(G="thisWired"+(0>>h}}var k=-1!=b.indexOf("unsigned");S(a,{name:b,fromWireType:g,toWireType:function(l,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+cb(n)+'" to '+this.name);if(nf)throw new TypeError('Passing a number "'+cb(n)+'" from JS side to C/C++ side to an argument of type "'+ +b+'", which is outside the valid range ['+e+", "+f+"]!");return k?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:mb(b,m,0!==e),X:null})},a:function(a,b,c){function e(g){g>>=2;var m=M;return new f(K,m[g+1],m[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=T(c);S(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{ia:!0})},h:function(a,b){b=T(b);var c="std::string"===b;S(a,{name:b,fromWireType:function(e){var f=M[e>>2];if(c){var g= H[e+4+f],m=0;0!=g&&(m=g,H[e+4+f]=0);var h=e+4;for(g=0;g<=f;++g){var k=e+4+g;if(0==H[k]){h=h?na(H,h,void 0):"";if(void 0===l)var l=h;else l+=String.fromCharCode(0),l+=h;h=k+1}}0!=m&&(H[e+4+f]=m)}else{l=Array(f);for(g=0;g=q&&(q=65536+((q&1023)<<10)|f.charCodeAt(++n)&1023);127>=q?++l:l=2047>=q?l+2:65535>=q?l+3:l+4}return l}:function(){return f.length})(),h=tb(4+m+1);M[h>>2]=m;if(d&&g)oa(f,h+4,m+1);else if(g)for(g=0;g>2],n=m(),q=n[k+4+l*b>>h],D=0;0!=q&&(D=q,n[k+4+l*b>>h]=0);var y=k+4;for(q=0;q<=l;++q){var p=k+4+q*b;if(0==n[p>>h]){y=e(y);if(void 0===E)var E=y;else E+=String.fromCharCode(0),E+=y;y=p+b}}0!=D&&(n[k+4+l*b>>h]=D);Y(k);return E},toWireType:function(k,l){"string"!==typeof l&&U("Cannot pass non-string to C++ string type "+ -d);var n=g(l),q=tb(4+n+b);M[q>>2]=n>>h;f(l,q+4,n+b);null!==k&&k.push(Y,q);return q},argPackAdvance:8,readValueFromPointer:Qa,X:function(k){Y(k)}})},y:function(a,b,d,e,f,g){Oa[a]={name:T(b),ja:W(d,e),ka:W(f,g),aa:[]}},f:function(a,b,d,e,f,g,m,h,k,l){Oa[a].aa.push({da:T(b),ha:d,fa:W(e,f),ga:g,ma:m,la:W(h,k),na:l})},u:function(a,b){b=T(b);S(a,{oa:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},k:ab,n:function(a){4=d;d*=2){var e=b*(1+.2/d);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>16);za(F.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},v:function(a,b){var d=0;ob().forEach(function(e,f){var g=b+d;f= -J[a+4*f>>2]=g;for(g=0;g>0]=e.charCodeAt(g);L[f>>0]=0;d+=e.length+1});return 0},w:function(a,b){var d=ob();J[a>>2]=d.length;var e=0;d.forEach(function(f){e+=f.length+1});J[b>>2]=e;return 0},j:function(a){if(!noExitRuntime&&(la=!0,c.onExit))c.onExit(a);u(a,new ia(a))},x:function(){return 0},o:function(){},i:function(a,b,d,e){for(var f=0,g=0;g>2],h=J[b+(8*g+4)>>2],k=0;k>2]=f;return 0},memory:F,p:function(){},table:ka},vb=function(){function a(f){c.asm=f.exports;N--;c.monitorRunDependencies&&c.monitorRunDependencies(N);0==N&&(null!==Ha&&(clearInterval(Ha),Ha=null),O&&(f=O,O=null,f()))}function b(f){a(f.instance)}function d(f){return La().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){B("failed to asynchronously prepare wasm: "+g);A(g)})}var e={a:ub};N++;c.monitorRunDependencies&&c.monitorRunDependencies(N);if(c.instantiateWasm)try{return c.instantiateWasm(e, -a)}catch(f){return B("Module.instantiateWasm callback failed with error: "+f),!1}(function(){if(C||"function"!==typeof WebAssembly.instantiateStreaming||Ia()||"function"!==typeof fetch)return d(b);fetch(P,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){B("wasm streaming compile failed: "+g);B("falling back to ArrayBuffer instantiation");d(b)})})})();return{}}();c.asm=vb; -var Ma=c.___wasm_call_ctors=function(){return(Ma=c.___wasm_call_ctors=c.asm.A).apply(null,arguments)},tb=c._malloc=function(){return(tb=c._malloc=c.asm.B).apply(null,arguments)},Y=c._free=function(){return(Y=c._free=c.asm.C).apply(null,arguments)},kb=c.___getTypeName=function(){return(kb=c.___getTypeName=c.asm.D).apply(null,arguments)};c.___embind_register_native_and_builtin_types=function(){return(c.___embind_register_native_and_builtin_types=c.asm.E).apply(null,arguments)}; -c.dynCall_i=function(){return(c.dynCall_i=c.asm.F).apply(null,arguments)};c.dynCall_vi=function(){return(c.dynCall_vi=c.asm.G).apply(null,arguments)};c.dynCall_iii=function(){return(c.dynCall_iii=c.asm.H).apply(null,arguments)};c.dynCall_viii=function(){return(c.dynCall_viii=c.asm.I).apply(null,arguments)};c.dynCall_ii=function(){return(c.dynCall_ii=c.asm.J).apply(null,arguments)};c.dynCall_iiiiii=function(){return(c.dynCall_iiiiii=c.asm.K).apply(null,arguments)}; -c.dynCall_viiiii=function(){return(c.dynCall_viiiii=c.asm.L).apply(null,arguments)};c.dynCall_v=function(){return(c.dynCall_v=c.asm.M).apply(null,arguments)};c.dynCall_vii=function(){return(c.dynCall_vii=c.asm.N).apply(null,arguments)};c.dynCall_iiiiiii=function(){return(c.dynCall_iiiiiii=c.asm.O).apply(null,arguments)};c.dynCall_iiiii=function(){return(c.dynCall_iiiii=c.asm.P).apply(null,arguments)};c.dynCall_iiii=function(){return(c.dynCall_iiii=c.asm.Q).apply(null,arguments)}; -c.dynCall_viiiiiiii=function(){return(c.dynCall_viiiiiiii=c.asm.R).apply(null,arguments)};c.dynCall_viiii=function(){return(c.dynCall_viiii=c.asm.S).apply(null,arguments)};c.dynCall_viiiiiii=function(){return(c.dynCall_viiiiiii=c.asm.T).apply(null,arguments)};c.dynCall_jiji=function(){return(c.dynCall_jiji=c.asm.U).apply(null,arguments)};c.dynCall_viiiiii=function(){return(c.dynCall_viiiiii=c.asm.V).apply(null,arguments)};c.asm=vb;var Z; -c.then=function(a){if(Z)a(c);else{var b=c.onRuntimeInitialized;c.onRuntimeInitialized=function(){b&&b();a(c)}}return c};function ia(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}O=function wb(){Z||xb();Z||(O=wb)}; -function xb(){function a(){if(!Z&&(Z=!0,c.calledRun=!0,!la)){Ba(Da);Ba(Ea);if(c.onRuntimeInitialized)c.onRuntimeInitialized();if(c.postRun)for("function"==typeof c.postRun&&(c.postRun=[c.postRun]);c.postRun.length;){var b=c.postRun.shift();Fa.unshift(b)}Ba(Fa)}}if(!(0=q&&(q=65536+((q&1023)<<10)|f.charCodeAt(++n)&1023);127>=q?++l:l=2047>=q?l+2:65535>=q?l+3:l+4}return l}:function(){return f.length})(),h=xb(4+m+1);M[h>>2]=m;if(c&&g)oa(f,h+4,m+1);else if(g)for(g=0;g>2],n=m(),q=n[k+4+l*b>>h],D=0;0!=q&&(D=q,n[k+4+l*b>>h]=0);var y=k+4;for(q=0;q<=l;++q){var p=k+4+q*b;if(0==n[p>>h]){y=e(y);if(void 0===E)var E=y;else E+=String.fromCharCode(0),E+=y;y=p+b}}0!=D&&(n[k+4+l*b>>h]=D);Y(k);return E},toWireType:function(k,l){"string"!==typeof l&&U("Cannot pass non-string to C++ string type "+ +c);var n=g(l),q=xb(4+n+b);M[q>>2]=n>>h;f(l,q+4,n+b);null!==k&&k.push(Y,q);return q},argPackAdvance:8,readValueFromPointer:Qa,X:function(k){Y(k)}})},n:function(a,b,c,e,f,g){Oa[a]={name:T(b),ja:W(c,e),ka:W(f,g),aa:[]}},f:function(a,b,c,e,f,g,m,h,k,l){Oa[a].aa.push({da:T(b),ha:c,fa:W(e,f),ga:g,ma:m,la:W(h,k),na:l})},u:function(a,b){b=T(b);S(a,{oa:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},z:ab,A:function(a){if(0===a)return bb(ob());var b=nb[a];a=void 0===b?T(a):b; +return bb(ob()[a])},l:function(a){4> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n"; +f=(new Function("requireRegisteredType","Module","__emval_register",m+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(pb,d,bb);qb[b]=f}return f(a,c,e)},q:function(a,b,c){H.copyWithin(a,b,b+c)},c:function(a){var b=H.length;if(2147418112=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>16);za(F.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1}, +v:function(a,b){var c=0;sb().forEach(function(e,f){var g=b+c;f=J[a+4*f>>2]=g;for(g=0;g>0]=e.charCodeAt(g);L[f>>0]=0;c+=e.length+1});return 0},w:function(a,b){var c=sb();J[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});J[b>>2]=e;return 0},y:function(a){if(!noExitRuntime&&(la=!0,d.onExit))d.onExit(a);u(a,new ia(a))},x:function(){return 0},o:function(){},i:function(a,b,c,e){for(var f=0,g=0;g>2],h=J[b+(8*g+4)>>2],k=0;k>2]=f;return 0},memory:F,p:function(){},table:ka},zb=function(){function a(f){d.asm=f.exports;N--;d.monitorRunDependencies&&d.monitorRunDependencies(N);0==N&&(null!==Ha&&(clearInterval(Ha),Ha=null),O&&(f=O,O=null,f()))}function b(f){a(f.instance)}function c(f){return La().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){B("failed to asynchronously prepare wasm: "+g);A(g)})}var e={a:yb};N++;d.monitorRunDependencies&& +d.monitorRunDependencies(N);if(d.instantiateWasm)try{return d.instantiateWasm(e,a)}catch(f){return B("Module.instantiateWasm callback failed with error: "+f),!1}(function(){if(C||"function"!==typeof WebAssembly.instantiateStreaming||Ia()||"function"!==typeof fetch)return c(b);fetch(P,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){B("wasm streaming compile failed: "+g);B("falling back to ArrayBuffer instantiation");c(b)})})})();return{}}(); +d.asm=zb;var Ma=d.___wasm_call_ctors=function(){return(Ma=d.___wasm_call_ctors=d.asm.B).apply(null,arguments)},xb=d._malloc=function(){return(xb=d._malloc=d.asm.C).apply(null,arguments)},Y=d._free=function(){return(Y=d._free=d.asm.D).apply(null,arguments)},kb=d.___getTypeName=function(){return(kb=d.___getTypeName=d.asm.E).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.F).apply(null,arguments)}; +d.dynCall_vi=function(){return(d.dynCall_vi=d.asm.G).apply(null,arguments)};d.dynCall_i=function(){return(d.dynCall_i=d.asm.H).apply(null,arguments)};d.dynCall_iii=function(){return(d.dynCall_iii=d.asm.I).apply(null,arguments)};d.dynCall_viii=function(){return(d.dynCall_viii=d.asm.J).apply(null,arguments)};d.dynCall_ii=function(){return(d.dynCall_ii=d.asm.K).apply(null,arguments)};d.dynCall_iiiiii=function(){return(d.dynCall_iiiiii=d.asm.L).apply(null,arguments)}; +d.dynCall_viiiii=function(){return(d.dynCall_viiiii=d.asm.M).apply(null,arguments)};d.dynCall_vii=function(){return(d.dynCall_vii=d.asm.N).apply(null,arguments)};d.dynCall_iiiiiii=function(){return(d.dynCall_iiiiiii=d.asm.O).apply(null,arguments)};d.dynCall_iiiii=function(){return(d.dynCall_iiiii=d.asm.P).apply(null,arguments)};d.dynCall_iiii=function(){return(d.dynCall_iiii=d.asm.Q).apply(null,arguments)};d.dynCall_viiiiiiii=function(){return(d.dynCall_viiiiiiii=d.asm.R).apply(null,arguments)}; +d.dynCall_viiii=function(){return(d.dynCall_viiii=d.asm.S).apply(null,arguments)};d.dynCall_viiiiiii=function(){return(d.dynCall_viiiiiii=d.asm.T).apply(null,arguments)};d.dynCall_jiji=function(){return(d.dynCall_jiji=d.asm.U).apply(null,arguments)};d.dynCall_viiiiii=function(){return(d.dynCall_viiiiii=d.asm.V).apply(null,arguments)};d.asm=zb;var Z;d.then=function(a){if(Z)a(d);else{var b=d.onRuntimeInitialized;d.onRuntimeInitialized=function(){b&&b();a(d)}}return d}; +function ia(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}O=function Ab(){Z||Bb();Z||(O=Ab)}; +function Bb(){function a(){if(!Z&&(Z=!0,d.calledRun=!0,!la)){Ba(Da);Ba(Ea);if(d.onRuntimeInitialized)d.onRuntimeInitialized();if(d.postRun)for("function"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;){var b=d.postRun.shift();Fa.unshift(b)}Ba(Fa)}}if(!(0VVP13A8cD2SlZ zRo80=kx- zu4%eP0Tj~IUpORENjD55nvrhw3K&KJIe`F~W}q*ilM&W+10{2M2JxriKP`^e02vex zBx@)OfI%yeoSJ3?dzi_Efus~81oZSU{tSM2e;NWkDJf_LL!nSGNf$r}`0JqnH)0rC z*wCz`An*;~Uy&hnT?D#yvjZYiC*WroWTm8N$@$4>pYTuD0El7rPSsMWyQZl!Ix@q4 z-_TLKs=ok*{6sCppa_%!)fkcXJ|-Hkts$DAeMB@-+fOt}`y0_@?E|7I+WSOPwS7bf!4vWvlXX4-Dkof9MG4&;}L+lmrig(1H#oOX7@ub))+Qbv$ zw_=lM6_1L?!~^0Ans}|)Al8d(I68IeT5*-QQmhseuND)(qhoZ1n0S;{id7={!w14w z=+jBWZOy5v$a1;`BBZwt37kt*#Ee%BKw}5ftb*u#)MR|HCr@BG+UROcRKl2r02GsfyRbjs0XxCqEv6x${TkE z@N=eH&lhZeCD0f(P#NhcLzP0aDV5|cD00hArz+!Ov2myKa7IJV2UQzf9Wh%+LAeQq zHtlp~cFP{g%`pxQsk+>VWR3HYq$24iu=n!0K4M;dE(qu|yPaS&meEiHa=pIvGSNe$ z3$m|v%MthNbUx`;9`;Ju0q1(qR(8Lj&rf%P(UL1{;cRN|>3rDz^ppgq#EnnP98t)P zM>G*W9o1@1LZ_hG^EObS}U_2@A)|TgdevV zZ;Ub-Yz>UCcegXON49u;r*mPCDgoke>M?BCcC^cINQSxnTAN}b9Mx?@Dsm*cZwDFu zOBVuG3Yj2~V`Y!zVVRPB<-iUYT$P7iRn>jUC8|b)ot5>R=@Hdq^2a11z|%qW#b}Be zi9RpQ8IsKd72<*1=#N-Rs>xjOLe4C){S{|G&v`r~clNwqAaPKy>yX&``(6R!%$IXd zWfbka0xnaVw`2f-sLtAf6Ferso7ZbQFb6cZIGI}#+$6a7le}^hD0sXCSdskxQLvm3 zWD-i_%_gqRe9L@^pR+K3#N>m!xfn_uRuLxKk==p1com8rLZo?9GyV*IMN!+7DUI@? zh4Ss+yz!gBVuscHs^9LO-Og9}g|)jBoTvcE?Orr&>y6PQJ3Pfsvc;rDsirCS><*M` znlu)s2EZiVgi%#q-|b8*7&yG;RUdgxT1`_@G1Dvo-dGE~2cXfEpb3$V9wBa%jMt}P zo)I=u_+ZVAvb9uZ6gBu_6a z7YME@jB@as!V0l=r}J)MzBs(w`MR)}6K&g0OVmses@7CH#yOYS1@Vp?1utMTkE_0O z|3P(WEaDWf;?ZNrj)f+r60j0JRz3lAsW-}H3o$`#47{R+b{s8$FnI|34R|onfg%Os zzt!{69Tq9A29bP1F`2xXD0e6nnRgKLP-o0Khf7BmhU<<<-?%4dq8j8h+1d%YEDeyR z#>bT4UHLX(@XSIDFPW#ljC0CXL_99!w|&5cG0#p+|``-p%xbB_1vr`T|#sxBmzs%!r~rIzdp%M zQ}NKmLZh=3ONojuvitdBf1$w=q!t=oQOyo^E;M)bzW0BM;S2k0D^y}w$8h-~*ca8F z*n$+Q>$_4YdKHEgo*>bueLIMj5v!`)yE{-Kv?^hN;utm+4?{jf?m!IlVEu4Z_w9C8 z#Ag3b1cN0$f^vq*`E+%njL@;P(lpR?+dZgB;8{&OwV5Z^7GUpCqO{8 zEb{u#T;r|P&MEy~`~h}4Bzo6XYp9_9>iHFrEX$C6I&Fejv1wQ`-`4y%S@_1Unkgt8Be zm|U>E6jSl=QvrErnG8Y_pQ>JNE0ZC9ak56f)u+LRGyv9GOboMiYlw*&m{`NSB;>?I zwRN%6t@SavV-p`cP3V}-_@_15*tDr6Y;vqy;n*x)Ct5Pz}Yay?|@S#Mr1q zHMvgz(LppNA!GbpZUec_l+ipcXOu#<((-DMO!i1b&RMl9y@A{I zv>G^QtQa_c!N6hcF>v414llKP*#v3L(iW`JEUYnTuX#lyM&KAtf=opltV3I4oO5JV z!9XaRGHhK0g|0gmRJroTPxtByVM*3NXUjPy&R#j2qE3BXBo&3hAyLs74O`LHrn+e` zshpi-3XuKxF}H)ct{OXmmNg=EnG3n;NZYt)nJCL6~NTr;JJ) zEL61=XeFBUpi?uo0^Gb{>Hs`9O`RNn5cYnYCA$W?+KkuCs3#n3QLb4dGz*halxX29 zE$qd#Dh=!#fsPyrU?7ld2O6OsHAW1K3D&oO%;4n>+AjE`S#&ap412@P!cI*Gip9Yt z8EVFZWC{)2Xhe#HrUpA<4knsP<@s`>FwIvKy5OTsG}C3$1?>P&y5NsaI&i9J0$wpO zKFaI^N@;SnnjvvEkuorA)r@S0(6gboSBmjUM5B8sC8?>AhfE*}IH+LjbLF5$v_B76 zppK-8xriM@A@v-OH;y400FB&{1mZJkG}#VI3bY~aP&1j%(i8LP4(HYrXH%)8pA_p^ z4306ZTo9Mgx`y@z6BmMR>`76|buK(<3)nK}6_2eaY+kGN9|r5bp(JCXa!lkX$ykww|(_=w)Z%X(d$RoO#+TR)qg> z+D$oQ&?j^<$W~EIOpa2SM$v#(;Vhc=Bvm+N)9>#_=dBx z3&+3)F&Z&e5Mr?6A)v?vbA)7bySCUG?)?6&Ci;~#>};oIIB-w1lOWPGIRN9X3N;%j zq!KdhWT|o7Htl3p$W9dUASIvEmpeN6oS^_X`<#+a=@($>XLOZ*x{`inDbc9#=7V7k zY&~$!D58kdXXY3@8)w#GwSH*kXd2RbaAq1&we!uny{Wo2a^6)sJ?3n_U@cbgfxp;7 zWH=vOcqT1%M$fvq7pAK&Tf#hlSBH7>>X-#8+WN|@8+2ecb8cbssBw@+Smmva&ee0v zathJcK#6WeAxTQ~oG5r662F<8U2`XtjFOt-S34OsOluUgam0W*fC+X;YXl8MomQt= zh0f@C1E|nhFs~BNd*`jfvt<5yJfE1qjtcLV3s~2vTR0xiYZgw*EJOWfYOKS0QKH{M z%YjXq^Y?`X-8o|)02^M`Wy_JCyC|<4r`OI&B+uaF35#;8IT_v@zw|I9BLN;AK#kSW zRUF!NHEUN#At*U7Q8EW5TQ@DbBoOCS0z$>=X&Q)`8-t|B1?E1_MF={USJq#Jq$sYWufC%1d%ZI+$bRf`>O1-3sEHt~#jzZn4 z&y`8Gp34S@k4~a2tC3Jxu-?ePRMbN#nj|gqY?Gj$uKDR=kqMB#?uhq-ob&J`YpALKyHmBsEihC-LaZ~c z$>5K*hQ4w`LltJK(RfEi4}&h)aH}90vtbuH^6W%|0D>^l?Lmkqy2tTE_Y!f2JxKLJ zRYosVA@m}SZg8mtx``T0950?|$)nMrUZ$^DS&lG2Bu&(I{sWw+-?`&GPh`j^kAD5= zQcN49{(AijyH@aWBYa+0?DhDQ_rDbv4Y^&HzOCNcw~fJg%j2VO+;f-Vfw}L4XTQU$ zrF&#y{@c#Q6_NOD2fqm!o`iL%mXU5lDy$LRsJyqDE}G)ls}9BTS^5c+_wTSK4<^$f%klP)GieGQKnS<&w z$uEgAe#SKC*{cRnfph4pad=j)k$7IV=I40sT{8vG(zQ2Wfq!Q02t1Fh9gF9vtB2uv ziF!VA^~}_$LZX&k&`^%@*7ac)9J{WLy`pQ^&B(eM=%5HYnAy9=&Mml^zF0T7n0?SZ zO*lsxael#0rx{pp@-fryI(Hu!GoCEVy=N<`%(&&6b&DB$>o_w%%}Urhp8%uccqSLRq|IehnooUZhDI z?)G9$SMty%m<>GUvTTIb1B@VK9(%!5EE_S1LZsy&7FMwyh^1f@Zd$_z^g^k_WM>;N zTiT1{5tuFNt%odAv6#q_@i;u4F_8z|GTyjI8cgIn)&yjc^$4ZtN-B=Eb@{qB7seMm zj>1rXP$35m!MI@rqsBPE#d3i?7#NIzt(m^Ik*Hd?62^^HCBWF2)NrbTW0fK;oY$|P zhdsBt8;ZIWv6XoI=G>(>Od5e?&H$=#5wMm7w>+2RdHvQa=uKzFZ6h+?f}n+^F5gC&g78h}?%Rstx!7^rva}_NplEE< zO95+%bMoygda;Y_3J51a%eC0#)TPnHu7g~6!&1t3LK{<4auvfteTQGqu{YMyW34~m zcr(E&`1+T9=maNn$2w|heejOk^=^+7>+{e|`qH}nRdcCP87mdk91Yeov?AVXK+7Q;3WhLB_*<|~qY!O@bi8zP)X z?#@=Ko>yg(TJ*)7RK=4dV_nK)|AIl3FwxX<9TP($I#Nn`@g><0BdX_uw9L*V%PK_~ zf^sy)ul*|pJYt@HGz0>dWCc4BNe+;36bjTEB1J?v58d6<$H!}KmnLKAgQ(BNzA}i= ztaJrm$>k}Eeg7(9dqIvDz}?1)W6dYC_2PKaaC z2!W<6qNXI<%#CJ^cUpcutSTC{7<#JQr#IT&8(~dFqZwYx7B3|YDc!u3=8iJ0$9{bh zh3X^2?O|5EGyT4Ns&{_Xn$^1Qz6nYFB0e~c{UR2>F{sWr2IIduN4E^1PC;)E_1 z$37O5`9Q*>ZVb8^q=_!m6fb&g%93eLS{nScI(7U((qI&d*>F=z8EbV(zEbC@dnsTe zE&>M}TTks}Ohk5%An`{^dm^=1Dlf~A7h$2sZ7Oy3$BTHjT(Q(9dIljHihmC;)9)1k z)F!%Xbm=ZAp*n1^W7_LxwWJOYc&A_2>t+{lOuftDHJ-o%m+6R(PfCqLDZ?vIYT_M6 zAqz0Yu;K|>h)7DPGYNaC+{0=Zd|2H49wr}0Ra0({a1PqKL}IUBZvPmKspulP9n;i{ zVpV0pj87bHY|M1v(!iU6Xf~?aPYL|*#yYuz`^C;ql5j|)H`pLmof?;_@Gs(?7^Xkw z)zawf0NOvk2MT=*B2WyN{!)5ejUTVDOts5e6cbZ*q?lXPxm8%VKCa#-5L1!cDXveA zdpyA`2cgx~9swyLiWG?0m;lBVZS)~sVnsBQ85t=4mdMfE6> ztnbvi+eRKPj}x%e;?}pki_M_-s|4#C@7=l%du0^y3vWiRe5T#XD-Me9f;R!{4qjNV zkXl28!9Y*C5|haKnj8EN9$XYtItQ3~FMEBw&5`h=+i}j0s+J|j3^d6gRmWoN4rB1nOX1wrYN8skw{S)~RMz2g7SX@=Fzn;*Pl zk%WkkA?RKyiV62EtjvT38x7R6|%{I1_+ESW011crn%(vCtYy9h33bkv-X8;h3C& zFKVr)MO0(WOhEk{!D0ci6lkePLCi!9a#e1=0=gXZRctY_h=#^$vc~!kwIc_jrbN_+ zIjSHo4}|9Ok%1IY1aJ#0=PAJ~|`7U)aA&c2@4qi{HYX-nbR}98C1hTd~bzC28g;u)H!=uX_ve^1P z#`HM31z?_H76$wKvISy`S&R25e{647NfY$d!V=)kYH#xJ)P; zSW1UH%K_Tz#ri#&Ut#ahXEvRw%Cr>n!_F;g$PFfg@n6W`lb6>rAL(y2$OzC^g4MW3 zgxQF!1Q8J3$8#2hK-6ZEbftwNEThW+Jpe3{R4u5@Tm^fFx)Nn5z#IL{QntX+2}xiz znvknx^d8lC2whT#9z6&U13*~!Ch!BD`-8_h$$xU-t?k4L4}-&c0y^)qS?u8TLGmM; zDbC(^CG0YJg+V6%^Jva57y#xph=}LO%Vw`BGXtmw<^+nG{7AznaOo|?>#X^Z5a9OZ zo?PIe(y^2G_KmQVQ^si8&2^EWsMQ%Wn96ZB=5;padCoG0Jc+9Nf{^4|81A|!2vLB= zAk1mVSXM1tUJ5iqPUxj@w*{?BqM>WhfOf*!fEn71>EZ1lng9v*R)%??i(wuBq&QfQ z=TTR1KMje?vefYwKpP`(J&p;ZP(bUC*Ugl)nAI&!Zdenr?&fo0b`Uw6R1S}Tyk2Fn zt{= zC(c`}ruDwS5bwhS)|l3eLFMo=1S?mqUfZ&%y_u@CwVd4Ly@lVeTzBK;<8 znZoGtuq7r2)ipP7xn^~9^YhQaTHSABO<(J|Z? zYakE^wuX7qZkwC1dO}ZQI`Ep$i#m6JS6q1*3JR8D&ayxt0D}c*{ekn5bjYI~0IF9A zCb?bXYD2tQN|OV%fF%DNsj1Qj0167r&3(D0ge8~-z}OoH*2qwGnPSd!`?K>?RLe3| zwJg(=_><|Lc49eS?C%{vVt5j{-SAgbYjgzbDHgukIo4}{jFG~k2nWoc{0LsFy_FP7 z#luLf15umXLBNA};brFlhmhm@{TkLE{fG^eQ=(*5am0e98jrK7q2NokmjN+x6$TAH zxpEDs>6#%V%C!KO;Su^4swc7_&??1RUc`Zy+W+TLnbw7ViaIpFNm(69>bw9a_2@`a zTQHdnEeCC)Y7CMcg3-Ftp^tjZVm%12G3!e1O#rXh^|=v3SRLQXK^hnlcrf#Tp)kBW zsPH2)oB+I+=;vrCP3KuJFz_5tn+PLdpDqwrC9ToUMIU8@;4$0>aIXCb2DeA;)k@|B zc+&C4qL=t8AjQOH=&l?dAXYP=d^9Nq9w*|!s>WPMUts6AfM$1pzmi(1J%F#MykTHj zbP-lprI?<_J!258459i<$W!CL0%6SSMZ3W&>2riDH{J@N@nSA-DXY-5kpw1}Hcs!$(o)FH!U*LK}F_lXli1Fra8$6 zrshG|`f24@npFu_;4s%RLe3=zE`$&BuLpAb>6)oZa-NnE@Jsrzuy~m8dto9Y&v2rj zl%#x15gsztymR3v4?ACen%0{2_xEuQ0$l-J;W9EE{ovww%T6e^=o47Cm&F3pThDFQ zZZ&I)vZP?+@Nos@3r8Cm_TFYMz)?JcU5yw3a_hj`nu8M>Y%%?pTv%~f<%UK=o-heI zUmWa9vz+{YEXVWqf1KE>1D4g8uIy%RgpcOLoWMWlR;FlBczN5k%z|_>;C@dugc1of zept2n-vgXC|0&T%&cB|a)0{W|RgY)>p-MbYJv0)}mP7ePod9Ng_I3)?BPIyE=&FC# z_0FC{edv1Ut3yS_T}qqgzyvuUHM(RtqyL>#imjv1D3Q-S`6)bK$`4{Rt2&B*kGjq; zJ}Y!?_-rbUsJ;JLcZxY*d^QO@B0q0I{7;{cMta8KLJBzp4-Y`fd52HR{<+%MFj;$p zR5im0t)F9~R4oI^E*fU-c-Q&V*AH8?EVZq+s*)z!L#$3Y7NLMx0GN?W;c6ELiqc(aiNb)xoh8 z)`R**XHoCl?kpEj8w)p*{BoH8Spb1I=h#=v zl9H4m4Xe_b_@5Tq;Jo{vRVf8y57G8=_X83npW`=rR`rXoWZgC6pa3HNYXw^A%v=I4`qY;(U z3}#K_oTPFV9?hnH&ecZ?aeC0X|L6#l0qkL(M&*AVEvzhLfOt=4VsCv+T|~0D&?bge zqPGiv?oiJy>bX@|g{@rrMk|=u6QApxa*1f^i&w5PItVa45vI_379hwMG@ zCgj-JoUu=3A26&EcZE(D_T<`o;B)D2XQ^!5F(}aw=*T{*(;({a4m8kMi95ld;i@qE z`u)Pq3f5YNb-MxF6((rP&)%f6H*@wo1`X(rbAcd`YG8-1PL+*v^8?fq(5nJu_blO# z06I!-Ql&QQjI}k-y(mBxPWj6qr*3AkNxYj)-OioTe=my}HCGMNGfY!R(YKU<5(MvUQgz8j ziS50fiU4bpwb>1)Q#JK&8<$RFsn;gmcbeC$KzUA&cvpE?{*fJquPpaF`Pnp*;XIH{7jdPYlRb4QpjT7|Hjc9d19k=pSvTM22zFlbuRUxind4|)sgv2;$wzCY+)=Y@m@YSzQENB z=vL!i5y@~fil~SC1URceRTH(gDXm5Fb2UP|RLQtp3A5Mzynvu{wGAqyG6-S!XEu1H zz};v=y!_gI&W3c^=w?Ph{HQxMLW7aFDgwiMqr06G3*4g-nvP&vl%Aw}T&svCSbr45 zu=)bmFoa4sh_cy5bWR|GYswLKR}tMw_q%h8X$tjrpDLzO1RoYtJ>Ah()*JB2c4ziM zujjj<(sTsx^#KFScT4-?a`*ywUtgMsU}}suBKR~$d80;QZa~F=^1*g>3|2pk6^!$q zHP|zN`--)1vd%&gOb5B=R;1q8k?P74iqT}Zv4rjhm!y?aPI^A8kr-K&rtwz3JG2xS z|TS{jj=+%#|M6jtJ^+T|$AC2t6)zj=SE-}J`WnCN%drW^ zo~?R}v}ysc&qgXLUR$PsK2nC>(i*419mFzPqJA=3c)0 zU4M%8&R08vj3wK?+-wquYS+(8)zHGk3d&3JGWm5u1&siJ-&9aPb21nXMB4#Ib|a@! zclYxO3`D*=VgTCr8g_p*09W+$-E#-h843z~bAYmaAoWIzppw@a^a`o}8K^o_I!JY9 z(je8DIap}{;I=^!1NrW2gFq++`VPF^G1wMq*Z48{MOo6rtN(y9%OkG7!7n^ui|)T$||HiG7Jc+AlL0Z zobDn_VxAwXM__t(AAxz~C4l)q9!_QMqa$cN-Rq7XNmU5mA4RU4T21g3xz~@zx_DAG zT}^%5cdO|YchpGQ<6brz>!r#ZS-n`Vwbh;@7B=1qw-zf^6+>xQ5uOSl2_KBZKQMoX ze|ZH4DaQ@h&~}`ziml#kh4VozwP%6( z8tdAzV2h&MlurwMd&kiO$8_ zo=I2(#<}`r8W@MAo`%UE!)G5N?4eVQ9;B!WtLMthxtz&vBV5(-b_{UdU@Ds@&{5$@ zgD7i?Bq2zd8%ai>&y7IF!s`penNO*6DL!%reYa7;2dq3UaDe7YJ>I0eUGr>J2U+0^ zQ;UXh&7yZC6)OfiPPjD%KnJWSj;4gr<)lVmMP@sI*WjQ^KwcUv&Ya2;2n#fSGy)nO zJFcKq+i(@)HWjvQ`O=iguv2hf7g;D8V63X$X;WwkXtiewolZ?|=~TK2v}&IUh8^b~ zoC=Z$+bT|=UsGT(gyMtlpHBoa2fHaJ(VDE8%DO^VYzRtV6ccAz%iPT;(F!`l?Rzq9 z&l-$$NZ29JimV1M0~i2mdF8a2A}4)8r*58P(jj=L@9UqDUjTQ-AAW^`Lj=@ z%K)?GREmX%_&s%@V$5{y(`YJk7Mw;GqVQX%(YS7dA?6eTJ6d-8Powja7=aY17(?7! zr_tl6G<7=Nk=o#&UWFeLIschX8~gs5=L4@tLcXJ-5C#GE>I?a9;$6tS?lydA!}yCP z|LT4;147Ss?>!w@oam;VLBrzj;UhJQ)2gANgVNvIM8H6?Q%?VpjWL!i7^1|H6-{PG z1X92md}>9*ZTfbfHF3itaaCiN;90!OW|tKTt4&1V9W+q)9|Z0{V5CsB^VWlG?#7t; z+|GmP-FbkkcQYmgV+i4g5`6Zd&V> z$65OyUPr)9gNP3=CidD1PKTovg=@TF1#jb)04Lxw1GLeO%M2VxZ2=Zn7%>Fw!{eI? zObj1}YCVq~k=R59*612=^kkw{i5gJWac=|t0cie*)-Y5Zan4Cx+eqAN z@XBy+Kx$MMc;8vIfK8Md@O$E}MuM1r6N<3tV+WD_CKQp;druy+ za8gJP9DB`S6FHoRqxSGVlcQqOEwHf$I!p+ zVPzZUvPi5H9kB>9e;e(3M*R`dpzM)J3ci0_kbU2Ug$B) z@n`DH3zW+kKpuxOf=mA}axpj-E>A|`p=y84kbiv5u+GFx!d8$fasWk;i}M%AY<}I# z6ui5%s7#WPjNT4@{6NuJ5ao;$BiB0ZRm0>RNyr8FJGFG(6cu zA;2iKT|iN^^v(rTq>>G(l0(0sns|iiuo;}lJGE-TGt{g!|C&VU>^t3(IVTz_)-d=! zQPj0I-uc_FwqR6s@1`H3T3z=aoM2L%gS-cEWfO9n1wXIScDhN;xcV_Zx^UXm5DSY+&1BE_$!;i^M(CY+6mh^Pae^Z1tJ9L)2qc`s zS4bQv?!XtfyM2Up9+BS9=)DXfsi?Nb% zzM`7c(Y?gr#gC&#NB@%T^m^tkJE=amlVkkx{t*m^*BRt8|K7k{6!RN6! z9{^FBZ80AX#Et~dB9;ss+pp#<=4u3Ej)PTTcAl~rJf2_vv{mE8)b%jnv-iwiut%7+ zI8{|wixK8D!)6vzprG#fuy{6mlMeNm761Rx@Kp#%FW!mWYf!ScfT6aHPGr9AnUW4Lm|)ljSMes=DDQ}Y8c$hpG+ zGu&}{7`0KtI^xw4K3?u$wt=TpLd*e0 zjH}2 zGq$(Oo5!Xln}p0^1~?2vR0m*La;cp`M#T=##mBz_Z0lm5o{yz4zBW#cCc{WUlFjoL zTRDjG8CuYuFY6~mM?(snxA=+=q*4MwH35tiNNwhMZr@gzap6N`-tOHyfDYlFFdv30 z4iZ_Hx;M?IxBcj%1vJl(?q5I+^srlY5&beCMlz6hQW`di!27r}Lt zTk5rR7}zyQtnS5$cUh5y6K({x zjcuYD5n`Z*RqU?2gwF5Y_4^ct_k9YNF6Fk}L6_2?$ZH{u@kZHl9H>Ii z(w0!f^1F`f0dx64M6p}51m~3fe%T31hIe;l~TG;T>ghwpbF*zX1Z z@`4Y%;KPnQE~%;V-jjG#YNMJA)PqRK)a!FWhz001wkWu(*hS__FMA+f@Pe28x40Lo zr>&K1uY*WTv2yK=j@X-itb*Pqk0upx1^GBI%BXEt`pW!X5dlgPB}*{?(3zA6Wsh=U zS^t7z4s`c=Z~w%nTFgCs{zBA(rT^ht%i%uU(pIw^zOgtox%hFM{=Lo`-zyM7@yY9LoMqQq3(&x zKLcTNnX(EL@|gM^lXjAO6Da2uNGvG^Mxkztx=06)~jGQfBy%zEVQ#WeHDD0kzXkEp$h z5Hb_zp}jL@e?*vq_dg+I&)91S4TOAPUNbj%RKz<$8|w-lG>GqkaFwrcK~c+jTl_l{ z{z8Sb{VXSu0g(uru*hWJ6o4_~v%62pJ`O#^*)7J4d_uVSi!L&&Spb`618`8t97KS{ zuS;hSqO*L0Yclcyq!z(01x%%$>Se;a&t=Xx$0PvlQA7GYIAC~>8aq7*fW(rpnLo<~ zxc|oa#$9B_@o5s~F@;b&f=+xuo!6N-FM9Q%ieS{k7e%;avT?ch#~brbTc{P+Z|o19jp3u63q0iu#Ad`7q{chI$QQVvY9*nZ1o+x0 zlL;12r*Z=A1K$pWQS(TY^e-XN;=A?sG42M(CCuwgZVoqIgKzCmnZyis6(qD^(jRu$X|^74&A zls#l~nXO8X;`hV0m;No%G5)Z~F{{x6#u-);E5W}ypnvzzjhQnmY^6AY+R69jZ;-Mw4(^=gytWP`f09r&O{W1vdg8;KWScRzvMNINh_)0%7S zkn^-P!yUbbF3mr_1kQViu0{T|hORAc_HMxdFCNw#3mUBx)wr?Ei-h%=NN8KVmSz)e zb^m!aMd(QvpIhL4nv!*NKZ4iR!PS0w+mdUjmhk%2dbr~&-4i#^4M_dl1{^=Z>o?b8 z^SaWVave2e1=xKZo!V=uBop84=8a9bJV8|MF~qpF)U9s8j?FN4Sqoe$OIv8VdtM9m zh~FcWdzu*nCj+=vLiE9L`8HnwssbBn4q8$B_aAEOK<2bSB*Y>nr0kQ5m8=`PN zF;I}1cRpA&S=c0IbrcW26Yw+4Np%knqmz*WJTVd&w4bbHpcYmmg=M1Be_0$9m#7s7 z^AJ4)F3rh)RfBhRG~kLZsCC(9ZU{B08xEN8y#BIS0H3wh-$377gw5tUUEmVBJ6jj) z@%E+nmT!m|)aqVhh(XA^-w;FSgtosLB3aN{_miL)PHWtvkhqqvYI`gsE+e|y?Uy8$ zqsskB;v?*wz&4tJMV{9}I|LuWWbB;WlPm^#S+lxk@uteB$)YNKup9#KA&;vrhssKK zpede#w)iho4DV<6;(nvEfXBlF0V>N9{0FzKCsT3K+d9!bB}I%ZZ6@z1DbweW)|CM; zB8fG$3=jvkJ(D8d7j&+BXS$e7=e8Y8N53fGF3k{6QJ}4|o45e~LjZSU4{-wL_7Iy5 zoq`i!A0K&5o@*m;1(T{WfWOsglF&(E1Ug$4slJ@(x4!X$| zVnq5Sv$fgUX|v}y4U>x&ox5bsxC+rWu0kI`G^Fj40s7T7H0z0r^z-$k*?`)J-yC<| zV!bE{3!F9=zj^Mhi}k+hb-sFiX|X3&s zqM{2fDk2qI@m0~-hAK+1Xi<@ZVnvHBT2xxKVyhKJ<@=r4y*CMJ{eOYGGdqtnXU?2C z=ggUzefjgWc4D!))czCy*X)B;GqN<9~;@>i?2 zuF(R{Unw_w9qB9d>vc*E8W{rlBr-{45EbNi!Aq(ZG)bc*Lj=NxL75Z`g*pYfoS_+^ zQqqj1K%kR`WC{k15)>i)PYwn{dPa&75CZXTnkE8T(9kk6G(*!-!XQok=^+tKBO?$9 zL^3l1dBH#crLOf%RW@F}1hMnKc_+|Eh((~^>O{tF^KsHcz)V7hK3St)7h!K7?6 zr6`!38VCgh89`Mr@dzMhBqswxC=^OcwhRG`&;uhB1?Fg9(*wGdoCJh}_*Wbdh9QC- zI@m#xWoXC`1jtHF)lv#mKz{r)Gyq~)UDNb5>ZqwQWa%DC+&M!7iM+ocg@C8}3o#@O zlmXcQNjIWF3I@|bz@V1iQ4c0llw|C+7lfHKH=CrkL8m$`Ov5#sMra=rjnr-<8l~Mp zG+O(BXpHtg(OB*8MB}vgh{kL05>3z!6HU~vBbucBjcBs=SE4D}J4B~zhltM5{z7!7 z_BPQ}?I6)vQSHw})3i4!`D-FglDUj-5GUzNI!Z_AExLi;pjYSsT}Lm|i{b^bOZ-7R zFD~3E8e7D3;#sj>JR`QygEW8egdOx8Jxkl^8G4$2Prs$7=x+TkeZB7Lck1i(wYsC< zq2I2r(QnaL>o@B+={JJwuG6E-^s8g~hvEbAzW9@vuvfe)_J~)+%i<+*K)f#Yi_P?V zaY%eAz7U^_|A>E!&%`nDsrav$uv`35{6)Mi-Vz7Jo8r%6n`jol6TcNtiTlKpVyk#U zJS>*cm|MjyVzs!LqZ1~q5-Y@ValIIGqZsoIeMi@clri5@Oe_;AYqvW8F>1(Y>KC|> zDB=uDD$JEsZ);Y>)=PygzoXG1ukYDJ!%^P*>;KlKomi)*IzNg&;m1S- z2QV3I4a{<2zcVpAM?AXMxj4I8U?A?x9yoA2+U530hPeG&n@U9}qT7a4}kas_s)RUNsVItt@iS4yzuMKPF)zq9{nVu`pu9 z`+QAq{~R8uBp%4M{)nZfndrOoLhhwv`#z_4=eay28#~`Fkk}{hHY7GZpBEs`d?|k_ zqgYhXh0D|wTwMtuso^WJ87ek4URfNfQY=59GT8&~y5s7Vz;m_b#6tzv6S}!l3 zFAqNa#>0UH4D0xQzun#Yo&OdV)$USoA_5?{d(n`s*GH1=&_p}g7ULV!OjGXOALyxR z(wLtX0F!tVMpfCf-#M#GpFy$LeB?E0Eu5H!S!W6GMhtjYqS4f#34xCuA#Rh5j!MHk z2?v3&v!hE@ZyyEjm5+k3gP1h7m}n>28c+zDHCi}HacJx{r=-a45C<)zVZlT|^0cC! z0>O%+2nP=p^%k+c&f7(W;^Y0!S4Ab9SY+Gj@tUbZ)tYFRa?VwDmx4r&f)}uv$5r3a zf9DCiD4OV|F72*4p(LXpx7O4+i)Pkj{tjW7RyIyef)NU;=G&qm3yy zsxi%(9PTg_6!NLWH1ejQY*8b}jDwhmw?Co%vC@%+vAQ?hJ?aUWhz5bp!1GxYAWaR9 zDZ#jMA7JpbLJcpO=e>+_%2q@?7UZ{sJ}>FDz))WZR_93zlJG2yup~vig_Beqs<%Fp zqDdP{#$@?AF;Y^>G8e+8KEjg&qEVOBSS1WdeyW$Hh{-Kz^Yi`AU6CFFlir(pkEtMnoH#zO&@{E=n0eO(|uhD}vg=gfen|+4a{y zDV{Ixw!KJ+XC18LDX_Q*_rw{blkC1sC{h+BDLg@Z$|#17$+178V8r zBdX#d$Zg0Yh-V(h?+^IF{mzoo%YG8UK$(vqwMS4}7zxI8$KkRgap9)f0SE^r+z>rg zxRpCrk0hS6oqH4(DC!ANPw7fF5STqYW$v8O?C9Zt3Vv9 z^qzn8+Tang*^q#FV{jXW8YAbko;y8dqO?5~pr$YcPqz0N_|z22)oOLA3{*`q`6 znPfN%dY74b%)zjY=39A95BA<5=r_)YzGLWI=a#;G@Z8b2Qa{&v*ZFtfVk&X6`&FXa z=zb%pq-k}(OWAh%V!$*!CsZ}2v$a%-Ddbs8&Yr5{!DFLjt zQZdlht$rqIU{($El8{p>hFS}q%%SV(Z0EtD!}0uR=*nmx(?lJXCRS0N`DT#xsND0i z(g#8w(b)3Y=DlK?E4xuUJ^+( zCp{3>Na#kul%KyGkV;!}O%?gZYu1@KEWd~oGQ2{{!sB+@6mo_P8<3|!sNC;?kTtyu zSc`EZ%q0rXw)I~gc24IX&mCAZZMw=mbK2#CR|qA_XEUS9v4!!=S-le1JMkG7iAr*@e)?%SVH;|@WEapxC|JIrH@`@Y&i znZHy*M-wiI?1L8ta=(w3@m|DJ& z+~+N1oUcYr1*l1*Ps4Nd=y$Q&nKwodUgnQ|fr^@{$Bm;bs0LR67g{>VrCwpqAw|L*L*g7vQm+uE+gf3o zZ!yyG32U^Uuu87wf+-Rcmidn-EP5vv%GfJV^GwG`06j+60STQ(Q_D$iSIo-g6xyjVF$*9uLD`mG1al;0CaVOX?hHMnGJ2cPL~Z;Z8ozn{7aQ~mYS54F zdgR8XUbLxY_m;(@(gX^`K0UN!$>_A8T>dJPkSDs0#iJ(w!No_V>4^Sz%bJGKX@NFH zN>!2LU;gH6ANXo+XH;60LH_OI|8CIRmoHJ}zvA*9$c?MFwgg9~8Es%@K?=4ak=yRA zpxs+#ySM&$i_580c@o3vi}Oto_aZdpSGEP>8w1v3i0R8UV-?C>5tQaHA0**T*-_xhhR1^}Raepx6kB%RaG?<72-XqjNZa71{r!LTZu?mPc9 zBHMZAg5h|EXV$?Gm^E`4^=sNZGo5IN^W=qHX-Lz-3vbZr3Fm^@tEi;u=zEiS+O+)AJ9MCv(@>N$l&J!NV%_7^HdN$vK?eh6 zx)l)|4hdmWzd&Rvb? zym>cKm(5?zW0U3U%g5k3eE#@o4^|{pUkANWrmv?ZXql6aY4x12it6YFj>M?0X4P`c zW}&hVBir!mELx&c_IVX9^~=v}SG;yky!3RhG>jww9aBe6T4P2BZV(5W$gq6WCbOu{2m*UT+JGNPi^pCzU6j@DZ52uY*TurB;z%LX#b)7%L` z>8tGcT#LZW+-8R%Y5~|+<5)7Wx9#}LfhaiFdr5)NdF+c#M+2kNC{LOagHS5A+YxR) zUt&F;@2zoE88%vB7d7x>63QclP^LyMqRF72uKDSr(Ns&&ElL7K2zJM#o-h(o)HeAI znmvVo5V*>?L0M0r1Fe#V_9C4NnDX!|zFXr6BC3ujT>K6T%*)n(#=D6o;vIl+&`YD- zMTl@%cqmPCnE#{>me#EPSQ6s}QSYCXFB5Nwi`I0HFe=mPZ#{|*0hA2kDO4pduBl3` zaZM)6ny6ohE7Slcp^z5`I8_;ikm6NN#Pc9-Jv_4%A`C}Z_!%K6>xgSdyKus9y?RXolx`zY*HWs3T> zJ@mO$9L;zQrim8^mOexeis`FH%Ms?kNsB8*4pHuzw>SPx$rDZf{=2WAxE6B=slQtN z;+~~YOQ4?OgXn0fA^z0wA9_=a&TpqBw|Q!EJHzo*=@V}}aKGWfdGNg*-$K3VZ4}xr zlyCF8o2!E?{m+cA$U5%q zyuNe5`WLKB=g{>9Q5ZOX3}Es+@?5}z!{|jU(&W=B{#3bq36T!gCnUc_{~0HfOu^C_HVNCKP>>hl8M1zkr_MHwW=-K_=zXgO#)?&6qGg!Y9L>zuur^Wa z8>sXtY!D)xZRV?F=g5lckuIq@@nMn@w`k~yHV^RD@yv{`di;84nYlbMll_t?<7Z5D zX5LUqh0g6ajKuTJ8zi2cS6+nYl9dzjd}ZYwY$&W6jOSgeM&S9^RRi(Nxsjh!Zk(AG zR!G$HdIpx$vp05Q4t)Q{I`-C<-88+^DxiZR?D%GjnVoBJbKQAUzY_M1^DN;UrE>g& ztxh{|-X}L*uN*VpVt=o5?agE2ybYu0)Xk$qH$Ts={Y|U0gWg_|vwii8DLx8hg`L&6 z^bGQH3hT}tx6I6XT<}nhQ7 z@VBV7HLN?7hN~E?W!nV$7O)pi#c~jXSVUSbVj&gFMl2O$vu-82Yh5mNEdF^pnIr8+ zc^nHK^_DFwR7~yAMeEtMQV`)qW1}>f$QxG%WU=)dO4Z|z189*0S_4*??41qqei`bb zDPA7|#fUyqEnUF6;5mk_nb5Jm*TJt`w+t&Js~QU=Bw)1)+X0q~0ha+e^KYMvt;3mj zwC*vYf%bchS$B+AMQl8m-I1f>SSf1ndBc1}DnwK^QJxJH^htk>He>#^zzM>4&XtzJqxQaX4ku|%1s8-4|c z)yVK5d!RMa`RlI>X=Kwkzdk>?hwX#X*qdVU8-r~@9W@`OJ`CBZ6KShZ9z zJ>gjS!8%?Q2v;9CJTT&a6vV{v3$iVHO2H`jP&w%s3y565qy{g>DJ9z!G`&9adXnd- zPY$CEIYg~T5Q9DDAcMCKmDI*X@A;3F7cY)L9BzWl*T8E%mi;N}9Do$CtpORU42S{3 znh+yXgt@2myNyU{Qfrd$LkEIb??Nm26Rxe>8hKGRy5+8LVrZ|FII7fW!)dT`VMv6%wi5*1%7+$PJ1FD@A>HEQBQ-;pp4=G!`5*XJne{ zO$qnQFquVsDjGlD9n~9;d=jH=unPX4wLB+s+iHsy63Pq%5~_P$83mnDfRs((ZYxX4 zhwkx>@>?Vb4RPl$UqBLW0+fm^HW)6Y{9i z2OzoCLe{s!`bL=6?+6HetTK>(LhaCR*uyaK`Zd2=w}J>1R`XYtgO?ZFeN4rpi1}^= zw3`K9Ly#-A(P5ygS<7|nD`6d1(<>nua?uxNC%INRHT=$vV(0#Le@1xxCNYquq9l_v zxm#r*8D1T^TX`>z^0pIib%P9?dW6-WY0iT@(wQ3|2ha!v!5H?SfEdV+Dg6ZN2PY)h zN|IVwYg;%1?5Fc_2~0l}hu59^b7?C8P62Zz07T7y3QA(b(NcyZ_dp#M@!Cs;-3B47 z%ujEm>Z+=}QS~QOd}uWp1$no4)F#lMgMmw`P zqxPZL@B|aEQZE3PASeVu5TGNhWry-cg(myghp}P{3v?Uaya?7}*a61kgv(;@+m8uI z3@GjZyXbLp2)Pq{mB>9*8-SwLdRj!`CFMbfbvu|D6tPqo!AL>OL=0`nE!TVIF!sX0 zMQjk8Y!H9KJC4dUR0l)23aov3G^v447^I?M)WsXnXI|!olQ~2A<-l2M3D&S?^_v;d z=h(d0VgnIE%4tZ4$|5YpaQqA)@P;*$gFNil@FL79`b!So;Z*-+TJ%K}Q-E#F9L$O= zWTi$ZBETOl%>j>mAIBp`z2yp&->^;PkleB@AUjy5W}XSGka0N{bLbx|Yc>6W!E75F zM!r>P@!B$i?W>5cmWYP+^KOivH3eHn9=`r6(OVvdyltr^=9SL*hYF%G;_W$hmj|tv z;P(cdVZK)I))8g|dtc>1wVC8)X_-lI>4N#KG!=yXH@MkR&N>|dT(%|P53>|A&tqW0 z@A6m=bRh&1T7M)9`~@7P6=mvwz=o($lh6}7_we~LWnQA5fXF4eUI`C*P)%46q*ZbJ z0bJBxpeZTfi4PndgIHh{>dlh~Sg5U|HrlFZ<6a})&$1xRbk#;&3G$SdTNDyJk&)Tr zi%4cRUXJow4X7xCf>}<&A};w-xdd0)r*K4nkYGJe=6a@dVo)I8qQ01azwI_X*oJAOCwBc97CIE~ zQ@gR?rKOjR?wp8^g^Y5C49Hls9ijYj$S0`b1_wDo{{u%N2^>S0wE zRUvu=%a~LJfH?~63-sr(#%4;6&6leZvtu^k7IudHiWchJ}3mH(vrjwqi?a;!L>NCkUCt`?yL(31bA1} z#(fY`A>o9;+Fg-O5d$$#!fJ9A91a2w2S`{Dn&m5;05}B9N^s3ffqE8C)tSchH zo6&$ac?PCKa0^d3wROsSy{rj)!ku8WaVJ2;D0e~>1ZfNIe?#K3m>gIvb7e@9Cg80Q zK-*8%&6Ko&Ju>wVy5+0ZY-))S=j=W;VILA!+_ZMfzD+x?3vh{przU{)JgDFkF9IXWXR0Vm zyKT0=8v_~uXAnb%#$nSN=S@(M`(i6<^p~+cK7`|OP;0=B%VO$8%xaDbY{tu5nMVhM zf&UtJy7PRj!X^)M9yf@VJjcJcg@wE<3l0(A=2Jz~f;>K3U?s$2TW?+-i#@*+>**sl z5>|Phr(GPUYGu;^*GjL-$4KQSVcTHVdYet&sdX$oB+@WlT5L1=F!=_eH>q~1?uV5p zM56x!JE{_i-q|FWi>jEl3tAd$Qzi}1ST6#F;6<1#U=eZEgas*&z8pXo)Zg(M9w+ow zZkwixZt32Rc_JRk0b@&dtH?vX3Pdv}YUnDue<}Kw=2>XznAv#C@GLaA5!gb@bRPYC z*XW~$C+u4w4g*lZWSxd1w=8Luu6`ZV(X7{$h(St!R`r!^$vj59-mC+yV=bU7I0{vi z8}$Gp?0B{I<0OW1p;}cOu`ng0y!=sHGdOs%0`or#F0+lE8XrpJFo1ll2zaP4H^4w# zlc$F|_rN8xtc$&K68zE$FY0UrzhvV@Z69%+T!06zytNBfwU!f@3cGNlBRWh*6fPNw zFknwdZYgpR#Yrz~t%#6+3R0;Wv_+PjPz%r&d5bVCn3AKQ{`jti9jMQVQOBmE=}z zzoKk^&%1$GC7a5ui?a}b?iP4ip|i*9zcRO4$k$x~U$JY-+Ipa(x26pt=8a7ir5g7y znI|7CFl)TC=!0rn>1_R=8;y6~{GhnwN>WBV%SBe7GPJPKDg1C!mkiKGSwJuWF`rHK z4$~JlzLptsR(^O19IKyxm|q5O0*DSf2zgp&(0{``*7%SO9}wg`Ei>Q@I9gV4g2GI6 z)tnDh73EGk^+$i>d~(!ks`|%%a&rHX?sWX9F}i9mjAL{LOqXZf2An(@ZnK4~S>stN zz)P>rRw#!&+QI;qn0c5nY&~Fbt?r(s#@Ji+rs)U@qVf;s@+!BdHXw|{=V&n;bc~O? z(M|0fd$@VQ7ds_`kaO}I^#Xb$D# z$b1igv*uW(^T8()EtUT3Svu4C;9sNg?D=UGp0hq3g6F1B3yWI;T*?~|j3!TgFfUk! z$H7|T9R9Q$t#Oi$6_>OrZJK@JM8RZlli^G{mRpWZENtS&$?_9;zEqfmv8_%NKZVB5 zm7f*iJ{eXM!ywBltRiRaXOlbe@iQ!$!Wzh?%cEHA01M~%XXC+2BmTXHx;th`cJ_Zx&$&?T%c$cUusO{T@Ubq$M$N1LIhXEq z%092EjEDkMZ=GchA(0-HM}HTv z#zQx!)#Es1&X?V=$uR88;+e~_&&C|ab|03jVc-7>R%ZfWc5xEKJIY~{B7zT-Ag;6_ zQyqQwYNM|#@V#=Fpq&5$Z_dsy7f1K9CN2gC!+0-&bD&(tO6B7fIJa*vkZy%c0&rcPD3iGI zRW8?;=PB#(;0rEUrIR+szJSxC7sxbJnWa=b0WWE3RvnvI{MVvcfTqrBAtR=;abl}|cA37&YwU7v%ygE2Q=h>=w=z&%s0jl1Z@(!5 zc7@-DRZa{uA)YhwTh5vLZ4Q+?D-e%5zy5Zx$@TZ~d_mohzAegTEVkl3h52sVlj=qp zI&FW4%1yQ3Wr|!baTvEt(3v3Wp`6XBXy(lbz3Qiy8L!GMM$4)^>jZW zyx;BO0&REo-dj-4fTauwPLOO{QE*Kl(os<*5b0z!Aa5V?a_t;WJ8bats9}}5*9y9% zb5G8OYpA2$NoB*^g=`(!Cj|ASo^CH44VJp2bQ*-WnD@3`2W~yx9p2lUI#u=r4rO|a zs=iwXxixDjbSg;T0dF0ElQjU|-ypklDYDlf8x=RHid%F>(`s<%8Z@|L7e>m16b^9T ztcTsF4LTFt=4J$_6W!I^H9#dq74Enook4}}y+OJ(tuP$KphB`Uzq%cg2n_2^NrE;m z_iUsNc6uu|-_}@N+!IOE1DDBBo6EOc~dxVI`SGrgu?^w zwh)zNSD*-Uwb496^Z)M0V0{^)VFl|ck{-96W3lKNX<){18XIp`g?oB34Fn-?N~Rud zrU+&z7}2oG-QCF$e_h;vctJ`E4NEFzOsqHD$ti>rtM1h)G=s|BH&dub8W;qKFcWg! z43mn%D*a3d zz1?6^XCU%BlZqykqSP@Uh*B|CYL!>2fm4p5yBr>;h~*6)FEtZ$n9b0`sGE+KGaj_= za>J?Av0c~sAUvZ#I+Y+E+>5s(`koWkxA#_?Z!-+kX&fWQXFN_Yu(2) zF-r>FKnI$ehg5akLEY4Wgarm6_%4Iiz3%D`;DHV93mvFb-R^^<8oEuf$B7PfhS>h9 zJGmo5^nPyep_N%Q4z0YFg$Y{drgp-tEp%%-Q6=WZ<(;V3r~vidr#jK; zNDpSyECh41X$ZsFl1-O$rCdC!a%fU#?xeiEDZqAbM4yNg6ak#{30Xbddvj=>SCj$F z&!uUd&?mp>csMkqhV>a>9?GSM>_O~gvQ;Z=I-{QD}mo zf9g!L%nHy$mt9A}9j~&`#Oyp8OTFC3^DxtY?Y@vleem{W9!T1&xl2CPQQ8LHp#Ncr zLsHmUN`5rb0h8=d0VYD>orQFl@hcI|bkif0?P8C&sEdLCE5MXiqx=u=JwYVd^)d=q zfK}ukE2Lpm)ZDuZRS<>U^NPSOh3;KN5IPUI&lN%D+~a22pnKRIZ&N?y!Df<3+{uZB z?g^XDMsQ{rx9vB(X%QN0?Gpoq#%PBiYC1roT^ynF12!&_+wMydx{tQFmle}QDsh{O zsT{$3#WafUZ7wSTd@6EhbOizCy34x)@?7^&SB(8!w|h5S=AY-jgB%3oyVC{)N4rzO z;K7(4m=bY!a*K_{5iF#AD+BfH1B1N-o9i6OHrBqokhV6F=E_nkrEzY3DQ%_#H@%E< zGuR!$BMMzbW2^#qKpC1ZaARduh+tzGz!bPU%IF*fdF8YM!KQNRfnZNL4aw%}>2?S= zPO-9tKPluvDeOU&R)LKTm{HIess+HFfmBqywTA-wcn_$=0{2fnFaiZ`Y6XP)IQL{9 zDsNs`K|}B<40mf!ntbbk0K19+1T5>ZcIIZ2IaKE>yi^S>jO#@O$zCSE{-PHR z27rfq0pW4(pL@|ocpKas4SFrPzwAvrkaS@soujJpf%pPk9(ks;ezR=Zn<(mpqB2xj;I_x95;zfT`RH&R#kFGJ{6 zOtE2usT#q%L+Np^z>uMhELPAtNJ!qlCyS4ZW3aJw!XXWfEp&rV{ox;&+uJ|^i!Z^b zB)g$ubQ_)Pt{+CP(?f1U4b>ocw1&_-_q`hGZIy%pmrtGvrXQwcxR!3E;qKO2I>~{g zw`q9u&2=NyPkq{HZn}0i!aEme2Ja05a7LH<} zG*sZSlUPOKD3;qYhTfwjck@^%kP&x|gPD#0lY(O{pJv0|4?snAxliTE5Eylt^V?myX?6-nk{) zWc7k?B-BTOelOkO6XRE8S{Lq0ZCm4;)at*CEfkhVA z--m3R7QlvT6x0E=6cjwUop>R>xpFYklHf8Bl~{sqdfniu72#?MNhWu_^e={Bs={)C zgGB-McQOmH(MAD9M6v9AVr&W(VCva_j(-(HqG4t#24|=NtTr!$$RTA6}2~t2vN)BToGmHdE!M$Kkd>H`qQsB`amq z&Ul{t_zW5w*a|)rZp#cB5P&^kZEdbTpZ;M`H#d9{jn3}IZahuV)9R)oqTcG}F1?5< zI(FmF#FUCv-C0&cbD79^_9ED8-Q0IBf@bLETC*s-imL^=;Og$Is35u&q<8|(2;seL z0bJ+>r1NIcpcJpk05^HxEQ$c+^RuW}B^y#De>w}Mi0$^Cjjz4Em_ixsN!*$>ClV~t zL~Ww)xXCAR3{749N00nnd3E8D^)rU7uHz3Lq+-VKck}uCQdunRc`HiRD9K7;oZs=` z%BW{6VCb-KPMBv0tXsgRY}dZHQDtO%Yw%gBPbT4S^{0R z2Qa4?G-ei~rgp+`6(2Xmjj?=qF3x}aVG|raRv#4b6Z!K6>Z=0&J30-8f-58t{9vK5 zIxT})t1Gy`6@wMQC>c1^rJ-fmULKn0T$^Jx5MbO8&X`5jftGgAp=s1TUAA1%UfW}= zytC+6{DFGtrWPkx5|ax{2HYWly@j9v))x-~d|L>z)a6EylFyVVWn44fhKF{1BeyyR zt0qJnM@lvxTeLCivo}7OuyST3NaE1-4iwKWS{8RmunrQn2~ zsP(tAar6}9dq7D{j(Gxs<((!Ed1sm=W_cU=AnjB8aZuI9fnIPkYMtaS9QYvRJ123+ zDN(!bA>NfZQS*b6**~!YX&b_h9ruyvKbte&l*Y-3ADGfU#xNpG7N&`j_swno{)(TN z_y~*t4&a!t@lk-CjkTPA2};KR@JE6$J3Uh1AP5gUCmU+6@p2l|3}RYW+k4m*gH%;g zyS2M0fU6$fpkpcBt~us{)G+SEc`SvcFd)Lh@)nf%#1(R)IIV$6g&%HlgOzat0H@x- z^8Dj3X)yQl>09i<`U^kENAQr3HUh{UcyF;hMN|Gb1^uzXqB+qmkI_JRb)uM0Dqss5 z^B*|bIBpB+%nSJ;-YFc$+zvM2!*T&mvQZKRI9dv9P`45($=IJo3Oh3eG;0D)W_270 zf}q5F!qG?{D}^Ih(9C=IyF*NlJ??D{Bm-B$hP~2#qk#_k(I@B9Tt8Yek4DpDZo@pf zH$!bSw^-1#^0;mlHRt{U?i_lrdGqB|N%^>_#V|id`wJy3l;Ze1ZfgB&K7}dIwHo26 z%yY*zQoh>SM)4M5@g_H7yRrN(#Ro;PxW(nJ=H-o4Ba#@XVHLYCFQi!=+kTNmefR~C zQ za91v+C!>D`iEyd(LSC`qlrzg>ENSfT`y-gnikk9IN&(<}9zwp;upgm?@HK>~2wz9Y z-aEd9z$a(kK&YAbGBNqgu-`LHir%vVFo@#NP7tAupwFkHF)Xz3~=tN%u1SZxVAHO{s3(OdQ@eQe;;jrf(GFuew z;9G4+yYG>1H^Yz{{A1Z6WeL56G{bt0kFM|>#7n}a;3Ws{W8pipKSj|tUR6*wG}qUX zKTTfN(jIl+(qZT@ZhjZ~dzD$GwHfBx z?@#bv4GyeB$NHRt@eT*sP{63M^n`ih^(l%E2%|KMRligG3LVc(1-jrgB@hImgnXWH z0bI=7kmsZ13lh8_0Z_rhF98bMN51DfnLSfJIPZ{ pM@WaApi(I0K@h3_@@Vrz5w zfa@~`UnQ{XkPURg zN>+(%9w$?6G3@&d%(YF??vRg&9QSL+!tqXkC2}!#2uk5(!%=h36OH%Xc6u^^Y$?XVXa;n}1*_vW^9xF6p>uYj!h3CZW+0DkmxtLi0g(;Qgxj#3 z+=6K%J{|P+cXho!*s=L{*r8Qt?_>Bhh4YLx%`I9%R~5D|5yKs>;hL5x(zJqZEjj6F zEZ~I=4Y{^Uy)}tx#phykk+3=o3C*)_pv#Dw-9N3QFl}=`TS>Xt+``uy9zyWcDr`(# z-F(iCR7-fh=O%1k3~>A0Om`r4*UdPJgV#f=v6nxN?F7a(g+ z5va@=&;V?U~@D*(1%^K~iW zT|pPPv(m%_x}f=qH1vmpZf%Bmnu5(IGQ?~Hxff=M$()-dwiw7gr?c3BATLjB$uTu+ zy|C^U*4Nn3{ph&>s2dBJTbqyM2|e@diyLRpzMygTf-4#pYFA#S;qTHJq+O=|G_8Lp zO&f~ecBJudD&nE@NqZY%CBnG~`H%2>)Q@xid2X)?aW*~W-cTWG0-SQ(-CH3B(`74j zdWzW^c!pFvgX(3>a+CZdH|V&UxQmSUoTGXfaqNO=DBm`>)qAsFVyQj z^Yya}FGqAfevSAoz;7XbSKxOgepk5}jr#SOTx1b`@gi5dn;Z4NjO65N+9Y$$Yw=r* z-xB=zZwfHxa!c`xSLbq3{9^bmYyQIm{Ud`Obst}(pX&u(+_J0n)4X`0yZmZ>FycF| k)@OCUSd+V63Yg|4sCg-V+b<@#HjqNlbRQuMoaDd%2YVoS8~^|S diff --git a/codecs/webp/dec/README.md b/codecs/webp/dec/README.md index 4ec8ef7d..00234833 100644 --- a/codecs/webp/dec/README.md +++ b/codecs/webp/dec/README.md @@ -16,7 +16,3 @@ Returns the version of libwebp as a number. va.b.c is encoded as 0x0a0b0c ### `RawImage decode(std::string buffer)` 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()`. diff --git a/codecs/webp/dec/example.html b/codecs/webp/dec/example.html index 26ee2527..46089934 100644 --- a/codecs/webp/dec/example.html +++ b/codecs/webp/dec/example.html @@ -11,9 +11,7 @@ Module.onRuntimeInitialized = async _ => { console.log('Version:', Module.version().toString(16)); const image = await loadFile('../../example.webp'); - const result = Module.decode(image); - const imageData = new ImageData(new Uint8ClampedArray(result.buffer), result.width, result.height); - Module.free_result(); + const imageData = Module.decode(image); const canvas = document.createElement('canvas'); canvas.width = result.width; canvas.height = result.height; diff --git a/codecs/webp/dec/webp_dec.cpp b/codecs/webp/dec/webp_dec.cpp index 969338d5..ea6eed74 100644 --- a/codecs/webp/dec/webp_dec.cpp +++ b/codecs/webp/dec/webp_dec.cpp @@ -10,33 +10,17 @@ int version() { return WebPGetDecoderVersion(); } -class RawImage { - public: - val buffer; - int width; - int height; +const val Uint8ClampedArray = val::global("Uint8ClampedArray"); +const val ImageData = val::global("ImageData"); - RawImage(val b, int w, int h) : buffer(b), width(w), height(h) {} -}; - -uint8_t* last_result; -RawImage decode(std::string buffer) { +val 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); + std::unique_ptr rgba( + WebPDecodeRGBA((const uint8_t*)buffer.c_str(), buffer.size(), &width, &height)); + return ImageData.new_(Uint8ClampedArray.new_(typed_memory_view(width * height * 4, rgba.get())), width, height); } 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 a53187bb..6afc15a8 100644 --- a/codecs/webp/dec/webp_dec.d.ts +++ b/codecs/webp/dec/webp_dec.d.ts @@ -1,13 +1,5 @@ -interface RawImage { - buffer: Uint8Array; - width: number; - height: number; -} - interface WebPModule extends EmscriptenWasm.Module { - decode(data: BufferSource): RawImage; - free_result(): void; + decode(data: BufferSource): ImageData; } export default function(opts: EmscriptenWasm.ModuleOpts): WebPModule; - diff --git a/codecs/webp/dec/webp_dec.js b/codecs/webp/dec/webp_dec.js index b13ef59b..70e7d9ba 100644 --- a/codecs/webp/dec/webp_dec.js +++ b/codecs/webp/dec/webp_dec.js @@ -6,64 +6,51 @@ var webp_dec = (function() { function(webp_dec) { webp_dec = webp_dec || {}; -var e;e||(e=typeof webp_dec !== 'undefined' ? webp_dec : {});var r={},w;for(w in e)e.hasOwnProperty(w)&&(r[w]=e[w]);var aa=!1,z=!1,ba=!1,ca=!1;aa="object"===typeof window;z="function"===typeof importScripts;ba="object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node;ca=!aa&&!ba&&!z;var A="",da,B,ea,ha; -if(ba)A=z?require("path").dirname(A)+"/":__dirname+"/",da=function(a,b){ea||(ea=require("fs"));ha||(ha=require("path"));a=ha.normalize(a);return ea.readFileSync(a,b?null:"utf8")},B=function(a){a=da(a,!0);a.buffer||(a=new Uint8Array(a));a.buffer||D("Assertion failed: undefined");return a},1=g){var q=a.charCodeAt(++f);g=65536+((g&1023)<<10)|q&1023}if(127>=g){if(b>=c)break;d[b++]=g}else{if(2047>=g){if(b+1>=c)break;d[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;d[b++]=224|g>>12}else{if(b+3>=c)break;d[b++]=240|g>>18;d[b++]=128|g>>12&63}d[b++]=128|g>>6&63}d[b++]=128|g&63}}d[b]=0}}var na="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; -function oa(a){var b;for(b=a>>1;I[b];)++b;b<<=1;if(32>1];if(0==d)return c;++b;c+=String.fromCharCode(d)}}function pa(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;I[b>>1]=0;return b-d}function qa(a){return 2*a.length} -function ra(a){for(var b=0,c="";;){var d=J[a+4*b>>2];if(0==d)return c;++b;65536<=d?(d-=65536,c+=String.fromCharCode(55296|d>>10,56320|d&1023)):c+=String.fromCharCode(d)}}function sa(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f=g){var q=a.charCodeAt(++f);g=65536+((g&1023)<<10)|q&1023}J[b>>2]=g;b+=4;if(b+4>c)break}J[b>>2]=0;return b-d} -function ta(a){for(var b=0,c=0;c=d&&++c;b+=4}return b}var K,ua,H,I,va,J,L,wa,xa;function ya(a){K=a;e.HEAP8=ua=new Int8Array(a);e.HEAP16=I=new Int16Array(a);e.HEAP32=J=new Int32Array(a);e.HEAPU8=H=new Uint8Array(a);e.HEAPU16=va=new Uint16Array(a);e.HEAPU32=L=new Uint32Array(a);e.HEAPF32=wa=new Float32Array(a);e.HEAPF64=xa=new Float64Array(a)}var za=e.INITIAL_MEMORY||16777216;e.wasmMemory?G=e.wasmMemory:G=new WebAssembly.Memory({initial:za/65536}); -G&&(K=G.buffer);za=K.byteLength;ya(K);J[3336]=5256384;function Aa(a){for(;0=b?"_"+a:a} -function Ra(a,b){a=Qa(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Sa(a){var b=Error,c=Ra(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} -var Ta=void 0;function S(a){throw new Ta(a);}var Ua=void 0;function Va(a){throw new Ua(a);}function Wa(a,b,c){function d(h){h=c(h);h.length!==a.length&&Va("Mismatched type converter count");for(var l=0;l>2])}function qb(a,b,c){if(b===c)return a;if(void 0===c.R)return null;a=qb(a,b,c.R);return null===a?null:c.ja(a)}var rb={}; -function sb(a,b){for(void 0===b&&S("ptr should not be undefined");a.R;)b=a.Z(b),a=a.R;return rb[b]}function tb(a,b){b.N&&b.L||Va("makeClassHandle requires ptr and ptrType");!!b.P!==!!b.O&&Va("Both smartPtrType and smartPtr must be specified");b.count={value:1};return bb(Object.create(a,{K:{value:b}}))}function W(a,b,c,d){this.name=a;this.M=b;this.da=c;this.$=d;this.aa=!1;this.V=this.qa=this.pa=this.ga=this.ra=this.oa=void 0;void 0!==b.R?this.toWireType=lb:(this.toWireType=d?kb:nb,this.T=null)} -function ub(a,b,c){e.hasOwnProperty(a)||Va("Replacing nonexistant public symbol");void 0!==e[a].S&&void 0!==c?e[a].S[c]=b:(e[a]=b,e[a].ha=c)} -function X(a,b){a=P(a);var c=e["dynCall_"+a];for(var d=[],f=1;f>2])};case 3:return function(c){return this.fromWireType(xa[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Eb(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ra(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} -function Fb(a,b){for(var c=[],d=0;d>2)+d]);return c}function Gb(a,b,c){switch(b){case 0:return c?function(d){return ua[d]}:function(d){return H[d]};case 1:return c?function(d){return I[d>>1]}:function(d){return va[d>>1]};case 2:return c?function(d){return J[d>>2]}:function(d){return L[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}for(var Hb=Array(256),Ib=0;256>Ib;++Ib)Hb[Ib]=String.fromCharCode(Ib);Oa=Hb;Ta=e.BindingError=Sa("BindingError"); -Ua=e.InternalError=Sa("InternalError");U.prototype.isAliasOf=function(a){if(!(this instanceof U&&a instanceof U))return!1;var b=this.K.N.M,c=this.K.L,d=a.K.N.M;for(a=a.K.L;b.R;)c=b.Z(c),b=b.R;for(;d.R;)a=d.Z(a),d=d.R;return b===d&&c===a};U.prototype.clone=function(){this.K.L||Ya(this);if(this.K.Y)return this.K.count.value+=1,this;var a=bb(Object.create(Object.getPrototypeOf(this),{K:{value:Xa(this.K)}}));a.K.count.value+=1;a.K.W=!1;return a}; -U.prototype["delete"]=function(){this.K.L||Ya(this);this.K.W&&!this.K.Y&&S("Object already scheduled for deletion");$a(this);ab(this.K);this.K.Y||(this.K.O=void 0,this.K.L=void 0)};U.prototype.isDeleted=function(){return!this.K.L};U.prototype.deleteLater=function(){this.K.L||Ya(this);this.K.W&&!this.K.Y&&S("Object already scheduled for deletion");db.push(this);1===db.length&&cb&&cb(eb);this.K.W=!0;return this};W.prototype.ma=function(a){this.ga&&(a=this.ga(a));return a}; -W.prototype.fa=function(a){this.V&&this.V(a)};W.prototype.argPackAdvance=8;W.prototype.readValueFromPointer=pb;W.prototype.deleteObject=function(a){if(null!==a)a["delete"]()}; -W.prototype.fromWireType=function(a){function b(){return this.aa?tb(this.M.U,{N:this.oa,L:c,P:this,O:a}):tb(this.M.U,{N:this,L:a})}var c=this.ma(a);if(!c)return this.fa(a),null;var d=sb(this.M,c);if(void 0!==d){if(0===d.K.count.value)return d.K.L=c,d.K.O=a,d.clone();d=d.clone();this.fa(a);return d}d=this.M.la(c);d=fb[d];if(!d)return b.call(this);d=this.$?d.ia:d.pointerType;var f=qb(c,this.M,d.M);return null===f?b.call(this):this.aa?tb(d.M.U,{N:d,L:f,P:this,O:a}):tb(d.M.U,{N:d,L:f})}; -e.getInheritedInstanceCount=function(){return Object.keys(rb).length};e.getLiveInheritedInstances=function(){var a=[],b;for(b in rb)rb.hasOwnProperty(b)&&a.push(rb[b]);return a};e.flushPendingDeletes=eb;e.setDelayFunction=function(a){cb=a;db.length&&cb&&cb(eb)};vb=e.UnboundTypeError=Sa("UnboundTypeError");e.count_emval_handles=function(){for(var a=0,b=5;b>g])},T:null})},o:function(a,b,c,d,f,g,q,h,l,m,k,p,t){k=P(k);g=X(f,g);h&&(h=X(q,h)); -m&&(m=X(l,m));t=X(p,t);var v=Qa(k);hb(v,function(){yb("Cannot construct "+k+" due to unbound types",[d])});Wa([a,b,c],d?[d]:[],function(n){n=n[0];if(d){var u=n.M;var x=u.U}else x=U.prototype;n=Ra(v,function(){if(Object.getPrototypeOf(this)!==y)throw new Ta("Use 'new' to construct "+k);if(void 0===C.X)throw new Ta(k+" has no accessible constructor");var ob=C.X[arguments.length];if(void 0===ob)throw new Ta("Tried to invoke ctor of "+k+" with invalid number of parameters ("+arguments.length+") - expected ("+ -Object.keys(C.X).toString()+") parameters instead!");return ob.apply(this,arguments)});var y=Object.create(x,{constructor:{value:n}});n.prototype=y;var C=new ib(k,n,y,t,u,g,h,m);u=new W(k,C,!0,!1);x=new W(k+"*",C,!1,!1);var fa=new W(k+" const*",C,!1,!0);fb[a]={pointerType:x,ia:fa};ub(v,n);return[u,x,fa]})},e:function(a,b,c,d,f,g,q,h,l,m){b=P(b);f=X(d,f);Wa([],[a],function(k){k=k[0];var p=k.name+"."+b,t={get:function(){yb("Cannot access "+p+" due to unbound types",[c,q])},enumerable:!0,configurable:!0}; -l?t.set=function(){yb("Cannot access "+p+" due to unbound types",[c,q])}:t.set=function(){S(p+" is a read-only property")};Object.defineProperty(k.M.U,b,t);Wa([],l?[c,q]:[c],function(v){var n=v[0],u={get:function(){var y=Ab(this,k,p+" getter");return n.fromWireType(f(g,y))},enumerable:!0};if(l){l=X(h,l);var x=v[1];u.set=function(y){var C=Ab(this,k,p+" setter"),fa=[];l(m,C,x.toWireType(fa,y));zb(fa)}}Object.defineProperty(k.M.U,b,u);return[]});return[]})},q:function(a,b){b=P(b);T(a,{name:b,fromWireType:function(c){var d= -Z[c].value;Cb(c);return d},toWireType:function(c,d){return mb(d)},argPackAdvance:8,readValueFromPointer:pb,T:null})},h:function(a,b,c){c=Na(c);b=P(b);T(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+V(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Db(b,c),T:null})},d:function(a,b,c,d,f,g){var q=Fb(b,c);a=P(a);f=X(d,f);hb(a,function(){yb("Cannot call "+a+" due to unbound types", -q)},b-1);Wa([],q,function(h){var l=[h[0],null].concat(h.slice(1)),m=h=a,k=f,p=l.length;2>p&&S("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var t=null!==l[1]&&!1,v=!1,n=1;n>>h}}var l=-1!=b.indexOf("unsigned");T(a,{name:b, -fromWireType:g,toWireType:function(m,k){if("number"!==typeof k&&"boolean"!==typeof k)throw new TypeError('Cannot convert "'+V(k)+'" to '+this.name);if(kf)throw new TypeError('Passing a number "'+V(k)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return l?k>>>0:k|0},argPackAdvance:8,readValueFromPointer:Gb(b,q,0!==d),T:null})},a:function(a,b,c){function d(g){g>>=2;var q=L;return new f(K,q[g+1],q[g])}var f=[Int8Array,Uint8Array, -Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);T(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{na:!0})},i:function(a,b){b=P(b);var c="std::string"===b;T(a,{name:b,fromWireType:function(d){var f=L[d>>2];if(c){var g=H[d+4+f],q=0;0!=g&&(q=g,H[d+4+f]=0);var h=d+4;for(g=0;g<=f;++g){var l=d+4+g;if(0==H[l]){if(h){for(var m=H,k=h+NaN,p=h;m[p]&&!(p>=k);)++p;if(16t?k+=String.fromCharCode(t):(t-=65536,k+=String.fromCharCode(55296|t>>10,56320|t&1023))}}else k+=String.fromCharCode(t)}h=k}}else h="";if(void 0===u)var u=h;else u+=String.fromCharCode(0),u+=h;h=l+1}}0!=q&&(H[d+4+f]=q)}else{u=Array(f);for(g=0;g=p&&(p=65536+((p&1023)<<10)|f.charCodeAt(++k)&1023);127>=p?++m:m=2047>=p?m+2:65535>=p?m+3:m+4}return m}:function(){return f.length})(),h=Jb(4+q+1);L[h>>2]=q;if(c&&g)ma(f,h+4,q+1);else if(g)for(g=0;g>2],k=q(),p=k[l+4+m*b>>h],t=0;0!=p&&(t=p,k[l+4+m*b>>h]=0);var v=l+4;for(p=0;p<=m;++p){var n= -l+4+p*b;if(0==k[n>>h]){v=d(v);if(void 0===u)var u=v;else u+=String.fromCharCode(0),u+=v;v=n+b}}0!=t&&(k[l+4+m*b>>h]=t);Y(l);return u},toWireType:function(l,m){"string"!==typeof m&&S("Cannot pass non-string to C++ string type "+c);var k=g(m),p=Jb(4+k+b);L[p>>2]=k>>h;f(m,p+4,k+b);null!==l&&l.push(Y,p);return p},argPackAdvance:8,readValueFromPointer:pb,T:function(l){Y(l)}})},l:function(a,b){b=P(b);T(a,{sa:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},g:Cb,r:function(a){4< -a&&(Z[a].ea+=1)},j:function(a,b){var c=R[a];void 0===c&&S("_emval_take_value has unknown type "+wb(a));a=c.readValueFromPointer(b);return mb(a)},p:function(a,b,c){H.copyWithin(a,b,b+c)},c:function(a){var b=H.length;if(2147418112=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0>16);ya(G.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},memory:G, -table:ja},Lb=function(){function a(f){e.asm=f.exports;M--;e.monitorRunDependencies&&e.monitorRunDependencies(M);0==M&&(null!==Ga&&(clearInterval(Ga),Ga=null),N&&(f=N,N=null,f()))}function b(f){a(f.instance)}function c(f){return Ka().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){E("failed to asynchronously prepare wasm: "+g);D(g)})}var d={a:Kb};M++;e.monitorRunDependencies&&e.monitorRunDependencies(M);if(e.instantiateWasm)try{return e.instantiateWasm(d,a)}catch(f){return E("Module.instantiateWasm callback failed with error: "+ -f),!1}(function(){if(F||"function"!==typeof WebAssembly.instantiateStreaming||Ha()||"function"!==typeof fetch)return c(b);fetch(O,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){E("wasm streaming compile failed: "+g);E("falling back to ArrayBuffer instantiation");c(b)})})})();return{}}();e.asm=Lb; -var La=e.___wasm_call_ctors=function(){return(La=e.___wasm_call_ctors=e.asm.s).apply(null,arguments)},Y=e._free=function(){return(Y=e._free=e.asm.t).apply(null,arguments)},Jb=e._malloc=function(){return(Jb=e._malloc=e.asm.u).apply(null,arguments)},xb=e.___getTypeName=function(){return(xb=e.___getTypeName=e.asm.v).apply(null,arguments)};e.___embind_register_native_and_builtin_types=function(){return(e.___embind_register_native_and_builtin_types=e.asm.w).apply(null,arguments)}; -e.dynCall_ii=function(){return(e.dynCall_ii=e.asm.x).apply(null,arguments)};e.dynCall_vi=function(){return(e.dynCall_vi=e.asm.y).apply(null,arguments)};e.dynCall_iii=function(){return(e.dynCall_iii=e.asm.z).apply(null,arguments)};e.dynCall_viii=function(){return(e.dynCall_viii=e.asm.A).apply(null,arguments)};e.dynCall_vii=function(){return(e.dynCall_vii=e.asm.B).apply(null,arguments)};e.dynCall_i=function(){return(e.dynCall_i=e.asm.C).apply(null,arguments)}; -e.dynCall_v=function(){return(e.dynCall_v=e.asm.D).apply(null,arguments)};e.dynCall_iiii=function(){return(e.dynCall_iiii=e.asm.E).apply(null,arguments)};e.dynCall_iiiiiii=function(){return(e.dynCall_iiiiiii=e.asm.F).apply(null,arguments)};e.dynCall_viiii=function(){return(e.dynCall_viiii=e.asm.G).apply(null,arguments)};e.dynCall_viiiii=function(){return(e.dynCall_viiiii=e.asm.H).apply(null,arguments)};e.dynCall_viiiiiiiii=function(){return(e.dynCall_viiiiiiiii=e.asm.I).apply(null,arguments)}; -e.dynCall_viiiiii=function(){return(e.dynCall_viiiiii=e.asm.J).apply(null,arguments)};e.asm=Lb;var Mb;e.then=function(a){if(Mb)a(e);else{var b=e.onRuntimeInitialized;e.onRuntimeInitialized=function(){b&&b();a(e)}}return e};N=function Nb(){Mb||Ob();Mb||(N=Nb)}; -function Ob(){function a(){if(!Mb&&(Mb=!0,e.calledRun=!0,!ka)){Aa(Ca);Aa(Da);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();Ea.unshift(b)}Aa(Ea)}}if(!(0=g){var q=a.charCodeAt(++f);g=65536+((g&1023)<<10)|q&1023}if(127>=g){if(b>=d)break;e[b++]=g}else{if(2047>=g){if(b+1>=d)break;e[b++]=192|g>>6}else{if(65535>=g){if(b+2>=d)break;e[b++]=224|g>>12}else{if(b+3>=d)break;e[b++]=240|g>>18;e[b++]=128|g>>12&63}e[b++]=128|g>>6&63}e[b++]=128|g&63}}e[b]=0}}var ka="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; +function la(a){var b;for(b=a>>1;H[b];)++b;b<<=1;if(32>1];if(0==e)return d;++b;d+=String.fromCharCode(e)}}function ma(a,b,d){void 0===d&&(d=2147483647);if(2>d)return 0;d-=2;var e=b;d=d<2*a.length?d/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;H[b>>1]=0;return b-e}function na(a){return 2*a.length} +function oa(a){for(var b=0,d="";;){var e=I[a+4*b>>2];if(0==e)return d;++b;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}}function pa(a,b,d){void 0===d&&(d=2147483647);if(4>d)return 0;var e=b;d=e+d-4;for(var f=0;f=g){var q=a.charCodeAt(++f);g=65536+((g&1023)<<10)|q&1023}I[b>>2]=g;b+=4;if(b+4>d)break}I[b>>2]=0;return b-e} +function qa(a){for(var b=0,d=0;d=e&&++d;b+=4}return b}var J,ra,G,H,sa,I,K,ta,ua;function va(a){J=a;c.HEAP8=ra=new Int8Array(a);c.HEAP16=H=new Int16Array(a);c.HEAP32=I=new Int32Array(a);c.HEAPU8=G=new Uint8Array(a);c.HEAPU16=sa=new Uint16Array(a);c.HEAPU32=K=new Uint32Array(a);c.HEAPF32=ta=new Float32Array(a);c.HEAPF64=ua=new Float64Array(a)}var wa=c.INITIAL_MEMORY||16777216;c.wasmMemory?F=c.wasmMemory:F=new WebAssembly.Memory({initial:wa/65536}); +F&&(J=F.buffer);wa=J.byteLength;va(J);I[3260]=5256080;function M(a){for(;0=b?"_"+a:a} +function Ma(a,b){a=La(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Na(a){var b=Error,d=Ma(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});d.prototype=Object.create(b.prototype);d.prototype.constructor=d;d.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return d} +var Oa=void 0;function V(a){throw new Oa(a);}var Pa=void 0;function Qa(a,b){function d(h){h=b(h);if(h.length!==e.length)throw new Pa("Mismatched type converter count");for(var k=0;k>2])}function Wa(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a} +function Xa(a,b){switch(b){case 2:return function(d){return this.fromWireType(ta[d>>2])};case 3:return function(d){return this.fromWireType(ua[d>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Ya(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var d=Ma(b.name||"unknownFunctionName",function(){});d.prototype=b.prototype;d=new d;a=b.apply(d,a);return a instanceof Object?a:d} +function Za(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function $a(a,b){var d=c;if(void 0===d[a].H){var e=d[a];d[a]=function(){d[a].H.hasOwnProperty(arguments.length)||V("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+d[a].H+")!");return d[a].H[arguments.length].apply(this,arguments)};d[a].H=[];d[a].H[e.M]=e}} +function ab(a,b,d){c.hasOwnProperty(a)?((void 0===d||void 0!==c[a].H&&void 0!==c[a].H[d])&&V("Cannot register public name '"+a+"' twice"),$a(a,a),c.hasOwnProperty(d)&&V("Cannot register multiple overloads of a function with the same number of arguments ("+d+")!"),c[a].H[d]=b):(c[a]=b,void 0!==d&&(c[a].R=d))}function bb(a,b){for(var d=[],e=0;e>2)+e]);return d} +function cb(a,b){a=S(a);var d=c["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return sa[e>>1]};case 2:return d?function(e){return I[e>>2]}:function(e){return K[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var ib={}; +function jb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function kb(a,b){var d=U[a];void 0===d&&V(b+" has unknown type "+eb(a));return d}for(var lb={},mb=Array(256),nb=0;256>nb;++nb)mb[nb]=String.fromCharCode(nb);Ja=mb;Oa=c.BindingError=Na("BindingError");Pa=c.InternalError=Na("InternalError");c.count_emval_handles=function(){for(var a=0,b=5;b>g])},I:null})},o:function(a,b){b=S(b);W(a,{name:b,fromWireType:function(d){var e=X[d].value; +Ta(d);return e},toWireType:function(d,e){return Ua(e)},argPackAdvance:8,readValueFromPointer:Va,I:null})},h:function(a,b,d){d=Ia(d);b=S(b);W(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Wa(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Xa(b,d),I:null})},f:function(a,b,d,e,f,g){var q=bb(b,d);a=S(a);f=cb(e,f);ab(a,function(){gb("Cannot call "+a+" due to unbound types", +q)},b-1);Qa(q,function(h){var k=[h[0],null].concat(h.slice(1)),l=h=a,n=f,p=k.length;2>p&&V("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var r=null!==k[1]&&!1,v=!1,m=1;m>>h}}var k=-1!=b.indexOf("unsigned");W(a,{name:b,fromWireType:g,toWireType:function(l,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+Wa(n)+'" to '+this.name);if(nf)throw new TypeError('Passing a number "'+Wa(n)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+e+", "+f+"]!");return k?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:hb(b, +q,0!==e),I:null})},a:function(a,b,d){function e(g){g>>=2;var q=K;return new f(J,q[g+1],q[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];d=S(d);W(a,{name:d,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{O:!0})},e:function(a,b){b=S(b);var d="std::string"===b;W(a,{name:b,fromWireType:function(e){var f=K[e>>2];if(d){var g=G[e+4+f],q=0;0!=g&&(q=g,G[e+4+f]=0);var h=e+4;for(g=0;g<=f;++g){var k=e+4+g;if(0==G[k]){if(h){for(var l=G,n=h+ +NaN,p=h;l[p]&&!(p>=n);)++p;if(16r?n+=String.fromCharCode(r):(r-=65536,n+=String.fromCharCode(55296|r>>10,56320|r&1023))}}else n+=String.fromCharCode(r)}h=n}}else h="";if(void 0===u)var u=h;else u+=String.fromCharCode(0),u+=h;h=k+1}}0!=q&&(G[e+4+f]=q)}else{u= +Array(f);for(g=0;g=p&&(p=65536+((p&1023)<<10)|f.charCodeAt(++n)&1023);127>=p?++l:l=2047>=p?l+2:65535>=p?l+3:l+4}return l}: +function(){return f.length})(),h=ob(4+q+1);K[h>>2]=q;if(d&&g)ja(f,h+4,q+1);else if(g)for(g=0;g>2],n=q(),p=n[k+4+l*b>>h],r=0;0!=p&&(r=p,n[k+4+l*b>>h]=0);var v=k+4;for(p=0;p<=l;++p){var m=k+4+p*b;if(0==n[m>>h]){v=e(v);if(void 0===u)var u=v;else u+=String.fromCharCode(0),u+=v;v=m+b}}0!=r&&(n[k+4+l*b>>h]=r);Y(k);return u},toWireType:function(k,l){"string"!==typeof l&&V("Cannot pass non-string to C++ string type "+d);var n=g(l),p=ob(4+n+b);K[p>>2]=n>>h;f(l,p+4,n+b);null!==k&&k.push(Y,p);return p},argPackAdvance:8,readValueFromPointer:Va,I:function(k){Y(k)}})}, +j:function(a,b){b=S(b);W(a,{P:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},p:Ta,q:function(a){if(0===a)return Ua(jb());var b=ib[a];a=void 0===b?S(a):b;return Ua(jb()[a])},m:function(a){4> 2) + "+ +g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",q+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(kb,c,Ua);lb[b]=f}return f(a,d,e)},n:function(a,b,d){G.copyWithin(a,b,b+d)},c:function(a){var b=G.length;if(2147418112=d;d*=2){var e=b*(1+.2/d);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>16);va(F.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},memory:F,table:fa},qb=function(){function a(f){c.asm=f.exports;N--;c.monitorRunDependencies&&c.monitorRunDependencies(N);0==N&&(null!==Ca&&(clearInterval(Ca),Ca=null),O&&(f=O,O=null,f()))}function b(f){a(f.instance)}function d(f){return Ga().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){D("failed to asynchronously prepare wasm: "+ +g);C(g)})}var e={a:pb};N++;c.monitorRunDependencies&&c.monitorRunDependencies(N);if(c.instantiateWasm)try{return c.instantiateWasm(e,a)}catch(f){return D("Module.instantiateWasm callback failed with error: "+f),!1}(function(){if(E||"function"!==typeof WebAssembly.instantiateStreaming||Da()||"function"!==typeof fetch)return d(b);fetch(Q,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){D("wasm streaming compile failed: "+g);D("falling back to ArrayBuffer instantiation"); +d(b)})})})();return{}}();c.asm=qb;var Ha=c.___wasm_call_ctors=function(){return(Ha=c.___wasm_call_ctors=c.asm.r).apply(null,arguments)},ob=c._malloc=function(){return(ob=c._malloc=c.asm.s).apply(null,arguments)},Y=c._free=function(){return(Y=c._free=c.asm.t).apply(null,arguments)},fb=c.___getTypeName=function(){return(fb=c.___getTypeName=c.asm.u).apply(null,arguments)}; +c.___embind_register_native_and_builtin_types=function(){return(c.___embind_register_native_and_builtin_types=c.asm.v).apply(null,arguments)};c.dynCall_vi=function(){return(c.dynCall_vi=c.asm.w).apply(null,arguments)};c.dynCall_iii=function(){return(c.dynCall_iii=c.asm.x).apply(null,arguments)};c.dynCall_vii=function(){return(c.dynCall_vii=c.asm.y).apply(null,arguments)};c.dynCall_ii=function(){return(c.dynCall_ii=c.asm.z).apply(null,arguments)}; +c.dynCall_i=function(){return(c.dynCall_i=c.asm.A).apply(null,arguments)};c.dynCall_iiii=function(){return(c.dynCall_iiii=c.asm.B).apply(null,arguments)};c.dynCall_iiiiiii=function(){return(c.dynCall_iiiiiii=c.asm.C).apply(null,arguments)};c.dynCall_viiii=function(){return(c.dynCall_viiii=c.asm.D).apply(null,arguments)};c.dynCall_viiiii=function(){return(c.dynCall_viiiii=c.asm.E).apply(null,arguments)};c.dynCall_viiiiiiiii=function(){return(c.dynCall_viiiiiiiii=c.asm.F).apply(null,arguments)}; +c.dynCall_viiiiii=function(){return(c.dynCall_viiiiii=c.asm.G).apply(null,arguments)};c.asm=qb;var Z;c.then=function(a){if(Z)a(c);else{var b=c.onRuntimeInitialized;c.onRuntimeInitialized=function(){b&&b();a(c)}}return c};O=function rb(){Z||sb();Z||(O=rb)}; +function sb(){function a(){if(!Z&&(Z=!0,c.calledRun=!0,!ha)){M(ya);M(za);if(c.onRuntimeInitialized)c.onRuntimeInitialized();if(c.postRun)for("function"==typeof c.postRun&&(c.postRun=[c.postRun]);c.postRun.length;){var b=c.postRun.shift();Aa.unshift(b)}M(Aa)}}if(!(09u$RawwC45F&UW6A%?$6tIv1 zVF48{HY#gWSQiBq6;Du5Q9%QOqN1Xr;>zmxd(|^B?C$sf{=x44)vKykuc}_XdUcF1 zpZ47Py=Sa3arSgF41?~cW)moCOc2p1MJITo_%lENHUaTLgfYR(bbOg+OfU>LA!2X`FUG=g|vrRmdj z%7~7w)RZcnYdYkeNHYu%-dF3`nVK?-V|}VKHH$7J^Aq!+X%Kl#)8m&OQ;^VqWD$`` zM$j}#P=HcX4UaUvrdJxt-k{I)k%v4UGKA^%dMRjly@p35`Tatec?NJV5vh2(KY2nrs-R2SuAGEdJ;Bdm%t-lIaP0yx^5(1|dTbG@l<#39L*b zEl8$^#WTQN_&t8|k|){gN%jN@(djIk`*03VYI>3{BS?NQ4B$_{_!H$2K$4N<^Kl6% z6?HQ4j|?x%nc^`_zt8;(1meJJ=|95?7^pW&(k+N9Y=Pm0zU>2!_pPog=- zO+<5zUx=pLkagu1T@dMEi<9njBjPHns8Yd{YK#<{( zwSYdMgY>caKD|Qkn$wnvTg2~loW7zj=?gkWpVMb_l#bA+beIm&(`NPC=95wL4s(h5 zXY+RRHgmCgt9grgv$@E;$y{hIFl)`<#c$$Y;hgQ=niqT5Cn^usbyXYfvNPH;nr4Ph@@xFLZyesyJz2Y75w%8+fi}kdDUKTsW zi{b_Gyx1{DY!}^oz!oGSTELzzc9RoZlQa` zDiISaMZYzo-%@dxxLfpFE|gdylImA_4yt<3;Or%bjbdShJ;PJTHf#|I8Mf&xJFHT@ zq1=s!jmXdzw#PP$MRJ(V@(gfJA2RT$Vcr)C>W&zZum_nzM;a;@hD|Bt)E+kQsAAtW zV$or>-ZwONg)W1$1KB1LI*XBL@nLn2Kf5;<$1)5}F`Y#q8ypXk25FYe~JE7;QHi*OvJ_X4)!YK zVnT+9auaZi35RT|3Dc}0x>?kU;6GY%lY~eN;D6i>x@D10)P(&y9onTj>B-!+kRA`B zooFP?6}F8O!`XRM^|!Lc+QaHXs}+q<^Q=D?_YIlo7qEzwi!9raeER(GN(Vvr`} zNu&sg#xllabZC`tWue|&H`|m2P`lr$mti&~=GSk?sG#oIEu0evxV2Cn0Ie7n(m6W2 zY#XLZa4}@_JgYsKQF8!rol4Gnie6POWL-tOR7tbJl&5AktFT@Z$poFUJ@WPXCz=VW z=!;@!p*_(LWd?U^a18Vrt>FYBvJd1lI+Eaco7$O>wpe6^P1#p{)!c4|Xhd4g45uL> zU&8@qXZI<5kcOnVmGj952n>-^j^&~moK!bt_xL~3{D3sMqcXq*B|7$K=7HX~tgt3^ zVtO&Ziuh%7Gs>-|v(Zx(v2u_E#hj@C@;-G=PG^D9yC|oJs5`8l%gHIwgC{XqY@ajV z7ISAoA0a7*lRBBxn+I{{+?zYsLH}8w(EtI6fRcFJnelO!$Qt(jk@@r7aUnfwC_aKi zLPU{}Y)?(tlNdMSTXf6jVeRK(zX*WsLvo76He^$at3=%qm6bQ0NA68|%LRzd^Ou5H z|4_b{IP$TU=ZBFEqS@ZcF=%v{q?}Ly76|}W%QXzDsNlLzZn7}hUUYFnCPNHB+j%R| z^ODIdf?!!-1m7$uvl5nw?SQwiLl~AzH-qgRfz$}Ox!L@&dBdY#FKw@)g>vM+qns3} z4rst_+Hlku7_C6k{Q$KaYVqgcAd=dalN@no&T{r|dUum|HuF1n)Nsw=)}!j9!omSh zYCd5BmUS)+*k&Xgv;(8;pe;sJr&yM=^(ZT{g%xsbugw^Nw(q0 zno(#lk^;u(BrJO;ZhD`ExffJm7@Fu=DPG$Q`5>^`XqTtNMc`W19aW#(wm5NA1w(d5 zBEJ(2@el(K)jL$iv5`=iKX-;Yij#-b_E1Z4;HdgIRK!G2*iKF4OcpvKTB6#ETI;yT{ zKkffRwp?YF-0#XqXUb>PgnbD&;-!)!2~z~ahheNu5!=Am_b5Q@u#Bg;zG$mu`p(Zvs0J_KaC8q;}T z=gc8+O}(&T*d^x?@;ysr+(>dZNofYNmedQck7yrCpm5m8pT`umXg}kt-oAGPGAnkh<4cIOG3@>-rBQ_WH0ql_Yh^NSG(Uwb*id7)P6(X zNT~r`i#Y3d7!eqIcGl2}n3O#c$GpaI6I43u)t2&ML2hD<7nxSSXuy?3=d0sRS<3mg z&kjZ~O9mtIeAQ;)mmL~fM>-M)Y%=^YFSsu7v6s2|pq}>AQGyR{lW@H7gp%dks^6g2 z<$JUv+R&H;_D$G6cs?*$f20l|7u7g%{>Zv|P)QFrYwgD<&sH>K&Rpyc(MHWPRBo?TsrQ>)JG3EIJMw9@z1R6=n<(s&=b%wBNnbmw8Xz!-okjSL z=Qx2HCdfvD8qhm0SV3@bVAx+*eR{U{q{G=$7x(T)nQCe8hp9sK=o6xC>f%1(;T54I z%T6j5`4(z{Zw_1Bpez?UWHS-X;g|ow%nN!u%)zj6Y&?+|EhRgLe4L@3dZ|y_Q0I`& z%y9u7m&Pzz!{$0wO5gTH&k&M6$PCH*d|XcvaB)CqlViy^k(mSd``F&xn;e}_TA$^)K-?PUVm zHGqGfv-50kx>wo#i&`b2J4!KC8N;mky5TsTa|$D32aF8_g#nn_zZIpc+xvIMdt3hp zLyy9E$Prc^vchk97}}vT+3?Px`yi;lOzj}HwN`IV?Vo=EI-poQtle+<6&eqrwH__r zm-WS0=8I@n3(V6gFqs_HkPZ!Fa6BE;ZNyHISuHqtB;BTnt#dbtv1|{otQ^zX-dg6s zs-#0EEsWtDH)M7T%VOPQ3LJR(CnUvG$V<5Ngb%;9Ylcj>je(d+wq|g$hcjf2o9^KZ zs~fMNybi(hXAb~<<*|Koxmq!#D`nU38X_p4TM*44DC_4aciehZl*>`;|4kt#>~NrY6*Wpe`HU*0Vq85Qn1=e*ls7 zBn*2+j*Ju;)`w&`Ti-IAclH=E={uweLmk9Z1A#WG*HX#=ad8?2&3%N+h zn}mcBT>u9r;5`4fAwAAwEaTqPX!A!f+Rit?rnB!u!x7G}8lQ@yc#m`YI~=hw;H(Bn zm9@fo1z;gL$MIP}j@oO;T5_JiC+d8N_k8DPyl<4hk^C1qhxh5k3*Xg=@5cv;cj6Ou zKEr#ybL)GY_%z91$vRiBS&M~-m#oF=m$Qcy6mZQ0<)RxtLDqC~lFCIX>;yWqSoIxo z6Z+!$5gmyxQ{Roe&3_pNlqnah1*2Z2O=`sGs~RcKj6User*-dk_3W5IU6+uR&&+@R za()&1{I(~fRqWf<9-^vX+4y!rmji&MHrSl5qcuZ{I8gz1MoSbXq zcy;o;S74F1o!sVr7y7v<9`b@oNY z6jQS=nn-V{cQ0y7FR6cB)D@F?=ZlZ3f=jkxXnu4_5v{xH(mdL%@-HpLh#h`ueJG?g z(Serbg$y43vS*k)QJcIlG--xqs9!HFO1+Ij*j2S`^HE30Tvc{ic7RE?7lw1>Wv%ED zHS@BL^sw4+Sxb6IJ$G4u(IC|2mp6|l2VuETB~yMZ*oZNNCpEGu#yT(_VKj*V=A=+6 z9`OSc8RS|v_Abk{U>1+Ru#xzQuz*drCl0~r%7NIbfqet7M*9ZpRqC@2mo_=zPPp+k(If_#O#VQG@XY)t>1eE z&QqQOQU@osiZ<_MlylchfC^q4V&4LT9}5zHM80Xdj7{e?=EtHyncrxneio zlLrN_;r2R_j*)R>a+#0kYG;kIr;JK^h}{EhU(2y-?vyU^AliDYs-IF!$JBu-x%9dE zX-ZEzpgK*RAP<`8V1lQNb{Sw<_r$JGr%U}8=oYAseVk6YlodObPNV69*w74WNB75O zWnd?MbL&`2CUpxed)06bkj#n=&!n+x*|ZMSMQxuJE_#6Z@&>6W7L)mP74$n>R$=$W zvfjbzR#ZN(ypc-kuVzJxdhImz1|!#a5f9`SwI$H%#bK?^avNFhHYBzIva~;D%0H>y zk$K+iupu8&V=F`X52M{UHMYvMN{xn@G2}y_$_LdQl|=*7VPYI31$awYTyzwkTbyI`L<6)lis}x~jpnPkmQqXRQ&akaH~IL47ZPRqN@u24=%#dF0Kc z>Zey{zpHmYJXR;Pm@VpTs+$i@$yI%3M5u>)XvXzaqrz7YioS>4U)W`oy)6UP@>Xdp zC9h$fT!#}rEtV1HcH%Ww?IFF!3VAt4PFP62YsBk7q>%i|!u~x@7EDwT%_s9vS0PK> zfd1HS2$_q;VDl%z>F97wj=O1LkQ@pE&6% zPO8Sw%mbGjX5I!b%R8&M`5f+34=a=wbOLJTlXKOeS?y_%nlY=m_Z(eixVXF@4R=*K zSPpWP_*KNS0t@eGr#in0&6bXOdsb1ivQUzyh66CZp`aLm#YUb=s_xoe*RcpyLvO%6 z<$jmf+GaKM2W!SGx8;h$oczk_jx=C4_rQ$j@vJX)zije#jFhbMmnydO>GlZ^FH(%4Y#kJgerYz%+2kRv?BCwq5k}9Qz;h<6|liV z+g-E(CnGl&FzSZuI;+a-&lWolsV&!!&m0s^%EPX`^Q~~!2pbsM+wO*`)LJdO!NL2T z8^Ye!Xx?V(mm9h!F=`I4S9Ve5^ZKBdXU}Vk>2%G!$<+F;8@nNW_ZthdIaNBGV&_z1 z_&hCuRppJHG_MS`;l{j_Os|t=!I73-EUYg^MKPt<-xwWBl%(FOEfGFLr7!5(K8W^! z%{H;lBHyi92E7njfg0{i+RnYU#05=ZU25uSWR?4iKO$;z++BWE~|yra47 z`9RHB7!E%3whryutyUxSq#N3{TkS;XK{vE{xB7Nro8Y}}Xya~Ga8rli3OBThtWX z$g$Lx`C;_ahx79&S^YG>C?f^k1N+Tf$w_t69H~m9Ijy)W*s%Mp@_(!9GFQkYEOLRm za*+%!a4EIB)jw`34*t4FSN`N%>iA9VgI~L$18=FqMQwwJ+|aSNRPCZ1o%euC*~66L z=&3`TSGRf#c@sL*U0UMclxLoeY>>hPhgV>-*T+g`?v*VtELlI`HpojY z9KkWa;xND1ZR55mwv-?rc%GTZAJ3#V-BLjpsl&J2i1&nB$F^)_DKAOWn~R)}t$z!& zo0_<|rTX&LOIrNzsnqzzv%u=@#m~}Uwe+^L@P6;Ma=cS+@9hl6>=}rJv5zyH?W{FJ z*H%jgTlNRji`jjIKJpS2?Sc%tmU59QyQ2*)Qs>{%s;Eh7OS`Q9g^gNsNAdq#)=nzr z&N7U?-gj0;vFFLBy8qTv@rH6G;zPf9gS+-0Qf8$m8P-OD2@S(!0D6sw3EB)t6?!qs z)4OvmFH70HI(2WLS0uRT{wHTEhXe2}qHqG7tcYVcCGe>s2JEpRV7oaA{l- z`vg23F$ri_!koZG>6=&U?_1l5?fNy?mbpH5X8M*a~P4)|1hq60W*zRRGP8Mv_M z57_Aswr(LfSL95cQnb}a%Aqbob|6d!m`FnG?>Yl2*+t@sUz-!OlUc+U3D6FRMdzoa z8@vz2N5=XqR|}QCw3M<{zolcTg<87woG#PQEbwmFqs77E^h(8tCknS#%*1`9=jJ8-c?J~to{Qv zOTcD~SUCvsOIMy(@BkbaNa&9^zoqG8oM8xgF$c?y0v5bFcG<K=x?C*LWN3>UvpK9z+??Z&CsAp)wDvFy)#H|y`Df%?i^5Qc2=vs0m6v)m))Ln( zzKR{rhFel*;J5*$+CF}njv0~p>brY#)ag}SuwknftQwhJ@L!V^B$82q`grvyHE(q$ z3AJo>p1Sy+F6!Xw6t(&uNA*}cLw`SCo9V%#GK@@TQ&`<`&nQ)LPbPU(|9kROa7`Dr z_}G=A3lrn)o*o0aM@TFHvL6?vB3f<_5N;n%f|}+@Z~aCPpB?Wefx+H z)CrFbSN%76)sA~P)Np?XyqQr!f)TVO&Zs~$Drmx}ppj9*8H@@vqXK56`rP-rvLAq( ze}6|IYE-}bv4*KpAKhP0TU5jP0qWUJehQ(m61>0LRHxcJ(EhH+(h!i3wNnco$X6X7 z^Q#RHj8Ze}m|9!c1#gznPDlt9gM`x`u|P__zk?swm{M8s{;06sD5o8llhdNI9w=p_ z81>Z;euwLBvFaw0g|%c*{!MjI{&j!tfj0}b_YqgH?;mjm3$tL+uvYPg2E%z*tHl8z z_VEnojYiteM%po;_jT+Mp#2){2l_yxeT}hu8e?|>eW+u10DZ*B`iz7>O7q#?)<+(P zN&c?>SgRt;8`zJ@&In6eq5H-kEWJ`5fP=*wUuKtBc>0Qxgn3$R1?#VVlZ zHCh4mf=1D0fG=ve1Zby5i-BI!Xc5rM8r1@6aZV?|sRTF)pyfINpyfIapyfISpyfIO zpyg@+&~hCB*kR~<8v6lV!S(^Ug6#ov<$43im1`G}E7wjSSFRmEu3R4*&MR8fQ;p~( z&@N3o0raXy$AMnc=onD+bq$XIviAfl3iPH%2Y}wvXg|d#48yT z1+-VAoj|-KLKT5rv9@6-xM*u5dNK;=O1K%wm9P%TmGEI8SHO)xu7DeWTmjbtxdN^N zas^xgaQ8%|YI$ zzs)Z*;%lZd<8}lb5wUt1>wK)W+tM)w@a7T{?nsvzYQ_`Ul%Z~UqD?L)2l$GJb81Ou zHn^egM9w#v|+oB*HiG2`ff%XSO1 zg(S;;>h!Y()L!L1SDU*|`x^mvI)eO4f^;}3mG`SBpX>HtW3df`SlT|W*}c4T5B~?A z8LpDr9^R(jpr&tc1>VcIkD~SJlkG#r4(z1w7^@!L(F4u(*^ZU!+^2KsQ&stN3pMZg z5Oq@Pp6`P9+jvh0$(`gFXM0qu7rWC$b@|^* zvTEI}GrcSXLo83^L^b2ZA_%Qs?0WG8Tm$Bt5G+a<$M|mPXT$11rMt3jKMc@~!A5}Y z47LH3GuR4H!Qe@N9t<`B=n=8`V`cAj?7D9H)`fda#Wku7C&8l#TR0G^ia2#@!OmQ? z_nMvgcyHaAUvb9e40y&kYWm~4h96yw^Q9&ftYqzEK8~_p8bTY?IWILI)g%^Iu5by* zY;wKh-)?`nCt`mTz>7CN`D&!7xjWh?oe-E&_$1d>b6*~uG+Hkt;OJbTUV1r3qt#`v zbhAcdj|Bq&3yjff?JND0#<+Zz2^ynT?doKWX-qUm?cFtqda3MJ3w!i}$`7bS z-(WYFheX5?bDRYW7X_*$M>XJFfbWj6($qAKtDo`e5f5Eaf8JZz=XTt661H7DkQ3`* z-YxL(1t5~!NltPx_UMcR=8aU1bRks7Cy)Da2SC2=Vt|&qivbE4;Bt#o$Y39U z&0x<#BkF`0y#Z2~!A^iy47LFjF*pU#n!!ncHVjSxv}JG{pqRlifOZUy0JLX-Ycfs= zgH=$hQU)sk$`~vI=)hnJKz>I?i-Gt$rn3m3GXva}ak{9|cghPMLErEgtA@#84NP*< zW`!+hdAKUO0gMklsfFcjrG>eIb#qA&9? z3P`XP*u3Q()GU4(@^M0b!Xh6dhR4$i6v~k#_Y#yr^L@pPub7bv%Rq1<`6^pCXVUs;`OahPKE~RBZifHEQ76&Wv~T0YuF3Hybe!Qd^m`7 z`*Fc3LDUC^pkX6}^%@uBE<~LSwdUOvTA?0!w~Ul}|J_!eKlAzVZ|~-(Ed$`Q04!8s z*L$mW?_DHcjOXTClYE|_*1b1^daEzrYg@?4G1))>=D^5j2ZpEcZ7O{v-Rb=+d)&=2 zjU1gMz8=jdPeCVxe*)q|ng?S4O-{;EEI|E8ArfCcUwn%L9f zJuPRw4g+f$Z{0tr8(&>T_wOTr~34pf# z?rt15haeKR!TTL7!KK2;!BT9?#177-7gXBEeW-u^$d5Y^=GGfN8AP9{?Vn7b`;^_# z54-f^8^*P(2nEdnSRtnH?MXWo$dsU2INrdGFO(gG6bN)ypEL}hE0ukyc~9Kd@-kgA z9sPl%xPs)Xw7tX7tJt~+h3{>JlZI8JqqS8{!Z6>cu0B)&9uFNVEJPW6;>xVsg>kml ziO+Mrd{UuF>gXZce`OpeA1+b-4(GRjg4^C9?Bs}$AG)7|`+0ow%qj!zz|k{rz+nF& zQ!P4N)ViEi%r@GYIoz71xG;y`QyA{=DfA`^bfS-X^KjRcPfN7-lnMR+tfW5W)2@_! zC*htx3=~$?cc_s^6cb=+m?a2b9eFL9I0!@Y@p%`1wgFkL;xB5<-6!kWB;W*#w}Pr+7{(^2>E@me4aN;O9C9_Dd*Obf=Ee6EqzU$HVcKRl5K#M8s-9u!wBcFTW5{~Sk zwtd+%?+JaF9Dt%iR>bm4vf9bNDfv}t`_1lQvs;%$ynM{W`A&^)mU0y3VF zif3MEsw%i>5XD<1pMrM+3TzX0;q-`jS`9nif!3*yUTT~4IQJ=(3A>oq%f&-*?Spe; zV#1V`X2D;v!W0%^SYEx_fSztk04UtOJgXgd3FMr59mhg4$xzoEpJQ$%ORf2OBn*k& zkf+RVN-#t_e$$Nlsv+OBZQci^=+cCcvm+jm_k1u|NSwtC!5o!!W`Yl{*s%ckfsy zXhP@JhaXeP8<t&6vihXME|;5(Vg@Z z9)J{vd_pZgQ2|@I zmFwET7ukx+VL?b}6pY9?TK7{K8tILn@{{_bb)d&V zxm|t#Q#({D|L2YLqI&-40?Y^vKVO4;BY!$olKNWwo{Qf(h5IUM>8YY-ucHV|MDN6J z)cBk=?GdxV1OAoEk7qed3!?t!Uv405{nM}Kiwy_WxL@1gcXRW9 zeUt-br`zM^+J&c&a-jdeis_~LtNxWs_<7yJ-=3$oYVhydqc|t-VWV=6Pr?)K19Oap z0N+(&znCMW-d-IHaRpZmVSLcS!bAn!a{;I^Yc=zLTRrTIO?vK(|264_*4+!KZ|~+j z%NZzv{X<GEpK%Hwr?ryd&qAZSMXjwXs+tG#VElE5Yvp8VT45j!hyO zK)Yfa3BTJN5vve%Mf8sy2M?C{@EYP%MVaBno`V^`n^tD{bS(ElnStF1-G9z{>;*Vp zoyK{9G4b8s{I16h%E4?%dx3FVlymWi(_;Kt> zd|?i7Uxt67asrpC-FCq3k~T6Y_M4Y};4DA*XlN#{PUP$8!D6u!zu15X*|AZ6D$3vM z-VDPsoo~r4K?+_TF2>i%iQRz>@BYt#SzNPG%v!XU)hj-tP21#asBi(ATtn4FI2X1N zC&uPl)T%kIsM@ec$Plt&(|DHv_f}(@Ey{`_F6_p&YLc&)(aI&Vf?yWL0w$iTmx1xa ztehsSdLg8V1J4j>pi3Nd2IE04aROV>$}rA$jYiHB+^C7*j9;(BFV{|ViC1tNHdgft zmpBQ;L{)nkldP-Vv*!4{GkEp}JU@X|NZ1qh@{?)wb#N;Pti7^ZYDCy zlBspC?p&cJvE8j=WJdW8(;M?>k|_e{qh?#WrV>omn;6?zVX;BwUpBLjva9QnpTYl!tbBo16Ie~( zU_*dJ5GJ1LXsjlUCUxzuJ+~xO4-TX}f~?qaXym1dpYm>{A3i92MWi_#OOn*G{LGAp z;u+cS>q2$XhBI@1Vp_2clCGw=Vlthw@M)b+{i9#Fu6>x;8f+HB^q%4$S9A0VlYicm z%!-UH4CsXG5ydxydg}XZ&TUEZdS1ypzXt(o;gUFO1J0^|gZ)$Kb#8@k=Bx-fO9PG< z_TMY-5SI19xk<(#q_s8%Cr_Dl_2enWoGI0_r(He6m^RHYj3sRifN4gN$1qCq>__+s ze2rqm7|dV%5uQb{THKV6m1I$SFQ-`&yEu#5m5%P*Y0C83ld7l9teG;S>zs*ILpTF7 zW5)dKk27uX#2(M0P~PzA6R(^ycw)^&p%U!1Wx^oZLM@`kBr@$OQ9_dIn+5IHix%lhG5Y`huYxqhCBhU zFnz(~lqA2EnpT?$nep6)XX%y+t>{leG?c`)wx*$CbLkeS{n3DL!w$pxG!Ucq6x~wU zkv=nhxY=sGl^Gk?l}<<3wl<6iYEy})3J+I%BWUN<^qg|-q$x9NxDn%jyFm8?PshW= zk!=iPA85?uyqeCPtFFFs+NAMQs;jTA);Uha(_h^ry$5-i57Kw3nldByPB+RO!i6?N z1T%adPf;9K;aiG_|CZr96W>{QnEh-#HF&PUGY8MySf}pPHpnd2;^`5a(49u0ApC(l z=e!nABIk9$oHQA6rLiUDR1#$-$3f}_(iL$$0C-Xyj|9FdjxPkB7{`-=Ss2bc6PSf! zJP(+akMUw)Ze_+RfVrg^Zvf`j1dbYY2uzJfYz3Yi$2)=fuLm-4J+8--s0SBz1D<(! zZp6cXHnf`4&BxO;T@>M3JPYuQ1g}!0W1dj&@#81O-mV~fOIiRsJI42MMa5qxR2Kff>NgX>&+q?5-+R^7)z#JA)z#J2J>34i z>(vvkQEdF|YdB+!H}H&cA{^%7aXie%xx)Bk0FgET;^QV1aFk?3%EmD^&ZDt_bqOB6 zXVma;f`f~`ova0HoG*svVR1W8)UP(GHJ$hpgqhS%`QcyFBBa5L^=E*BGq z*Xw0*26qX+$0J1805jn=81s5OEP->6$K&;K&J#s~%jY5pe?BI-WbvFEF8l}L*dK^d zd!pZP#kstY%$07$(SJa?Jzf$C&EZLLs0ENg?1jhWK?~yXUmRm$gC~<<2E9Pzqjngs z#AH8rr^I=L%gYSkAO8&Q_q*L-N!9pK44e%wXIzV$fR=mQ&Y#a01x)A9$GO+zMNQFu z6Jf9r5EM02%Ng0*iW2aHI)6x{r3pYY;G>$U-JEYAOFEPVtipV7~72v z{8?iyUu8`Ag@4b#<45@s{tZ9OzvhSdSNtG9z`x+1^UwHJV-Nqx*kaso+-EE|lyR?d zkFm_S+qg@uH44JNisNG9FXCtMllW3R%pc+p@(1_|9^v=%`}lIM_!r_E@ws@6H;et^ zQ}Kz|Cq5P*i4VnI@qu_xtmcpMH^m#`b+J>tCSDb&+$SR9A<^Rj5!bTP z^_9Bb)xXV_1FS@_ple71x0oeD0cII?;{mnD70B9ifQ1HSTQ18e5%EDj&{b`(JHYU$ zME7>F@1Pp%%kZoRX8i$m)ICRRJfJ3d28DNMmP8H6GO7f#H-iWdYO+`;$bhm83w>W( zCBPl^QP!XY!`=u&$|jTsl1$4T%_ojPI~<7+&!2EqrQUOTk?2A1Ae3+#m~C3Za-D7g z6|@&v{JI)c7B46_O08CV%fyxg>TT~`e`w;3z8m6Wl5$k8xW88cRTN+%Og#ghL1A-? z*9Cda0Nq>a3jek+rH^DeXr4~Z6z_7Y2A_K#n& zfMHbAD6k;2eW3vQE`gb#RrzKiAENr2f3UFW;1ol-KXAu&Ex@b+qVQmOHn7|;+*e1s=2=F|>GMgL~;8S-3p zDyeXw6*E&GHA|7os}C?(9*g1f?n%&ravMG>=fUl{g$5->oj zFi%5n2zO!^6hUHO@QKHVR|%huo04nNb#}9pCkNXG;knt3^RUG-K|Bn787&qNt%LJ}>{OU%rlBds(K2KKI{Xyx z#f&qNc@6!OyYp^Y+4koBG&~r80D3Z-phJUcsM`nmbZ}v^O^(?C+GJD%Zcyt}{=xsF zCZ|s2Z>hIa`}16tme$>TTTmyvEtlNga7mhgu~wI-=Vqgb#mc#Wl7=ka-T+^WP|%RJ zx;x!UM>aCebY`!K39@Ft+L7M7;BR~Y4G8M@$fvlY!tx@jgG4)_3Nm{9A2h#%CaaAH zOk|3gf)6UTt&zk^E>){C@+%t+`w7>KkeQ55wO#U(AR0?{i<_CcYI*k5kWZ_98I=OI zF{w?D9{XSw&~-shvz3WzYM3u*ST0)|rkEkJJg`B+u|eE~sZ!xK=a3oQ(&pC6RvuIo z8sQW*qBbm6H0U7%<`k~YyfmQg5szBT06ZNKa?4d0bj2*v;modW$c%c)%x;X@)A$6F zta!Jqsbut4WnDuiFfscc0pz3EcLUkbImgW@vuEyT67lZbe4=?S_xcJj(T%m-FekC9 zb*nA+bf~Q)G}R=iN-Qpy<&~K+15bu@Szf20vpk@e-NQ)ZKn-wu5L21aI)XVrJXpRg zF~ag%3?g{UJ}lrB)u?>+A+@}~N{O+y!vUIHgnqT4OyKiVL6AOKR=IfMfEsG$iKU0s zG^>b^cUx9stRz-FD)pjOLOEYq`MIq*njf?r;_9|jUj+gM;nrpvwh^-D*I2+`aZ^ay$oFclTpaksvT6Al8U~Pih8c6Al9*Xu7^^u;E%x=~r zM~VZ;k()XT74C3!({RQrA=oY)^?0BKnt2W_aKP!oF|oify9GRGT48h@G_A^Zm@rKM z92KP0amYdvknw{>hN{z~MVHVl43g&qxS3EI#zGPb#xdI(M637a1M0G*#~^%1{p$$Eh!hy2boM zxEbUhiqqbes%*PGpS+$R`7FR=38D_QJPDi}ATl+{#ZUd8&eQwFTMD%EWMCwtj+3xC zIarQ41D_4;ZWg*L3%puRbkP+hmM7Y2^(Eb_;6Jq&tULJTAG3!t%B9WgOvnszh;T8Ck2WttjYQNrI)H&s~tCG`m2 zudA&U1w2RXuNV`T0xuS>pjU2J{VV(O40U^D74OvWQe`^l$5W;1ZU^*$~u zF)JQiC}d^G{^q9zAvsoU>(XcB-B_LHVh5tVTe(4)!87SqXIVKN8iGXyfW2r3L%FkA zKDi65L-xUCVPbhhm#(Sza#Mnd#i!fi8f%l+Ls+yQ1U-KD0U*TIznZ%JL; zdniAqR` z!hNiPTQ}PF)e%CTM##EaID96$mv(S4d~OTwE;CJa|9M?`ntJoRHN2Oq>l5IwsQdc_ zhx7`>nN}Q}YZFbtH`o=<@t185`pm=%+ORrsyh^I;UEKEYCN&+i8j-By8JhH>QRyEAb(lCP+i5n>bvSJ z2n|mS@J{I1&(1k3x$C9J%m*f;J-Q)SS{b%)rkNGR!2On&qFb;18&*L0x!O!-zqGCucHyOLU7McL~61`rrk;LLDC5z}KrshCE{BqaW?W zD$y06BpNbq%PP?k`i&Y(%o6q4&@^|`N6dDs@X#W0{3A7gXgl}nkFl(4#Lkb^e}=Ym zo$%Y7(%}~5fF)E4^BufGMaQ|yA- zYTO0sVVF1Wgc;0CGNh0O9w|+)65*1?*fSTKi6{`GLekVpnz_X$G&fpYmvo4UN3^_I zOjA3`lvp~^7^gXqpXaO4 zMSbyp_M&s~{^p_(AEhoCJ&qqyn?{f1HWee*)s485O+*_@)jxa=wZn7ZTgZv0Wzc==<2_dCiC z6mjv{yU;N{8-X!2-DktD`s|{RT&-@oqJ%%9)?G24f1nb_v_mYTYD^cb+MzLD;s62F zCNVYg$`@f(;{Q^_pH!89$>9xZ#9unX+T8G$26g^bg^71?C#YmRYYUm9>aS|!Bb4Qa zpW{0zN)-ny+HxJ+@MPvL<5$cmf8~7Bmwn(P9=}+6aHFIqmX0BNB9|Fyg!Ei zs+9sR)cG+Ig0bgxiek>4&H#*M8r`a`(tub2x$-pol}_LgR;#nTyp`aPFaaB6^qiuI z`d}J?7lI~6HL4P*Xqw{V`iZ7yHE>)P`rJ5fGXIDAd|Y{UI*dJy7b!XH1I!n}zB-w% zO2=pMQ)2_QK>nW&_Yon zx;mcFA(lY@d_r%sEF zF^8d`s0KryOtZ`3&R}eqornadjRdC1nJEJ)IJT65bws8)rZIB>ZN*&L+Mpw3vhELc zWJ0lOGqJtgg~8E2ge~l&?PRtZH8IVlN&rlqI3xW@02HqFIwUT82jzS{u`v5%$|1%u zWv@p$81^r~HWXj&;jUZTgRo*!VYp2%R)yi>5#R}HzeOT9L9$IAn2(k z5s$L4(!;7vmwSvLw%1^3*t=udQt1sqNleVIW87p`n{3VVZ`4-^h#(NI z9az&=KTPW9pG&>bl8mX+XL4B*nQ#e5n(QyLzfrZ5N5rk6fFHC+UZh^1+&P*=KVPKW zQ%d-Es?(G#-l7Ii>B+xT3#W`rIA~ySIou(1Oh47wuaj6>tXlf@$(@Zchex5~hw>*l zl1M$Qr=$F_VOalMfq6f5V1CDRgqcgkfn;pRElqSJ8Jqo(l^~(imWx!!Htf5LWwy;! z5*)9ts!u3bw2tbf;45}zQYkSl`pGXL(_R*^GR!LK_=I$rs;v)=V(;}HBM~klQ|N5 z1SbCutbA4_%qU7tp}-8nN#vI|F?cSPSDldI)!&-=jqz)61hr0d??Ro~>TJoTfx$3iP3(|8j;zE`YGS~T7 zvP`Ad6mhreRg>K#7e<|?R6v^!339SXpoFc$$qT?-+Ib*$OG~`A8*g$rndQm#26yl2hH<(H|YbF#X0g5VI=g3CqS>PQ9m3qF)bcFHEr#X%Fze^5#6BIGA( z@0_vFiym_;_&haj?f`y+dT#Ey+1FEl8M2%{F6@HPbyOxz4p5%!hJ)y$>((dgT*w3p zx4c{>&#MQgd*`*o`-OSK3NXiX-<8nncUmBw@?niAy8bfJ@_EC8>l1kvXu;kG326or z91pI5)sr_=hF^piz7tM#oV_v5X7+|SELYDFq+j(udtDrsPZ|Li%^V?xMdTzQJq|g|Quom(gpOgbTtaT8m1VS)m7*4`15 zV2dC)y3BGrS>@akgy`qpl7s#56}J?nq(WerE8@!SG&|kSP|I$~^pkL8$Gob`f^weT zFmb^s&i!g*xHJ>tpLERi5>XPQ7kLH59~-@JmmcsQut9}4=Z)GVGSe*C0~-;`Va&w7 zode5TAw!*4U%>BGSJmgm-}NE5#oOyYWVTm*QeWUdwpSzeeyE~A`hR;@6CT*DKD{~UKjNhJ z?pCuFW~hRN(*Ko%*|l4}c}u>!1elK;Oyg;q_Z`eeqUq#+%}K4iei+e`4I-zdq+|8~pq*z*&SPWwZuBVvnX7f6`zKB91Rbr_|!+CLX>I>C|<(b|n ziE3Kj)*}th_Rb=7BCoizscBRma=&)IV+;ll{L_sSdZ-fYrmdzsLuvD;5vL`_aW! zc<)_&PIwSjbRR|9JVR)`Gw&uZLsVli#6F#tlq3I%ZrZg~cQ)-om)^Ex49REEi-O*` zW8lcafPYp);jLOQK>S=YplB4C-2hNJVyjoh_%NJl%uqxab!@;%XhL}_Hb8Jz%w4#G z6+QlU6){nb9^m!?1WlZ?d!cPW%v?N(dTfrBkK*9OThOEh43Ap7rhjNu7~*J)1o1FB z4k1(oiv`YJQP3CkP+M(p4Sdz`Y=p7xW>$li=~{IAqlXzD5(q6ebVSDy&O-ut?0Rb4 zfPfnkz>9)6M^YHnGhqZov?pA~VAX4g++inI2u<&FakPNbNq?7&sgo`?pmPUMhNM(kw3bvzL6BtvvApy0cP(1aS4OaNT z5l9w5>&p?*YYJe^(4D|#QZSdginK!CRdAdA;c@{bFpvxZ5Q-o8?93WCb^>la`54Y1 zZPbe6$n22VY>*j^2AMOp-OwWy)dUPBe2OvTT$7@q5wI{6L)Q4)IO=oRVlYHQl$qRd zkf>=(lKE}w#wCSCrzg-DXM^}Byw&z4CIA1KR-wAyQHBL&!X4A;Jb^A|FwF=)Olu8f z1k~X>a$SCAKB_8~W@cn2Fl+^Mq)dOEp;Kd)cH~)V@zPN|Q+>Gfg8T{a65)hWSOEbe z9j=lSfbcN;^*5R7x3Yic>J+kNG8GChTA%9toz|y?z-hODyo_jCKUx%;|dc_;EPbTT}*uhA- z;m69g0aB7zvqDI~Kd7C^^9h?wB3d=(;I%Af3 zYRLUVMV_e+-Zxw=i=?`MD8wsZkf5GjVe_`CdPO?k zm#i3y_oFLD@FI;V(wHK`s6H!ZD)T{G9bJ*?5+NB>e~Sza2Tk)@1aNUe`863CdpV%P z8d?VE8x1W5bVNgo0e!2XMSz?V^?;lbC%%Z4I1cEjruz|)Q?>=rF~U)WTafr1iSY=%CKs0mv!Q2*@e18PHcc7kexFkh=4sEB(Pua=I>S-pR}bVMd#oMa zO{>@7J#JN3yjz|u@L~s$LQMLs2>>&G%}B2?BZwVeo*MR8C&H{As2U%8lWM&4@hhVrMs`@O=D6j5&w!QjvjYkAE2k6YU$BNXc zwO&9?t5>RDpH2caZdH5L{3JmwPqxRq&zc;S^pw|?7?N$lWr+It8Or?Tna-lE!w3Br zK=rk>*o$CZD2KK1IYQT%`4J8Ak47J%&pG?bFbS&tteB0Xeu8$o)j;E(i3f zh86?buc1Y)x%I8N$5FOf=e7X)j3DzM7v3;mKt`!y(BB^rD*uJ9IjK63L($kJUYQzQ zpv%}DNT_RG$jM6W#a6-_qpMtStze6>-rDzY=+?T1Fyps9gwSq|DIf!3Y(Q}!!@wK zhpp5Jr?yR0o7s!q<5Bz9e_dD{WOn9U2$?xojtr2ojGkADC?H3wZ#Lw17^zP)nLgVT z^p+!Q&DlD(K;?NWlM$-&`FuV?je5Rq)`&9-!Ry4as8e)=y6gGOg5jqt!)cLoO4?fM z@Q}Lv`P_`**!b##XBHo>etEuoLOuot%N%AP!h34e)_mTiW^K(@@BE|ErMS#j7i=8h zS{?&%;!T*rI2Ry%B!*uR10IM055|CpV!*==kfx?=>k!uQSgcR*H(cg9=zv0W8E$kT zWQ5)(=Yk`UgPw#70hok@iw0QVtH9x--W4Ex=f%h)N^hQU!Tx>5>^@}H4#j{202;Lx zHUrwGp?!eD+cmfs;L94?189eangG3`p;HK4aO^e~_%4XpsQ zTSLnMy`!OJfM`1hPaP0#J>gygdQU@(0MUjO?XL$&J6UF*Xl6F;aB;*5h&I2tm<;G6 z4YdGr#5(eM3_8>b9RTDA*bK-Ka33H?z`cMR0rvoM1Z)EIE<2wp*#*#%a3>%~!X1FL zgmxn!N5CzB904~2as=E6$PsWoptsb@&8JFA&QfETKV0%7FPO^%Li$l-RBP2k|LTP! zwfFxuSjBJ2;~iCpE%jNew1eU!FU3!gbDuL`$>k{?aIQ5dggjI0WEa0uBH;kANlsT6vnA)ur2QT#9*Mdw!1-U1&Zu%S&ys;Q9(4M7x&qqm(J5yuMh!by%vY*& z4!86FS7_r6AAH8)lKymV0BYz0uKXmK@YxfBJSc+DMs1iZx}-yW0{~jGh7@6ogW&eg zUCd69@v2})|F{eEt^wt*R@dx^@C%gtm9FLmh+JWzg=c+%>i0PP4kfh=5Tgxvtpo`53&IuNi1G^GSQ0iYuR zs{xb|@GyW*RhI)=0jQi%%K^}}T6-CQN&Y zfjQkaq62+3_`NBkzNDO1?sgpg@`ujf{B{ccvI+5cREo0~>@4Hyl|ZjV`796kY$M>M zR1&=;y^?WIcIv%b@(zP3u4@`_XDO~`AJb{Tx&^D=@2A>)P{IGM27hp6!gF*JMi0AJ zRy1t*Ad`#NJE}MLUd5kN9X>3e#IO$waZ6ydiNc7DO z#h(`9m}cFlm$vT}@Eg_GekIT~QY#UVA%Vk<3c9FAgALh`=%PCAuO2lO`U;%ejtIIx zg3DkFaM42I)}5OOB@tpwP!{K^p6Ql*Fh&*!9l+52yI|blS`?#8%fPwiTD4_=_sLTc z?zhB9eV(TUL7DiGwNQsvadhMiOiJkrb_E@ZyD9oef|Ul{`obQHKrQG%0mp)Htzo*c z8Vt>mQynsOd2?wI0x=8gUFLSdedPJpyQT+y(V(S|^xRIB8`Y!D8L4Tcc~CN(@l&W7 z;e<5xMsrcyo}{T3Yj5b|!H&2-X(Q@fL%(+k>Ocn+samCe)+M2#quv7{c4z;yW5Y$C zb>Z>Lpqsc{7l%8Kcd2_nSA>9-A(lW?e(^@1TnqvQ*D)k?I!b{sE~n8Kokofx|3Nka zN1!k+^x>eRlTZX=Z{#9k$MMuK-K~RvKx#rqYIMI4gL=~OJ%FG?5*$p??_XdnaA__| zj0;_sXfM*b3v5Z?rpPxr4h?Y%J&E)dY5;qM42#Z}xj7h12w}TA=a~I*w-Sf4*xa=T zF=WSmL@hhrON=@ph(!F;aZ@Pzha=AG5A>Da#qPV%V(XGe)td*};}DR-gd~qfeydzx zmdcKnYX&+x=$fvPKd3%m=Cpa7BHC03M9~ehx=ua5D5shbbA zN&PqGG9wxU+G!U1aCWx#P|utf^kKgbnhi}vF1=ui!1G_~)S-?SZ+0#Npn+%P%S{H3 z=<0OStHccSpgx1?@COI?M5}{)>?{Y@QWt-{tlhsjG!zqx4t|4}&X#+IdbHXoR*;`8o_m~it-U^b*rn_%A2&AEhfKX!}Teenby2 z+k~Bqm@}f$a;2ev-a~qoORr2CFz70@koK04N$Vt<1$r3p7mZ*gU8Evwd1M%WLEU;}GQU_IITFA-@mqRVd|QC`sBb%Tp_6%mC5}OMnHBJeYWmM|qbq1S zrXd85LvI^?rIXHqZFu(EHbc|M3Q!zg_m&sS>MmS~1v6|6U`F7s`|Q-AFj6Q9XCBMA zz&xkA)@xfq#X$>`qY{s1xA{9A3~09j3joCTp;iXn>vOa_mYC~~&hzSZ91H8uN84e? zk$>zQQQuLGITk3x&3vY1CJD)e;m0U0*%85ZbP2wY4c+Ru*TGu#RZkzQ0mGb@0{B7a zw9EwjOv@m#qNDnurAvPAKoZ*SwagiGbt@+rH^537P-}VD;kR@+yzc+qBBFfbyFC6{ z!=dkdoWH8R`+jtOiiHb5IKfY`besum!#Wodad=X2m3rb2MLbO{{vlGOWrL;K3{gwO z7LF!jo|lM54M9%2uhADCH4bLri@@T;H%?O*|5(zy?KE64K(~VhOk=DFO-pFK z+^L@au|3-K?vGDEws}A0V{MH5GzXVk5`HdCd^dUz%4_fJfZJ39e=bUY3pGRAevamN z>~AP1{PTIPRRnDNIqRa|aQDgi2`%OUOtvntlbkqO9jWvIDy`+ER5KZgY@PA8VM2ch z`5Dx{CMdKEAm3;x`{fRf0oZ(ewAi;_CH`8>cdKr{K1+!MzjolSsifb&q{Pp^m7uE& ze$V3k9o6&1HvGQ#_Y+%3;Q~Mp3zFL&2}is)tbX-$qzp=-Hgu~#R_G7;gtl0+4L(sF zL?#-+p^2n|#G^#Toy<=DpV)3E?Q`1b-$8*9xv82n&CeJQd@*am*f1#906%c217a_@ zZa7(NQpM;DUCZYu%UaVo=TO3H8O(p?p0bW`e}jBHbXiPiuL_NLnAUm zCR|an0PEZ7(-^QuagW>^d4cmPKQ1eh_Q+ik{EG%9N&B>yN6iFe7ep!qUmV#g_;6fs zizFEQjF_y=}ooHmAkh{sNcQB3lgp0~Oie;)7D@H`S7qxL<9>61&+EAvm(u z&3kda>7bhr;7JHHX!f{sNI!Xtbns#_H<2JCy}Tm{GT+NzDE-{Pj^KP9bS>xl$CjAA zT=v6qSI#Z^@g=3n74H`r@8hZIPR=-|kC3wnXI%XvOMLu7o)OvSz?_7~5wtwjE?&hjDiF=5t>M+wTm{kO{+oyc+vt!55I5)XSb}1d=kftc~!(^^0wjb#PN*W?q&&t0-*tfZ!M!c z{cM!kna&!GfE$yT3IrMQ5$A>&s7O|kb2khsPJu71a31oywPz14(-;2e*B%8_=yW}h z=InIjUnbAz|B381c`1K80*~T6p0TMP{&^N&{Wg|9#Cymf1#yf>%0XV9OCE#Yk2YZe zbr7U4|DkOZh+u%DR7WF=68OX}-L)$ehi))13BE;9{~5eA@*9fxdExEp6ApPelAXx& z&~pybDfo4?AQ?_Ag)VvM?2=#M5@_F6PtAan34!IE}L3j`sMi|bCXH6Z+XRDW{wnv=g(9{P-eX&|J zt*fv3bsRk5PLFDwHY)5xhjDq2FwI9V#!p=9eddq;3&&qKyEsdo0XSu@$>+DVhf)=ru|XGR^H*N(A`C5#PrF*XVh zYtPvG_?F;1mD2d*c-BPWkr&lPhV|g75h-~GH&L&T^pU)M#~!T`5b_YnM^;u$x@Pvo z+G*F;O`6$d?)Vu4zz2CQcjRa{o;PgjfB|gov}w~AJ#+Ct0JaDO{oPKTTBc#A8B^Xk z7S!_vRG*69T8iNyFv&ulvOBzj=T49sdRKtrW9KM#g9Gz@`V%c%@I& z7jD{>3;P$?(9UdeahK06438iG$d1=cOlnGHY!99f@$BD}RlqM1VtvO*O@I$_*O!^i z$(yzX`1M9)eI|Ep!q5IDxp~W`)g5@q<-sVKuck+2IX{tpq%C9DLeLsKwInfw|1lD% z;BB%piy4AgjLpVVhv#9Wi|`zYT!8HC!O`qFXJn5CF0(kYu!08%5T{8m7GluktWZXIk65}d?pb@VJse%Qj-_p zi8VP4m~bROCi3S;mQ?c6@L5bN&y?YG#r}kJGvKSE@DafDw-{}qHr3;a zwUdVSW;_e=+=7Sx218AVZV{d{>276E?Aw669S?QPXb>)rJl&bM&jSX3GaxpVT#P4H zatULbc6a7&3?Gmvu(=~m;-H7%W)0_=lQE%nrmrk=UR5-+qD;?rb4D!lva-lsvCR5t z=CoMmnzG2JvCO7u=ImJJ@v=y#?oqZ@C(SlvB4v`Xx~voG#-BD;5xWP^i#*kxcS@$b zjsG)G^oZuk@;{Utq>D`bBRVhg&mO!(JN)w~W^fHM*Wp=@XCt1?c(&ka#Ipm>&hq~U DjFWy0 diff --git a/codecs/webp/enc/README.md b/codecs/webp/enc/README.md index fde82230..cb6e3456 100644 --- a/codecs/webp/enc/README.md +++ b/codecs/webp/enc/README.md @@ -20,7 +20,3 @@ Returns the version of libwebp as a number. va.b.c is encoded as 0x0a0b0c ### `UInt8Array encode(uint8_t* image_buffer, int image_width, int image_height, WebPConfig config)` Encodes the given image with given dimension to WebP. - -### `void free_result()` - -Frees the last result created by `encode()`. diff --git a/codecs/webp/enc/example.html b/codecs/webp/enc/example.html index 7ee96d78..d868a9de 100644 --- a/codecs/webp/enc/example.html +++ b/codecs/webp/enc/example.html @@ -52,8 +52,6 @@ console.log('size', result.length); const blob = new Blob([result], {type: 'image/webp'}); - module.free_result(); - const blobURL = URL.createObjectURL(blob); const img = document.createElement('img'); img.src = blobURL; diff --git a/codecs/webp/enc/webp_enc.cpp b/codecs/webp/enc/webp_enc.cpp index 0cc4afef..2b9a812b 100644 --- a/codecs/webp/enc/webp_enc.cpp +++ b/codecs/webp/enc/webp_enc.cpp @@ -11,7 +11,7 @@ int version() { return WebPGetEncoderVersion(); } -uint8_t* last_result; +const val Uint8Array = val::global("Uint8Array"); val encode(std::string img, int width, int height, WebPConfig config) { uint8_t* img_in = (uint8_t*)img.c_str(); @@ -42,13 +42,9 @@ val encode(std::string img, int width, int height, WebPConfig config) { throw std::runtime_error("Encode failed"); } - last_result = wrt.mem; - - return val(typed_memory_view(wrt.size, wrt.mem)); -} - -void free_result() { - WebPFree(last_result); + val js_result = Uint8Array.new_(typed_memory_view(wrt.size, wrt.mem)); + WebPFree(wrt.mem); + return js_result; } EMSCRIPTEN_BINDINGS(my_module) { @@ -89,5 +85,4 @@ EMSCRIPTEN_BINDINGS(my_module) { function("version", &version); function("encode", &encode); - function("free_result", &free_result); } diff --git a/codecs/webp/enc/webp_enc.d.ts b/codecs/webp/enc/webp_enc.d.ts index 02e450a9..2653daa8 100644 --- a/codecs/webp/enc/webp_enc.d.ts +++ b/codecs/webp/enc/webp_enc.d.ts @@ -1,9 +1,7 @@ -import { EncodeOptions } from '../../src/codecs/webp/encoder-meta'; +import { EncodeOptions } from '../../../src/codecs/webp/encoder-meta'; interface WebPModule extends EmscriptenWasm.Module { encode(data: BufferSource, width: number, height: number, options: EncodeOptions): Uint8Array; - free_result(): void; } - export default function(opts: EmscriptenWasm.ModuleOpts): WebPModule; diff --git a/codecs/webp/enc/webp_enc.js b/codecs/webp/enc/webp_enc.js index 863e8bc6..0c3768ed 100644 --- a/codecs/webp/enc/webp_enc.js +++ b/codecs/webp/enc/webp_enc.js @@ -6,11 +6,11 @@ var webp_enc = (function() { function(webp_enc) { webp_enc = webp_enc || {}; -var d;d||(d=typeof webp_enc !== 'undefined' ? webp_enc : {});var u={},w;for(w in d)d.hasOwnProperty(w)&&(u[w]=d[w]);var x=!1,y=!1,aa=!1,ba=!1;x="object"===typeof window;y="function"===typeof importScripts;aa="object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node;ba=!x&&!aa&&!y;var z="",B,C,ca,da; +var d;d||(d=typeof webp_enc !== 'undefined' ? webp_enc : {});var u={},v;for(v in d)d.hasOwnProperty(v)&&(u[v]=d[v]);var x=!1,y=!1,aa=!1,ba=!1;x="object"===typeof window;y="function"===typeof importScripts;aa="object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node;ba=!x&&!aa&&!y;var z="",B,C,ca,da; if(aa)z=y?require("path").dirname(z)+"/":__dirname+"/",B=function(a,b){ca||(ca=require("fs"));da||(da=require("path"));a=da.normalize(a);return ca.readFileSync(a,b?null:"utf8")},C=function(a){a=B(a,!0);a.buffer||(a=new Uint8Array(a));a.buffer||D("Assertion failed: undefined");return a},1=g){var n=a.charCodeAt(++f);g=65536+((g&1023)<<10)|n&1023}if(127>=g){if(b>=c)break;e[b++]=g}else{if(2047>=g){if(b+1>=c)break;e[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;e[b++]=224|g>>12}else{if(b+3>=c)break;e[b++]=240|g>>18;e[b++]=128|g>>12&63}e[b++]=128|g>>6&63}e[b++]=128|g&63}}e[b]=0}}var ka="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; function la(a){var b;for(b=a>>1;J[b];)++b;b<<=1;if(32>1];if(0==e)return c;++b;c+=String.fromCharCode(e)}}function ma(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var e=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;J[b>>1]=0;return b-e}function na(a){return 2*a.length} function oa(a){for(var b=0,c="";;){var e=K[a+4*b>>2];if(0==e)return c;++b;65536<=e?(e-=65536,c+=String.fromCharCode(55296|e>>10,56320|e&1023)):c+=String.fromCharCode(e)}}function pa(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var e=b;c=e+c-4;for(var f=0;f=g){var n=a.charCodeAt(++f);g=65536+((g&1023)<<10)|n&1023}K[b>>2]=g;b+=4;if(b+4>c)break}K[b>>2]=0;return b-e} @@ -30,31 +30,32 @@ function ab(a,b,c){switch(b){case 0:return function(e){return this.fromWireType( function eb(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}function fb(a,b){switch(b){case 2:return function(c){return this.fromWireType(ta[c>>2])};case 3:return function(c){return this.fromWireType(ua[c>>3])};default:throw new TypeError("Unknown float type: "+a);}} function gb(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Pa(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}function hb(a,b){for(var c=[],e=0;e>2)+e]);return c} function Y(a,b){a=T(a);var c=d["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return sa[e>>1]};case 2:return c?function(e){return K[e>>2]}:function(e){return M[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}Ra=d.InternalError=Qa("InternalError"); -for(var lb=Array(256),mb=0;256>mb;++mb)lb[mb]=String.fromCharCode(mb);Ua=lb;Va=d.BindingError=Qa("BindingError");d.count_emval_handles=function(){for(var a=0,b=5;b>g])},O:null})},r:function(a,b){b=T(b);S(a,{name:b,fromWireType:function(c){var e=V[c].value;Xa(c);return e},toWireType:function(c,e){return Ya(e)},argPackAdvance:8,readValueFromPointer:Ma,O:null})},o:function(a,b,c,e){function f(){}c=Ta(c);b=T(b);f.values={};S(a,{name:b,constructor:f,fromWireType:function(g){return this.constructor.values[g]},toWireType:function(g,n){return n.value},argPackAdvance:8,readValueFromPointer:ab(b,c,e),O:null});$a(b,f)},n:function(a,b,c){var e= -db(a,"enum");b=T(b);a=e.constructor;e=Object.create(e.constructor.prototype,{value:{value:c},constructor:{value:Pa(e.name+"_"+b,function(){})}});a.values[c]=e;a[b]=e},g:function(a,b,c){c=Ta(c);b=T(b);S(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+eb(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:fb(b,c),O:null})},d:function(a,b,c,e,f,g){var n=hb(b,c);a=T(a);f=Y(e,f); -$a(a,function(){jb("Cannot call "+a+" due to unbound types",n)},b-1);Sa([],n,function(h){var k=[h[0],null].concat(h.slice(1)),l=h=a,m=f,p=k.length;2>p&&U("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var r=null!==k[1]&&!1,v=!1,q=1;q>1]}:function(e){return sa[e>>1]};case 2:return c?function(e){return K[e>>2]}:function(e){return M[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var lb={}; +function mb(){return"object"===typeof globalThis?globalThis:Function("return this")()}var nb={};Ra=d.InternalError=Qa("InternalError");for(var ob=Array(256),pb=0;256>pb;++pb)ob[pb]=String.fromCharCode(pb);Ua=ob;Va=d.BindingError=Qa("BindingError");d.count_emval_handles=function(){for(var a=0,b=5;b>g])},O:null})},s:function(a,b){b=T(b);S(a,{name:b,fromWireType:function(c){var e=V[c].value;Xa(c);return e},toWireType:function(c,e){return Ya(e)},argPackAdvance:8,readValueFromPointer:Ma,O:null})},n:function(a,b,c,e){function f(){}c=Ta(c);b=T(b);f.values={};S(a,{name:b,constructor:f,fromWireType:function(g){return this.constructor.values[g]},toWireType:function(g,n){return n.value},argPackAdvance:8,readValueFromPointer:ab(b,c,e),O:null});$a(b,f)},m:function(a,b,c){var e= +db(a,"enum");b=T(b);a=e.constructor;e=Object.create(e.constructor.prototype,{value:{value:c},constructor:{value:Pa(e.name+"_"+b,function(){})}});a.values[c]=e;a[b]=e},f:function(a,b,c){c=Ta(c);b=T(b);S(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+eb(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:fb(b,c),O:null})},h:function(a,b,c,e,f,g){var n=hb(b,c);a=T(a);f=Y(e,f); +$a(a,function(){jb("Cannot call "+a+" due to unbound types",n)},b-1);Sa([],n,function(h){var k=[h[0],null].concat(h.slice(1)),l=h=a,m=f,p=k.length;2>p&&U("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var r=null!==k[1]&&!1,w=!1,q=1;q>>h}}var k=-1!=b.indexOf("unsigned");S(a,{name:b,fromWireType:g,toWireType:function(l,m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+eb(m)+'" to '+this.name);if(mf)throw new TypeError('Passing a number "'+eb(m)+'" from JS side to C/C++ side to an argument of type "'+ -b+'", which is outside the valid range ['+e+", "+f+"]!");return k?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:kb(b,n,0!==e),O:null})},a:function(a,b,c){function e(g){g>>=2;var n=M;return new f(L,n[g+1],n[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=T(c);S(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{aa:!0})},h:function(a,b){b=T(b);var c="std::string"===b;S(a,{name:b,fromWireType:function(e){var f=M[e>>2];if(c){var g= -I[e+4+f],n=0;0!=g&&(n=g,I[e+4+f]=0);var h=e+4;for(g=0;g<=f;++g){var k=e+4+g;if(0==I[k]){if(h){for(var l=I,m=h+NaN,p=h;l[p]&&!(p>=m);)++p;if(16r?m+=String.fromCharCode(r):(r-=65536,m+=String.fromCharCode(55296|r>>10,56320|r&1023))}}else m+=String.fromCharCode(r)}h= +b+'", which is outside the valid range ['+e+", "+f+"]!");return k?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:kb(b,n,0!==e),O:null})},a:function(a,b,c){function e(g){g>>=2;var n=M;return new f(L,n[g+1],n[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=T(c);S(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{aa:!0})},g:function(a,b){b=T(b);var c="std::string"===b;S(a,{name:b,fromWireType:function(e){var f=M[e>>2];if(c){var g= +I[e+4+f],n=0;0!=g&&(n=g,I[e+4+f]=0);var h=e+4;for(g=0;g<=f;++g){var k=e+4+g;if(0==I[k]){if(h){for(var l=I,m=h+NaN,p=h;l[p]&&!(p>=m);)++p;if(16r?m+=String.fromCharCode(r):(r-=65536,m+=String.fromCharCode(55296|r>>10,56320|r&1023))}}else m+=String.fromCharCode(r)}h= m}}else h="";if(void 0===t)var t=h;else t+=String.fromCharCode(0),t+=h;h=k+1}}0!=n&&(I[e+4+f]=n)}else{t=Array(f);for(g=0;g=p&&(p=65536+((p&1023)<<10)|f.charCodeAt(++m)&1023);127>=p?++l:l=2047>=p?l+2:65535>=p?l+3:l+4}return l}:function(){return f.length})(),h=nb(4+n+1);M[h>>2]=n;if(c&&g)ja(f,h+4,n+1);else if(g)for(g=0;g>2],m=n(),p=m[k+4+l*b>>h],r=0;0!=p&&(r=p,m[k+4+l*b>>h]=0);var v=k+4;for(p=0;p<=l;++p){var q=k+4+p*b;if(0==m[q>>h]){v=e(v);if(void 0===t)var t=v;else t+=String.fromCharCode(0),t+=v;v=q+b}}0!=r&&(m[k+4+l*b>>h]=r);X(k);return t},toWireType:function(k,l){"string"!==typeof l&&U("Cannot pass non-string to C++ string type "+c);var m=g(l),p=nb(4+m+b);M[p>> -2]=m>>h;f(l,p+4,m+b);null!==k&&k.push(X,p);return p},argPackAdvance:8,readValueFromPointer:Ma,O:function(k){X(k)}})},m:function(a,b,c,e,f,g){Ka[a]={name:T(b),ba:Y(c,e),da:Y(f,g),U:[]}},e:function(a,b,c,e,f,g,n,h,k,l){Ka[a].U.push({W:T(b),$:c,Y:Y(e,f),Z:g,fa:n,ea:Y(h,k),ga:l})},t:function(a,b){b=T(b);S(a,{ha:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},u:Xa,k:function(a){4=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>16);va(G.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},memory:G,table:fa},pb=function(){function a(f){d.asm=f.exports;N--;d.monitorRunDependencies&&d.monitorRunDependencies(N);0==N&&(null!==Da&&(clearInterval(Da), -Da=null),O&&(f=O,O=null,f()))}function b(f){a(f.instance)}function c(f){return Ha().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){E("failed to asynchronously prepare wasm: "+g);D(g)})}var e={a:ob};N++;d.monitorRunDependencies&&d.monitorRunDependencies(N);if(d.instantiateWasm)try{return d.instantiateWasm(e,a)}catch(f){return E("Module.instantiateWasm callback failed with error: "+f),!1}(function(){if(F||"function"!==typeof WebAssembly.instantiateStreaming||Ea()||"function"!== -typeof fetch)return c(b);fetch(P,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){E("wasm streaming compile failed: "+g);E("falling back to ArrayBuffer instantiation");c(b)})})})();return{}}();d.asm=pb; -var Ia=d.___wasm_call_ctors=function(){return(Ia=d.___wasm_call_ctors=d.asm.v).apply(null,arguments)},nb=d._malloc=function(){return(nb=d._malloc=d.asm.w).apply(null,arguments)},X=d._free=function(){return(X=d._free=d.asm.x).apply(null,arguments)},cb=d.___getTypeName=function(){return(cb=d.___getTypeName=d.asm.y).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.z).apply(null,arguments)}; -d.dynCall_i=function(){return(d.dynCall_i=d.asm.A).apply(null,arguments)};d.dynCall_vi=function(){return(d.dynCall_vi=d.asm.B).apply(null,arguments)};d.dynCall_iii=function(){return(d.dynCall_iii=d.asm.C).apply(null,arguments)};d.dynCall_viii=function(){return(d.dynCall_viii=d.asm.D).apply(null,arguments)};d.dynCall_fii=function(){return(d.dynCall_fii=d.asm.E).apply(null,arguments)};d.dynCall_viif=function(){return(d.dynCall_viif=d.asm.F).apply(null,arguments)}; -d.dynCall_ii=function(){return(d.dynCall_ii=d.asm.G).apply(null,arguments)};d.dynCall_iiiiii=function(){return(d.dynCall_iiiiii=d.asm.H).apply(null,arguments)};d.dynCall_viiiii=function(){return(d.dynCall_viiiii=d.asm.I).apply(null,arguments)};d.dynCall_v=function(){return(d.dynCall_v=d.asm.J).apply(null,arguments)};d.dynCall_iiii=function(){return(d.dynCall_iiii=d.asm.K).apply(null,arguments)};d.dynCall_viiiiiiiii=function(){return(d.dynCall_viiiiiiiii=d.asm.L).apply(null,arguments)}; -d.dynCall_viiii=function(){return(d.dynCall_viiii=d.asm.M).apply(null,arguments)};d.dynCall_viiiiii=function(){return(d.dynCall_viiiiii=d.asm.N).apply(null,arguments)};d.asm=pb;var Z;d.then=function(a){if(Z)a(d);else{var b=d.onRuntimeInitialized;d.onRuntimeInitialized=function(){b&&b();a(d)}}return d};O=function qb(){Z||rb();Z||(O=qb)}; -function rb(){function a(){if(!Z&&(Z=!0,d.calledRun=!0,!ha)){xa(za);xa(Aa);if(d.onRuntimeInitialized)d.onRuntimeInitialized();if(d.postRun)for("function"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;){var b=d.postRun.shift();Ba.unshift(b)}xa(Ba)}}if(!(0=p&&(p=65536+((p&1023)<<10)|f.charCodeAt(++m)&1023);127>=p?++l:l=2047>=p?l+2:65535>=p?l+3:l+4}return l}:function(){return f.length})(),h=qb(4+n+1);M[h>>2]=n;if(c&&g)ja(f,h+4,n+1);else if(g)for(g=0;g>2],m=n(),p=m[k+4+l*b>>h],r=0;0!=p&&(r=p,m[k+4+l*b>>h]=0);var w=k+4;for(p=0;p<=l;++p){var q=k+4+p*b;if(0==m[q>>h]){w=e(w);if(void 0===t)var t=w;else t+=String.fromCharCode(0),t+=w;w=q+b}}0!=r&&(m[k+4+l*b>>h]=r);X(k);return t},toWireType:function(k,l){"string"!==typeof l&&U("Cannot pass non-string to C++ string type "+c);var m=g(l),p=qb(4+m+b);M[p>> +2]=m>>h;f(l,p+4,m+b);null!==k&&k.push(X,p);return p},argPackAdvance:8,readValueFromPointer:Ma,O:function(k){X(k)}})},l:function(a,b,c,e,f,g){Ka[a]={name:T(b),ba:Y(c,e),da:Y(f,g),U:[]}},d:function(a,b,c,e,f,g,n,h,k,l){Ka[a].U.push({W:T(b),$:c,Y:Y(e,f),Z:g,fa:n,ea:Y(h,k),ga:l})},u:function(a,b){b=T(b);S(a,{ha:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},p:Xa,r:function(a){if(0===a)return Ya(mb());var b=lb[a];a=void 0===b?T(a):b;return Ya(mb()[a])},v:function(a){4< +a&&(V[a].S+=1)},o:function(a,b,c,e){a||U("Cannot use deleted val. handle = "+a);a=V[a].value;var f=nb[b];if(!f){f="";for(var g=0;g> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType", +"Module","__emval_register",n+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(db,d,Ya);nb[b]=f}return f(a,c,e)},q:function(a,b,c){I.copyWithin(a,b,b+c)},c:function(a){var b=I.length;if(2147418112=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>16);va(G.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},memory:G,table:fa}, +sb=function(){function a(f){d.asm=f.exports;N--;d.monitorRunDependencies&&d.monitorRunDependencies(N);0==N&&(null!==Da&&(clearInterval(Da),Da=null),O&&(f=O,O=null,f()))}function b(f){a(f.instance)}function c(f){return Ha().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){E("failed to asynchronously prepare wasm: "+g);D(g)})}var e={a:rb};N++;d.monitorRunDependencies&&d.monitorRunDependencies(N);if(d.instantiateWasm)try{return d.instantiateWasm(e,a)}catch(f){return E("Module.instantiateWasm callback failed with error: "+ +f),!1}(function(){if(F||"function"!==typeof WebAssembly.instantiateStreaming||Ea()||"function"!==typeof fetch)return c(b);fetch(P,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){E("wasm streaming compile failed: "+g);E("falling back to ArrayBuffer instantiation");c(b)})})})();return{}}();d.asm=sb; +var Ia=d.___wasm_call_ctors=function(){return(Ia=d.___wasm_call_ctors=d.asm.w).apply(null,arguments)},qb=d._malloc=function(){return(qb=d._malloc=d.asm.x).apply(null,arguments)},X=d._free=function(){return(X=d._free=d.asm.y).apply(null,arguments)},cb=d.___getTypeName=function(){return(cb=d.___getTypeName=d.asm.z).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.A).apply(null,arguments)}; +d.dynCall_vi=function(){return(d.dynCall_vi=d.asm.B).apply(null,arguments)};d.dynCall_i=function(){return(d.dynCall_i=d.asm.C).apply(null,arguments)};d.dynCall_iii=function(){return(d.dynCall_iii=d.asm.D).apply(null,arguments)};d.dynCall_viii=function(){return(d.dynCall_viii=d.asm.E).apply(null,arguments)};d.dynCall_fii=function(){return(d.dynCall_fii=d.asm.F).apply(null,arguments)};d.dynCall_viif=function(){return(d.dynCall_viif=d.asm.G).apply(null,arguments)}; +d.dynCall_ii=function(){return(d.dynCall_ii=d.asm.H).apply(null,arguments)};d.dynCall_iiiiii=function(){return(d.dynCall_iiiiii=d.asm.I).apply(null,arguments)};d.dynCall_viiiii=function(){return(d.dynCall_viiiii=d.asm.J).apply(null,arguments)};d.dynCall_iiii=function(){return(d.dynCall_iiii=d.asm.K).apply(null,arguments)};d.dynCall_viiiiiiiii=function(){return(d.dynCall_viiiiiiiii=d.asm.L).apply(null,arguments)};d.dynCall_viiii=function(){return(d.dynCall_viiii=d.asm.M).apply(null,arguments)}; +d.dynCall_viiiiii=function(){return(d.dynCall_viiiiii=d.asm.N).apply(null,arguments)};d.asm=sb;var Z;d.then=function(a){if(Z)a(d);else{var b=d.onRuntimeInitialized;d.onRuntimeInitialized=function(){b&&b();a(d)}}return d};O=function tb(){Z||ub();Z||(O=tb)}; +function ub(){function a(){if(!Z&&(Z=!0,d.calledRun=!0,!ha)){xa(za);xa(Aa);if(d.onRuntimeInitialized)d.onRuntimeInitialized();if(d.postRun)for("function"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;){var b=d.postRun.shift();Ba.unshift(b)}xa(Ba)}}if(!(06mPK4YF**>}r@kGRzFi zus z65a_q`+}w!FhhnX;2|qWJ`24~v#wC*#>3@ z`k4mVjJN5bB(jseKEKDdZPSXgc*d9q1?seG8!7U~hkaJOZFeymG5$cv^qSdroI%MT zW2TvCn5L0$=b4^59dZoR8n(dLCXlskuZQps@|N3)pofQ1uz{y(d40b4pr>hb+i%tU z8CJY6B@m3GOsmiWF>F8nEWYSJ4cWn<4|BFaw4e=|VJ?^i89r|S4;UO|#EVUDYr~5- z@eEDVq(C`lW_qy1238c)6oEjfAQU8l#qf|nhxq}^h5x)k%bV0BPT02P!IB0j(8@_j z2!=v+%#_9{6hiaP9usu%QoxsMC0bT?YS0si3nYPXn7p@vH!&g63C=BGF>Ne^ZGr!oJ(zB23AC}whEXpKW&9BP1CN=0KUfrhCRt{> zC*VWlEYrlzFzPTB{`bFfe9V4d}RU>kH2-o{v25 zd1hKi=uz)^dzHP;Tw^|At}-7tA2S!3^UX)ix#lVBW9tL!9c#DsvbD|HXgz0bu-048 zTF+SPthLtD)>GCT@BLo+k~gdTSI>FRFP@)0KY7l1e)Rm{IpcZWv&Qp;=UrOuS>>tp zEbz?t%=0|zdDt`8^N{C3&jX%0p8GwsJ@$uf#mdXDgwcfWrviiMe9kV{Pg7z0{e2-LJ?`!8LQMD-X zXR7P3K>%UU#il(7ZE}GlLj*)NrMVf4!wk&&{ z-80HbdBv+kp~kiK0`(`;8kcS+yud7T$Q4t>W(qYUDtGLB(};K+(={BANOuhJt%YfN z91BxLoh|-t0fTR>P!QvR5U&4r**iUK{b+~el=Lp*pL7ymRlS~m&`+zSbpE6tAu=Sxos&lJOZ#VHTZ0F?Tc;s}%m^tpUB(ypK`=507uSu?{Bb}Z{Iax@cGuPl=2c%2}|T4=iD_(Z)jw?dRfynPv# zCps^nC#!Dj(vs*ES=qI2qv@VFlizKkm)FfG6Nfc2Hc-QA*A~hzx^|B20@mE*6{-w{ zeSlk*s=4E{d@PMSLOWP9Vkn_-Ma`SR_QR2=7jJ=4=0dsW}xGw(o*Urcb0at zdWl|Dzm+y6jL@j>Y&s*K>svzS&BUis+d9VL)9vR+Vt+A)@A0pI$Z)x=Xei)P>%aw+#vd#rcCW=_dK?plp~Y z^9Q9gx`3q;H-$oB&^#&t%L%iDAXMtRSOgr!!YXrcvPJb|>X6R#jl6uwwYWY%q`9aE zW&(SM5<_5lThy!iZpdcp*+VmcRp!#n#5IoaMdf+7z=6)&}{AJ)zr%i{_=oX%*kb8!z^}uj;@lsu33l0D!aB(?cy%E zb_5pp_iKNnZ29wb9dT`Sec$rzsKi*V-IoQx64|Vq%&^T!x@K=Kv{4vOy1?$m1s;)| z1);+0xKU8|^y;3v0MdX)zKaTaxhskLXkoBie_!`Wes+vj=wCj`r3vnQ-2j7@qbRvQ z&k{t$IDXwQ3I{~CY;r?*D0gMvXl9@!%k_sn?zph+{`G29)}vLrBbo%m5OVi5qjpU0 zBGBbJbb0u-zq?@YH8(T?VGiAp2W9xv4b1`P4eLjha{RFQZ9av*gwD3aMr?zjc2Ndx zUnV*-e-yfem9c;|bf9N)nS0DYjVv5~LtG@L?Oh5RlCDpcTZY%Ah&()esJ>>(9wQp1 zb0cU350l(>?J{62%0xs?ACY=Zgo&*ygZ)tHJz4i%T`p2QkfgTz@~N z`5+C~Qhbp7VT6+$$iXzGiKueq^4aK1-hm))2N_=Ovr&>;EQ zjXg65@%$X0D|*G7cnj2Isbhm$5!v;o15h_{BZtzus*xi{5p>D^Q3HGq<02dx9^J^l z105jdnewvHLnYl@Pp%zZU}j{==T@Z4Z$_uf`ZrHWYUdcuj6<2c>W4C2Lky8m-5jB_ za^KA>Xo#%5B}10q;%KOS?D>aVa?^%5RujvpjQBcOEOuB!H(#8sYFyTwuoGT2<{Ghs zoIuzQF>)Q&xPJNN*eO+e#)L_XByb}ZRJ?C)&>CyZxT)o(AeKPG&(oRZo%noQ%N> zy9|xC-5r4*KXLa9^u1hgPgAsf<(~Gw>8zS7Ecw?xY0X}S7Iw|3swDA}C%XUdWLpHf z6{?I$v)t5cyF(KV9E2h3i*bFkJJ%Q`aX$3&@^t1=D#ZD-%lm3w9SXw1PG6{Tw zf$TEzkX%;Yi!PC$mp8#Rp`u^*C0S-M2rnkP;`RvMQs$cdfQr9NTp}k|j6tiD6$5c? zJ^j|4dSN>RnK4~#{LrZpuc#LeIYF#CAoF%uGd1LZ>#Sl% z9m16^bMI@L(E}{n132-;!UdL?YfceME(_0vVGhqN#t1 zdx0jPItqxJUB51m7UC*yo*0@GRg@S8-C|>n4qNi@{dH-yy!-wJxK`euo;7-6XsmuK z2L4CmQM&0U`Jel9I*fvSrr$}iH}gwIVJj`o4v84fV0cS35lupITwsbOJP|1#NRwC3 zSwrjPg*m;;Q`{vmtbf^0F8^nUI^wV;4q4)$B@S3(za`$b#9NlwXNkR*c+(PZSnjtW z_p<{eyzbg#!gkNSPp;`M)9@0&w)>2RPleoV0FuQX%l!(#bkm)C zQ0{pkY`<e$kx=kO(`KkS4R7Q1lt~-4T&j!<%iiu{1Bu#s znfMpFy0bQd<5?M@M#`i|Cj~L&Sd49eqaS&6CT)<(^O`o=K@* zA{fH02!pq8n74+0ud?SWYOxW+V}j7aIj#}rJuQUUalh!qn}jknitdFA)&#Lx9$1jw zs3}GRGI4nOvlPmV)@uS@)bTfxwrrc95*w@*C-EzVP+0Sh7!l9QQIhTA`{cFBuz(}P zh8h|HHzA&uKgzaUi$Pnnm`mc^J7LJ7))dc>wzJTRD^j3DP?!NLMn5`cSvxburLYx} zs}^O*X$wcSzJg6IAGgC+>M4N{@8_*~sm$=2@?67p#zef>EKR#yPsNenEy)OWbG(>g#4mDX;$zCXN^Ftq z9&1ip&UI*_~I8?^75rEf?faa_t4UXc)zo(Sq~hT#|Cm$^muufNhvbUNQM@ zL*rdh^{U<9lrAIpu${a7Ad)fv@EtH*U|29|AhDY(xB z%7a;ihDMC2V_?G`b$1dt8sr6){f@z}$v1aeY+2c0&K;}k!f8LYy1geoVu-~u^@(RS zv_$TC;->V%a1t-sWU!kkbK*oH=w^tmvUp7k+AGJe$)Gpo18Z(#!)I%a;R7JXy5Fu@ zhgOT9TmfUG@TrCrme)Mh!27lx@rVX;_EW>3XLiul^44d^ z;QGI9`Kp}1FxY%11#M37%8uKy#ua~ zzFr^K=k@jA>-D`p^h-*Y-@cwl-^rxiS0sH$m0%KEi=Q8g|2uid?%DLP{A+hf{m&p* z`Q{RMm+a44lR2cqYseQN9+o5at25a_>uUy?DW;EWr(U|wUKJ>d_?sCVKE*B8-e1$+|IhZkL;ioZZ_6)W z5eY)_Lx_3X;fO9 z^7}bZ;KlORyq{w$wFS}6e;07DR@U2p6>xwXr>TL)HPk>Dqy{Zaju(w>I_w;1%P;@` z=mK1U@Bgz)P!9+}6^$1h=%OhS3v#mwrC*Ix1YV0;qWrTS+j?}Z{x9`*D0Dwgp2|Jb zSWax-q4UjXd{ivNR^?g~v?SOp3G(CtmvUs}oepvTkb=?gOhr85)H_bYRZxU51xsM} z*rgL4oN<&+geZwsyiI8%16y>ZYkhVkIo%B*;WK$t-q4EVV%=(MfQU#oK0- z>+}<1+mFj94vlYqj?7}Tj6=gX%#IB-a_WG-FH^|`*5Qn13d(u#O6eZ1lh3dCpGQW6 zAPlythx0+5Cl5FAuC`d;$~m)}fG%5RJLNx7=!6Ls3OymlM2tKR0weMRhtd%7?jwHO z){t8XWca?>@0xsn%@3Ov_gQi7yMA|Wf@``DB%mnde#|}UyQeXNSZcZdVQpET+x_I{ zk#V@>cjKUf0OM>aP|gp+aw`I`i0iv^18xd;TM~esQQut^aO>js96Sr$UJkfn3AtbMeO8;heGbFAveyA7e3w}5xJA^A8thrr2pL#TnD_{1J`j!df0PKSc{w9OOfSA zTG@|Y{4oFGhea1ZJa+NJe|93dVZ4zAO~78hzKc)gxX+ux z%2@WfYJ3EyJiIhsT|>;Y07YMCM@x>tst9=v_pvuf-tqhlse?TJO;(Q%FCx0aeB>@c zIHtfdBJ9#|X&g$utPiJ7bxioY-D!?47rJ$2v^9*j4pr^{y_Axa9p+JvnPuXssGs@8 zx6ft8)VcOBqg(`of9)oMA^z-l-*!H0nZ@E5Tq;vY>?h&}9A|Z>B4A{)&5dxgIAghc zYn(U$Q6~=NPsk(x=|WG-r0)yhws!hHi@K|U3n)dFeV^7j53HOI!$cH-sn~kv-AZht zh}F)V%0=yPM#r%{%+MBjQ0PDl8!KuG zKQu17JPZE)zu-%U!l-sD*;dD<@);pEY!=s+_{GoK{pY<@8;F;kbs8fkt$T<^a7fNw z#ZR#ksNs1O4j}xii{Fz=&pI?r?l@b|xqSUpo`6_rZ!aucpXioQfQ@8V;mf$3c z4)WKt9aDeOJEDcNnIH?Cd&XOa0CDM$bqg;?#6hnzUkP9UDQ2+kxhAETDO$1h zw_a%_kvdNDy^-W1YYvzfwNL>-C*}8U5Ujz!U+!JT+GMF*|NDCSLtgbq2`!N;|7er1 zOy(pGCdXJZ7FK39^k2k+^0z;noE03&V!e6+`)Q1yhqE-!fi%jZKUJ?Efc(HVSF6<2BG?$AA_)08z1H8RSx|RV=*5Rfc$;cr~JR!w@Bny~adE zNPhL_HtHl-{dF0xXa91MxKemwK#NXT5dTCpG;h;@pU;4n8)Kga23 zx#>cG^#AKZlk%oK&wO)t77V%8QF!k~@cxV7Ll?nEH5|H$`4`>epp^7DhG+!xaS@J` zMQm`kBAc4UC^vziXv8MEZUby;pP^XonhtU33uIW=a^_Gq;mB0?$G8~?*NXX-*0DO1ddcGXG` zszprK&n`?ER9o!Ugx*B%V7Uno$SocNYSRo}gt!s2` z;9TR}lX;@0!E}jo{3FQni18G{_U>8Z?? z9Wk;U>g86D`vev<8|7VmRKH$!wni^2^n{6oMmTM|a!ZH(sOsXUPTohD$%d(EfGI<5_tQM8r}_oxp+sPgU{_y#*aZ7g zeHoy!l%_5Z(f};Usvr%abL!V1HK4_+eu(mdU)wki*-B+%zPcnt6R3@PB}BQDUj0Rg zb|E=St%;|n>nulv+)audlQT|YnYuoK+R_TOFoBvm!!yZfm+mP*CJPS8goqMcHr z-p`=c5W_$w!fpY*H2F?J`czlb- z8u+>fI0Zl>bP|9@=mY?b&@lk%?aI;rC?Ji|Apn^?;(h=cp}hb!Lc0NIgmwYY2<-%* z5!wnsBeVs8Mrb1djmP@q<-* z49o?P&%hi21q{pr(3pV=08JS918;50zc+7Cb@v=@LzXg2_j&@KQPp`8FULR$f7gth?C2yFzw zc!a9IPouBN--fj!iLjcNMOQ$roX(>5)L+%lrp^>r*Jjgf)==5hht&A`6pqV?@D6Fa zpTP4~E9!$uH>sEF(@e@z-62D`jdAFqr2kl9ZPoEk2fZi0Q@$__QTOEHa($R`(QZbV z+Cb~Q7>20xxtb|9+t~MPFgipGv8QzPLzsq#Is-x5g&{9qP}fCh{yz$SjZhxOs+UXk zy4D;tyVDRy7WcU3IM^$eKB;Ddh9)BiN3dfB>E!pEK|0_jM6}&Q1T9p3I2Zc?RM-!B zQ2!fM=LXo!Z&0`8Q>wbB0o4PlOB>K8+M@b5q?XZ|uzI{9m8yOXsZ~uuhejwkeNn;D zM(F#z`mqs4-K4ta*Ys_G&0|58zK=z5;N8D zd>WC)N{e%Q<01$zM)!v#QLP3Q(2ew}sxF{{^3%{&mg9$=5D~6t>;{AlizCUp3=!3B z+DuLk*KrcVIdNWgj?>_ZrkM!3qKi(Jgo1@u)FjhocI@;X3xZN6ors!o02ml0*VYTjq~#vKhLIL6KLXQYFZPjJG_~bq|dKI zPCUEIW5Ag3j}6hx@oU&X{b1}9oVcMUoy1O@A$G#VN1nTr3>%$q_+_%mlc}2mE1dy? zzUucTlv$qUq@xA5%)ze?lzg3N$2th}IH@R05^WHOZpph*T4*d;oI-)kC_m!Gy7<5_ zeCG%bAlA?^zb-|*g#(`$&G>GDcAWb=txR*C_5f3qY)VZ7PB?(xKH;dnO{q)$!#0{l ziR}e>xg&4Uv5sE#NKie3^xu5y;wNh9Jose&uBhHriq>-iV@9n{A0yZbquGfv_t*UmU0re$9mgQ z4pzDCsCk2JTxbGsF9x*1Y(At=z@HG!u+%X4*ee*UrnI9S4VlrfOgI~I0_^$Vlo+*W zIvCqB>U7&SYDf_cuJ^i)R!Fe$^CeEaW=G=MnR$>I4+252s(nSU+jgmp_VkB3+l8*L zPU%3~D6SA}0hQ`lV??3)up{NsW9qMtRM^%D$1}fy?~;H*CC(19jqkH-*)^JCT=YU-jFav9{{6uJkW(L&t8E zALykQ7#|C$G2N&I{h*e0qebMXR>gE>W`;hY0li${XS;w2=0xwl0-8 zg-|YWsKfe9jwFu30cl}40pTLd06HAZv(%-7b<)FePJKS>F`d*hC(EfPGSt-W)Bzm+ zVt49VZ=VU;dYy!t^zAq(hnjR*@s3LFL5=Bv>e7R@fmiwL6Esp6dQg9;=>9#aln$vy zJ*g`lR7ZQ#erWVnC3FJ@r(TrXe7}k93(~-0VbBPx&DdfPm~o=EQm?cJR{iC@=vuX? zlzOP=dQrR7?VRl3*i9^dt#K`es$YA78MmoUy(v3w8?r|oYGUQ{#c_-#*4|99t$J*4 z@=>@Q(m@EMu*B6OgEM`#*sxy*KAsE%UQHhizu;IY9F%mG*oS&z5`+7|W`OPM57pTkj<3KHMb<{n6Y)ZBdaJB{)Gc{u^n;%0HjL<%*rCSsgGc(3 zdb1yv_mKLfAEYv~`m+9%O(-3E3Ef`zJsaD*&ULq;ja_pJQc!U$%gD`Be_lfM@J=u{ z&e#5aC$u8o*?It7N;}nz0W_oFFw`7K)YFLljdE!cGz4;R5la+1b#_03dcdgJrPRlJ z$b@{Psi~LJUf3EXm%-l%48>$XD-7KEa`52pfiM|9P+t$Eeu4fMS4sLv9l9Ly{-OH* za%i?=)wzQxp2EG+i1jd1#d>r8p-wWxh<=>?0)KH_4IE6ZS}r5_*3nZv8>-*H8y&D7 zd~?561*YhR#kxb!8JSDD>eOH`-+q;N1vN#o43k0^ms~+D8aiQUDY)lO7@9cb#Ep$0 zqfWd^D2{{m5sB9+Eo$i%l$ZFWjTSy+79++T5U13EE2tpl3pDX36a52ZdO8N-0Iw`5RwOV5U^;8Ox9dAvfXZNC8v@|ybc26_~R*X_foMSLmCrY0k@dDW(2^m5X-HU|Zx{c!w` zeig$h-2C5ms3aayCMba*oKYmfd;@ACk_$H!W)^=wf=ciV&+}jE;BZRCJiZ)GlQJvx zcWr!1!EqV!5jR7aTD-0%i~u{Psd*!?r|nUjMo@}ceIt!jdq%)I%2XLQ(u38$n zxcs>x)E_p|d!ww3#nKsLTzCT1;*>EPtFQSSmC+3_`e6mL1SBTk+|^oK<5qx%(bTjG z@Js9&37RlM5K9o(grhBHK?4}5&PQux#c?fiGOvM*r75e7MrXal3|_%UV%`EPqsRhz zA;nf$LlhVroPEymDJMxe`tHe zkI^uhu@S<`|E@~L(!2Dl${0s0g9i!A763gCs#nKh2Rf*JA4hFH+E!F;Z>83aGb4UB zywP8?38(k?#f8|o0WdKH7+J1m;x9G-R!T|z6T;9t9E@7m`0|D=%Ah)REA6WJ5`)!X zp8E1Onws#V+4HX%O-A-k{iWOL(2Hu*ZPYmQ8~8EW%}}?Eho%mzmE#fN2&<3AQweU) z1brJd0p>(ly)c0;wGXia=buPDqtIm&sjrRHZMY{B;j8J|FDBA;ecADY8iqN8-A6F^x@!Vne)}ZK!OfjSg=*;p zs-r%d1irqwpy^~?P&Ao3mFu^&Uco}d-o6K-vk}?%51Q^fi15J6u7zd+I;hJk03FiM z9}k%BVGW%J^sa`^0Xm|gGk}h2=vzSVY3OS}?`!B(IlvDzcoNVt4V?h=p@xnD`ba}Z z0Ug)SAwW^I_Sd4dw-(x6i{P$W1a|_8BDfV$6u~Wk7(oOaHUf-dxE@dx!?l2-7_I>n zMX(Z36v5?yq6jVl6h&|$peTa#0BHn6U-{T)fi!XwDW?JP2U%eoLeI2@8iN`B{p}Q{ z>s8Ves?$to1#9yGCW#02*lbyz;W4ls!WtBe9DPhz1E)}{PS>*vR9UsKOB1WK}Osp~7yl0is%gleaG#0*@Ds@sG;dL0aBHg{d`zup)7xPV^w^ zt~;|bv$uR2#~Ud8fxa9R8S{c z^^fVRSMH=Hu|Axj%NWI`r7m1t^-pBG-9?RSd;Jr!X?Icols;oX#*E2s#_cSRd>4Jx zCwIZVTBMraO@pbAnt3-&L#6iKO%D|G8N=T;RaE@pn*anV{+fB`1RPdj-F*Th!5OO^ z0aDkz8BinRmbn84&^R$0d_)I z%TN$3ytpB=F9I7wxY|&_%kWSJYX{HaS{0)+;zOatsQT1~wpi);=kw$L^}NCpD&b=> z1MFnEMqgWPokqLc?9~Ff6#}_WLt6m7rJ?Ibc8_)sud^ufXR#+;o0#4>> z)xUyrVJ(iYfbDZy{ayhIKBbDMQ*WBC=1hn3KdoMyPECS0VoF+Vn@Y_KZ8kv2c)5-Q8b}?ayZ}6acqo1|>V0}I*5QoQqT+N9cNKA3x1eN_ zN_?njE@koybnN$J1NF;vSS`=0@C*dVGSr|MRBQ|3H&otSx`Z~XiF2t>U{j1}8`bW) zl&=$d^38>ta16&2%4da?uIORPL{%tMteFD`nPJRVzq7@|l%DtkuftmY(#buE$YJ#r z57TKSnZAk9%<&&P)Q zk;+(reeJkvw*ZWDQcYO^nfO?pTL8o3xN0ov@wnrd`PT>uU|Hv=qmr7J9rvt{1dG7q z#U>aR%nPFc_Uxww&~$>`Px_IP0Gppr3t%m@;;e;yzAW)w6|Zw0Yid}@p2xwsZg&Di z<~*7cUbZh`L_vFvT?i!mtK|zR0$g8N2*KT|&Mw3fw^H{kqB|RW4AS5E;7B%m5rx8nLyLUSO3np1Xi2 zGdHZrk3H~HU<(wWPa>yU{M}WpSWJ!p*2uj;K8NWpN4`vdbzm_K19r_7ZK{t-L=eOR z+{7oC9?}iD;jskhavRh8OVRxLCqdwooGBWFmH#CHc~&}pAkPIy)pJXzDV_#_T&mICq`mj!9ER)HXXTvFDX7zZ6Bj%x%>|ssXJHlQsg#5n8sAv2(h>PV`_*g;~s`nqGwh2`%GuRmM$)SN6WGro7HavzY6-2Zy*TXA}R62A$|5a17+*bB;&A5ZOytP&ID8$LY$Xi^oT301<&(AEyn7 zH`ZMVCHlI$X(hrIJ=L<6GzK?cB{c)uZ7XR;XXvw|oY>%TM~`zSxQPMhM6 zbQu32P&wUe!YC_gfX#su4sslWg$-YkaY_T9h>LmNXbEz+6+FS*HaWbx;QP=EMt_%W zlZpy_VjFFPFCAi*%g_k37xPf`40Aoqh9}h1>tTOCf$VPfg7eK`x|eta5dyqkoU`r)yJpo0us=L5FBe#FJ-W)+ByauWUxl`kZ=yGv!i(`fW1} zDqY|WaheJ?c!Xia5q6a{^cW_|1c7L$a2W$af3nB>B+|gp44VIuXa!JxtO`BS)b=VW z5Rb(RPRw$byh#ub?2uhHQf8<-mXQM;$dluQxDiyKc5kFxQn(!30;Dz%ee$6`MS*fR z!Dh=-*JI~IyUI;SG00QNjCg@+w;8dAdg_7AaL&$E(GHrYHg2H@%TKbQg0;|^7pjUi z1inxK`W)JEsTU^79P%|77`K0UqPZGSbnNdZ^u?u7-)sbVzG4o?zq$j@11B`FZD0`s ztJAul2LHpchMMy4JR$s3IexY61zPU)8t#k=yL#}8NTNv@fC<67AlGp@ppVl-F+e?8 z4f!3Q_EbX!{98F&DK)JzR?D@*rUeAu3iyD>X>v7h@c}7eTVxH@}a_It{4)Wh)|2=>Y@p@{4~{h^03AhQ_8* zy=FUz48->CfGIg-CvAa}iF-+_oTe{PR!)0#I|*bE*1&}c%#qdUGiKqqqJ8y^FVQKR z{#{-A8vfxmWXKur-WjIbg1zBg09rDz6+kNnwg70&z(xRV7&r=`kby%0+A^>oKsyF@ z11Mr(CxG@0oCnZ>fpY*lGH?b!CkDO+(7D|WfW8LQg^NxB=*qxJ0Nof^GShT-X%l-P zpjS0C5728GnhWT44b1_xTSKz|?a@#Lpf{=u-ayW6&chINWD0s9WdSS;Bt<7VaGryh ztA_2Rb2)hu4EKM3OlI-MWJF#a_4+pD=tZ~J zb_m2eq+mVp^-q%Spt9bhNFu1hs@{WM;Z&U1^?MJ|rxj}cdz6>ILLc!bz--DwEI^x2 zFwT}+SS3WO`PD&AS6i+=evj%0m$CWlcd}t1dEciU?N%Vh=is|$@dV+3CoKwi0cJWG z0*wikejMDsVTT>`3vz4*Ckm*N7M5NEg2p{P;{b6F+>+tseY9 z6Y9?oXgc+*Eg^xWtJLcj{Rf!} zh4z}KJcjWte#1saf40{!&I6u}yEDo#GI8fW!f$8{=K45wqZXZ@oTg_`*s9Htks~haGj90kk)^lXI@y?V%PpgfQMcRzz_`V@0!8iJi4%w4 zRek6LJ={Mq9B&zc-;LFy3d~*!ftvthSYwoWp~%d|7wU#F8o!&>XGLbC0RCM^3}P5% zDyhBMMAwedwI%J%A?8>^Ep2bsQ#;$66-i@JJ{iAT@w*Mb+tno<%;UOv%0&Wno21HKEtyYagRKmIEog@3&b_o?{RjLPlq#cvvZ<<;9dn*X+Oszt@X;`MH3 WmneKq^p>OUE;c*X!0#5DGyfOD-dtV) delta 21766 zcma)k2VfP&^Z(7=y?QAdNH65xqb2m-F*&436Ga6pO{# z3>Xkp1Qb-HC?WzXcE46sRP6uH>?MG|^8f$QcQ?1~W@o4E>|8#d8F^=BB;6Q3c>)=R zK^yGiVP;twl?|gZV?%mF(^^6qve?Whi_&l!Wu)Rd+6dx0MqkGoCg5=zE-`Gt;|;>K zR9`0;-0M1Bd%a-+zQG9KIuUOgPLp)s$wmn96b;|Vy@C@)O}Kv2Ev8Y9p#xKfk0>35 zZe=sbdLVdTkOG0sV8AvF(=Z~oWdw`>pr9S-RLcyKVcBG!M`nl&Gt(lwP75Pw8Wb{( zMBA}#z;#$ixt3nHEL>MuBvj3>4X*m|-*8rV&WN zy;d+3ux;B6TL~BvB(QBGQoCK-c>BayIFxAFU8$kX_#0%KK{LlrAfp!Om}MrDX;Oh* zFHpN<9-$is7Z}_GYy|^g3(%r08Sl0Opoxts8dfkAN{pI;Ce5tse_<;zlp2X97*|YQBpT6>S<4LR zf3{_XO&c6V7Pt?H1AEJ~!WPiR8WYt?2fy$`%|9R;4x3C>18ixTfk?eGh~FSbh*E!2CfGEJa3QINb>sg@X}rr+4E19i|hyrZ!DARtD)NV<6pZq|q(L zR*P;mW}4&~4_MUA*kaN7#%7DU8&wwdFrKrhr?JVRUPh%wy^Uury1>|AQ6J+^llmI# zE$U}HV^M$O>FX>SV63wuGr$-gIpwr8_+W66HQ)Lz@LhoK4_KcEwgrv{{xqKpyc?Kd z9i;n$zu1r3PnwULkD9B@73Ra{VpE#)%=^txtP|FI*4x%=)^_W8Yok?RJ!w5*t+gJv z)>w~OtF1>ZxjmR&|8(Hjz%PNH1E&H%1%3?t5I7n5KJaazBCs;BBJdVH5_mZ9P~d(^ zq4a)%nSmLBJLqNmDf=n&bF0#P*4$wJW?t~I^^tX#`5}HESa`hCywf~x9kq^F?^+kk zGWq`l)?3zL>w<&UA?qD0dT@2R1>T`Cm=9mjAD zmt0e9lxtFE(UY=qt7@!}%O!RDi5VpLl))ll`epIU^Nm;x0 zCVF4KR{JJ&_EJZZl8>dfqXzPL>foqhBw~CoDspAlw7PUa4o_Y}+_>>34TSft6q^kq4#?e5H6hEcD0mE$xzQ!h~eVS1yk8wf8j zOI-5ARI!1arbK0~U0@pVfNOe&8xZNPA^u}wngJJ+;W}GWrJzw7T-Tt}TdOkju}@ZTPpHVDh_7 z^a^^JCE|ca#s+Fw?K6e)eZdL z%UQiTQkHzNS9_HF(rcJVa~=H9!;KV}ndmsWcW>$;pXuG%>LGeme%reVVT9~HchUE9 zWuG4OgZ!dTBaxo%G-d`d#N`zpiA)*mJCD-jvwd%ize(*(td5?+>kKo6Eya-xN)*IB-J`iv^%aw!D>uLtU9MiL1 z%OgEPuSCPqT; zP%Vq{WO#5F`j6}}_$pji4Q?j#z>|;?C)t7I*dnj;#NcPCLpRMwR*6SbN}7`)_!;tZ z_F0@Hp{&k?;&ae+Di2@&5;Xz`7z4CKgn9WjKY%p@;4^bdNz5>d-H@xR{ue3)tVWz88Of7#f3Hs6G<1? zJ-Hwtva>-Xyp9`1b!1lRcW~&DRYu zXc>xX_2XHBa2O}78~SiWWXncFV?(&B2WDz&pd{N1#{%AjnC<=jvacrmD%}xHqA_rd zx5GFyCU+6&ay7c#x8rOV4F2fQ#vsi8q4l6gPYrDbxbCpNv|L_4Y<}zap=zP-E%6LY zrqj;n=nf^KBlAQXkFYWpu!i~!Oeyh>7^so0hYwANRT~PAV#b1N(q!fET#Cs9!-wc= zmh3j7VFtH>E(tKjZO<+N!lFdPWci4+D`QM+T^a3*${<%l#hmF9uKpGOC%icERom?83&F@@M|d_ShSe0)qDS!e9jl(w$X)HsmE zJa8b(GsI=`v9WQerafaHrpx5=ahY=ZI9Ed*s-I7etDAnAYc;lv74c9J^9| zDho@R5lrfk@mGrH$&JLq5Gv1Q)g7+vP#Pz>Yy6F36oEIfyyCFAPAj~U3Df%a0__AE zIy2#op&HhbFRQaeTd=I*9mpyX&2Wc^mz%oeAeXE_(X8;9vbVTQw!E%(GruOYBu-v| zZhok`IR^I1(IZpbO)J1-1$>vYuX~7Im-Vk7O}*sY>$B)(x#s!?X=#SH@jXHhh%x}r zU==LixV}Rz=r7l7XA0MhLFYjMIB{>j7gc^T`9s2z@4T@eu3~ByEKsAV zohhSo^wdJ4JLJ5Z+Eb<6gX^pXH=jqJR~FrzNc6eve@iCym7{NY4Q*Q7noDoX{jLec`@7ZC}w(aO`y8tL6H}8+$fj}klZ%I zrDK)v&nUEVX9r_xKuNQGn&X0K2 zh9zFN#2!oRw#2KJc*PRCEV0uPJ1p-{$NT6_5+QHx5$qE*bl_d`Z14VkBm&;4!{nLX zG7T>VY% z8~BIIo^GOo#LMvK#V-&rrbG|zmt<%-T2H~ z#BZ{RWM{muybAi*j1#M27KZ{;h&6JHY)x4vcw5Q1_25rq^ZkFKP4CfV1Oz{M1 z2M%4iA{A-_g&A;<^rLG+Q>S_qv*5SL^B0b3bqRZNA#Me89O!|~M3_y!vbj7WD$H0A zw#Ko;laTqo2qAF#ZRaL zTqBF?Hp~JSz|n@tu%qpOs@}G0qa>cR8PMI~02TP5%%EV87vw0X44 z*?wJ?E(Br+mo_~=3k_|r45BR<3_w|*1-&o|%-%Vuva1!m-dtq)nw{xpiD#v^Y&bS? zk1p$6t0*2yG(i^x&75wAXNe+ta@hk(nQ^m+Ygcr$repJxDerrzb6IDM2sa>Eliu@#L%+eBX z7wpTcga^EqJiV+C2>5BdeINhGO!`iK_ef4c5vGm-&c_0oif+fZ992V$4u4 znS8gQ8ZW6_x_l_nCi(k{!EL~^fmqN1Zw6SP*@xJFUJ}Zd|>VcFU_Ddl>%CACEO4SH{=W5ALyneLdNK&2ah1>U8<^npo&k2w6Z} zDi5#eKlD=I6B3sqSb&n4b}ukxh$Se&tzNS`86X>au$vI|W$9j%oH7ss;hHJ&a7jE0 z{K6u`1sGyfx!5V;BKhm%z5SUZ;$gbgg%_^vlXw83Q`g`yiY@lbHEY|*A&+~u26RlxJj zl+QlVqH{CeoO-k1Bb(>?$cPBx8D23+<-dhr^>0U9<~>=M*Q}$podv(f1IO@~t>O7j z_{b->(&aM$sqwhp`&8Vz90p|lQ_UKj#~}v;+!5E?JZKx37eldleniGvidfX9RBl5Im~w z2GA&2w*|iA$LpHWD>CKjj=1)H`ZDnfyn`uhvDs24iL}ZMPZtv+H9tOcIvwslOSz%# zGQX6AFPRHAw4rj@cEdn81b1z?8a(^yh9AQ^w85dm51ws6>6L*>xY@7C<{SItdi%y^ zxK?a@jrPi^n_7jhgerjuoRaG|b(Ozvnu<8ib@jLJJCoFltKJkXbJ&x#^`QkmrwIYSwU9z|q^2xx4?h zJu#eyP?FG#Y;j<0Wo&zPnJ3HdqZ)ZNPrTRK|XTGf5 z8OJ&w-g#-tH`vKx3#uhHj0n~@vdgZ!=w7*VR}cD7MqbGS-0+nGEc(D#S_UTN*S5sT#muN9p8`0{IamF2im4l3n9zq?UCOj`o&lu!+V zFA8H(AcjC+xT(PbUfinNhilr0|J|NV=>KPXY|KR=oAW3H&p{yG78h2(@0fFGz2PUgKq-uxt36+SrOhq*~!kROEY+>Mj5 zvOs(~^RLYoxxn-Tv|<5v(VjI?J25smec7AmQ?C5*&5jBG5`cR9reQ<6a-Z8^g~cvO zum?OPyZ0m)hcmq=K>>^9Y)Q0B0Tca*{9<1{dPyei&xZ5faDSWRhl6f9+d;<>ubJW@ zS+f5k`blovpNH$w{Vv-6vA;plBNneUg7%m+LcPp&;$e8vDUh33idpPB>@7vzWH-sJ zCH9&=XX+=!J|EZoch0x(H{rkJz0<>PT4p)0YRVtm}F$Hy87Vqphsh$Qd+Fm7YL6=AT=Snt`eXX3Ua3>SJV zR^NLo>^+!-E%ciXDiXZ+xpf`ybMzL=E$=(lmvy+^&tZ&O#^-AxF9B?VSKxRp%&@S% z@(BFzI^Nufm&)B1N8m=(@m5B>T-=_b~@s< z!EJWb>ww#$sMiIzWl?WCBlA?$+r{@S(K2rj1G}Q$UcMiSdI$LadDJ_^_n)GO2jl*C z)H}}ixsG>&?+YC7Q@*cuyf68_FhMxpvk2FCpC)=ACVCN^_gUWaju-GwINl-0b1*H- zdzo7taF{fSUXlRs%a%vl+bei6%)|G~mhZHzzv_Qk5Uui=6OEK?Lwpb5p4%j z;J3DTr#*_c^Yvf<= zwUHB!?&&*Fn;hQ~G2@C1CkLjA9dzupM18Qn?+MxBahU!^$Y{_(*8ibemLKbYqtY$M zrsLY-_(gTjbQWtU*?}bKVOgKnhdfK~{XDtrID%kD3%k~1&h$4fZZ&7FvWXpF9}{$` z!Q{UWCX3#mh$F!b?=K?fY_rGY#UGBWf6g<|Z&foj@aj1=^5}+4{4c_D2SG#=n1d7#qHWpSMLsDfGoV@Fd^=;<$-+&wo{L zO^4??z@aCMHxI#`Ld(GB!R%(v#twto?HIq{h*=^Y^S7p7fAe&9wdU8GQlA^)zOUUtm`3Hd-*oxjGK;9^8L+flRSpF8@9wsV+1>kb+f5eOa+#C`2!4ibUWAfJ@8nwSD8=g8MZvh88Hu6@$9U)kt6O?Th zo5g2J!r~_#U0}1T9myd-x@F6%dx*Kn3*fHeRCNjT?mUV`5Kq>{hu|5&hIvK;q7_N5 zm=;TN6Wx?)vBc^ILwV1D!|yhxs|(F(jOyYL@JxRwz&vV5X~HXHF(>19P!2l*im9S zd^u@)h@u(ZN$^io&*zRgE;kE*-&+p(a zHH@YoWYRC)5(>0~!VakTLSFR?*i3EMK&f)gF9T4=Oo+$<>K6RUOxEPr9QsuD{xwE- z$&z35alPl)*3n^jk=+Qfw+H3!UmMT~`Q5K|=vSF|x_1<-9?*+0R1Q7eBxR9V!E6nA z_QSmw$%js7QwLdf`X-#wH2*E5L-$xM%$dEoxOH~ES}=H*?@JJ7%DjOYw`PNf(T&fy zy35=@iZJ!7{cNkA`Hsnr1!jsU$=!HZL!H)?zpn>5=Y*jph179y$KPTvCx#gdJ0o_Qh|2w;^ zkKr%g=4>w{8vF3BZ1{F9eR$6~@ZNLa1LwepH0)fl)EOTQc1b&()8RD!Zmb0{Q|O*2tVrRYf@d)%`JUCSu0tjF78e2xZ9c z<(nd+Olql+wO0?fBBB;a4OsKK7Rzv0G*-70T}-(O2`eM7oN31`wz380DHHM^XTOBG z#u78Q20X|$?4fJzU9JleXTj?HW9hD1b=8A=^|yZZ;16k0&sF!Elt4fF72M zvBZ$#PTvwEs5?vjY*JC@#=7_p6rX9N+4&xhw-t|%TW}W`mF|4$C%S99_5hlTx?4SIQ+DcIHi#bMy$mZ_gzkc(qdH>K zWwkrH?3Tea^2?Bs5D-n37odi;QjH5xJ~dTy0yM_S*3^t>QvMO3qB5Vn*lXh$l-H|; z;V%}m=l#ensa|fx^t~UAvyWCUuZlBI9A^cc?cthOrn8L*r~FNge+|L~=Ghj3vOZkm zr_W%SIXun;OdeH4Ur0cXxs7ld^IXR<&xokFyN7T0X< znUg%Lr-v?|(t?7-;Yzx?DTBH;TBXksd3}CnSDViOS%3O30j-f6RXvFMAcOMi z`C|balarTLYQ^S7u^QL`v!>?Psr*d3xF}tp-k=KB69~spD_Q|1%sIzD=>auFE<8&< z2Q&RN2HR=P+)lz($8+gYTBBO!Q3vX)#^+HNa@E>Ax(lqy0U(`$hX7k$iQp>jR2H+vj8>bqH+LD82A%!ZOXuD0L>UU1)w!wG4gf+&zKqIsnfJSH|0FBUk0E~yaDIYQOj5wQ7+xrlEV)a-)xwKxrnooC7mg)oH!ELfj z_ojSp#k3a(+YWmj5?`t07!6i0#HcQsd=#VB(12-i2z!=xL!Yr>D{U}0#0rt7bTu$e z!=29HaofX2SZq|=;xzwX1w-n>2gy>m*QGjLYfiDf=?F`U+dOju+-nw3$O!AfDM;xN zS!|q;hle3gB8l;71jxMu$Wv0+#^~~@qZkLyjry$~^)c7kYCr*IbB%HvLd)M#A9d+! zRejo^zH0ytqRZpz@dngO&1qOuFb>tcn& zQ2khbEC(n#B0rYfts|eQ$1>a;H@7sNxh@_@gfLTmQa~fpSy^!!b3z>PMBiSdh)wFs zLK;ci)k}p`nEDBHl;wtDBI3del&(Watw{Y@NO^tIU@Fo~1Y=RB^EtJ-_0t4&nJs(@ zg8C?BI*ID+0rV2c8^Fuse9)psHi9+CQqMP{I0*B8Bf7R$W?Vo6){50m2y>Ab$IW)r5CX0;W9b+!i#;6C#7)uX+Po*mzIQwr4EtOz4{O*!{U8_$P72ZU zO@Yot{Z=^h$m@4&aWVvtn&xJ4U^YuP1)e(P1bq{_q9r2*XDm6Er?-YU7KaCz=4Rl> zz4P#^4RmVzgVjc?$W238ifE-g7~ih>IGjL22^NP#IDl9!a|jQYRPid#iQu*{9rC1xRwO?bLGO^rR|lF<*Svi;n)w}rAUSu$acOl&)u<_|HmcI5 z(C8WJv8FUOny>x&cnETk(TwUQZSrG57V-t)KdF0~;j0@kyN3gE&GZ4-Ku7@6MbwMU zAZxDru^HV>Me5e(w2IuSycWm~rcYI)mNXj3u~=Y|RZCjJAH}l1+=_aJ@_DYnIH@%? zhQrXQHO1?&)DzYasXgdoh_yQRfuYBdjHh}vgR4BPH4TSZ{-8At$@EPuIz;?MgnPxw ze4EsOHnc4GD!J+6RrP%vD#Co5w}mn}s0OyBSaho$H^IxuOH{YDr8cxht#3;?X*zdB zPZ4GsAuKmsDi)~|Z6TeT)jv2jO|H@%`KVTNvTEFpn$>@f3r%1V#9G^6u@Dj}&_*=D z@>ZiXNKJ1?TN^NYVQFx_vCCKpk2I;kElq6aBobu5NFXQ+9_aH4jrwZ*iM_NcBN z^>ACqY9oHY>ugVnCy&Q*Y3o=LB00bjQVqsf<9GVizX#}Qx@jd4^g1F#&FV%S zG3JZi=sXPeS2xO~H&pid)QDbJJ(qf%1wC#9vHJW_z!X(fDXN)Ctam}>q+g>ws3BNYa=m(MV=ME zDF&qM8DaTW#tImalaIb{y&If(xiS?Nj$(0AF{Xdf@_^36odchn9d1 zj`pFE8H07kgc~ZfM0;yJTc;p+yr;UPFBR3=intfNVBc;ciUi(&tS|PN+Z0IDoc61h z{b&efR^8K&atNhs`qPc{mdYIffBpg0egM_M_!t3aWoO5S+QRsy1L#89sk&S<2)y>TieF59BYn>; zb=9JaX)+yF(Ls>HcU0jZsGCDoR}Z2@iuFWG)`&<6>&a<{I++Y3hHCI}m|8(>!b7M*HZoXXJxVwP!5bx{@SJJgdkFPR$3D(R zkd7HK42rUzYyx*{^$=_r;#G|=M?f9aM3ABd(p=+e=#_ZG4z=P+8V9=&y^1fP=w-2M{iM?2KHQ6okvf46?UQGE<^;c?4X=DSS-|XQOtNo?z^hiXY z2x=_~>w;|ZFVwc-l%4T8s1E;1XF-UgCJw!^V-`Eqx5H_2)}Pv5@$mwOVYr&p(YX4S z5n$gmwRi-Mpm+KQXlN1^$KWu6g&oy$Bn^U6x^pDmquv}rqpFgxr6@&r6XwL0YPYI8 ziU#8IGWXd!>WwkfP)!~MrPfAm8wLB>MtwPoDsX#nG^~0XwQn@yNo~~W(NrI|I%6Q& zZPZO;sFm5qQ8{C2Enc;2EKS9&^EkSq>^u`1R!ooc2?e__?9T8vl2B{#KW_KgpShyg z!qydq?}O6f4d&Zw*+8Xl&-~mmW($K=+4ffA3a=b=^pnNP!86s*$l!!afk=S3BIdW4 zg`Ky7>H@Szo*LI8Y4ZxmWtwVRLStBkm%tkJQqPruC9hQfDM2V>ugV_}6L6*KG9D(c zml{5vwjr4^+M^qJvuCoqSXfG(Qcvr(31g9gI=)T8TK}qUDy6sRXVqr{EsyRatX2fG z-=}_>01LBEHNB472DB@u##~3O24%*zsG+}R44uX!{-_=|0=9*SZTi@xLx)54G2`Y>f;-z2W|xu_3gTea1UJd!bG~z-p?C( zF^RhS(2z;g$40uhtJX}yUQ5@0J&CSH^MjMYCzX@2uh8&C{%wH$E01vF6ojo@wP6aS zmu*7Q{5__(AK?>hMbAL903Fa}<$w-q=+8N(_m+lE1A1FSrvM$&&`Ch=Xy_Y2hc)yi zpm#O&DWD@7IsxcC4IKwmc2t8$03OrOAwb79bO4Z#*4{H{?KuPOI)mW$GYD=2m9+*lkJNv``;&aFH%$VWF(>$Dn7v_61Vz_&l}0Sj-Y+$4Wa+#F@;YS7JedD>M>D@`8l zNBIO)FW*dswf(Ap5k>uVGc~U6!}DT1t0$|v-f~XWzowvWzl9o|>Gf~Kw%tPgQhSew zmCT&tW!?yihxsmgtK3`RCCyi*x6&olTfKZMoH?n2x6vFt&AW}Vlh6y^-I@s3uv!~_5gZQL%RU&Q+vwjO7kC6)i1|Z>@zj0oa)khYEC)bgQwIP zpv0r<@)^{N%GJslP`#h2V>766bOg}#6QI?OdtuO)t8eZ_FeF3OnM=iXiU=D@%tUx{ zhZ;STCeR3VXePyLZQ|2Gma0q`FgOWfglc*RHIA(HzcLeR)bKkfwfAoH&pk{0;-u+Z_T0}Caihp-E>9X6L6^b zZ71sEz&_4rgS?f~hk^+8KX5nArlwVyv*8a%;o2YY1-o=6zJ4Q(+3sg&X)>8;BRMj!9QV_fZzA9H*Gyt;vUZ>9Hr= zM;XZ*n3!w%(<1K#B4}0eKKdM~JBIhA4#UGl-~0e=#HPRLJVfkAs2k?N@49o*e5~37m=NFG=SZK$@mt#$rYH&+16_RB60-~HNC}1J21V6 zkTcR({j-RM0ij`vHsqs{UD5@(iT5!h@C-LRk_7#0V@53&)BOAoLDLhQS{a3}{3!un zRuf_1%LND3iN!b_dQT-Tq3rZ(vL?W%5i2);Y?)Xaye3b#&= z&}Av-j_={~&->NNM`#_LuP$5;#kXCl<=Et(ul6mc@wjzbK}~`7*cCLh3*zmEvO%|i zH)eu2(MuL6IDi5^!`h2GXIkyTUAzQ`-4BEr;zd?12op6}iN9s@iCVJ~;pUIk{*@rg zC+ZhG)&7{Aj=t81kBR>R;uFbdI1)no>!y}J1c%J0w~EsNQbF)~PT=WkuT88c@gmc~^lm>H3PjiFF^PF>ah zC$O_D8|mD@?!@YRgZQIEWpulVI(>ErhRAgd4g=ww zTKL}y7~=k*UxJirwecyci}SxDPf>1qZnY;eB+fi)g3I)IU$g>lz$$e`1$8c4g#>Cu z{lJF9^cZ3;w(ABE{K3*^bDTM$b(|sA`+wd=EJA3Ozo&;3Y|s%YpvD2xzx=Eg{pprC zWnuRUGKvRno%k%~Yo%w1Ip~ez`5-=mtRA!xp7h^k(B&tw)0~Jyc1UO&AEEg{jCd}F zbE+|X44>n8M%5)xV{1v*s&&s$%cQ%5-Yy)#vEg^bA@$8Oh@Gulhtr8nb$T7;M)e<9 zfgXUY)_I!h)xx)H&~luy;eQ$Lk-BdKWjP*b1wRDVO{Y_hpaPZpER9R$a_ytkWN(?G zK+S&^&QD$S^t0fe0(J6PoQ2m_BPy{D1?sL!B#Y#!_bMsYWRD5Dft?S~_;`SmhCpVm zJ=j^)OXVP(5I`hE{G_I=NB?Anl*&P6^MVfNk8m&^b#DbgDGerTVppR#P= zLiO2<{Dyh{Avykpk-B*^wWxV^@%-#&s-MPamBSlx@#Zslsc$x8QTkUUZb3LG3qCD~ zg4Knx=}?`q3xa+{Rhys3^3qr8_*R;6&c{5Ba0+?VHrmvM6_s0}-3PeP`Y(t4TUntV zI!;sZzv?*E{{{Gp?W@MUK%d(5Rn>qUWLjk(li}@|X?iWdBi?oZEg9GhpcMlf0kmdd zJ%Bb090Jgmfdc^AF|Zdvdj@s^=)k}>038`P4WJVPrvP+j;3R-9415EiYrA29z65k0 z7kvt#h=CITwzIT)i|;VKmo>By&<+jF1GG~^a{=wr&}=}jXlNFoS2a`)Xm?e!SCQ{Z z_o@r_VD|T@QG4iA-nUo`PP9#CCK37xiG(~h8+$3gUiDX6=X|fC(~}K72wxJ!gDUAw?44>?jeL{F zl6rR^)u->&U;FTv`Mx8kff}|Swz+seB_!d|K~G2_bdytc&3-B;B-(s#p>4$FgBF|#Z&P=_MU}AUo!_QO zxIO(gU4xe<9-?jaIlnpJ)+()t=W%!wE}ws|4IO|Oa)u6is_zaV=$MI<9ltUadMnt& zP4O%9-=TOiD8cG0fZaw2uaAb^FHV#PfOT~|sUlxA&6k9#;uBMiG zgl5qBRkM!3X-Nwk;wek)vmEEq{RHBdhn+>isyE)Fmubl8Nux#$oiu9ljipnJspE`< zQHC*2|12DT3|>US^C@ueLYqMp6Kd#c!PYvAx+aA^?`)H(td%n2mL9sjj`OgE?4j=wRm3 z6!m%s^Ny4WD83QD>+!n*zp3h)j^;64eA79_H>*CK%+5Wy^)2TVPXv4`ez)N_4L|-@ z479l2?fBJ<%I&7(SB77C)$5(iuWcHut}8b4)Z0b)i=fqT^WqwKa81!C#pWIV2kibe Ag8%>k diff --git a/src/codecs/imagequant/processor.ts b/src/codecs/imagequant/processor.ts index 8986a1c8..3e22e7a5 100644 --- a/src/codecs/imagequant/processor.ts +++ b/src/codecs/imagequant/processor.ts @@ -15,5 +15,5 @@ export async function process(data: ImageData, opts: QuantizeOptions): Promise { if (!emscriptenModule) emscriptenModule = initEmscriptenModule(webp_dec, wasmUrl); const module = await emscriptenModule; - const rawImage = module.decode(data); - const result = new ImageData( - new Uint8ClampedArray(rawImage.buffer), - rawImage.width, - rawImage.height, - ); - - module.free_result(); - return result; + return module.decode(data); } diff --git a/src/codecs/webp/encoder.ts b/src/codecs/webp/encoder.ts index d773c425..fc80ce92 100644 --- a/src/codecs/webp/encoder.ts +++ b/src/codecs/webp/encoder.ts @@ -9,10 +9,7 @@ export async function encode(data: ImageData, options: EncodeOptions): Promise