Compare commits

..

1 Commits

Author SHA1 Message Date
Ingvar Stepanyan
02d038a8f3 Disable Worker termination on dev
This helps inspect the source code without it disappearing right from under your nose in 10 seconds.
2021-01-18 19:41:41 +00:00
68 changed files with 705 additions and 946 deletions

View File

@@ -33,7 +33,6 @@ Options:
--resize [config] Resize the image before compressing
--quant [config] Reduce the number of colors used (aka. paletting)
--rotate [config] Rotate image
--mozjpeg [config] Use MozJPEG to generate a .jpg file with the given configuration
--webp [config] Use WebP to generate a .webp file with the given configuration
--avif [config] Use AVIF to generate a .avif file with the given configuration
--jxl [config] Use JPEG-XL to generate a .jxl file with the given configuration

View File

@@ -1,9 +1,7 @@
# libavif and libaom versions are from
# https://docs.google.com/document/d/1wEEA5rRU7wT54k41u3qyZIZHDCJArIMzLuzsrLAwaK8/edit
CODEC_URL = https://github.com/AOMediaCodec/libavif/archive/d37ef74127986184500e571bf1f9793cc0bdef50.tar.gz
CODEC_URL = https://github.com/AOMediaCodec/libavif/archive/31d7c6d1e32cf467ac24fb8c7a76c4902a4c00db.tar.gz
CODEC_PACKAGE = node_modules/libavif.tar.gz
LIBAOM_URL = https://aomedia.googlesource.com/aom/+archive/0a5da45c7f942908974f5ab8e107c9fa82048ae7.tar.gz
LIBAOM_URL = https://aomedia.googlesource.com/aom/+archive/v2.0.0.tar.gz
LIBAOM_PACKAGE = node_modules/libaom.tar.gz
export CODEC_DIR = node_modules/libavif
@@ -27,7 +25,7 @@ HELPER_MAKEFLAGS := -f helper.Makefile
all: $(OUT_ENC_JS) $(OUT_DEC_JS) $(OUT_ENC_MT_JS) $(OUT_NODE_ENC_JS) $(OUT_NODE_DEC_JS)
$(OUT_NODE_ENC_JS): ENVIRONMENT=node
$(OUT_NODE_ENC_JS): ENVIRONMENT=node
$(OUT_NODE_ENC_JS) $(OUT_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt
$(MAKE) \
$(HELPER_MAKEFLAGS) \

BIN
codecs/avif/dec/avif_dec.wasm Executable file → Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -9,9 +9,10 @@ struct AvifOptions {
// [0 - 63]
// 0 = lossless
// 63 = worst quality
int cqLevel;
// As above, but -1 means 'use cqLevel'
int cqAlphaLevel;
int minQuantizer;
int maxQuantizer;
int minQuantizerAlpha;
int maxQuantizerAlpha;
// [0 - 6]
// Creates 2^n tiles in that dimension
int tileRowsLog2;
@@ -25,14 +26,6 @@ struct AvifOptions {
// 2 = 4:2:2
// 3 = 4:4:4
int subsample;
// Extra chroma compression
bool chromaDeltaQ;
// 0-7
int sharpness;
// Target ssim rather than psnr
bool targetSsim;
// 0-50
int denoiseLevel;
};
thread_local const val Uint8Array = val::global("Uint8Array");
@@ -56,19 +49,18 @@ val encode(std::string buffer, int width, int height, AvifOptions options) {
break;
}
bool lossless = options.cqLevel == AVIF_QUANTIZER_LOSSLESS &&
options.cqAlphaLevel <= AVIF_QUANTIZER_LOSSLESS &&
format == AVIF_PIXEL_FORMAT_YUV444;
avifImage* image = avifImageCreate(width, height, depth, format);
if (lossless) {
if (options.maxQuantizer == AVIF_QUANTIZER_LOSSLESS &&
options.minQuantizer == AVIF_QUANTIZER_LOSSLESS &&
options.minQuantizerAlpha == AVIF_QUANTIZER_LOSSLESS &&
options.maxQuantizerAlpha == AVIF_QUANTIZER_LOSSLESS && format == AVIF_PIXEL_FORMAT_YUV444) {
image->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_IDENTITY;
} else {
image->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_BT601;
image->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_BT709;
}
uint8_t* rgba = reinterpret_cast<uint8_t*>(const_cast<char*>(buffer.data()));
uint8_t* rgba = (uint8_t*)buffer.c_str();
avifRGBImage srcRGB;
avifRGBImageSetDefaults(&srcRGB, image);
@@ -77,44 +69,14 @@ val encode(std::string buffer, int width, int height, AvifOptions options) {
avifImageRGBToYUV(image, &srcRGB);
avifEncoder* encoder = avifEncoderCreate();
if (lossless) {
encoder->minQuantizer = AVIF_QUANTIZER_LOSSLESS;
encoder->maxQuantizer = AVIF_QUANTIZER_LOSSLESS;
encoder->minQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;
encoder->maxQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;
} else {
encoder->minQuantizer = AVIF_QUANTIZER_BEST_QUALITY;
encoder->maxQuantizer = AVIF_QUANTIZER_WORST_QUALITY;
encoder->minQuantizerAlpha = AVIF_QUANTIZER_BEST_QUALITY;
encoder->maxQuantizerAlpha = AVIF_QUANTIZER_WORST_QUALITY;
avifEncoderSetCodecSpecificOption(encoder, "end-usage", "q");
avifEncoderSetCodecSpecificOption(encoder, "cq-level", std::to_string(options.cqLevel).c_str());
avifEncoderSetCodecSpecificOption(encoder, "sharpness",
std::to_string(options.sharpness).c_str());
if (options.cqAlphaLevel != -1) {
avifEncoderSetCodecSpecificOption(encoder, "alpha:cq-level",
std::to_string(options.cqAlphaLevel).c_str());
}
if (options.targetSsim) {
avifEncoderSetCodecSpecificOption(encoder, "tune", "ssim");
}
if (options.chromaDeltaQ) {
avifEncoderSetCodecSpecificOption(encoder, "enable-chroma-deltaq", "1");
}
avifEncoderSetCodecSpecificOption(encoder, "color:denoise-noise-level",
std::to_string(options.denoiseLevel).c_str());
}
encoder->maxThreads = emscripten_num_logical_cores();
encoder->minQuantizer = options.minQuantizer;
encoder->maxQuantizer = options.maxQuantizer;
encoder->minQuantizerAlpha = options.minQuantizerAlpha;
encoder->maxQuantizerAlpha = options.maxQuantizerAlpha;
encoder->tileRowsLog2 = options.tileRowsLog2;
encoder->tileColsLog2 = options.tileColsLog2;
encoder->speed = options.speed;
avifResult encodeResult = avifEncoderWrite(encoder, image, &output);
auto js_result = val::null();
if (encodeResult == AVIF_RESULT_OK) {
@@ -129,15 +91,13 @@ val encode(std::string buffer, int width, int height, AvifOptions options) {
EMSCRIPTEN_BINDINGS(my_module) {
value_object<AvifOptions>("AvifOptions")
.field("cqLevel", &AvifOptions::cqLevel)
.field("cqAlphaLevel", &AvifOptions::cqAlphaLevel)
.field("minQuantizer", &AvifOptions::minQuantizer)
.field("maxQuantizer", &AvifOptions::maxQuantizer)
.field("minQuantizerAlpha", &AvifOptions::minQuantizerAlpha)
.field("maxQuantizerAlpha", &AvifOptions::maxQuantizerAlpha)
.field("tileRowsLog2", &AvifOptions::tileRowsLog2)
.field("tileColsLog2", &AvifOptions::tileColsLog2)
.field("speed", &AvifOptions::speed)
.field("chromaDeltaQ", &AvifOptions::chromaDeltaQ)
.field("sharpness", &AvifOptions::sharpness)
.field("targetSsim", &AvifOptions::targetSsim)
.field("denoiseLevel", &AvifOptions::denoiseLevel)
.field("subsample", &AvifOptions::subsample);
function("encode", &encode);

View File

@@ -1,14 +1,12 @@
export interface EncodeOptions {
cqLevel: number;
denoiseLevel: number;
cqAlphaLevel: number;
minQuantizer: number;
maxQuantizer: number;
minQuantizerAlpha: number;
maxQuantizerAlpha: number;
tileRowsLog2: number;
tileColsLog2: number;
speed: number;
subsample: number;
chromaDeltaQ: boolean;
sharpness: number;
targetSsim: boolean;
}
export interface AVIFModule extends EmscriptenWasm.Module {

View File

@@ -28,29 +28,29 @@ function cb(a,b){0<=a.indexOf("j")||y("Assertion failed: getDynCaller should onl
function U(a,b){a=R(a);var c=-1!=a.indexOf("j")?cb(a,b):I.get(b);"function"!==typeof c&&S("unknown function pointer with signature "+a+": "+b);return c}var db=void 0;function eb(a){a=fb(a);var b=R(a);V(a);return b}function gb(a,b){function c(g){e[g]||P[g]||(La[g]?La[g].forEach(c):(d.push(g),e[g]=!0))}var d=[],e={};b.forEach(c);throw new db(a+": "+d.map(eb).join([", "]));}
function hb(a,b,c){switch(b){case 0:return c?function(d){return ra[d]}:function(d){return C[d]};case 1:return c?function(d){return E[d>>1]}:function(d){return D[d>>1]};case 2:return c?function(d){return F[d>>2]}:function(d){return H[d>>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 c=P[a];void 0===c&&S(b+" has unknown type "+eb(a));return c}var lb={};
Pa=f.InternalError=Oa("InternalError");for(var mb=Array(256),nb=0;256>nb;++nb)mb[nb]=String.fromCharCode(nb);Sa=mb;Ta=f.BindingError=Oa("BindingError");f.count_emval_handles=function(){for(var a=0,b=5;b<T.length;++b)void 0!==T[b]&&++a;return a};f.get_first_emval=function(){for(var a=5;a<T.length;++a)if(void 0!==T[a])return T[a];return null};db=f.UnboundTypeError=Oa("UnboundTypeError");xa.push({ia:function(){ob()}});
var yb={N:function(){},t:function(){return 0},G:function(){return 0},H:function(){},A:function(a){var b=Ia[a];delete Ia[a];var c=b.na,d=b.oa,e=b.fa,g=e.map(function(k){return k.la}).concat(e.map(function(k){return k.qa}));Qa([a],g,function(k){var h={};e.forEach(function(n,l){var m=k[l],p=n.ja,r=n.ka,z=k[l+e.length],q=n.pa,fa=n.ra;h[n.ha]={read:function(A){return m.fromWireType(p(r,A))},write:function(A,J){var X=[];q(fa,A,z.toWireType(X,J));Ja(X)}}});return[{name:b.name,fromWireType:function(n){var l=
{},m;for(m in h)l[m]=h[m].read(n);d(n);return l},toWireType:function(n,l){for(var m in h)if(!(m in l))throw new TypeError('Missing field: "'+m+'"');var p=c();for(m in h)h[m].write(p,l[m]);null!==n&&n.push(d,p);return p},argPackAdvance:8,readValueFromPointer:Ka,ca:d}]})},J:function(a,b,c,d,e){var g=Ra(c);b=R(b);Q(a,{name:b,fromWireType:function(k){return!!k},toWireType:function(k,h){return h?d:e},argPackAdvance:8,readValueFromPointer:function(k){if(1===c)var h=ra;else if(2===c)h=E;else if(4===c)h=
F;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(h[k>>g])},ca:null})},I:function(a,b){b=R(b);Q(a,{name:b,fromWireType:function(c){var d=T[c].value;Va(c);return d},toWireType:function(c,d){return Wa(d)},argPackAdvance:8,readValueFromPointer:Ka,ca:null})},w:function(a,b,c){c=Ra(c);b=R(b);Q(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){if("number"!==typeof e&&"boolean"!==typeof e)throw new TypeError('Cannot convert "'+Xa(e)+'" to '+this.name);
return e},argPackAdvance:8,readValueFromPointer:Ya(b,c),ca:null})},z:function(a,b,c,d,e,g){var k=bb(b,c);a=R(a);e=U(d,e);ab(a,function(){gb("Cannot call "+a+" due to unbound types",k)},b-1);Qa([],k,function(h){var n=a,l=a;h=[h[0],null].concat(h.slice(1));var m=e,p=h.length;2>p&&S("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var r=null!==h[1]&&!1,z=!1,q=1;q<h.length;++q)if(null!==h[q]&&void 0===h[q].ca){z=!0;break}var fa="void"!==h[0].name,A="",J="";for(q=0;q<
p-2;++q)A+=(0!==q?", ":"")+"arg"+q,J+=(0!==q?", ":"")+"arg"+q+"Wired";l="return function "+Ma(l)+"("+A+") {\nif (arguments.length !== "+(p-2)+") {\nthrowBindingError('function "+l+" called with ' + arguments.length + ' arguments, expected "+(p-2)+" args!');\n}\n";z&&(l+="var destructors = [];\n");var X=z?"destructors":"null";A="throwBindingError invoker fn runDestructors retType classParam".split(" ");m=[S,m,g,Ja,h[0],h[1]];r&&(l+="var thisWired = classParam.toWireType("+X+", this);\n");for(q=0;q<
p-2;++q)l+="var arg"+q+"Wired = argType"+q+".toWireType("+X+", arg"+q+"); // "+h[q+2].name+"\n",A.push("argType"+q),m.push(h[q+2]);r&&(J="thisWired"+(0<J.length?", ":"")+J);l+=(fa?"var rv = ":"")+"invoker(fn"+(0<J.length?", ":"")+J+");\n";if(z)l+="runDestructors(destructors);\n";else for(q=r?1:2;q<h.length;++q)p=1===q?"thisWired":"arg"+(q-2)+"Wired",null!==h[q].ca&&(l+=p+"_dtor("+p+"); // "+h[q].name+"\n",A.push(p+"_dtor"),m.push(h[q].ca));fa&&(l+="var ret = retType.fromWireType(rv);\nreturn ret;\n");
A.push(l+"}\n");h=Za(A).apply(null,m);q=b-1;if(!f.hasOwnProperty(n))throw new Pa("Replacing nonexistant public symbol");void 0!==f[n].ba&&void 0!==q?f[n].ba[q]=h:(f[n]=h,f[n].ga=q);return[]})},j:function(a,b,c,d,e){function g(l){return l}b=R(b);-1===e&&(e=4294967295);var k=Ra(c);if(0===d){var h=32-8*c;g=function(l){return l<<h>>>h}}var n=-1!=b.indexOf("unsigned");Q(a,{name:b,fromWireType:g,toWireType:function(l,m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+
var yb={N:function(){},t:function(){return 0},G:function(){return 0},H:function(){},z:function(a){var b=Ia[a];delete Ia[a];var c=b.na,d=b.oa,e=b.fa,g=e.map(function(k){return k.la}).concat(e.map(function(k){return k.qa}));Qa([a],g,function(k){var h={};e.forEach(function(n,l){var m=k[l],q=n.ja,r=n.ka,z=k[l+e.length],p=n.pa,fa=n.ra;h[n.ha]={read:function(A){return m.fromWireType(q(r,A))},write:function(A,J){var X=[];p(fa,A,z.toWireType(X,J));Ja(X)}}});return[{name:b.name,fromWireType:function(n){var l=
{},m;for(m in h)l[m]=h[m].read(n);d(n);return l},toWireType:function(n,l){for(var m in h)if(!(m in l))throw new TypeError('Missing field: "'+m+'"');var q=c();for(m in h)h[m].write(q,l[m]);null!==n&&n.push(d,q);return q},argPackAdvance:8,readValueFromPointer:Ka,ca:d}]})},J:function(a,b,c,d,e){var g=Ra(c);b=R(b);Q(a,{name:b,fromWireType:function(k){return!!k},toWireType:function(k,h){return h?d:e},argPackAdvance:8,readValueFromPointer:function(k){if(1===c)var h=ra;else if(2===c)h=E;else if(4===c)h=
F;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(h[k>>g])},ca:null})},I:function(a,b){b=R(b);Q(a,{name:b,fromWireType:function(c){var d=T[c].value;Va(c);return d},toWireType:function(c,d){return Wa(d)},argPackAdvance:8,readValueFromPointer:Ka,ca:null})},v:function(a,b,c){c=Ra(c);b=R(b);Q(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){if("number"!==typeof e&&"boolean"!==typeof e)throw new TypeError('Cannot convert "'+Xa(e)+'" to '+this.name);
return e},argPackAdvance:8,readValueFromPointer:Ya(b,c),ca:null})},y:function(a,b,c,d,e,g){var k=bb(b,c);a=R(a);e=U(d,e);ab(a,function(){gb("Cannot call "+a+" due to unbound types",k)},b-1);Qa([],k,function(h){var n=a,l=a;h=[h[0],null].concat(h.slice(1));var m=e,q=h.length;2>q&&S("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var r=null!==h[1]&&!1,z=!1,p=1;p<h.length;++p)if(null!==h[p]&&void 0===h[p].ca){z=!0;break}var fa="void"!==h[0].name,A="",J="";for(p=0;p<
q-2;++p)A+=(0!==p?", ":"")+"arg"+p,J+=(0!==p?", ":"")+"arg"+p+"Wired";l="return function "+Ma(l)+"("+A+") {\nif (arguments.length !== "+(q-2)+") {\nthrowBindingError('function "+l+" called with ' + arguments.length + ' arguments, expected "+(q-2)+" args!');\n}\n";z&&(l+="var destructors = [];\n");var X=z?"destructors":"null";A="throwBindingError invoker fn runDestructors retType classParam".split(" ");m=[S,m,g,Ja,h[0],h[1]];r&&(l+="var thisWired = classParam.toWireType("+X+", this);\n");for(p=0;p<
q-2;++p)l+="var arg"+p+"Wired = argType"+p+".toWireType("+X+", arg"+p+"); // "+h[p+2].name+"\n",A.push("argType"+p),m.push(h[p+2]);r&&(J="thisWired"+(0<J.length?", ":"")+J);l+=(fa?"var rv = ":"")+"invoker(fn"+(0<J.length?", ":"")+J+");\n";if(z)l+="runDestructors(destructors);\n";else for(p=r?1:2;p<h.length;++p)q=1===p?"thisWired":"arg"+(p-2)+"Wired",null!==h[p].ca&&(l+=q+"_dtor("+q+"); // "+h[p].name+"\n",A.push(q+"_dtor"),m.push(h[p].ca));fa&&(l+="var ret = retType.fromWireType(rv);\nreturn ret;\n");
A.push(l+"}\n");h=Za(A).apply(null,m);p=b-1;if(!f.hasOwnProperty(n))throw new Pa("Replacing nonexistant public symbol");void 0!==f[n].ba&&void 0!==p?f[n].ba[p]=h:(f[n]=h,f[n].ga=p);return[]})},i:function(a,b,c,d,e){function g(l){return l}b=R(b);-1===e&&(e=4294967295);var k=Ra(c);if(0===d){var h=32-8*c;g=function(l){return l<<h>>>h}}var n=-1!=b.indexOf("unsigned");Q(a,{name:b,fromWireType:g,toWireType:function(l,m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+
Xa(m)+'" to '+this.name);if(m<d||m>e)throw new TypeError('Passing a number "'+Xa(m)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+e+"]!");return n?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:hb(b,k,0!==d),ca:null})},f:function(a,b,c){function d(g){g>>=2;var k=H;return new e(G,k[g+1],k[g])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=R(c);Q(a,{name:c,fromWireType:d,argPackAdvance:8,
readValueFromPointer:d},{ma:!0})},x:function(a,b){b=R(b);var c="std::string"===b;Q(a,{name:b,fromWireType:function(d){var e=H[d>>2];if(c)for(var g=d+4,k=0;k<=e;++k){var h=d+4+k;if(k==e||0==C[h]){if(g){for(var n=g+(h-g),l=g;!(l>=n)&&C[l];)++l;g=ia.decode(C.subarray(g,l))}else g="";if(void 0===m)var m=g;else m+=String.fromCharCode(0),m+=g;g=h+1}}else{m=Array(e);for(k=0;k<e;++k)m[k]=String.fromCharCode(C[d+4+k]);m=m.join("")}V(d);return m},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));
var g="string"===typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||S("Cannot pass non-string to std::string");var k=(c&&g?function(){for(var l=0,m=0;m<e.length;++m){var p=e.charCodeAt(m);55296<=p&&57343>=p&&(p=65536+((p&1023)<<10)|e.charCodeAt(++m)&1023);127>=p?++l:l=2047>=p?l+2:65535>=p?l+3:l+4}return l}:function(){return e.length})(),h=pb(4+k+1);H[h>>2]=k;if(c&&g)ja(e,h+4,k+1);else if(g)for(g=0;g<k;++g){var n=e.charCodeAt(g);255<n&&(V(h),S("String has UTF-16 code units that do not fit in 8 bits"));
C[h+4+g]=n}else for(g=0;g<k;++g)C[h+4+g]=e[g];null!==d&&d.push(V,h);return h},argPackAdvance:8,readValueFromPointer:Ka,ca:function(d){V(d)}})},q:function(a,b,c){c=R(c);if(2===b){var d=la;var e=ma;var g=na;var k=function(){return D};var h=1}else 4===b&&(d=oa,e=pa,g=qa,k=function(){return H},h=2);Q(a,{name:c,fromWireType:function(n){for(var l=H[n>>2],m=k(),p,r=n+4,z=0;z<=l;++z){var q=n+4+z*b;if(z==l||0==m[q>>h])r=d(r,q-r),void 0===p?p=r:(p+=String.fromCharCode(0),p+=r),r=q+b}V(n);return p},toWireType:function(n,
l){"string"!==typeof l&&S("Cannot pass non-string to C++ string type "+c);var m=g(l),p=pb(4+m+b);H[p>>2]=m>>h;e(l,p+4,m+b);null!==n&&n.push(V,p);return p},argPackAdvance:8,readValueFromPointer:Ka,ca:function(n){V(n)}})},B:function(a,b,c,d,e,g){Ia[a]={name:R(b),na:U(c,d),oa:U(e,g),fa:[]}},g:function(a,b,c,d,e,g,k,h,n,l){Ia[a].fa.push({ha:R(b),la:c,ja:U(d,e),ka:g,qa:k,pa:U(h,n),ra:l})},K:function(a,b){b=R(b);Q(a,{ua:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},l:Va,
M:function(a){if(0===a)return Wa(jb());var b=ib[a];a=void 0===b?R(a):b;return Wa(jb()[a])},y:function(a){4<a&&(T[a].ea+=1)},D:function(a,b,c,d){a||S("Cannot use deleted val. handle = "+a);a=T[a].value;var e=lb[b];if(!e){e="";for(var g=0;g<b;++g)e+=(0!==g?", ":"")+"arg"+g;var k="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)k+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+
g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";e=(new Function("requireRegisteredType","Module","__emval_register",k+("var obj = new constructor("+e+");\nreturn __emval_register(obj);\n}\n")))(kb,f,Wa);lb[b]=e}return e(a,c,d)},i:function(){y()},e:function(a,b){W(a,b||1);throw"longjmp";},E:function(a,b,c){C.copyWithin(a,b,b+c)},k:function(a){a>>>=0;var b=C.length;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,
a,d);0<d%65536&&(d+=65536-d%65536);a:{try{B.grow(Math.min(2147483648,d)-G.byteLength+65535>>>16);ua(B.buffer);var e=1;break a}catch(g){}e=void 0}if(e)return!0}return!1},v:function(){return 0},F:function(a,b,c,d){a=Ha.ta(a);b=Ha.sa(a,b,c);F[d>>2]=b;return 0},C:function(){},u:function(a,b,c,d){for(var e=0,g=0;g<c;g++){for(var k=F[b+8*g>>2],h=F[b+(8*g+4)>>2],n=0;n<h;n++){var l=C[k+n],m=Ga[a];if(0===l||10===l){for(l=0;m[l]&&!(NaN<=l);)++l;l=ia.decode(m.subarray?m.subarray(0,l):new Uint8Array(m.slice(0,
l)));(1===a?da:w)(l);m.length=0}else m.push(l)}e+=h}F[d>>2]=e;return 0},c:function(){return ea|0},s:qb,n:rb,r:sb,o:tb,p:ub,h:vb,d:wb,m:xb,a:B,b:function(a){ea=a|0},L:function(a){var b=Date.now()/1E3|0;a&&(F[a>>2]=b);return b}};
readValueFromPointer:d},{ma:!0})},w:function(a,b){b=R(b);var c="std::string"===b;Q(a,{name:b,fromWireType:function(d){var e=H[d>>2];if(c)for(var g=d+4,k=0;k<=e;++k){var h=d+4+k;if(k==e||0==C[h]){if(g){for(var n=g+(h-g),l=g;!(l>=n)&&C[l];)++l;g=ia.decode(C.subarray(g,l))}else g="";if(void 0===m)var m=g;else m+=String.fromCharCode(0),m+=g;g=h+1}}else{m=Array(e);for(k=0;k<e;++k)m[k]=String.fromCharCode(C[d+4+k]);m=m.join("")}V(d);return m},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));
var g="string"===typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||S("Cannot pass non-string to std::string");var k=(c&&g?function(){for(var l=0,m=0;m<e.length;++m){var q=e.charCodeAt(m);55296<=q&&57343>=q&&(q=65536+((q&1023)<<10)|e.charCodeAt(++m)&1023);127>=q?++l:l=2047>=q?l+2:65535>=q?l+3:l+4}return l}:function(){return e.length})(),h=pb(4+k+1);H[h>>2]=k;if(c&&g)ja(e,h+4,k+1);else if(g)for(g=0;g<k;++g){var n=e.charCodeAt(g);255<n&&(V(h),S("String has UTF-16 code units that do not fit in 8 bits"));
C[h+4+g]=n}else for(g=0;g<k;++g)C[h+4+g]=e[g];null!==d&&d.push(V,h);return h},argPackAdvance:8,readValueFromPointer:Ka,ca:function(d){V(d)}})},p:function(a,b,c){c=R(c);if(2===b){var d=la;var e=ma;var g=na;var k=function(){return D};var h=1}else 4===b&&(d=oa,e=pa,g=qa,k=function(){return H},h=2);Q(a,{name:c,fromWireType:function(n){for(var l=H[n>>2],m=k(),q,r=n+4,z=0;z<=l;++z){var p=n+4+z*b;if(z==l||0==m[p>>h])r=d(r,p-r),void 0===q?q=r:(q+=String.fromCharCode(0),q+=r),r=p+b}V(n);return q},toWireType:function(n,
l){"string"!==typeof l&&S("Cannot pass non-string to C++ string type "+c);var m=g(l),q=pb(4+m+b);H[q>>2]=m>>h;e(l,q+4,m+b);null!==n&&n.push(V,q);return q},argPackAdvance:8,readValueFromPointer:Ka,ca:function(n){V(n)}})},A:function(a,b,c,d,e,g){Ia[a]={name:R(b),na:U(c,d),oa:U(e,g),fa:[]}},j:function(a,b,c,d,e,g,k,h,n,l){Ia[a].fa.push({ha:R(b),la:c,ja:U(d,e),ka:g,qa:k,pa:U(h,n),ra:l})},K:function(a,b){b=R(b);Q(a,{ua:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},m:Va,
M:function(a){if(0===a)return Wa(jb());var b=ib[a];a=void 0===b?R(a):b;return Wa(jb()[a])},x:function(a){4<a&&(T[a].ea+=1)},D:function(a,b,c,d){a||S("Cannot use deleted val. handle = "+a);a=T[a].value;var e=lb[b];if(!e){e="";for(var g=0;g<b;++g)e+=(0!==g?", ":"")+"arg"+g;var k="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)k+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+
g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";e=(new Function("requireRegisteredType","Module","__emval_register",k+("var obj = new constructor("+e+");\nreturn __emval_register(obj);\n}\n")))(kb,f,Wa);lb[b]=e}return e(a,c,d)},h:function(){y()},e:function(a,b){W(a,b||1);throw"longjmp";},E:function(a,b,c){C.copyWithin(a,b,b+c)},k:function(a){a>>>=0;var b=C.length;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,
a,d);0<d%65536&&(d+=65536-d%65536);a:{try{B.grow(Math.min(2147483648,d)-G.byteLength+65535>>>16);ua(B.buffer);var e=1;break a}catch(g){}e=void 0}if(e)return!0}return!1},u:function(){return 0},F:function(a,b,c,d){a=Ha.ta(a);b=Ha.sa(a,b,c);F[d>>2]=b;return 0},B:function(){},s:function(a,b,c,d){for(var e=0,g=0;g<c;g++){for(var k=F[b+8*g>>2],h=F[b+(8*g+4)>>2],n=0;n<h;n++){var l=C[k+n],m=Ga[a];if(0===l||10===l){for(l=0;m[l]&&!(NaN<=l);)++l;l=ia.decode(m.subarray?m.subarray(0,l):new Uint8Array(m.slice(0,
l)));(1===a?da:w)(l);m.length=0}else m.push(l)}e+=h}F[d>>2]=e;return 0},c:function(){return ea|0},r:qb,C:rb,q:sb,l:tb,o:ub,g:vb,d:wb,n:xb,a:B,b:function(a){ea=a|0},L:function(a){var b=Date.now()/1E3|0;a&&(F[a>>2]=b);return b}};
(function(){function a(e){f.asm=e.exports;I=f.asm.O;K--;f.monitorRunDependencies&&f.monitorRunDependencies(K);0==K&&(null!==Ba&&(clearInterval(Ba),Ba=null),L&&(e=L,L=null,e()))}function b(e){a(e.instance)}function c(e){return Fa().then(function(g){return WebAssembly.instantiate(g,d)}).then(e,function(g){w("failed to asynchronously prepare wasm: "+g);y(g)})}var d={a:yb};K++;f.monitorRunDependencies&&f.monitorRunDependencies(K);if(f.instantiateWasm)try{return f.instantiateWasm(d,a)}catch(e){return w("Module.instantiateWasm callback failed with error: "+
e),!1}(function(){return x||"function"!==typeof WebAssembly.instantiateStreaming||Ca()||"function"!==typeof fetch?c(b):fetch(M,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(g){w("wasm streaming compile failed: "+g);w("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ba);return{}})();
var ob=f.___wasm_call_ctors=function(){return(ob=f.___wasm_call_ctors=f.asm.P).apply(null,arguments)},pb=f._malloc=function(){return(pb=f._malloc=f.asm.Q).apply(null,arguments)},V=f._free=function(){return(V=f._free=f.asm.R).apply(null,arguments)},fb=f.___getTypeName=function(){return(fb=f.___getTypeName=f.asm.S).apply(null,arguments)};f.___embind_register_native_and_builtin_types=function(){return(f.___embind_register_native_and_builtin_types=f.asm.T).apply(null,arguments)};
var Y=f.stackSave=function(){return(Y=f.stackSave=f.asm.U).apply(null,arguments)},Z=f.stackRestore=function(){return(Z=f.stackRestore=f.asm.V).apply(null,arguments)},W=f._setThrew=function(){return(W=f._setThrew=f.asm.W).apply(null,arguments)};f.dynCall_jiiiiiiiii=function(){return(f.dynCall_jiiiiiiiii=f.asm.X).apply(null,arguments)};f.dynCall_jiji=function(){return(f.dynCall_jiji=f.asm.Y).apply(null,arguments)};f.dynCall_jiiiiiiii=function(){return(f.dynCall_jiiiiiiii=f.asm.Z).apply(null,arguments)};
f.dynCall_jiiiiii=function(){return(f.dynCall_jiiiiii=f.asm._).apply(null,arguments)};f.dynCall_jiiiii=function(){return(f.dynCall_jiiiii=f.asm.$).apply(null,arguments)};f.dynCall_iiijii=function(){return(f.dynCall_iiijii=f.asm.aa).apply(null,arguments)};function ub(a,b){var c=Y();try{I.get(a)(b)}catch(d){Z(c);if(d!==d+0&&"longjmp"!==d)throw d;W(1,0)}}function wb(a,b,c,d,e){var g=Y();try{I.get(a)(b,c,d,e)}catch(k){Z(g);if(k!==k+0&&"longjmp"!==k)throw k;W(1,0)}}
function vb(a,b,c){var d=Y();try{I.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;W(1,0)}}function tb(a,b,c,d,e,g,k,h,n,l){var m=Y();try{return I.get(a)(b,c,d,e,g,k,h,n,l)}catch(p){Z(m);if(p!==p+0&&"longjmp"!==p)throw p;W(1,0)}}function qb(a,b,c){var d=Y();try{return I.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;W(1,0)}}function rb(a,b,c,d,e){var g=Y();try{return I.get(a)(b,c,d,e)}catch(k){Z(g);if(k!==k+0&&"longjmp"!==k)throw k;W(1,0)}}
function xb(a,b,c,d,e,g,k,h,n,l,m){var p=Y();try{I.get(a)(b,c,d,e,g,k,h,n,l,m)}catch(r){Z(p);if(r!==r+0&&"longjmp"!==r)throw r;W(1,0)}}function sb(a,b,c,d,e,g,k,h,n){var l=Y();try{return I.get(a)(b,c,d,e,g,k,h,n)}catch(m){Z(l);if(m!==m+0&&"longjmp"!==m)throw m;W(1,0)}}var zb;L=function Ab(){zb||Bb();zb||(L=Ab)};
function vb(a,b,c){var d=Y();try{I.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;W(1,0)}}function tb(a,b,c,d,e,g,k,h,n){var l=Y();try{return I.get(a)(b,c,d,e,g,k,h,n)}catch(m){Z(l);if(m!==m+0&&"longjmp"!==m)throw m;W(1,0)}}function qb(a,b,c){var d=Y();try{return I.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;W(1,0)}}function sb(a,b,c,d,e){var g=Y();try{return I.get(a)(b,c,d,e)}catch(k){Z(g);if(k!==k+0&&"longjmp"!==k)throw k;W(1,0)}}
function rb(a,b,c,d){var e=Y();try{return I.get(a)(b,c,d)}catch(g){Z(e);if(g!==g+0&&"longjmp"!==g)throw g;W(1,0)}}function xb(a,b,c,d,e,g,k,h,n,l,m){var q=Y();try{I.get(a)(b,c,d,e,g,k,h,n,l,m)}catch(r){Z(q);if(r!==r+0&&"longjmp"!==r)throw r;W(1,0)}}var zb;L=function Ab(){zb||Bb();zb||(L=Ab)};
function Bb(){function a(){if(!zb&&(zb=!0,f.calledRun=!0,!ha)){N(xa);N(ya);aa(f);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for("function"==typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var b=f.postRun.shift();za.unshift(b)}N(za)}}if(!(0<K)){if(f.preRun)for("function"==typeof f.preRun&&(f.preRun=[f.preRun]);f.preRun.length;)Aa();N(wa);0<K||(f.setStatus?(f.setStatus("Running..."),setTimeout(function(){setTimeout(function(){f.setStatus("")},1);a()},1)):a())}}
f.run=Bb;if(f.preInit)for("function"==typeof f.preInit&&(f.preInit=[f.preInit]);0<f.preInit.length;)f.preInit.pop()();noExitRuntime=!0;Bb();

BIN
codecs/avif/enc/avif_enc.wasm Executable file → Normal file

Binary file not shown.

View File

@@ -16,82 +16,82 @@ function Ca(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&5
function Fa(a){return 2*a.length}function Ga(a,b){for(var c=0,d="";!(c>=b/4);){var f=w()[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023)):d+=String.fromCharCode(f)}return d}function Ha(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<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var h=a.charCodeAt(++f);g=65536+((g&1023)<<10)|h&1023}w()[b>>2]=g;b+=4;if(b+4>c)break}w()[b>>2]=0;return b-d}
function Ia(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var l,ba,ca,da,ha,ia,ja,la,na;function n(a){l=a;z.HEAP8=ba=new Int8Array(a);z.HEAP16=da=new Int16Array(a);z.HEAP32=ia=new Int32Array(a);z.HEAPU8=ca=new Uint8Array(a);z.HEAPU16=ha=new Uint16Array(a);z.HEAPU32=ja=new Uint32Array(a);z.HEAPF32=la=new Float32Array(a);z.HEAPF64=na=new Float64Array(a)}var Ja=z.INITIAL_MEMORY||16777216;
if(B)e=z.wasmMemory,l=z.buffer;else if(z.wasmMemory)e=z.wasmMemory;else if(e=new WebAssembly.Memory({initial:Ja/65536,maximum:32768,shared:!0}),!(e.buffer instanceof SharedArrayBuffer))throw D("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),Error("bad memory");e&&(l=e.buffer);Ja=l.byteLength;n(l);var H,Ka=[],La=[],Ma=[],Na=[];
function Oa(){var a=z.preRun.shift();Ka.unshift(a)}var I=0,Pa=null,Qa=null;z.preloadedImages={};z.preloadedAudios={};function E(a){if(z.onAbort)z.onAbort(a);B&&console.error("Pthread aborting at "+Error().stack);D(a);ya=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");pa(a);throw a;}function Ra(){var a=K;return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}var K="avif_enc_mt.wasm";
function Oa(){var a=z.preRun.shift();Ka.unshift(a)}var J=0,Pa=null,Qa=null;z.preloadedImages={};z.preloadedAudios={};function E(a){if(z.onAbort)z.onAbort(a);B&&console.error("Pthread aborting at "+Error().stack);D(a);ya=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");pa(a);throw a;}function Ra(){var a=K;return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}var K="avif_enc_mt.wasm";
Ra()||(K=sa(K));function Sa(){try{if(wa)return new Uint8Array(wa);if(ta)return ta(K);throw"both async and sync fetching of the wasm failed";}catch(a){E(a)}}function Ta(){return wa||"function"!==typeof fetch?Promise.resolve().then(Sa):fetch(K,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+K+"'";return a.arrayBuffer()}).catch(function(){return Sa()})}
var Va={597269:function(a,b){setTimeout(function(){Ua(a,b)},0)},597347:function(){throw"Canceled!";}};function Wa(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(z);else{var c=b.Eb;"number"===typeof c?void 0===b.eb?H.get(c)():H.get(c)(b.eb):c(void 0===b.eb?null:b.eb)}}}function Xa(a,b,c){var d;-1!=a.indexOf("j")?d=c&&c.length?z["dynCall_"+a].apply(null,[b].concat(c)):z["dynCall_"+a].call(null,b):d=H.get(b).apply(null,c);return d}z.dynCall=Xa;var L=0,Ya=0,Za=0;
function $a(a,b,c){L=a|0;Za=b|0;Ya=c|0}z.registerPthreadPtr=$a;function ab(a,b){if(0>=a||a>aa().length||a&1||0>b)return-28;if(0==b)return 0;2147483647<=b&&(b=Infinity);var c=Atomics.load(w(),M.vb>>2),d=0;if(c==a&&Atomics.compareExchange(w(),M.vb>>2,c,0)==c&&(--b,d=1,0>=b))return 1;a=Atomics.notify(w(),a>>2,b);if(0<=a)return a+d;throw"Atomics.notify returned an unexpected value "+a;}z._emscripten_futex_wake=ab;
function bb(a){if(B)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!a)throw"Internal Error! Null pthread_ptr in cleanupThread!";w()[a+12>>2]=0;(a=M.Ya[a])&&M.jb(a.worker)}
var M={ac:1,kc:{yb:0,zb:0},Wa:[],$a:[],Lb:function(){for(var a=navigator.hardwareConcurrency,b=0;b<a;++b)M.pb()},Mb:function(){M.Ua=N(232);for(var a=0;58>a;++a)y()[M.Ua/4+a]=0;w()[M.Ua+12>>2]=M.Ua;a=M.Ua+156;w()[a>>2]=a;var b=N(512);for(a=0;128>a;++a)y()[b/4+a]=0;Atomics.store(y(),M.Ua+104>>2,b);Atomics.store(y(),M.Ua+40>>2,M.Ua);Atomics.store(y(),M.Ua+44>>2,42);M.tb();$a(M.Ua,!1,1);cb(M.Ua)},Nb:function(){M.tb();oa(z);M.receiveObjectTransfer=M.Sb;M.setThreadStatus=M.Tb;M.threadCancel=M.Yb;M.threadExit=
M.Zb},tb:function(){M.vb=db},Ya:{},kb:[],Tb:function(){},xb:function(){for(;0<M.kb.length;)M.kb.pop()();B&&threadInfoStruct&&eb()},Zb:function(a){var b=L|0;b&&(Atomics.store(y(),b+4>>2,a),Atomics.store(y(),b+0>>2,1),Atomics.store(y(),b+60>>2,1),Atomics.store(y(),b+64>>2,0),M.xb(),ab(b+0,2147483647),$a(0,0,0),threadInfoStruct=0,B&&postMessage({cmd:"exit"}))},Yb:function(){M.xb();Atomics.store(y(),threadInfoStruct+4>>2,-1);Atomics.store(y(),threadInfoStruct+0>>2,1);ab(threadInfoStruct+0,2147483647);
threadInfoStruct=selfThreadId=0;$a(0,0,0);postMessage({cmd:"cancelDone"})},rc:function(){for(var a in M.Ya){var b=M.Ya[a];b&&b.worker&&M.jb(b.worker)}M.Ya={};for(a=0;a<M.Wa.length;++a){var c=M.Wa[a];c.terminate()}M.Wa=[];for(a=0;a<M.$a.length;++a)c=M.$a[a],b=c.Va,M.nb(b),c.terminate();M.$a=[]},nb:function(a){if(a){if(a.threadInfoStruct){var b=w()[a.threadInfoStruct+104>>2];w()[a.threadInfoStruct+104>>2]=0;O(b);O(a.threadInfoStruct)}a.threadInfoStruct=0;a.lb&&a.ab&&O(a.ab);a.ab=0;a.worker&&(a.worker.Va=
null)}},jb:function(a){delete M.Ya[a.Va.Ab];M.Wa.push(a);M.$a.splice(M.$a.indexOf(a),1);M.nb(a.Va);a.Va=void 0},Sb:function(){},ub:function(a,b){a.onmessage=function(c){var d=c.data,f=d.cmd;a.Va&&(M.mb=a.Va.threadInfoStruct);if(d.targetThread&&d.targetThread!=(L|0)){var g=M.Ya[d.qc];g?g.worker.postMessage(c.data,d.transferList):console.error('Internal error! Worker sent a message "'+f+'" to target pthread '+d.targetThread+", but that thread no longer exists!")}else if("processQueuedMainThreadWork"===
f)fb();else if("spawnThread"===f)gb(c.data);else if("cleanupThread"===f)bb(d.thread);else if("killThread"===f){c=d.thread;if(B)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!c)throw"Internal Error! Null pthread_ptr in killThread!";w()[c+12>>2]=0;c=M.Ya[c];c.worker.terminate();M.nb(c);M.$a.splice(M.$a.indexOf(c.worker),1);c.worker.Va=void 0}else if("cancelThread"===f){c=d.thread;if(B)throw"Internal Error! cancelThread() can only ever be called from main application thread!";
if(!c)throw"Internal Error! Null pthread_ptr in cancelThread!";M.Ya[c].worker.postMessage({cmd:"cancel"})}else"loaded"===f?(a.loaded=!0,b&&b(a),a.fb&&(a.fb(),delete a.fb)):"print"===f?ua("Thread "+d.threadId+": "+d.text):"printErr"===f?D("Thread "+d.threadId+": "+d.text):"alert"===f?alert("Thread "+d.threadId+": "+d.text):"exit"===f?a.Va&&Atomics.load(y(),a.Va.Ab+68>>2)&&M.jb(a):"cancelDone"===f?M.jb(a):"objectTransfer"!==f&&("setimmediate"===c.data.target?a.postMessage(c.data):D("worker sent an unknown command "+
f));M.mb=void 0};a.onerror=function(c){D("pthread sent an error! "+c.filename+":"+c.lineno+": "+c.message)};a.postMessage({cmd:"load",urlOrBlob:z.mainScriptUrlOrBlob||_scriptDir,wasmMemory:e,wasmModule:xa})},pb:function(){var a=sa("avif_enc_mt.worker.js");M.Wa.push(new Worker(a))},Fb:function(){0==M.Wa.length&&(M.pb(),M.ub(M.Wa[0]));return 0<M.Wa.length?M.Wa.pop():null},bc:function(a){for(a=performance.now()+a;performance.now()<a;);}};z.establishStackSpace=function(a){P(a)};z.getNoExitRuntime=function(){return noExitRuntime};
var hb;hb=B?function(){return performance.now()-z.__performance_now_clock_drift}:function(){return performance.now()};function ib(a,b){M.kb.push(function(){H.get(a)(b)})}var jb=[null,[],[]],kb={};function lb(a,b,c){return B?Q(1,1,a,b,c):0}function mb(a,b,c){return B?Q(2,1,a,b,c):0}function nb(a,b,c){if(B)return Q(3,1,a,b,c)}var ob={};function pb(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function qb(a){return this.fromWireType(y()[a>>2])}var S={},T={},rb={};
var Va={575933:function(a,b){setTimeout(function(){Ua(a,b)},0)},576011:function(){throw"Canceled!";}};function Wa(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(z);else{var c=b.Db;"number"===typeof c?void 0===b.cb?H.get(c)():H.get(c)(b.cb):c(void 0===b.cb?null:b.cb)}}}function Xa(a,b,c){var d;-1!=a.indexOf("j")?d=c&&c.length?z["dynCall_"+a].apply(null,[b].concat(c)):z["dynCall_"+a].call(null,b):d=H.get(b).apply(null,c);return d}z.dynCall=Xa;var L=0,Ya=0,Za=0;
function $a(a,b,c){L=a|0;Za=b|0;Ya=c|0}z.registerPthreadPtr=$a;function ab(a,b){if(0>=a||a>aa().length||a&1||0>b)return-28;if(0==b)return 0;2147483647<=b&&(b=Infinity);var c=Atomics.load(w(),M.ub>>2),d=0;if(c==a&&Atomics.compareExchange(w(),M.ub>>2,c,0)==c&&(--b,d=1,0>=b))return 1;a=Atomics.notify(w(),a>>2,b);if(0<=a)return a+d;throw"Atomics.notify returned an unexpected value "+a;}z._emscripten_futex_wake=ab;
function bb(a){if(B)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!a)throw"Internal Error! Null pthread_ptr in cleanupThread!";w()[a+12>>2]=0;(a=M.Xa[a])&&M.ib(a.worker)}
var M={$b:1,jc:{xb:0,yb:0},Va:[],Za:[],Kb:function(){for(var a=navigator.hardwareConcurrency,b=0;b<a;++b)M.ob()},Lb:function(){M.Ta=N(232);for(var a=0;58>a;++a)y()[M.Ta/4+a]=0;w()[M.Ta+12>>2]=M.Ta;a=M.Ta+156;w()[a>>2]=a;var b=N(512);for(a=0;128>a;++a)y()[b/4+a]=0;Atomics.store(y(),M.Ta+104>>2,b);Atomics.store(y(),M.Ta+40>>2,M.Ta);Atomics.store(y(),M.Ta+44>>2,42);M.sb();$a(M.Ta,!1,1);cb(M.Ta)},Mb:function(){M.sb();oa(z);M.receiveObjectTransfer=M.Rb;M.setThreadStatus=M.Sb;M.threadCancel=M.Xb;M.threadExit=
M.Yb},sb:function(){M.ub=db},Xa:{},jb:[],Sb:function(){},wb:function(){for(;0<M.jb.length;)M.jb.pop()();B&&threadInfoStruct&&eb()},Yb:function(a){var b=L|0;b&&(Atomics.store(y(),b+4>>2,a),Atomics.store(y(),b+0>>2,1),Atomics.store(y(),b+60>>2,1),Atomics.store(y(),b+64>>2,0),M.wb(),ab(b+0,2147483647),$a(0,0,0),threadInfoStruct=0,B&&postMessage({cmd:"exit"}))},Xb:function(){M.wb();Atomics.store(y(),threadInfoStruct+4>>2,-1);Atomics.store(y(),threadInfoStruct+0>>2,1);ab(threadInfoStruct+0,2147483647);
threadInfoStruct=selfThreadId=0;$a(0,0,0);postMessage({cmd:"cancelDone"})},qc:function(){for(var a in M.Xa){var b=M.Xa[a];b&&b.worker&&M.ib(b.worker)}M.Xa={};for(a=0;a<M.Va.length;++a){var c=M.Va[a];c.terminate()}M.Va=[];for(a=0;a<M.Za.length;++a)c=M.Za[a],b=c.Ua,M.mb(b),c.terminate();M.Za=[]},mb:function(a){if(a){if(a.threadInfoStruct){var b=w()[a.threadInfoStruct+104>>2];w()[a.threadInfoStruct+104>>2]=0;O(b);O(a.threadInfoStruct)}a.threadInfoStruct=0;a.kb&&a.$a&&O(a.$a);a.$a=0;a.worker&&(a.worker.Ua=
null)}},ib:function(a){delete M.Xa[a.Ua.zb];M.Va.push(a);M.Za.splice(M.Za.indexOf(a),1);M.mb(a.Ua);a.Ua=void 0},Rb:function(){},tb:function(a,b){a.onmessage=function(c){var d=c.data,f=d.cmd;a.Ua&&(M.lb=a.Ua.threadInfoStruct);if(d.targetThread&&d.targetThread!=(L|0)){var g=M.Xa[d.pc];g?g.worker.postMessage(c.data,d.transferList):console.error('Internal error! Worker sent a message "'+f+'" to target pthread '+d.targetThread+", but that thread no longer exists!")}else if("processQueuedMainThreadWork"===
f)fb();else if("spawnThread"===f)gb(c.data);else if("cleanupThread"===f)bb(d.thread);else if("killThread"===f){c=d.thread;if(B)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!c)throw"Internal Error! Null pthread_ptr in killThread!";w()[c+12>>2]=0;c=M.Xa[c];c.worker.terminate();M.mb(c);M.Za.splice(M.Za.indexOf(c.worker),1);c.worker.Ua=void 0}else if("cancelThread"===f){c=d.thread;if(B)throw"Internal Error! cancelThread() can only ever be called from main application thread!";
if(!c)throw"Internal Error! Null pthread_ptr in cancelThread!";M.Xa[c].worker.postMessage({cmd:"cancel"})}else"loaded"===f?(a.loaded=!0,b&&b(a),a.eb&&(a.eb(),delete a.eb)):"print"===f?ua("Thread "+d.threadId+": "+d.text):"printErr"===f?D("Thread "+d.threadId+": "+d.text):"alert"===f?alert("Thread "+d.threadId+": "+d.text):"exit"===f?a.Ua&&Atomics.load(y(),a.Ua.zb+68>>2)&&M.ib(a):"cancelDone"===f?M.ib(a):"objectTransfer"!==f&&("setimmediate"===c.data.target?a.postMessage(c.data):D("worker sent an unknown command "+
f));M.lb=void 0};a.onerror=function(c){D("pthread sent an error! "+c.filename+":"+c.lineno+": "+c.message)};a.postMessage({cmd:"load",urlOrBlob:z.mainScriptUrlOrBlob||_scriptDir,wasmMemory:e,wasmModule:xa})},ob:function(){var a=sa("avif_enc_mt.worker.js");M.Va.push(new Worker(a))},Eb:function(){0==M.Va.length&&(M.ob(),M.tb(M.Va[0]));return 0<M.Va.length?M.Va.pop():null},ac:function(a){for(a=performance.now()+a;performance.now()<a;);}};z.establishStackSpace=function(a){P(a)};z.getNoExitRuntime=function(){return noExitRuntime};
var hb;hb=B?function(){return performance.now()-z.__performance_now_clock_drift}:function(){return performance.now()};function ib(a,b){M.jb.push(function(){H.get(a)(b)})}var jb=[null,[],[]],kb={};function lb(a,b,c){return B?Q(1,1,a,b,c):0}function mb(a,b,c){return B?Q(2,1,a,b,c):0}function nb(a,b,c){if(B)return Q(3,1,a,b,c)}var ob={};function pb(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function qb(a){return this.fromWireType(y()[a>>2])}var S={},T={},rb={};
function sb(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 tb(a,b){a=sb(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}
function ub(a){var b=Error,c=tb(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 vb=void 0;
function wb(a,b,c){function d(k){k=c(k);if(k.length!==a.length)throw new vb("Mismatched type converter count");for(var m=0;m<a.length;++m)U(a[m],k[m])}a.forEach(function(k){rb[k]=b});var f=Array(b.length),g=[],h=0;b.forEach(function(k,m){T.hasOwnProperty(k)?f[m]=T[k]:(g.push(k),S.hasOwnProperty(k)||(S[k]=[]),S[k].push(function(){f[m]=T[k];++h;h===g.length&&d(f)}))});0===g.length&&d(f)}
function xb(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var yb=void 0;function V(a){for(var b="";r()[a];)b+=yb[r()[a++]];return b}var zb=void 0;function W(a){throw new zb(a);}
function U(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||W('type "'+d+'" must have a positive integer typeid pointer');if(T.hasOwnProperty(a)){if(c.Jb)return;W("Cannot register type '"+d+"' twice")}T[a]=b;delete rb[a];S.hasOwnProperty(a)&&(b=S[a],delete S[a],b.forEach(function(f){f()}))}var Ab=[],X=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function Bb(a){4<a&&0===--X[a].ob&&(X[a]=void 0,Ab.push(a))}function Cb(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ab.length?Ab.pop():X.length;X[b]={ob:1,value:a};return b}}function Db(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function U(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||W('type "'+d+'" must have a positive integer typeid pointer');if(T.hasOwnProperty(a)){if(c.Ib)return;W("Cannot register type '"+d+"' twice")}T[a]=b;delete rb[a];S.hasOwnProperty(a)&&(b=S[a],delete S[a],b.forEach(function(f){f()}))}var Ab=[],X=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function Bb(a){4<a&&0===--X[a].nb&&(X[a]=void 0,Ab.push(a))}function Cb(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ab.length?Ab.pop():X.length;X[b]={nb:1,value:a};return b}}function Db(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function Eb(a,b){switch(b){case 2:return function(c){return this.fromWireType(ka()[c>>2])};case 3:return function(c){return this.fromWireType(ma()[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Fb(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=tb(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Gb(a,b){var c=z;if(void 0===c[a].Xa){var d=c[a];c[a]=function(){c[a].Xa.hasOwnProperty(arguments.length)||W("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].Xa+")!");return c[a].Xa[arguments.length].apply(this,arguments)};c[a].Xa=[];c[a].Xa[d.Bb]=d}}
function Hb(a,b,c){z.hasOwnProperty(a)?((void 0===c||void 0!==z[a].Xa&&void 0!==z[a].Xa[c])&&W("Cannot register public name '"+a+"' twice"),Gb(a,a),z.hasOwnProperty(c)&&W("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),z[a].Xa[c]=b):(z[a]=b,void 0!==c&&(z[a].nc=c))}function Ib(a,b){for(var c=[],d=0;d<a;d++)c.push(w()[(b>>2)+d]);return c}
function Gb(a,b){var c=z;if(void 0===c[a].Wa){var d=c[a];c[a]=function(){c[a].Wa.hasOwnProperty(arguments.length)||W("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].Wa+")!");return c[a].Wa[arguments.length].apply(this,arguments)};c[a].Wa=[];c[a].Wa[d.Ab]=d}}
function Hb(a,b,c){z.hasOwnProperty(a)?((void 0===c||void 0!==z[a].Wa&&void 0!==z[a].Wa[c])&&W("Cannot register public name '"+a+"' twice"),Gb(a,a),z.hasOwnProperty(c)&&W("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),z[a].Wa[c]=b):(z[a]=b,void 0!==c&&(z[a].mc=c))}function Ib(a,b){for(var c=[],d=0;d<a;d++)c.push(w()[(b>>2)+d]);return c}
function Jb(a,b){za(0<=a.indexOf("j"),"getDynCaller should only be called with i64 sigs");var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];return Xa(a,b,c)}}function Kb(a,b){a=V(a);var c=-1!=a.indexOf("j")?Jb(a,b):H.get(b);"function"!==typeof c&&W("unknown function pointer with signature "+a+": "+b);return c}var Lb=void 0;function Mb(a){a=Nb(a);var b=V(a);O(a);return b}
function Ob(a,b){function c(g){f[g]||T[g]||(rb[g]?rb[g].forEach(c):(d.push(g),f[g]=!0))}var d=[],f={};b.forEach(c);throw new Lb(a+": "+d.map(Mb).join([", "]));}function Pb(a,b,c){switch(b){case 0:return c?function(d){return aa()[d]}:function(d){return r()[d]};case 1:return c?function(d){return u()[d>>1]}:function(d){return fa()[d>>1]};case 2:return c?function(d){return w()[d>>2]}:function(d){return y()[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var Qb={};
function Rb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function Sb(a,b){var c=T[a];void 0===c&&W(b+" has unknown type "+Mb(a));return c}var Tb={};function Ub(a,b,c){if(0>=a||a>aa().length||a&1)return-28;a=Atomics.wait(w(),a>>2,b,c);if("timed-out"===a)return-73;if("not-equal"===a)return-6;if("ok"===a)return 0;throw"Atomics.wait returned an unexpected value "+a;}
function Q(a,b){for(var c=arguments.length-2,d=Y(),f=Vb(8*c),g=f>>3,h=0;h<c;h++)ma()[g+h]=arguments[2+h];c=Wb(a,c,f,b);P(d);return c}var Xb=[],Yb=[],Zb=[0,"undefined"!==typeof document?document:0,"undefined"!==typeof window?window:0];function $b(a){a=2<a?G(a):a;return Zb[a]||("undefined"!==typeof document?document.querySelector(a):void 0)}
function ac(a,b,c){var d=$b(a);if(!d)return-4;d.ib&&(w()[d.ib>>2]=b,w()[d.ib+4>>2]=c);if(d.wb||!d.dc)d.wb&&(d=d.wb),a=!1,d.hb&&d.hb.gb&&(a=d.hb.gb.getParameter(2978),a=0===a[0]&&0===a[1]&&a[2]===d.width&&a[3]===d.height),d.width=b,d.height=c,a&&d.hb.gb.viewport(0,0,b,c);else{if(d.ib){d=w()[d.ib+8>>2];a=a?G(a):"";var f=Y(),g=Vb(12),h=0;if(a){h=Ca(a)+1;var k=N(h);Ba(a,k,h);h=k}w()[g>>2]=h;w()[g+4>>2]=b;w()[g+8>>2]=c;bc(0,d,657457152,0,h,g);P(f);return 1}return-4}return 0}
function ac(a,b,c){var d=$b(a);if(!d)return-4;d.hb&&(w()[d.hb>>2]=b,w()[d.hb+4>>2]=c);if(d.vb||!d.cc)d.vb&&(d=d.vb),a=!1,d.gb&&d.gb.fb&&(a=d.gb.fb.getParameter(2978),a=0===a[0]&&0===a[1]&&a[2]===d.width&&a[3]===d.height),d.width=b,d.height=c,a&&d.gb.fb.viewport(0,0,b,c);else{if(d.hb){d=w()[d.hb+8>>2];a=a?G(a):"";var f=Y(),g=Vb(12),h=0;if(a){h=Ca(a)+1;var k=N(h);Ba(a,k,h);h=k}w()[g>>2]=h;w()[g+4>>2]=b;w()[g+8>>2]=c;bc(0,d,657457152,0,h,g);P(f);return 1}return-4}return 0}
function cc(a,b,c){return B?Q(4,1,a,b,c):ac(a,b,c)}function dc(a){var b=a.getExtension("ANGLE_instanced_arrays");b&&(a.vertexAttribDivisor=function(c,d){b.vertexAttribDivisorANGLE(c,d)},a.drawArraysInstanced=function(c,d,f,g){b.drawArraysInstancedANGLE(c,d,f,g)},a.drawElementsInstanced=function(c,d,f,g,h){b.drawElementsInstancedANGLE(c,d,f,g,h)})}
function ec(a){var b=a.getExtension("OES_vertex_array_object");b&&(a.createVertexArray=function(){return b.createVertexArrayOES()},a.deleteVertexArray=function(c){b.deleteVertexArrayOES(c)},a.bindVertexArray=function(c){b.bindVertexArrayOES(c)},a.isVertexArray=function(c){return b.isVertexArrayOES(c)})}function fc(a){var b=a.getExtension("WEBGL_draw_buffers");b&&(a.drawBuffers=function(c,d){b.drawBuffersWEBGL(c,d)})}
function gc(a){a||(a=hc);if(!a.Kb){a.Kb=!0;var b=a.gb;dc(b);ec(b);fc(b);b.ec=b.getExtension("EXT_disjoint_timer_query");b.mc=b.getExtension("WEBGL_multi_draw");var c="OES_texture_float OES_texture_half_float OES_standard_derivatives OES_vertex_array_object WEBGL_compressed_texture_s3tc WEBGL_depth_texture OES_element_index_uint EXT_texture_filter_anisotropic EXT_frag_depth WEBGL_draw_buffers ANGLE_instanced_arrays OES_texture_float_linear OES_texture_half_float_linear EXT_blend_minmax EXT_shader_texture_lod EXT_texture_norm16 WEBGL_compressed_texture_pvrtc EXT_color_buffer_half_float WEBGL_color_buffer_float EXT_sRGB WEBGL_compressed_texture_etc1 EXT_disjoint_timer_query WEBGL_compressed_texture_etc WEBGL_compressed_texture_astc EXT_color_buffer_float WEBGL_compressed_texture_s3tc_srgb EXT_disjoint_timer_query_webgl2 WEBKIT_WEBGL_compressed_texture_pvrtc".split(" ");
(b.getSupportedExtensions()||[]).forEach(function(d){-1!=c.indexOf(d)&&b.getExtension(d)})}}var hc,ic=["default","low-power","high-performance"];function jc(a){return B?Q(5,1,a):0}function kc(a,b,c,d){if(B)return Q(6,1,a,b,c,d);a=kb.hc(a);b=kb.fc(a,b,c);w()[d>>2]=b;return 0}function lc(a,b,c,d,f){if(B)return Q(7,1,a,b,c,d,f)}
function gc(a){a||(a=hc);if(!a.Jb){a.Jb=!0;var b=a.fb;dc(b);ec(b);fc(b);b.dc=b.getExtension("EXT_disjoint_timer_query");b.lc=b.getExtension("WEBGL_multi_draw");var c="OES_texture_float OES_texture_half_float OES_standard_derivatives OES_vertex_array_object WEBGL_compressed_texture_s3tc WEBGL_depth_texture OES_element_index_uint EXT_texture_filter_anisotropic EXT_frag_depth WEBGL_draw_buffers ANGLE_instanced_arrays OES_texture_float_linear OES_texture_half_float_linear EXT_blend_minmax EXT_shader_texture_lod EXT_texture_norm16 WEBGL_compressed_texture_pvrtc EXT_color_buffer_half_float WEBGL_color_buffer_float EXT_sRGB WEBGL_compressed_texture_etc1 EXT_disjoint_timer_query WEBGL_compressed_texture_etc WEBGL_compressed_texture_astc EXT_color_buffer_float WEBGL_compressed_texture_s3tc_srgb EXT_disjoint_timer_query_webgl2 WEBKIT_WEBGL_compressed_texture_pvrtc".split(" ");
(b.getSupportedExtensions()||[]).forEach(function(d){-1!=c.indexOf(d)&&b.getExtension(d)})}}var hc,ic=["default","low-power","high-performance"];function jc(a){return B?Q(5,1,a):0}function kc(a,b,c,d){if(B)return Q(6,1,a,b,c,d);a=kb.fc(a);b=kb.ec(a,b,c);w()[d>>2]=b;return 0}function lc(a,b,c,d,f){if(B)return Q(7,1,a,b,c,d,f)}
function mc(a,b,c,d){if(B)return Q(8,1,a,b,c,d);for(var f=0,g=0;g<c;g++){for(var h=w()[b+8*g>>2],k=w()[b+(8*g+4)>>2],m=0;m<k;m++){var q=r()[h+m],p=jb[a];0===q||10===q?((1===a?ua:D)(Aa(p,0)),p.length=0):p.push(q)}f+=k}w()[d>>2]=f;return 0}
function gb(a){if(B)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var b=M.Fb();if(void 0!==b.Va)throw"Internal error!";if(!a.bb)throw"Internal error, no pthread ptr!";M.$a.push(b);for(var c=N(512),d=0;128>d;++d)w()[c+4*d>>2]=0;var f=a.ab+a.cb;d=M.Ya[a.bb]={worker:b,ab:a.ab,cb:a.cb,lb:a.lb,Ab:a.bb,threadInfoStruct:a.bb};var g=d.threadInfoStruct>>2;Atomics.store(y(),g,0);Atomics.store(y(),g+1,0);Atomics.store(y(),g+2,0);Atomics.store(y(),g+17,a.qb);Atomics.store(y(),
g+26,c);Atomics.store(y(),g+12,0);Atomics.store(y(),g+10,d.threadInfoStruct);Atomics.store(y(),g+11,42);Atomics.store(y(),g+27,a.cb);Atomics.store(y(),g+21,a.cb);Atomics.store(y(),g+20,f);Atomics.store(y(),g+29,f);Atomics.store(y(),g+30,a.qb);Atomics.store(y(),g+32,a.yb);Atomics.store(y(),g+33,a.zb);c=nc()+40;Atomics.store(y(),g+44,c);b.Va=d;var h={cmd:"run",start_routine:a.Xb,arg:a.eb,threadInfoStruct:a.bb,selfThreadId:a.bb,parentThreadId:a.Pb,stackBase:a.ab,stackSize:a.cb};b.fb=function(){h.time=
performance.now();b.postMessage(h,a.$b)};b.loaded&&(b.fb(),delete b.fb)}function oc(){return L|0}z._pthread_self=oc;
function pc(a,b){if(!a)return D("pthread_join attempted on a null thread pointer!"),71;if(B&&selfThreadId==a)return D("PThread "+a+" is attempting to join to itself!"),16;if(!B&&M.Ua==a)return D("Main thread "+a+" is attempting to join to itself!"),16;if(w()[a+12>>2]!==a)return D("pthread_join attempted on thread "+a+", which does not point to a valid thread, or does not exist anymore!"),71;if(Atomics.load(y(),a+68>>2))return D("Attempted to join thread "+a+", which was already detached!"),28;for(;;){var c=
Atomics.load(y(),a+0>>2);if(1==c)return c=Atomics.load(y(),a+4>>2),b&&(w()[b>>2]=c),Atomics.store(y(),a+68>>2,1),B?postMessage({cmd:"cleanupThread",thread:a}):bb(a),0;if(B&&threadInfoStruct&&!Atomics.load(y(),threadInfoStruct+60>>2)&&2==Atomics.load(y(),threadInfoStruct+0>>2))throw"Canceled!";B||fb();Ub(a+0,c,B?100:1)}}B||M.Lb();vb=z.InternalError=ub("InternalError");for(var qc=Array(256),rc=0;256>rc;++rc)qc[rc]=String.fromCharCode(rc);yb=qc;zb=z.BindingError=ub("BindingError");
z.count_emval_handles=function(){for(var a=0,b=5;b<X.length;++b)void 0!==X[b]&&++a;return a};z.get_first_emval=function(){for(var a=5;a<X.length;++a)if(void 0!==X[a])return X[a];return null};Lb=z.UnboundTypeError=ub("UnboundTypeError");var sc=[null,lb,mb,nb,cc,jc,kc,lc,mc];B||La.push({Eb:function(){tc()}});
var Ec={n:function(a,b,c,d){E("Assertion failed: "+G(a)+", at: "+[b?G(b):"unknown filename",c,d?G(d):"unknown function"])},ga:function(a,b){return ib(a,b)},E:lb,Z:mb,_:nb,M:function(a){var b=ob[a];delete ob[a];var c=b.Qb,d=b.Rb,f=b.sb,g=f.map(function(h){return h.Ib}).concat(f.map(function(h){return h.Vb}));wb([a],g,function(h){var k={};f.forEach(function(m,q){var p=h[q],v=m.Gb,x=m.Hb,F=h[q+f.length],t=m.Ub,qa=m.Wb;k[m.Db]={read:function(J){return p.fromWireType(v(x,J))},write:function(J,R){var ea=
[];t(qa,J,F.toWireType(ea,R));pb(ea)}}});return[{name:b.name,fromWireType:function(m){var q={},p;for(p in k)q[p]=k[p].read(m);d(m);return q},toWireType:function(m,q){for(var p in k)if(!(p in q))throw new TypeError('Missing field: "'+p+'"');var v=c();for(p in k)k[p].write(v,q[p]);null!==m&&m.push(d,v);return v},argPackAdvance:8,readValueFromPointer:qb,Za:d}]})},ba:function(a,b,c,d,f){var g=xb(c);b=V(b);U(a,{name:b,fromWireType:function(h){return!!h},toWireType:function(h,k){return k?d:f},argPackAdvance:8,
readValueFromPointer:function(h){if(1===c)var k=aa();else if(2===c)k=u();else if(4===c)k=w();else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(k[h>>g])},Za:null})},aa:function(a,b){b=V(b);U(a,{name:b,fromWireType:function(c){var d=X[c].value;Bb(c);return d},toWireType:function(c,d){return Cb(d)},argPackAdvance:8,readValueFromPointer:qb,Za:null})},H:function(a,b,c){c=xb(c);b=V(b);U(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==
typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Db(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Eb(b,c),Za:null})},L:function(a,b,c,d,f,g){var h=Ib(b,c);a=V(a);f=Kb(d,f);Hb(a,function(){Ob("Cannot call "+a+" due to unbound types",h)},b-1);wb([],h,function(k){var m=a,q=a;k=[k[0],null].concat(k.slice(1));var p=f,v=k.length;2>v&&W("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var x=null!==k[1]&&!1,F=!1,t=1;t<k.length;++t)if(null!==
k[t]&&void 0===k[t].Za){F=!0;break}var qa="void"!==k[0].name,J="",R="";for(t=0;t<v-2;++t)J+=(0!==t?", ":"")+"arg"+t,R+=(0!==t?", ":"")+"arg"+t+"Wired";q="return function "+sb(q)+"("+J+") {\nif (arguments.length !== "+(v-2)+") {\nthrowBindingError('function "+q+" called with ' + arguments.length + ' arguments, expected "+(v-2)+" args!');\n}\n";F&&(q+="var destructors = [];\n");var ea=F?"destructors":"null";J="throwBindingError invoker fn runDestructors retType classParam".split(" ");p=[W,p,g,pb,k[0],
k[1]];x&&(q+="var thisWired = classParam.toWireType("+ea+", this);\n");for(t=0;t<v-2;++t)q+="var arg"+t+"Wired = argType"+t+".toWireType("+ea+", arg"+t+"); // "+k[t+2].name+"\n",J.push("argType"+t),p.push(k[t+2]);x&&(R="thisWired"+(0<R.length?", ":"")+R);q+=(qa?"var rv = ":"")+"invoker(fn"+(0<R.length?", ":"")+R+");\n";if(F)q+="runDestructors(destructors);\n";else for(t=x?1:2;t<k.length;++t)v=1===t?"thisWired":"arg"+(t-2)+"Wired",null!==k[t].Za&&(q+=v+"_dtor("+v+"); // "+k[t].name+"\n",J.push(v+"_dtor"),
p.push(k[t].Za));qa&&(q+="var ret = retType.fromWireType(rv);\nreturn ret;\n");J.push(q+"}\n");k=Fb(J).apply(null,p);t=b-1;if(!z.hasOwnProperty(m))throw new vb("Replacing nonexistant public symbol");void 0!==z[m].Xa&&void 0!==t?z[m].Xa[t]=k:(z[m]=k,z[m].Bb=t);return[]})},o:function(a,b,c,d,f){function g(q){return q}b=V(b);-1===f&&(f=4294967295);var h=xb(c);if(0===d){var k=32-8*c;g=function(q){return q<<k>>>k}}var m=-1!=b.indexOf("unsigned");U(a,{name:b,fromWireType:g,toWireType:function(q,p){if("number"!==
typeof p&&"boolean"!==typeof p)throw new TypeError('Cannot convert "'+Db(p)+'" to '+this.name);if(p<d||p>f)throw new TypeError('Passing a number "'+Db(p)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return m?p>>>0:p|0},argPackAdvance:8,readValueFromPointer:Pb(b,h,0!==d),Za:null})},l:function(a,b,c){function d(g){g>>=2;var h=y();return new f(l,h[g+1],h[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,
Float64Array][b];c=V(c);U(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{Jb:!0})},I:function(a,b){b=V(b);var c="std::string"===b;U(a,{name:b,fromWireType:function(d){var f=y()[d>>2];if(c)for(var g=d+4,h=0;h<=f;++h){var k=d+4+h;if(h==f||0==r()[k]){g=G(g,k-g);if(void 0===m)var m=g;else m+=String.fromCharCode(0),m+=g;g=k+1}}else{m=Array(f);for(h=0;h<f;++h)m[h]=String.fromCharCode(r()[d+4+h]);m=m.join("")}O(d);return m},toWireType:function(d,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));
function gb(a){if(B)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var b=M.Eb();if(void 0!==b.Ua)throw"Internal error!";if(!a.ab)throw"Internal error, no pthread ptr!";M.Za.push(b);for(var c=N(512),d=0;128>d;++d)w()[c+4*d>>2]=0;var f=a.$a+a.bb;d=M.Xa[a.ab]={worker:b,$a:a.$a,bb:a.bb,kb:a.kb,zb:a.ab,threadInfoStruct:a.ab};var g=d.threadInfoStruct>>2;Atomics.store(y(),g,0);Atomics.store(y(),g+1,0);Atomics.store(y(),g+2,0);Atomics.store(y(),g+17,a.pb);Atomics.store(y(),
g+26,c);Atomics.store(y(),g+12,0);Atomics.store(y(),g+10,d.threadInfoStruct);Atomics.store(y(),g+11,42);Atomics.store(y(),g+27,a.bb);Atomics.store(y(),g+21,a.bb);Atomics.store(y(),g+20,f);Atomics.store(y(),g+29,f);Atomics.store(y(),g+30,a.pb);Atomics.store(y(),g+32,a.xb);Atomics.store(y(),g+33,a.yb);c=nc()+40;Atomics.store(y(),g+44,c);b.Ua=d;var h={cmd:"run",start_routine:a.Wb,arg:a.cb,threadInfoStruct:a.ab,selfThreadId:a.ab,parentThreadId:a.Ob,stackBase:a.$a,stackSize:a.bb};b.eb=function(){h.time=
performance.now();b.postMessage(h,a.Zb)};b.loaded&&(b.eb(),delete b.eb)}function oc(){return L|0}z._pthread_self=oc;
function pc(a,b){if(!a)return D("pthread_join attempted on a null thread pointer!"),71;if(B&&selfThreadId==a)return D("PThread "+a+" is attempting to join to itself!"),16;if(!B&&M.Ta==a)return D("Main thread "+a+" is attempting to join to itself!"),16;if(w()[a+12>>2]!==a)return D("pthread_join attempted on thread "+a+", which does not point to a valid thread, or does not exist anymore!"),71;if(Atomics.load(y(),a+68>>2))return D("Attempted to join thread "+a+", which was already detached!"),28;for(;;){var c=
Atomics.load(y(),a+0>>2);if(1==c)return c=Atomics.load(y(),a+4>>2),b&&(w()[b>>2]=c),Atomics.store(y(),a+68>>2,1),B?postMessage({cmd:"cleanupThread",thread:a}):bb(a),0;if(B&&threadInfoStruct&&!Atomics.load(y(),threadInfoStruct+60>>2)&&2==Atomics.load(y(),threadInfoStruct+0>>2))throw"Canceled!";B||fb();Ub(a+0,c,B?100:1)}}B||M.Kb();vb=z.InternalError=ub("InternalError");for(var qc=Array(256),rc=0;256>rc;++rc)qc[rc]=String.fromCharCode(rc);yb=qc;zb=z.BindingError=ub("BindingError");
z.count_emval_handles=function(){for(var a=0,b=5;b<X.length;++b)void 0!==X[b]&&++a;return a};z.get_first_emval=function(){for(var a=5;a<X.length;++a)if(void 0!==X[a])return X[a];return null};Lb=z.UnboundTypeError=ub("UnboundTypeError");var sc=[null,lb,mb,nb,cc,jc,kc,lc,mc];B||La.push({Db:function(){tc()}});
var Dc={m:function(a,b,c,d){E("Assertion failed: "+G(a)+", at: "+[b?G(b):"unknown filename",c,d?G(d):"unknown function"])},fa:function(a,b){return ib(a,b)},D:lb,Y:mb,Z:nb,K:function(a){var b=ob[a];delete ob[a];var c=b.Pb,d=b.Qb,f=b.rb,g=f.map(function(h){return h.Hb}).concat(f.map(function(h){return h.Ub}));wb([a],g,function(h){var k={};f.forEach(function(m,q){var p=h[q],v=m.Fb,x=m.Gb,F=h[q+f.length],t=m.Tb,qa=m.Vb;k[m.Cb]={read:function(I){return p.fromWireType(v(x,I))},write:function(I,R){var ea=
[];t(qa,I,F.toWireType(ea,R));pb(ea)}}});return[{name:b.name,fromWireType:function(m){var q={},p;for(p in k)q[p]=k[p].read(m);d(m);return q},toWireType:function(m,q){for(var p in k)if(!(p in q))throw new TypeError('Missing field: "'+p+'"');var v=c();for(p in k)k[p].write(v,q[p]);null!==m&&m.push(d,v);return v},argPackAdvance:8,readValueFromPointer:qb,Ya:d}]})},aa:function(a,b,c,d,f){var g=xb(c);b=V(b);U(a,{name:b,fromWireType:function(h){return!!h},toWireType:function(h,k){return k?d:f},argPackAdvance:8,
readValueFromPointer:function(h){if(1===c)var k=aa();else if(2===c)k=u();else if(4===c)k=w();else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(k[h>>g])},Ya:null})},$:function(a,b){b=V(b);U(a,{name:b,fromWireType:function(c){var d=X[c].value;Bb(c);return d},toWireType:function(c,d){return Cb(d)},argPackAdvance:8,readValueFromPointer:qb,Ya:null})},F:function(a,b,c){c=xb(c);b=V(b);U(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&
"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Db(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Eb(b,c),Ya:null})},J:function(a,b,c,d,f,g){var h=Ib(b,c);a=V(a);f=Kb(d,f);Hb(a,function(){Ob("Cannot call "+a+" due to unbound types",h)},b-1);wb([],h,function(k){var m=a,q=a;k=[k[0],null].concat(k.slice(1));var p=f,v=k.length;2>v&&W("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var x=null!==k[1]&&!1,F=!1,t=1;t<k.length;++t)if(null!==
k[t]&&void 0===k[t].Ya){F=!0;break}var qa="void"!==k[0].name,I="",R="";for(t=0;t<v-2;++t)I+=(0!==t?", ":"")+"arg"+t,R+=(0!==t?", ":"")+"arg"+t+"Wired";q="return function "+sb(q)+"("+I+") {\nif (arguments.length !== "+(v-2)+") {\nthrowBindingError('function "+q+" called with ' + arguments.length + ' arguments, expected "+(v-2)+" args!');\n}\n";F&&(q+="var destructors = [];\n");var ea=F?"destructors":"null";I="throwBindingError invoker fn runDestructors retType classParam".split(" ");p=[W,p,g,pb,k[0],
k[1]];x&&(q+="var thisWired = classParam.toWireType("+ea+", this);\n");for(t=0;t<v-2;++t)q+="var arg"+t+"Wired = argType"+t+".toWireType("+ea+", arg"+t+"); // "+k[t+2].name+"\n",I.push("argType"+t),p.push(k[t+2]);x&&(R="thisWired"+(0<R.length?", ":"")+R);q+=(qa?"var rv = ":"")+"invoker(fn"+(0<R.length?", ":"")+R+");\n";if(F)q+="runDestructors(destructors);\n";else for(t=x?1:2;t<k.length;++t)v=1===t?"thisWired":"arg"+(t-2)+"Wired",null!==k[t].Ya&&(q+=v+"_dtor("+v+"); // "+k[t].name+"\n",I.push(v+"_dtor"),
p.push(k[t].Ya));qa&&(q+="var ret = retType.fromWireType(rv);\nreturn ret;\n");I.push(q+"}\n");k=Fb(I).apply(null,p);t=b-1;if(!z.hasOwnProperty(m))throw new vb("Replacing nonexistant public symbol");void 0!==z[m].Wa&&void 0!==t?z[m].Wa[t]=k:(z[m]=k,z[m].Ab=t);return[]})},n:function(a,b,c,d,f){function g(q){return q}b=V(b);-1===f&&(f=4294967295);var h=xb(c);if(0===d){var k=32-8*c;g=function(q){return q<<k>>>k}}var m=-1!=b.indexOf("unsigned");U(a,{name:b,fromWireType:g,toWireType:function(q,p){if("number"!==
typeof p&&"boolean"!==typeof p)throw new TypeError('Cannot convert "'+Db(p)+'" to '+this.name);if(p<d||p>f)throw new TypeError('Passing a number "'+Db(p)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return m?p>>>0:p|0},argPackAdvance:8,readValueFromPointer:Pb(b,h,0!==d),Ya:null})},k:function(a,b,c){function d(g){g>>=2;var h=y();return new f(l,h[g+1],h[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,
Float64Array][b];c=V(c);U(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{Ib:!0})},G:function(a,b){b=V(b);var c="std::string"===b;U(a,{name:b,fromWireType:function(d){var f=y()[d>>2];if(c)for(var g=d+4,h=0;h<=f;++h){var k=d+4+h;if(h==f||0==r()[k]){g=G(g,k-g);if(void 0===m)var m=g;else m+=String.fromCharCode(0),m+=g;g=k+1}}else{m=Array(f);for(h=0;h<f;++h)m[h]=String.fromCharCode(r()[d+4+h]);m=m.join("")}O(d);return m},toWireType:function(d,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));
var g="string"===typeof f;g||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||W("Cannot pass non-string to std::string");var h=(c&&g?function(){return Ca(f)}:function(){return f.length})(),k=N(4+h+1);y()[k>>2]=h;if(c&&g)Ba(f,k+4,h+1);else if(g)for(g=0;g<h;++g){var m=f.charCodeAt(g);255<m&&(O(k),W("String has UTF-16 code units that do not fit in 8 bits"));r()[k+4+g]=m}else for(g=0;g<h;++g)r()[k+4+g]=f[g];null!==d&&d.push(O,k);return k},argPackAdvance:8,readValueFromPointer:qb,
Za:function(d){O(d)}})},z:function(a,b,c){c=V(c);if(2===b){var d=Da;var f=Ea;var g=Fa;var h=function(){return fa()};var k=1}else 4===b&&(d=Ga,f=Ha,g=Ia,h=function(){return y()},k=2);U(a,{name:c,fromWireType:function(m){for(var q=y()[m>>2],p=h(),v,x=m+4,F=0;F<=q;++F){var t=m+4+F*b;if(F==q||0==p[t>>k])x=d(x,t-x),void 0===v?v=x:(v+=String.fromCharCode(0),v+=x),x=t+b}O(m);return v},toWireType:function(m,q){"string"!==typeof q&&W("Cannot pass non-string to C++ string type "+c);var p=g(q),v=N(4+p+b);y()[v>>
2]=p>>k;f(q,v+4,p+b);null!==m&&m.push(O,v);return v},argPackAdvance:8,readValueFromPointer:qb,Za:function(m){O(m)}})},O:function(a,b,c,d,f,g){ob[a]={name:V(b),Qb:Kb(c,d),Rb:Kb(f,g),sb:[]}},m:function(a,b,c,d,f,g,h,k,m,q){ob[a].sb.push({Db:V(b),Ib:c,Gb:Kb(d,f),Hb:g,Vb:h,Ub:Kb(k,m),Wb:q})},ca:function(a,b){b=V(b);U(a,{jc:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},U:function(a,b){if(a==b)postMessage({cmd:"processQueuedMainThreadWork"});else if(B)postMessage({targetThread:a,
cmd:"processThreadQueue"});else{a=(a=M.Ya[a])&&a.worker;if(!a)return;a.postMessage({cmd:"processThreadQueue"})}return 1},v:Bb,$:function(a){if(0===a)return Cb(Rb());var b=Qb[a];a=void 0===b?V(a):b;return Cb(Rb()[a])},K:function(a){4<a&&(X[a].ob+=1)},V:function(a,b,c,d){a||W("Cannot use deleted val. handle = "+a);a=X[a].value;var f=Tb[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var h="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)h+="var argType"+
g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",h+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(Sb,z,Cb);Tb[b]=f}return f(a,c,d)},p:function(){E()},s:function(a,b,c){Yb.length=0;var d;for(c>>=2;d=r()[b++];)(d=105>d)&&c&1&&c++,Yb.push(d?ma()[c++>>1]:w()[c]),++c;
return Va[a].apply(null,Yb)},X:function(){},C:function(){},i:Ub,j:ab,f:hb,u:function(){return Za|0},t:function(){return Ya|0},h:function(a,b){Z(a,b||1);throw"longjmp";},Q:function(a,b,c){r().copyWithin(a,b,b+c)},fa:function(){return navigator.hardwareConcurrency},R:function(a,b,c){Xb.length=b;c>>=3;for(var d=0;d<b;d++)Xb[d]=ma()[c+d];return(0>a?Va[-a-1]:sc[a]).apply(null,Xb)},q:function(a){a>>>=0;var b=r().length;if(a<=b||2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,
a+100663296);d=Math.max(16777216,a,d);0<d%65536&&(d+=65536-d%65536);a:{try{e.grow(Math.min(2147483648,d)-l.byteLength+65535>>>16);n(e.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},S:function(a,b,c){return $b(a)?ac(a,b,c):cc(a,b,c)},g:function(){},T:function(a,b){var c={};b>>=2;c.alpha=!!w()[b];c.depth=!!w()[b+1];c.stencil=!!w()[b+2];c.antialias=!!w()[b+3];c.premultipliedAlpha=!!w()[b+4];c.preserveDrawingBuffer=!!w()[b+5];var d=w()[b+6];c.powerPreference=ic[d];c.failIfMajorPerformanceCaveat=
!!w()[b+7];c.Ob=w()[b+8];c.lc=w()[b+9];c.rb=w()[b+10];c.Cb=w()[b+11];c.oc=w()[b+12];c.pc=w()[b+13];a=$b(a);!a||c.Cb?c=0:(a=a.getContext("webgl",c))?(b=N(8),w()[b+4>>2]=L|0,d={ic:b,attributes:c,version:c.Ob,gb:a},a.canvas&&(a.canvas.hb=d),("undefined"===typeof c.rb||c.rb)&&gc(d),c=b):c=0;return c},G:jc,Y:kc,N:lc,F:mc,c:function(){return va|0},P:function(){M.Mb()},w:uc,B:vc,x:wc,A:xc,y:yc,r:zc,k:Ac,d:Bc,a:e||z.wasmMemory,W:function(a){var b=M.kb.pop();a&&b()},D:ib,J:function(a,b,c,d){if("undefined"===
typeof SharedArrayBuffer)return D("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!a)return D("pthread_create called with a null thread pointer!"),28;var f=[];if(B&&0===f.length)return Cc(687865856,a,b,c,d);var g=0,h=0,k=0,m=0;if(b){var q=w()[b>>2];q+=81920;g=w()[b+8>>2];h=0!==w()[b+12>>2];if(0===w()[b+16>>2]){var p=w()[b+20>>2],v=w()[b+24>>2];k=b+20;m=b+24;var x=M.mb?M.mb:L|0;if(k||m)if(x)if(w()[x+12>>2]!==x)D("pthread_getschedparam attempted on thread "+
x+", which does not point to a valid thread, or does not exist anymore!");else{var F=Atomics.load(y(),x+108+20>>2);x=Atomics.load(y(),x+108+24>>2);k&&(w()[k>>2]=F);m&&(w()[m>>2]=x)}else D("pthread_getschedparam called with a null thread pointer!");k=w()[b+20>>2];m=w()[b+24>>2];w()[b+20>>2]=p;w()[b+24>>2]=v}else k=w()[b+20>>2],m=w()[b+24>>2]}else q=2097152;(b=0==g)?g=Dc(16,q):(g-=q,za(0<g));p=N(232);for(v=0;58>v;++v)y()[(p>>2)+v]=0;w()[a>>2]=p;w()[p+12>>2]=p;a=p+156;w()[a>>2]=a;c={ab:g,cb:q,lb:b,yb:k,
zb:m,qb:h,Xb:c,bb:p,Pb:L|0,eb:d,$b:f};B?(c.cc="spawnThread",postMessage(c,f)):gb(c);return 0},da:function(a,b){return pc(a,b)},e:oc,b:function(a){va=a|0},ea:function(a){var b=Date.now()/1E3|0;a&&(w()[a>>2]=b);return b}};
(function(){function a(f,g){z.asm=f.exports;H=z.asm.ha;xa=g;if(!B){var h=M.Wa.length;M.Wa.forEach(function(k){M.ub(k,function(){if(!--h&&(I--,z.monitorRunDependencies&&z.monitorRunDependencies(I),0==I&&(null!==Pa&&(clearInterval(Pa),Pa=null),Qa))){var m=Qa;Qa=null;m()}})})}}function b(f){a(f.instance,f.module)}function c(f){return Ta().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){D("failed to asynchronously prepare wasm: "+g);E(g)})}var d={a:Ec};B||(za(!B,"addRunDependency cannot be used in a pthread worker"),
I++,z.monitorRunDependencies&&z.monitorRunDependencies(I));if(z.instantiateWasm)try{return z.instantiateWasm(d,a)}catch(f){return D("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return wa||"function"!==typeof WebAssembly.instantiateStreaming||Ra()||"function"!==typeof fetch?c(b):fetch(K,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){D("wasm streaming compile failed: "+g);D("falling back to ArrayBuffer instantiation");
return c(b)})})})().catch(pa);return{}})();var tc=z.___wasm_call_ctors=function(){return(tc=z.___wasm_call_ctors=z.asm.ia).apply(null,arguments)},N=z._malloc=function(){return(N=z._malloc=z.asm.ja).apply(null,arguments)},O=z._free=function(){return(O=z._free=z.asm.ka).apply(null,arguments)},Nb=z.___getTypeName=function(){return(Nb=z.___getTypeName=z.asm.la).apply(null,arguments)};
z.___embind_register_native_and_builtin_types=function(){return(z.___embind_register_native_and_builtin_types=z.asm.ma).apply(null,arguments)};var nc=z._emscripten_get_global_libc=function(){return(nc=z._emscripten_get_global_libc=z.asm.na).apply(null,arguments)};z.___em_js__initPthreadsJS=function(){return(z.___em_js__initPthreadsJS=z.asm.oa).apply(null,arguments)};
var Y=z.stackSave=function(){return(Y=z.stackSave=z.asm.pa).apply(null,arguments)},P=z.stackRestore=function(){return(P=z.stackRestore=z.asm.qa).apply(null,arguments)},Vb=z.stackAlloc=function(){return(Vb=z.stackAlloc=z.asm.ra).apply(null,arguments)},Z=z._setThrew=function(){return(Z=z._setThrew=z.asm.sa).apply(null,arguments)},Dc=z._memalign=function(){return(Dc=z._memalign=z.asm.ta).apply(null,arguments)};
z._emscripten_main_browser_thread_id=function(){return(z._emscripten_main_browser_thread_id=z.asm.ua).apply(null,arguments)};var eb=z.___pthread_tsd_run_dtors=function(){return(eb=z.___pthread_tsd_run_dtors=z.asm.va).apply(null,arguments)},fb=z._emscripten_main_thread_process_queued_calls=function(){return(fb=z._emscripten_main_thread_process_queued_calls=z.asm.wa).apply(null,arguments)};
z._emscripten_current_thread_process_queued_calls=function(){return(z._emscripten_current_thread_process_queued_calls=z.asm.xa).apply(null,arguments)};var cb=z._emscripten_register_main_browser_thread_id=function(){return(cb=z._emscripten_register_main_browser_thread_id=z.asm.ya).apply(null,arguments)},Ua=z._do_emscripten_dispatch_to_thread=function(){return(Ua=z._do_emscripten_dispatch_to_thread=z.asm.za).apply(null,arguments)};
z._emscripten_async_run_in_main_thread=function(){return(z._emscripten_async_run_in_main_thread=z.asm.Aa).apply(null,arguments)};z._emscripten_sync_run_in_main_thread=function(){return(z._emscripten_sync_run_in_main_thread=z.asm.Ba).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_0=function(){return(z._emscripten_sync_run_in_main_thread_0=z.asm.Ca).apply(null,arguments)};
z._emscripten_sync_run_in_main_thread_1=function(){return(z._emscripten_sync_run_in_main_thread_1=z.asm.Da).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_2=function(){return(z._emscripten_sync_run_in_main_thread_2=z.asm.Ea).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_xprintf_varargs=function(){return(z._emscripten_sync_run_in_main_thread_xprintf_varargs=z.asm.Fa).apply(null,arguments)};
z._emscripten_sync_run_in_main_thread_3=function(){return(z._emscripten_sync_run_in_main_thread_3=z.asm.Ga).apply(null,arguments)};var Cc=z._emscripten_sync_run_in_main_thread_4=function(){return(Cc=z._emscripten_sync_run_in_main_thread_4=z.asm.Ha).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_5=function(){return(z._emscripten_sync_run_in_main_thread_5=z.asm.Ia).apply(null,arguments)};
z._emscripten_sync_run_in_main_thread_6=function(){return(z._emscripten_sync_run_in_main_thread_6=z.asm.Ja).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_7=function(){return(z._emscripten_sync_run_in_main_thread_7=z.asm.Ka).apply(null,arguments)};
var Wb=z._emscripten_run_in_main_runtime_thread_js=function(){return(Wb=z._emscripten_run_in_main_runtime_thread_js=z.asm.La).apply(null,arguments)},bc=z.__emscripten_call_on_thread=function(){return(bc=z.__emscripten_call_on_thread=z.asm.Ma).apply(null,arguments)};z._emscripten_tls_init=function(){return(z._emscripten_tls_init=z.asm.Na).apply(null,arguments)};z.dynCall_jiiiiiiiii=function(){return(z.dynCall_jiiiiiiiii=z.asm.Oa).apply(null,arguments)};
z.dynCall_jiji=function(){return(z.dynCall_jiji=z.asm.Pa).apply(null,arguments)};z.dynCall_jiiiiiiii=function(){return(z.dynCall_jiiiiiiii=z.asm.Qa).apply(null,arguments)};z.dynCall_jiiiiii=function(){return(z.dynCall_jiiiiii=z.asm.Ra).apply(null,arguments)};z.dynCall_jiiiii=function(){return(z.dynCall_jiiiii=z.asm.Sa).apply(null,arguments)};z.dynCall_iiijii=function(){return(z.dynCall_iiijii=z.asm.Ta).apply(null,arguments)};var db=z._main_thread_futex=899124;
function zc(a,b){var c=Y();try{H.get(a)(b)}catch(d){P(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}function Bc(a,b,c,d,f){var g=Y();try{H.get(a)(b,c,d,f)}catch(h){P(g);if(h!==h+0&&"longjmp"!==h)throw h;Z(1,0)}}function Ac(a,b,c){var d=Y();try{H.get(a)(b,c)}catch(f){P(d);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}}function yc(a,b,c,d,f,g,h,k,m,q){var p=Y();try{return H.get(a)(b,c,d,f,g,h,k,m,q)}catch(v){P(p);if(v!==v+0&&"longjmp"!==v)throw v;Z(1,0)}}
function vc(a,b,c){var d=Y();try{return H.get(a)(b,c)}catch(f){P(d);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}}function wc(a,b,c,d,f){var g=Y();try{return H.get(a)(b,c,d,f)}catch(h){P(g);if(h!==h+0&&"longjmp"!==h)throw h;Z(1,0)}}function uc(a,b){var c=Y();try{return H.get(a)(b)}catch(d){P(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}function xc(a,b,c,d,f,g,h,k,m){var q=Y();try{return H.get(a)(b,c,d,f,g,h,k,m)}catch(p){P(q);if(p!==p+0&&"longjmp"!==p)throw p;Z(1,0)}}z.PThread=M;z.PThread=M;
z._pthread_self=oc;z.wasmMemory=e;z.ExitStatus=Fc;var Gc;function Fc(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Qa=function Hc(){Gc||Ic();Gc||(Qa=Hc)};
function Ic(){function a(){if(!Gc&&(Gc=!0,z.calledRun=!0,!ya)){Wa(La);B||Wa(Ma);oa(z);if(z.onRuntimeInitialized)z.onRuntimeInitialized();if(!B){if(z.postRun)for("function"==typeof z.postRun&&(z.postRun=[z.postRun]);z.postRun.length;){var b=z.postRun.shift();Na.unshift(b)}Wa(Na)}}}if(!(0<I)){if(!B){if(z.preRun)for("function"==typeof z.preRun&&(z.preRun=[z.preRun]);z.preRun.length;)Oa();Wa(Ka)}0<I||(z.setStatus?(z.setStatus("Running..."),setTimeout(function(){setTimeout(function(){z.setStatus("")},
1);a()},1)):a())}}z.run=Ic;if(z.preInit)for("function"==typeof z.preInit&&(z.preInit=[z.preInit]);0<z.preInit.length;)z.preInit.pop()();B||(noExitRuntime=!0);B?M.Nb():Ic();
Ya:function(d){O(d)}})},x:function(a,b,c){c=V(c);if(2===b){var d=Da;var f=Ea;var g=Fa;var h=function(){return fa()};var k=1}else 4===b&&(d=Ga,f=Ha,g=Ia,h=function(){return y()},k=2);U(a,{name:c,fromWireType:function(m){for(var q=y()[m>>2],p=h(),v,x=m+4,F=0;F<=q;++F){var t=m+4+F*b;if(F==q||0==p[t>>k])x=d(x,t-x),void 0===v?v=x:(v+=String.fromCharCode(0),v+=x),x=t+b}O(m);return v},toWireType:function(m,q){"string"!==typeof q&&W("Cannot pass non-string to C++ string type "+c);var p=g(q),v=N(4+p+b);y()[v>>
2]=p>>k;f(q,v+4,p+b);null!==m&&m.push(O,v);return v},argPackAdvance:8,readValueFromPointer:qb,Ya:function(m){O(m)}})},N:function(a,b,c,d,f,g){ob[a]={name:V(b),Pb:Kb(c,d),Qb:Kb(f,g),rb:[]}},p:function(a,b,c,d,f,g,h,k,m,q){ob[a].rb.push({Cb:V(b),Hb:c,Fb:Kb(d,f),Gb:g,Ub:h,Tb:Kb(k,m),Vb:q})},ba:function(a,b){b=V(b);U(a,{ic:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},T:function(a,b){if(a==b)postMessage({cmd:"processQueuedMainThreadWork"});else if(B)postMessage({targetThread:a,
cmd:"processThreadQueue"});else{a=(a=M.Xa[a])&&a.worker;if(!a)return;a.postMessage({cmd:"processThreadQueue"})}return 1},w:Bb,_:function(a){if(0===a)return Cb(Rb());var b=Qb[a];a=void 0===b?V(a):b;return Cb(Rb()[a])},I:function(a){4<a&&(X[a].nb+=1)},U:function(a,b,c,d){a||W("Cannot use deleted val. handle = "+a);a=X[a].value;var f=Tb[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var h="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)h+="var argType"+
g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",h+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(Sb,z,Cb);Tb[b]=f}return f(a,c,d)},o:function(){E()},t:function(a,b,c){Yb.length=0;var d;for(c>>=2;d=r()[b++];)(d=105>d)&&c&1&&c++,Yb.push(d?ma()[c++>>1]:w()[c]),++c;
return Va[a].apply(null,Yb)},W:function(){},A:function(){},h:Ub,i:ab,f:hb,v:function(){return Za|0},u:function(){return Ya|0},j:function(a,b){Z(a,b||1);throw"longjmp";},P:function(a,b,c){r().copyWithin(a,b,b+c)},ea:function(){return navigator.hardwareConcurrency},Q:function(a,b,c){Xb.length=b;c>>=3;for(var d=0;d<b;d++)Xb[d]=ma()[c+d];return(0>a?Va[-a-1]:sc[a]).apply(null,Xb)},q:function(a){a>>>=0;var b=r().length;if(a<=b||2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,
a+100663296);d=Math.max(16777216,a,d);0<d%65536&&(d+=65536-d%65536);a:{try{e.grow(Math.min(2147483648,d)-l.byteLength+65535>>>16);n(e.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},R:function(a,b,c){return $b(a)?ac(a,b,c):cc(a,b,c)},g:function(){},S:function(a,b){var c={};b>>=2;c.alpha=!!w()[b];c.depth=!!w()[b+1];c.stencil=!!w()[b+2];c.antialias=!!w()[b+3];c.premultipliedAlpha=!!w()[b+4];c.preserveDrawingBuffer=!!w()[b+5];var d=w()[b+6];c.powerPreference=ic[d];c.failIfMajorPerformanceCaveat=
!!w()[b+7];c.Nb=w()[b+8];c.kc=w()[b+9];c.qb=w()[b+10];c.Bb=w()[b+11];c.nc=w()[b+12];c.oc=w()[b+13];a=$b(a);!a||c.Bb?c=0:(a=a.getContext("webgl",c))?(b=N(8),w()[b+4>>2]=L|0,d={hc:b,attributes:c,version:c.Nb,fb:a},a.canvas&&(a.canvas.gb=d),("undefined"===typeof c.qb||c.qb)&&gc(d),c=b):c=0;return c},E:jc,X:kc,L:lc,C:mc,c:function(){return va|0},O:function(){M.Lb()},z:uc,M:vc,y:wc,r:xc,s:yc,l:zc,d:Ac,a:e||z.wasmMemory,V:function(a){var b=M.jb.pop();a&&b()},B:ib,H:function(a,b,c,d){if("undefined"===typeof SharedArrayBuffer)return D("Current environment does not support SharedArrayBuffer, pthreads are not available!"),
6;if(!a)return D("pthread_create called with a null thread pointer!"),28;var f=[];if(B&&0===f.length)return Bc(687865856,a,b,c,d);var g=0,h=0,k=0,m=0;if(b){var q=w()[b>>2];q+=81920;g=w()[b+8>>2];h=0!==w()[b+12>>2];if(0===w()[b+16>>2]){var p=w()[b+20>>2],v=w()[b+24>>2];k=b+20;m=b+24;var x=M.lb?M.lb:L|0;if(k||m)if(x)if(w()[x+12>>2]!==x)D("pthread_getschedparam attempted on thread "+x+", which does not point to a valid thread, or does not exist anymore!");else{var F=Atomics.load(y(),x+108+20>>2);x=Atomics.load(y(),
x+108+24>>2);k&&(w()[k>>2]=F);m&&(w()[m>>2]=x)}else D("pthread_getschedparam called with a null thread pointer!");k=w()[b+20>>2];m=w()[b+24>>2];w()[b+20>>2]=p;w()[b+24>>2]=v}else k=w()[b+20>>2],m=w()[b+24>>2]}else q=2097152;(b=0==g)?g=Cc(16,q):(g-=q,za(0<g));p=N(232);for(v=0;58>v;++v)y()[(p>>2)+v]=0;w()[a>>2]=p;w()[p+12>>2]=p;a=p+156;w()[a>>2]=a;c={$a:g,bb:q,kb:b,xb:k,yb:m,pb:h,Wb:c,ab:p,Ob:L|0,cb:d,Zb:f};B?(c.bc="spawnThread",postMessage(c,f)):gb(c);return 0},ca:function(a,b){return pc(a,b)},e:oc,
b:function(a){va=a|0},da:function(a){var b=Date.now()/1E3|0;a&&(w()[a>>2]=b);return b}};
(function(){function a(f,g){z.asm=f.exports;H=z.asm.ga;xa=g;if(!B){var h=M.Va.length;M.Va.forEach(function(k){M.tb(k,function(){if(!--h&&(J--,z.monitorRunDependencies&&z.monitorRunDependencies(J),0==J&&(null!==Pa&&(clearInterval(Pa),Pa=null),Qa))){var m=Qa;Qa=null;m()}})})}}function b(f){a(f.instance,f.module)}function c(f){return Ta().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){D("failed to asynchronously prepare wasm: "+g);E(g)})}var d={a:Dc};B||(za(!B,"addRunDependency cannot be used in a pthread worker"),
J++,z.monitorRunDependencies&&z.monitorRunDependencies(J));if(z.instantiateWasm)try{return z.instantiateWasm(d,a)}catch(f){return D("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return wa||"function"!==typeof WebAssembly.instantiateStreaming||Ra()||"function"!==typeof fetch?c(b):fetch(K,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){D("wasm streaming compile failed: "+g);D("falling back to ArrayBuffer instantiation");
return c(b)})})})().catch(pa);return{}})();var tc=z.___wasm_call_ctors=function(){return(tc=z.___wasm_call_ctors=z.asm.ha).apply(null,arguments)},N=z._malloc=function(){return(N=z._malloc=z.asm.ia).apply(null,arguments)},O=z._free=function(){return(O=z._free=z.asm.ja).apply(null,arguments)},Nb=z.___getTypeName=function(){return(Nb=z.___getTypeName=z.asm.ka).apply(null,arguments)};
z.___embind_register_native_and_builtin_types=function(){return(z.___embind_register_native_and_builtin_types=z.asm.la).apply(null,arguments)};var nc=z._emscripten_get_global_libc=function(){return(nc=z._emscripten_get_global_libc=z.asm.ma).apply(null,arguments)};z.___em_js__initPthreadsJS=function(){return(z.___em_js__initPthreadsJS=z.asm.na).apply(null,arguments)};
var Y=z.stackSave=function(){return(Y=z.stackSave=z.asm.oa).apply(null,arguments)},P=z.stackRestore=function(){return(P=z.stackRestore=z.asm.pa).apply(null,arguments)},Vb=z.stackAlloc=function(){return(Vb=z.stackAlloc=z.asm.qa).apply(null,arguments)},Z=z._setThrew=function(){return(Z=z._setThrew=z.asm.ra).apply(null,arguments)},Cc=z._memalign=function(){return(Cc=z._memalign=z.asm.sa).apply(null,arguments)};
z._emscripten_main_browser_thread_id=function(){return(z._emscripten_main_browser_thread_id=z.asm.ta).apply(null,arguments)};var eb=z.___pthread_tsd_run_dtors=function(){return(eb=z.___pthread_tsd_run_dtors=z.asm.ua).apply(null,arguments)},fb=z._emscripten_main_thread_process_queued_calls=function(){return(fb=z._emscripten_main_thread_process_queued_calls=z.asm.va).apply(null,arguments)};
z._emscripten_current_thread_process_queued_calls=function(){return(z._emscripten_current_thread_process_queued_calls=z.asm.wa).apply(null,arguments)};var cb=z._emscripten_register_main_browser_thread_id=function(){return(cb=z._emscripten_register_main_browser_thread_id=z.asm.xa).apply(null,arguments)},Ua=z._do_emscripten_dispatch_to_thread=function(){return(Ua=z._do_emscripten_dispatch_to_thread=z.asm.ya).apply(null,arguments)};
z._emscripten_async_run_in_main_thread=function(){return(z._emscripten_async_run_in_main_thread=z.asm.za).apply(null,arguments)};z._emscripten_sync_run_in_main_thread=function(){return(z._emscripten_sync_run_in_main_thread=z.asm.Aa).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_0=function(){return(z._emscripten_sync_run_in_main_thread_0=z.asm.Ba).apply(null,arguments)};
z._emscripten_sync_run_in_main_thread_1=function(){return(z._emscripten_sync_run_in_main_thread_1=z.asm.Ca).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_2=function(){return(z._emscripten_sync_run_in_main_thread_2=z.asm.Da).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_xprintf_varargs=function(){return(z._emscripten_sync_run_in_main_thread_xprintf_varargs=z.asm.Ea).apply(null,arguments)};
z._emscripten_sync_run_in_main_thread_3=function(){return(z._emscripten_sync_run_in_main_thread_3=z.asm.Fa).apply(null,arguments)};var Bc=z._emscripten_sync_run_in_main_thread_4=function(){return(Bc=z._emscripten_sync_run_in_main_thread_4=z.asm.Ga).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_5=function(){return(z._emscripten_sync_run_in_main_thread_5=z.asm.Ha).apply(null,arguments)};
z._emscripten_sync_run_in_main_thread_6=function(){return(z._emscripten_sync_run_in_main_thread_6=z.asm.Ia).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_7=function(){return(z._emscripten_sync_run_in_main_thread_7=z.asm.Ja).apply(null,arguments)};
var Wb=z._emscripten_run_in_main_runtime_thread_js=function(){return(Wb=z._emscripten_run_in_main_runtime_thread_js=z.asm.Ka).apply(null,arguments)},bc=z.__emscripten_call_on_thread=function(){return(bc=z.__emscripten_call_on_thread=z.asm.La).apply(null,arguments)};z._emscripten_tls_init=function(){return(z._emscripten_tls_init=z.asm.Ma).apply(null,arguments)};z.dynCall_jiiiiiiiii=function(){return(z.dynCall_jiiiiiiiii=z.asm.Na).apply(null,arguments)};
z.dynCall_jiji=function(){return(z.dynCall_jiji=z.asm.Oa).apply(null,arguments)};z.dynCall_jiiiiiiii=function(){return(z.dynCall_jiiiiiiii=z.asm.Pa).apply(null,arguments)};z.dynCall_jiiiiii=function(){return(z.dynCall_jiiiiii=z.asm.Qa).apply(null,arguments)};z.dynCall_jiiiii=function(){return(z.dynCall_jiiiii=z.asm.Ra).apply(null,arguments)};z.dynCall_iiijii=function(){return(z.dynCall_iiijii=z.asm.Sa).apply(null,arguments)};var db=z._main_thread_futex=877788;
function yc(a,b){var c=Y();try{H.get(a)(b)}catch(d){P(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}function Ac(a,b,c,d,f){var g=Y();try{H.get(a)(b,c,d,f)}catch(h){P(g);if(h!==h+0&&"longjmp"!==h)throw h;Z(1,0)}}function zc(a,b,c){var d=Y();try{H.get(a)(b,c)}catch(f){P(d);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}}function xc(a,b,c,d,f,g,h,k,m){var q=Y();try{return H.get(a)(b,c,d,f,g,h,k,m)}catch(p){P(q);if(p!==p+0&&"longjmp"!==p)throw p;Z(1,0)}}
function uc(a,b,c){var d=Y();try{return H.get(a)(b,c)}catch(f){P(d);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}}function wc(a,b,c,d,f){var g=Y();try{return H.get(a)(b,c,d,f)}catch(h){P(g);if(h!==h+0&&"longjmp"!==h)throw h;Z(1,0)}}function vc(a,b,c,d){var f=Y();try{return H.get(a)(b,c,d)}catch(g){P(f);if(g!==g+0&&"longjmp"!==g)throw g;Z(1,0)}}z.PThread=M;z.PThread=M;z._pthread_self=oc;z.wasmMemory=e;z.ExitStatus=Ec;var Fc;
function Ec(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Qa=function Gc(){Fc||Hc();Fc||(Qa=Gc)};
function Hc(){function a(){if(!Fc&&(Fc=!0,z.calledRun=!0,!ya)){Wa(La);B||Wa(Ma);oa(z);if(z.onRuntimeInitialized)z.onRuntimeInitialized();if(!B){if(z.postRun)for("function"==typeof z.postRun&&(z.postRun=[z.postRun]);z.postRun.length;){var b=z.postRun.shift();Na.unshift(b)}Wa(Na)}}}if(!(0<J)){if(!B){if(z.preRun)for("function"==typeof z.preRun&&(z.preRun=[z.preRun]);z.preRun.length;)Oa();Wa(Ka)}0<J||(z.setStatus?(z.setStatus("Running..."),setTimeout(function(){setTimeout(function(){z.setStatus("")},
1);a()},1)):a())}}z.run=Hc;if(z.preInit)for("function"==typeof z.preInit&&(z.preInit=[z.preInit]);0<z.preInit.length;)z.preInit.pop()();B||(noExitRuntime=!0);B?M.Mb():Hc();
return avif_enc_mt.ready

BIN
codecs/avif/enc/avif_enc_mt.wasm Executable file → Normal file

Binary file not shown.

View File

@@ -28,29 +28,29 @@ function eb(a,b){0<=a.indexOf("j")||v("Assertion failed: getDynCaller should onl
function U(a,b){a=R(a);var c=-1!=a.indexOf("j")?eb(a,b):H.get(b);"function"!==typeof c&&S("unknown function pointer with signature "+a+": "+b);return c}var fb=void 0;function gb(a){a=hb(a);var b=R(a);W(a);return b}function ib(a,b){function c(g){e[g]||P[g]||(Na[g]?Na[g].forEach(c):(d.push(g),e[g]=!0))}var d=[],e={};b.forEach(c);throw new fb(a+": "+d.map(gb).join([", "]));}
function jb(a,b,c){switch(b){case 0:return c?function(d){return va[d]}:function(d){return B[d]};case 1:return c?function(d){return D[d>>1]}:function(d){return C[d>>1]};case 2:return c?function(d){return E[d>>2]}:function(d){return G[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var kb={};function lb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function mb(a,b){var c=P[a];void 0===c&&S(b+" has unknown type "+gb(a));return c}var nb={};
Ra=f.InternalError=Qa("InternalError");for(var ob=Array(256),pb=0;256>pb;++pb)ob[pb]=String.fromCharCode(pb);Ua=ob;Va=f.BindingError=Qa("BindingError");f.count_emval_handles=function(){for(var a=0,b=5;b<T.length;++b)void 0!==T[b]&&++a;return a};f.get_first_emval=function(){for(var a=5;a<T.length;++a)if(void 0!==T[a])return T[a];return null};fb=f.UnboundTypeError=Qa("UnboundTypeError");Ba.push({ja:function(){qb()}});
var Ab={N:function(){},t:function(){return 0},G:function(){return 0},H:function(){},A:function(a){var b=N[a];delete N[a];var c=b.oa,d=b.pa,e=b.ga,g=e.map(function(h){return h.ma}).concat(e.map(function(h){return h.ra}));Sa([a],g,function(h){var k={};e.forEach(function(l,n){var m=h[n],p=l.ka,r=l.la,z=h[n+e.length],q=l.qa,ea=l.sa;k[l.ia]={read:function(A){return m.fromWireType(p(r,A))},write:function(A,I){var V=[];q(ea,A,z.toWireType(V,I));La(V)}}});return[{name:b.name,fromWireType:function(l){var n=
var Ab={N:function(){},t:function(){return 0},G:function(){return 0},H:function(){},z:function(a){var b=N[a];delete N[a];var c=b.oa,d=b.pa,e=b.ga,g=e.map(function(h){return h.ma}).concat(e.map(function(h){return h.ra}));Sa([a],g,function(h){var k={};e.forEach(function(l,n){var m=h[n],p=l.ka,r=l.la,z=h[n+e.length],q=l.qa,ea=l.sa;k[l.ia]={read:function(A){return m.fromWireType(p(r,A))},write:function(A,I){var V=[];q(ea,A,z.toWireType(V,I));La(V)}}});return[{name:b.name,fromWireType:function(l){var n=
{},m;for(m in k)n[m]=k[m].read(l);d(l);return n},toWireType:function(l,n){for(var m in k)if(!(m in n))throw new TypeError('Missing field: "'+m+'"');var p=c();for(m in k)k[m].write(p,n[m]);null!==l&&l.push(d,p);return p},argPackAdvance:8,readValueFromPointer:Ma,da:d}]})},J:function(a,b,c,d,e){var g=Ta(c);b=R(b);Q(a,{name:b,fromWireType:function(h){return!!h},toWireType:function(h,k){return k?d:e},argPackAdvance:8,readValueFromPointer:function(h){if(1===c)var k=va;else if(2===c)k=D;else if(4===c)k=
E;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(k[h>>g])},da:null})},I:function(a,b){b=R(b);Q(a,{name:b,fromWireType:function(c){var d=T[c].value;Xa(c);return d},toWireType:function(c,d){return Ya(d)},argPackAdvance:8,readValueFromPointer:Ma,da:null})},w:function(a,b,c){c=Ta(c);b=R(b);Q(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){if("number"!==typeof e&&"boolean"!==typeof e)throw new TypeError('Cannot convert "'+Za(e)+'" to '+this.name);
return e},argPackAdvance:8,readValueFromPointer:$a(b,c),da:null})},z:function(a,b,c,d,e,g){var h=db(b,c);a=R(a);e=U(d,e);cb(a,function(){ib("Cannot call "+a+" due to unbound types",h)},b-1);Sa([],h,function(k){var l=[k[0],null].concat(k.slice(1)),n=k=a,m=e,p=l.length;2>p&&S("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var r=null!==l[1]&&!1,z=!1,q=1;q<l.length;++q)if(null!==l[q]&&void 0===l[q].da){z=!0;break}var ea="void"!==l[0].name,A="",I="";for(q=0;q<p-2;++q)A+=
E;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(k[h>>g])},da:null})},I:function(a,b){b=R(b);Q(a,{name:b,fromWireType:function(c){var d=T[c].value;Xa(c);return d},toWireType:function(c,d){return Ya(d)},argPackAdvance:8,readValueFromPointer:Ma,da:null})},v:function(a,b,c){c=Ta(c);b=R(b);Q(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){if("number"!==typeof e&&"boolean"!==typeof e)throw new TypeError('Cannot convert "'+Za(e)+'" to '+this.name);
return e},argPackAdvance:8,readValueFromPointer:$a(b,c),da:null})},y:function(a,b,c,d,e,g){var h=db(b,c);a=R(a);e=U(d,e);cb(a,function(){ib("Cannot call "+a+" due to unbound types",h)},b-1);Sa([],h,function(k){var l=[k[0],null].concat(k.slice(1)),n=k=a,m=e,p=l.length;2>p&&S("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var r=null!==l[1]&&!1,z=!1,q=1;q<l.length;++q)if(null!==l[q]&&void 0===l[q].da){z=!0;break}var ea="void"!==l[0].name,A="",I="";for(q=0;q<p-2;++q)A+=
(0!==q?", ":"")+"arg"+q,I+=(0!==q?", ":"")+"arg"+q+"Wired";n="return function "+Oa(n)+"("+A+") {\nif (arguments.length !== "+(p-2)+") {\nthrowBindingError('function "+n+" called with ' + arguments.length + ' arguments, expected "+(p-2)+" args!');\n}\n";z&&(n+="var destructors = [];\n");var V=z?"destructors":"null";A="throwBindingError invoker fn runDestructors retType classParam".split(" ");m=[S,m,g,La,l[0],l[1]];r&&(n+="var thisWired = classParam.toWireType("+V+", this);\n");for(q=0;q<p-2;++q)n+=
"var arg"+q+"Wired = argType"+q+".toWireType("+V+", arg"+q+"); // "+l[q+2].name+"\n",A.push("argType"+q),m.push(l[q+2]);r&&(I="thisWired"+(0<I.length?", ":"")+I);n+=(ea?"var rv = ":"")+"invoker(fn"+(0<I.length?", ":"")+I+");\n";if(z)n+="runDestructors(destructors);\n";else for(q=r?1:2;q<l.length;++q)p=1===q?"thisWired":"arg"+(q-2)+"Wired",null!==l[q].da&&(n+=p+"_dtor("+p+"); // "+l[q].name+"\n",A.push(p+"_dtor"),m.push(l[q].da));ea&&(n+="var ret = retType.fromWireType(rv);\nreturn ret;\n");A.push(n+
"}\n");l=ab(A).apply(null,m);q=b-1;if(!f.hasOwnProperty(k))throw new Ra("Replacing nonexistant public symbol");void 0!==f[k].ba&&void 0!==q?f[k].ba[q]=l:(f[k]=l,f[k].ha=q);return[]})},j:function(a,b,c,d,e){function g(n){return n}b=R(b);-1===e&&(e=4294967295);var h=Ta(c);if(0===d){var k=32-8*c;g=function(n){return n<<k>>>k}}var l=-1!=b.indexOf("unsigned");Q(a,{name:b,fromWireType:g,toWireType:function(n,m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+Za(m)+'" to '+
"}\n");l=ab(A).apply(null,m);q=b-1;if(!f.hasOwnProperty(k))throw new Ra("Replacing nonexistant public symbol");void 0!==f[k].ba&&void 0!==q?f[k].ba[q]=l:(f[k]=l,f[k].ha=q);return[]})},i:function(a,b,c,d,e){function g(n){return n}b=R(b);-1===e&&(e=4294967295);var h=Ta(c);if(0===d){var k=32-8*c;g=function(n){return n<<k>>>k}}var l=-1!=b.indexOf("unsigned");Q(a,{name:b,fromWireType:g,toWireType:function(n,m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+Za(m)+'" to '+
this.name);if(m<d||m>e)throw new TypeError('Passing a number "'+Za(m)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+e+"]!");return l?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:jb(b,h,0!==d),da:null})},f:function(a,b,c){function d(g){g>>=2;var h=G;return new e(F,h[g+1],h[g])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=R(c);Q(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},
{na:!0})},x:function(a,b){b=R(b);var c="std::string"===b;Q(a,{name:b,fromWireType:function(d){var e=G[d>>2];if(c)for(var g=d+4,h=0;h<=e;++h){var k=d+4+h;if(h==e||0==B[k]){if(g){for(var l=g+(k-g),n=g;!(n>=l)&&B[n];)++n;g=ma.decode(B.subarray(g,n))}else g="";if(void 0===m)var m=g;else m+=String.fromCharCode(0),m+=g;g=k+1}}else{m=Array(e);for(h=0;h<e;++h)m[h]=String.fromCharCode(B[d+4+h]);m=m.join("")}W(d);return m},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var g="string"===
{na:!0})},w:function(a,b){b=R(b);var c="std::string"===b;Q(a,{name:b,fromWireType:function(d){var e=G[d>>2];if(c)for(var g=d+4,h=0;h<=e;++h){var k=d+4+h;if(h==e||0==B[k]){if(g){for(var l=g+(k-g),n=g;!(n>=l)&&B[n];)++n;g=ma.decode(B.subarray(g,n))}else g="";if(void 0===m)var m=g;else m+=String.fromCharCode(0),m+=g;g=k+1}}else{m=Array(e);for(h=0;h<e;++h)m[h]=String.fromCharCode(B[d+4+h]);m=m.join("")}W(d);return m},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var g="string"===
typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||S("Cannot pass non-string to std::string");var h=(c&&g?function(){for(var n=0,m=0;m<e.length;++m){var p=e.charCodeAt(m);55296<=p&&57343>=p&&(p=65536+((p&1023)<<10)|e.charCodeAt(++m)&1023);127>=p?++n:n=2047>=p?n+2:65535>=p?n+3:n+4}return n}:function(){return e.length})(),k=rb(4+h+1);G[k>>2]=h;if(c&&g)na(e,k+4,h+1);else if(g)for(g=0;g<h;++g){var l=e.charCodeAt(g);255<l&&(W(k),S("String has UTF-16 code units that do not fit in 8 bits"));
B[k+4+g]=l}else for(g=0;g<h;++g)B[k+4+g]=e[g];null!==d&&d.push(W,k);return k},argPackAdvance:8,readValueFromPointer:Ma,da:function(d){W(d)}})},q:function(a,b,c){c=R(c);if(2===b){var d=pa;var e=qa;var g=ra;var h=function(){return C};var k=1}else 4===b&&(d=sa,e=ta,g=ua,h=function(){return G},k=2);Q(a,{name:c,fromWireType:function(l){for(var n=G[l>>2],m=h(),p,r=l+4,z=0;z<=n;++z){var q=l+4+z*b;if(z==n||0==m[q>>k])r=d(r,q-r),void 0===p?p=r:(p+=String.fromCharCode(0),p+=r),r=q+b}W(l);return p},toWireType:function(l,
n){"string"!==typeof n&&S("Cannot pass non-string to C++ string type "+c);var m=g(n),p=rb(4+m+b);G[p>>2]=m>>k;e(n,p+4,m+b);null!==l&&l.push(W,p);return p},argPackAdvance:8,readValueFromPointer:Ma,da:function(l){W(l)}})},B:function(a,b,c,d,e,g){N[a]={name:R(b),oa:U(c,d),pa:U(e,g),ga:[]}},g:function(a,b,c,d,e,g,h,k,l,n){N[a].ga.push({ia:R(b),ma:c,ka:U(d,e),la:g,ra:h,qa:U(k,l),sa:n})},K:function(a,b){b=R(b);Q(a,{va:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},l:Xa,
M:function(a){if(0===a)return Ya(lb());var b=kb[a];a=void 0===b?R(a):b;return Ya(lb()[a])},y:function(a){4<a&&(T[a].fa+=1)},D:function(a,b,c,d){a||S("Cannot use deleted val. handle = "+a);a=T[a].value;var e=nb[b];if(!e){e="";for(var g=0;g<b;++g)e+=(0!==g?", ":"")+"arg"+g;var h="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)h+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+
g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";e=(new Function("requireRegisteredType","Module","__emval_register",h+("var obj = new constructor("+e+");\nreturn __emval_register(obj);\n}\n")))(mb,f,Ya);nb[b]=e}return e(a,c,d)},i:function(){v()},e:function(a,b){X(a,b||1);throw"longjmp";},E:function(a,b,c){B.copyWithin(a,b,b+c)},k:function(a){a>>>=0;var b=B.length;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,
a,d);0<d%65536&&(d+=65536-d%65536);a:{try{y.grow(Math.min(2147483648,d)-F.byteLength+65535>>>16);ya(y.buffer);var e=1;break a}catch(g){}e=void 0}if(e)return!0}return!1},v:function(){return 0},F:function(a,b,c,d){a=Ka.ua(a);b=Ka.ta(a,b,c);E[d>>2]=b;return 0},C:function(){},u:function(a,b,c,d){for(var e=0,g=0;g<c;g++){for(var h=E[b+8*g>>2],k=E[b+(8*g+4)>>2],l=0;l<k;l++){var n=B[h+l],m=Ja[a];if(0===n||10===n){n=1===a?ja:w;var p;for(p=0;m[p]&&!(NaN<=p);)++p;p=ma.decode(m.subarray?m.subarray(0,p):new Uint8Array(m.slice(0,
p)));n(p);m.length=0}else m.push(n)}e+=k}E[d>>2]=e;return 0},c:function(){return ka|0},s:sb,n:tb,r:ub,o:vb,p:wb,h:xb,d:yb,m:zb,a:y,b:function(a){ka=a|0},L:function(a){var b=Date.now()/1E3|0;a&&(E[a>>2]=b);return b}};
B[k+4+g]=l}else for(g=0;g<h;++g)B[k+4+g]=e[g];null!==d&&d.push(W,k);return k},argPackAdvance:8,readValueFromPointer:Ma,da:function(d){W(d)}})},p:function(a,b,c){c=R(c);if(2===b){var d=pa;var e=qa;var g=ra;var h=function(){return C};var k=1}else 4===b&&(d=sa,e=ta,g=ua,h=function(){return G},k=2);Q(a,{name:c,fromWireType:function(l){for(var n=G[l>>2],m=h(),p,r=l+4,z=0;z<=n;++z){var q=l+4+z*b;if(z==n||0==m[q>>k])r=d(r,q-r),void 0===p?p=r:(p+=String.fromCharCode(0),p+=r),r=q+b}W(l);return p},toWireType:function(l,
n){"string"!==typeof n&&S("Cannot pass non-string to C++ string type "+c);var m=g(n),p=rb(4+m+b);G[p>>2]=m>>k;e(n,p+4,m+b);null!==l&&l.push(W,p);return p},argPackAdvance:8,readValueFromPointer:Ma,da:function(l){W(l)}})},A:function(a,b,c,d,e,g){N[a]={name:R(b),oa:U(c,d),pa:U(e,g),ga:[]}},j:function(a,b,c,d,e,g,h,k,l,n){N[a].ga.push({ia:R(b),ma:c,ka:U(d,e),la:g,ra:h,qa:U(k,l),sa:n})},K:function(a,b){b=R(b);Q(a,{va:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},m:Xa,
M:function(a){if(0===a)return Ya(lb());var b=kb[a];a=void 0===b?R(a):b;return Ya(lb()[a])},x:function(a){4<a&&(T[a].fa+=1)},D:function(a,b,c,d){a||S("Cannot use deleted val. handle = "+a);a=T[a].value;var e=nb[b];if(!e){e="";for(var g=0;g<b;++g)e+=(0!==g?", ":"")+"arg"+g;var h="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)h+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+
g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";e=(new Function("requireRegisteredType","Module","__emval_register",h+("var obj = new constructor("+e+");\nreturn __emval_register(obj);\n}\n")))(mb,f,Ya);nb[b]=e}return e(a,c,d)},h:function(){v()},e:function(a,b){X(a,b||1);throw"longjmp";},E:function(a,b,c){B.copyWithin(a,b,b+c)},k:function(a){a>>>=0;var b=B.length;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,
a,d);0<d%65536&&(d+=65536-d%65536);a:{try{y.grow(Math.min(2147483648,d)-F.byteLength+65535>>>16);ya(y.buffer);var e=1;break a}catch(g){}e=void 0}if(e)return!0}return!1},u:function(){return 0},F:function(a,b,c,d){a=Ka.ua(a);b=Ka.ta(a,b,c);E[d>>2]=b;return 0},B:function(){},s:function(a,b,c,d){for(var e=0,g=0;g<c;g++){for(var h=E[b+8*g>>2],k=E[b+(8*g+4)>>2],l=0;l<k;l++){var n=B[h+l],m=Ja[a];if(0===n||10===n){n=1===a?ja:w;var p;for(p=0;m[p]&&!(NaN<=p);)++p;p=ma.decode(m.subarray?m.subarray(0,p):new Uint8Array(m.slice(0,
p)));n(p);m.length=0}else m.push(n)}e+=k}E[d>>2]=e;return 0},c:function(){return ka|0},r:sb,C:tb,q:ub,l:vb,o:wb,g:xb,d:yb,n:zb,a:y,b:function(a){ka=a|0},L:function(a){var b=Date.now()/1E3|0;a&&(E[a>>2]=b);return b}};
(function(){function a(e){f.asm=e.exports;H=f.asm.O;J--;f.monitorRunDependencies&&f.monitorRunDependencies(J);0==J&&(null!==Fa&&(clearInterval(Fa),Fa=null),K&&(e=K,K=null,e()))}function b(e){a(e.instance)}function c(e){return Promise.resolve().then(Ia).then(function(g){return WebAssembly.instantiate(g,d)}).then(e,function(g){w("failed to asynchronously prepare wasm: "+g);v(g)})}var d={a:Ab};J++;f.monitorRunDependencies&&f.monitorRunDependencies(J);if(f.instantiateWasm)try{return f.instantiateWasm(d,
a)}catch(e){return w("Module.instantiateWasm callback failed with error: "+e),!1}(function(){return x||"function"!==typeof WebAssembly.instantiateStreaming||Ga()||"function"!==typeof fetch?c(b):fetch(L,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(g){w("wasm streaming compile failed: "+g);w("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ba);return{}})();
var qb=f.___wasm_call_ctors=function(){return(qb=f.___wasm_call_ctors=f.asm.P).apply(null,arguments)},rb=f._malloc=function(){return(rb=f._malloc=f.asm.Q).apply(null,arguments)},W=f._free=function(){return(W=f._free=f.asm.R).apply(null,arguments)},hb=f.___getTypeName=function(){return(hb=f.___getTypeName=f.asm.S).apply(null,arguments)};f.___embind_register_native_and_builtin_types=function(){return(f.___embind_register_native_and_builtin_types=f.asm.T).apply(null,arguments)};
var Y=f.stackSave=function(){return(Y=f.stackSave=f.asm.U).apply(null,arguments)},Z=f.stackRestore=function(){return(Z=f.stackRestore=f.asm.V).apply(null,arguments)},X=f._setThrew=function(){return(X=f._setThrew=f.asm.W).apply(null,arguments)};f.dynCall_jiiiiiiiii=function(){return(f.dynCall_jiiiiiiiii=f.asm.X).apply(null,arguments)};f.dynCall_jiji=function(){return(f.dynCall_jiji=f.asm.Y).apply(null,arguments)};f.dynCall_jiiiiiiii=function(){return(f.dynCall_jiiiiiiii=f.asm.Z).apply(null,arguments)};
f.dynCall_jiiiiii=function(){return(f.dynCall_jiiiiii=f.asm._).apply(null,arguments)};f.dynCall_jiiiii=function(){return(f.dynCall_jiiiii=f.asm.$).apply(null,arguments)};f.dynCall_iiijii=function(){return(f.dynCall_iiijii=f.asm.aa).apply(null,arguments)};function wb(a,b){var c=Y();try{H.get(a)(b)}catch(d){Z(c);if(d!==d+0&&"longjmp"!==d)throw d;X(1,0)}}function yb(a,b,c,d,e){var g=Y();try{H.get(a)(b,c,d,e)}catch(h){Z(g);if(h!==h+0&&"longjmp"!==h)throw h;X(1,0)}}
function xb(a,b,c){var d=Y();try{H.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;X(1,0)}}function vb(a,b,c,d,e,g,h,k,l,n){var m=Y();try{return H.get(a)(b,c,d,e,g,h,k,l,n)}catch(p){Z(m);if(p!==p+0&&"longjmp"!==p)throw p;X(1,0)}}function sb(a,b,c){var d=Y();try{return H.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;X(1,0)}}function tb(a,b,c,d,e){var g=Y();try{return H.get(a)(b,c,d,e)}catch(h){Z(g);if(h!==h+0&&"longjmp"!==h)throw h;X(1,0)}}
function zb(a,b,c,d,e,g,h,k,l,n,m){var p=Y();try{H.get(a)(b,c,d,e,g,h,k,l,n,m)}catch(r){Z(p);if(r!==r+0&&"longjmp"!==r)throw r;X(1,0)}}function ub(a,b,c,d,e,g,h,k,l){var n=Y();try{return H.get(a)(b,c,d,e,g,h,k,l)}catch(m){Z(n);if(m!==m+0&&"longjmp"!==m)throw m;X(1,0)}}var Bb;K=function Cb(){Bb||Db();Bb||(K=Cb)};
function xb(a,b,c){var d=Y();try{H.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;X(1,0)}}function vb(a,b,c,d,e,g,h,k,l){var n=Y();try{return H.get(a)(b,c,d,e,g,h,k,l)}catch(m){Z(n);if(m!==m+0&&"longjmp"!==m)throw m;X(1,0)}}function sb(a,b,c){var d=Y();try{return H.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;X(1,0)}}function ub(a,b,c,d,e){var g=Y();try{return H.get(a)(b,c,d,e)}catch(h){Z(g);if(h!==h+0&&"longjmp"!==h)throw h;X(1,0)}}
function tb(a,b,c,d){var e=Y();try{return H.get(a)(b,c,d)}catch(g){Z(e);if(g!==g+0&&"longjmp"!==g)throw g;X(1,0)}}function zb(a,b,c,d,e,g,h,k,l,n,m){var p=Y();try{H.get(a)(b,c,d,e,g,h,k,l,n,m)}catch(r){Z(p);if(r!==r+0&&"longjmp"!==r)throw r;X(1,0)}}var Bb;K=function Cb(){Bb||Db();Bb||(K=Cb)};
function Db(){function a(){if(!Bb&&(Bb=!0,f.calledRun=!0,!la)){M(Ba);M(Ca);aa(f);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for("function"==typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var b=f.postRun.shift();Da.unshift(b)}M(Da)}}if(!(0<J)){if(f.preRun)for("function"==typeof f.preRun&&(f.preRun=[f.preRun]);f.preRun.length;)Ea();M(Aa);0<J||(f.setStatus?(f.setStatus("Running..."),setTimeout(function(){setTimeout(function(){f.setStatus("")},1);a()},1)):a())}}
f.run=Db;if(f.preInit)for("function"==typeof f.preInit&&(f.preInit=[f.preInit]);0<f.preInit.length;)f.preInit.pop()();noExitRuntime=!0;Db();

Binary file not shown.

177
codecs/hqx/Cargo.lock generated
View File

@@ -4,283 +4,286 @@
name = "bumpalo"
version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820"
[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "console_error_panic_hook"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211"
dependencies = [
"cfg-if",
"wasm-bindgen",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "futures"
version = "0.1.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef"
[[package]]
name = "hqx"
version = "0.1.0"
source = "git+https://github.com/CryZe/wasmboy-rs?tag=v0.1.3#d7cbae67906796928c8e451b186f3c653924beb8"
source = "git+https://github.com/CryZe/wasmboy-rs?tag=v0.1.2#5f19cda24191ccc7c0c4920b6b246b4e242f377c"
dependencies = [
"lazy_static",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "js-sys"
version = "0.3.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52732a3d3ad72c58ad2dc70624f9c17b46ecd0943b9a4f1ee37c4c18c5d983e2"
dependencies = [
"wasm-bindgen",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd7d4bd64732af4bf3a67f367c27df8520ad7e230c5817b8ff485864d80242b9"
[[package]]
name = "log"
version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
dependencies = [
"cfg-if",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "memory_units"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
[[package]]
name = "proc-macro2"
version = "0.4.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
dependencies = [
"unicode-xid 0.1.0",
"unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "proc-macro2"
version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04f5f085b5d71e2188cb8271e5da0161ad52c3f227a661a3c135fdf28e258b12"
dependencies = [
"unicode-xid 0.2.1",
"unicode-xid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "quote"
version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
dependencies = [
"proc-macro2 0.4.30",
"proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "quote"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
dependencies = [
"proc-macro2 1.0.19",
"proc-macro2 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "scoped-tls"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
[[package]]
name = "squooshhqx"
version = "0.1.0"
dependencies = [
"cfg-if",
"console_error_panic_hook",
"hqx",
"wasm-bindgen",
"wasm-bindgen-test",
"wee_alloc",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"hqx 0.1.0 (git+https://github.com/CryZe/wasmboy-rs?tag=v0.1.2)",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-test 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)",
"wee_alloc 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "syn"
version = "1.0.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb7f4c519df8c117855e19dd8cc851e89eb746fe7a73f0157e0d95fdec5369b0"
dependencies = [
"proc-macro2 1.0.19",
"quote 1.0.7",
"unicode-xid 0.2.1",
"proc-macro2 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-xid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unicode-xid"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
[[package]]
name = "unicode-xid"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
[[package]]
name = "wasm-bindgen"
version = "0.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3edbcc9536ab7eababcc6d2374a0b7bfe13a2b6d562c5e07f370456b1a8f33d"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-macro 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89ed2fb8c84bfad20ea66b26a3743f3e7ba8735a69fe7d95118c33ec8fc1244d"
dependencies = [
"bumpalo",
"lazy_static",
"log",
"proc-macro2 1.0.19",
"quote 1.0.7",
"syn",
"wasm-bindgen-shared",
"bumpalo 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
"proc-macro2 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"syn 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-shared 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-futures"
version = "0.3.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83420b37346c311b9ed822af41ec2e82839bfe99867ec6c54e2da43b7538771c"
dependencies = [
"cfg-if",
"futures",
"js-sys",
"wasm-bindgen",
"web-sys",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
"js-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
"web-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb071268b031a64d92fc6cf691715ca5a40950694d8f683c5bb43db7c730929e"
dependencies = [
"quote 1.0.7",
"wasm-bindgen-macro-support",
"quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-macro-support 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf592c807080719d1ff2f245a687cbadb3ed28b2077ed7084b47aba8b691f2c6"
dependencies = [
"proc-macro2 1.0.19",
"quote 1.0.7",
"syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
"proc-macro2 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"syn 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-backend 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-shared 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b6c0220ded549d63860c78c38f3bcc558d1ca3f4efa74942c536ddbbb55e87"
[[package]]
name = "wasm-bindgen-test"
version = "0.2.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2d9693b63a742d481c7f80587e057920e568317b2806988c59cd71618bc26c1"
dependencies = [
"console_error_panic_hook",
"futures",
"js-sys",
"scoped-tls",
"wasm-bindgen",
"wasm-bindgen-futures",
"wasm-bindgen-test-macro",
"console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
"js-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)",
"scoped-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-futures 0.3.27 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-test-macro 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-test-macro"
version = "0.2.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0789dac148a8840bbcf9efe13905463b733fa96543bfbf263790535c11af7ba5"
dependencies = [
"proc-macro2 0.4.30",
"quote 0.6.13",
"proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "web-sys"
version = "0.3.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8be2398f326b7ba09815d0b403095f34dd708579220d099caae89be0b32137b2"
dependencies = [
"js-sys",
"wasm-bindgen",
"js-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wee_alloc"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e"
dependencies = [
"cfg-if",
"libc",
"memory_units",
"winapi",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.73 (registry+https://github.com/rust-lang/crates.io-index)",
"memory_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
"winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[metadata]
"checksum bumpalo 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820"
"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
"checksum console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211"
"checksum futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef"
"checksum hqx 0.1.0 (git+https://github.com/CryZe/wasmboy-rs?tag=v0.1.2)" = "<none>"
"checksum js-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)" = "52732a3d3ad72c58ad2dc70624f9c17b46ecd0943b9a4f1ee37c4c18c5d983e2"
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
"checksum libc 0.2.73 (registry+https://github.com/rust-lang/crates.io-index)" = "bd7d4bd64732af4bf3a67f367c27df8520ad7e230c5817b8ff485864d80242b9"
"checksum log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
"checksum memory_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
"checksum proc-macro2 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)" = "04f5f085b5d71e2188cb8271e5da0161ad52c3f227a661a3c135fdf28e258b12"
"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
"checksum quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
"checksum scoped-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
"checksum syn 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)" = "fb7f4c519df8c117855e19dd8cc851e89eb746fe7a73f0157e0d95fdec5369b0"
"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
"checksum unicode-xid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
"checksum wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "f3edbcc9536ab7eababcc6d2374a0b7bfe13a2b6d562c5e07f370456b1a8f33d"
"checksum wasm-bindgen-backend 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "89ed2fb8c84bfad20ea66b26a3743f3e7ba8735a69fe7d95118c33ec8fc1244d"
"checksum wasm-bindgen-futures 0.3.27 (registry+https://github.com/rust-lang/crates.io-index)" = "83420b37346c311b9ed822af41ec2e82839bfe99867ec6c54e2da43b7538771c"
"checksum wasm-bindgen-macro 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "eb071268b031a64d92fc6cf691715ca5a40950694d8f683c5bb43db7c730929e"
"checksum wasm-bindgen-macro-support 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "cf592c807080719d1ff2f245a687cbadb3ed28b2077ed7084b47aba8b691f2c6"
"checksum wasm-bindgen-shared 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "72b6c0220ded549d63860c78c38f3bcc558d1ca3f4efa74942c536ddbbb55e87"
"checksum wasm-bindgen-test 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)" = "a2d9693b63a742d481c7f80587e057920e568317b2806988c59cd71618bc26c1"
"checksum wasm-bindgen-test-macro 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)" = "0789dac148a8840bbcf9efe13905463b733fa96543bfbf263790535c11af7ba5"
"checksum web-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)" = "8be2398f326b7ba09815d0b403095f34dd708579220d099caae89be0b32137b2"
"checksum wee_alloc 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e"
"checksum winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"

View File

@@ -13,7 +13,7 @@ default = ["console_error_panic_hook", "wee_alloc"]
cfg-if = "0.1.2"
wasm-bindgen = "0.2.38"
# lazy_static = "1.0.0"
hqx = {git = "https://github.com/CryZe/wasmboy-rs", tag="v0.1.3"}
hqx = {git = "https://github.com/CryZe/wasmboy-rs", tag="v0.1.2"}
# The `console_error_panic_hook` crate provides better debugging of panics by
# logging them with `console.error`. This is great for development, but requires

View File

@@ -1,6 +1,6 @@
{
"name": "hqx",
"scripts": {
"build": "../build-rust.sh"
"build": "RUST_IMG=rust:1.40 ../build-rust.sh"
}
}

54
codecs/hqx/pkg/squooshhqx.d.ts generated vendored
View File

@@ -1,30 +1,48 @@
/* tslint:disable */
/* eslint-disable */
/**
* @param {Uint32Array} input_image
* @param {number} input_width
* @param {number} input_height
* @param {number} factor
* @returns {Uint32Array}
*/
export function resize(input_image: Uint32Array, input_width: number, input_height: number, factor: number): Uint32Array;
* @param {Uint32Array} input_image
* @param {number} input_width
* @param {number} input_height
* @param {number} factor
* @returns {Uint32Array}
*/
export function resize(
input_image: Uint32Array,
input_width: number,
input_height: number,
factor: number,
): Uint32Array;
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
export type InitInput =
| RequestInfo
| URL
| Response
| BufferSource
| WebAssembly.Module;
export interface InitOutput {
readonly memory: WebAssembly.Memory;
readonly resize: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
readonly resize: (
a: number,
b: number,
c: number,
d: number,
e: number,
f: number,
) => void;
readonly __wbindgen_malloc: (a: number) => number;
readonly __wbindgen_free: (a: number, b: number) => void;
}
/**
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly.
*
* @param {InitInput | Promise<InitInput>} module_or_path
*
* @returns {Promise<InitOutput>}
*/
export default function init (module_or_path?: InitInput | Promise<InitInput>): Promise<InitOutput>;
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly.
*
* @param {InitInput | Promise<InitInput>} module_or_path
*
* @returns {Promise<InitOutput>}
*/
export default function init(
module_or_path?: InitInput | Promise<InitInput>,
): Promise<InitOutput>;

View File

@@ -1,103 +1,107 @@
let wasm;
let cachegetUint32Memory0 = null;
function getUint32Memory0() {
if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {
cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);
}
return cachegetUint32Memory0;
if (
cachegetUint32Memory0 === null ||
cachegetUint32Memory0.buffer !== wasm.memory.buffer
) {
cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);
}
return cachegetUint32Memory0;
}
let WASM_VECTOR_LEN = 0;
function passArray32ToWasm0(arg, malloc) {
const ptr = malloc(arg.length * 4);
getUint32Memory0().set(arg, ptr / 4);
WASM_VECTOR_LEN = arg.length;
return ptr;
const ptr = malloc(arg.length * 4);
getUint32Memory0().set(arg, ptr / 4);
WASM_VECTOR_LEN = arg.length;
return ptr;
}
let cachegetInt32Memory0 = null;
function getInt32Memory0() {
if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
}
return cachegetInt32Memory0;
if (
cachegetInt32Memory0 === null ||
cachegetInt32Memory0.buffer !== wasm.memory.buffer
) {
cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
}
return cachegetInt32Memory0;
}
function getArrayU32FromWasm0(ptr, len) {
return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);
return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);
}
/**
* @param {Uint32Array} input_image
* @param {number} input_width
* @param {number} input_height
* @param {number} factor
* @returns {Uint32Array}
*/
* @param {Uint32Array} input_image
* @param {number} input_width
* @param {number} input_height
* @param {number} factor
* @returns {Uint32Array}
*/
export function resize(input_image, input_width, input_height, factor) {
var ptr0 = passArray32ToWasm0(input_image, wasm.__wbindgen_malloc);
var len0 = WASM_VECTOR_LEN;
wasm.resize(8, ptr0, len0, input_width, input_height, factor);
var r0 = getInt32Memory0()[8 / 4 + 0];
var r1 = getInt32Memory0()[8 / 4 + 1];
var v1 = getArrayU32FromWasm0(r0, r1).slice();
wasm.__wbindgen_free(r0, r1 * 4);
return v1;
var ptr0 = passArray32ToWasm0(input_image, wasm.__wbindgen_malloc);
var len0 = WASM_VECTOR_LEN;
wasm.resize(8, ptr0, len0, input_width, input_height, factor);
var r0 = getInt32Memory0()[8 / 4 + 0];
var r1 = getInt32Memory0()[8 / 4 + 1];
var v1 = getArrayU32FromWasm0(r0, r1).slice();
wasm.__wbindgen_free(r0, r1 * 4);
return v1;
}
async function load(module, imports) {
if (typeof Response === 'function' && module instanceof Response) {
if (typeof WebAssembly.instantiateStreaming === 'function') {
try {
return await WebAssembly.instantiateStreaming(module, imports);
} catch (e) {
if (module.headers.get('Content-Type') != 'application/wasm') {
console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
} else {
throw e;
}
}
}
const bytes = await module.arrayBuffer();
return await WebAssembly.instantiate(bytes, imports);
} else {
const instance = await WebAssembly.instantiate(module, imports);
if (instance instanceof WebAssembly.Instance) {
return { instance, module };
if (typeof Response === 'function' && module instanceof Response) {
if (typeof WebAssembly.instantiateStreaming === 'function') {
try {
return await WebAssembly.instantiateStreaming(module, imports);
} catch (e) {
if (module.headers.get('Content-Type') != 'application/wasm') {
console.warn(
'`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n',
e,
);
} else {
return instance;
throw e;
}
}
}
const bytes = await module.arrayBuffer();
return await WebAssembly.instantiate(bytes, imports);
} else {
const instance = await WebAssembly.instantiate(module, imports);
if (instance instanceof WebAssembly.Instance) {
return { instance, module };
} else {
return instance;
}
}
}
async function init(input) {
if (typeof input === 'undefined') {
input = import.meta.url.replace(/\.js$/, '_bg.wasm');
}
const imports = {};
if (typeof input === 'undefined') {
input = import.meta.url.replace(/\.js$/, '_bg.wasm');
}
const imports = {};
if (
typeof input === 'string' ||
(typeof Request === 'function' && input instanceof Request) ||
(typeof URL === 'function' && input instanceof URL)
) {
input = fetch(input);
}
if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
input = fetch(input);
}
const { instance, module } = await load(await input, imports);
const { instance, module } = await load(await input, imports);
wasm = instance.exports;
init.__wbindgen_wasm_module = module;
wasm = instance.exports;
init.__wbindgen_wasm_module = module;
return wasm;
return wasm;
}
export default init;

Binary file not shown.

View File

@@ -8,7 +8,7 @@ ENVIRONMENT = worker
.PHONY: all clean
all: $(OUT_JS)
all: $(OUT_JS) $(OUT_NODE_JS)
imagequant_node.js: ENVIRONMENT=node
$(OUT_JS): $(CODEC_OUT)
@@ -27,6 +27,21 @@ $(OUT_JS): $(CODEC_OUT)
$+ \
imagequant.cpp
$(CXX) \
-I $(CODEC_DIR) \
${CXXFLAGS} \
${LDFLAGS} \
--bind \
--closure 1 \
-s ALLOW_MEMORY_GROWTH=1 \
-s MODULARIZE=1 \
-s TEXTDECODER=2 \
-s ENVIRONMENT='node' \
-s EXPORT_ES6=1 \
-o $@ \
$+ \
imagequant.cpp
$(CODEC_OUT): $(CODEC_DIR)/config.mk
$(MAKE) -C $(CODEC_DIR) $(CODEC_OUT_RELATIVE)

View File

@@ -7,47 +7,46 @@ function(Module) {
Module = Module || {};
var e;e||(e=typeof Module !== 'undefined' ? Module : {});var aa,r;e.ready=new Promise(function(a,b){aa=a;r=b});var t={},u;for(u in e)e.hasOwnProperty(u)&&(t[u]=e[u]);var v="",ba;v=self.location.href;_scriptDir&&(v=_scriptDir);0!==v.indexOf("blob:")?v=v.substr(0,v.lastIndexOf("/")+1):v="";ba=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)};var ca=e.print||console.log.bind(console),w=e.printErr||console.warn.bind(console);
for(u in t)t.hasOwnProperty(u)&&(e[u]=t[u]);t=null;var y;e.wasmBinary&&(y=e.wasmBinary);var noExitRuntime;e.noExitRuntime&&(noExitRuntime=e.noExitRuntime);"object"!==typeof WebAssembly&&z("no native wasm support detected");var A,da=!1,ea=new TextDecoder("utf8");
function fa(a,b,c){var d=B;if(0<c){c=b+c-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&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 ha=new TextDecoder("utf-16le");
function ia(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&D[c];)++c;return ha.decode(B.subarray(a,c<<1))}function ja(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<c;++f)E[b>>1]=a.charCodeAt(f),b+=2;E[b>>1]=0;return b-d}function ka(a){return 2*a.length}function la(a,b){for(var c=0,d="";!(c>=b/4);){var f=F[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023)):d+=String.fromCharCode(f)}return d}
function ma(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<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}F[b>>2]=g;b+=4;if(b+4>c)break}F[b>>2]=0;return b-d}function na(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var G,oa,B,E,D,F,H,pa,qa;
function ra(a){G=a;e.HEAP8=oa=new Int8Array(a);e.HEAP16=E=new Int16Array(a);e.HEAP32=F=new Int32Array(a);e.HEAPU8=B=new Uint8Array(a);e.HEAPU16=D=new Uint16Array(a);e.HEAPU32=H=new Uint32Array(a);e.HEAPF32=pa=new Float32Array(a);e.HEAPF64=qa=new Float64Array(a)}var sa=e.INITIAL_MEMORY||16777216;e.wasmMemory?A=e.wasmMemory:A=new WebAssembly.Memory({initial:sa/65536,maximum:32768});A&&(G=A.buffer);sa=G.byteLength;ra(G);var J,ta=[],ua=[],va=[],wa=[];
function xa(){var a=e.preRun.shift();ta.unshift(a)}var K=0,ya=null,L=null;e.preloadedImages={};e.preloadedAudios={};function z(a){if(e.onAbort)e.onAbort(a);w(a);da=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");r(a);throw a;}function za(){var a=N;return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}var N="imagequant.wasm";
if(!za()){var Aa=N;N=e.locateFile?e.locateFile(Aa,v):v+Aa}function Ba(){try{if(y)return new Uint8Array(y);if(ba)return ba(N);throw"both async and sync fetching of the wasm failed";}catch(a){z(a)}}function Ca(){return y||"function"!==typeof fetch?Promise.resolve().then(Ba):fetch(N,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+N+"'";return a.arrayBuffer()}).catch(function(){return Ba()})}
function O(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(e);else{var c=b.J;"number"===typeof c?void 0===b.G?J.get(c)():J.get(c)(b.G):c(void 0===b.G?null:b.G)}}}function Da(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var Ea=void 0;function P(a){for(var b="";B[a];)b+=Ea[B[a++]];return b}var Q={},R={},S={};
function Fa(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 Ga(a,b){a=Fa(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}
function Ha(a){var b=Error,c=Ga(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 Ia=void 0;function T(a){throw new Ia(a);}var Ja=void 0;
function Ka(a,b){function c(h){h=b(h);if(h.length!==d.length)throw new Ja("Mismatched type converter count");for(var p=0;p<d.length;++p)U(d[p],h[p])}var d=[];d.forEach(function(h){S[h]=a});var f=Array(a.length),g=[],l=0;a.forEach(function(h,p){R.hasOwnProperty(h)?f[p]=R[h]:(g.push(h),Q.hasOwnProperty(h)||(Q[h]=[]),Q[h].push(function(){f[p]=R[h];++l;l===g.length&&c(f)}))});0===g.length&&c(f)}
function U(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||T('type "'+d+'" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.K)return;T("Cannot register type '"+d+"' twice")}R[a]=b;delete S[a];Q.hasOwnProperty(a)&&(b=Q[a],delete Q[a],b.forEach(function(f){f()}))}var Na=[],V=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function Oa(a){4<a&&0===--V[a].H&&(V[a]=void 0,Na.push(a))}function W(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Na.length?Na.pop():V.length;V[b]={H:1,value:a};return b}}function Pa(a){return this.fromWireType(H[a>>2])}function Qa(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function Ra(a,b){switch(b){case 2:return function(c){return this.fromWireType(pa[c>>2])};case 3:return function(c){return this.fromWireType(qa[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Sa(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=Ga(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Ta(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Ua(a,b){var c=e;if(void 0===c[a].D){var d=c[a];c[a]=function(){c[a].D.hasOwnProperty(arguments.length)||T("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].D+")!");return c[a].D[arguments.length].apply(this,arguments)};c[a].D=[];c[a].D[d.I]=d}}
function Va(a,b,c){e.hasOwnProperty(a)?((void 0===c||void 0!==e[a].D&&void 0!==e[a].D[c])&&T("Cannot register public name '"+a+"' twice"),Ua(a,a),e.hasOwnProperty(c)&&T("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),e[a].D[c]=b):(e[a]=b,void 0!==c&&(e[a].M=c))}function Wa(a,b){for(var c=[],d=0;d<a;d++)c.push(F[(b>>2)+d]);return c}
function Xa(a,b){0<=a.indexOf("j")||z("Assertion failed: getDynCaller should only be called with i64 sigs");var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];var f;-1!=a.indexOf("j")?f=c&&c.length?e["dynCall_"+a].apply(null,[b].concat(c)):e["dynCall_"+a].call(null,b):f=J.get(b).apply(null,c);return f}}
function Ya(a,b){a=P(a);var c=-1!=a.indexOf("j")?Xa(a,b):J.get(b);"function"!==typeof c&&T("unknown function pointer with signature "+a+": "+b);return c}var Za=void 0;function $a(a){a=ab(a);var b=P(a);X(a);return b}function bb(a,b){function c(g){f[g]||R[g]||(S[g]?S[g].forEach(c):(d.push(g),f[g]=!0))}var d=[],f={};b.forEach(c);throw new Za(a+": "+d.map($a).join([", "]));}
function cb(a,b,c){switch(b){case 0:return c?function(d){return oa[d]}:function(d){return B[d]};case 1:return c?function(d){return E[d>>1]}:function(d){return D[d>>1]};case 2:return c?function(d){return F[d>>2]}:function(d){return H[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var db={};function eb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function fb(a,b){var c=R[a];void 0===c&&T(b+" has unknown type "+$a(a));return c}
for(var gb={},hb=[null,[],[]],ib=Array(256),Y=0;256>Y;++Y)ib[Y]=String.fromCharCode(Y);Ea=ib;Ia=e.BindingError=Ha("BindingError");Ja=e.InternalError=Ha("InternalError");e.count_emval_handles=function(){for(var a=0,b=5;b<V.length;++b)void 0!==V[b]&&++a;return a};e.get_first_emval=function(){for(var a=5;a<V.length;++a)if(void 0!==V[a])return V[a];return null};Za=e.UnboundTypeError=Ha("UnboundTypeError");ua.push({J:function(){jb()}});
var lb={o:function(){},p:function(a,b,c,d,f){var g=Da(c);b=P(b);U(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,h){return h?d:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var h=oa;else if(2===c)h=E;else if(4===c)h=F;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(h[l>>g])},F:null})},v:function(a,b){b=P(b);U(a,{name:b,fromWireType:function(c){var d=V[c].value;Oa(c);return d},toWireType:function(c,d){return W(d)},argPackAdvance:8,
readValueFromPointer:Pa,F:null})},n:function(a,b,c){c=Da(c);b=P(b);U(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Qa(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Ra(b,c),F:null})},e:function(a,b,c,d,f,g){var l=Wa(b,c);a=P(a);f=Ya(d,f);Va(a,function(){bb("Cannot call "+a+" due to unbound types",l)},b-1);Ka(l,function(h){var p=a,k=a;h=[h[0],null].concat(h.slice(1));var m=
f,q=h.length;2>q&&T("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var x=null!==h[1]&&!1,C=!1,n=1;n<h.length;++n)if(null!==h[n]&&void 0===h[n].F){C=!0;break}var La="void"!==h[0].name,I="",M="";for(n=0;n<q-2;++n)I+=(0!==n?", ":"")+"arg"+n,M+=(0!==n?", ":"")+"arg"+n+"Wired";k="return function "+Fa(k)+"("+I+") {\nif (arguments.length !== "+(q-2)+") {\nthrowBindingError('function "+k+" called with ' + arguments.length + ' arguments, expected "+(q-2)+" args!');\n}\n";
C&&(k+="var destructors = [];\n");var Ma=C?"destructors":"null";I="throwBindingError invoker fn runDestructors retType classParam".split(" ");m=[T,m,g,Ta,h[0],h[1]];x&&(k+="var thisWired = classParam.toWireType("+Ma+", this);\n");for(n=0;n<q-2;++n)k+="var arg"+n+"Wired = argType"+n+".toWireType("+Ma+", arg"+n+"); // "+h[n+2].name+"\n",I.push("argType"+n),m.push(h[n+2]);x&&(M="thisWired"+(0<M.length?", ":"")+M);k+=(La?"var rv = ":"")+"invoker(fn"+(0<M.length?", ":"")+M+");\n";if(C)k+="runDestructors(destructors);\n";
else for(n=x?1:2;n<h.length;++n)q=1===n?"thisWired":"arg"+(n-2)+"Wired",null!==h[n].F&&(k+=q+"_dtor("+q+"); // "+h[n].name+"\n",I.push(q+"_dtor"),m.push(h[n].F));La&&(k+="var ret = retType.fromWireType(rv);\nreturn ret;\n");I.push(k+"}\n");h=Sa(I).apply(null,m);n=b-1;if(!e.hasOwnProperty(p))throw new Ja("Replacing nonexistant public symbol");void 0!==e[p].D&&void 0!==n?e[p].D[n]=h:(e[p]=h,e[p].I=n);return[]})},c:function(a,b,c,d,f){function g(k){return k}b=P(b);-1===f&&(f=4294967295);var l=Da(c);
if(0===d){var h=32-8*c;g=function(k){return k<<h>>>h}}var p=-1!=b.indexOf("unsigned");U(a,{name:b,fromWireType:g,toWireType:function(k,m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+Qa(m)+'" to '+this.name);if(m<d||m>f)throw new TypeError('Passing a number "'+Qa(m)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return p?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:cb(b,l,0!==d),F:null})},
b:function(a,b,c){function d(g){g>>=2;var l=H;return new f(G,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);U(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{K:!0})},i:function(a,b){b=P(b);var c="std::string"===b;U(a,{name:b,fromWireType:function(d){var f=H[d>>2];if(c)for(var g=d+4,l=0;l<=f;++l){var h=d+4+l;if(l==f||0==B[h]){if(g){for(var p=g+(h-g),k=g;!(k>=p)&&B[k];)++k;g=ea.decode(B.subarray(g,k))}else g=
"";if(void 0===m)var m=g;else m+=String.fromCharCode(0),m+=g;g=h+1}}else{m=Array(f);for(l=0;l<f;++l)m[l]=String.fromCharCode(B[d+4+l]);m=m.join("")}X(d);return m},toWireType:function(d,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var g="string"===typeof f;g||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||T("Cannot pass non-string to std::string");var l=(c&&g?function(){for(var k=0,m=0;m<f.length;++m){var q=f.charCodeAt(m);55296<=q&&57343>=q&&(q=65536+((q&1023)<<
10)|f.charCodeAt(++m)&1023);127>=q?++k:k=2047>=q?k+2:65535>=q?k+3:k+4}return k}:function(){return f.length})(),h=kb(4+l+1);H[h>>2]=l;if(c&&g)fa(f,h+4,l+1);else if(g)for(g=0;g<l;++g){var p=f.charCodeAt(g);255<p&&(X(h),T("String has UTF-16 code units that do not fit in 8 bits"));B[h+4+g]=p}else for(g=0;g<l;++g)B[h+4+g]=f[g];null!==d&&d.push(X,h);return h},argPackAdvance:8,readValueFromPointer:Pa,F:function(d){X(d)}})},g:function(a,b,c){c=P(c);if(2===b){var d=ia;var f=ja;var g=ka;var l=function(){return D};
var h=1}else 4===b&&(d=la,f=ma,g=na,l=function(){return H},h=2);U(a,{name:c,fromWireType:function(p){for(var k=H[p>>2],m=l(),q,x=p+4,C=0;C<=k;++C){var n=p+4+C*b;if(C==k||0==m[n>>h])x=d(x,n-x),void 0===q?q=x:(q+=String.fromCharCode(0),q+=x),x=n+b}X(p);return q},toWireType:function(p,k){"string"!==typeof k&&T("Cannot pass non-string to C++ string type "+c);var m=g(k),q=kb(4+m+b);H[q>>2]=m>>h;f(k,q+4,m+b);null!==p&&p.push(X,q);return q},argPackAdvance:8,readValueFromPointer:Pa,F:function(p){X(p)}})},
q:function(a,b){b=P(b);U(a,{L:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},f:Oa,l:function(a){if(0===a)return W(eb());var b=db[a];a=void 0===b?P(a):b;return W(eb()[a])},j:function(a){4<a&&(V[a].H+=1)},k:function(a,b,c,d){a||T("Cannot use deleted val. handle = "+a);a=V[a].value;var f=gb[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var l="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)l+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+
g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(fb,e,W);gb[b]=f}return f(a,c,d)},h:function(){z()},t:function(a,b,c){B.copyWithin(a,b,b+c)},d:function(a){a>>>=0;var b=B.length;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,
a,d);0<d%65536&&(d+=65536-d%65536);a:{try{A.grow(Math.min(2147483648,d)-G.byteLength+65535>>>16);ra(A.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},u:function(){return 0},r:function(){},m:function(a,b,c,d){for(var f=0,g=0;g<c;g++){for(var l=F[b+8*g>>2],h=F[b+(8*g+4)>>2],p=0;p<h;p++){var k=B[l+p],m=hb[a];if(0===k||10===k){for(k=0;m[k]&&!(NaN<=k);)++k;k=ea.decode(m.subarray?m.subarray(0,k):new Uint8Array(m.slice(0,k)));(1===a?ca:w)(k);m.length=0}else m.push(k)}f+=h}F[d>>2]=f;return 0},
a:A,s:function(){}};
(function(){function a(f){e.asm=f.exports;J=e.asm.w;K--;e.monitorRunDependencies&&e.monitorRunDependencies(K);0==K&&(null!==ya&&(clearInterval(ya),ya=null),L&&(f=L,L=null,f()))}function b(f){a(f.instance)}function c(f){return Ca().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){w("failed to asynchronously prepare wasm: "+g);z(g)})}var d={a:lb};K++;e.monitorRunDependencies&&e.monitorRunDependencies(K);if(e.instantiateWasm)try{return e.instantiateWasm(d,a)}catch(f){return w("Module.instantiateWasm callback failed with error: "+
f),!1}(function(){return y||"function"!==typeof WebAssembly.instantiateStreaming||za()||"function"!==typeof fetch?c(b):fetch(N,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){w("wasm streaming compile failed: "+g);w("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(r);return{}})();
var jb=e.___wasm_call_ctors=function(){return(jb=e.___wasm_call_ctors=e.asm.x).apply(null,arguments)},kb=e._malloc=function(){return(kb=e._malloc=e.asm.y).apply(null,arguments)},X=e._free=function(){return(X=e._free=e.asm.z).apply(null,arguments)},ab=e.___getTypeName=function(){return(ab=e.___getTypeName=e.asm.A).apply(null,arguments)};e.___embind_register_native_and_builtin_types=function(){return(e.___embind_register_native_and_builtin_types=e.asm.B).apply(null,arguments)};
e.dynCall_jiji=function(){return(e.dynCall_jiji=e.asm.C).apply(null,arguments)};var Z;L=function mb(){Z||nb();Z||(L=mb)};
function nb(){function a(){if(!Z&&(Z=!0,e.calledRun=!0,!da)){O(ua);O(va);aa(e);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();wa.unshift(b)}O(wa)}}if(!(0<K)){if(e.preRun)for("function"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)xa();O(ta);0<K||(e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1);a()},1)):a())}}
e.run=nb;if(e.preInit)for("function"==typeof e.preInit&&(e.preInit=[e.preInit]);0<e.preInit.length;)e.preInit.pop()();noExitRuntime=!0;nb();
var e;e||(e=typeof Module !== 'undefined' ? Module : {});var aa,r;e.ready=new Promise(function(a,b){aa=a;r=b});var t={},u;for(u in e)e.hasOwnProperty(u)&&(t[u]=e[u]);var v="",ba,ca,da,ea;v=__dirname+"/";ba=function(a){da||(da=require("fs"));ea||(ea=require("path"));a=ea.normalize(a);return da.readFileSync(a,null)};ca=function(a){a=ba(a);a.buffer||(a=new Uint8Array(a));a.buffer||w("Assertion failed: undefined");return a};1<process.argv.length&&process.argv[1].replace(/\\/g,"/");process.argv.slice(2);
process.on("uncaughtException",function(a){throw a;});process.on("unhandledRejection",w);e.inspect=function(){return"[Emscripten Module object]"};var fa=e.print||console.log.bind(console),y=e.printErr||console.warn.bind(console);for(u in t)t.hasOwnProperty(u)&&(e[u]=t[u]);t=null;var z;e.wasmBinary&&(z=e.wasmBinary);var noExitRuntime;e.noExitRuntime&&(noExitRuntime=e.noExitRuntime);"object"!==typeof WebAssembly&&w("no native wasm support detected");var A,ha=!1,ia=new TextDecoder("utf8");
function ja(a,b,c){var d=C;if(0<c){c=b+c-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&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 ka=new TextDecoder("utf-16le");
function la(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&D[c];)++c;return ka.decode(C.subarray(a,c<<1))}function ma(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<c;++f)E[b>>1]=a.charCodeAt(f),b+=2;E[b>>1]=0;return b-d}function na(a){return 2*a.length}function oa(a,b){for(var c=0,d="";!(c>=b/4);){var f=F[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023)):d+=String.fromCharCode(f)}return d}
function pa(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<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}F[b>>2]=g;b+=4;if(b+4>c)break}F[b>>2]=0;return b-d}function qa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var G,ra,C,E,D,F,I,sa,ta;
function ua(a){G=a;e.HEAP8=ra=new Int8Array(a);e.HEAP16=E=new Int16Array(a);e.HEAP32=F=new Int32Array(a);e.HEAPU8=C=new Uint8Array(a);e.HEAPU16=D=new Uint16Array(a);e.HEAPU32=I=new Uint32Array(a);e.HEAPF32=sa=new Float32Array(a);e.HEAPF64=ta=new Float64Array(a)}var va=e.INITIAL_MEMORY||16777216;e.wasmMemory?A=e.wasmMemory:A=new WebAssembly.Memory({initial:va/65536,maximum:32768});A&&(G=A.buffer);va=G.byteLength;ua(G);var J,wa=[],xa=[],ya=[],za=[];
function Aa(){var a=e.preRun.shift();wa.unshift(a)}var K=0,Ba=null,M=null;e.preloadedImages={};e.preloadedAudios={};function w(a){if(e.onAbort)e.onAbort(a);y(a);ha=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");r(a);throw a;}function Ca(){var a=N;return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}var N="imagequant.wasm";
if(!Ca()){var Da=N;N=e.locateFile?e.locateFile(Da,v):v+Da}function Ea(){try{if(z)return new Uint8Array(z);if(ca)return ca(N);throw"both async and sync fetching of the wasm failed";}catch(a){w(a)}}function O(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(e);else{var c=b.J;"number"===typeof c?void 0===b.G?J.get(c)():J.get(c)(b.G):c(void 0===b.G?null:b.G)}}}
function Fa(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var Ga=void 0;function P(a){for(var b="";C[a];)b+=Ga[C[a++]];return b}var Q={},R={},S={};function Ha(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 Ia(a,b){a=Ha(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Ja(a){var b=Error,c=Ia(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 Ka=void 0;function T(a){throw new Ka(a);}var La=void 0;function Ma(a,b){function c(h){h=b(h);if(h.length!==d.length)throw new La("Mismatched type converter count");for(var k=0;k<d.length;++k)U(d[k],h[k])}var d=[];d.forEach(function(h){S[h]=a});var f=Array(a.length),g=[],l=0;a.forEach(function(h,k){R.hasOwnProperty(h)?f[k]=R[h]:(g.push(h),Q.hasOwnProperty(h)||(Q[h]=[]),Q[h].push(function(){f[k]=R[h];++l;l===g.length&&c(f)}))});0===g.length&&c(f)}
function U(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||T('type "'+d+'" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.K)return;T("Cannot register type '"+d+"' twice")}R[a]=b;delete S[a];Q.hasOwnProperty(a)&&(b=Q[a],delete Q[a],b.forEach(function(f){f()}))}var Pa=[],V=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function Qa(a){4<a&&0===--V[a].H&&(V[a]=void 0,Pa.push(a))}function W(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Pa.length?Pa.pop():V.length;V[b]={H:1,value:a};return b}}function Ra(a){return this.fromWireType(I[a>>2])}function Sa(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function Ta(a,b){switch(b){case 2:return function(c){return this.fromWireType(sa[c>>2])};case 3:return function(c){return this.fromWireType(ta[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Ua(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=Ia(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Va(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Wa(a,b){var c=e;if(void 0===c[a].D){var d=c[a];c[a]=function(){c[a].D.hasOwnProperty(arguments.length)||T("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].D+")!");return c[a].D[arguments.length].apply(this,arguments)};c[a].D=[];c[a].D[d.I]=d}}
function Xa(a,b,c){e.hasOwnProperty(a)?((void 0===c||void 0!==e[a].D&&void 0!==e[a].D[c])&&T("Cannot register public name '"+a+"' twice"),Wa(a,a),e.hasOwnProperty(c)&&T("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),e[a].D[c]=b):(e[a]=b,void 0!==c&&(e[a].M=c))}function Ya(a,b){for(var c=[],d=0;d<a;d++)c.push(F[(b>>2)+d]);return c}
function Za(a,b){0<=a.indexOf("j")||w("Assertion failed: getDynCaller should only be called with i64 sigs");var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];var f;-1!=a.indexOf("j")?f=c&&c.length?e["dynCall_"+a].apply(null,[b].concat(c)):e["dynCall_"+a].call(null,b):f=J.get(b).apply(null,c);return f}}
function $a(a,b){a=P(a);var c=-1!=a.indexOf("j")?Za(a,b):J.get(b);"function"!==typeof c&&T("unknown function pointer with signature "+a+": "+b);return c}var ab=void 0;function bb(a){a=cb(a);var b=P(a);X(a);return b}function db(a,b){function c(g){f[g]||R[g]||(S[g]?S[g].forEach(c):(d.push(g),f[g]=!0))}var d=[],f={};b.forEach(c);throw new ab(a+": "+d.map(bb).join([", "]));}
function eb(a,b,c){switch(b){case 0:return c?function(d){return ra[d]}:function(d){return C[d]};case 1:return c?function(d){return E[d>>1]}:function(d){return D[d>>1]};case 2:return c?function(d){return F[d>>2]}:function(d){return I[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var fb={};function gb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function hb(a,b){var c=R[a];void 0===c&&T(b+" has unknown type "+bb(a));return c}
for(var ib={},jb=[null,[],[]],kb=Array(256),Y=0;256>Y;++Y)kb[Y]=String.fromCharCode(Y);Ga=kb;Ka=e.BindingError=Ja("BindingError");La=e.InternalError=Ja("InternalError");e.count_emval_handles=function(){for(var a=0,b=5;b<V.length;++b)void 0!==V[b]&&++a;return a};e.get_first_emval=function(){for(var a=5;a<V.length;++a)if(void 0!==V[a])return V[a];return null};ab=e.UnboundTypeError=Ja("UnboundTypeError");xa.push({J:function(){lb()}});
var nb={o:function(){},p:function(a,b,c,d,f){var g=Fa(c);b=P(b);U(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,h){return h?d:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var h=ra;else if(2===c)h=E;else if(4===c)h=F;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(h[l>>g])},F:null})},v:function(a,b){b=P(b);U(a,{name:b,fromWireType:function(c){var d=V[c].value;Qa(c);return d},toWireType:function(c,d){return W(d)},argPackAdvance:8,
readValueFromPointer:Ra,F:null})},n:function(a,b,c){c=Fa(c);b=P(b);U(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Sa(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Ta(b,c),F:null})},e:function(a,b,c,d,f,g){var l=Ya(b,c);a=P(a);f=$a(d,f);Xa(a,function(){db("Cannot call "+a+" due to unbound types",l)},b-1);Ma(l,function(h){var k=[h[0],null].concat(h.slice(1)),m=h=a,n=f,
p=k.length;2>p&&T("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var x=null!==k[1]&&!1,B=!1,q=1;q<k.length;++q)if(null!==k[q]&&void 0===k[q].F){B=!0;break}var Na="void"!==k[0].name,H="",L="";for(q=0;q<p-2;++q)H+=(0!==q?", ":"")+"arg"+q,L+=(0!==q?", ":"")+"arg"+q+"Wired";m="return function "+Ha(m)+"("+H+") {\nif (arguments.length !== "+(p-2)+") {\nthrowBindingError('function "+m+" called with ' + arguments.length + ' arguments, expected "+(p-2)+" args!');\n}\n";
B&&(m+="var destructors = [];\n");var Oa=B?"destructors":"null";H="throwBindingError invoker fn runDestructors retType classParam".split(" ");n=[T,n,g,Va,k[0],k[1]];x&&(m+="var thisWired = classParam.toWireType("+Oa+", this);\n");for(q=0;q<p-2;++q)m+="var arg"+q+"Wired = argType"+q+".toWireType("+Oa+", arg"+q+"); // "+k[q+2].name+"\n",H.push("argType"+q),n.push(k[q+2]);x&&(L="thisWired"+(0<L.length?", ":"")+L);m+=(Na?"var rv = ":"")+"invoker(fn"+(0<L.length?", ":"")+L+");\n";if(B)m+="runDestructors(destructors);\n";
else for(q=x?1:2;q<k.length;++q)p=1===q?"thisWired":"arg"+(q-2)+"Wired",null!==k[q].F&&(m+=p+"_dtor("+p+"); // "+k[q].name+"\n",H.push(p+"_dtor"),n.push(k[q].F));Na&&(m+="var ret = retType.fromWireType(rv);\nreturn ret;\n");H.push(m+"}\n");k=Ua(H).apply(null,n);q=b-1;if(!e.hasOwnProperty(h))throw new La("Replacing nonexistant public symbol");void 0!==e[h].D&&void 0!==q?e[h].D[q]=k:(e[h]=k,e[h].I=q);return[]})},c:function(a,b,c,d,f){function g(m){return m}b=P(b);-1===f&&(f=4294967295);var l=Fa(c);
if(0===d){var h=32-8*c;g=function(m){return m<<h>>>h}}var k=-1!=b.indexOf("unsigned");U(a,{name:b,fromWireType:g,toWireType:function(m,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+Sa(n)+'" to '+this.name);if(n<d||n>f)throw new TypeError('Passing a number "'+Sa(n)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return k?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:eb(b,l,0!==d),F:null})},
b:function(a,b,c){function d(g){g>>=2;var l=I;return new f(G,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);U(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{K:!0})},i:function(a,b){b=P(b);var c="std::string"===b;U(a,{name:b,fromWireType:function(d){var f=I[d>>2];if(c)for(var g=d+4,l=0;l<=f;++l){var h=d+4+l;if(l==f||0==C[h]){if(g){for(var k=g+(h-g),m=g;!(m>=k)&&C[m];)++m;g=ia.decode(C.subarray(g,m))}else g=
"";if(void 0===n)var n=g;else n+=String.fromCharCode(0),n+=g;g=h+1}}else{n=Array(f);for(l=0;l<f;++l)n[l]=String.fromCharCode(C[d+4+l]);n=n.join("")}X(d);return n},toWireType:function(d,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var g="string"===typeof f;g||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||T("Cannot pass non-string to std::string");var l=(c&&g?function(){for(var m=0,n=0;n<f.length;++n){var p=f.charCodeAt(n);55296<=p&&57343>=p&&(p=65536+((p&1023)<<
10)|f.charCodeAt(++n)&1023);127>=p?++m:m=2047>=p?m+2:65535>=p?m+3:m+4}return m}:function(){return f.length})(),h=mb(4+l+1);I[h>>2]=l;if(c&&g)ja(f,h+4,l+1);else if(g)for(g=0;g<l;++g){var k=f.charCodeAt(g);255<k&&(X(h),T("String has UTF-16 code units that do not fit in 8 bits"));C[h+4+g]=k}else for(g=0;g<l;++g)C[h+4+g]=f[g];null!==d&&d.push(X,h);return h},argPackAdvance:8,readValueFromPointer:Ra,F:function(d){X(d)}})},g:function(a,b,c){c=P(c);if(2===b){var d=la;var f=ma;var g=na;var l=function(){return D};
var h=1}else 4===b&&(d=oa,f=pa,g=qa,l=function(){return I},h=2);U(a,{name:c,fromWireType:function(k){for(var m=I[k>>2],n=l(),p,x=k+4,B=0;B<=m;++B){var q=k+4+B*b;if(B==m||0==n[q>>h])x=d(x,q-x),void 0===p?p=x:(p+=String.fromCharCode(0),p+=x),x=q+b}X(k);return p},toWireType:function(k,m){"string"!==typeof m&&T("Cannot pass non-string to C++ string type "+c);var n=g(m),p=mb(4+n+b);I[p>>2]=n>>h;f(m,p+4,n+b);null!==k&&k.push(X,p);return p},argPackAdvance:8,readValueFromPointer:Ra,F:function(k){X(k)}})},
q:function(a,b){b=P(b);U(a,{L:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},f:Qa,l:function(a){if(0===a)return W(gb());var b=fb[a];a=void 0===b?P(a):b;return W(gb()[a])},j:function(a){4<a&&(V[a].H+=1)},k:function(a,b,c,d){a||T("Cannot use deleted val. handle = "+a);a=V[a].value;var f=ib[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var l="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)l+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+
g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(hb,e,W);ib[b]=f}return f(a,c,d)},h:function(){w()},t:function(a,b,c){C.copyWithin(a,b,b+c)},d:function(a){a>>>=0;var b=C.length;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,
a,d);0<d%65536&&(d+=65536-d%65536);a:{try{A.grow(Math.min(2147483648,d)-G.byteLength+65535>>>16);ua(A.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},u:function(){return 0},r:function(){},m:function(a,b,c,d){for(var f=0,g=0;g<c;g++){for(var l=F[b+8*g>>2],h=F[b+(8*g+4)>>2],k=0;k<h;k++){var m=C[l+k],n=jb[a];if(0===m||10===m){m=1===a?fa:y;var p;for(p=0;n[p]&&!(NaN<=p);)++p;p=ia.decode(n.subarray?n.subarray(0,p):new Uint8Array(n.slice(0,p)));m(p);n.length=0}else n.push(m)}f+=h}F[d>>
2]=f;return 0},a:A,s:function(){}};
(function(){function a(f){e.asm=f.exports;J=e.asm.w;K--;e.monitorRunDependencies&&e.monitorRunDependencies(K);0==K&&(null!==Ba&&(clearInterval(Ba),Ba=null),M&&(f=M,M=null,f()))}function b(f){a(f.instance)}function c(f){return Promise.resolve().then(Ea).then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){y("failed to asynchronously prepare wasm: "+g);w(g)})}var d={a:nb};K++;e.monitorRunDependencies&&e.monitorRunDependencies(K);if(e.instantiateWasm)try{return e.instantiateWasm(d,a)}catch(f){return y("Module.instantiateWasm callback failed with error: "+
f),!1}(function(){return z||"function"!==typeof WebAssembly.instantiateStreaming||Ca()||"function"!==typeof fetch?c(b):fetch(N,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){y("wasm streaming compile failed: "+g);y("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(r);return{}})();
var lb=e.___wasm_call_ctors=function(){return(lb=e.___wasm_call_ctors=e.asm.x).apply(null,arguments)},mb=e._malloc=function(){return(mb=e._malloc=e.asm.y).apply(null,arguments)},X=e._free=function(){return(X=e._free=e.asm.z).apply(null,arguments)},cb=e.___getTypeName=function(){return(cb=e.___getTypeName=e.asm.A).apply(null,arguments)};e.___embind_register_native_and_builtin_types=function(){return(e.___embind_register_native_and_builtin_types=e.asm.B).apply(null,arguments)};
e.dynCall_jiji=function(){return(e.dynCall_jiji=e.asm.C).apply(null,arguments)};var Z;M=function ob(){Z||pb();Z||(M=ob)};
function pb(){function a(){if(!Z&&(Z=!0,e.calledRun=!0,!ha)){O(xa);O(ya);aa(e);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();za.unshift(b)}O(za)}}if(!(0<K)){if(e.preRun)for("function"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)Aa();O(wa);0<K||(e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1);a()},1)):a())}}
e.run=pb;if(e.preInit)for("function"==typeof e.preInit&&(e.preInit=[e.preInit]);0<e.preInit.length;)e.preInit.pop()();noExitRuntime=!0;pb();
return Module.ready

View File

@@ -1,5 +1,5 @@
CODEC_URL = https://gitlab.com/wg1/jpeg-xl.git
CODEC_VERSION = ab7c5e9b6795134377aa4846ceaae2c5bc504f76
CODEC_VERSION = v0.2
CODEC_DIR = node_modules/jxl
CODEC_BUILD_ROOT := $(CODEC_DIR)/build
CODEC_MT_BUILD_DIR := $(CODEC_BUILD_ROOT)/mt

View File

@@ -52,14 +52,13 @@ val decode(std::string data) {
auto next_in = (const uint8_t*)data.c_str();
auto avail_in = data.size();
JxlDecoderSetInput(dec.get(), next_in, avail_in);
EXPECT_EQ(JXL_DEC_BASIC_INFO, JxlDecoderProcessInput(dec.get()));
EXPECT_EQ(JXL_DEC_BASIC_INFO, JxlDecoderProcessInput(dec.get(), &next_in, &avail_in));
JxlBasicInfo info;
EXPECT_EQ(JXL_DEC_SUCCESS, JxlDecoderGetBasicInfo(dec.get(), &info));
size_t pixel_count = info.xsize * info.ysize;
size_t component_count = pixel_count * COMPONENTS_PER_PIXEL;
EXPECT_EQ(JXL_DEC_COLOR_ENCODING, JxlDecoderProcessInput(dec.get()));
EXPECT_EQ(JXL_DEC_COLOR_ENCODING, JxlDecoderProcessInput(dec.get(), &next_in, &avail_in));
static const JxlPixelFormat format = {COMPONENTS_PER_PIXEL, JXL_TYPE_FLOAT, JXL_LITTLE_ENDIAN, 0};
size_t icc_size;
EXPECT_EQ(JXL_DEC_SUCCESS, JxlDecoderGetICCProfileSize(dec.get(), &format,
@@ -69,15 +68,11 @@ val decode(std::string data) {
JxlDecoderGetColorAsICCProfile(dec.get(), &format, JXL_COLOR_PROFILE_TARGET_DATA,
icc_profile.data(), icc_profile.size()));
EXPECT_EQ(JXL_DEC_NEED_IMAGE_OUT_BUFFER, JxlDecoderProcessInput(dec.get()));
size_t buffer_size;
EXPECT_EQ(JXL_DEC_SUCCESS, JxlDecoderImageOutBufferSize(dec.get(), &format, &buffer_size));
EXPECT_EQ(buffer_size, component_count * sizeof(float));
auto float_pixels = std::make_unique<float[]>(component_count);
EXPECT_EQ(JXL_DEC_NEED_IMAGE_OUT_BUFFER, JxlDecoderProcessInput(dec.get(), &next_in, &avail_in));
EXPECT_EQ(JXL_DEC_SUCCESS, JxlDecoderSetImageOutBuffer(dec.get(), &format, float_pixels.get(),
component_count * sizeof(float)));
EXPECT_EQ(JXL_DEC_FULL_IMAGE, JxlDecoderProcessInput(dec.get()));
EXPECT_EQ(JXL_DEC_FULL_IMAGE, JxlDecoderProcessInput(dec.get(), &next_in, &avail_in));
auto byte_pixels = std::make_unique<uint8_t[]>(component_count);
// Convert to sRGB.

Binary file not shown.

Binary file not shown.

View File

@@ -2,8 +2,8 @@
#include <emscripten/val.h>
#include "lib/jxl/base/thread_pool_internal.h"
#include "lib/jxl/enc_external_image.h"
#include "lib/jxl/enc_file.h"
#include "lib/jxl/external_image.h"
using namespace emscripten;
@@ -18,7 +18,6 @@ struct JXLOptions {
int epf;
int nearLossless;
bool lossyPalette;
size_t decodingSpeedTier;
};
val encode(std::string image, int width, int height, JXLOptions options) {
@@ -36,7 +35,6 @@ val encode(std::string image, int width, int height, JXLOptions options) {
cparams.epf = options.epf;
cparams.speed_tier = static_cast<jxl::SpeedTier>(options.speed);
cparams.near_lossless = options.nearLossless;
cparams.decoding_speed_tier = options.decodingSpeedTier;
if (options.lossyPalette) {
cparams.lossy_palette = true;
@@ -44,6 +42,17 @@ val encode(std::string image, int width, int height, JXLOptions options) {
cparams.options.predictor = jxl::Predictor::Zero;
}
// Reduce memory usage of tree learning for lossless data.
// TODO(veluca93): this is a mitigation for excessive memory usage in the JXL encoder.
float megapixels = width * height * 0.000001;
if (megapixels > 8) {
cparams.options.nb_repeats = 0.1;
} else if (megapixels > 4) {
cparams.options.nb_repeats = 0.3;
} else {
// default is OK.
}
float quality = options.quality;
// Quality settings roughly match libjpeg qualities.
@@ -90,10 +99,10 @@ val encode(std::string image, int width, int height, JXLOptions options) {
uint8_t* inBuffer = (uint8_t*)image.c_str();
auto result = jxl::ConvertFromExternal(
auto result = jxl::ConvertImage(
jxl::Span<const uint8_t>(reinterpret_cast<const uint8_t*>(image.data()), image.size()), width,
height, jxl::ColorEncoding::SRGB(/*is_gray=*/false), /*has_alpha=*/true,
/*alpha_is_premultiplied=*/false, /*bits_per_sample=*/8, /*endiannes=*/JXL_LITTLE_ENDIAN,
/*alpha_is_premultiplied=*/false, /*bits_per_sample=*/8, JXL_LITTLE_ENDIAN,
/*flipped_y=*/false, pool_ptr, main);
if (!result) {
@@ -115,7 +124,6 @@ EMSCRIPTEN_BINDINGS(my_module) {
.field("progressive", &JXLOptions::progressive)
.field("nearLossless", &JXLOptions::nearLossless)
.field("lossyPalette", &JXLOptions::lossyPalette)
.field("decodingSpeedTier", &JXLOptions::decodingSpeedTier)
.field("epf", &JXLOptions::epf);
function("encode", &encode);

View File

@@ -5,7 +5,6 @@ export interface EncodeOptions {
epf: number;
nearLossless: number;
lossyPalette: boolean;
decodingSpeedTier: number;
}
export interface JXLModule extends EmscriptenWasm.Module {

View File

@@ -50,9 +50,9 @@ v.push(p+"}\n");k=Ya(v).apply(null,q);l=b-1;if(!f.hasOwnProperty(n))throw new Oa
readValueFromPointer:d},{ja:!0})},k:function(a,b){b=U(b);var c="std::string"===b;T(a,{name:b,fromWireType:function(d){var g=K[d>>2];if(c)for(var h=d+4,m=0;m<=g;++m){var k=d+4+m;if(m==g||0==E[k]){h=ia(h,k-h);if(void 0===n)var n=h;else n+=String.fromCharCode(0),n+=h;h=k+1}}else{n=Array(g);for(m=0;m<g;++m)n[m]=String.fromCharCode(E[d+4+m]);n=n.join("")}Z(d);return n},toWireType:function(d,g){g instanceof ArrayBuffer&&(g=new Uint8Array(g));var h="string"===typeof g;h||g instanceof Uint8Array||g instanceof
Uint8ClampedArray||g instanceof Int8Array||V("Cannot pass non-string to std::string");var m=(c&&h?function(){return ka(g)}:function(){return g.length})(),k=zb(4+m+1);K[k>>2]=m;if(c&&h)ja(g,E,k+4,m+1);else if(h)for(h=0;h<m;++h){var n=g.charCodeAt(h);255<n&&(Z(k),V("String has UTF-16 code units that do not fit in 8 bits"));E[k+4+h]=n}else for(h=0;h<m;++h)E[k+4+h]=g[h];null!==d&&d.push(Z,k);return k},argPackAdvance:8,readValueFromPointer:Ja,T:function(d){Z(d)}})},h:function(a,b,c){c=U(c);if(2===b){var d=
ma;var g=na;var h=oa;var m=function(){return F};var k=1}else 4===b&&(d=pa,g=qa,h=ra,m=function(){return K},k=2);T(a,{name:c,fromWireType:function(n){for(var p=K[n>>2],q=m(),r,x=n+4,e=0;e<=p;++e){var l=n+4+e*b;if(e==p||0==q[l>>k])x=d(x,l-x),void 0===r?r=x:(r+=String.fromCharCode(0),r+=x),x=l+b}Z(n);return r},toWireType:function(n,p){"string"!==typeof p&&V("Cannot pass non-string to C++ string type "+c);var q=h(p),r=zb(4+q+b);K[r>>2]=q>>k;g(p,r+4,q+b);null!==n&&n.push(Z,r);return r},argPackAdvance:8,
readValueFromPointer:Ja,T:function(n){Z(n)}})},n:function(a,b,c,d,g,h){Ha[a]={name:U(b),la:Y(c,d),ma:Y(g,h),ba:[]}},e:function(a,b,c,d,g,h,m,k,n,p){Ha[a].ba.push({ea:U(b),ia:c,ga:Y(d,g),ha:h,ta:m,sa:Y(k,n),ua:p})},A:function(a,b){b=U(b);T(a,{za:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},g:Ua,C:function(a){if(0===a)return Va(ib());var b=hb[a];a=void 0===b?U(a):b;return Va(ib()[a])},B:function(a){4<a&&(X[a].aa+=1)},o:function(a,b,c,d){a||V("Cannot use deleted val. handle = "+
readValueFromPointer:Ja,T:function(n){Z(n)}})},n:function(a,b,c,d,g,h){Ha[a]={name:U(b),la:Y(c,d),ma:Y(g,h),ba:[]}},f:function(a,b,c,d,g,h,m,k,n,p){Ha[a].ba.push({ea:U(b),ia:c,ga:Y(d,g),ha:h,ta:m,sa:Y(k,n),ua:p})},A:function(a,b){b=U(b);T(a,{za:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},g:Ua,C:function(a){if(0===a)return Va(ib());var b=hb[a];a=void 0===b?U(a):b;return Va(ib()[a])},B:function(a){4<a&&(X[a].aa+=1)},o:function(a,b,c,d){a||V("Cannot use deleted val. handle = "+
a);a=X[a].value;var g=kb[b];if(!g){g="";for(var h=0;h<b;++h)g+=(0!==h?", ":"")+"arg"+h;var m="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(h=0;h<b;++h)m+="var argType"+h+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+h+'], "parameter '+h+'");\nvar arg'+h+" = argType"+h+".readValueFromPointer(args);\nargs += argType"+h+"['argPackAdvance'];\n";g=(new Function("requireRegisteredType","Module","__emval_register",m+("var obj = new constructor("+g+");\nreturn __emval_register(obj);\n}\n")))(jb,
f,Va);kb[b]=g}return g(a,c,d)},b:function(){C()},t:function(a,b,c){E.copyWithin(a,b,b+c)},f:function(a){a>>>=0;var b=E.length;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0<d%65536&&(d+=65536-d%65536);a:{try{D.grow(Math.min(2147483648,d)-I.byteLength+65535>>>16);ua(D.buffer);var g=1;break a}catch(h){}g=void 0}if(g)return!0}return!1},v:function(a,b){var c=0;mb().forEach(function(d,g){var h=b+c;g=H[a+4*g>>2]=h;for(h=0;h<d.length;++h)J[g++>>
f,Va);kb[b]=g}return g(a,c,d)},b:function(){C()},t:function(a,b,c){E.copyWithin(a,b,b+c)},e:function(a){a>>>=0;var b=E.length;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0<d%65536&&(d+=65536-d%65536);a:{try{D.grow(Math.min(2147483648,d)-I.byteLength+65535>>>16);ua(D.buffer);var g=1;break a}catch(h){}g=void 0}if(g)return!0}return!1},v:function(a,b){var c=0;mb().forEach(function(d,g){var h=b+c;g=H[a+4*g>>2]=h;for(h=0;h<d.length;++h)J[g++>>
0]=d.charCodeAt(h);J[g>>0]=0;c+=d.length+1});return 0},w:function(a,b){var c=mb();H[a>>2]=c.length;var d=0;c.forEach(function(g){d+=g.length+1});H[b>>2]=d;return 0},x:function(){return 0},r:function(){},i:function(a,b,c,d){for(var g=0,h=0;h<c;h++){for(var m=H[b+8*h>>2],k=H[b+(8*h+4)>>2],n=0;n<k;n++){var p=E[m+n],q=ob[a];if(0===p||10===p){for(p=0;q[p]&&!(NaN<=p);)++p;p=ha.decode(q.subarray?q.subarray(0,p):new Uint8Array(q.slice(0,p)));(1===a?ea:z)(p);q.length=0}else q.push(p)}g+=k}H[d>>2]=g;return 0},
a:D,s:function(){},u:function(a,b,c,d){return ub(a,b,c,d)}};
(function(){function a(g){f.asm=g.exports;L=f.asm.E;M--;f.monitorRunDependencies&&f.monitorRunDependencies(M);0==M&&(null!==Ba&&(clearInterval(Ba),Ba=null),N&&(g=N,N=null,g()))}function b(g){a(g.instance)}function c(g){return Fa().then(function(h){return WebAssembly.instantiate(h,d)}).then(g,function(h){z("failed to asynchronously prepare wasm: "+h);C(h)})}var d={a:Ab};M++;f.monitorRunDependencies&&f.monitorRunDependencies(M);if(f.instantiateWasm)try{return f.instantiateWasm(d,a)}catch(g){return z("Module.instantiateWasm callback failed with error: "+

Binary file not shown.

View File

@@ -17,7 +17,7 @@ function Da(a){return 2*a.length}function Ea(a,b){for(var c=0,d="";!(c>=b/4);){v
function Ga(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}function Ha(a,b){e().set(a,b)}var n,aa,ba,ca,fa,ha,ia,ka,ma;function u(a){n=a;D.HEAP8=aa=new Int8Array(a);D.HEAP16=ca=new Int16Array(a);D.HEAP32=ha=new Int32Array(a);D.HEAPU8=ba=new Uint8Array(a);D.HEAPU16=fa=new Uint16Array(a);D.HEAPU32=ia=new Uint32Array(a);D.HEAPF32=ka=new Float32Array(a);D.HEAPF64=ma=new Float64Array(a)}var Ia=D.INITIAL_MEMORY||16777216;
if(G)m=D.wasmMemory,n=D.buffer;else if(D.wasmMemory)m=D.wasmMemory;else if(m=new WebAssembly.Memory({initial:Ia/65536,maximum:32768,shared:!0}),!(m.buffer instanceof SharedArrayBuffer))throw J("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),Error("bad memory");m&&(n=m.buffer);Ia=n.byteLength;u(n);var M,Ja=[],Ka=[],La=[],Ma=[];
function Na(){var a=D.preRun.shift();Ja.unshift(a)}var N=0,Oa=null,Pa=null;D.preloadedImages={};D.preloadedAudios={};function K(a){if(D.onAbort)D.onAbort(a);G&&console.error("Pthread aborting at "+Error().stack);J(a);va=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");oa(a);throw a;}function Qa(){var a=O;return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}var O="jxl_enc_mt.wasm";
Qa()||(O=qa(O));function Ra(){try{if(ta)return new Uint8Array(ta);if(ra)return ra(O);throw"both async and sync fetching of the wasm failed";}catch(a){K(a)}}function Sa(){return ta||"function"!==typeof fetch?Promise.resolve().then(Ra):fetch(O,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+O+"'";return a.arrayBuffer()}).catch(function(){return Ra()})}var Ua={60485:function(a,b){setTimeout(function(){Ta(a,b)},0)},60563:function(){throw"Canceled!";}};
Qa()||(O=qa(O));function Ra(){try{if(ta)return new Uint8Array(ta);if(ra)return ra(O);throw"both async and sync fetching of the wasm failed";}catch(a){K(a)}}function Sa(){return ta||"function"!==typeof fetch?Promise.resolve().then(Ra):fetch(O,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+O+"'";return a.arrayBuffer()}).catch(function(){return Ra()})}var Ua={60853:function(a,b){setTimeout(function(){Ta(a,b)},0)},60931:function(){throw"Canceled!";}};
function Va(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(D);else{var c=b.Bb;"number"===typeof c?void 0===b.Va?M.get(c)():M.get(c)(b.Va):c(void 0===b.Va?null:b.Va)}}}function Wa(a,b,c){var d;-1!=a.indexOf("j")?d=c&&c.length?D["dynCall_"+a].apply(null,[b].concat(c)):D["dynCall_"+a].call(null,b):d=M.get(b).apply(null,c);return d}D.dynCall=Wa;var P=0,Xa=0,Ya=0;function Za(a,b,c){P=a|0;Ya=b|0;Xa=c|0}D.registerPthreadPtr=Za;
function $a(a,b){if(0>=a||a>e().length||a&1||0>b)return-28;if(0==b)return 0;2147483647<=b&&(b=Infinity);var c=Atomics.load(A(),Q.rb>>2),d=0;if(c==a&&Atomics.compareExchange(A(),Q.rb>>2,c,0)==c&&(--b,d=1,0>=b))return 1;a=Atomics.notify(A(),a>>2,b);if(0<=a)return a+d;throw"Atomics.notify returned an unexpected value "+a;}D._emscripten_futex_wake=$a;
function ab(a){if(G)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!a)throw"Internal Error! Null pthread_ptr in cleanupThread!";A()[a+12>>2]=0;(a=Q.Oa[a])&&Q.bb(a.worker)}
@@ -77,10 +77,10 @@ r){if("number"!==typeof r&&"boolean"!==typeof r)throw new TypeError('Cannot conv
Uint32Array,Float32Array,Float64Array][b];c=W(c);V(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{Gb:!0})},u:function(a,b){b=W(b);var c="std::string"===b;V(a,{name:b,fromWireType:function(d){var f=C()[d>>2];if(c)for(var g=d+4,l=0;l<=f;++l){var k=d+4+l;if(l==f||0==v()[k]){g=L(g,k-g);if(void 0===q)var q=g;else q+=String.fromCharCode(0),q+=g;g=k+1}}else{q=Array(f);for(l=0;l<f;++l)q[l]=String.fromCharCode(v()[d+4+l]);q=q.join("")}S(d);return q},toWireType:function(d,f){f instanceof
ArrayBuffer&&(f=new Uint8Array(f));var g="string"===typeof f;g||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||X("Cannot pass non-string to std::string");var l=(c&&g?function(){return Aa(f)}:function(){return f.length})(),k=R(4+l+1);C()[k>>2]=l;if(c&&g)za(f,k+4,l+1);else if(g)for(g=0;g<l;++g){var q=f.charCodeAt(g);255<q&&(S(k),X("String has UTF-16 code units that do not fit in 8 bits"));v()[k+4+g]=q}else for(g=0;g<l;++g)v()[k+4+g]=f[g];null!==d&&d.push(S,k);return k},
argPackAdvance:8,readValueFromPointer:nb,Pa:function(d){S(d)}})},q:function(a,b,c){c=W(c);if(2===b){var d=Ba;var f=Ca;var g=Da;var l=function(){return ea()};var k=1}else 4===b&&(d=Ea,f=Fa,g=Ga,l=function(){return C()},k=2);V(a,{name:c,fromWireType:function(q){for(var t=C()[q>>2],r=l(),w,z=q+4,h=0;h<=t;++h){var p=q+4+h*b;if(h==t||0==r[p>>k])z=d(z,p-z),void 0===w?w=z:(w+=String.fromCharCode(0),w+=z),z=p+b}S(q);return w},toWireType:function(q,t){"string"!==typeof t&&X("Cannot pass non-string to C++ string type "+
c);var r=g(t),w=R(4+r+b);C()[w>>2]=r>>k;f(t,w+4,r+b);null!==q&&q.push(S,w);return w},argPackAdvance:8,readValueFromPointer:nb,Pa:function(q){S(q)}})},x:function(a,b,c,d,f,g){lb[a]={name:W(b),Ob:Hb(c,d),Pb:Hb(f,g),ob:[]}},k:function(a,b,c,d,f,g,l,k,q,t){lb[a].ob.push({Ab:W(b),Fb:c,Db:Hb(d,f),Eb:g,Yb:l,Xb:Hb(k,q),Zb:t})},T:function(a,b){b=W(b);V(a,{oc:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},H:function(a,b){if(a==b)postMessage({cmd:"processQueuedMainThreadWork"});
c);var r=g(t),w=R(4+r+b);C()[w>>2]=r>>k;f(t,w+4,r+b);null!==q&&q.push(S,w);return w},argPackAdvance:8,readValueFromPointer:nb,Pa:function(q){S(q)}})},x:function(a,b,c,d,f,g){lb[a]={name:W(b),Ob:Hb(c,d),Pb:Hb(f,g),ob:[]}},l:function(a,b,c,d,f,g,l,k,q,t){lb[a].ob.push({Ab:W(b),Fb:c,Db:Hb(d,f),Eb:g,Yb:l,Xb:Hb(k,q),Zb:t})},T:function(a,b){b=W(b);V(a,{oc:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},H:function(a,b){if(a==b)postMessage({cmd:"processQueuedMainThreadWork"});
else if(G)postMessage({targetThread:a,cmd:"processThreadQueue"});else{a=(a=Q.Oa[a])&&a.worker;if(!a)return;a.postMessage({cmd:"processThreadQueue"})}return 1},m:yb,W:function(a){if(0===a)return zb(Ob());var b=Nb[a];a=void 0===b?W(a):b;return zb(Ob()[a])},V:function(a){4<a&&(Y[a].jb+=1)},y:function(a,b,c,d){a||X("Cannot use deleted val. handle = "+a);a=Y[a].value;var f=Qb[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var l="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";
for(g=0;g<b;++g)l+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(Pb,D,zb);Qb[b]=f}return f(a,c,d)},b:function(){K()},n:function(a,b,c){Wb.length=0;var d;for(c>>=2;d=v()[b++];)(d=105>d)&&c&1&&c++,
Wb.push(d?la()[c++>>1]:A()[c]),++c;return Ua[a].apply(null,Wb)},J:function(){},r:function(){},f:Rb,g:$a,d:hb,p:function(){return Ya|0},o:function(){return Xa|0},C:function(a,b,c){v().copyWithin(a,b,b+c)},E:function(a,b,c){Vb.length=b;c>>=3;for(var d=0;d<b;d++)Vb[d]=la()[c+d];return(0>a?Ua[-a-1]:Cc[a]).apply(null,Vb)},l:function(a){a>>>=0;var b=v().length;if(a<=b||2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0<d%65536&&(d+=65536-d%
Wb.push(d?la()[c++>>1]:A()[c]),++c;return Ua[a].apply(null,Wb)},J:function(){},r:function(){},f:Rb,g:$a,d:hb,p:function(){return Ya|0},o:function(){return Xa|0},C:function(a,b,c){v().copyWithin(a,b,b+c)},E:function(a,b,c){Vb.length=b;c>>=3;for(var d=0;d<b;d++)Vb[d]=la()[c+d];return(0>a?Ua[-a-1]:Cc[a]).apply(null,Vb)},k:function(a){a>>>=0;var b=v().length;if(a<=b||2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0<d%65536&&(d+=65536-d%
65536);a:{try{m.grow(Math.min(2147483648,d)-n.byteLength+65535>>>16);u(m.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},F:function(a,b,c){return Yb(a)?Zb(a,b,c):ac(a,b,c)},e:function(){},G:function(a,b){var c={};b>>=2;c.alpha=!!A()[b];c.depth=!!A()[b+1];c.stencil=!!A()[b+2];c.antialias=!!A()[b+3];c.premultipliedAlpha=!!A()[b+4];c.preserveDrawingBuffer=!!A()[b+5];var d=A()[b+6];c.powerPreference=gc[d];c.failIfMajorPerformanceCaveat=!!A()[b+7];c.Mb=A()[b+8];c.qc=A()[b+9];c.nb=A()[b+
10];c.zb=A()[b+11];c.tc=A()[b+12];c.uc=A()[b+13];a=Yb(a);!a||c.zb?c=0:(a=a.getContext("webgl",c))?(b=R(8),A()[b+4>>2]=P|0,d={nc:b,attributes:c,version:c.Mb,Za:a},a.canvas&&(a.canvas.$a=d),("undefined"===typeof c.nb||c.nb)&&ec(d),c=b):c=0;return c},O:function(a,b){var c=0;ic().forEach(function(d,f){var g=b+c;f=A()[a+4*f>>2]=g;for(g=0;g<d.length;++g)e()[f++>>0]=d.charCodeAt(g);e()[f>>0]=0;c+=d.length+1});return 0},P:function(a,b){var c=ic();A()[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+
1});A()[b>>2]=d;return 0},Q:lc,z:mc,s:nc,B:function(){Q.Kb()},a:m||D.wasmMemory,D:ib,U:function(a,b,c,d){if("undefined"===typeof SharedArrayBuffer)return J("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!a)return J("pthread_create called with a null thread pointer!"),28;var f=[];if(G&&0===f.length)return Ec(687865856,a,b,c,d);var g=0,l=0,k=0,q=0;if(b){var t=A()[b>>2];t+=81920;g=A()[b+8>>2];l=0!==A()[b+12>>2];if(0===A()[b+16>>2]){var r=A()[b+20>>2],w=A()[b+
@@ -98,7 +98,7 @@ D._emscripten_sync_run_in_main_thread_2=function(){return(D._emscripten_sync_run
var Ec=D._emscripten_sync_run_in_main_thread_4=function(){return(Ec=D._emscripten_sync_run_in_main_thread_4=D.asm.wa).apply(null,arguments)};D._emscripten_sync_run_in_main_thread_5=function(){return(D._emscripten_sync_run_in_main_thread_5=D.asm.xa).apply(null,arguments)};D._emscripten_sync_run_in_main_thread_6=function(){return(D._emscripten_sync_run_in_main_thread_6=D.asm.ya).apply(null,arguments)};
D._emscripten_sync_run_in_main_thread_7=function(){return(D._emscripten_sync_run_in_main_thread_7=D.asm.za).apply(null,arguments)};var Ub=D._emscripten_run_in_main_runtime_thread_js=function(){return(Ub=D._emscripten_run_in_main_runtime_thread_js=D.asm.Aa).apply(null,arguments)},$b=D.__emscripten_call_on_thread=function(){return($b=D.__emscripten_call_on_thread=D.asm.Ba).apply(null,arguments)};D._emscripten_tls_init=function(){return(D._emscripten_tls_init=D.asm.Ca).apply(null,arguments)};
D.dynCall_viijii=function(){return(D.dynCall_viijii=D.asm.Da).apply(null,arguments)};D.dynCall_iiji=function(){return(D.dynCall_iiji=D.asm.Ea).apply(null,arguments)};D.dynCall_jiji=function(){return(D.dynCall_jiji=D.asm.Fa).apply(null,arguments)};D.dynCall_iiiiiijj=function(){return(D.dynCall_iiiiiijj=D.asm.Ga).apply(null,arguments)};D.dynCall_iiiiij=function(){return(D.dynCall_iiiiij=D.asm.Ha).apply(null,arguments)};D.dynCall_iiiiijj=function(){return(D.dynCall_iiiiijj=D.asm.Ia).apply(null,arguments)};
var cb=D._main_thread_futex=74984;D.PThread=Q;D.PThread=Q;D._pthread_self=pc;D.wasmMemory=m;D.ExitStatus=Hc;var Ic;function Hc(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Pa=function Jc(){Ic||Kc();Ic||(Pa=Jc)};
var cb=D._main_thread_futex=3060568;D.PThread=Q;D.PThread=Q;D._pthread_self=pc;D.wasmMemory=m;D.ExitStatus=Hc;var Ic;function Hc(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Pa=function Jc(){Ic||Kc();Ic||(Pa=Jc)};
function Kc(){function a(){if(!Ic&&(Ic=!0,D.calledRun=!0,!va)){Va(Ka);G||Va(La);na(D);if(D.onRuntimeInitialized)D.onRuntimeInitialized();if(!G){if(D.postRun)for("function"==typeof D.postRun&&(D.postRun=[D.postRun]);D.postRun.length;){var b=D.postRun.shift();Ma.unshift(b)}Va(Ma)}}}if(!(0<N)){if(!G){if(D.preRun)for("function"==typeof D.preRun&&(D.preRun=[D.preRun]);D.preRun.length;)Na();Va(Ja)}0<N||(D.setStatus?(D.setStatus("Running..."),setTimeout(function(){setTimeout(function(){D.setStatus("")},
1);a()},1)):a())}}D.run=Kc;if(D.preInit)for("function"==typeof D.preInit&&(D.preInit=[D.preInit]);0<D.preInit.length;)D.preInit.pop()();G||(noExitRuntime=!0);G?Q.Lb():Kc();

Binary file not shown.

View File

@@ -17,7 +17,7 @@ function Da(a){return 2*a.length}function Ea(a,b){for(var c=0,d="";!(c>=b/4);){v
function Ga(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}function Ha(a,b){e().set(a,b)}var n,aa,ba,ca,fa,ha,ia,ka,ma;function u(a){n=a;D.HEAP8=aa=new Int8Array(a);D.HEAP16=ca=new Int16Array(a);D.HEAP32=ha=new Int32Array(a);D.HEAPU8=ba=new Uint8Array(a);D.HEAPU16=fa=new Uint16Array(a);D.HEAPU32=ia=new Uint32Array(a);D.HEAPF32=ka=new Float32Array(a);D.HEAPF64=ma=new Float64Array(a)}var Ia=D.INITIAL_MEMORY||16777216;
if(G)m=D.wasmMemory,n=D.buffer;else if(D.wasmMemory)m=D.wasmMemory;else if(m=new WebAssembly.Memory({initial:Ia/65536,maximum:32768,shared:!0}),!(m.buffer instanceof SharedArrayBuffer))throw J("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),Error("bad memory");m&&(n=m.buffer);Ia=n.byteLength;u(n);var M,Ja=[],Ka=[],La=[],Ma=[];
function Na(){var a=D.preRun.shift();Ja.unshift(a)}var N=0,Oa=null,Pa=null;D.preloadedImages={};D.preloadedAudios={};function K(a){if(D.onAbort)D.onAbort(a);G&&console.error("Pthread aborting at "+Error().stack);J(a);va=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");oa(a);throw a;}function Qa(){var a=O;return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}var O="jxl_enc_mt_simd.wasm";
Qa()||(O=qa(O));function Ra(){try{if(ta)return new Uint8Array(ta);if(ra)return ra(O);throw"both async and sync fetching of the wasm failed";}catch(a){K(a)}}function Sa(){return ta||"function"!==typeof fetch?Promise.resolve().then(Ra):fetch(O,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+O+"'";return a.arrayBuffer()}).catch(function(){return Ra()})}var Ua={60549:function(a,b){setTimeout(function(){Ta(a,b)},0)},60627:function(){throw"Canceled!";}};
Qa()||(O=qa(O));function Ra(){try{if(ta)return new Uint8Array(ta);if(ra)return ra(O);throw"both async and sync fetching of the wasm failed";}catch(a){K(a)}}function Sa(){return ta||"function"!==typeof fetch?Promise.resolve().then(Ra):fetch(O,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+O+"'";return a.arrayBuffer()}).catch(function(){return Ra()})}var Ua={60933:function(a,b){setTimeout(function(){Ta(a,b)},0)},61011:function(){throw"Canceled!";}};
function Va(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(D);else{var c=b.Bb;"number"===typeof c?void 0===b.Va?M.get(c)():M.get(c)(b.Va):c(void 0===b.Va?null:b.Va)}}}function Wa(a,b,c){var d;-1!=a.indexOf("j")?d=c&&c.length?D["dynCall_"+a].apply(null,[b].concat(c)):D["dynCall_"+a].call(null,b):d=M.get(b).apply(null,c);return d}D.dynCall=Wa;var P=0,Xa=0,Ya=0;function Za(a,b,c){P=a|0;Ya=b|0;Xa=c|0}D.registerPthreadPtr=Za;
function $a(a,b){if(0>=a||a>e().length||a&1||0>b)return-28;if(0==b)return 0;2147483647<=b&&(b=Infinity);var c=Atomics.load(A(),Q.rb>>2),d=0;if(c==a&&Atomics.compareExchange(A(),Q.rb>>2,c,0)==c&&(--b,d=1,0>=b))return 1;a=Atomics.notify(A(),a>>2,b);if(0<=a)return a+d;throw"Atomics.notify returned an unexpected value "+a;}D._emscripten_futex_wake=$a;
function ab(a){if(G)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!a)throw"Internal Error! Null pthread_ptr in cleanupThread!";A()[a+12>>2]=0;(a=Q.Oa[a])&&Q.bb(a.worker)}
@@ -78,10 +78,10 @@ r){if("number"!==typeof r&&"boolean"!==typeof r)throw new TypeError('Cannot conv
Uint32Array,Float32Array,Float64Array][b];c=W(c);V(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{Gb:!0})},u:function(a,b){b=W(b);var c="std::string"===b;V(a,{name:b,fromWireType:function(d){var f=C()[d>>2];if(c)for(var g=d+4,l=0;l<=f;++l){var k=d+4+l;if(l==f||0==v()[k]){g=L(g,k-g);if(void 0===q)var q=g;else q+=String.fromCharCode(0),q+=g;g=k+1}}else{q=Array(f);for(l=0;l<f;++l)q[l]=String.fromCharCode(v()[d+4+l]);q=q.join("")}S(d);return q},toWireType:function(d,f){f instanceof
ArrayBuffer&&(f=new Uint8Array(f));var g="string"===typeof f;g||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||X("Cannot pass non-string to std::string");var l=(c&&g?function(){return Aa(f)}:function(){return f.length})(),k=R(4+l+1);C()[k>>2]=l;if(c&&g)za(f,k+4,l+1);else if(g)for(g=0;g<l;++g){var q=f.charCodeAt(g);255<q&&(S(k),X("String has UTF-16 code units that do not fit in 8 bits"));v()[k+4+g]=q}else for(g=0;g<l;++g)v()[k+4+g]=f[g];null!==d&&d.push(S,k);return k},
argPackAdvance:8,readValueFromPointer:nb,Pa:function(d){S(d)}})},q:function(a,b,c){c=W(c);if(2===b){var d=Ba;var f=Ca;var g=Da;var l=function(){return ea()};var k=1}else 4===b&&(d=Ea,f=Fa,g=Ga,l=function(){return C()},k=2);V(a,{name:c,fromWireType:function(q){for(var t=C()[q>>2],r=l(),w,z=q+4,h=0;h<=t;++h){var p=q+4+h*b;if(h==t||0==r[p>>k])z=d(z,p-z),void 0===w?w=z:(w+=String.fromCharCode(0),w+=z),z=p+b}S(q);return w},toWireType:function(q,t){"string"!==typeof t&&X("Cannot pass non-string to C++ string type "+
c);var r=g(t),w=R(4+r+b);C()[w>>2]=r>>k;f(t,w+4,r+b);null!==q&&q.push(S,w);return w},argPackAdvance:8,readValueFromPointer:nb,Pa:function(q){S(q)}})},x:function(a,b,c,d,f,g){lb[a]={name:W(b),Ob:Hb(c,d),Pb:Hb(f,g),ob:[]}},k:function(a,b,c,d,f,g,l,k,q,t){lb[a].ob.push({Ab:W(b),Fb:c,Db:Hb(d,f),Eb:g,Yb:l,Xb:Hb(k,q),Zb:t})},T:function(a,b){b=W(b);V(a,{oc:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},H:function(a,b){if(a==b)postMessage({cmd:"processQueuedMainThreadWork"});
c);var r=g(t),w=R(4+r+b);C()[w>>2]=r>>k;f(t,w+4,r+b);null!==q&&q.push(S,w);return w},argPackAdvance:8,readValueFromPointer:nb,Pa:function(q){S(q)}})},x:function(a,b,c,d,f,g){lb[a]={name:W(b),Ob:Hb(c,d),Pb:Hb(f,g),ob:[]}},l:function(a,b,c,d,f,g,l,k,q,t){lb[a].ob.push({Ab:W(b),Fb:c,Db:Hb(d,f),Eb:g,Yb:l,Xb:Hb(k,q),Zb:t})},T:function(a,b){b=W(b);V(a,{oc:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},H:function(a,b){if(a==b)postMessage({cmd:"processQueuedMainThreadWork"});
else if(G)postMessage({targetThread:a,cmd:"processThreadQueue"});else{a=(a=Q.Oa[a])&&a.worker;if(!a)return;a.postMessage({cmd:"processThreadQueue"})}return 1},m:yb,W:function(a){if(0===a)return zb(Ob());var b=Nb[a];a=void 0===b?W(a):b;return zb(Ob()[a])},V:function(a){4<a&&(Y[a].jb+=1)},y:function(a,b,c,d){a||X("Cannot use deleted val. handle = "+a);a=Y[a].value;var f=Qb[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var l="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";
for(g=0;g<b;++g)l+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(Pb,D,zb);Qb[b]=f}return f(a,c,d)},b:function(){K()},n:function(a,b,c){Wb.length=0;var d;for(c>>=2;d=v()[b++];)(d=105>d)&&c&1&&c++,
Wb.push(d?la()[c++>>1]:A()[c]),++c;return Ua[a].apply(null,Wb)},J:function(){},r:function(){},f:Rb,g:$a,d:hb,p:function(){return Ya|0},o:function(){return Xa|0},C:function(a,b,c){v().copyWithin(a,b,b+c)},E:function(a,b,c){Vb.length=b;c>>=3;for(var d=0;d<b;d++)Vb[d]=la()[c+d];return(0>a?Ua[-a-1]:Cc[a]).apply(null,Vb)},l:function(a){a>>>=0;var b=v().length;if(a<=b||2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0<d%65536&&(d+=65536-d%
Wb.push(d?la()[c++>>1]:A()[c]),++c;return Ua[a].apply(null,Wb)},J:function(){},r:function(){},f:Rb,g:$a,d:hb,p:function(){return Ya|0},o:function(){return Xa|0},C:function(a,b,c){v().copyWithin(a,b,b+c)},E:function(a,b,c){Vb.length=b;c>>=3;for(var d=0;d<b;d++)Vb[d]=la()[c+d];return(0>a?Ua[-a-1]:Cc[a]).apply(null,Vb)},k:function(a){a>>>=0;var b=v().length;if(a<=b||2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0<d%65536&&(d+=65536-d%
65536);a:{try{m.grow(Math.min(2147483648,d)-n.byteLength+65535>>>16);u(m.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},F:function(a,b,c){return Yb(a)?Zb(a,b,c):ac(a,b,c)},e:function(){},G:function(a,b){var c={};b>>=2;c.alpha=!!A()[b];c.depth=!!A()[b+1];c.stencil=!!A()[b+2];c.antialias=!!A()[b+3];c.premultipliedAlpha=!!A()[b+4];c.preserveDrawingBuffer=!!A()[b+5];var d=A()[b+6];c.powerPreference=gc[d];c.failIfMajorPerformanceCaveat=!!A()[b+7];c.Mb=A()[b+8];c.qc=A()[b+9];c.nb=A()[b+
10];c.zb=A()[b+11];c.tc=A()[b+12];c.uc=A()[b+13];a=Yb(a);!a||c.zb?c=0:(a=a.getContext("webgl",c))?(b=R(8),A()[b+4>>2]=P|0,d={nc:b,attributes:c,version:c.Mb,Za:a},a.canvas&&(a.canvas.$a=d),("undefined"===typeof c.nb||c.nb)&&ec(d),c=b):c=0;return c},O:function(a,b){var c=0;ic().forEach(function(d,f){var g=b+c;f=A()[a+4*f>>2]=g;for(g=0;g<d.length;++g)e()[f++>>0]=d.charCodeAt(g);e()[f>>0]=0;c+=d.length+1});return 0},P:function(a,b){var c=ic();A()[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+
1});A()[b>>2]=d;return 0},Q:lc,z:mc,s:nc,B:function(){Q.Kb()},a:m||D.wasmMemory,D:ib,U:function(a,b,c,d){if("undefined"===typeof SharedArrayBuffer)return J("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!a)return J("pthread_create called with a null thread pointer!"),28;var f=[];if(G&&0===f.length)return Ec(687865856,a,b,c,d);var g=0,l=0,k=0,q=0;if(b){var t=A()[b>>2];t+=81920;g=A()[b+8>>2];l=0!==A()[b+12>>2];if(0===A()[b+16>>2]){var r=A()[b+20>>2],w=A()[b+
@@ -99,7 +99,7 @@ D._emscripten_sync_run_in_main_thread_2=function(){return(D._emscripten_sync_run
var Ec=D._emscripten_sync_run_in_main_thread_4=function(){return(Ec=D._emscripten_sync_run_in_main_thread_4=D.asm.wa).apply(null,arguments)};D._emscripten_sync_run_in_main_thread_5=function(){return(D._emscripten_sync_run_in_main_thread_5=D.asm.xa).apply(null,arguments)};D._emscripten_sync_run_in_main_thread_6=function(){return(D._emscripten_sync_run_in_main_thread_6=D.asm.ya).apply(null,arguments)};
D._emscripten_sync_run_in_main_thread_7=function(){return(D._emscripten_sync_run_in_main_thread_7=D.asm.za).apply(null,arguments)};var Ub=D._emscripten_run_in_main_runtime_thread_js=function(){return(Ub=D._emscripten_run_in_main_runtime_thread_js=D.asm.Aa).apply(null,arguments)},$b=D.__emscripten_call_on_thread=function(){return($b=D.__emscripten_call_on_thread=D.asm.Ba).apply(null,arguments)};D._emscripten_tls_init=function(){return(D._emscripten_tls_init=D.asm.Ca).apply(null,arguments)};
D.dynCall_viijii=function(){return(D.dynCall_viijii=D.asm.Da).apply(null,arguments)};D.dynCall_iiji=function(){return(D.dynCall_iiji=D.asm.Ea).apply(null,arguments)};D.dynCall_jiji=function(){return(D.dynCall_jiji=D.asm.Fa).apply(null,arguments)};D.dynCall_iiiiiijj=function(){return(D.dynCall_iiiiiijj=D.asm.Ga).apply(null,arguments)};D.dynCall_iiiiij=function(){return(D.dynCall_iiiiij=D.asm.Ha).apply(null,arguments)};D.dynCall_iiiiijj=function(){return(D.dynCall_iiiiijj=D.asm.Ia).apply(null,arguments)};
var cb=D._main_thread_futex=75048;D.PThread=Q;D.PThread=Q;D._pthread_self=pc;D.wasmMemory=m;D.ExitStatus=Hc;var Ic;function Hc(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Pa=function Jc(){Ic||Kc();Ic||(Pa=Jc)};
var cb=D._main_thread_futex=3060648;D.PThread=Q;D.PThread=Q;D._pthread_self=pc;D.wasmMemory=m;D.ExitStatus=Hc;var Ic;function Hc(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Pa=function Jc(){Ic||Kc();Ic||(Pa=Jc)};
function Kc(){function a(){if(!Ic&&(Ic=!0,D.calledRun=!0,!va)){Va(Ka);G||Va(La);na(D);if(D.onRuntimeInitialized)D.onRuntimeInitialized();if(!G){if(D.postRun)for("function"==typeof D.postRun&&(D.postRun=[D.postRun]);D.postRun.length;){var b=D.postRun.shift();Ma.unshift(b)}Va(Ma)}}}if(!(0<N)){if(!G){if(D.preRun)for("function"==typeof D.preRun&&(D.preRun=[D.preRun]);D.preRun.length;)Na();Va(Ja)}0<N||(D.setStatus?(D.setStatus("Running..."),setTimeout(function(){setTimeout(function(){D.setStatus("")},
1);a()},1)):a())}}D.run=Kc;if(D.preInit)for("function"==typeof D.preInit&&(D.preInit=[D.preInit]);0<D.preInit.length;)D.preInit.pop()();G||(noExitRuntime=!0);G?Q.Lb():Kc();

Binary file not shown.

View File

@@ -50,9 +50,9 @@ v.push(q+"}\n");k=$a(v).apply(null,p);l=b-1;if(!f.hasOwnProperty(m))throw new Qa
readValueFromPointer:d},{ka:!0})},k:function(a,b){b=V(b);var c="std::string"===b;T(a,{name:b,fromWireType:function(d){var g=J[d>>2];if(c)for(var h=d+4,n=0;n<=g;++n){var m=d+4+n;if(n==g||0==D[m]){h=ma(h,m-h);if(void 0===k)var k=h;else k+=String.fromCharCode(0),k+=h;h=m+1}}else{k=Array(g);for(n=0;n<g;++n)k[n]=String.fromCharCode(D[d+4+n]);k=k.join("")}Z(d);return k},toWireType:function(d,g){g instanceof ArrayBuffer&&(g=new Uint8Array(g));var h="string"===typeof g;h||g instanceof Uint8Array||g instanceof
Uint8ClampedArray||g instanceof Int8Array||W("Cannot pass non-string to std::string");var n=(c&&h?function(){return oa(g)}:function(){return g.length})(),m=Bb(4+n+1);J[m>>2]=n;if(c&&h)na(g,D,m+4,n+1);else if(h)for(h=0;h<n;++h){var k=g.charCodeAt(h);255<k&&(Z(m),W("String has UTF-16 code units that do not fit in 8 bits"));D[m+4+h]=k}else for(h=0;h<n;++h)D[m+4+h]=g[h];null!==d&&d.push(Z,m);return m},argPackAdvance:8,readValueFromPointer:La,T:function(d){Z(d)}})},h:function(a,b,c){c=V(c);if(2===b){var d=
qa;var g=ra;var h=sa;var n=function(){return E};var m=1}else 4===b&&(d=ta,g=ua,h=va,n=function(){return J},m=2);T(a,{name:c,fromWireType:function(k){for(var q=J[k>>2],p=n(),r,x=k+4,e=0;e<=q;++e){var l=k+4+e*b;if(e==q||0==p[l>>m])x=d(x,l-x),void 0===r?r=x:(r+=String.fromCharCode(0),r+=x),x=l+b}Z(k);return r},toWireType:function(k,q){"string"!==typeof q&&W("Cannot pass non-string to C++ string type "+c);var p=h(q),r=Bb(4+p+b);J[r>>2]=p>>m;g(q,r+4,p+b);null!==k&&k.push(Z,r);return r},argPackAdvance:8,
readValueFromPointer:La,T:function(k){Z(k)}})},n:function(a,b,c,d,g,h){Q[a]={name:V(b),ma:Y(c,d),na:Y(g,h),ba:[]}},e:function(a,b,c,d,g,h,n,m,k,q){Q[a].ba.push({fa:V(b),ja:c,ha:Y(d,g),ia:h,ua:n,ta:Y(m,k),va:q})},A:function(a,b){b=V(b);T(a,{Aa:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},g:Wa,C:function(a){if(0===a)return Xa(kb());var b=jb[a];a=void 0===b?V(a):b;return Xa(kb()[a])},B:function(a){4<a&&(X[a].aa+=1)},o:function(a,b,c,d){a||W("Cannot use deleted val. handle = "+
readValueFromPointer:La,T:function(k){Z(k)}})},n:function(a,b,c,d,g,h){Q[a]={name:V(b),ma:Y(c,d),na:Y(g,h),ba:[]}},f:function(a,b,c,d,g,h,n,m,k,q){Q[a].ba.push({fa:V(b),ja:c,ha:Y(d,g),ia:h,ua:n,ta:Y(m,k),va:q})},A:function(a,b){b=V(b);T(a,{Aa:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},g:Wa,C:function(a){if(0===a)return Xa(kb());var b=jb[a];a=void 0===b?V(a):b;return Xa(kb()[a])},B:function(a){4<a&&(X[a].aa+=1)},o:function(a,b,c,d){a||W("Cannot use deleted val. handle = "+
a);a=X[a].value;var g=mb[b];if(!g){g="";for(var h=0;h<b;++h)g+=(0!==h?", ":"")+"arg"+h;var n="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(h=0;h<b;++h)n+="var argType"+h+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+h+'], "parameter '+h+'");\nvar arg'+h+" = argType"+h+".readValueFromPointer(args);\nargs += argType"+h+"['argPackAdvance'];\n";g=(new Function("requireRegisteredType","Module","__emval_register",n+("var obj = new constructor("+g+");\nreturn __emval_register(obj);\n}\n")))(lb,
f,Xa);mb[b]=g}return g(a,c,d)},b:function(){y()},t:function(a,b,c){D.copyWithin(a,b,b+c)},f:function(a){a>>>=0;var b=D.length;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0<d%65536&&(d+=65536-d%65536);a:{try{C.grow(Math.min(2147483648,d)-H.byteLength+65535>>>16);ya(C.buffer);var g=1;break a}catch(h){}g=void 0}if(g)return!0}return!1},v:function(a,b){var c=0;ob().forEach(function(d,g){var h=b+c;g=G[a+4*g>>2]=h;for(h=0;h<d.length;++h)I[g++>>
f,Xa);mb[b]=g}return g(a,c,d)},b:function(){y()},t:function(a,b,c){D.copyWithin(a,b,b+c)},e:function(a){a>>>=0;var b=D.length;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0<d%65536&&(d+=65536-d%65536);a:{try{C.grow(Math.min(2147483648,d)-H.byteLength+65535>>>16);ya(C.buffer);var g=1;break a}catch(h){}g=void 0}if(g)return!0}return!1},v:function(a,b){var c=0;ob().forEach(function(d,g){var h=b+c;g=G[a+4*g>>2]=h;for(h=0;h<d.length;++h)I[g++>>
0]=d.charCodeAt(h);I[g>>0]=0;c+=d.length+1});return 0},w:function(a,b){var c=ob();G[a>>2]=c.length;var d=0;c.forEach(function(g){d+=g.length+1});G[b>>2]=d;return 0},x:function(){return 0},r:function(){},i:function(a,b,c,d){for(var g=0,h=0;h<c;h++){for(var n=G[b+8*h>>2],m=G[b+(8*h+4)>>2],k=0;k<m;k++){var q=D[n+k],p=qb[a];if(0===q||10===q){q=1===a?ja:z;var r;for(r=0;p[r]&&!(NaN<=r);)++r;r=la.decode(p.subarray?p.subarray(0,r):new Uint8Array(p.slice(0,r)));q(r);p.length=0}else p.push(q)}g+=m}G[d>>2]=
g;return 0},a:C,s:function(){},u:function(a,b,c,d){return wb(a,b,c,d)}};
(function(){function a(g){f.asm=g.exports;K=f.asm.E;L--;f.monitorRunDependencies&&f.monitorRunDependencies(L);0==L&&(null!==Fa&&(clearInterval(Fa),Fa=null),M&&(g=M,M=null,g()))}function b(g){a(g.instance)}function c(g){return Promise.resolve().then(Ia).then(function(h){return WebAssembly.instantiate(h,d)}).then(g,function(h){z("failed to asynchronously prepare wasm: "+h);y(h)})}var d={a:Cb};L++;f.monitorRunDependencies&&f.monitorRunDependencies(L);if(f.instantiateWasm)try{return f.instantiateWasm(d,

Binary file not shown.

View File

@@ -46,10 +46,7 @@ $(CODEC_DIR)/Makefile: $(CODEC_DIR)/configure
--without-turbojpeg \
--without-simd \
--without-arith-enc \
--without-arith-dec \
--with-build-date=squoosh
# ^ If not provided with a dummy value, MozJPEG includes a build date in the
# binary as part of the version string, making binaries different each time.
--without-arith-dec
$(CODEC_DIR)/configure: $(CODEC_DIR)/configure.ac
cd $(CODEC_DIR) && autoreconf -iv

View File

@@ -141,7 +141,6 @@ val encode(std::string image_in, int image_width, int image_height, MozJpegOptio
jpeg_c_set_bool_param(&cinfo, JBOOLEAN_TRELLIS_EOB_OPT, opts.trellis_opt_zero);
jpeg_c_set_bool_param(&cinfo, JBOOLEAN_TRELLIS_Q_OPT, opts.trellis_opt_table);
jpeg_c_set_int_param(&cinfo, JINT_TRELLIS_NUM_LOOPS, opts.trellis_loops);
jpeg_c_set_int_param(&cinfo, JINT_DC_SCAN_OPT_MODE, 0);
// A little hacky to build a string for this, but it means we can use
// set_quality_ratings which does some useful heuristic stuff.
@@ -161,84 +160,7 @@ val encode(std::string image_in, int image_width, int image_height, MozJpegOptio
}
if (!opts.baseline && opts.progressive) {
if (cinfo.jpeg_color_space != JCS_YCbCr) {
jpeg_simple_progression(&cinfo);
} else {
jpeg_c_set_bool_param(&cinfo, JBOOLEAN_OPTIMIZE_SCANS, FALSE);
int num_scans = 8;
if (cinfo.script_space == NULL || cinfo.script_space_size < num_scans) {
cinfo.script_space_size = ((num_scans) > (10) ? (num_scans) : (10));
cinfo.script_space = (jpeg_scan_info*)(*cinfo.mem->alloc_small)(
(j_common_ptr)&cinfo, JPOOL_PERMANENT,
cinfo.script_space_size * sizeof(jpeg_scan_info));
}
jpeg_scan_info* scanptr = cinfo.script_space;
cinfo.scan_info = scanptr;
cinfo.num_scans = num_scans;
// DC scan
scanptr->comps_in_scan = 3;
for (int ci = 0; ci < 3; ci++) {
scanptr->component_index[ci] = ci;
}
scanptr->Ss = scanptr->Se = scanptr->Ah = scanptr->Al = 0;
scanptr++;
// Luma progressions
scanptr->comps_in_scan = 1;
scanptr->component_index[0] = 0;
scanptr->Ss = 1;
scanptr->Se = 63;
scanptr->Ah = 0;
scanptr->Al = 2;
scanptr++;
scanptr->comps_in_scan = 1;
scanptr->component_index[0] = 0;
scanptr->Ss = 1;
scanptr->Se = 63;
scanptr->Ah = 2;
scanptr->Al = 1;
scanptr++;
// Chroma almost full
scanptr->comps_in_scan = 1;
scanptr->component_index[0] = 2;
scanptr->Ss = 1;
scanptr->Se = 63;
scanptr->Ah = 0;
scanptr->Al = 1;
scanptr++;
scanptr->comps_in_scan = 1;
scanptr->component_index[0] = 1;
scanptr->Ss = 1;
scanptr->Se = 63;
scanptr->Ah = 0;
scanptr->Al = 1;
scanptr++;
// Luma full
scanptr->comps_in_scan = 1;
scanptr->component_index[0] = 0;
scanptr->Ss = 1;
scanptr->Se = 63;
scanptr->Ah = 1;
scanptr->Al = 0;
scanptr++;
// Chroma full
// TODO: once the decoder is fixed, try this vs full chroma earlier
// (as in, just one Chroma pass where it's currently "Chroma almost full")
scanptr->comps_in_scan = 1;
scanptr->component_index[0] = 2;
scanptr->Ss = 1;
scanptr->Se = 63;
scanptr->Ah = 1;
scanptr->Al = 0;
scanptr++;
scanptr->comps_in_scan = 1;
scanptr->component_index[0] = 1;
scanptr->Ss = 1;
scanptr->Se = 63;
scanptr->Ah = 1;
scanptr->Al = 0;
scanptr++;
}
jpeg_simple_progression(&cinfo);
} else {
cinfo.num_scans = 0;
cinfo.scan_info = NULL;

Binary file not shown.

16
codecs/png/Cargo.lock generated
View File

@@ -18,12 +18,6 @@ version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820"
[[package]]
name = "bytemuck"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bed57e2090563b83ba8f83366628ce535a7584c9afa4c9fc0612a03925c6df58"
[[package]]
name = "byteorder"
version = "1.3.4"
@@ -118,21 +112,11 @@ dependencies = [
"proc-macro2",
]
[[package]]
name = "rgb"
version = "0.8.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "287f3c3f8236abb92d8b7e36797f19159df4b58f0a658cc3fb6dd3004b1f3bd3"
dependencies = [
"bytemuck",
]
[[package]]
name = "squoosh-png"
version = "0.1.0"
dependencies = [
"png",
"rgb",
"wasm-bindgen",
"web-sys",
]

View File

@@ -15,7 +15,6 @@ crate-type = ["cdylib"]
png = "0.16.7"
wasm-bindgen = "0.2.68"
web-sys = { version = "0.3.45", features = ["ImageData"] }
rgb = "0.8.25"
[profile.release]
lto = true

View File

@@ -1,22 +1,6 @@
let wasm;
let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
cachedTextDecoder.decode();
let cachegetUint8Memory0 = null;
function getUint8Memory0() {
if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {
cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);
}
return cachegetUint8Memory0;
}
function getStringFromWasm0(ptr, len) {
return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
}
let cachegetUint8ClampedMemory0 = null;
function getUint8ClampedMemory0() {
if (cachegetUint8ClampedMemory0 === null || cachegetUint8ClampedMemory0.buffer !== wasm.memory.buffer) {
@@ -44,6 +28,14 @@ function addHeapObject(obj) {
return idx;
}
let cachegetUint8Memory0 = null;
function getUint8Memory0() {
if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {
cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);
}
return cachegetUint8Memory0;
}
let WASM_VECTOR_LEN = 0;
function passArray8ToWasm0(arg, malloc) {
@@ -156,9 +148,6 @@ async function init(input) {
var ret = new ImageData(v0, arg2 >>> 0, arg3 >>> 0);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_throw = function(arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1));
};
if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
input = fetch(input);

Binary file not shown.

View File

@@ -1,7 +1,5 @@
use rgb::{
alt::{GRAY8, GRAYA8},
AsPixels, FromSlice, RGB8, RGBA8,
};
use std::io::Cursor;
use wasm_bindgen::prelude::*;
use wasm_bindgen::Clamped;
@@ -20,57 +18,38 @@ extern "C" {
) -> ImageData;
}
#[wasm_bindgen]
#[wasm_bindgen(catch)]
pub fn encode(data: &[u8], width: u32, height: u32) -> Vec<u8> {
let mut buffer = Vec::new();
let mut buffer = Cursor::new(Vec::<u8>::new());
{
let mut encoder = png::Encoder::new(&mut buffer, width, height);
encoder.set_color(png::ColorType::RGBA);
encoder.set_depth(png::BitDepth::Eight);
let mut writer = encoder.write_header().unwrap_throw();
writer.write_image_data(data).unwrap_throw();
let mut writer = encoder.write_header().unwrap();
writer.write_image_data(data).unwrap();
}
buffer
buffer.into_inner()
}
// Convert pixels in-place within buffer containing source data but preallocated
// for entire [num_pixels * sizeof(RGBA)].
// This works because all the color types are <= RGBA by size.
fn expand_pixels<Src: Copy>(buf: &mut [u8], to_rgba: impl Fn(Src) -> RGBA8)
where
[u8]: AsPixels<Src> + FromSlice<u8>,
{
assert!(std::mem::size_of::<Src>() <= std::mem::size_of::<RGBA8>());
let num_pixels = buf.len() / 4;
for i in (0..num_pixels).rev() {
let src_pixel = buf.as_pixels()[i];
buf.as_rgba_mut()[i] = to_rgba(src_pixel);
}
}
#[wasm_bindgen]
pub fn decode(mut data: &[u8]) -> ImageData {
let mut decoder = png::Decoder::new(&mut data);
#[wasm_bindgen(catch)]
pub fn decode(data: &[u8]) -> ImageData {
let mut decoder = png::Decoder::new(Cursor::new(data));
decoder.set_transformations(png::Transformations::EXPAND);
let (info, mut reader) = decoder.read_info().unwrap_throw();
let (info, mut reader) = decoder.read_info().unwrap();
let num_pixels = (info.width * info.height) as usize;
let mut buf = vec![0; num_pixels * 4];
reader.next_frame(&mut buf).unwrap_throw();
reader.next_frame(&mut buf).unwrap();
// Transformations::EXPAND will expand indexed palettes and lower-bit
// grayscales to higher color types, but we still need to transform
// the rest to RGBA.
match info.color_type {
png::ColorType::RGBA => {}
png::ColorType::RGB => expand_pixels(&mut buf, RGB8::into),
png::ColorType::GrayscaleAlpha => expand_pixels(&mut buf, GRAYA8::into),
png::ColorType::Grayscale => {
expand_pixels(&mut buf, |gray: GRAY8| GRAYA8::from(gray).into())
}
png::ColorType::Indexed => {
unreachable!("Found indexed color type, but expected it to be already expanded")
// Transformations::EXPAND will make sure color_type is either
// RGBA or RGB. If its RGB, we need inject an alpha channel.
if info.color_type == png::ColorType::RGB {
for i in (0..num_pixels).rev() {
buf[i * 4 + 0] = buf[i * 3 + 0];
buf[i * 4 + 1] = buf[i * 3 + 1];
buf[i * 4 + 2] = buf[i * 3 + 2];
buf[i * 4 + 3] = 255;
}
}

View File

@@ -133,9 +133,8 @@ pub fn resize(
unprocessed_output_image[4 * i + 3],
));
}
output_image[4 * i + 3] = (unprocessed_output_image[4 * i + 3] * 255.0)
.round()
.clamp(0.0, 255.0) as u8;
output_image[4 * i + 3] =
(unprocessed_output_image[4 * i + 3] * 255.0).clamp(0.0, 255.0) as u8;
}
return output_image;

View File

@@ -7,7 +7,7 @@ using namespace butteraugli;
// Turns an interleaved RGBA buffer into 4 planes for each color channel
void planarize(std::vector<ImageF>& img,
const uint8_t* rgba,
const char* rgba,
int width,
int height,
float gamma = 2.2) {
@@ -22,10 +22,10 @@ void planarize(std::vector<ImageF>& img,
float* const row_b = img[2].Row(y);
float* const row_a = img[3].Row(y);
for (int x = 0; x < width; x++) {
row_r[x] = 255.0 * pow(rgba[(y * width + x) * 4 + 0] / 255.0, gamma);
row_g[x] = 255.0 * pow(rgba[(y * width + x) * 4 + 1] / 255.0, gamma);
row_b[x] = 255.0 * pow(rgba[(y * width + x) * 4 + 2] / 255.0, gamma);
row_a[x] = 255.0 * pow(rgba[(y * width + x) * 4 + 3] / 255.0, gamma);
row_r[x] = 255.0 * pow(rgba[y * width * 4 + x * 4 + 0] / 255.0, gamma);
row_g[x] = 255.0 * pow(rgba[y * width * 4 + x * 4 + 1] / 255.0, gamma);
row_b[x] = 255.0 * pow(rgba[y * width * 4 + x * 4 + 2] / 255.0, gamma);
row_a[x] = 255.0 * pow(rgba[y * width * 4 + x * 4 + 3] / 255.0, gamma);
}
}
}
@@ -37,14 +37,14 @@ class VisDiff {
public:
VisDiff(std::string ref_img, int width, int height) {
planarize(this->ref_img, (uint8_t*)ref_img.c_str(), width, height);
planarize(this->ref_img, ref_img.c_str(), width, height);
this->width = width;
this->height = height;
}
double distance(std::string other_img) {
std::vector<ImageF> img;
planarize(img, (uint8_t*)other_img.c_str(), width, height);
planarize(img, other_img.c_str(), width, height);
ImageF diffmap;
double diffvalue;

View File

@@ -1,7 +1,7 @@
var visdif = (function() {
var _scriptDir = import.meta.url;
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;
return (
function(visdif) {
visdif = visdif || {};
@@ -71,4 +71,10 @@ f.run=Wb;if(f.preInit)for("function"==typeof f.preInit&&(f.preInit=[f.preInit]);
}
);
})();
export default visdif;
if (typeof exports === 'object' && typeof module === 'object')
module.exports = visdif;
else if (typeof define === 'function' && define['amd'])
define([], function() { return visdif; });
else if (typeof exports === 'object')
exports["visdif"] = visdif;

BIN
codecs/visdif/visdif.wasm Executable file → Normal file

Binary file not shown.

View File

@@ -12,11 +12,9 @@
*/
import { promises as fs } from 'fs';
import { basename } from 'path';
import { imageSize } from 'image-size';
const defaultOpts = {
prefix: 'url',
imagePrefix: 'img-url',
};
export default function urlPlugin(opts) {
@@ -26,7 +24,6 @@ export default function urlPlugin(opts) {
let assetIdToSourceBuffer;
const prefix = opts.prefix + ':';
const imagePrefix = opts.imagePrefix + ':';
return {
name: 'url-plugin',
buildStart() {
@@ -51,49 +48,28 @@ export default function urlPlugin(opts) {
return combinedBuffer;
},
async resolveId(id, importer) {
const idPrefix = [prefix, imagePrefix].find((prefix) =>
id.startsWith(prefix),
);
if (!idPrefix) return;
const realId = id.slice(idPrefix.length);
if (!id.startsWith(prefix)) return;
const realId = id.slice(prefix.length);
const resolveResult = await this.resolve(realId, importer);
if (!resolveResult) {
throw Error(`Cannot find ${realId}`);
}
// Add an additional .js to the end so it ends up with .js at the end in the _virtual folder.
return idPrefix + resolveResult.id + '.js';
return prefix + resolveResult.id + '.js';
},
async load(id) {
const idPrefix = [prefix, imagePrefix].find((prefix) =>
id.startsWith(prefix),
);
if (!idPrefix) return;
const realId = id.slice(idPrefix.length, -'.js'.length);
if (!id.startsWith(prefix)) return;
const realId = id.slice(prefix.length, -'.js'.length);
const source = await fs.readFile(realId);
assetIdToSourceBuffer.set(id, source);
this.addWatchFile(realId);
let imgSizeExport = '';
if (idPrefix === imagePrefix) {
const imgInfo = imageSize(source);
imgSizeExport = [
`export const width = ${JSON.stringify(imgInfo.width)};`,
`export const height = ${JSON.stringify(imgInfo.height)};`,
].join('\n');
}
return [
`export default import.meta.ROLLUP_FILE_URL_${this.emitFile({
type: 'asset',
source,
name: basename(realId),
})};`,
imgSizeExport,
].join('\n');
return `export default import.meta.ROLLUP_FILE_URL_${this.emitFile({
type: 'asset',
source,
name: basename(realId),
})}`;
},
};
}

7
missing-types.d.ts vendored
View File

@@ -22,13 +22,6 @@ declare module 'url:*' {
export default value;
}
declare module 'img-url:*' {
const value: string;
export default value;
export const width: number;
export const height: number;
}
declare module 'omt:*' {
const value: string;
export default value;

99
package-lock.json generated
View File

@@ -109,9 +109,9 @@
}
},
"@rollup/plugin-commonjs": {
"version": "17.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.0.0.tgz",
"integrity": "sha512-/omBIJG1nHQc+bgkYDuLpb/V08QyutP9amOrJRUSlYJZP+b/68gM//D8sxJe3Yry2QnYIr3QjR3x4AlxJEN3GA==",
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz",
"integrity": "sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.1.0",
@@ -124,17 +124,17 @@
},
"dependencies": {
"estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.1.tgz",
"integrity": "sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg==",
"dev": true
}
}
},
"@rollup/plugin-node-resolve": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.1.0.tgz",
"integrity": "sha512-ouBBppRdWJKCllDXGzJ7ZIkYbaq+5TmyP0smt1vdJCFfoZhLi31vhpmjLhyo8lreHf4RoeSNllaWrvSqHpHRog==",
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz",
"integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.1.0",
@@ -142,19 +142,7 @@
"builtin-modules": "^3.1.0",
"deepmerge": "^4.2.2",
"is-module": "^1.0.0",
"resolve": "^1.19.0"
},
"dependencies": {
"resolve": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
"integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
"dev": true,
"requires": {
"is-core-module": "^2.1.0",
"path-parse": "^1.0.6"
}
}
"resolve": "^1.17.0"
}
},
"@rollup/plugin-replace": {
@@ -216,12 +204,6 @@
"@types/node": "*"
}
},
"@types/mime-types": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz",
"integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=",
"dev": true
},
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@@ -559,9 +541,9 @@
"dev": true
},
"builtin-modules": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
"integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz",
"integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==",
"dev": true
},
"bytes": {
@@ -2089,15 +2071,6 @@
"integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
"dev": true
},
"image-size": {
"version": "0.9.3",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-0.9.3.tgz",
"integrity": "sha512-5SakFa79uhUVSjKeQE30GVzzLJ0QNzB53+I+/VD1vIesD6GP6uatWIlgU0uisFNLt1u0d6kBydp7yfk+lLJhLQ==",
"dev": true,
"requires": {
"queue": "6.0.1"
}
},
"import-fresh": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
@@ -2174,15 +2147,6 @@
"rgba-regex": "^1.0.0"
}
},
"is-core-module": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
"integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
"dev": true,
"requires": {
"has": "^1.0.3"
}
},
"is-date-object": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
@@ -2587,20 +2551,12 @@
"dev": true
},
"mime-types": {
"version": "2.1.28",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
"integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
"version": "2.1.27",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
"integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
"dev": true,
"requires": {
"mime-db": "1.45.0"
},
"dependencies": {
"mime-db": {
"version": "1.45.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
"integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==",
"dev": true
}
"mime-db": "1.44.0"
}
},
"mimic-fn": {
@@ -6134,15 +6090,6 @@
"integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
"dev": true
},
"queue": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/queue/-/queue-6.0.1.tgz",
"integrity": "sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg==",
"dev": true,
"requires": {
"inherits": "~2.0.3"
}
},
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -6264,9 +6211,9 @@
}
},
"rollup": {
"version": "2.38.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.0.tgz",
"integrity": "sha512-ay9zDiNitZK/LNE/EM2+v5CZ7drkB2xyDljvb1fQJCGnq43ZWRkhxN145oV8GmoW1YNi4sA/1Jdkr2LfawJoXw==",
"version": "2.33.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.33.1.tgz",
"integrity": "sha512-uY4O/IoL9oNW8MMcbA5hcOaz6tZTMIh7qJHx/tzIJm+n1wLoY38BLn6fuy7DhR57oNFLMbDQtDeJoFURt5933w==",
"dev": true,
"requires": {
"fsevents": "~2.1.2"
@@ -6983,9 +6930,9 @@
"dev": true
},
"typescript": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz",
"integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==",
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz",
"integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==",
"dev": true
},
"uniq": {

View File

@@ -11,12 +11,11 @@
"serve": "serve --config ../../../serve.json .tmp/build/static"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^17.0.0",
"@rollup/plugin-node-resolve": "^11.1.0",
"@rollup/plugin-commonjs": "^15.1.0",
"@rollup/plugin-node-resolve": "^9.0.0",
"@rollup/plugin-replace": "^2.3.4",
"@surma/rollup-plugin-off-main-thread": "^1.4.2",
"@types/dedent": "^0.7.0",
"@types/mime-types": "^2.1.0",
"@types/node": "^14.14.7",
"comlink": "^4.3.0",
"cssnano": "^4.1.10",
@@ -25,11 +24,10 @@
"file-drop-element": "^1.0.1",
"husky": "^4.3.0",
"idb-keyval": "^3.2.0",
"image-size": "^0.9.3",
"linkstate": "^2.0.0",
"lint-staged": "^10.5.1",
"lodash.camelcase": "^4.3.0",
"mime-types": "^2.1.28",
"mime-types": "^2.1.27",
"npm-run-all": "^4.1.5",
"pointer-tracker": "^2.4.0",
"postcss": "^7.0.35",
@@ -40,10 +38,10 @@
"preact": "^10.5.5",
"preact-render-to-string": "^5.1.11",
"prettier": "^2.1.2",
"rollup": "^2.38.0",
"rollup": "^2.33.1",
"rollup-plugin-terser": "^7.0.2",
"serve": "^11.3.2",
"typescript": "^4.1.3",
"typescript": "^4.0.5",
"which": "^2.0.2"
},
"husky": {

View File

@@ -6,14 +6,6 @@
{
"key": "Cache-Control",
"value": "no-cache"
},
{
"key": "Cross-Origin-Embedder-Policy",
"value": "require-corp"
},
{
"key": "Cross-Origin-Opener-Policy",
"value": "same-origin"
}
]
}

View File

@@ -69,7 +69,7 @@ export default class TwoUp extends HTMLElement {
},
});
window.addEventListener('keydown', (event) => this._onKeyDown(event));
window.addEventListener('keydown', event => this._onKeyDown(event));
}
connectedCallback() {
@@ -98,24 +98,19 @@ export default class TwoUp extends HTMLElement {
// KeyDown event handler
private _onKeyDown(event: KeyboardEvent) {
const target = event.target;
if (target instanceof HTMLElement && target.closest('input')) return;
if (event.code === 'Digit1' || event.code === 'Numpad1') {
this._position = 0;
this._relativePosition = 0;
this._setPosition();
} else if (event.code === 'Digit2' || event.code === 'Numpad2') {
const dimensionAxis =
this.orientation === 'vertical' ? 'height' : 'width';
const dimensionAxis = this.orientation === 'vertical' ? 'height' : 'width';
const bounds = this.getBoundingClientRect();
this._position = bounds[dimensionAxis] / 2;
this._relativePosition = this._position / bounds[dimensionAxis] / 2;
this._relativePosition = (this._position / bounds[dimensionAxis]) / 2;
this._setPosition();
} else if (event.code === 'Digit3' || event.code === 'Numpad3') {
const dimensionAxis =
this.orientation === 'vertical' ? 'height' : 'width';
const dimensionAxis = this.orientation === 'vertical' ? 'height' : 'width';
const bounds = this.getBoundingClientRect();
this._position = bounds[dimensionAxis];

View File

@@ -11,7 +11,6 @@ import {
canDecodeImageType,
abortable,
assertSignal,
ImageMimeTypes,
} from '../util';
import {
PreprocessorState,
@@ -103,7 +102,7 @@ async function decodeImage(
if (mimeType === 'image/webp') {
return await workerBridge.webpDecode(signal, blob);
}
if (mimeType === 'image/jxl') {
if (mimeType === 'image/jpegxl') {
return await workerBridge.jxlDecode(signal, blob);
}
if (mimeType === 'image/webp2') {
@@ -179,13 +178,10 @@ async function compressImage(
encodeData.options as any,
);
// This type ensures the image mimetype is consistent with our mimetype sniffer
const type: ImageMimeTypes = encoder.meta.mimeType;
return new File(
[compressedData],
sourceFilename.replace(/.[^.]*$/, `.${encoder.meta.extension}`),
{ type },
{ type: encoder.meta.mimeType },
);
}

View File

@@ -80,7 +80,7 @@ async function decodeImage(url: string): Promise<HTMLImageElement> {
const img = new Image();
img.decoding = 'async';
img.src = url;
const loaded = new Promise<void>((resolve, reject) => {
const loaded = new Promise((resolve, reject) => {
img.onload = () => resolve();
img.onerror = () => reject(Error('Image loading error'));
});
@@ -137,7 +137,7 @@ export function blobToText(blob: Blob): Promise<string> {
return new Response(blob).text();
}
const magicNumberMapInput = [
const magicNumberToMimeType = new Map<RegExp, string>([
[/^%PDF-/, 'application/pdf'],
[/^GIF87a/, 'image/gif'],
[/^GIF89a/, 'image/gif'],
@@ -150,17 +150,10 @@ const magicNumberMapInput = [
[/^RIFF....WEBPVP8[LX ]/, 'image/webp'],
[/^\xF4\xFF\x6F/, 'image/webp2'],
[/^\x00\x00\x00 ftypavif\x00\x00\x00\x00/, 'image/avif'],
[/^\xff\x0a/, 'image/jxl'],
[/^\x00\x00\x00\x0cJXL \x0d\x0a\x87\x0a/, 'image/jxl'],
] as const;
[/^\xff\x0a/, 'image/jpegxl'],
]);
export type ImageMimeTypes = typeof magicNumberMapInput[number][1];
const magicNumberToMimeType = new Map<RegExp, ImageMimeTypes>(
magicNumberMapInput,
);
export async function sniffMimeType(blob: Blob): Promise<ImageMimeTypes | ''> {
export async function sniffMimeType(blob: Blob): Promise<string> {
const firstChunk = await blobToArrayBuffer(blob.slice(0, 16));
const firstChunkString = Array.from(new Uint8Array(firstChunk))
.map((v) => String.fromCodePoint(v))

View File

@@ -58,9 +58,11 @@ for (const methodName of methodNames) {
signal.removeEventListener('abort', onAbort);
// Start a timer to clear up the worker.
this._workerTimeout = setTimeout(() => {
this._terminateWorker();
}, workerTimeout);
if (__PRODUCTION__) {
this._workerTimeout = setTimeout(() => {
this._terminateWorker();
}, workerTimeout);
}
});
});

View File

@@ -25,19 +25,18 @@ interface Props {
interface State {
options: EncodeOptions;
lossless: boolean;
quality: number;
showAdvanced: boolean;
maxQuality: number;
minQuality: number;
separateAlpha: boolean;
alphaQuality: number;
chromaDeltaQ: boolean;
losslessAlpha: boolean;
maxAlphaQuality: number;
minAlphaQuality: number;
showAdvanced: boolean;
grayscale: boolean;
subsample: number;
tileRows: number;
tileCols: number;
effort: number;
sharpness: number;
denoiseLevel: number;
aqMode: number;
tune: 'ssim' | 'psnr';
}
const maxQuant = 63;
@@ -54,24 +53,35 @@ export class Options extends Component<Props, State> {
const { options } = props;
const lossless =
options.cqLevel === 0 &&
options.cqAlphaLevel <= 0 &&
options.subsample == 3;
const separateAlpha = options.cqAlphaLevel !== -1;
const cqLevel = lossless ? defaultOptions.cqLevel : options.cqLevel;
const lossless = options.maxQuantizer === 0 && options.minQuantizer === 0;
const minQuantizerValue = lossless
? defaultOptions.minQuantizer
: options.minQuantizer;
const maxQuantizerValue = lossless
? defaultOptions.maxQuantizer
: options.maxQuantizer;
const losslessAlpha =
options.maxQuantizerAlpha === 0 && options.minQuantizerAlpha === 0;
const minQuantizerAlphaValue = losslessAlpha
? defaultOptions.minQuantizerAlpha
: options.minQuantizerAlpha;
const maxQuantizerAlphaValue = losslessAlpha
? defaultOptions.maxQuantizerAlpha
: options.maxQuantizerAlpha;
// Create default form state from options
return {
options,
lossless,
quality: maxQuant - cqLevel,
separateAlpha,
alphaQuality:
maxQuant -
(separateAlpha ? options.cqAlphaLevel : defaultOptions.cqLevel),
losslessAlpha,
maxQuality: maxQuant - minQuantizerValue,
minQuality: maxQuant - maxQuantizerValue,
separateAlpha:
options.maxQuantizer !== options.maxQuantizerAlpha ||
options.minQuantizer !== options.minQuantizerAlpha,
maxAlphaQuality: maxQuant - minQuantizerAlphaValue,
minAlphaQuality: maxQuant - maxQuantizerAlphaValue,
grayscale: options.subsample === 0,
subsample:
options.subsample === 0 || lossless
? defaultOptions.subsample
@@ -79,10 +89,6 @@ export class Options extends Component<Props, State> {
tileRows: options.tileRowsLog2,
tileCols: options.tileColsLog2,
effort: maxSpeed - options.speed,
chromaDeltaQ: options.chromaDeltaQ,
sharpness: options.sharpness,
denoiseLevel: options.denoiseLevel,
tune: options.targetSsim ? 'ssim' : 'psnr',
};
}
@@ -93,10 +99,7 @@ export class Options extends Component<Props, State> {
private _inputChangeCallbacks = new Map<string, (event: Event) => void>();
private _inputChange = (
prop: keyof State,
type: 'number' | 'boolean' | 'string',
) => {
private _inputChange = (prop: keyof State, type: 'number' | 'boolean') => {
// Cache the callback for performance
if (!this._inputChangeCallbacks.has(prop)) {
this._inputChangeCallbacks.set(prop, (event: Event) => {
@@ -106,34 +109,70 @@ export class Options extends Component<Props, State> {
? 'checked' in formEl
? formEl.checked
: !!formEl.value
: type === 'number'
? Number(formEl.value)
: formEl.value;
: Number(formEl.value);
const newState: Partial<State> = {
[prop]: newVal,
};
// Ensure that min cannot be greater than max
switch (prop) {
case 'maxQuality':
if (newVal < this.state.minQuality) {
newState.minQuality = newVal as number;
}
break;
case 'minQuality':
if (newVal > this.state.maxQuality) {
newState.maxQuality = newVal as number;
}
break;
case 'maxAlphaQuality':
if (newVal < this.state.minAlphaQuality) {
newState.minAlphaQuality = newVal as number;
}
break;
case 'minAlphaQuality':
if (newVal > this.state.maxAlphaQuality) {
newState.maxAlphaQuality = newVal as number;
}
break;
}
const optionState = {
...this.state,
...newState,
};
const maxQuantizer = optionState.lossless
? 0
: maxQuant - optionState.minQuality;
const minQuantizer = optionState.lossless
? 0
: maxQuant - optionState.maxQuality;
const newOptions: EncodeOptions = {
cqLevel: optionState.lossless ? 0 : maxQuant - optionState.quality,
cqAlphaLevel:
optionState.lossless || !optionState.separateAlpha
? -1
: maxQuant - optionState.alphaQuality,
maxQuantizer,
minQuantizer,
maxQuantizerAlpha: optionState.separateAlpha
? optionState.losslessAlpha
? 0
: maxQuant - optionState.minAlphaQuality
: maxQuantizer,
minQuantizerAlpha: optionState.separateAlpha
? optionState.losslessAlpha
? 0
: maxQuant - optionState.maxAlphaQuality
: minQuantizer,
// Always set to 4:4:4 if lossless
subsample: optionState.lossless ? 3 : optionState.subsample,
subsample: optionState.grayscale
? 0
: optionState.lossless
? 3
: optionState.subsample,
tileColsLog2: optionState.tileCols,
tileRowsLog2: optionState.tileRows,
speed: maxSpeed - optionState.effort,
chromaDeltaQ: optionState.chromaDeltaQ,
sharpness: optionState.sharpness,
denoiseLevel: optionState.denoiseLevel,
targetSsim: optionState.tune === 'ssim',
};
// Updating options, so we don't recalculate in getDerivedStateFromProps.
@@ -155,18 +194,18 @@ export class Options extends Component<Props, State> {
_: Props,
{
effort,
grayscale,
lossless,
alphaQuality,
losslessAlpha,
maxAlphaQuality,
maxQuality,
minAlphaQuality,
minQuality,
separateAlpha,
quality,
showAdvanced,
subsample,
tileCols,
tileRows,
chromaDeltaQ,
sharpness,
denoiseLevel,
tune,
}: State,
) {
return (
@@ -180,15 +219,73 @@ export class Options extends Component<Props, State> {
</label>
<Expander>
{!lossless && (
<div class={style.optionOneCell}>
<Range
min="0"
max="63"
value={quality}
onInput={this._inputChange('quality', 'number')}
>
Quality:
</Range>
<div>
<div class={style.optionOneCell}>
<Range
min="0"
max="62"
value={maxQuality}
onInput={this._inputChange('maxQuality', 'number')}
>
Max quality:
</Range>
</div>
<div class={style.optionOneCell}>
<Range
min="0"
max="62"
value={minQuality}
onInput={this._inputChange('minQuality', 'number')}
>
Min quality:
</Range>
</div>
</div>
)}
</Expander>
<label class={style.optionToggle}>
Separate alpha quality
<Checkbox
checked={separateAlpha}
onChange={this._inputChange('separateAlpha', 'boolean')}
/>
</label>
<Expander>
{separateAlpha && (
<div>
<label class={style.optionToggle}>
Lossless alpha
<Checkbox
checked={losslessAlpha}
onChange={this._inputChange('losslessAlpha', 'boolean')}
/>
</label>
<Expander>
{!losslessAlpha && (
<div>
<div class={style.optionOneCell}>
<Range
min="0"
max="62"
value={maxAlphaQuality}
onInput={this._inputChange('maxAlphaQuality', 'number')}
>
Max alpha quality:
</Range>
</div>
<div class={style.optionOneCell}>
<Range
min="0"
max="62"
value={minAlphaQuality}
onInput={this._inputChange('minAlphaQuality', 'number')}
>
Min alpha quality:
</Range>
</div>
</div>
)}
</Expander>
</div>
)}
</Expander>
@@ -202,82 +299,28 @@ export class Options extends Component<Props, State> {
<Expander>
{showAdvanced && (
<div>
{/*<label class={style.optionToggle}>
Grayscale
<Checkbox
data-set-state="grayscale"
checked={grayscale}
onChange={this._inputChange('grayscale', 'boolean')}
/>
</label>*/}
<Expander>
{!lossless && (
<div>
<label class={style.optionTextFirst}>
Subsample chroma:
<Select
value={subsample}
onChange={this._inputChange('subsample', 'number')}
>
<option value="1">Half</option>
{/*<option value="2">4:2:2</option>*/}
<option value="3">Off</option>
</Select>
</label>
<label class={style.optionToggle}>
Separate alpha quality
<Checkbox
checked={separateAlpha}
onChange={this._inputChange('separateAlpha', 'boolean')}
/>
</label>
<Expander>
{separateAlpha && (
<div class={style.optionOneCell}>
<Range
min="0"
max="63"
value={alphaQuality}
onInput={this._inputChange(
'alphaQuality',
'number',
)}
>
Alpha quality:
</Range>
</div>
)}
</Expander>
<label class={style.optionToggle}>
Extra chroma compression
<Checkbox
checked={chromaDeltaQ}
onChange={this._inputChange('chromaDeltaQ', 'boolean')}
/>
</label>
<div class={style.optionOneCell}>
<Range
min="0"
max="7"
value={sharpness}
onInput={this._inputChange('sharpness', 'number')}
>
Sharpness:
</Range>
</div>
<div class={style.optionOneCell}>
<Range
min="0"
max="50"
value={denoiseLevel}
onInput={this._inputChange('denoiseLevel', 'number')}
>
Noise synthesis:
</Range>
</div>
<label class={style.optionTextFirst}>
Tune for:
<Select
value={tune}
onChange={this._inputChange('tune', 'string')}
>
<option value="psnr">PSNR</option>
<option value="ssim">SSIM</option>
</Select>
</label>
</div>
{!grayscale && !lossless && (
<label class={style.optionTextFirst}>
Subsample chroma:
<Select
data-set-state="subsample"
value={subsample}
onChange={this._inputChange('subsample', 'number')}
>
<option value="1">Half</option>
{/*<option value="2">4:2:2</option>*/}
<option value="3">Off</option>
</Select>
</label>
)}
</Expander>
<div class={style.optionOneCell}>

View File

@@ -18,14 +18,12 @@ export const label = 'AVIF';
export const mimeType = 'image/avif';
export const extension = 'avif';
export const defaultOptions: EncodeOptions = {
cqLevel: 33,
cqAlphaLevel: -1,
denoiseLevel: 0,
minQuantizer: 33,
maxQuantizer: 63,
minQuantizerAlpha: 33,
maxQuantizerAlpha: 63,
tileColsLog2: 0,
tileRowsLog2: 0,
speed: 6,
speed: 8,
subsample: 1,
chromaDeltaQ: false,
sharpness: 0,
targetSsim: false,
};

View File

@@ -28,7 +28,6 @@ interface State {
lossless: boolean;
slightLoss: boolean;
autoEdgePreservingFilter: boolean;
decodingSpeedTier: number;
}
const maxSpeed = 7;
@@ -54,7 +53,6 @@ export class Options extends Component<Props, State> {
lossless: options.quality === 100,
slightLoss: options.lossyPalette,
autoEdgePreservingFilter: options.epf === -1,
decodingSpeedTier: options.decodingSpeedTier,
};
}
@@ -95,7 +93,6 @@ export class Options extends Component<Props, State> {
: optionState.edgePreservingFilter,
nearLossless: 0,
lossyPalette: optionState.lossless ? optionState.slightLoss : false,
decodingSpeedTier: optionState.decodingSpeedTier,
};
// Updating options, so we don't recalculate in getDerivedStateFromProps.
@@ -120,7 +117,6 @@ export class Options extends Component<Props, State> {
lossless,
slightLoss,
autoEdgePreservingFilter,
decodingSpeedTier,
}: State,
) {
// I'm rendering both lossy and lossless forms, as it becomes much easier when
@@ -189,16 +185,6 @@ export class Options extends Component<Props, State> {
</div>
)}
</Expander>
<div class={style.optionOneCell}>
<Range
min="0"
max="4"
value={decodingSpeedTier}
onInput={this._inputChange('decodingSpeedTier', 'number')}
>
Optimise for decoding speed (worse compression):
</Range>
</div>
</div>
)}
</Expander>

View File

@@ -15,7 +15,7 @@ import type { EncodeOptions } from 'codecs/jxl/enc/jxl_enc';
export { EncodeOptions };
export const label = 'JPEG XL (beta)';
export const mimeType = 'image/jxl';
export const mimeType = 'image/jpegxl';
export const extension = 'jxl';
export const defaultOptions: EncodeOptions = {
speed: 4,
@@ -24,5 +24,4 @@ export const defaultOptions: EncodeOptions = {
epf: -1,
nearLossless: 0,
lossyPalette: false,
decodingSpeedTier: 0,
};

View File

@@ -86,7 +86,7 @@ export default class SnackBarElement extends HTMLEl {
// Transition the snack away.
el.setAttribute('aria-hidden', 'true');
await new Promise<void>((resolve) => {
await new Promise((resolve) => {
el.addEventListener('animationend', () => resolve());
});
el.remove();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -14,24 +14,21 @@ import { h } from 'preact';
import { renderPage, writeFiles } from './utils';
import IndexPage from './pages/index';
import * as iconLargeMaskable from 'img-url:static-build/assets/icon-large-maskable.png';
import * as iconLarge from 'img-url:static-build/assets/icon-large.png';
import * as screenshot1 from 'img-url:static-build/assets/screenshot1.png';
import * as screenshot2 from 'img-url:static-build/assets/screenshot2.jpg';
import * as screenshot3 from 'img-url:static-build/assets/screenshot3.jpg';
import iconLargeMaskable from 'url:static-build/assets/icon-large-maskable.png';
import iconLarge from 'url:static-build/assets/icon-large.png';
import dedent from 'dedent';
import { lookup as lookupMime } from 'mime-types';
const manifestSize = ({ width, height }: { width: number; height: number }) =>
`${width}x${height}`;
// Set by Netlify
const branch = process.env.BRANCH;
const branchOriginTrialIds = new Map([
[
'dev',
'As3b1fXjclhF8ZgvUkIqOo3r1/Jqvx0mNuT6Ilgb7SdpeJnV8lUdYr7i+OKgCmcVTWkqjkF23LJ+xZ111VYMEQIAAABheyJvcmlnaW4iOiJodHRwczovL2Rldi0tc3F1b29zaC5uZXRsaWZ5LmFwcDo0NDMiLCJmZWF0dXJlIjoiV2ViQXNzZW1ibHlTaW1kIiwiZXhwaXJ5IjoxNjA5NDI4Nzk4fQ==',
],
[
'live',
'Aj5GY7W9AHM8di+yvMCajIhLRHoYN7slruwOYXE/Iub5hgmW/r2RQt07vrUuT4eUTkWxcyNCAVkiI+5ugdVW3gAAAABUeyJvcmlnaW4iOiJodHRwczovL3NxdW9vc2guYXBwOjQ0MyIsImZlYXR1cmUiOiJXZWJBc3NlbWJseVNpbWQiLCJleHBpcnkiOjE2MjM4MDE1OTl9',
'Ak9YMaDZyWUUZFbVJng8FM2LWWNeBcWaHTtHzzaTAq044kMlQH5/hsMb/90Ii2I7m/lPx8EpgOIUMWkWeoaKfgIAAABUeyJvcmlnaW4iOiJodHRwczovL3NxdW9vc2guYXBwOjQ0MyIsImZlYXR1cmUiOiJXZWJBc3NlbWJseVNpbWQiLCJleHBpcnkiOjE2MTExNTkwNjZ9',
],
]);
@@ -52,38 +49,17 @@ const toOutput: Output = {
theme_color: '#ff3385',
icons: [
{
src: iconLarge.default,
type: lookupMime(iconLarge.default),
sizes: manifestSize(iconLarge),
src: iconLarge,
type: 'image/png',
sizes: '1024x1024',
},
{
src: iconLargeMaskable.default,
type: lookupMime(iconLargeMaskable.default),
sizes: manifestSize(iconLargeMaskable),
src: iconLargeMaskable,
type: 'image/png',
sizes: '1024x1024',
purpose: 'maskable',
},
],
description:
'Compress and compare images with different codecs, right in your browser.',
lang: 'en',
categories: ['photo', 'productivity', 'utilities'],
screenshots: [
{
src: screenshot1.default,
type: lookupMime(screenshot1.default),
sizes: manifestSize(screenshot1),
},
{
src: screenshot2.default,
type: lookupMime(screenshot2.default),
sizes: manifestSize(screenshot2),
},
{
src: screenshot3.default,
type: lookupMime(screenshot3.default),
sizes: manifestSize(screenshot3),
},
],
share_target: {
action: '/?utm_medium=PWA&utm_source=share-target&share-target',
method: 'POST',
@@ -102,9 +78,8 @@ const toOutput: Output = {
/*
Cache-Control: no-cache
# I don't think Rollup is cache-busting files correctly.
#/c/*
# Cache-Control: max-age=31536000
/c/*
Cache-Control: max-age=31536000
# COOP+COEP for WebAssembly threads.
/*

View File

@@ -84,19 +84,14 @@ export function cleanupCache(
);
}
function urlsToRequests(urls: string[]): Request[] {
// Using no-cache, as our hashing aren't updating properly right now.
return urls.map((url) => new Request(url, { cache: 'no-cache' }));
}
export async function cacheBasics(cacheName: string) {
const cache = await caches.open(cacheName);
return cache.addAll(urlsToRequests(initial));
return cache.addAll(initial);
}
export async function cacheAdditionalProcessors(cacheName: string) {
const cache = await caches.open(cacheName);
return cache.addAll(urlsToRequests(await theRest));
return cache.addAll(await theRest);
}
const nextMessageResolveMap = new Map<string, (() => void)[]>();