diff --git a/.gitignore b/.gitignore
index 0dc7b4b..4926076 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-/.vscode
\ No newline at end of file
+.vscode/
+node_modules/
\ No newline at end of file
diff --git a/CNAME b/CNAME
deleted file mode 100644
index d4ec0f1..0000000
--- a/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-prism.uyanide.com
\ No newline at end of file
diff --git a/README.md b/README.md
deleted file mode 100644
index 460068e..0000000
--- a/README.md
+++ /dev/null
@@ -1,85 +0,0 @@
- 第一次写前端……
-
-# 基于色阶分离与像素交错的隐写图显形与制作工具
-
-## 链接 (已使用Cloudflare全面代理)
-[光棱坦克工厂](https://prism.uyanide.com/)
-
-## 使用方法
-一看就懂,不懂也能用 :)
-
-## 技术原理及思路来源
-[Uyanide/Mirage_Image](https://github.com/Uyanide/Mirage_Image)
-
-## 引用库
-- **[jpeg-js](https://github.com/jpeg-js/jpeg-js)** (用于统一不同浏览器编码JPEG的行为)
-- **[piexifjs](https://github.com/hMatoba/piexifjs)** (用于读写JPEG Metadata)
-- **[node-png-metadata](https://github.com/kujirahand/node-png-metadata)** (用于读写PNG Chunk)
-
-## 项目结构
-- **resources**
- - **neko.ico** (图标)
- - **default.png** (默认显形源)
- - **buta.jpg** (默认表图)
- - **neko.jpg** (默认里图)
-
-- **scripts**
- - **lib** (第三方库)
- - **[encoder.js](https://github.com/jpeg-js/jpeg-js/blob/master/lib/encoder.js)**
- - **[piexif.js](https://github.com/hMatoba/piexifjs/blob/master/piexif.js)**
- - **[png-metadata.js](https://github.com/kujirahand/node-png-metadata/blob/master/src/lib/png-metadata.js)**
- - **listeners** (事件监听、回调与辅助函数)
- - **DecodeListeners.js**
- - **EncodeListeners.js**
- - **UniversalListeners.js**
- - **prismProcessor** (图像处理)
- - **PrismDecoder.js**
- - **PrismEncoder.js**
- - **DefaultArguments.js** (加载默认参数)
- - **init.js** (初始化)
-
-- **styles**
- - **style.css**
- - **switch.css**
-
-- **index.html**
-- **DefaultArguments.json** (默认参数配置)
-
-# Q&A
-
-### 1. 这个什么所谓光棱坦克只能用这个工具看吗?
-并不是,通过图像编辑软件调整某些参数也可以看到被藏的图片,详情参见[百度贴吧 - 开个贴细说新式高科技坦克](https://tieba.baidu.com/p/9093709508)。
-
-### 2. 这个什么所谓光棱坦克只能用这个工具做吗?
-并不是,完全可以仅使用ps等图像编辑软件制作,详情参见同上。
-
-### 3. 无论怎么拉参数都完全看不出里图怎么办?
-请再次确认保存的是原图。如果使用的是百度贴吧手机app,请按以下步骤逐一排查:
-
-1. 请确认在保存图片前长按图片选择“查看原图”并等待加载完成,然后再保存图片。
-2. 如果仍然无效,可以复制帖子链接在浏览器里重新打开,下载或复制图片。
-3. 如果仍然无效,🔨
-
-如果使用的是百度贴吧电脑网页端,请确认在保存、复制或拖动图片前已点击图片,跳转至新的大图页面,等待完全加载完成后再进行操作。
-
-如果你是图片的制作者,请按以下步骤逐一排查:
-
-1. 请确认参数设置是否合理,例如里图色阶端点设置是否过低,对比度设置是否过于夸张。
-2. 可尝试更换导出格式,有关PNG/JPEG的格式的区别详见Q&A第6条。
-3. 请确认在发送图片时勾选了“原图”选项。
-4. 如果使用的是百度贴吧,请确认在设置中关闭了图片水印。如果有水印百度会对图片进行二次处理,可能会产生意料之外的图片压缩。
-
-### 4. 为何从URL加载图像一直无效?明明复制到浏览器地址栏可以正常访问?
-恕我才疏学浅,目前仍未找到完美解决跨源访问问题的方案,某些URL也因此无法正常加载。如果有方便使用且大陆用户可正常访问的CORS代理服务或者其他任何解决方案欢迎指教。
-
-### 5. 图像为何保存失败?
-可以更换浏览器重试。另外如果可以的话请告诉我你使用的浏览器,我在验证后会将其列为特例以使用另一种图像保存方案。目前确认无法通过常规方法正常保存图片的浏览器有且仅有小米系统默认内置浏览器。
-
-### 6. 保存为PNG格式和JPEG格式有何区别?
-
-1. JPEG格式为有损压缩,即便目前已经通过引入第三方库保证了较高的图像保存质量,仍然会不可避免地在显形时出现噪点等其他问题。
-2. PNG格式虽然可以保证较高的显形质量,但却极易被社交平台强制压缩,影响传输后的图像质量。且写入tEXt块的显形参数很容易被忽略造成自动显形功能失效。
-3. JPEG格式不支持透明度,因此当表图或里图为幻影坦克时不建议使用JPEG格式导出。
-
-### 7. 为什么有些图片可以自动调整参数,自动显形,有些却不行?
-本工具的自动显形是通过写入图片元数据实现的,如果图片本身不具备元数据/传输过程中丢失元数据便无法做到自动显形。1.3版本后制作图片时均会自动写入生成所用的参数。
\ No newline at end of file
diff --git a/docs/CNAME b/docs/CNAME
new file mode 100644
index 0000000..6ec9bb4
--- /dev/null
+++ b/docs/CNAME
@@ -0,0 +1 @@
+fork.uyanide.com
\ No newline at end of file
diff --git a/DefaultArguments.json b/docs/DefaultArguments.json
similarity index 84%
rename from DefaultArguments.json
rename to docs/DefaultArguments.json
index f0da4ef..1fa259a 100644
--- a/DefaultArguments.json
+++ b/docs/DefaultArguments.json
@@ -18,8 +18,8 @@
"maxSize": 4000,
"defaultPageId": "decodePage",
"defaultSrc": [
- "resources/default.png",
- "resources/neko.jpg",
- "resources/buta.jpg"
+ "./res/default.png",
+ "./res/neko.jpg",
+ "./res/buta.jpg"
]
}
\ No newline at end of file
diff --git a/styles/style.css b/docs/css/style.css
similarity index 100%
rename from styles/style.css
rename to docs/css/style.css
diff --git a/styles/switch.css b/docs/css/switch.css
similarity index 100%
rename from styles/switch.css
rename to docs/css/switch.css
diff --git a/index.html b/docs/index.html
similarity index 94%
rename from index.html
rename to docs/index.html
index 70776ef..5e2311c 100644
--- a/index.html
+++ b/docs/index.html
@@ -10,7 +10,7 @@
var PrismProcessor = PrismProcessor || {};
-
+
光棱坦克工厂
-
-
-
-
-
+
+
-
-
-
-
-
-
-
+
diff --git a/resources/buta.jpg b/docs/res/buta.jpg
similarity index 100%
rename from resources/buta.jpg
rename to docs/res/buta.jpg
diff --git a/resources/default.png b/docs/res/default.png
similarity index 100%
rename from resources/default.png
rename to docs/res/default.png
diff --git a/resources/neko.ico b/docs/res/neko.ico
similarity index 100%
rename from resources/neko.ico
rename to docs/res/neko.ico
diff --git a/resources/neko.jpg b/docs/res/neko.jpg
similarity index 100%
rename from resources/neko.jpg
rename to docs/res/neko.jpg
diff --git a/docs/src/main.js b/docs/src/main.js
new file mode 100644
index 0000000..f1ab32e
--- /dev/null
+++ b/docs/src/main.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.js.LICENSE.txt */
+(()=>{var e={526:(e,t)=>{"use strict";t.byteLength=function(e){var t=s(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){var t,r,i=s(e),a=i[0],c=i[1],u=new o(function(e,t,r){return 3*(t+r)/4-r}(0,a,c)),l=0,h=c>0?a-4:a;for(r=0;r>16&255,u[l++]=t>>8&255,u[l++]=255&t;return 2===c&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[l++]=255&t),1===c&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[l++]=t>>8&255,u[l++]=255&t),u},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=16383,s=0,u=n-o;su?u:s+a));return 1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),i.join("")};for(var r=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)r[a]=i[a],n[i.charCodeAt(a)]=a;function s(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function c(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},287:(e,t,r)=>{"use strict";const n=r(526),o=r(251),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.hp=c,t.IS=50;const a=2147483647;function s(e){if(e>a)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,c.prototype),t}function c(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return h(e)}return u(e,t,r)}function u(e,t,r){if("string"==typeof e)return function(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!c.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|p(e,t);let n=s(r);const o=n.write(e,t);return o!==r&&(n=n.slice(0,o)),n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(W(e,Uint8Array)){const t=new Uint8Array(e);return f(t.buffer,t.byteOffset,t.byteLength)}return d(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(W(e,ArrayBuffer)||e&&W(e.buffer,ArrayBuffer))return f(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(W(e,SharedArrayBuffer)||e&&W(e.buffer,SharedArrayBuffer)))return f(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return c.from(n,t,r);const o=function(e){if(c.isBuffer(e)){const t=0|m(e.length),r=s(t);return 0===r.length||e.copy(r,0,0,t),r}return void 0!==e.length?"number"!=typeof e.length||q(e.length)?s(0):d(e):"Buffer"===e.type&&Array.isArray(e.data)?d(e.data):void 0}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return c.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function l(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function h(e){return l(e),s(e<0?0:0|m(e))}function d(e){const t=e.length<0?0:0|m(e.length),r=s(t);for(let n=0;n=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|e}function p(e,t){if(c.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||W(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let o=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return $(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return X(e).length;default:if(o)return n?-1:$(e).length;t=(""+t).toLowerCase(),o=!0}}function g(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,r);case"utf8":case"utf-8":return L(this,t,r);case"ascii":return x(this,t,r);case"latin1":case"binary":return R(this,t,r);case"base64":return C(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function y(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function v(e,t,r,n,o){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),q(r=+r)&&(r=o?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(o)return-1;r=e.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof t&&(t=c.from(t,n)),c.isBuffer(t))return 0===t.length?-1:P(e,t,r,n,o);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):P(e,[t],r,n,o);throw new TypeError("val must be string, number or Buffer")}function P(e,t,r,n,o){let i,a=1,s=e.length,c=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,r/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){let n=-1;for(i=r;is&&(r=s-c),i=r;i>=0;i--){let r=!0;for(let n=0;no&&(n=o):n=o;const i=t.length;let a;for(n>i/2&&(n=i/2),a=0;a>8,o=r%256,i.push(o),i.push(n);return i}(t,e.length-r),e,r,n)}function C(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function L(e,t,r){r=Math.min(e.length,r);const n=[];let o=t;for(;o239?4:t>223?3:t>191?2:1;if(o+a<=r){let r,n,s,c;switch(a){case 1:t<128&&(i=t);break;case 2:r=e[o+1],128==(192&r)&&(c=(31&t)<<6|63&r,c>127&&(i=c));break;case 3:r=e[o+1],n=e[o+2],128==(192&r)&&128==(192&n)&&(c=(15&t)<<12|(63&r)<<6|63&n,c>2047&&(c<55296||c>57343)&&(i=c));break;case 4:r=e[o+1],n=e[o+2],s=e[o+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(c=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&s,c>65535&&c<1114112&&(i=c))}}null===i?(i=65533,a=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|1023&i),n.push(i),o+=a}return function(e){const t=e.length;if(t<=B)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(c.isBuffer(t)||(t=c.from(t)),t.copy(n,o)):Uint8Array.prototype.set.call(n,t,o);else{if(!c.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,o)}o+=t.length}return n},c.byteLength=p,c.prototype._isBuffer=!0,c.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tr&&(e+=" ... "),""},i&&(c.prototype[i]=c.prototype.inspect),c.prototype.compare=function(e,t,r,n,o){if(W(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),!c.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),t<0||r>e.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&t>=r)return 0;if(n>=o)return-1;if(t>=r)return 1;if(this===e)return 0;let i=(o>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0);const s=Math.min(i,a),u=this.slice(n,o),l=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const o=this.length-t;if((void 0===r||r>o)&&(r=o),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let i=!1;for(;;)switch(n){case"hex":return E(this,e,t,r);case"utf8":case"utf-8":return I(this,e,t,r);case"ascii":case"latin1":case"binary":return w(this,e,t,r);case"base64":return S(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,t,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const B=4096;function x(e,t,r){let n="";r=Math.min(e.length,r);for(let o=t;on)&&(r=n);let o="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function D(e,t,r,n,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function O(e,t,r,n,o){H(t,n,o,e,r,7);let i=Number(t&BigInt(4294967295));e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a,r}function G(e,t,r,n,o){H(t,n,o,e,r,7);let i=Number(t&BigInt(4294967295));e[r+7]=i,i>>=8,e[r+6]=i,i>>=8,e[r+5]=i,i>>=8,e[r+4]=i;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=a,a>>=8,e[r+2]=a,a>>=8,e[r+1]=a,a>>=8,e[r]=a,r+8}function M(e,t,r,n,o,i){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function F(e,t,r,n,i){return t=+t,r>>>=0,i||M(e,0,r,4),o.write(e,t,r,n,23,4),r+4}function U(e,t,r,n,i){return t=+t,r>>>=0,i||M(e,0,r,8),o.write(e,t,r,n,52,8),r+8}c.prototype.slice=function(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||k(e,t,this.length);let n=this[e],o=1,i=0;for(;++i>>=0,t>>>=0,r||k(e,t,this.length);let n=this[e+--t],o=1;for(;t>0&&(o*=256);)n+=this[e+--t]*o;return n},c.prototype.readUint8=c.prototype.readUInt8=function(e,t){return e>>>=0,t||k(e,1,this.length),this[e]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(e,t){return e>>>=0,t||k(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(e,t){return e>>>=0,t||k(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(e,t){return e>>>=0,t||k(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(e,t){return e>>>=0,t||k(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readBigUInt64LE=K((function(e){z(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||V(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(o)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||V(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||k(e,t,this.length);let n=this[e],o=1,i=0;for(;++i=o&&(n-=Math.pow(2,8*t)),n},c.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||k(e,t,this.length);let n=t,o=1,i=this[e+--n];for(;n>0&&(o*=256);)i+=this[e+--n]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return e>>>=0,t||k(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){e>>>=0,t||k(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt16BE=function(e,t){e>>>=0,t||k(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt32LE=function(e,t){return e>>>=0,t||k(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return e>>>=0,t||k(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readBigInt64LE=K((function(e){z(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||V(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||V(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||k(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return e>>>=0,t||k(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return e>>>=0,t||k(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return e>>>=0,t||k(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUintLE=c.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||D(this,e,t,r,Math.pow(2,8*r)-1,0);let o=1,i=0;for(this[t]=255&e;++i>>=0,r>>>=0,n||D(this,e,t,r,Math.pow(2,8*r)-1,0);let o=r-1,i=1;for(this[t+o]=255&e;--o>=0&&(i*=256);)this[t+o]=e/i&255;return t+r},c.prototype.writeUint8=c.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||D(this,e,t,1,255,0),this[t]=255&e,t+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||D(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||D(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||D(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||D(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigUInt64LE=K((function(e,t=0){return O(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),c.prototype.writeBigUInt64BE=K((function(e,t=0){return G(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),c.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);D(this,e,t,r,n-1,-n)}let o=0,i=1,a=0;for(this[t]=255&e;++o>>=0,!n){const n=Math.pow(2,8*r-1);D(this,e,t,r,n-1,-n)}let o=r-1,i=1,a=0;for(this[t+o]=255&e;--o>=0&&(i*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/i|0)-a&255;return t+r},c.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||D(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||D(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||D(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||D(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},c.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||D(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigInt64LE=K((function(e,t=0){return O(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),c.prototype.writeBigInt64BE=K((function(e,t=0){return G(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),c.prototype.writeFloatLE=function(e,t,r){return F(this,e,t,!0,r)},c.prototype.writeFloatBE=function(e,t,r){return F(this,e,t,!1,r)},c.prototype.writeDoubleLE=function(e,t,r){return U(this,e,t,!0,r)},c.prototype.writeDoubleBE=function(e,t,r){return U(this,e,t,!1,r)},c.prototype.copy=function(e,t,r,n){if(!c.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function H(e,t,r,n,o,i){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(i+1)}${n}`:`>= -(2${n} ** ${8*(i+1)-1}${n}) and < 2 ** ${8*(i+1)-1}${n}`:`>= ${t}${n} and <= ${r}${n}`,new _.ERR_OUT_OF_RANGE("value",o,e)}!function(e,t,r){z(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||V(t,e.length-(r+1))}(n,o,i)}function z(e,t){if("number"!=typeof e)throw new _.ERR_INVALID_ARG_TYPE(t,"number",e)}function V(e,t,r){if(Math.floor(e)!==e)throw z(e,r),new _.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new _.ERR_BUFFER_OUT_OF_BOUNDS;throw new _.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}j("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),j("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),j("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,o=r;return Number.isInteger(r)&&Math.abs(r)>2**32?o=N(String(r)):"bigint"==typeof r&&(o=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(o=N(o)),o+="n"),n+=` It must be ${t}. Received ${o}`,n}),RangeError);const Y=/[^+/0-9A-Za-z-_]/g;function $(e,t){let r;t=t||1/0;const n=e.length;let o=null;const i=[];for(let a=0;a55295&&r<57344){if(!o){if(r>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(t-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((t-=1)<0)break;i.push(r)}else if(r<2048){if((t-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function X(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(Y,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function J(e,t,r,n){let o;for(o=0;o=t.length||o>=e.length);++o)t[o+r]=e[o];return o}function W(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function q(e){return e!=e}const Z=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let o=0;o<16;++o)t[n+o]=e[r]+e[o]}return t}();function K(e){return"undefined"==typeof BigInt?Q:e}function Q(){throw new Error("BigInt not supported")}},251:(e,t)=>{t.read=function(e,t,r,n,o){var i,a,s=8*o-n-1,c=(1<>1,l=-7,h=r?o-1:0,d=r?-1:1,f=e[t+h];for(h+=d,i=f&(1<<-l)-1,f>>=-l,l+=s;l>0;i=256*i+e[t+h],h+=d,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=n;l>0;a=256*a+e[t+h],h+=d,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,n),i-=u}return(f?-1:1)*a*Math.pow(2,i-n)},t.write=function(e,t,r,n,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,d=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:i-1,m=n?1:-1,p=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+h>=1?d/c:d*Math.pow(2,1-h))*c>=2&&(a++,c/=2),a+h>=l?(s=0,a=l):a+h>=1?(s=(t*c-1)*Math.pow(2,o),a+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,o),a=0));o>=8;e[r+f]=255&s,f+=m,s/=256,o-=8);for(a=a<0;e[r+f]=255&a,f+=m,a/=256,u-=8);e[r+f-m]|=128*p}}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}(()=>{"use strict";var e={};function t(e){return l(">"+d("B",e.length),e)}function n(e){return l(">"+d("H",e.length),e)}function o(e){return l(">"+d("L",e.length),e)}function i(e,r,i){var a,s,c,u,h="",f="";if("Byte"==r)(a=e.length)<=4?f=t(e)+d("\0",4-a):(f=l(">L",[i]),h=t(e));else if("Short"==r)(a=e.length)<=2?f=n(e)+d("\0\0",2-a):(f=l(">L",[i]),h=n(e));else if("Long"==r)(a=e.length)<=1?f=o(e):(f=l(">L",[i]),h=o(e));else if("Ascii"==r)(a=(s=e+"\0").length)>4?(f=l(">L",[i]),h=s):f=s+d("\0",4-a);else if("Rational"==r){if("number"==typeof e[0])a=1,c=e[0],u=e[1],s=l(">L",[c])+l(">L",[u]);else{a=e.length,s="";for(var m=0;mL",[c])+l(">L",[u])}f=l(">L",[i]),h=s}else if("SRational"==r){if("number"==typeof e[0])a=1,c=e[0],u=e[1],s=l(">l",[c])+l(">l",[u]);else for(a=e.length,s="",m=0;ml",[c])+l(">l",[u]);f=l(">L",[i]),h=s}else"Undefined"==r&&((a=e.length)>4?(f=l(">L",[i]),h=e):f=e+d("\0",4-a));return[l(">L",[a]),f,h]}function a(e,t,r){var n,o=Object.keys(e).length,a=l(">H",[o]);n=["0th","1st"].indexOf(t)>-1?2+12*o+4:2+12*o;var s="",c="";for(var u in e)if("string"==typeof u&&(u=parseInt(u)),!("0th"==t&&[34665,34853].indexOf(u)>-1||"Exif"==t&&40965==u||"1st"==t&&[513,514].indexOf(u)>-1)){var h=e[u],d=l(">H",[u]),f=p[t][u].type,g=l(">H",[m[f]]);"number"==typeof h&&(h=[h]);var y=i(h,f,8+n+r+c.length);s+=d+g+y[0]+y[1],c+=y[2]}return[a+s,c]}function s(e){var t;if("ÿØ"==e.slice(0,2))t=function(e){for(var t,r=0;r-1)this.tiftag=e;else{if("Exif"!=e.slice(0,4))throw"Given file is neither JPEG nor TIFF.";this.tiftag=e.slice(6)}}if(e.version="1.0.4",e.remove=function(e){var t=!1;if("ÿØ"==e.slice(0,2));else{if("data:image/jpeg;base64,"!=e.slice(0,23)&&"data:image/jpg;base64,"!=e.slice(0,22))throw"Given data is not jpeg.";e=u(e.split(",")[1]),t=!0}var r=f(e).filter((function(e){return!("ÿá"==e.slice(0,2)&&"Exif\0\0"==e.slice(4,10))})).join("");return t&&(r="data:image/jpeg;base64,"+c(r)),r},e.insert=function(e,t){var r=!1;if("Exif\0\0"!=e.slice(0,6))throw"Given data is not exif.";if("ÿØ"==t.slice(0,2));else{if("data:image/jpeg;base64,"!=t.slice(0,23)&&"data:image/jpg;base64,"!=t.slice(0,22))throw"Given data is not jpeg.";t=u(t.split(",")[1]),r=!0}var n="ÿá"+l(">H",[e.length+2])+e,o=function(e,t){return"ÿà"==e[1].slice(0,2)&&"ÿá"==e[2].slice(0,2)&&"Exif\0\0"==e[2].slice(4,10)?t?(e[2]=t,e=["ÿØ"].concat(e.slice(2))):e=null==t?e.slice(0,2).concat(e.slice(3)):e.slice(0).concat(e.slice(2)):"ÿà"==e[1].slice(0,2)?t&&(e[1]=t):"ÿá"==e[1].slice(0,2)&&"Exif\0\0"==e[1].slice(4,10)?t?e[1]=t:null==t&&(e=e.slice(0).concat(e.slice(2))):t&&(e=[e[0],t].concat(e.slice(1))),e.join("")}(f(t),n);return r&&(o="data:image/jpeg;base64,"+c(o)),o},e.load=function(e){var t;if("string"!=typeof e)throw"'load' gots invalid type argument.";if("ÿØ"==e.slice(0,2))t=e;else if("data:image/jpeg;base64,"==e.slice(0,23)||"data:image/jpg;base64,"==e.slice(0,22))t=u(e.split(",")[1]);else{if("Exif"!=e.slice(0,4))throw"'load' gots invalid file data.";t=e.slice(6)}var r={"0th":{},Exif:{},GPS:{},Interop:{},"1st":{},thumbnail:null},n=new s(t);if(null===n.tiftag)return r;"II"==n.tiftag.slice(0,2)?n.endian_mark="<":n.endian_mark=">";var o=h(n.endian_mark+"L",n.tiftag.slice(4,8))[0];r["0th"]=n.get_ifd(o,"0th");var i=r["0th"].first_ifd_pointer;if(delete r["0th"].first_ifd_pointer,34665 in r["0th"]&&(o=r["0th"][34665],r.Exif=n.get_ifd(o,"Exif")),34853 in r["0th"]&&(o=r["0th"][34853],r.GPS=n.get_ifd(o,"GPS")),40965 in r.Exif&&(o=r.Exif[40965],r.Interop=n.get_ifd(o,"Interop")),"\0\0\0\0"!=i&&(o=h(n.endian_mark+"L",i)[0],r["1st"]=n.get_ifd(o,"1st"),513 in r["1st"]&&514 in r["1st"])){var a=r["1st"][513]+r["1st"][514],c=n.tiftag.slice(r["1st"][513],a);r.thumbnail=c}return r},e.dump=function(t){var r,n,o,i,s,c,u=(r=t,JSON.parse(JSON.stringify(r))),h=!1,d=!1,p=!1,g=!1;n="0th"in u?u["0th"]:{},"Exif"in u&&Object.keys(u.Exif).length||"Interop"in u&&Object.keys(u.Interop).length?(n[34665]=1,h=!0,o=u.Exif,"Interop"in u&&Object.keys(u.Interop).length?(o[40965]=1,p=!0,i=u.Interop):Object.keys(o).indexOf(e.ExifIFD.InteroperabilityTag.toString())>-1&&delete o[40965]):Object.keys(n).indexOf(e.ImageIFD.ExifTag.toString())>-1&&delete n[34665],"GPS"in u&&Object.keys(u.GPS).length?(n[e.ImageIFD.GPSTag]=1,d=!0,s=u.GPS):Object.keys(n).indexOf(e.ImageIFD.GPSTag.toString())>-1&&delete n[e.ImageIFD.GPSTag],"1st"in u&&"thumbnail"in u&&null!=u.thumbnail&&(g=!0,u["1st"][513]=1,u["1st"][514]=1,c=u["1st"]);var y,v,P,E=a(n,"0th",0),I=E[0].length+12*h+12*d+4+E[1].length,w="",S=0,b="",C=0,L="",B=0,x="";if(h&&(S=(y=a(o,"Exif",I))[0].length+12*p+y[1].length),d&&(C=(b=a(s,"GPS",I+S).join("")).length),p&&(B=(L=a(i,"Interop",I+S+C).join("")).length),g&&(v=a(c,"1st",I+S+C+B),(P=function(e){for(var t=f(e);"ÿà"<=t[1].slice(0,2)&&t[1].slice(0,2)<="ÿï";)t=[t[0]].concat(t.slice(2));return t.join("")}(u.thumbnail)).length>64e3))throw"Given thumbnail is too large. max 64kB";var R="",T="",A="",k="\0\0\0\0";if(h){var D=l(">L",[O=8+I]);R=l(">H",[34665])+l(">H",[m.Long])+l(">L",[1])+D}if(d&&(D=l(">L",[O=8+I+S]),T=l(">H",[34853])+l(">H",[m.Long])+l(">L",[1])+D),p&&(D=l(">L",[O=8+I+S+C]),A=l(">H",[40965])+l(">H",[m.Long])+l(">L",[1])+D),g){var O;k=l(">L",[O=8+I+S+C+B]);var G="\0\0\0\0"+l(">L",[O+v[0].length+24+4+v[1].length]),M="\0\0\0\0"+l(">L",[P.length]);x=v[0]+G+M+"\0\0\0\0"+v[1]+P}var F=E[0]+R+T+k+E[1];return h&&(w=y[0]+A+y[1]),"Exif\0\0MM\0*\0\0\0\b"+F+w+b+L+x},s.prototype={get_ifd:function(e,t){var r,n={},o=h(this.endian_mark+"H",this.tiftag.slice(e,e+2))[0],i=e+2;r=["0th","1st"].indexOf(t)>-1?"Image":t;for(var a=0;a4?(t=h(this.endian_mark+"L",i)[0],r=h(this.endian_mark+d("B",o),this.tiftag.slice(t,t+o))):r=h(this.endian_mark+d("B",o),i.slice(0,o));else if(2==n)o>4?(t=h(this.endian_mark+"L",i)[0],r=this.tiftag.slice(t,t+o-1)):r=i.slice(0,o-1);else if(3==n)o>2?(t=h(this.endian_mark+"L",i)[0],r=h(this.endian_mark+d("H",o),this.tiftag.slice(t,t+2*o))):r=h(this.endian_mark+d("H",o),i.slice(0,2*o));else if(4==n)o>1?(t=h(this.endian_mark+"L",i)[0],r=h(this.endian_mark+d("L",o),this.tiftag.slice(t,t+4*o))):r=h(this.endian_mark+d("L",o),i);else if(5==n)if(t=h(this.endian_mark+"L",i)[0],o>1){r=[];for(var a=0;a4?(t=h(this.endian_mark+"L",i)[0],r=this.tiftag.slice(t,t+o)):r=i.slice(0,o);else{if(10!=n)throw"Exif might be wrong. Got incorrect value type to decode. type:"+n;if(t=h(this.endian_mark+"L",i)[0],o>1)for(r=[],a=0;a>2,i=(3&t)<<4|(r=e.charCodeAt(u++))>>4,a=(15&r)<<2|(n=e.charCodeAt(u++))>>6,s=63&n,isNaN(r)?a=s=64:isNaN(n)&&(s=64),c=c+l.charAt(o)+l.charAt(i)+l.charAt(a)+l.charAt(s);return c}),"undefined"!=typeof window&&"function"==typeof window.atob)var u=window.atob;function l(e,t){if(!(t instanceof Array))throw"'pack' error. Got invalid type argument.";if(e.length-1!=t.length)throw"'pack' error. "+(e.length-1)+" marks, "+t.length+" elements.";var r;if("<"==e[0])r=!0;else{if(">"!=e[0])throw"";r=!1}for(var n="",o=1,i=null,a=null,s=null;a=e[o];){if("b"==a.toLowerCase()){if(i=t[o-1],"b"==a&&i<0&&(i+=256),i>255||i<0)throw"'pack' error.";s=String.fromCharCode(i)}else if("H"==a){if((i=t[o-1])>65535||i<0)throw"'pack' error.";s=String.fromCharCode(Math.floor(i%65536/256))+String.fromCharCode(i%256),r&&(s=s.split("").reverse().join(""))}else{if("l"!=a.toLowerCase())throw"'pack' error.";if(i=t[o-1],"l"==a&&i<0&&(i+=4294967296),i>4294967295||i<0)throw"'pack' error.";s=String.fromCharCode(Math.floor(i/16777216))+String.fromCharCode(Math.floor(i%16777216/65536))+String.fromCharCode(Math.floor(i%65536/256))+String.fromCharCode(i%256),r&&(s=s.split("").reverse().join(""))}n+=s,o+=1}return n}function h(e,t){if("string"!=typeof t)throw"'unpack' error. Got invalid type argument.";for(var r,n=0,o=1;o"!=e[0])throw"'unpack' error.";r=!1}for(var i=[],a=0,s=1,c=null,u=null,l=null,h="";u=e[s];){if("b"==u.toLowerCase())l=1,c=(h=t.slice(a,a+l)).charCodeAt(0),"b"==u&&c>=128&&(c-=256);else if("H"==u)l=2,h=t.slice(a,a+l),r&&(h=h.split("").reverse().join("")),c=256*h.charCodeAt(0)+h.charCodeAt(1);else{if("l"!=u.toLowerCase())throw"'unpack' error. "+u;l=4,h=t.slice(a,a+l),r&&(h=h.split("").reverse().join("")),c=16777216*h.charCodeAt(0)+65536*h.charCodeAt(1)+256*h.charCodeAt(2)+h.charCodeAt(3),"l"==u&&c>=2147483648&&(c-=4294967296)}i.push(c),a+=l,s+=1}return i}function d(e,t){for(var r="",n=0;nH",e.slice(t+2,t+4))[0]+2;if(r.push(e.slice(t,n)),(t=n)>=e.length)throw"Wrong JPEG data."}return r}void 0===u&&(u=function(e){var t,r,n,o,i,a,s="",c=0,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");c>4,r=(15&o)<<4|(i=u.indexOf(e.charAt(c++)))>>2,n=(3&i)<<6|(a=u.indexOf(e.charAt(c++))),s+=String.fromCharCode(t),64!=i&&(s+=String.fromCharCode(r)),64!=a&&(s+=String.fromCharCode(n));return s});var m={Byte:1,Ascii:2,Short:3,Long:4,Rational:5,Undefined:7,SLong:9,SRational:10},p={Image:{11:{name:"ProcessingSoftware",type:"Ascii"},254:{name:"NewSubfileType",type:"Long"},255:{name:"SubfileType",type:"Short"},256:{name:"ImageWidth",type:"Long"},257:{name:"ImageLength",type:"Long"},258:{name:"BitsPerSample",type:"Short"},259:{name:"Compression",type:"Short"},262:{name:"PhotometricInterpretation",type:"Short"},263:{name:"Threshholding",type:"Short"},264:{name:"CellWidth",type:"Short"},265:{name:"CellLength",type:"Short"},266:{name:"FillOrder",type:"Short"},269:{name:"DocumentName",type:"Ascii"},270:{name:"ImageDescription",type:"Ascii"},271:{name:"Make",type:"Ascii"},272:{name:"Model",type:"Ascii"},273:{name:"StripOffsets",type:"Long"},274:{name:"Orientation",type:"Short"},277:{name:"SamplesPerPixel",type:"Short"},278:{name:"RowsPerStrip",type:"Long"},279:{name:"StripByteCounts",type:"Long"},282:{name:"XResolution",type:"Rational"},283:{name:"YResolution",type:"Rational"},284:{name:"PlanarConfiguration",type:"Short"},290:{name:"GrayResponseUnit",type:"Short"},291:{name:"GrayResponseCurve",type:"Short"},292:{name:"T4Options",type:"Long"},293:{name:"T6Options",type:"Long"},296:{name:"ResolutionUnit",type:"Short"},301:{name:"TransferFunction",type:"Short"},305:{name:"Software",type:"Ascii"},306:{name:"DateTime",type:"Ascii"},315:{name:"Artist",type:"Ascii"},316:{name:"HostComputer",type:"Ascii"},317:{name:"Predictor",type:"Short"},318:{name:"WhitePoint",type:"Rational"},319:{name:"PrimaryChromaticities",type:"Rational"},320:{name:"ColorMap",type:"Short"},321:{name:"HalftoneHints",type:"Short"},322:{name:"TileWidth",type:"Short"},323:{name:"TileLength",type:"Short"},324:{name:"TileOffsets",type:"Short"},325:{name:"TileByteCounts",type:"Short"},330:{name:"SubIFDs",type:"Long"},332:{name:"InkSet",type:"Short"},333:{name:"InkNames",type:"Ascii"},334:{name:"NumberOfInks",type:"Short"},336:{name:"DotRange",type:"Byte"},337:{name:"TargetPrinter",type:"Ascii"},338:{name:"ExtraSamples",type:"Short"},339:{name:"SampleFormat",type:"Short"},340:{name:"SMinSampleValue",type:"Short"},341:{name:"SMaxSampleValue",type:"Short"},342:{name:"TransferRange",type:"Short"},343:{name:"ClipPath",type:"Byte"},344:{name:"XClipPathUnits",type:"Long"},345:{name:"YClipPathUnits",type:"Long"},346:{name:"Indexed",type:"Short"},347:{name:"JPEGTables",type:"Undefined"},351:{name:"OPIProxy",type:"Short"},512:{name:"JPEGProc",type:"Long"},513:{name:"JPEGInterchangeFormat",type:"Long"},514:{name:"JPEGInterchangeFormatLength",type:"Long"},515:{name:"JPEGRestartInterval",type:"Short"},517:{name:"JPEGLosslessPredictors",type:"Short"},518:{name:"JPEGPointTransforms",type:"Short"},519:{name:"JPEGQTables",type:"Long"},520:{name:"JPEGDCTables",type:"Long"},521:{name:"JPEGACTables",type:"Long"},529:{name:"YCbCrCoefficients",type:"Rational"},530:{name:"YCbCrSubSampling",type:"Short"},531:{name:"YCbCrPositioning",type:"Short"},532:{name:"ReferenceBlackWhite",type:"Rational"},700:{name:"XMLPacket",type:"Byte"},18246:{name:"Rating",type:"Short"},18249:{name:"RatingPercent",type:"Short"},32781:{name:"ImageID",type:"Ascii"},33421:{name:"CFARepeatPatternDim",type:"Short"},33422:{name:"CFAPattern",type:"Byte"},33423:{name:"BatteryLevel",type:"Rational"},33432:{name:"Copyright",type:"Ascii"},33434:{name:"ExposureTime",type:"Rational"},34377:{name:"ImageResources",type:"Byte"},34665:{name:"ExifTag",type:"Long"},34675:{name:"InterColorProfile",type:"Undefined"},34853:{name:"GPSTag",type:"Long"},34857:{name:"Interlace",type:"Short"},34858:{name:"TimeZoneOffset",type:"Long"},34859:{name:"SelfTimerMode",type:"Short"},37387:{name:"FlashEnergy",type:"Rational"},37388:{name:"SpatialFrequencyResponse",type:"Undefined"},37389:{name:"Noise",type:"Undefined"},37390:{name:"FocalPlaneXResolution",type:"Rational"},37391:{name:"FocalPlaneYResolution",type:"Rational"},37392:{name:"FocalPlaneResolutionUnit",type:"Short"},37393:{name:"ImageNumber",type:"Long"},37394:{name:"SecurityClassification",type:"Ascii"},37395:{name:"ImageHistory",type:"Ascii"},37397:{name:"ExposureIndex",type:"Rational"},37398:{name:"TIFFEPStandardID",type:"Byte"},37399:{name:"SensingMethod",type:"Short"},40091:{name:"XPTitle",type:"Byte"},40092:{name:"XPComment",type:"Byte"},40093:{name:"XPAuthor",type:"Byte"},40094:{name:"XPKeywords",type:"Byte"},40095:{name:"XPSubject",type:"Byte"},50341:{name:"PrintImageMatching",type:"Undefined"},50706:{name:"DNGVersion",type:"Byte"},50707:{name:"DNGBackwardVersion",type:"Byte"},50708:{name:"UniqueCameraModel",type:"Ascii"},50709:{name:"LocalizedCameraModel",type:"Byte"},50710:{name:"CFAPlaneColor",type:"Byte"},50711:{name:"CFALayout",type:"Short"},50712:{name:"LinearizationTable",type:"Short"},50713:{name:"BlackLevelRepeatDim",type:"Short"},50714:{name:"BlackLevel",type:"Rational"},50715:{name:"BlackLevelDeltaH",type:"SRational"},50716:{name:"BlackLevelDeltaV",type:"SRational"},50717:{name:"WhiteLevel",type:"Short"},50718:{name:"DefaultScale",type:"Rational"},50719:{name:"DefaultCropOrigin",type:"Short"},50720:{name:"DefaultCropSize",type:"Short"},50721:{name:"ColorMatrix1",type:"SRational"},50722:{name:"ColorMatrix2",type:"SRational"},50723:{name:"CameraCalibration1",type:"SRational"},50724:{name:"CameraCalibration2",type:"SRational"},50725:{name:"ReductionMatrix1",type:"SRational"},50726:{name:"ReductionMatrix2",type:"SRational"},50727:{name:"AnalogBalance",type:"Rational"},50728:{name:"AsShotNeutral",type:"Short"},50729:{name:"AsShotWhiteXY",type:"Rational"},50730:{name:"BaselineExposure",type:"SRational"},50731:{name:"BaselineNoise",type:"Rational"},50732:{name:"BaselineSharpness",type:"Rational"},50733:{name:"BayerGreenSplit",type:"Long"},50734:{name:"LinearResponseLimit",type:"Rational"},50735:{name:"CameraSerialNumber",type:"Ascii"},50736:{name:"LensInfo",type:"Rational"},50737:{name:"ChromaBlurRadius",type:"Rational"},50738:{name:"AntiAliasStrength",type:"Rational"},50739:{name:"ShadowScale",type:"SRational"},50740:{name:"DNGPrivateData",type:"Byte"},50741:{name:"MakerNoteSafety",type:"Short"},50778:{name:"CalibrationIlluminant1",type:"Short"},50779:{name:"CalibrationIlluminant2",type:"Short"},50780:{name:"BestQualityScale",type:"Rational"},50781:{name:"RawDataUniqueID",type:"Byte"},50827:{name:"OriginalRawFileName",type:"Byte"},50828:{name:"OriginalRawFileData",type:"Undefined"},50829:{name:"ActiveArea",type:"Short"},50830:{name:"MaskedAreas",type:"Short"},50831:{name:"AsShotICCProfile",type:"Undefined"},50832:{name:"AsShotPreProfileMatrix",type:"SRational"},50833:{name:"CurrentICCProfile",type:"Undefined"},50834:{name:"CurrentPreProfileMatrix",type:"SRational"},50879:{name:"ColorimetricReference",type:"Short"},50931:{name:"CameraCalibrationSignature",type:"Byte"},50932:{name:"ProfileCalibrationSignature",type:"Byte"},50934:{name:"AsShotProfileName",type:"Byte"},50935:{name:"NoiseReductionApplied",type:"Rational"},50936:{name:"ProfileName",type:"Byte"},50937:{name:"ProfileHueSatMapDims",type:"Long"},50938:{name:"ProfileHueSatMapData1",type:"Float"},50939:{name:"ProfileHueSatMapData2",type:"Float"},50940:{name:"ProfileToneCurve",type:"Float"},50941:{name:"ProfileEmbedPolicy",type:"Long"},50942:{name:"ProfileCopyright",type:"Byte"},50964:{name:"ForwardMatrix1",type:"SRational"},50965:{name:"ForwardMatrix2",type:"SRational"},50966:{name:"PreviewApplicationName",type:"Byte"},50967:{name:"PreviewApplicationVersion",type:"Byte"},50968:{name:"PreviewSettingsName",type:"Byte"},50969:{name:"PreviewSettingsDigest",type:"Byte"},50970:{name:"PreviewColorSpace",type:"Long"},50971:{name:"PreviewDateTime",type:"Ascii"},50972:{name:"RawImageDigest",type:"Undefined"},50973:{name:"OriginalRawFileDigest",type:"Undefined"},50974:{name:"SubTileBlockSize",type:"Long"},50975:{name:"RowInterleaveFactor",type:"Long"},50981:{name:"ProfileLookTableDims",type:"Long"},50982:{name:"ProfileLookTableData",type:"Float"},51008:{name:"OpcodeList1",type:"Undefined"},51009:{name:"OpcodeList2",type:"Undefined"},51022:{name:"OpcodeList3",type:"Undefined"}},Exif:{33434:{name:"ExposureTime",type:"Rational"},33437:{name:"FNumber",type:"Rational"},34850:{name:"ExposureProgram",type:"Short"},34852:{name:"SpectralSensitivity",type:"Ascii"},34855:{name:"ISOSpeedRatings",type:"Short"},34856:{name:"OECF",type:"Undefined"},34864:{name:"SensitivityType",type:"Short"},34865:{name:"StandardOutputSensitivity",type:"Long"},34866:{name:"RecommendedExposureIndex",type:"Long"},34867:{name:"ISOSpeed",type:"Long"},34868:{name:"ISOSpeedLatitudeyyy",type:"Long"},34869:{name:"ISOSpeedLatitudezzz",type:"Long"},36864:{name:"ExifVersion",type:"Undefined"},36867:{name:"DateTimeOriginal",type:"Ascii"},36868:{name:"DateTimeDigitized",type:"Ascii"},37121:{name:"ComponentsConfiguration",type:"Undefined"},37122:{name:"CompressedBitsPerPixel",type:"Rational"},37377:{name:"ShutterSpeedValue",type:"SRational"},37378:{name:"ApertureValue",type:"Rational"},37379:{name:"BrightnessValue",type:"SRational"},37380:{name:"ExposureBiasValue",type:"SRational"},37381:{name:"MaxApertureValue",type:"Rational"},37382:{name:"SubjectDistance",type:"Rational"},37383:{name:"MeteringMode",type:"Short"},37384:{name:"LightSource",type:"Short"},37385:{name:"Flash",type:"Short"},37386:{name:"FocalLength",type:"Rational"},37396:{name:"SubjectArea",type:"Short"},37500:{name:"MakerNote",type:"Undefined"},37510:{name:"UserComment",type:"Ascii"},37520:{name:"SubSecTime",type:"Ascii"},37521:{name:"SubSecTimeOriginal",type:"Ascii"},37522:{name:"SubSecTimeDigitized",type:"Ascii"},40960:{name:"FlashpixVersion",type:"Undefined"},40961:{name:"ColorSpace",type:"Short"},40962:{name:"PixelXDimension",type:"Long"},40963:{name:"PixelYDimension",type:"Long"},40964:{name:"RelatedSoundFile",type:"Ascii"},40965:{name:"InteroperabilityTag",type:"Long"},41483:{name:"FlashEnergy",type:"Rational"},41484:{name:"SpatialFrequencyResponse",type:"Undefined"},41486:{name:"FocalPlaneXResolution",type:"Rational"},41487:{name:"FocalPlaneYResolution",type:"Rational"},41488:{name:"FocalPlaneResolutionUnit",type:"Short"},41492:{name:"SubjectLocation",type:"Short"},41493:{name:"ExposureIndex",type:"Rational"},41495:{name:"SensingMethod",type:"Short"},41728:{name:"FileSource",type:"Undefined"},41729:{name:"SceneType",type:"Undefined"},41730:{name:"CFAPattern",type:"Undefined"},41985:{name:"CustomRendered",type:"Short"},41986:{name:"ExposureMode",type:"Short"},41987:{name:"WhiteBalance",type:"Short"},41988:{name:"DigitalZoomRatio",type:"Rational"},41989:{name:"FocalLengthIn35mmFilm",type:"Short"},41990:{name:"SceneCaptureType",type:"Short"},41991:{name:"GainControl",type:"Short"},41992:{name:"Contrast",type:"Short"},41993:{name:"Saturation",type:"Short"},41994:{name:"Sharpness",type:"Short"},41995:{name:"DeviceSettingDescription",type:"Undefined"},41996:{name:"SubjectDistanceRange",type:"Short"},42016:{name:"ImageUniqueID",type:"Ascii"},42032:{name:"CameraOwnerName",type:"Ascii"},42033:{name:"BodySerialNumber",type:"Ascii"},42034:{name:"LensSpecification",type:"Rational"},42035:{name:"LensMake",type:"Ascii"},42036:{name:"LensModel",type:"Ascii"},42037:{name:"LensSerialNumber",type:"Ascii"},42240:{name:"Gamma",type:"Rational"}},GPS:{0:{name:"GPSVersionID",type:"Byte"},1:{name:"GPSLatitudeRef",type:"Ascii"},2:{name:"GPSLatitude",type:"Rational"},3:{name:"GPSLongitudeRef",type:"Ascii"},4:{name:"GPSLongitude",type:"Rational"},5:{name:"GPSAltitudeRef",type:"Byte"},6:{name:"GPSAltitude",type:"Rational"},7:{name:"GPSTimeStamp",type:"Rational"},8:{name:"GPSSatellites",type:"Ascii"},9:{name:"GPSStatus",type:"Ascii"},10:{name:"GPSMeasureMode",type:"Ascii"},11:{name:"GPSDOP",type:"Rational"},12:{name:"GPSSpeedRef",type:"Ascii"},13:{name:"GPSSpeed",type:"Rational"},14:{name:"GPSTrackRef",type:"Ascii"},15:{name:"GPSTrack",type:"Rational"},16:{name:"GPSImgDirectionRef",type:"Ascii"},17:{name:"GPSImgDirection",type:"Rational"},18:{name:"GPSMapDatum",type:"Ascii"},19:{name:"GPSDestLatitudeRef",type:"Ascii"},20:{name:"GPSDestLatitude",type:"Rational"},21:{name:"GPSDestLongitudeRef",type:"Ascii"},22:{name:"GPSDestLongitude",type:"Rational"},23:{name:"GPSDestBearingRef",type:"Ascii"},24:{name:"GPSDestBearing",type:"Rational"},25:{name:"GPSDestDistanceRef",type:"Ascii"},26:{name:"GPSDestDistance",type:"Rational"},27:{name:"GPSProcessingMethod",type:"Undefined"},28:{name:"GPSAreaInformation",type:"Undefined"},29:{name:"GPSDateStamp",type:"Ascii"},30:{name:"GPSDifferential",type:"Short"},31:{name:"GPSHPositioningError",type:"Rational"}},Interop:{1:{name:"InteroperabilityIndex",type:"Ascii"}}};p["0th"]=p.Image,p["1st"]=p.Image,e.TAGS=p,e.ImageIFD={ProcessingSoftware:11,NewSubfileType:254,SubfileType:255,ImageWidth:256,ImageLength:257,BitsPerSample:258,Compression:259,PhotometricInterpretation:262,Threshholding:263,CellWidth:264,CellLength:265,FillOrder:266,DocumentName:269,ImageDescription:270,Make:271,Model:272,StripOffsets:273,Orientation:274,SamplesPerPixel:277,RowsPerStrip:278,StripByteCounts:279,XResolution:282,YResolution:283,PlanarConfiguration:284,GrayResponseUnit:290,GrayResponseCurve:291,T4Options:292,T6Options:293,ResolutionUnit:296,TransferFunction:301,Software:305,DateTime:306,Artist:315,HostComputer:316,Predictor:317,WhitePoint:318,PrimaryChromaticities:319,ColorMap:320,HalftoneHints:321,TileWidth:322,TileLength:323,TileOffsets:324,TileByteCounts:325,SubIFDs:330,InkSet:332,InkNames:333,NumberOfInks:334,DotRange:336,TargetPrinter:337,ExtraSamples:338,SampleFormat:339,SMinSampleValue:340,SMaxSampleValue:341,TransferRange:342,ClipPath:343,XClipPathUnits:344,YClipPathUnits:345,Indexed:346,JPEGTables:347,OPIProxy:351,JPEGProc:512,JPEGInterchangeFormat:513,JPEGInterchangeFormatLength:514,JPEGRestartInterval:515,JPEGLosslessPredictors:517,JPEGPointTransforms:518,JPEGQTables:519,JPEGDCTables:520,JPEGACTables:521,YCbCrCoefficients:529,YCbCrSubSampling:530,YCbCrPositioning:531,ReferenceBlackWhite:532,XMLPacket:700,Rating:18246,RatingPercent:18249,ImageID:32781,CFARepeatPatternDim:33421,CFAPattern:33422,BatteryLevel:33423,Copyright:33432,ExposureTime:33434,ImageResources:34377,ExifTag:34665,InterColorProfile:34675,GPSTag:34853,Interlace:34857,TimeZoneOffset:34858,SelfTimerMode:34859,FlashEnergy:37387,SpatialFrequencyResponse:37388,Noise:37389,FocalPlaneXResolution:37390,FocalPlaneYResolution:37391,FocalPlaneResolutionUnit:37392,ImageNumber:37393,SecurityClassification:37394,ImageHistory:37395,ExposureIndex:37397,TIFFEPStandardID:37398,SensingMethod:37399,XPTitle:40091,XPComment:40092,XPAuthor:40093,XPKeywords:40094,XPSubject:40095,PrintImageMatching:50341,DNGVersion:50706,DNGBackwardVersion:50707,UniqueCameraModel:50708,LocalizedCameraModel:50709,CFAPlaneColor:50710,CFALayout:50711,LinearizationTable:50712,BlackLevelRepeatDim:50713,BlackLevel:50714,BlackLevelDeltaH:50715,BlackLevelDeltaV:50716,WhiteLevel:50717,DefaultScale:50718,DefaultCropOrigin:50719,DefaultCropSize:50720,ColorMatrix1:50721,ColorMatrix2:50722,CameraCalibration1:50723,CameraCalibration2:50724,ReductionMatrix1:50725,ReductionMatrix2:50726,AnalogBalance:50727,AsShotNeutral:50728,AsShotWhiteXY:50729,BaselineExposure:50730,BaselineNoise:50731,BaselineSharpness:50732,BayerGreenSplit:50733,LinearResponseLimit:50734,CameraSerialNumber:50735,LensInfo:50736,ChromaBlurRadius:50737,AntiAliasStrength:50738,ShadowScale:50739,DNGPrivateData:50740,MakerNoteSafety:50741,CalibrationIlluminant1:50778,CalibrationIlluminant2:50779,BestQualityScale:50780,RawDataUniqueID:50781,OriginalRawFileName:50827,OriginalRawFileData:50828,ActiveArea:50829,MaskedAreas:50830,AsShotICCProfile:50831,AsShotPreProfileMatrix:50832,CurrentICCProfile:50833,CurrentPreProfileMatrix:50834,ColorimetricReference:50879,CameraCalibrationSignature:50931,ProfileCalibrationSignature:50932,AsShotProfileName:50934,NoiseReductionApplied:50935,ProfileName:50936,ProfileHueSatMapDims:50937,ProfileHueSatMapData1:50938,ProfileHueSatMapData2:50939,ProfileToneCurve:50940,ProfileEmbedPolicy:50941,ProfileCopyright:50942,ForwardMatrix1:50964,ForwardMatrix2:50965,PreviewApplicationName:50966,PreviewApplicationVersion:50967,PreviewSettingsName:50968,PreviewSettingsDigest:50969,PreviewColorSpace:50970,PreviewDateTime:50971,RawImageDigest:50972,OriginalRawFileDigest:50973,SubTileBlockSize:50974,RowInterleaveFactor:50975,ProfileLookTableDims:50981,ProfileLookTableData:50982,OpcodeList1:51008,OpcodeList2:51009,OpcodeList3:51022,NoiseProfile:51041},e.ExifIFD={ExposureTime:33434,FNumber:33437,ExposureProgram:34850,SpectralSensitivity:34852,ISOSpeedRatings:34855,OECF:34856,SensitivityType:34864,StandardOutputSensitivity:34865,RecommendedExposureIndex:34866,ISOSpeed:34867,ISOSpeedLatitudeyyy:34868,ISOSpeedLatitudezzz:34869,ExifVersion:36864,DateTimeOriginal:36867,DateTimeDigitized:36868,ComponentsConfiguration:37121,CompressedBitsPerPixel:37122,ShutterSpeedValue:37377,ApertureValue:37378,BrightnessValue:37379,ExposureBiasValue:37380,MaxApertureValue:37381,SubjectDistance:37382,MeteringMode:37383,LightSource:37384,Flash:37385,FocalLength:37386,SubjectArea:37396,MakerNote:37500,UserComment:37510,SubSecTime:37520,SubSecTimeOriginal:37521,SubSecTimeDigitized:37522,FlashpixVersion:40960,ColorSpace:40961,PixelXDimension:40962,PixelYDimension:40963,RelatedSoundFile:40964,InteroperabilityTag:40965,FlashEnergy:41483,SpatialFrequencyResponse:41484,FocalPlaneXResolution:41486,FocalPlaneYResolution:41487,FocalPlaneResolutionUnit:41488,SubjectLocation:41492,ExposureIndex:41493,SensingMethod:41495,FileSource:41728,SceneType:41729,CFAPattern:41730,CustomRendered:41985,ExposureMode:41986,WhiteBalance:41987,DigitalZoomRatio:41988,FocalLengthIn35mmFilm:41989,SceneCaptureType:41990,GainControl:41991,Contrast:41992,Saturation:41993,Sharpness:41994,DeviceSettingDescription:41995,SubjectDistanceRange:41996,ImageUniqueID:42016,CameraOwnerName:42032,BodySerialNumber:42033,LensSpecification:42034,LensMake:42035,LensModel:42036,LensSerialNumber:42037,Gamma:42240},e.GPSIFD={GPSVersionID:0,GPSLatitudeRef:1,GPSLatitude:2,GPSLongitudeRef:3,GPSLongitude:4,GPSAltitudeRef:5,GPSAltitude:6,GPSTimeStamp:7,GPSSatellites:8,GPSStatus:9,GPSMeasureMode:10,GPSDOP:11,GPSSpeedRef:12,GPSSpeed:13,GPSTrackRef:14,GPSTrack:15,GPSImgDirectionRef:16,GPSImgDirection:17,GPSMapDatum:18,GPSDestLatitudeRef:19,GPSDestLatitude:20,GPSDestLongitudeRef:21,GPSDestLongitude:22,GPSDestBearingRef:23,GPSDestBearing:24,GPSDestDistanceRef:25,GPSDestDistance:26,GPSProcessingMethod:27,GPSAreaInformation:28,GPSDateStamp:29,GPSDifferential:30,GPSHPositioningError:31},e.InteropIFD={InteroperabilityIndex:1},e.GPSHelper={degToDmsRational:function(e){var t=e%1*60,r=t%1*60;return[[Math.floor(e),1],[Math.floor(t),1],[Math.round(100*r),100]]},dmsRationalToDeg:function(e,t){return("S"===t||"W"===t?-1:1)*e[0][0]/e[0][1]+e[1][0]/e[1][1]/60+e[2][0]/e[2][1]/3600}};const g=e;errorHandling.scriptsLoaded.piexif=!0;var y=r(287).hp;const v=function(e){Math.round;var t,r,n,o,i,a=Math.floor,s=new Array(64),c=new Array(64),u=new Array(64),l=new Array(64),h=new Array(65535),d=new Array(65535),f=new Array(64),m=new Array(64),p=[],g=0,v=7,P=new Array(64),E=new Array(64),I=new Array(64),w=new Array(256),S=new Array(2048),b=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],C=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],L=[0,1,2,3,4,5,6,7,8,9,10,11],B=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],x=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],R=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],T=[0,1,2,3,4,5,6,7,8,9,10,11],A=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],k=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function D(e,t){for(var r=0,n=0,o=new Array,i=1;i<=16;i++){for(var a=1;a<=e[i];a++)o[t[n]]=[],o[t[n]][0]=r,o[t[n]][1]=i,n++,r++;r*=2}return o}function O(e){for(var t=e[0],r=e[1]-1;r>=0;)t&1<>8&255),G(255&e)}function F(e,t,r,n,o){for(var i,a=o[0],s=o[240],c=function(e,t){var r,n,o,i,a,s,c,u,l,h,d=0;for(l=0;l<8;++l){r=e[d],n=e[d+1],o=e[d+2],i=e[d+3],a=e[d+4],s=e[d+5],c=e[d+6];var m=r+(u=e[d+7]),p=r-u,g=n+c,y=n-c,v=o+s,P=o-s,E=i+a,I=i-a,w=m+E,S=m-E,b=g+v,C=g-v;e[d]=w+b,e[d+4]=w-b;var L=.707106781*(C+S);e[d+2]=S+L,e[d+6]=S-L;var B=.382683433*((w=I+P)-(C=y+p)),x=.5411961*w+B,R=1.306562965*C+B,T=.707106781*(b=P+y),A=p+T,k=p-T;e[d+5]=k+x,e[d+3]=k-x,e[d+1]=A+R,e[d+7]=A-R,d+=8}for(d=0,l=0;l<8;++l){r=e[d],n=e[d+8],o=e[d+16],i=e[d+24],a=e[d+32],s=e[d+40],c=e[d+48];var D=r+(u=e[d+56]),O=r-u,G=n+c,M=n-c,F=o+s,U=o-s,_=i+a,j=i-a,N=D+_,H=D-_,z=G+F,V=G-F;e[d]=N+z,e[d+32]=N-z;var Y=.707106781*(V+H);e[d+16]=H+Y,e[d+48]=H-Y;var $=.382683433*((N=j+U)-(V=M+O)),X=.5411961*N+$,J=1.306562965*V+$,W=.707106781*(z=U+M),q=O+W,Z=O-W;e[d+40]=Z+X,e[d+24]=Z-X,e[d+8]=q+J,e[d+56]=q-J,d++}for(l=0;l<64;++l)h=e[l]*t[l],f[l]=h>0?h+.5|0:h-.5|0;return f}(e,t),u=0;u<64;++u)m[b[u]]=c[u];var l=m[0]-r;r=m[0],0==l?O(n[0]):(O(n[d[i=32767+l]]),O(h[i]));for(var p=63;p>0&&0==m[p];p--);if(0==p)return O(a),r;for(var g,y=1;y<=p;){for(var v=y;0==m[y]&&y<=p;++y);var P=y-v;if(P>=16){g=P>>4;for(var E=1;E<=g;++E)O(s);P&=15}i=32767+m[y],O(o[(P<<4)+d[i]]),O(h[i]),y++}return 63!=p&&O(a),r}function U(e){e<=0&&(e=1),e>100&&(e=100),i!=e&&(function(e){for(var t=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],r=0;r<64;r++){var n=a((t[r]*e+50)/100);n<1?n=1:n>255&&(n=255),s[b[r]]=n}for(var o=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],i=0;i<64;i++){var h=a((o[i]*e+50)/100);h<1?h=1:h>255&&(h=255),c[b[i]]=h}for(var d=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],f=0,m=0;m<8;m++)for(var p=0;p<8;p++)u[f]=1/(s[b[f]]*d[m]*d[p]*8),l[f]=1/(c[b[f]]*d[m]*d[p]*8),f++}(e<50?Math.floor(5e3/e):Math.floor(200-2*e)),i=e)}this.encode=function(e,i){var a;(new Date).getTime(),i&&U(i),p=new Array,g=0,v=7,M(65496),M(65504),M(16),G(74),G(70),G(73),G(70),G(0),G(1),G(1),G(0),M(1),M(1),G(0),G(0),void 0!==(a=e.comments)&&a.constructor===Array&&a.forEach((function(e){if("string"==typeof e){M(65534);var t,r=e.length;for(M(r+2),t=0;t>3)*X+(N=4*(7&z)),J+H>=$&&(j-=X*(J+1+H-$)),m+N>=X&&(j-=m+N-X+4),w=V[j++],b=V[j++],D=V[j++],P[z]=(S[w]+S[b+256|0]+S[D+512|0]>>16)-128,E[z]=(S[w+768|0]+S[b+1024|0]+S[D+1280|0]>>16)-128,I[z]=(S[w+1280|0]+S[b+1536|0]+S[D+1792|0]>>16)-128;h=F(P,u,h,t,n),d=F(E,l,d,r,o),f=F(I,l,f,r,o),m+=32}J+=8}if(v>=0){var W=[];W[1]=v+1,W[0]=(1<=0;){var o=255&e;r[n--]=o,e>>=8}return r=r.map((function(e){return String.fromCharCode(e)})),r.join("")}function I(e){for(var t=0,r=0;r>>8^t[255&(r^e.charCodeAt(n))];return~r>>>0}(e+t),r},P.itos=E,P.stoi=I;const w=P;function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}function b(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return C(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?C(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var c=n.call(a,"catchLoc"),u=n.call(a,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),A(r),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;A(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),g}},t}function B(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function x(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){B(i,n,o,a,s,"next",e)}function s(e){B(i,n,o,a,s,"throw",e)}a(void 0)}))}}function R(e){var t=document.createElement("canvas");t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0);var r=t.toDataURL();return t.remove(),r}function T(e){return Math.min(255,Math.max(0,e))}function A(e,t){if(alert("无法加载图像, 请确定文件类型和状态。"+e),errorHandling.defaultImg[errorHandling.currCanvasIndex].src){var r=new Image;r.src=R(errorHandling.defaultImg[errorHandling.currCanvasIndex]),r.onload=function(){t(r)}}}function k(e,t,r){void 0!==r&&(document.getElementById("decodeContrastRange").value=100-r,PrismProcessor.PrismDecoder.contrast=100-r),void 0!==e?(document.getElementById("decodeReverseInput").checked=e,PrismProcessor.PrismDecoder.reverse=e):e=document.getElementById("decodeReverseInput").checked,void 0!==t&&(e?(document.getElementById("decodeThresholdRange").value=255-t,PrismProcessor.PrismDecoder.threshold=255-t):(document.getElementById("decodeThresholdRange").value=t,PrismProcessor.PrismDecoder.threshold=t))}function D(e){if(console.log("reading from Metadata: "+e),void 0===e)return{isValid:!1};var t,r,n=50;switch(e.length){case 5:if(n=parseInt(e.slice(3,5),16),isNaN(n))return{isValid:!1};case 3:if(r=parseInt(e.slice(1,3),16),isNaN(r))return{isValid:!1};case 1:if("0"!==e[0]&&"1"!==e[0])return{isValid:!1};t="1"===e[0];break;default:return{isValid:!1}}return{isValid:!0,isReverse:t,innerThreshold:r,innerContrast:n}}function O(e){if(applicationState.isReadMetadata)try{var t=D(g.load(e.src)["0th"][g.ImageIFD.Make]),r=t.isValid,n=t.isReverse,o=t.innerThreshold,i=t.innerContrast;r&&k(n,o,i)}catch(e){throw e}}function G(e){if(applicationState.isReadMetadata)try{var t=atob(e.src.split(",")[1]),r=w.splitChunk(t);for(var n in r){var o=r[n];if("tEXt"===o.type||"PRSM"===o.type){var i=D(o.data),a=i.isValid,s=i.isReverse,c=i.innerThreshold,u=i.innerContrast;a&&k(s,c,u);break}}}catch(e){throw e}}function M(e){return new Promise((function(t,r){var n=new FileReader;n.onload=function(){t(n.result)},n.onerror=function(e){r(e)},n.readAsDataURL(e)}))}function F(e){return U.apply(this,arguments)}function U(){return U=x(L().mark((function e(t){var r,n=arguments;return L().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=n.length>1&&void 0!==n[1]?n[1]:5e3,e.abrupt("return",new Promise((function(e,n){var o,i=new Image;if(i.onload=function(){if(clearTimeout(o),0===errorHandling.currCanvasIndex)try{i.src.startsWith("data:image/jpeg;base64,")?O(i):i.src.startsWith("data:image/png;base64,")&&G(i)}catch(e){console.error("failed to read metadata: "+e)}e(i)},i.onerror=function(e){clearTimeout(o),n(e)},o=setTimeout((function(){i.src="",n(new Error("加载图像超时"))}),r),"string"==typeof t)i.crossOrigin="anonymous",i.src=t;else if(t instanceof File){var a=new FileReader;a.onload=function(e){i.src=e.target.result},a.onerror=function(e){clearTimeout(o),n(e)},a.readAsDataURL(t)}else clearTimeout(o),n(new Error("不支持的输入类型"))})));case 2:case"end":return e.stop()}}),e)}))),U.apply(this,arguments)}function _(){return(_=x(L().mark((function e(t,r){return L().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:F(t).then((function(e){r(e)})).catch((function(e){A(e,r)}));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function j(){return(j=x(L().mark((function e(t,r){return L().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:F(t.target.previousElementSibling.value).then((function(e){r(e)})).catch((function(e){A(e,r)}));case 2:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function N(){return(N=x(L().mark((function e(t,r){var n,o,i,a;return L().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=(t.clipboardData||t.originalEvent.clipboardData).items,o=b(n);try{for(o.s();!(i=o.n()).done;)-1!==(a=i.value).type.indexOf("image")&&F(a.getAsFile()).then((function(e){r(e)})).catch((function(e){A(e,r)}))}catch(e){o.e(e)}finally{o.f()}case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function H(){return(H=x(L().mark((function e(t){var r,n,o,i,a,s;return L().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,navigator.permissions.query({name:"clipboard-read"});case 3:if("granted"!==(r=e.sent).state&&"prompt"!==r.state){e.next=36;break}return e.next=7,navigator.clipboard.read();case 7:n=e.sent,o=b(n),e.prev=9,o.s();case 11:if((i=o.n()).done){e.next=26;break}if(!(a=i.value).types.some((function(e){return e.startsWith("image/")}))){e.next=23;break}return e.next=16,a.getType(a.types.find((function(e){return e.startsWith("image/")})));case 16:return s=e.sent,e.next=19,M(s);case 19:F(e.sent).then((function(e){t(e)})).catch((function(e){throw e})),e.next=24;break;case 23:alert("剪贴板中没有图片");case 24:e.next=11;break;case 26:e.next=31;break;case 28:e.prev=28,e.t0=e.catch(9),o.e(e.t0);case 31:return e.prev=31,o.f(),e.finish(31);case 34:e.next=37;break;case 36:alert("没有剪贴板读取权限");case 37:e.next=42;break;case 39:e.prev=39,e.t1=e.catch(0),A(e.t1,t);case 42:case"end":return e.stop()}}),e,null,[[0,39],[9,28,31,34]])})))).apply(this,arguments)}function z(){return(z=x(L().mark((function e(t,r){var n,o,i;return L().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.preventDefault(),t.dataTransfer.items){n=b(t.dataTransfer.items);try{for(n.s();!(o=n.n()).done;)"file"===(i=o.value).kind&&F(i.getAsFile()).then((function(e){r(e)})).catch((function(e){A(e,r)}))}catch(e){n.e(e)}finally{n.f()}}case 2:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function V(e,t){if(applicationState.isDownloadNotSupported){for(var r=atob(e.split(",")[1]),n=e.split(",")[0].split(":")[1].split(";")[0],o=new ArrayBuffer(r.length),i=new Uint8Array(o),a=0;a'),u.document.close(),u.addEventListener("beforeunload",(function(){URL.revokeObjectURL(c)}))}else{var l=document.createElement("a");l.href=e,l.download=t,document.body.appendChild(l),l.click(),document.body.removeChild(l)}}function Y(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=PrismProcessor.PrismEncoder.isEncodeReverse,o=PrismProcessor.PrismEncoder.innerThreshold,i=PrismProcessor.PrismEncoder.innerContrast,a=document.getElementById(e);if(t)return r?function(e,t,r,n){var o=atob(e.split(",")[1]),i=w.splitChunk(o),a=$(t,r,n),s=!1;for(var c in i){var u=i[c];if("tEXt"===u.type){u.data=a,i[c]=u,s=!0;break}}if(!s){var l=w.createChunk("tEXt",a),h=i.pop();i.push(l),i.push(h)}var d=w.joinChunk(i);return"data:image/png;base64,".concat(btoa(d))}(a.toDataURL("image/png"),n,o,i):a.toDataURL("image/png");for(var s=a.getContext("2d").getImageData(0,0,a.width,a.height),c=new v(100).encode(s,100),u="",l=new Uint8Array(c),h=l.byteLength,d=0;d1&&void 0!==arguments[1])||arguments[1],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=(new Date).getTime();PrismProcessor.PrismEncoder.isCoverMirage&&!t&&alert("JPEG格式不支持幻影坦克!请谨慎选择。");var o="output_".concat(n,".").concat(t?"png":"jpg");V(Y(e,t,r),o)},generateUrlFromCanvas:Y};function J(e){return J="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},J(e)}function W(e,t){for(var r=0;r=this.threshold?(e[r]=(e[r]-this.threshold)*t,e[r+1]=(e[r+1]-this.threshold)*t,e[r+2]=(e[r+2]-this.threshold)*t):this.processCoverPixel(e,r);else for(var t=255/this.threshold,r=0;re.height)if(e.width>this.size){var r=this.size/e.width;this.innerCanvas.width=this.size,this.innerCanvas.height=e.height*r}else this.innerCanvas.width=this.size,this.innerCanvas.height=e.height*this.size/e.width;else if(e.height>this.size){var n=this.size/e.height;this.innerCanvas.width=e.width*n,this.innerCanvas.height=this.size}else this.innerCanvas.width=e.width*this.size/e.height,this.innerCanvas.height=this.size;this.width=this.innerCanvas.width,this.height=this.innerCanvas.height,t.drawImage(this.innerImg,0,0,this.innerCanvas.width,this.innerCanvas.height),this.innerImgdata=t.getImageData(0,0,this.innerCanvas.width,this.innerCanvas.height),50!==this.innerContrast&&this.adjustInnerContrast(),this.coverImgdata&&this.updateCoverImage(this.coverImg)}},{key:"updateCoverImage",value:function(e){if(this.coverImg=e,this.innerImgdata){var t,r=e.width/e.height,n=this.width/this.height;if(n>r){var o=e.width/n;t={x:0,y:(e.height-o)/2,width:e.width,height:o}}else{var i=e.height*n;t={x:(e.width-i)/2,y:0,width:i,height:e.height}}this.coverCanvas.width=this.width,this.coverCanvas.height=this.height;var a=this.coverCanvas.getContext("2d");a.drawImage(e,t.x,t.y,t.width,t.height,0,0,this.width,this.height),this.coverImgdata=a.getImageData(0,0,this.coverCanvas.width,this.coverCanvas.height),this.isCoverGray&&this.processCoverGray(),50!==this.coverContrast&&this.adjustCoverContrast(),this.processImage()}else{var s=this.coverCanvas.getContext("2d");this.coverCanvas.width=e.width,this.coverCanvas.height=e.height,s.drawImage(this.coverImg,0,0,this.coverCanvas.width,this.coverCanvas.height),this.coverImgdata=s.getImageData(0,0,this.coverCanvas.width,this.coverCanvas.height)}}},{key:"processCoverGray",value:function(){for(var e=this.coverImgdata.data,t=0;tPrismProcessor.PrismEncoder.coverThreshold?(PrismProcessor.PrismEncoder.innerThreshold=PrismProcessor.PrismEncoder.coverThreshold,e.value=PrismProcessor.PrismEncoder.coverThreshold,t.value=PrismProcessor.PrismEncoder.coverThreshold,t.style.color="#ff5e5e"):t.style.color=Ae(),PrismProcessor.PrismEncoder.innerImg&&PrismProcessor.PrismEncoder.coverImg&&PrismProcessor.PrismEncoder.processImage()}function De(){var e=xe,t=Te;PrismProcessor.PrismEncoder.coverThreshold=parseInt(e.value,10),t.value=PrismProcessor.PrismEncoder.coverThreshold,PrismProcessor.PrismEncoder.innerThreshold>PrismProcessor.PrismEncoder.coverThreshold?(PrismProcessor.PrismEncoder.coverThreshold=PrismProcessor.PrismEncoder.innerThreshold,e.value=PrismProcessor.PrismEncoder.innerThreshold,t.value=PrismProcessor.PrismEncoder.innerThreshold,t.style.color="#ff5e5e"):t.style.color=Ae(),PrismProcessor.PrismEncoder.innerImg&&PrismProcessor.PrismEncoder.coverImg&&PrismProcessor.PrismEncoder.processImage()}function Oe(){clearTimeout(be),setTimeout((function(){var e=Re,t=Be;e.style.color=Ae();var r=parseInt(e.value,10);isNaN(r)||(PrismProcessor.PrismEncoder.innerThreshold=r,PrismProcessor.PrismEncoder.innerThreshold>128?(PrismProcessor.PrismEncoder.innerThreshold=128,e.value=128):PrismProcessor.PrismEncoder.innerThreshold<0&&(PrismProcessor.PrismEncoder.innerThreshold=0,e.value=0),t.value=PrismProcessor.PrismEncoder.innerThreshold,PrismProcessor.PrismEncoder.innerThreshold>PrismProcessor.PrismEncoder.coverThreshold&&(PrismProcessor.PrismEncoder.innerThreshold=PrismProcessor.PrismEncoder.coverThreshold,t.value=PrismProcessor.PrismEncoder.coverThreshold,e.value=PrismProcessor.PrismEncoder.coverThreshold),PrismProcessor.PrismEncoder.innerImg&&PrismProcessor.PrismEncoder.coverImg&&PrismProcessor.PrismEncoder.processImage())}),500)}function Ge(){clearTimeout(Ce),setTimeout((function(){var e=Te,t=xe;e.style.color=Ae();var r=parseInt(e.value,10);isNaN(r)||(PrismProcessor.PrismEncoder.coverThreshold=r,PrismProcessor.PrismEncoder.coverThreshold>128?(PrismProcessor.PrismEncoder.coverThreshold=128,e.value=128):PrismProcessor.PrismEncoder.coverThreshold<0&&(PrismProcessor.PrismEncoder.coverrThreshold=0,e.value=0),t.value=PrismProcessor.PrismEncoder.coverThreshold,PrismProcessor.PrismEncoder.innerThreshold>PrismProcessor.PrismEncoder.coverThreshold&&(PrismProcessor.PrismEncoder.coverThreshold=PrismProcessor.PrismEncoder.innerThreshold,t.value=PrismProcessor.PrismEncoder.coverThreshold,e.value=PrismProcessor.PrismEncoder.coverThreshold),PrismProcessor.PrismEncoder.innerImg&&PrismProcessor.PrismEncoder.coverImg&&PrismProcessor.PrismEncoder.processImage())}),500)}function Me(e){PrismProcessor.PrismEncoder.innerContrast=parseInt(e.target.value,10),PrismProcessor.PrismEncoder.innerImg&&(PrismProcessor.PrismEncoder.adjustInnerContrast(),PrismProcessor.PrismEncoder.coverImg&&PrismProcessor.PrismEncoder.processImage())}function Fe(){PrismProcessor.PrismEncoder.innerContrast=50,document.getElementById("innerContrastRange").value=50,PrismProcessor.PrismEncoder.innerImg&&(PrismProcessor.PrismEncoder.adjustInnerContrast(),PrismProcessor.PrismEncoder.coverImg&&PrismProcessor.PrismEncoder.processImage())}function Ue(e){PrismProcessor.PrismEncoder.coverContrast=parseInt(e.target.value,10),PrismProcessor.PrismEncoder.coverImg&&(PrismProcessor.PrismEncoder.adjustCoverContrast(),PrismProcessor.PrismEncoder.innerImg&&PrismProcessor.PrismEncoder.processImage())}function _e(){PrismProcessor.PrismEncoder.coverContrast=50,document.getElementById("coverContrastRange").value=50,PrismProcessor.PrismEncoder.coverImg&&(PrismProcessor.PrismEncoder.adjustCoverContrast(),PrismProcessor.PrismEncoder.innerImg&&PrismProcessor.PrismEncoder.processImage())}function je(e){PrismProcessor.PrismEncoder.isCoverGray=e.target.checked,PrismProcessor.PrismEncoder.coverImg&&PrismProcessor.PrismEncoder.innerImg&&PrismProcessor.PrismEncoder.updateCoverImage(PrismProcessor.PrismEncoder.coverImg)}function Ne(e){PrismProcessor.PrismEncoder.isEncodeReverse=e.target.checked,PrismProcessor.PrismEncoder.innerImg&&PrismProcessor.PrismEncoder.coverImg&&PrismProcessor.PrismEncoder.processImage()}function He(e){PrismProcessor.PrismEncoder.isCoverMirage=e.target.checked,PrismProcessor.PrismEncoder.coverImg&&PrismProcessor.PrismEncoder.innerImg&&PrismProcessor.PrismEncoder.processImage(),e.target.checked&&(document.getElementById("isPngCheckBox").checked=!0,applicationState.isPng=!0)}function ze(e){PrismProcessor.PrismEncoder.method=e.target.value,PrismProcessor.PrismEncoder.innerImg&&PrismProcessor.PrismEncoder.coverImg&&PrismProcessor.PrismEncoder.updateInnerImage(PrismProcessor.PrismEncoder.innerImg)}function Ve(e){clearTimeout(Le),Le=setTimeout((function(){PrismProcessor.PrismEncoder.size=parseInt(e.target.value,10),isNaN(PrismProcessor.PrismEncoder.size)||(PrismProcessor.PrismEncoder.size>applicationState.defaultArguments.maxSize?(PrismProcessor.PrismEncoder.size=applicationState.defaultArguments.maxSize,e.target.value=applicationState.defaultArguments.maxSize):PrismProcessor.PrismEncoder.size=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var c=n.call(a,"catchLoc"),u=n.call(a,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;R(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:A(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),g}},t}function et(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function tt(e,t){for(var r=0;r=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var c=n.call(a,"catchLoc"),u=n.call(a,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;R(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:A(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),g}},t}function at(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function st(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){at(i,n,o,a,s,"next",e)}function s(e){at(i,n,o,a,s,"throw",e)}a(void 0)}))}}errorHandling.scriptsLoaded.DefaultArguments=!0,errorHandling.userAgent=navigator.userAgent.toLowerCase(),applicationState.isOnPhone=/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(errorHandling.userAgent),applicationState.isDownloadNotSupported=applicationState.isOnPhone&&/xiaomi|miui/i.test(errorHandling.userAgent),applicationState.isOnTiebaBrowser=/tieba/i.test(errorHandling.userAgent),document.addEventListener("DOMContentLoaded",st(it().mark((function e(){var t,r,n,o,i,a,s,c;return it().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,!applicationState.isOnTiebaBrowser){e.next=4;break}return document.body.innerHTML='请点击右上角
用浏览器打开
',e.abrupt("return");case 4:return(t=document.getElementById("versionInfo"))&&(t.innerHTML="version: ".concat(applicationState.version,"")),r=(r=document.getElementById("jsonPath").getAttribute("data-json-path"))+"?v="+applicationState.version,applicationState.defaultArguments=new nt,e.next=11,applicationState.defaultArguments.loadDefaultArguments(r);case 11:applicationState.defaultArguments.setDefaultValues(),applicationState.isPng=applicationState.defaultArguments.isPng,applicationState.currPageId=applicationState.defaultArguments.defaultPageId,applicationState.isReadMetadata=applicationState.defaultArguments.isReadMetadata,PrismProcessor.PrismDecoder=new Z("decodeCanvas",applicationState.defaultArguments),PrismProcessor.PrismEncoder=new te("innerCanvas","coverCanvas","outputCanvas",applicationState.defaultArguments),errorHandling.defaultImg=[],n=it().mark((function e(t){var r;return it().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:errorHandling.defaultImg[t]=new Image,errorHandling.defaultImg[t].crossOrigin="anonymous",r=setTimeout((function(){errorHandling.defaultImg[t].src="",errorHandling.defaultImg[t].onerror=null,console.error("加载默认图像超时: "+applicationState.defaultArguments.defaultSrc[t])}),5e3),errorHandling.defaultImg[t].onload=function(){switch(clearTimeout(r),t){case 0:PrismProcessor.PrismDecoder.updateImage(errorHandling.defaultImg[t]);break;case 1:PrismProcessor.PrismEncoder.updateInnerImage(errorHandling.defaultImg[t]);break;case 2:PrismProcessor.PrismEncoder.updateCoverImage(errorHandling.defaultImg[t])}},errorHandling.defaultImg[t].onerror=function(){clearTimeout(r),console.error("无法加载默认图像: "+applicationState.defaultArguments.defaultSrc[t]),errorHandling.defaultImg[t].src="",errorHandling.defaultImg[t].onerror=null},errorHandling.defaultImg[t].src=applicationState.defaultArguments.defaultSrc[t];case 6:case"end":return e.stop()}}),e)})),o=0;case 20:if(!(o
+ * @license MIT
+ */
+
+/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */
+
+/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..312ae20
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,3986 @@
+{
+ "name": "prism_process",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "prism_process",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "buffer": "^6.0.3"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.25.2",
+ "@babel/preset-env": "^7.25.3",
+ "babel-loader": "^9.1.3",
+ "webpack": "^5.93.0",
+ "webpack-cli": "^5.1.4"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/highlight": "^7.24.7",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
+ "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
+ "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.25.0",
+ "@babel/helper-compilation-targets": "^7.25.2",
+ "@babel/helper-module-transforms": "^7.25.2",
+ "@babel/helpers": "^7.25.0",
+ "@babel/parser": "^7.25.0",
+ "@babel/template": "^7.25.0",
+ "@babel/traverse": "^7.25.2",
+ "@babel/types": "^7.25.2",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
+ "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.25.0",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+ "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
+ "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
+ "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.25.2",
+ "@babel/helper-validator-option": "^7.24.8",
+ "browserslist": "^4.23.1",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz",
+ "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-member-expression-to-functions": "^7.24.8",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.25.0",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/traverse": "^7.25.0",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-regexp-features-plugin": {
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
+ "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "regexpu-core": "^5.3.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-define-polyfill-provider": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
+ "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
+ "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.24.8",
+ "@babel/types": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+ "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
+ "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-simple-access": "^7.24.7",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "@babel/traverse": "^7.25.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
+ "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
+ "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-remap-async-to-generator": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
+ "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-wrap-function": "^7.25.0",
+ "@babel/traverse": "^7.25.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-replace-supers": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
+ "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-member-expression-to-functions": "^7.24.8",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/traverse": "^7.25.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+ "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
+ "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+ "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
+ "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-wrap-function": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
+ "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.25.0",
+ "@babel/traverse": "^7.25.0",
+ "@babel/types": "^7.25.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
+ "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.25.0",
+ "@babel/types": "^7.25.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+ "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+ "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.25.2"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
+ "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/traverse": "^7.25.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
+ "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
+ "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
+ "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/plugin-transform-optional-chaining": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.13.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
+ "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/traverse": "^7.25.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-assertions": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz",
+ "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
+ "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-arrow-functions": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
+ "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-async-generator-functions": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz",
+ "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-remap-async-to-generator": "^7.25.0",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/traverse": "^7.25.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-async-to-generator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
+ "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-remap-async-to-generator": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
+ "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoping": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
+ "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-class-properties": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz",
+ "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-class-static-block": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
+ "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-classes": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz",
+ "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-compilation-targets": "^7.24.8",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-replace-supers": "^7.25.0",
+ "@babel/traverse": "^7.25.0",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-computed-properties": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
+ "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/template": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-destructuring": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
+ "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-dotall-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
+ "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
+ "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
+ "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.0",
+ "@babel/helper-plugin-utils": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-dynamic-import": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
+ "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
+ "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-export-namespace-from": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
+ "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-for-of": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
+ "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-function-name": {
+ "version": "7.25.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
+ "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.24.8",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/traverse": "^7.25.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-json-strings": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
+ "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-literals": {
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
+ "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
+ "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
+ "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-amd": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
+ "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
+ "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.24.8",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-simple-access": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
+ "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.25.0",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "@babel/traverse": "^7.25.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-umd": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
+ "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
+ "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-new-target": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
+ "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
+ "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-numeric-separator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
+ "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-rest-spread": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
+ "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-super": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
+ "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
+ "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-optional-chaining": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
+ "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-parameters": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
+ "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-private-methods": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz",
+ "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-private-property-in-object": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
+ "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-property-literals": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
+ "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-regenerator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
+ "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "regenerator-transform": "^0.15.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-reserved-words": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
+ "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-shorthand-properties": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
+ "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-spread": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
+ "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-sticky-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
+ "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-template-literals": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
+ "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typeof-symbol": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
+ "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-escapes": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
+ "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-property-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
+ "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
+ "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz",
+ "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/preset-env": {
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
+ "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.25.2",
+ "@babel/helper-compilation-targets": "^7.25.2",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-validator-option": "^7.24.8",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0",
+ "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-import-assertions": "^7.24.7",
+ "@babel/plugin-syntax-import-attributes": "^7.24.7",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.24.7",
+ "@babel/plugin-transform-async-generator-functions": "^7.25.0",
+ "@babel/plugin-transform-async-to-generator": "^7.24.7",
+ "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
+ "@babel/plugin-transform-block-scoping": "^7.25.0",
+ "@babel/plugin-transform-class-properties": "^7.24.7",
+ "@babel/plugin-transform-class-static-block": "^7.24.7",
+ "@babel/plugin-transform-classes": "^7.25.0",
+ "@babel/plugin-transform-computed-properties": "^7.24.7",
+ "@babel/plugin-transform-destructuring": "^7.24.8",
+ "@babel/plugin-transform-dotall-regex": "^7.24.7",
+ "@babel/plugin-transform-duplicate-keys": "^7.24.7",
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0",
+ "@babel/plugin-transform-dynamic-import": "^7.24.7",
+ "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
+ "@babel/plugin-transform-export-namespace-from": "^7.24.7",
+ "@babel/plugin-transform-for-of": "^7.24.7",
+ "@babel/plugin-transform-function-name": "^7.25.1",
+ "@babel/plugin-transform-json-strings": "^7.24.7",
+ "@babel/plugin-transform-literals": "^7.25.2",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
+ "@babel/plugin-transform-member-expression-literals": "^7.24.7",
+ "@babel/plugin-transform-modules-amd": "^7.24.7",
+ "@babel/plugin-transform-modules-commonjs": "^7.24.8",
+ "@babel/plugin-transform-modules-systemjs": "^7.25.0",
+ "@babel/plugin-transform-modules-umd": "^7.24.7",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
+ "@babel/plugin-transform-new-target": "^7.24.7",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
+ "@babel/plugin-transform-numeric-separator": "^7.24.7",
+ "@babel/plugin-transform-object-rest-spread": "^7.24.7",
+ "@babel/plugin-transform-object-super": "^7.24.7",
+ "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
+ "@babel/plugin-transform-optional-chaining": "^7.24.8",
+ "@babel/plugin-transform-parameters": "^7.24.7",
+ "@babel/plugin-transform-private-methods": "^7.24.7",
+ "@babel/plugin-transform-private-property-in-object": "^7.24.7",
+ "@babel/plugin-transform-property-literals": "^7.24.7",
+ "@babel/plugin-transform-regenerator": "^7.24.7",
+ "@babel/plugin-transform-reserved-words": "^7.24.7",
+ "@babel/plugin-transform-shorthand-properties": "^7.24.7",
+ "@babel/plugin-transform-spread": "^7.24.7",
+ "@babel/plugin-transform-sticky-regex": "^7.24.7",
+ "@babel/plugin-transform-template-literals": "^7.24.7",
+ "@babel/plugin-transform-typeof-symbol": "^7.24.8",
+ "@babel/plugin-transform-unicode-escapes": "^7.24.7",
+ "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
+ "@babel/plugin-transform-unicode-regex": "^7.24.7",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
+ "@babel/preset-modules": "0.1.6-no-external-plugins",
+ "babel-plugin-polyfill-corejs2": "^0.4.10",
+ "babel-plugin-polyfill-corejs3": "^0.10.4",
+ "babel-plugin-polyfill-regenerator": "^0.6.1",
+ "core-js-compat": "^3.37.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-modules": {
+ "version": "0.1.6-no-external-plugins",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+ "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/@babel/regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
+ "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
+ "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/parser": "^7.25.0",
+ "@babel/types": "^7.25.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+ "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.25.0",
+ "@babel/parser": "^7.25.3",
+ "@babel/template": "^7.25.0",
+ "@babel/types": "^7.25.2",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
+ "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@discoveryjs/json-ext": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
+ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@types/eslint": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz",
+ "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "22.1.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz",
+ "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.13.0"
+ }
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
+ "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
+ "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
+ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
+ "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
+ "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.11.6",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
+ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
+ "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.12.1"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
+ "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
+ "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
+ "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/helper-wasm-section": "1.12.1",
+ "@webassemblyjs/wasm-gen": "1.12.1",
+ "@webassemblyjs/wasm-opt": "1.12.1",
+ "@webassemblyjs/wasm-parser": "1.12.1",
+ "@webassemblyjs/wast-printer": "1.12.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
+ "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
+ "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
+ "@webassemblyjs/wasm-gen": "1.12.1",
+ "@webassemblyjs/wasm-parser": "1.12.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
+ "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
+ "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webpack-cli/configtest": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
+ "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "peerDependencies": {
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
+ }
+ },
+ "node_modules/@webpack-cli/info": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
+ "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "peerDependencies": {
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
+ }
+ },
+ "node_modules/@webpack-cli/serve": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
+ "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "peerDependencies": {
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
+ },
+ "peerDependenciesMeta": {
+ "webpack-dev-server": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/acorn": {
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-import-attributes": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
+ "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ajv-formats/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/babel-loader": {
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
+ "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-cache-dir": "^4.0.0",
+ "schema-utils": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 14.15.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0",
+ "webpack": ">=5"
+ }
+ },
+ "node_modules/babel-loader/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/babel-loader/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/babel-loader/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/babel-loader/node_modules/schema-utils": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
+ "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
+ },
+ "engines": {
+ "node": ">= 12.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs2": {
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
+ "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.2",
+ "semver": "^6.3.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.10.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
+ "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.6.2",
+ "core-js-compat": "^3.38.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-regenerator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz",
+ "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.6.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/browserslist": {
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
+ "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001646",
+ "electron-to-chromium": "^1.5.4",
+ "node-releases": "^2.0.18",
+ "update-browserslist-db": "^1.1.0"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001649",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz",
+ "integrity": "sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chalk/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/common-path-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
+ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/core-js-compat": {
+ "version": "3.38.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz",
+ "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.23.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz",
+ "integrity": "sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/envinfo": {
+ "version": "7.13.0",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
+ "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "envinfo": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/escalade": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-uri": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
+ "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastest-levenshtein": {
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+ "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.9.1"
+ }
+ },
+ "node_modules/find-cache-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
+ "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "common-path-prefix": "^3.0.0",
+ "pkg-dir": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/find-up": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+ "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^7.1.0",
+ "path-exists": "^5.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/locate-path": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^6.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/p-limit": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+ "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^1.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/p-locate": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+ "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/path-exists": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
+ "node_modules/find-cache-dir/node_modules/pkg-dir": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+ "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/import-local": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/interpret": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
+ "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
+ "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/loader-runner": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
+ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/rechoir": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
+ "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve": "^1.20.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/regenerate-unicode-properties": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
+ "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regenerate": "^1.4.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/regenerator-transform": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
+ "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "node_modules/regexpu-core": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
+ "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/regjsgen": "^0.8.0",
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.1.0",
+ "regjsparser": "^0.9.1",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regjsparser": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+ "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "jsesc": "~0.5.0"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
+ }
+ },
+ "node_modules/regjsparser/node_modules/jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/shallow-clone": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.31.3",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz",
+ "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.3.10",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
+ "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.20",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^3.1.1",
+ "serialize-javascript": "^6.0.1",
+ "terser": "^5.26.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "uglify-js": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
+ "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-value-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-property-aliases-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+ "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/watchpack": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
+ "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack": {
+ "version": "5.93.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz",
+ "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.3",
+ "@types/estree": "^1.0.5",
+ "@webassemblyjs/ast": "^1.12.1",
+ "@webassemblyjs/wasm-edit": "^1.12.1",
+ "@webassemblyjs/wasm-parser": "^1.12.1",
+ "acorn": "^8.7.1",
+ "acorn-import-attributes": "^1.9.5",
+ "browserslist": "^4.21.10",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.17.0",
+ "es-module-lexer": "^1.2.1",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.11",
+ "json-parse-even-better-errors": "^2.3.1",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.2.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.3.10",
+ "watchpack": "^2.4.1",
+ "webpack-sources": "^3.2.3"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependenciesMeta": {
+ "webpack-cli": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webpack-cli": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
+ "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@discoveryjs/json-ext": "^0.5.0",
+ "@webpack-cli/configtest": "^2.1.1",
+ "@webpack-cli/info": "^2.0.2",
+ "@webpack-cli/serve": "^2.0.5",
+ "colorette": "^2.0.14",
+ "commander": "^10.0.1",
+ "cross-spawn": "^7.0.3",
+ "envinfo": "^7.7.3",
+ "fastest-levenshtein": "^1.0.12",
+ "import-local": "^3.0.2",
+ "interpret": "^3.1.1",
+ "rechoir": "^0.8.0",
+ "webpack-merge": "^5.7.3"
+ },
+ "bin": {
+ "webpack-cli": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "5.x.x"
+ },
+ "peerDependenciesMeta": {
+ "@webpack-cli/generators": {
+ "optional": true
+ },
+ "webpack-bundle-analyzer": {
+ "optional": true
+ },
+ "webpack-dev-server": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webpack-cli/node_modules/commander": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
+ "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/webpack-merge": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
+ "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "clone-deep": "^4.0.1",
+ "flat": "^5.0.2",
+ "wildcard": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/webpack-sources": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wildcard": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
+ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yocto-queue": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
+ "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..cfd6cec
--- /dev/null
+++ b/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "prism_process",
+ "version": "1.0.0",
+ "description": "没错,我是澄闪厨。",
+ "main": "index.js",
+ "scripts": {
+ "build": "webpack"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "devDependencies": {
+ "@babel/core": "^7.25.2",
+ "@babel/preset-env": "^7.25.3",
+ "babel-loader": "^9.1.3",
+ "webpack": "^5.93.0",
+ "webpack-cli": "^5.1.4"
+ },
+ "dependencies": {
+ "buffer": "^6.0.3"
+ }
+}
\ No newline at end of file
diff --git a/scripts/DefaultArguments.js b/scripts/DefaultArguments.js
index 6e50dfd..fc1647a 100644
--- a/scripts/DefaultArguments.js
+++ b/scripts/DefaultArguments.js
@@ -1,3 +1,16 @@
+// (function (root, factory) {
+// if (typeof define === 'function' && define.amd) {
+// define([], factory);
+// }
+// else if (typeof module === 'object' && module.exports) {
+// module.exports = factory(
+// require(),
+// );
+// }
+// else {
+// root.DefaultArguments = factory();
+// }
+// }(typeof self !== 'undefined' ? self : this, function (ImageLoader) {
class DefaultArguments {
async loadDefaultArguments(jsonPath) {
try {
@@ -55,4 +68,10 @@ class DefaultArguments {
}
}
+// return DefaultArguments;
+
+// }));
+
+export default DefaultArguments;
+
errorHandling.scriptsLoaded.DefaultArguments = true;
\ No newline at end of file
diff --git a/scripts/init.js b/scripts/init.js
index 2d8994a..c970351 100644
--- a/scripts/init.js
+++ b/scripts/init.js
@@ -1,3 +1,48 @@
+// (function (root, factory) {
+// if (typeof define === 'function' && define.amd) {
+// define([
+// './prismProcessor/PrismDecoder.js',
+// './prismProcessor/PrismEncoder.js',
+// './listeners/UniversalListeners.js',
+// './listeners/DecodeListeners.js',
+// './listeners/EncodeListeners.js',
+// './DefaultArguments.js'
+// ], factory);
+// } else if (typeof module === 'object' && module.exports) {
+// module.exports = factory(
+// require('./prismProcessor/PrismDecoder.js'),
+// require('./prismProcessor/PrismEncoder.js'),
+// require('./listeners/UniversalListeners.js'),
+// require('./listeners/DecodeListeners.js'),
+// require('./listeners/EncodeListeners.js'),
+// require('./DefaultArguments.js')
+// );
+// } else {
+// root.init = factory(
+// root.PrismDecoder,
+// root.PrismEncoder,
+// root.UniversalListeners,
+// root.DecodeListeners,
+// root.EncodeListeners,
+// root.DefaultArguments
+// );
+// }
+// }(typeof self !== 'undefined' ? self : this, function (
+// PrismDecoder,
+// PrismEncoder,
+// UniversalListeners,
+// DecodeListeners,
+// EncodeListeners,
+// DefaultArguments
+// ) {
+
+import PrismDecoder from './prismProcessor/PrismDecoder.js';
+import PrismEncoder from './prismProcessor/PrismEncoder.js';
+import UniversalListeners from './listeners/UniversalListeners.js';
+import DecodeListeners from './listeners/DecodeListeners.js';
+import EncodeListeners from './listeners/EncodeListeners.js';
+import DefaultArguments from './DefaultArguments.js';
+
errorHandling.userAgent = navigator.userAgent.toLowerCase();
applicationState.isOnPhone = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(errorHandling.userAgent);
applicationState.isDownloadNotSupported = applicationState.isOnPhone && /xiaomi|miui/i.test(errorHandling.userAgent);
@@ -64,23 +109,25 @@ document.addEventListener('DOMContentLoaded', async () => {
}
// 设置全局事件监听器
- universalSetupEventListeners();
+ UniversalListeners.universalSetupEventListeners();
// 显示默认页面
switch (applicationState.defaultArguments.defaultPageId) {
case 'encodePage':
- encodeSetUpEventListeners();
document.getElementById('decodePage').style.display = 'none';
document.getElementById('encodePage').style.display = 'flex';
document.getElementById('encodeButton').classList.add('PageSwitchButtonSelected');
document.getElementById('decodeButton').classList.add('PageSwitchButtonUnselected');
+ EncodeListeners.encodeSetUpEventListeners();
+ document.getElementById('decodeButton').addEventListener('click', EncodeListeners.switchPage);
break;
case 'decodePage':
- decodeSetupEventListeners();
document.getElementById('encodePage').style.display = 'none';
document.getElementById('decodePage').style.display = 'flex';
document.getElementById('decodeButton').classList.add('PageSwitchButtonSelected');
document.getElementById('encodeButton').classList.add('PageSwitchButtonUnselected');
+ DecodeListeners.decodeSetupEventListeners();
+ document.getElementById('encodeButton').addEventListener('click', EncodeListeners.switchPage);
break;
}
@@ -112,5 +159,6 @@ document.addEventListener('DOMContentLoaded', async () => {
alert('初始化失败: ' + error);
}
});
+// }));
errorHandling.scriptsLoaded.init = true;
\ No newline at end of file
diff --git a/scripts/lib/encoder.js b/scripts/lib/encoder.js
index f143a60..1ecf58d 100644
--- a/scripts/lib/encoder.js
+++ b/scripts/lib/encoder.js
@@ -766,12 +766,28 @@ function JPEGEncoder(quality) {
};
-if (typeof module !== 'undefined') {
- module.exports = encode;
-} else if (typeof window !== 'undefined') {
- window['jpeg-js'] = window['jpeg-js'] || {};
- window['jpeg-js'].encode = encode;
-}
+// if (typeof module !== 'undefined') {
+// module.exports = encode;
+// } else if (typeof window !== 'undefined') {
+// window['jpeg-js'] = window['jpeg-js'] || {};
+// window['jpeg-js'].encode = encode;
+// }
+
+// (function (root, factory) {
+// if (typeof define === 'function' && define.amd) {
+// define([], factory);
+// }
+// else if (typeof module === 'object' && module.exports) {
+// module.exports = factory();
+// }
+// else {
+// root.JPEGEncoder = factory();
+// }
+// }(typeof self !== 'undefined' ? self : this, function () {
+// return JPEGEncoder;
+// }));
+
+export default JPEGEncoder;
function encode(imgData, qu) {
if (typeof qu === 'undefined') qu = 50;
diff --git a/scripts/lib/piexif.js b/scripts/lib/piexif.js
index a12b386..0847b29 100644
--- a/scripts/lib/piexif.js
+++ b/scripts/lib/piexif.js
@@ -23,2456 +23,2469 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
-(function () {
- "use strict";
- var that = {};
- that.version = "1.0.4";
-
- that.remove = function (jpeg) {
- var b64 = false;
- if (jpeg.slice(0, 2) == "\xff\xd8") {
- } else if (jpeg.slice(0, 23) == "data:image/jpeg;base64," || jpeg.slice(0, 22) == "data:image/jpg;base64,") {
- jpeg = atob(jpeg.split(",")[1]);
- b64 = true;
- } else {
- throw ("Given data is not jpeg.");
- }
+"use strict";
+var that = {};
+that.version = "1.0.4";
+
+that.remove = function (jpeg) {
+ var b64 = false;
+ if (jpeg.slice(0, 2) == "\xff\xd8") {
+ } else if (jpeg.slice(0, 23) == "data:image/jpeg;base64," || jpeg.slice(0, 22) == "data:image/jpg;base64,") {
+ jpeg = atob(jpeg.split(",")[1]);
+ b64 = true;
+ } else {
+ throw ("Given data is not jpeg.");
+ }
- var segments = splitIntoSegments(jpeg);
- var newSegments = segments.filter(function (seg) {
- return !(seg.slice(0, 2) == "\xff\xe1" &&
- seg.slice(4, 10) == "Exif\x00\x00");
- });
+ var segments = splitIntoSegments(jpeg);
+ var newSegments = segments.filter(function (seg) {
+ return !(seg.slice(0, 2) == "\xff\xe1" &&
+ seg.slice(4, 10) == "Exif\x00\x00");
+ });
- var new_data = newSegments.join("");
- if (b64) {
- new_data = "data:image/jpeg;base64," + btoa(new_data);
- }
+ var new_data = newSegments.join("");
+ if (b64) {
+ new_data = "data:image/jpeg;base64," + btoa(new_data);
+ }
- return new_data;
- };
+ return new_data;
+};
- that.insert = function (exif, jpeg) {
- var b64 = false;
- if (exif.slice(0, 6) != "\x45\x78\x69\x66\x00\x00") {
- throw ("Given data is not exif.");
- }
- if (jpeg.slice(0, 2) == "\xff\xd8") {
- } else if (jpeg.slice(0, 23) == "data:image/jpeg;base64," || jpeg.slice(0, 22) == "data:image/jpg;base64,") {
- jpeg = atob(jpeg.split(",")[1]);
- b64 = true;
- } else {
- throw ("Given data is not jpeg.");
- }
+that.insert = function (exif, jpeg) {
+ var b64 = false;
+ if (exif.slice(0, 6) != "\x45\x78\x69\x66\x00\x00") {
+ throw ("Given data is not exif.");
+ }
+ if (jpeg.slice(0, 2) == "\xff\xd8") {
+ } else if (jpeg.slice(0, 23) == "data:image/jpeg;base64," || jpeg.slice(0, 22) == "data:image/jpg;base64,") {
+ jpeg = atob(jpeg.split(",")[1]);
+ b64 = true;
+ } else {
+ throw ("Given data is not jpeg.");
+ }
- var exifStr = "\xff\xe1" + pack(">H", [exif.length + 2]) + exif;
- var segments = splitIntoSegments(jpeg);
- var new_data = mergeSegments(segments, exifStr);
- if (b64) {
- new_data = "data:image/jpeg;base64," + btoa(new_data);
- }
+ var exifStr = "\xff\xe1" + pack(">H", [exif.length + 2]) + exif;
+ var segments = splitIntoSegments(jpeg);
+ var new_data = mergeSegments(segments, exifStr);
+ if (b64) {
+ new_data = "data:image/jpeg;base64," + btoa(new_data);
+ }
- return new_data;
- };
+ return new_data;
+};
- that.load = function (data) {
- var input_data;
- if (typeof (data) == "string") {
- if (data.slice(0, 2) == "\xff\xd8") {
- input_data = data;
- } else if (data.slice(0, 23) == "data:image/jpeg;base64," || data.slice(0, 22) == "data:image/jpg;base64,") {
- input_data = atob(data.split(",")[1]);
- } else if (data.slice(0, 4) == "Exif") {
- input_data = data.slice(6);
- } else {
- throw ("'load' gots invalid file data.");
- }
+that.load = function (data) {
+ var input_data;
+ if (typeof (data) == "string") {
+ if (data.slice(0, 2) == "\xff\xd8") {
+ input_data = data;
+ } else if (data.slice(0, 23) == "data:image/jpeg;base64," || data.slice(0, 22) == "data:image/jpg;base64,") {
+ input_data = atob(data.split(",")[1]);
+ } else if (data.slice(0, 4) == "Exif") {
+ input_data = data.slice(6);
} else {
- throw ("'load' gots invalid type argument.");
+ throw ("'load' gots invalid file data.");
}
+ } else {
+ throw ("'load' gots invalid type argument.");
+ }
- var exifDict = {};
- var exif_dict = {
- "0th": {},
- "Exif": {},
- "GPS": {},
- "Interop": {},
- "1st": {},
- "thumbnail": null
- };
- var exifReader = new ExifReader(input_data);
- if (exifReader.tiftag === null) {
- return exif_dict;
- }
+ var exifDict = {};
+ var exif_dict = {
+ "0th": {},
+ "Exif": {},
+ "GPS": {},
+ "Interop": {},
+ "1st": {},
+ "thumbnail": null
+ };
+ var exifReader = new ExifReader(input_data);
+ if (exifReader.tiftag === null) {
+ return exif_dict;
+ }
- if (exifReader.tiftag.slice(0, 2) == "\x49\x49") {
- exifReader.endian_mark = "<";
- } else {
- exifReader.endian_mark = ">";
- }
+ if (exifReader.tiftag.slice(0, 2) == "\x49\x49") {
+ exifReader.endian_mark = "<";
+ } else {
+ exifReader.endian_mark = ">";
+ }
- var pointer = unpack(exifReader.endian_mark + "L",
- exifReader.tiftag.slice(4, 8))[0];
- exif_dict["0th"] = exifReader.get_ifd(pointer, "0th");
+ var pointer = unpack(exifReader.endian_mark + "L",
+ exifReader.tiftag.slice(4, 8))[0];
+ exif_dict["0th"] = exifReader.get_ifd(pointer, "0th");
- var first_ifd_pointer = exif_dict["0th"]["first_ifd_pointer"];
- delete exif_dict["0th"]["first_ifd_pointer"];
+ var first_ifd_pointer = exif_dict["0th"]["first_ifd_pointer"];
+ delete exif_dict["0th"]["first_ifd_pointer"];
- if (34665 in exif_dict["0th"]) {
- pointer = exif_dict["0th"][34665];
- exif_dict["Exif"] = exifReader.get_ifd(pointer, "Exif");
- }
- if (34853 in exif_dict["0th"]) {
- pointer = exif_dict["0th"][34853];
- exif_dict["GPS"] = exifReader.get_ifd(pointer, "GPS");
- }
- if (40965 in exif_dict["Exif"]) {
- pointer = exif_dict["Exif"][40965];
- exif_dict["Interop"] = exifReader.get_ifd(pointer, "Interop");
- }
- if (first_ifd_pointer != "\x00\x00\x00\x00") {
- pointer = unpack(exifReader.endian_mark + "L",
- first_ifd_pointer)[0];
- exif_dict["1st"] = exifReader.get_ifd(pointer, "1st");
- if ((513 in exif_dict["1st"]) && (514 in exif_dict["1st"])) {
- var end = exif_dict["1st"][513] + exif_dict["1st"][514];
- var thumb = exifReader.tiftag.slice(exif_dict["1st"][513], end);
- exif_dict["thumbnail"] = thumb;
- }
+ if (34665 in exif_dict["0th"]) {
+ pointer = exif_dict["0th"][34665];
+ exif_dict["Exif"] = exifReader.get_ifd(pointer, "Exif");
+ }
+ if (34853 in exif_dict["0th"]) {
+ pointer = exif_dict["0th"][34853];
+ exif_dict["GPS"] = exifReader.get_ifd(pointer, "GPS");
+ }
+ if (40965 in exif_dict["Exif"]) {
+ pointer = exif_dict["Exif"][40965];
+ exif_dict["Interop"] = exifReader.get_ifd(pointer, "Interop");
+ }
+ if (first_ifd_pointer != "\x00\x00\x00\x00") {
+ pointer = unpack(exifReader.endian_mark + "L",
+ first_ifd_pointer)[0];
+ exif_dict["1st"] = exifReader.get_ifd(pointer, "1st");
+ if ((513 in exif_dict["1st"]) && (514 in exif_dict["1st"])) {
+ var end = exif_dict["1st"][513] + exif_dict["1st"][514];
+ var thumb = exifReader.tiftag.slice(exif_dict["1st"][513], end);
+ exif_dict["thumbnail"] = thumb;
}
+ }
- return exif_dict;
- };
+ return exif_dict;
+};
- that.dump = function (exif_dict_original) {
- var TIFF_HEADER_LENGTH = 8;
+that.dump = function (exif_dict_original) {
+ var TIFF_HEADER_LENGTH = 8;
- var exif_dict = copy(exif_dict_original);
- var header = "Exif\x00\x00\x4d\x4d\x00\x2a\x00\x00\x00\x08";
- var exif_is = false;
- var gps_is = false;
- var interop_is = false;
- var first_is = false;
+ var exif_dict = copy(exif_dict_original);
+ var header = "Exif\x00\x00\x4d\x4d\x00\x2a\x00\x00\x00\x08";
+ var exif_is = false;
+ var gps_is = false;
+ var interop_is = false;
+ var first_is = false;
- var zeroth_ifd,
- exif_ifd,
- interop_ifd,
- gps_ifd,
- first_ifd;
+ var zeroth_ifd,
+ exif_ifd,
+ interop_ifd,
+ gps_ifd,
+ first_ifd;
- if ("0th" in exif_dict) {
- zeroth_ifd = exif_dict["0th"];
- } else {
- zeroth_ifd = {};
- }
+ if ("0th" in exif_dict) {
+ zeroth_ifd = exif_dict["0th"];
+ } else {
+ zeroth_ifd = {};
+ }
- if ((("Exif" in exif_dict) && (Object.keys(exif_dict["Exif"]).length)) ||
- (("Interop" in exif_dict) && (Object.keys(exif_dict["Interop"]).length))) {
- zeroth_ifd[34665] = 1;
- exif_is = true;
- exif_ifd = exif_dict["Exif"];
- if (("Interop" in exif_dict) && Object.keys(exif_dict["Interop"]).length) {
- exif_ifd[40965] = 1;
- interop_is = true;
- interop_ifd = exif_dict["Interop"];
- } else if (Object.keys(exif_ifd).indexOf(that.ExifIFD.InteroperabilityTag.toString()) > -1) {
- delete exif_ifd[40965];
- }
- } else if (Object.keys(zeroth_ifd).indexOf(that.ImageIFD.ExifTag.toString()) > -1) {
- delete zeroth_ifd[34665];
+ if ((("Exif" in exif_dict) && (Object.keys(exif_dict["Exif"]).length)) ||
+ (("Interop" in exif_dict) && (Object.keys(exif_dict["Interop"]).length))) {
+ zeroth_ifd[34665] = 1;
+ exif_is = true;
+ exif_ifd = exif_dict["Exif"];
+ if (("Interop" in exif_dict) && Object.keys(exif_dict["Interop"]).length) {
+ exif_ifd[40965] = 1;
+ interop_is = true;
+ interop_ifd = exif_dict["Interop"];
+ } else if (Object.keys(exif_ifd).indexOf(that.ExifIFD.InteroperabilityTag.toString()) > -1) {
+ delete exif_ifd[40965];
}
+ } else if (Object.keys(zeroth_ifd).indexOf(that.ImageIFD.ExifTag.toString()) > -1) {
+ delete zeroth_ifd[34665];
+ }
- if (("GPS" in exif_dict) && (Object.keys(exif_dict["GPS"]).length)) {
- zeroth_ifd[that.ImageIFD.GPSTag] = 1;
- gps_is = true;
- gps_ifd = exif_dict["GPS"];
- } else if (Object.keys(zeroth_ifd).indexOf(that.ImageIFD.GPSTag.toString()) > -1) {
- delete zeroth_ifd[that.ImageIFD.GPSTag];
- }
+ if (("GPS" in exif_dict) && (Object.keys(exif_dict["GPS"]).length)) {
+ zeroth_ifd[that.ImageIFD.GPSTag] = 1;
+ gps_is = true;
+ gps_ifd = exif_dict["GPS"];
+ } else if (Object.keys(zeroth_ifd).indexOf(that.ImageIFD.GPSTag.toString()) > -1) {
+ delete zeroth_ifd[that.ImageIFD.GPSTag];
+ }
- if (("1st" in exif_dict) &&
- ("thumbnail" in exif_dict) &&
- (exif_dict["thumbnail"] != null)) {
- first_is = true;
- exif_dict["1st"][513] = 1;
- exif_dict["1st"][514] = 1;
- first_ifd = exif_dict["1st"];
- }
+ if (("1st" in exif_dict) &&
+ ("thumbnail" in exif_dict) &&
+ (exif_dict["thumbnail"] != null)) {
+ first_is = true;
+ exif_dict["1st"][513] = 1;
+ exif_dict["1st"][514] = 1;
+ first_ifd = exif_dict["1st"];
+ }
- var zeroth_set = _dict_to_bytes(zeroth_ifd, "0th", 0);
- var zeroth_length = (zeroth_set[0].length + exif_is * 12 + gps_is * 12 + 4 +
- zeroth_set[1].length);
-
- var exif_set,
- exif_bytes = "",
- exif_length = 0,
- gps_set,
- gps_bytes = "",
- gps_length = 0,
- interop_set,
- interop_bytes = "",
- interop_length = 0,
- first_set,
- first_bytes = "",
- thumbnail;
- if (exif_is) {
- exif_set = _dict_to_bytes(exif_ifd, "Exif", zeroth_length);
- exif_length = exif_set[0].length + interop_is * 12 + exif_set[1].length;
- }
- if (gps_is) {
- gps_set = _dict_to_bytes(gps_ifd, "GPS", zeroth_length + exif_length);
- gps_bytes = gps_set.join("");
- gps_length = gps_bytes.length;
- }
- if (interop_is) {
- var offset = zeroth_length + exif_length + gps_length;
- interop_set = _dict_to_bytes(interop_ifd, "Interop", offset);
- interop_bytes = interop_set.join("");
- interop_length = interop_bytes.length;
- }
- if (first_is) {
- var offset = zeroth_length + exif_length + gps_length + interop_length;
- first_set = _dict_to_bytes(first_ifd, "1st", offset);
- thumbnail = _get_thumbnail(exif_dict["thumbnail"]);
- if (thumbnail.length > 64000) {
- throw ("Given thumbnail is too large. max 64kB");
- }
+ var zeroth_set = _dict_to_bytes(zeroth_ifd, "0th", 0);
+ var zeroth_length = (zeroth_set[0].length + exif_is * 12 + gps_is * 12 + 4 +
+ zeroth_set[1].length);
+
+ var exif_set,
+ exif_bytes = "",
+ exif_length = 0,
+ gps_set,
+ gps_bytes = "",
+ gps_length = 0,
+ interop_set,
+ interop_bytes = "",
+ interop_length = 0,
+ first_set,
+ first_bytes = "",
+ thumbnail;
+ if (exif_is) {
+ exif_set = _dict_to_bytes(exif_ifd, "Exif", zeroth_length);
+ exif_length = exif_set[0].length + interop_is * 12 + exif_set[1].length;
+ }
+ if (gps_is) {
+ gps_set = _dict_to_bytes(gps_ifd, "GPS", zeroth_length + exif_length);
+ gps_bytes = gps_set.join("");
+ gps_length = gps_bytes.length;
+ }
+ if (interop_is) {
+ var offset = zeroth_length + exif_length + gps_length;
+ interop_set = _dict_to_bytes(interop_ifd, "Interop", offset);
+ interop_bytes = interop_set.join("");
+ interop_length = interop_bytes.length;
+ }
+ if (first_is) {
+ var offset = zeroth_length + exif_length + gps_length + interop_length;
+ first_set = _dict_to_bytes(first_ifd, "1st", offset);
+ thumbnail = _get_thumbnail(exif_dict["thumbnail"]);
+ if (thumbnail.length > 64000) {
+ throw ("Given thumbnail is too large. max 64kB");
}
+ }
- var exif_pointer = "",
- gps_pointer = "",
- interop_pointer = "",
- first_ifd_pointer = "\x00\x00\x00\x00";
- if (exif_is) {
- var pointer_value = TIFF_HEADER_LENGTH + zeroth_length;
- var pointer_str = pack(">L", [pointer_value]);
- var key = 34665;
- var key_str = pack(">H", [key]);
- var type_str = pack(">H", [TYPES["Long"]]);
- var length_str = pack(">L", [1]);
- exif_pointer = key_str + type_str + length_str + pointer_str;
- }
- if (gps_is) {
- var pointer_value = TIFF_HEADER_LENGTH + zeroth_length + exif_length;
- var pointer_str = pack(">L", [pointer_value]);
- var key = 34853;
- var key_str = pack(">H", [key]);
- var type_str = pack(">H", [TYPES["Long"]]);
- var length_str = pack(">L", [1]);
- gps_pointer = key_str + type_str + length_str + pointer_str;
- }
- if (interop_is) {
- var pointer_value = (TIFF_HEADER_LENGTH +
- zeroth_length + exif_length + gps_length);
- var pointer_str = pack(">L", [pointer_value]);
- var key = 40965;
- var key_str = pack(">H", [key]);
- var type_str = pack(">H", [TYPES["Long"]]);
- var length_str = pack(">L", [1]);
- interop_pointer = key_str + type_str + length_str + pointer_str;
- }
- if (first_is) {
- var pointer_value = (TIFF_HEADER_LENGTH + zeroth_length +
- exif_length + gps_length + interop_length);
- first_ifd_pointer = pack(">L", [pointer_value]);
- var thumbnail_pointer = (pointer_value + first_set[0].length + 24 +
- 4 + first_set[1].length);
- var thumbnail_p_bytes = ("\x02\x01\x00\x04\x00\x00\x00\x01" +
- pack(">L", [thumbnail_pointer]));
- var thumbnail_length_bytes = ("\x02\x02\x00\x04\x00\x00\x00\x01" +
- pack(">L", [thumbnail.length]));
- first_bytes = (first_set[0] + thumbnail_p_bytes +
- thumbnail_length_bytes + "\x00\x00\x00\x00" +
- first_set[1] + thumbnail);
- }
+ var exif_pointer = "",
+ gps_pointer = "",
+ interop_pointer = "",
+ first_ifd_pointer = "\x00\x00\x00\x00";
+ if (exif_is) {
+ var pointer_value = TIFF_HEADER_LENGTH + zeroth_length;
+ var pointer_str = pack(">L", [pointer_value]);
+ var key = 34665;
+ var key_str = pack(">H", [key]);
+ var type_str = pack(">H", [TYPES["Long"]]);
+ var length_str = pack(">L", [1]);
+ exif_pointer = key_str + type_str + length_str + pointer_str;
+ }
+ if (gps_is) {
+ var pointer_value = TIFF_HEADER_LENGTH + zeroth_length + exif_length;
+ var pointer_str = pack(">L", [pointer_value]);
+ var key = 34853;
+ var key_str = pack(">H", [key]);
+ var type_str = pack(">H", [TYPES["Long"]]);
+ var length_str = pack(">L", [1]);
+ gps_pointer = key_str + type_str + length_str + pointer_str;
+ }
+ if (interop_is) {
+ var pointer_value = (TIFF_HEADER_LENGTH +
+ zeroth_length + exif_length + gps_length);
+ var pointer_str = pack(">L", [pointer_value]);
+ var key = 40965;
+ var key_str = pack(">H", [key]);
+ var type_str = pack(">H", [TYPES["Long"]]);
+ var length_str = pack(">L", [1]);
+ interop_pointer = key_str + type_str + length_str + pointer_str;
+ }
+ if (first_is) {
+ var pointer_value = (TIFF_HEADER_LENGTH + zeroth_length +
+ exif_length + gps_length + interop_length);
+ first_ifd_pointer = pack(">L", [pointer_value]);
+ var thumbnail_pointer = (pointer_value + first_set[0].length + 24 +
+ 4 + first_set[1].length);
+ var thumbnail_p_bytes = ("\x02\x01\x00\x04\x00\x00\x00\x01" +
+ pack(">L", [thumbnail_pointer]));
+ var thumbnail_length_bytes = ("\x02\x02\x00\x04\x00\x00\x00\x01" +
+ pack(">L", [thumbnail.length]));
+ first_bytes = (first_set[0] + thumbnail_p_bytes +
+ thumbnail_length_bytes + "\x00\x00\x00\x00" +
+ first_set[1] + thumbnail);
+ }
- var zeroth_bytes = (zeroth_set[0] + exif_pointer + gps_pointer +
- first_ifd_pointer + zeroth_set[1]);
- if (exif_is) {
- exif_bytes = exif_set[0] + interop_pointer + exif_set[1];
- }
+ var zeroth_bytes = (zeroth_set[0] + exif_pointer + gps_pointer +
+ first_ifd_pointer + zeroth_set[1]);
+ if (exif_is) {
+ exif_bytes = exif_set[0] + interop_pointer + exif_set[1];
+ }
- return (header + zeroth_bytes + exif_bytes + gps_bytes +
- interop_bytes + first_bytes);
- };
+ return (header + zeroth_bytes + exif_bytes + gps_bytes +
+ interop_bytes + first_bytes);
+};
- function copy(obj) {
- return JSON.parse(JSON.stringify(obj));
- }
+function copy(obj) {
+ return JSON.parse(JSON.stringify(obj));
+}
- function _get_thumbnail(jpeg) {
- var segments = splitIntoSegments(jpeg);
- while (("\xff\xe0" <= segments[1].slice(0, 2)) && (segments[1].slice(0, 2) <= "\xff\xef")) {
- segments = [segments[0]].concat(segments.slice(2));
- }
- return segments.join("");
+function _get_thumbnail(jpeg) {
+ var segments = splitIntoSegments(jpeg);
+ while (("\xff\xe0" <= segments[1].slice(0, 2)) && (segments[1].slice(0, 2) <= "\xff\xef")) {
+ segments = [segments[0]].concat(segments.slice(2));
}
+ return segments.join("");
+}
- function _pack_byte(array) {
- return pack(">" + nStr("B", array.length), array);
- }
+function _pack_byte(array) {
+ return pack(">" + nStr("B", array.length), array);
+}
- function _pack_short(array) {
- return pack(">" + nStr("H", array.length), array);
- }
+function _pack_short(array) {
+ return pack(">" + nStr("H", array.length), array);
+}
- function _pack_long(array) {
- return pack(">" + nStr("L", array.length), array);
- }
+function _pack_long(array) {
+ return pack(">" + nStr("L", array.length), array);
+}
- function _value_to_bytes(raw_value, value_type, offset) {
- var four_bytes_over = "";
- var value_str = "";
- var length,
- new_value,
- num,
- den;
+function _value_to_bytes(raw_value, value_type, offset) {
+ var four_bytes_over = "";
+ var value_str = "";
+ var length,
+ new_value,
+ num,
+ den;
- if (value_type == "Byte") {
- length = raw_value.length;
- if (length <= 4) {
- value_str = (_pack_byte(raw_value) +
- nStr("\x00", 4 - length));
- } else {
- value_str = pack(">L", [offset]);
- four_bytes_over = _pack_byte(raw_value);
- }
- } else if (value_type == "Short") {
- length = raw_value.length;
- if (length <= 2) {
- value_str = (_pack_short(raw_value) +
- nStr("\x00\x00", 2 - length));
- } else {
- value_str = pack(">L", [offset]);
- four_bytes_over = _pack_short(raw_value);
- }
- } else if (value_type == "Long") {
- length = raw_value.length;
- if (length <= 1) {
- value_str = _pack_long(raw_value);
- } else {
- value_str = pack(">L", [offset]);
- four_bytes_over = _pack_long(raw_value);
- }
- } else if (value_type == "Ascii") {
- new_value = raw_value + "\x00";
- length = new_value.length;
- if (length > 4) {
- value_str = pack(">L", [offset]);
- four_bytes_over = new_value;
- } else {
- value_str = new_value + nStr("\x00", 4 - length);
- }
- } else if (value_type == "Rational") {
- if (typeof (raw_value[0]) == "number") {
- length = 1;
- num = raw_value[0];
- den = raw_value[1];
- new_value = pack(">L", [num]) + pack(">L", [den]);
- } else {
- length = raw_value.length;
- new_value = "";
- for (var n = 0; n < length; n++) {
- num = raw_value[n][0];
- den = raw_value[n][1];
- new_value += (pack(">L", [num]) +
- pack(">L", [den]));
- }
- }
+ if (value_type == "Byte") {
+ length = raw_value.length;
+ if (length <= 4) {
+ value_str = (_pack_byte(raw_value) +
+ nStr("\x00", 4 - length));
+ } else {
value_str = pack(">L", [offset]);
- four_bytes_over = new_value;
- } else if (value_type == "SRational") {
- if (typeof (raw_value[0]) == "number") {
- length = 1;
- num = raw_value[0];
- den = raw_value[1];
- new_value = pack(">l", [num]) + pack(">l", [den]);
- } else {
- length = raw_value.length;
- new_value = "";
- for (var n = 0; n < length; n++) {
- num = raw_value[n][0];
- den = raw_value[n][1];
- new_value += (pack(">l", [num]) +
- pack(">l", [den]));
- }
- }
+ four_bytes_over = _pack_byte(raw_value);
+ }
+ } else if (value_type == "Short") {
+ length = raw_value.length;
+ if (length <= 2) {
+ value_str = (_pack_short(raw_value) +
+ nStr("\x00\x00", 2 - length));
+ } else {
+ value_str = pack(">L", [offset]);
+ four_bytes_over = _pack_short(raw_value);
+ }
+ } else if (value_type == "Long") {
+ length = raw_value.length;
+ if (length <= 1) {
+ value_str = _pack_long(raw_value);
+ } else {
+ value_str = pack(">L", [offset]);
+ four_bytes_over = _pack_long(raw_value);
+ }
+ } else if (value_type == "Ascii") {
+ new_value = raw_value + "\x00";
+ length = new_value.length;
+ if (length > 4) {
value_str = pack(">L", [offset]);
four_bytes_over = new_value;
- } else if (value_type == "Undefined") {
+ } else {
+ value_str = new_value + nStr("\x00", 4 - length);
+ }
+ } else if (value_type == "Rational") {
+ if (typeof (raw_value[0]) == "number") {
+ length = 1;
+ num = raw_value[0];
+ den = raw_value[1];
+ new_value = pack(">L", [num]) + pack(">L", [den]);
+ } else {
length = raw_value.length;
- if (length > 4) {
- value_str = pack(">L", [offset]);
- four_bytes_over = raw_value;
- } else {
- value_str = raw_value + nStr("\x00", 4 - length);
+ new_value = "";
+ for (var n = 0; n < length; n++) {
+ num = raw_value[n][0];
+ den = raw_value[n][1];
+ new_value += (pack(">L", [num]) +
+ pack(">L", [den]));
}
}
+ value_str = pack(">L", [offset]);
+ four_bytes_over = new_value;
+ } else if (value_type == "SRational") {
+ if (typeof (raw_value[0]) == "number") {
+ length = 1;
+ num = raw_value[0];
+ den = raw_value[1];
+ new_value = pack(">l", [num]) + pack(">l", [den]);
+ } else {
+ length = raw_value.length;
+ new_value = "";
+ for (var n = 0; n < length; n++) {
+ num = raw_value[n][0];
+ den = raw_value[n][1];
+ new_value += (pack(">l", [num]) +
+ pack(">l", [den]));
+ }
+ }
+ value_str = pack(">L", [offset]);
+ four_bytes_over = new_value;
+ } else if (value_type == "Undefined") {
+ length = raw_value.length;
+ if (length > 4) {
+ value_str = pack(">L", [offset]);
+ four_bytes_over = raw_value;
+ } else {
+ value_str = raw_value + nStr("\x00", 4 - length);
+ }
+ }
- var length_str = pack(">L", [length]);
+ var length_str = pack(">L", [length]);
- return [length_str, value_str, four_bytes_over];
+ return [length_str, value_str, four_bytes_over];
+}
+
+function _dict_to_bytes(ifd_dict, ifd, ifd_offset) {
+ var TIFF_HEADER_LENGTH = 8;
+ var tag_count = Object.keys(ifd_dict).length;
+ var entry_header = pack(">H", [tag_count]);
+ var entries_length;
+ if (["0th", "1st"].indexOf(ifd) > -1) {
+ entries_length = 2 + tag_count * 12 + 4;
+ } else {
+ entries_length = 2 + tag_count * 12;
}
+ var entries = "";
+ var values = "";
+ var key;
- function _dict_to_bytes(ifd_dict, ifd, ifd_offset) {
- var TIFF_HEADER_LENGTH = 8;
- var tag_count = Object.keys(ifd_dict).length;
- var entry_header = pack(">H", [tag_count]);
- var entries_length;
- if (["0th", "1st"].indexOf(ifd) > -1) {
- entries_length = 2 + tag_count * 12 + 4;
- } else {
- entries_length = 2 + tag_count * 12;
+ for (var key in ifd_dict) {
+ if (typeof (key) == "string") {
+ key = parseInt(key);
+ }
+ if ((ifd == "0th") && ([34665, 34853].indexOf(key) > -1)) {
+ continue;
+ } else if ((ifd == "Exif") && (key == 40965)) {
+ continue;
+ } else if ((ifd == "1st") && ([513, 514].indexOf(key) > -1)) {
+ continue;
}
- var entries = "";
- var values = "";
- var key;
-
- for (var key in ifd_dict) {
- if (typeof (key) == "string") {
- key = parseInt(key);
- }
- if ((ifd == "0th") && ([34665, 34853].indexOf(key) > -1)) {
- continue;
- } else if ((ifd == "Exif") && (key == 40965)) {
- continue;
- } else if ((ifd == "1st") && ([513, 514].indexOf(key) > -1)) {
- continue;
- }
- var raw_value = ifd_dict[key];
- var key_str = pack(">H", [key]);
- var value_type = TAGS[ifd][key]["type"];
- var type_str = pack(">H", [TYPES[value_type]]);
+ var raw_value = ifd_dict[key];
+ var key_str = pack(">H", [key]);
+ var value_type = TAGS[ifd][key]["type"];
+ var type_str = pack(">H", [TYPES[value_type]]);
- if (typeof (raw_value) == "number") {
- raw_value = [raw_value];
- }
- var offset = TIFF_HEADER_LENGTH + entries_length + ifd_offset + values.length;
- var b = _value_to_bytes(raw_value, value_type, offset);
- var length_str = b[0];
- var value_str = b[1];
- var four_bytes_over = b[2];
-
- entries += key_str + type_str + length_str + value_str;
- values += four_bytes_over;
+ if (typeof (raw_value) == "number") {
+ raw_value = [raw_value];
}
-
- return [entry_header + entries, values];
+ var offset = TIFF_HEADER_LENGTH + entries_length + ifd_offset + values.length;
+ var b = _value_to_bytes(raw_value, value_type, offset);
+ var length_str = b[0];
+ var value_str = b[1];
+ var four_bytes_over = b[2];
+
+ entries += key_str + type_str + length_str + value_str;
+ values += four_bytes_over;
}
+ return [entry_header + entries, values];
+}
- function ExifReader(data) {
- var segments,
- app1;
- if (data.slice(0, 2) == "\xff\xd8") { // JPEG
- segments = splitIntoSegments(data);
- app1 = getExifSeg(segments);
- if (app1) {
- this.tiftag = app1.slice(10);
- } else {
- this.tiftag = null;
- }
- } else if (["\x49\x49", "\x4d\x4d"].indexOf(data.slice(0, 2)) > -1) { // TIFF
- this.tiftag = data;
- } else if (data.slice(0, 4) == "Exif") { // Exif
- this.tiftag = data.slice(6);
+
+function ExifReader(data) {
+ var segments,
+ app1;
+ if (data.slice(0, 2) == "\xff\xd8") { // JPEG
+ segments = splitIntoSegments(data);
+ app1 = getExifSeg(segments);
+ if (app1) {
+ this.tiftag = app1.slice(10);
} else {
- throw ("Given file is neither JPEG nor TIFF.");
+ this.tiftag = null;
}
+ } else if (["\x49\x49", "\x4d\x4d"].indexOf(data.slice(0, 2)) > -1) { // TIFF
+ this.tiftag = data;
+ } else if (data.slice(0, 4) == "Exif") { // Exif
+ this.tiftag = data.slice(6);
+ } else {
+ throw ("Given file is neither JPEG nor TIFF.");
}
+}
+
+ExifReader.prototype = {
+ get_ifd: function (pointer, ifd_name) {
+ var ifd_dict = {};
+ var tag_count = unpack(this.endian_mark + "H",
+ this.tiftag.slice(pointer, pointer + 2))[0];
+ var offset = pointer + 2;
+ var t;
+ if (["0th", "1st"].indexOf(ifd_name) > -1) {
+ t = "Image";
+ } else {
+ t = ifd_name;
+ }
- ExifReader.prototype = {
- get_ifd: function (pointer, ifd_name) {
- var ifd_dict = {};
- var tag_count = unpack(this.endian_mark + "H",
+ for (var x = 0; x < tag_count; x++) {
+ pointer = offset + 12 * x;
+ var tag = unpack(this.endian_mark + "H",
this.tiftag.slice(pointer, pointer + 2))[0];
- var offset = pointer + 2;
- var t;
- if (["0th", "1st"].indexOf(ifd_name) > -1) {
- t = "Image";
- } else {
- t = ifd_name;
- }
-
- for (var x = 0; x < tag_count; x++) {
- pointer = offset + 12 * x;
- var tag = unpack(this.endian_mark + "H",
- this.tiftag.slice(pointer, pointer + 2))[0];
- var value_type = unpack(this.endian_mark + "H",
- this.tiftag.slice(pointer + 2, pointer + 4))[0];
- var value_num = unpack(this.endian_mark + "L",
- this.tiftag.slice(pointer + 4, pointer + 8))[0];
- var value = this.tiftag.slice(pointer + 8, pointer + 12);
-
- var v_set = [value_type, value_num, value];
- if (tag in TAGS[t]) {
- ifd_dict[tag] = this.convert_value(v_set);
- }
+ var value_type = unpack(this.endian_mark + "H",
+ this.tiftag.slice(pointer + 2, pointer + 4))[0];
+ var value_num = unpack(this.endian_mark + "L",
+ this.tiftag.slice(pointer + 4, pointer + 8))[0];
+ var value = this.tiftag.slice(pointer + 8, pointer + 12);
+
+ var v_set = [value_type, value_num, value];
+ if (tag in TAGS[t]) {
+ ifd_dict[tag] = this.convert_value(v_set);
}
+ }
- if (ifd_name == "0th") {
- pointer = offset + 12 * tag_count;
- ifd_dict["first_ifd_pointer"] = this.tiftag.slice(pointer, pointer + 4);
- }
+ if (ifd_name == "0th") {
+ pointer = offset + 12 * tag_count;
+ ifd_dict["first_ifd_pointer"] = this.tiftag.slice(pointer, pointer + 4);
+ }
- return ifd_dict;
- },
+ return ifd_dict;
+ },
- convert_value: function (val) {
- var data = null;
- var t = val[0];
- var length = val[1];
- var value = val[2];
- var pointer;
+ convert_value: function (val) {
+ var data = null;
+ var t = val[0];
+ var length = val[1];
+ var value = val[2];
+ var pointer;
- if (t == 1) { // BYTE
- if (length > 4) {
- pointer = unpack(this.endian_mark + "L", value)[0];
- data = unpack(this.endian_mark + nStr("B", length),
- this.tiftag.slice(pointer, pointer + length));
- } else {
- data = unpack(this.endian_mark + nStr("B", length), value.slice(0, length));
- }
- } else if (t == 2) { // ASCII
- if (length > 4) {
- pointer = unpack(this.endian_mark + "L", value)[0];
- data = this.tiftag.slice(pointer, pointer + length - 1);
- } else {
- data = value.slice(0, length - 1);
- }
- } else if (t == 3) { // SHORT
- if (length > 2) {
- pointer = unpack(this.endian_mark + "L", value)[0];
- data = unpack(this.endian_mark + nStr("H", length),
- this.tiftag.slice(pointer, pointer + length * 2));
- } else {
- data = unpack(this.endian_mark + nStr("H", length),
- value.slice(0, length * 2));
- }
- } else if (t == 4) { // LONG
- if (length > 1) {
- pointer = unpack(this.endian_mark + "L", value)[0];
- data = unpack(this.endian_mark + nStr("L", length),
- this.tiftag.slice(pointer, pointer + length * 4));
- } else {
- data = unpack(this.endian_mark + nStr("L", length),
- value);
- }
- } else if (t == 5) { // RATIONAL
+ if (t == 1) { // BYTE
+ if (length > 4) {
+ pointer = unpack(this.endian_mark + "L", value)[0];
+ data = unpack(this.endian_mark + nStr("B", length),
+ this.tiftag.slice(pointer, pointer + length));
+ } else {
+ data = unpack(this.endian_mark + nStr("B", length), value.slice(0, length));
+ }
+ } else if (t == 2) { // ASCII
+ if (length > 4) {
pointer = unpack(this.endian_mark + "L", value)[0];
- if (length > 1) {
- data = [];
- for (var x = 0; x < length; x++) {
- data.push([unpack(this.endian_mark + "L",
- this.tiftag.slice(pointer + x * 8, pointer + 4 + x * 8))[0],
- unpack(this.endian_mark + "L",
- this.tiftag.slice(pointer + 4 + x * 8, pointer + 8 + x * 8))[0]
- ]);
- }
- } else {
- data = [unpack(this.endian_mark + "L",
- this.tiftag.slice(pointer, pointer + 4))[0],
+ data = this.tiftag.slice(pointer, pointer + length - 1);
+ } else {
+ data = value.slice(0, length - 1);
+ }
+ } else if (t == 3) { // SHORT
+ if (length > 2) {
+ pointer = unpack(this.endian_mark + "L", value)[0];
+ data = unpack(this.endian_mark + nStr("H", length),
+ this.tiftag.slice(pointer, pointer + length * 2));
+ } else {
+ data = unpack(this.endian_mark + nStr("H", length),
+ value.slice(0, length * 2));
+ }
+ } else if (t == 4) { // LONG
+ if (length > 1) {
+ pointer = unpack(this.endian_mark + "L", value)[0];
+ data = unpack(this.endian_mark + nStr("L", length),
+ this.tiftag.slice(pointer, pointer + length * 4));
+ } else {
+ data = unpack(this.endian_mark + nStr("L", length),
+ value);
+ }
+ } else if (t == 5) { // RATIONAL
+ pointer = unpack(this.endian_mark + "L", value)[0];
+ if (length > 1) {
+ data = [];
+ for (var x = 0; x < length; x++) {
+ data.push([unpack(this.endian_mark + "L",
+ this.tiftag.slice(pointer + x * 8, pointer + 4 + x * 8))[0],
unpack(this.endian_mark + "L",
- this.tiftag.slice(pointer + 4, pointer + 8))[0]
- ];
+ this.tiftag.slice(pointer + 4 + x * 8, pointer + 8 + x * 8))[0]
+ ]);
}
- } else if (t == 7) { // UNDEFINED BYTES
- if (length > 4) {
- pointer = unpack(this.endian_mark + "L", value)[0];
- data = this.tiftag.slice(pointer, pointer + length);
- } else {
- data = value.slice(0, length);
- }
- } else if (t == 10) { // SRATIONAL
+ } else {
+ data = [unpack(this.endian_mark + "L",
+ this.tiftag.slice(pointer, pointer + 4))[0],
+ unpack(this.endian_mark + "L",
+ this.tiftag.slice(pointer + 4, pointer + 8))[0]
+ ];
+ }
+ } else if (t == 7) { // UNDEFINED BYTES
+ if (length > 4) {
pointer = unpack(this.endian_mark + "L", value)[0];
- if (length > 1) {
- data = [];
- for (var x = 0; x < length; x++) {
- data.push([unpack(this.endian_mark + "l",
- this.tiftag.slice(pointer + x * 8, pointer + 4 + x * 8))[0],
- unpack(this.endian_mark + "l",
- this.tiftag.slice(pointer + 4 + x * 8, pointer + 8 + x * 8))[0]
- ]);
- }
- } else {
- data = [unpack(this.endian_mark + "l",
- this.tiftag.slice(pointer, pointer + 4))[0],
+ data = this.tiftag.slice(pointer, pointer + length);
+ } else {
+ data = value.slice(0, length);
+ }
+ } else if (t == 10) { // SRATIONAL
+ pointer = unpack(this.endian_mark + "L", value)[0];
+ if (length > 1) {
+ data = [];
+ for (var x = 0; x < length; x++) {
+ data.push([unpack(this.endian_mark + "l",
+ this.tiftag.slice(pointer + x * 8, pointer + 4 + x * 8))[0],
unpack(this.endian_mark + "l",
- this.tiftag.slice(pointer + 4, pointer + 8))[0]
- ];
+ this.tiftag.slice(pointer + 4 + x * 8, pointer + 8 + x * 8))[0]
+ ]);
}
} else {
- throw ("Exif might be wrong. Got incorrect value " +
- "type to decode. type:" + t);
+ data = [unpack(this.endian_mark + "l",
+ this.tiftag.slice(pointer, pointer + 4))[0],
+ unpack(this.endian_mark + "l",
+ this.tiftag.slice(pointer + 4, pointer + 8))[0]
+ ];
}
+ } else {
+ throw ("Exif might be wrong. Got incorrect value " +
+ "type to decode. type:" + t);
+ }
- if ((data instanceof Array) && (data.length == 1)) {
- return data[0];
- } else {
- return data;
+ if ((data instanceof Array) && (data.length == 1)) {
+ return data[0];
+ } else {
+ return data;
+ }
+ },
+};
+
+
+if (typeof window !== "undefined" && typeof window.btoa === "function") {
+ var btoa = window.btoa;
+}
+if (typeof btoa === "undefined") {
+ var btoa = function (input) {
+ var output = "";
+ var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+ var i = 0;
+ var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+
+ while (i < input.length) {
+
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+ enc4 = 64;
}
- },
- };
-
-
- if (typeof window !== "undefined" && typeof window.btoa === "function") {
- var btoa = window.btoa;
- }
- if (typeof btoa === "undefined") {
- var btoa = function (input) {
- var output = "";
- var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
- var i = 0;
- var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-
- while (i < input.length) {
-
- chr1 = input.charCodeAt(i++);
- chr2 = input.charCodeAt(i++);
- chr3 = input.charCodeAt(i++);
-
- enc1 = chr1 >> 2;
- enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
- enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
- enc4 = chr3 & 63;
-
- if (isNaN(chr2)) {
- enc3 = enc4 = 64;
- } else if (isNaN(chr3)) {
- enc4 = 64;
- }
-
- output = output +
- keyStr.charAt(enc1) + keyStr.charAt(enc2) +
- keyStr.charAt(enc3) + keyStr.charAt(enc4);
- }
+ output = output +
+ keyStr.charAt(enc1) + keyStr.charAt(enc2) +
+ keyStr.charAt(enc3) + keyStr.charAt(enc4);
- return output;
- };
- }
+ }
+ return output;
+ };
+}
- if (typeof window !== "undefined" && typeof window.atob === "function") {
- var atob = window.atob;
- }
- if (typeof atob === "undefined") {
- var atob = function (input) {
- var output = "";
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
- var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+if (typeof window !== "undefined" && typeof window.atob === "function") {
+ var atob = window.atob;
+}
+if (typeof atob === "undefined") {
+ var atob = function (input) {
+ var output = "";
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+ var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- while (i < input.length) {
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
- enc1 = keyStr.indexOf(input.charAt(i++));
- enc2 = keyStr.indexOf(input.charAt(i++));
- enc3 = keyStr.indexOf(input.charAt(i++));
- enc4 = keyStr.indexOf(input.charAt(i++));
+ while (i < input.length) {
- chr1 = (enc1 << 2) | (enc2 >> 4);
- chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
- chr3 = ((enc3 & 3) << 6) | enc4;
+ enc1 = keyStr.indexOf(input.charAt(i++));
+ enc2 = keyStr.indexOf(input.charAt(i++));
+ enc3 = keyStr.indexOf(input.charAt(i++));
+ enc4 = keyStr.indexOf(input.charAt(i++));
- output = output + String.fromCharCode(chr1);
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
- if (enc3 != 64) {
- output = output + String.fromCharCode(chr2);
- }
- if (enc4 != 64) {
- output = output + String.fromCharCode(chr3);
- }
+ output = output + String.fromCharCode(chr1);
+ if (enc3 != 64) {
+ output = output + String.fromCharCode(chr2);
}
-
- return output;
- };
- }
-
-
- function getImageSize(imageArray) {
- var segments = slice2Segments(imageArray);
- var seg,
- width,
- height,
- SOF = [192, 193, 194, 195, 197, 198, 199, 201, 202, 203, 205, 206, 207];
-
- for (var x = 0; x < segments.length; x++) {
- seg = segments[x];
- if (SOF.indexOf(seg[1]) >= 0) {
- height = seg[5] * 256 + seg[6];
- width = seg[7] * 256 + seg[8];
- break;
+ if (enc4 != 64) {
+ output = output + String.fromCharCode(chr3);
}
- }
- return [width, height];
- }
-
- function pack(mark, array) {
- if (!(array instanceof Array)) {
- throw ("'pack' error. Got invalid type argument.");
- }
- if ((mark.length - 1) != array.length) {
- throw ("'pack' error. " + (mark.length - 1) + " marks, " + array.length + " elements.");
}
- var littleEndian;
- if (mark[0] == "<") {
- littleEndian = true;
- } else if (mark[0] == ">") {
- littleEndian = false;
- } else {
- throw ("");
+ return output;
+ };
+}
+
+
+function getImageSize(imageArray) {
+ var segments = slice2Segments(imageArray);
+ var seg,
+ width,
+ height,
+ SOF = [192, 193, 194, 195, 197, 198, 199, 201, 202, 203, 205, 206, 207];
+
+ for (var x = 0; x < segments.length; x++) {
+ seg = segments[x];
+ if (SOF.indexOf(seg[1]) >= 0) {
+ height = seg[5] * 256 + seg[6];
+ width = seg[7] * 256 + seg[8];
+ break;
}
- var packed = "";
- var p = 1;
- var val = null;
- var c = null;
- var valStr = null;
-
- while (c = mark[p]) {
- if (c.toLowerCase() == "b") {
- val = array[p - 1];
- if ((c == "b") && (val < 0)) {
- val += 0x100;
- }
- if ((val > 0xff) || (val < 0)) {
- throw ("'pack' error.");
- } else {
- valStr = String.fromCharCode(val);
- }
- } else if (c == "H") {
- val = array[p - 1];
- if ((val > 0xffff) || (val < 0)) {
- throw ("'pack' error.");
- } else {
- valStr = String.fromCharCode(Math.floor((val % 0x10000) / 0x100)) +
- String.fromCharCode(val % 0x100);
- if (littleEndian) {
- valStr = valStr.split("").reverse().join("");
- }
- }
- } else if (c.toLowerCase() == "l") {
- val = array[p - 1];
- if ((c == "l") && (val < 0)) {
- val += 0x100000000;
- }
- if ((val > 0xffffffff) || (val < 0)) {
- throw ("'pack' error.");
- } else {
- valStr = String.fromCharCode(Math.floor(val / 0x1000000)) +
- String.fromCharCode(Math.floor((val % 0x1000000) / 0x10000)) +
- String.fromCharCode(Math.floor((val % 0x10000) / 0x100)) +
- String.fromCharCode(val % 0x100);
- if (littleEndian) {
- valStr = valStr.split("").reverse().join("");
- }
- }
- } else {
- throw ("'pack' error.");
- }
+ }
+ return [width, height];
+}
- packed += valStr;
- p += 1;
- }
- return packed;
+function pack(mark, array) {
+ if (!(array instanceof Array)) {
+ throw ("'pack' error. Got invalid type argument.");
+ }
+ if ((mark.length - 1) != array.length) {
+ throw ("'pack' error. " + (mark.length - 1) + " marks, " + array.length + " elements.");
}
- function unpack(mark, str) {
- if (typeof (str) != "string") {
- throw ("'unpack' error. Got invalid type argument.");
- }
- var l = 0;
- for (var markPointer = 1; markPointer < mark.length; markPointer++) {
- if (mark[markPointer].toLowerCase() == "b") {
- l += 1;
- } else if (mark[markPointer].toLowerCase() == "h") {
- l += 2;
- } else if (mark[markPointer].toLowerCase() == "l") {
- l += 4;
+ var littleEndian;
+ if (mark[0] == "<") {
+ littleEndian = true;
+ } else if (mark[0] == ">") {
+ littleEndian = false;
+ } else {
+ throw ("");
+ }
+ var packed = "";
+ var p = 1;
+ var val = null;
+ var c = null;
+ var valStr = null;
+
+ while (c = mark[p]) {
+ if (c.toLowerCase() == "b") {
+ val = array[p - 1];
+ if ((c == "b") && (val < 0)) {
+ val += 0x100;
+ }
+ if ((val > 0xff) || (val < 0)) {
+ throw ("'pack' error.");
} else {
- throw ("'unpack' error. Got invalid mark.");
+ valStr = String.fromCharCode(val);
}
- }
-
- if (l != str.length) {
- throw ("'unpack' error. Mismatch between symbol and string length. " + l + ":" + str.length);
- }
-
- var littleEndian;
- if (mark[0] == "<") {
- littleEndian = true;
- } else if (mark[0] == ">") {
- littleEndian = false;
- } else {
- throw ("'unpack' error.");
- }
- var unpacked = [];
- var strPointer = 0;
- var p = 1;
- var val = null;
- var c = null;
- var length = null;
- var sliced = "";
-
- while (c = mark[p]) {
- if (c.toLowerCase() == "b") {
- length = 1;
- sliced = str.slice(strPointer, strPointer + length);
- val = sliced.charCodeAt(0);
- if ((c == "b") && (val >= 0x80)) {
- val -= 0x100;
- }
- } else if (c == "H") {
- length = 2;
- sliced = str.slice(strPointer, strPointer + length);
+ } else if (c == "H") {
+ val = array[p - 1];
+ if ((val > 0xffff) || (val < 0)) {
+ throw ("'pack' error.");
+ } else {
+ valStr = String.fromCharCode(Math.floor((val % 0x10000) / 0x100)) +
+ String.fromCharCode(val % 0x100);
if (littleEndian) {
- sliced = sliced.split("").reverse().join("");
+ valStr = valStr.split("").reverse().join("");
}
- val = sliced.charCodeAt(0) * 0x100 +
- sliced.charCodeAt(1);
- } else if (c.toLowerCase() == "l") {
- length = 4;
- sliced = str.slice(strPointer, strPointer + length);
+ }
+ } else if (c.toLowerCase() == "l") {
+ val = array[p - 1];
+ if ((c == "l") && (val < 0)) {
+ val += 0x100000000;
+ }
+ if ((val > 0xffffffff) || (val < 0)) {
+ throw ("'pack' error.");
+ } else {
+ valStr = String.fromCharCode(Math.floor(val / 0x1000000)) +
+ String.fromCharCode(Math.floor((val % 0x1000000) / 0x10000)) +
+ String.fromCharCode(Math.floor((val % 0x10000) / 0x100)) +
+ String.fromCharCode(val % 0x100);
if (littleEndian) {
- sliced = sliced.split("").reverse().join("");
- }
- val = sliced.charCodeAt(0) * 0x1000000 +
- sliced.charCodeAt(1) * 0x10000 +
- sliced.charCodeAt(2) * 0x100 +
- sliced.charCodeAt(3);
- if ((c == "l") && (val >= 0x80000000)) {
- val -= 0x100000000;
+ valStr = valStr.split("").reverse().join("");
}
- } else {
- throw ("'unpack' error. " + c);
}
-
- unpacked.push(val);
- strPointer += length;
- p += 1;
+ } else {
+ throw ("'pack' error.");
}
- return unpacked;
+ packed += valStr;
+ p += 1;
}
- function nStr(ch, num) {
- var str = "";
- for (var i = 0; i < num; i++) {
- str += ch;
+ return packed;
+}
+
+function unpack(mark, str) {
+ if (typeof (str) != "string") {
+ throw ("'unpack' error. Got invalid type argument.");
+ }
+ var l = 0;
+ for (var markPointer = 1; markPointer < mark.length; markPointer++) {
+ if (mark[markPointer].toLowerCase() == "b") {
+ l += 1;
+ } else if (mark[markPointer].toLowerCase() == "h") {
+ l += 2;
+ } else if (mark[markPointer].toLowerCase() == "l") {
+ l += 4;
+ } else {
+ throw ("'unpack' error. Got invalid mark.");
}
- return str;
}
- function splitIntoSegments(data) {
- if (data.slice(0, 2) != "\xff\xd8") {
- throw ("Given data isn't JPEG.");
- }
+ if (l != str.length) {
+ throw ("'unpack' error. Mismatch between symbol and string length. " + l + ":" + str.length);
+ }
- var head = 2;
- var segments = ["\xff\xd8"];
- while (true) {
- if (data.slice(head, head + 2) == "\xff\xda") {
- segments.push(data.slice(head));
- break;
- } else {
- var length = unpack(">H", data.slice(head + 2, head + 4))[0];
- var endPoint = head + length + 2;
- segments.push(data.slice(head, endPoint));
- head = endPoint;
+ var littleEndian;
+ if (mark[0] == "<") {
+ littleEndian = true;
+ } else if (mark[0] == ">") {
+ littleEndian = false;
+ } else {
+ throw ("'unpack' error.");
+ }
+ var unpacked = [];
+ var strPointer = 0;
+ var p = 1;
+ var val = null;
+ var c = null;
+ var length = null;
+ var sliced = "";
+
+ while (c = mark[p]) {
+ if (c.toLowerCase() == "b") {
+ length = 1;
+ sliced = str.slice(strPointer, strPointer + length);
+ val = sliced.charCodeAt(0);
+ if ((c == "b") && (val >= 0x80)) {
+ val -= 0x100;
}
-
- if (head >= data.length) {
- throw ("Wrong JPEG data.");
+ } else if (c == "H") {
+ length = 2;
+ sliced = str.slice(strPointer, strPointer + length);
+ if (littleEndian) {
+ sliced = sliced.split("").reverse().join("");
+ }
+ val = sliced.charCodeAt(0) * 0x100 +
+ sliced.charCodeAt(1);
+ } else if (c.toLowerCase() == "l") {
+ length = 4;
+ sliced = str.slice(strPointer, strPointer + length);
+ if (littleEndian) {
+ sliced = sliced.split("").reverse().join("");
+ }
+ val = sliced.charCodeAt(0) * 0x1000000 +
+ sliced.charCodeAt(1) * 0x10000 +
+ sliced.charCodeAt(2) * 0x100 +
+ sliced.charCodeAt(3);
+ if ((c == "l") && (val >= 0x80000000)) {
+ val -= 0x100000000;
}
+ } else {
+ throw ("'unpack' error. " + c);
}
- return segments;
+
+ unpacked.push(val);
+ strPointer += length;
+ p += 1;
}
+ return unpacked;
+}
- function getExifSeg(segments) {
- var seg;
- for (var i = 0; i < segments.length; i++) {
- seg = segments[i];
- if (seg.slice(0, 2) == "\xff\xe1" &&
- seg.slice(4, 10) == "Exif\x00\x00") {
- return seg;
- }
- }
- return null;
+function nStr(ch, num) {
+ var str = "";
+ for (var i = 0; i < num; i++) {
+ str += ch;
}
+ return str;
+}
+function splitIntoSegments(data) {
+ if (data.slice(0, 2) != "\xff\xd8") {
+ throw ("Given data isn't JPEG.");
+ }
- function mergeSegments(segments, exif) {
-
- if (segments[1].slice(0, 2) == "\xff\xe0" &&
- (segments[2].slice(0, 2) == "\xff\xe1" &&
- segments[2].slice(4, 10) == "Exif\x00\x00")) {
- if (exif) {
- segments[2] = exif;
- segments = ["\xff\xd8"].concat(segments.slice(2));
- } else if (exif == null) {
- segments = segments.slice(0, 2).concat(segments.slice(3));
- } else {
- segments = segments.slice(0).concat(segments.slice(2));
- }
- } else if (segments[1].slice(0, 2) == "\xff\xe0") {
- if (exif) {
- segments[1] = exif;
- }
- } else if (segments[1].slice(0, 2) == "\xff\xe1" &&
- segments[1].slice(4, 10) == "Exif\x00\x00") {
- if (exif) {
- segments[1] = exif;
- } else if (exif == null) {
- segments = segments.slice(0).concat(segments.slice(2));
- }
+ var head = 2;
+ var segments = ["\xff\xd8"];
+ while (true) {
+ if (data.slice(head, head + 2) == "\xff\xda") {
+ segments.push(data.slice(head));
+ break;
} else {
- if (exif) {
- segments = [segments[0], exif].concat(segments.slice(1));
- }
+ var length = unpack(">H", data.slice(head + 2, head + 4))[0];
+ var endPoint = head + length + 2;
+ segments.push(data.slice(head, endPoint));
+ head = endPoint;
}
- return segments.join("");
+ if (head >= data.length) {
+ throw ("Wrong JPEG data.");
+ }
}
+ return segments;
+}
- function toHex(str) {
- var hexStr = "";
- for (var i = 0; i < str.length; i++) {
- var h = str.charCodeAt(i);
- var hex = ((h < 10) ? "0" : "") + h.toString(16);
- hexStr += hex + " ";
+function getExifSeg(segments) {
+ var seg;
+ for (var i = 0; i < segments.length; i++) {
+ seg = segments[i];
+ if (seg.slice(0, 2) == "\xff\xe1" &&
+ seg.slice(4, 10) == "Exif\x00\x00") {
+ return seg;
}
- return hexStr;
}
+ return null;
+}
- var TYPES = {
- "Byte": 1,
- "Ascii": 2,
- "Short": 3,
- "Long": 4,
- "Rational": 5,
- "Undefined": 7,
- "SLong": 9,
- "SRational": 10
- };
+function mergeSegments(segments, exif) {
+
+ if (segments[1].slice(0, 2) == "\xff\xe0" &&
+ (segments[2].slice(0, 2) == "\xff\xe1" &&
+ segments[2].slice(4, 10) == "Exif\x00\x00")) {
+ if (exif) {
+ segments[2] = exif;
+ segments = ["\xff\xd8"].concat(segments.slice(2));
+ } else if (exif == null) {
+ segments = segments.slice(0, 2).concat(segments.slice(3));
+ } else {
+ segments = segments.slice(0).concat(segments.slice(2));
+ }
+ } else if (segments[1].slice(0, 2) == "\xff\xe0") {
+ if (exif) {
+ segments[1] = exif;
+ }
+ } else if (segments[1].slice(0, 2) == "\xff\xe1" &&
+ segments[1].slice(4, 10) == "Exif\x00\x00") {
+ if (exif) {
+ segments[1] = exif;
+ } else if (exif == null) {
+ segments = segments.slice(0).concat(segments.slice(2));
+ }
+ } else {
+ if (exif) {
+ segments = [segments[0], exif].concat(segments.slice(1));
+ }
+ }
+ return segments.join("");
+}
- var TAGS = {
- 'Image': {
- 11: {
- 'name': 'ProcessingSoftware',
- 'type': 'Ascii'
- },
- 254: {
- 'name': 'NewSubfileType',
- 'type': 'Long'
- },
- 255: {
- 'name': 'SubfileType',
- 'type': 'Short'
- },
- 256: {
- 'name': 'ImageWidth',
- 'type': 'Long'
- },
- 257: {
- 'name': 'ImageLength',
- 'type': 'Long'
- },
- 258: {
- 'name': 'BitsPerSample',
- 'type': 'Short'
- },
- 259: {
- 'name': 'Compression',
- 'type': 'Short'
- },
- 262: {
- 'name': 'PhotometricInterpretation',
- 'type': 'Short'
- },
- 263: {
- 'name': 'Threshholding',
- 'type': 'Short'
- },
- 264: {
- 'name': 'CellWidth',
- 'type': 'Short'
- },
- 265: {
- 'name': 'CellLength',
- 'type': 'Short'
- },
- 266: {
- 'name': 'FillOrder',
- 'type': 'Short'
- },
- 269: {
- 'name': 'DocumentName',
- 'type': 'Ascii'
- },
- 270: {
- 'name': 'ImageDescription',
- 'type': 'Ascii'
- },
- 271: {
- 'name': 'Make',
- 'type': 'Ascii'
- },
- 272: {
- 'name': 'Model',
- 'type': 'Ascii'
- },
- 273: {
- 'name': 'StripOffsets',
- 'type': 'Long'
- },
- 274: {
- 'name': 'Orientation',
- 'type': 'Short'
- },
- 277: {
- 'name': 'SamplesPerPixel',
- 'type': 'Short'
- },
- 278: {
- 'name': 'RowsPerStrip',
- 'type': 'Long'
- },
- 279: {
- 'name': 'StripByteCounts',
- 'type': 'Long'
- },
- 282: {
- 'name': 'XResolution',
- 'type': 'Rational'
- },
- 283: {
- 'name': 'YResolution',
- 'type': 'Rational'
- },
- 284: {
- 'name': 'PlanarConfiguration',
- 'type': 'Short'
- },
- 290: {
- 'name': 'GrayResponseUnit',
- 'type': 'Short'
- },
- 291: {
- 'name': 'GrayResponseCurve',
- 'type': 'Short'
- },
- 292: {
- 'name': 'T4Options',
- 'type': 'Long'
- },
- 293: {
- 'name': 'T6Options',
- 'type': 'Long'
- },
- 296: {
- 'name': 'ResolutionUnit',
- 'type': 'Short'
- },
- 301: {
- 'name': 'TransferFunction',
- 'type': 'Short'
- },
- 305: {
- 'name': 'Software',
- 'type': 'Ascii'
- },
- 306: {
- 'name': 'DateTime',
- 'type': 'Ascii'
- },
- 315: {
- 'name': 'Artist',
- 'type': 'Ascii'
- },
- 316: {
- 'name': 'HostComputer',
- 'type': 'Ascii'
- },
- 317: {
- 'name': 'Predictor',
- 'type': 'Short'
- },
- 318: {
- 'name': 'WhitePoint',
- 'type': 'Rational'
- },
- 319: {
- 'name': 'PrimaryChromaticities',
- 'type': 'Rational'
- },
- 320: {
- 'name': 'ColorMap',
- 'type': 'Short'
- },
- 321: {
- 'name': 'HalftoneHints',
- 'type': 'Short'
- },
- 322: {
- 'name': 'TileWidth',
- 'type': 'Short'
- },
- 323: {
- 'name': 'TileLength',
- 'type': 'Short'
- },
- 324: {
- 'name': 'TileOffsets',
- 'type': 'Short'
- },
- 325: {
- 'name': 'TileByteCounts',
- 'type': 'Short'
- },
- 330: {
- 'name': 'SubIFDs',
- 'type': 'Long'
- },
- 332: {
- 'name': 'InkSet',
- 'type': 'Short'
- },
- 333: {
- 'name': 'InkNames',
- 'type': 'Ascii'
- },
- 334: {
- 'name': 'NumberOfInks',
- 'type': 'Short'
- },
- 336: {
- 'name': 'DotRange',
- 'type': 'Byte'
- },
- 337: {
- 'name': 'TargetPrinter',
- 'type': 'Ascii'
- },
- 338: {
- 'name': 'ExtraSamples',
- 'type': 'Short'
- },
- 339: {
- 'name': 'SampleFormat',
- 'type': 'Short'
- },
- 340: {
- 'name': 'SMinSampleValue',
- 'type': 'Short'
- },
- 341: {
- 'name': 'SMaxSampleValue',
- 'type': 'Short'
- },
- 342: {
- 'name': 'TransferRange',
- 'type': 'Short'
- },
- 343: {
- 'name': 'ClipPath',
- 'type': 'Byte'
- },
- 344: {
- 'name': 'XClipPathUnits',
- 'type': 'Long'
- },
- 345: {
- 'name': 'YClipPathUnits',
- 'type': 'Long'
- },
- 346: {
- 'name': 'Indexed',
- 'type': 'Short'
- },
- 347: {
- 'name': 'JPEGTables',
- 'type': 'Undefined'
- },
- 351: {
- 'name': 'OPIProxy',
- 'type': 'Short'
- },
- 512: {
- 'name': 'JPEGProc',
- 'type': 'Long'
- },
- 513: {
- 'name': 'JPEGInterchangeFormat',
- 'type': 'Long'
- },
- 514: {
- 'name': 'JPEGInterchangeFormatLength',
- 'type': 'Long'
- },
- 515: {
- 'name': 'JPEGRestartInterval',
- 'type': 'Short'
- },
- 517: {
- 'name': 'JPEGLosslessPredictors',
- 'type': 'Short'
- },
- 518: {
- 'name': 'JPEGPointTransforms',
- 'type': 'Short'
- },
- 519: {
- 'name': 'JPEGQTables',
- 'type': 'Long'
- },
- 520: {
- 'name': 'JPEGDCTables',
- 'type': 'Long'
- },
- 521: {
- 'name': 'JPEGACTables',
- 'type': 'Long'
- },
- 529: {
- 'name': 'YCbCrCoefficients',
- 'type': 'Rational'
- },
- 530: {
- 'name': 'YCbCrSubSampling',
- 'type': 'Short'
- },
- 531: {
- 'name': 'YCbCrPositioning',
- 'type': 'Short'
- },
- 532: {
- 'name': 'ReferenceBlackWhite',
- 'type': 'Rational'
- },
- 700: {
- 'name': 'XMLPacket',
- 'type': 'Byte'
- },
- 18246: {
- 'name': 'Rating',
- 'type': 'Short'
- },
- 18249: {
- 'name': 'RatingPercent',
- 'type': 'Short'
- },
- 32781: {
- 'name': 'ImageID',
- 'type': 'Ascii'
- },
- 33421: {
- 'name': 'CFARepeatPatternDim',
- 'type': 'Short'
- },
- 33422: {
- 'name': 'CFAPattern',
- 'type': 'Byte'
- },
- 33423: {
- 'name': 'BatteryLevel',
- 'type': 'Rational'
- },
- 33432: {
- 'name': 'Copyright',
- 'type': 'Ascii'
- },
- 33434: {
- 'name': 'ExposureTime',
- 'type': 'Rational'
- },
- 34377: {
- 'name': 'ImageResources',
- 'type': 'Byte'
- },
- 34665: {
- 'name': 'ExifTag',
- 'type': 'Long'
- },
- 34675: {
- 'name': 'InterColorProfile',
- 'type': 'Undefined'
- },
- 34853: {
- 'name': 'GPSTag',
- 'type': 'Long'
- },
- 34857: {
- 'name': 'Interlace',
- 'type': 'Short'
- },
- 34858: {
- 'name': 'TimeZoneOffset',
- 'type': 'Long'
- },
- 34859: {
- 'name': 'SelfTimerMode',
- 'type': 'Short'
- },
- 37387: {
- 'name': 'FlashEnergy',
- 'type': 'Rational'
- },
- 37388: {
- 'name': 'SpatialFrequencyResponse',
- 'type': 'Undefined'
- },
- 37389: {
- 'name': 'Noise',
- 'type': 'Undefined'
- },
- 37390: {
- 'name': 'FocalPlaneXResolution',
- 'type': 'Rational'
- },
- 37391: {
- 'name': 'FocalPlaneYResolution',
- 'type': 'Rational'
- },
- 37392: {
- 'name': 'FocalPlaneResolutionUnit',
- 'type': 'Short'
- },
- 37393: {
- 'name': 'ImageNumber',
- 'type': 'Long'
- },
- 37394: {
- 'name': 'SecurityClassification',
- 'type': 'Ascii'
- },
- 37395: {
- 'name': 'ImageHistory',
- 'type': 'Ascii'
- },
- 37397: {
- 'name': 'ExposureIndex',
- 'type': 'Rational'
- },
- 37398: {
- 'name': 'TIFFEPStandardID',
- 'type': 'Byte'
- },
- 37399: {
- 'name': 'SensingMethod',
- 'type': 'Short'
- },
- 40091: {
- 'name': 'XPTitle',
- 'type': 'Byte'
- },
- 40092: {
- 'name': 'XPComment',
- 'type': 'Byte'
- },
- 40093: {
- 'name': 'XPAuthor',
- 'type': 'Byte'
- },
- 40094: {
- 'name': 'XPKeywords',
- 'type': 'Byte'
- },
- 40095: {
- 'name': 'XPSubject',
- 'type': 'Byte'
- },
- 50341: {
- 'name': 'PrintImageMatching',
- 'type': 'Undefined'
- },
- 50706: {
- 'name': 'DNGVersion',
- 'type': 'Byte'
- },
- 50707: {
- 'name': 'DNGBackwardVersion',
- 'type': 'Byte'
- },
- 50708: {
- 'name': 'UniqueCameraModel',
- 'type': 'Ascii'
- },
- 50709: {
- 'name': 'LocalizedCameraModel',
- 'type': 'Byte'
- },
- 50710: {
- 'name': 'CFAPlaneColor',
- 'type': 'Byte'
- },
- 50711: {
- 'name': 'CFALayout',
- 'type': 'Short'
- },
- 50712: {
- 'name': 'LinearizationTable',
- 'type': 'Short'
- },
- 50713: {
- 'name': 'BlackLevelRepeatDim',
- 'type': 'Short'
- },
- 50714: {
- 'name': 'BlackLevel',
- 'type': 'Rational'
- },
- 50715: {
- 'name': 'BlackLevelDeltaH',
- 'type': 'SRational'
- },
- 50716: {
- 'name': 'BlackLevelDeltaV',
- 'type': 'SRational'
- },
- 50717: {
- 'name': 'WhiteLevel',
- 'type': 'Short'
- },
- 50718: {
- 'name': 'DefaultScale',
- 'type': 'Rational'
- },
- 50719: {
- 'name': 'DefaultCropOrigin',
- 'type': 'Short'
- },
- 50720: {
- 'name': 'DefaultCropSize',
- 'type': 'Short'
- },
- 50721: {
- 'name': 'ColorMatrix1',
- 'type': 'SRational'
- },
- 50722: {
- 'name': 'ColorMatrix2',
- 'type': 'SRational'
- },
- 50723: {
- 'name': 'CameraCalibration1',
- 'type': 'SRational'
- },
- 50724: {
- 'name': 'CameraCalibration2',
- 'type': 'SRational'
- },
- 50725: {
- 'name': 'ReductionMatrix1',
- 'type': 'SRational'
- },
- 50726: {
- 'name': 'ReductionMatrix2',
- 'type': 'SRational'
- },
- 50727: {
- 'name': 'AnalogBalance',
- 'type': 'Rational'
- },
- 50728: {
- 'name': 'AsShotNeutral',
- 'type': 'Short'
- },
- 50729: {
- 'name': 'AsShotWhiteXY',
- 'type': 'Rational'
- },
- 50730: {
- 'name': 'BaselineExposure',
- 'type': 'SRational'
- },
- 50731: {
- 'name': 'BaselineNoise',
- 'type': 'Rational'
- },
- 50732: {
- 'name': 'BaselineSharpness',
- 'type': 'Rational'
- },
- 50733: {
- 'name': 'BayerGreenSplit',
- 'type': 'Long'
- },
- 50734: {
- 'name': 'LinearResponseLimit',
- 'type': 'Rational'
- },
- 50735: {
- 'name': 'CameraSerialNumber',
- 'type': 'Ascii'
- },
- 50736: {
- 'name': 'LensInfo',
- 'type': 'Rational'
- },
- 50737: {
- 'name': 'ChromaBlurRadius',
- 'type': 'Rational'
- },
- 50738: {
- 'name': 'AntiAliasStrength',
- 'type': 'Rational'
- },
- 50739: {
- 'name': 'ShadowScale',
- 'type': 'SRational'
- },
- 50740: {
- 'name': 'DNGPrivateData',
- 'type': 'Byte'
- },
- 50741: {
- 'name': 'MakerNoteSafety',
- 'type': 'Short'
- },
- 50778: {
- 'name': 'CalibrationIlluminant1',
- 'type': 'Short'
- },
- 50779: {
- 'name': 'CalibrationIlluminant2',
- 'type': 'Short'
- },
- 50780: {
- 'name': 'BestQualityScale',
- 'type': 'Rational'
- },
- 50781: {
- 'name': 'RawDataUniqueID',
- 'type': 'Byte'
- },
- 50827: {
- 'name': 'OriginalRawFileName',
- 'type': 'Byte'
- },
- 50828: {
- 'name': 'OriginalRawFileData',
- 'type': 'Undefined'
- },
- 50829: {
- 'name': 'ActiveArea',
- 'type': 'Short'
- },
- 50830: {
- 'name': 'MaskedAreas',
- 'type': 'Short'
- },
- 50831: {
- 'name': 'AsShotICCProfile',
- 'type': 'Undefined'
- },
- 50832: {
- 'name': 'AsShotPreProfileMatrix',
- 'type': 'SRational'
- },
- 50833: {
- 'name': 'CurrentICCProfile',
- 'type': 'Undefined'
- },
- 50834: {
- 'name': 'CurrentPreProfileMatrix',
- 'type': 'SRational'
- },
- 50879: {
- 'name': 'ColorimetricReference',
- 'type': 'Short'
- },
- 50931: {
- 'name': 'CameraCalibrationSignature',
- 'type': 'Byte'
- },
- 50932: {
- 'name': 'ProfileCalibrationSignature',
- 'type': 'Byte'
- },
- 50934: {
- 'name': 'AsShotProfileName',
- 'type': 'Byte'
- },
- 50935: {
- 'name': 'NoiseReductionApplied',
- 'type': 'Rational'
- },
- 50936: {
- 'name': 'ProfileName',
- 'type': 'Byte'
- },
- 50937: {
- 'name': 'ProfileHueSatMapDims',
- 'type': 'Long'
- },
- 50938: {
- 'name': 'ProfileHueSatMapData1',
- 'type': 'Float'
- },
- 50939: {
- 'name': 'ProfileHueSatMapData2',
- 'type': 'Float'
- },
- 50940: {
- 'name': 'ProfileToneCurve',
- 'type': 'Float'
- },
- 50941: {
- 'name': 'ProfileEmbedPolicy',
- 'type': 'Long'
- },
- 50942: {
- 'name': 'ProfileCopyright',
- 'type': 'Byte'
- },
- 50964: {
- 'name': 'ForwardMatrix1',
- 'type': 'SRational'
- },
- 50965: {
- 'name': 'ForwardMatrix2',
- 'type': 'SRational'
- },
- 50966: {
- 'name': 'PreviewApplicationName',
- 'type': 'Byte'
- },
- 50967: {
- 'name': 'PreviewApplicationVersion',
- 'type': 'Byte'
- },
- 50968: {
- 'name': 'PreviewSettingsName',
- 'type': 'Byte'
- },
- 50969: {
- 'name': 'PreviewSettingsDigest',
- 'type': 'Byte'
- },
- 50970: {
- 'name': 'PreviewColorSpace',
- 'type': 'Long'
- },
- 50971: {
- 'name': 'PreviewDateTime',
- 'type': 'Ascii'
- },
- 50972: {
- 'name': 'RawImageDigest',
- 'type': 'Undefined'
- },
- 50973: {
- 'name': 'OriginalRawFileDigest',
- 'type': 'Undefined'
- },
- 50974: {
- 'name': 'SubTileBlockSize',
- 'type': 'Long'
- },
- 50975: {
- 'name': 'RowInterleaveFactor',
- 'type': 'Long'
- },
- 50981: {
- 'name': 'ProfileLookTableDims',
- 'type': 'Long'
- },
- 50982: {
- 'name': 'ProfileLookTableData',
- 'type': 'Float'
- },
- 51008: {
- 'name': 'OpcodeList1',
- 'type': 'Undefined'
- },
- 51009: {
- 'name': 'OpcodeList2',
- 'type': 'Undefined'
- },
- 51022: {
- 'name': 'OpcodeList3',
- 'type': 'Undefined'
- }
+
+function toHex(str) {
+ var hexStr = "";
+ for (var i = 0; i < str.length; i++) {
+ var h = str.charCodeAt(i);
+ var hex = ((h < 10) ? "0" : "") + h.toString(16);
+ hexStr += hex + " ";
+ }
+ return hexStr;
+}
+
+
+var TYPES = {
+ "Byte": 1,
+ "Ascii": 2,
+ "Short": 3,
+ "Long": 4,
+ "Rational": 5,
+ "Undefined": 7,
+ "SLong": 9,
+ "SRational": 10
+};
+
+
+var TAGS = {
+ 'Image': {
+ 11: {
+ 'name': 'ProcessingSoftware',
+ 'type': 'Ascii'
},
- 'Exif': {
- 33434: {
- 'name': 'ExposureTime',
- 'type': 'Rational'
- },
- 33437: {
- 'name': 'FNumber',
- 'type': 'Rational'
- },
- 34850: {
- 'name': 'ExposureProgram',
- 'type': 'Short'
- },
- 34852: {
- 'name': 'SpectralSensitivity',
- 'type': 'Ascii'
- },
- 34855: {
- 'name': 'ISOSpeedRatings',
- 'type': 'Short'
- },
- 34856: {
- 'name': 'OECF',
- 'type': 'Undefined'
- },
- 34864: {
- 'name': 'SensitivityType',
- 'type': 'Short'
- },
- 34865: {
- 'name': 'StandardOutputSensitivity',
- 'type': 'Long'
- },
- 34866: {
- 'name': 'RecommendedExposureIndex',
- 'type': 'Long'
- },
- 34867: {
- 'name': 'ISOSpeed',
- 'type': 'Long'
- },
- 34868: {
- 'name': 'ISOSpeedLatitudeyyy',
- 'type': 'Long'
- },
- 34869: {
- 'name': 'ISOSpeedLatitudezzz',
- 'type': 'Long'
- },
- 36864: {
- 'name': 'ExifVersion',
- 'type': 'Undefined'
- },
- 36867: {
- 'name': 'DateTimeOriginal',
- 'type': 'Ascii'
- },
- 36868: {
- 'name': 'DateTimeDigitized',
- 'type': 'Ascii'
- },
- 37121: {
- 'name': 'ComponentsConfiguration',
- 'type': 'Undefined'
- },
- 37122: {
- 'name': 'CompressedBitsPerPixel',
- 'type': 'Rational'
- },
- 37377: {
- 'name': 'ShutterSpeedValue',
- 'type': 'SRational'
- },
- 37378: {
- 'name': 'ApertureValue',
- 'type': 'Rational'
- },
- 37379: {
- 'name': 'BrightnessValue',
- 'type': 'SRational'
- },
- 37380: {
- 'name': 'ExposureBiasValue',
- 'type': 'SRational'
- },
- 37381: {
- 'name': 'MaxApertureValue',
- 'type': 'Rational'
- },
- 37382: {
- 'name': 'SubjectDistance',
- 'type': 'Rational'
- },
- 37383: {
- 'name': 'MeteringMode',
- 'type': 'Short'
- },
- 37384: {
- 'name': 'LightSource',
- 'type': 'Short'
- },
- 37385: {
- 'name': 'Flash',
- 'type': 'Short'
- },
- 37386: {
- 'name': 'FocalLength',
- 'type': 'Rational'
- },
- 37396: {
- 'name': 'SubjectArea',
- 'type': 'Short'
- },
- 37500: {
- 'name': 'MakerNote',
- 'type': 'Undefined'
- },
- 37510: {
- 'name': 'UserComment',
- 'type': 'Ascii'
- },
- 37520: {
- 'name': 'SubSecTime',
- 'type': 'Ascii'
- },
- 37521: {
- 'name': 'SubSecTimeOriginal',
- 'type': 'Ascii'
- },
- 37522: {
- 'name': 'SubSecTimeDigitized',
- 'type': 'Ascii'
- },
- 40960: {
- 'name': 'FlashpixVersion',
- 'type': 'Undefined'
- },
- 40961: {
- 'name': 'ColorSpace',
- 'type': 'Short'
- },
- 40962: {
- 'name': 'PixelXDimension',
- 'type': 'Long'
- },
- 40963: {
- 'name': 'PixelYDimension',
- 'type': 'Long'
- },
- 40964: {
- 'name': 'RelatedSoundFile',
- 'type': 'Ascii'
- },
- 40965: {
- 'name': 'InteroperabilityTag',
- 'type': 'Long'
- },
- 41483: {
- 'name': 'FlashEnergy',
- 'type': 'Rational'
- },
- 41484: {
- 'name': 'SpatialFrequencyResponse',
- 'type': 'Undefined'
- },
- 41486: {
- 'name': 'FocalPlaneXResolution',
- 'type': 'Rational'
- },
- 41487: {
- 'name': 'FocalPlaneYResolution',
- 'type': 'Rational'
- },
- 41488: {
- 'name': 'FocalPlaneResolutionUnit',
- 'type': 'Short'
- },
- 41492: {
- 'name': 'SubjectLocation',
- 'type': 'Short'
- },
- 41493: {
- 'name': 'ExposureIndex',
- 'type': 'Rational'
- },
- 41495: {
- 'name': 'SensingMethod',
- 'type': 'Short'
- },
- 41728: {
- 'name': 'FileSource',
- 'type': 'Undefined'
- },
- 41729: {
- 'name': 'SceneType',
- 'type': 'Undefined'
- },
- 41730: {
- 'name': 'CFAPattern',
- 'type': 'Undefined'
- },
- 41985: {
- 'name': 'CustomRendered',
- 'type': 'Short'
- },
- 41986: {
- 'name': 'ExposureMode',
- 'type': 'Short'
- },
- 41987: {
- 'name': 'WhiteBalance',
- 'type': 'Short'
- },
- 41988: {
- 'name': 'DigitalZoomRatio',
- 'type': 'Rational'
- },
- 41989: {
- 'name': 'FocalLengthIn35mmFilm',
- 'type': 'Short'
- },
- 41990: {
- 'name': 'SceneCaptureType',
- 'type': 'Short'
- },
- 41991: {
- 'name': 'GainControl',
- 'type': 'Short'
- },
- 41992: {
- 'name': 'Contrast',
- 'type': 'Short'
- },
- 41993: {
- 'name': 'Saturation',
- 'type': 'Short'
- },
- 41994: {
- 'name': 'Sharpness',
- 'type': 'Short'
- },
- 41995: {
- 'name': 'DeviceSettingDescription',
- 'type': 'Undefined'
- },
- 41996: {
- 'name': 'SubjectDistanceRange',
- 'type': 'Short'
- },
- 42016: {
- 'name': 'ImageUniqueID',
- 'type': 'Ascii'
- },
- 42032: {
- 'name': 'CameraOwnerName',
- 'type': 'Ascii'
- },
- 42033: {
- 'name': 'BodySerialNumber',
- 'type': 'Ascii'
- },
- 42034: {
- 'name': 'LensSpecification',
- 'type': 'Rational'
- },
- 42035: {
- 'name': 'LensMake',
- 'type': 'Ascii'
- },
- 42036: {
- 'name': 'LensModel',
- 'type': 'Ascii'
- },
- 42037: {
- 'name': 'LensSerialNumber',
- 'type': 'Ascii'
- },
- 42240: {
- 'name': 'Gamma',
- 'type': 'Rational'
- }
+ 254: {
+ 'name': 'NewSubfileType',
+ 'type': 'Long'
},
- 'GPS': {
- 0: {
- 'name': 'GPSVersionID',
- 'type': 'Byte'
- },
- 1: {
- 'name': 'GPSLatitudeRef',
- 'type': 'Ascii'
- },
- 2: {
- 'name': 'GPSLatitude',
- 'type': 'Rational'
- },
- 3: {
- 'name': 'GPSLongitudeRef',
- 'type': 'Ascii'
- },
- 4: {
- 'name': 'GPSLongitude',
- 'type': 'Rational'
- },
- 5: {
- 'name': 'GPSAltitudeRef',
- 'type': 'Byte'
- },
- 6: {
- 'name': 'GPSAltitude',
- 'type': 'Rational'
- },
- 7: {
- 'name': 'GPSTimeStamp',
- 'type': 'Rational'
- },
- 8: {
- 'name': 'GPSSatellites',
- 'type': 'Ascii'
- },
- 9: {
- 'name': 'GPSStatus',
- 'type': 'Ascii'
- },
- 10: {
- 'name': 'GPSMeasureMode',
- 'type': 'Ascii'
- },
- 11: {
- 'name': 'GPSDOP',
- 'type': 'Rational'
- },
- 12: {
- 'name': 'GPSSpeedRef',
- 'type': 'Ascii'
- },
- 13: {
- 'name': 'GPSSpeed',
- 'type': 'Rational'
- },
- 14: {
- 'name': 'GPSTrackRef',
- 'type': 'Ascii'
- },
- 15: {
- 'name': 'GPSTrack',
- 'type': 'Rational'
- },
- 16: {
- 'name': 'GPSImgDirectionRef',
- 'type': 'Ascii'
- },
- 17: {
- 'name': 'GPSImgDirection',
- 'type': 'Rational'
- },
- 18: {
- 'name': 'GPSMapDatum',
- 'type': 'Ascii'
- },
- 19: {
- 'name': 'GPSDestLatitudeRef',
- 'type': 'Ascii'
- },
- 20: {
- 'name': 'GPSDestLatitude',
- 'type': 'Rational'
- },
- 21: {
- 'name': 'GPSDestLongitudeRef',
- 'type': 'Ascii'
- },
- 22: {
- 'name': 'GPSDestLongitude',
- 'type': 'Rational'
- },
- 23: {
- 'name': 'GPSDestBearingRef',
- 'type': 'Ascii'
- },
- 24: {
- 'name': 'GPSDestBearing',
- 'type': 'Rational'
- },
- 25: {
- 'name': 'GPSDestDistanceRef',
- 'type': 'Ascii'
- },
- 26: {
- 'name': 'GPSDestDistance',
- 'type': 'Rational'
- },
- 27: {
- 'name': 'GPSProcessingMethod',
- 'type': 'Undefined'
- },
- 28: {
- 'name': 'GPSAreaInformation',
- 'type': 'Undefined'
- },
- 29: {
- 'name': 'GPSDateStamp',
- 'type': 'Ascii'
- },
- 30: {
- 'name': 'GPSDifferential',
- 'type': 'Short'
- },
- 31: {
- 'name': 'GPSHPositioningError',
- 'type': 'Rational'
- }
+ 255: {
+ 'name': 'SubfileType',
+ 'type': 'Short'
},
- 'Interop': {
- 1: {
- 'name': 'InteroperabilityIndex',
- 'type': 'Ascii'
- }
+ 256: {
+ 'name': 'ImageWidth',
+ 'type': 'Long'
},
- };
- TAGS["0th"] = TAGS["Image"];
- TAGS["1st"] = TAGS["Image"];
- that.TAGS = TAGS;
-
-
- that.ImageIFD = {
- ProcessingSoftware: 11,
- NewSubfileType: 254,
- SubfileType: 255,
- ImageWidth: 256,
- ImageLength: 257,
- BitsPerSample: 258,
- Compression: 259,
- PhotometricInterpretation: 262,
- Threshholding: 263,
- CellWidth: 264,
- CellLength: 265,
- FillOrder: 266,
- DocumentName: 269,
- ImageDescription: 270,
- Make: 271,
- Model: 272,
- StripOffsets: 273,
- Orientation: 274,
- SamplesPerPixel: 277,
- RowsPerStrip: 278,
- StripByteCounts: 279,
- XResolution: 282,
- YResolution: 283,
- PlanarConfiguration: 284,
- GrayResponseUnit: 290,
- GrayResponseCurve: 291,
- T4Options: 292,
- T6Options: 293,
- ResolutionUnit: 296,
- TransferFunction: 301,
- Software: 305,
- DateTime: 306,
- Artist: 315,
- HostComputer: 316,
- Predictor: 317,
- WhitePoint: 318,
- PrimaryChromaticities: 319,
- ColorMap: 320,
- HalftoneHints: 321,
- TileWidth: 322,
- TileLength: 323,
- TileOffsets: 324,
- TileByteCounts: 325,
- SubIFDs: 330,
- InkSet: 332,
- InkNames: 333,
- NumberOfInks: 334,
- DotRange: 336,
- TargetPrinter: 337,
- ExtraSamples: 338,
- SampleFormat: 339,
- SMinSampleValue: 340,
- SMaxSampleValue: 341,
- TransferRange: 342,
- ClipPath: 343,
- XClipPathUnits: 344,
- YClipPathUnits: 345,
- Indexed: 346,
- JPEGTables: 347,
- OPIProxy: 351,
- JPEGProc: 512,
- JPEGInterchangeFormat: 513,
- JPEGInterchangeFormatLength: 514,
- JPEGRestartInterval: 515,
- JPEGLosslessPredictors: 517,
- JPEGPointTransforms: 518,
- JPEGQTables: 519,
- JPEGDCTables: 520,
- JPEGACTables: 521,
- YCbCrCoefficients: 529,
- YCbCrSubSampling: 530,
- YCbCrPositioning: 531,
- ReferenceBlackWhite: 532,
- XMLPacket: 700,
- Rating: 18246,
- RatingPercent: 18249,
- ImageID: 32781,
- CFARepeatPatternDim: 33421,
- CFAPattern: 33422,
- BatteryLevel: 33423,
- Copyright: 33432,
- ExposureTime: 33434,
- ImageResources: 34377,
- ExifTag: 34665,
- InterColorProfile: 34675,
- GPSTag: 34853,
- Interlace: 34857,
- TimeZoneOffset: 34858,
- SelfTimerMode: 34859,
- FlashEnergy: 37387,
- SpatialFrequencyResponse: 37388,
- Noise: 37389,
- FocalPlaneXResolution: 37390,
- FocalPlaneYResolution: 37391,
- FocalPlaneResolutionUnit: 37392,
- ImageNumber: 37393,
- SecurityClassification: 37394,
- ImageHistory: 37395,
- ExposureIndex: 37397,
- TIFFEPStandardID: 37398,
- SensingMethod: 37399,
- XPTitle: 40091,
- XPComment: 40092,
- XPAuthor: 40093,
- XPKeywords: 40094,
- XPSubject: 40095,
- PrintImageMatching: 50341,
- DNGVersion: 50706,
- DNGBackwardVersion: 50707,
- UniqueCameraModel: 50708,
- LocalizedCameraModel: 50709,
- CFAPlaneColor: 50710,
- CFALayout: 50711,
- LinearizationTable: 50712,
- BlackLevelRepeatDim: 50713,
- BlackLevel: 50714,
- BlackLevelDeltaH: 50715,
- BlackLevelDeltaV: 50716,
- WhiteLevel: 50717,
- DefaultScale: 50718,
- DefaultCropOrigin: 50719,
- DefaultCropSize: 50720,
- ColorMatrix1: 50721,
- ColorMatrix2: 50722,
- CameraCalibration1: 50723,
- CameraCalibration2: 50724,
- ReductionMatrix1: 50725,
- ReductionMatrix2: 50726,
- AnalogBalance: 50727,
- AsShotNeutral: 50728,
- AsShotWhiteXY: 50729,
- BaselineExposure: 50730,
- BaselineNoise: 50731,
- BaselineSharpness: 50732,
- BayerGreenSplit: 50733,
- LinearResponseLimit: 50734,
- CameraSerialNumber: 50735,
- LensInfo: 50736,
- ChromaBlurRadius: 50737,
- AntiAliasStrength: 50738,
- ShadowScale: 50739,
- DNGPrivateData: 50740,
- MakerNoteSafety: 50741,
- CalibrationIlluminant1: 50778,
- CalibrationIlluminant2: 50779,
- BestQualityScale: 50780,
- RawDataUniqueID: 50781,
- OriginalRawFileName: 50827,
- OriginalRawFileData: 50828,
- ActiveArea: 50829,
- MaskedAreas: 50830,
- AsShotICCProfile: 50831,
- AsShotPreProfileMatrix: 50832,
- CurrentICCProfile: 50833,
- CurrentPreProfileMatrix: 50834,
- ColorimetricReference: 50879,
- CameraCalibrationSignature: 50931,
- ProfileCalibrationSignature: 50932,
- AsShotProfileName: 50934,
- NoiseReductionApplied: 50935,
- ProfileName: 50936,
- ProfileHueSatMapDims: 50937,
- ProfileHueSatMapData1: 50938,
- ProfileHueSatMapData2: 50939,
- ProfileToneCurve: 50940,
- ProfileEmbedPolicy: 50941,
- ProfileCopyright: 50942,
- ForwardMatrix1: 50964,
- ForwardMatrix2: 50965,
- PreviewApplicationName: 50966,
- PreviewApplicationVersion: 50967,
- PreviewSettingsName: 50968,
- PreviewSettingsDigest: 50969,
- PreviewColorSpace: 50970,
- PreviewDateTime: 50971,
- RawImageDigest: 50972,
- OriginalRawFileDigest: 50973,
- SubTileBlockSize: 50974,
- RowInterleaveFactor: 50975,
- ProfileLookTableDims: 50981,
- ProfileLookTableData: 50982,
- OpcodeList1: 51008,
- OpcodeList2: 51009,
- OpcodeList3: 51022,
- NoiseProfile: 51041,
- };
-
-
- that.ExifIFD = {
- ExposureTime: 33434,
- FNumber: 33437,
- ExposureProgram: 34850,
- SpectralSensitivity: 34852,
- ISOSpeedRatings: 34855,
- OECF: 34856,
- SensitivityType: 34864,
- StandardOutputSensitivity: 34865,
- RecommendedExposureIndex: 34866,
- ISOSpeed: 34867,
- ISOSpeedLatitudeyyy: 34868,
- ISOSpeedLatitudezzz: 34869,
- ExifVersion: 36864,
- DateTimeOriginal: 36867,
- DateTimeDigitized: 36868,
- ComponentsConfiguration: 37121,
- CompressedBitsPerPixel: 37122,
- ShutterSpeedValue: 37377,
- ApertureValue: 37378,
- BrightnessValue: 37379,
- ExposureBiasValue: 37380,
- MaxApertureValue: 37381,
- SubjectDistance: 37382,
- MeteringMode: 37383,
- LightSource: 37384,
- Flash: 37385,
- FocalLength: 37386,
- SubjectArea: 37396,
- MakerNote: 37500,
- UserComment: 37510,
- SubSecTime: 37520,
- SubSecTimeOriginal: 37521,
- SubSecTimeDigitized: 37522,
- FlashpixVersion: 40960,
- ColorSpace: 40961,
- PixelXDimension: 40962,
- PixelYDimension: 40963,
- RelatedSoundFile: 40964,
- InteroperabilityTag: 40965,
- FlashEnergy: 41483,
- SpatialFrequencyResponse: 41484,
- FocalPlaneXResolution: 41486,
- FocalPlaneYResolution: 41487,
- FocalPlaneResolutionUnit: 41488,
- SubjectLocation: 41492,
- ExposureIndex: 41493,
- SensingMethod: 41495,
- FileSource: 41728,
- SceneType: 41729,
- CFAPattern: 41730,
- CustomRendered: 41985,
- ExposureMode: 41986,
- WhiteBalance: 41987,
- DigitalZoomRatio: 41988,
- FocalLengthIn35mmFilm: 41989,
- SceneCaptureType: 41990,
- GainControl: 41991,
- Contrast: 41992,
- Saturation: 41993,
- Sharpness: 41994,
- DeviceSettingDescription: 41995,
- SubjectDistanceRange: 41996,
- ImageUniqueID: 42016,
- CameraOwnerName: 42032,
- BodySerialNumber: 42033,
- LensSpecification: 42034,
- LensMake: 42035,
- LensModel: 42036,
- LensSerialNumber: 42037,
- Gamma: 42240,
- };
-
-
- that.GPSIFD = {
- GPSVersionID: 0,
- GPSLatitudeRef: 1,
- GPSLatitude: 2,
- GPSLongitudeRef: 3,
- GPSLongitude: 4,
- GPSAltitudeRef: 5,
- GPSAltitude: 6,
- GPSTimeStamp: 7,
- GPSSatellites: 8,
- GPSStatus: 9,
- GPSMeasureMode: 10,
- GPSDOP: 11,
- GPSSpeedRef: 12,
- GPSSpeed: 13,
- GPSTrackRef: 14,
- GPSTrack: 15,
- GPSImgDirectionRef: 16,
- GPSImgDirection: 17,
- GPSMapDatum: 18,
- GPSDestLatitudeRef: 19,
- GPSDestLatitude: 20,
- GPSDestLongitudeRef: 21,
- GPSDestLongitude: 22,
- GPSDestBearingRef: 23,
- GPSDestBearing: 24,
- GPSDestDistanceRef: 25,
- GPSDestDistance: 26,
- GPSProcessingMethod: 27,
- GPSAreaInformation: 28,
- GPSDateStamp: 29,
- GPSDifferential: 30,
- GPSHPositioningError: 31,
- };
-
-
- that.InteropIFD = {
- InteroperabilityIndex: 1,
- };
-
- that.GPSHelper = {
- degToDmsRational: function (degFloat) {
- var minFloat = degFloat % 1 * 60;
- var secFloat = minFloat % 1 * 60;
- var deg = Math.floor(degFloat);
- var min = Math.floor(minFloat);
- var sec = Math.round(secFloat * 100);
-
- return [[deg, 1], [min, 1], [sec, 100]];
+ 257: {
+ 'name': 'ImageLength',
+ 'type': 'Long'
},
-
- dmsRationalToDeg: function (dmsArray, ref) {
- var sign = (ref === 'S' || ref === 'W') ? -1.0 : 1.0;
- var deg = sign * dmsArray[0][0] / dmsArray[0][1] +
- dmsArray[1][0] / dmsArray[1][1] / 60.0 +
- dmsArray[2][0] / dmsArray[2][1] / 3600.0;
-
- return deg;
+ 258: {
+ 'name': 'BitsPerSample',
+ 'type': 'Short'
+ },
+ 259: {
+ 'name': 'Compression',
+ 'type': 'Short'
+ },
+ 262: {
+ 'name': 'PhotometricInterpretation',
+ 'type': 'Short'
+ },
+ 263: {
+ 'name': 'Threshholding',
+ 'type': 'Short'
+ },
+ 264: {
+ 'name': 'CellWidth',
+ 'type': 'Short'
+ },
+ 265: {
+ 'name': 'CellLength',
+ 'type': 'Short'
+ },
+ 266: {
+ 'name': 'FillOrder',
+ 'type': 'Short'
+ },
+ 269: {
+ 'name': 'DocumentName',
+ 'type': 'Ascii'
+ },
+ 270: {
+ 'name': 'ImageDescription',
+ 'type': 'Ascii'
+ },
+ 271: {
+ 'name': 'Make',
+ 'type': 'Ascii'
+ },
+ 272: {
+ 'name': 'Model',
+ 'type': 'Ascii'
+ },
+ 273: {
+ 'name': 'StripOffsets',
+ 'type': 'Long'
+ },
+ 274: {
+ 'name': 'Orientation',
+ 'type': 'Short'
+ },
+ 277: {
+ 'name': 'SamplesPerPixel',
+ 'type': 'Short'
+ },
+ 278: {
+ 'name': 'RowsPerStrip',
+ 'type': 'Long'
+ },
+ 279: {
+ 'name': 'StripByteCounts',
+ 'type': 'Long'
+ },
+ 282: {
+ 'name': 'XResolution',
+ 'type': 'Rational'
+ },
+ 283: {
+ 'name': 'YResolution',
+ 'type': 'Rational'
+ },
+ 284: {
+ 'name': 'PlanarConfiguration',
+ 'type': 'Short'
+ },
+ 290: {
+ 'name': 'GrayResponseUnit',
+ 'type': 'Short'
+ },
+ 291: {
+ 'name': 'GrayResponseCurve',
+ 'type': 'Short'
+ },
+ 292: {
+ 'name': 'T4Options',
+ 'type': 'Long'
+ },
+ 293: {
+ 'name': 'T6Options',
+ 'type': 'Long'
+ },
+ 296: {
+ 'name': 'ResolutionUnit',
+ 'type': 'Short'
+ },
+ 301: {
+ 'name': 'TransferFunction',
+ 'type': 'Short'
+ },
+ 305: {
+ 'name': 'Software',
+ 'type': 'Ascii'
+ },
+ 306: {
+ 'name': 'DateTime',
+ 'type': 'Ascii'
+ },
+ 315: {
+ 'name': 'Artist',
+ 'type': 'Ascii'
+ },
+ 316: {
+ 'name': 'HostComputer',
+ 'type': 'Ascii'
+ },
+ 317: {
+ 'name': 'Predictor',
+ 'type': 'Short'
+ },
+ 318: {
+ 'name': 'WhitePoint',
+ 'type': 'Rational'
+ },
+ 319: {
+ 'name': 'PrimaryChromaticities',
+ 'type': 'Rational'
+ },
+ 320: {
+ 'name': 'ColorMap',
+ 'type': 'Short'
+ },
+ 321: {
+ 'name': 'HalftoneHints',
+ 'type': 'Short'
+ },
+ 322: {
+ 'name': 'TileWidth',
+ 'type': 'Short'
+ },
+ 323: {
+ 'name': 'TileLength',
+ 'type': 'Short'
+ },
+ 324: {
+ 'name': 'TileOffsets',
+ 'type': 'Short'
+ },
+ 325: {
+ 'name': 'TileByteCounts',
+ 'type': 'Short'
+ },
+ 330: {
+ 'name': 'SubIFDs',
+ 'type': 'Long'
+ },
+ 332: {
+ 'name': 'InkSet',
+ 'type': 'Short'
+ },
+ 333: {
+ 'name': 'InkNames',
+ 'type': 'Ascii'
+ },
+ 334: {
+ 'name': 'NumberOfInks',
+ 'type': 'Short'
+ },
+ 336: {
+ 'name': 'DotRange',
+ 'type': 'Byte'
+ },
+ 337: {
+ 'name': 'TargetPrinter',
+ 'type': 'Ascii'
+ },
+ 338: {
+ 'name': 'ExtraSamples',
+ 'type': 'Short'
+ },
+ 339: {
+ 'name': 'SampleFormat',
+ 'type': 'Short'
+ },
+ 340: {
+ 'name': 'SMinSampleValue',
+ 'type': 'Short'
+ },
+ 341: {
+ 'name': 'SMaxSampleValue',
+ 'type': 'Short'
+ },
+ 342: {
+ 'name': 'TransferRange',
+ 'type': 'Short'
+ },
+ 343: {
+ 'name': 'ClipPath',
+ 'type': 'Byte'
+ },
+ 344: {
+ 'name': 'XClipPathUnits',
+ 'type': 'Long'
+ },
+ 345: {
+ 'name': 'YClipPathUnits',
+ 'type': 'Long'
+ },
+ 346: {
+ 'name': 'Indexed',
+ 'type': 'Short'
+ },
+ 347: {
+ 'name': 'JPEGTables',
+ 'type': 'Undefined'
+ },
+ 351: {
+ 'name': 'OPIProxy',
+ 'type': 'Short'
+ },
+ 512: {
+ 'name': 'JPEGProc',
+ 'type': 'Long'
+ },
+ 513: {
+ 'name': 'JPEGInterchangeFormat',
+ 'type': 'Long'
+ },
+ 514: {
+ 'name': 'JPEGInterchangeFormatLength',
+ 'type': 'Long'
+ },
+ 515: {
+ 'name': 'JPEGRestartInterval',
+ 'type': 'Short'
+ },
+ 517: {
+ 'name': 'JPEGLosslessPredictors',
+ 'type': 'Short'
+ },
+ 518: {
+ 'name': 'JPEGPointTransforms',
+ 'type': 'Short'
+ },
+ 519: {
+ 'name': 'JPEGQTables',
+ 'type': 'Long'
+ },
+ 520: {
+ 'name': 'JPEGDCTables',
+ 'type': 'Long'
+ },
+ 521: {
+ 'name': 'JPEGACTables',
+ 'type': 'Long'
+ },
+ 529: {
+ 'name': 'YCbCrCoefficients',
+ 'type': 'Rational'
+ },
+ 530: {
+ 'name': 'YCbCrSubSampling',
+ 'type': 'Short'
+ },
+ 531: {
+ 'name': 'YCbCrPositioning',
+ 'type': 'Short'
+ },
+ 532: {
+ 'name': 'ReferenceBlackWhite',
+ 'type': 'Rational'
+ },
+ 700: {
+ 'name': 'XMLPacket',
+ 'type': 'Byte'
+ },
+ 18246: {
+ 'name': 'Rating',
+ 'type': 'Short'
+ },
+ 18249: {
+ 'name': 'RatingPercent',
+ 'type': 'Short'
+ },
+ 32781: {
+ 'name': 'ImageID',
+ 'type': 'Ascii'
+ },
+ 33421: {
+ 'name': 'CFARepeatPatternDim',
+ 'type': 'Short'
+ },
+ 33422: {
+ 'name': 'CFAPattern',
+ 'type': 'Byte'
+ },
+ 33423: {
+ 'name': 'BatteryLevel',
+ 'type': 'Rational'
+ },
+ 33432: {
+ 'name': 'Copyright',
+ 'type': 'Ascii'
+ },
+ 33434: {
+ 'name': 'ExposureTime',
+ 'type': 'Rational'
+ },
+ 34377: {
+ 'name': 'ImageResources',
+ 'type': 'Byte'
+ },
+ 34665: {
+ 'name': 'ExifTag',
+ 'type': 'Long'
+ },
+ 34675: {
+ 'name': 'InterColorProfile',
+ 'type': 'Undefined'
+ },
+ 34853: {
+ 'name': 'GPSTag',
+ 'type': 'Long'
+ },
+ 34857: {
+ 'name': 'Interlace',
+ 'type': 'Short'
+ },
+ 34858: {
+ 'name': 'TimeZoneOffset',
+ 'type': 'Long'
+ },
+ 34859: {
+ 'name': 'SelfTimerMode',
+ 'type': 'Short'
+ },
+ 37387: {
+ 'name': 'FlashEnergy',
+ 'type': 'Rational'
+ },
+ 37388: {
+ 'name': 'SpatialFrequencyResponse',
+ 'type': 'Undefined'
+ },
+ 37389: {
+ 'name': 'Noise',
+ 'type': 'Undefined'
+ },
+ 37390: {
+ 'name': 'FocalPlaneXResolution',
+ 'type': 'Rational'
+ },
+ 37391: {
+ 'name': 'FocalPlaneYResolution',
+ 'type': 'Rational'
+ },
+ 37392: {
+ 'name': 'FocalPlaneResolutionUnit',
+ 'type': 'Short'
+ },
+ 37393: {
+ 'name': 'ImageNumber',
+ 'type': 'Long'
+ },
+ 37394: {
+ 'name': 'SecurityClassification',
+ 'type': 'Ascii'
+ },
+ 37395: {
+ 'name': 'ImageHistory',
+ 'type': 'Ascii'
+ },
+ 37397: {
+ 'name': 'ExposureIndex',
+ 'type': 'Rational'
+ },
+ 37398: {
+ 'name': 'TIFFEPStandardID',
+ 'type': 'Byte'
+ },
+ 37399: {
+ 'name': 'SensingMethod',
+ 'type': 'Short'
+ },
+ 40091: {
+ 'name': 'XPTitle',
+ 'type': 'Byte'
+ },
+ 40092: {
+ 'name': 'XPComment',
+ 'type': 'Byte'
+ },
+ 40093: {
+ 'name': 'XPAuthor',
+ 'type': 'Byte'
+ },
+ 40094: {
+ 'name': 'XPKeywords',
+ 'type': 'Byte'
+ },
+ 40095: {
+ 'name': 'XPSubject',
+ 'type': 'Byte'
+ },
+ 50341: {
+ 'name': 'PrintImageMatching',
+ 'type': 'Undefined'
+ },
+ 50706: {
+ 'name': 'DNGVersion',
+ 'type': 'Byte'
+ },
+ 50707: {
+ 'name': 'DNGBackwardVersion',
+ 'type': 'Byte'
+ },
+ 50708: {
+ 'name': 'UniqueCameraModel',
+ 'type': 'Ascii'
+ },
+ 50709: {
+ 'name': 'LocalizedCameraModel',
+ 'type': 'Byte'
+ },
+ 50710: {
+ 'name': 'CFAPlaneColor',
+ 'type': 'Byte'
+ },
+ 50711: {
+ 'name': 'CFALayout',
+ 'type': 'Short'
+ },
+ 50712: {
+ 'name': 'LinearizationTable',
+ 'type': 'Short'
+ },
+ 50713: {
+ 'name': 'BlackLevelRepeatDim',
+ 'type': 'Short'
+ },
+ 50714: {
+ 'name': 'BlackLevel',
+ 'type': 'Rational'
+ },
+ 50715: {
+ 'name': 'BlackLevelDeltaH',
+ 'type': 'SRational'
+ },
+ 50716: {
+ 'name': 'BlackLevelDeltaV',
+ 'type': 'SRational'
+ },
+ 50717: {
+ 'name': 'WhiteLevel',
+ 'type': 'Short'
+ },
+ 50718: {
+ 'name': 'DefaultScale',
+ 'type': 'Rational'
+ },
+ 50719: {
+ 'name': 'DefaultCropOrigin',
+ 'type': 'Short'
+ },
+ 50720: {
+ 'name': 'DefaultCropSize',
+ 'type': 'Short'
+ },
+ 50721: {
+ 'name': 'ColorMatrix1',
+ 'type': 'SRational'
+ },
+ 50722: {
+ 'name': 'ColorMatrix2',
+ 'type': 'SRational'
+ },
+ 50723: {
+ 'name': 'CameraCalibration1',
+ 'type': 'SRational'
+ },
+ 50724: {
+ 'name': 'CameraCalibration2',
+ 'type': 'SRational'
+ },
+ 50725: {
+ 'name': 'ReductionMatrix1',
+ 'type': 'SRational'
+ },
+ 50726: {
+ 'name': 'ReductionMatrix2',
+ 'type': 'SRational'
+ },
+ 50727: {
+ 'name': 'AnalogBalance',
+ 'type': 'Rational'
+ },
+ 50728: {
+ 'name': 'AsShotNeutral',
+ 'type': 'Short'
+ },
+ 50729: {
+ 'name': 'AsShotWhiteXY',
+ 'type': 'Rational'
+ },
+ 50730: {
+ 'name': 'BaselineExposure',
+ 'type': 'SRational'
+ },
+ 50731: {
+ 'name': 'BaselineNoise',
+ 'type': 'Rational'
+ },
+ 50732: {
+ 'name': 'BaselineSharpness',
+ 'type': 'Rational'
+ },
+ 50733: {
+ 'name': 'BayerGreenSplit',
+ 'type': 'Long'
+ },
+ 50734: {
+ 'name': 'LinearResponseLimit',
+ 'type': 'Rational'
+ },
+ 50735: {
+ 'name': 'CameraSerialNumber',
+ 'type': 'Ascii'
+ },
+ 50736: {
+ 'name': 'LensInfo',
+ 'type': 'Rational'
+ },
+ 50737: {
+ 'name': 'ChromaBlurRadius',
+ 'type': 'Rational'
+ },
+ 50738: {
+ 'name': 'AntiAliasStrength',
+ 'type': 'Rational'
+ },
+ 50739: {
+ 'name': 'ShadowScale',
+ 'type': 'SRational'
+ },
+ 50740: {
+ 'name': 'DNGPrivateData',
+ 'type': 'Byte'
+ },
+ 50741: {
+ 'name': 'MakerNoteSafety',
+ 'type': 'Short'
+ },
+ 50778: {
+ 'name': 'CalibrationIlluminant1',
+ 'type': 'Short'
+ },
+ 50779: {
+ 'name': 'CalibrationIlluminant2',
+ 'type': 'Short'
+ },
+ 50780: {
+ 'name': 'BestQualityScale',
+ 'type': 'Rational'
+ },
+ 50781: {
+ 'name': 'RawDataUniqueID',
+ 'type': 'Byte'
+ },
+ 50827: {
+ 'name': 'OriginalRawFileName',
+ 'type': 'Byte'
+ },
+ 50828: {
+ 'name': 'OriginalRawFileData',
+ 'type': 'Undefined'
+ },
+ 50829: {
+ 'name': 'ActiveArea',
+ 'type': 'Short'
+ },
+ 50830: {
+ 'name': 'MaskedAreas',
+ 'type': 'Short'
+ },
+ 50831: {
+ 'name': 'AsShotICCProfile',
+ 'type': 'Undefined'
+ },
+ 50832: {
+ 'name': 'AsShotPreProfileMatrix',
+ 'type': 'SRational'
+ },
+ 50833: {
+ 'name': 'CurrentICCProfile',
+ 'type': 'Undefined'
+ },
+ 50834: {
+ 'name': 'CurrentPreProfileMatrix',
+ 'type': 'SRational'
+ },
+ 50879: {
+ 'name': 'ColorimetricReference',
+ 'type': 'Short'
+ },
+ 50931: {
+ 'name': 'CameraCalibrationSignature',
+ 'type': 'Byte'
+ },
+ 50932: {
+ 'name': 'ProfileCalibrationSignature',
+ 'type': 'Byte'
+ },
+ 50934: {
+ 'name': 'AsShotProfileName',
+ 'type': 'Byte'
+ },
+ 50935: {
+ 'name': 'NoiseReductionApplied',
+ 'type': 'Rational'
+ },
+ 50936: {
+ 'name': 'ProfileName',
+ 'type': 'Byte'
+ },
+ 50937: {
+ 'name': 'ProfileHueSatMapDims',
+ 'type': 'Long'
+ },
+ 50938: {
+ 'name': 'ProfileHueSatMapData1',
+ 'type': 'Float'
+ },
+ 50939: {
+ 'name': 'ProfileHueSatMapData2',
+ 'type': 'Float'
+ },
+ 50940: {
+ 'name': 'ProfileToneCurve',
+ 'type': 'Float'
+ },
+ 50941: {
+ 'name': 'ProfileEmbedPolicy',
+ 'type': 'Long'
+ },
+ 50942: {
+ 'name': 'ProfileCopyright',
+ 'type': 'Byte'
+ },
+ 50964: {
+ 'name': 'ForwardMatrix1',
+ 'type': 'SRational'
+ },
+ 50965: {
+ 'name': 'ForwardMatrix2',
+ 'type': 'SRational'
+ },
+ 50966: {
+ 'name': 'PreviewApplicationName',
+ 'type': 'Byte'
+ },
+ 50967: {
+ 'name': 'PreviewApplicationVersion',
+ 'type': 'Byte'
+ },
+ 50968: {
+ 'name': 'PreviewSettingsName',
+ 'type': 'Byte'
+ },
+ 50969: {
+ 'name': 'PreviewSettingsDigest',
+ 'type': 'Byte'
+ },
+ 50970: {
+ 'name': 'PreviewColorSpace',
+ 'type': 'Long'
+ },
+ 50971: {
+ 'name': 'PreviewDateTime',
+ 'type': 'Ascii'
+ },
+ 50972: {
+ 'name': 'RawImageDigest',
+ 'type': 'Undefined'
+ },
+ 50973: {
+ 'name': 'OriginalRawFileDigest',
+ 'type': 'Undefined'
+ },
+ 50974: {
+ 'name': 'SubTileBlockSize',
+ 'type': 'Long'
+ },
+ 50975: {
+ 'name': 'RowInterleaveFactor',
+ 'type': 'Long'
+ },
+ 50981: {
+ 'name': 'ProfileLookTableDims',
+ 'type': 'Long'
+ },
+ 50982: {
+ 'name': 'ProfileLookTableData',
+ 'type': 'Float'
+ },
+ 51008: {
+ 'name': 'OpcodeList1',
+ 'type': 'Undefined'
+ },
+ 51009: {
+ 'name': 'OpcodeList2',
+ 'type': 'Undefined'
+ },
+ 51022: {
+ 'name': 'OpcodeList3',
+ 'type': 'Undefined'
}
- };
-
-
- if (typeof exports !== 'undefined') {
- if (typeof module !== 'undefined' && module.exports) {
- exports = module.exports = that;
+ },
+ 'Exif': {
+ 33434: {
+ 'name': 'ExposureTime',
+ 'type': 'Rational'
+ },
+ 33437: {
+ 'name': 'FNumber',
+ 'type': 'Rational'
+ },
+ 34850: {
+ 'name': 'ExposureProgram',
+ 'type': 'Short'
+ },
+ 34852: {
+ 'name': 'SpectralSensitivity',
+ 'type': 'Ascii'
+ },
+ 34855: {
+ 'name': 'ISOSpeedRatings',
+ 'type': 'Short'
+ },
+ 34856: {
+ 'name': 'OECF',
+ 'type': 'Undefined'
+ },
+ 34864: {
+ 'name': 'SensitivityType',
+ 'type': 'Short'
+ },
+ 34865: {
+ 'name': 'StandardOutputSensitivity',
+ 'type': 'Long'
+ },
+ 34866: {
+ 'name': 'RecommendedExposureIndex',
+ 'type': 'Long'
+ },
+ 34867: {
+ 'name': 'ISOSpeed',
+ 'type': 'Long'
+ },
+ 34868: {
+ 'name': 'ISOSpeedLatitudeyyy',
+ 'type': 'Long'
+ },
+ 34869: {
+ 'name': 'ISOSpeedLatitudezzz',
+ 'type': 'Long'
+ },
+ 36864: {
+ 'name': 'ExifVersion',
+ 'type': 'Undefined'
+ },
+ 36867: {
+ 'name': 'DateTimeOriginal',
+ 'type': 'Ascii'
+ },
+ 36868: {
+ 'name': 'DateTimeDigitized',
+ 'type': 'Ascii'
+ },
+ 37121: {
+ 'name': 'ComponentsConfiguration',
+ 'type': 'Undefined'
+ },
+ 37122: {
+ 'name': 'CompressedBitsPerPixel',
+ 'type': 'Rational'
+ },
+ 37377: {
+ 'name': 'ShutterSpeedValue',
+ 'type': 'SRational'
+ },
+ 37378: {
+ 'name': 'ApertureValue',
+ 'type': 'Rational'
+ },
+ 37379: {
+ 'name': 'BrightnessValue',
+ 'type': 'SRational'
+ },
+ 37380: {
+ 'name': 'ExposureBiasValue',
+ 'type': 'SRational'
+ },
+ 37381: {
+ 'name': 'MaxApertureValue',
+ 'type': 'Rational'
+ },
+ 37382: {
+ 'name': 'SubjectDistance',
+ 'type': 'Rational'
+ },
+ 37383: {
+ 'name': 'MeteringMode',
+ 'type': 'Short'
+ },
+ 37384: {
+ 'name': 'LightSource',
+ 'type': 'Short'
+ },
+ 37385: {
+ 'name': 'Flash',
+ 'type': 'Short'
+ },
+ 37386: {
+ 'name': 'FocalLength',
+ 'type': 'Rational'
+ },
+ 37396: {
+ 'name': 'SubjectArea',
+ 'type': 'Short'
+ },
+ 37500: {
+ 'name': 'MakerNote',
+ 'type': 'Undefined'
+ },
+ 37510: {
+ 'name': 'UserComment',
+ 'type': 'Ascii'
+ },
+ 37520: {
+ 'name': 'SubSecTime',
+ 'type': 'Ascii'
+ },
+ 37521: {
+ 'name': 'SubSecTimeOriginal',
+ 'type': 'Ascii'
+ },
+ 37522: {
+ 'name': 'SubSecTimeDigitized',
+ 'type': 'Ascii'
+ },
+ 40960: {
+ 'name': 'FlashpixVersion',
+ 'type': 'Undefined'
+ },
+ 40961: {
+ 'name': 'ColorSpace',
+ 'type': 'Short'
+ },
+ 40962: {
+ 'name': 'PixelXDimension',
+ 'type': 'Long'
+ },
+ 40963: {
+ 'name': 'PixelYDimension',
+ 'type': 'Long'
+ },
+ 40964: {
+ 'name': 'RelatedSoundFile',
+ 'type': 'Ascii'
+ },
+ 40965: {
+ 'name': 'InteroperabilityTag',
+ 'type': 'Long'
+ },
+ 41483: {
+ 'name': 'FlashEnergy',
+ 'type': 'Rational'
+ },
+ 41484: {
+ 'name': 'SpatialFrequencyResponse',
+ 'type': 'Undefined'
+ },
+ 41486: {
+ 'name': 'FocalPlaneXResolution',
+ 'type': 'Rational'
+ },
+ 41487: {
+ 'name': 'FocalPlaneYResolution',
+ 'type': 'Rational'
+ },
+ 41488: {
+ 'name': 'FocalPlaneResolutionUnit',
+ 'type': 'Short'
+ },
+ 41492: {
+ 'name': 'SubjectLocation',
+ 'type': 'Short'
+ },
+ 41493: {
+ 'name': 'ExposureIndex',
+ 'type': 'Rational'
+ },
+ 41495: {
+ 'name': 'SensingMethod',
+ 'type': 'Short'
+ },
+ 41728: {
+ 'name': 'FileSource',
+ 'type': 'Undefined'
+ },
+ 41729: {
+ 'name': 'SceneType',
+ 'type': 'Undefined'
+ },
+ 41730: {
+ 'name': 'CFAPattern',
+ 'type': 'Undefined'
+ },
+ 41985: {
+ 'name': 'CustomRendered',
+ 'type': 'Short'
+ },
+ 41986: {
+ 'name': 'ExposureMode',
+ 'type': 'Short'
+ },
+ 41987: {
+ 'name': 'WhiteBalance',
+ 'type': 'Short'
+ },
+ 41988: {
+ 'name': 'DigitalZoomRatio',
+ 'type': 'Rational'
+ },
+ 41989: {
+ 'name': 'FocalLengthIn35mmFilm',
+ 'type': 'Short'
+ },
+ 41990: {
+ 'name': 'SceneCaptureType',
+ 'type': 'Short'
+ },
+ 41991: {
+ 'name': 'GainControl',
+ 'type': 'Short'
+ },
+ 41992: {
+ 'name': 'Contrast',
+ 'type': 'Short'
+ },
+ 41993: {
+ 'name': 'Saturation',
+ 'type': 'Short'
+ },
+ 41994: {
+ 'name': 'Sharpness',
+ 'type': 'Short'
+ },
+ 41995: {
+ 'name': 'DeviceSettingDescription',
+ 'type': 'Undefined'
+ },
+ 41996: {
+ 'name': 'SubjectDistanceRange',
+ 'type': 'Short'
+ },
+ 42016: {
+ 'name': 'ImageUniqueID',
+ 'type': 'Ascii'
+ },
+ 42032: {
+ 'name': 'CameraOwnerName',
+ 'type': 'Ascii'
+ },
+ 42033: {
+ 'name': 'BodySerialNumber',
+ 'type': 'Ascii'
+ },
+ 42034: {
+ 'name': 'LensSpecification',
+ 'type': 'Rational'
+ },
+ 42035: {
+ 'name': 'LensMake',
+ 'type': 'Ascii'
+ },
+ 42036: {
+ 'name': 'LensModel',
+ 'type': 'Ascii'
+ },
+ 42037: {
+ 'name': 'LensSerialNumber',
+ 'type': 'Ascii'
+ },
+ 42240: {
+ 'name': 'Gamma',
+ 'type': 'Rational'
}
- exports.piexif = that;
- } else {
- window.piexif = that;
+ },
+ 'GPS': {
+ 0: {
+ 'name': 'GPSVersionID',
+ 'type': 'Byte'
+ },
+ 1: {
+ 'name': 'GPSLatitudeRef',
+ 'type': 'Ascii'
+ },
+ 2: {
+ 'name': 'GPSLatitude',
+ 'type': 'Rational'
+ },
+ 3: {
+ 'name': 'GPSLongitudeRef',
+ 'type': 'Ascii'
+ },
+ 4: {
+ 'name': 'GPSLongitude',
+ 'type': 'Rational'
+ },
+ 5: {
+ 'name': 'GPSAltitudeRef',
+ 'type': 'Byte'
+ },
+ 6: {
+ 'name': 'GPSAltitude',
+ 'type': 'Rational'
+ },
+ 7: {
+ 'name': 'GPSTimeStamp',
+ 'type': 'Rational'
+ },
+ 8: {
+ 'name': 'GPSSatellites',
+ 'type': 'Ascii'
+ },
+ 9: {
+ 'name': 'GPSStatus',
+ 'type': 'Ascii'
+ },
+ 10: {
+ 'name': 'GPSMeasureMode',
+ 'type': 'Ascii'
+ },
+ 11: {
+ 'name': 'GPSDOP',
+ 'type': 'Rational'
+ },
+ 12: {
+ 'name': 'GPSSpeedRef',
+ 'type': 'Ascii'
+ },
+ 13: {
+ 'name': 'GPSSpeed',
+ 'type': 'Rational'
+ },
+ 14: {
+ 'name': 'GPSTrackRef',
+ 'type': 'Ascii'
+ },
+ 15: {
+ 'name': 'GPSTrack',
+ 'type': 'Rational'
+ },
+ 16: {
+ 'name': 'GPSImgDirectionRef',
+ 'type': 'Ascii'
+ },
+ 17: {
+ 'name': 'GPSImgDirection',
+ 'type': 'Rational'
+ },
+ 18: {
+ 'name': 'GPSMapDatum',
+ 'type': 'Ascii'
+ },
+ 19: {
+ 'name': 'GPSDestLatitudeRef',
+ 'type': 'Ascii'
+ },
+ 20: {
+ 'name': 'GPSDestLatitude',
+ 'type': 'Rational'
+ },
+ 21: {
+ 'name': 'GPSDestLongitudeRef',
+ 'type': 'Ascii'
+ },
+ 22: {
+ 'name': 'GPSDestLongitude',
+ 'type': 'Rational'
+ },
+ 23: {
+ 'name': 'GPSDestBearingRef',
+ 'type': 'Ascii'
+ },
+ 24: {
+ 'name': 'GPSDestBearing',
+ 'type': 'Rational'
+ },
+ 25: {
+ 'name': 'GPSDestDistanceRef',
+ 'type': 'Ascii'
+ },
+ 26: {
+ 'name': 'GPSDestDistance',
+ 'type': 'Rational'
+ },
+ 27: {
+ 'name': 'GPSProcessingMethod',
+ 'type': 'Undefined'
+ },
+ 28: {
+ 'name': 'GPSAreaInformation',
+ 'type': 'Undefined'
+ },
+ 29: {
+ 'name': 'GPSDateStamp',
+ 'type': 'Ascii'
+ },
+ 30: {
+ 'name': 'GPSDifferential',
+ 'type': 'Short'
+ },
+ 31: {
+ 'name': 'GPSHPositioningError',
+ 'type': 'Rational'
+ }
+ },
+ 'Interop': {
+ 1: {
+ 'name': 'InteroperabilityIndex',
+ 'type': 'Ascii'
+ }
+ },
+};
+TAGS["0th"] = TAGS["Image"];
+TAGS["1st"] = TAGS["Image"];
+that.TAGS = TAGS;
+
+
+that.ImageIFD = {
+ ProcessingSoftware: 11,
+ NewSubfileType: 254,
+ SubfileType: 255,
+ ImageWidth: 256,
+ ImageLength: 257,
+ BitsPerSample: 258,
+ Compression: 259,
+ PhotometricInterpretation: 262,
+ Threshholding: 263,
+ CellWidth: 264,
+ CellLength: 265,
+ FillOrder: 266,
+ DocumentName: 269,
+ ImageDescription: 270,
+ Make: 271,
+ Model: 272,
+ StripOffsets: 273,
+ Orientation: 274,
+ SamplesPerPixel: 277,
+ RowsPerStrip: 278,
+ StripByteCounts: 279,
+ XResolution: 282,
+ YResolution: 283,
+ PlanarConfiguration: 284,
+ GrayResponseUnit: 290,
+ GrayResponseCurve: 291,
+ T4Options: 292,
+ T6Options: 293,
+ ResolutionUnit: 296,
+ TransferFunction: 301,
+ Software: 305,
+ DateTime: 306,
+ Artist: 315,
+ HostComputer: 316,
+ Predictor: 317,
+ WhitePoint: 318,
+ PrimaryChromaticities: 319,
+ ColorMap: 320,
+ HalftoneHints: 321,
+ TileWidth: 322,
+ TileLength: 323,
+ TileOffsets: 324,
+ TileByteCounts: 325,
+ SubIFDs: 330,
+ InkSet: 332,
+ InkNames: 333,
+ NumberOfInks: 334,
+ DotRange: 336,
+ TargetPrinter: 337,
+ ExtraSamples: 338,
+ SampleFormat: 339,
+ SMinSampleValue: 340,
+ SMaxSampleValue: 341,
+ TransferRange: 342,
+ ClipPath: 343,
+ XClipPathUnits: 344,
+ YClipPathUnits: 345,
+ Indexed: 346,
+ JPEGTables: 347,
+ OPIProxy: 351,
+ JPEGProc: 512,
+ JPEGInterchangeFormat: 513,
+ JPEGInterchangeFormatLength: 514,
+ JPEGRestartInterval: 515,
+ JPEGLosslessPredictors: 517,
+ JPEGPointTransforms: 518,
+ JPEGQTables: 519,
+ JPEGDCTables: 520,
+ JPEGACTables: 521,
+ YCbCrCoefficients: 529,
+ YCbCrSubSampling: 530,
+ YCbCrPositioning: 531,
+ ReferenceBlackWhite: 532,
+ XMLPacket: 700,
+ Rating: 18246,
+ RatingPercent: 18249,
+ ImageID: 32781,
+ CFARepeatPatternDim: 33421,
+ CFAPattern: 33422,
+ BatteryLevel: 33423,
+ Copyright: 33432,
+ ExposureTime: 33434,
+ ImageResources: 34377,
+ ExifTag: 34665,
+ InterColorProfile: 34675,
+ GPSTag: 34853,
+ Interlace: 34857,
+ TimeZoneOffset: 34858,
+ SelfTimerMode: 34859,
+ FlashEnergy: 37387,
+ SpatialFrequencyResponse: 37388,
+ Noise: 37389,
+ FocalPlaneXResolution: 37390,
+ FocalPlaneYResolution: 37391,
+ FocalPlaneResolutionUnit: 37392,
+ ImageNumber: 37393,
+ SecurityClassification: 37394,
+ ImageHistory: 37395,
+ ExposureIndex: 37397,
+ TIFFEPStandardID: 37398,
+ SensingMethod: 37399,
+ XPTitle: 40091,
+ XPComment: 40092,
+ XPAuthor: 40093,
+ XPKeywords: 40094,
+ XPSubject: 40095,
+ PrintImageMatching: 50341,
+ DNGVersion: 50706,
+ DNGBackwardVersion: 50707,
+ UniqueCameraModel: 50708,
+ LocalizedCameraModel: 50709,
+ CFAPlaneColor: 50710,
+ CFALayout: 50711,
+ LinearizationTable: 50712,
+ BlackLevelRepeatDim: 50713,
+ BlackLevel: 50714,
+ BlackLevelDeltaH: 50715,
+ BlackLevelDeltaV: 50716,
+ WhiteLevel: 50717,
+ DefaultScale: 50718,
+ DefaultCropOrigin: 50719,
+ DefaultCropSize: 50720,
+ ColorMatrix1: 50721,
+ ColorMatrix2: 50722,
+ CameraCalibration1: 50723,
+ CameraCalibration2: 50724,
+ ReductionMatrix1: 50725,
+ ReductionMatrix2: 50726,
+ AnalogBalance: 50727,
+ AsShotNeutral: 50728,
+ AsShotWhiteXY: 50729,
+ BaselineExposure: 50730,
+ BaselineNoise: 50731,
+ BaselineSharpness: 50732,
+ BayerGreenSplit: 50733,
+ LinearResponseLimit: 50734,
+ CameraSerialNumber: 50735,
+ LensInfo: 50736,
+ ChromaBlurRadius: 50737,
+ AntiAliasStrength: 50738,
+ ShadowScale: 50739,
+ DNGPrivateData: 50740,
+ MakerNoteSafety: 50741,
+ CalibrationIlluminant1: 50778,
+ CalibrationIlluminant2: 50779,
+ BestQualityScale: 50780,
+ RawDataUniqueID: 50781,
+ OriginalRawFileName: 50827,
+ OriginalRawFileData: 50828,
+ ActiveArea: 50829,
+ MaskedAreas: 50830,
+ AsShotICCProfile: 50831,
+ AsShotPreProfileMatrix: 50832,
+ CurrentICCProfile: 50833,
+ CurrentPreProfileMatrix: 50834,
+ ColorimetricReference: 50879,
+ CameraCalibrationSignature: 50931,
+ ProfileCalibrationSignature: 50932,
+ AsShotProfileName: 50934,
+ NoiseReductionApplied: 50935,
+ ProfileName: 50936,
+ ProfileHueSatMapDims: 50937,
+ ProfileHueSatMapData1: 50938,
+ ProfileHueSatMapData2: 50939,
+ ProfileToneCurve: 50940,
+ ProfileEmbedPolicy: 50941,
+ ProfileCopyright: 50942,
+ ForwardMatrix1: 50964,
+ ForwardMatrix2: 50965,
+ PreviewApplicationName: 50966,
+ PreviewApplicationVersion: 50967,
+ PreviewSettingsName: 50968,
+ PreviewSettingsDigest: 50969,
+ PreviewColorSpace: 50970,
+ PreviewDateTime: 50971,
+ RawImageDigest: 50972,
+ OriginalRawFileDigest: 50973,
+ SubTileBlockSize: 50974,
+ RowInterleaveFactor: 50975,
+ ProfileLookTableDims: 50981,
+ ProfileLookTableData: 50982,
+ OpcodeList1: 51008,
+ OpcodeList2: 51009,
+ OpcodeList3: 51022,
+ NoiseProfile: 51041,
+};
+
+
+that.ExifIFD = {
+ ExposureTime: 33434,
+ FNumber: 33437,
+ ExposureProgram: 34850,
+ SpectralSensitivity: 34852,
+ ISOSpeedRatings: 34855,
+ OECF: 34856,
+ SensitivityType: 34864,
+ StandardOutputSensitivity: 34865,
+ RecommendedExposureIndex: 34866,
+ ISOSpeed: 34867,
+ ISOSpeedLatitudeyyy: 34868,
+ ISOSpeedLatitudezzz: 34869,
+ ExifVersion: 36864,
+ DateTimeOriginal: 36867,
+ DateTimeDigitized: 36868,
+ ComponentsConfiguration: 37121,
+ CompressedBitsPerPixel: 37122,
+ ShutterSpeedValue: 37377,
+ ApertureValue: 37378,
+ BrightnessValue: 37379,
+ ExposureBiasValue: 37380,
+ MaxApertureValue: 37381,
+ SubjectDistance: 37382,
+ MeteringMode: 37383,
+ LightSource: 37384,
+ Flash: 37385,
+ FocalLength: 37386,
+ SubjectArea: 37396,
+ MakerNote: 37500,
+ UserComment: 37510,
+ SubSecTime: 37520,
+ SubSecTimeOriginal: 37521,
+ SubSecTimeDigitized: 37522,
+ FlashpixVersion: 40960,
+ ColorSpace: 40961,
+ PixelXDimension: 40962,
+ PixelYDimension: 40963,
+ RelatedSoundFile: 40964,
+ InteroperabilityTag: 40965,
+ FlashEnergy: 41483,
+ SpatialFrequencyResponse: 41484,
+ FocalPlaneXResolution: 41486,
+ FocalPlaneYResolution: 41487,
+ FocalPlaneResolutionUnit: 41488,
+ SubjectLocation: 41492,
+ ExposureIndex: 41493,
+ SensingMethod: 41495,
+ FileSource: 41728,
+ SceneType: 41729,
+ CFAPattern: 41730,
+ CustomRendered: 41985,
+ ExposureMode: 41986,
+ WhiteBalance: 41987,
+ DigitalZoomRatio: 41988,
+ FocalLengthIn35mmFilm: 41989,
+ SceneCaptureType: 41990,
+ GainControl: 41991,
+ Contrast: 41992,
+ Saturation: 41993,
+ Sharpness: 41994,
+ DeviceSettingDescription: 41995,
+ SubjectDistanceRange: 41996,
+ ImageUniqueID: 42016,
+ CameraOwnerName: 42032,
+ BodySerialNumber: 42033,
+ LensSpecification: 42034,
+ LensMake: 42035,
+ LensModel: 42036,
+ LensSerialNumber: 42037,
+ Gamma: 42240,
+};
+
+
+that.GPSIFD = {
+ GPSVersionID: 0,
+ GPSLatitudeRef: 1,
+ GPSLatitude: 2,
+ GPSLongitudeRef: 3,
+ GPSLongitude: 4,
+ GPSAltitudeRef: 5,
+ GPSAltitude: 6,
+ GPSTimeStamp: 7,
+ GPSSatellites: 8,
+ GPSStatus: 9,
+ GPSMeasureMode: 10,
+ GPSDOP: 11,
+ GPSSpeedRef: 12,
+ GPSSpeed: 13,
+ GPSTrackRef: 14,
+ GPSTrack: 15,
+ GPSImgDirectionRef: 16,
+ GPSImgDirection: 17,
+ GPSMapDatum: 18,
+ GPSDestLatitudeRef: 19,
+ GPSDestLatitude: 20,
+ GPSDestLongitudeRef: 21,
+ GPSDestLongitude: 22,
+ GPSDestBearingRef: 23,
+ GPSDestBearing: 24,
+ GPSDestDistanceRef: 25,
+ GPSDestDistance: 26,
+ GPSProcessingMethod: 27,
+ GPSAreaInformation: 28,
+ GPSDateStamp: 29,
+ GPSDifferential: 30,
+ GPSHPositioningError: 31,
+};
+
+
+that.InteropIFD = {
+ InteroperabilityIndex: 1,
+};
+
+that.GPSHelper = {
+ degToDmsRational: function (degFloat) {
+ var minFloat = degFloat % 1 * 60;
+ var secFloat = minFloat % 1 * 60;
+ var deg = Math.floor(degFloat);
+ var min = Math.floor(minFloat);
+ var sec = Math.round(secFloat * 100);
+
+ return [[deg, 1], [min, 1], [sec, 100]];
+ },
+
+ dmsRationalToDeg: function (dmsArray, ref) {
+ var sign = (ref === 'S' || ref === 'W') ? -1.0 : 1.0;
+ var deg = sign * dmsArray[0][0] / dmsArray[0][1] +
+ dmsArray[1][0] / dmsArray[1][1] / 60.0 +
+ dmsArray[2][0] / dmsArray[2][1] / 3600.0;
+
+ return deg;
}
-
-})();
+};
+
+
+// if (typeof exports !== 'undefined') {
+// if (typeof module !== 'undefined' && module.exports) {
+// exports = module.exports = that;
+// }
+// exports.piexif = that;
+// } else {
+// window.piexif = that;
+// }
+
+// (function (root, factory) {
+// if (typeof define === 'function' && define.amd) {
+// define([], factory);
+// }
+// else if (typeof module === 'object' && module.exports) {
+// module.exports = factory();
+// }
+// else {
+// root.piexif = factory();
+// }
+// }(typeof self !== 'undefined' ? self : this, function () {
+// return that;
+// }));
+
+export default that;
errorHandling.scriptsLoaded.piexif = true;
\ No newline at end of file
diff --git a/scripts/lib/png-metadata.js b/scripts/lib/png-metadata.js
index 2ae9155..6ae7879 100644
--- a/scripts/lib/png-metadata.js
+++ b/scripts/lib/png-metadata.js
@@ -149,4 +149,21 @@ function crc32(str) {
return (crc ^ (-1)) >>> 0;
}
+// (function (root, factory) {
+// if (typeof define === 'function' && define.amd) {
+// define([], factory);
+// }
+// else if (typeof module === 'object' && module.exports) {
+// module.exports = factory();
+// }
+// else {
+// root.png_metadata = factory();
+// }
+// }(typeof self !== 'undefined' ? self : this, function () {
+// return metadata;
+// }));
+
+export default metadata;
+
+
errorHandling.scriptsLoaded.png_metadata = true;
\ No newline at end of file
diff --git a/scripts/listeners/DecodeListeners.js b/scripts/listeners/DecodeListeners.js
index 9e3d07a..42a18ae 100644
--- a/scripts/listeners/DecodeListeners.js
+++ b/scripts/listeners/DecodeListeners.js
@@ -1,3 +1,25 @@
+// (function (root, factory) {
+// if (typeof define === 'function' && define.amd) {
+// define([
+// './ImageLoader.js'
+// ], factory);
+// }
+// else if (typeof module === 'object' && module.exports) {
+// module.exports = factory(
+// require(
+// './ImageLoader.js'
+// )
+// );
+// }
+// else {
+// root.DecodeListeners = factory(
+// root.ImageLoader
+// );
+// }
+// }(typeof self !== 'undefined' ? self : this, function (ImageLoader) {
+
+import ImageLoader from './ImageLoader.js';
+
// 设置是否读取元数据
function setReadMetadata(event) {
applicationState.isReadMetadata = event.target.checked;
@@ -7,7 +29,7 @@ function setReadMetadata(event) {
function decodeLoadImageFile(event) {
const file = event.target.files[0];
errorHandling.currCanvasIndex = 0;
- updateImageFromFile(file, (img) => {
+ ImageLoader.updateImageFromFile(file, (img) => {
PrismProcessor.PrismDecoder.updateImage(img);
});
event.target.value = '';
@@ -16,7 +38,7 @@ function decodeLoadImageFile(event) {
// 从URL加载图像
function decodeLoadImageURL(event) {
errorHandling.currCanvasIndex = 0;
- updateImageFromURL(event, (img) => {
+ ImageLoader.updateImageFromURL(event, (img) => {
PrismProcessor.PrismDecoder.updateImage(img);
});
event.target.previousElementSibling.value = '';
@@ -25,7 +47,7 @@ function decodeLoadImageURL(event) {
// 从剪贴板加载图像
function decodeLoadImageFromClipboard(event) {
errorHandling.currCanvasIndex = 0;
- updateImageFromClipboard(event, (img) => {
+ ImageLoader.updateImageFromClipboard(event, (img) => {
PrismProcessor.PrismDecoder.updateImage(img);
});
}
@@ -35,7 +57,7 @@ function decodeLoadImageFromPasteButton() {
errorHandling.currCanvasIndex = 0;
document.body.focus();
const pasteEvent = new ClipboardEvent('paste');
- updateImageFromClipboardDirect((img) => {
+ ImageLoader.updateImageFromClipboardDirect((img) => {
PrismProcessor.PrismDecoder.updateImage(img);
});
}
@@ -43,7 +65,7 @@ function decodeLoadImageFromPasteButton() {
// 从拖动加载图像
function decodeLoadImageFromDrag(event) {
errorHandling.currCanvasIndex = 0;
- dragDropLoadImage(event, (img) => {
+ ImageLoader.dragDropLoadImage(event, (img) => {
PrismProcessor.PrismDecoder.updateImage(img);
});
}
@@ -91,7 +113,7 @@ function decodeSetReverse(event) {
// 保存图像
function decodeSaveImage() {
- saveImageFromCanvas('decodeCanvas');
+ ImageLoader.saveImageFromCanvas('decodeCanvas');
}
// 保存原始图像
@@ -104,7 +126,7 @@ function decodeSaveSrcImage() {
const ctx = canvas.getContext('2d');
ctx.drawImage(PrismProcessor.PrismDecoder.img, 0, 0);
document.body.appendChild(canvas);
- saveImageFromCanvas('temp_srcCanvas', applicationState.isPng, false);
+ ImageLoader.saveImageFromCanvas('temp_srcCanvas', applicationState.isPng, false);
canvas.remove();
}
@@ -136,9 +158,6 @@ function decodeSetupEventListeners() {
// 保存图像
document.getElementById('decodeSaveImageButton').addEventListener('click', decodeSaveImage);
document.getElementById('decodeSaveSrcImageButton').addEventListener('click', decodeSaveSrcImage);
-
- // 切换页面
- document.getElementById('encodeButton').addEventListener('click', switchPage);
}
// 移除解码事件监听器
@@ -161,7 +180,19 @@ function decodeRemoveEventListeners() {
document.getElementById('decodeResetContrastButton').removeEventListener('click', decodeResetContrast);
document.getElementById('decodeSaveImageButton').removeEventListener('click', decodeSaveImage);
document.getElementById('decodeSaveSrcImageButton').removeEventListener('click', decodeSaveSrcImage);
- document.getElementById('encodeButton').removeEventListener('click', switchPage);
}
+// return {
+// decodeSetupEventListeners,
+// decodeRemoveEventListeners
+// };
+// }));
+
+const DecodeListeners = {
+ decodeSetupEventListeners,
+ decodeRemoveEventListeners
+};
+
+export default DecodeListeners;
+
errorHandling.scriptsLoaded.DecodeListeners = true;
\ No newline at end of file
diff --git a/scripts/listeners/EncodeListeners.js b/scripts/listeners/EncodeListeners.js
index 31eebe5..335dd16 100644
--- a/scripts/listeners/EncodeListeners.js
+++ b/scripts/listeners/EncodeListeners.js
@@ -1,8 +1,34 @@
+// (function (root, factory) {
+// if (typeof define === 'function' && define.amd) {
+// define([
+// './ImageLoader.js',
+// './DecodeListeners.js'
+// ], factory);
+// }
+// else if (typeof module === 'object' && module.exports) {
+// module.exports = factory(
+// require(
+// './ImageLoader.js',
+// './DecodeListeners.js'
+// )
+// );
+// }
+// else {
+// root.EncodeListeners = factory(
+// root.ImageLoader,
+// root.DecodeListeners
+// );
+// }
+// }(typeof self !== 'undefined' ? self : this, function (ImageLoader, DecodeListeners) {
+
+import ImageLoader from './ImageLoader.js';
+import DecodeListeners from './DecodeListeners.js';
+
// 从文件加载里图
function encodeLoadInnerImageFile(event) {
errorHandling.currCanvasIndex = 1;
const file = event.target.files[0];
- updateImageFromFile(file, (img) => {
+ ImageLoader.updateImageFromFile(file, (img) => {
PrismProcessor.PrismEncoder.updateInnerImage(img);
});
event.target.value = '';
@@ -12,7 +38,7 @@ function encodeLoadInnerImageFile(event) {
function encodeLoadCoverImageFile(event) {
errorHandling.currCanvasIndex = 2;
const file = event.target.files[0];
- updateImageFromFile(file, (img) => {
+ ImageLoader.updateImageFromFile(file, (img) => {
PrismProcessor.PrismEncoder.updateCoverImage(img);
});
event.target.value = '';
@@ -26,12 +52,12 @@ function updateMousePosition(event) {
function encodeLoadImageFromClipboard(event) {
if (mouseX < window.innerWidth / 2) {
errorHandling.currCanvasIndex = 1;
- updateImageFromClipboard(event, (img) => {
+ ImageLoader.updateImageFromClipboard(event, (img) => {
PrismProcessor.PrismEncoder.updateInnerImage(img);
});
} else {
errorHandling.currCanvasIndex = 2;
- updateImageFromClipboard(event, (img) => {
+ ImageLoader.updateImageFromClipboard(event, (img) => {
PrismProcessor.PrismEncoder.updateCoverImage(img);
});
}
@@ -40,7 +66,7 @@ function encodeLoadImageFromClipboard(event) {
// 从拖动加载里图
function encodeLoadInnerImageFromDrag(event) {
errorHandling.currCanvasIndex = 1;
- dragDropLoadImage(event, (img) => {
+ ImageLoader.dragDropLoadImage(event, (img) => {
PrismProcessor.PrismEncoder.updateInnerImage(img);
});
}
@@ -48,7 +74,7 @@ function encodeLoadInnerImageFromDrag(event) {
// 从拖动加载表图
function encodeLoadCoverImageFromDrag(event) {
errorHandling.currCanvasIndex = 2;
- dragDropLoadImage(event, (img) => {
+ ImageLoader.dragDropLoadImage(event, (img) => {
PrismProcessor.PrismEncoder.updateCoverImage(img);
});
}
@@ -277,19 +303,19 @@ function setSaveType(event) {
// 保存图像
function encodeSaveImage() {
- saveImageFromCanvas('outputCanvas', applicationState.isPng, true);
+ ImageLoader.saveImageFromCanvas('outputCanvas', applicationState.isPng, true);
}
// 以当前结果跳转显形界面
function jumpToDecode() {
if (PrismProcessor.PrismEncoder.innerImg && PrismProcessor.PrismEncoder.coverImg) {
- setDecodeValues(
+ ImageLoader.setDecodeValues(
PrismProcessor.PrismEncoder.isEncodeReverse,
PrismProcessor.PrismEncoder.innerThreshold,
PrismProcessor.PrismEncoder.innerContrast
);
const img = new Image();
- img.src = generateUrlFromCanvas('outputCanvas', applicationState.isPng, false);
+ img.src = ImageLoader.generateUrlFromCanvas('outputCanvas', applicationState.isPng, false);
img.onload = function () {
PrismProcessor.PrismDecoder.updateImage(img);
switchPage();
@@ -297,11 +323,42 @@ function jumpToDecode() {
}
}
+// 切换页面显示
+function switchPage() {
+ var decodePage = document.getElementById('decodePage');
+ var encodePage = document.getElementById('encodePage');
+ var decodeButton = document.getElementById('decodeButton');
+ var encodeButton = document.getElementById('encodeButton');
+ if (applicationState.currPageId === 'decodePage') {
+ encodePage.style.display = 'flex';
+ decodePage.style.display = 'none';
+ decodeButton.classList.remove('PageSwitchButtonSelected');
+ decodeButton.classList.add('PageSwitchButtonUnselected');
+ encodeButton.classList.remove('PageSwitchButtonUnselected');
+ encodeButton.classList.add('PageSwitchButtonSelected');
+ DecodeListeners.decodeRemoveEventListeners();
+ encodeSetUpEventListeners();
+ applicationState.currPageId = 'encodePage';
+ document.getElementById('decodeButton').addEventListener('click', switchPage);
+ document.getElementById('encodeButton').removeEventListener('click', switchPage);
+ } else {
+ decodePage.style.display = 'flex';
+ encodePage.style.display = 'none';
+ decodeButton.classList.remove('PageSwitchButtonUnselected');
+ decodeButton.classList.add('PageSwitchButtonSelected');
+ encodeButton.classList.remove('PageSwitchButtonSelected');
+ encodeButton.classList.add('PageSwitchButtonUnselected');
+ DecodeListeners.decodeSetupEventListeners();
+ encodeRemoveEventListeners();
+ applicationState.currPageId = 'decodePage';
+ document.getElementById('encodeButton').addEventListener('click', switchPage);
+ document.getElementById('decodeButton').removeEventListener('click', switchPage);
+ }
+}
+
// 设置编码事件监听器
function encodeSetUpEventListeners() {
- document.getElementById('decodeButton').addEventListener('click', switchPage);
-
document.getElementById('innerSourceFileInput').addEventListener('change', encodeLoadInnerImageFile);
document.getElementById('coverSourceFileInput').addEventListener('change', encodeLoadCoverImageFile);
if (!applicationState.isOnPhone) {
@@ -335,7 +392,6 @@ function encodeSetUpEventListeners() {
// 移除编码事件监听器
function encodeRemoveEventListeners() {
- document.getElementById('decodeButton').removeEventListener('click', switchPage);
document.getElementById('innerSourceFileInput').removeEventListener('change', encodeLoadInnerImageFile);
document.getElementById('coverSourceFileInput').removeEventListener('change', encodeLoadCoverImageFile);
if (!applicationState.isOnPhone) {
@@ -362,4 +418,20 @@ function encodeRemoveEventListeners() {
document.getElementById('encodeSaveImageButton').removeEventListener('click', encodeSaveImage);
}
+// return {
+// switchPage,
+// encodeSetUpEventListeners,
+// encodeRemoveEventListeners
+// };
+
+// }));
+
+const EncodeListeners = {
+ switchPage,
+ encodeSetUpEventListeners,
+ encodeRemoveEventListeners
+};
+
+export default EncodeListeners;
+
errorHandling.scriptsLoaded.EncodeListeners = true;
\ No newline at end of file
diff --git a/scripts/listeners/ImageLoader.js b/scripts/listeners/ImageLoader.js
new file mode 100644
index 0000000..ecb33c8
--- /dev/null
+++ b/scripts/listeners/ImageLoader.js
@@ -0,0 +1,474 @@
+// (function (root, factory) {
+// if (typeof define === 'function' && define.amd) {
+// define([
+// '../lib/piexif.js',
+// '../lib/encoder.js',
+// '../lib/png-metadata.js'
+// ], factory);
+// }
+// else if (typeof module === 'object' && module.exports) {
+// module.exports = factory(
+// require(
+// '../lib/piexif.js',
+// '../lib/encoder.js',
+// '../lib/png-metadata.js'
+// )
+// );
+// }
+// else {
+// root.ImageLoader = factory(
+// root.piexif,
+// root.JPEGEncoder,
+// root.png_metadata
+// );
+// }
+// }(typeof self !== 'undefined' ? self : this, function (piexif, JPEGEncoder, metadata) {
+
+import piexif from '../lib/piexif.js';
+import JPEGEncoder from '../lib/encoder.js';
+import metadata from '../lib/png-metadata.js';
+
+function copyImage(img) {
+ const canvas = document.createElement('canvas');
+ canvas.width = img.width;
+ canvas.height = img.height;
+ const ctx = canvas.getContext('2d');
+ ctx.drawImage(img, 0, 0);
+ const url = canvas.toDataURL();
+ canvas.remove();
+ return url;
+}
+
+// 调整对比度
+function truncate(value) {
+ return Math.min(255, Math.max(0, value));
+}
+// contrast范围:0-100
+function adjustContrastImgData(imageData, contrast) {
+ contrast = (contrast - 50) * 5.1;
+ const data = imageData.data;
+ const factor = (259 * (contrast + 255)) / (255 * (259 - contrast));
+
+ for (let i = 0; i < data.length; i += 4) {
+ data[i] = truncate(factor * (data[i] - 128) + 128);
+ data[i + 1] = truncate(factor * (data[i + 1] - 128) + 128);
+ data[i + 2] = truncate(factor * (data[i + 2] - 128) + 128);
+ }
+}
+
+// 克隆ImageData
+function cloneImageData(imageData) {
+ return new ImageData(new Uint8ClampedArray(imageData.data), imageData.width, imageData.height);
+}
+
+applicationState.currCanvasIndex = 0;
+function handleImageLoadError(error, callback) {
+ alert('无法加载图像, 请确定文件类型和状态。' + error);
+ if (errorHandling.defaultImg[errorHandling.currCanvasIndex].src) {
+ const img = new Image();
+ img.src = copyImage(errorHandling.defaultImg[errorHandling.currCanvasIndex]);
+ img.onload = () => {
+ callback(img);
+ };
+ }
+}
+
+function setDecodeValues(isReverse, threshold, contrast) {
+ if (contrast !== undefined) {
+ document.getElementById('decodeContrastRange').value = 100 - contrast;
+ PrismProcessor.PrismDecoder.contrast = 100 - contrast;
+ }
+ if (isReverse !== undefined) {
+ document.getElementById('decodeReverseInput').checked = isReverse;
+ PrismProcessor.PrismDecoder.reverse = isReverse;
+ } else {
+ isReverse = document.getElementById('decodeReverseInput').checked;
+ }
+ if (threshold !== undefined) {
+ if (isReverse) {
+ document.getElementById('decodeThresholdRange').value = 255 - threshold;
+ PrismProcessor.PrismDecoder.threshold = 255 - threshold;
+ } else {
+ document.getElementById('decodeThresholdRange').value = threshold;
+ PrismProcessor.PrismDecoder.threshold = threshold;
+ }
+ }
+}
+
+function getParametersFromString(str) {
+ console.log('reading from Metadata: ' + str);
+ if (str === undefined) {
+ return {
+ isValid: false
+ };
+ }
+ let isReverse, innerThreshold, innerContrast = 50;
+ switch (str.length) {
+ case 5:
+ innerContrast = parseInt(str.slice(3, 5), 16);
+ if (isNaN(innerContrast)) {
+ return {
+ isValid: false
+ };
+ }
+ case 3:
+ innerThreshold = parseInt(str.slice(1, 3), 16);
+ if (isNaN(innerThreshold)) {
+ return {
+ isValid: false
+ };
+ }
+ case 1:
+ if (str[0] !== '0' && str[0] !== '1') {
+ return {
+ isValid: false
+ };
+ }
+ isReverse = str[0] === '1';
+ break;
+ default:
+ return {
+ isValid: false
+ };
+ }
+ return {
+ isValid: true,
+ isReverse: isReverse,
+ innerThreshold: innerThreshold,
+ innerContrast: innerContrast
+ };
+}
+
+function setDecodeValuesWithJPEGMetadata(img) {
+ if (!applicationState.isReadMetadata) {
+ return;
+ }
+ try {
+ const exif = piexif.load(img.src);
+ const infoString = exif['0th'][piexif.ImageIFD.Make];
+ const { isValid, isReverse, innerThreshold, innerContrast } = getParametersFromString(infoString);
+ if (isValid) {
+ setDecodeValues(isReverse, innerThreshold, innerContrast);
+ }
+ } catch (error) {
+ throw error;
+ }
+}
+
+function setDecodeValuesWithPNGMetadata(img) {
+ if (!applicationState.isReadMetadata) {
+ return;
+ }
+ try {
+ const binaryString = atob(img.src.split(',')[1]);
+ let chunkList = metadata.splitChunk(binaryString);
+ for (let i in chunkList) {
+ let chunk = chunkList[i];
+ if (chunk.type === 'tEXt' || chunk.type === 'PRSM'/*前朝余孽*/) {
+ let infoString = chunk.data;
+ const { isValid, isReverse, innerThreshold, innerContrast } = getParametersFromString(infoString);
+ if (isValid) {
+ setDecodeValues(isReverse, innerThreshold, innerContrast);
+ }
+ break;
+ }
+ }
+ } catch (error) {
+ throw error;
+ }
+}
+
+function convertBlobToBase64(blob) {
+ return new Promise((resolve, reject) => {
+ const reader = new FileReader();
+ reader.onload = () => {
+ resolve(reader.result);
+ };
+ reader.onerror = (error) => {
+ reject(error);
+ };
+ reader.readAsDataURL(blob);
+ });
+}
+
+// 从源加载图像并返回
+async function loadImage(input, timeout = 5000) {
+ return new Promise((resolve, reject) => {
+ const img = new Image();
+ let timer;
+
+ img.onload = () => {
+ clearTimeout(timer);
+ if (errorHandling.currCanvasIndex === 0) {
+ try {
+ if (img.src.startsWith('data:image/jpeg;base64,')) {
+ setDecodeValuesWithJPEGMetadata(img);
+ } else if (img.src.startsWith('data:image/png;base64,')) {
+ setDecodeValuesWithPNGMetadata(img);
+ }
+ } catch (error) {
+ console.error('failed to read metadata: ' + error);
+ }
+ }
+ resolve(img);
+ };
+
+ img.onerror = (error) => {
+ clearTimeout(timer);
+ reject(error);
+ };
+
+ timer = setTimeout(() => {
+ img.src = '';
+ reject(new Error('加载图像超时'));
+ }, timeout);
+
+ if (typeof input === 'string') {
+ img.crossOrigin = 'anonymous';
+ img.src = input;
+ } else if (input instanceof File) {
+ const reader = new FileReader();
+ reader.onload = (e) => {
+ img.src = e.target.result;
+ };
+ reader.onerror = (error) => {
+ clearTimeout(timer);
+ reject(error);
+ };
+ reader.readAsDataURL(input);
+ } else {
+ clearTimeout(timer);
+ reject(new Error('不支持的输入类型'));
+ }
+ });
+}
+
+// 从文件加载图像,调用callback
+async function updateImageFromFile(file, callback) {
+ loadImage(file).then((img) => {
+ callback(img);
+ }).catch((error) => {
+ handleImageLoadError(error, callback);
+ });
+}
+
+// 从URL加载图像,调用callback
+async function updateImageFromURL(event, callback) {
+ const imageUrl = event.target.previousElementSibling.value;
+ loadImage(imageUrl).then((img) => {
+ callback(img);
+ }).catch((error) => {
+ handleImageLoadError(error, callback);
+ });
+}
+
+// 从剪贴板更新图像,调用callback
+async function updateImageFromClipboard(event, callback) {
+ const items = (event.clipboardData || event.originalEvent.clipboardData).items;
+ for (const item of items) {
+ if (item.type.indexOf('image') !== -1) {
+ const blob = item.getAsFile();
+ loadImage(blob).then((img) => {
+ callback(img);
+ }).catch((error) => {
+ handleImageLoadError(error, callback);
+ });
+ }
+ }
+}
+
+// 直接从剪贴板更新图像,调用callback
+async function updateImageFromClipboardDirect(callback) {
+ try {
+ const permission = await navigator.permissions.query({ name: 'clipboard-read' });
+ if (permission.state === 'granted' || permission.state === 'prompt') {
+ const clipboardItems = await navigator.clipboard.read();
+ for (const item of clipboardItems) {
+ if (item.types.some(type => type.startsWith('image/'))) {
+ const blob = await item.getType(item.types.find(type => type.startsWith('image/')));
+ const url = await convertBlobToBase64(blob);
+ loadImage(url).then((img) => {
+ callback(img);
+ }).catch((error) => {
+ throw error;
+ });
+ } else {
+ alert('剪贴板中没有图片');
+ }
+ }
+ } else {
+ alert('没有剪贴板读取权限');
+ }
+ } catch (error) {
+ handleImageLoadError(error, callback);
+ }
+}
+
+// 拖动文件加载图像
+async function dragDropLoadImage(event, callback) {
+ event.preventDefault();
+ if (event.dataTransfer.items) {
+ for (const item of event.dataTransfer.items) {
+ if (item.kind === 'file') {
+ const file = item.getAsFile();
+ loadImage(file).then((img) => {
+ callback(img);
+ }).catch((error) => {
+ handleImageLoadError(error, callback);
+ });
+ }
+ }
+ }
+}
+
+// 保存图像
+function downloadFromLink(url, fileName) {
+ if (!applicationState.isDownloadNotSupported) {
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = fileName;
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+ } else {
+ const byteString = atob(url.split(',')[1]);
+ const mimeString = url.split(',')[0].split(':')[1].split(';')[0];
+ const ab = new ArrayBuffer(byteString.length);
+ const ia = new Uint8Array(ab);
+ for (let i = 0; i < byteString.length; i++) {
+ ia[i] = byteString.charCodeAt(i);
+ }
+ const blob = new Blob([ab], { type: mimeString });
+
+ const objectURL = URL.createObjectURL(blob);
+ const newTab = window.open();
+ newTab.document.write('');
+ newTab.document.close();
+ newTab.addEventListener('beforeunload', () => {
+ URL.revokeObjectURL(objectURL);
+ });
+ }
+}
+function generateUrlFromCanvas(canvasId, isPng = true, writeInMetadata = false) {
+ const isReverse = PrismProcessor.PrismEncoder.isEncodeReverse;
+ const threshold = PrismProcessor.PrismEncoder.innerThreshold;
+ const contrast = PrismProcessor.PrismEncoder.innerContrast;
+ const canvas = document.getElementById(canvasId);
+ if (isPng) {
+ if (writeInMetadata) {
+ return writeChunkDataPNG(
+ canvas.toDataURL('image/png'),
+ isReverse,
+ threshold,
+ contrast);
+ } else {
+ return canvas.toDataURL('image/png');
+ }
+ } else {
+ const ctx = canvas.getContext('2d');
+ const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
+ const encoder = new JPEGEncoder(100);
+ const jpegData = encoder.encode(imageData, 100);
+ let binary = '';
+ const bytes = new Uint8Array(jpegData);
+ const len = bytes.byteLength;
+ for (let i = 0; i < len; i++) {
+ binary += String.fromCharCode(bytes[i]);
+ }
+ if (writeInMetadata) {
+ return writeMetadataJPEG(
+ `data:image/jpeg;base64,${btoa(binary)}`,
+ isReverse,
+ threshold,
+ contrast);
+ } else {
+ return `data:image/jpeg;base64,${btoa(binary)}`;
+ }
+ }
+}
+function saveImageFromCanvas(canvasId, isPng = true, writeInMetadata = false) {
+ const timestamp = new Date().getTime();
+ if (PrismProcessor.PrismEncoder.isCoverMirage && !isPng) {
+ alert('JPEG格式不支持幻影坦克!请谨慎选择。');
+ }
+ const fileName = `output_${timestamp}.${isPng ? 'png' : 'jpg'}`;
+ downloadFromLink(generateUrlFromCanvas(canvasId, isPng, writeInMetadata), fileName);
+}
+
+// 生成infoString
+function generateInfoString(isReverse, innerThreshold, innerContrast) {
+ const infoString = (isReverse ? '1' : '0') + innerThreshold.toString(16).padStart(2, '0') + innerContrast.toString(16).padStart(2, '0');
+ console.log('writing to Metadata: ' + infoString);
+ return infoString;
+}
+
+// 写入元数据(照相机信息)
+function writeMetadataJPEG(imgURL, isReverse, innerThreshold, innerContrast) {
+ const infoString = generateInfoString(isReverse, innerThreshold, innerContrast);
+ let zeroth = {};
+ zeroth[piexif.ImageIFD.Make] = infoString;
+ const exifObj = { '0th': zeroth };
+ const exifbytes = piexif.dump(exifObj);
+ const inserted = piexif.insert(exifbytes, imgURL);
+ return inserted;
+}
+
+// 写入tEXt块(PNG)
+function writeChunkDataPNG(imgURL, isReverse, innerThreshold, innerContrast) {
+ const binaryData = atob(imgURL.split(',')[1]);
+ let chunkList = metadata.splitChunk(binaryData);
+ const infoString = generateInfoString(isReverse, innerThreshold, innerContrast);
+ let istEXtFound = false;
+ for (let i in chunkList) {
+ let chunk = chunkList[i];
+ if (chunk.type === 'tEXt') {
+ chunk.data = infoString;
+ chunkList[i] = chunk;
+ istEXtFound = true;
+ break;
+ }
+ }
+ if (!istEXtFound) {
+ let chunk = metadata.createChunk('tEXt', infoString);
+ const iend = chunkList.pop();
+ chunkList.push(chunk);
+ chunkList.push(iend);
+ }
+ const output = metadata.joinChunk(chunkList);
+ return `data:image/png;base64,${btoa(output)}`;
+}
+
+// return {
+// copyImage,
+// adjustContrastImgData,
+// cloneImageData,
+// setDecodeValues,
+// updateImageFromFile,
+// updateImageFromURL,
+// updateImageFromClipboard,
+// updateImageFromClipboardDirect,
+// dragDropLoadImage,
+// downloadFromLink,
+// saveImageFromCanvas,
+// generateUrlFromCanvas
+// };
+// }));
+
+const ImageLoader = {
+ copyImage,
+ adjustContrastImgData,
+ cloneImageData,
+ setDecodeValues,
+ updateImageFromFile,
+ updateImageFromURL,
+ updateImageFromClipboard,
+ updateImageFromClipboardDirect,
+ dragDropLoadImage,
+ downloadFromLink,
+ saveImageFromCanvas,
+ generateUrlFromCanvas
+};
+
+export default ImageLoader;
+
+errorHandling.scriptsLoaded.ImageLoader = true;
\ No newline at end of file
diff --git a/scripts/listeners/UniversalListeners.js b/scripts/listeners/UniversalListeners.js
index 54ebd2f..4f52d7a 100644
--- a/scripts/listeners/UniversalListeners.js
+++ b/scripts/listeners/UniversalListeners.js
@@ -1,436 +1,25 @@
-function copyImage(img) {
- const canvas = document.createElement('canvas');
- canvas.width = img.width;
- canvas.height = img.height;
- const ctx = canvas.getContext('2d');
- ctx.drawImage(img, 0, 0);
- const url = canvas.toDataURL();
- canvas.remove();
- return url;
-}
-
-applicationState.currCanvasIndex = 0;
-function handleImageLoadError(error, callback) {
- alert('无法加载图像, 请确定文件类型和状态。' + error);
- if (errorHandling.defaultImg[errorHandling.currCanvasIndex].src) {
- const img = new Image();
- img.src = copyImage(errorHandling.defaultImg[errorHandling.currCanvasIndex]);
- img.onload = () => {
- callback(img);
- };
- }
-}
-
-function setDecodeValues(isReverse, threshold, contrast) {
- if (contrast !== undefined) {
- document.getElementById('decodeContrastRange').value = 100 - contrast;
- PrismProcessor.PrismDecoder.contrast = 100 - contrast;
- }
- if (isReverse !== undefined) {
- document.getElementById('decodeReverseInput').checked = isReverse;
- PrismProcessor.PrismDecoder.reverse = isReverse;
- } else {
- isReverse = document.getElementById('decodeReverseInput').checked;
- }
- if (threshold !== undefined) {
- if (isReverse) {
- document.getElementById('decodeThresholdRange').value = 255 - threshold;
- PrismProcessor.PrismDecoder.threshold = 255 - threshold;
- } else {
- document.getElementById('decodeThresholdRange').value = threshold;
- PrismProcessor.PrismDecoder.threshold = threshold;
- }
- }
-}
-
-function getParametersFromString(str) {
- console.log('reading from Metadata: ' + str);
- if (str === undefined) {
- return {
- isValid: false
- };
- }
- let isReverse, innerThreshold, innerContrast = 50;
- switch (str.length) {
- case 5:
- innerContrast = parseInt(str.slice(3, 5), 16);
- if (isNaN(innerContrast)) {
- return {
- isValid: false
- };
- }
- case 3:
- innerThreshold = parseInt(str.slice(1, 3), 16);
- if (isNaN(innerThreshold)) {
- return {
- isValid: false
- };
- }
- case 1:
- if (str[0] !== '0' && str[0] !== '1') {
- return {
- isValid: false
- };
- }
- isReverse = str[0] === '1';
- break;
- default:
- return {
- isValid: false
- };
- }
- return {
- isValid: true,
- isReverse: isReverse,
- innerThreshold: innerThreshold,
- innerContrast: innerContrast
- };
-}
-
-function setDecodeValuesWithJPEGMetadata(img) {
- if (!applicationState.isReadMetadata) {
- return;
- }
- try {
- const exif = piexif.load(img.src);
- const infoString = exif['0th'][piexif.ImageIFD.Make];
- const { isValid, isReverse, innerThreshold, innerContrast } = getParametersFromString(infoString);
- if (isValid) {
- setDecodeValues(isReverse, innerThreshold, innerContrast);
- }
- } catch (error) {
- throw error;
- }
-}
-
-function setDecodeValuesWithPNGMetadata(img) {
- if (!applicationState.isReadMetadata) {
- return;
- }
- try {
- const binaryString = atob(img.src.split(',')[1]);
- let chunkList = metadata.splitChunk(binaryString);
- for (let i in chunkList) {
- let chunk = chunkList[i];
- if (chunk.type === 'tEXt' || chunk.type === 'PRSM'/*前朝余孽*/) {
- let infoString = chunk.data;
- const { isValid, isReverse, innerThreshold, innerContrast } = getParametersFromString(infoString);
- if (isValid) {
- setDecodeValues(isReverse, innerThreshold, innerContrast);
- }
- break;
- }
- }
- } catch (error) {
- throw error;
- }
-}
-
-function convertBlobToBase64(blob) {
- return new Promise((resolve, reject) => {
- const reader = new FileReader();
- reader.onload = () => {
- resolve(reader.result);
- };
- reader.onerror = (error) => {
- reject(error);
- };
- reader.readAsDataURL(blob);
- });
-}
-
-// 从源加载图像并返回
-async function loadImage(input, timeout = 5000) {
- return new Promise((resolve, reject) => {
- const img = new Image();
- let timer;
-
- img.onload = () => {
- clearTimeout(timer);
- if (errorHandling.currCanvasIndex === 0) {
- try {
- if (img.src.startsWith('data:image/jpeg;base64,')) {
- setDecodeValuesWithJPEGMetadata(img);
- } else if (img.src.startsWith('data:image/png;base64,')) {
- setDecodeValuesWithPNGMetadata(img);
- }
- } catch (error) {
- console.error('failed to read metadata: ' + error);
- }
- }
- resolve(img);
- };
-
- img.onerror = (error) => {
- clearTimeout(timer);
- reject(error);
- };
-
- timer = setTimeout(() => {
- img.src = '';
- reject(new Error('加载图像超时'));
- }, timeout);
-
- if (typeof input === 'string') {
- img.crossOrigin = 'anonymous';
- img.src = input;
- } else if (input instanceof File) {
- const reader = new FileReader();
- reader.onload = (e) => {
- img.src = e.target.result;
- };
- reader.onerror = (error) => {
- clearTimeout(timer);
- reject(error);
- };
- reader.readAsDataURL(input);
- } else {
- clearTimeout(timer);
- reject(new Error('不支持的输入类型'));
- }
- });
-}
-
-// 从文件加载图像,调用callback
-async function updateImageFromFile(file, callback) {
- loadImage(file).then((img) => {
- callback(img);
- }).catch((error) => {
- handleImageLoadError(error, callback);
- });
-}
-
-// 从URL加载图像,调用callback
-async function updateImageFromURL(event, callback) {
- const imageUrl = event.target.previousElementSibling.value;
- loadImage(imageUrl).then((img) => {
- callback(img);
- }).catch((error) => {
- handleImageLoadError(error, callback);
- });
-}
-
-// 从剪贴板更新图像,调用callback
-async function updateImageFromClipboard(event, callback) {
- const items = (event.clipboardData || event.originalEvent.clipboardData).items;
- for (const item of items) {
- if (item.type.indexOf('image') !== -1) {
- const blob = item.getAsFile();
- loadImage(blob).then((img) => {
- callback(img);
- }).catch((error) => {
- handleImageLoadError(error, callback);
- });
- }
- }
-}
-
-// 直接从剪贴板更新图像,调用callback
-async function updateImageFromClipboardDirect(callback) {
- try {
- const permission = await navigator.permissions.query({ name: 'clipboard-read' });
- if (permission.state === 'granted' || permission.state === 'prompt') {
- const clipboardItems = await navigator.clipboard.read();
- for (const item of clipboardItems) {
- if (item.types.some(type => type.startsWith('image/'))) {
- const blob = await item.getType(item.types.find(type => type.startsWith('image/')));
- const url = await convertBlobToBase64(blob);
- loadImage(url).then((img) => {
- callback(img);
- }).catch((error) => {
- throw error;
- });
- } else {
- alert('剪贴板中没有图片');
- }
- }
- } else {
- alert('没有剪贴板读取权限');
- }
- } catch (error) {
- handleImageLoadError(error, callback);
- }
-}
-
-// 拖动文件加载图像
-async function dragDropLoadImage(event, callback) {
- event.preventDefault();
- if (event.dataTransfer.items) {
- for (const item of event.dataTransfer.items) {
- if (item.kind === 'file') {
- const file = item.getAsFile();
- loadImage(file).then((img) => {
- callback(img);
- }).catch((error) => {
- handleImageLoadError(error, callback);
- });
- }
- }
- }
-}
-
-// 禁用滚动
-function disableScroll() {
- // console.log('scroll disabled');
- document.addEventListener('touchend', enableScroll);
- applicationState.scrollPosition = window.scrollY;
- window.onscroll = function () {
- window.scrollTo(0, applicationState.scrollPosition);
- };
-}
-
-// 恢复滚动
-function enableScroll() {
- // alert('scroll enabled');
- window.onscroll = null;
- document.removeEventListener('touchend', enableScroll);
-}
-
-// 保存图像
-function downloadFromLink(url, fileName) {
- if (!applicationState.isDownloadNotSupported) {
- const link = document.createElement('a');
- link.href = url;
- link.download = fileName;
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- } else {
- const byteString = atob(url.split(',')[1]);
- const mimeString = url.split(',')[0].split(':')[1].split(';')[0];
- const ab = new ArrayBuffer(byteString.length);
- const ia = new Uint8Array(ab);
- for (let i = 0; i < byteString.length; i++) {
- ia[i] = byteString.charCodeAt(i);
- }
- const blob = new Blob([ab], { type: mimeString });
-
- const objectURL = URL.createObjectURL(blob);
- const newTab = window.open();
- newTab.document.write('');
- newTab.document.close();
- newTab.addEventListener('beforeunload', () => {
- URL.revokeObjectURL(objectURL);
- });
- }
-}
-function generateUrlFromCanvas(canvasId, isPng = true, writeInMetadata = false) {
- const isReverse = PrismProcessor.PrismEncoder.isEncodeReverse;
- const threshold = PrismProcessor.PrismEncoder.innerThreshold;
- const contrast = PrismProcessor.PrismEncoder.innerContrast;
- const canvas = document.getElementById(canvasId);
- if (isPng) {
- if (writeInMetadata) {
- return writeChunkDataPNG(
- canvas.toDataURL('image/png'),
- isReverse,
- threshold,
- contrast);
- } else {
- return canvas.toDataURL('image/png');
- }
- } else {
- const ctx = canvas.getContext('2d');
- const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
- const encoder = new JPEGEncoder(100);
- const jpegData = encoder.encode(imageData, 100);
- let binary = '';
- const bytes = new Uint8Array(jpegData);
- const len = bytes.byteLength;
- for (let i = 0; i < len; i++) {
- binary += String.fromCharCode(bytes[i]);
- }
- if (writeInMetadata) {
- return writeMetadataJPEG(
- `data:image/jpeg;base64,${btoa(binary)}`,
- isReverse,
- threshold,
- contrast);
- } else {
- return `data:image/jpeg;base64,${btoa(binary)}`;
- }
- }
-}
-function saveImageFromCanvas(canvasId, isPng = true, writeInMetadata = false) {
- const timestamp = new Date().getTime();
- if (PrismProcessor.PrismEncoder.isCoverMirage && !isPng) {
- alert('JPEG格式不支持幻影坦克!请谨慎选择。');
- }
- const fileName = `output_${timestamp}.${isPng ? 'png' : 'jpg'}`;
- downloadFromLink(generateUrlFromCanvas(canvasId, isPng, writeInMetadata), fileName);
-}
-
-// 生成infoString
-function generateInfoString(isReverse, innerThreshold, innerContrast) {
- const infoString = (isReverse ? '1' : '0') + innerThreshold.toString(16).padStart(2, '0') + innerContrast.toString(16).padStart(2, '0');
- console.log('writing to Metadata: ' + infoString);
- return infoString;
-}
-
-// 写入元数据(照相机信息)
-function writeMetadataJPEG(imgURL, isReverse, innerThreshold, innerContrast) {
- const infoString = generateInfoString(isReverse, innerThreshold, innerContrast);
- let zeroth = {};
- zeroth[piexif.ImageIFD.Make] = infoString;
- const exifObj = { '0th': zeroth };
- const exifbytes = piexif.dump(exifObj);
- const inserted = piexif.insert(exifbytes, imgURL);
- return inserted;
-}
-
-// 写入tEXt块(PNG)
-function writeChunkDataPNG(imgURL, isReverse, innerThreshold, innerContrast) {
- const binaryData = atob(imgURL.split(',')[1]);
- let chunkList = metadata.splitChunk(binaryData);
- const infoString = generateInfoString(isReverse, innerThreshold, innerContrast);
- let istEXtFound = false;
- for (let i in chunkList) {
- let chunk = chunkList[i];
- if (chunk.type === 'tEXt') {
- chunk.data = infoString;
- chunkList[i] = chunk;
- istEXtFound = true;
- break;
- }
- }
- if (!istEXtFound) {
- let chunk = metadata.createChunk('tEXt', infoString);
- const iend = chunkList.pop();
- chunkList.push(chunk);
- chunkList.push(iend);
- }
- const output = metadata.joinChunk(chunkList);
- return `data:image/png;base64,${btoa(output)}`;
-}
-
-// 切换页面显示
-function switchPage() {
- var decodePage = document.getElementById('decodePage');
- var encodePage = document.getElementById('encodePage');
- var decodeButton = document.getElementById('decodeButton');
- var encodeButton = document.getElementById('encodeButton');
- if (applicationState.currPageId === 'decodePage') {
- encodePage.style.display = 'flex';
- decodePage.style.display = 'none';
- decodeButton.classList.remove('PageSwitchButtonSelected');
- decodeButton.classList.add('PageSwitchButtonUnselected');
- encodeButton.classList.remove('PageSwitchButtonUnselected');
- encodeButton.classList.add('PageSwitchButtonSelected');
- decodeRemoveEventListeners();
- encodeSetUpEventListeners();
- applicationState.currPageId = 'encodePage';
- } else {
- decodePage.style.display = 'flex';
- encodePage.style.display = 'none';
- decodeButton.classList.remove('PageSwitchButtonUnselected');
- decodeButton.classList.add('PageSwitchButtonSelected');
- encodeButton.classList.remove('PageSwitchButtonSelected');
- encodeButton.classList.add('PageSwitchButtonUnselected');
- decodeSetupEventListeners();
- encodeRemoveEventListeners();
- applicationState.currPageId = 'decodePage';
- }
-}
+// (function (root, factory) {
+// if (typeof define === 'function' && define.amd) {
+// define([
+// './DecodeListeners.js',
+// './EncodeListeners.js'
+// ], factory);
+// }
+// else if (typeof module === 'object' && module.exports) {
+// module.exports = factory(
+// require(
+// './DecodeListeners.js',
+// './EncodeListeners.js'
+// ),
+// );
+// }
+// else {
+// root.UniversalListeners = factory(
+// root.DecodeListeners,
+// root.EncodeListeners
+// );
+// }
+// }(typeof self !== 'undefined' ? self : this, function (DecodeListeners, EncodeListeners) {
function universalSetupEventListeners() {
// 隐私政策按钮事件监听
@@ -473,30 +62,16 @@ function universalSetupEventListeners() {
});
}
-// 调整对比度
-function truncate(value) {
- return Math.min(255, Math.max(0, value));
-}
-// contrast范围:0-100
-function adjustContrastImgData(imageData, contrast) {
- contrast = (contrast - 50) * 5.1;
- const data = imageData.data;
- const factor = (259 * (contrast + 255)) / (255 * (259 - contrast));
+// return {
+// universalSetupEventListeners,
+// };
- for (let i = 0; i < data.length; i += 4) {
- data[i] = truncate(factor * (data[i] - 128) + 128);
- data[i + 1] = truncate(factor * (data[i + 1] - 128) + 128);
- data[i + 2] = truncate(factor * (data[i + 2] - 128) + 128);
- }
-}
+// }));
-// function getReverseContrast(contrast) {
-// return (33947130 * contrast) / (65025 * (contrast - 259) - 67081 * (contrast + 255))
-// }
+const UniversalListeners = {
+ universalSetupEventListeners,
+};
-// 克隆ImageData
-function cloneImageData(imageData) {
- return new ImageData(new Uint8ClampedArray(imageData.data), imageData.width, imageData.height);
-}
+export default UniversalListeners;
errorHandling.scriptsLoaded.UniversalListeners = true;
\ No newline at end of file
diff --git a/scripts/prismProcessor/PrismDecoder.js b/scripts/prismProcessor/PrismDecoder.js
index bd6e15c..9a1a356 100644
--- a/scripts/prismProcessor/PrismDecoder.js
+++ b/scripts/prismProcessor/PrismDecoder.js
@@ -1,3 +1,25 @@
+// (function (root, factory) {
+// if (typeof define === 'function' && define.amd) {
+// define([
+// '../listeners/ImageLoader.js'
+// ], factory);
+// }
+// else if (typeof module === 'object' && module.exports) {
+// module.exports = factory(
+// require(
+// '../listeners/ImageLoader.js'
+// ),
+// );
+// }
+// else {
+// root.PrismDecoder = factory(
+// root.ImageLoader
+// );
+// }
+// }(typeof self !== 'undefined' ? self : this, function (ImageLoader) {
+
+import ImageLoader from '../listeners/ImageLoader.js';
+
class PrismDecoder {
constructor(decodeCanvasId, defaultArguments) {
this.img = null;
@@ -28,7 +50,7 @@ class PrismDecoder {
}
processImage() {
- this.decodedImgData = cloneImageData(this.imgData);
+ this.decodedImgData = ImageLoader.cloneImageData(this.imgData);
var data = this.decodedImgData.data;
if (!this.reverse) {
var ratio = 255 / this.threshold;
@@ -112,10 +134,16 @@ class PrismDecoder {
}
adjustContrast() {
- let imgDataCopy = cloneImageData(this.decodedImgData);
- adjustContrastImgData(imgDataCopy, this.contrast);
+ let imgDataCopy = ImageLoader.cloneImageData(this.decodedImgData);
+ ImageLoader.adjustContrastImgData(imgDataCopy, this.contrast);
this.showImage(imgDataCopy);
}
}
+// return PrismDecoder;
+
+// }));
+
+export default PrismDecoder;
+
errorHandling.scriptsLoaded.PrismDecoder = true;
\ No newline at end of file
diff --git a/scripts/prismProcessor/PrismEncoder.js b/scripts/prismProcessor/PrismEncoder.js
index 6ae9b07..713cae1 100644
--- a/scripts/prismProcessor/PrismEncoder.js
+++ b/scripts/prismProcessor/PrismEncoder.js
@@ -1,3 +1,25 @@
+// (function (root, factory) {
+// if (typeof define === 'function' && define.amd) {
+// define([
+// '../listeners/ImageLoader.js'
+// ], factory);
+// }
+// else if (typeof module === 'object' && module.exports) {
+// module.exports = factory(
+// require(
+// '../listeners/ImageLoader.js'
+// ),
+// );
+// }
+// else {
+// root.PrismEncoder = factory(
+// root.ImageLoader
+// );
+// }
+// }(typeof self !== 'undefined' ? self : this, function (ImageLoader) {
+
+import ImageLoader from '../listeners/ImageLoader.js';
+
class PrismEncoder {
constructor(innerCanvasId, coverCanvasId, outputCanvasId, defaultArguments) {
this.innerImg = null;
@@ -240,16 +262,21 @@ class PrismEncoder {
}
adjustInnerContrast() {
- this.innerImgdataContrast = cloneImageData(this.innerImgdata);
- adjustContrastImgData(this.innerImgdataContrast, this.innerContrast);
+ this.innerImgdataContrast = ImageLoader.cloneImageData(this.innerImgdata);
+ ImageLoader.adjustContrastImgData(this.innerImgdataContrast, this.innerContrast);
this.showImage(this.innerImgdataContrast, this.innerCanvas);
}
adjustCoverContrast() {
- this.coverImgdataContrast = cloneImageData(this.coverImgdata);
- adjustContrastImgData(this.coverImgdataContrast, this.coverContrast);
+ this.coverImgdataContrast = ImageLoader.cloneImageData(this.coverImgdata);
+ ImageLoader.adjustContrastImgData(this.coverImgdataContrast, this.coverContrast);
this.showImage(this.coverImgdataContrast, this.coverCanvas);
}
}
+// return PrismEncoder;
+// }));
+
+export default PrismEncoder;
+
errorHandling.scriptsLoaded.PrismEncoder = true;
\ No newline at end of file
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 0000000..cc8a23a
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,39 @@
+const path = require('path');
+const webpack = require('webpack');
+
+module.exports = {
+ entry: './scripts/init.js',
+ output: {
+ filename: 'main.js',
+ path: path.resolve(__dirname, './docs/src'),
+ },
+ module: {
+ rules: [
+ {
+ test: /\.js$/,
+ exclude: /node_modules/,
+ use: {
+ loader: 'babel-loader',
+ options: {
+ presets: ['@babel/preset-env'],
+ },
+ },
+ },
+ ],
+ },
+ plugins: [
+ new webpack.ProvidePlugin({
+ Buffer: ['buffer', 'Buffer']
+ })
+ ],
+ resolve: {
+ fallback: {
+ buffer: require.resolve('buffer/')
+ }
+ },
+ mode: 'production',
+ // devtool: 'source-map',
+ optimization: {
+ minimize: true
+ }
+};
\ No newline at end of file