From 7020a092b89c1bf993f72551dc355717a93f837c Mon Sep 17 00:00:00 2001 From: Kollkas Date: Mon, 29 Jul 2024 04:56:45 +0200 Subject: [PATCH 1/7] layout optimizations --- styles/style.css | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/styles/style.css b/styles/style.css index 439e286..4177ab2 100644 --- a/styles/style.css +++ b/styles/style.css @@ -458,23 +458,30 @@ a { } #privacyPolicy { + background-color: var(--secondary-background-color); text-align: center; color: var(--front-color); max-width: min(100%, 600px); font-size: var(--small-font-size); display: none; + padding: 10px; + border-radius: 20px; + margin-top: 10px; + margin-bottom: 10px; } #versionRecordTable { - border: 1px solid var(--element-border-color); + background-color: var(--secondary-background-color); border-collapse: collapse; font-size: var(--small-font-size); max-width: min(100%, 600px); - margin-top: 20px; + padding: 10px; + border-radius: 20px; display: none; + margin-top: 10px; + margin-bottom: 10px; } #versionRecordTable td { - border: 1px solid var(--element-border-color); padding: 10px; } \ No newline at end of file From 3ca60e62a0203a93167d07615e338028382b4018 Mon Sep 17 00:00:00 2001 From: Kollkas Date: Mon, 29 Jul 2024 04:58:34 +0200 Subject: [PATCH 2/7] back to fork --- CNAME | 2 +- README.md | 86 +------------------------------------------------------ 2 files changed, 2 insertions(+), 86 deletions(-) diff --git a/CNAME b/CNAME index d4ec0f1..6ec9bb4 100644 --- a/CNAME +++ b/CNAME @@ -1 +1 @@ -prism.uyanide.com \ No newline at end of file +fork.uyanide.com \ No newline at end of file diff --git a/README.md b/README.md index 19a3096..58f7b0b 100644 --- a/README.md +++ b/README.md @@ -1,85 +1 @@ - 第一次写前端…… - -# 基于色阶分离与像素交错的隐写图显形与制作工具 - -## 链接 (已使用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/JPG的格式区别详见Q&A第6条。 -3. 请确认在发送图片时勾选了“原图选项”。 -4. 如果使用的是百度贴吧,请确认在设置中关闭了图片水印。如果有水印百度会对图片进行二次处理,可能会产生意料之外的图片压缩。 - -### 4. 为何从URL加载图像一直无效?明明复制到浏览器地址栏可以正常访问? -恕我才疏学浅,目前仍未找到完美解决跨源访问问题的方案,某些URL也因此无法正常加载。如果有方便使用且大陆可正常访问的CORS代理服务或者其他任何解决方案欢迎指教。 - -### 5. 图像为何保存失败? -可以更换浏览器重试。另外如果可以的话请告诉我你使用的浏览器,我在验证后会将其列为特例以使用另一种图像保存方案。目前确认无法通过常规方法正常保存图片的浏览器有且仅有小米系统默认内置浏览器。 - -### 6. 保存为PNG格式和JPEG格式有何区别? - -1. JPEG格式为有损压缩,即便目前已经通过引入jpeg-js库保证了较高的图像保存质量,仍然会不可避免地在显形时出现噪点等其他问题。 -2. PNG格式虽然可以保证较高的显形质量,但却极易被社交平台强制压缩,影响传输后的图像质量。 -3. JPEG格式不支持透明度,因此当表图为幻影坦克时不建议使用JPEG格式导出。 - -### 7. 为什么有些图片可以自动调整参数,自动显形,有些却不行? -本工具的自动显形是通过写入图片元数据实现的,如果图片本身不具备元数据/传输过程中丢失元数据便无法做到自动显形。1.3版本后制作图片时均会自动写入生成所用的参数。 \ No newline at end of file +没错,我是澄闪厨。 \ No newline at end of file From 1f13142c4322a4028160ed3ee3be0dc4c2d5550f Mon Sep 17 00:00:00 2001 From: Kollkas Date: Tue, 6 Aug 2024 17:34:05 +0200 Subject: [PATCH 3/7] webpack may help --- .gitignore | 3 +- package-lock.json | 3986 ++++++++++++++ package.json | 22 + .../DefaultArguments.json | 6 +- {styles => public/css}/style.css | 0 {styles => public/css}/switch.css | 0 index.html => public/index.html | 18 +- {resources => public/res}/buta.jpg | Bin {resources => public/res}/default.png | Bin {resources => public/res}/neko.ico | Bin {resources => public/res}/neko.jpg | Bin public/src/main.js | 2 + public/src/main.js.LICENSE.txt | 10 + scripts/DefaultArguments.js | 19 + scripts/init.js | 54 +- scripts/lib/encoder.js | 28 +- scripts/lib/piexif.js | 4617 +++++++++-------- scripts/lib/png-metadata.js | 17 + scripts/listeners/DecodeListeners.js | 53 +- scripts/listeners/EncodeListeners.js | 96 +- scripts/listeners/ImageLoader.js | 474 ++ scripts/listeners/UniversalListeners.js | 485 +- scripts/prismProcessor/PrismDecoder.js | 34 +- scripts/prismProcessor/PrismEncoder.js | 35 +- webpack.config.js | 39 + 25 files changed, 7185 insertions(+), 2813 deletions(-) create mode 100644 package-lock.json create mode 100644 package.json rename DefaultArguments.json => public/DefaultArguments.json (84%) rename {styles => public/css}/style.css (100%) rename {styles => public/css}/switch.css (100%) rename index.html => public/index.html (95%) rename {resources => public/res}/buta.jpg (100%) rename {resources => public/res}/default.png (100%) rename {resources => public/res}/neko.ico (100%) rename {resources => public/res}/neko.jpg (100%) create mode 100644 public/src/main.js create mode 100644 public/src/main.js.LICENSE.txt create mode 100644 scripts/listeners/ImageLoader.js create mode 100644 webpack.config.js 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/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/DefaultArguments.json b/public/DefaultArguments.json similarity index 84% rename from DefaultArguments.json rename to public/DefaultArguments.json index f0da4ef..1fa259a 100644 --- a/DefaultArguments.json +++ b/public/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/public/css/style.css similarity index 100% rename from styles/style.css rename to public/css/style.css diff --git a/styles/switch.css b/public/css/switch.css similarity index 100% rename from styles/switch.css rename to public/css/switch.css diff --git a/index.html b/public/index.html similarity index 95% rename from index.html rename to public/index.html index 70776ef..35e8ad6 100644 --- a/index.html +++ b/public/index.html @@ -10,7 +10,7 @@ var PrismProcessor = PrismProcessor || {}; - - + + - - - - - - - + diff --git a/resources/buta.jpg b/public/res/buta.jpg similarity index 100% rename from resources/buta.jpg rename to public/res/buta.jpg diff --git a/resources/default.png b/public/res/default.png similarity index 100% rename from resources/default.png rename to public/res/default.png diff --git a/resources/neko.ico b/public/res/neko.ico similarity index 100% rename from resources/neko.ico rename to public/res/neko.ico diff --git a/resources/neko.jpg b/public/res/neko.jpg similarity index 100% rename from resources/neko.jpg rename to public/res/neko.jpg diff --git a/public/src/main.js b/public/src/main.js new file mode 100644 index 0000000..f1ab32e --- /dev/null +++ b/public/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/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('' + fileName + ''); + 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('' + fileName + ''); - 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..688d0c4 --- /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, './public/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 From 6b006f07a8ed2ff0db3eff9f24f010f34d7c87ce Mon Sep 17 00:00:00 2001 From: Kollkas Date: Tue, 6 Aug 2024 17:37:31 +0200 Subject: [PATCH 4/7] it has to be /docs --- {public => docs}/DefaultArguments.json | 0 {public => docs}/css/style.css | 0 {public => docs}/css/switch.css | 0 {public => docs}/index.html | 0 {public => docs}/res/buta.jpg | Bin {public => docs}/res/default.png | Bin {public => docs}/res/neko.ico | Bin {public => docs}/res/neko.jpg | Bin {public => docs}/src/main.js | 0 {public => docs}/src/main.js.LICENSE.txt | 0 webpack.config.js | 2 +- 11 files changed, 1 insertion(+), 1 deletion(-) rename {public => docs}/DefaultArguments.json (100%) rename {public => docs}/css/style.css (100%) rename {public => docs}/css/switch.css (100%) rename {public => docs}/index.html (100%) rename {public => docs}/res/buta.jpg (100%) rename {public => docs}/res/default.png (100%) rename {public => docs}/res/neko.ico (100%) rename {public => docs}/res/neko.jpg (100%) rename {public => docs}/src/main.js (100%) rename {public => docs}/src/main.js.LICENSE.txt (100%) diff --git a/public/DefaultArguments.json b/docs/DefaultArguments.json similarity index 100% rename from public/DefaultArguments.json rename to docs/DefaultArguments.json diff --git a/public/css/style.css b/docs/css/style.css similarity index 100% rename from public/css/style.css rename to docs/css/style.css diff --git a/public/css/switch.css b/docs/css/switch.css similarity index 100% rename from public/css/switch.css rename to docs/css/switch.css diff --git a/public/index.html b/docs/index.html similarity index 100% rename from public/index.html rename to docs/index.html diff --git a/public/res/buta.jpg b/docs/res/buta.jpg similarity index 100% rename from public/res/buta.jpg rename to docs/res/buta.jpg diff --git a/public/res/default.png b/docs/res/default.png similarity index 100% rename from public/res/default.png rename to docs/res/default.png diff --git a/public/res/neko.ico b/docs/res/neko.ico similarity index 100% rename from public/res/neko.ico rename to docs/res/neko.ico diff --git a/public/res/neko.jpg b/docs/res/neko.jpg similarity index 100% rename from public/res/neko.jpg rename to docs/res/neko.jpg diff --git a/public/src/main.js b/docs/src/main.js similarity index 100% rename from public/src/main.js rename to docs/src/main.js diff --git a/public/src/main.js.LICENSE.txt b/docs/src/main.js.LICENSE.txt similarity index 100% rename from public/src/main.js.LICENSE.txt rename to docs/src/main.js.LICENSE.txt diff --git a/webpack.config.js b/webpack.config.js index 688d0c4..cc8a23a 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -5,7 +5,7 @@ module.exports = { entry: './scripts/init.js', output: { filename: 'main.js', - path: path.resolve(__dirname, './public/src'), + path: path.resolve(__dirname, './docs/src'), }, module: { rules: [ From cb490bc90cdc033b55be0f12a7044145975aa374 Mon Sep 17 00:00:00 2001 From: Kollkas <155467816+Kollkas@users.noreply.github.com> Date: Tue, 6 Aug 2024 17:39:03 +0200 Subject: [PATCH 5/7] Create CNAME --- docs/CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/CNAME 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 From a9cd32b544045f2b5f9c20122afb2e74056c854a Mon Sep 17 00:00:00 2001 From: Kollkas Date: Tue, 6 Aug 2024 18:10:00 +0200 Subject: [PATCH 6/7] update favicon path to fix broken link --- docs/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.html b/docs/index.html index 35e8ad6..5e2311c 100644 --- a/docs/index.html +++ b/docs/index.html @@ -98,7 +98,7 @@ gtag('config', 'G-43TMHBXPHM'); - + 光棱坦克工厂 From 9fe8ced49d7f13acba273adc34419890e4729c70 Mon Sep 17 00:00:00 2001 From: Kollkas Date: Tue, 6 Aug 2024 18:14:56 +0200 Subject: [PATCH 7/7] deleted CNAME and README --- CNAME | 1 - README.md | 1 - 2 files changed, 2 deletions(-) delete mode 100644 CNAME delete mode 100644 README.md diff --git a/CNAME b/CNAME deleted file mode 100644 index 6ec9bb4..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -fork.uyanide.com \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 58f7b0b..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -没错,我是澄闪厨。 \ No newline at end of file