From fa4a4625179bb1fb213328bb2c196bd41d24f804 Mon Sep 17 00:00:00 2001 From: Rafael dos Santos Silva Date: Wed, 23 Jun 2021 12:31:12 -0300 Subject: [PATCH] FEATURE: Optimize images before upload (#13432) Integrates [mozJPEG](https://github.com/mozilla/mozjpeg) and [Resize](https://github.com/PistonDevelopers/resize) using WebAssembly to optimize user uploads in the composer on the client-side. NPM libraries are sourced from our [Squoosh fork](https://github.com/discourse/squoosh/tree/discourse), which was needed because we have an older asset pipeline. --- .../app/components/composer-editor.js | 10 ++ ...ter-media-optimization-upload-processor.js | 20 +++ .../app/lib/media-optimization-utils.js | 63 +++++++ .../discourse/app/lib/plugin-api.js | 2 - .../app/services/media-optimization-worker.js | 128 +++++++++++++ .../javascripts/discourse/ember-cli-build.js | 1 + .../discourse/tests/theme_qunit_vendor.js | 1 + app/assets/javascripts/vendor.js | 1 + config/locales/server.en.yml | 6 + config/nginx.sample.conf | 3 +- config/site_settings.yml | 27 +++ lib/tasks/javascript.rake | 26 +++ package.json | 3 +- .../javascripts/media-optimization-worker.js | 166 +++++++++++++++++ public/javascripts/squoosh/mozjpeg_enc.js | 21 +++ public/javascripts/squoosh/mozjpeg_enc.wasm | Bin 0 -> 255878 bytes public/javascripts/squoosh/squoosh_resize.js | 129 +++++++++++++ .../squoosh/squoosh_resize_bg.wasm | Bin 0 -> 37052 bytes .../javascripts/jquery.fileupload-process.js | 169 ++++++++++++++++++ yarn.lock | 13 +- 20 files changed, 784 insertions(+), 5 deletions(-) create mode 100644 app/assets/javascripts/discourse/app/initializers/register-media-optimization-upload-processor.js create mode 100644 app/assets/javascripts/discourse/app/lib/media-optimization-utils.js create mode 100644 app/assets/javascripts/discourse/app/services/media-optimization-worker.js create mode 100644 public/javascripts/media-optimization-worker.js create mode 100644 public/javascripts/squoosh/mozjpeg_enc.js create mode 100755 public/javascripts/squoosh/mozjpeg_enc.wasm create mode 100644 public/javascripts/squoosh/squoosh_resize.js create mode 100644 public/javascripts/squoosh/squoosh_resize_bg.wasm create mode 100644 vendor/assets/javascripts/jquery.fileupload-process.js diff --git a/app/assets/javascripts/discourse/app/components/composer-editor.js b/app/assets/javascripts/discourse/app/components/composer-editor.js index d4bf5097e58..7280058f667 100644 --- a/app/assets/javascripts/discourse/app/components/composer-editor.js +++ b/app/assets/javascripts/discourse/app/components/composer-editor.js @@ -672,6 +672,11 @@ export default Component.extend({ filename: data.files[data.index].name, })}]()\n` ); + this.setProperties({ + uploadProgress: 0, + isUploading: true, + isCancellable: false, + }); }) .on("fileuploadprocessalways", (e, data) => { this.appEvents.trigger( @@ -681,6 +686,11 @@ export default Component.extend({ })}]()\n`, "" ); + this.setProperties({ + uploadProgress: 0, + isUploading: false, + isCancellable: false, + }); }); $element.on("fileuploadpaste", (e) => { diff --git a/app/assets/javascripts/discourse/app/initializers/register-media-optimization-upload-processor.js b/app/assets/javascripts/discourse/app/initializers/register-media-optimization-upload-processor.js new file mode 100644 index 00000000000..3b6a9758260 --- /dev/null +++ b/app/assets/javascripts/discourse/app/initializers/register-media-optimization-upload-processor.js @@ -0,0 +1,20 @@ +import { addComposerUploadProcessor } from "discourse/components/composer-editor"; + +export default { + name: "register-media-optimization-upload-processor", + + initialize(container) { + let siteSettings = container.lookup("site-settings:main"); + if (siteSettings.composer_media_optimization_image_enabled) { + addComposerUploadProcessor( + { action: "optimizeJPEG" }, + { + optimizeJPEG: (data) => + container + .lookup("service:media-optimization-worker") + .optimizeImage(data), + } + ); + } + }, +}; diff --git a/app/assets/javascripts/discourse/app/lib/media-optimization-utils.js b/app/assets/javascripts/discourse/app/lib/media-optimization-utils.js new file mode 100644 index 00000000000..b67424f4c46 --- /dev/null +++ b/app/assets/javascripts/discourse/app/lib/media-optimization-utils.js @@ -0,0 +1,63 @@ +import { Promise } from "rsvp"; + +export async function fileToImageData(file) { + let drawable, err; + + // Chrome and Firefox use a native method to do Image -> Bitmap Array (it happens of the main thread!) + // Safari uses the `` element due to https://bugs.webkit.org/show_bug.cgi?id=182424 + if ("createImageBitmap" in self) { + drawable = await createImageBitmap(file); + } else { + const url = URL.createObjectURL(file); + const img = new Image(); + img.decoding = "async"; + img.src = url; + const loaded = new Promise((resolve, reject) => { + img.onload = () => resolve(); + img.onerror = () => reject(Error("Image loading error")); + }); + + if (img.decode) { + // Nice off-thread way supported in Safari/Chrome. + // Safari throws on decode if the source is SVG. + // https://bugs.webkit.org/show_bug.cgi?id=188347 + await img.decode().catch(() => null); + } + + // Always await loaded, as we may have bailed due to the Safari bug above. + await loaded; + + drawable = img; + } + + const width = drawable.width, + height = drawable.height, + sx = 0, + sy = 0, + sw = width, + sh = height; + // Make canvas same size as image + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + // Draw image onto canvas + const ctx = canvas.getContext("2d"); + if (!ctx) { + err = "Could not create canvas context"; + } + ctx.drawImage(drawable, sx, sy, sw, sh, 0, 0, width, height); + const imageData = ctx.getImageData(0, 0, width, height); + canvas.remove(); + + // potentially transparent + if (/(\.|\/)(png|webp)$/i.test(file.type)) { + for (let i = 0; i < imageData.data.length; i += 4) { + if (imageData.data[i + 3] < 255) { + err = "Image has transparent pixels, won't convert to JPEG!"; + break; + } + } + } + + return { imageData, width, height, err }; +} diff --git a/app/assets/javascripts/discourse/app/lib/plugin-api.js b/app/assets/javascripts/discourse/app/lib/plugin-api.js index 5c25a4a0aee..994d45dfbd6 100644 --- a/app/assets/javascripts/discourse/app/lib/plugin-api.js +++ b/app/assets/javascripts/discourse/app/lib/plugin-api.js @@ -951,8 +951,6 @@ class PluginApi { /** * Registers a pre-processor for file uploads * See https://github.com/blueimp/jQuery-File-Upload/wiki/Options#file-processing-options - * Your theme/plugin will also need to load https://github.com/blueimp/jQuery-File-Upload/blob/v10.13.0/js/jquery.fileupload-process.js - * for this hook to work. * * Useful for transforming to-be uploaded files client-side * diff --git a/app/assets/javascripts/discourse/app/services/media-optimization-worker.js b/app/assets/javascripts/discourse/app/services/media-optimization-worker.js new file mode 100644 index 00000000000..24069246fab --- /dev/null +++ b/app/assets/javascripts/discourse/app/services/media-optimization-worker.js @@ -0,0 +1,128 @@ +import Service from "@ember/service"; +import { getOwner } from "@ember/application"; +import { Promise } from "rsvp"; +import { fileToImageData } from "discourse/lib/media-optimization-utils"; +import { getAbsoluteURL, getURLWithCDN } from "discourse-common/lib/get-url"; + +export default class MediaOptimizationWorkerService extends Service { + appEvents = getOwner(this).lookup("service:app-events"); + worker = null; + workerUrl = getAbsoluteURL("/javascripts/media-optimization-worker.js"); + currentComposerUploadData = null; + currentPromiseResolver = null; + + startWorker() { + this.worker = new Worker(this.workerUrl); // TODO come up with a workaround for FF that lacks type: module support + } + + stopWorker() { + this.worker.terminate(); + this.worker = null; + } + + ensureAvailiableWorker() { + if (!this.worker) { + this.startWorker(); + this.registerMessageHandler(); + this.appEvents.on("composer:closed", this, "stopWorker"); + } + } + + logIfDebug(message) { + if (this.siteSettings.composer_media_optimization_debug_mode) { + // eslint-disable-next-line no-console + console.log(message); + } + } + + optimizeImage(data) { + let file = data.files[data.index]; + if (!/(\.|\/)(jpe?g|png|webp)$/i.test(file.type)) { + return data; + } + if ( + file.size < + this.siteSettings + .composer_media_optimization_image_kilobytes_optimization_threshold + ) { + return data; + } + this.ensureAvailiableWorker(); + return new Promise(async (resolve) => { + this.logIfDebug(`Transforming ${file.name}`); + + this.currentComposerUploadData = data; + this.currentPromiseResolver = resolve; + + const { imageData, width, height, err } = await fileToImageData(file); + + if (err) { + this.logIfDebug(err); + return resolve(data); + } + + this.worker.postMessage( + { + type: "compress", + file: imageData.data.buffer, + fileName: file.name, + width: width, + height: height, + settings: { + mozjpeg_script: getURLWithCDN( + "/javascripts/squoosh/mozjpeg_enc.js" + ), + mozjpeg_wasm: getURLWithCDN( + "/javascripts/squoosh/mozjpeg_enc.wasm" + ), + resize_script: getURLWithCDN( + "/javascripts/squoosh/squoosh_resize.js" + ), + resize_wasm: getURLWithCDN( + "/javascripts/squoosh/squoosh_resize_bg.wasm" + ), + resize_threshold: this.siteSettings + .composer_media_optimization_image_resize_dimensions_threshold, + resize_target: this.siteSettings + .composer_media_optimization_image_resize_width_target, + resize_pre_multiply: this.siteSettings + .composer_media_optimization_image_resize_pre_multiply, + resize_linear_rgb: this.siteSettings + .composer_media_optimization_image_resize_linear_rgb, + encode_quality: this.siteSettings + .composer_media_optimization_image_encode_quality, + debug_mode: this.siteSettings + .composer_media_optimization_debug_mode, + }, + }, + [imageData.data.buffer] + ); + }); + } + + registerMessageHandler() { + this.worker.onmessage = (e) => { + this.logIfDebug("Main: Message received from worker script"); + this.logIfDebug(e); + switch (e.data.type) { + case "file": + let optimizedFile = new File([e.data.file], `${e.data.fileName}`, { + type: "image/jpeg", + }); + this.logIfDebug( + `Finished optimization of ${optimizedFile.name} new size: ${optimizedFile.size}.` + ); + let data = this.currentComposerUploadData; + data.files[data.index] = optimizedFile; + this.currentPromiseResolver(data); + break; + case "error": + this.stopWorker(); + this.currentPromiseResolver(this.currentComposerUploadData); + break; + default: + this.logIfDebug(`Sorry, we are out of ${e}.`); + } + }; + } +} diff --git a/app/assets/javascripts/discourse/ember-cli-build.js b/app/assets/javascripts/discourse/ember-cli-build.js index 98d33e1de81..4650fb52925 100644 --- a/app/assets/javascripts/discourse/ember-cli-build.js +++ b/app/assets/javascripts/discourse/ember-cli-build.js @@ -34,6 +34,7 @@ module.exports = function (defaults) { app.import(vendorJs + "bootstrap-modal.js"); app.import(vendorJs + "jquery.ui.widget.js"); app.import(vendorJs + "jquery.fileupload.js"); + app.import(vendorJs + "jquery.fileupload-process.js"); app.import(vendorJs + "jquery.autoellipsis-1.0.10.js"); app.import(vendorJs + "show-html.js"); diff --git a/app/assets/javascripts/discourse/tests/theme_qunit_vendor.js b/app/assets/javascripts/discourse/tests/theme_qunit_vendor.js index f97174a43f7..a7f547667cd 100644 --- a/app/assets/javascripts/discourse/tests/theme_qunit_vendor.js +++ b/app/assets/javascripts/discourse/tests/theme_qunit_vendor.js @@ -21,6 +21,7 @@ //= require jquery.color.js //= require jquery.fileupload.js //= require jquery.iframe-transport.js +//= require jquery.fileupload-process.js //= require jquery.tagsinput.js //= require jquery.sortable.js //= require lodash.js diff --git a/app/assets/javascripts/vendor.js b/app/assets/javascripts/vendor.js index 2f2fe583908..f28366faa38 100644 --- a/app/assets/javascripts/vendor.js +++ b/app/assets/javascripts/vendor.js @@ -14,6 +14,7 @@ //= require jquery.color.js //= require jquery.fileupload.js //= require jquery.iframe-transport.js +//= require jquery.fileupload-process.js //= require jquery.tagsinput.js //= require jquery.sortable.js //= require lodash.js diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 0164ecba094..d7445c44482 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1824,6 +1824,12 @@ en: strip_image_metadata: "Strip image metadata." + composer_media_optimization_image_enabled: "Enables client-side media optimization of uploaded image files." + composer_media_optimization_image_kilobytes_optimization_threshold: "Minimum image file size to trigger client-side optimization" + composer_media_optimization_image_resize_dimensions_threshold: "Minimum image width to trigger client-side resize" + composer_media_optimization_image_resize_width_target: "Images with widths larger than `composer_media_optimization_image_dimensions_resize_threshold` will be resized to this width. Must be >= than `composer_media_optimization_image_dimensions_resize_threshold`." + composer_media_optimization_image_encode_quality: "JPEG encode quality used in the re-encode process." + min_ratio_to_crop: "Ratio used to crop tall images. Enter the result of width / height." simultaneous_uploads: "Maximum number of files that can be dragged & dropped in the composer" diff --git a/config/nginx.sample.conf b/config/nginx.sample.conf index 9fd6c51b907..07dcfd9d3d4 100644 --- a/config/nginx.sample.conf +++ b/config/nginx.sample.conf @@ -1,6 +1,7 @@ # Additional MIME types that you'd like nginx to handle go in here types { text/csv csv; + application/wasm wasm; } upstream discourse { @@ -47,7 +48,7 @@ server { gzip_vary on; gzip_min_length 1000; gzip_comp_level 5; - gzip_types application/json text/css text/javascript application/x-javascript application/javascript image/svg+xml; + gzip_types application/json text/css text/javascript application/x-javascript application/javascript image/svg+xml application/wasm; gzip_proxied any; # Uncomment and configure this section for HTTPS support diff --git a/config/site_settings.yml b/config/site_settings.yml index a6ec120c767..12a645d55fd 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -1405,6 +1405,33 @@ files: decompressed_backup_max_file_size_mb: default: 100000 hidden: true + composer_media_optimization_image_enabled: + default: false + client: true + composer_media_optimization_image_kilobytes_optimization_threshold: + default: 1048576 + client: true + composer_media_optimization_image_resize_dimensions_threshold: + default: 1920 + client: true + composer_media_optimization_image_resize_width_target: + default: 1920 + client: true + composer_media_optimization_image_resize_pre_multiply: + default: false + hidden: true + client: true + composer_media_optimization_image_resize_linear_rgb: + default: false + hidden: true + client: true + composer_media_optimization_image_encode_quality: + default: 75 + client: true + composer_media_optimization_debug_mode: + default: false + client: true + hidden: true trust: default_trust_level: diff --git a/lib/tasks/javascript.rake b/lib/tasks/javascript.rake index a40bd98cff4..834a3804c31 100644 --- a/lib/tasks/javascript.rake +++ b/lib/tasks/javascript.rake @@ -112,6 +112,8 @@ def dependencies source: 'blueimp-file-upload/js/jquery.fileupload.js', }, { source: 'blueimp-file-upload/js/jquery.iframe-transport.js', + }, { + source: 'blueimp-file-upload/js/jquery.fileupload-process.js', }, { source: 'blueimp-file-upload/js/vendor/jquery.ui.widget.js', }, { @@ -191,6 +193,30 @@ def dependencies { source: 'sinon/pkg/sinon.js' }, + { + source: 'squoosh/codecs/mozjpeg/enc/mozjpeg_enc.js', + destination: 'squoosh', + public: true, + skip_versioning: true + }, + { + source: 'squoosh/codecs/mozjpeg/enc/mozjpeg_enc.wasm', + destination: 'squoosh', + public: true, + skip_versioning: true + }, + { + source: 'squoosh/codecs/resize/pkg/squoosh_resize.js', + destination: 'squoosh', + public: true, + skip_versioning: true + }, + { + source: 'squoosh/codecs/resize/pkg/squoosh_resize_bg.wasm', + destination: 'squoosh', + public: true, + skip_versioning: true + }, ] end diff --git a/package.json b/package.json index 9d013590a10..0b8fddf98df 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,8 @@ "puppeteer": "1.20", "qunit": "2.8.0", "route-recognizer": "^0.3.3", - "sinon": "^9.0.2" + "sinon": "^9.0.2", + "squoosh": "discourse/squoosh#dc9649d" }, "resolutions": { "lodash": "4.17.21" diff --git a/public/javascripts/media-optimization-worker.js b/public/javascripts/media-optimization-worker.js new file mode 100644 index 00000000000..7bbdf137bd5 --- /dev/null +++ b/public/javascripts/media-optimization-worker.js @@ -0,0 +1,166 @@ +function resizeWithAspect( + input_width, + input_height, + target_width, + target_height, +) { + if (!target_width && !target_height) { + throw Error('Need to specify at least width or height when resizing'); + } + + if (target_width && target_height) { + return { width: target_width, height: target_height }; + } + + if (!target_width) { + return { + width: Math.round((input_width / input_height) * target_height), + height: target_height, + }; + } + + return { + width: target_width, + height: Math.round((input_height / input_width) * target_width), + }; +} + +function logIfDebug(message) { + if (DedicatedWorkerGlobalScope.debugMode) { + // eslint-disable-next-line no-console + console.log(message); + } +} + +async function optimize(imageData, fileName, width, height, settings) { + + await loadLibs(settings); + + const mozJpegDefaultOptions = { + quality: settings.encode_quality, + baseline: false, + arithmetic: false, + progressive: true, + optimize_coding: true, + smoothing: 0, + color_space: 3 /*YCbCr*/, + quant_table: 3, + trellis_multipass: false, + trellis_opt_zero: false, + trellis_opt_table: false, + trellis_loops: 1, + auto_subsample: true, + chroma_subsample: 2, + separate_chroma_quality: false, + chroma_quality: 75, + }; + + const initialSize = imageData.byteLength; + logIfDebug(`Worker received imageData: ${initialSize}`); + + let maybeResized; + + // resize + if (width > settings.resize_threshold) { + try { + const target_dimensions = resizeWithAspect(width, height, settings.resize_target); + const resizeResult = self.codecs.resize( + new Uint8ClampedArray(imageData), + width, //in + height, //in + target_dimensions.width, //out + target_dimensions.height, //out + 3, // 3 is lanczos + settings.resize_pre_multiply, + settings.resize_linear_rgb + ); + maybeResized = new ImageData( + resizeResult, + target_dimensions.width, + target_dimensions.height, + ).data; + width = target_dimensions.width; + height = target_dimensions.height; + } catch (error) { + console.error(`Resize failed: ${error}`); + maybeResized = imageData; + } + } else { + logIfDebug(`Skipped resize: ${width} < ${settings.resize_threshold}`); + maybeResized = imageData; + } + + // mozJPEG re-encode + const result = self.codecs.mozjpeg_enc.encode( + maybeResized, + width, + height, + mozJpegDefaultOptions + ); + + const finalSize = result.byteLength + logIfDebug(`Worker post reencode file: ${finalSize}`); + logIfDebug(`Reduction: ${(initialSize / finalSize).toFixed(1)}x speedup`); + + let transferrable = Uint8Array.from(result).buffer; // decoded was allocated inside WASM so it **cannot** be transfered to another context, need to copy by value + + return transferrable; +} + +onmessage = async function (e) { + switch (e.data.type) { + case "compress": + try { + DedicatedWorkerGlobalScope.debugMode = e.data.settings.debug_mode; + let optimized = await optimize( + e.data.file, + e.data.fileName, + e.data.width, + e.data.height, + e.data.settings + ); + postMessage( + { + type: "file", + file: optimized, + fileName: e.data.fileName + }, + [optimized] + ); + } catch (error) { + console.error(error); + postMessage({ + type: "error", + }); + } + break; + default: + logIfDebug(`Sorry, we are out of ${e}.`); + } +}; + +async function loadLibs(settings){ + + if (self.codecs) return; + + importScripts(settings.mozjpeg_script); + importScripts(settings.resize_script); + + let encoderModuleOverrides = { + locateFile: function(path, prefix) { + // if it's a mem init file, use a custom dir + if (path.endsWith(".wasm")) return settings.mozjpeg_wasm; + // otherwise, use the default, the prefix (JS file's dir) + the path + return prefix + path; + }, + onRuntimeInitialized: function () { + return this; + }, + }; + const mozjpeg_enc_module = await mozjpeg_enc(encoderModuleOverrides); + + const { resize } = wasm_bindgen; + await wasm_bindgen(settings.resize_wasm); + + self.codecs = {mozjpeg_enc: mozjpeg_enc_module, resize: resize}; +} \ No newline at end of file diff --git a/public/javascripts/squoosh/mozjpeg_enc.js b/public/javascripts/squoosh/mozjpeg_enc.js new file mode 100644 index 00000000000..e52ad7a6d0d --- /dev/null +++ b/public/javascripts/squoosh/mozjpeg_enc.js @@ -0,0 +1,21 @@ + +var mozjpeg_enc = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + + return ( +function(mozjpeg_enc) { + mozjpeg_enc = mozjpeg_enc || {}; + +var Module=typeof mozjpeg_enc!=="undefined"?mozjpeg_enc:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=true;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;var UTF8Decoder=new TextDecoder("utf8");function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;return UTF8Decoder.decode(heap.subarray?heap.subarray(idx,endPtr):new Uint8Array(heap.slice(idx,endPtr)))}function UTF8ToString(ptr,maxBytesToRead){if(!ptr)return"";var maxPtr=ptr+maxBytesToRead;for(var end=ptr;!(end>=maxPtr)&&HEAPU8[end];)++end;return UTF8Decoder.decode(HEAPU8.subarray(ptr,end))}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=new TextDecoder("utf-16le");function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile="mozjpeg_enc.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["C"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["I"];addOnInit(Module["asm"]["D"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function _atexit(func,arg){}function ___cxa_thread_atexit(a0,a1){return _atexit(a0,a1)}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return function(){null;return body.apply(this,arguments)}}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i>2)+i])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.includes("unsigned");registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function emval_get_global(){if(typeof globalThis==="object"){return globalThis}function testGlobal(obj){obj["$$$embind_global$$$"]=obj;var success=typeof $$$embind_global$$$==="object"&&obj["$$$embind_global$$$"]===obj;if(!success){delete obj["$$$embind_global$$$"]}return success}if(typeof $$$embind_global$$$==="object"){return $$$embind_global$$$}if(typeof global==="object"&&testGlobal(global)){$$$embind_global$$$=global}else if(typeof self==="object"&&testGlobal(self)){$$$embind_global$$$=self}if(typeof $$$embind_global$$$==="object"){return $$$embind_global$$$}throw Error("unable to get global object.")}function __emval_get_global(name){if(name===0){return __emval_register(emval_get_global())}else{name=getStringOrSymbol(name);return __emval_register(emval_get_global()[name])}}function __emval_incref(handle){if(handle>4){emval_handle_array[handle].refcount+=1}}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function craftEmvalAllocator(argCount){var argsList=new Array(argCount+1);return function(constructor,argTypes,args){argsList[0]=constructor;for(var i=0;i>2)+i],"parameter "+i);argsList[i+1]=argType.readValueFromPointer(args);args+=argType.argPackAdvance}var obj=new(constructor.bind.apply(constructor,argsList));return __emval_register(obj)}}var emval_newers={};function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function _exit(status){exit(status)}function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _setTempRet0(val){setTempRet0(val)}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");var asmLibraryArg={"B":___cxa_thread_atexit,"l":__embind_finalize_value_object,"p":__embind_register_bigint,"y":__embind_register_bool,"x":__embind_register_emval,"i":__embind_register_float,"f":__embind_register_function,"c":__embind_register_integer,"b":__embind_register_memory_view,"j":__embind_register_std_string,"e":__embind_register_std_wstring,"m":__embind_register_value_object,"a":__embind_register_value_object_field,"z":__embind_register_void,"g":__emval_decref,"u":__emval_get_global,"k":__emval_incref,"n":__emval_new,"h":_abort,"r":_emscripten_memcpy_big,"d":_emscripten_resize_heap,"s":_environ_get,"t":_environ_sizes_get,"A":_exit,"w":_fd_close,"o":_fd_seek,"v":_fd_write,"q":_setTempRet0};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["D"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["E"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["F"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["G"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["H"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["J"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(implicit&&keepRuntimeAlive()&&status===0){return}if(keepRuntimeAlive()){}else{exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); + + + return mozjpeg_enc.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = mozjpeg_enc; +else if (typeof define === 'function' && define['amd']) + define([], function() { return mozjpeg_enc; }); +else if (typeof exports === 'object') + exports["mozjpeg_enc"] = mozjpeg_enc; diff --git a/public/javascripts/squoosh/mozjpeg_enc.wasm b/public/javascripts/squoosh/mozjpeg_enc.wasm new file mode 100755 index 0000000000000000000000000000000000000000..d3cfebf62e061f2f1c30af81ef6f757968a32d5d GIT binary patch literal 255878 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 literal 0 HcmV?d00001 diff --git a/public/javascripts/squoosh/squoosh_resize.js b/public/javascripts/squoosh/squoosh_resize.js new file mode 100644 index 00000000000..ef47ab4e501 --- /dev/null +++ b/public/javascripts/squoosh/squoosh_resize.js @@ -0,0 +1,129 @@ +let wasm_bindgen; +(function() { + const __exports = {}; + let wasm; + + 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) { + const ptr = malloc(arg.length * 1); + getUint8Memory0().set(arg, ptr / 1); + 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; + } + + let cachegetUint8ClampedMemory0 = null; + function getUint8ClampedMemory0() { + if (cachegetUint8ClampedMemory0 === null || cachegetUint8ClampedMemory0.buffer !== wasm.memory.buffer) { + cachegetUint8ClampedMemory0 = new Uint8ClampedArray(wasm.memory.buffer); + } + return cachegetUint8ClampedMemory0; + } + + function getClampedArrayU8FromWasm0(ptr, len) { + return getUint8ClampedMemory0().subarray(ptr / 1, ptr / 1 + len); + } + /** + * @param {Uint8Array} input_image + * @param {number} input_width + * @param {number} input_height + * @param {number} output_width + * @param {number} output_height + * @param {number} typ_idx + * @param {boolean} premultiply + * @param {boolean} color_space_conversion + * @returns {Uint8ClampedArray} + */ + __exports.resize = function(input_image, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + var ptr0 = passArray8ToWasm0(input_image, wasm.__wbindgen_malloc); + var len0 = WASM_VECTOR_LEN; + wasm.resize(retptr, ptr0, len0, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var v1 = getClampedArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1); + return v1; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + }; + + 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 }; + + } else { + return instance; + } + } + } + + async function init(input) { + if (typeof input === 'undefined') { + let src; + if (typeof document === 'undefined') { + src = location.href; + } else { + src = document.currentScript.src; + } + input = src.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); + } + + + + const { instance, module } = await load(await input, imports); + + wasm = instance.exports; + init.__wbindgen_wasm_module = module; + + return wasm; + } + + wasm_bindgen = Object.assign(init, __exports); + +})(); diff --git a/public/javascripts/squoosh/squoosh_resize_bg.wasm b/public/javascripts/squoosh/squoosh_resize_bg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..b910c97b050df20c1024224d8b3dfab092e6d9e8 GIT binary patch literal 37052 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